Browse Source

modules_k/dispatcher: Added outbound_proxy modparam for use with dispatcher pings

- When set the dispatcher pings are routed through an outbound proxy.
- This modparam has no effect on real traffic.
pd 14 năm trước cách đây
mục cha
commit
a201a33815

+ 148 - 133
modules_k/dispatcher/README

@@ -16,11 +16,11 @@ Carsten Bock
 
 
    ng-voice.com
    ng-voice.com
 
 
-   Copyright © 2004 FhG FOKUS
+   Copyright © 2004 FhG FOKUS
 
 
-   Copyright © 2005 Voice Sistem
+   Copyright © 2005 Voice Sistem
 
 
-   Copyright © 2010 Daniel-Constantin Mierla (asipto.com)
+   Copyright © 2010 Daniel-Constantin Mierla (asipto.com)
      __________________________________________________________________
      __________________________________________________________________
 
 
    Table of Contents
    Table of Contents
@@ -62,6 +62,7 @@ Carsten Bock
               3.25. ds_hash_expire (int)
               3.25. ds_hash_expire (int)
               3.26. ds_hash_initexpire (int)
               3.26. ds_hash_initexpire (int)
               3.27. ds_hash_check_interval (int)
               3.27. ds_hash_check_interval (int)
+              3.28. outbound_proxy (str)
 
 
         4. Functions
         4. Functions
 
 
@@ -100,40 +101,41 @@ Carsten Bock
 
 
    List of Examples
    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 the "force_dst" parameter
-   1.9. Set the "flags" parameter
-   1.10. Set the "use_default" parameter
-   1.11. Set the "dst_avp" parameter
-   1.12. Set the "grp_avp" parameter
-   1.13. Set the "cnt_avp" parameter
-   1.14. Set the "dstid_avp" parameter
-   1.15. Set the "attrs_avp" parameter
+   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 the “force_dst� parameter
+   1.9. Set the “flags� parameter
+   1.10. Set the “use_default� parameter
+   1.11. Set the “dst_avp� parameter
+   1.12. Set the “grp_avp� parameter
+   1.13. Set the “cnt_avp� parameter
+   1.14. Set the “dstid_avp� parameter
+   1.15. Set the “attrs_avp� parameter
    1.16. Use $avp(i:273) for hashing:
    1.16. Use $avp(i:273) for hashing:
    1.17. Use combination of PVs for hashing:
    1.17. Use combination of PVs for hashing:
-   1.18. Set the "setid_pvar" parameter
-   1.19. Set the "ds_ping_method" parameter
-   1.20. Set the "ds_ping_from" parameter
-   1.21. Set the "ds_ping_interval" parameter
-   1.22. Set the "ds_probing_threshhold" parameter
-   1.23. Set the "ds_ping_reply_codes" parameter
-   1.24. Set the "ds_probing_mode" parameter
-   1.25. Set the "ds_hash_size" parameter
-   1.26. Set the "ds_hash_expire" parameter
-   1.27. Set the "ds_hash_initexpire" parameter
-   1.28. Set the "ds_hash_check_interval" parameter
-   1.29. ds_select_dst usage
-   1.30. ds_mark_dst usage
+   1.18. Set the “setid_pvar� parameter
+   1.19. Set the “ds_ping_method� parameter
+   1.20. Set the “ds_ping_from� parameter
+   1.21. Set the “ds_ping_interval� parameter
+   1.22. Set the “ds_probing_threshhold� parameter
+   1.23. Set the “ds_ping_reply_codes� parameter
+   1.24. Set the “ds_probing_mode� parameter
+   1.25. Set the “ds_hash_size� parameter
+   1.26. Set the “ds_hash_expire� parameter
+   1.27. Set the “ds_hash_initexpire� parameter
+   1.28. Set the “ds_hash_check_interval� parameter
+   1.29. Set the “outbound_proxy� parameter
+   1.30. ds_select_dst usage
    1.31. ds_mark_dst usage
    1.31. ds_mark_dst usage
-   1.32. ds_load_unset usage
-   1.33. dispatcher list file
-   1.34. Kamailio config script - sample dispatcher usage
+   1.32. ds_mark_dst usage
+   1.33. ds_load_unset usage
+   1.34. dispatcher list file
+   1.35. Kamailio config script - sample dispatcher usage
 
 
 Chapter 1. Admin Guide
 Chapter 1. Admin Guide
 
 
@@ -174,6 +176,7 @@ Chapter 1. Admin Guide
         3.25. ds_hash_expire (int)
         3.25. ds_hash_expire (int)
         3.26. ds_hash_initexpire (int)
         3.26. ds_hash_initexpire (int)
         3.27. ds_hash_check_interval (int)
         3.27. ds_hash_check_interval (int)
