Package tigase.net

# Class IOService<RefObject>

java.lang.Object
tigase.net.IOService<RefObject>

Type Parameters:
  `RefObject` - is a reference object stored by this service. This is e reference to higher level data object keeping more information about the connection.

All Implemented Interfaces:
  `Callable<IOService<?>>`, `TLSEventHandler`, `IOListener`

Direct Known Subclasses:
  `XMPPIOService`

public abstract class IOService<RefObject> extends Object implements Callable<IOService<?>>, TLSEventHandler, IOListener
`IOService` offers thread safe `call()` method execution, however you must be prepared that other methods can be called simultaneously like `stop()`, `getProtocol()` or `isConnected()`.
It is recommended that developers extend `AbsractServerService` rather then implement `ServerService` interface directly.

If you directly implement `ServerService` interface you must take care about `SocketChannel` I/O, queuing tasks, processing results and thread safe execution of `call()` method. If you however extend `IOService` class all this basic operation are implemented and you have only to take care about parsing data received from network socket. Parsing data is expected to be implemented in `parseData(char[] data)` method.

Created: Tue Sep 28 23:00:34 2004

Author:
  Artur Hefczyc

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected CharBuffer`
  `cb`
  `static final String`
  `CERT_CHECK_RESULT`
  `static final String`
  `CERT_REQUIRED_DOMAIN`
  `protected CharsetDecoder`
  `decoder`
  `protected CharsetEncoder`
  `encoder`
  `static final String`
  `HOSTNAME_KEY`
  `static final String`
  `LOCAL_CERT_CHECK_RESULT`
  `protected byte[]`
  `partialCharacterBytes`
  The saved partial bytes for multi-byte UTF-8 characters between reads
  `static final String`
  `PORT_TYPE_PROP_KEY`
  `static final String`
  `SESSION_ID_KEY`
  This is key used to store session ID in temporary session data storage.
  `static final String`
  `SSL_PROTOCOLS_KEY`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `IOService()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `accept(SocketChannel socketChannel)`
  Deprecated.
  `void`
  `accept(SocketChannel socketChannel, Integer socketInputSize)`
  `protected ByteOrder`
  `byteOrder()`
  `IOService<?>`
  `call()`
  `boolean`
  `checkBufferLimit(int bufferSize)`
  `ConnectionType`
  `connectionType()`
  `protected boolean`
  `debug(char[] msg)`
  `protected boolean`
  `debug(String msg, String prefix)`
  `void`
  `forceStop()`
  `long`
  `getBuffOverflow(boolean reset)`
  `long`
  `getBytesReceived(boolean reset)`
  `long`
  `getBytesSent(boolean reset)`
  `CertificateContainerIfc`
  `getCertificateContainer()`
  `JID`
  `getConnectionId()`
  `JID`
  `getDataReceiver()`
  `protected IOInterface`
  `getIO()`
  `long`
  `getLastTransferTime()`
  This method returns the time of last transfer in any direction through this service.
  `String`
  `getLocalAddress()`
  `Certificate`
  `getLocalCertificate()`
  `int`
  `getLocalPort()`
  Method returns local port of opened socket
  `Certificate`
  `getPeerCertificate()`
  `long[]`
  `getReadCounters()`
  `RefObject`
  `getRefObject()`
  `String`
  `getRemoteAddress()`
  Returns a remote IP address for the TCP/IP connection.
  `ConcurrentMap<String,Object>`
  `getSessionData()`
  `SocketChannel`
  `getSocketChannel()`
  `int`
  `getSocketInputSize()`
  `void`
  `getStatistics(StatisticsList list, boolean reset)`
  `byte[]`
  `getTlsUniqueId()`
  `long`
  `getTotalBuffOverflow()`
  `long`
  `getTotalBytesReceived()`
  `long`
  `getTotalBytesSent()`
  `String`
  `getUniqueId()`
  `long[]`
  `getWriteCounters()`
  `protected boolean`
  `handleMalformedInput(ByteBuffer buffer, CharBuffer cb)`
  `void`
  `handshakeCompleted(TLSWrapper wrapper)`
  `boolean`
  `isConnected()`
  `protected boolean`
  `isInputBufferEmpty()`
  `protected boolean`
  `isSocketServiceReady()`
  `protected abstract void`
  `processSocketData()`
  `abstract void`
  `processWaitingPackets()`
  `protected ByteBuffer`
  `readBytes()`
  `protected void`
  `readCompleted()`
  `protected char[]`
  `readData()`
  `protected abstract int`
  `receivedPackets()`
  `void`
  `setBufferLimit(int bufferLimit)`
  `void`
  `setCertificateContainer(CertificateContainerIfc certificateContainer)`
  `void`
  `setConnectionId(JID connectionId)`
  `void`
  `setDataReceiver(JID address)`
  `void`
  `setIOServiceListener(IOServiceListener<IOService<RefObject>> sl)`
  `void`
  `setRefObject(RefObject refObject)`
  `void`
  `setSessionData(Map<String,Object> props)`
  `protected void`
  `setSocketServiceReady(boolean value)`
  `void`
  `setSslContextContainer(SSLContextContainerIfc sslContextContainer)`
  `void`
  `setX509TrustManagers(TrustManager[] trustManager)`
  `void`
  `startSSL(boolean clientMode, boolean wantClientAuth, boolean needClientAuth)`
  `void`
  `startTLS(boolean clientMode, boolean wantClientAuth, boolean needClientAuth)`
  `void`
  `startZLib(int level)`
  `void`
  `stop()`
  `String`
  `toString()`
  `boolean`
  `waitingToRead()`
  `boolean`
  `waitingToSend()`
  `int`
  `waitingToSendSize()`
  `protected void`
  `writeBytes(ByteBuffer data)`
  `protected void`
  `writeData(String data)`

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

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

