diff --git a/src/modules/app_lua_sr/README b/src/modules/app_lua_sr/README index 77b82248d10..8446e0d2f1e 100644 --- a/src/modules/app_lua_sr/README +++ b/src/modules/app_lua_sr/README @@ -10,7 +10,7 @@ Daniel-Constantin Mierla - Copyright 2010-2019 Daniel-Constantin Mierla (asipto.com) + Copyright © 2010-2019 Daniel-Constantin Mierla (asipto.com) __________________________________________________________________ Table of Contents @@ -138,7 +138,7 @@ Chapter 1. Admin Guide Note that 'sr', 'sr.hdr' and 'sr.pv' modules are always registered to Lua. - Default value is "null". + Default value is “null”. Example 1.2. Set register parameter ... diff --git a/src/modules/app_mono/README b/src/modules/app_mono/README index 52100a42a81..45fa2028bbc 100644 --- a/src/modules/app_mono/README +++ b/src/modules/app_mono/README @@ -10,8 +10,6 @@ Daniel-Constantin Mierla -Edited by - Alex Balashov diff --git a/src/modules/app_perl/README b/src/modules/app_perl/README index b554b3b8542..c6f42f585e0 100644 --- a/src/modules/app_perl/README +++ b/src/modules/app_perl/README @@ -1650,45 +1650,45 @@ Chapter 4. Frequently Asked Questions 4.1. - Are there known bugs in the Perl module? - - The Perl module does have a few shortcomings that may be regarded as - bugs. - * Missing module functions. Not all functions of other modules are - available for Perl access. The reason for this is a design property - of Kamailio. Making available more functions is work in progress. - * Perl and threads. Perl itself is, when compiled with the correct - parameters, thread safe; unfortunately, not all Perl modules are. - The DBI modules, especially (but not restricted to) DBI::ODBC are - known NOT to be thread safe. - Using DBI::ODBC -- and possibly other non-thread-safe Perl - extensions -- may result in erroneous behavior of Kamailio, - including (but not restricted to) server crashes and wrong routing. + Are there known bugs in the Perl module? + + The Perl module does have a few shortcomings that may be regarded as + bugs. + * Missing module functions. Not all functions of other modules are + available for Perl access. The reason for this is a design property + of Kamailio. Making available more functions is work in progress. + * Perl and threads. Perl itself is, when compiled with the correct + parameters, thread safe; unfortunately, not all Perl modules are. + The DBI modules, especially (but not restricted to) DBI::ODBC are + known NOT to be thread safe. + Using DBI::ODBC -- and possibly other non-thread-safe Perl + extensions -- may result in erroneous behavior of Kamailio, + including (but not restricted to) server crashes and wrong routing. 4.2. - Where can I find more about Kamailio? + Where can I find more about Kamailio? - Take a look at https://www.kamailio.org/. + Take a look at https://www.kamailio.org/. 4.3. - Where can I post a question about this module? + Where can I post a question about this module? - First at all check if your question was already answered on one of our - mailing lists: - * User Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users - * Developer Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev - E-mails regarding any stable Kamailio release should be sent to - and e-mails regarding development - versions should be sent to . + E-mails regarding any stable Kamailio release should be sent to + and e-mails regarding development + versions should be sent to . 4.4. - How can I report a bug? + How can I report a bug? - Please follow the guidelines provided at: - https://github.com/kamailio/kamailio/issues. + Please follow the guidelines provided at: + https://github.com/kamailio/kamailio/issues. diff --git a/src/modules/auth_radius/README b/src/modules/auth_radius/README index ff0a1ad8660..4640043e998 100644 --- a/src/modules/auth_radius/README +++ b/src/modules/auth_radius/README @@ -22,8 +22,6 @@ Jan Janak -Edited by - Phil Lavin diff --git a/src/modules/cdp_avp/README b/src/modules/cdp_avp/README index 4cff2f2ed32..6466a28aeca 100644 --- a/src/modules/cdp_avp/README +++ b/src/modules/cdp_avp/README @@ -8,8 +8,6 @@ Edited by Jason Penton -Edited by - Richard Good Copyright © 2006 FhG Fokus @@ -1658,28 +1656,28 @@ Chapter 3. Frequently Asked Questions 3.1. - Where can I find more about Kamailio? + Where can I find more about Kamailio? - Take a look at https://www.kamailio.org/. + Take a look at https://www.kamailio.org/. 3.2. - Where can I post a question about this module? + Where can I post a question about this module? - First at all check if your question was already answered on one of our - mailing lists: - * User Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users - * Developer Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev - E-mails regarding any stable Kamailio release should be sent to - and e-mails regarding development - versions should be sent to . + E-mails regarding any stable Kamailio release should be sent to + and e-mails regarding development + versions should be sent to . 3.3. - How can I report a bug? + How can I report a bug? - Please follow the guidelines provided at: - https://github.com/kamailio/kamailio/issues. + Please follow the guidelines provided at: + https://github.com/kamailio/kamailio/issues. diff --git a/src/modules/dispatcher/README b/src/modules/dispatcher/README index 139597f9cb0..e7d76ca205b 100644 --- a/src/modules/dispatcher/README +++ b/src/modules/dispatcher/README @@ -1,2 +1,2119 @@ +DISPATCHER Module +Daniel-Constantin Mierla + + +Edited by + +Daniel-Constantin Mierla + + + +Carsten Bock + + ng-voice GmbH + +Olle E. Johansson + + Edvina AB + +Alessandro Arrichiello + + Hewlett Packard + +Luis Martin + +Julien Chavanton + + + +Federico Cabiddu + + + + Copyright © 2004 FhG FOKUS + + Copyright © 2005 Voice Sistem + + Copyright © 2010 Daniel-Constantin Mierla (asipto.com) + + Copyright © 2014 Olle E. Johansson, Edvina AB + + Copyright © 2015 Alessandro Arrichiello, Hewlett Packard + + Copyright © 2017, 2018 Julien chavanton, Flowroute + + Copyright © 2020 Federico Cabiddu, Libon + __________________________________________________________________ + + Table of Contents + + 1. Admin Guide + + 1. Overview + 2. Dependencies + + 2.1. Kamailio modules + 2.2. External libraries or applications + + 3. Parameters + + 3.1. list_file (string) + 3.2. db_url (string) + 3.3. table_name (string) + 3.4. setid_col (string) + 3.5. destination_col (string) + 3.6. flags_col (string) + 3.7. priority_col (string) + 3.8. attrs_col (string) + 3.9. force_dst (int) + 3.10. flags (int) + 3.11. use_default (int) + 3.12. xavp_dst (str) + 3.13. xavp_dst_mode (int) + 3.14. xavp_ctx (str) + 3.15. xavp_ctx_mode (int) + 3.16. hash_pvar (str) + 3.17. setid_pvname (str) + 3.18. attrs_pvname (str) + 3.19. ds_ping_method (string) + 3.20. ds_ping_from (string) + 3.21. ds_ping_interval (int) + 3.22. ds_probing_threshold (int) + 3.23. ds_inactive_threshold (int) + 3.24. ds_ping_reply_codes (string) + 3.25. ds_probing_mode (int) + 3.26. ds_ping_latency_stats (int) + 3.27. ds_latency_estimator_alpha (int) + 3.28. ds_hash_size (int) + 3.29. ds_hash_expire (int) + 3.30. ds_hash_initexpire (int) + 3.31. ds_hash_check_interval (int) + 3.32. outbound_proxy (str) + 3.33. ds_default_socket (str) + 3.34. ds_default_sockname (str) + 3.35. ds_timer_mode (int) + 3.36. event_callback (str) + 3.37. ds_attrs_none (int) + 3.38. ds_db_extra_attrs (str) + 3.39. ds_load_mode (int) + 3.40. reload_delta (int) + + 4. Functions + + 4.1. ds_select_dst(set, alg[, limit]) + 4.2. ds_select_domain(set, alg[, limit]) + 4.3. ds_select(set, alg [, limit]) + 4.4. ds_select_routes(rules, mode [, limit]) + 4.5. ds_next_dst() + 4.6. ds_next_domain() + 4.7. ds_set_dst() + 4.8. ds_set_domain() + 4.9. ds_mark_dst([state]) + 4.10. ds_list_exists(groupid) + 4.11. ds_is_from_list([groupid [, mode [, uri] ] ]) + 4.12. ds_load_update() + 4.13. ds_load_unset() + 4.14. ds_reload() + + 5. RPC Commands + + 5.1. dispatcher.set_state + 5.2. dispatcher.set_duid_state + 5.3. dispatcher.list + 5.4. dispatcher.reload + 5.5. dispatcher.ping_active + 5.6. dispatcher.add + 5.7. dispatcher.remove + 5.8. dispatcher.hash + + 6. Installation and Running + + 6.1. Destination List File + + 6.1.1. Special Attributes + 6.1.2. File Format + + 6.2. Kamailio config file + + 7. Event routes + + 7.1. dispatcher:dst-down + 7.2. dispatcher:dst-up + + 2. Frequently Asked Questions + + List of Examples + + 1.1. Set the “list_file” parameter + 1.2. Set “db_url” parameter + 1.3. Set “table_name” parameter + 1.4. Set “setid_col” parameter + 1.5. Set “destination_col” parameter + 1.6. Set “flags_col” parameter + 1.7. Set “priority_col” parameter + 1.8. Set “attrs_col” parameter + 1.9. Set the “force_dst” parameter + 1.10. Set the “flags” parameter + 1.11. Set the “use_default” parameter + 1.12. Set the “xavp_dst” parameter + 1.13. Set the “xavp_dst_mode” parameter + 1.14. Set the “xavp_ctx” parameter + 1.15. Set the “xavp_ctx_mode” parameter + 1.16. Use $avp(hash) for hashing: + 1.17. Use combination of PVs for hashing: + 1.18. Set the “setid_pvname” parameter + 1.19. Set the “attrs_pvname” parameter + 1.20. Set the “ds_ping_method” parameter + 1.21. Set the “ds_ping_from” parameter + 1.22. Set the “ds_ping_interval” parameter + 1.23. Set the “ds_probing_threshold” parameter + 1.24. Set the “ds_inactive_threshold” parameter + 1.25. Set the “ds_ping_reply_codes” parameter + 1.26. Set the “ds_probing_mode” parameter + 1.27. accessing the metrics + 1.28. Set the “ds_ping_latency_stats” parameter + 1.29. Set the “ds_hash_size” parameter + 1.30. Set the “ds_hash_size” parameter + 1.31. Set the “ds_hash_expire” parameter + 1.32. Set the “ds_hash_initexpire” parameter + 1.33. Set the “ds_hash_check_interval” parameter + 1.34. Set the “outbound_proxy” parameter + 1.35. Set the “ds_default_socket” parameter + 1.36. Set the “ds_default_sockname” parameter + 1.37. Set the “ds_timer_mode” parameter + 1.38. Set event_callback parameter + 1.39. Set the “ds_attrs_none” parameter + 1.40. Set the “ds_db_extra_attrs” parameter + 1.41. Set the “ds_load_mode” parameter + 1.42. Set reload_delta parameter + 1.43. ds_select_dst usage + 1.44. configuring load balancing with congestion detection + 1.45. ds_select_domain usage + 1.46. ds_select usage + 1.47. ds_select_routes usage + 1.48. ds_mark_dst usage + 1.49. ds_list_exists usage + 1.50. ds_is_from_list usage + 1.51. ds_load_unset usage + 1.52. dispatcher list file + 1.53. Kamailio config script - sample dispatcher usage + +Chapter 1. Admin Guide + + Table of Contents + + 1. Overview + 2. Dependencies + + 2.1. Kamailio modules + 2.2. External libraries or applications + + 3. Parameters + + 3.1. list_file (string) + 3.2. db_url (string) + 3.3. table_name (string) + 3.4. setid_col (string) + 3.5. destination_col (string) + 3.6. flags_col (string) + 3.7. priority_col (string) + 3.8. attrs_col (string) + 3.9. force_dst (int) + 3.10. flags (int) + 3.11. use_default (int) + 3.12. xavp_dst (str) + 3.13. xavp_dst_mode (int) + 3.14. xavp_ctx (str) + 3.15. xavp_ctx_mode (int) + 3.16. hash_pvar (str) + 3.17. setid_pvname (str) + 3.18. attrs_pvname (str) + 3.19. ds_ping_method (string) + 3.20. ds_ping_from (string) + 3.21. ds_ping_interval (int) + 3.22. ds_probing_threshold (int) + 3.23. ds_inactive_threshold (int) + 3.24. ds_ping_reply_codes (string) + 3.25. ds_probing_mode (int) + 3.26. ds_ping_latency_stats (int) + 3.27. ds_latency_estimator_alpha (int) + 3.28. ds_hash_size (int) + 3.29. ds_hash_expire (int) + 3.30. ds_hash_initexpire (int) + 3.31. ds_hash_check_interval (int) + 3.32. outbound_proxy (str) + 3.33. ds_default_socket (str) + 3.34. ds_default_sockname (str) + 3.35. ds_timer_mode (int) + 3.36. event_callback (str) + 3.37. ds_attrs_none (int) + 3.38. ds_db_extra_attrs (str) + 3.39. ds_load_mode (int) + 3.40. reload_delta (int) + + 4. Functions + + 4.1. ds_select_dst(set, alg[, limit]) + 4.2. ds_select_domain(set, alg[, limit]) + 4.3. ds_select(set, alg [, limit]) + 4.4. ds_select_routes(rules, mode [, limit]) + 4.5. ds_next_dst() + 4.6. ds_next_domain() + 4.7. ds_set_dst() + 4.8. ds_set_domain() + 4.9. ds_mark_dst([state]) + 4.10. ds_list_exists(groupid) + 4.11. ds_is_from_list([groupid [, mode [, uri] ] ]) + 4.12. ds_load_update() + 4.13. ds_load_unset() + 4.14. ds_reload() + + 5. RPC Commands + + 5.1. dispatcher.set_state + 5.2. dispatcher.set_duid_state + 5.3. dispatcher.list + 5.4. dispatcher.reload + 5.5. dispatcher.ping_active + 5.6. dispatcher.add + 5.7. dispatcher.remove + 5.8. dispatcher.hash + + 6. Installation and Running + + 6.1. Destination List File + + 6.1.1. Special Attributes + 6.1.2. File Format + + 6.2. Kamailio config file + + 7. Event routes + + 7.1. dispatcher:dst-down + 7.2. dispatcher:dst-up + +1. Overview + + This module offers SIP load balancer functionality and it can be used + as SIP traffic dispatcher. There are many load balancing and traffic + dispatching algorithms that you can choose from, for example: + round-robin, weight based load balancing, call load distribution, and + hashing over SIP message attributes. + + The module can be used as a stateless load balancer; it does not depend + on any call state tracking module. It requires the TM module if you + enable auto-discovery of active/inactive gateways. + + It is very lightweight, therefore suitable for handling heavy SIP + traffic. As the module has a small footprint and the ability to load + balancing rules from a plain text file, it is suitable for embedded + systems. + +2. Dependencies + + 2.1. Kamailio modules + 2.2. External libraries or applications + +2.1. Kamailio modules + + The following modules must be loaded before this module: + * TM - only if active recovery of failed hosts is required. + * database engine - only if you want to load balancing routes from + database instead of plain text file. . + +2.2. External libraries or applications + + The following libraries or applications must be installed before + running Kamailio with this module: + * none. + +3. Parameters + + 3.1. list_file (string) + 3.2. db_url (string) + 3.3. table_name (string) + 3.4. setid_col (string) + 3.5. destination_col (string) + 3.6. flags_col (string) + 3.7. priority_col (string) + 3.8. attrs_col (string) + 3.9. force_dst (int) + 3.10. flags (int) + 3.11. use_default (int) + 3.12. xavp_dst (str) + 3.13. xavp_dst_mode (int) + 3.14. xavp_ctx (str) + 3.15. xavp_ctx_mode (int) + 3.16. hash_pvar (str) + 3.17. setid_pvname (str) + 3.18. attrs_pvname (str) + 3.19. ds_ping_method (string) + 3.20. ds_ping_from (string) + 3.21. ds_ping_interval (int) + 3.22. ds_probing_threshold (int) + 3.23. ds_inactive_threshold (int) + 3.24. ds_ping_reply_codes (string) + 3.25. ds_probing_mode (int) + 3.26. ds_ping_latency_stats (int) + 3.27. ds_latency_estimator_alpha (int) + 3.28. ds_hash_size (int) + 3.29. ds_hash_expire (int) + 3.30. ds_hash_initexpire (int) + 3.31. ds_hash_check_interval (int) + 3.32. outbound_proxy (str) + 3.33. ds_default_socket (str) + 3.34. ds_default_sockname (str) + 3.35. ds_timer_mode (int) + 3.36. event_callback (str) + 3.37. ds_attrs_none (int) + 3.38. ds_db_extra_attrs (str) + 3.39. ds_load_mode (int) + 3.40. reload_delta (int) + +3.1. list_file (string) + + Path to the file with destination sets (destination groups). + + Default value is “/etc/kamailio/dispatcher.list” or + “/usr/local/etc/kamailio/dispatcher.list”. + + Example 1.1. Set the “list_file” parameter +... +modparam("dispatcher", "list_file", "/run/kamailio/dispatcher.list") +... + +3.2. db_url (string) + + If you want to load the list of gateways from the database you must set + this parameter. + + Default value is “NULL” (disable DB support). + + Example 1.2. Set “db_url” parameter +... +modparam("dispatcher", "db_url", "mysql://user:passwd@localhost/database") +... + +3.3. table_name (string) + + If you want to load the list of gateways from the database you must set + this parameter as the database name. + + Default value is “dispatcher”. + + Example 1.3. Set “table_name” parameter +... +modparam("dispatcher", "table_name", "my_dispatcher") +... + +3.4. setid_col (string) + + The column's name in the database storing the gateway's set (group) id. + + Default value is “setid”. + + Example 1.4. Set “setid_col” parameter +... +modparam("dispatcher", "setid_col", "groupid") +... + +3.5. destination_col (string) + + The column's name in the database storing the destination sip URI. + + Default value is “destination”. + + Example 1.5. Set “destination_col” parameter +... +modparam("dispatcher", "destination_col", "uri") +... + +3.6. flags_col (string) + + The column's name in the database storing the flags for the destination + URI. + + Default value is “flags”. + + Example 1.6. Set “flags_col” parameter +... +modparam("dispatcher", "flags_col", "dstflags") +... + +3.7. priority_col (string) + + The column's name in the database storing the priority for destination + URI. + + Default value is “priority”. + + Example 1.7. Set “priority_col” parameter +... +modparam("dispatcher", "priority_col", "dstpriority") +... + +3.8. attrs_col (string) + + The column's name in the database storing the attributes for + destination URI. + + Default value is “attrs”. + + Example 1.8. Set “attrs_col” parameter +... +modparam("dispatcher", "attrs_col", "dstattrs") +... + +3.9. force_dst (int) + + If set to 1, force overwriting of destination address (outbound proxy) + when that is already set. If set to 0, will return error when the + destination address is already set. + + Default value is “1”. + + Example 1.9. Set the “force_dst” parameter +... +modparam("dispatcher", "force_dst", 1) +... + +3.10. flags (int) + + Various flags that affect dispatcher's behaviour. The flags are defined + as a bitmask on an integer value. If flag 1 is set only the username + part of the URI will be used when computing an URI based hash. If no + flags are set the username, hostname and port will be used. The port is + used only if different from 5060 (normal sip URI) or 5061 (in the sips: + case). + + If flag 2 is set, then failover support is enabled. The functions + exported by the module will store the rest of addresses from the + destination set in XAPVs, and use these XAVPs to try next address if + the current-tried destination fails. + + Default value is “0”. + + Example 1.10. Set the “flags” parameter + ... + modparam("dispatcher", "flags", 3) + ... + +3.11. use_default (int) + + If the parameter is set to 1, the last address in destination set is + used as a final option to send the request to. For example, it is + useful when wanting to send the call to an announcement server saying: + "the gateways are full, try later". + + Default value is “0”. + + Example 1.11. Set the “use_default” parameter + ... + modparam("dispatcher", "use_default", 1) + ... + +3.12. xavp_dst (str) + + The name of the XAVP which will hold the list with addresses and + associated properties, in the order they have been selected by the + chosen algorithm. If use_default is 1, the values of last XAVP + correspond to the last address in destination set. In case of using + dispatcher.list file, you have to set the priority field for each + destination to ensure a particular order there. The first XAVP is the + current selected destination. All the other addresses from the + destination set will be added in the XAVP list to be able to implement + serial forking. + +Note + + You must set this parameter if you want to do load balancing fail over. + + Default value is “_dsdst_”. + + Example 1.12. Set the “xavp_dst” parameter + ... + modparam("dispatcher", "xavp_dst", "_dsdst_") + ... + +3.13. xavp_dst_mode (int) + + Control what fields are added to the XAVP specified by xavp_dst + parameter. + + The addeded fields are: + * grp - the set id (group id). + * uri - the URI address. + * sock - the socket pointer. + * socket - the socket string - it is added only if xavp_dst_mode has + bit 2 set (value 2). + * sockname - the sockname string - it is added only if xavp_dst_mode + has bit 3 set (value 3). + * dstid - the destination unique id (in case of call load + distribution algorithm). + * attrs - the attributes - they are added if xavp_dst_mode does not + have the bit 1 set (value 1). + + Default value is “0” (add all fields). + + Example 1.13. Set the “xavp_dst_mode” parameter +... + modparam("dispatcher", "xavp_dst_mode", 1) +... + modparam("dispatcher", "xavp_dst_mode", 2) +... + +3.14. xavp_ctx (str) + + The name of the XAVP which will hold some attributes specific to + dispatcher routing context. The XAVP can hold the next fields: cnt - + the number of addresses selected for routing. + + Default value is “_dsctx_”. + + Example 1.14. Set the “xavp_ctx” parameter + ... + modparam("dispatcher", "xavp_ctx", "_dsctx_") + ... + +3.15. xavp_ctx_mode (int) + + Control what fields are added to the XAVP specified by xavp_ctx + parameter. The cnt field is added if xavp_cnt_mode does not have the + bit 1 set. + + Default value is “0” (add all fields). + + Example 1.15. Set the “xavp_ctx_mode” parameter + ... + modparam("dispatcher", "xavp_ctx_mode", 1) + ... + +3.16. hash_pvar (str) + + String with PVs used for the hashing algorithm 7. + +Note + + You must set this parameter if you want do hashing over custom message + parts. + + Default value is “null” - disabled. + + Example 1.16. Use $avp(hash) for hashing: + ... + modparam("dispatcher", "hash_pvar", "$avp(hash)") + ... + + Example 1.17. Use combination of PVs for hashing: + ... + modparam("dispatcher", "hash_pvar", "hash the $fU@$ci") + ... + +3.17. setid_pvname (str) + + The name of the PV where to store the set ID (group ID) when calling + ds_is_from_list() with no parameter. + + Default value is “null” - don't set PV. + + Example 1.18. Set the “setid_pvname” parameter + ... + modparam("dispatcher", "setid_pvname", "$var(setid)") + ... + +3.18. attrs_pvname (str) + + The name of the PV where to store the attributes of matching address + when calling ds_is_from_list(). + + Default value is “null” - don't set PV. + + Example 1.19. Set the “attrs_pvname” parameter + ... + modparam("dispatcher", "attrs_pvname", "$var(attrs)") + ... + +3.19. ds_ping_method (string) + + With this method you can define, with which method you want to probe + the gateways. Pinging gateways feature depends on ds_ping_interval + parameter. + + Default value is “OPTIONS”. + + Example 1.20. Set the “ds_ping_method” parameter + ... + modparam("dispatcher", "ds_ping_method", "INFO") + ... + +3.20. ds_ping_from (string) + + With this Method you can define the "From:"-Line for the request, sent + to the failed gateways. This method is only available, if compiled with + the probing of failed gateways enabled. + + Default value is “sip:dispatcher@localhost”. + + Example 1.21. Set the “ds_ping_from” parameter + ... + modparam("dispatcher", "ds_ping_from", "sip:proxy@sip.somehost.com") + ... + +3.21. ds_ping_interval (int) + + With this parameter you can define the interval for sending a request + to a gateway marked as inactive upon a failed request routing to it. + This parameter is only used, when the TM-Module is loaded. If set to + “0”, the pinging of inactive gateway is disabled. + + Default value is “0”. + + Example 1.22. Set the “ds_ping_interval” parameter + ... + modparam("dispatcher", "ds_ping_interval", 30) + ... + +3.22. ds_probing_threshold (int) + + If you want to set a gateway into inactive mode, there can be a + specific number of failed requests until it will change from "active" + to "inactive". It is using the state "trying", that allows selection of + gateway but indicates there was a failure previously with the gateway. + The number of attempts can be set with this parameter. This parameter + can be modified via ser config framework. + + Default value is “1” (set inactive with first failure). + + Example 1.23. Set the “ds_probing_threshold” parameter + ... + modparam("dispatcher", "ds_probing_threshold", 10) + ... + +3.23. ds_inactive_threshold (int) + + If you want to set a gateway into active mode (after being inactive), + there can be a specific number of successful requests until it will + change from "inactive" to "active". The number of attempts can be set + with this parameter. This parameter can be modified via ser config + framework. + + Default value is “1” (set active with first success). + + Example 1.24. Set the “ds_inactive_threshold” parameter + ... + modparam("dispatcher", "ds_inactive_threshold", 10) + ... + +3.24. ds_ping_reply_codes (string) + + This parameter defines the valid response codes, which are accepted as + a valid reply to the PING-Method. It is a list separated by colons, + where you may define either a single code (e.g. "code=202" would accept + 202 as an additional, valid response) or a class of responses, you want + to accept (e.g. "class=2" would accept everything from 200 to 299 as + valid response). This parameter can be modified via config framework. + + Please note that the response codes the module accepts as valid reply + to the PING-Method are not only the ones generated from the remote + servers, but also those that are generated locally. E.g.: setting + code=408 or class=400 will never set a backend down even if it is, + because internally the Kamailio transaction layer generates a 408 in + the case of no response from the remote server, and this internal code + 408 is accepted as valid value. + + Default value is “” (only 200 OK is accepted). + + Example 1.25. Set the “ds_ping_reply_codes” parameter + ... + modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=403;code=488;class= +3") + ... + +3.25. ds_probing_mode (int) + + Controls what gateways are tested to see if they are reachable. + * Value 0: If set to 0, only the gateways with state PROBING are + tested. After a gateway is probed, the PROBING state is cleared in + this mode. This means that no probing will be executed at all only + if flag in config file is set to 8/PROBING (please check + destination list file syntaxis for more details), it will probe + only one time at startup or after dispatcher reload. + * Value 1: If set to 1, all gateways are tested. If set to 1 and + there is a failure of keepalive to an active gateway, then it is + set to TRYING state. This means that probing will be executed all + the time, but you can skip some servers with flag 4 in destination + list file, for example. + * Value 2: if set to 2, only gateways in INACTIVE state with PROBING + mode set are tested. + * Value 3: If set to 3, any gateway with state PROBING is continually + probed without modifying/removing the PROBING state. This allows + selected gateways to be probed continually, regardless of state + changes. + + Default value is “0”. + + Example 1.26. Set the “ds_probing_mode” parameter + ... + modparam("dispatcher", "ds_probing_mode", 1) + ... + +3.26. ds_ping_latency_stats (int) + + Enable latency measurement when pinging nodes + * If set to 0, disable latency measurement. + * If set to 1, enable latency measurement. + + Default value is “0”. + + Example 1.27. accessing the metrics +# using the command : +kamcmd dispatcher.list + ... +DEST: { + URI: sip:1.2.3.4 + FLAGS: AX + PRIORITY: 9 + LATENCY: { + AVG: 24.250000 # weighted moving average for the last few weeks + STD: 1.035000 # standard deviation of AVG + EST: 25.000000 # short term estimate, see parameter: ds_latency_ +estimator_alpha + MAX: 26 # maximum value seen + TIMEOUT: 0 # count of ping timeouts + } +} + ... + + Example 1.28. Set the “ds_ping_latency_stats” parameter + ... + modparam("dispatcher", "ds_ping_latency_stats", 1) + ... + +3.27. ds_latency_estimator_alpha (int) + + The value to be used to control the memory of the estimator EWMA + "exponential weighted moving average" or "the speed at which the older + samples are dampened" a good explanation can be found here : + http://www.itl.nist.gov/div898/handbook/pmc/section3/pmc324.htm Because + Kamailio doesn't support float parameter types, the value in the + parameter is divided by 1000 and stored as float. For example, if you + want to set the alpha to be 0.75, use value 750 here. + + Default value is “900 => 0.9”. + + Example 1.29. Set the “ds_hash_size” parameter + ... + modparam("dispatcher", "ds_latency_estimator_alpha", 900) + ... + +3.28. ds_hash_size (int) + + The value to be used as power of two to set the number of slots to hash + table storing data for call load dispatching (e.g., value 8 will create + a hash table with 256 slots). It must be greater than 0 to enable call + load dispatching feature (alg 10). + + Default value is “0”. + + Example 1.30. Set the “ds_hash_size” parameter + ... + modparam("dispatcher", "ds_hash_size", 9) + ... + +3.29. ds_hash_expire (int) + + Expiration time in seconds to remove the load on a destination if no + BYE was received meanwhile. + + Default value is “7200”. + + Example 1.31. Set the “ds_hash_expire” parameter + ... + modparam("dispatcher", "ds_hash_expire", 3600) + ... + +3.30. ds_hash_initexpire (int) + + Expiration time in seconds to remove the load on a destination if no + 200 for INVITE was received meanwhile and state updated with + ds_load_update(). + + Default value is “7200”. + + Example 1.32. Set the “ds_hash_initexpire” parameter + ... + modparam("dispatcher", "ds_hash_initexpire", 60) + ... + +3.31. ds_hash_check_interval (int) + + Time interval in seconds to scan internal hash table with call load + dispatching data for expired items. + + Default value is “30”. + + Example 1.33. Set the “ds_hash_check_interval” parameter + ... + modparam("dispatcher", "ds_hash_check_interval", 60) + ... + +3.32. outbound_proxy (str) + + SIP URI of outbound proxy to be used when sending pings. + + By default no outbound proxy is defined. + + Example 1.34. Set the “outbound_proxy” parameter + ... + modparam("dispatcher", "outbound_proxy", "sip:outbound.example.com") + ... + +3.33. ds_default_socket (str) + + Default socket to be used for sending pings and dispatching requests + when a gateway has no send socket configured. + + By default no default socket is defined, the first configuration script + listen directive is used. + + If parameter "ds_default_sockname" is set, then this parameter is + ignored. + + Example 1.35. Set the “ds_default_socket” parameter + ... + modparam("dispatcher", "ds_default_socket", "udp:192.168.0.125:5060") + ... + +3.34. ds_default_sockname (str) + + Default socket name to be used for sending pings and dispatching + requests when a gateway has no send socket configured. + + By default no default socket is defined, the first configuration script + listen directive is used. + + This parameter is used even if "ds_default_socket" parameter is set + (this parameter has higher priority). + + Example 1.36. Set the “ds_default_sockname” parameter + ... + listen=udp:1.2.3.4:5060 name "sock1" + ... + modparam("dispatcher", "ds_default_sockname", "sock1") + ... + +3.35. ds_timer_mode (int) + + Specify the timer process to be used by the module for keepalives and + active dialogs tracking. + + It can be set to: + * 0 - use main timer process. + * 1 - use secondary timer process. + + On a server with a lot of traffic, using secondary timer can help with + performances, because the main timer can be overloaded by taking care + of transactions retransmissions and expirations of items in memory. + + Default value is “0”. + + Example 1.37. Set the “ds_timer_mode” parameter + ... + modparam("dispatcher", "ds_timer_mode", 1) + ... + +3.36. event_callback (str) + + The name of the function in the kemi configuration file (embedded + scripting language such as Lua, Python, ...) to be executed instead of + event_route[...] blocks. + + The function receives a string parameter with the name of the event, + the values are: 'dispatcher:dst-down', 'dispatcher:dst-up'. + + Default value is 'empty' (no function is executed for events). + + Example 1.38. Set event_callback parameter +... +modparam("dispatcher", "event_callback", "ksr_dispatcher_event") +... +-- event callback function implemented in Lua +function ksr_dispatcher_event(evname) + KSR.info("===== dispatcher module triggered event: " .. evname .. "\n"); + return 1; +end +... + +3.37. ds_attrs_none (int) + + If set to 1, "none=yes" is set in the attrs for those records that have + no attrs value, to ensure that corresponding XAVP fields for records do + not get mixed up. + + Default value is “0”. + + Example 1.39. Set the “ds_attrs_none” parameter + ... + modparam("dispatcher", "ds_attrs_none", 1) + ... + +3.38. ds_db_extra_attrs (str) + + Set a list of column names to be loaded from database dispatcher table + and be concatenated to 'attrs' field. The format is: + 'aname1=cname1;aname2=cname2;...;anameN=cnameN'. + + The 'anameX' is the attribute name and 'cnameX' is column name. The + additional columns must be added to database dispatcher table and their + type must be VARCHAR (string). + + Default value is “empty”. + + Example 1.40. Set the “ds_db_extra_attrs” parameter +... +modparam("dispatcher", "ds_db_extra_attrs", "socket=socket;pref=prefix") +... + +3.39. ds_load_mode (int) + + If set to 1, the module throws error when failing to add a destination + address (e.g., invalid URI). If set to 0, it skips the failing address + and continues with the next ones. + + Default value is “0”. + + Example 1.41. Set the “ds_load_mode” parameter + ... + modparam("dispatcher", "ds_load_mode", 1) + ... + +3.40. reload_delta (int) + + The number of seconds that have to be waited before executing a new + reload of dispatcher records. By default there is a rate limiting of + maximum one reload in five seconds. + + If set to 0, no rate limit is configured. Note carefully: use this + configuration only in tests environments because executing many RPC + reload commands at the same time can cause unexpected behavior. + + Default value is “5”. + + Example 1.42. Set reload_delta parameter +... +modparam("dispatcher", "reload_delta", 1) +... + +4. Functions + + 4.1. ds_select_dst(set, alg[, limit]) + 4.2. ds_select_domain(set, alg[, limit]) + 4.3. ds_select(set, alg [, limit]) + 4.4. ds_select_routes(rules, mode [, limit]) + 4.5. ds_next_dst() + 4.6. ds_next_domain() + 4.7. ds_set_dst() + 4.8. ds_set_domain() + 4.9. ds_mark_dst([state]) + 4.10. ds_list_exists(groupid) + 4.11. ds_is_from_list([groupid [, mode [, uri] ] ]) + 4.12. ds_load_update() + 4.13. ds_load_unset() + 4.14. ds_reload() + +4.1. ds_select_dst(set, alg[, limit]) + + The method selects a destination from addresses set. It returns true if + a new destination is set. The selected address is set to dst_uri field + (aka the outbound proxy address or the $du variable), not being visible + in the SIP request. + + If the bit 2 in 'flags' parameter is set, the rest of the addresses + from the destination set are stored in XAVP list (limited with an + optional 'limit' parameter). You can use 'ds_next_dst()' to use next + address in order to achieve serial forking to all possible + destinations. + + Meaning of the parameters is as follows: + * set - the id of the set from where to pick up destination address. + It is the first column in destination list file. The parameter can + be an integer or a variable holding an integer. + * alg - the algorithm used to select the destination address. The + parameter can be an integer or a variable holding an integer. + + “0” - hash over callid + + “1” - hash over from URI. + + “2” - hash over to URI. + + “3” - hash over request-URI. + + “4” - round-robin (next destination). + + “5” - hash over authorization-username (Proxy-Authorization or + "normal" authorization). If no username is found, round robin + is used. + + “6” - random destination (using rand()). + + “7” - hash over the content of PVs string. Note: This works + only when the parameter hash_pvar is set. + + “8” - select destination sorted by priority attribute value + (serial forking ordered by priority). + + “9” - use weight based load distribution. You have to set the + attribute 'weight' for each address (gateway) in destination + set. For more see the description of the 'weight' attribute in + the 'Special Attributes' section. + + “10” - use call load distribution. You have to set the + attribute 'duid' (as an unique string id) per each address in + destination set. Also, you must set the parameter + 'ds_hash_size'. + The algorithm can be used even with stateless proxy mode, + there is no SIP dialog tracking depending on other modules, + just an internal lightweight call tracking by Call-Id, thus is + fast and suitable even for embedded systems. + The first destination selected by this algorithm is the one + that has the least number of calls associated. The rest of the + destination list is taken in order of the entries in set - + anyhow, until a re-route to next destination happens, the load + on each address can change. + This algorithm can be used only for dispatching INVITE + requests as it is the only SIP method creating a SIP call. + + “11” - use relative weight based load distribution. You have + to set the attribute 'rweight' per each address in destination + set. Active host usage probability is rweight/(SUM of all + active host rweights in destination group). + The major difference from the weight distribution is the + probability recalculation according to rweight value in case + of host enabling/disabling + For example, 100 calls in 3-hosts group with rweight params + 1/2/1 will be distributed as 25/50/25. After third host + failing distribution will be changed to 33/67/0. + Using this algorithm, you can also enable congestion control + by setting the attibute 'cc=1', when 'cc' is enabled the + 'rweight' attribute will also be used to control congestion + tolerance. When facing congestion the weight of a gateway is + lowered by 1 for every ms of estimated congestion, a 'rweight' + value of 50 is recommended. See the example "configuring load + balancing with congestion detection" below. + The congestion estimation is done using an EWMA (see + ds_latency_estimator_alpha). If all the gateways in a set are + above their congestion threshold(weight), the load + distribution is instead done using the ratio of estimated + congestion ms. + + “12” - dispatch to all destination in setid at once (parallel + forking). Note that the XAVPs are no longer set with the + values of the destination records, no re-routing making sense + in this case. + + “X” - if the algorithm is not implemented, the first entry in + set is chosen. + * limit - the maximum number of items to be stored in XAVP list for + further fail-overs (the first selected destination and default + destination are the first to be put in the list) + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + + Example 1.43. ds_select_dst usage +... +ds_select_dst("1", "0"); +... +$var(a) = 4; +ds_select_dst("1", "$var(a)"); +... +ds_select_dst("1", "4", "3"); +... + + Example 1.44. configuring load balancing with congestion detection +... +# sample of SQL provisionning statements +INSERT INTO "dispatcher" +VALUES(1,1,'sip:192.168.0.1:5060',0,12,'rweight=50;weight=50;cc=1;',''); +INSERT INTO "dispatcher" +VALUES(2,1,'sip:192.168.0.2:5060',0,12,'rweight=50;weight=50;cc=1;',''); +... +modparam("dispatcher", "ds_ping_interval", 1) # ping gateways once/second +modparam("dispatcher", "ds_ping_latency_stats", 1) # update congestion metrics +# configure the latency estimator +modparam("dispatcher", "ds_latency_estimator_alpha", 900) +... +if (!ds_select_dst("1", "11")) { # use relative weight based load distribution +... +# sample of output from 'kamcmd dispatcher.list' +DEST: { + URI: sip:192.168.0.1:5060 + FLAGS: AP + PRIORITY: 12 + ATTRS: { + BODY: rweight=50;weight=50;cc=1 # configuration values + DUID: + MAXLOAD: 0 + WEIGHT: 50 + RWEIGHT: 50 + SOCKET: + SOCKNAME: + OBPROXY: + } + LATENCY: { + AVG: 20.104000 + STD: 1.273000 + # estimated congestion is currently 25ms = 45ms(EST) -20ms(AVG) + EST: 45.005000 + MAX: 132 + TIMEOUT: 3 + } +} +... + +4.2. ds_select_domain(set, alg[, limit]) + + The method selects a destination from addresses set and rewrites the + host and port from R-URI. The parameters have same meaning as for + ds_select_dst(). + + If the bit 2 in 'flags' is set, the rest of the addresses from the + destination set are stored in XAVP list (limited with an optional + 'limit' parameter). You can use 'ds_next_domain()' to use next address + to achieve serial forking to all possible destinations. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + + Example 1.45. ds_select_domain usage +... +$var(a) = 4; +if(ds_select_domain("1", "$var(a)")) { + t_relay(); + exit; +} +... + +4.3. ds_select(set, alg [, limit]) + + The method selects a destination from addresses set and adds it in the + XAVP specified for this module. It is not updating R-URI nor the + destination URI. The parameters have same meaning as for + ds_select_dst(). + + If the bit 2 in 'flags' is set, the rest of the addresses from the + destination set are stored in XAVP list (limited with an optional + 'limit' parameter). You can execute 'ds_next_domain()' or + 'ds_next_dst()' to use next address to achieve serial forking to all + possible destinations. + + This function can be used from ANY_ROUTE. + + Example 1.46. ds_select usage +... +$var(a) = 4; +if(ds_select("1", "$var(a)")) { + ds_next_domain(); + t_relay(); + exit; +} +... + +4.4. ds_select_routes(rules, mode [, limit]) + + The method selects destinations following the rules combining groups + add algorithms, controlling where the first destination address is + pushed, and optionally setting a limit of selected addresses. + + Parameters: + * rules - a string in the format "grp1=alg1;grp2=alg2;...grpN=algN", + where grpX is an integer number identifying a dispatcher set id and + algN is a dispatcher algorithm identifier. No white spaces should + be given in the parameter value. The parameter can contain + pseudo-variables. + * mode - control where to push the first selected target address. + Valid values are: '0', 'd' or 'D' to push the address in + destination URI; '1', 'r' or 'R' to push the address in R-URI; '2', + 'x' or 'X' to push the address only in the XAVP when failure + rerouting is enabled. Note that only first character of the + parameter matters, therefore one can use a more meaningful value + such as 'ruri' instead of 'r'. The parameter can contain pseudo + variables. + * limit - a positive integer value to restrict the number of selected + target addresses. If it is 0, then no limit is considered. The + parameter can be a static integer or a variable holding an integer + value. + + If the bit 2 in 'flags' is set, the rest of the addresses from the + destination groups are stored in XAVP list (limited with an optional + 'limit' parameter). You can execute 'ds_next_domain()' or + 'ds_next_dst()' to use next address to achieve serial forking to all + possible destinations. + + This function can be used from ANY_ROUTE. + + Example 1.47. ds_select_routes usage +... +$var(alg) = 4; +$var(limit) = 8; +if(ds_select_routes("1=4;2=$var(alg)", "ruri", "$var(limit)")) { + t_on_failure("REROUTE"); + t_relay(); + exit; +} +failure_route[REROUTE] { + if(t_check_status("408|5[0-9][0-9]")) { + if(ds_next_domain()) { + t_on_failure("REROUTE"); + t_relay(); + exit; + } + } +} +... + +4.5. ds_next_dst() + + Takes the next destination address from the corresponding XAVPs and + sets the dst_uri (outbound proxy address). + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + +4.6. ds_next_domain() + + Takes the next destination address from the corresponding XAVPs and + sets the domain part of the request URI. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + +4.7. ds_set_dst() + + Takes the current destination address from the corresponding XAVPs and + sets the dst_uri (outbound proxy address). + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + +4.8. ds_set_domain() + + Takes the current destination address from the corresponding XAVPs and + sets the domain part of the request URI. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + +4.9. ds_mark_dst([state]) + + Mark the last used address from destination set as inactive ("i"/"I"), + active ("a"/"A"), disabled ("d"/"D") or trying ("t"/"T"). Apart of + disabled state, a destination can be set in probing mode by adding + ("p"/"P") flag. With this function, an automatic detection of failed + gateways can be implemented. When an address is marked as inactive or + disabled, it will be ignored by 'ds_select_dst' and 'ds_select_domain'. + + The parameter state is optional, when it is missing, then the + destination will be marked inactive (i.e., same as 'i'). + + Possible values for state parameter: + * "a" or "A" - the last destination should be set to active and the + error-counter should set to "0". + * "i" or "I" - the last destination should be set to inactive and + will be ignored in future requests. + * "t" or "T" - the last destination should be set to temporary trying + state and failure counter is incremented. When the failure counter + reaches the threshold, the destination will be set inactive. + * "p" and "P" - this has to be used in addition to one of the + previous flags - the last destination will be set to probing. This + mean the destination will be pinged with SIP OPTIONS requests from + time to time to detect if it is up or down. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE. + + Example 1.48. ds_mark_dst usage +... +failure_route[tryagain] { +... + if(t_check_status("500")) + ds_mark_dst("ip"); # set to inactive and probing +... +} +... + +4.10. ds_list_exists(groupid) + + Function alias: ds_list_exist(groupid) + + Check if a specific group is defined in dispatcher list or database. + * groupid - A group ID to check. + + It returns true (value 1) if the group exists, or otherwise false (-1 + when the group is not found; -2 when evaluating the parameter fails). + + This function can be used from ANY_ROUTE. + + Example 1.49. ds_list_exists usage +... +if(ds_list_exists("10")) { + ... +} +... + +4.11. ds_is_from_list([groupid [, mode [, uri] ] ]) + + This function returns true, if there is a match of source address or + uri with an address in the given group of the dispatcher-list; + otherwise false. + + Description of parameters: + * groupid (optional) - if not given or its value is -1, the matching + will be done over all addresses in all dispatcher groups. Otherwise + the matching will be done only against the addresses in the + specific group id. The parameter can be an integer or a variable + holding an integer value. + * mode - (optional) - a bitmask to specify how the matching should be + done. If parameter is 0, all ip, port and proto are matched and + active status is ignored. If bit one is set, then port is ignored. + If bit two is set, then protocol is ignored. If bit three is set, + then state must be active. The parameter can be an integer or a + variable holding an integer value. It must be provided if the uri + parameter is provided. + * uri (optional) - if parameter is empty or missing, the matching is + done against source IP, port and protocol. Otherwise the value has + to be a valid SIP URI, used to match against addresses in the + dispatcher list. Only IP, port and protocol are matches, any + additional parameters are ignored. The parameter can be a static or + dynamic (with variables) string. The domain part of the URI can be + an IP address or a hostname. + + Upon a match, the variable specified by 'setid_pvname' parameter will + be set to groupid of matching address and the attributes will be set in + variable specified by 'attrs_pvname'. + + Note that for backward compatibility mode, when no parameter is given + or only groupid is given, the matching is done only for IP address and + port (protocol is ignored). + + This function can be used from ANY_ROUTE. + + Example 1.50. ds_is_from_list usage +... +if(ds_is_from_list()) { + ... +} +if(ds_is_from_list("10")) { + ... +} +if(ds_is_from_list("10", "3")) { + ... +} +if(ds_is_from_list("10", "3", "sip:127.0.0.1:5080")) { + ... +} +... + +4.12. ds_load_update() + + Updates the load state: + * if it is a BYE or CANCEL - remove the load from destination address + used to forward the INVITE + * if it is a reply to INVITE - set internal state to confirmed for + call load structure when reply code is 2xx. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, + BRANCH_ROUTE and ONREPLY_ROUTE. + +4.13. ds_load_unset() + + Remove the call load for the destination that routed the call. + + This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, + BRANCH_ROUTE and ONREPLY_ROUTE. + + Example 1.51. ds_load_unset usage +... +route { + ... + if(is_method("BYE|CANCEL")) + ds_load_update(); + ... + ds_select_dst("1", "10"); + ... +} + +onreply_route { + ... + if(is_method("INVITE") + { + if(status=~"2[0-9][0-9]") + ds_load_update(); + else if(status=~"[3-7][0-9][0-9]") + ds_load_unset(); + } + ... +} +... + +4.14. ds_reload() + + Reloads the groups and included destinations. + + Name: ds_reload + + Parameters: none + + This function can be used from ANY_ROUTE. + +5. RPC Commands + + 5.1. dispatcher.set_state + 5.2. dispatcher.set_duid_state + 5.3. dispatcher.list + 5.4. dispatcher.reload + 5.5. dispatcher.ping_active + 5.6. dispatcher.add + 5.7. dispatcher.remove + 5.8. dispatcher.hash + +5.1. dispatcher.set_state + + Sets the state for a destination address (can be use to mark the + destination as active or inactive). + + Name: dispatcher.set_state + + Parameters: + * _state_ : state of the destination address + + “a”: active + + “i”: inactive + + “t”: trying + + “d”: disabled + The states “a”, “i” or “t” can be followed by “p” to set probing + mode (e.g. 'ap', 'ip' or 'tp'). + * _group_: destination group id + * _address_: address of the destination in the _group_ or 'all' to + update all destinations in the group + + Example: +... +# prototype: kamcmd dispatcher.set_state _state_ _group_ _address_ +kamcmd dispatcher.set_state ip 2 sip:127.0.0.1:5080 +kamcmd dispatcher.set_state ip 3 all +... + +5.2. dispatcher.set_duid_state + + Sets the state for a destination by matching on 'duid' attribute. The + parameters first two parameter 'state' and 'group' are the same like + for RPC command 'dispatcher.set_state'. The third parameter 'duid' is + the value to be matched against the 'duid' attribute of dispatcher + destinations. + + Example: +... +# prototype: kamcmd dispatcher.set_duid_state _state_ _group_ _duid_ +kamcmd dispatcher.set_duid_state ip 2 xyz +... + +5.3. dispatcher.list + + Lists the groups and included destinations. + + Name: dispatcher.list + + Parameters: none + + Example: + kamcmd dispatcher.list + ... +DEST: { + URI: sip:192.168.0.1:5060 + FLAGS: AP + PRIORITY: 12 +} + ... + + FLAGS consist out of 2 letters. First letter describe status of + destination: A-active, I – inactive, T – trying, D – disabled. + Second letter might be P or X. P is for probing, so AP means + destination is active and it is tested by SIP options continuously. X + means that there are no probing or sip pinging. So AX means that + destination is assumed as active and it is not tested by SIP options. + DX respectively is disabled destination that is not tested, etc. + +5.4. dispatcher.reload + + Reloads the groups and included destinations. The command is disabled + for call load based dispatching (algorithm 10) since removal of + destinations may leave the list of active calls with broken references. + + Name: dispatcher.reload + + Parameters: none + + Example + kamcmd dispatcher.reload + +5.5. dispatcher.ping_active + + Sets the global state for sending keepalive requests to destinations. + + Name: dispatcher.ping_active + + Parameters: + * _state_ : state of sending keepalives + + “0”: inactive (don't send) + + “1”: active (send) + + If the state parameter is missing, the current state is returned. When + state is changed, new and old values of the state are returned. Default + value for state is 1. + + Example: +... +# prototype: kamcmd dispatcher.ping_active _state_ +kamcmd dispatcher.ping_active 0 +... + +5.6. dispatcher.add + + Add a destination address to the in-memory dispatcher list. Reloading + the dispatcher will remove any destinations that are only added to the + in-memory dispatcher list. + + Name: dispatcher.add + + Parameters: + * _group_: destination group id + * _address_: address of the destination in the _group_ + * _flags_ (optional): as described in the list file format, default 0 + + Example: +... +# prototype: kamcmd dispatcher.add _group_ _address_ _flags_ +kamcmd dispatcher.add 2 sip:127.0.0.1:5080 +kamcmd dispatcher.add 3 sip:127.0.0.1:5075 8 +... + +5.7. dispatcher.remove + + Remove a destination address from the in-memory dispatcher list. + Reloading the dispatcher from file or database will re-add destinations + that are removed using this command. + + This command will remove all entries that match the group and address. + + Name: dispatcher.remove + + Parameters: + * _group_: destination group id + * _address_: address of the destination in the _group_ + + Example: +... +# prototype: kamcmd dispatcher.remove _group_ _address_ +kamcmd dispatcher.remove 2 sip:127.0.0.1:5080 +kamcmd dispatcher.remove 3 sip:127.0.0.1:5075;transport=udp +... + +5.8. dispatcher.hash + + Compute the hash id corresponding to the string parameter values. + + Return the hash id and the corresponding slot, if 'nslots' parameter is + not 0. + + Name: dispatcher.hash + + Parameters: + * _nslots_: number of slots + * _val1_: string value + * _val2_: (optional) string value + + It can be useful to find what address in a destination group (setid) is + going to be used when hashing a value or a URI. For a URI, the + corresponding username and domain have to be provided as _val1_ and + _val2_. If the URI has a port different than 5060 (or 5061 for TLS), + then the _val2_ has to be 'domain:port'. The _nslots_ has to be the + number of addresses in the group (setid). The returned 'slot' value + represents the index of the address to be used for routing. + + Example: +... +# prototype: kamctl rpc dispatcher.hash _nslots_ _val1_ [_val2_] +kamctl rpc dispatcher.hash 0 alice server.com +kamctl rpc dispatcher.hash 4 bob server.com +... + +6. Installation and Running + + 6.1. Destination List File + + 6.1.1. Special Attributes + 6.1.2. File Format + + 6.2. Kamailio config file + +6.1. Destination List File + + Each destination point must be on one line. First token is the set id + (an integer value, also referenced by group id), followed by + destination address (string value in full SIP URI format). + + Optionally, these fields can be followed by: + * flags - control the mode of using the destination address and + sending keepalives. It is a bitwise value that can be built using + the following flags: + + 1 (bit at index 0 - 1 <<0) - inactive destination + + 2 (bit at index 1 - 1 <<1) - temporary trying destination (in + the way to become inactive if it does not reply to keepalives + - there is a module parameter to set the threshold of + failures) + + 4 (bit at index 2 - 1 <<2) - admin disabled destination + + 8 (bit at index 3 - 1 <<3) - probing destination (sending keep + alives); + + 16 (bit at index 4 - 1 <<4) - skip DNS A/AAAA resolve at + startup, useful when the hostname of the destination address + is a NAPTR or SRV record only. Such addresses cannot be + matched anymore with ds_is_from_list(...). + * priority: sets the priority in destination list (based on it is + done the initial ordering inside the set) + * attributes: extra fields in form of name1=value1;...;nameN=valueN. + +6.1.1. Special Attributes + + There are some predefined names: + * 'duid' - used for call load dispatching. It must be an unique value + to identify a destination (gateway address). Practically the load + within the group is associated with this value. + * 'maxload' - used for call load dispatching. It must be a positive + integer, defining the upper limit of active calls per destination. + When the limit is reached, then the gateway is no longer selected + for new calls until an exiting call via that gateway is terminated. + If set to 0, then no active call limit is used. + * 'weight' - used for weight based load distribution. It must be set + to a positive integer value beteen 0 and 100. The value represents + the percent of calls to be sent to that gateways. + * 'rweight' - used for relative weight based load distribution. It + must be set to a positive integer value between 1 and 100 + (otherwise host will be excluded from relative weight distribution + type). + * 'socket' - used to set the sending socket for the gateway. It is + used for sending the SIP traffic as well as OPTIONS keepalives. + * 'sockname' - used to set by name the sending socket for the + gateway. It is used for sending the SIP traffic as well as OPTIONS + keepalives and has priority over 'socket' attribute. + * 'ping_from' - used to set the From URI in OPTIONS keepalives. It + overwrites the general ds_ping_from parameter. + * 'obproxy' - SIP URI of outbound proxy to be used when sending + pings. It overwrites the general ds_outbound_proxy parameter. + +6.1.2. File Format + + Line format is: +... +setid(int) destination(sip uri) flags(int,opt) priority(int,opt) attrs(str,opt) +... + + Full line example: +... +1 sip:127.0.0.1:5080 0 0 duid=abc;socket=udp:192.168.0.125:5060;my=xyz;ping_from +=sip:myproxy.com +... + + For database, each element of a line resides in a different column. + Next is a dispatcher.list file example: + + Example 1.52. dispatcher list file +... +# +# dispatcher destination sets (groups) +# + +# line format +# setid(int) destination(sip uri) flags(int,opt) priority(int,opt) attributes(st +r,opt) + +# proxies +2 sip:127.0.0.1:5080;transport=tcp 0 10 class=4;prefix=448;strip=2 +2 sip:127.0.0.1:5082;px=vx 0 5 duid=abc;socket=udp:192.168.0.125:5060;pipe=p10 + +# gateways +1 sip:127.0.0.1:7070 0 0 duid=xyz;maxload=20 +1 sip:127.0.0.1:7072 0 5 +1 sip:127.0.0.1:7074 + +... + +6.2. Kamailio config file + + Next listing shows a sample config for using the dispatcher module. + + Example 1.53. Kamailio config script - sample dispatcher usage +... +#!KAMAILIO +# +# sample config file for dispatcher module +# - load balancing of VoIP calls with round robin +# - no TPC listening +# - don't dispatch REGISTER and presence requests +# +# Kamailio SIP Server +# - web: http://www.kamailio.org +# - git: http://github.com/kamailio/ +# +# Direct your questions about this file to: sr-users@lists.kamailio.org +# +# Refer to the Core CookBook at http://www.kamailio.org/dokuwiki/doku.php +# for an explanation of possible statements, functions and parameters. +# +# Several features can be enabled using '#!define WITH_FEATURE' directives: +# +# *** To run in debug mode: +# - define WITH_DEBUG +# + +#!ifndef DBURL +#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio" +#!endif + +# - flags +# FLT_ - per transaction (message) flags +# FLB_ - per branch flags +#!define FLT_ACC 1 +#!define FLT_ACCMISSED 2 +#!define FLT_ACCFAILED 3 + +####### Global Parameters ######### + +#!ifdef WITH_DEBUG +debug=4 +log_stderror=yes +#!else +debug=2 +log_stderror=no +#!endif + +memdbg=5 +memlog=5 + +log_facility=LOG_LOCAL0 + +fork=yes +children=4 + +/* comment the next line to enable TCP */ +disable_tcp=yes + +/* uncomment the next line to disable the auto discovery of local aliases + based on revers DNS on IPs (default on) */ +auto_aliases=no + +/* add local domain aliases */ +# alias="mysipserver.com" + +port=5060 + +/* uncomment and configure the following line if you want Kamailio to + bind on a specific interface/port/proto (default bind on all available) */ +# listen=udp:127.0.0.1:5060 + +sip_warning=no + +####### Modules Section ######## + +# set module path +#mpath="/usr/local/lib/kamailio/modules/" + +loadmodule "db_mysql.so" +loadmodule "jsonrpcs.so" +loadmodule "kex.so" +loadmodule "corex.so" +loadmodule "tm.so" +loadmodule "tmx.so" +loadmodule "sl.so" +loadmodule "rr.so" +loadmodule "pv.so" +loadmodule "maxfwd.so" +loadmodule "textops.so" +loadmodule "siputils.so" +loadmodule "xlog.so" +loadmodule "sanity.so" +loadmodule "ctl.so" +loadmodule "acc.so" +loadmodule "dispatcher.so" + + +# ----------------- setting module-specific parameters --------------- + + +# ----- jsonrpcs params ----- +modparam("jsonrpcs", "pretty_format", 1) + + +# ----- rr params ----- +# add value to ;lr param to cope with most of the UAs +modparam("rr", "enable_full_lr", 1) +# do not append from tag to the RR (no need for this script) +modparam("rr", "append_fromtag", 0) + + +# ----- acc params ----- +modparam("acc", "log_flag", FLT_ACC) +modparam("acc", "failed_transaction_flag", FLT_ACCFAILED) +modparam("acc", "log_extra", + "src_user=$fU;src_domain=$fd;dst_ouser=$tU;dst_user=$rU;dst_domain=$rd;s +rc_ip=$si") + +# ----- tm params ----- +modparam("tm", "fr_timer", 2000) +modparam("tm", "fr_inv_timer", 40000) + +# ----- dispatcher params ----- +modparam("dispatcher", "db_url", DBURL) +modparam("dispatcher", "table_name", "dispatcher") +modparam("dispatcher", "flags", 2) +modparam("dispatcher", "xavp_dst", "_dsdst_") +modparam("dispatcher", "xavp_ctx", "_dsctx_") +modparam("dispatcher", "ds_ping_from", "sip:proxy@kamailio.org") +modparam("dispatcher", "ds_ping_interval", 60) +modparam("dispatcher", "ds_probing_mode", 1) +modparam("dispatcher", "ds_timer_mode", 1) + +####### Routing Logic ######## + + +# main request routing logic + +request_route { + + # per request initial checks + route(REQINIT); + + # CANCEL processing + if (is_method("CANCEL")) { + if (t_check_trans()) { + route(RELAY); + } + exit; + } + + # handle retransmissions + if (!is_method("ACK")) { + if(t_precheck_trans()) { + t_check_trans(); + exit; + } + t_check_trans(); + } + + # handle requests within SIP dialogs + route(WITHINDLG); + + ### only initial requests (no To tag) + + # record routing for dialog forming requests (in case they are routed) + # - remove preloaded route headers + remove_hf("Route"); + if (is_method("INVITE|SUBSCRIBE")) { + record_route(); + } + + # account only INVITEs + if (is_method("INVITE")) { + setflag(FLT_ACC); # do accounting + } + + # handle presence related requests + route(PRESENCE); + + # handle registrations + route(REGISTRAR); + + if ($rU==$null) { + # request with no Username in RURI + sl_send_reply("484","Address Incomplete"); + exit; + } + + # dispatch destinations + route(DISPATCH); +} + + +route[RELAY] { + if (!t_relay()) { + sl_reply_error(); + } + exit; +} + +# Per SIP request initial checks +route[REQINIT] { + if (!mf_process_maxfwd_header("10")) { + sl_send_reply("483","Too Many Hops"); + exit; + } + + if(!sanity_check("1511", "7")) { + xlog("Malformed SIP message from $si:$sp\n"); + exit; + } +} + +# Handle requests within SIP dialogs +route[WITHINDLG] { + if (has_totag()) { + # sequential request withing a dialog should + # take the path determined by record-routing + if (loose_route()) { + if (is_method("BYE")) { + setflag(FLT_ACC); # do accounting ... + setflag(FLT_ACCFAILED); # ... even if the transa +ction fails + } + route(RELAY); + } else { + if (is_method("SUBSCRIBE") && uri == myself) { + # in-dialog subscribe requests + route(PRESENCE); + exit; + } + if ( is_method("ACK") ) { + if ( t_check_trans() ) { + # non loose-route, but stateful ACK; + # must be ACK after a 487 or e.g. 404 fr +om upstream server + t_relay(); + exit; + } else { + # ACK without matching transaction ... i +gnore and discard. + exit; + } + } + sl_send_reply("404","Not here"); + } + exit; + } +} + +# Handle SIP registrations +route[REGISTRAR] { + if(!is_method("REGISTER")) + return; + + sl_send_reply("404", "No registrar"); + exit; +} + +# Presence server route +route[PRESENCE] { + if(!is_method("PUBLISH|SUBSCRIBE")) + return; + + sl_send_reply("404", "Not here"); + exit; +} + +# Dispatch requests +route[DISPATCH] { + # round robin dispatching on gateways group '1' + if(!ds_select_dst("1", "4")) { + send_reply("404", "No destination"); + exit; + } + xdbg("--- SCRIPT: going to <$ru> via <$du> (attrs: $xavp(_dsdst_=>attrs) +)\n"); + t_on_failure("RTF_DISPATCH"); + route(RELAY); + exit; +} + +# Try next destionations in failure route +failure_route[RTF_DISPATCH] { + if (t_is_canceled()) { + exit; + } + # next DST - only for 500 or local timeout + if (t_check_status("500") + or (t_branch_timeout() and !t_branch_replied())) { + if(ds_next_dst()) { + xdbg("--- SCRIPT: retrying to <$ru> via <$du> (attrs: $x +avp(_dsdst_=>attrs))\n"); + t_on_failure("RTF_DISPATCH"); + route(RELAY); + exit; + } + } +} + +... + +7. Event routes + + 7.1. dispatcher:dst-down + 7.2. dispatcher:dst-up + +7.1. dispatcher:dst-down + + When defined, the module calls event_route[dispatcher:ds-down] when a + destination goes down (becomes probing). A typical use case is to + update NMC equipment as to the status of a destination. +... +event_route[dispatcher:dst-down] { + xlog("L_ERR", "Destination down: $rm $ru ($du)\n"); +} +... + +7.2. dispatcher:dst-up + + When defined, the module calls event_route[dispatcher:ds-up] when a + destination that was previously down (probing) comes up. A typical use + case is to update NMC equipment as to the status of a destination. +... +event_route[dispatcher:dst-up] { + xlog("L_ERR", "Destination up: $rm $ru\n"); +} +... + +Chapter 2. Frequently Asked Questions + + 2.1. Does dispatcher provide a fair distribution? + 2.2. Is dispatcher dialog stateful? + 2.3. Where can I find more about Kamailio? + 2.4. Where can I post a question about this module? + 2.5. How can I report a bug? + + 2.1. + + Does dispatcher provide a fair distribution? + + The algorithms doing hashing over parts of SIP message don't guarantee + a fair distribution. You should do some measurements to decide what + hashing algorithm fits better in your environment. + + Other distribution algorithms such as round robin or call load + dispatching do a fair distribution in terms of delivered calls to + gateways. + + 2.2. + + Is dispatcher dialog stateful? + + No. Dispatcher is stateless, although some distribution algorithms are + designed to select same destination for subsequent requests of the same + dialog (e.g., hashing the call-id). + + 2.3. + + Where can I find more about Kamailio? + + Take a look at https://www.kamailio.org/. + + 2.4. + + Where can I post a question about this module? + + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev + + E-mails regarding any stable version should be sent to + and e-mail regarding development versions + or GIT snapshots should be send to . + + 2.5. + + How can I report a bug? + + Please follow the guidelines provided at: + https://github.com/kamailio/kamailio/issues diff --git a/src/modules/dmq/README b/src/modules/dmq/README index d4ddcb8645a..c4c0dab8a00 100644 --- a/src/modules/dmq/README +++ b/src/modules/dmq/README @@ -14,8 +14,6 @@ Edited by Marius Ovidiu Bucur -Edited by - Charles Chance Copyright © 2011 Marius Bucur diff --git a/src/modules/domainpolicy/README b/src/modules/domainpolicy/README index a943e10b973..4afc20a0fe4 100644 --- a/src/modules/domainpolicy/README +++ b/src/modules/domainpolicy/README @@ -14,8 +14,6 @@ Otmar Lendl -Edited by - Klaus Darilion diff --git a/src/modules/geoip/README b/src/modules/geoip/README index 1ab9a0be06b..051fba60b40 100644 --- a/src/modules/geoip/README +++ b/src/modules/geoip/README @@ -10,8 +10,6 @@ Daniel-Constantin Mierla -Edited by - Alex Balashov Evariste Systems LLC diff --git a/src/modules/ims_dialog/README b/src/modules/ims_dialog/README index 4560f2569d9..ee1f8603540 100644 --- a/src/modules/ims_dialog/README +++ b/src/modules/ims_dialog/README @@ -20,16 +20,10 @@ Edited by Bogdan-Andrei Iancu -Edited by - Carsten Bock -Edited by - Jason Penton -Edited by - Richard Good Copyright © 2006 Voice Sistem SRL @@ -1053,46 +1047,46 @@ Chapter 3. Frequently Asked Questions 3.1. - What happened with “use_tight_match” parameter? + What happened with “use_tight_match” parameter? - The parameter was removed with version 1.3 as the option of tight - matching became mandatory and not configurable. Now, the tight matching - is done all the time (when using DID matching). + The parameter was removed with version 1.3 as the option of tight + matching became mandatory and not configurable. Now, the tight matching + is done all the time (when using DID matching). 3.2. - Why is there a ims_dialog module and a dialog module? + Why is there a ims_dialog module and a dialog module? - The ims_dialog module addresses shortcomings in the initial dialog - module design. It makes some large changes to the API and therefore - must be introduced slowly. It is currently in the early development - stages. Eventually the ims_dialog module should replace the dialog - module. + The ims_dialog module addresses shortcomings in the initial dialog + module design. It makes some large changes to the API and therefore + must be introduced slowly. It is currently in the early development + stages. Eventually the ims_dialog module should replace the dialog + module. 3.3. - Where can I find more about Kamailio? + Where can I find more about Kamailio? - Take a look at https://www.kamailio.org/. + Take a look at https://www.kamailio.org/. 3.4. - Where can I post a question about this module? + Where can I post a question about this module? - First at all check if your question was already answered on one of our - mailing lists: - * User Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users - * Developer Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev - E-mails regarding any stable Kamailio release should be sent to - and e-mails regarding development - versions should be sent to . + E-mails regarding any stable Kamailio release should be sent to + and e-mails regarding development + versions should be sent to . 3.5. - How can I report a bug? + How can I report a bug? - Please follow the guidelines provided at: - https://github.com/kamailio/kamailio/issues. + Please follow the guidelines provided at: + https://github.com/kamailio/kamailio/issues. diff --git a/src/modules/ims_usrloc_pcscf/README b/src/modules/ims_usrloc_pcscf/README index c33652c9e09..93efefc0765 100644 --- a/src/modules/ims_usrloc_pcscf/README +++ b/src/modules/ims_usrloc_pcscf/README @@ -10,8 +10,6 @@ Richard Good Smile Communications -Edited by - Carsten Bock ng-voice GmbH @@ -234,28 +232,28 @@ Chapter 2. Frequently Asked Questions 2.1. - Where can I find more about Kamailio? + Where can I find more about Kamailio? - Take a look at https://www.kamailio.org/. + Take a look at https://www.kamailio.org/. 2.2. - Where can I post a question about this module? + Where can I post a question about this module? - First at all check if your question was already answered on one of our - mailing lists: - * User Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users - * Developer Mailing List - - https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev - E-mails regarding any stable Kamailio release should be sent to - and e-mails regarding development - versions should be sent to . + E-mails regarding any stable Kamailio release should be sent to + and e-mails regarding development + versions should be sent to . 2.3. - How can I report a bug? + How can I report a bug? - Please follow the guidelines provided at: - https://github.com/kamailio/kamailio/issues. + Please follow the guidelines provided at: + https://github.com/kamailio/kamailio/issues. diff --git a/src/modules/jansson/README b/src/modules/jansson/README index b79a31ba826..a68d7f43f0c 100644 --- a/src/modules/jansson/README +++ b/src/modules/jansson/README @@ -10,8 +10,6 @@ Matthew Williams -Edited by - Carsten Bock diff --git a/src/modules/kemix/README b/src/modules/kemix/README index 1fa5a94af37..4f5272e2c6b 100644 --- a/src/modules/kemix/README +++ b/src/modules/kemix/README @@ -10,7 +10,7 @@ Daniel-Constantin Mierla - Copyright 2019 asipto.com + Copyright © 2019 asipto.com __________________________________________________________________ Table of Contents diff --git a/src/modules/mqueue/README b/src/modules/mqueue/README index 9bc250dfd06..4ad5b6915a1 100644 --- a/src/modules/mqueue/README +++ b/src/modules/mqueue/README @@ -10,22 +10,16 @@ Elena-Ramona Modroiu -Edited by - Alex Balashov Evariste Systems -Edited by - Ovidiu Sas VoIP Embedded, Inc. -Edited by - Julien Chavanton diff --git a/src/modules/msrp/README b/src/modules/msrp/README index b55af6955d4..21335e35d34 100644 --- a/src/modules/msrp/README +++ b/src/modules/msrp/README @@ -10,8 +10,6 @@ Daniel-Constantin Mierla -Edited by - Alex Balashov diff --git a/src/modules/mtree/README b/src/modules/mtree/README index 36d3fee7500..9e401d79cea 100644 --- a/src/modules/mtree/README +++ b/src/modules/mtree/README @@ -14,8 +14,6 @@ Juha Heinanen tutpro.com -Edited by - Juha Heinanen diff --git a/src/modules/pdb/README b/src/modules/pdb/README index 1857dbf2b20..95d023bb31f 100644 --- a/src/modules/pdb/README +++ b/src/modules/pdb/README @@ -7,8 +7,6 @@ Henning Westerholt 1&1 Internet AG -Edited by - Pawel Kuzak 1&1 Internet AG diff --git a/src/modules/pipelimit/README b/src/modules/pipelimit/README index 3a1a3cc1302..c98dd302a34 100644 --- a/src/modules/pipelimit/README +++ b/src/modules/pipelimit/README @@ -8,8 +8,6 @@ Edited by Ovidiu Sas -Edited by - Daniel-Constantin Mierla Copyright © 2013 VoIPEmbedded Inc. diff --git a/src/modules/presence_dialoginfo/README b/src/modules/presence_dialoginfo/README index 70ffe87ae7a..e21ea7acc24 100644 --- a/src/modules/presence_dialoginfo/README +++ b/src/modules/presence_dialoginfo/README @@ -13,8 +13,6 @@ Juha Heinanen -Edited by - Klaus Darilion diff --git a/src/modules/presence_profile/README b/src/modules/presence_profile/README index c5f670e8ff7..024a87e1982 100644 --- a/src/modules/presence_profile/README +++ b/src/modules/presence_profile/README @@ -10,8 +10,6 @@ Mészáros Mihály -Edited by - Alex Balashov diff --git a/src/modules/pv_headers/README b/src/modules/pv_headers/README index 196752939b1..ec6e766ba50 100644 --- a/src/modules/pv_headers/README +++ b/src/modules/pv_headers/README @@ -12,7 +12,7 @@ Victor Seva Sipwise GmbH - Copyright 2018 Sipwise GmbH + Copyright © 2018 Sipwise GmbH __________________________________________________________________ Table of Contents @@ -106,7 +106,7 @@ Chapter 1. Admin Guide The following modules must be loaded before this module: * uac. * tm. - Needed only if "auto_msg" parameter is set to 1. + Needed only if “auto_msg” parameter is set to 1. 2.2. External Libraries or Applications @@ -128,7 +128,7 @@ Chapter 1. Admin Guide Name of the XAVP there the collected headers are stored. - Default value is "headers". + Default value is “headers”. Example 1.1. Set xavp_name parameter ... @@ -186,7 +186,7 @@ modparam("pv_headers", "header_apply_flag", 38) headers are processed. Default value is - "Record-Route,Via,Route,Content-Length,Max-Forwards,CSeq". + “Record-Route,Via,Route,Content-Length,Max-Forwards,CSeq”. Example 1.5. Set skip_headers parameter ... @@ -200,7 +200,7 @@ modparam("pv_headers", "skip_headers", "Record-Route,Via,Route") If the parameter is set to an empty string then no headers are split. - Default value is "". + Default value is “”. Example 1.6. Set split_headers parameter ... @@ -276,46 +276,46 @@ modparam("pvh", "auto_msg", 1) 4.4. pvh_check_header(hname) - Checks if the header "hname" already exists in the XAVP. + Checks if the header “hname” already exists in the XAVP. This function can be used from ANY_ROUTE but only after - pvh_collect_headers() or with "auto_msg" parameter enabled. + pvh_collect_headers() or with “auto_msg” parameter enabled. 4.5. pvh_append_header(hname, hvalue) - Appends a new header "hname" with the value "hvalue" into the XAVP. + Appends a new header “hname” with the value “hvalue” into the XAVP. Please note that subsequent "pv_append_header" calls will result in multiple headers. - If the provided "hvalue" is $null then the header is added into the + If the provided “hvalue” is $null then the header is added into the XAVP but it is not going to be added into the message. This function can be used from ANY_ROUTE but only after - pvh_collect_headers() or with "auto_msg" parameter enabled. + pvh_collect_headers() or with “auto_msg” parameter enabled. 4.6. pvh_modify_header(hname, hvalue, [idx]) - Modifies an existing header in the XAVP "hname" with the value "hvalue" + Modifies an existing header in the XAVP “hname” with the value “hvalue” into the XAVP. Index order is top to bottom. Please note that subsequent pvh_append_header calls will result in multiple headers. - Please note that if the header "hname"does not exist it will be + Please note that if the header “hname”does not exist it will be explicitly appended. If there are multiple headers with the same name - and "idx" is omitted, only the first one will be affected. + and “idx” is omitted, only the first one will be affected. This function can be used from ANY_ROUTE but only after - pvh_collect_headers() or with "auto_msg" parameter enabled. + pvh_collect_headers() or with “auto_msg” parameter enabled. 4.7. pvh_remove_header(hname, [idx]) - Removes an existing header "hname" from the XAVP. Index order is top to + Removes an existing header “hname” from the XAVP. Index order is top to bottom. - If there are multiple headers with the same name and "idx" is omitted, + If there are multiple headers with the same name and “idx” is omitted, all of them will be removed. This function can be used from ANY_ROUTE but only after - pvh_collect_headers() or with "auto_msg" parameter enabled. + pvh_collect_headers() or with “auto_msg” parameter enabled. 5. Exported Variables diff --git a/src/modules/ratelimit/README b/src/modules/ratelimit/README index 8848155a9ce..ecd6fce79a1 100644 --- a/src/modules/ratelimit/README +++ b/src/modules/ratelimit/README @@ -10,12 +10,8 @@ Edited by Ovidiu Sas -Edited by - Bogdan Vasile Harjoc -Edited by - Hendrik Scholz Copyright © 2006 Freenet Cityline GmbH diff --git a/src/modules/sdpops/README b/src/modules/sdpops/README index 476ff7c410b..9ea0e33abb6 100644 --- a/src/modules/sdpops/README +++ b/src/modules/sdpops/README @@ -315,17 +315,17 @@ if(sdp_with_active_media("video")) contain the exact same number of "m=" lines as the request. - 6 Generating the Answer + 6 Generating the Answer - [...] + [...] - For each "m=" line in the offer, there MUST be a corresponding "m=" - line in the answer. The answer MUST contain exactly the same number of - "m=" lines as the offer. This allows for streams to be matched up based - on their order. This implies that if the offer contained zero "m=" - lines, the answer MUST contain zero "m=" lines. + For each "m=" line in the offer, there MUST be a corresponding "m=" + line in the answer. The answer MUST contain exactly the same number of + "m=" lines as the offer. This allows for streams to be matched up based + on their order. This implies that if the offer contained zero "m=" + lines, the answer MUST contain zero "m=" lines. - --RFC 3264 + --RFC 3264 So this may not work with all Endpoints, especially if they follow RFC 3264 precisely (e.g. JSSIP). diff --git a/src/modules/siputils/README b/src/modules/siputils/README index 390ef1b3cb0..74344a83c15 100644 --- a/src/modules/siputils/README +++ b/src/modules/siputils/README @@ -32,12 +32,8 @@ Edited by Jan Janak -Edited by - Bogdan-Andrei Iancu -Edited by - Gabriel Vasile Copyright © 2008, 2005, 2003 1&1 Internet AG, FhG Fokus, Voice Sistem diff --git a/src/modules/snmpstats/README b/src/modules/snmpstats/README index 464dd5e58b1..5308308e36a 100644 --- a/src/modules/snmpstats/README +++ b/src/modules/snmpstats/README @@ -8,8 +8,6 @@ Edited by Jeffrey Magder -Edited by - Olle E. Johansson Copyright © 2006 SOMA Networks, Inc. diff --git a/src/modules/systemdops/README b/src/modules/systemdops/README index c93df6102ad..5fc89b2eac7 100644 --- a/src/modules/systemdops/README +++ b/src/modules/systemdops/README @@ -10,7 +10,7 @@ Daniel-Constantin Mierla - Copyright 2019 asipto.com + Copyright © 2019 asipto.com __________________________________________________________________ Table of Contents diff --git a/src/modules/tmrec/README b/src/modules/tmrec/README index bcb8380ee93..7da2a2e3876 100644 --- a/src/modules/tmrec/README +++ b/src/modules/tmrec/README @@ -10,14 +10,10 @@ Daniel-Constantin Mierla -Edited by - Alex Balashov -Edited by - Richard Fuchs diff --git a/src/modules/uri_db/README b/src/modules/uri_db/README index 589fba5b0a8..a4a19a8c1fe 100644 --- a/src/modules/uri_db/README +++ b/src/modules/uri_db/README @@ -8,8 +8,6 @@ Edited by Jan Janak -Edited by - Bogdan-Andrei Iancu Copyright © 2003 FhG FOKUS diff --git a/src/modules/xhttp/README b/src/modules/xhttp/README index babbed95462..a38599775fd 100644 --- a/src/modules/xhttp/README +++ b/src/modules/xhttp/README @@ -10,8 +10,6 @@ Daniel-Constantin Mierla -Edited by - Alex Balashov diff --git a/src/modules/xhttp_prom/README b/src/modules/xhttp_prom/README index df07cbff4f2..a6c2e958686 100644 --- a/src/modules/xhttp_prom/README +++ b/src/modules/xhttp_prom/README @@ -14,7 +14,7 @@ Javier Gallart - Copyright 2019 www.sonoc.io + Copyright © 2019 www.sonoc.io __________________________________________________________________ Table of Contents @@ -296,7 +296,7 @@ modparam("xhttp_prom", "prom_gauge", "name=gg_third; label=method:handler;"); 4.5. prom_dispatch() 4.6. prom_check_uri() -4.1. prom_counter_reset(name, l0, l1, l2) +4.1. prom_counter_reset(name, l0, l1, l2) Get a counter based on its name and labels and reset its value to 0. Name parameter is mandatory. Values of labels are optional (from none @@ -325,7 +325,7 @@ prom_counter_reset("cnt01", "push", "192.168.0.1"); kamailio_cnt01 {method="push", IP="192.168.0.1"} 0 1234567890 ... -4.2. prom_gauge_reset(name, l0, l1, l2) +4.2. prom_gauge_reset(name, l0, l1, l2) Get a gauge based on its name and labels and reset its value to 0. Name parameter is mandatory. Values of labels are optional (from none up to @@ -352,7 +352,7 @@ prom_gauge_reset("cnt01", "push", "192.168.0.1"); kamailio_cnt01 {method="push", IP="192.168.0.1"} 0 1234567890 ... -4.3. prom_counter_inc(name, number, l0, l1, l2) +4.3. prom_counter_inc(name, number, l0, l1, l2) Get a counter identified by its name and labels and increase its value by a number. If counter does not exist it creates the counter, @@ -389,7 +389,7 @@ prom_counter_inc("cnt02", "15", "push", "192.168.0.1"); kamailio_cnt02 {method="push", IP="192.168.0.1"} 15 1234567890 ... -4.4. prom_gauge_set(name, number, l0, l1, l2) +4.4. prom_gauge_set(name, number, l0, l1, l2) Get a gauge identified by its name and labels and set its value to a number. If gauge does not exist it creates the gauge and assigns the @@ -426,7 +426,7 @@ prom_gauge_set("gg02", "2.8", "push", "192.168.0.1"); kamailio_gg02 {method="push", IP="192.168.0.1"} 2.8 1234567890 ... -4.5. prom_dispatch() +4.5. prom_dispatch() Handle the HTTP request and generate a response. @@ -526,7 +526,7 @@ kamailio_sl_sent_replies 15 1554839325427 kamailio_sl_xxx_replies 0 1554839325461 ... -4.6. prom_check_uri() +4.6. prom_check_uri() Check if path of HTTP URL equals /metrics. This avoids us to check hu variable from xHTTP module.