DesignXMPP im

Version 3 (Anonymous, 02/29/2012 03:42 pm)

1 1
= Gateway for Instant Messaging=
2 1
3 1
[[TOC(DesignXMPP_im, depth=2)]]
4 1
5 2
In XMPP there are several types of messages which lead to different semantics when exchanging XMPP ''message stanzas'' between 2 endpoints. This section focuses only on message types that allow 2 endpoints to send instant messages to each other.
6 2
7 2
Message types:
8 2
9 2
 * Normal: the default message type. A reply is not expected from the recipient.
10 2
 * Chat: This message type implies both parties have engaged a conversation.
11 2
 * Headline: An endpoint receiving this type of message should never reply, since it's meant to be used by servers or other entities to deliver announcements.
12 2
13 2
In SIP there are currently 2 ways of doing Instant Messaging:
14 2
15 2
 * SIP MESSAGE (RFC 3428)
16 2
 * MSRP (RFC 4975)
17 2
18 2
The first one is session-less and the latter is session based.
19 2
20 2
The mechanisms described here follow the currently available specifications for SIP-XMPP interoperability:
21 2
22 2
 * http://xmpp.org/internet-drafts/draft-saintandre-sip-xmpp-im-01.html
23 2
 * http://xmpp.org/internet-drafts/draft-saintandre-sip-xmpp-chat-03.html
24 2
25 2
26 2
== XMPP single message <-> SIP MESSAGE ==
27 2
28 2
XMPP single messages are mapped directly to SIP MESSAGE requests and ''vice versa''.
29 2
30 3
[[Image(xmppgq_im_normal.png)]]
31 3
32 3
=== Overview ===
33 3
34 3
The mechanism for translating XMPP normal message stanzas and SIP MESSAGE requests is straightforward, they map one to one. However, since SIP is used mainly with UDP as a transport, if a  XMPP stanza is bigger than 1500 bytes it will be chunked into smaller pieces to avoid ethernet fragmentation related issues.
35 3
36 3
Since SIP MESSAGE is a non INVITE transaction, it has to be replied immediately, because there is no way to avoid retransmissions. This means that the SIP-XMPP gateway will reply on the SIP side before knowing if the message was actually delivered to the XMPP side. In order to express this a "202 Accepted" reply will be sent to the SIP request instead of a "200 OK".
37 3
38 3
On the other hand, when an XMPP stanza is translated into a SIP MESSAGE request the SIP-XMPP gateway is able to report back the result (in case of error) by using a message stanza of type ''error''. This is possible because of the asynchronous nature of stanza processing in the XMPP protocol.