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

  Version:
    $Rev$
  Author:
    Artur Hefczyc

- - ### Field Summary

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `IOService()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `accept(SocketChannel socketChannel)`
    `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 Detail

    - #### CERT_CHECK_RESULT

          public static final String 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 Detail

    - #### IOService

          public IOService()

  - ### Method Detail

    - #### accept

          public void accept(SocketChannel socketChannel)
                      throws IOException

      Throws:
        `IOException`

    - #### call

          public IOService<?> call()
                            throws IOException

      Specified by:
        `call` in interface `Callable<IOService<?>>`
      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
      Returns:

    - #### 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()

Copyright © 2004–2019 "Tigase, Inc.". All rights reserved.