+        3.28. outbound_proxy (str)
 
 
    4. Functions
    4. Functions
 
 
@@ -271,15 +274,16 @@ Chapter 1. Admin Guide
    3.25. ds_hash_expire (int)
    3.25. ds_hash_expire (int)
    3.26. ds_hash_initexpire (int)
    3.26. ds_hash_initexpire (int)
    3.27. ds_hash_check_interval (int)
    3.27. ds_hash_check_interval (int)
+   3.28. outbound_proxy (str)
 
 
 3.1. list_file (string)
 3.1. list_file (string)
 
 
    Path to the file with destination sets.
    Path to the file with destination sets.
 
 
-   Default value is "/etc/kamailio/dispatcher.list" or
-   "/usr/local/etc/kamailio/dispatcher.list".
+   Default value is “/etc/kamailio/dispatcher.list� or
+   “/usr/local/etc/kamailio/dispatcher.list�.
 
 
-   Example 1.1. Set the "list_file" parameter
+   Example 1.1. Set the “list_file� parameter
 ...
 ...
 modparam("dispatcher", "list_file", "/var/run/kamailio/dispatcher.list")
 modparam("dispatcher", "list_file", "/var/run/kamailio/dispatcher.list")
 ...
 ...
@@ -289,9 +293,9 @@ modparam("dispatcher", "list_file", "/var/run/kamailio/dispatcher.list")
    If you want to load the sets of gateways from the database you must set
    If you want to load the sets of gateways from the database you must set
    this parameter.
    this parameter.
 
 
-   Default value is "NULL" (disable DB support).
+   Default value is “NULL� (disable DB support).
 
 
-   Example 1.2. Set "db_url" parameter
+   Example 1.2. Set “db_url� parameter
 ...
 ...
 modparam("dispatcher", "db_url", "mysql://user:passwb@localhost/database")
 modparam("dispatcher", "db_url", "mysql://user:passwb@localhost/database")
 ...
 ...
@@ -301,9 +305,9 @@ modparam("dispatcher", "db_url", "mysql://user:passwb@localhost/database")
    If you want to load the sets of gateways from the database you must set
    If you want to load the sets of gateways from the database you must set
    this parameter as the database name.
    this parameter as the database name.
 
 
-   Default value is "dispatcher".
+   Default value is “dispatcher�.
 
 
-   Example 1.3. Set "table_name" parameter
+   Example 1.3. Set “table_name� parameter
 ...
 ...
 modparam("dispatcher", "table_name", "my_dispatcher")
 modparam("dispatcher", "table_name", "my_dispatcher")
 ...
 ...
@@ -312,9 +316,9 @@ modparam("dispatcher", "table_name", "my_dispatcher")
 
 
    The column's name in the database storing the gateway's group id.
    The column's name in the database storing the gateway's group id.
 
 
-   Default value is "setid".
+   Default value is “setid�.
 
 
-   Example 1.4. Set "setid_col" parameter
+   Example 1.4. Set “setid_col� parameter
 ...
 ...
 modparam("dispatcher", "setid_col", "groupid")
 modparam("dispatcher", "setid_col", "groupid")
 ...
 ...
@@ -323,9 +327,9 @@ modparam("dispatcher", "setid_col", "groupid")
 
 
    The column's name in the database storing the destination's sip uri.
    The column's name in the database storing the destination's sip uri.
 
 
-   Default value is "destination".
+   Default value is “destination�.
 
 
-   Example 1.5. Set "destination_col" parameter
+   Example 1.5. Set “destination_col� parameter
 ...
 ...
 modparam("dispatcher", "destination_col", "uri")
 modparam("dispatcher", "destination_col", "uri")
 ...
 ...
@@ -335,9 +339,9 @@ modparam("dispatcher", "destination_col", "uri")
    The column's name in the database storing the flags for destination
    The column's name in the database storing the flags for destination
    uri.
    uri.
 
 
-   Default value is "flags".
+   Default value is “flags�.
 
 
-   Example 1.6. Set "flags_col" parameter
+   Example 1.6. Set “flags_col� parameter
 ...
 ...
 modparam("dispatcher", "flags_col", "dstflags")
 modparam("dispatcher", "flags_col", "dstflags")
 ...
 ...
@@ -347,9 +351,9 @@ modparam("dispatcher", "flags_col", "dstflags")
    The column's name in the database storing the priority for destination
    The column's name in the database storing the priority for destination
    uri.
    uri.
 
 
-   Default value is "priority".
+   Default value is “priority�.
 
 
-   Example 1.7. Set "priority_col" parameter
+   Example 1.7. Set “priority_col� parameter
 ...
 ...
 modparam("dispatcher", "priority_col", "dstpriority")
 modparam("dispatcher", "priority_col", "dstpriority")
 ...
 ...
