浏览代码

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

Kamailio Dev 6 年之前
父节点
当前提交
295bc5471e
共有 1 个文件被更改,包括 2339 次插入0 次删除
  1. 2339 0
      src/modules/dialog/README

+ 2339 - 0
src/modules/dialog/README

@@ -1,2 +1,2341 @@
+dialog Module
 
+Bogdan-Andrei Iancu
 
+   Voice Sistem SRL
+
+Carsten Bock
+
+   ng-voice.com
+
+Edited by
+
+Bogdan-Andrei Iancu
+
+Carsten Bock
+
+Alex Balashov
+
+   <[email protected]>
+
+Olle E. Johansson
+
+   <[email protected]>
+
+Surendra Tiwari
+
+   <[email protected]>
+
+   Copyright © 2006 Voice Sistem SRL
+
+   Copyright © 2011 Carsten Bock, http://www.ng-voice.com
+     __________________________________________________________________
+
+   Table of Contents
+
+   1. Admin Guide
+
+        1. Overview
+        2. How it works
+        3. Dialog states
+        4. Dialog profiling
+        5. Dependencies
+
+              5.1. Kamailio Modules
+              5.2. External Libraries or Applications
+
+        6. Parameters
+
+              6.1. enable_stats (integer)
+              6.2. hash_size (integer)
+              6.3. rr_param (string)
+              6.4. dlg_flag (integer)
+              6.5. timeout_avp (string)
+              6.6. default_timeout (integer)
+              6.7. early_timeout (integer)
+              6.8. noack_timeout (integer)
+              6.9. end_timeout (integer)
+              6.10. dlg_extra_hdrs (string)
+              6.11. dlg_match_mode (integer)
+              6.12. detect_spirals (integer)
+              6.13. db_url (string)
+              6.14. db_mode (integer)
+              6.15. db_update_period (integer)
+              6.16. db_fetch_rows (integer)
+              6.17. db_skip_load (integer)
+              6.18. table_name (string)
+              6.19. call_id_column (string)
+              6.20. from_uri_column (string)
+              6.21. from_tag_column (string)
+              6.22. to_uri_column (string)
+              6.23. to_tag_column (string)
+              6.24. from_cseq_column (string)
+              6.25. to_cseq_column (string)
+              6.26. from_route_column (string)
+              6.27. to_route_column (string)
+              6.28. from_contact_column (string)
+              6.29. to_contact_column (string)
+              6.30. from_sock_column (string)
+              6.31. to_sock_column (string)
+              6.32. h_id_column (string)
+              6.33. h_entry_column (string)
+              6.34. state_column (string)
+              6.35. start_time_column (string)
+              6.36. timeout_column (string)
+              6.37. sflags_column (string)
+              6.38. toroute_name_column (string)
+              6.39. vars_table_name (string)
+              6.40. vars_h_id_column (string)
+              6.41. vars_h_entry_column (string)
+              6.42. vars_key_column (string)
+              6.43. vars_value_column (string)
+              6.44. profiles_with_value (string)
+              6.45. profiles_no_value (string)
+              6.46. bridge_controller (string)
+              6.47. bridge_contact (string)
+              6.48. initial_cbs_inscript (int)
+              6.49. send_bye (int)
+              6.50. wait_ack (int)
+              6.51. ka_timer (int)
+              6.52. ka_interval (int)
+              6.53. ka_failed_limit (int)
+              6.54. timeout_noreset (int)
+              6.55. timer_procs (int)
+              6.56. enable_dmq (int)
+              6.57. track_cseq_updates (int)
+              6.58. lreq_callee_headers (string)
+              6.59. event_callback (str)
+              6.60. h_id_start (int)
+              6.61. h_id_step (int)
+              6.62. keep_proxy_rr (string)
+
+        7. Functions
+
+              7.1. set_dlg_profile(profile,[value])
+              7.2. unset_dlg_profile(profile,[value])
+              7.3. is_in_profile(profile,[value])
+              7.4. get_profile_size(profile,[value],size)
+              7.5. dlg_isflagset(flag)
+              7.6. dlg_setflag(flag)
+              7.7. dlg_resetflag(flag)
+              7.8. dlg_bye(side)
+              7.9. dlg_refer(side, address)
+              7.10. dlg_manage()
+              7.11. dlg_bridge(from, to, op)
+              7.12. dlg_get(callid, ftag, ttag)
+              7.13. is_known_dlg()
+              7.14. dlg_set_timeout(timeout [, h_entry, h_id])
+              7.15. dlg_set_timeout_by_profile(profile, [value], timeout)
+              7.16. dlg_set_property(attr)
+              7.17. dlg_remote_profile(cmd, profile, value, uid, expires)
+              7.18. dlg_set_ruri()
+              7.19. dlg_db_load_callid(cival)
+              7.20. dlg_db_load_extra()
+
+        8. Statistics
+
+              8.1. active_dialogs
+              8.2. early_dialogs
+              8.3. processed_dialogs
+              8.4. expired_dialogs
+              8.5. failed_dialogs
+
+        9. RPC Commands
+
+              9.1. dlg.list
+              9.2. dlg.list_ctx
+              9.3. dlg.list_match
+              9.4. dlg.list_match_ctx
+              9.5. dlg.dlg_list
+              9.6. dlg.dlg_list_ctx
+              9.7. dlg.terminate_dlg
+              9.8. dlg.end_dlg
+              9.9. dlg.profile_get_size
+              9.10. dlg.profile_list
+              9.11. dlg.bridge_dlg
+              9.12. dlg.stats_active
+              9.13. dlg.is_alive
+
+        10. Exported Variables
+
+              10.1. $DLG_count
+              10.2. $DLG_status
+              10.3. $DLG_lifetime
+              10.4. $dlg(...)
+              10.5. $dlg_ctx(...)
+              10.6. $dlg_var(key)
+
+        11. Event Routes
+
+              11.1. event_route[dialog:start]
+              11.2. event_route[dialog:end]
+              11.3. event_route[dialog:failed]
+
+   2. Developer Guide
+
+        1. Available Functions
+
+              1.1. register_dlgcb (dialog, type, cb, param, free_param_cb)
+
+              1.2. terminate_dlg (dlg, hdrs)
+
+   3. Frequently Asked Questions
+
+   List of Examples
+
+   1.1. Set enable_stats parameter
+   1.2. Set hash_size parameter
+   1.3. Set rr_param parameter
+   1.4. Set dlg_flag parameter
+   1.5. Set timeout_avp parameter
+   1.6. Set default_timeout parameter
+   1.7. Set early_timeout parameter
+   1.8. Set noack_timeout parameter
+   1.9. Set end_timeout parameter
+   1.10. Set dlf_extra_hdrs parameter
+   1.11. Set dlg_match_mode parameter
+   1.12. Set detect_spirals parameter
+   1.13. Set db_url parameter
+   1.14. Set db_mode parameter
+   1.15. Set db_update_period parameter
+   1.16. Set db_fetch_rows parameter
+   1.17. Set db_skip_load parameter
+   1.18. Set table_name parameter
+   1.19. Set call_id_column parameter
+   1.20. Set from_uri_column parameter
+   1.21. Set from_tag_column parameter
+   1.22. Set to_uri_column parameter
+   1.23. Set to_tag_column parameter
+   1.24. Set from_cseq_column parameter
+   1.25. Set to_cseq_column parameter
+   1.26. Set from_route_column parameter
+   1.27. Set to_route_column parameter
+   1.28. Set from_contact_column parameter
+   1.29. Set to_contact_column parameter
+   1.30. Set from_sock_column parameter
+   1.31. Set to_sock_column parameter
+   1.32. Set h_id_column parameter
+   1.33. Set h_entry_column parameter
+   1.34. Set state_column parameter
+   1.35. Set start_time_column parameter
+   1.36. Set timeout_column parameter
+   1.37. Set sflags_column parameter
+   1.38. Set toroute_name_column parameter
+   1.39. Set vars_table_name parameter
+   1.40. Set vars_h_id_column parameter
+   1.41. Set vars_h_entry_column parameter
+   1.42. Set vars_key_column parameter
+   1.43. Set vars_value_column parameter
+   1.44. Set profiles_with_value parameter
+   1.45. Set profiles_no_value parameter
+   1.46. Set bridge_controller parameter
+   1.47. Set bridge_contact parameter
+   1.48. Set initial_cbs_inscript parameter
+   1.49. Set send_bye parameter
+   1.50. Set wait_ack parameter
+   1.51. Set ka_timer parameter
+   1.52. Set ka_interval parameter
+   1.53. Set ka_failed_limit parameter
+   1.54. Set timeout_noreset parameter
+   1.55. Set timer_procs parameter
+   1.56. Set enable_dmq parameter
+   1.57. Set track_cseq_updates parameter
+   1.58. Set lreq_callee_headers parameter
+   1.59. Set event_callback parameter
+   1.60. Set h_id_start parameter
+   1.61. Set h_id_step parameter
+   1.62. Set dlg_keep_proxy_rr parameter
+   1.63. set_dlg_profile usage
+   1.64. unset_dlg_profile usage
+   1.65. is_in_profile usage
+   1.66. get_profile_size usage
+   1.67. dlg_isflagset usage
+   1.68. dlg_setflag usage
+   1.69. dlg_resetflag usage
+   1.70. dlg_bye usage
+   1.71. dlg_refer usage
+   1.72. dlg_manage usage
+   1.73. dlg_bridge usage
+   1.74. dlg_get usage
+   1.75. is_known_dlg() usage
+   1.76. dlg_set_timeout usage
+   1.77. dlg_set_timeout_by_profile usage
+   1.78. dlg_set_property usage
+   1.79. dlg_remote_profile usage
+   1.80. dlg_set_ruri() usage
+   1.81. dlg_db_load_callid() usage
+   1.82. dlg_db_load_extra() usage
+
+Chapter 1. Admin Guide
+
+   Table of Contents
+
+   1. Overview
+   2. How it works
+   3. Dialog states
+   4. Dialog profiling
+   5. Dependencies
+
+        5.1. Kamailio Modules
+        5.2. External Libraries or Applications
+
+   6. Parameters
+
+        6.1. enable_stats (integer)
+        6.2. hash_size (integer)
+        6.3. rr_param (string)
+        6.4. dlg_flag (integer)
+        6.5. timeout_avp (string)
+        6.6. default_timeout (integer)
+        6.7. early_timeout (integer)
+        6.8. noack_timeout (integer)
+        6.9. end_timeout (integer)
+        6.10. dlg_extra_hdrs (string)
+        6.11. dlg_match_mode (integer)
+        6.12. detect_spirals (integer)
+        6.13. db_url (string)
+        6.14. db_mode (integer)
+        6.15. db_update_period (integer)
+        6.16. db_fetch_rows (integer)
+        6.17. db_skip_load (integer)
+        6.18. table_name (string)
+        6.19. call_id_column (string)
+        6.20. from_uri_column (string)
+        6.21. from_tag_column (string)
+        6.22. to_uri_column (string)
+        6.23. to_tag_column (string)
+        6.24. from_cseq_column (string)
+        6.25. to_cseq_column (string)
+        6.26. from_route_column (string)
+        6.27. to_route_column (string)
+        6.28. from_contact_column (string)
+        6.29. to_contact_column (string)
+        6.30. from_sock_column (string)
+        6.31. to_sock_column (string)
+        6.32. h_id_column (string)
+        6.33. h_entry_column (string)
+        6.34. state_column (string)
+        6.35. start_time_column (string)
+        6.36. timeout_column (string)
+        6.37. sflags_column (string)
+        6.38. toroute_name_column (string)
+        6.39. vars_table_name (string)
+        6.40. vars_h_id_column (string)
+        6.41. vars_h_entry_column (string)
+        6.42. vars_key_column (string)
+        6.43. vars_value_column (string)
+        6.44. profiles_with_value (string)
+        6.45. profiles_no_value (string)
+        6.46. bridge_controller (string)
+        6.47. bridge_contact (string)
+        6.48. initial_cbs_inscript (int)
+        6.49. send_bye (int)
+        6.50. wait_ack (int)
+        6.51. ka_timer (int)
+        6.52. ka_interval (int)
+        6.53. ka_failed_limit (int)
+        6.54. timeout_noreset (int)
+        6.55. timer_procs (int)
+        6.56. enable_dmq (int)
+        6.57. track_cseq_updates (int)
+        6.58. lreq_callee_headers (string)
+        6.59. event_callback (str)
+        6.60. h_id_start (int)
+        6.61. h_id_step (int)
+        6.62. keep_proxy_rr (string)
+
+   7. Functions
+
+        7.1. set_dlg_profile(profile,[value])
+        7.2. unset_dlg_profile(profile,[value])
+        7.3. is_in_profile(profile,[value])
+        7.4. get_profile_size(profile,[value],size)
+        7.5. dlg_isflagset(flag)
+        7.6. dlg_setflag(flag)
+        7.7. dlg_resetflag(flag)
+        7.8. dlg_bye(side)
+        7.9. dlg_refer(side, address)
+        7.10. dlg_manage()
+        7.11. dlg_bridge(from, to, op)
+        7.12. dlg_get(callid, ftag, ttag)
+        7.13. is_known_dlg()
+        7.14. dlg_set_timeout(timeout [, h_entry, h_id])
+        7.15. dlg_set_timeout_by_profile(profile, [value], timeout)
+        7.16. dlg_set_property(attr)
+        7.17. dlg_remote_profile(cmd, profile, value, uid, expires)
+        7.18. dlg_set_ruri()
+        7.19. dlg_db_load_callid(cival)
+        7.20. dlg_db_load_extra()
+
+   8. Statistics
+
+        8.1. active_dialogs
+        8.2. early_dialogs
+        8.3. processed_dialogs
+        8.4. expired_dialogs
+        8.5. failed_dialogs
+
+   9. RPC Commands
+
+        9.1. dlg.list
+        9.2. dlg.list_ctx
+        9.3. dlg.list_match
+        9.4. dlg.list_match_ctx
+        9.5. dlg.dlg_list
+        9.6. dlg.dlg_list_ctx
+        9.7. dlg.terminate_dlg
+        9.8. dlg.end_dlg
+        9.9. dlg.profile_get_size
+        9.10. dlg.profile_list
+        9.11. dlg.bridge_dlg
+        9.12. dlg.stats_active
+        9.13. dlg.is_alive
+
+   10. Exported Variables
+
+        10.1. $DLG_count
+        10.2. $DLG_status
+        10.3. $DLG_lifetime
+        10.4. $dlg(...)
+        10.5. $dlg_ctx(...)
+        10.6. $dlg_var(key)
+
+   11. Event Routes
+
+        11.1. event_route[dialog:start]
+        11.2. event_route[dialog:end]
+        11.3. event_route[dialog:failed]
+
+1. Overview
+
+   Kamailio can behave as a stateful proxy through the TM module. However,
+   "stateful" in this context refers to transaction state, not dialog
+   state. Certain applications may benefit from an awareness of "calls" in
+   the proxy, not just SIP transactions.
+
+   For example, a common need is to limit the number of calls that can be
+   made concurrently by an endpoint, account, user group, etc. In order to
+   count the number of calls in progress, it is necessary for the proxy to
+   be aware of whole dialogs, not just transactions, and to provide some
+   means of programmatically classifying these dialogs. This is just one
+   common application discussed for illustrative purposes; there are many
+   others.
+
+   The dialog module provides dialog awareness for the Kamailio proxy.
+   It's functionality is to keep track of the current dialogs, to offer
+   information about them (e.g. how many dialogs are active), and to
+   manage various characteristics of dialogs. The module exports several
+   functions that can be used directly from the configuration route script
+   as well as functions for the RPC interface.
+
+   This module also provides a API foundation on which to build more
+   complex dialog-oriented functionality in other Kamailio modules.
+
+2. How it works
+
+   To create the dialog associated with an initial INVITE request, execute
+   the function “dlg_manage()” or set the flag specified by parameter
+   “dlg_flag” (Section 6.4, “dlg_flag (integer)”) before creating the
+   corresponding transaction.
+
+   The dialog is automatically destroyed when a “BYE” is received. In case
+   of no “BYE”, the dialog lifetime is controlled via the default timeout
+   (see “default_timeout” - Section 6.6, “default_timeout (integer)”) and
+   custom timeout (see “timeout_avp” - Section 6.5, “timeout_avp
+   (string)”). The dialog timeout is reset each time a sequential request
+   is processed.
+
+3. Dialog states
+
+   Dialogs have states that are shown in the RPC interface as well as
+   stored in the database.
+     * 1 : Unconfirmed dialog
+     * 2 : Early dialog (ringing)
+     * 3 : Confirmed dialog (waiting for ACK)
+     * 4 : Confirmed dialog (active call)
+     * 5 : Deleted dialog
+
+   The early and deleted dialog states are not updated in database
+   storage.
+
+4. Dialog profiling
+
+   Dialog profiling is a mechanism that helps in classifying, sorting and
+   keeping track of certain types of dialogs. The classification criteria
+   can be any attributes desired by the administrator; it can be SIP
+   message attributes, other pseudo-variables, custom values, etc. Dialogs
+   can be dynamically added into one or more profile tables. Logically,
+   each profile table can have a special meaning (like dialogs outside the
+   domain, dialogs terminated to the PSTN, etc.).
+
+   There are two types of profiles:
+     * with no value - a dialog simply belongs to a profile (for instance,
+       an outbound calls profile). There is no other additional
+       information to describe the dialog beyond its membership in the
+       profile per se.
+     * with value - a dialog belongs to a profile having a certain value
+       (like in a caller profile, where the value is the caller ID). The
+       membership of the dialog in the profile is strictly related to the
+       value. For example, if the account ID of the caller is stored in
+       the pseudo-variable $var(account_id), you can use $var(account_id)
+       as a value/key by which to group dialogs so that you can count the
+       number of open dialogs for each account, enforce concurrent call
+       limits as necessary, etc.
+
+   A dialog can be added to multiple profiles at the same time.
+
+   Profiles are visible (at the moment) in the request route (for initial
+   and sequential requests) and in the branch, failure and reply routes of
+   the original request.
+
+5. Dependencies
+
+   5.1. Kamailio Modules
+   5.2. External Libraries or Applications
+
+5.1. Kamailio Modules
+
+   The following modules must be loaded before this module:
+     * TM - Transaction module
+     * RR - Record-Route module
+     * PV - Pseudovariables module
+
+5.2. External Libraries or Applications
+
+   The following libraries or applications must be installed before
+   running Kamailio with this module loaded:
+     * None.
+
+6. Parameters
+
+   6.1. enable_stats (integer)
+   6.2. hash_size (integer)
+   6.3. rr_param (string)
+   6.4. dlg_flag (integer)
+   6.5. timeout_avp (string)
+   6.6. default_timeout (integer)
+   6.7. early_timeout (integer)
+   6.8. noack_timeout (integer)
+   6.9. end_timeout (integer)
+   6.10. dlg_extra_hdrs (string)
+   6.11. dlg_match_mode (integer)
+   6.12. detect_spirals (integer)
+   6.13. db_url (string)
+   6.14. db_mode (integer)
+   6.15. db_update_period (integer)
+   6.16. db_fetch_rows (integer)
+   6.17. db_skip_load (integer)
+   6.18. table_name (string)
+   6.19. call_id_column (string)
+   6.20. from_uri_column (string)
+   6.21. from_tag_column (string)
+   6.22. to_uri_column (string)
+   6.23. to_tag_column (string)
+   6.24. from_cseq_column (string)
+   6.25. to_cseq_column (string)
+   6.26. from_route_column (string)
+   6.27. to_route_column (string)
+   6.28. from_contact_column (string)
+   6.29. to_contact_column (string)
+   6.30. from_sock_column (string)
+   6.31. to_sock_column (string)
+   6.32. h_id_column (string)
+   6.33. h_entry_column (string)
+   6.34. state_column (string)
+   6.35. start_time_column (string)
+   6.36. timeout_column (string)
+   6.37. sflags_column (string)
+   6.38. toroute_name_column (string)
+   6.39. vars_table_name (string)
+   6.40. vars_h_id_column (string)
+   6.41. vars_h_entry_column (string)
+   6.42. vars_key_column (string)
+   6.43. vars_value_column (string)
+   6.44. profiles_with_value (string)
+   6.45. profiles_no_value (string)
+   6.46. bridge_controller (string)
+   6.47. bridge_contact (string)
+   6.48. initial_cbs_inscript (int)
+   6.49. send_bye (int)
+   6.50. wait_ack (int)
+   6.51. ka_timer (int)
+   6.52. ka_interval (int)
+   6.53. ka_failed_limit (int)
+   6.54. timeout_noreset (int)
+   6.55. timer_procs (int)
+   6.56. enable_dmq (int)
+   6.57. track_cseq_updates (int)
+   6.58. lreq_callee_headers (string)
+   6.59. event_callback (str)
+   6.60. h_id_start (int)
+   6.61. h_id_step (int)
+   6.62. keep_proxy_rr (string)
+
+6.1. enable_stats (integer)
+
+   If statistics support should be enabled or not. Via statistics
+   variables, the module provide information about the dialog processing.
+   Set it to zero to disable or to non-zero to enable it.
+
+   Default value is “1 (enabled)”.
+
+   Example 1.1. Set enable_stats parameter
+...
+modparam("dialog", "enable_stats", 0)
+...
+
+6.2. hash_size (integer)
+
+   The size of the hash table internally used to keep the dialogs. A
+   larger table is much faster but consumes more memory. The hash size
+   must be a power of two.
+
+   IMPORTANT: If dialog information should be stored in a database, a
+   constant hash_size should be used, otherwise the restoring process will
+   not take place. If you really want to modify the hash_size, you must
+   delete all table's rows before restarting the server.
+
+   Default value is “4096”.
+
+   Example 1.2. Set hash_size parameter
+...
+modparam("dialog", "hash_size", 1024)
+...
+
+6.3. rr_param (string)
+
+   Name of the Record-Route parameter used to store the dialog cookie. It
+   is used for the fast matching of sequential requests to tracked
+   dialogs.
+
+   Default value is “did”.
+
+   Example 1.3. Set rr_param parameter
+...
+modparam("dialog", "rr_param", "xyz")
+...
+
+6.4. dlg_flag (integer)
+
+   Flag to be used for marking if a dialog should be constructed for the
+   current request (this make sense only for initial requests).
+
+   Note: it is not needed to set this parameter and its corresponding flag
+   for initial request in case the “dlg_manage()” function is used. In
+   other words, using “dlg_manage()” alone is enough.
+
+   Default value is “none”.
+
+   Example 1.4. Set dlg_flag parameter
+...
+modparam("dialog", "dlg_flag", 4)
+...
+
+6.5. timeout_avp (string)
+
+   The specification of an AVP that contains a custom timeout value (in
+   seconds) for the dialog. It may be used only in a request (initial or
+   sequential) context.
+
+   Default value is “none”.
+
+   Example 1.5. Set timeout_avp parameter
+...
+modparam("dialog", "timeout_avp", "$avp(i:10)")
+...
+
+6.6. default_timeout (integer)
+
+   The default dialog timeout (in seconds), in the absence of a custom
+   value provided in an AVP.
+
+   Default value is “43200 (12 hours)”.
+
+   Example 1.6. Set default_timeout parameter
+...
+modparam("dialog", "default_timeout", 21600)
+...
+
+6.7. early_timeout (integer)
+
+   The timeout (in seconds) after which the dialogs in unconfirmed or
+   early state (no final response received) are destroyed.
+
+   Default value is “300 (5 minutes)”.
+
+   Example 1.7. Set early_timeout parameter
+...
+modparam("dialog", "early_timeout", 180)
+...
+
+6.8. noack_timeout (integer)
+
+   The timeout (in seconds) after which the dialogs which were answered
+   with 200ok but didn't receive the ACK are marked for termination (the
+   lifetime is set to 10 more seconds).
+
+   Default value is “60 (1 minute)”.
+
+   Example 1.8. Set noack_timeout parameter
+...
+modparam("dialog", "noack_timeout", 90)
+...
+
+6.9. end_timeout (integer)
+
+   The timeout (in seconds) after which the dialogs in terminated state
+   are destroyed.
+
+   Default value is “300 (5 minutes)”.
+
+   Example 1.9. Set end_timeout parameter
+...
+modparam("dialog", "end_timeout", 180)
+...
+
+6.10. dlg_extra_hdrs (string)
+
+   A string containing the extra headers (full format, with EOH) to be
+   added to requests generated locally by the module (like BYEs).
+
+   Default value is “NULL”.
+
+   Example 1.10. Set dlf_extra_hdrs parameter
+...
+modparam("dialog", "dlg_extra_hdrs", "Hint: credit expired\r\n")
+...
+
+6.11. dlg_match_mode (integer)
+
+   How the sequential requests should be matched against the known
+   dialogs. The modes are a combination of matching based on a cookie
+   (DID) stored as cookie in Record-Route header and matching based on SIP
+   elements (as in RFC 3261).
+
+   Note: DID-based matching does not replace callid/fromtag/totag
+   comparison. It will speed up dialog matching by not iterating over the
+   whole dialog list for callid/fromtag/totag comparison, but instead it
+   uses a hash table to find the respective dialog and then doing only one
+   callid/fromtag/totag comparison. Thus, there is no security issue when
+   using DID based matching. Use DID_FALLBACK for maximum interoperability
+   or use DID_ONLY to reject buggy clients or hacking attempts. DID_NONE
+   is only useful, when you want to hide dialog-tracking from the users
+   (preventing the DID Record-Route cookie).
+
+   The supported modes are:
+     * 0 - DID_ONLY - the match is done exclusively based on DID;
+     * 1 - DID_FALLBACK - the match is first tried based on DID and if not
+       present, it will fall back to SIP matching;
+     * 2 - DID_NONE - the match is done exclusively based on SIP elements;
+       no DID information is added in RR.
+
+   Default value is “0 (DID_ONLY)”.
+
+   Example 1.11. Set dlg_match_mode parameter
+...
+modparam("dialog", "dlg_match_mode", 1)
+...
+
+6.12. detect_spirals (integer)
+
+   Whether spirals (i.e., messages routed through the proxy multiple
+   times) should be detected.
+
+   If set to 0, spirals will not be detected and result in the generation
+   of a new, possibly dangling dialog structure per occurring spiral. If
+   set to 1, spirals are detected and internally mapped to existing dialog
+   structures.
+
+   Default value is 1.
+
+   Example 1.12. Set detect_spirals parameter
+...
+modparam("dialog", "detect_spirals", 1)
+...
+
+6.13. db_url (string)
+
+   In order to store information about dialogs in a database, a database
+   URL must be specified.
+
+   Default value is “mysql://kamailio:kamailiorw@localhost/kamailio”.
+
+   Example 1.13. Set db_url parameter
+...
+modparam("dialog", "db_url", "dbdriver://username:password@dbhost/dbname")
+...
+
+6.14. db_mode (integer)
+
+   Mode of synchronisation of dialog information from memory to an
+   underlying database (if desired):
+
+   The supported modes are:
+     * 0 - NO_DB - the memory content is not flushed into DB;
+     * 1 - REALTIME - any dialog information changes will be reflected
+       into the database immediately.
+     * 2 - DELAYED - the dialog information changes will be flushed into
+       DB periodically, based on a timer routine.
+     * 3 - SHUTDOWN - the dialog information will be flushed into DB only
+       at shutdown - no runtime updates.
+
+   Default value is “0”.
+
+   Example 1.14. Set db_mode parameter
+...
+modparam("dialog", "db_mode", 1)
+...
+
+6.15. db_update_period (integer)
+
+   The interval (seconds) at which to update dialogs' information, if the
+   server is configured to store the dialog information at a given
+   interval. Too short an interval will generate intensive database
+   operations, while an excessively long one will miss dialogs with a
+   short lifetime.
+
+   Default value is “60” seconds.
+
+   Example 1.15. Set db_update_period parameter
+...
+modparam("dialog", "db_update_period", 120)
+...
+
+6.16. db_fetch_rows (integer)
+
+   The number of the rows to be fetched at once from database when loading
+   the dialog records at startup from the database. This value can be used
+   to tune the load time at startup. For 1MB of private memory (default),
+   it should be below 400. The database driver must support the
+   fetch_result() capability. A value of 0 means the database fetch is not
+   limited.
+
+   Default value is “200”.
+
+   Example 1.16. Set db_fetch_rows parameter
+...
+modparam("dialog", "db_fetch_rows", 500)
+...
+
+6.17. db_skip_load (integer)
+
+   Set db_skip_load to 1, to skip the loading of dialog data from the
+   database.
+
+   Default value is “0” ( not skipped ).
+
+   Example 1.17. Set db_skip_load parameter
+...
+modparam("dialog", "db_skip_load", 1)
+...
+
+6.18. table_name (string)
+
+   Database table name used for storing dialog information.
+
+   Default value is “dialog”.
+
+   Example 1.18. Set table_name parameter
+...
+modparam("dialog", "table_name", "my_dialog")
+...
+
+6.19. call_id_column (string)
+
+   The column name in the database to store the dialog call-id.
+
+   Default value is “callid”.
+
+   Example 1.19. Set call_id_column parameter
+...
+modparam("dialog", "call_id_column", "callid_c_name")
+...
+
+6.20. from_uri_column (string)
+
+   The column name in the database to store the caller's SIP address
+   (URI).
+
+   Default value is “from_uri”.
+
+   Example 1.20. Set from_uri_column parameter
+...
+modparam("dialog", "from_uri_column", "from_uri_c_name")
+...
+
+6.21. from_tag_column (string)
+
+   The column name in the database to store the From header tag from the
+   INVITE request.
+
+   Default value is “from_tag”.
+
+   Example 1.21. Set from_tag_column parameter
+...
+modparam("dialog", "from_tag_column", "from_tag_c_name")
+...
+
+6.22. to_uri_column (string)
+
+   The column name in the database to store the callee's SIP address
+   (URI).
+
+   Default value is “to_uri”.
+
+   Example 1.22. Set to_uri_column parameter
+...
+modparam("dialog", "to_uri_column", "to_uri_c_name")
+...
+
+6.23. to_tag_column (string)
+
+   The column name in the database to store the To header tag from the 200
+   OK response to the INVITE request, if present.
+
+   Default value is “to_tag”.
+
+   Example 1.23. Set to_tag_column parameter
+...
+modparam("dialog", "to_tag_column", "to_tag_c_name")
+...
+
+6.24. from_cseq_column (string)
+
+   The column name in the database to store the Cseq from caller side.
+
+   Default value is “caller_cseq”.
+
+   Example 1.24. Set from_cseq_column parameter
+...
+modparam("dialog", "from_cseq_column", "from_cseq")
+...
+
+6.25. to_cseq_column (string)
+
+   The column name in the database to store the cseq from callee side.
+
+   Default value is “callee_cseq”.
+
+   Example 1.25. Set to_cseq_column parameter
+...
+modparam("dialog", "to_cseq_column", "to_cseq")
+...
+
+6.26. from_route_column (string)
+
+   The column name in the database to store the route records from caller
+   side (proxy to caller).
+
+   Default value is “caller_route_set”.
+
+   Example 1.26. Set from_route_column parameter
+...
+modparam("dialog", "from_route_column", "rroute_from")
+...
+
+6.27. to_route_column (string)
+
+   The column name in the database to store the route records from callee
+   side (proxy to callee).
+
+   Default value is “callee_route_set”.
+
+   Example 1.27. Set to_route_column parameter
+...
+modparam("dialog", "to_route_column", "rroute_to")
+...
+
+6.28. from_contact_column (string)
+
+   The column name in the database to store the caller's contact uri.
+
+   Default value is “caller_contact”.
+
+   Example 1.28. Set from_contact_column parameter
+...
+modparam("dialog", "from_contact_column", "from_contact_uri")
+...
+
+6.29. to_contact_column (string)
+
+   The column name in the database to store the callee's contact uri.
+
+   Default value is “callee_contact”.
+
+   Example 1.29. Set to_contact_column parameter
+...
+modparam("dialog", "to_contact_column", "to_contact_uri")
+...
+
+6.30. from_sock_column (string)
+
+   The column name in the database to store the information about the
+   local interface receiving the traffic from caller.
+
+   Default value is “caller_sock”.
+
+   Example 1.30. Set from_sock_column parameter
+...
+modparam("dialog", "from_sock_column", "socket_from")
+...
+
+6.31. to_sock_column (string)
+
+   The column name in the database to store information about the local
+   interface receiving the traffic from callee.
+
+   Default value is “callee_sock”.
+
+   Example 1.31. Set to_sock_column parameter
+...
+modparam("dialog", "to_sock_column", "socket_to")
+...
+
+6.32. h_id_column (string)
+
+   The column name in the database to store the dialogs' hash id
+   information.
+
+   Default value is “hash_id”.
+
+   Example 1.32. Set h_id_column parameter
+...
+modparam("dialog", "h_id_column", "hash_id_c_name")
+...
+
+6.33. h_entry_column (string)
+
+   The column name in the database to store the dialog's hash entry
+   information.
+
+   Default value is “hash_entry”.
+
+   Example 1.33. Set h_entry_column parameter
+...
+modparam("dialog", "h_entry_column", "h_entry_c_name")
+...
+
+6.34. state_column (string)
+
+   The column name in the database to store the dialog's state
+   information.
+
+   Default value is “state”.
+
+   Example 1.34. Set state_column parameter
+...
+modparam("dialog", "state_column", "state_c_name")
+...
+
+6.35. start_time_column (string)
+
+   The column name in the database to store the dialog's start time
+   information.
+
+   Default value is “start_time”.
+
+   Example 1.35. Set start_time_column parameter
+...
+modparam("dialog", "start_time_column", "start_time_c_name")
+...
+
+6.36. timeout_column (string)
+
+   The column name in the database to store the dialog's timeout.
+
+   Default value is “timeout”.
+
+   Example 1.36. Set timeout_column parameter
+...
+modparam("dialog", "timeout_column", "timeout_c_name")
+...
+
+6.37. sflags_column (string)
+
+   The column name in the database to store the dialog script flags.
+
+   Default value is “sflags”.
+
+   Example 1.37. Set sflags_column parameter
+...
+modparam("dialog", "sflags_column", "s_flags")
+...
+
+6.38. toroute_name_column (string)
+
+   The column name in the database to store the index of the route to be
+   executed at timeout.
+
+   Default value is “toroute_name”.
+
+   Example 1.38. Set toroute_name_column parameter
+...
+modparam("dialog", "toroute_name_column", "timeout_route")
+...
+
+6.39. vars_table_name (string)
+
+   If you want to store the dialog variables (“$dlg_var(name)”) for a
+   dialog in a database a table name must be specified.
+
+   Default value is “dialog_vars”.
+
+   Example 1.39. Set vars_table_name parameter
+...
+modparam("dialog", "vars_table_name", "my_dialog_vars")
+...
+
+6.40. vars_h_id_column (string)
+
+   The column name in the database to store the dialog's hash id
+   information (as a reference to the dialog table).
+
+   Default value is “hash_id”.
+
+   Example 1.40. Set vars_h_id_column parameter
+...
+modparam("dialog", "vars_h_id_column", "vars_h_id_name")
+...
+
+6.41. vars_h_entry_column (string)
+
+   The column name in the database to store the dialog's hash entry
+   information (as a reference to the dialog table).
+
+   Default value is “hash_entry”.
+
+   Example 1.41. Set vars_h_entry_column parameter
+...
+modparam("dialog", "vars_h_entry_column", "vars_h_entry_name")
+...
+
+6.42. vars_key_column (string)
+
+   The column name in the database to store the names (keys) of a dialog
+   variable.
+
+   Default value is “dialog_key”.
+
+   Example 1.42. Set vars_key_column parameter
+...
+modparam("dialog", "vars_key_column", "vars_key_name")
+...
+
+6.43. vars_value_column (string)
+
+   The column name in the database to store the values of a dialog
+   variable.
+
+   Default value is “dialog_value”.
+
+   Example 1.43. Set vars_value_column parameter
+...
+modparam("dialog", "vars_value_column", "vars_value_name")
+...
+
+6.44. profiles_with_value (string)
+
+   List of names for profiles with values, separated with semi-colon ";".
+
+   Default value is “empty”.
+
+   Example 1.44. Set profiles_with_value parameter
+...
+modparam("dialog", "profiles_with_value", "caller ; my_profile")
+...
+
+6.45. profiles_no_value (string)
+
+   List of names for profiles without values, separated with semi-colon
+   ";".
+
+   Default value is “empty”.
+
+   Example 1.45. Set profiles_no_value parameter
+...
+modparam("dialog", "profiles_no_value", "inbound ; outbound")
+...
+
+6.46. bridge_controller (string)
+
+   SIP address to be used in From header when initiating a call bridge.
+
+   Default value is “sip:[email protected]”.
+
+   Example 1.46. Set bridge_controller parameter
+...
+modparam("dialog", "bridge_controller", "sip:[email protected]")
+...
+
+6.47. bridge_contact (string)
+
+   SIP address to be used in Contact header when doing a call bridge.
+
+   Default value is “sip:[email protected]:5060”.
+
+   Example 1.47. Set bridge_contact parameter
+...
+modparam("dialog", "bridge_contact", "sip:[email protected]:5060")
+...
+
+6.48. initial_cbs_inscript (int)
+
+   If the initial dialog callbacks (i.e., DLGCB_CREATED and
+   DLGCB_SPIRALED) should be executed in-script or post-script. If
+   dlg_manage() is not used, the setting of this parameter does not
+   matter; otherwise, initial callbacks will be executed directly after
+   dlg_manage() is called if this parameter is enabled. If it is disabled,
+   initial callback execution will be postponed until configuration script
+   execution completes.
+
+   The supported values are:
+     * 0 - POST-SCRIPT - execute initial callbacks after the script
+       completes;
+     * 1 - IN-SCRIPT - execute initial callbacks during script execution,
+       i.e., right after dlg_manage() is called;
+
+   Default value is “1”.
+
+   Example 1.48. Set initial_cbs_inscript parameter
+...
+modparam("dialog", "initial_cbs_inscript", 0)
+...
+
+6.49. send_bye (int)
+
+   If set to 1, BYE requests will be sent out for each dialog that timed
+   out. It is an alternative to $dlg_ctx(timeout_bye)=1 for all dialogs.
+
+   Default value is “0”.
+
+   Example 1.49. Set send_bye parameter
+...
+modparam("dialog", "send_bye", 1)
+...
+
+6.50. wait_ack (int)
+
+   If set to 1, dialog will be kept a bit longer in memory in order to
+   absorb the ACK negative replies of initial INVITE. If not, the dialog
+   is destroyed when negative reply is sent out (less internal
+   complexity).
+
+   Default value is “1”.
+
+   Example 1.50. Set wait_ack parameter
+...
+modparam("dialog", "wait_ack", 0)
+...
+
+6.51. ka_timer (int)
+
+   Keep-alive timer step - how often to execute the callback to send
+   dialog keep alives (SIP OPTIONS requests within dialog). The value
+   represents the number of seconds.
+
+   Default value is “0” (no keep alive).
+
+   Example 1.51. Set ka_timer parameter
+...
+modparam("dialog", "ka_timer", 10)
+...
+
+6.52. ka_interval (int)
+
+   The interval between keep alives within dialog (SIP OPTIONS requests),
+   sent to caller or callee. The keep alive request will be sent by the
+   first callback fired by KA timer after the ka_interval elapsed from
+   dialog setup or previous keep-alive. The value represents the number of
+   seconds.
+
+   If the requests times out (generating a 408) or if the UA responds with
+   481 the lifetime is set to 10 seconds. When lifetime expires the dialog
+   will be terminated. Any other response (including error responses) will
+   reset the timers.
+
+   Default value is “0” (no keep alive). The lowest settable interval is
+   30 seconds.
+
+   Example 1.52. Set ka_interval parameter
+...
+modparam("dialog", "ka_interval", 300)
+...
+
+6.53. ka_failed_limit (int)
+
+   The number of failed keep-alive requests that is accepted before
+   generating a dialog timeout.
+
+   Default value is “1”.
+
+   Example 1.53. Set ka_failed_limit parameter
+...
+modparam("dialog", "ka_failed_limit", 5)
+...
+
+6.54. timeout_noreset (int)
+
+   If set to 1, the dialog timeout won't be reset each time a sequential
+   request is processed. It is an alternative to
+   dlg_set_property("timeout-noreset") for all dialogs.
+
+   Default value is “0”.
+
+   Example 1.54. Set timeout_noreset parameter
+...
+modparam("dialog", "timeout_noreset", 1)
+...
+
+6.55. timer_procs (int)
+
+   If set to 1, the dialog module will start a separate dialog timer
+   process to execute dialog timeout tasks. The default is to use the core
+   timer process.
+
+   Default value is “0” (use core timer process).
+
+   Example 1.55. Set timer_procs parameter
+...
+modparam("dialog", "timer_procs", 1)
+...
+
+6.56. enable_dmq (int)
+
+   If set to 1, the dialog will be synced via dmq. For now, only very
+   basic dialog info is shared, just enough to have synced profiles.
+   Notably, it is not possible to send in-dialog requests on any but the
+   original proxy instance.
+
+   Default value is “0”.
+
+   Example 1.56. Set enable_dmq parameter
+...
+modparam("dialog", "enable_dmq", 1)
+...
+
+6.57. track_cseq_updates (int)
+
+   Enable the callbacks for tracking if CSeq number needs to be updated.
+   It is the case when the INVITE has to be authenticated to downstream
+   provider using uac_auth() from uac module.
+
+   This is done only for requests in downstream direction. The CSeq
+   difference is stored in $dlg_var(cseq_diff), be sure this variable is
+   not overwritten via config operation.
+
+   Default value is “0” (disabled).
+
+   Example 1.57. Set track_cseq_updates parameter
+...
+modparam("dialog", "track_cseq_updates", 1)
+...
+
+6.58. lreq_callee_headers (string)
+
+   SIP headers to be added when sending local generated requests (e.g.,
+   BYE) to callee. It can be useful when you use topoh module with call-id
+   masking (see the docs of topoh module).
+
+   Default value is “null”.
+
+   Example 1.58. Set lreq_callee_headers parameter
+...
+modparam("dialog", "lreq_callee_headers", "TH: dlh\r\n")
+...
+
+6.59. 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: 'dialog:start', 'dialog:end', 'dialog:failed'. It is
+   also executed if '$dlg_ctx(timeout_route)' is set, the callback
+   function being executed with the variable value as parameter.
+
+   Default value is 'empty' (no function is executed for events).
+
+   Example 1.59. Set event_callback parameter
+...
+modparam("dialog", "event_callback", "ksr_dialog_event")
+...
+-- event callback function implemented in Lua
+function ksr_dialog_event(evname)
+        KSR.info("===== dialog module triggered event: " .. evname .. "\n");
+        return 1;
+end
+...
+
+6.60. h_id_start (int)
+
+   Set the offset to be used for generating dialog internal hash id. If
+   set to -1, the h_id_start is set to the value of the server_id global
+   parameter.
+
+   Default value is “0”.
+
+   Example 1.60. Set h_id_start parameter
+...
+modparam("dialog", "h_id_start", 5)
+...
+
+6.61. h_id_step (int)
+
+   Set the step to increment the dialog internal hash id.
+
+   If the value is greater than 1, the internal hash id is generated with
+   the rule: h_id_start + N * h_id_step. The first value of N is randomly
+   selected at startup, then incremented by 1 for each new dialog. Setting
+   h_id_start and h_id_step to non-default values should be done when
+   using dlg_db_load_callid(...) or dlg_db_load_extra() to load dialog
+   records generated by another Kamailio instance, making also sure that
+   those Kamailio nstances are not going to generate overalapping dialog
+   hash id values by using different h_id_start and the same h_id_step
+   (h_id_step has to be greater than the maximum value of h_id_start).
+
+   Default value is “1”.
+
+   Example 1.61. Set h_id_step parameter
+...
+modparam("dialog", "h_id_step", 10)
+...
+
+6.62. keep_proxy_rr (string)
+
+   Whether to keep the record-route header added by the proxy. When
+   enabled, it will keep this proxy's record-route header from the reply.
+   The result is that generated requests like the BYE from the dlg_end_dlg
+   mi function will pass through the proxy (looped).
+
+   Valid values are:
+     * 0 - Don't keep any proxy Record-Route headers
+     * 1 - Keep Record-route headers for the callee leg
+     * 2 - Keep Record-route headers for the caller leg
+     * 3 - Keep Record-route headers for both legs
+
+   Default value is “0”.
+
+   Example 1.62. Set dlg_keep_proxy_rr parameter
+...
+modparam("dialog", "keep_proxy_rr", 1)
+...
+
+7. Functions
+
+   7.1. set_dlg_profile(profile,[value])
+   7.2. unset_dlg_profile(profile,[value])
+   7.3. is_in_profile(profile,[value])
+   7.4. get_profile_size(profile,[value],size)
+   7.5. dlg_isflagset(flag)
+   7.6. dlg_setflag(flag)
+   7.7. dlg_resetflag(flag)
+   7.8. dlg_bye(side)
+   7.9. dlg_refer(side, address)
+   7.10. dlg_manage()
+   7.11. dlg_bridge(from, to, op)
+   7.12. dlg_get(callid, ftag, ttag)
+   7.13. is_known_dlg()
+   7.14. dlg_set_timeout(timeout [, h_entry, h_id])
+   7.15. dlg_set_timeout_by_profile(profile, [value], timeout)
+   7.16. dlg_set_property(attr)
+   7.17. dlg_remote_profile(cmd, profile, value, uid, expires)
+   7.18. dlg_set_ruri()
+   7.19. dlg_db_load_callid(cival)
+   7.20. dlg_db_load_extra()
+
+7.1.  set_dlg_profile(profile,[value])
+
+   Inserts the current dialog into a profile. Note that if the profile
+   does not support values, they will be silently discarded. Also, there
+   is no check for inserting the same dialog into the same profile
+   multiple times.
+
+   Meaning of the parameters is as follows:
+     * profile - name of the profile to be added to;
+     * value (optional) - string value to define the membership of the
+       dialog in the profile. Note that the profile must support values.
+       Pseudo-variables are supported.
+
+   This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, REPLY_ROUTE
+   and FAILURE_ROUTE.
+
+   Example 1.63. set_dlg_profile usage
+...
+set_dlg_profile("inbound_call");
+set_dlg_profile("caller","$fu");
+...
+
+7.2.  unset_dlg_profile(profile,[value])
+
+   Removes the current dialog from a profile.
+
+   Meaning of the parameters is as follows:
+     * profile - name of the profile to be removed from;
+     * value (optional) - string value to define the belonging of the
+       dialog to the profile - note that the profile must support values.
+       Pseudo-variables are supported.
+
+   This function can be used from BRANCH_ROUTE, REPLY_ROUTE and
+   FAILURE_ROUTE.
+
+   Example 1.64. unset_dlg_profile usage
+...
+unset_dlg_profile("inbound_call");
+unset_dlg_profile("caller","$fu");
+...
+
+7.3.  is_in_profile(profile,[value])
+
+   Checks if the current dialog belongs to a profile. If the profile is
+   defined with values, then the check is also matching with the specific
+   value provided as parameter.
+
+   Note that if the profile is not defined with support for values, the
+   value parameter will be silently discarded.
+
+   Meaning of the parameters is as follows:
+     * profile - name of the profile to be checked against;
+     * value (optional) - string value to be matched during the check.
+       Pseudo-variables are supported.
+
+   This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, REPLY_ROUTE
+   and FAILURE_ROUTE.
+
+   Example 1.65. is_in_profile usage
+...
+if (is_in_profile("inbound_call")) {
+        log("this request belongs to a inbound call\n");
+}
+...
+if (is_in_profile("caller","XX")) {
+        log("this request belongs to a call of user XX\n");
+}
+...
+
+7.4.  get_profile_size(profile,[value],size)
+
+   Returns the number of dialogs belonging to a profile. If the profile
+   supports values, the check can be reinforced to take into account a
+   specific value, i.e. how many dialogs were inserted into the profile
+   with a specific value. If no value is passed, only the membership of
+   the dialog in the profile per se is checked. Note that if the profile
+   does not support values, the value parameter will be silently
+   discarded.
+
+   Meaning of the parameters is as follows:
+     * profile - name of the profile to get the size for;
+     * value (optional) - string value to further restrict the check.
+       Pseudo-variables are supported;
+     * size - an AVP or script variable to return the profile size in.
+
+   This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, REPLY_ROUTE
+   and FAILURE_ROUTE.
+
+   Example 1.66. get_profile_size usage
+...
+if(get_profile_size("inbound_call","$avp(size)"))
+    xlog("currently there are $avp(size) inbound calls\n");
+...
+if(get_profile_size("caller","$fu","$avp(size)"))
+    xlog("currently, the user $fu has $avp(size) active outgoing calls\n");
+...
+
+7.5.  dlg_isflagset(flag)
+
+   Check if the dialog flag is set or not.
+
+   Meaning of the parameters is as follows:
+     * flag - index of the flag - can be pseudo-variable.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.67. dlg_isflagset usage
+...
+if(dlg_isflagset("1"))
+{
+    ...
+}
+...
+
+7.6.  dlg_setflag(flag)
+
+   Set a dialog flag.
+
+   Meaning of the parameters is as follows:
+     * flag - index of the flag - can be pseudo-variable.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.68. dlg_setflag usage
+...
+dlg_setflag("1");
+...
+
+7.7.  dlg_resetflag(flag)
+
+   Reset the dialog flag.
+
+   Meaning of the parameters is as follows:
+     * flag - index of the flag - can be pseudo-variable.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.69. dlg_resetflag usage
+...
+redlg_setflag("1");
+...
+
+7.8.  dlg_bye(side)
+
+   Send BYE to both parties of a dialog.
+
+   Meaning of the parameters is as follows:
+     * side - where to send the BYE. It can be: 'caller', 'callee', or
+       'all' (send to both sides).
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.70. dlg_bye usage
+...
+dlg_bye("all");
+...
+
+7.9.  dlg_refer(side, address)
+
+   Refer the 'side' to a new SIP 'address'.
+
+   Meaning of the parameters is as follows:
+     * side - which side of the dialog to REFER. It can be: 'caller' or
+       'callee'.
+     * address - SIP address to refer to.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.71. dlg_refer usage
+...
+dlg_refer("caller", "sip:[email protected]");
+...
+
+7.10.  dlg_manage()
+
+   Process current SIP request with dialog module. It is an alternative to
+   setting dialog flag for initial INVITE and Route-parameter-callback
+   execution for within-dialog requests.
+
+   This function can be used from REQUEST_ROUTE.
+
+   Example 1.72. dlg_manage usage
+...
+modparam("dialog", "default_timeout", 100)
+...
+request_route {
+...
+    if(is_method("INVITE") && !has_totag())
+    {
+        $dlg_ctx(timeout_route) = "DLGTIMEOUT";
+        $dlg_ctx(timeout_bye) = 1;
+    }
+    dlg_manage();
+...
+}
+...
+
+7.11.  dlg_bridge(from, to, op)
+
+   Bridge 'from' SIP address to 'to' SIP address via outbound proxy 'op'.
+
+   Meaning of the parameters is as follows:
+     * from - SIP address of first side to call.
+     * to - SIP address to refer “from” to.
+     * op - outbound proxy SIP address.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.73. dlg_bridge usage
+...
+dlg_bridge("sip:[email protected]", "sip:[email protected]",
+   "sip:kamailio.org:5080");
+...
+
+7.12.  dlg_get(callid, ftag, ttag)
+
+   Search and set current dialog based on Call-ID, From-Tag and To-Tag
+   parameters.
+
+   Meaning of the parameters is as follows:
+     * callid - SIP call-id.
+     * ftag - SIP From tag.
+     * ttag - SIP To tag.
+
+   This function can be used from BRANCH_ROUTE, REQUEST_ROUTE,
+   ONREPLY_ROUTE and FAILURE_ROUTE.
+
+   Example 1.74. dlg_get usage
+...
+if(dlg_get("abcdef", "123", "456"))
+{
+        dlg_bye("all");
+}
+...
+
+7.13.  is_known_dlg()
+
+   This function checks if the current SIP message being processed belongs
+   to any transaction within an active dialog that the dialog module is
+   currently tracking. This is a check for tracking of any kind, without
+   regard to profiles.
+
+   This function has numerous potential applications, among which is that
+   it can be used to strengthen security for loose-routing sequential
+   (in-dialog) requests or responses to them, as by providing a
+   preventative check against spoofing on the proxy level instead of
+   leaving the issue purely to the receiving UA.
+
+   This function can be used from REQUEST_ROUTE, BRANCH_ROUTE, REPLY_ROUTE
+   and FAILURE_ROUTE.
+
+   Example 1.75. is_known_dlg() usage
+...
+if(!uri == myself) {
+        if(is_known_dlg()) {
+                xlog("Request $rm from $ci is in-dialog\n");
+        }
+}
+...
+
+7.14.  dlg_set_timeout(timeout [, h_entry, h_id])
+
+   Set the dialog timeout. Dialog timeout will be updated if it was
+   already set. If h_entry and h_id parameters are not provided, the
+   dialog will be searched based on (callid, fromtag, totag) of currently
+   processed SIP message.
+
+   Meaning of the parameters is as follows:
+     * timeout - the interval in seconds after which the dialog will time
+       out.
+     * h_entry - h_entry value of the iternal dialog identifier.
+     * h_id - h_id valye if the internal dialog identifier.
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.76. dlg_set_timeout usage
+...
+if(dlg_set_timeout("180", "123", "456"))
+{
+    ...
+}
+...
+
+7.15.  dlg_set_timeout_by_profile(profile, [value], timeout)
+
+   Like dlg_set_timeout(), but simultaneously sets the timeout of all
+   dialogs in a given profile. Can be constrained by profile value.
+
+   Meaning of the parameters is as follows:
+     * profile - The dialog profile across which to apply the timeout.
+       value (optional) - The profile value to use when applying the
+       dialog timeout.
+       timeout - the interval in seconds after which the dialog will time
+       out.
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.77. dlg_set_timeout_by_profile usage
+...
+# All dialogs belonging to user abc123 (tracked via set_dlg_profile())
+# will be timed out in 3 seconds.
+
+dlg_set_timeout_by_profile("users", "abc123", "3");
+...
+
+7.16.  dlg_set_property(attr)
+
+   Set a dialog property - an attribute that enable/disable various
+   behaviours (e.g., sending keep alive requests).
+
+   Meaning of the parameters is as follows:
+     * attr - name of property. It can be:
+          + 'ka-src' - send keep alive OPTION requests to caller
+          + 'ka-dst' - send keep alive OPTION requests to callee
+          + 'timeout-noreset' - don't reset timeout on in-dialog messages
+            reception
+
+   If keep alive is enabled for a dialog, the module will send SIP OPTIONS
+   requests with CSeq lower or equal than last request within dialog, with
+   the scope of detecting if the destination is still in the call. If the
+   keep alive request results in a local timeout or '481 Call
+   Leg/Transaction Does Not Exist', then the dialog is ended from the
+   server.
+
+   If 'timeout-noreset' is set, dialog timeout won't be reset upon
+   reception of in-dialog messages (default behavior).
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.78. dlg_set_property usage
+...
+dlg_set_property("ka-src");
+dlg_set_property("ka-dst");
+dlg_set_property("timeout-noreset");
+...
+
+7.17.  dlg_remote_profile(cmd, profile, value, uid, expires)
+
+   Manage remote profile via config file. A remote profile item is
+   considered when the dialog is not managed by this server instance. The
+   notification to add/remove can be received via SIP or a RPC command,
+   the operation can be then triggered from configuration file. This
+   should allow counting active dialogs in a profile that are managed by
+   multiple SIP server instances.
+
+   Meaning of the parameters is as follows:
+     * cmd - the operations to do: add - add an item in profile; rm -
+       remove an item from profile
+     * profile - name of profile
+     * value - value for profile (if no value is needed for that profile,
+       use an empty string.
+     * expires - absolute time (unix timestamp) when this profile item
+       should be removed automatically (time based), if still in the
+       profile
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.79. dlg_remote_profile usage
+...
+$var(exp) = 3600 + $Ts;
+dlg_remote_profile("add", "caller", "test", "$sruid", "$var(exp)");
+...
+
+7.18.  dlg_set_ruri()
+
+   This function sets the R-URI with the corresponding endpoint address
+   stored in dialog structure (i.e., its Contact field).
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.80. dlg_set_ruri() usage
+...
+if(has_totag() and is_present_hf("Route") and uri==myself ) {
+        if(dlg_set_ruri()) {
+                xlog("Request URI changed from [$ou] to dlg value: [$ru]\n");
+        }
+}
+...
+
+7.19.  dlg_db_load_callid(cival)
+
+   Load dialog record from database matching on Call-Id provided as
+   parameter.
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.81. dlg_db_load_callid() usage
+...
+if(has_totag()) {
+    if(!is_known_dlg()) {
+        dlg_db_load_callid("$ci");
+            if(!is_known_dlg()) {
+            xlog("no dialog found with callid: $ci\n");
+        }
+    }
+}
+...
+
+7.20.  dlg_db_load_extra()
+
+   Load all dialog records from database that are not in memory of the
+   current Kamailio instance.
+
+   This function can be used from ANY_ROUTE.
+
+   Example 1.82. dlg_db_load_extra() usage
+...
+if(has_totag()) {
+    if(!is_known_dlg()) {
+        dlg_db_load_extra();
+            if(!is_known_dlg()) {
+            xlog("no dialog found with callid: $ci\n");
+        }
+    }
+}
+...
+
+8. Statistics
+
+   8.1. active_dialogs
+   8.2. early_dialogs
+   8.3. processed_dialogs
+   8.4. expired_dialogs
+   8.5. failed_dialogs
+
+8.1. active_dialogs
+
+   Returns the number of current active dialogs (may be confirmed or not).
+
+8.2. early_dialogs
+
+   Returns the number of early dialogs.
+
+8.3. processed_dialogs
+
+   Returns the total number of processed dialogs (terminated, expired or
+   active) from the startup.
+
+8.4. expired_dialogs
+
+   Returns the total number of expired dialogs from the startup.
+
+8.5. failed_dialogs
+
+   Returns the number of failed dialogs.
+
+9. RPC Commands
+
+   9.1. dlg.list
+   9.2. dlg.list_ctx
+   9.3. dlg.list_match
+   9.4. dlg.list_match_ctx
+   9.5. dlg.dlg_list
+   9.6. dlg.dlg_list_ctx
+   9.7. dlg.terminate_dlg
+   9.8. dlg.end_dlg
+   9.9. dlg.profile_get_size
+   9.10. dlg.profile_list
+   9.11. dlg.bridge_dlg
+   9.12. dlg.stats_active
+   9.13. dlg.is_alive
+
+9.1. dlg.list
+
+   Lists the description of all dialogs (active calls).
+
+   Name: dlg.list
+
+   RPC Command Format:
+...
+kamcmd dlg.list
+...
+
+9.2. dlg.list_ctx
+
+   The same as the “dlg_list” but including in the dialog description the
+   associated context from modules sitting on top of the dialog module.
+
+   Name: dlg.list_ctx
+
+   RPC Command Format:
+...
+kamcmd dlg.list_ctx
+...
+
+9.3. dlg.list_match
+
+   Lists the details of matching dialogs. The paramters specify the
+   matching key, operator, value and optionally a limit of matched
+   dialogs.
+
+   Name: dlg.list_match
+
+   Parameters:
+     * mkey - matching key. It can be: 'ruri' - match against R-URI of the
+       dialog; 'furi' - match against From header URI of the dialog;
+       'turi' - match against the To header URI of the dialog; 'callid' -
+       match against Call-Id value.
+     * mop - matching operator. It can be: 'eq' - match using string
+       comparison; 're' - match using regular expression; 'sw' - match
+       using starts-with (prefix) comparison.
+     * mval - matching value.
+
+   RPC Command Format:
+...
+kamcmd dlg.list_match furi eq sip:[email protected] 2
+...
+kamcmd dlg.list_match furi sw sip:alice@
+...
+
+9.4. dlg.list_match_ctx
+
+   Similar to “dlg.list_match”, but including in the attributes associated
+   with the dialog context from modules sitting on top of the dialog
+   module.
+
+   Name: dlg.list_match_ctx
+
+   RPC Command Format:
+...
+kamcmd dlg.list_match_ctx furi sw sip:alice@
+...
+
+9.5. dlg.dlg_list
+
+   Lists the description of one dialog. The dialog identifiers are to be
+   passed as parameter (callid and optionally fromtag).
+
+   Name: dlg.dlg_list
+
+   Parameters:
+     * callid callid of the dialog to be listed.
+     * from_tag from tag (as per initial request) of the dialog to be
+       listed.
+
+   RPC Command Format:
+...
+kamcmd dlg.list [email protected] AAdfeEFF33
+...
+kamcmd dlg.list [email protected]
+...
+
+9.6. dlg.dlg_list_ctx
+
+   The same as the “dlg.list_list” but including in the dialog description
+   the associated context from modules sitting on top of the dialog
+   module.
+
+   Name: dlg.dlg_list_ctx
+
+   Parameters: see “dlg_list”
+
+   RPC Command Format:
+...
+kamcmd dlg.list_ctx [email protected] AAdfeEFF33
+...
+kamcmd dlg.list_ctx [email protected]
+...
+
+9.7. dlg.terminate_dlg
+
+   Terminates an ongoing dialog by sending BYE in both directions,
+   matching the dialog on call-id, from tag and to tag.
+
+   Name: dlg.terminate_dlg
+
+   Parameters:
+     * callid - callid of dialog to be terminated
+     * from_tag - from tag of the dialog to terminated
+     * to_tag - to tag of the dialog to terminated
+
+   The command works only for confirmed dialogs.
+
+   RPC Command Format:
+                kamcmd dlg.terminate_dlg callid12345 fromtag123 totag123
+
+9.8. dlg.end_dlg
+
+   Terminates an ongoing dialog by sending BYE in both directions.
+
+   Name: dlg.end_dlg
+
+   Parameters:
+     * h_entry - hash entry of the dialog in the internal dialog table
+     * h_id - hash id of the dialog on the hash entry
+     * extra_hdrs - (optional) string containg extra headers (full format)
+       to be added to the BYE requests.
+
+   The values for the h_entry and h_id can be get via the dlg_list RPC
+   command.
+
+   RPC Command Format:
+...
+kamcmd dlg.end_dlg 342 56
+...
+
+9.9. dlg.profile_get_size
+
+   Returns the number of dialogs belonging to a profile. If the profile
+   supports values, the check can be reinforced to take into account a
+   specific value - how many dialogs were inserted into the profile with a
+   specific value. If no value is passed, only the simply belonging of the
+   dialog to the profile is checked. Note that if the profile does not
+   support values, the value parameter will be silently discarded.
+
+   Name: dlg.profile_get_size
+
+   Parameters:
+     * profile - name of the profile to get the value for.
+     * value (optional)- string value to further restrict the check;
+
+   RPC Command Format:
+...
+kamcmd dlg.dlg.profile_get_size inbound_calls
+...
+
+9.10. dlg.profile_list
+
+   Lists all the dialogs belonging to a profile. If the profile supports
+   values, the check can be reinforced to take into account a specific
+   value, i.e. list only the dialogs that were inserted into the profile
+   with that specific value. If no value is passed, all dialogs belonging
+   to the profile will be listed. Note that if the profile does not
+   supports values, this will be silently discarded.
+
+   Name: dlg.profile_list
+
+   Parameters:
+     * profile - name of the profile to list the dialog for.
+     * value (optional)- string value to further restrict the check;
+
+   RPC Command Format:
+...
+kamcmd dlg.profile_list inbound_calls
+...
+
+9.11. dlg.bridge_dlg
+
+   Bridge two SIP addresses into a call using INVITE(hold)-REFER-BYE
+   mechanism.
+
+   Name: dlg.bridge_dlg
+
+   Parameters:
+     * from - SIP address to initiate the call
+     * to - SIP address to refer 'from' to
+     * op (optional) - outbound proxy SIP address. If its value is set to
+       '.' (dot), then it is ignored (like it would not have been
+       provided).
+     * body (optional) - SDP body for initial INVITE. If its value is set
+       to '.' (dot), then it is ignored (like it would not have been
+       provided). If body is not set via RPC command parameter, then an
+       internal generated SDP with G711a and G711u is used. If its value
+       is set to '' (empty string) or '_' (underline), then the INVITE is
+       sent without an SDP body.
+
+   RPC Command Format:
+...
+kamcmd dlg.bridge_dlg _from_ _to_ _op_
+...
+
+9.12. dlg.stats_active
+
+   Get stats about active dialogs by scanning internal list of dialogs
+   (not relying on core stats framework).
+
+   Name: dlg.stats_active
+
+   Parameters: none.
+
+   Returned fields
+     * starting - initial INVITE has been processed, no ringing or 1xx has
+       been received.
+     * connecting - initial INVITE was forwarded and rining or 1xx has
+       been received.
+     * answering - initial INVITE received 200ok, but ACK was not handled
+       yet.
+     * ongoing - ongoing active dialog, after the ACK was processed.
+     * all - all active dialogs, respectively the sum of the above values.
+
+   RPC Command Format:
+...
+kamcmd dlg.stats_active
+...
+
+9.13. dlg.is_alive
+
+   Check whether a dialog matching the parameter is in confirmed state
+   (answered and alive).
+
+   Name: dlg.is_alive
+
+   Parameters:
+     * callid - callid of dialog
+     * from_tag - from tag of the dialog
+     * to_tag - to tag of the dialog
+
+   This command will return error if dialog is not found or not confirmed
+   state (answered).
+
+   RPC Command Format:
+...
+kamcmd dlg.is_alive callid123 fromtag123 totag123
+...
+
+10. Exported Variables
+
+   10.1. $DLG_count
+   10.2. $DLG_status
+   10.3. $DLG_lifetime
+   10.4. $dlg(...)
+   10.5. $dlg_ctx(...)
+   10.6. $dlg_var(key)
+
+10.1. $DLG_count
+
+   Returns the number of current active dialogs (may be confirmed or not).
+
+10.2. $DLG_status
+
+   Returns the status of the dialog corresponding to the processed
+   sequential request. This PV will be available only for sequential
+   requests, after doing loose_route().
+
+   Value may be:
+     * NULL - Dialog not found.
+     * 3 - Confirmed by a final reply but no ACK received yet.
+     * 4 - Confirmed by a final reply and ACK received.
+     * 5 - Dialog ended.
+
+10.3. $DLG_lifetime
+
+   Returns the duration (in seconds) of the dialog corresponding to the
+   processed sequential request. The duration is calculated from the
+   dialog confirmation and the current moment. This PV will be available
+   only for sequential requests, after doing loose_route().
+
+   NULL will be returned if there is no dialog for the request.
+
+10.4. $dlg(...)
+
+   Access to dialog attributes.
+
+10.5. $dlg_ctx(...)
+
+   Access to dialog context attributes.
+
+10.6. $dlg_var(key)
+
+   This is a read/write variable that can be used to store custom values
+   assigned with a dialog (e.g. the URI of a billing-server, an assigned
+   emergency-server). This pseudo-variable will be available only for
+   subsequential requests after doing loose_route().
+
+   Note: You will receive "NULL", if there is no dialog for this request.
+
+11. Event Routes
+
+   11.1. event_route[dialog:start]
+   11.2. event_route[dialog:end]
+   11.3. event_route[dialog:failed]
+
+11.1. event_route[dialog:start]
+
+   Executed when 200 OK reply for INVITE is processed.
+
+11.2. event_route[dialog:end]
+
+   Executed when the BYE for the call is processed or the dialog timed
+   out.
+
+11.3. event_route[dialog:failed]
+
+   Executed when dialog is not completed (300 or greater reply code to
+   INVITE).
+
+Chapter 2. Developer Guide
+
+   Table of Contents
+
+   1. Available Functions
+
+        1.1. register_dlgcb (dialog, type, cb, param, free_param_cb)
+        1.2. terminate_dlg (dlg, hdrs)
+
+1. Available Functions
+
+   1.1. register_dlgcb (dialog, type, cb, param, free_param_cb)
+   1.2. terminate_dlg (dlg, hdrs)
+
+1.1.  register_dlgcb (dialog, type, cb, param, free_param_cb)
+
+   Register a new callback to the dialog.
+
+   Meaning of the parameters is as follows:
+     * struct dlg_cell* dlg - dialog to register callback to. If maybe
+       NULL only for DLGCB_CREATED callback type, which is not a per
+       dialog type.
+     * int type - types of callbacks; more types may be register for the
+       same callback function; only DLGCB_CREATED must be register alone.
+       Possible types:
+          + DLGCB_LOADED
+          + DLGCB_CREATED - called when a new dialog is created - it's a
+            global type (not associated to any dialog)
+          + DLGCB_FAILED - called when the dialog was negatively replied
+            (non-2xx) - it's a per dialog type.
+          + DLGCB_CONFIRMED_NA - called when the dialog is confirmed (2xx
+            replied) but the setup-concluding ACK message from the caller
+            is yet pending - it's a per dialog type.
+          + DLGCB_CONFIRMED - called when the dialog is confirmed (2xx
+            replied) and the setup-concluding ACK message from the caller
+            has been seen - it's a per dialog type.
+          + DLGCB_REQ_WITHIN - called when the dialog matches a sequential
+            request (excluding setup-concluding ACK messages which are
+            handled in DLGCB_CONFIRMED) - it's a per dialog type.
+          + DLGCB_TERMINATED - called when the dialog is terminated via
+            BYE - it's a per dialog type.
+          + DLGCB_TERMINATED_CONFIRMED - called when response to a BYE
+            request is received - it's a per dialog type.
+          + DLGCB_EXPIRED - called when the dialog expires without
+            receiving a BYE - it's a per dialog type.
+          + DLGCB_EARLY - called when the dialog is created in an early
+            state (18x replied) - it's a per dialog type.
+          + DLGCB_RESPONSE_FWDED - called when the dialog matches a reply
+            to the initial INVITE request - it's a per dialog type.
+          + DLGCB_RESPONSE_WITHIN - called when the dialog matches a reply
+            to a subsequent in dialog request - it's a per dialog type.
+          + DLGCB_RPC_CONTEXT - called when the rpc dlg_list_ctx command
+            is invoked - it's a per dialog type.
+          + DLGCB_SPIRALED - called when the dialog matches a spiraling
+            request - it's a per dialog type.
+          + DLGCB_DESTROY
+     * dialog_cb cb - callback function to be called. Prototype is: “void
+       (dialog_cb) (struct dlg_cell* dlg, int type, struct dlg_cb_params *
+       params); ”
+     * void *param - parameter to be passed to the callback function.
+     * param_free callback_param_free - callback function to be called to
+       free the param. Prototype is: “void (param_free_cb) (void *param);”
+
+1.2.  terminate_dlg (dlg, hdrs)
+
+   Terminate a Dialog
+
+   Meaning of parameters is as follows:
+     * struct dlg_cell* dlg - dialog to terminate.
+     * str* hdrs - string containing extra headers (full format) to be
+       added to the BYE requests of the dialog.
+
+Chapter 3. Frequently Asked Questions
+
+   3.1. What happened with “use_tight_match” parameter?
+   3.2. Where can I find more about Kamailio?
+   3.3. Where can I post a question about this module?
+   3.4. How can I report a bug?
+
+   3.1.
+
+   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).
+
+   3.2.
+
+   Where can I find more about Kamailio?
+
+   Take a look at https://www.kamailio.org/.
+
+   3.3.
+
+   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 Kamailio release should be sent to
+   <[email protected]> and e-mails regarding development
+   versions should be sent to <[email protected]>.
+
+   3.4.
+
+   How can I report a bug?
+
+   Please follow the guidelines provided at:
+   https://github.com/kamailio/kamailio/issues.