[sr-dev] git:master: rtpproxy: support pvars in function parameters
Richard Fuchs
rfuchs at sipwise.com
Wed Mar 27 18:18:54 CET 2013
Hi,
You're right, the unforce function is missing a wrapper, I missed that
when porting our patch. The offer/answer/force functions look fine to me.
cheers
On 03/27/13 13:03, Daniel-Constantin Mierla wrote:
> Hello,
>
> isn't it breaking rtpproxy_manage()? IIRC, rtpproxy_manage() executes
> the other functions providing parameters as char*, the way it was
> expected so far.
>
> Perhaps a better way for your addition is to define wrappers that are
> exported to config, resolving the fixed-up parameters and then calling
> the other old functions.
>
> Cheers,
> Daniel
>
> On 3/27/13 5:47 PM, Richard Fuchs wrote:
>> Module: sip-router
>> Branch: master
>> Commit: cd3358dd935781489e2b7122fe20a19310f97546
>> URL:
>> http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cd3358dd935781489e2b7122fe20a19310f97546
>>
>>
>> Author: Richard Fuchs <rfuchs at sipwise.com>
>> Committer: Richard Fuchs <rfuchs at sipwise.com>
>> Date: Wed Mar 27 12:46:28 2013 -0400
>>
>> rtpproxy: support pvars in function parameters
>>
>> ---
>>
>> modules/rtpproxy/rtpproxy.c | 50
>> ++++++++++++++++++++++++++++++++----------
>> 1 files changed, 38 insertions(+), 12 deletions(-)
>>
>> diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
>> index 783eff9..3169fbc 100644
>> --- a/modules/rtpproxy/rtpproxy.c
>> +++ b/modules/rtpproxy/rtpproxy.c
>> @@ -366,10 +366,10 @@ static cmd_export_t cmds[] = {
>> 0, 0,
>> ANY_ROUTE},
>> {"unforce_rtp_proxy", (cmd_function)unforce_rtp_proxy_f, 1,
>> - 0, 0,
>> + fixup_spve_null, 0,
>> ANY_ROUTE},
>> {"rtpproxy_destroy", (cmd_function)unforce_rtp_proxy_f, 1,
>> - 0, 0,
>> + fixup_spve_null, 0,
>> ANY_ROUTE},
>> {"start_recording", (cmd_function)start_recording_f, 0,
>> 0, 0,
>> @@ -378,19 +378,19 @@ static cmd_export_t cmds[] = {
>> 0, 0,
>> ANY_ROUTE},
>> {"rtpproxy_offer", (cmd_function)rtpproxy_offer1_f, 1,
>> - 0, 0,
>> + fixup_spve_null, 0,
>> ANY_ROUTE},
>> {"rtpproxy_offer", (cmd_function)rtpproxy_offer2_f, 2,
>> - 0, 0,
>> + fixup_spve_spve, 0,
>> ANY_ROUTE},
>> {"rtpproxy_answer", (cmd_function)rtpproxy_answer1_f, 0,
>> 0, 0,
>> ANY_ROUTE},
>> {"rtpproxy_answer", (cmd_function)rtpproxy_answer1_f, 1,
>> - 0, 0,
>> + fixup_spve_null, 0,
>> ANY_ROUTE},
>> {"rtpproxy_answer", (cmd_function)rtpproxy_answer2_f, 2,
>> - 0, 0,
>> + fixup_spve_spve, 0,
>> ANY_ROUTE},
>> {"rtpproxy_stream2uac",(cmd_function)rtpproxy_stream2uac2_f, 2,
>> fixup_var_str_int, 0,
>> @@ -1800,7 +1800,7 @@ get_extra_id(struct sip_msg* msg, str *id_str) {
>> static int
>> -unforce_rtp_proxy_f(struct sip_msg* msg, char* flags, char* str2)
>> +unforce_rtp_proxy_f(struct sip_msg* msg, char* str1, char* str2)
>> {
>> str callid, from_tag, to_tag, viabranch;
>> char *cp;
>> @@ -1810,10 +1810,16 @@ unforce_rtp_proxy_f(struct sip_msg* msg, char*
>> flags, char* str2)
>> str extra_id;
>> int ret;
>> struct rtpp_node *node;
>> + str flags;
>> struct iovec v[1 + 4 + 3 + 2] = {{NULL, 0}, {"D", 1}, {" ", 1},
>> {NULL, 0}, {NULL, 0}, {NULL, 0}, {" ", 1}, {NULL, 0}, {" ", 1}, {NULL,
>> 0}};
>> /* 1 */ /* 2 */
>> /* 3 */ /* 4 */ /* 5 */ /* 6 */ /* 7 */ /* 8 */ /* 9 */
>> - for (cp = flags; cp && *cp; cp++) {
>> + if (str1)
>> + get_str_fparam(&flags, msg, (fparam_t *) str1);
>> + else
>> + flags.s = NULL;
>> +
>> + for (cp = flags.s; cp && *cp; cp++) {
>> switch (*cp) {
>> case '1':
>> via = 1;
>> @@ -2068,16 +2074,26 @@ rtpproxy_offer1_f(struct sip_msg *msg, char
>> *str1, char *str2)
>> {
>> char *cp;
>> char newip[IP_ADDR_MAX_STR_SIZE];
>> + str flags;
>> cp = ip_addr2a(&msg->rcv.dst_ip);
>> strcpy(newip, cp);
>> - return force_rtp_proxy(msg, str1, newip, 1, 0);
>> +
>> + if (str1)
>> + get_str_fparam(&flags, msg, (fparam_t *) str1);
>> + else
>> + flags.s = NULL;
>> + return force_rtp_proxy(msg, flags.s, newip, 1, 0);
>> }
>> static int
>> rtpproxy_offer2_f(struct sip_msg *msg, char *param1, char *param2)
>> {
>> - return force_rtp_proxy(msg, param1, param2, 1, 1);
>> + str flags, new_ip;
>> +
>> + get_str_fparam(&flags, msg, (fparam_t *) param1);
>> + get_str_fparam(&new_ip, msg, (fparam_t *) param2);
>> + return force_rtp_proxy(msg, flags.s, new_ip.s, 1, 1);
>> }
>> static int
>> @@ -2085,6 +2101,7 @@ rtpproxy_answer1_f(struct sip_msg *msg, char
>> *str1, char *str2)
>> {
>> char *cp;
>> char newip[IP_ADDR_MAX_STR_SIZE];
>> + str flags;
>> if (msg->first_line.type == SIP_REQUEST)
>> if (msg->first_line.u.request.method_value != METHOD_ACK)
>> @@ -2092,18 +2109,27 @@ rtpproxy_answer1_f(struct sip_msg *msg, char
>> *str1, char *str2)
>> cp = ip_addr2a(&msg->rcv.dst_ip);
>> strcpy(newip, cp);
>> - return force_rtp_proxy(msg, str1, newip, 0, 0);
>> +
>> + if (str1)
>> + get_str_fparam(&flags, msg, (fparam_t *) str1);
>> + else
>> + flags.s = NULL;
>> + return force_rtp_proxy(msg, flags.s, newip, 0, 0);
>> }
>> static int
>> rtpproxy_answer2_f(struct sip_msg *msg, char *param1, char *param2)
>> {
>> + str flags, new_ip;
>> +
>> if (msg->first_line.type == SIP_REQUEST)
>> if (msg->first_line.u.request.method_value != METHOD_ACK)
>> return -1;
>> - return force_rtp_proxy(msg, param1, param2, 0, 1);
>> + get_str_fparam(&flags, msg, (fparam_t *) param1);
>> + get_str_fparam(&new_ip, msg, (fparam_t *) param2);
>> + return force_rtp_proxy(msg, flags.s, new_ip.s, 0, 1);
>> }
>>
>>
>> _______________________________________________
>> sr-dev mailing list
>> sr-dev at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>
More information about the sr-dev
mailing list