1Resource List Server
2
3Anca-Maria Vamanu
4
5   Voice Sistem SRL
6
7Edited by
8
9Anca-Maria Vamanu
10
11   Copyright © 2007 Voice Sistem SRL
12     __________________________________________________________________
13
14   Table of Contents
15
16   1. Admin Guide
17
18        1. Overview
19        2. Dependencies
20
21              2.1. Kamailio Modules
22              2.2. External Libraries or Applications
23
24        3. Parameters
25
26              3.1. db_url(str)
27              3.2. rlpres_db_url(str)
28              3.3. xcap_db_url(str)
29              3.4. db_mode(int)
30              3.5. xcap_table(str)
31              3.6. rlsubs_table(str)
32              3.7. rlpres_table(str)
33              3.8. clean_period (int)
34              3.9. rlpres_clean_period (int)
35              3.10. waitn_time (int)
36              3.11. notifier_poll_rate (int)
37              3.12. notifier_processes (int)
38              3.13. max_expires (int)
39              3.14. expires_offset (int)
40              3.15. hash_size (int)
41              3.16. xcap_root (str)
42              3.17. integrated_xcap_server (int)
43              3.18. to_presence_code (int)
44              3.19. rls_event (str)
45              3.20. outbound_proxy (str)
46              3.21. server_address (str)
47              3.22. max_notify_body_length (int)
48              3.23. reload_db_subs (integer)
49              3.24. fetch_rows (integer)
50              3.25. disable_remote_presence (integer)
51              3.26. max_backend_subs (integer)
52
53        4. Functions
54
55              4.1. rls_handle_subscribe([watcher_uri])
56              4.2. rls_handle_notify()
57              4.3. rls_update_subs(uri, event)
58
59        5. RPC Commands
60
61              5.1. rls.cleanup
62              5.2. rls.update_subs
63
64        6. Installation
65
66   2. Developer Guide
67
68   List of Examples
69
70   1.1. Set db_url parameter
71   1.2. Set rlpres_db_url parameter
72   1.3. Set xcap_db_url parameter
73   1.4. Set db_mode parameter
74   1.5. Set xcap_table parameter
75   1.6. Set rlsubs_table parameter
76   1.7. Set rlpres_table parameter
77   1.8. Set clean_period parameter
78   1.9. Set rlpres_clean_period parameter
79   1.10. Set waitn_time parameter
80   1.11. Set notifier_poll_rate parameter
81   1.12. Set notifier_processes parameter
82   1.13. Set max_expires parameter
83   1.14. Set expires_offset parameter
84   1.15. Set hash_size parameter
85   1.16. Set hash_size parameter
86   1.17. Set integrated_xcap_server parameter
87   1.18. Set to_presence_code parameter
88   1.19. Set rls_event parameter
89   1.20. Set outbound_proxy parameter
90   1.21. Set server_address parameter
91   1.22. Set max_notify_body_length parameter
92   1.23. Set reload_db_subs parameter
93   1.24. Set fetch_rows parameter
94   1.25. Set disable_remote_presence parameter
95   1.26. Set max_backend_subs parameter
96   1.27. rls_handle_subscribe usage
97   1.28. rls_handle_notify usage
98   1.29. rls_update_subs usage
99
100Chapter 1. Admin Guide
101
102   Table of Contents
103
104   1. Overview
105   2. Dependencies
106
107        2.1. Kamailio Modules
108        2.2. External Libraries or Applications
109
110   3. Parameters
111
112        3.1. db_url(str)
113        3.2. rlpres_db_url(str)
114        3.3. xcap_db_url(str)
115        3.4. db_mode(int)
116        3.5. xcap_table(str)
117        3.6. rlsubs_table(str)
118        3.7. rlpres_table(str)
119        3.8. clean_period (int)
120        3.9. rlpres_clean_period (int)
121        3.10. waitn_time (int)
122        3.11. notifier_poll_rate (int)
123        3.12. notifier_processes (int)
124        3.13. max_expires (int)
125        3.14. expires_offset (int)
126        3.15. hash_size (int)
127        3.16. xcap_root (str)
128        3.17. integrated_xcap_server (int)
129        3.18. to_presence_code (int)
130        3.19. rls_event (str)
131        3.20. outbound_proxy (str)
132        3.21. server_address (str)
133        3.22. max_notify_body_length (int)
134        3.23. reload_db_subs (integer)
135        3.24. fetch_rows (integer)
136        3.25. disable_remote_presence (integer)
137        3.26. max_backend_subs (integer)
138
139   4. Functions
140
141        4.1. rls_handle_subscribe([watcher_uri])
142        4.2. rls_handle_notify()
143        4.3. rls_update_subs(uri, event)
144
145   5. RPC Commands
146
147        5.1. rls.cleanup
148        5.2. rls.update_subs
149
150   6. Installation
151
1521. Overview
153
154   The modules is a Resource List Server implementation following the
155   specification in RFC 4662 and RFC 4826.
156
157   The server is independent from local presence servers, retrieving
158   presence information with Subscribe-Notify messages.
159
160   The module uses the presence module as a library, as it requires a
161   resembling mechanism for handling Subscribe. Therefore, in case the
162   local presence server is not collocated on the same machine with the RL
163   server, the presence module should be loaded in a library mode only
164   (see doc for presence module).
165
166   It handles subscription to lists in an event independent way.The
167   default event is presence, but if some other events are to be handled
168   by the server, they should be added using the module parameter
169   "rls_events".
170
171   It works with XCAP server for storage. There is also the possibility to
172   configure it to work in an integrated_xcap server mode, when it only
173   queries database for the resource lists documents. This is useful in a
174   small architecture when all the clients use an integrated server and
175   there are no references to exterior documents in their lists.
176
177   The same as presence module, it has a caching mode with periodical
178   update in database for subscribe information. The information retrieved
179   with Notify messages is stored in database only.
180
1812. Dependencies
182
183   2.1. Kamailio Modules
184   2.2. External Libraries or Applications
185
1862.1. Kamailio Modules
187
188   The following modules must be loaded before this module:
189     * a database module.
190     * sl.
191     * tm.
192     * presence- in a library mode.
193     * pua.
194
1952.2. External Libraries or Applications
196
197     * libxml.
198
1993. Parameters
200
201   3.1. db_url(str)
202   3.2. rlpres_db_url(str)
203   3.3. xcap_db_url(str)
204   3.4. db_mode(int)
205   3.5. xcap_table(str)
206   3.6. rlsubs_table(str)
207   3.7. rlpres_table(str)
208   3.8. clean_period (int)
209   3.9. rlpres_clean_period (int)
210   3.10. waitn_time (int)
211   3.11. notifier_poll_rate (int)
212   3.12. notifier_processes (int)
213   3.13. max_expires (int)
214   3.14. expires_offset (int)
215   3.15. hash_size (int)
216   3.16. xcap_root (str)
217   3.17. integrated_xcap_server (int)
218   3.18. to_presence_code (int)
219   3.19. rls_event (str)
220   3.20. outbound_proxy (str)
221   3.21. server_address (str)
222   3.22. max_notify_body_length (int)
223   3.23. reload_db_subs (integer)
224   3.24. fetch_rows (integer)
225   3.25. disable_remote_presence (integer)
226   3.26. max_backend_subs (integer)
227
2283.1. db_url(str)
229
230   The database url.
231
232   Default value is “mysql://kamailio:kamailiorw@localhost/kamailio”.
233
234   Example 1.1. Set db_url parameter
235...
236modparam("rls", "db_url", "dbdriver://username:password@dbhost/dbname")
237...
238
2393.2. rlpres_db_url(str)
240
241   The rlpres (rls_presentity table) database url. This parameter only
242   needs to be specified if the rls_watchers table and rls_presentity
243   tables are in different databases. rls_presentity is used to cache the
244   bodies of back-end NOTIFY requests until an RLS NOTIFY can be sent. On
245   a multi-server system having a single cache for all active servers can
246   cause issues if both servers try to send RLS NOTIFY requests at the
247   same time. This parameter enables each server to have its own (possibly
248   local) rls_presentity table.
249
250   Default value is a mirror of the “db_url” setting.
251
252   Example 1.2. Set rlpres_db_url parameter
253...
254modparam("rls", "rlpres_db_url", "dbdriver://username:password@dbhost/dbname")
255...
256
2573.3. xcap_db_url(str)
258
259   The xcap database url. This parameter only needs to be specified if the
260   rls db and integrated xcap server db have different urls.
261
262   Default value is a mirror of the “db_url” setting.
263
264   Example 1.3. Set xcap_db_url parameter
265...
266modparam("rls", "xcap_db_url", "dbdriver://username:password@dbhost/dbname")
267...
268
2693.4. db_mode(int)
270
271   The module supports 2 modes of operation, high speed memory based
272   storage (mode 0), and database only (mode 2) where all data is stored
273   in a database, allowing scalability at the expense of speed. Mode 1 is
274   reserved.
275
276   Default value is “0”
277
278   Example 1.4. Set db_mode parameter
279...
280modparam("rls", "db_mode", 2)
281...
282
2833.5. xcap_table(str)
284
285   The name of the xcap table in which the integrated server or the
286   xcap_client module writes. If integrated_xcap_server parameter not set,
287   the name of the table must be the same as the one set for the
288   xcap_client module.
289
290   Default value is “xcap”.
291
292   Example 1.5. Set xcap_table parameter
293...
294modparam("rls", "xcap_table", "xcaps");
295...
296
2973.6. rlsubs_table(str)
298
299   The name of the db table where resource lists subscription information
300   is stored.
301
302   Default value is “rls_watchers”.
303
304   Example 1.6. Set rlsubs_table parameter
305...
306modparam("rls", "rlsubs_table", "rls_subscriptions")
307...
308
3093.7. rlpres_table(str)
310
311   The name of the db table where notified event specific information is
312   stored.
313
314   Default value is “rls_presentity”.
315
316   Example 1.7. Set rlpres_table parameter
317...
318modparam("rls", "rlpres_table", "rls_notify")
319...
320
3213.8. clean_period (int)
322
323   The period at which to check for expired information. 0 means do not
324   check.
325
326   Default value is “100”.
327
328   Example 1.8. Set clean_period parameter
329...
330modparam("rls", "clean_period", 100)
331...
332
3333.9. rlpres_clean_period (int)
334
335   The period at which to check for expired rls_presentity information. -1
336   means do not use (clean_period) is used instead. 0 means do not check.
337   This option can be used when you want to check rls_presentity and
338   rls_watchers on different timeouts. This is useful when they are in
339   different databases.
340
341   Default value is “-1”.
342
343   Example 1.9. Set rlpres_clean_period parameter
344...
345modparam("rls", "rlpres_clean_period", 100)
346...
347
3483.10. waitn_time (int)
349
350   The maximum time period that RLS NOTIFY requests will be buffered for.
351   The server will attempt to send NOTIFY requests with the updated
352   presence state of the subscribed list or watcher information within
353   this many seconds of a change occurring.
354
355   Default value is “5”.
356
357   Example 1.10. Set waitn_time parameter
358...
359modparam("rls", "waitn_time", 10)
360...
361
3623.11. notifier_poll_rate (int)
363
364   The number of times per second that the notifier processes should check
365   for work. Approximately 1/(waitn_time * notifier_poll_rate *
366   notifier_processes) of the pending updates will be sent each time a
367   notifier process runs.
368
369   Separate notifier processes are only run when db_mode is 2 (DB only
370   mode).
371
372   Default value is “10”.
373
374   Example 1.11. Set notifier_poll_rate parameter
375...
376modparam("rls", "notifier_poll_rate", 20)
377...
378
3793.12. notifier_processes (int)
380
381   The number of notifier processes that should be started.
382
383   Separate notifier processes are only run when db_mode is 2 (DB only
384   mode).
385
386   Default value is “1”.
387
388   Example 1.12. Set notifier_processes parameter
389...
390modparam("rls", "notifier_processes", 2)
391...
392
3933.13. max_expires (int)
394
395   The maximum accepted expires for a subscription to a list.
396
397   Default value is “7200”.
398
399   Example 1.13. Set max_expires parameter
400...
401modparam("rls", "max_expires", 10800)
402...
403
4043.14. expires_offset (int)
405
406   This parameter only has an effect when the db_mode is DB_ONLY (mode 2).
407   When expired subscribers are checked for deletion from the database,
408   those that have a value in the expires column which is less than
409   current_time - expires_offset are matched. Hence when an offset of zero
410   is used, all those that expire prior the current time will be deleted.
411   If an offset of 't' is used, only those that expired more than t
412   seconds ago are deleted from the database. Negative offsets are treated
413   as though an offset of zero was specified.
414
415   Default value is “0”.
416
417   Example 1.14. Set expires_offset parameter
418...
419modparam("rls", "expires_offset", 0)
420...
421
4223.15. hash_size (int)
423
424   The dimension of the hash table used to store subscription to a list.
425   This parameter will be used as the power of 2 when computing table
426   size.
427
428   Default value is “9 (512)”.
429
430   Example 1.15. Set hash_size parameter
431...
432modparam("rls", "hash_size", 11)
433...
434
4353.16. xcap_root (str)
436
437   The address of the xcap server.
438
439   Default value is “NULL”.
440
441   Example 1.16. Set hash_size parameter
442...
443modparam("rls", "xcap_root", "http://192.168.2.132/xcap-root:800")
444...
445
4463.17. integrated_xcap_server (int)
447
448   This parameter should be set if only integrated xcap servers are used
449   to store resource lists.
450
451   Default value is “0”.
452
453   Example 1.17. Set integrated_xcap_server parameter
454...
455modparam("rls", "integrated_xcap_server", 1)
456...
457
4583.18. to_presence_code (int)
459
460   The code to be returned by rls_handle_subscribe function if the
461   processed Subscribe is not a resource list Subscribe. This code can be
462   used in an architecture with presence and rls servers collocated on the
463   same machine, to call handle_subscribe on the message causing this
464   code.
465
466   Default value is “0”.
467
468   Example 1.18. Set to_presence_code parameter
469...
470modparam("rls", "to_presence_code", 10)
471...
472
4733.19. rls_event (str)
474
475   The default event that RLS handles is presence. If some other events
476   should also be handled by RLS they should be added using this
477   parameter. It can be set more than once.
478
479   Default value is “"presence"”.
480
481   Example 1.19. Set rls_event parameter
482...
483modparam("rls", "rls_event", "dialog;sla")
484...
485
4863.20. outbound_proxy (str)
487
488   The SIP address where to send RLS subscriptions (outbound proxy address
489   as SIP URI).
490
491   Default value is “NULL”.
492
493   Example 1.20. Set outbound_proxy parameter
494...
495modparam("rls", "outbound_proxy", "sip:presence.kamailio.org")
496...
497
4983.21. server_address (str)
499
500   The address of the server that will be used as a contact in sent
501   Subscribe requests and 200 OK replies for Subscribe requests for RLS.
502   It is a mandatory parameter.
503
504   Example 1.21. Set server_address parameter
505...
506modparam("rls", "server_address", "sip:rls@ip.address.ofyour.proxy:5060")
507...
508
5093.22. max_notify_body_length (int)
510
511   The maximum size that the body of a NOTIFY message may be. If set to 0
512   (the default), no size limit is applied. Note that this refers only to
513   the body, not the complete NOTIFY message.
514
515   Example 1.22. Set max_notify_body_length parameter
516...
517modparam("rls", "max_notify_body_length", 32000)
518...
519
5203.23. reload_db_subs (integer)
521
522   Reload subscriptions on module initialization (requires db_mode 0
523   (memory only mode)).
524
525   Default value is 0 (do not load rows from db).
526
527   Example 1.23. Set reload_db_subs parameter
528...
529modparam("rls", "reload_db_subs", 1)
530...
531
5323.24. fetch_rows (integer)
533
534   Number of rows to be loaded in one step from database.
535
536   Default value is 500.
537
538   Example 1.24. Set fetch_rows parameter
539...
540modparam("rls", "fetch_rows", 1000)
541...
542
5433.25. disable_remote_presence (integer)
544
545   When set to a non-zero value RLS will not perform back-end SUBSCRIBEs
546   to non-local presentities. When people have large contact lists RLS
547   will make lots of back-end subscriptions for each local subscriber.
548   This can be a lot of traffic, and if the contact lists contain
549   non-local (as in not on this Kamailio server or cluster) contacts this
550   can result in a lot of Internet traffic. Setting this option to a
551   non-zero value prevents RLS from performing back-end SUBSCRIBEs for
552   remote presentities.
553
554   Default value is 0
555
556   Example 1.25. Set disable_remote_presence parameter
557...
558modparam("rls", "disable_remote_presence", 1)
559...
560
5613.26. max_backend_subs (integer)
562
563   When set to a non-zero value RLS will limit the number of back-end
564   SUBSCRIBEs for each RLS SUBSCRIBE to this value. Leaving this at the
565   default of zero means no limit. When people have large contact lists
566   RLS will make lots of back-end subscriptions. This can easily overload
567   a system. This option allows you to limit the number of back-end
568   SUBSCRIBEs to help prevent overload.
569
570   Default value is 0
571
572   Example 1.26. Set max_backend_subs parameter
573...
574modparam("rls", "max_backend_subs", 30)
575...
576
5774. Functions
578
579   4.1. rls_handle_subscribe([watcher_uri])
580   4.2. rls_handle_notify()
581   4.3. rls_update_subs(uri, event)
582
5834.1.  rls_handle_subscribe([watcher_uri])
584
585   This function detects if a Subscribe message should be handled by RLS.
586   If not it replies with the configured to_presence_code. If it is, it
587   extracts the dialog info and sends aggregate Notify requests with
588   information for the list.
589
590   By default this function uses the From: URI from the SUBSCRIBE request
591   as the Watcher URI. The optional watcher_uri parameter can be used to
592   specify a different Watcher URI, possibly taken from a SIP header like
593   P-Asserted-Identity:.
594
595   This function can be used from REQUEST_ROUTE.
596
597   Example 1.27. rls_handle_subscribe usage
598...
599For presence and rls on the same machine:
600        modparam("rls", "to_presence_code", 10)
601
602        if(is_method("SUBSCRIBE"))
603        {
604                $var(ret_code)= rls_handle_subscribe();
605
606                if($var(ret_code)== 10)
607                                handle_subscribe();
608
609                t_release();
610        }
611
612For rls only:
613        if(is_method("SUBSCRIBE"))
614        {
615                rls_handle_subscribe();
616                t_release();
617        }
618
619...
620
6214.2.  rls_handle_notify()
622
623   Handle NOTIFY requests.
624
625   This function can be used from REQUEST_ROUTE.
626
627   Example 1.28. rls_handle_notify usage
628...
629if(method=="NOTIFY")
630    rls_handle_notify();
631...
632
6334.3.  rls_update_subs(uri, event)
634
635   This function can be used in configuration to trigger updates to
636   resource list subscriptions (for example, after the contents of a
637   resource list has changes).
638
639   Parameters:
640     * uri - the uri of the user who made the change and whose resource
641       list subscriptions should be updated
642     * event - the event package (e.g. presence).
643
644   This function can be used from ANY_ROUTE.
645
646   Example 1.29. rls_update_subs usage
647...
648Within event_route[xhttp:request]:
649        case "PUT":
650                xcaps_put("$var(uri)", "$var(doc_uri)", "$rb");
651                if($xcapuri(u=>auid)=~"pres-rules") {
652                        pres_update_watchers("$var(uri)", "presence");
653                        pres_refresh_watchers("$var(uri)", "presence", 1);
654                } else if ($xcapuri(u=>auid)=~"resource-lists"
655                           || $xcapuri(u=>auid)=~"rls-services") {
656                        rls_update_subs("$var(uri)", "presence");
657                }
658                exit;
659                break;
660...
661
6625. RPC Commands
663
664   5.1. rls.cleanup
665   5.2. rls.update_subs
666
6675.1. rls.cleanup
668
669   Manually triggers the cleanup functions for the rls_watchers and
670   rls_presentity tables. Useful if you have set clean_period to zero or
671   less.
672
673   Name: rls.cleanup
674
675   Parameters: none
676
677   RPC Command Format:
678...
679kamcmd rls.cleanup
680...
681
6825.2. rls.update_subs
683
684   Manually triggers updates to resource list subscriptions (for example,
685   after the contents of a resource list has changes).
686
687   Name: rls.cleanup
688
689   Parameters:
690     * uri - the uri of the user who made the change and whose resource
691       list subscriptions should be updated
692     * event - the event package (e.g. presence).
693
694   RPC Command Format:
695...
696kamcmd rls.update_subs sip:alice@domain.com presence
697...
698
6996. Installation
700
701   The module requires 2 tables in Kamailio database: rls_presentity and
702   rls_watchers.The SQL syntax to create them can be found in
703   rls-create.sql script in the database directories in the
704   kamailio/scripts folder. You can also find the complete database
705   documentation on the project webpage,
706   https://www.kamailio.org/docs/db-tables/kamailio-db-devel.html.
707
708Chapter 2. Developer Guide
709
710   The module provides no functions to be used in other Kamailio modules.
711