private void sendClientOptions() {

        final ConnectionManager connectionManager = XMPPServer.getInstance().getConnectionManager();
        final ConnectionConfiguration configuration = connectionManager.getListener( ConnectionType.SOCKET_C2S, false ).generateConnectionConfiguration();

        IQ options = new IQ(IQ.Type.set);
        Element child = options.setChildElement("configuration",
                "http://jabber.org/protocol/connectionmanager");
        // Add info about TLS
        if (configuration.getTlsPolicy() != Connection.TLSPolicy.disabled) {
            Element tls = child.addElement("starttls", "urn:ietf:params:xml:ns:xmpp-tls");
            if (configuration.getTlsPolicy() == Connection.TLSPolicy.required) {
                tls.addElement("required");
            }

        }
        // Add info about SASL mechanisms
        Collection<String> mechanisms = SASLAuthentication.getSupportedMechanisms();
        if (!mechanisms.isEmpty()) {
            Element sasl = child.addElement("mechanisms", "urn:ietf:params:xml:ns:xmpp-sasl");
            for (String mechanism : mechanisms) {
                sasl.addElement("mechanism").setText(mechanism);
            }
        }
        // Add info about Stream Compression
        if (configuration.getCompressionPolicy() == Connection.CompressionPolicy.optional) {
            Element comp = child.addElement("compression", "http://jabber.org/features/compress");
            comp.addElement("method").setText("zlib");
        }
        // Add info about Non-SASL authentication
        if (XMPPServer.getInstance().getIQRouter().supports("jabber:iq:auth")) {
            child.addElement("auth", "http://jabber.org/features/iq-auth");
        }
        // Add info about In-Band Registration
        if (XMPPServer.getInstance().getIQRegisterHandler().isInbandRegEnabled()) {
            child.addElement("register", "http://jabber.org/features/iq-register");
        }
        // Send the options
        process(options);
    }
Send to the Connection Manager the connection options available for clients. The info
to send includes:
<ul>
 <li>if TLS is available, optional or required
 <li>SASL mechanisms available before TLS is negotiated
 <li>if compression is available
 <li>if Non-SASL authentication is available
 <li>if In-Band Registration is available
</ul
xmppserver/src/main/java/org/jivesoftware/openfire/session/LocalConnectionMultiplexerSession.java