tigase.server.sreceiver

## Class StanzaReceiver

- java.lang.Object
- - tigase.server.BasicComponent
  - - tigase.server.AbstractMessageReceiver
    - - tigase.server.sreceiver.StanzaReceiver

- All Implemented Interfaces:
    Configurable, XMPPService, MessageReceiver, ServerComponent, StanzaReceiverIfc, StatisticsContainer, VHostListener

      public class StanzaReceiver
      extends AbstractMessageReceiver
      implements Configurable, XMPPService, StanzaReceiverIfc

  This is a sibling to `StanzaSender` class and offers just an opposite functionality. It can receive XMPP packets to do something with them. And what to do it depends on the destination address. Destination address points to certain receiver task and this is up to task to decide what to do with the stanza. Task address is just a usual Jabber ID: task-short-name@srec.tigase.org.

  Like public chat rooms in MUC tasks can be preconfigured in the `StanzaReceiver` configuration or can be created on demand using `ad-hoc` commands and `service-discovery`. User can subscribe to some tasks and can add them to the roster just like a normal contacts. This allows to use the functionality from all existing clients without implementing any special protocols or extensions.

  Possible tasks are:

  - Interests groups - simple stanza (message) distribution to a group of interested ppl. To receive this information user has to subscribe to the task first. It is a bit like a MUC without a chat room or like a mailing list.
  - Persistent storage - which is like an archive of some information for group of ppl.
  - Web page publishing - this might be useful for web sites with kind of Short, instant news board where selected users can send information and they are published instantly. (Through the database for example.)
  - Forums integration - this might be useful for kind of forums where you can post messages from Web site as well as from your Jabber client.

  Task creation parameters:

  - Task short name - the nick name of the task which is used to create Jabber ID for the task.
  - Task description - description of the task what is the purpose of the task.
  - Task type - the server, through `ad-hoc` commands should present available tasks types which can be created. User can select a task to create. There may be some restrictions on tasks creation like certain types can be created only by server administrator or some tasks types can be created only once on single server and so on.
  - Subscription list - server admin should be able to add list of users who might be interested in subscription to the task. After task is created `subscribe` presence is sent to these users and they can accept the subscription or not.
  - Subscription restrictions - who may subscribe to the task like: public task - anybody can subscribe, local users only - users from the local server (domain) only can subscribe, by regex - regular expression matching JIDs, moderated subscription - anybody may request subscription but the creator of the task must approve the subscription.
  - On line only - the task may distribute packets to online users only.
  - Replace sender address - whether sender address should be replaced with task address. This might be useful depending where the responses should go. If the list is kind on announces board like new version release then maybe replies should go to the sender. If this is more like topic discussion group then the reply should go to all subscribers.
  - Message type - whether messages should be distributed as a `chat`, `headline` or `normal`.
  - Who can post - who can send a message for processing, possible options are: `all`, `subscribed`, `owner`, `list`
  There can be also some per task specific settings...

  Created: Wed May 9 08:27:22 2007

  Version:
    $Rev$
  Author:
    Artur Hefczyc

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `MY_DOMAIN_NAME_PROP_KEY` Field description
    `static String` | `MY_DOMAIN_NAME_PROP_VAL` Field description

    - ### 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, MINUTE, OUTGOING_FILTERS_PROP_KEY, OUTGOING_FILTERS_PROP_VAL, SCHEDULER_THREADS_PROP_KEY, SECOND`

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

      `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, 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, 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
    `StanzaReceiver()` Constructs ...

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `addOutPacket(Packet packet)` Method description
    `protected void` | `addTaskInstance(ReceiverTaskIfc task)` Describe `addTaskInstance` method here.
    `protected void` | `addTaskInstance(String task_type, String task_name, Map<String,Object> task_params)`
    `Map<String,Object>` | `getDefaults(Map<String,Object> params)` Method description
    `List<tigase.xml.Element>` | `getDiscoFeatures(tigase.xmpp.JID from)` Method description
    `tigase.xml.Element` | `getDiscoInfo(String node, tigase.xmpp.JID jid, tigase.xmpp.JID from)` Describe `getDiscoInfo` method here.
    `List<tigase.xml.Element>` | `getDiscoItems(String node, tigase.xmpp.JID jid, tigase.xmpp.JID from)` Method description
    `void` | `getStatistics(StatisticsList list)` Method description
    `ReceiverTaskIfc` | `getTask(String jidOrName)` Method description
    `protected Map<String,ReceiverTaskIfc>` | `getTaskInstances()`
    `protected Map<String,TaskType>` | `getTaskTypes()`
    `boolean` | `isAdmin(tigase.xmpp.JID jid)` Method description
    `protected boolean` | `isAllowedCreate(tigase.xmpp.JID jid, String task_type)`
    `void` | `processPacket(Packet packet)` Describe `processPacket` method here.
    `protected void` | `removeTaskInstance(ReceiverTaskIfc task)`
    `protected void` | `removeTaskSubscribers(ReceiverTaskIfc task, tigase.xmpp.JID... subscr)`
    `protected void` | `saveTaskToRepository(ReceiverTaskIfc task)`
    `void` | `setProperties(Map<String,Object> props)` Describe `setProperties` method here.

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

      `addOutPacketNB, addOutPackets, addOutPacketWithTimeout, addPacket, addPacketNB, addPackets, addRegexRouting, addTimerTask, addTimerTask, addTimerTask, addTimerTask, clearRegexRoutings, everyHour, everyMinute, everySecond, getMaxQueueSize, getRegexRoutings, hashCodeForPacket, isInRegexRoutings, newPacketId, processingInThreads, processingOutThreads, processingThreads, processOutPacket, processPacket, release, removeRegexRouting, schedulerThreads, setMaxQueueSize, setName, setParent, start, stop`

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

      `addComponentDomain, canCallCommand, checkCommandAcl, getComponentId, getDefHostName, getDefVHostItem, getDiscoCategory, getDiscoCategoryType, getDiscoDescription, getDiscoFeatures, getDiscoInfo, getDiscoItems, getName, getScriptCommands, getScriptItems, getServiceEntity, getVHostItem, handlesLocalDomains, handlesNameSubdomains, handlesNonLocalDomains, initBindings, initializationCompleted, isInitializationComplete, isLocalDomain, isLocalDomainOrComponent, isNonAdminCommands, isSubdomain, processScriptCommand, removeComponentDomain, removeServiceDiscoveryItem, setVHostManager, updateServiceDiscoveryItem, updateServiceDiscoveryItem, updateServiceDiscoveryItem`

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

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

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

      `getComponentId, getName, initializationCompleted, isInitializationComplete, processPacket, release, setName`

    - ### Methods inherited from interface tigase.server.sreceiver.StanzaReceiverIfc

      `getDefHostName, getName`

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

      `getDefHostName`

- - ### Field Detail

    - #### MY_DOMAIN_NAME_PROP_KEY

          public static final String MY_DOMAIN_NAME_PROP_KEY

      Field description
      See Also:
        Constant Field Values

    - #### MY_DOMAIN_NAME_PROP_VAL

          public static final String MY_DOMAIN_NAME_PROP_VAL

      Field description
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### StanzaReceiver

          public StanzaReceiver()

      Constructs ...

  - ### Method Detail

    - #### addOutPacket

          public boolean addOutPacket(Packet packet)

      Method description
      Specified by:
        `addOutPacket` in interface `StanzaReceiverIfc`
      Overrides:
        `addOutPacket` in class `AbstractMessageReceiver`
      Parameters:
        `packet` -
      Returns:

    - #### getDefaults

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

      Method description
      Specified by:
        `getDefaults` in interface `Configurable`
      Overrides:
        `getDefaults` in class `AbstractMessageReceiver`
      Parameters:
        `params` -
      Returns:

    - #### getDiscoFeatures

          public List<tigase.xml.Element> getDiscoFeatures(tigase.xmpp.JID from)

      Method description
      Specified by:
        `getDiscoFeatures` in interface `XMPPService`
      Overrides:
        `getDiscoFeatures` in class `BasicComponent`
      Parameters:
        `from` -
      Returns:

    - #### getDiscoInfo

          public tigase.xml.Element getDiscoInfo(String node,
                                        tigase.xmpp.JID jid,
                                        tigase.xmpp.JID from)

      Describe `getDiscoInfo` method here.
      Specified by:
        `getDiscoInfo` in interface `XMPPService`
      Overrides:
        `getDiscoInfo` in class `BasicComponent`
      Parameters:
        `node` - a `String` value
        `jid` - a `String` value
        `from` -
      Returns:
        an `Element` value

    - #### getDiscoItems

          public List<tigase.xml.Element> getDiscoItems(String node,
                                               tigase.xmpp.JID jid,
                                               tigase.xmpp.JID from)

      Method description
      Specified by:
        `getDiscoItems` in interface `XMPPService`
      Overrides:
        `getDiscoItems` in class `BasicComponent`
      Parameters:
        `node` -
        `jid` -
        `from` -
      Returns:

    - #### getStatistics

          public void getStatistics(StatisticsList list)

      Method description
      Specified by:
        `getStatistics` in interface `StatisticsContainer`
      Overrides:
        `getStatistics` in class `AbstractMessageReceiver`
      Parameters:
        `list` -

    - #### getTask

          public ReceiverTaskIfc getTask(String jidOrName)

      Method description
      Parameters:
        `jidOrName` -
      Returns:

    - #### isAdmin

          public boolean isAdmin(tigase.xmpp.JID jid)

      Method description
      Overrides:
        `isAdmin` in class `BasicComponent`
      Parameters:
        `jid` -
      Returns:

    - #### processPacket

          public void processPacket(Packet packet)

      Describe `processPacket` method here.
      Specified by:
        `processPacket` in class `AbstractMessageReceiver`
      Parameters:
        `packet` - a `Packet` value

    - #### setProperties

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

      Describe `setProperties` method here.
      Specified by:
        `setProperties` in interface `Configurable`
      Overrides:
        `setProperties` in class `AbstractMessageReceiver`
      Parameters:
        `props` - a `Map` value

    - #### addTaskInstance

          protected void addTaskInstance(String task_type,
                             String task_name,
                             Map<String,Object> task_params)
                                  throws tigase.util.TigaseStringprepException

      Throws:
        `tigase.util.TigaseStringprepException`

    - #### addTaskInstance

          protected void addTaskInstance(ReceiverTaskIfc task)

      Describe `addTaskInstance` method here.
      Parameters:
        `task` - a `ReceiverTaskIfc` value

    - #### getTaskInstances

          protected Map<String,ReceiverTaskIfc> getTaskInstances()

    - #### getTaskTypes

          protected Map<String,TaskType> getTaskTypes()

    - #### isAllowedCreate

          protected boolean isAllowedCreate(tigase.xmpp.JID jid,
                                String task_type)

    - #### removeTaskInstance

          protected void removeTaskInstance(ReceiverTaskIfc task)

    - #### removeTaskSubscribers

          protected void removeTaskSubscribers(ReceiverTaskIfc task,
                                   tigase.xmpp.JID... subscr)

    - #### saveTaskToRepository

          protected void saveTaskToRepository(ReceiverTaskIfc task)
                                       throws TigaseDBException

      Throws:
        `TigaseDBException`

Copyright © 2013 Tigase. All rights reserved.