Search in sources :

Example 1 with SessionPacketRouter

use of org.jivesoftware.openfire.SessionPacketRouter in project Openfire by igniterealtime.

the class XmppWebSocket method processStanza.

// helper/utility methods
/*
	 * Process stream headers/footers and authentication stanzas locally;
	 * otherwise delegate stanza handling to the session packet router.
	 */
private void processStanza(Element stanza) {
    try {
        String tag = stanza.getName();
        if (STREAM_FOOTER.equals(tag)) {
            closeStream(null);
        } else if ("auth".equals(tag)) {
            // User is trying to authenticate using SASL
            startedSASL = true;
            // Process authentication stanza
            xmppSession.incrementClientPacketCount();
            saslStatus = SASLAuthentication.handle(xmppSession, stanza);
        } else if (startedSASL && "response".equals(tag) || "abort".equals(tag)) {
            // User is responding to SASL challenge. Process response
            xmppSession.incrementClientPacketCount();
            saslStatus = SASLAuthentication.handle(xmppSession, stanza);
        } else if (STREAM_HEADER.equals(tag)) {
            // restart the stream
            openStream(stanza.attributeValue(QName.get("lang", XMLConstants.XML_NS_URI), "en"), stanza.attributeValue("from"));
            configureStream();
        } else if (Status.authenticated.equals(saslStatus)) {
            if (router == null) {
                if (isStreamManagementAvailable()) {
                    router = new StreamManagementPacketRouter(xmppSession);
                } else {
                    // fall back for older Openfire installations
                    router = new SessionPacketRouter(xmppSession);
                }
            }
            router.route(stanza);
        } else {
            // require authentication
            Log.warn("Not authorized: " + stanza.asXML());
            sendPacketError(stanza, PacketError.Condition.not_authorized);
        }
    } catch (UnknownStanzaException use) {
        Log.warn("Received invalid stanza: " + stanza.asXML());
        sendPacketError(stanza, PacketError.Condition.bad_request);
    } catch (Exception ex) {
        Log.error("Failed to process incoming stanza: " + stanza.asXML(), ex);
        closeStream(new StreamError(StreamError.Condition.internal_server_error));
    }
}
Also used : StreamError(org.xmpp.packet.StreamError) SessionPacketRouter(org.jivesoftware.openfire.SessionPacketRouter) IOException(java.io.IOException) UnknownStanzaException(org.jivesoftware.openfire.multiplex.UnknownStanzaException) UnknownStanzaException(org.jivesoftware.openfire.multiplex.UnknownStanzaException)

Example 2 with SessionPacketRouter

use of org.jivesoftware.openfire.SessionPacketRouter in project Openfire by igniterealtime.

the class MultiplexerPacketHandler method route.

/**
 * Processes a route packet that is wrapping a stanza sent by a client that is connected
 * to the connection manager.
 *
 * @param route the route packet.
 */
public void route(Route route) {
    StreamID streamID = route.getStreamID();
    if (streamID == 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(route, PacketError.Condition.bad_request, extraError);
    }
    LocalClientSession session = multiplexerManager.getClientSession(connectionManagerDomain, streamID);
    if (session == null) {
        // Specified Client Session does not exist
        sendErrorPacket(route, PacketError.Condition.item_not_found, null);
        return;
    }
    SessionPacketRouter router = new SessionPacketRouter(session);
    // Connection Manager already validate JIDs so just skip this expensive operation
    router.setSkipJIDValidation(true);
    try {
        router.route(route.getChildElement());
    } catch (UnknownStanzaException use) {
        Element extraError = DocumentHelper.createElement(QName.get("unknown-stanza", "http://jabber.org/protocol/connectionmanager#errors"));
        sendErrorPacket(route, PacketError.Condition.bad_request, extraError);
    } catch (Exception e) {
        Log.error("Error processing wrapped packet: " + route.getChildElement().asXML(), e);
        sendErrorPacket(route, PacketError.Condition.internal_server_error, null);
    }
}
Also used : LocalClientSession(org.jivesoftware.openfire.session.LocalClientSession) StreamID(org.jivesoftware.openfire.StreamID) Element(org.dom4j.Element) SessionPacketRouter(org.jivesoftware.openfire.SessionPacketRouter)

Aggregations

SessionPacketRouter (org.jivesoftware.openfire.SessionPacketRouter)2 IOException (java.io.IOException)1 Element (org.dom4j.Element)1 StreamID (org.jivesoftware.openfire.StreamID)1 UnknownStanzaException (org.jivesoftware.openfire.multiplex.UnknownStanzaException)1 LocalClientSession (org.jivesoftware.openfire.session.LocalClientSession)1 StreamError (org.xmpp.packet.StreamError)1