@@ -360,9 +364,9 @@ modparam("dispatcher", "priority_col", "dstpriority")
    when that is already set. If set to 0, will return error when the
    when that is already set. If set to 0, will return error when the
    destination address is already set.
    destination address is already set.
 
 
-   Default value is "1".
+   Default value is “1�.
 
 
-   Example 1.8. Set the "force_dst" parameter
+   Example 1.8. Set the “force_dst� parameter
 ...
 ...
 modparam("dispatcher", "force_dst", 1)
 modparam("dispatcher", "force_dst", 1)
 ...
 ...
@@ -381,9 +385,9 @@ modparam("dispatcher", "force_dst", 1)
    destination set in AVP, and use these AVPs to contact next address when
    destination set in AVP, and use these AVPs to contact next address when
    the current-tried fails.
    the current-tried fails.
 
 
-   Default value is "0".
+   Default value is “0�.
 
 
-   Example 1.9. Set the "flags" parameter
+   Example 1.9. Set the “flags� parameter
  ...
  ...
  modparam("dispatcher", "flags", 3)
  modparam("dispatcher", "flags", 3)
  ...
  ...
@@ -395,9 +399,9 @@ modparam("dispatcher", "force_dst", 1)
    wanting to send the call to an anouncement server saying: "the gateways
    wanting to send the call to an anouncement server saying: "the gateways
    are full, try later".
    are full, try later".
 
 
-   Default value is "0".
+   Default value is “0�.
 
 
-   Example 1.10. Set the "use_default" parameter
+   Example 1.10. Set the “use_default� parameter
  ...
  ...
  modparam("dispatcher", "use_default", 1)
  modparam("dispatcher", "use_default", 1)
  ...
  ...
@@ -415,9 +419,9 @@ Note
 
 
    You must set this parameter if you want to do load balancing fail over.
    You must set this parameter if you want to do load balancing fail over.
 
 
-   Default value is "null" - don't add AVPs.
+   Default value is “null� - don't add AVPs.
 
 
-   Example 1.11. Set the "dst_avp" parameter
+   Example 1.11. Set the “dst_avp� parameter
  ...
  ...
  modparam("dispatcher", "dst_avp", "$avp(dsdst)")
  modparam("dispatcher", "dst_avp", "$avp(dsdst)")
  ...
  ...
@@ -431,9 +435,9 @@ Note
 
 
    You must set this parameter if you want to do load balancing fail over.
    You must set this parameter if you want to do load balancing fail over.
 
 
-   Default value is "null" - don't add AVP.
+   Default value is “null� - don't add AVP.
 
 
-   Example 1.12. Set the "grp_avp" parameter
+   Example 1.12. Set the “grp_avp� parameter
  ...
  ...
  modparam("dispatcher", "grp_avp", "$avp(dsgrp)")
  modparam("dispatcher", "grp_avp", "$avp(dsgrp)")
  ...
  ...
@@ -447,9 +451,9 @@ Note
 
 
    You must set this parameter if you want to do load balancing fail over.
    You must set this parameter if you want to do load balancing fail over.
 
 
-   Default value is "null" - don't add AVP.
+   Default value is “null� - don't add AVP.
 
 
-   Example 1.13. Set the "cnt_avp" parameter
+   Example 1.13. Set the “cnt_avp� parameter
  ...
  ...
  modparam("dispatcher", "cnt_avp", "$avp(dscnt)")
  modparam("dispatcher", "cnt_avp", "$avp(dscnt)")
  ...
  ...
@@ -464,9 +468,9 @@ Note
    You must set this parameter if you want to do load balancing on call
    You must set this parameter if you want to do load balancing on call
    load (alg 10).
    load (alg 10).
 
 
-   Default value is "null" - don't add AVP.
+   Default value is “null� - don't add AVP.
 
 
-   Example 1.14. Set the "dstid_avp" parameter
+   Example 1.14. Set the “dstid_avp� parameter
  ...
  ...
  modparam("dispatcher", "dstid_avp", "$avp(dsdstid)")
  modparam("dispatcher", "dstid_avp", "$avp(dsdstid)")
  ...
  ...
@@ -477,9 +481,9 @@ Note
 
 
 Note
 Note
 
 
-   Default value is "null" - don't add AVP.
+   Default value is “null� - don't add AVP.
 
 
-   Example 1.15. Set the "attrs_avp" parameter
+   Example 1.15. Set the “attrs_avp� parameter
  ...
  ...
  modparam("dispatcher", "attrs_avp", "$avp(dsattrs)")
  modparam("dispatcher", "attrs_avp", "$avp(dsattrs)")
  ...
  ...
@@ -493,7 +497,7 @@ Note
    You must set this parameter if you want do hashing over custom message
    You must set this parameter if you want do hashing over custom message
    parts.
    parts.
 
 
