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 SQLException, IOException
Reads the next operation code. Skips all `WireProtocolConstants.op_dummy` codes received.

Returns:
  Operation code
Throws:
  `SQLException` - when the connection is closed
  `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.