Ever used WhatsApp or Google Cloud Messaging?
Ever wondered which protocol lies behind it?
That’s a chat protocol.
XMPP Architecture
XMPP Architecture
jappix.comjabber.org
talkr.im
XMPP Architecture
jappix.comjabber.org
talkr.im
XMPP Architecture
jappix.comjabber.org
talkr.imServer to server
TCP 5269Outbound + Inbound
XMPP Architecture
jappix.comjabber.org
talkr.im
gmail.com googlemail.com
XMPP Architecture
jappix.comjabber.org
talkr.im
gmail.com googlemail.com
XMPP Architecture
jappix.comjabber.org
talkr.im
Not encrypted
PLAIN
gmail.com googlemail.com
Encrypted
TLS v1.0+
NO SSL (v3-)
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
Pidgin Beem
AdiumJappix
IM+IM+
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
Pidgin Beem
AdiumJappix
IM+IM+
Client to server
TCP 5222Outbound + Inbound
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
Pidgin Beem
AdiumJappix
IM+IM+
Web to proxy to server
TCP 5280Outbound + Inbound
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
Pidgin [email protected]/Computer [email protected]/Mobile
Adium
[email protected]/[email protected]/Jappix Web
JappixIM+
[email protected]/iPhoneIM+
[email protected]/iPad
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
Pidgin [email protected]/Computer [email protected]/Mobile
Adium
[email protected]/[email protected]/Jappix Web
JappixIM+
[email protected]/iPhoneIM+
[email protected]/iPad
XMPP Architecture
jappix.comjabber.org
talkr.im
[email protected]@jabber.org
[email protected]
[email protected]
[email protected]
[email protected]
+25K users
[email protected]
gmail.com
+425M users!
googlemail.com
XMPP Architecturejappix.com
XMPP Architecturejappix.com
muc.jappix.com
pubsub.jappix.com
vjud.jappix.com
XMPP Components
websocket.jappix.com
XMPP Architecturejappix.com
muc.jappix.com
pubsub.jappix.com
vjud.jappix.com
XMPP Components XMPP Gateways
skype.jappix.com
msn.jappix.com
websocket.jappix.com
XMPP Architecturejappix.com
muc.jappix.com
pubsub.jappix.com
vjud.jappix.com
XMPP Components XMPP Gateways
skype.jappix.com
msn.jappix.com
Non-XMPP services
stun.jappix.com
turn.jappix.com
websocket.jappix.com
XMPP ArchitectureSecurity watchdog
XMPP Architecture
Everything is a node
Server = node Gateway = node
Client = node Bot = node
Component = node
XMPP Architecture
Server => TCP 5269 Client => TCP 5222
HTTP services => TCP 5280
XMPP Architecture
1 node = 1 JID = “1 phone number”
XMPP Architecture
Full JID = [email protected]/resource Bare JID = [email protected]
XMPP Architecture
Stanza = XMPP XML node
XMPP Architecture
to = sender user from = receiving user type = stanza purpose id = stanza identifier
XMPP CoreStandardized - IETF RFC
XMPP Core
<message />
XMPP Core
<message type=‘chat’ from=‘[email protected]/Mac’ to=‘[email protected]/Gajim’ id=‘sz_ab_11’> <body>Hello buddy!</body></message>
XMPP Core
<presence />
XMPP Core
<presence type=‘available’ to=‘[email protected]‘ id=‘sz_ab_12’> <show>away</show></presence>
XMPP Core
<iq type='get' from=‘[email protected]/iPhone‘ to='[email protected]/Jappix' id=‘sz_ab_292’> <query xmlns='jabber:iq:version'/></iq>
XMPP EXtensionsaka ‘XEP’
XEP Types
Procedural Standards Track Historical
Informational Humorous
XMPP Extensions
XEP Statuses
Active
Draft
Obsolete
DeprecatedDeferred
Experimental
Final
Proposed
Rejected Retracted
XMPP Extensions
357 total
XMPP Extensions
XEP-0166
Draft Standards Track XMPP Extensions
Jingle RTP SessionsXEP-0167
Draft Standards Track XMPP Extensions
Jingle ICE-UDP Transport Method
XEP-0176
Draft Standards Track XMPP Extensions
Use of ZRTP in Jingle RTP Sessions
XEP-0262
Draft Standards Track XMPP Extensions
Case study
XMPP Extensions
Romeo calls Juliet
Jingle session flow
session-initiateRomeo Juliet
session inactive
STEP 1
Romeo Juliet
session-initiate
session-initiate
STEP 2
session-initiate
ACK
Romeo Juliet
session-initiate
STEP 3
Romeo Juliet
session-initiate
ACK
session-info
session-info
STEP 4
Romeo Juliet
session-initiate
ACK
session-info
session-info
ACK
Romeo Juliet
session-initiate
ACK
session-info
session-info
ACK
RINGING…
STEP 5
session-accept
Romeo Juliet
session-initiate
ACK
session-accept
session-info
ACK
STEP 6
session-accept
Romeo Juliet
session-initiate
ACK
session-accept
ACK
session-info
ACK
session-accept
Romeo Juliet
session-initiate
ACK
session-accept
ACK
session-info
ACK
session established
RTC stream now flowing… Audio/video session is established
Ending the call Juliet wants to stop the call (properly)
STEP 1
session-terminateRomeo Juliet
session-terminate
Previous flow
STEP 2
Romeo Juliet
Previous flow
ACK
session-terminate
session-terminate
Romeo Juliet
Previous flow
ACK
session ended
session-terminate
session-terminate
Stanzas exchanged
Testing with Chromium
Giggle.js
20K lines of JavaScript
TEST
WebRTC <> Jingle/XMPP
XMPP EcosystemServers, libs, clients, companies
XMPP Ecosystem
Erlang
XMPP Ecosystem
Lua
Erlang
XMPP Ecosystem
Erlang
Lua
Java
XMPP Ecosystem
JavaScriptJSJaC Strophe.js
Pythonpyxmpp jabber.py
RubyBabylon Blather
C++dxmpp gloox
XMPP EcosystemXMPP JavaScript
<iq type='get' id=‘jsjac_23’> <prefs xmlns='urn:xmpp:mam:0'/></iq>
JSJaC.js
Now mostly geeky Future can help unify communications, trash PSTN avoid communications to be PSTN-dependant
Thanks!
Jappix - jappix.com
XMPP - xmpp.org
Giggle.js - github.com/valeriansaliou/giggle