tigase.server.xmppserver

## Class ServerConnectionManager

- java.lang.Object
- - tigase.server.BasicComponent
  - - tigase.server.AbstractMessageReceiver
    - - tigase.server.ConnectionManager<XMPPIOService<Object>>
      - - tigase.server.xmppserver.ServerConnectionManager

- All Implemented Interfaces:
    Configurable, XMPPService, IOServiceListener<XMPPIOService<Object>>, MessageReceiver, ServerComponent, ConnectionHandlerIfc<XMPPIOService<Object>>, StatisticsContainer, VHostListener, XMPPIOServiceListener<XMPPIOService<Object>>

      public class ServerConnectionManager
      extends ConnectionManager<XMPPIOService<Object>>
      implements ConnectionHandlerIfc<XMPPIOService<Object>>

  Class ServerConnectionManager Created: Tue Nov 22 07:07:11 2005
  Version:
    $Rev$
  Author:
    Artur Hefczyc

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class tigase.server.ConnectionManager

      `ConnectionManager.LIMIT_ACTION, ConnectionManager.WATCHDOG_PING_TYPE`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `MAX_PACKET_WAITING_TIME_PROP_KEY` Field description
    `static long` | `MAX_PACKET_WAITING_TIME_PROP_VAL` Field description

    - ### Fields inherited from class tigase.server.ConnectionManager

      `connectionDelay, elements_number_limit, ELEMENTS_NUMBER_LIMIT_PROP_KEY, ELEMENTS_NUMBER_LIMIT_PROP_VAL, HT_TRAFFIC_THROTTLING_PROP_KEY, HT_TRAFFIC_THROTTLING_PROP_VAL, LAST_MINUTE_BIN_LIMIT_PROP_VAL, LAST_MINUTE_PACKETS_LIMIT_PROP_VAL, MAX_INACTIVITY_TIME, MAX_RECONNECTS_PROP_KEY, net_buffer, NET_BUFFER_HT_PROP_KEY, NET_BUFFER_HT_PROP_VAL, NET_BUFFER_LIMIT_HT_PROP_VAL, NET_BUFFER_LIMIT_PROP_KEY, NET_BUFFER_LIMIT_ST_PROP_VAL, NET_BUFFER_PROP_KEY, NET_BUFFER_ST_PROP_KEY, NET_BUFFER_ST_PROP_VAL, pingElement, PORT_CLASS_PROP_KEY, PORT_IFC_PROP_KEY, PORT_IFC_PROP_VAL, PORT_KEY, PORT_LOCAL_HOST_PROP_KEY, PORT_REMOTE_HOST_PROP_KEY, PORT_REMOTE_HOST_PROP_VAL, PORT_SOCKET_PROP_KEY, PORT_TYPE_PROP_KEY, PORTS_PROP_KEY, PROP_KEY, ST_TRAFFIC_THROTTLING_PROP_KEY, ST_TRAFFIC_THROTTLING_PROP_VAL, TLS_PROP_KEY, TLS_REQUIRED_PROP_KEY, TLS_REQUIRED_PROP_VAL, TLS_USE_PROP_KEY, TLS_USE_PROP_VAL, TOTAL_BIN_LIMIT_PROP_VAL, TOTAL_PACKETS_LIMIT_PROP_VAL, TRAFFIC_THROTTLING_PROP_KEY, WATCHDOG_DELAY, WATCHDOG_PING_TYPE_KEY, WATCHDOG_TIMEOUT, watchdogDelay, watchdogPingType, watchdogTimeout, WHITE_CHAR_ACK_PROP_KEY, WHITE_CHAR_ACK_PROP_VAL, XMPP_ACK_PROP_KEY, XMPP_ACK_PROP_VAL`

    - ### Fields inherited from class tigase.server.AbstractMessageReceiver

      `HOUR, INCOMING_FILTERS_PROP_KEY, INCOMING_FILTERS_PROP_VAL, MAX_QUEUE_SIZE_PROP_KEY, MAX_QUEUE_SIZE_PROP_VAL, maxInQueueSize, maxOutQueueSize, maxQueueSize, MINUTE, OUTGOING_FILTERS_PROP_KEY, OUTGOING_FILTERS_PROP_VAL, SCHEDULER_THREADS_PROP_KEY, SECOND`

    - ### Fields inherited from class tigase.server.BasicComponent

      `admins, ALL_PROP_KEY, COMMAND_PROP_NODE, scriptCommands, SCRIPTS_DIR_PROP_DEF, SCRIPTS_DIR_PROP_KEY, vHostManager`

    - ### Fields inherited from interface tigase.conf.Configurable

      `ADMINS_PROP_KEY, AMP_CLASS_NAME, AMP_CLUST_CLASS_NAME, AUTH_DOMAIN_POOL_CLASS, AUTH_REPO_DOMAINS_PROP_KEY, AUTH_REPO_PARAMS_NODE, AUTH_REPO_POOL_CLASS, AUTH_REPO_URL_PROP_KEY, BOSH_CLUST_COMP_CLASS_NAME, BOSH_COMP_CLASS_NAME, C2S_CLUST_COMP_CLASS_NAME, C2S_COMP_CLASS_NAME, CL_COMP_CLASS_NAME, CLUSTER_CONECT, CLUSTER_CONTR_CLASS_NAME, CLUSTER_LISTEN, CLUSTER_MODE, CLUSTER_NODES, CLUSTER_NODES_PROP_KEY, COMP_PROT_CLASS_NAME, COMPONENT_ID_PROP_KEY, DEF_AMP_NAME, DEF_BOSH_NAME, DEF_C2S_NAME, DEF_CL_COMP_NAME, DEF_CLUST_CONTR_NAME, DEF_COMP_PROT_NAME, DEF_EXT_COMP_NAME, DEF_HOSTNAME_PROP_KEY, DEF_MONITOR_NAME, DEF_S2S_NAME, DEF_SM_NAME, DEF_SRECV_NAME, DEF_SSEND_NAME, DEF_STATS_NAME, DEF_VHOST_MAN_NAME, DEF_WS2S_NAME, DERBY_REPO_CLASS_PROP_VAL, DERBY_REPO_URL_PROP_VAL, DRUPAL_REPO_URL_PROP_VAL, DRUPALWP_REPO_CLASS_PROP_VAL, DUMMY_REPO_CLASS_PROP_VAL, EXT_COMP_CLASS_NAME, GEN_ADMINS, GEN_AUTH_DB, GEN_AUTH_DB_URI, GEN_COMP_CLASS, GEN_COMP_NAME, GEN_CONF, GEN_CONFIG, GEN_CONFIG_ALL, GEN_CONFIG_COMP, GEN_CONFIG_CS, GEN_CONFIG_DEF, GEN_CONFIG_SM, GEN_DEBUG, GEN_DEBUG_PACKAGES, GEN_EXT_COMP, GEN_MAX_QUEUE_SIZE, GEN_SCRIPT_DIR, GEN_SM_PLUGINS, GEN_SREC_ADMINS, GEN_SREC_DB, GEN_SREC_DB_URI, GEN_TEST, GEN_TRUSTED, GEN_USER_DB, GEN_USER_DB_URI, GEN_USER_DB_URI_PROP_KEY, GEN_VIRT_HOSTS, HOSTNAMES_PROP_KEY, LIBRESOURCE_REPO_CLASS_PROP_VAL, LIBRESOURCE_REPO_URL_PROP_VAL, MONITOR_CLASS_NAME, MONITOR_CLUST_CLASS_NAME, MONITORING, MYSQL_REPO_CLASS_PROP_VAL, MYSQL_REPO_URL_PROP_VAL, PGSQL_REPO_CLASS_PROP_VAL, PGSQL_REPO_URL_PROP_VAL, ROUTER_COMP_CLASS_NAME, S2S_CLUST_COMP_CLASS_NAME, S2S_COMP_CLASS_NAME, SHARED_AUTH_REPO_PARAMS_PROP_KEY, SHARED_AUTH_REPO_PROP_KEY, SHARED_USER_REPO_PARAMS_PROP_KEY, SHARED_USER_REPO_PROP_KEY, SM_CLUST_COMP_CLASS_NAME, SM_COMP_CLASS_NAME, SRECV_COMP_CLASS_NAME, SSEND_COMP_CLASS_NAME, STANZA_WHITE_CHAR_ACK, STANZA_XMPP_ACK, STATS_CLASS_NAME, STRINGPREP_PROCESSOR, TIGASE_AUTH_REPO_CLASS_PROP_VAL, TIGASE_AUTH_REPO_URL_PROP_VAL, TIGASE_CUSTOM_AUTH_REPO_CLASS_PROP_VAL, TRUSTED_PROP_KEY, USER_DOMAIN_POOL_CLASS, USER_REPO_DOMAINS_PROP_KEY, USER_REPO_PARAMS_NODE, USER_REPO_POOL_CLASS, USER_REPO_POOL_SIZE, USER_REPO_POOL_SIZE_PROP_KEY, USER_REPO_URL_PROP_KEY, VHOST_MAN_CLASS_NAME, VHOST_MAN_CLUST_CLASS_NAME, WS2S_CLASS_NAME, WS2S_CLUST_CLASS_NAME, XML_REPO_CLASS_PROP_VAL, XML_REPO_URL_PROP_VAL, XMPP_STANZA_ACK`

    - ### Fields inherited from interface tigase.disco.XMPPService

      `CMD_FEATURES, DEF_FEATURES, INFO_XMLNS, ITEMS_XMLNS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServerConnectionManager()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `addOutPacket(Packet packet)`
    `Map<String,Object>` | `getDefaults(Map<String,Object> params)` Returns default configuration settings for the component as a `Map` with keys as configuration property IDs and values as the configuration property values.
    `protected int[]` | `getDefPlainPorts()` Method description
    `String` | `getDiscoCategoryType()` Method description
    `String` | `getDiscoDescription()` Method description
    `protected String` | `getLocalDBKey(CID cid, String key, String forkey_sessionId, String asking_sessionId)`
    `protected long` | `getMaxInactiveTime()` Method description
    `protected ServerConnections` | `getServerConnections(CID cid)`
    `void` | `getStatistics(StatisticsList list)` Method returns component statistics.
    `protected XMPPIOService<Object>` | `getXMPPIOServiceInstance()` Method description
    `boolean` | `handlesNonLocalDomains()` Indicates whether the component can handle all packets to non-local domains.
    `int` | `hashCodeForPacket(Packet packet)` This method decides how incoming packets are distributed among processing threads.
    `protected boolean` | `isHighThroughput()` Method description
    `boolean` | `isIncomingValid(String session_id)` Method description
    `void` | `processDialback(Packet packet, XMPPIOService<Object> serv)` Method description
    `void` | `processPacket(Packet packet)` This is the main `Packet` processing method.
    `Queue<Packet>` | `processSocketData(XMPPIOService<Object> serv)` Method description
    `void` | `reconnectionFailed(Map<String,Object> port_props)` Method description
    `protected ServerConnections` | `removeServerConnections(CID cid)`
    `boolean` | `sendToIncoming(String session_id, Packet packet)` Method description
    `protected void` | `sendVerifyResult(String from, String to, String forkey_sessionId, boolean valid, ServerConnections serv_conns, String asking_sessionId)`
    `void` | `serviceStarted(XMPPIOService<Object> serv)` Method description
    `boolean` | `serviceStopped(XMPPIOService<Object> serv)`
    `void` | `setProperties(Map<String,Object> props)` Sets all configuration properties for the object.
    `void` | `tlsHandshakeCompleted(XMPPIOService<Object> service)`
    `void` | `validateIncoming(String session_id, boolean valid)` Method description
    `void` | `xmppStreamClosed(XMPPIOService<Object> serv)`
    `String` | `xmppStreamOpened(XMPPIOService<Object> serv, Map<String,String> attribs)`

    - ### Methods inherited from class tigase.server.ConnectionManager

      `addWaitingTask, checkHighThroughputProperty, checkTrafficLimits, countIOServices, doForAllServices, everyMinute, getDefSSLPorts, getDefTrafficThrottling, getParamsForPort, getServiceId, getServiceId, getUniqueId, getXMPPIOService, getXMPPIOService, initBindings, initializationCompleted, isTlsWantClientAuthEnabled, packetsReady, processingInThreads, processingOutThreads, processUndeliveredPacket, release, setName, setupWatchdogThread, stop, updateConnectionDetails, writePacketsToSocket, writePacketToSocket, writePacketToSocket, writePacketToSocket, writeRawData`

    - ### Methods inherited from class tigase.server.AbstractMessageReceiver

      `addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTask, addTimerTask, clearRegexRoutings, everyHour, everySecond, getMaxQueueSize, getRegexRoutings, isInRegexRoutings, newPacketId, processingThreads, processOutPacket, processPacket, removeRegexRouting, schedulerThreads, setMaxQueueSize, setParent, start`

    - ### Methods inherited from class tigase.server.BasicComponent

      `addComponentDomain, canCallCommand, checkCommandAcl, getComponentId, getComponentInfo, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoFeatures, getDiscoFeatures, getDiscoInfo, getDiscoInfo, getDiscoItems, getDiscoItems, getName, getScriptCommands, getScriptItems, getServiceEntity, getVHostItem, handlesLocalDomains, handlesNameSubdomains, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, processScriptCommand, removeComponentDomain, removeServiceDiscoveryItem, setVHostManager, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceEntity`

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

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

    - ### Methods inherited from interface tigase.server.xmppserver.ConnectionHandlerIfc

      `writePacketsToSocket, writePacketToSocket`

    - ### Methods inherited from interface tigase.server.MessageReceiver

      `getDefHostName`

    - ### Methods inherited from interface tigase.server.ServerComponent

      `getComponentId, getComponentInfo, getName, isInitializationComplete`

- - ### Field Detail

    - #### MAX_PACKET_WAITING_TIME_PROP_KEY

          public static final String MAX_PACKET_WAITING_TIME_PROP_KEY

      Field description
      See Also:
        Constant Field Values

    - #### MAX_PACKET_WAITING_TIME_PROP_VAL

          public static final long MAX_PACKET_WAITING_TIME_PROP_VAL

      Field description
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ServerConnectionManager

          public ServerConnectionManager()

  - ### Method Detail

    - #### addOutPacket

          public boolean addOutPacket(Packet packet)

      Overrides:
        `addOutPacket` in class `AbstractMessageReceiver`

    - #### getDefaults

          public Map<String,Object> getDefaults(Map<String,Object> params)

      Description copied from class: `AbstractMessageReceiver`
      Returns default configuration settings for the component as a `Map` with keys as configuration property IDs and values as the configuration property values. All the default parameters returned from this method are later passed to the `setProperties(...)` method. Some of them may have changed value if they have been overwritten in the server configuration. The configuration property value can be of any of the basic types: `int`, `long`, `boolean`, `String`.
      Specified by:
        `getDefaults` in interface `Configurable`
      Overrides:
        `getDefaults` in class `ConnectionManager<XMPPIOService<Object>>`
      Parameters:
        `params` - is a `Map` with some initial properties set for the starting up server. These parameters can be used as a hints to generate component's default configuration.
      Returns:
        a `Map` with the component default configuration.

    - #### getDiscoCategoryType

          public String getDiscoCategoryType()

      Description copied from class: `BasicComponent`
      Method description
      Overrides:
        `getDiscoCategoryType` in class `BasicComponent`
      Returns:
        a value of `String`

    - #### getDiscoDescription

          public String getDiscoDescription()

      Description copied from class: `BasicComponent`
      Method description
      Overrides:
        `getDiscoDescription` in class `BasicComponent`
      Returns:
        a value of `String`

    - #### getStatistics

          public void getStatistics(StatisticsList list)

      Description copied from class: `AbstractMessageReceiver`
      Method returns component statistics. Please note, the method can be called every second by the server monitoring system therefore no extensive or lengthy calculations are allowed. If there are some statistics requiring lengthy operations like database access they must have `Level.FINEST` assigned and must be put inside the level guard to prevent generating them by the system monitor. The system monitor does not collect `FINEST` statistics.
      Level guard code looks like the example below:

           if (list.checkLevel(Level.FINEST)) {
             // Some CPU intensive calculations or lengthy operations
             list.add(getName(), "Statistic description", stat_value, Level.FINEST);
           }

      This way you make sure your extensive operation is not executed every second by the monitoring system and does not affect the server performance.
      Specified by:
        `getStatistics` in interface `StatisticsContainer`
      Overrides:
        `getStatistics` in class `ConnectionManager<XMPPIOService<Object>>`
      Parameters:
        `list` - is a `StatistcsList` where all statistics are stored.

    - #### handlesNonLocalDomains

          public boolean handlesNonLocalDomains()

      Description copied from interface: `VHostListener`
      Indicates whether the component can handle all packets to non-local domains. S2s connection manager component is the best example of the component which handles all requests sent to non-local domains.
      Specified by:
        `handlesNonLocalDomains` in interface `VHostListener`
      Overrides:
        `handlesNonLocalDomains` in class `BasicComponent`
      Returns:
        'true' if the component accepts packets to non-local domains 'false' otherwise.

    - #### hashCodeForPacket

          public int hashCodeForPacket(Packet packet)

      Description copied from class: `AbstractMessageReceiver`
      This method decides how incoming packets are distributed among processing threads. Different components needs different distribution to efficient use all threads and avoid packets re-ordering.
      If there are N processing threads, packets are distributed among threads using following code:

           int threadNo = Math.abs(hashCodeForPacket(packet) % N);

      For a PubSub component, for example, a better packets distribution would be based on the PubSub channel name, for SM a better distribution is based on the destination address, etc....
      Overrides:
        `hashCodeForPacket` in class `ConnectionManager<XMPPIOService<Object>>`
      Parameters:
        `packet` - is a `Packet` which needs to be processed by some thread.
      Returns:
        a hash code generated for the input thread.

    - #### isIncomingValid

          public boolean isIncomingValid(String session_id)

      Method description
      Parameters:
        `session_id` -

    - #### processDialback

          public void processDialback(Packet packet,
                             XMPPIOService<Object> serv)

      Method description
      Parameters:
        `packet` -
        `serv` -

    - #### processPacket

          public void processPacket(Packet packet)

      Description copied from class: `AbstractMessageReceiver`
      This is the main `Packet` processing method. It is called concurrently from many threads so implementing it in thread save manner is essential. The method is called for each packet addressed to the component.
      Please note, the `Packet` instance may be processed by different parts of the server, different components or plugins at the same time. Therefore this is very important to tread the `Packet` instance as unmodifiable object.
      Processing in this method is asynchronous, therefore there is no result value. If there are some 'result' packets generated during processing, they should be passed back using `addOutPacket(Packet)` method.
      Overrides:
        `processPacket` in class `ConnectionManager<XMPPIOService<Object>>`
      Parameters:
        `packet` - is an instance of the `Packet` class passed for processing.

    - #### processSocketData

          public Queue<Packet> processSocketData(XMPPIOService<Object> serv)

      Description copied from class: `ConnectionManager`
      Method description
      Specified by:
        `processSocketData` in class `ConnectionManager<XMPPIOService<Object>>`
      Returns:
        a value of `Queue<Packet>`

    - #### reconnectionFailed

          public void reconnectionFailed(Map<String,Object> port_props)

      Description copied from class: `ConnectionManager`
      Method description
      Specified by:
        `reconnectionFailed` in class `ConnectionManager<XMPPIOService<Object>>`

    - #### sendToIncoming

          public boolean sendToIncoming(String session_id,
                               Packet packet)

      Method description
      Parameters:
        `session_id` -
        `packet` -

    - #### serviceStarted

          public void serviceStarted(XMPPIOService<Object> serv)

      Description copied from class: `ConnectionManager`
      Method description
      Overrides:
        `serviceStarted` in class `ConnectionManager<XMPPIOService<Object>>`

    - #### serviceStopped

          public boolean serviceStopped(XMPPIOService<Object> serv)

      Specified by:
        `serviceStopped` in interface `IOServiceListener<XMPPIOService<Object>>`
      Overrides:
        `serviceStopped` in class `ConnectionManager<XMPPIOService<Object>>`

    - #### setProperties

          public void setProperties(Map<String,Object> props)
                             throws ConfigurationException

      Description copied from interface: `Configurable`
      Sets all configuration properties for the object.
      Specified by:
        `setProperties` in interface `Configurable`
      Overrides:
        `setProperties` in class `ConnectionManager<XMPPIOService<Object>>`
      Parameters:
        `props` - `Map` with the configuration
      Throws:
        `ConfigurationException` - - if setting configuration will fail which will make it unable to work

    - #### tlsHandshakeCompleted

          public void tlsHandshakeCompleted(XMPPIOService<Object> service)

      Specified by:
        `tlsHandshakeCompleted` in interface `IOServiceListener<XMPPIOService<Object>>`

    - #### validateIncoming

          public void validateIncoming(String session_id,
                              boolean valid)

      Method description
      Parameters:
        `session_id` -
        `valid` -

    - #### xmppStreamClosed

          public void xmppStreamClosed(XMPPIOService<Object> serv)

      Specified by:
        `xmppStreamClosed` in interface `XMPPIOServiceListener<XMPPIOService<Object>>`

    - #### xmppStreamOpened

          public String xmppStreamOpened(XMPPIOService<Object> serv,
                                Map<String,String> attribs)

      Specified by:
        `xmppStreamOpened` in interface `XMPPIOServiceListener<XMPPIOService<Object>>`

    - #### getDefPlainPorts

          protected int[] getDefPlainPorts()

      Description copied from class: `ConnectionManager`
      Method description
      Overrides:
        `getDefPlainPorts` in class `ConnectionManager<XMPPIOService<Object>>`
      Returns:
        a value of `int[]`

    - #### getLocalDBKey

          protected String getLocalDBKey(CID cid,
                             String key,
                             String forkey_sessionId,
                             String asking_sessionId)

    - #### getMaxInactiveTime

          protected long getMaxInactiveTime()

      Method description
      Let's assume s2s should send something at least once every 15 minutes....
      Specified by:
        `getMaxInactiveTime` in class `ConnectionManager<XMPPIOService<Object>>`
      Returns:
        a value of `long`

    - #### getServerConnections

          protected ServerConnections getServerConnections(CID cid)

    - #### getXMPPIOServiceInstance

          protected XMPPIOService<Object> getXMPPIOServiceInstance()

      Description copied from class: `ConnectionManager`
      Method description
      Specified by:
        `getXMPPIOServiceInstance` in class `ConnectionManager<XMPPIOService<Object>>`
      Returns:
        a value of `IO`

    - #### isHighThroughput

          protected boolean isHighThroughput()

      Description copied from class: `ConnectionManager`
      Method description
      Overrides:
        `isHighThroughput` in class `ConnectionManager<XMPPIOService<Object>>`
      Returns:
        a value of `boolean`

    - #### removeServerConnections

          protected ServerConnections removeServerConnections(CID cid)

    - #### sendVerifyResult

          protected void sendVerifyResult(String from,
                              String to,
                              String forkey_sessionId,
                              boolean valid,
                              ServerConnections serv_conns,
                              String asking_sessionId)

Copyright © 2015 "Tigase, Inc.". All rights reserved.