private boolean isHostUnknown(String host) {
        if (host == null) {
            // Answer false since when using server dialback the stream header will not
            // have a TO attribute
            return false;
        }
        if (serverName.equals(host)) {
            // requested host matched the server name
            return false;
        }
        if (routingTable.hasComponentRoute(new JID(host))) {
            // Check if the host matches a subdomain of this host
            return false;
        }

        return !Trunking.isTrunkingEnabledFor(host);
    }
Uses the XPP to grab the opening stream tag and create an active session
object. The session to create will depend on the sent namespace. In all
cases, the method obtains the opening stream tag, checks for errors, and
either creates a session or returns an error and kills the connection.
If the connection remains open, the XPP will be set to be ready for the
first packet. A call to next() should result in an START_TAG state with
the first packet in the stream.

@throws UnauthorizedException if the connection required encryption but was not encrypted.
@throws XmlPullParserException if there was an XML error while creating the session.
@throws IOException if an IO error occurred while creating the session.
xmppserver/src/main/java/org/jivesoftware/openfire/net/SocketReader.java