Skip to content

Commit

Permalink
rtpengine: suppress error for chosen set without context
Browse files Browse the repository at this point in the history
  • Loading branch information
razvancrainea committed Jan 10, 2022
1 parent e61dcb4 commit 5b07db6
Showing 1 changed file with 33 additions and 35 deletions.
68 changes: 33 additions & 35 deletions modules/rtpengine/rtpengine.c
Expand Up @@ -2012,15 +2012,14 @@ static struct rtpe_node *get_rtpe_node(str *node, struct rtpe_set *set)


static bencode_item_t *rtpe_function_call(bencode_buffer_t *bencbuf, struct sip_msg *msg,
enum rtpe_operation op, str *flags_str, str *body_in, pv_spec_t *spvar, str *snode,
bencode_item_t *extra_dict)
enum rtpe_operation op, str *flags_str, str *body_in, pv_spec_t *spvar,
struct rtpe_set *set, str *snode, bencode_item_t *extra_dict)
{
struct ng_flags_parse ng_flags;
bencode_item_t *item, *resp;
str viabranch, error;
int ret;
struct rtpe_node *node;
struct rtpe_set *set;
char *cp, *err = NULL;
pv_value_t val;
str flags_nt = {0,0};
Expand Down Expand Up @@ -2179,7 +2178,7 @@ static bencode_item_t *rtpe_function_call(bencode_buffer_t *bencbuf, struct sip_
goto error;
}

if ( (set=rtpe_ctx_set_get())==NULL )
if (!set && (set=rtpe_ctx_set_get())==NULL )
set = *default_rtpe_set;

RTPE_START_READ();
Expand Down Expand Up @@ -2281,7 +2280,7 @@ set_rtpengine_set_from_avp(struct sip_msg *msg)


static int rtpe_function_call_simple(struct sip_msg *msg, enum rtpe_operation op,
str *flags_str, str *node, pv_spec_t *spvar)
str *flags_str, struct rtpe_set *set, str *node, pv_spec_t *spvar)
{
bencode_buffer_t bencbuf;
struct rtpe_ctx *ctx;
Expand All @@ -2290,7 +2289,7 @@ static int rtpe_function_call_simple(struct sip_msg *msg, enum rtpe_operation op
if (set_rtpengine_set_from_avp(msg) == -1)
return -1;

ret = rtpe_function_call(&bencbuf, msg, op, flags_str, NULL, spvar, node, NULL);
ret = rtpe_function_call(&bencbuf, msg, op, flags_str, NULL, spvar, set, node, NULL);
if (!ret)
return -1;

Expand All @@ -2317,11 +2316,11 @@ static int rtpe_function_call_simple(struct sip_msg *msg, enum rtpe_operation op
}

static bencode_item_t *rtpe_function_call_ok(bencode_buffer_t *bencbuf, struct sip_msg *msg,
enum rtpe_operation op, str *flags_str, str *body, pv_spec_t *spvar, str *node)
enum rtpe_operation op, str *flags_str, str *body, pv_spec_t *spvar, struct rtpe_set *set, str *node)
{
bencode_item_t *ret;

ret = rtpe_function_call(bencbuf, msg, op, flags_str, body, spvar, node, NULL);
ret = rtpe_function_call(bencbuf, msg, op, flags_str, body, spvar, set, node, NULL);
if (!ret)
return NULL;

Expand Down Expand Up @@ -2665,15 +2664,16 @@ get_extra_id(struct sip_msg* msg, str *id_str) {

}

static int rtpengine_delete(struct sip_msg *msg, str *flags, str *node, pv_spec_t *spvar)
static int rtpengine_delete(struct sip_msg *msg, str *flags,
struct rtpe_set *set, str *node, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_DELETE, flags, node, spvar);
return rtpe_function_call_simple(msg, OP_DELETE, flags, set, node, spvar);
}

static int
rtpengine_delete_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpengine_delete(msg, flags, NULL, spvar);
return rtpengine_delete(msg, flags, NULL, NULL, spvar);
}

