Module org.firebirdsql.jaybird
Package org.firebirdsql.gds.ng.wire

# Class AbstractWireOperations

java.lang.Object
org.firebirdsql.gds.ng.wire.AbstractWireOperations

All Implemented Interfaces:
  `FbWireOperations`

Direct Known Subclasses:
  `V10WireOperations`

public abstract class AbstractWireOperations extends Object implements FbWireOperations

Since:
  3.0
Author:
  Mark Rotteveel

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from interface org.firebirdsql.gds.ng.wire.FbWireOperations

  `FbWireOperations.ProcessAttachCallback`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `AbstractWireOperations(WireConnection<?,?> connection, WarningMessageCallback defaultWarningMessageCallback)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected final void`
  `addServerKeys(byte[] serverKeys)`
  `protected final void`
  `clearServerKeys()`
  `final void`
  `consumePackets(int numberOfResponses, WarningMessageCallback warningCallback)`
  Consumes packets notifying for warnings, but ignoring exceptions thrown from the packet.
  `protected final IAttachProperties<?>`
  `getAttachProperties()`
  `protected final ClientAuthBlock`
  `getClientAuthBlock()`
  `protected final WireConnection<?,?>`
  `getConnection()`
  `protected final WarningMessageCallback`
  `getDefaultWarningMessageCallback()`
  `protected final Encoding`
  `getEncoding()`
  `protected final List<KnownServerKey.PluginSpecificData>`
  `getPluginSpecificData()`
  `protected final XdrInputStream`
  `getXdrIn()`
  Gets the XdrInputStream.
  `protected final XdrOutputStream`
  `getXdrOut()`
  Gets the XdrOutputStream.
  `final XdrStreamAccess`
  `getXdrStreamAccess()`
  `void`
  `handleCryptKeyCallback(DbCryptCallback dbCryptCallback)`
  Handles the database encryption key callback.
  `protected final Response`
  `processOperation(int operation)`
  Reads the response based on the specified operation.
  `final void`
  `processResponse(Response response)`
  `final void`
  `processResponseWarnings(Response response, WarningMessageCallback warningCallback)`
  Checks if the response included a warning and signals that warning to the WarningMessageCallback.
  `protected BatchCompletionResponse`
  `readBatchCompletionResponse(XdrInputStream xdrIn)`
  Reads the batch completion response (`op_batch_cs`) without reading the operation code itself.
  `final GenericResponse`
  `readGenericResponse(WarningMessageCallback warningCallback)`
  Convenience method to read a Response to a GenericResponse
  `protected InlineBlobResponse`
  `readInlineBlobResponse(XdrInputStream xdrIn)`
  Reads the inline blob response (`op_inline_blob`) without reading the operation code itself.
  `final int`
  `readNextOperation()`
  Reads the next operation code, after processing deferred packets.
  `final Response`
  `readOperationResponse(int operationCode, WarningMessageCallback warningCallback)`
  Reads the response from the server when the operation code has already been read.
  `final Response`
  `readResponse(WarningMessageCallback warningCallback)`
  Reads the response from the server.
  `final SqlResponse`
  `readSqlResponse(WarningMessageCallback warningCallback)`
  Convenience method to read a Response to a SqlResponse
  `final SQLException`
  `readStatusVector()`
  Process the status vector and returns the associated `SQLException` instance.
  `protected final SQLException`
  `readStatusVector(XdrInputStream xdrIn)`
  Process the status vector from `xdrIn` and returns the associated `SQLException` instance.
  `void`
  `setNetworkTimeout(int milliseconds)`
  Sets the network timeout for this attachment.
  `protected final LockCloseable`
  `withLock()`
  `final void`
  `writeDirect(byte[] data)`
  Writes directly to the `OutputStream` of the underlying connection.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.firebirdsql.gds.ng.wire.FbWireOperations

  `authReceiveResponse, completeDeferredActions, enqueueDeferredAction, processDeferredActions`

- ## Constructor Details

  - ### AbstractWireOperations

    protected AbstractWireOperations(WireConnection<?,?> connection, WarningMessageCallback defaultWarningMessageCallback)

