Class LocalClientSession
- java.lang.Object
-
- org.jivesoftware.openfire.session.LocalSession
-
- org.jivesoftware.openfire.session.LocalClientSession
-
- All Implemented Interfaces:
ChannelHandler<org.xmpp.packet.Packet>
,RoutableChannelHandler
,ClientSession
,Session
- Direct Known Subclasses:
HttpSession
public class LocalClientSession extends LocalSession implements ClientSession
Represents a session between the server and a client.- Author:
- Gaston Dombiak
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.jivesoftware.openfire.session.Session
Session.Status
-
-
Field Summary
Fields Modifier and Type Field Description protected AuthToken
authToken
The authentication token for this session.protected CsiManager
csiManager
XEP-0352 Client State Indication Manager-
Fields inherited from class org.jivesoftware.openfire.session.LocalSession
address, conn, serverName, sessionManager, startDate, status, streamID, streamManager
-
Fields inherited from interface org.jivesoftware.openfire.session.Session
MAJOR_VERSION, MINOR_VERSION, STATUS_AUTHENTICATED, STATUS_CLOSED, STATUS_CONNECTED
-
-
Constructor Summary
Constructors Constructor Description LocalClientSession(String serverName, Connection connection, StreamID streamID, Locale language)
Creates a session with an underlying connection and permission protection.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
canFloodOfflineMessages()
Returns true if the offline messages of the user should be sent to the user when the user becomes online.boolean
canProcess(org.xmpp.packet.Packet packet)
Returns true if the specified packet must not be blocked based on the active or default privacy list rules.static LocalClientSession
createSession(String serverName, org.xmlpull.v1.XmlPullParser xpp, Connection connection)
Returns a newly created session between the server and a client.void
deliver(org.xmpp.packet.Packet queueOrPushStanza)
PrivacyList
getActiveList()
Returns the Privacy list that overrides the default privacy list.AuthToken
getAuthToken()
Returns the authentication token associated with this session.List<org.dom4j.Element>
getAvailableStreamFeatures()
Returns a text with the available stream features.static Set<String>
getBlacklistedIPs()
Returns the list of IP address that are disallowed to connect to the server.CsiManager
getCsiManager()
Returns the Client State Indication manager for this session.PrivacyList
getDefaultList()
Returns the default Privacy list used for the session's user.org.xmpp.packet.Presence
getPresence()
Obtain the presence of this session.String
getUsername()
Returns the username associated with this session.static Set<String>
getWhitelistedAnonymousIPs()
Returns the list of IP address that are allowed to connect to the server for anonymous users.static Set<String>
getWhitelistedIPs()
Returns the list of IP address that are allowed to connect to the server.boolean
hasRequestedBlocklist()
Indicates whether this session has requested a blocklist, as specified in XEP-0191.int
incrementConflictCount()
Increments the conflict by one.static boolean
isAddressInRange(byte[] address, Set<String> ranges)
static boolean
isAllowed(Connection connection)
static boolean
isAllowedAnonymous(Connection connection)
boolean
isAnonymousUser()
Returns true if the authetnicated user is an anonymous user or if the use has not authenticated yet.boolean
isInitialized()
Flag indicating if this session has been initialized once coming online.boolean
isMessageCarbonsEnabled()
Indicates, whether message carbons are enabled.boolean
isOfflineFloodStopped()
Returns true if the user requested to not receive offline messages when sending an available presence.void
reattach(LocalSession connectionProvider, long h)
Reattach the (existing) session to the connection provided by a new session (a session that will be replaced by the older, pre-existing session).void
setActiveList(PrivacyList activeList)
Sets the Privacy list that overrides the default privacy list.void
setAnonymousAuth()
Initialize the session as an anonymous login.void
setAuthToken(AuthToken auth)
Sets the new Authorization Token for this session.void
setAuthToken(AuthToken auth, String resource)
Initialize the session with a valid authentication token and resource name.static void
setBlacklistedIPs(Set<String> blocked)
Sets the list of IP address that are not allowed to connect to the server.void
setDefaultList(PrivacyList defaultList)
Sets the default Privacy list used for the session's user.void
setHasRequestedBlocklist(boolean hasRequestedBlocklist)
Defines if this session has requested a blocklist, as specified in XEP-0191.void
setInitialized(boolean isInit)
Sets the initialization state of the session.void
setMessageCarbonsEnabled(boolean enabled)
Enables or disables XEP-0280: Message Carbons for this session.void
setOfflineFloodStopped(boolean offlineFloodStopped)
Sets if the user requested to not receive offline messages when sending an available presence.void
setPresence(org.xmpp.packet.Presence presence)
Set the presence of this sessionstatic void
setWhitelistedAnonymousIPs(Set<String> allowed)
Sets the list of IP address that are allowed to connect to the server for anonymous users.static void
setWhitelistedIPs(Set<String> allowed)
Sets the list of IP address that are allowed to connect to the server.String
toString()
boolean
wasAvailable()
Returns true if the session was available ever.-
Methods inherited from class org.jivesoftware.openfire.session.LocalSession
close, decodeVersion, deliverRawText, getAddress, getCipherSuiteName, getConnection, getCreationDate, getHostAddress, getHostName, getLanguage, getLastActiveDate, getNumClientPackets, getNumServerPackets, getPeerCertificates, getServerName, getSessionData, getSoftwareVersion, getStatus, getStreamID, getStreamManager, getTLSProtocolName, incrementClientPacketCount, incrementServerPacketCount, isClosed, isDetached, isEncrypted, isSecure, isUsingSelfSignedCertificate, process, removeSessionData, setAddress, setDetached, setSessionData, setSoftwareVersionData, setStatus, validate
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.jivesoftware.openfire.session.Session
close, deliverRawText, getAddress, getCipherSuiteName, getCreationDate, getHostAddress, getHostName, getLanguage, getLastActiveDate, getNumClientPackets, getNumServerPackets, getPeerCertificates, getServerName, getSoftwareVersion, getStatus, getStreamID, getTLSProtocolName, isAuthenticated, isClosed, isEncrypted, isSecure, process, validate
-
-
-
-
Field Detail
-
authToken
protected AuthToken authToken
The authentication token for this session.
-
csiManager
protected final CsiManager csiManager
XEP-0352 Client State Indication Manager
-
-
Constructor Detail
-
LocalClientSession
public LocalClientSession(String serverName, Connection connection, StreamID streamID, Locale language)
Creates a session with an underlying connection and permission protection.- Parameters:
serverName
- name of the server.connection
- The connection we are proxying.streamID
- unique identifier of this session.language
- the language
-
-
Method Detail
-
getWhitelistedIPs
public static Set<String> getWhitelistedIPs()
Returns the list of IP address that are allowed to connect to the server. If the list is empty then anyone is allowed to connect to the server except for anonymous users that are subject togetWhitelistedAnonymousIPs()
. This list is used for both anonymous and non-anonymous users. Note that the blacklist ingetBlacklistedIPs()
should take precedence!- Returns:
- the collection of IP address that are allowed to connect to the server. Never null, possibly empty.
-
getWhitelistedAnonymousIPs
public static Set<String> getWhitelistedAnonymousIPs()
Returns the list of IP address that are allowed to connect to the server for anonymous users. If the list is empty then anonymous will be only restricted bygetWhitelistedIPs()
. Note that the blacklist ingetBlacklistedIPs()
should take precedence!- Returns:
- the collection of IP address that are allowed to connect to the server. Never null, possibly empty.
-
getBlacklistedIPs
public static Set<String> getBlacklistedIPs()
Returns the list of IP address that are disallowed to connect to the server. If the list is empty then anyone is allowed to connect to the server, subject to whitelisting. This list is used for both anonymous and non-anonymous users.- Returns:
- the collection of IP address that are not allowed to connect to the server. Never null, possibly empty.
-
createSession
public static LocalClientSession createSession(String serverName, org.xmlpull.v1.XmlPullParser xpp, Connection connection) throws org.xmlpull.v1.XmlPullParserException
Returns a newly created session between the server and a client. The session will be created and returned only if correct name/prefix ('stream') and namespace were provided by the client.- Parameters:
serverName
- the name of the server where the session is connecting to.xpp
- the parser that is reading the provided XML through the connection.connection
- the connection with the client.- Returns:
- a newly created session between the server and a client.
- Throws:
org.xmlpull.v1.XmlPullParserException
- if an error occurs while parsing incoming data.
-
isAllowed
public static boolean isAllowed(Connection connection)
-
isAllowedAnonymous
public static boolean isAllowedAnonymous(Connection connection)
-
setWhitelistedIPs
public static void setWhitelistedIPs(Set<String> allowed)
Sets the list of IP address that are allowed to connect to the server. If the list is empty then anyone not ongetBlacklistedIPs()
is allowed to connect to the server except for anonymous users that are subject togetWhitelistedAnonymousIPs()
. This list is used for both anonymous and non-anonymous users. Note that blacklisting takes precedence over whitelisting: if an address is matched by both, access is denied.- Parameters:
allowed
- the list of IP address that are allowed to connect to the server. Can be empty, but not null.
-
setWhitelistedAnonymousIPs
public static void setWhitelistedAnonymousIPs(Set<String> allowed)
Sets the list of IP address that are allowed to connect to the server for anonymous users. If the list is empty then anonymous will be only restricted bygetBlacklistedIPs()
andgetWhitelistedIPs()
.- Parameters:
allowed
- the list of IP address that are allowed to connect to the server. Can be empty, but not null.
-
setBlacklistedIPs
public static void setBlacklistedIPs(Set<String> blocked)
Sets the list of IP address that are not allowed to connect to the server. This list is used for both anonymous and non-anonymous users, and always takes precedence over a whitelist.- Parameters:
blocked
- the list of IP address that are not allowed to connect to the server. Can be empty, but not null.
-
getActiveList
public PrivacyList getActiveList()
Returns the Privacy list that overrides the default privacy list. This list affects only this session and only for the duration of the session.- Specified by:
getActiveList
in interfaceClientSession
- Returns:
- the Privacy list that overrides the default privacy list.
-
setActiveList
public void setActiveList(PrivacyList activeList)
Sets the Privacy list that overrides the default privacy list. This list affects only this session and only for the duration of the session.- Specified by:
setActiveList
in interfaceClientSession
- Parameters:
activeList
- the Privacy list that overrides the default privacy list.
-
getDefaultList
public PrivacyList getDefaultList()
Returns the default Privacy list used for the session's user. This list is processed if there is no active list set for the session.- Specified by:
getDefaultList
in interfaceClientSession
- Returns:
- the default Privacy list used for the session's user.
-
setDefaultList
public void setDefaultList(PrivacyList defaultList)
Sets the default Privacy list used for the session's user. This list is processed if there is no active list set for the session.- Specified by:
setDefaultList
in interfaceClientSession
- Parameters:
defaultList
- the default Privacy list used for the session's user.
-
getUsername
public String getUsername() throws UserNotFoundException
Returns the username associated with this session. Use this information with the user manager to obtain the user based on username.- Specified by:
getUsername
in interfaceClientSession
- Returns:
- the username associated with this session
- Throws:
UserNotFoundException
- if a user is not associated with a session (the session has not authenticated yet)
-
setAuthToken
public void setAuthToken(AuthToken auth)
Sets the new Authorization Token for this session. The session is not yet considered fully authenticated (i.e. active) since a resource has not been binded at this point. This message will be sent after SASL authentication was successful but yet resource binding is required.- Parameters:
auth
- the authentication token obtained from SASL authentication.
-
setAuthToken
public void setAuthToken(AuthToken auth, String resource)
Initialize the session with a valid authentication token and resource name. This automatically upgrades the session's status to authenticated and enables many features that are not available until authenticated (obtaining managers for example).- Parameters:
auth
- the authentication token obtained from the AuthFactory.resource
- the resource this session authenticated under.
-
setAnonymousAuth
public void setAnonymousAuth()
Initialize the session as an anonymous login. This automatically upgrades the session's status to authenticated and enables many features that are not available until authenticated (obtaining managers for example).
-
getAuthToken
public AuthToken getAuthToken()
Returns the authentication token associated with this session.- Returns:
- the authentication token associated with this session (can be null).
-
isAnonymousUser
public boolean isAnonymousUser()
Description copied from interface:ClientSession
Returns true if the authetnicated user is an anonymous user or if the use has not authenticated yet.- Specified by:
isAnonymousUser
in interfaceClientSession
- Returns:
- true if the authetnicated user is an anonymous user or if the use has not authenticated yet.
-
isInitialized
public boolean isInitialized()
Flag indicating if this session has been initialized once coming online. Session initialization occurs after the session receives the first "available" presence update from the client. Initialization actions include pushing offline messages, presence subscription requests, and presence statuses to the client. Initialization occurs only once following the first available presence transition.- Specified by:
isInitialized
in interfaceClientSession
- Returns:
- True if the session has already been initializsed
-
setInitialized
public void setInitialized(boolean isInit)
Sets the initialization state of the session.- Specified by:
setInitialized
in interfaceClientSession
- Parameters:
isInit
- True if the session has been initialized- See Also:
isInitialized()
-
wasAvailable
public boolean wasAvailable()
Returns true if the session was available ever.- Returns:
- true if the session was available ever.
-
canFloodOfflineMessages
public boolean canFloodOfflineMessages()
Returns true if the offline messages of the user should be sent to the user when the user becomes online. If the user sent a disco request with node "http://jabber.org/protocol/offline" before the available presence then do not flood the user with the offline messages. If the user is connected from many resources then if one of the sessions stopped the flooding then no session should flood the user.- Specified by:
canFloodOfflineMessages
in interfaceClientSession
- Returns:
- true if the offline messages of the user should be sent to the user when the user becomes online.
- See Also:
- XEP-0160: Best Practices for Handling Offline Messages
-
isOfflineFloodStopped
public boolean isOfflineFloodStopped()
Returns true if the user requested to not receive offline messages when sending an available presence. The user may send a disco request with node "http://jabber.org/protocol/offline" so that no offline messages are sent to the user when he becomes online. If the user is connected from many resources then if one of the sessions stopped the flooding then no session should flood the user.- Specified by:
isOfflineFloodStopped
in interfaceClientSession
- Returns:
- true if the user requested to not receive offline messages when sending an available presence.
-
setOfflineFloodStopped
public void setOfflineFloodStopped(boolean offlineFloodStopped)
Sets if the user requested to not receive offline messages when sending an available presence. The user may send a disco request with node "http://jabber.org/protocol/offline" so that no offline messages are sent to the user when he becomes online. If the user is connected from many resources then if one of the sessions stopped the flooding then no session should flood the user.- Parameters:
offlineFloodStopped
- if the user requested to not receive offline messages when sending an available presence.
-
reattach
public void reattach(LocalSession connectionProvider, long h)
Description copied from class:LocalSession
Reattach the (existing) session to the connection provided by a new session (a session that will be replaced by the older, pre-existing session). The connection must already be initialized as a running XML Stream, normally by having run through XEP-0198 resumption.- Overrides:
reattach
in classLocalSession
- Parameters:
connectionProvider
- Session from which to obtain the connection from.h
- the sequence number of the last handled stanza sent over the former stream
-
getCsiManager
public CsiManager getCsiManager()
Returns the Client State Indication manager for this session.- Returns:
- A Client State Indication manager
-
getPresence
public org.xmpp.packet.Presence getPresence()
Obtain the presence of this session.- Specified by:
getPresence
in interfaceClientSession
- Returns:
- The presence of this session or null if not authenticated
-
setPresence
public void setPresence(org.xmpp.packet.Presence presence)
Set the presence of this session- Specified by:
setPresence
in interfaceClientSession
- Parameters:
presence
- The presence for the session
-
getAvailableStreamFeatures
public List<org.dom4j.Element> getAvailableStreamFeatures()
Description copied from class:LocalSession
Returns a text with the available stream features. Each subclass may return different values depending whether the session has been authenticated or not.- Specified by:
getAvailableStreamFeatures
in classLocalSession
- Returns:
- a text with the available stream features or
null
to add nothing.
-
incrementConflictCount
public int incrementConflictCount()
Increments the conflict by one.- Specified by:
incrementConflictCount
in interfaceClientSession
- Returns:
- the new number of conflicts detected on this session.
-
isMessageCarbonsEnabled
public boolean isMessageCarbonsEnabled()
Description copied from interface:ClientSession
Indicates, whether message carbons are enabled.- Specified by:
isMessageCarbonsEnabled
in interfaceClientSession
- Returns:
- True, if message carbons are enabled.
-
setMessageCarbonsEnabled
public void setMessageCarbonsEnabled(boolean enabled)
Description copied from interface:ClientSession
Enables or disables XEP-0280: Message Carbons for this session.- Specified by:
setMessageCarbonsEnabled
in interfaceClientSession
- Parameters:
enabled
- True, if message carbons are enabled.- See Also:
- XEP-0280: Message Carbons
-
hasRequestedBlocklist
public boolean hasRequestedBlocklist()
Description copied from interface:ClientSession
Indicates whether this session has requested a blocklist, as specified in XEP-0191.- Specified by:
hasRequestedBlocklist
in interfaceClientSession
- Returns:
- true when a blocklist was requested, otherwise false;
-
setHasRequestedBlocklist
public void setHasRequestedBlocklist(boolean hasRequestedBlocklist)
Description copied from interface:ClientSession
Defines if this session has requested a blocklist, as specified in XEP-0191.- Specified by:
setHasRequestedBlocklist
in interfaceClientSession
- Parameters:
hasRequestedBlocklist
- True when a blocklist has been requested by this session, otherwise false.
-
canProcess
public boolean canProcess(org.xmpp.packet.Packet packet)
Returns true if the specified packet must not be blocked based on the active or default privacy list rules. The active list will be tried first. If none was found then the default list is going to be used. If no default list was defined for this user then allow the packet to flow.- Parameters:
packet
- the packet to analyze if it must be blocked.- Returns:
- true if the specified packet must *not* be blocked.
-
deliver
public void deliver(org.xmpp.packet.Packet queueOrPushStanza) throws UnauthorizedException
- Throws:
UnauthorizedException
-
toString
public String toString()
- Overrides:
toString
in classLocalSession
-
-