use of org.jivesoftware.openfire.session.ClientSession in project Openfire by igniterealtime.
the class GetNumberActiveUsers method execute.
@Override
public void execute(SessionData data, Element command) {
DataForm form = new DataForm(DataForm.Type.result);
FormField field = form.addField();
field.setType(FormField.Type.hidden);
field.setVariable("FORM_TYPE");
field.addValue("http://jabber.org/protocol/admin");
field = form.addField();
field.setLabel(getLabel());
field.setVariable("activeusersnum");
// Make sure that we are only counting based on bareJIDs and not fullJIDs
Collection<ClientSession> sessions = SessionManager.getInstance().getSessions();
Set<String> users = new HashSet<>(sessions.size());
for (ClientSession session : sessions) {
if (session.getPresence().isAvailable()) {
users.add(session.getAddress().toBareJID());
}
}
field.addValue(users.size());
command.add(form.getElement());
}
use of org.jivesoftware.openfire.session.ClientSession in project Openfire by igniterealtime.
the class GetNumberOnlineUsers method execute.
@Override
public void execute(SessionData data, Element command) {
DataForm form = new DataForm(DataForm.Type.result);
FormField field = form.addField();
field.setType(FormField.Type.hidden);
field.setVariable("FORM_TYPE");
field.addValue("http://jabber.org/protocol/admin");
field = form.addField();
field.setLabel(getLabel());
field.setVariable("onlineusersnum");
// Make sure that we are only counting based on bareJIDs and not fullJIDs
Collection<ClientSession> sessions = SessionManager.getInstance().getSessions();
Set<String> users = new HashSet<>(sessions.size());
for (ClientSession session : sessions) {
users.add(session.getAddress().toBareJID());
}
field.addValue(users.size());
command.add(form.getElement());
}
use of org.jivesoftware.openfire.session.ClientSession in project Openfire by igniterealtime.
the class GetUsersPresence method execute.
@Override
public void execute(SessionData data, Element command) {
String max_items = data.getData().get("max_items").get(0);
int maxItems = -1;
if (max_items != null && !"none".equals(max_items)) {
try {
maxItems = Integer.parseInt(max_items);
} catch (NumberFormatException e) {
// Do nothing. Assume that all users are being requested
}
}
DataForm form = new DataForm(DataForm.Type.result);
FormField field = form.addField();
field.setType(FormField.Type.hidden);
field.setVariable("FORM_TYPE");
field.addValue("http://jabber.org/protocol/admin");
field = form.addField();
field.setLabel("The presences of active users");
field.setVariable("activeuserpresences");
// Get list of users (i.e. bareJIDs) that are connected to the server
Collection<ClientSession> sessions = SessionManager.getInstance().getSessions();
int index = 1;
for (ClientSession session : sessions) {
if (session.getPresence().isAvailable()) {
field.addValue(session.getPresence().toXML());
}
if (maxItems > 0 && index >= maxItems) {
break;
}
}
command.add(form.getElement());
}
use of org.jivesoftware.openfire.session.ClientSession in project Openfire by igniterealtime.
the class MultiplexerPacketHandler method handle.
/**
* Process IQ packet sent by a connection manager indicating that a new session has
* been created, should be closed or that a packet was failed to be delivered.
*
* @param packet the IQ packet.
*/
public void handle(Packet packet) {
if (packet instanceof IQ) {
IQ iq = (IQ) packet;
if (iq.getType() == IQ.Type.result) {
// Do nothing with result packets
} else if (iq.getType() == IQ.Type.error) {
// Log the IQ error packet that the connection manager failed to process
Log.warn("Connection Manager failed to process IQ packet: " + packet.toXML());
} else if (iq.getType() == IQ.Type.set) {
Element child = iq.getChildElement();
String streamIDValue = child.attributeValue("id");
if (streamIDValue == null) {
// No stream ID was included so return a bad_request error
Element extraError = DocumentHelper.createElement(QName.get("id-required", "http://jabber.org/protocol/connectionmanager#errors"));
sendErrorPacket(iq, PacketError.Condition.bad_request, extraError);
} else if ("session".equals(child.getName())) {
StreamID streamID = BasicStreamIDFactory.createStreamID(streamIDValue);
Element create = child.element("create");
if (create != null) {
// Get the InetAddress of the client
Element hostElement = create.element("host");
String hostName = hostElement != null ? hostElement.attributeValue("name") : null;
String hostAddress = hostElement != null ? hostElement.attributeValue("address") : null;
// Connection Manager wants to create a Client Session
boolean created = multiplexerManager.createClientSession(connectionManagerDomain, streamID, hostName, hostAddress);
if (created) {
sendResultPacket(iq);
} else {
// Send error to CM. The CM should close the new-born connection
sendErrorPacket(iq, PacketError.Condition.not_allowed, null);
}
} else {
ClientSession session = multiplexerManager.getClientSession(connectionManagerDomain, streamID);
if (session == null) {
// Specified Client Session does not exist
sendErrorPacket(iq, PacketError.Condition.item_not_found, null);
} else if (child.element("close") != null) {
// Connection Manager wants to close a Client Session
multiplexerManager.closeClientSession(connectionManagerDomain, streamID);
sendResultPacket(iq);
} else if (child.element("failed") != null) {
// Connection Manager failed to deliver a message
// Connection Manager wrapped a packet from a Client Session.
List wrappedElements = child.element("failed").elements();
if (wrappedElements.size() != 1) {
// Wrapper element is wrapping 0 or many items
Element extraError = DocumentHelper.createElement(QName.get("invalid-payload", "http://jabber.org/protocol/connectionmanager#errors"));
sendErrorPacket(iq, PacketError.Condition.bad_request, extraError);
} else {
Element wrappedElement = (Element) wrappedElements.get(0);
String tag = wrappedElement.getName();
if ("message".equals(tag)) {
XMPPServer.getInstance().getOfflineMessageStrategy().storeOffline(new Message(wrappedElement));
sendResultPacket(iq);
} else {
Element extraError = DocumentHelper.createElement(QName.get("unknown-stanza", "http://jabber.org/protocol/connectionmanager#errors"));
sendErrorPacket(iq, PacketError.Condition.bad_request, extraError);
}
}
} else {
// Unknown IQ packet received so return error to sender
sendErrorPacket(iq, PacketError.Condition.bad_request, null);
}
}
} else {
// Unknown IQ packet received so return error to sender
sendErrorPacket(iq, PacketError.Condition.bad_request, null);
}
} else {
// Unknown IQ packet received so return error to sender
sendErrorPacket(iq, PacketError.Condition.bad_request, null);
}
}
}
use of org.jivesoftware.openfire.session.ClientSession in project Openfire by igniterealtime.
the class IQPrivacyHandler method getPrivacyListsNames.
/**
* Returns the IQ packet containing the active and default lists and the lists
* defined by the user.
*
* @param packet IQ packet requesting the lists.
* @param from sender of the IQ packet.
* @return the IQ packet containing the active and default lists and the lists
* defined by the user.
*/
private IQ getPrivacyListsNames(IQ packet, JID from) {
IQ result = IQ.createResultIQ(packet);
Element childElement = packet.getChildElement().createCopy();
result.setChildElement(childElement);
Map<String, Boolean> privacyLists = provider.getPrivacyLists(from.getNode());
// Add the default list
for (String listName : privacyLists.keySet()) {
if (privacyLists.get(listName)) {
childElement.addElement("default").addAttribute("name", listName);
}
}
// Add the active list (only if there is an active list for the session)
ClientSession session = sessionManager.getSession(from);
if (session != null && session.getActiveList() != null) {
childElement.addElement("active").addAttribute("name", session.getActiveList().getName());
}
// Add a list element for each privacy list
for (String listName : privacyLists.keySet()) {
childElement.addElement("list").addAttribute("name", listName);
}
return result;
}
Aggregations