XMPP intro E Extensible Messaging and Presence ProtocolSteffen Larsen (firstname.lastname@example.org)
XMPP - what is it?• Extensible Messaging and Presence Protocol• An Open Source Instant Messaging (IM) system. I would also like to refer to it as a session protocol.• Easy integration of extensions• Widely used and many implementations of the core system.
XMPP clients• Pidgin (formerly known as gaim, all)• Adium (based on pidgin lib.,mac)• GTalk (Google Talk, m$ windoze)• psi (all)• gajim (all), etc... MANY!
XMPP core• Going from Jabber (1999) to XMPP• XMPP foundation, founded 2003. For standardization.• RFC 3920, RFC 3921 (deﬁne XML stream, login and architecture)
XMPP core• XMPP is a XML streaming standard• XMPP deﬁnes a <stream/> to make a stream session.• TLS (authentication) / SASL (Simple Authentication and Security Layer)
XMPP corecore consists of the following: • <stream/> • Addressing standard (JIDs): email@example.com/resource. This is important for the routing/prioritizing. • stanzas
XML Streams• <stream/> container for XML elements in a stream. • <stream/> once in a session, send many xml elements! • <stream/> consists of: • negotiation of TLS and SASL • stanzas
The “layers”• TCP (your socket!) • TLS secure layer • SASL negotiation • XMPP (send/receive stanzas) • Third party channel.. (initiated by XMPP, voice etc)
Using the language• Logging in <stream>, TLS, SASL.. • SASL for negotiating diff. encryption mechanisms. • Challenge/Response.. • server binds the client resource• fetching the buddy list.. <iq get roster..>• sending stanzas messages, presence etc.
Language Elements• XMPP have 3 XML stanzas. (well structured children under the <stream/> element): • <presence/> • <message/> • <iq/> (Information, Query: get, set)
XMPP Architecture server- Text Textclient-gw- SIP
XMPP Extensions (XEP)• XMPP deﬁnes a set of XEPs• Deﬁnition of an extension (XEP-001). XEP relies on namespaces.• XEP-166, XEP-167 (Jingles), XEP-176 important right now• Feature and service discovery important. Can also be done in
XMPP Platforms• ejabberd (erlang)• xﬁre (uses smack-lib, java based)• google talk (based on libjingle, c++). Can connect to the base XMPP architecture and vice versa. Some XEPs are NOT the same (voice/video/ ice)!
XMPP Libraries• Libjingle (google, c++, not compliant to some xmpp extensions)• Perl:XMPP (perl!, dah!)• LibIksmeal (C, very unorganized!)• Smack (Java, JMF!)• My own!... :-) (core in libpurple, plugin lib for xep-166,167,176)
XMPP in the future?• Will it become a de-facto standard? (xmpp is what http was in the past)• New extensions?• XEP-666 for set top boxes? ;-)• XEP for Conferencing?