Package tigase.server.bosh
Class BoshConnectionManager
java.lang.Object
tigase.server.BasicComponent
tigase.server.AbstractMessageReceiver
tigase.server.ConnectionManager<XMPPIOService<Object>>
tigase.server.xmppclient.ClientConnectionManager
tigase.server.bosh.BoshConnectionManager
- All Implemented Interfaces:
ClusteredComponentIfc
,Configurable
,XMPPService
,ConfigurationChangedAware
,Initializable
,RegistrarBean
,IOServiceListener<XMPPIOService<Object>>
,BoshIOService.ConfigProvider
,BoshSessionTaskHandler
,MessageReceiver
,PacketWriterWithTimeout
,ServerComponent
,StatisticsContainer
,StatisticsContainerIfc
,VHostListener
,XMPPIOServiceListener<XMPPIOService<Object>>
- Direct Known Subclasses:
BoshConnectionClustered
@Bean(name="bosh",
parent=Kernel.class,
active=true)
@ConfigType({DefaultMode,ConnectionManagersMode})
@ClusterModeRequired(active=false)
public class BoshConnectionManager
extends ClientConnectionManager
implements BoshSessionTaskHandler, BoshIOService.ConfigProvider
Describe class BoshConnectionManager here.
Created: Sat Jun 2 12:24:29 2007
Created: Sat Jun 2 12:24:29 2007
- Author:
- Artur Hefczyc
-
Nested Class Summary
Nested classes/interfaces inherited from class tigase.server.ConnectionManager
ConnectionManager.LIMIT_ACTION, ConnectionManager.PortConfigBean, ConnectionManager.PortsConfigBean, ConnectionManager.SecPortConfigBean, ConnectionManager.Watchdog, ConnectionManager.WATCHDOG_PING_TYPE
Nested classes/interfaces inherited from class tigase.server.BasicComponent
BasicComponent.ServerInfoVHostItemExtension
Nested classes/interfaces inherited from interface tigase.server.PacketWriterWithTimeout
PacketWriterWithTimeout.Handler
-
Field Summary
Modifier and TypeFieldDescriptionstatic final String
static final String
static final String
static final String
static final String
protected final Map<UUID,
BoshSession> Fields inherited from class tigase.server.xmppclient.ClientConnectionManager
eventBus, FORCE_REDIRECT_TO_KEY, routings, see_other_host_strategy
Fields inherited from class tigase.server.ConnectionManager
connectionDelay, delayPortListening, elements_number_limit, ELEMENTS_NUMBER_LIMIT_PROP_KEY, ELEMENTS_NUMBER_LIMIT_PROP_VAL, HT_TRAFFIC_THROTTLING_PROP_KEY, HT_TRAFFIC_THROTTLING_PROP_VAL, kernel, 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_ST_PROP_VAL, 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_LISTENING_DELAY_DEF, PORT_LISTENING_DELAY_KEY, PORT_LOCAL_HOST_PROP_KEY, PORT_NEW_CONNECTIONS_THROTTLING_KEY, PORT_REMOTE_HOST_PROP_KEY, PORT_REMOTE_HOST_PROP_VAL, PORT_SOCKET_PROP_KEY, PORT_TYPE_PROP_KEY, PORTS_PROP_KEY, processors, PROP_KEY, serviceConnectedTimeout, SOCKET_BUFFER_HT_PROP_VAL, SOCKET_BUFFER_ST_PROP_VAL, ST_TRAFFIC_THROTTLING_PROP_KEY, ST_TRAFFIC_THROTTLING_PROP_VAL, TOTAL_BIN_LIMIT_PROP_VAL, TOTAL_PACKETS_LIMIT_PROP_VAL, TRAFFIC_THROTTLING_PROP_KEY, trafficThrottling, 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, PACKET_DELIVERY_RETRY_COUNT_PROP_KEY, SCHEDULER_THREADS_PROP_KEY, SECOND
Fields inherited from class tigase.server.BasicComponent
admins, ALL_PROP_KEY, COMMAND_PROP_NODE, scriptCommands, scriptEngineManager, SCRIPTS_DIR_PROP_DEF, SCRIPTS_DIR_PROP_KEY, trusted, 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_EVENTBUS_NAME, DEF_EXT_COMP_NAME, DEF_HOSTNAME_PROP_KEY, DEF_MONITOR_NAME, DEF_S2S_NAME, DEF_SM_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, EVENTBUS_CLASS_NAME, 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, 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
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
addOutPackets
(Queue<Packet> out_results, BoshSession bs) Method adds packets to the output queue stamping it with the appropriateBoshSession
databoolean
addOutStreamClosed
(Packet packet, BoshSession bs, boolean withTimeout) boolean
addOutStreamOpen
(Packet packet, BoshSession bs) void
void
cancelTask
(BoshTask tt) protected JID
changeDataReceiver
(Packet packet, JID newAddress, String command_sessionId, XMPPIOService<Object> serv) protected boolean
enableServiceConnectedTimeout
(XMPPIOService<Object> service) protected BoshSession
getBoshSession
(JID jid) Method retrievesBoshSession
related to the particular user addressprotected int[]
protected int[]
Method returns component category type used for service discovery responses.Method returns description used for service discovery responses.Returns full jid of passed BoshSession instanceprotected long
MethodgetMaxInactiveTime
returns max keep-alive time for inactive connection.getSeeOtherHostError
(Packet packet, BareJID destination) getSeeOtherHostForJID
(Packet packet, BareJID fromJID, SeeOtherHostIfc.Phase ph) void
getStatistics
(StatisticsList list) Method returns component statistics.protected BoshIOService
void
initBindings
(Bindings binds) Initialize a mapping of key/value pairs which can be used in scripts loaded by the servervoid
Method will be called, when bean will be created, configured and ready to use.boolean
protected ReceiverTimeoutHandler
preBindSession
(Map<String, String> attr) protected void
processCommand
(Packet packet) void
processPacket
(Packet packet) This is the mainPacket
processing method.scheduleSendQueueTask
(BoshSession bs, long delay) scheduleTask
(BoshSession bs, long delay) void
serviceStarted
(XMPPIOService<Object> service) boolean
serviceStopped
(XMPPIOService<Object> xmppService) void
setClientAccessPolicyFile
(String clientAccessPolicyFile) void
setExtraHeadersFile
(String extraHeadersFile) void
setSidLoggerLevel
(String loggerLevel) protected static void
setupSidlogger
(Level lvl) protected void
protected boolean
writePacketToSocket
(Packet packet) void
writeRawData
(BoshIOService ios, String data) void
xmppStreamClosed
(XMPPIOService<Object> serv) String[]
xmppStreamOpened
(XMPPIOService<Object> serv, Map<String, String> attribs) Methods inherited from class tigase.server.xmppclient.ClientConnectionManager
getClientTrustManagerFactory, getMaxQueueSize, getSeeOtherHostInstance, hashCodeForPacket, isAllowed, newStoppedHandler, nodeShutdown, prepareSeeOtherHost, prepareStreamClose, prepareStreamError, prepareStreamError, prepareStreamOpen, preprocessStreamFeatures, processUndeliveredPacket, reconnectionFailed, schedulerThreads, setRegistrationThrottling, setSee_other_host_strategy, shouldRedeliverWaitingPackets, socketAccepted, start, stop, tlsHandshakeCompleted, xmppStreamError
Methods inherited from class tigase.server.ConnectionManager
addWaitingTask, beanConfigurationChanged, checkHighThroughputProperty, checkTrafficLimits, connectWaitingTasks, countIOServices, doForAllServices, everyMinute, getDefPorts, getDefTrafficThrottling, getFlashCrossDomainPolicy, getNet_buffer_limit, getParamsForPort, getPortsConfigBean, getServiceId, getServiceId, getTrafficThrottling, getUniqueId, getXMPPIOService, getXMPPIOService, initializationCompleted, isHighThroughput, newWatchdog, packetsReady, processingInThreads, processingOutThreads, redeliverWaitingPackets, register, release, releaseListener, serviceConnected, setFlashCrossDomainPolicyFile, setName, setNet_buffer_limit, setProcessors, setTrafficThrottling, setWatchdogPingType, startService, unregister, updateConnectionDetails, writePacketsToSocket, writePacketToSocket, writePacketToSocket, writeRawData
Methods inherited from class tigase.server.AbstractMessageReceiver
addOutPacket, addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTaskWithTimeout, addTimerTaskWithTimeout, clearRegexRoutings, everyHour, everySecond, getRegexRoutings, getResourceForPacketWithTimeout, isInRegexRoutings, newPacketId, processOutPacket, processPacket, removeRegexRouting, setCompId, setIncoming_filters, setOutgoing_filters, setParent, setSchedulerThreads_size, updateFiltersName
Methods inherited from class tigase.server.BasicComponent
addComponentDomain, canCallCommand, canCallCommand, checkCommandAcl, checkCommandAcl, createScriptEngineManager, getComponentId, getComponentInfo, getDefaults, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoExtensionsForm, getDiscoFeatures, getDiscoFeatures, getDiscoInfo, getDiscoItems, getName, getNodesConnected, getNodesConnectedWithLocal, getScriptCommands, getScriptItems, getServiceEntity, getServiceEntityCaps, getVHostItem, handlesLocalDomains, handlesNameSubdomains, handlesNonLocalDomains, isAdmin, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, isTrusted, isTrusted, nodeConnected, nodeDisconnected, onNodeConnected, onNodeDisconnected, processScriptCommand, reloadScripts, removeComponentDomain, removeServiceDiscoveryItem, setAdmins, setClusterController, setCommandsACL, setProperties, setScriptsBaseDir, 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.bosh.BoshSessionTaskHandler
getDefHostName, processUndeliveredPacket
Methods inherited from interface tigase.server.MessageReceiver
getDefHostName
Methods inherited from interface tigase.server.ServerComponent
getComponentId, getComponentInfo, getName, isInitializationComplete
Methods inherited from interface tigase.stats.StatisticsContainerIfc
getName
-
Field Details
-
BOSH_CLOSE_CONNECTION_PROP_KEY
- See Also:
-
BOSH_EXTRA_HEADERS_FILE_PROP_KEY
- See Also:
-
BOSH_EXTRA_HEADERS_FILE_PROP_VAL
- See Also:
-
CLIENT_ACCESS_POLICY_FILE_PROP_KEY
- See Also:
-
CLIENT_ACCESS_POLICY_FILE_PROP_VAL
- See Also:
-
sessions
-
-
Constructor Details
-
BoshConnectionManager
public BoshConnectionManager()
-
-
Method Details
-
setupSidlogger
-
addOutStreamClosed
- Specified by:
addOutStreamClosed
in interfaceBoshSessionTaskHandler
-
addOutStreamOpen
- Specified by:
addOutStreamOpen
in interfaceBoshSessionTaskHandler
-
cancelSendQueueTask
- Specified by:
cancelSendQueueTask
in interfaceBoshSessionTaskHandler
-
cancelTask
- Specified by:
cancelTask
in interfaceBoshSessionTaskHandler
-
enableServiceConnectedTimeout
- Overrides:
enableServiceConnectedTimeout
in classConnectionManager<XMPPIOService<Object>>
-
processPacket
Description copied from class:AbstractMessageReceiver
This is the mainPacket
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, thePacket
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 thePacket
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 usingaddOutPacket(Packet)
method.- Overrides:
processPacket
in classClientConnectionManager
- Parameters:
packet
- is an instance of thePacket
class passed for processing.
-
processSocketData
- Overrides:
processSocketData
in classClientConnectionManager
-
scheduleSendQueueTask
- Specified by:
scheduleSendQueueTask
in interfaceBoshSessionTaskHandler
-
scheduleTask
- Specified by:
scheduleTask
in interfaceBoshSessionTaskHandler
-
serviceStarted
- Overrides:
serviceStarted
in classClientConnectionManager
-
serviceStopped
- Specified by:
serviceStopped
in interfaceIOServiceListener<XMPPIOService<Object>>
- Overrides:
serviceStopped
in classClientConnectionManager
-
writeRawData
- Specified by:
writeRawData
in interfaceBoshSessionTaskHandler
-
xmppStreamClosed
- Specified by:
xmppStreamClosed
in interfaceXMPPIOServiceListener<XMPPIOService<Object>>
- Overrides:
xmppStreamClosed
in classClientConnectionManager
-
xmppStreamOpened
- Specified by:
xmppStreamOpened
in interfaceXMPPIOServiceListener<XMPPIOService<Object>>
- Overrides:
xmppStreamOpened
in classClientConnectionManager
-
getDiscoCategoryType
Description copied from class:BasicComponent
Method returns component category type used for service discovery responses.- Overrides:
getDiscoCategoryType
in classClientConnectionManager
- Returns:
- category type of a component
-
getDiscoDescription
Description copied from class:BasicComponent
Method returns description used for service discovery responses.- Overrides:
getDiscoDescription
in classClientConnectionManager
- Returns:
- description of a component
-
getJidForBoshSession
Returns full jid of passed BoshSession instance- Specified by:
getJidForBoshSession
in interfaceBoshSessionTaskHandler
- Parameters:
bs
-BoshSession
for which JID should be retrieved- Returns:
- JID address related to particular
BoshSession
-
getSeeOtherHostError
- Specified by:
getSeeOtherHostError
in interfaceBoshSessionTaskHandler
-
getSeeOtherHostForJID
- Specified by:
getSeeOtherHostForJID
in interfaceBoshSessionTaskHandler
-
getStatistics
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 haveLevel.FINEST
assigned and must be put inside the level guard to prevent generating them by the system monitor. The system monitor does not collectFINEST
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 interfaceStatisticsContainerIfc
- Overrides:
getStatistics
in classConnectionManager<XMPPIOService<Object>>
- Parameters:
list
- is aStatistcsList
where all statistics are stored.
-
setSidLoggerLevel
-
initBindings
Description copied from class:BasicComponent
Initialize a mapping of key/value pairs which can be used in scripts loaded by the server- Overrides:
initBindings
in classConnectionManager<XMPPIOService<Object>>
- Parameters:
binds
- A mapping of key/value pairs, all of whose keys are Strings.
-
initialize
public void initialize()Description copied from interface:Initializable
Method will be called, when bean will be created, configured and ready to use.- Specified by:
initialize
in interfaceInitializable
- Overrides:
initialize
in classBasicComponent
-
isCloseConnections
public boolean isCloseConnections()- Specified by:
isCloseConnections
in interfaceBoshIOService.ConfigProvider
-
getClientAccessPolicy
- Specified by:
getClientAccessPolicy
in interfaceBoshIOService.ConfigProvider
-
setClientAccessPolicyFile
-
getExtraHeaders
- Specified by:
getExtraHeaders
in interfaceBoshIOService.ConfigProvider
-
setExtraHeadersFile
-
setupWatchdogThread
protected void setupWatchdogThread()- Overrides:
setupWatchdogThread
in classConnectionManager<XMPPIOService<Object>>
-
preBindSession
-
addOutPackets
Method adds packets to the output queue stamping it with the appropriateBoshSession
data- Parameters:
out_results
- collection ofPacket
objects to be added to queuebs
- relatedBoshSession
-
changeDataReceiver
protected JID changeDataReceiver(Packet packet, JID newAddress, String command_sessionId, XMPPIOService<Object> serv) - Overrides:
changeDataReceiver
in classClientConnectionManager
-
newStartedHandler
- Overrides:
newStartedHandler
in classClientConnectionManager
-
processCommand
- Overrides:
processCommand
in classClientConnectionManager
-
writePacketToSocket
- Overrides:
writePacketToSocket
in classConnectionManager<XMPPIOService<Object>>
-
getBoshSession
Method retrievesBoshSession
related to the particular user address- Parameters:
jid
- address for whichBoshSession
should be returned- Returns:
- a value of
BoshSession
-
getDefPlainPorts
protected int[] getDefPlainPorts()- Overrides:
getDefPlainPorts
in classClientConnectionManager
-
getDefSSLPorts
protected int[] getDefSSLPorts()- Overrides:
getDefSSLPorts
in classClientConnectionManager
-
getMaxInactiveTime
protected long getMaxInactiveTime()MethodgetMaxInactiveTime
returns max keep-alive time for inactive connection. For Bosh it does not make sense to keep the idle connection longer than 10 minutes.- Overrides:
getMaxInactiveTime
in classClientConnectionManager
- Returns:
- a
long
value
-
getXMPPIOServiceInstance
- Overrides:
getXMPPIOServiceInstance
in classClientConnectionManager
-