-   Default value is "null" - disabled.
+   Default value is “null� - disabled.
 
 
    Example 1.16. Use $avp(i:273) for hashing:
    Example 1.16. Use $avp(i:273) for hashing:
  ...
  ...
@@ -510,9 +514,9 @@ Note
    The name of the PV where to store the set ID (group ID) when calling
    The name of the PV where to store the set ID (group ID) when calling
    ds_is_from_list() with no parameter.
    ds_is_from_list() with no parameter.
 
 
-   Default value is "null" - don't set PV.
+   Default value is “null� - don't set PV.
 
 
-   Example 1.18. Set the "setid_pvar" parameter
+   Example 1.18. Set the “setid_pvar� parameter
  ...
  ...
  modparam("dispatcher", "setid_pvar", "$var(setid)")
  modparam("dispatcher", "setid_pvar", "$var(setid)")
  ...
  ...
@@ -523,9 +527,9 @@ Note
    the gateways. Pinging gateways feature depends on ds_ping_interval
    the gateways. Pinging gateways feature depends on ds_ping_interval
    parameter.
    parameter.
 
 
-   Default value is "OPTIONS".
+   Default value is “OPTIONS�.
 
 
-   Example 1.19. Set the "ds_ping_method" parameter
+   Example 1.19. Set the “ds_ping_method� parameter
  ...
  ...
  modparam("dispatcher", "ds_ping_method", "INFO")
  modparam("dispatcher", "ds_ping_method", "INFO")
  ...
  ...
@@ -536,9 +540,9 @@ Note
    to the failed gateways. This method is only available, if compiled with
    to the failed gateways. This method is only available, if compiled with
    the probing of failed gateways enabled.
    the probing of failed gateways enabled.
 
 
-   Default value is "sip:dispatcher@localhost".
+   Default value is “sip:dispatcher@localhost�.
 
 
-   Example 1.20. Set the "ds_ping_from" parameter
+   Example 1.20. Set the “ds_ping_from� parameter
  ...
  ...
  modparam("dispatcher", "ds_ping_from", "sip:[email protected]")
  modparam("dispatcher", "ds_ping_from", "sip:[email protected]")
  ...
  ...
@@ -548,11 +552,11 @@ Note
    With this parameter you can define the interval for sending a request
    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.
    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
    This parameter is only used, when the TM-Module is loaded. If set to
-   "0", the pinging of inactive gateway is disabled.
+   “0�, the pinging of inactive gateway is disabled.
 
 
-   Default value is "0".
+   Default value is “0�.
 
 
-   Example 1.21. Set the "ds_ping_interval" parameter
+   Example 1.21. Set the “ds_ping_interval� parameter
  ...
  ...
  modparam("dispatcher", "ds_ping_interval", 30)
  modparam("dispatcher", "ds_ping_interval", 30)
  ...
  ...
@@ -566,9 +570,9 @@ Note
    The number of attempts can be set with this parameter. This parameter
    The number of attempts can be set with this parameter. This parameter
    can be modified via ser config framework.
    can be modified via ser config framework.
 
 
-   Default value is "1" (set inactive with first failure).
+   Default value is “1� (set inactive with first failure).
 
 
-   Example 1.22. Set the "ds_probing_threshhold" parameter
+   Example 1.22. Set the “ds_probing_threshhold� parameter
  ...
  ...
  modparam("dispatcher", "ds_probing_threshhold", 10)
  modparam("dispatcher", "ds_probing_threshhold", 10)
  ...
  ...
@@ -583,9 +587,9 @@ Note
    valid response). This parameter can be modified via ser config
    valid response). This parameter can be modified via ser config
    framework.
    framework.
 
 
-   Default value is "" (only 200 OK is accepted).
+   Default value is “� (only 200 OK is accepted).
 
 
-   Example 1.23. Set the "ds_ping_reply_codes" parameter
+   Example 1.23. Set the “ds_ping_reply_codes� parameter
  ...
  ...
  modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=403;code=488;class=
  modparam("dispatcher", "ds_ping_reply_codes", "class=2;code=403;code=488;class=
 3")
 3")
@@ -599,9 +603,9 @@ Note
    probing mode set are tested. If set to 1 and there is a failure of
    probing mode set are tested. If set to 1 and there is a failure of
    keepalive to an active gateway, then it is set to TRYING state.
    keepalive to an active gateway, then it is set to TRYING state.
 
 
-   Default value is "0".
+   Default value is “0�.
 
 
-   Example 1.24. Set the "ds_probing_mode" parameter
+   Example 1.24. Set the “ds_probing_mode� parameter
  ...
  ...
  modparam("dispatcher", "ds_probing_mode", 1)
  modparam("dispatcher", "ds_probing_mode", 1)
  ...
  ...
@@ -613,9 +617,9 @@ Note
    a hash table with 256 slots). It must be greater than 0 to enable call
    a hash table with 256 slots). It must be greater than 0 to enable call
    load dispatching feature (alg 10).
    load dispatching feature (alg 10).
 
 
