Class IQPEPHandler

All Implemented Interfaces:
ChannelHandler<org.xmpp.packet.IQ>, Module, DiscoInfoProvider, ServerFeaturesProvider, ServerIdentitiesProvider, UserFeaturesProvider, UserIdentitiesProvider, UserItemsProvider, UserEventListener, RosterEventListener, PresenceEventListener

An IQHandler used to implement XEP-0163: "Personal Eventing via Pubsub" Version 1.0

For each user on the server there is an associated PEPService interacting with a single PubSubEngine for managing the user's PEP nodes.

An IQHandler can only handle one namespace in its IQHandlerInfo. However, PEP related packets are seen having a variety of different namespaces. Thus, classes like IQPEPOwnerHandler are used to forward packets having these other namespaces to handleIQ(IQ).

This handler is used for the following namespaces:

  • http://jabber.org/protocol/pubsub
  • http://jabber.org/protocol/pubsub#owner
Author:
Armando Jagucki, Guus der Kinderen, guus.der.kinderen@gmail.com
  • Field Details

    • ENABLED

      public static final SystemProperty<Boolean> ENABLED
      Controls if the PEP service is available on this domain.
    • EXECUTOR_CORE_POOL_SIZE

      public static final SystemProperty<Integer> EXECUTOR_CORE_POOL_SIZE
      The number of threads to keep in the thread pool used to send PEP notifications, even if they are idle.
    • EXECUTOR_MAX_POOL_SIZE

      public static final SystemProperty<Integer> EXECUTOR_MAX_POOL_SIZE
      The maximum number of threads to allow in the thread pool used to send PEP notifications.
    • EXECUTOR_POOL_KEEP_ALIVE

      public static final SystemProperty<Duration> EXECUTOR_POOL_KEEP_ALIVE
      The number of threads in the thread pool used to send PEP notifications is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating.
  • Constructor Details

    • IQPEPHandler

      public IQPEPHandler()
      Constructs a new IQPEPHandler instance.
  • Method Details

    • initialize

      public void initialize(XMPPServer server)
      Description copied from class: BasicModule

      Initializes the basic module.

      Inheriting classes that choose to override this method MUST call this initialize() method before accessing BasicModule resources.

      Specified by:
      initialize in interface Module
      Overrides:
      initialize in class IQHandler
      Parameters:
      server - the server hosting this module.
    • getServiceManager

      public PEPServiceManager getServiceManager()
    • destroy

      public void destroy()
      Description copied from class: BasicModule

      Destroys the module.

      Does nothing in the basic module.

      Specified by:
      destroy in interface Module
      Overrides:
      destroy in class BasicModule
    • start

      public void start()
      Description copied from class: BasicModule

      Starts the basic module.

      Inheriting classes that choose to override this method MUST call this start() method before accessing BasicModule resources.

      Specified by:
      start in interface Module
      Overrides:
      start in class BasicModule
    • stop

      public void stop()
      Description copied from class: BasicModule

      Stops the basic module.

      Inheriting classes that choose to override this method MUST call this stop() method before accessing BasicModule resources.

      Specified by:
      stop in interface Module
      Overrides:
      stop in class BasicModule
    • getInfo

      public IQHandlerInfo getInfo()
      Description copied from class: IQHandler
      Returns the handler information to help generically handle IQ packets. IQHandlers that aren't local server iq handlers (e.g. chatbots, transports, etc) return null.
      Specified by:
      getInfo in class IQHandler
      Returns:
      The IQHandlerInfo for this handler
    • getIdentities

      public Iterator<org.dom4j.Element> getIdentities()
      Implements ServerIdentitiesProvider and UserIdentitiesProvider, adding the PEP identity to the respective disco#info results.
      Specified by:
      getIdentities in interface ServerIdentitiesProvider
      Specified by:
      getIdentities in interface UserIdentitiesProvider
      Returns:
      an Iterator (of Element) with identities of protocols supported by the server.
    • getFeatures

      public Iterator<String> getFeatures()
      Implements ServerFeaturesProvider to include all supported XEP-0060 features in the server's disco#info result (as per section 4 of XEP-0163).
      Specified by:
      getFeatures in interface ServerFeaturesProvider
      Specified by:
      getFeatures in interface UserFeaturesProvider
      Returns:
      an Iterator (of String) with the supported features by the server.
    • handleIQ

      public org.xmpp.packet.IQ handleIQ(org.xmpp.packet.IQ packet)
      Description copied from class: IQHandler
      Handles the received IQ packet.
      Specified by:
      handleIQ in class IQHandler
      Parameters:
      packet - the IQ packet to handle.
      Returns:
      the response to send back.
    • addSubscriptionForRosterItems

      public void addSubscriptionForRosterItems(PEPService pepService)
      Populates the PEPService instance with subscriptions. The subscriptions that are added to the PEPService are based on the roster of the owner of the PEPService: every entity that's subscribed to the presence of the owner, is added as a subscriber of the PEPService. This method adds, but does not remove of update existing subscriptions.
      Parameters:
      pepService - The PEPService to be populated with subscriptions.
    • getUserItems

      public Iterator<org.dom4j.Element> getUserItems(String name, org.xmpp.packet.JID senderJID)
      Implements UserItemsProvider, adding PEP related items to a disco#items result.
      Specified by:
      getUserItems in interface UserItemsProvider
      Parameters:
      name - the recipient JID's name.
      senderJID - the XMPPAddress of user that sent the disco items request.
      Returns:
      an Iterator (of Element) with the target entity's items or null if none.
    • subscribedToPresence

      public void subscribedToPresence(org.xmpp.packet.JID subscriberJID, org.xmpp.packet.JID authorizerJID)
      Description copied from interface: PresenceEventListener
      Notification message indicating that a user has successfully subscribed to the presence of another user.
      Specified by:
      subscribedToPresence in interface PresenceEventListener
      Parameters:
      subscriberJID - the user that initiated the subscription.
      authorizerJID - the user that authorized the subscription.
    • unsubscribedToPresence

      public void unsubscribedToPresence(org.xmpp.packet.JID unsubscriberJID, org.xmpp.packet.JID recipientJID)
      Description copied from interface: PresenceEventListener
      Notification message indicating that a user has unsubscribed to the presence of another user.
      Specified by:
      unsubscribedToPresence in interface PresenceEventListener
      Parameters:
      unsubscriberJID - the user that initiated the unsubscribe request.
      recipientJID - the recipient user of the unsubscribe request.
    • availableSession

      public void availableSession(ClientSession session, org.xmpp.packet.Presence presence)
      Description copied from interface: PresenceEventListener
      Notification message indicating that a session that was not available is now available. A session becomes available when an available presence is received. Sessions that are available will have a route in the routing table thus becoming eligible for receiving messages (in particular messages sent to the user bare JID).
      Specified by:
      availableSession in interface PresenceEventListener
      Parameters:
      session - the session that is now available.
      presence - the received available presence.
    • contactDeleted

      public void contactDeleted(Roster roster, RosterItem item)
      Description copied from interface: RosterEventListener
      Notification message indicating that a contact has been deleted from a roster.
      Specified by:
      contactDeleted in interface RosterEventListener
      Parameters:
      roster - the roster that was updated.
      item - the roster item that was deleted.
    • userDeleting

      public void userDeleting(User user, Map<String,Object> params)
      Description copied from interface: UserEventListener
      A user is being deleted.
      Specified by:
      userDeleting in interface UserEventListener
      Parameters:
      user - the user.
      params - event parameters.
    • unavailableSession

      public void unavailableSession(ClientSession session, org.xmpp.packet.Presence presence)
      The following functions are unimplemented required interface methods.
      Specified by:
      unavailableSession in interface PresenceEventListener
      Parameters:
      session - the session that is no longer available.
      presence - the received unavailable presence.
    • presenceChanged

      public void presenceChanged(ClientSession session, org.xmpp.packet.Presence presence)
      Description copied from interface: PresenceEventListener
      Notification message indicating that an available session has changed its presence. This is the case when the user presence changed the show value (e.g. away, dnd, etc.) or the presence status message.
      Specified by:
      presenceChanged in interface PresenceEventListener
      Parameters:
      session - the affected session.
      presence - the received available presence with the new information.
    • addingContact

      public boolean addingContact(Roster roster, RosterItem item, boolean persistent)
      Description copied from interface: RosterEventListener
      Notification message indicating that a contact is about to be added to a roster. New contacts may be persisted to the database or not. Listeners may indicate that contact about to be persisted should not be persisted. Only one listener is needed to return false so that the contact is not persisted.
      Specified by:
      addingContact in interface RosterEventListener
      Parameters:
      roster - the roster that was updated.
      item - the new roster item.
      persistent - true if the new contact is going to be saved to the database.
      Returns:
      false if the contact should not be persisted to the database.
    • contactAdded

      public void contactAdded(Roster roster, RosterItem item)
      Description copied from interface: RosterEventListener
      Notification message indicating that a contact has been added to a roster.
      Specified by:
      contactAdded in interface RosterEventListener
      Parameters:
      roster - the roster that was updated.
      item - the new roster item.
    • contactUpdated

      public void contactUpdated(Roster roster, RosterItem item)
      Description copied from interface: RosterEventListener
      Notification message indicating that a contact has been updated.
      Specified by:
      contactUpdated in interface RosterEventListener
      Parameters:
      roster - the roster that was updated.
      item - the updated roster item.
    • rosterLoaded

      public void rosterLoaded(Roster roster)
      Description copied from interface: RosterEventListener
      Notification message indicating that a roster has just been loaded.
      Specified by:
      rosterLoaded in interface RosterEventListener
      Parameters:
      roster - the loaded roster.
    • userCreated

      public void userCreated(User user, Map<String,Object> params)
      Description copied from interface: UserEventListener
      A user was created.
      Specified by:
      userCreated in interface UserEventListener
      Parameters:
      user - the user.
      params - event parameters.
    • userModified

      public void userModified(User user, Map<String,Object> params)
      Description copied from interface: UserEventListener
      A user's name, email, or an extended property was changed.
      Specified by:
      userModified in interface UserEventListener
      Parameters:
      user - the user.
      params - event parameters.
    • getIdentities

      public Iterator<org.dom4j.Element> getIdentities(String name, String node, org.xmpp.packet.JID senderJID)
      Description copied from interface: DiscoInfoProvider
      Returns an Iterator (of Element) with the target entity's identities. Each Element must include the category, type and name attributes of the entity.
      Specified by:
      getIdentities in interface DiscoInfoProvider
      Parameters:
      name - the recipient JID's name.
      node - the requested disco node.
      senderJID - the XMPPAddress of user that sent the disco info request.
      Returns:
      an Iterator (of Element) with the target entity's identities.
    • getFeatures

      public Iterator<String> getFeatures(String name, String node, org.xmpp.packet.JID senderJID)
      Description copied from interface: DiscoInfoProvider
      Returns an Iterator (of String) with the supported features. The features to include are the features offered and supported protocols by the target entity identified by the requested name and node.
      Specified by:
      getFeatures in interface DiscoInfoProvider
      Parameters:
      name - the recipient JID's name.
      node - the requested disco node.
      senderJID - the XMPPAddress of user that sent the disco info request.
      Returns:
      an Iterator (of String) with the supported features.
    • getExtendedInfos

      public Set<org.xmpp.forms.DataForm> getExtendedInfos(String name, String node, org.xmpp.packet.JID senderJID)
      Description copied from interface: DiscoInfoProvider
      Returns a collection of XDataForm with the extended information about the entity or an empty collection if none. Each bit of information about the entity must be included as a value of a field of the form.
      Specified by:
      getExtendedInfos in interface DiscoInfoProvider
      Parameters:
      name - the recipient JID's name.
      node - the requested disco node.
      senderJID - the XMPPAddress of user that sent the disco info request.
      Returns:
      A collection of XDataForms with the extended information about the entity or an empty collection if none.
    • hasInfo

      public boolean hasInfo(String name, String node, org.xmpp.packet.JID senderJID) throws UnauthorizedException
      Description copied from interface: DiscoInfoProvider
      Returns true if we can provide information related to the requested name and node. For example, if the requested name refers to a non-existent MUC room then the answer will be false. In case that the sender of the disco request is not authorized to discover this information an UnauthorizedException will be thrown.
      Specified by:
      hasInfo in interface DiscoInfoProvider
      Parameters:
      name - the recipient JID's name.
      node - the requested disco node.
      senderJID - the XMPPAddress of user that sent the disco info request.
      Returns:
      true if we can provide information related to the requested name and node.
      Throws:
      UnauthorizedException - When senderJID is not authorized to discover information