- Core features of XMPP are defined by RFC's, which can be found at IETF.org
- Extended features of XMPP are defined by XEP's, which can be found at XMPP.org/extensions
- XMPP is an open standard, rather than open software (it includes plenty of open software as well)
- The XMPP standard is approved by the IETF (Internet Engineering Task Force)
- Aside from chatting, XMPP can be used for automation (via instructions), feeds and micro-blogging
- 50 million XMPP users in 2009
- Zoom, Kontalk and Jitsi messaging services are based on XMPP; combined, these consist of over 200 million users
- There are over 1 billion users on XMPP based proprietary networks
- Google and DuckDuckGo used to offer XMPP based services
psearch -c net-im -so xmpp jabber. The s option allows a deep search into the long description; the o option is for or. As of now, there are a minimal amount of XMPP/Jabber related ports is in the net category.
XMPP user accounts
A Jabber Identifier (JID) consists of the username, and domain name of an XMPP user account. This can also include the extended resource part, which is an id for each device or connection.
XMPP server directory and test results by security grade:
To test XMPP servers for limited XEP's that are used with Conversations Messenger:
Stream & Connection
An XMPP communication session is a stream over a TCP connection that lasts the length of a conversation. There are 2 streams established, 1 for each direction. The server and client each create their own XML XMPP document that is added to as a conversation progresses. A server doesn't poll the client for new messages or updates. Rather than constantly waiting for messages, the server sends or holds a message for sending as soon as it's received.
The route an XMPP communication takes is a direct route from client to server, to server, to client: this is called direct federation. (email uses indirect federation, which many indirect routes are taken between servers.)
In the traditional mode of XMPP communication, messages can get lost and aren't resent.
The resource part of a full JID can be used for further routing communication. Typically, only one device receives a message, which can be set by priority. It can be configured for many devices to receive a message.
The clients on their end close their XML/XMPP documents when a disruption in the stream is sensed.
When connection is started, XML begins as normal, with:
Under this is the
<stream:stream>element, which doesn't close until the end of the connection. Then, after the opening
<stream:stream>element, there's the
<stream:features>self-closing element, which lists the features available for use in XMPP.
Three primary XML elements exchanged between server and client are called stanzas: MESSAGE, IQ and PRESENCE.
typefor message: error, normal, chat, groupchat, headline. Other attributes for message: to, from, id. Directs where message is sent in groupchat.
Is used for queries. In groupchat, can be used to change user permissions, or kick someone out of room. Can be used to reserve chatroom name.
Indicates users' availability. Extensions can indicate when user is typing, and another presence stanza is sent when there's a pause in typing. Join notification is indicated by this stanza. Tells when client leaves, unless the server to server connection goes down unexpectedly. Can indicate client's
role(temporary status) or
affiliation(persists across logins) in chatroom: visitor, participant, member, moderator, admin, owner.
Bits of Binary (XEP-0231)/In-Band Bytestreams (IBB: XEP-0047) can be used to transfer small files over XMPP. For larger files, it is inefficient, and can cause congestion. It encodes the file into base 64, then breaks it down, to the a maximum size allowed for each message to be transferred. It is sent by message, with an indication of sequence. The IQ stanza then returns a receipt, that the messages were delivered.
Out-of-Band (OOB), Socks5 Bytestream (XEP-0065) is used to transfer messages bypassing the server, or directly from client to client. XMPP negotiates the transfer over the SOCKS5 protocol. The bytestream proxy can be on a separate machine than the XMPP server.
Jingle (XEP-0234) can be used for file transfer, as a more modern alternative to XEP-0065.
XEP-0087, XEP-0095 and XEP-0096 for transferring files are obsolete or retracted.
Server configuration (Prosody) and telephony messaging (Asterisk) are topics outside the scope of this thread.
About Opensource communication frameworks:
References (by order of use)