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()