org.jivesoftware.openfire.PresenceManager Maven / Gradle / Ivy
/*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.openfire;
import org.jivesoftware.openfire.auth.UnauthorizedException;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserNotFoundException;
import org.xmpp.packet.JID;
import org.xmpp.packet.Presence;
import java.util.Collection;
/**
* The presence manager tracks on a global basis who's online. The presence
* monitor watches and reports on what users are present on the server, and
* in other jabber domains that it knows about. The presence manager does
* not know about invisible users (they are invisible).
*
* @author Iain Shigeoka
*/
public interface PresenceManager {
/**
* Sort by username.
*/
int SORT_USERNAME = 0;
/**
* Sort by online time.
*/
int SORT_ONLINE_TIME = 1;
/**
* Returns the availability of the user.
*
* @param user the user who's availability is in question
* @return true if the user as available for messaging (1 or more available sessions)
*/
boolean isAvailable( User user );
/**
* Returns the user's current presence, or null if the user is unavailable.
* If the user is connected with more than one session, the user's "most available"
* presence status is returned.
*
* @param user the user.
* @return the user's current presence.
*/
Presence getPresence( User user );
/**
* Returns all presences for the user, or null if the user is unavailable.
*
* @param username the name of the user.
* @return the Presence packets for all the users's connected sessions.
*/
Collection getPresences( String username );
/**
* Probes the presence of the given XMPPAddress and attempts to send it to the given user. If
* the user probing the presence is using his bare JID then the probee's presence will be
* sent to all connected resources of the prober.
*
* @param prober The user requesting the probe
* @param probee The XMPPAddress whos presence we would like sent have have probed
*/
void probePresence( JID prober, JID probee );
/**
* Handle a presence probe sent by a remote server. The logic to apply is the following: If
* the remote user is not in the local user's roster with a subscription state of "From", or
* "Both", then return a presence stanza of type "error" in response to the presence probe.
* Otherwise, answer the presence of the local user sessions or the last unavailable presence.
*
* @param packet the received probe presence from a remote server.
*/
void handleProbe( Presence packet ) throws UnauthorizedException;
/**
* Returns true if the the prober is allowed to see the presence of the probee.
*
* @param prober the user that is trying to probe the presence of another user.
* @param probee the username of the user that is being probed.
* @return true if the the prober is allowed to see the presence of the probee.
* @throws UserNotFoundException If the probee does not exist in the local server or the prober
* is not present in the roster of the probee.
*/
boolean canProbePresence( JID prober, String probee ) throws UserNotFoundException;
/**
* Sends unavailable presence from all of the user's available resources to the remote user.
* When a remote user unsubscribes from the presence of a local user then the server should
* send to the remote user unavailable presence from all of the local user's available
* resources. Moreover, if the recipient user is a local user then the unavailable presence
* will be sent to all user resources.
*
* @param recipientJID JID of the remote user that will receive the unavailable presences.
* @param userJID JID of the local user.
*/
void sendUnavailableFromSessions( JID recipientJID, JID userJID );
/**
* Notification message saying that the sender of the given presence just became available.
*
* @param presence the presence sent by the available user.
*/
void userAvailable( Presence presence );
/**
* Notification message saying that the sender of the given presence just became unavailable.
*
* @param presence the presence sent by the unavailable user.
*/
void userUnavailable( Presence presence );
/**
* Returns the status sent by the user in his last unavailable presence or null if the
* user is online or never set such information.
*
* @param user the user to return his last status information
* @return the status sent by the user in his last unavailable presence or null if the
* user is online or never set such information.
*/
String getLastPresenceStatus( User user );
/**
* Returns the number of milliseconds since the user went offline or -1 if such information
* is not available or if the user is online.
*
* @param user the user to return his information.
* @return the number of milliseconds since the user went offline or -1 if such information
* is not available or if the user is online.
*/
long getLastActivity( User user );
}