XMPP Protocol and Application Development using Open Source XMPP Software and Libraries Ozgur Ozturk ozturk@gatech.edu Georgia Institute of Technology, Atlanta, GA Acknowledgement: This tutorial is based on the book “XMPP: The Definitive Guide, Building Real-Time Applications with Jabber Technologies” with permission from Peter Saint-Andre. Access to This Tutorial • Latest version of slides available on – http://DrOzturk.com/talks • Also useful for clicking on links 2 Software that you will need to repeat exercises with me • Start downloads now – In the break you will have time to install • Visual C# 2008 Express Edition – http://www.microsoft.com/express/downloads/ • Eclipse IDE for Java Developers (92 MB) – http://www.eclipse.org/downloads/ • Openfire & Spark Code: – http://www.igniterealtime.org/downloads/source.jsp – TortoiseSVN recommended for subversion check out • http://tortoisesvn.net/downloads • JabberNet code: – http://code.google.com/p/jabber-net/ 3 Part 1 Introduction to XMPP What is XMPP • Extensible Messaging and Presence Protocol – open, XML-based protocol – aimed at near-real-time, extensible • instant messaging (IM), and • presence information. • Extended with features such as Voice over IP and file transfer signaling – and even expanded into the broader realm of message-oriented middleware 5 Samples from its Usage • IM and Social Networking platforms – GTalk, and Facebook • Collaborative services – Google Wave, and Gradient; • Geo-presence systems – Nokia Ovi Contacts • Multiplayer games – Chesspark • Many online live customer support and technical support services. 6 Overview of Tutorial • • • • Introduction to XMPP IM and Presence requirements, XML Refresher XMPP Extension Protocols (XEPs) Hands on exercises/demonstrations of using some Open Source XMPP Libraries, Clients and Servers • Architecture options & extending XMPP • Talk slides, code and links will be available on http://DrOzturk.com/talks 7 SIMPLE (contender to XMPP) • SIMPLE: SIP for Instant Messaging and Presence Leveraging Extensions • SIP: Session Initiation Protocol, established signaling protocol for VOIP and IPTV 8 Advantages of XMPP • Open XML standard formalized by IETF – Extensible for new service or information types – Implementations with modular/pluggable APIs • Continuously extended through the standards process of the XMPP Standards Foundation • XMPP servers (via federation) form a decentralized network similar to e-mail – anyone (with a domain) can run an XMPP server 9 Some XMPP Terminology • JabberID (JID): address of XMPP entities – JIDs for users look like email addresses, composed of username, “@” sign and the domain – Bare JID + Resource Identifier = Full JID: • e.g., ozgur7@gmail.com/web-9z2 • Routing traffic to one connection of user, web-client rather than mobile or desktop client (which may be simultaneously connected) 10 Three Types of XMPP Stanzas • Stanza: Basic unit of communication in XMPP • Libraries abstract away from the XML layer – However to extend XMPP we need to know basics • Three types of Stanzas: – Message • method for getting info from one place to another – Presence • availability and status messages of entities – iq (Info/Query) • request-response interactions and simple workflows 11 XML Basics Terminology <?xml version="1.0" encoding="ISO-8859-1"?> <CATALOG> • Entity, Tag <CD> • Schema <TITLE>Unchain my heart</TITLE> <ARTIST NAME="Joe Cocker" /> • DTD, XSD <COUNTRY>USA</COUNTRY> <COMPANY>EMI</COMPANY> • Well-formed <PRICE>8.20</PRICE> • Valid <YEAR>1987</YEAR> </CD> Attribute <!– Add more CD Albums here… --> • Not recommended for data. • Prefer to use element: </CATALOG> <ARTIST> Special Syntax for empty elements, where closing tag would come immediately after opening tag <NAME> Joe Crocker </NAME> </ARTIST> 12 • Recommended for metadata Sample XML Standard: POSLog Namespaces needed for combining multiple existing vocabularies, to prevent conflict of names. Namespaces are not applied to attributes, unless you specify them explicitly. 13 XML Namespaces Not a URL, just a namespace! 14 Same Local Name, Different Qualified Names <bk:bookstore xmlns:bk="urn:xmlns:dozturk.com:books"> <bk:book bk:title="Lord of the Rings, Book 3"> <book for=“Ozgur Ozturk“/> </bk:book> </bk:bookstore> These two are from two vocabularies. One of the <book> tags means reserving. 15 1: Message Stanza • The “push” method for getting information from one place to another <message from="ozgur7@gmail.com/wz2" to="stpeter@jabber.org" type="chat"> from address <body>How are you?</body> •not provided by sending client, <subject>Query</subject> •stamped by the </message> sender’s server •to avoid address spoofing 16 2: Presence Messages • Advertises the network availability and status messages of entities • A specialized publish-subscribe method; people who requested subscription to your presence and authorized by you receive updated presence information when you come online, and go offline, and change your status 17 2: Presence Stanza <presence from="ozgur7@gmail.com/android-z2"> <show>do not disturb</show> <status>in a meeting</status> </presence> 18 3: IQ (Info/Query) Messages • Structure for request-response interactions and simple workflows. • Requests and responses are tracked using the id attribute • type attribute included in the exchanged iq stanzas helps in establishing a structured IQ interaction between two entities • Next example: IM client software gets my roster from its server and then updates it 19 3: IQ (Info/Query) Stanza 1/4: Requesting Roster <iq from="ozgur7@gmail.com/wz2" id="rr82a1z7" to="ozgur7@gmail.com" type="get"> <query xmlns="jabber:iq:roster"/> </iq> 20 3: IQ (Info/Query) Stanza 2/4: Server Returning Roster <iq from="ozgur7@gmail.com" id="rr82a1z7" to="ozgur7@gmail.com/wz2" type="result"> <query xmlns="jabber:iq:roster"> <item jid="frnd1@gmail.com"/> <item jid="spouse@facebook.com"/> </query> • </iq> 21 3: IQ (Info/Query) Stanza 3/4: Client adds a new contact. <iq from="ozgur7@gmail.com/wz2" id="ru761vd7" New transaction, new id. to="ozgur7@gmail.com" type="set"> <query xmlns="jabber:iq:roster"> <item jid="stpeter@jabber.org"/> </query> </iq> 22 3: IQ (Info/Query) Stanza 4/4:Server’s Acknowledgement <iq from="ozgur7@gmail.com" Same id with request. id="ru761vd7" to="ozgur7@gmail.com/wz2" type="result“/> Each request needs a reply. Even if it is empty 23 15 Minute Break Now is the time to install your software When we are back we will code, yay! 24 Part 2 Coding a Basic Client Without re-implementing the wheel: Using Jabber-Net .Net Library Download Link for .Net XMPP library • XMPP Library for .Net (written in C#) http://code.google.com/p/jabber-net/ – I recommend to install from source code • So you can trace into the library code upon errors • I will show how to add components to toolbar manually 26 Download and install Jabber-Net 27 28 MyFirstClient project 29 Visual Studio Toolbox with Jabber-Net 30 Simplest Client App Double Click 31 Five lines of code • Automatically added events and function templates: • Just fill in the action: 32 Voila! Our Weather Bot is Working 33 Part 3 XMPP Extension Protocols (XEPs) Extensibility and Available XEPs • XMPP is an XML based, extensible protocol • XMPP Standards Foundation (XSF) standardizes extensions to XMPP through a process centered around XMPP Extension Protocols (XEPs) – http://xmpp.org/extensions/ 35 Data Forms XEP • Specifies how a server sends the information necessary for a client to render a form • Defines several common field types – boolean, – list options with single or multiple choice, – text with single line or multiple lines, – hidden fields, … – & extensibility for future data types • Related extension: CAPTCHA Forms XEP 36 In-Band Registration XEP • For in-band registration, password change or cancellation of an existing registration • Extensible via use of data forms – enables services to gather a wide range of information during the registration process 37 Multi-User Chat XEP • To enable multiple XMPP users to exchange messages in the context of a room or channel – similar to Internet Relay Chat (IRC). • Standard chat-room features such as room topics and invitations • A strong room control model, adds ability to: – kick and ban users – name room moderators and administrators – require membership or passwords to join the room 38 Publish-Subscribe XEP & Personal Eventing Protocol (PEP) XEP • Presents a more generalized form of the publish/subscribe model than presence – communicating “rich presence” such as moods – exchanging “lifestreaming” data, such as microblogs – also applied to storing personal data • Bookmarks, client preferences… • Further extensions of PEP – User Tune, User Location, and User Activity XEPs 39 Multimedia Networking Extensions: Jingle XEP • XMPP as the signaling channel to negotiate, manage & terminate media sessions – voice/video chat, file transfer, screen sharing… – negote media codecs, bitrates and other parameters related to the voice format to be used, deciding whether TCP or UDP will be used – what IP addresses and ports will be used, etc • Media data itself is sent either p2p or through a media relay. 40 Part 4 Compiling and Customizing Openfire XMPP Server and Spark Chat Client 41 Download Links for Client and Server with Pluggable API • OpenFire: XMPP server • Spark: XMPP client • Both are open source Java implementation, with multi-platform support • Openfire & Spark Code: – http://www.igniterealtime.org/downloads/source.jsp – TortoiseSVN recommended for subversion check out • http://tortoisesvn.net/downloads 42 43 44 DELETED SLIDES 45