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:
  `java.io.Closeable`, `java.lang.AutoCloseable`

Direct Known Subclasses:
  `WireDatabaseConnection`, `WireServiceConnection`

    public abstract class WireConnection<T extends IAttachProperties<T>,​C extends FbWireAttachment>
    extends AbstractConnection<T,​C>
    implements java.io.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
`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

All Methods Instance Methods Abstract Methods Concrete Methods
`void` `clearAuthData()` Clear authentication data.
`void` `close()` Closes the TCP/IP connection.
`protected abstract C` `createConnectionHandle​(ProtocolDescriptor protocolDescriptor)` Creates the connection handle for this type of connection.
`java.lang.String` `getAttachObjectName()`
`ClientAuthBlock` `getClientAuthBlock()`
`protected java.lang.String` `getCnctFile()`
`int` `getPortNumber()`
`int` `getProtocolArchitecture()`
`int` `getProtocolMinimumType()`
`int` `getProtocolVersion()`
`java.lang.String` `getServerName()`
`XdrStreamAccess` `getXdrStreamAccess()`
`C` `identify()` Performs the connection identification phase of the Wire protocol and returns the FbWireDatabase implementation for the agreed protocol.
`boolean` `isConnected()`
`int` `readNextOperation()` Reads the next operation code.
`void` `resetSocketTimeout()` Resets the socket timeout to the configured socketTimeout.
`void` `setSoTimeout​(int socketTimeout)` Sets the socket blocking timeout (SO_TIMEOUT) of the socket.
`void` `socketConnect()` Establishes the TCP/IP connection to serverName and portNumber of this Connection
`protected abstract DbAttachInfo` `toDbAttachInfo​(T attachProperties)`
`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 Detail

#### WireConnection

    protected WireConnection​(T attachProperties)
                      throws java.sql.SQLException

Creates a WireConnection (without establishing a connection to the server) with the default protocol collection.

Parameters:
  `attachProperties` - Attach properties
Throws:
  `java.sql.SQLException`

#### WireConnection

    protected WireConnection​(T attachProperties,
                             IEncodingFactory encodingFactory,
                             ProtocolCollection protocols)
                      throws java.sql.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:
  `java.sql.SQLException`

### Method Detail

#### getServerName

    public final java.lang.String getServerName()

#### getPortNumber

    public final int getPortNumber()

#### getCnctFile

    protected java.lang.String getCnctFile()

Returns:
  The file name to use in the p_cnct_file of the op_connect request

#### getAttachObjectName

    public final java.lang.String getAttachObjectName()

#### toDbAttachInfo

    protected abstract DbAttachInfo toDbAttachInfo​(T attachProperties)
                                            throws java.sql.SQLException

Throws:
  `java.sql.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 java.sql.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:
  `java.sql.SQLException` - If the timeout value cannot be changed

#### resetSocketTimeout

    public final void resetSocketTimeout()
                                  throws java.sql.SQLException

Resets the socket timeout to the configured socketTimeout. Does nothing if currently not connected.

Throws:
  `java.sql.SQLException` - If the timeout value cannot be changed

#### socketConnect

    public final void socketConnect()
                             throws java.sql.SQLException

Establishes the TCP/IP connection to serverName and portNumber of this Connection

Throws:
  `java.sql.SQLTimeoutException` - If the connection cannot be established within the connect timeout (either explicitly set or implied by the OS timeout of the socket)
  `java.sql.SQLException` - If the connection cannot be established.

#### getXdrStreamAccess

    public final XdrStreamAccess getXdrStreamAccess()

#### identify

    public final C identify()
                     throws java.sql.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:
  `java.sql.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 java.sql.SQLException,
                                       java.io.IOException

Reads the next operation code. Skips all `WireProtocolConstants.op_dummy` codes received.

Returns:
  operation code
Throws:
  `java.sql.SQLException` - when the connection is closed
  `java.io.IOException` - if an error occurs while reading from the underlying InputStream

#### close

    public final void close()
                     throws java.io.IOException

Closes the TCP/IP connection. This is not a normal detach operation.

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `java.io.Closeable`
Throws:
  `java.io.IOException` - if closing fails

#### writeDirect

    public final void writeDirect​(byte[] data)
                           throws java.io.IOException

Writes directly to the `OutputStream` of the underlying socket.

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.