Skip to content

Commit

Permalink
rtpengine: new read_sdp_pv parameter
Browse files Browse the repository at this point in the history
this parameter allows to specify a script var or AVP for rtpengine to
get the SDP from, instead of the SIP message body.
  • Loading branch information
camilleoudot committed Aug 11, 2015
1 parent 60ffee9 commit 5ee6747
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
25 changes: 25 additions & 0 deletions modules/rtpengine/doc/rtpengine_admin.xml
Expand Up @@ -286,6 +286,31 @@ modparam("rtpengine", "force_send_interface", "2001:8d8:1ff:10c0:9a90:96ff:fea8:
</programlisting>
</example>
</section>

<section id="rtpengine.p.read_sdp_pv">
<title><varname>read_sdp_pv</varname> (string)</title>
<para>
If this parameter is set to a valid AVP or script var specifier, rtpengine
will take the input SDP from this pv instead of the message body.
</para>
<para>
There is no default value.
</para>
<example>
<title>Set <varname>read_sdp_pv</varname> parameter</title>
<programlisting format="linespecific">
...
modparam("rtpengine", "read_sdp_pv", "$var(sdp)")
...
route {
...
$var(sdp) = $rb + "a=foo:bar\r\n";
rtpproxy_manage();
}
</programlisting>
</example>
</section>

<section id="rtpengine.p.write_sdp_pv">
<title><varname>write_sdp_pv</varname> (string)</title>
<para>
Expand Down
26 changes: 25 additions & 1 deletion modules/rtpengine/rtpengine.c
Expand Up @@ -255,6 +255,9 @@ static int_str setid_avp;
static str write_sdp_pvar_str = {NULL, 0};
static pv_spec_t* write_sdp_pvar = NULL;

static str read_sdp_pvar_str = {NULL, 0};
static pv_spec_t* read_sdp_pvar = NULL;

#define RTPENGINE_SESS_LIMIT_MSG "Parallel session limit reached"
#define RTPENGINE_SESS_LIMIT_MSG_LEN (sizeof(RTPENGINE_SESS_LIMIT_MSG)-1)

Expand Down Expand Up @@ -332,6 +335,7 @@ static param_export_t params[] = {
{"force_send_interface", PARAM_STRING, &force_send_ip_str },
{"rtp_inst_pvar", PARAM_STR, &rtp_inst_pv_param },
{"write_sdp_pv", PARAM_STR, &write_sdp_pvar_str },
{"read_sdp_pv", PARAM_STR, &read_sdp_pvar_str },
{0, 0, 0}
};

Expand Down Expand Up @@ -1403,6 +1407,16 @@ mod_init(void)
}
}

if (read_sdp_pvar_str.len > 0) {
read_sdp_pvar = pv_cache_get(&read_sdp_pvar_str);
if (read_sdp_pvar == NULL
|| (read_sdp_pvar->type != PVT_AVP && read_sdp_pvar->type != PVT_SCRIPTVAR) ) {
LM_ERR("read_sdp_pv: not a valid AVP or VAR definition <%.*s>\n",
read_sdp_pvar_str.len, read_sdp_pvar_str.s);
return -1;
}
}

if (rtpp_strings)
pkg_free(rtpp_strings);

Expand Down Expand Up @@ -1780,6 +1794,7 @@ static bencode_item_t *rtpp_function_call(bencode_buffer_t *bencbuf, struct sip_
int ret, queried_nodes;
struct rtpp_node *node;
char *cp;
pv_value_t pv_val;

/*** get & init basic stuff needed ***/

Expand Down Expand Up @@ -1810,7 +1825,16 @@ static bencode_item_t *rtpp_function_call(bencode_buffer_t *bencbuf, struct sip_
ng_flags.replace = bencode_list(bencbuf);
ng_flags.rtcp_mux = bencode_list(bencbuf);

if (extract_body(msg, &body) == -1) {
if (read_sdp_pvar!= NULL) {
if (read_sdp_pvar->getf(msg,&read_sdp_pvar->pvp, &pv_val) < 0)
{
LM_ERR("error getting pvar value <%.*s>\n", read_sdp_pvar_str.len, read_sdp_pvar_str.s);
goto error;
} else {
body = pv_val.rs;
}

} else if (extract_body(msg, &body) == -1) {
LM_ERR("can't extract body from the message\n");
goto error;
}
Expand Down

0 comments on commit 5ee6747

Please sign in to comment.