Package org.firebirdsql.gds.ng.wire

## Interface ProtocolDescriptor

All Known Implementing Classes:
  `AbstractProtocolDescriptor`, `Version10Descriptor`, `Version11Descriptor`, `Version12Descriptor`, `Version13Descriptor`, `Version15Descriptor`, `Version16Descriptor`, `Version18Descriptor`

    public interface ProtocolDescriptor

Descriptor of protocol information.

The driver maintains a list of default protocol descriptors that are loaded using a `ServiceLoader` from the file `META-INF/services/org.firebirdsql.gds.ng.wire.ProtocolDescriptor`

Protocol descriptors loaded this way are required to adhere to the following rules:

- They provide a no-arg constructor
- All instances of a specific implementation class created with the no-arg constructor have the same `Object.hashCode()`.
- All instances of a specific implementation class created with the no-arg constructor are considered equal to each other by the `Object.equals(Object)` implementation

Since:
  3.0
Author:
  Mark Rotteveel

### Method Summary

All Methods Instance Methods Abstract Methods
`FbWireAsynchronousChannel` `createAsynchronousChannel​(FbWireDatabase database)` Create a disconnected asynchronous channel.
`ServiceParameterBuffer` `createAttachServiceParameterBuffer​(WireServiceConnection connection)` Create an attach `ServiceParameterBuffer` implementation and populate it with supported properties for this protocol version.
`BlrCalculator` `createBlrCalculator​(FbWireDatabase database)` Create `BlrCalculator` implementation for this protocol version.
`FbWireDatabase` `createDatabase​(WireDatabaseConnection connection)` Create `FbWireDatabase` implementation for this protocol.
`DatabaseParameterBuffer` `createDatabaseParameterBuffer​(WireDatabaseConnection connection)` Create `DatabaseParameterBuffer` implementation and populate it with supported properties for this protocol version.
`FbWireBlob` `createInputBlob​(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer, long blobId)` Create an input `FbWireBlob` implementation for this protocol version.
`FbWireBlob` `createOutputBlob​(FbWireDatabase database, FbWireTransaction transaction, BlobParameterBuffer blobParameterBuffer)` Create an output `FbWireBlob` implementation for this protocol version.
`FbWireService` `createService​(WireServiceConnection connection)` Create `FbWireService` implementation for this protocol.
`ServiceParameterBuffer` `createServiceParameterBuffer​(WireServiceConnection connection)` Creates a normal `ServiceParameterBuffer`.
`ServiceRequestBuffer` `createServiceRequestBuffer​(WireServiceConnection connection)`
`FbWireStatement` `createStatement​(FbWireDatabase database)` Create `FbStatement` implementation for this protocol.
`FbWireTransaction` `createTransaction​(FbWireDatabase database, int transactionHandle, TransactionState initialState)` Create `FbTransaction` implementation for this protocol.
`FbWireOperations` `createWireOperations​(WireConnection<?,​?> connection, WarningMessageCallback defaultWarningMessageCallback)` Create an `FbWireOperations` implementation for this protocol version.
`int` `getArchitecture()`
`int` `getMaximumType()`
`int` `getMinimumType()`
`int` `getVersion()`
`int` `getWeight()`
`boolean` `supportsWireCompression()`

### Method Detail

#### getVersion

    int getVersion()

Returns:
  The protocol version

#### getArchitecture

    int getArchitecture()

Returns:
  Protocol architecture

#### getMinimumType

    int getMinimumType()

Returns:
  Minimum supported protocol type

#### getMaximumType

    int getMaximumType()

Returns:
  Maximum supported protocol type

#### supportsWireCompression

    boolean supportsWireCompression()

Returns:
  `true` when zlib wire compression is supported

#### getWeight

    int getWeight()

Returns:
  Preference weight

#### createDatabase

    FbWireDatabase createDatabase​(WireDatabaseConnection connection)

Create `FbWireDatabase` implementation for this protocol.

Parameters:
  `connection` - WireDatabaseConnection to this database
Returns:
  FbWireDatabase implementation

#### createService

    FbWireService createService​(WireServiceConnection connection)