- ## Method Details

  - ### getXdrStreamAccess

    public final XdrStreamAccess getXdrStreamAccess()
    Specified by:
      `getXdrStreamAccess` in interface `FbWireOperations`
    Returns:
      Instance of `XdrStreamAccess` for this service.

  - ### getEncoding

    protected final Encoding getEncoding()

  - ### getXdrIn

    protected final XdrInputStream getXdrIn() throws SQLException
    Gets the XdrInputStream.
    Returns:
      Instance of XdrInputStream
    Throws:
      `SQLException` - If no connection is opened or when exceptions occur retrieving the InputStream

  - ### getXdrOut

    protected final XdrOutputStream getXdrOut() throws SQLException
    Gets the XdrOutputStream.
    Returns:
      Instance of XdrOutputStream
    Throws:
      `SQLException` - If no connection is opened or when exceptions occur retrieving the OutputStream

  - ### readStatusVector

    public final SQLException readStatusVector() throws SQLException
    Description copied from interface: `FbWireOperations`
    Process the status vector and returns the associated `SQLException` instance.

    NOTE: This method returns the SQLException read from the status vector, and only throws SQLException when an error occurs processing the status vector.

    Specified by:
      `readStatusVector` in interface `FbWireOperations`
    Returns:
      SQLException from the status vector
    Throws:
      `SQLException` - for errors reading or processing the status vector

  - ### readStatusVector

    protected final SQLException readStatusVector(XdrInputStream xdrIn) throws SQLException
    Process the status vector from `xdrIn` and returns the associated `SQLException` instance.
    Parameters:
      `xdrIn` - XDR input stream to read from
    Returns:
      SQLException from the status vector
    Throws:
      `SQLException` - for errors reading or processing the status vector
    See Also:
      - `FbWireOperations.readStatusVector()`

  - ### readResponse

    public final Response readResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
    Description copied from interface: `FbWireOperations`
    Reads the response from the server.
    Specified by:
      `readResponse` in interface `FbWireOperations`
    Parameters:
      `warningCallback` - Callback object for warnings, `null` for default callback
    Returns:
      `Response` read.
    Throws:
      `SQLException` - For errors returned from the server, or when attempting to read
      `IOException` - For errors reading the response from the connection.

  - ### readOperationResponse

    public final Response readOperationResponse(int operationCode, WarningMessageCallback warningCallback) throws SQLException, IOException
    Description copied from interface: `FbWireOperations`
    Reads the response from the server when the operation code has already been read.
    Specified by:
      `readOperationResponse` in interface `FbWireOperations`
    Parameters:
      `operationCode` - The operation code
      `warningCallback` - Callback object for warnings, `null` for default callback
    Returns:
      `Response` read.
    Throws:
      `SQLException` - For errors returned from the server, or when attempting to read
      `IOException` - For errors reading the response from the connection.
    See Also:
      - `FbWireOperations.readResponse(WarningMessageCallback)`

  - ### readNextOperation

    public final int readNextOperation() throws IOException
    Description copied from interface: `FbWireOperations`
    Reads the next operation code, after processing deferred packets.

    In general, calling `FbWireOperations.readResponse(WarningMessageCallback)` or one of the specific `readXXXResponse` methods should be preferred to read the response code and the response body. Use this method only for reading custom responses, or if you need to process the response in a way that is not possible with `FbWireOperations.readResponse(WarningMessageCallback)`.

    Specified by:
      `readNextOperation` in interface `FbWireOperations`
    Returns:
      next operation
    Throws:
      `IOException` - for errors reading the operation from the connection

  - ### processOperation

    protected final Response processOperation(int operation) throws SQLException, IOException
    Reads the response based on the specified operation.
    Parameters:
      `operation` - Database operation
    Returns:
      Response object for the operation
    Throws:
      `SQLException` - For errors reading the response from the connection.
      `IOException` - For errors reading the response from the connection.

  - ### readBatchCompletionResponse

    protected BatchCompletionResponse readBatchCompletionResponse(XdrInputStream xdrIn) throws SQLException, IOException
    Reads the batch completion response (`op_batch_cs`) without reading the operation code itself.
    Parameters:
      `xdrIn` - XDR input stream to read
    Returns:
      batch completion response
    Throws:
      `SQLException` - for errors reading the response from the connection
      `SQLFeatureNotSupportedException` - when the protocol version does not support this response
      `IOException` - for errors reading the response from the connection
    Since:
      5

  - ### readInlineBlobResponse

    protected InlineBlobResponse readInlineBlobResponse(XdrInputStream xdrIn) throws SQLException, IOException
    Reads the inline blob response (`op_inline_blob`) without reading the operation code itself.
    Parameters:
      `xdrIn` - XDR input stream to read
    Returns:
      inline blob response
    Throws:
      `SQLException` - for errors reading the response from the connection
      `SQLFeatureNotSupportedException` - when the protocol version does not support this response
      `IOException` - for errors reading the response from the connection
    Since:
      6.0.2

  - ### processResponse

    public final void processResponse(Response response) throws SQLException
    Specified by:
      `processResponse` in interface `FbWireOperations`
    Parameters:
      `response` - Response to process
    Throws:
      `SQLException` - For errors returned from the server.

  - ### processResponseWarnings

    public final void processResponseWarnings(Response response, WarningMessageCallback warningCallback)
    Checks if the response included a warning and signals that warning to the WarningMessageCallback.
    Specified by:
      `processResponseWarnings` in interface `FbWireOperations`
    Parameters:
      `response` - Response to process

  - ### readGenericResponse

    public final GenericResponse readGenericResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
    Description copied from interface: `FbWireOperations`
    Convenience method to read a Response to a GenericResponse
    Specified by:
      `readGenericResponse` in interface `FbWireOperations`
    Parameters:
      `warningCallback` - Callback object for warnings, `null` for default callback
    Returns:
      GenericResponse
    Throws:
      `SQLException` - For errors returned from the server, or when attempting to read.
      `IOException` - For errors reading the response from the connection.

  - ### readSqlResponse

    public final SqlResponse readSqlResponse(WarningMessageCallback warningCallback) throws SQLException, IOException
    Description copied from interface: `FbWireOperations`
    Convenience method to read a Response to a SqlResponse
    Specified by:
      `readSqlResponse` in interface `FbWireOperations`
    Parameters:
      `warningCallback` - Callback object for warnings, `null` for default callback
    Returns:
      SqlResponse
    Throws:
      `SQLException` - For errors returned from the server, or when attempting to read.
      `IOException` - For errors reading the response from the connection.

  - ### handleCryptKeyCallback

    public void handleCryptKeyCallback(DbCryptCallback dbCryptCallback) throws IOException, SQLException
    Description copied from interface: `FbWireOperations`
    Handles the database encryption key callback.
    Specified by:
      `handleCryptKeyCallback` in interface `FbWireOperations`
    Parameters:
      `dbCryptCallback` - Database encryption callback plugin
    Throws:
      `IOException` - For errors reading data from the socket
      `SQLException` - For database errors
      `SQLFeatureNotSupportedException` - If this protocol version does not support crypt key callbacks

  - ### consumePackets

    public final void consumePackets(int numberOfResponses, WarningMessageCallback warningCallback)
    Description copied from interface: `FbWireOperations`
    Consumes packets notifying for warnings, but ignoring exceptions thrown from the packet.

    This method should only be used inside the implementation if either packets need to be ignored, or to ensure that there is no backlog of packets (eg when an exception occurs during processing of multiple package responses).

    Specified by:
      `consumePackets` in interface `FbWireOperations`
    Parameters:
      `numberOfResponses` - Number of responses to consume.
      `warningCallback` - Callback for warnings

  - ### writeDirect

    public final void writeDirect(byte[] data) throws IOException
    Description copied from interface: `FbWireOperations`
    Writes directly to the `OutputStream` of the underlying connection.

    Use of this method might lead to hard to find race conditions in the protocol. It is currently only used to allow `FbDatabase.cancelOperation(int)` to work.

    Specified by:
      `writeDirect` in interface `FbWireOperations`
    Parameters:
      `data` - Data to write
    Throws:
      `IOException` - If there is no socket, the socket is closed, or for errors writing to the socket.
    See Also:
      - `WireConnection.writeDirect(byte[])`

  - ### setNetworkTimeout

    public void setNetworkTimeout(int milliseconds) throws SQLException
    Description copied from interface: `FbWireOperations`
    Sets the network timeout for this attachment.
    Specified by:
      `setNetworkTimeout` in interface `FbWireOperations`
    Parameters:
      `milliseconds` - Timeout in milliseconds; 0 means no timeout. If the attachment doesn't support milliseconds, it should round up to the nearest second.
    Throws:
      `SQLException` - If this attachment is closed, the value of `milliseconds` is smaller than 0, or if setting the timeout fails.
      `SQLFeatureNotSupportedException` - If this attachment doesn't support changing the network timeout.

  - ### withLock

    protected final LockCloseable withLock()

  - ### addServerKeys

    protected final void addServerKeys(byte[] serverKeys) throws SQLException
    Throws:
      `SQLException`

  - ### clearServerKeys

    protected final void clearServerKeys()

  - ### getClientAuthBlock

    protected final ClientAuthBlock getClientAuthBlock()

  - ### getAttachProperties

    protected final IAttachProperties<?> getAttachProperties()
    Returns:
      Immutable attach properties

  - ### getPluginSpecificData

    protected final List<KnownServerKey.PluginSpecificData> getPluginSpecificData()

  - ### getConnection

    protected final WireConnection<?,?> getConnection()

  - ### getDefaultWarningMessageCallback

    protected final WarningMessageCallback getDefaultWarningMessageCallback()