-   Default value is "0".
+   Default value is “0�.
 
 
-   Example 1.25. Set the "ds_hash_size" parameter
+   Example 1.25. Set the “ds_hash_size� parameter
  ...
  ...
  modparam("dispatcher", "ds_hash_size", 9)
  modparam("dispatcher", "ds_hash_size", 9)
  ...
  ...
@@ -625,9 +629,9 @@ Note
    Expiration time in seconds to remove the load on a destination if no
    Expiration time in seconds to remove the load on a destination if no
    BYE was received meanwhile.
    BYE was received meanwhile.
 
 
-   Default value is "7200".
+   Default value is “7200�.
 
 
-   Example 1.26. Set the "ds_hash_expire" parameter
+   Example 1.26. Set the “ds_hash_expire� parameter
  ...
  ...
  modparam("dispatcher", "ds_hash_expire", 3600)
  modparam("dispatcher", "ds_hash_expire", 3600)
  ...
  ...
@@ -638,9 +642,9 @@ Note
    200 for INVITE was received meanwhile and state updated with
    200 for INVITE was received meanwhile and state updated with
    ds_load_update().
    ds_load_update().
 
 
-   Default value is "7200".
+   Default value is “7200�.
 
 
-   Example 1.27. Set the "ds_hash_initexpire" parameter
+   Example 1.27. Set the “ds_hash_initexpire� parameter
  ...
  ...
  modparam("dispatcher", "ds_hash_initexpire", 60)
  modparam("dispatcher", "ds_hash_initexpire", 60)
  ...
  ...
@@ -650,13 +654,24 @@ Note
    Time interval in seconds to scan internal hash table with call load
    Time interval in seconds to scan internal hash table with call load
    dispatching data for expired items.
    dispatching data for expired items.
 
 
-   Default value is "30".
+   Default value is “30�.
 
 
-   Example 1.28. Set the "ds_hash_check_interval" parameter
+   Example 1.28. Set the “ds_hash_check_interval� parameter
  ...
  ...
  modparam("dispatcher", "ds_hash_check_interval", 60)
  modparam("dispatcher", "ds_hash_check_interval", 60)
  ...
  ...
 
 
+3.28. outbound_proxy (str)
+
+   SIP URI of outbound proxy to be used when sending pings.
+
+   By default no outbound proxy is defined.
+
+   Example 1.29. Set the “outbound_proxy� parameter
+ ...
+ modparam("dispatcher", "outbound_proxy", "sip:outbound.example.com")
+ ...
+
 4. Functions
 4. Functions
 
 
    4.1. ds_select_dst(set, alg)
    4.1. ds_select_dst(set, alg)
@@ -668,7 +683,7 @@ Note
    4.7. ds_load_update()
    4.7. ds_load_update()
    4.8. ds_load_unset()
    4.8. ds_load_unset()
 
 
-4.1. ds_select_dst(set, alg)
+4.1.  ds_select_dst(set, alg)
 
 
    The method selects a destination from addresses set.
    The method selects a destination from addresses set.
 
 
@@ -678,21 +693,21 @@ Note
        be an integer or a variable holding an interger.
        be an integer or a variable holding an interger.
      * alg - the algorithm used to select the destination address. The
      * alg - the algorithm used to select the destination address. The
        parameter can be an integer or a variable holding an interger.
        parameter can be an integer or a variable holding an interger.
-          + "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
+          + “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
             "normal" authorization). If no username is found, round robin
             is used.
             is used.
-          + "6" - random (using rand()).
-          + "7" - hash over the content of PVs string. Note: This works
+          + “6� - random (using rand()).
+          + “7� - hash over the content of PVs string. Note: This works
             only when the parameter hash_pvar is set.
             only when the parameter hash_pvar is set.
-          + "8" - use first destination (good for failover).
-          + "9" - use weight based load distribution. You have to set the
+          + “8� - use first destination (good for failover).
+          + “9� - use weight based load distribution. You have to set the
             attribute 'weight' per each address in destination set.
             attribute 'weight' per each address in destination set.
-          + "10" - use call load distribution. You have to set the
+          + “10� - use call load distribution. You have to set the
             attribute 'duid' (as an unique string id) per each address in
             attribute 'duid' (as an unique string id) per each address in
             destination set. Also, you must set parameters 'dstid_avp' and
             destination set. Also, you must set parameters 'dstid_avp' and
             'ds_hash_size'.
             'ds_hash_size'.
@@ -707,7 +722,7 @@ Note
             on each address can change.
             on each address can change.
             This algorithm can be used only for dispatching INVITE
             This algorithm can be used only for dispatching INVITE
             requests as it is the only SIP method creating a SIP call.
             requests as it is the only SIP method creating a SIP call.