Create `FbWireService` implementation for this protocol.

Parameters:
  `connection` - WireServiceConnection to this service
Returns:
  FbWireService implementation

#### createTransaction

    FbWireTransaction createTransaction​(FbWireDatabase database,
                                        int transactionHandle,
                                        TransactionState initialState)

Create `FbTransaction` implementation for this protocol.

Parameters:
  `database` - FbWireDatabase of the current database
  `transactionHandle` - Transaction handle
  `initialState` - Initial transaction state (either `TransactionState.ACTIVE` or `TransactionState.PREPARED`).
Returns:
  FbTransaction implementation

#### createStatement

    FbWireStatement createStatement​(FbWireDatabase database)

Create `FbStatement` implementation for this protocol.

Parameters:
  `database` - FbWireDatabase of the current database
Returns:
  FbStatement implementation

#### createDatabaseParameterBuffer

    DatabaseParameterBuffer createDatabaseParameterBuffer​(WireDatabaseConnection connection)
                                                   throws java.sql.SQLException

Create `DatabaseParameterBuffer` implementation and populate it with supported properties for this protocol version.

Parameters:
  `connection` - Connection
Returns:
  DatabaseParameterBuffer implementation
Throws:
  `java.sql.SQLException`

#### createAttachServiceParameterBuffer

    ServiceParameterBuffer createAttachServiceParameterBuffer​(WireServiceConnection connection)
                                                       throws java.sql.SQLException

Create an attach `ServiceParameterBuffer` implementation and populate it with supported properties for this protocol version.

Parameters:
  `connection` - Connection
Returns:
  ServiceParameterBuffer implementation for attach
Throws:
  `java.sql.SQLException`

#### createServiceParameterBuffer

    ServiceParameterBuffer createServiceParameterBuffer​(WireServiceConnection connection)

Creates a normal `ServiceParameterBuffer`.

Parameters:
  `connection` - Connection
Returns:
  ServiceParameterBuffer implementation

#### createServiceRequestBuffer

    ServiceRequestBuffer createServiceRequestBuffer​(WireServiceConnection connection)

Returns:
  An empty service request buffer

#### createBlrCalculator

    BlrCalculator createBlrCalculator​(FbWireDatabase database)

Create `BlrCalculator` implementation for this protocol version.

Parameters:
  `database` - FbWireDatabase of the current database
Returns:
  BlrCalculator implementation

#### createOutputBlob

    FbWireBlob createOutputBlob​(FbWireDatabase database,
                                FbWireTransaction transaction,
                                BlobParameterBuffer blobParameterBuffer)

Create an output `FbWireBlob` implementation for this protocol version.

Parameters:
  `database` - FbWireDatabase of the current database
  `transaction` - FbWireTransaction to associate with the blob
  `blobParameterBuffer` - Blob Parameter Buffer
Returns:
  FbWireBlob implementation

#### createInputBlob

    FbWireBlob createInputBlob​(FbWireDatabase database,
                               FbWireTransaction transaction,
                               BlobParameterBuffer blobParameterBuffer,
                               long blobId)

Create an input `FbWireBlob` implementation for this protocol version.

Parameters:
  `database` - FbWireDatabase of the current database
  `transaction` - FbWireTransaction to associate with the blob
  `blobParameterBuffer` - Blob Parameter Buffer
  `blobId` - Blob Id (must be non-zero for input blob)
Returns:
  FbWireBlob implementation

#### createAsynchronousChannel

    FbWireAsynchronousChannel createAsynchronousChannel​(FbWireDatabase database)

Create a disconnected asynchronous channel.

Parameters:
  `database` - The parent database handle.
Returns:
  Asynchronous channel implementation

#### createWireOperations

    FbWireOperations createWireOperations​(WireConnection<?,​?> connection,
                                          WarningMessageCallback defaultWarningMessageCallback)

Create an `FbWireOperations` implementation for this protocol version.

Parameters:
  `connection` - WireConnection instance
  `defaultWarningMessageCallback` - Default warning message callback
Returns:
  Wire operations implementation