- ## Field Details

  - ### CERT_CHECK_RESULT

    public static final String CERT_CHECK_RESULT
    See Also:
      - Constant Field Values

  - ### LOCAL_CERT_CHECK_RESULT

    public static final String LOCAL_CERT_CHECK_RESULT
    See Also:
      - Constant Field Values

  - ### CERT_REQUIRED_DOMAIN

    public static final String CERT_REQUIRED_DOMAIN
    See Also:
      - Constant Field Values

  - ### HOSTNAME_KEY

    public static final String HOSTNAME_KEY
    See Also:
      - Constant Field Values

  - ### PORT_TYPE_PROP_KEY

    public static final String PORT_TYPE_PROP_KEY
    See Also:
      - Constant Field Values

  - ### SESSION_ID_KEY

    public static final String SESSION_ID_KEY
    This is key used to store session ID in temporary session data storage. As it is used by many components it is required that all components access session ID with this constant.
    See Also:
      - Constant Field Values

  - ### SSL_PROTOCOLS_KEY

    public static final String SSL_PROTOCOLS_KEY
    See Also:
      - Constant Field Values

  - ### cb

    protected CharBuffer cb

  - ### decoder

    protected CharsetDecoder decoder

  - ### encoder

    protected CharsetEncoder encoder

  - ### partialCharacterBytes

    protected byte[] partialCharacterBytes
    The saved partial bytes for multi-byte UTF-8 characters between reads

- ## Constructor Details

  - ### IOService

    public IOService()

