Class IQPEPHandler
- java.lang.Object
-
- org.jivesoftware.openfire.container.BasicModule
-
- org.jivesoftware.openfire.handler.IQHandler
-
- org.jivesoftware.openfire.pep.IQPEPHandler
-
- All Implemented Interfaces:
ChannelHandler
,Module
,DiscoInfoProvider
,ServerFeaturesProvider
,ServerIdentitiesProvider
,UserFeaturesProvider
,UserIdentitiesProvider
,UserItemsProvider
,UserEventListener
,RosterEventListener
,PresenceEventListener
public class IQPEPHandler extends IQHandler implements ServerIdentitiesProvider, ServerFeaturesProvider, UserIdentitiesProvider, UserFeaturesProvider, UserItemsProvider, PresenceEventListener, RosterEventListener, UserEventListener, DiscoInfoProvider
An
IQHandler
used to implement XEP-0163: "Personal Eventing via Pubsub" Version 1.0For each user on the server there is an associated
PEPService
interacting with a singlePubSubEngine
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 tohandleIQ(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 Summary
Fields Modifier and Type Field Description static SystemProperty<Boolean>
ENABLED
Controls if the PEP service is available on this domain.static 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.static SystemProperty<Integer>
EXECUTOR_MAX_POOL_SIZE
The maximum number of threads to allow in the thread pool used to send PEP notifications.static 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.-
Fields inherited from class org.jivesoftware.openfire.handler.IQHandler
deliverer, sessionManager
-
-
Constructor Summary
Constructors Constructor Description IQPEPHandler()
Constructs a newIQPEPHandler
instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
addingContact(Roster roster, RosterItem item, boolean persistent)
Notification message indicating that a contact is about to be added to a roster.void
addSubscriptionForRosterItems(PEPService pepService)
Populates the PEPService instance with subscriptions.void
availableSession(ClientSession session, org.xmpp.packet.Presence presence)
Notification message indicating that a session that was not available is now available.void
contactAdded(Roster roster, RosterItem item)
Notification message indicating that a contact has been added to a roster.void
contactDeleted(Roster roster, RosterItem item)
Notification message indicating that a contact has been deleted from a roster.void
contactUpdated(Roster roster, RosterItem item)
Notification message indicating that a contact has been updated.void
destroy()
Destroys the module.Set<org.xmpp.forms.DataForm>
getExtendedInfos(String name, String node, org.xmpp.packet.JID senderJID)
Returns a collection of XDataForm with the extended information about the entity or an empty collection if none.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).Iterator<String>
getFeatures(String name, String node, org.xmpp.packet.JID senderJID)
Returns an Iterator (of String) with the supported features.Iterator<org.dom4j.Element>
getIdentities()
Implements ServerIdentitiesProvider and UserIdentitiesProvider, adding the PEP identity to the respective disco#info results.Iterator<org.dom4j.Element>
getIdentities(String name, String node, org.xmpp.packet.JID senderJID)
Returns an Iterator (of Element) with the target entity's identities.IQHandlerInfo
getInfo()
Returns the handler information to help generically handle IQ packets.PEPServiceManager
getServiceManager()
Iterator<org.dom4j.Element>
getUserItems(String name, org.xmpp.packet.JID senderJID)
Implements UserItemsProvider, adding PEP related items to a disco#items result.org.xmpp.packet.IQ
handleIQ(org.xmpp.packet.IQ packet)
Handles the received IQ packet.boolean
hasInfo(String name, String node, org.xmpp.packet.JID senderJID)
Returns true if we can provide information related to the requested name and node.void
initialize(XMPPServer server)
Initializes the basic module.void
presenceChanged(ClientSession session, org.xmpp.packet.Presence presence)
Notification message indicating that an available session has changed its presence.void
rosterLoaded(Roster roster)
Notification message indicating that a roster has just been loaded.void
start()
Starts the basic module.void
stop()
Stops the basic module.void
subscribedToPresence(org.xmpp.packet.JID subscriberJID, org.xmpp.packet.JID authorizerJID)
Notification message indicating that a user has successfully subscribed to the presence of another user.void
unavailableSession(ClientSession session, org.xmpp.packet.Presence presence)
The following functions are unimplemented required interface methods.void
unsubscribedToPresence(org.xmpp.packet.JID unsubscriberJID, org.xmpp.packet.JID recipientJID)
Notification message indicating that a user has unsubscribed to the presence of another user.void
userCreated(User user, Map<String,Object> params)
A user was created.void
userDeleting(User user, Map<String,Object> params)
A user is being deleted.void
userModified(User user, Map<String,Object> params)
A user's name, email, or an extended property was changed.-
Methods inherited from class org.jivesoftware.openfire.handler.IQHandler
performNoSuchUserCheck, process, processNoSuchUserCheck
-
Methods inherited from class org.jivesoftware.openfire.container.BasicModule
getName
-
-
-
-
Field Detail
-
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 Detail
-
IQPEPHandler
public IQPEPHandler()
Constructs a newIQPEPHandler
instance.
-
-
Method Detail
-
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 interfaceModule
- Overrides:
initialize
in classIQHandler
- 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 interfaceModule
- Overrides:
destroy
in classBasicModule
-
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 interfaceModule
- Overrides:
start
in classBasicModule
-
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 interfaceModule
- Overrides:
stop
in classBasicModule
-
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) returnnull
.
-
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 interfaceServerIdentitiesProvider
- Specified by:
getIdentities
in interfaceUserIdentitiesProvider
- 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 interfaceServerFeaturesProvider
- Specified by:
getFeatures
in interfaceUserFeaturesProvider
- 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.
-
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 interfaceUserItemsProvider
- 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 interfacePresenceEventListener
- 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 interfacePresenceEventListener
- 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 interfacePresenceEventListener
- 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 interfaceRosterEventListener
- 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 interfaceUserEventListener
- 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 interfacePresenceEventListener
- 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 interfacePresenceEventListener
- 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 returnfalse
so that the contact is not persisted.- Specified by:
addingContact
in interfaceRosterEventListener
- 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 interfaceRosterEventListener
- 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 interfaceRosterEventListener
- 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 interfaceRosterEventListener
- 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 interfaceUserEventListener
- 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 interfaceUserEventListener
- 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 categoty, type and name attributes of the entity.- Specified by:
getIdentities
in interfaceDiscoInfoProvider
- 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 interfaceDiscoInfoProvider
- 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 interfaceDiscoInfoProvider
- 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 interfaceDiscoInfoProvider
- 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
-
-