1xmpp Module
2
3Andreea Spirea
4
5Daniel-Constantin Mierla
6
7   <miconda@gmail.com>
8
9Edited by
10
11Andreea Spirea
12
13   Copyright © 2006 Voice Sistem SRL
14     __________________________________________________________________
15
16   Table of Contents
17
18   1. Admin Guide
19
20        1. Overview
21        2. Dependencies
22
23              2.1. Kamailio Modules
24              2.2. External Libraries or Applications
25
26        3. Parameters
27
28              3.1. backend (string)
29              3.2. domain_separator (string)
30              3.3. gateway_domain (string)
31              3.4. xmpp_domain (string)
32              3.5. xmpp_host (string)
33              3.6. xmpp_port (integer)
34              3.7. xmpp_password (string)
35              3.8. outbound_proxy (string)
36              3.9. gwmap (string)
37
38        4. Functions
39
40              4.1. xmpp_send_message()
41
42        5. Configuration
43
44   List of Examples
45
46   1.1. Set backend parameter
47   1.2. Set domain_separator parameter
48   1.3. Set gateway_domain parameter
49   1.4. Set xmpp_domain parameter
50   1.5. Set xmpp_host parameter
51   1.6. Set xmpp_port parameter
52   1.7. Set xmpp_password parameter
53   1.8. Set outbound_proxy parameter
54   1.9. Set gwmap parameter
55   1.10. xmpp_send_message() usage
56
57Chapter 1. Admin Guide
58
59   Table of Contents
60
61   1. Overview
62   2. Dependencies
63
64        2.1. Kamailio Modules
65        2.2. External Libraries or Applications
66
67   3. Parameters
68
69        3.1. backend (string)
70        3.2. domain_separator (string)
71        3.3. gateway_domain (string)
72        3.4. xmpp_domain (string)
73        3.5. xmpp_host (string)
74        3.6. xmpp_port (integer)
75        3.7. xmpp_password (string)
76        3.8. outbound_proxy (string)
77        3.9. gwmap (string)
78
79   4. Functions
80
81        4.1. xmpp_send_message()
82
83   5. Configuration
84
851. Overview
86
87   This module is a gateway between Kamailio and a XMPP/Jabber server. It
88   enables the exchange of instant messages between SIP clients and
89   XMPP(jabber) clients.
90
91   The module can be used in two different modes:
92     * XMPP Component Mode. In this mode, Kamailio connects to an XMPP
93       server using the standardized XMPP component interface, extending
94       your XMPP services. The connection is done over TCP/IP with
95       authorization.
96     * XMPP Server. In this mode, the Kamailio XMPP module is a
97       stand-alone XMPP server connector, with no requirement for another
98       XMPP server in the system. This server uses XMPP S2S (Server to
99       Server) connections to connect to other XMPP servers or receive
100       connections from other servers. NOTE: this is limited
101       implementation of a XMPP server, it does not support SRV or TLS so
102       far. Also, in this mode it cannot get XMPP clients connected, only
103       XMPP servers (in other words, you cannot use it to replace an XMPP
104       full server implementation). This mode is in beta stage for the
105       moment.
106
107   In the component mode, you need a local XMPP server (recommended
108   Jabberd2). The XMPP module will connect by using TCP/IP connection to
109   the local jabber server. The documentation and the source for Jabberd
110   server are located at the following link:
111   http://jabberd.jabberstudio.org/2/#download
112
113   After you have a running XMPP server, what you need to do is set the
114   following parameters in the Kamailio configuration file:
115     * gateway_domain, xmpp_domain (which can be the same as
116       gateway_domain) and xmpp_host, which are explained in the Exported
117       Parameters section;
118     * listen = your ip;
119     * alias=Kamailio SIP domain and alias=gateway domain;
120     * in the following section of the configuration file, change to your
121       gateway domain:
122
123         ### ---8<--- cut here ---8<--- ###
124        if ($rd =="sip-xmpp.kamailio.org") {
125                if (!t_newtran()) {
126                        sl_reply_error();
127        ...........
128
129     * You can also define a password for the XMPP Component connection to
130       the Jabber server, which must be the same as the xmpp_password
131       parameter.
132
133   A use case, for the component-mode, would look like this:
134     * Kamailio is hosting the sip-server.kamailio.org SIP domain
135     * The gateway SIP domain is sip-xmpp.kamailio.org
136     * The XMPP server is hosting the XMPP domain xmpp.kamailio.org
137     * The Component is hosting the XMPP domain xmpp-sip.kamailio.org
138
139   In the XMPP stand-alone server mode, the XMPP module is a minimal
140   XMPP/Jabber server. In this mode, another Jabber server is not needed.
141   The gateway will connect to other XMPP servers based on the JID domain
142   and by using the standardized XMPP S2S protocol.
143
144   If you want to change to server-mode, you have to change the "backend"
145   parameter, as shown in the Exported Parameters section, from
146   "component" to "server".
147
148   A use case, for the server-mode, would look like this:
149     * Kamailio is hosting the SIP domain sip-server.kamailio.org
150     * The gateway is hosting the SIP domain sip-xmpp.kamailio.org;
151     * The "XMPP server" is running on xmpp-sip.kamailio.org.
152
153   Unless 'gwmap' parameter is set, in both modes (server or component),
154   the destination address must have the same pattern:
155
156   “sip:username<delim>jabber_server@gateway_domain”
157
158   From a jabber client's point of view, the destination will look like:
159
160   “sip_username<delim>sip_domain@xmpp_domain”
161
162   'delim' is a character that can be set via 'domain_separator'
163   parameter.
164
165   If 'gwmap' parameter is used, then the addresses are not encoding the
166   domains in the username part. They are going to be straight
167   'username@domain' always.
168
1692. Dependencies
170
171   2.1. Kamailio Modules
172   2.2. External Libraries or Applications
173
1742.1. Kamailio Modules
175
176   The following modules must be loaded before this module:
177     * requires 'tm' module.
178
1792.2. External Libraries or Applications
180
181   The following libraries or applications must be installed before
182   running Kamailio with this module loaded:
183     * expat - used for parsing/building XML. Linux package:
184       libexpat1-devel
185
1863. Parameters
187
188   3.1. backend (string)
189   3.2. domain_separator (string)
190   3.3. gateway_domain (string)
191   3.4. xmpp_domain (string)
192   3.5. xmpp_host (string)
193   3.6. xmpp_port (integer)
194   3.7. xmpp_password (string)
195   3.8. outbound_proxy (string)
196   3.9. gwmap (string)
197
1983.1. backend (string)
199
200   The mode you are using the module; it can be either "component" or
201   "server".
202
203   Default value is "component".
204
205   Example 1.1. Set backend parameter
206...
207 modparam("xmpp", "backend", "server")
208...
209
2103.2. domain_separator (string)
211
212   In the destination address we need an extra character as a domain
213   separator, apart from @. The address of the XMPP(jabber) client looks
214   like this:
215   "sip:username<domain_separator>jabber_server@gateway_sip_domain". The
216   address of a SIP client has the following pattern :
217   "sip_username<domain_separator>sip_domain@gateway_xmpp_domain"; A
218   common used character in XMPP transports is "%".
219
220   Default value is "*".
221
222   Example 1.2. Set domain_separator parameter
223...
224 modparam("xmpp", "domain_separator", "%")
225...
226
2273.3. gateway_domain (string)
228
229   The domain of the SIP-to-XMPP gateway - it has to be in DNS or SIP UA
230   has to use outbound proxy to SIP-to-XMPP gateway IP address. It has to
231   be used as domain in the destination address of the messages sent by
232   SIP users to XMPP users:
233   "sip:username<delim>jabber_server@gateway_domain".
234
235   Default value is "sip-xmpp.example.org".
236
237   Example 1.3. Set gateway_domain parameter
238...
239 modparam("xmpp", "gateway_domain", "sip-xmpp.kamailio.org")
240...
241
2423.4. xmpp_domain (string)
243
244   The XMPP domain of the component or the server, depending on the mode.
245   It can be the same as the gateway_domain. For a server DNS name, you
246   have to add _xmpp-server._tcp SRV records in your DNS zone to enable
247   connections from other XMPP servers.
248
249   Default value is "sip-xmpp.example.org".
250
251   Example 1.4. Set xmpp_domain parameter
252...
253 modparam("xmpp", "xmpp_domain", "xmpp-sip.kamailio.org")
254...
255
2563.5. xmpp_host (string)
257
258   The IP address or the hostname for the local XMPP/Jabber server to
259   connect to when the backend is set to "component". For server mode,
260   this is the IP address the XMPP module binds to listen for connections
261   coming from other XMPP servers.
262
263   Default value is "xmpp.example.org".
264
265   Example 1.5. Set xmpp_host parameter
266...
267 modparam("xmpp", "xmpp_host", "xmpp.kamailio.org")
268...
269
2703.6. xmpp_port (integer)
271
272   In component mode, this is the port the XMPP server component interface
273   listens to. In server mode, this is the port the module listens to.
274
275   Default value is "5347", if backend is set to "component" and "5269",
276   if backend is set to "server".
277
278   Example 1.6. Set xmpp_port parameter
279...
280 modparam("xmpp", "xmpp_port", 5269)
281...
282
2833.7. xmpp_password (string)
284
285   The password of the local XMPP server.
286
287   This is the password for the component interface on the XMPP server,
288   when connecting as a component. Default password is "secret". When
289   connecting to jabberd2, you need to make sure this is the password
290   configured in the file "c2s.xml". This is how the default configuration
291   for the jabberd2 looks like:
292                        <router>
293        ...............
294        <!-- Username/password to authenticate as --&gt;
295    <user>jabberd</user>;          <!-- default: jabberd -->;
296    <pass>secret</pass>;           <!-- default: secret -->;
297
298   Example 1.7. Set xmpp_password parameter
299...
300 modparam("xmpp", "xmpp_password", "secret")
301...
302
3033.8. outbound_proxy (string)
304
305   The SIP address used as next hop when sending the message. Very useful
306   when using Kamailio with a domain name not in DNS, or when using a
307   separate Kamailio instance for XMPP processing. If not set, the message
308   will be sent to the address in destination URI.
309
310   Default value is NULL.
311
312   Example 1.8. Set outbound_proxy parameter
313...
314 modparam("xmpp", "outbound_proxy", "sip:kamailio.org;transport=tcp")
315...
316
3173.9. gwmap (string)
318
319   Set the mappings between SIP and XMPP domains. This parameter can be
320   set many times, adding more SIP-XMPP domain mappings. Its value has to
321   be a list of tokens like 'sipdomain=xmppdomain', separated by ';'
322   (e.g., 'sipdomain1=xmppdomain1;sipdomain2=xmppdomain2'.
323
324   When this parameter is set, the URI encoding based on
325   'domain_separator' is no longer enabled. The module will use only
326   addresses in the format 'username@domain'. If the source or destination
327   address does not match a domain in gwmap, then the domain value is
328   preserved when sending to the other protocol.
329
330   Default value is NULL.
331
332   Example 1.9. Set gwmap parameter
333...
334 modparam("xmpp", "gwmap", "sip.kamailio.org=xmpp.kamailio.org;abc.com=xyz.com")
335 modparam("xmpp", "gwmap", "kamailio.net")
336...
337
338   Based on the above parameter values, if there is a SIP message from
339   'sip:alice@sip.kamailio.org' going to 'sip:bob@abc.com', the XMPP
340   message to be sent is from 'alice@xmpp.kamailio.org' to 'bob@xyz.com'.
341
3424. Functions
343
344   4.1. xmpp_send_message()
345
3464.1.  xmpp_send_message()
347
348   Converts SIP messages to XMPP(jabber) messages, in order to be relayed
349   to a XMPP(jabber) client.
350
351   Example 1.10. xmpp_send_message() usage
352...
353xmpp_send_message();
354...
355
3565. Configuration
357
358   Next is presented a sample configuration file one can use to implement
359   a standalone SIP-to-XMPP gateway. You can run an instance of Kamailio
360   on a separate machine or on different port with the following config,
361   and have the main SIP server configured to forward all SIP requests for
362   XMPP world to it.
363....
364#
365# $Id$
366#
367# simple quick-start config script for XMPP GW
368#
369# make sure in your main SIP server that you send
370# only the adequate SIP MESSAGES to XMPP GW
371#
372#
373# ----------- global configuration parameters ------------------------
374
375debug=9            # debug level (cmd line: -dddddddddd)
376fork=no
377log_stderror=yes    # (cmd line: -E)
378
379/* Uncomment these lines to enter debugging mode
380fork=no
381log_stderror=yes
382*/
383
384check_via=no    # (cmd. line: -v)
385dns=no          # (cmd. line: -r)
386rev_dns=no      # (cmd. line: -R)
387children=4
388
389listen=udp:10.10.10.10:5076
390alias=sip-xmpp.kamailio.org
391
392# ------------------ module loading ----------------------------------
393
394mpath="/usr/local/lib/kamailio/modules/"
395loadmodule "sl.so"
396loadmodule "tm.so"
397loadmodule "rr.so"
398loadmodule "maxfwd.so"
399loadmodule "textops.so"
400loadmodule "mi_fifo.so"
401
402
403# XMPP
404loadmodule "xmpp.so"
405
406modparam("xmpp", "domain_separator", "*")
407modparam("xmpp", "gateway_domain", "sip-xmpp.kamailio.org")
408modparam("xmpp", "xmpp_domain", "xmpp-sip.kamailio.org")
409modparam("xmpp", "xmpp_host", "xmpp.kamailio.org")
410
411modparam("xmpp", "backend", "server")
412# modparam("xmpp", "backend", "component")
413
414# ----------------- setting module-specific parameters ---------------
415
416# -- mi_fifo params --
417
418modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo_xmpp")
419
420# -- usrloc params --
421
422# -- rr params --
423# add value to ;lr param to make some broken UAs happy
424modparam("rr", "enable_full_lr", 1)
425
426# -------------------------  request routing logic -------------------
427
428# main routing logic
429
430route{
431
432        # initial sanity checks -- messages with
433        # max_forwards==0, or excessively long requests
434        if (!mf_process_maxfwd_header("10")) {
435                sl_send_reply("483","Too Many Hops");
436                exit;
437        };
438
439        if (msg:len >=  2048 ) {
440                sl_send_reply("513", "Message too big");
441                exit;
442        };
443
444        ### absorb retransmissions ###
445        if (!t_newtran()) {
446                sl_reply_error();
447                return;
448        }
449        if (method == "MESSAGE") {
450                log("*** xmpp-handled MESSAGE message.\n");
451                if (xmpp_send_message()) {
452                        t_reply("200", "Accepted");
453                } else {
454                        t_reply("404", "Not found");
455                }
456                return;
457        }
458
459        log("*** xmpp: unhandled message type\n");
460        t_reply("503", "Service unavailable");
461        return;
462}
463
464
465....
466