- ## Method Details

  - ### accept

    @Deprecated public void accept(SocketChannel socketChannel) throws IOException
    Deprecated.
    Throws:
      `IOException`

  - ### accept

    public void accept(SocketChannel socketChannel, Integer socketInputSize) throws IOException
    Throws:
      `IOException`

  - ### call

    public IOService<?> call() throws IOException
    Specified by:
      `call` in interface `Callable<RefObject>`
    Throws:
      `IOException`

  - ### checkBufferLimit

    public boolean checkBufferLimit(int bufferSize)
    Specified by:
      `checkBufferLimit` in interface `IOListener`

  - ### connectionType

    public ConnectionType connectionType()

  - ### forceStop

    public void forceStop()

  - ### handshakeCompleted

    public void handshakeCompleted(TLSWrapper wrapper)
    Specified by:
      `handshakeCompleted` in interface `TLSEventHandler`

  - ### processWaitingPackets

    public abstract void processWaitingPackets() throws IOException
    Throws:
      `IOException`

  - ### startSSL

    public void startSSL(boolean clientMode, boolean wantClientAuth, boolean needClientAuth) throws IOException
    Throws:
      `IOException`

  - ### getCertificateContainer

    public CertificateContainerIfc getCertificateContainer()

  - ### setCertificateContainer

    public void setCertificateContainer(CertificateContainerIfc certificateContainer)

  - ### startTLS

    public void startTLS(boolean clientMode, boolean wantClientAuth, boolean needClientAuth) throws IOException
    Throws:
      `IOException`

  - ### startZLib

    public void startZLib(int level)

  - ### stop

    public void stop()

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`

  - ### waitingToRead

    public boolean waitingToRead()

  - ### waitingToSend

    public boolean waitingToSend()

  - ### waitingToSendSize

    public int waitingToSendSize()

  - ### getBuffOverflow

    public long getBuffOverflow(boolean reset)

  - ### getBytesReceived

    public long getBytesReceived(boolean reset)

  - ### getBytesSent

    public long getBytesSent(boolean reset)

  - ### getConnectionId

    public JID getConnectionId()

  - ### setConnectionId

    public void setConnectionId(JID connectionId)

  - ### getDataReceiver

    public JID getDataReceiver()

  - ### setDataReceiver

    public void setDataReceiver(JID address)

  - ### getLastTransferTime

    public long getLastTransferTime()
    This method returns the time of last transfer in any direction through this service. It is used to help detect dead connections.

  - ### getLocalAddress

    public String getLocalAddress()

  - ### getTlsUniqueId

    public byte[] getTlsUniqueId()

  - ### getLocalPort

    public int getLocalPort()
    Method returns local port of opened socket

  - ### getReadCounters

    public long[] getReadCounters()

  - ### getRefObject

    public RefObject getRefObject()

  - ### setRefObject

    public void setRefObject(RefObject refObject)

  - ### getRemoteAddress

    public String getRemoteAddress()
    Returns a remote IP address for the TCP/IP connection.
    Returns:
      a remote IP address for the TCP/IP connection.

  - ### getSessionData

    public ConcurrentMap<String,Object> getSessionData()

  - ### setSessionData

    public void setSessionData(Map<String,Object> props)

  - ### getSocketInputSize

    public int getSocketInputSize()
    Specified by:
      `getSocketInputSize` in interface `TLSEventHandler`

  - ### getSocketChannel

    public SocketChannel getSocketChannel()

  - ### getStatistics

    public void getStatistics(StatisticsList list, boolean reset)

  - ### getTotalBuffOverflow

    public long getTotalBuffOverflow()

  - ### getTotalBytesReceived

    public long getTotalBytesReceived()

  - ### getTotalBytesSent

    public long getTotalBytesSent()

  - ### getUniqueId

    public String getUniqueId()

  - ### getWriteCounters

    public long[] getWriteCounters()

  - ### isConnected

    public boolean isConnected()

  - ### setBufferLimit

    public void setBufferLimit(int bufferLimit)

  - ### setIOServiceListener

    public void setIOServiceListener(IOServiceListener<IOService<RefObject>> sl)

  - ### setSslContextContainer

    public void setSslContextContainer(SSLContextContainerIfc sslContextContainer)

  - ### setX509TrustManagers

    public void setX509TrustManagers(TrustManager[] trustManager)

  - ### getPeerCertificate

    public Certificate getPeerCertificate()

  - ### getLocalCertificate

    public Certificate getLocalCertificate()

  - ### byteOrder

    protected ByteOrder byteOrder()

  - ### debug

    protected boolean debug(char[] msg)

  - ### debug

    protected boolean debug(String msg, String prefix)

  - ### processSocketData

    protected abstract void processSocketData() throws IOException
    Throws:
      `IOException`

  - ### readBytes

    protected ByteBuffer readBytes() throws IOException
    Throws:
      `IOException`

  - ### readCompleted

    protected void readCompleted()

  - ### readData

    protected char[] readData() throws IOException
    Throws:
      `IOException`

  - ### receivedPackets

    protected abstract int receivedPackets()

  - ### writeBytes

    protected void writeBytes(ByteBuffer data)

  - ### writeData

    protected void writeData(String data)

  - ### isSocketServiceReady

    protected boolean isSocketServiceReady()

  - ### setSocketServiceReady

    protected void setSocketServiceReady(boolean value)

  - ### handleMalformedInput

    protected boolean handleMalformedInput(ByteBuffer buffer, CharBuffer cb)

  - ### isInputBufferEmpty

    protected boolean isInputBufferEmpty()

  - ### getIO

    protected IOInterface getIO()