XMPP
XMPP • Extensible Messaging and Presence Protocol • Communicatie gebeurd via kleine stukjes XML • Open source • Onderbouw voor Google Talk e.d.
Jabber
Architecture Architectuur XMPP Architecture
• Client-server
wonderland.lit server
realworld.lit server
• Gedecentralizeerd • Single-hop (tegen spoofing) XMPP client
[email protected]
XMPP client
[email protected]
Adressen Addresses
Jabber ID (JID) User
Domain
Resource
alice@ wonderland.lit /TeaParty Bare JID Full JID
22
Communicatie Communicatie tussen client & server bestaat uit <stream> ...
Communication Primitives Stanzas: <message/> <presence/>
<message /> Message Stanzas <message from="
[email protected]/foo" to="
[email protected]" type="chat"> Who are you? <subject>Query
From, To Types: normal, chat, groupchat, headline, error Payloads: Body, Subject
<presence /> Geen “to” => subscribe bij server van Alice
Presence Stanzas Presence Stanzas
xa
<presence from="
[email protected]/pda"> <presence from="
[email protected]/pda"> <show>xa <show>xa <status>down hole! <status>downthe the rabbit rabbit hole! Advertise network availability (online/offline) Advertise network availability (online/offline) ‘Show’ Statuses: Away, Do Not Disturb, away, dnd (do not disturb), ‘Show’ Statuses: Away, Extended Away, Free forDo chatNot Disturb, (extended chatfor (available) Statusaway), messages Extended Away, Free chat Typically used for contact lists/rosters Status messages Presence subscriptions
Custom, human Typically used readable for contact lists/rosters
info/query van client naar server
geef lijst van contacten
request-response
Volledige stream |--------------------| | <stream> | |--------------------| | <presence> | | <show /> | | | |--------------------| | <message to='foo'> | |
| |--------------------| | ... | |--------------------| | | |--------------------|
Namespace structuur • XMPP is uitbreidbaar protocol • XMPP Core definieert structuur van boodschappen • jabber:client voor client<=>server • jabber:server voor server<=>server • “payload” kan gedefinieerd worden in eigen namespace
Extensie: PubSub • Implementatie van observer patroon • Gebruiker kan topic maken • Andere gebruikers kunnen zich hierop inschrijven • Ontvangen dan elke boodschap die op dit topic gepost wordt.
"> A new thought: off with their heads! <event xmlns="http://jabber.org/protocol/pubsub#event">
• ...
Voordelen van XML • Eenvoudig om te parsen in praktische elke taal (SAX/DOM) • Eenvoudig om uitbreidingen toe te voegen • Zowel voor mensen als bots • Eenvoudig om geldige boodschappen te specifieren (XSD) en te controleren • Eenvoudig om te zetten in HTML of pdf of ... (XSL)