-          + "X" - if the algorithm is not implemented, the first entry in
+          + “X� - if the algorithm is not implemented, the first entry in
             set is chosen.
             set is chosen.
 
 
    If the bit 2 in 'flags' is set, the rest of the addresses from the
    If the bit 2 in 'flags' is set, the rest of the addresses from the
@@ -717,7 +732,7 @@ Note
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
 
-   Example 1.29. ds_select_dst usage
+   Example 1.30. ds_select_dst usage
 ...
 ...
 ds_select_dst("1", "0");
 ds_select_dst("1", "0");
 ...
 ...
@@ -725,7 +740,7 @@ $var(a) = 4;
 ds_select_dst("1", "$var(a)");
 ds_select_dst("1", "$var(a)");
 ...
 ...
 
 
-4.2. ds_select_domain(set, alg)
+4.2.  ds_select_domain(set, alg)
 
 
    The method selects a destination from addresses set and rewrites the
    The method selects a destination from addresses set and rewrites the
    host and port from R-URI. The parameters have same meaning as for
    host and port from R-URI. The parameters have same meaning as for
@@ -738,21 +753,21 @@ ds_select_dst("1", "$var(a)");
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
 
-4.3. ds_next_dst()
+4.3.  ds_next_dst()
 
 
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    and sets the dst_uri (outbound proxy address).
    and sets the dst_uri (outbound proxy address).
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
 
-4.4. ds_next_domain()
+4.4.  ds_next_domain()
 
 
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    Takes the next destination address from the AVPs with id 'dst_avp_id'
    and sets the domain part of the request uri.
    and sets the domain part of the request uri.
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
 
-4.5. ds_mark_dst([state])
+4.5.  ds_mark_dst([state])
 
 
    Mark the last used address from destination set as inactive ("i"/"I"),
    Mark the last used address from destination set as inactive ("i"/"I"),
    active ("a"/"A"), disabled ("d"/"D") or trying ("t"/"T"). Apart of
    active ("a"/"A"), disabled ("d"/"D") or trying ("t"/"T"). Apart of
