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 java.lang.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
`protected` `AbstractWireOperations​(WireConnection<?,​?> connection, WarningMessageCallback defaultWarningMessageCallback)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected void` `addServerKeys​(byte[] serverKeys)`
`protected void` `clearServerKeys()`
`void` `consumePackets​(int numberOfResponses, WarningMessageCallback warningCallback)` Consumes packets notifying for warnings, but ignoring exceptions thrown from the packet.
`protected IAttachProperties<?>` `getAttachProperties()`
`protected ClientAuthBlock` `getClientAuthBlock()`
`protected WireConnection<?,​?>` `getConnection()`
`protected WarningMessageCallback` `getDefaultWarningMessageCallback()`
`protected Encoding` `getEncoding()`
`protected java.util.List<KnownServerKey.PluginSpecificData>` `getPluginSpecificData()`
`protected XdrInputStream` `getXdrIn()` Gets the XdrInputStream.
`protected XdrOutputStream` `getXdrOut()` Gets the XdrOutputStream.
`XdrStreamAccess` `getXdrStreamAccess()`
`void` `handleCryptKeyCallback​(DbCryptCallback dbCryptCallback)` Handles the database encryption key callback.
`protected Response` `processOperation​(int operation)` Reads the response based on the specified operation.
`void` `processResponse​(Response response)`
`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.
`GenericResponse` `readGenericResponse​(WarningMessageCallback warningCallback)` Convenience method to read a Response to a GenericResponse
`int` `readNextOperation()` Reads the next operation code, after processing deferred packets.
`Response` `readOperationResponse​(int operationCode, WarningMessageCallback warningCallback)` Reads the response from the server when the operation code has already been read.
`Response` `readResponse​(WarningMessageCallback warningCallback)` Reads the response from the server.
`SqlResponse` `readSqlResponse​(WarningMessageCallback warningCallback)` Convenience method to read a Response to a SqlResponse
`java.sql.SQLException` `readStatusVector()` Process the status vector and returns the associated `SQLException` instance.
`protected java.sql.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 LockCloseable` `withLock()`
`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, enqueueDeferredAction, processDeferredActions`

### Constructor Detail

#### AbstractWireOperations

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

### Method Detail

#### 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 java.sql.SQLException

Gets the XdrInputStream.

Returns:
  Instance of XdrInputStream
Throws:
  `java.sql.SQLException` - If no connection is opened or when exceptions occur retrieving the InputStream

#### getXdrOut

    protected final XdrOutputStream getXdrOut()
                                       throws java.sql.SQLException

Gets the XdrOutputStream.

Returns:
  Instance of XdrOutputStream
Throws:
  `java.sql.SQLException` - If no connection is opened or when exceptions occur retrieving the OutputStream

#### readStatusVector

    public final java.sql.SQLException readStatusVector()
                                                 throws java.sql.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:
  `java.sql.SQLException` - for errors reading or processing the status vector

#### readStatusVector

    protected final java.sql.SQLException readStatusVector​(XdrInputStream xdrIn)
                                                    throws java.sql.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:
  `java.sql.SQLException` - for errors reading or processing the status vector
See Also:
  `FbWireOperations.readStatusVector()`

#### readResponse

    public final Response readResponse​(WarningMessageCallback warningCallback)
                                throws java.sql.SQLException,
                                       java.io.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:
  `java.sql.SQLException` - For errors returned from the server, or when attempting to read
  `java.io.IOException` - For errors reading the response from the connection.

#### readOperationResponse

    public final Response readOperationResponse​(int operationCode,
                                                WarningMessageCallback warningCallback)
                                         throws java.sql.SQLException,
                                                java.io.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:
  `java.sql.SQLException` - For errors returned from the server, or when attempting to read
  `java.io.IOException` - For errors reading the response from the connection.
See Also:
  `FbWireOperations.readResponse(WarningMessageCallback)`

#### readNextOperation

    public final int readNextOperation()
                                throws java.io.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:
  `java.io.IOException` - for errors reading the operation from the connection

#### processOperation

    protected final Response processOperation​(int operation)
                                       throws java.sql.SQLException,
                                              java.io.IOException

Reads the response based on the specified operation.

Parameters:
  `operation` - Database operation
Returns:
  Response object for the operation
Throws:
  `java.sql.SQLException` - For errors reading the response from the connection.
  `java.io.IOException` - For errors reading the response from the connection.

#### readBatchCompletionResponse

    protected BatchCompletionResponse readBatchCompletionResponse​(XdrInputStream xdrIn)
                                                           throws java.sql.SQLException,
                                                                  java.io.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:
  `java.sql.SQLException` - for errors reading the response from the connection
  `java.sql.SQLFeatureNotSupportedException` - when the protocol version does not support this response
  `java.io.IOException` - for errors reading the response from the connection
Since:
  5

#### processResponse

    public final void processResponse​(Response response)
                               throws java.sql.SQLException

Specified by:
  `processResponse` in interface `FbWireOperations`
Parameters:
  `response` - Response to process
Throws:
  `java.sql.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 java.sql.SQLException,
                                                     java.io.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:
  `java.sql.SQLException` - For errors returned from the server, or when attempting to read.
  `java.io.IOException` - For errors reading the response from the connection.

#### readSqlResponse

    public final SqlResponse readSqlResponse​(WarningMessageCallback warningCallback)
                                      throws java.sql.SQLException,
                                             java.io.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:
  `java.sql.SQLException` - For errors returned from the server, or when attempting to read.
  `java.io.IOException` - For errors reading the response from the connection.

#### handleCryptKeyCallback

    public void handleCryptKeyCallback​(DbCryptCallback dbCryptCallback)
                                throws java.io.IOException,
                                       java.sql.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:
  `java.io.IOException` - For errors reading data from the socket
  `java.sql.SQLException` - For database errors
  `java.sql.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 java.io.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:
  `java.io.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 java.sql.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:
  `java.sql.SQLException` - If this attachment is closed, the value of `milliseconds` is smaller than 0, or if setting the timeout fails.
  `java.sql.SQLFeatureNotSupportedException` - If this attachment doesn't support changing the network timeout.

#### withLock

    protected final LockCloseable withLock()

#### addServerKeys

    protected final void addServerKeys​(byte[] serverKeys)
                                throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### clearServerKeys

    protected final void clearServerKeys()

#### getClientAuthBlock

    protected final ClientAuthBlock getClientAuthBlock()

#### getAttachProperties

    protected final IAttachProperties<?> getAttachProperties()

Returns:
  Immutable attach properties

#### getPluginSpecificData

    protected final java.util.List<KnownServerKey.PluginSpecificData> getPluginSpecificData()

#### getConnection

    protected final WireConnection<?,​?> getConnection()

#### getDefaultWarningMessageCallback

    protected final WarningMessageCallback getDefaultWarningMessageCallback()