XMPP Intro 1101 - 2008


Published on

This is just my old presentation of XMPP. Pretty basic intro.

Published in: Technology

XMPP Intro 1101 - 2008

  1. 1. XMPP intro E Extensible Messaging and Presence ProtocolSteffen Larsen (slarsen@nordija.com)
  2. 2. 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.
  3. 3. 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!
  4. 4. XMPP core• Going from Jabber (1999) to XMPP• XMPP foundation, founded 2003. For standardization.• RFC 3920, RFC 3921 (define XML stream, login and architecture)
  5. 5. XMPP core• XMPP is a XML streaming standard• XMPP defines a <stream/> to make a stream session.• TLS (authentication) / SASL (Simple Authentication and Security Layer)
  6. 6. XMPP corecore consists of the following: • <stream/> • Addressing standard (JIDs): user@host.domain/resource. This is important for the routing/prioritizing. • stanzas
  7. 7. 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
  8. 8. The “layers”• TCP (your socket!) • TLS secure layer • SASL negotiation • XMPP (send/receive stanzas) • Third party channel.. (initiated by XMPP, voice etc)
  9. 9. 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.
  10. 10. Language Elements• XMPP have 3 XML stanzas. (well structured children under the <stream/> element): • <presence/> • <message/> • <iq/> (Information, Query: get, set)
  11. 11. XML Stream exampleBasic sessions: |--------------------| C: <?xml version=1.0?> | <stream> | <stream:stream |--------------------| to=example.com | <presence> | xmlns=jabber:client | <show/> | xmlns:stream=http://etherx.jabber.org/streams | </presence> | version=1.0> |--------------------| S: <?xml version=1.0?> | <message to=foo> | <stream:stream | <body/> | from=example.com | </message> | id=someid |--------------------| xmlns=jabber:client | <iq to=bar> | xmlns:stream=http://etherx.jabber.org/streams | <query/> | version=1.0> | </iq> | ... encryption, authentication, and resource binding ... |--------------------| C: <message from=juliet@example.com | ... | to=romeo@example.net |--------------------| xml:lang=en> | </stream> | C: <body>Art thou not Romeo, and a Montague?</body> |--------------------| C: </message> S: <message from=romeo@example.net to=juliet@example.com xml:lang=en> S: <body>Neither, fair saint, if either thee dislike.</body> S: </message> C: </stream:stream> S: </stream:stream>
  12. 12. XMPP Stanzas <message/> <message from=northumberland@shakespeare.lit/westminster id=richard2-4.1.247 to=kingrichard@royalty.england.lit/throne> <body>My lord, dispatch; read oer these articles.</body> <request xmlns=urn:xmpp:receipts/> </message> <iq/> Example: Client requests current roster from server: <iq from=juliet@example.com/balcony type=get id=roster_1> <query xmlns=jabber:iq:roster/>e.g. get roster </iq> Example: Client receives roster from server: at startup <iq to=juliet@example.com/balcony type=result id=roster_1> <query xmlns=jabber:iq:roster> <item jid=romeo@example.net name=Romeo subscription=both> <group>Friends</group> </item> <item jid=mercutio@example.org name=Mercutio subscription=from> <group>Friends</group> </item> <item jid=benvolio@example.org name=Benvolio subscription=both> <group>Friends</group> </item> </query> </iq>
  13. 13. XMPP Architectureserver - server. xmpp registar with cert.client - client
  14. 14. XMPP Architecture server- Text Textclient-gw- SIP
  15. 15. XMPP Extensions (XEP)• XMPP defines a set of XEPs• Definition 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
  16. 16. XMPP Platforms• ejabberd (erlang)• xfire (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)!
  17. 17. 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)
  18. 18. 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?
  19. 19. XMPP links:• www.xmpp.org• http://www.xmpp.org/rfcs/rfc3920.htm• http://www.xmpp.org/rfcs/rfc3921.htm• http://www.xmpp.org/extensions/
  20. 20. Questions?If you don’t have any: • when is xep-166 etc. (jingle) a standard? • where do I start? • ....