/* This function assumes p points to a line of requested type. */
Expand Down Expand Up @@ -2720,7 +2720,7 @@ rtpengine_manage(struct sip_msg *msg, str *flags, pv_spec_t *spvar,
return -1;

if(method==METHOD_CANCEL || method==METHOD_BYE)
return rtpengine_delete(msg, flags, NULL, spvar);
return rtpengine_delete(msg, flags, NULL, NULL, spvar);

if (body)
nosdp = body->len != 0;
Expand All @@ -2738,7 +2738,7 @@ rtpengine_manage(struct sip_msg *msg, str *flags, pv_spec_t *spvar,
break;
case METHOD_INVITE:
if(route_type==FAILURE_ROUTE)
return rtpengine_delete(msg, flags, NULL, spvar);
return rtpengine_delete(msg, flags, NULL, NULL, spvar);
/* fall through */
case METHOD_UPDATE:
op = OP_OFFER;
Expand All @@ -2752,7 +2752,7 @@ rtpengine_manage(struct sip_msg *msg, str *flags, pv_spec_t *spvar,
}
} else if(msg->first_line.type == SIP_REPLY) {
if(msg->first_line.u.reply.statuscode>=300)
return rtpengine_delete(msg, flags, NULL, spvar);
return rtpengine_delete(msg, flags, NULL, NULL, spvar);
if(nosdp==0) {
if(method==METHOD_UPDATE)
return rtpengine_offer_answer(msg, flags, NULL, spvar, bpvar, body, OP_ANSWER);
Expand Down Expand Up @@ -2805,7 +2805,7 @@ rtpengine_answer_f(struct sip_msg *msg, str *flags, pv_spec_t *spvar,

static int
rtpengine_offer_answer_body(struct sip_msg *msg, str *flags, str *node,
pv_spec_t *spvar, str *body, str *outbody, int op)
pv_spec_t *spvar, str *body, str *outbody, struct rtpe_set *set, int op)
{
bencode_buffer_t bencbuf;
bencode_item_t *dict;
Expand All @@ -2821,7 +2821,7 @@ rtpengine_offer_answer_body(struct sip_msg *msg, str *flags, str *node,
oldbody = *body;
}

dict = rtpe_function_call_ok(&bencbuf, msg, op, flags, &oldbody, spvar, node);
dict = rtpe_function_call_ok(&bencbuf, msg, op, flags, &oldbody, spvar, set, node);
if (!dict)
return -1;

Expand Down Expand Up @@ -2865,7 +2865,7 @@ rtpengine_offer_answer(struct sip_msg *msg, str *flags, str *node,
str newbody;
pv_value_t val;
int ret = rtpengine_offer_answer_body(msg, flags, node,
spvar, body, (bpvar?&newbody:NULL), op);
spvar, body, (bpvar?&newbody:NULL), NULL, op);
if (ret < 0)
return -1;
/* if we have a variable to store into, use it */
Expand All @@ -2884,13 +2884,13 @@ rtpengine_offer_answer(struct sip_msg *msg, str *flags, str *node,
static int
start_recording_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_START_RECORDING, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_START_RECORDING, flags, NULL, NULL, spvar);
}

static int
stop_recording_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_STOP_RECORDING, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_STOP_RECORDING, flags, NULL, NULL, spvar);
}

/**
Expand Down Expand Up @@ -2928,7 +2928,7 @@ static int rtpe_fetch_stats(struct sip_msg *msg, bencode_buffer_t *retbuf, benco
}
}

dict = rtpe_function_call_ok(&bencbuf, msg, OP_QUERY, NULL, NULL, NULL, NULL);
dict = rtpe_function_call_ok(&bencbuf, msg, OP_QUERY, NULL, NULL, NULL, NULL, NULL);
if (!dict)
return -1;

Expand Down Expand Up @@ -3473,7 +3473,7 @@ static int rtpengine_playmedia_f(struct sip_msg* msg, str *flags,
if (set_rtpengine_set_from_avp(msg) == -1)
return -1;

dict = rtpe_function_call_ok(&bencbuf, msg, OP_START_MEDIA, flags, NULL, spvar, NULL);
dict = rtpe_function_call_ok(&bencbuf, msg, OP_START_MEDIA, flags, NULL, spvar, NULL, NULL);
if (!dict) {
LM_ERR("could not start media!\n");
return -1;
Expand All @@ -3492,37 +3492,37 @@ static int rtpengine_playmedia_f(struct sip_msg* msg, str *flags,

static int rtpengine_stopmedia_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_STOP_MEDIA, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_STOP_MEDIA, flags, NULL, NULL, spvar);
}

static int rtpengine_blockmedia_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_BLOCK_MEDIA, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_BLOCK_MEDIA, flags, NULL, NULL, spvar);
}

static int rtpengine_unblockmedia_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_UNBLOCK_MEDIA, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_UNBLOCK_MEDIA, flags, NULL, NULL, spvar);
}

static int rtpengine_blockdtmf_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_BLOCK_DTMF, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_BLOCK_DTMF, flags, NULL, NULL, spvar);
}

static int rtpengine_unblockdtmf_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_UNBLOCK_DTMF, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_UNBLOCK_DTMF, flags, NULL, NULL, spvar);
}

static int rtpengine_start_forward_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_START_FORWARD, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_START_FORWARD, flags, NULL, NULL, spvar);
}

static int rtpengine_stop_forward_f(struct sip_msg* msg, str *flags, pv_spec_t *spvar)
{
return rtpe_function_call_simple(msg, OP_STOP_FORWARD, flags, NULL, spvar);
return rtpe_function_call_simple(msg, OP_STOP_FORWARD, flags, NULL, NULL, spvar);
}

static int rtpengine_play_dtmf_f(struct sip_msg* msg, str *code, str *flags, pv_spec_t *spvar)
Expand All @@ -3541,7 +3541,8 @@ static int rtpengine_play_dtmf_f(struct sip_msg* msg, str *code, str *flags, pv_
return -2;
}
bencode_dictionary_add_str(d_code, "code", code);
ret = rtpe_function_call(&bencbuf, msg, OP_PLAY_DTMF, flags, NULL, spvar, NULL, d_code);
ret = rtpe_function_call(&bencbuf, msg, OP_PLAY_DTMF,
flags, NULL, spvar, NULL, NULL, d_code);
if (!ret)
return -2;

Expand Down Expand Up @@ -3806,14 +3807,13 @@ static int rtpengine_api_offer(struct rtp_relay_session *sess, struct rtp_relay_
rset = select_rtpe_set(server->set);
node = &server->node;
}
rtpe_ctx_set_fill( rset );
RTPE_STOP_READ();

newflags = rtpengine_get_call_flags(sess, type, in_iface, out_iface, flags, extra);
if (!newflags)
return -1;
ret = rtpengine_offer_answer_body(sess->msg, newflags, node,
&media_pvar, sess->body, body, OP_OFFER);
&media_pvar, sess->body, body, rset, OP_OFFER);
pkg_free(newflags->s);
if (ret >= 0) {
if (pv_get_spec_value(sess->msg, &media_pvar, &val) >= 0)
Expand All @@ -3833,14 +3833,13 @@ static int rtpengine_api_answer(struct rtp_relay_session *sess, struct rtp_relay

RTPE_START_READ();
rset = select_rtpe_set(server->set);
rtpe_ctx_set_fill( rset );
RTPE_STOP_READ();

newflags = rtpengine_get_call_flags(sess, type, in_iface, out_iface, flags, extra);
if (!newflags)
return -1;
ret = rtpengine_offer_answer_body(sess->msg, newflags, &server->node,
NULL, sess->body, body, OP_ANSWER);
NULL, sess->body, body, rset, OP_ANSWER);
pkg_free(newflags->s);
return ret;
}
Expand All @@ -3855,14 +3854,13 @@ static int rtpengine_api_delete(struct rtp_relay_session *sess, struct rtp_relay

RTPE_START_READ();
rset = select_rtpe_set(server->set);
rtpe_ctx_set_fill( rset );
RTPE_STOP_READ();

newflags = rtpengine_get_call_flags(sess, NULL, NULL, NULL, flags, extra);
if (!newflags)
return -1;
msg = (sess->msg?sess->msg:get_dummy_sip_msg());
ret = rtpengine_delete(msg, newflags, &server->node, NULL);
ret = rtpengine_delete(msg, newflags, rset, &server->node, NULL);
if (is_dummy_sip_msg(msg) == 0)
release_dummy_sip_msg(msg);
pkg_free(newflags->s);
Expand Down

0 comments on commit 5b07db6

Please sign in to comment.