@@ -779,7 +794,7 @@ ds_select_dst("1", "$var(a)");
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
 
 
-   Example 1.30. ds_mark_dst usage
+   Example 1.31. ds_mark_dst usage
 ...
 ...
 failure_route[tryagain] {
 failure_route[tryagain] {
 ...
 ...
@@ -789,7 +804,7 @@ failure_route[tryagain] {
 }
 }
 ...
 ...
 
 
-4.6. ds_is_from_list([groupid])
+4.6.  ds_is_from_list([groupid])
 
 
    This function returns true, if the current request comes from a host in
    This function returns true, if the current request comes from a host in
    the given group of the dispatcher-list; otherwise false.
    the given group of the dispatcher-list; otherwise false.
@@ -800,14 +815,14 @@ failure_route[tryagain] {
 
 
    This function can be used from ANY_ROUTE.
    This function can be used from ANY_ROUTE.
 
 
-   Example 1.31. ds_mark_dst usage
+   Example 1.32. ds_mark_dst usage
 ...
 ...
 if(ds_is_from_list("10")) {
 if(ds_is_from_list("10")) {
     ...
     ...
 }
 }
 ...
 ...
 
 
-4.7. ds_load_update()
+4.7.  ds_load_update()
 
 
    Updates the load state:
    Updates the load state:
      * if it is a BYE or CANCEL - remove the load from destination address
      * if it is a BYE or CANCEL - remove the load from destination address
@@ -818,14 +833,14 @@ if(ds_is_from_list("10")) {
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
    BRANCH_ROUTE and ONREPLY_ROUTE.
    BRANCH_ROUTE and ONREPLY_ROUTE.
 
 
-4.8. ds_load_unset()
+4.8.  ds_load_unset()
 
 
    Remove the call load for the destination that routed the call.
    Remove the call load for the destination that routed the call.
 
 
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
    This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
    BRANCH_ROUTE and ONREPLY_ROUTE.
    BRANCH_ROUTE and ONREPLY_ROUTE.
 
 
-   Example 1.32. ds_load_unset usage
+   Example 1.33. ds_load_unset usage
 ...
 ...
 route {
 route {
     ...
     ...
@@ -855,7 +870,7 @@ onreply_route {
    5.2. ds_list
    5.2. ds_list
    5.3. ds_reload
    5.3. ds_reload
 
 
-5.1. ds_set_state
+5.1.  ds_set_state
 
 
    Sets the status for a destination address (can be use to mark the
    Sets the status for a destination address (can be use to mark the
    destination as active or inactive).
    destination as active or inactive).
@@ -864,11 +879,11 @@ onreply_route {
 
 
    Parameters:
    Parameters:
      * _state_ : state of the destination address
      * _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
+          + “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').
        mode (e.g. 'ap', 'ip' or 'tp').
      * _group_: destination group id
      * _group_: destination group id
      * _address_: address of the destination in the _group_
      * _address_: address of the destination in the _group_
@@ -880,7 +895,7 @@ onreply_route {
                 _address_
                 _address_
                 _empty_line_
                 _empty_line_
 
 
-5.2. ds_list
+5.2.  ds_list
 
 
    It lists the groups and included destinations.
    It lists the groups and included destinations.
 
 
@@ -892,7 +907,7 @@ onreply_route {
                 :ds_list:_reply_fifo_file_
                 :ds_list:_reply_fifo_file_
                 _empty_line_
                 _empty_line_
 
 
-5.3. ds_reload
+5.3.  ds_reload
 
 
    It reloads the groups and included destinations. The command is
    It reloads the groups and included destinations. The command is
    disabled for call load based dispatching (algorithm 10) since removal
    disabled for call load based dispatching (algorithm 10) since removal
@@ -912,7 +927,7 @@ onreply_route {
    6.2. dispatcher.list
    6.2. dispatcher.list
    6.3. dispatcher.reload
    6.3. dispatcher.reload
 
 
-6.1. dispatcher.set_state
+6.1.  dispatcher.set_state
 
 
    Sets the state for a destination address (can be use to mark the
    Sets the state for a destination address (can be use to mark the
    destination as active or inactive).
    destination as active or inactive).
@@ -921,11 +936,11 @@ onreply_route {
 
 
    Parameters:
    Parameters:
      * _state_ : state of the destination address
      * _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
+          + “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').
        mode (e.g. 'ap', 'ip' or 'tp').
      * _group_: destination group id
      * _group_: destination group id
      * _address_: address of the destination in the _group_
      * _address_: address of the destination in the _group_
@@ -936,7 +951,7 @@ onreply_route {
 sercmd dispatcher.set_state ip 2 sip:127.0.0.1:5080
 sercmd dispatcher.set_state ip 2 sip:127.0.0.1:5080
 ...
 ...
 
 
-6.2. dispatcher.list
+6.2.  dispatcher.list
 
 
    It lists the groups and included destinations.
    It lists the groups and included destinations.
 
 
@@ -947,7 +962,7 @@ sercmd dispatcher.set_state ip 2 sip:127.0.0.1:5080
    Example:
    Example:
                 sercmd dispatcher.list
                 sercmd dispatcher.list
 
 
-6.3. dispatcher.reload
+6.3.  dispatcher.reload
 
 
    It reloads the groups and included destinations. The command is
    It reloads the groups and included destinations. The command is
    disabled for call load based dispatching (algorithm 10) since removal
    disabled for call load based dispatching (algorithm 10) since removal
@@ -994,7 +1009,7 @@ setid(int) destination(sip uri) flags(int,opt) priority(int,opt) attrs(str,opt)
    For database, each element of a line resides in a different column.
    For database, each element of a line resides in a different column.
    Next is a dispatcher.list file example:
    Next is a dispatcher.list file example:
 
 
-   Example 1.33. dispatcher list file
+   Example 1.34. dispatcher list file
 ...
 ...
 # $Id$
 # $Id$
 # dispatcher destination sets
 # dispatcher destination sets
@@ -1019,7 +1034,7 @@ r,opt)
 
 
    Next picture displays a sample usage of dispatcher.
    Next picture displays a sample usage of dispatcher.
 
 
-   Example 1.34. Kamailio config script - sample dispatcher usage
+   Example 1.35. Kamailio config script - sample dispatcher usage
 ...
 ...
 #!KAMAILIO
 #!KAMAILIO
 #
 #
@@ -1309,7 +1324,7 @@ failure_route[RTF_DISPATCH] {
    8.1. dispatcher:dst-down
    8.1. dispatcher:dst-down
    8.2. dispatcher:dst-up
    8.2. dispatcher:dst-up
 
 
-8.1. dispatcher:dst-down
+8.1.  dispatcher:dst-down
 
 
    When defined, the module calls event_route[dispatcher:ds-down] when a
    When defined, the module calls event_route[dispatcher:ds-down] when a
    destination goes down (becomes probing). A typical use case is to
    destination goes down (becomes probing). A typical use case is to
@@ -1320,7 +1335,7 @@ event_route[dispatcher:dst-down] {
 }
 }
 ...
 ...
 
 
-8.2. dispatcher:dst-up
+8.2.  dispatcher:dst-up
 
 
    When defined, the module calls event_route[dispatcher:ds-up] when a
    When defined, the module calls event_route[dispatcher:ds-up] when a
    destination that was previously down (probing) comes up. A typical use
    destination that was previously down (probing) comes up. A typical use

+ 1 - 1
modules_k/dispatcher/dispatch.c

@@ -2416,7 +2416,7 @@ void ds_check_timer(unsigned int ticks, void* param)
 							&list->dlist[j].uri,
 							&list->dlist[j].uri,
 							&list->dlist[j].uri,
 							&list->dlist[j].uri,
 							&ds_ping_from,
 							&ds_ping_from,
-							0) < 0) {
+							&ds_outbound_proxy) < 0) {
 					LM_ERR("unable to ping [%.*s]\n",
 					LM_ERR("unable to ping [%.*s]\n",
 							list->dlist[j].uri.len, list->dlist[j].uri.s);
 							list->dlist[j].uri.len, list->dlist[j].uri.s);
 				}
 				}

+ 1 - 0
modules_k/dispatcher/dispatch.h

@@ -95,6 +95,7 @@ extern str ds_ping_from;
 extern int probing_threshhold; /*!< number of failed requests,
 extern int probing_threshhold; /*!< number of failed requests,
 								 before a destination is taken into probing */ 
 								 before a destination is taken into probing */ 
 extern int ds_probing_mode;
 extern int ds_probing_mode;
+extern str ds_outbound_proxy;
 
 
 int init_data(void);
 int init_data(void);
 int init_ds_db(void);
 int init_ds_db(void);

+ 4 - 0
modules_k/dispatcher/dispatcher.c

@@ -120,6 +120,8 @@ int ds_hash_expire = 7200;
 int ds_hash_initexpire = 7200;
 int ds_hash_initexpire = 7200;
 int ds_hash_check_interval = 30;
 int ds_hash_check_interval = 30;
 
 
+str ds_outbound_proxy = {0, 0};
+
 /* tm */
 /* tm */
 struct tm_binds tmb;
 struct tm_binds tmb;
 
 
@@ -219,6 +221,7 @@ static param_export_t params[]={
 	{"ds_hash_expire",     INT_PARAM, &ds_hash_expire},
 	{"ds_hash_expire",     INT_PARAM, &ds_hash_expire},
 	{"ds_hash_initexpire", INT_PARAM, &ds_hash_initexpire},
 	{"ds_hash_initexpire", INT_PARAM, &ds_hash_initexpire},
 	{"ds_hash_check_interval", INT_PARAM, &ds_hash_check_interval},
 	{"ds_hash_check_interval", INT_PARAM, &ds_hash_check_interval},
+	{"outbound_proxy",  STR_PARAM, &ds_outbound_proxy.s},
 	{0,0,0}
 	{0,0,0}
 };
 };
 
 
@@ -281,6 +284,7 @@ static int mod_init(void)
 		ds_setid_pvname.len = strlen(ds_setid_pvname.s);
 		ds_setid_pvname.len = strlen(ds_setid_pvname.s);
 	if (ds_ping_from.s) ds_ping_from.len = strlen(ds_ping_from.s);
 	if (ds_ping_from.s) ds_ping_from.len = strlen(ds_ping_from.s);
 	if (ds_ping_method.s) ds_ping_method.len = strlen(ds_ping_method.s);
 	if (ds_ping_method.s) ds_ping_method.len = strlen(ds_ping_method.s);
+	if (ds_outbound_proxy.s) ds_outbound_proxy.len = strlen(ds_outbound_proxy.s);
 
 
 	if(cfg_declare("dispatcher", dispatcher_cfg_def,
 	if(cfg_declare("dispatcher", dispatcher_cfg_def,
 				&default_dispatcher_cfg, cfg_sizeof(dispatcher),
 				&default_dispatcher_cfg, cfg_sizeof(dispatcher),

+ 19 - 0
modules_k/dispatcher/doc/dispatcher_admin.xml

@@ -689,6 +689,25 @@ modparam("dispatcher", "force_dst", 1)
  ...
  ...
  modparam("dispatcher", "ds_hash_check_interval", 60)
  modparam("dispatcher", "ds_hash_check_interval", 60)
  ...
  ...
+ </programlisting>
+ 		</example>
+	</section>
+ 	<section>
+ 		<title><varname>outbound_proxy</varname> (str)</title>
+ 		<para>
+		SIP URI of outbound proxy to be used when sending pings.
+ 		</para>
+ 		<para>
+ 		<emphasis>
+ 			By default no outbound proxy is defined.
+ 		</emphasis>
+ 		</para>
+ 		<example>
+ 		<title>Set the <quote>outbound_proxy</quote> parameter</title>
+ <programlisting format="linespecific">
+ ...
+ modparam("dispatcher", "outbound_proxy", "sip:outbound.example.com")
+ ...
  </programlisting>
  </programlisting>
  		</example>
  		</example>
 	</section>
 	</section>