Upload
duongdang
View
223
Download
4
Embed Size (px)
Citation preview
Ozgur Ozturk's Introduction to XMPP 1
1
XMPP Protocol
and
Application Development using
Open Source XMPP Software
and LibrariesOzgur Ozturk
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.
2
Access to This Tutorial
• Latest version of slides available on
– http://DrOzturk.com/talks
• Also useful for clicking on links
3
• 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/
Softwarethat you will need to repeat exercises with me
4
Part 1
Introduction to XMPP
5
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
6
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.
Ozgur Ozturk's Introduction to XMPP 2
7
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
8
SIMPLE (contender to XMPP)
• SIMPLE: SIP for Instant Messaging and
Presence Leveraging Extensions
• SIP: Session Initiation Protocol, established
signaling protocol for VOIP and IPTV
9
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
10
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., [email protected]/web-9z2
• Routing traffic to one connection of user, web-client
rather than mobile or desktop client (which may be
simultaneously connected)
11
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
12
XML Basics
<?xml version="1.0" encoding="ISO-8859-1"?>
<CATALOG>
<CD>
<TITLE>Unchain my heart</TITLE>
<ARTIST NAME="Joe Cocker" />
<COUNTRY>USA</COUNTRY>
<COMPANY>EMI</COMPANY>
<PRICE>8.20</PRICE>
<YEAR>1987</YEAR>
</CD>
<!– Add more CD Albums here… -->
</CATALOG>
Terminology
• Entity, Tag
• Schema
• DTD, XSD
• Well-formed
• Valid
Attribute
• Not recommended for data.
• Prefer to use element:
<ARTIST>
<NAME> Joe Crocker </NAME>
</ARTIST>
• Recommended for metadata
Special Syntax for empty elements,
where closing tag would come
immediately after opening tag
Ozgur Ozturk's Introduction to XMPP 3
13
Sample XML Standard: POSLog
Namespaces are not
applied to attributes, unless you specify them explicitly.
Namespaces needed for combining multiple existing
vocabularies, to prevent conflict of names.
14
XML Namespaces
Not a URL, just a namespace!
15
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.
16
• The “push” method for getting information from one place to another
<message from="[email protected]/wz2"
to="[email protected]"
type="chat">
<body>How are you?</body>
<subject>Query</subject>
</message>
1: Message Stanza
from address
•not provided by sending client,
•stamped by the sender’s server •to avoid address
spoofing17
• 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
2: Presence Messages
18
<presence
from="[email protected]/android-z2">
<show>do not disturb</show>
<status>in a meeting</status>
</presence>
2: Presence Stanza
Ozgur Ozturk's Introduction to XMPP 4
19
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 iqstanzas 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
20
<iq from="[email protected]/wz2"
id="rr82a1z7"
to="[email protected]"
type="get">
<query xmlns="jabber:iq:roster"/>
</iq>
3: IQ (Info/Query) Stanza
1/4: Requesting Roster
21
<iq from="[email protected]"
id="rr82a1z7"
to="[email protected]/wz2"
type="result">
<query xmlns="jabber:iq:roster">
<item jid="[email protected]"/>
<item jid="[email protected]"/>
</query>
• </iq>
3: IQ (Info/Query) Stanza
2/4: Server Returning Roster
22
<iq from="[email protected]/wz2"
id="ru761vd7"
to="[email protected]"
type="set">
<query xmlns="jabber:iq:roster">
<item jid="[email protected]"/>
</query>
</iq>
3: IQ (Info/Query) Stanza
3/4: Client adds a new contact.
New transaction, new id.
23
<iq from="[email protected]"
id="ru761vd7"
to="[email protected]/wz2"
type="result“/>
3: IQ (Info/Query) Stanza
4/4:Server’s Acknowledgement
Same id with request.
Each request needs a reply. Even if it is empty
24
15 Minute Break
Now is the time to install your software
When we are back we will code, yay!
Ozgur Ozturk's Introduction to XMPP 5
25
Part 2
Coding a Basic ClientWithout re-implementing the wheel:
Using Jabber-Net .Net Library
26
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
27
Download and install Jabber-Net
28 29
MyFirstClient project
30
Visual Studio Toolbox
with Jabber-Net
Ozgur Ozturk's Introduction to XMPP 6
31
Simplest Client App
Double Click
32
Five lines of code
• Automatically added events and function templates:
• Just fill in the action:
33
Voila! Our Weather Bot is Working
34
Part 3
XMPP Extension Protocols (XEPs)
35
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/
36
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
Ozgur Ozturk's Introduction to XMPP 7
37
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
38
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
39
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
40
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.
41
Part 4
Compiling and Customizing
Openfire XMPP Server
and Spark Chat Client
42
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