Răsfoiți Sursa

modules: readme files regenerated - app_lua_sr ... [skip ci]

Kamailio Dev 5 ani în urmă
părinte
comite
e6aefebf1b

+ 2 - 2
src/modules/app_lua_sr/README

@@ -10,7 +10,7 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-   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
 ...

+ 0 - 2
src/modules/app_mono/README

@@ -10,8 +10,6 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    <[email protected]>

+ 29 - 29
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
-       <[email protected]> and e-mails regarding development
-       versions should be sent to <[email protected]>.
+   E-mails regarding any stable Kamailio release should be sent to
+   <[email protected]> and e-mails regarding development
+   versions should be sent to <[email protected]>.
 
    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.

+ 0 - 2
src/modules/auth_radius/README

@@ -22,8 +22,6 @@ Jan Janak
 
    <[email protected]>
 
-Edited by
-
 Phil Lavin
 
    <[email protected]>

+ 15 - 17
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
-       <[email protected]> and e-mails regarding development
-       versions should be sent to <[email protected]>.
+   E-mails regarding any stable Kamailio release should be sent to
+   <[email protected]> and e-mails regarding development
+   versions should be sent to <[email protected]>.
 
    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.

+ 2117 - 0
src/modules/dispatcher/README

@@ -1,2 +1,2119 @@
+DISPATCHER Module
 
+Daniel-Constantin Mierla
 
+   <[email protected]>
+
+Edited by
+
+Daniel-Constantin Mierla
+
+   <[email protected]>
+
+Carsten Bock
+
+   ng-voice GmbH
+
+Olle E. Johansson
+
+   Edvina AB
+
+Alessandro Arrichiello
+
+   Hewlett Packard
+
+Luis Martin
+
+Julien Chavanton
+
+   <[email protected]>
+
+Federico Cabiddu
+
+   <[email protected]>
+
+   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:[email protected]")
+ ...
+
+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: [email protected]
+#
+# 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:[email protected]")
+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
+   <[email protected]> and e-mail regarding development versions
+   or GIT snapshots should be send to <[email protected]>.
+
+   2.5.
+
+   How can I report a bug?
+
+   Please follow the guidelines provided at:
+   https://github.com/kamailio/kamailio/issues

+ 0 - 2
src/modules/dmq/README

@@ -14,8 +14,6 @@ Edited by
 
 Marius Ovidiu Bucur
 
-Edited by
-
 Charles Chance
 
    Copyright © 2011 Marius Bucur

+ 0 - 2
src/modules/domainpolicy/README

@@ -14,8 +14,6 @@ Otmar Lendl
 
    <[email protected]>
 
-Edited by
-
 Klaus Darilion
 
    <[email protected]>

+ 0 - 2
src/modules/geoip/README

@@ -10,8 +10,6 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    Evariste Systems LLC

+ 25 - 31
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
-       <[email protected]> and e-mails regarding development
-       versions should be sent to <[email protected]>.
+   E-mails regarding any stable Kamailio release should be sent to
+   <[email protected]> and e-mails regarding development
+   versions should be sent to <[email protected]>.
 
    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.

+ 15 - 17
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
-       <[email protected]> and e-mails regarding development
-       versions should be sent to <[email protected]>.
+   E-mails regarding any stable Kamailio release should be sent to
+   <[email protected]> and e-mails regarding development
+   versions should be sent to <[email protected]>.
 
    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.

+ 0 - 2
src/modules/jansson/README

@@ -10,8 +10,6 @@ Matthew Williams
 
    <[email protected]>
 
-Edited by
-
 Carsten Bock
 
    <[email protected]>

+ 1 - 1
src/modules/kemix/README

@@ -10,7 +10,7 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-   Copyright © 2019 asipto.com
+   Copyright © 2019 asipto.com
      __________________________________________________________________
 
    Table of Contents

+ 0 - 6
src/modules/mqueue/README

@@ -10,22 +10,16 @@ Elena-Ramona Modroiu
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    Evariste Systems
    <[email protected]>
 
-Edited by
-
 Ovidiu Sas
 
    VoIP Embedded, Inc.
    <[email protected]>
 
-Edited by
-
 Julien Chavanton
 
    <[email protected]>

+ 0 - 2
src/modules/msrp/README

@@ -10,8 +10,6 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    <[email protected]>

+ 0 - 2
src/modules/mtree/README

@@ -14,8 +14,6 @@ Juha Heinanen
 
    tutpro.com
 
-Edited by
-
 Juha Heinanen
 
    <[email protected]>

+ 0 - 2
src/modules/pdb/README

@@ -7,8 +7,6 @@ Henning Westerholt
    1&1 Internet AG
    <[email protected]>
 
-Edited by
-
 Pawel Kuzak
 
    1&1 Internet AG

+ 0 - 2
src/modules/pipelimit/README

@@ -8,8 +8,6 @@ Edited by
 
 Ovidiu Sas
 
-Edited by
-
 Daniel-Constantin Mierla
 
    Copyright © 2013 VoIPEmbedded Inc.

+ 0 - 2
src/modules/presence_dialoginfo/README

@@ -13,8 +13,6 @@ Juha Heinanen
 
    <[email protected]>
 
-Edited by
-
 Klaus Darilion
 
    <klaus.darilion@[email protected]>

+ 0 - 2
src/modules/presence_profile/README

@@ -10,8 +10,6 @@ Mészáros Mihály
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    <[email protected]>

+ 17 - 17
src/modules/pv_headers/README

@@ -12,7 +12,7 @@ Victor Seva
    Sipwise GmbH
    <[email protected]>
 
-   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
 

+ 0 - 4
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

+ 8 - 8
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).

+ 0 - 4
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

+ 0 - 2
src/modules/snmpstats/README

@@ -8,8 +8,6 @@ Edited by
 
 Jeffrey Magder
 
-Edited by
-
 Olle E. Johansson
 
    Copyright © 2006 SOMA Networks, Inc.

+ 1 - 1
src/modules/systemdops/README

@@ -10,7 +10,7 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-   Copyright © 2019 asipto.com
+   Copyright © 2019 asipto.com
      __________________________________________________________________
 
    Table of Contents

+ 0 - 4
src/modules/tmrec/README

@@ -10,14 +10,10 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    <[email protected]>
 
-Edited by
-
 Richard Fuchs
 
    <[email protected]>

+ 0 - 2
src/modules/uri_db/README

@@ -8,8 +8,6 @@ Edited by
 
 Jan Janak
 
-Edited by
-
 Bogdan-Andrei Iancu
 
    Copyright © 2003 FhG FOKUS

+ 0 - 2
src/modules/xhttp/README

@@ -10,8 +10,6 @@ Daniel-Constantin Mierla
 
    <[email protected]>
 
-Edited by
-
 Alex Balashov
 
    <[email protected]>

+ 7 - 7
src/modules/xhttp_prom/README

@@ -14,7 +14,7 @@ Javier Gallart
 
    <[email protected]>
 
-   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.