Protocol support
----------------

jabberd 2.x is a server implementation of the eXtensible Messaging and
Presence Protocol (XMPP), as published by the IETF. It also implements
several XMPP extensions documented by the XMPP Software Foundation (XSF),
and some legacy extensions that were implemented by its predecessor,
jabberd 1.4.

This document lists the protocols supported by the server, and any notes
relating to the implementation.

This is current as of 2008-01-24 (jabberd 2.1.22).


RFC 3920	XMPP Core				supported
RFC 3921	XMPP IM					supported
RFC 3920bis	XMPP Core				supported
RFC 3921bis	XMPP IM					supported

XEP-0004	Data Forms				-
XEP-0011	Jabber Browsing				supported
XEP-0012	Last Activity				supported
XEP-0013	Flexible Offline Message Retrieval	-
XEP-0016	Privacy Lists				supported
XEP-0018	Invisible Presence			removed
XEP-0022	Message Events				supported
XEP-0023	Message Expiration			supported
XEP-0030	Service Discovery			supported
XEP-0033	Extended Stanza Addressing		-
XEP-0045	Multi-User Chat				(by add-on)
XEP-0048	Bookmark Storage			supported
XEP-0049	Private XML Storage			supported
XEP-0050	Ad-Hoc Commands				-
XEP-0054	vcard-temp				supported
XEP-0055	Jabber Search				(by add-on)
XEP-0059	Result Set Management			-
XEP-0060	Publish-Subscribe			(by add-on)
XEP-0065	SOCKS5 Bytestreams			(by add-on)
XEP-0073	Basic IM Protocol Suite			supported
XEP-0077	In-Band Registration			supported
XEP-0078	Non-SASL Authentication			supported
XEP-0079	Advanced Message Processing		partial
XEP-0083	Nested Roster Groups			supported
XEP-0086	Error Condition Mappings		supported
XEP-0090	Entity Time				supported
XEP-0091	Delayed Delivery			supported
XEP-0092	Software Version			supported
XEP-0093	Agent Information			supported
XEP-0114	Jabber Component Protocol		supported
XEP-0117	Intermediate IM Protocol Suite		(by add-on)
XEP-0124	HTTP Binding				(by add-on)
XEP-0128	Service Discovery Extensions		supported
XEP-0133	Service Administration			-
XEP-0136	Message Archiving			-
XEP-0138	Stream Compression			supported
XEP-0142	Workgroups				-
XEP-0145	Annotations				supported
XEP-0150	Use of Entity Tags in XMPP Extensions	-
XEP-0153	vCard-Based Avatars			supported
XEP-0154	User Profile				-
XEP-0157	Contact Addresses for XMPP Services	supported
XEP-0159	SPIM-Blocking Control			-
XEP-0160	Best Practices for Handling Offline
		Messages				supported
XEP-0163	Personal Eventing via Pubsub		-
XEP-0168	Resource Application Priority		-
XEP-0170	Recommended Order of Stream Feature
		Negotiation				supported
XEP-0172	User Nickname
XEP-0175	Best Practices of Use of SASL ANONYMOUS	supported
XEP-0178	Best Practices of Use of SASL EXTERNAL	partial
XEP-0185	Dialback Key Generation and Validation	supported
XEP-0186	Invisible Command			-
XEP-0190	Best Practice for Closing Idle Streams	supported
XEP-0191	Simple Communications Blocking		supported
XEP-0192	Proposed Stream Feature Improvements	supported
XEP-0193	Proposed Resource Binding Improvements	supported
XEP-0198	Stanza Acknowledgements			supported
XEP-0199	XMPP Ping				supported
XEP-0202	Entity Time				supported
XEP-0203	Delayed Delivery			supported
XEP-0205	Best Practices to Discourage
		Denial of Service Attacks		partial
XEP-0206	XMPP Over BOSH				(by add-on)
XEP-0209	Metacontacts				supported
XEP-0212	XMPP Basic Server 2008			supported
XEP-0215	External Service Discovery		-
XEP-0216	XMPP Intermediate IM Server 2008	partial
XEP-0219	Hop Check				-
XEP-0220	Server Dialback				supported
XEP-0225	Component Connections			supported


Additional features supported by jabberd 2.1.22 (without plugins):

- Server admin address
- Echo address
- Server MOTD
- Offline message storage
- Message archiving
- Authorization with: BerkeleyDB, LDAP, MySQL, NTLogon, Oracle, PAM, PostgreSQL, Pipe, SQLite, SSPI
- Storage in: BerkeleyDB, files, LDAP(vCard), MySQL, Oracle, PostreSQL, SQLite
- jabberd2 Component Protocol



Implementation Notes
--------------------


XMPP RFCs
---------

XMPP Core (RFC 3920 and RFC 3920bis)

 Implemented, except for:
  - SASL (External) for s2s streams
  - Language support via xml:lang

XMPP IM (RFC 3921 and RFC 3921bis)

 Implemented.


XMPP Extension Protocols
------------------------

Jabber Browsing (XEP-0011)

 Implemented by the session manager (mod_disco) as a wrapper around the
 service list used for Service Discovery. The configuration required to
 enable browsing is undocumented as browse is considered to be
 deprecated.

Last Activity (XEP-0012)

 Implemented by the session manager (mod_iq_last).

Message Events (XEP-0022)

 Offline event implemented by the session manager (mod_offline).

Message Expiration (XEP-0023)

 Implemented by the session manager (mod_offline).

Service Discovery (XEP-0030)

 Implemented by the session manager (mod_disco). Administrative users
 will see extra nodes when doing a #items query - these nodes provide
 information about active users and sessions. New components becoming
 available are probed automatically, and if they are disco-aware, their
 information is added to the service list. Sub-entity item publishing is
 implemented seperately by mod_disco_publish.

Private XML Storage (XEP-0049)

 Implemented by the session manager (mod_iq_private).

vcard-temp (XEP-0054)

 Implemented by the session manager (mod_iq_vcard).

In-band Registration (XEP-0077)

 Implemented by c2s.

Non-SASL Authentication (XEP-0078)

 Implemented by c2s.

Entity Time (XEP-0090)

 Implemented by the session manager (mod_iq_time).

Delayed Delivery (XEP-0091)

 Implemented by the session manager.

Software Version (XEP-0092)

 Implemented by the session manager (mod_iq_version).

Agent Information (XEP-0094)

 Implemented by the session manager (mod_disco) as a wrapper around the
 service list used for Service Discovery.

External Component Protocol (XEP-0114)

 Implemented by the router as a wrapper around the more featureful
 jabberd 2.x component protocol.


Legacy extensions (jabberd 1.4)
-------------------------------

Invisible presence (XEP-0018)

 This extension was implemented by the session manager.
 It was intentionally removed. This is very legacy, causes problems, we
 have better ways of doing so called invisibility, etc.

