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

# Class WireConnection<T extends IAttachProperties<T>,C extends FbWireAttachment>

java.lang.Object
org.firebirdsql.gds.ng.AbstractConnection<T,C>
org.firebirdsql.gds.ng.wire.WireConnection<T,C>

Type Parameters:
  `T` - Type of attach properties
  `C` - Type of connection handle

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`

Direct Known Subclasses:
  `WireDatabaseConnection`, `WireServiceConnection`

public abstract class WireConnection<T extends IAttachProperties<T>,C extends FbWireAttachment> extends AbstractConnection<T,C> implements Closeable
Class managing the TCP/IP connection and initial handshaking with the Firebird server.

Since:
  3.0
Author:
  Mark Rotteveel

- ## Field Summary

  ### Fields inherited from class org.firebirdsql.gds.ng.AbstractConnection

  `attachProperties`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `WireConnection(T attachProperties)`
  Creates a WireConnection (without establishing a connection to the server) with the default protocol collection.
  `protected`
  `WireConnection(T attachProperties, IEncodingFactory encodingFactory, ProtocolCollection protocols)`
  Creates a WireConnection (without establishing a connection to the server).

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final void`
  `clearAuthData()`
  Clear authentication data.
  `final void`
  `close()`
  Closes the TCP/IP connection.
  `protected abstract C`
  `createConnectionHandle(ProtocolDescriptor protocolDescriptor)`
  Creates the connection handle for this type of connection.
  `final String`
  `getAttachObjectName()`
  `final ClientAuthBlock`
  `getClientAuthBlock()`
  `protected String`
  `getCnctFile()`
  `final int`
  `getPortNumber()`
  `final int`
  `getProtocolArchitecture()`
  `final int`
  `getProtocolMinimumType()`
  `final int`
  `getProtocolVersion()`
  `final String`
  `getServerName()`
  `final XdrStreamAccess`
  `getXdrStreamAccess()`
  `final C`
  `identify()`
  Performs the connection identification phase of the Wire protocol and returns the FbWireDatabase implementation for the agreed protocol.
  `final boolean`
  `isConnected()`
  `final int`
  `readNextOperation()`
  Reads the next operation code.
  `final void`
  `resetSocketTimeout()`
  Resets the socket timeout to the configured socketTimeout.
  `final void`
  `setSoTimeout(int socketTimeout)`
  Sets the socket blocking timeout (SO_TIMEOUT) of the socket.
  `final void`
  `socketConnect()`
  Establishes the TCP/IP connection to serverName and portNumber of this connection.
  `protected abstract DbAttachInfo`
  `toDbAttachInfo(T attachProperties)`
  `final void`
  `writeDirect(byte[] data)`
  Writes directly to the `OutputStream` of the underlying socket.

  ### Methods inherited from class org.firebirdsql.gds.ng.AbstractConnection

  `createDbCryptCallback, getAttachProperties, getEncoding, getEncodingDefinition, getEncodingFactory, isLockedByCurrentThread, withLock`

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

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

- ## Constructor Details

  - ### WireConnection

    protected WireConnection(T attachProperties) throws SQLException
    Creates a WireConnection (without establishing a connection to the server) with the default protocol collection.
    Parameters:
      `attachProperties` - Attach properties
    Throws:
      `SQLException`

  - ### WireConnection

    protected WireConnection(T attachProperties, IEncodingFactory encodingFactory, ProtocolCollection protocols) throws SQLException
    Creates a WireConnection (without establishing a connection to the server).
    Parameters:
      `attachProperties` - Attach properties
      `encodingFactory` - Factory for encoding definitions
      `protocols` - The collection of protocols to use for this connection.
    Throws:
      `SQLException`

- ## Method Details

  - ### getServerName

    public final String getServerName()

  - ### getPortNumber

    public final int getPortNumber()

  - ### getCnctFile

    protected String getCnctFile()
    Returns:
      The file name to use in the p_cnct_file of the op_connect request

  - ### getAttachObjectName

    public final String getAttachObjectName()

  - ### toDbAttachInfo

    protected abstract DbAttachInfo toDbAttachInfo(T attachProperties) throws SQLException
    Throws:
      `SQLException`

  - ### isConnected

    public final boolean isConnected()

  - ### getProtocolVersion

    public final int getProtocolVersion()

  - ### getProtocolArchitecture

    public final int getProtocolArchitecture()

  - ### getProtocolMinimumType

    public final int getProtocolMinimumType()

  - ### getClientAuthBlock

    public final ClientAuthBlock getClientAuthBlock()

  - ### setSoTimeout

    public final void setSoTimeout(int socketTimeout) throws SQLException
    Sets the socket blocking timeout (SO_TIMEOUT) of the socket.

    This method can also be called if a connection is established

    Parameters:
      `socketTimeout` - Value of the socket timeout (in milliseconds)
    Throws:
      `SQLException` - If the timeout value cannot be changed

  - ### resetSocketTimeout

    public final void resetSocketTimeout() throws SQLException
    Resets the socket timeout to the configured socketTimeout. Does nothing if currently not connected.
    Throws:
      `SQLException` - If the timeout value cannot be changed

  - ### socketConnect

    public final void socketConnect() throws SQLException
    Establishes the TCP/IP connection to serverName and portNumber of this connection.
    Throws:
      `SQLTimeoutException` - if the connection cannot be established within the connect timeout (either explicitly set or implied by the OS timeout of the socket)
      `SQLException` - if the connection cannot be established.

  - ### getXdrStreamAccess

    public final XdrStreamAccess getXdrStreamAccess()

  - ### identify

    public final C identify() throws SQLException
    Performs the connection identification phase of the Wire protocol and returns the FbWireDatabase implementation for the agreed protocol.
    Specified by:
      `identify` in class `AbstractConnection<T extends IAttachProperties<T>,C extends FbWireAttachment>`
    Returns:
      FbWireDatabase
    Throws:
      `SQLException` - For exceptions connecting

  - ### clearAuthData

    public final void clearAuthData()
    Clear authentication data.

  - ### createConnectionHandle

    protected abstract C createConnectionHandle(ProtocolDescriptor protocolDescriptor)
    Creates the connection handle for this type of connection.
    Parameters:
      `protocolDescriptor` - The protocol descriptor selected by the identify phase
    Returns:
      Connection handle

  - ### readNextOperation

    public final int readNextOperation() throws IOException
    Reads the next operation code. Skips all `WireProtocolConstants.op_dummy` codes received.
    Returns:
      Operation code
    Throws:
      `IOException` - if an error occurs while reading from the underlying InputStream

  - ### close

    public final void close() throws IOException
    Closes the TCP/IP connection. This is not a normal detach operation.
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Closeable`
    Throws:
      `IOException` - if closing fails

  - ### writeDirect

    public final void writeDirect(byte[] data) throws IOException
    Writes directly to the `OutputStream` of the underlying socket.
    Parameters:
      `data` - Data to write
    Throws:
      `IOException` - If there is no socket, the socket is closed, or for errors writing to the socket.