Module: sip-router Branch: master Commit: 146e2b093ba57a9c48f2059863d214fcdfc1bd1a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=146e2b09...
Author: Hugh Waite hugh.waite@crocodile-rcs.com Committer: Hugh Waite hugh.waite@crocodile-rcs.com Date: Wed Dec 4 18:30:37 2013 +0000
rtpproxy: Add parameter to set an AVP to store the chosen RTPProxy instance IP address
---
modules/rtpproxy/README | 57 ++++++++++++++++++++----------- modules/rtpproxy/doc/rtpproxy_admin.xml | 18 ++++++++++ modules/rtpproxy/rtpproxy.c | 38 ++++++++++++++++++++ 3 files changed, 93 insertions(+), 20 deletions(-)
diff --git a/modules/rtpproxy/README b/modules/rtpproxy/README index 43b57df..8979560 100644 --- a/modules/rtpproxy/README +++ b/modules/rtpproxy/README @@ -63,6 +63,7 @@ Carsten Bock 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string) + 4.11. rtp_inst_avp (string)
5. Functions
@@ -101,16 +102,17 @@ Carsten Bock 1.8. Set extra_id_pv parameter 1.9. Set db_url parameter 1.10. Set table_name parameter - 1.11. set_rtp_proxy_set usage - 1.12. rtpproxy_offer usage - 1.13. rtpproxy_answer usage - 1.14. rtpproxy_destroy usage - 1.15. rtpproxy_manage usage - 1.16. rtpproxy_stream2xxx usage - 1.17. start_recording usage - 1.18. $rtpstat-Usage - 1.19. nh_enable_rtpp usage - 1.20. nh_show_rtpp usage + 1.11. Set rtp_inst_avp parameter + 1.12. set_rtp_proxy_set usage + 1.13. rtpproxy_offer usage + 1.14. rtpproxy_answer usage + 1.15. rtpproxy_destroy usage + 1.16. rtpproxy_manage usage + 1.17. rtpproxy_stream2xxx usage + 1.18. start_recording usage + 1.19. $rtpstat-Usage + 1.20. nh_enable_rtpp usage + 1.21. nh_show_rtpp usage
Chapter 1. Admin Guide
@@ -135,6 +137,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string) + 4.11. rtp_inst_avp (string)
5. Functions
@@ -222,6 +225,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string) + 4.11. rtp_inst_avp (string)
4.1. rtpproxy_sock (string)
@@ -377,6 +381,19 @@ modparam("rtpproxy", "db_url", "mysql://user:passwb@localhost/database") modparam("rtpproxy", "table_name", "my_rtpp_sets") ...
+4.11. rtp_inst_avp (string) + + An avp to store the chosen RTPProxy IP address. If this parameter is + set, the IP address and port of the instance chosen in a + rtpproxy_manage() call will be stored in the given AVP. + + By default, this parameter is not set. + + Example 1.11. Set rtp_inst_avp parameter +... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +... + 5. Functions
5.1. set_rtp_proxy_set(setid) @@ -401,7 +418,7 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets") This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE.
- Example 1.11. set_rtp_proxy_set usage + Example 1.12. set_rtp_proxy_set usage ... set_rtp_proxy_set("2"); rtpproxy_offer(); @@ -507,7 +524,7 @@ rtpproxy_offer();
This function can be used from ANY_ROUTE.
- Example 1.12. rtpproxy_offer usage + Example 1.13. rtpproxy_offer usage route { ... if (is_method("INVITE")) { @@ -551,7 +568,7 @@ onreply_route[2] This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
- Example 1.13. rtpproxy_answer usage + Example 1.14. rtpproxy_answer usage
See rtpproxy_offer() function example above for example.
@@ -587,7 +604,7 @@ onreply_route[2] unused rtpproxy call when 200 OK is received on a branch, where rtpproxy is not needed.
- Example 1.14. rtpproxy_destroy usage + Example 1.15. rtpproxy_destroy usage ... rtpproxy_destroy(); ... @@ -621,7 +638,7 @@ rtpproxy_destroy();
This function can be used from ANY_ROUTE.
- Example 1.15. rtpproxy_manage usage + Example 1.16. rtpproxy_manage usage ... rtpproxy_manage(); ... @@ -657,7 +674,7 @@ rtpproxy_manage(); -1 means that it will be streaming in a loop indefinitely, until the appropriate rtpproxy_stop_stream2xxx is issued.
- Example 1.16. rtpproxy_stream2xxx usage + Example 1.17. rtpproxy_stream2xxx usage ... if (is_method("INVITE")) { rtpproxy_offer(); @@ -690,7 +707,7 @@ rtpproxy_manage();
This function can be used from REQUEST_ROUTE and ONREPLY_ROUTE.
- Example 1.17. start_recording usage + Example 1.18. start_recording usage ... start_recording(); ... @@ -710,7 +727,7 @@ start_recording(); packet-counters. The statistics must be retrieved before the session is deleted (before unforce_rtpproxy()).
- Example 1.18. $rtpstat-Usage + Example 1.19. $rtpstat-Usage ... append_hf("X-RTP-Statistics: $rtpstat\r\n"); ... @@ -733,7 +750,7 @@ start_recording(); NOTE: if a rtpproxy is defined multiple times (in the same or diferente sete), all of its instances will be enables/disabled.
- Example 1.19. nh_enable_rtpp usage + Example 1.20. nh_enable_rtpp usage ... $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0 ... @@ -745,7 +762,7 @@ $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0
No parameter.
- Example 1.20. nh_show_rtpp usage + Example 1.21. nh_show_rtpp usage ... $ kamctl fifo nh_show_rtpp ... diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml index 7a60c17..c4f2c86 100644 --- a/modules/rtpproxy/doc/rtpproxy_admin.xml +++ b/modules/rtpproxy/doc/rtpproxy_admin.xml @@ -321,6 +321,24 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets") </programlisting> </example> </section> + <section> + <title><varname>rtp_inst_avp</varname> (string)</title> + <para> + An avp to store the chosen RTPProxy IP address. + If this parameter is set, the IP address and port of the instance chosen in a rtpproxy_manage() call will be stored in the given AVP. + </para> + <para> + By default, this parameter is not set. + </para> + <example> + <title>Set <varname>rtp_inst_avp</varname> parameter</title> + <programlisting format="linespecific"> +... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +... +</programlisting> + </example> + </section> </section>
<section> diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c index ae9d291..8cea776 100644 --- a/modules/rtpproxy/rtpproxy.c +++ b/modules/rtpproxy/rtpproxy.c @@ -308,6 +308,8 @@ static int mod_init(void); static int child_init(int); static void mod_destroy(void);
+static int set_rtp_inst_avp(const str * const uri); + /* Pseudo-Variables */ static int pv_get_rtpstat_f(struct sip_msg *, pv_param_t *, pv_value_t *);
@@ -337,6 +339,9 @@ struct rtpp_set * default_rtpp_set=0; static char *ice_candidate_priority_avp_param = NULL; static int ice_candidate_priority_avp_type; static int_str ice_candidate_priority_avp; +static char *rtp_inst_avp_param = NULL; +static int rtp_inst_avp_type; +static int_str rtp_inst_avp;
/* array with the sockets used by rtpporxy (per process)*/ static unsigned int rtpp_no = 0; @@ -437,6 +442,7 @@ static param_export_t params[] = { {"extra_id_pv", STR_PARAM, &extra_id_pv_param.s }, {"db_url", STR_PARAM, &rtpp_db_url.s }, {"table_name", STR_PARAM, &rtpp_table_name.s }, + {"rtp_inst_avp", STR_PARAM, &rtp_inst_avp_param }, {0, 0, 0} };
@@ -970,6 +976,19 @@ mod_init(void) ice_candidate_priority_avp_type = avp_flags; }
+ if (rtp_inst_avp_param) { + s.s = rtp_inst_avp_param; s.len = strlen(s.s); + if (pv_parse_spec(&s, &avp_spec) == 0 || avp_spec.type != PVT_AVP) { + LM_ERR("malformed or non AVP definition <%s>\n", rtp_inst_avp_param); + return -1; + } + if (pv_get_avp_name(0, &(avp_spec.pvp), &rtp_inst_avp, &avp_flags) != 0) { + LM_ERR("invalid AVP definition <%s>\n", rtp_inst_avp_param); + return -1; + } + rtp_inst_avp_type = avp_flags; + } + if (extra_id_pv_param.s && *extra_id_pv_param.s) { extra_id_pv_param.len = strlen(extra_id_pv_param.s); if(pv_parse_format(&extra_id_pv_param, &extra_id_pv) < 0) { @@ -1761,6 +1780,9 @@ select_rtpp_node(str callid, int do_test) node = selected_rtpp_set->rn_first; if (node->rn_disabled && node->rn_recheck_ticks <= get_ticks()) node->rn_disabled = rtpp_test(node, 1, 0); + if (!node->rn_disabled) { + set_rtp_inst_avp(&node->rn_url); + } return node->rn_disabled ? NULL : node; }
@@ -1811,6 +1833,7 @@ found: if (node->rn_disabled) goto retry; } + set_rtp_inst_avp(&node->rn_url); return node; }
@@ -2987,3 +3010,18 @@ pv_get_rtpstat_f(struct sip_msg *msg, pv_param_t *param, return pv_get_strval(msg, param, res, &ret_val); }
+static int set_rtp_inst_avp(const str * const uri) { + int_str avp_val; + avp_val.s = *uri; + + if (rtp_inst_avp_param == NULL) + return 0; + + if (add_avp(AVP_VAL_STR | rtp_inst_avp_type, rtp_inst_avp, avp_val) != 0) + { + LM_ERR("Failed to add RTPProxy URI to avp\n"); + return -1; + } + return 0; +} +
Hello Hugh,
I am wondering if doesn't make it more flexible to allow the parameter to be any writable variable (which can be avp as well, but then will work with xavp, $var(), etc). Modules such as mtree or dialplan should have example how to do it -- it is rather trivial, the setf() function from pv spec is used for setting the value.
Cheers, Daniel
On 12/4/13 7:48 PM, Hugh Waite wrote:
Module: sip-router Branch: master Commit: 146e2b093ba57a9c48f2059863d214fcdfc1bd1a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=146e2b09...
Author: Hugh Waite hugh.waite@crocodile-rcs.com Committer: Hugh Waite hugh.waite@crocodile-rcs.com Date: Wed Dec 4 18:30:37 2013 +0000
rtpproxy: Add parameter to set an AVP to store the chosen RTPProxy instance IP address
modules/rtpproxy/README | 57 ++++++++++++++++++++----------- modules/rtpproxy/doc/rtpproxy_admin.xml | 18 ++++++++++ modules/rtpproxy/rtpproxy.c | 38 ++++++++++++++++++++ 3 files changed, 93 insertions(+), 20 deletions(-)
diff --git a/modules/rtpproxy/README b/modules/rtpproxy/README index 43b57df..8979560 100644 --- a/modules/rtpproxy/README +++ b/modules/rtpproxy/README @@ -63,6 +63,7 @@ Carsten Bock 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)
4.11. rtp_inst_avp (string) 5. Functions
@@ -101,16 +102,17 @@ Carsten Bock 1.8. Set extra_id_pv parameter 1.9. Set db_url parameter 1.10. Set table_name parameter
- 1.11. set_rtp_proxy_set usage
- 1.12. rtpproxy_offer usage
- 1.13. rtpproxy_answer usage
- 1.14. rtpproxy_destroy usage
- 1.15. rtpproxy_manage usage
- 1.16. rtpproxy_stream2xxx usage
- 1.17. start_recording usage
- 1.18. $rtpstat-Usage
- 1.19. nh_enable_rtpp usage
- 1.20. nh_show_rtpp usage
1.11. Set rtp_inst_avp parameter
1.12. set_rtp_proxy_set usage
1.13. rtpproxy_offer usage
1.14. rtpproxy_answer usage
1.15. rtpproxy_destroy usage
1.16. rtpproxy_manage usage
1.17. rtpproxy_stream2xxx usage
1.18. start_recording usage
1.19. $rtpstat-Usage
1.20. nh_enable_rtpp usage
1.21. nh_show_rtpp usage
Chapter 1. Admin Guide
@@ -135,6 +137,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)
4.11. rtp_inst_avp (string)
- Functions
@@ -222,6 +225,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)
4.11. rtp_inst_avp (string)
4.1. rtpproxy_sock (string)
@@ -377,6 +381,19 @@ modparam("rtpproxy", "db_url", "mysql://user:passwb@localhost/database") modparam("rtpproxy", "table_name", "my_rtpp_sets") ...
+4.11. rtp_inst_avp (string)
- An avp to store the chosen RTPProxy IP address. If this parameter is
- set, the IP address and port of the instance chosen in a
- rtpproxy_manage() call will be stored in the given AVP.
- By default, this parameter is not set.
- Example 1.11. Set rtp_inst_avp parameter
+... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +...
Functions
5.1. set_rtp_proxy_set(setid)
@@ -401,7 +418,7 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets") This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE.
- Example 1.11. set_rtp_proxy_set usage
- Example 1.12. set_rtp_proxy_set usage ... set_rtp_proxy_set("2"); rtpproxy_offer();
@@ -507,7 +524,7 @@ rtpproxy_offer();
This function can be used from ANY_ROUTE.
- Example 1.12. rtpproxy_offer usage
- Example 1.13. rtpproxy_offer usage route { ... if (is_method("INVITE")) {
@@ -551,7 +568,7 @@ onreply_route[2] This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
- Example 1.13. rtpproxy_answer usage
Example 1.14. rtpproxy_answer usage
See rtpproxy_offer() function example above for example.
@@ -587,7 +604,7 @@ onreply_route[2] unused rtpproxy call when 200 OK is received on a branch, where rtpproxy is not needed.
- Example 1.14. rtpproxy_destroy usage
- Example 1.15. rtpproxy_destroy usage ... rtpproxy_destroy(); ...
@@ -621,7 +638,7 @@ rtpproxy_destroy();
This function can be used from ANY_ROUTE.
- Example 1.15. rtpproxy_manage usage
- Example 1.16. rtpproxy_manage usage ... rtpproxy_manage(); ...
@@ -657,7 +674,7 @@ rtpproxy_manage(); -1 means that it will be streaming in a loop indefinitely, until the appropriate rtpproxy_stop_stream2xxx is issued.
- Example 1.16. rtpproxy_stream2xxx usage
- Example 1.17. rtpproxy_stream2xxx usage ... if (is_method("INVITE")) { rtpproxy_offer();
@@ -690,7 +707,7 @@ rtpproxy_manage();
This function can be used from REQUEST_ROUTE and ONREPLY_ROUTE.
- Example 1.17. start_recording usage
- Example 1.18. start_recording usage ... start_recording(); ...
@@ -710,7 +727,7 @@ start_recording(); packet-counters. The statistics must be retrieved before the session is deleted (before unforce_rtpproxy()).
- Example 1.18. $rtpstat-Usage
- Example 1.19. $rtpstat-Usage ... append_hf("X-RTP-Statistics: $rtpstat\r\n"); ...
@@ -733,7 +750,7 @@ start_recording(); NOTE: if a rtpproxy is defined multiple times (in the same or diferente sete), all of its instances will be enables/disabled.
- Example 1.19. nh_enable_rtpp usage
- Example 1.20. nh_enable_rtpp usage ... $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0 ...
@@ -745,7 +762,7 @@ $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0
No parameter.
- Example 1.20. nh_show_rtpp usage
- Example 1.21. nh_show_rtpp usage ... $ kamctl fifo nh_show_rtpp ...
diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml index 7a60c17..c4f2c86 100644 --- a/modules/rtpproxy/doc/rtpproxy_admin.xml +++ b/modules/rtpproxy/doc/rtpproxy_admin.xml @@ -321,6 +321,24 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets")
</programlisting> </example> </section> + <section> + <title><varname>rtp_inst_avp</varname> (string)</title> + <para> + An avp to store the chosen RTPProxy IP address. + If this parameter is set, the IP address and port of the instance chosen in a rtpproxy_manage() call will be stored in the given AVP. + </para> + <para> + By default, this parameter is not set. + </para> + <example> + <title>Set <varname>rtp_inst_avp</varname> parameter</title> + <programlisting format="linespecific"> +... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +... +</programlisting> + </example> + </section> </section>
<section> diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c index ae9d291..8cea776 100644 --- a/modules/rtpproxy/rtpproxy.c +++ b/modules/rtpproxy/rtpproxy.c @@ -308,6 +308,8 @@ static int mod_init(void); static int child_init(int); static void mod_destroy(void);
+static int set_rtp_inst_avp(const str * const uri);
- /* Pseudo-Variables */ static int pv_get_rtpstat_f(struct sip_msg *, pv_param_t *, pv_value_t *);
@@ -337,6 +339,9 @@ struct rtpp_set * default_rtpp_set=0; static char *ice_candidate_priority_avp_param = NULL; static int ice_candidate_priority_avp_type; static int_str ice_candidate_priority_avp; +static char *rtp_inst_avp_param = NULL; +static int rtp_inst_avp_type; +static int_str rtp_inst_avp;
/* array with the sockets used by rtpporxy (per process)*/ static unsigned int rtpp_no = 0; @@ -437,6 +442,7 @@ static param_export_t params[] = { {"extra_id_pv", STR_PARAM, &extra_id_pv_param.s }, {"db_url", STR_PARAM, &rtpp_db_url.s }, {"table_name", STR_PARAM, &rtpp_table_name.s },
- {"rtp_inst_avp", STR_PARAM, &rtp_inst_avp_param }, {0, 0, 0} };
@@ -970,6 +976,19 @@ mod_init(void) ice_candidate_priority_avp_type = avp_flags; }
- if (rtp_inst_avp_param) {
s.s = rtp_inst_avp_param; s.len = strlen(s.s);
if (pv_parse_spec(&s, &avp_spec) == 0 || avp_spec.type != PVT_AVP) {
LM_ERR("malformed or non AVP definition <%s>\n", rtp_inst_avp_param);
return -1;
}
if (pv_get_avp_name(0, &(avp_spec.pvp), &rtp_inst_avp, &avp_flags) != 0) {
LM_ERR("invalid AVP definition <%s>\n", rtp_inst_avp_param);
return -1;
}
rtp_inst_avp_type = avp_flags;
- }
- if (extra_id_pv_param.s && *extra_id_pv_param.s) { extra_id_pv_param.len = strlen(extra_id_pv_param.s); if(pv_parse_format(&extra_id_pv_param, &extra_id_pv) < 0) {
@@ -1761,6 +1780,9 @@ select_rtpp_node(str callid, int do_test) node = selected_rtpp_set->rn_first; if (node->rn_disabled && node->rn_recheck_ticks <= get_ticks()) node->rn_disabled = rtpp_test(node, 1, 0);
if (!node->rn_disabled) {
set_rtp_inst_avp(&node->rn_url);
return node->rn_disabled ? NULL : node; }}
@@ -1811,6 +1833,7 @@ found: if (node->rn_disabled) goto retry; }
- set_rtp_inst_avp(&node->rn_url); return node; }
@@ -2987,3 +3010,18 @@ pv_get_rtpstat_f(struct sip_msg *msg, pv_param_t *param, return pv_get_strval(msg, param, res, &ret_val); }
+static int set_rtp_inst_avp(const str * const uri) {
- int_str avp_val;
- avp_val.s = *uri;
- if (rtp_inst_avp_param == NULL)
return 0;
- if (add_avp(AVP_VAL_STR | rtp_inst_avp_type, rtp_inst_avp, avp_val) != 0)
- {
LM_ERR("Failed to add RTPProxy URI to avp\n");
return -1;
- }
- return 0;
+}
sr-dev mailing list sr-dev@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
Hi, I agree this is a better, more flexible solution. I haven't forgotten about it, but had enough time yet...
Hugh
On 04/12/2013 19:59, Daniel-Constantin Mierla wrote:
Hello Hugh,
I am wondering if doesn't make it more flexible to allow the parameter to be any writable variable (which can be avp as well, but then will work with xavp, $var(), etc). Modules such as mtree or dialplan should have example how to do it -- it is rather trivial, the setf() function from pv spec is used for setting the value.
Cheers, Daniel
On 12/4/13 7:48 PM, Hugh Waite wrote:
Module: sip-router Branch: master Commit: 146e2b093ba57a9c48f2059863d214fcdfc1bd1a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=146e2b09...
Author: Hugh Waite hugh.waite@crocodile-rcs.com Committer: Hugh Waite hugh.waite@crocodile-rcs.com Date: Wed Dec 4 18:30:37 2013 +0000
rtpproxy: Add parameter to set an AVP to store the chosen RTPProxy instance IP address
modules/rtpproxy/README | 57 ++++++++++++++++++++----------- modules/rtpproxy/doc/rtpproxy_admin.xml | 18 ++++++++++ modules/rtpproxy/rtpproxy.c | 38 ++++++++++++++++++++ 3 files changed, 93 insertions(+), 20 deletions(-)
diff --git a/modules/rtpproxy/README b/modules/rtpproxy/README index 43b57df..8979560 100644 --- a/modules/rtpproxy/README +++ b/modules/rtpproxy/README @@ -63,6 +63,7 @@ Carsten Bock 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)
@@ -101,16 +102,17 @@ Carsten Bock 1.8. Set extra_id_pv parameter 1.9. Set db_url parameter 1.10. Set table_name parameter4.11. rtp_inst_avp (string) 5. Functions
- 1.11. set_rtp_proxy_set usage
- 1.12. rtpproxy_offer usage
- 1.13. rtpproxy_answer usage
- 1.14. rtpproxy_destroy usage
- 1.15. rtpproxy_manage usage
- 1.16. rtpproxy_stream2xxx usage
- 1.17. start_recording usage
- 1.18. $rtpstat-Usage
- 1.19. nh_enable_rtpp usage
- 1.20. nh_show_rtpp usage
- 1.11. Set rtp_inst_avp parameter
- 1.12. set_rtp_proxy_set usage
- 1.13. rtpproxy_offer usage
- 1.14. rtpproxy_answer usage
- 1.15. rtpproxy_destroy usage
- 1.16. rtpproxy_manage usage
- 1.17. rtpproxy_stream2xxx usage
- 1.18. start_recording usage
- 1.19. $rtpstat-Usage
- 1.20. nh_enable_rtpp usage
- 1.21. nh_show_rtpp usage Chapter 1. Admin Guide @@ -135,6 +137,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)
@@ -222,6 +225,7 @@ Chapter 1. Admin Guide 4.8. extra_id_pv (string) 4.9. db_url (string) 4.10. table_name (string)4.11. rtp_inst_avp (string) 5. Functions
- 4.11. rtp_inst_avp (string) 4.1. rtpproxy_sock (string) @@ -377,6 +381,19 @@ modparam("rtpproxy", "db_url",
"mysql://user:passwb@localhost/database") modparam("rtpproxy", "table_name", "my_rtpp_sets") ... +4.11. rtp_inst_avp (string)
- An avp to store the chosen RTPProxy IP address. If this
parameter is
- set, the IP address and port of the instance chosen
in a
- rtpproxy_manage() call will be stored in the given AVP.
- By default, this parameter is not set.
- Example 1.11. Set rtp_inst_avp parameter
+... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +...
- Functions 5.1. set_rtp_proxy_set(setid)
@@ -401,7 +418,7 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets") This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE.
- Example 1.11. set_rtp_proxy_set usage
- Example 1.12. set_rtp_proxy_set usage ... set_rtp_proxy_set("2"); rtpproxy_offer();
@@ -507,7 +524,7 @@ rtpproxy_offer(); This function can be used from ANY_ROUTE.
- Example 1.12. rtpproxy_offer usage
- Example 1.13. rtpproxy_offer usage route { ... if (is_method("INVITE")) {
@@ -551,7 +568,7 @@ onreply_route[2] This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE, FAILURE_ROUTE, BRANCH_ROUTE.
- Example 1.13. rtpproxy_answer usage
- Example 1.14. rtpproxy_answer usage See rtpproxy_offer() function example above for example. @@ -587,7 +604,7 @@ onreply_route[2] unused rtpproxy call when 200 OK is received on a
branch, where rtpproxy is not needed.
- Example 1.14. rtpproxy_destroy usage
- Example 1.15. rtpproxy_destroy usage ... rtpproxy_destroy(); ...
@@ -621,7 +638,7 @@ rtpproxy_destroy(); This function can be used from ANY_ROUTE.
- Example 1.15. rtpproxy_manage usage
- Example 1.16. rtpproxy_manage usage ... rtpproxy_manage(); ...
@@ -657,7 +674,7 @@ rtpproxy_manage(); -1 means that it will be streaming in a loop indefinitely, until the appropriate rtpproxy_stop_stream2xxx is issued.
- Example 1.16. rtpproxy_stream2xxx usage
- Example 1.17. rtpproxy_stream2xxx usage ... if (is_method("INVITE")) { rtpproxy_offer();
@@ -690,7 +707,7 @@ rtpproxy_manage(); This function can be used from REQUEST_ROUTE and ONREPLY_ROUTE.
- Example 1.17. start_recording usage
- Example 1.18. start_recording usage ... start_recording(); ...
@@ -710,7 +727,7 @@ start_recording(); packet-counters. The statistics must be retrieved before the session is deleted (before unforce_rtpproxy()).
- Example 1.18. $rtpstat-Usage
- Example 1.19. $rtpstat-Usage ... append_hf("X-RTP-Statistics: $rtpstat\r\n"); ...
@@ -733,7 +750,7 @@ start_recording(); NOTE: if a rtpproxy is defined multiple times (in the same or diferente sete), all of its instances will be enables/disabled.
- Example 1.19. nh_enable_rtpp usage
- Example 1.20. nh_enable_rtpp usage ... $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0 ...
@@ -745,7 +762,7 @@ $ kamctl fifo nh_enable_rtpp udp:192.168.2.133:8081 0 No parameter.
- Example 1.20. nh_show_rtpp usage
- Example 1.21. nh_show_rtpp usage ... $ kamctl fifo nh_show_rtpp ...
diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml index 7a60c17..c4f2c86 100644 --- a/modules/rtpproxy/doc/rtpproxy_admin.xml +++ b/modules/rtpproxy/doc/rtpproxy_admin.xml @@ -321,6 +321,24 @@ modparam("rtpproxy", "table_name", "my_rtpp_sets")
</programlisting> </example> </section> + <section> + <title><varname>rtp_inst_avp</varname> (string)</title> + <para> + An avp to store the chosen RTPProxy IP address. + If this parameter is set, the IP address and port of the instance chosen in a rtpproxy_manage() call will be stored in the given AVP. + </para> + <para> + By default, this parameter is not set. + </para> + <example> + <title>Set <varname>rtp_inst_avp</varname> parameter</title> + <programlisting format="linespecific"> +... +modparam("rtpproxy", "rtp_inst_avp", "$avp(RTP_INSTANCE)") +... +</programlisting> + </example> + </section> </section> <section> diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c index ae9d291..8cea776 100644 --- a/modules/rtpproxy/rtpproxy.c +++ b/modules/rtpproxy/rtpproxy.c @@ -308,6 +308,8 @@ static int mod_init(void); static int child_init(int); static void mod_destroy(void); +static int set_rtp_inst_avp(const str * const uri); + /* Pseudo-Variables */ static int pv_get_rtpstat_f(struct sip_msg *, pv_param_t *, pv_value_t *); @@ -337,6 +339,9 @@ struct rtpp_set * default_rtpp_set=0; static char *ice_candidate_priority_avp_param = NULL; static int ice_candidate_priority_avp_type; static int_str ice_candidate_priority_avp; +static char *rtp_inst_avp_param = NULL; +static int rtp_inst_avp_type; +static int_str rtp_inst_avp; /* array with the sockets used by rtpporxy (per process)*/ static unsigned int rtpp_no = 0; @@ -437,6 +442,7 @@ static param_export_t params[] = { {"extra_id_pv", STR_PARAM, &extra_id_pv_param.s }, {"db_url", STR_PARAM, &rtpp_db_url.s }, {"table_name", STR_PARAM, &rtpp_table_name.s }, + {"rtp_inst_avp", STR_PARAM, &rtp_inst_avp_param }, {0, 0, 0} }; @@ -970,6 +976,19 @@ mod_init(void) ice_candidate_priority_avp_type = avp_flags; } + if (rtp_inst_avp_param) { + s.s = rtp_inst_avp_param; s.len = strlen(s.s); + if (pv_parse_spec(&s, &avp_spec) == 0 || avp_spec.type != PVT_AVP) { + LM_ERR("malformed or non AVP definition <%s>\n", rtp_inst_avp_param); + return -1; + } + if (pv_get_avp_name(0, &(avp_spec.pvp), &rtp_inst_avp, &avp_flags) != 0) { + LM_ERR("invalid AVP definition <%s>\n", rtp_inst_avp_param); + return -1; + } + rtp_inst_avp_type = avp_flags; + } + if (extra_id_pv_param.s && *extra_id_pv_param.s) { extra_id_pv_param.len = strlen(extra_id_pv_param.s); if(pv_parse_format(&extra_id_pv_param, &extra_id_pv) < 0) { @@ -1761,6 +1780,9 @@ select_rtpp_node(str callid, int do_test) node = selected_rtpp_set->rn_first; if (node->rn_disabled && node->rn_recheck_ticks <= get_ticks()) node->rn_disabled = rtpp_test(node, 1, 0); + if (!node->rn_disabled) { + set_rtp_inst_avp(&node->rn_url); + } return node->rn_disabled ? NULL : node; } @@ -1811,6 +1833,7 @@ found: if (node->rn_disabled) goto retry; } + set_rtp_inst_avp(&node->rn_url); return node; } @@ -2987,3 +3010,18 @@ pv_get_rtpstat_f(struct sip_msg *msg, pv_param_t *param, return pv_get_strval(msg, param, res, &ret_val); } +static int set_rtp_inst_avp(const str * const uri) { + int_str avp_val; + avp_val.s = *uri; + + if (rtp_inst_avp_param == NULL) + return 0; + + if (add_avp(AVP_VAL_STR | rtp_inst_avp_type, rtp_inst_avp, avp_val) != 0) + { + LM_ERR("Failed to add RTPProxy URI to avp\n"); + return -1; + } + return 0; +} +
sr-dev mailing list sr-dev@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev