@Override
    public List<Element> getAvailableStreamFeatures() {
        final List<Element> elements = new ArrayList<>();

        // If authentication has not happened yet, include available authentication mechanisms.
        if (getAuthToken() == null) {
            final Element sasl = SASLAuthentication.getSASLMechanismsElement(this);
            if (sasl != null) {
                elements.add(sasl);
            }
        }

        if (XMPPServer.getInstance().getIQRegisterHandler().isInbandRegEnabled()) {
            elements.add(DocumentHelper.createElement(new QName("register",new Namespace("", "http://jabber.org/features/iq-register"))));
        }

        elements.add(DocumentHelper.createElement(new QName("bind", new Namespace("", "urn:ietf:params:xml:ns:xmpp-bind"))));

        final Element session = DocumentHelper.createElement(new QName("session", new Namespace("", "urn:ietf:params:xml:ns:xmpp-session")));
        session.addElement("optional");
        elements.add(session);

        return elements;
    }
Returns the stream features which are available for this session.

@return the stream features which are available for this session.
xmppserver/src/main/java/org/jivesoftware/openfire/http/HttpSession.java