7
Ozgur Ozturk's Introduction to XMPP 1 1 XMPP Protocol and Application Development using Open Source XMPP Software and Libraries Ozgur Ozturk [email protected] 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/ Software that 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.

Software Access to This Tutorial Application Development ...drozturk.com/talks/CTS/XMPP-tutorial-handout.pdf · – Nokia Ovi Contacts ... [email protected]/web-9z2 ... – text with

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

[email protected]

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