Browse Source

MT#61368 avoid opmode redundancy

The opmode is already determined uniquely when processing the NG
command. There is no need to explicitly set it again elsewhere. Simply
carry along the originally determined opmode.

Change-Id: I16924264b0337423aff6763c70a4b2c6dd3687db
pull/1884/head
Richard Fuchs 1 year ago
parent
commit
67141a517b
2 changed files with 83 additions and 88 deletions
  1. +49
    -53
      daemon/call_interfaces.c
  2. +34
    -35
      daemon/control_ng.c

+ 49
- 53
daemon/call_interfaces.c View File

@ -2086,18 +2086,17 @@ void call_ng_main_flags(const ng_parser_t *parser, str *key, parser_arg value, h
} }
} }
static void call_ng_process_flags(sdp_ng_flags *out, ng_command_ctx_t *ctx, enum ng_opmode opmode) {
static void call_ng_process_flags(sdp_ng_flags *out, ng_command_ctx_t *ctx) {
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
call_ng_flags_init(out, opmode);
ctx->opmode = opmode;
call_ng_flags_init(out, ctx->opmode);
ctx->flags = out; ctx->flags = out;
// check for default templates, "default" first // check for default templates, "default" first
if (rtpe_default_signalling_templates[OP_OTHER].len) if (rtpe_default_signalling_templates[OP_OTHER].len)
parse_rtpp_flags(&rtpe_default_signalling_templates[OP_OTHER], out); parse_rtpp_flags(&rtpe_default_signalling_templates[OP_OTHER], out);
// and then one matching the current command // and then one matching the current command
if (opmode != OP_OTHER && rtpe_default_signalling_templates[opmode].len)
parse_rtpp_flags(&rtpe_default_signalling_templates[opmode], out);
if (ctx->opmode != OP_OTHER && rtpe_default_signalling_templates[ctx->opmode].len)
parse_rtpp_flags(&rtpe_default_signalling_templates[ctx->opmode], out);
parser->dict_iter(parser, ctx->req, call_ng_main_flags, out); parser->dict_iter(parser, ctx->req, call_ng_main_flags, out);
} }
@ -2195,7 +2194,7 @@ void save_last_sdp(struct call_monologue *ml, str *sdp, sdp_sessions_q *parsed,
} }
static enum basic_errors call_ng_basic_checks(sdp_ng_flags *flags, enum ng_opmode opmode)
static enum basic_errors call_ng_basic_checks(sdp_ng_flags *flags)
{ {
if (!flags->sdp.s) if (!flags->sdp.s)
return NG_ERROR_NO_SDP_BODY; return NG_ERROR_NO_SDP_BODY;
@ -2203,7 +2202,7 @@ static enum basic_errors call_ng_basic_checks(sdp_ng_flags *flags, enum ng_opmod
return NG_ERROR_NO_CALL_ID; return NG_ERROR_NO_CALL_ID;
if (!flags->from_tag.s) if (!flags->from_tag.s)
return NG_ERROR_NO_FROM_TAG; return NG_ERROR_NO_FROM_TAG;
if (opmode == OP_ANSWER && !flags->to_tag.s)
if (flags->opmode == OP_ANSWER && !flags->to_tag.s)
return NG_ERROR_NO_TO_TAG; return NG_ERROR_NO_TO_TAG;
return 0; return 0;
} }
@ -2231,7 +2230,7 @@ static const char *call_offer_get_call(call_t **callp, sdp_ng_flags *flags) {
return NULL; return NULL;
} }
static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode opmode, const char* addr,
static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, const char* addr,
const endpoint_t *sin) const endpoint_t *sin)
{ {
const char *errstr; const char *errstr;
@ -2246,17 +2245,17 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode op
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
g_auto(str) sdp_out = STR_NULL; g_auto(str) sdp_out = STR_NULL;
call_ng_process_flags(&flags, ctx, opmode);
call_ng_process_flags(&flags, ctx);
if ((ret = call_ng_basic_checks(&flags, opmode)) > 0)
if ((ret = call_ng_basic_checks(&flags)) > 0)
return _ng_basic_errors[ret]; return _ng_basic_errors[ret];
if (opmode == OP_OFFER) {
if (flags.opmode == OP_OFFER) {
errstr = call_offer_get_call(&call, &flags); errstr = call_offer_get_call(&call, &flags);
if (errstr) if (errstr)
goto out; goto out;
} }
else if (opmode == OP_ANSWER) {
else if (flags.opmode == OP_ANSWER) {
call = call_get(&flags.call_id); call = call_get(&flags.call_id);
errstr = "Unknown call-id"; errstr = "Unknown call-id";
@ -2285,7 +2284,7 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode op
goto out; goto out;
// SDP fragments for trickle ICE must always operate on an existing call // SDP fragments for trickle ICE must always operate on an existing call
if (opmode == OP_OFFER && trickle_ice_update(ctx->ngbuf, call, &flags, &streams)) {
if (flags.opmode == OP_OFFER && trickle_ice_update(ctx->ngbuf, call, &flags, &streams)) {
errstr = NULL; errstr = NULL;
// SDP fragments for trickle ICE are consumed with no replacement returned // SDP fragments for trickle ICE are consumed with no replacement returned
goto out; goto out;
@ -2317,7 +2316,7 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode op
struct call_monologue *from_ml = monologues[0]; struct call_monologue *from_ml = monologues[0];
struct call_monologue *to_ml = monologues[1]; struct call_monologue *to_ml = monologues[1];
if (opmode == OP_OFFER) {
if (flags.opmode == OP_OFFER) {
from_ml->tagtype = FROM_TAG; from_ml->tagtype = FROM_TAG;
} else { } else {
from_ml->tagtype = TO_TAG; from_ml->tagtype = TO_TAG;
@ -2342,7 +2341,7 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode op
recording = call->recording; recording = call->recording;
meta_write_sdp_before(recording, &sdp, from_ml, opmode);
meta_write_sdp_before(recording, &sdp, from_ml, flags.opmode);
/* if all fine, prepare an outer sdp and save it */ /* if all fine, prepare an outer sdp and save it */
if ((ret = sdp_create(&sdp_out, to_ml, &flags)) == 0) { if ((ret = sdp_create(&sdp_out, to_ml, &flags)) == 0) {
@ -2355,7 +2354,7 @@ static const char *call_offer_answer_ng(ng_command_ctx_t *ctx, enum ng_opmode op
ctx->ngbuf->sdp_out = sdp_out.s; ctx->ngbuf->sdp_out = sdp_out.s;
ctx->parser_ctx.parser->dict_add_str(output, "sdp", &sdp_out); ctx->parser_ctx.parser->dict_add_str(output, "sdp", &sdp_out);
meta_write_sdp_after(recording, &sdp_out, from_ml, opmode);
meta_write_sdp_after(recording, &sdp_out, from_ml, flags.opmode);
sdp_out = STR_NULL; /* ownership passed to output */ sdp_out = STR_NULL; /* ownership passed to output */
} }
@ -2396,11 +2395,11 @@ const char *call_offer_ng(ng_command_ctx_t *ctx,
const char* addr, const char* addr,
const endpoint_t *sin) const endpoint_t *sin)
{ {
return call_offer_answer_ng(ctx, OP_OFFER, addr, sin);
return call_offer_answer_ng(ctx, addr, sin);
} }
const char *call_answer_ng(ng_command_ctx_t *ctx) { const char *call_answer_ng(ng_command_ctx_t *ctx) {
return call_offer_answer_ng(ctx, OP_ANSWER, NULL, NULL);
return call_offer_answer_ng(ctx, NULL, NULL);
} }
const char *call_delete_ng(ng_command_ctx_t *ctx) { const char *call_delete_ng(ng_command_ctx_t *ctx) {
@ -2408,7 +2407,7 @@ const char *call_delete_ng(ng_command_ctx_t *ctx) {
parser_arg output = ctx->resp; parser_arg output = ctx->resp;
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
call_ng_process_flags(&rtpp_flags, ctx, OP_DELETE);
call_ng_process_flags(&rtpp_flags, ctx);
if (!rtpp_flags.call_id.len) if (!rtpp_flags.call_id.len)
return "No call-id in message"; return "No call-id in message";
@ -2897,7 +2896,7 @@ const char *call_query_ng(ng_command_ctx_t *ctx) {
if (!parser->dict_get_str(input, "call-id", &callid)) if (!parser->dict_get_str(input, "call-id", &callid))
return "No call-id in message"; return "No call-id in message";
call = call_get_opmode(&callid, OP_QUERY);
call = call_get_opmode(&callid, ctx->opmode);
if (!call) if (!call)
return "Unknown call-id"; return "Unknown call-id";
parser->dict_get_str(input, "from-tag", &fromtag); parser->dict_get_str(input, "from-tag", &fromtag);
@ -2932,7 +2931,6 @@ const char *call_list_ng(ng_command_ctx_t *ctx) {
static const char *call_recording_common_ng(ng_command_ctx_t *ctx, static const char *call_recording_common_ng(ng_command_ctx_t *ctx,
enum ng_opmode opmode,
void (*fn)(ng_command_ctx_t *, call_t *call)) void (*fn)(ng_command_ctx_t *, call_t *call))
{ {
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
@ -2940,11 +2938,11 @@ static const char *call_recording_common_ng(ng_command_ctx_t *ctx,
parser_arg input = ctx->req; parser_arg input = ctx->req;
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
call_ng_process_flags(&flags, ctx, opmode);
call_ng_process_flags(&flags, ctx);
if (!parser->dict_get_str(input, "call-id", &flags.call_id)) if (!parser->dict_get_str(input, "call-id", &flags.call_id))
return "No call-id in message"; return "No call-id in message";
call = call_get_opmode(&flags.call_id, opmode);
call = call_get_opmode(&flags.call_id, flags.opmode);
if (!call) if (!call)
return "Unknown call-id"; return "Unknown call-id";
@ -2974,7 +2972,7 @@ static void start_recording_fn(ng_command_ctx_t *ctx, call_t *call) {
recording_start(call); recording_start(call);
} }
const char *call_start_recording_ng(ng_command_ctx_t *ctx) { const char *call_start_recording_ng(ng_command_ctx_t *ctx) {
return call_recording_common_ng(ctx, OP_START_RECORDING, start_recording_fn);
return call_recording_common_ng(ctx, start_recording_fn);
} }
@ -2982,7 +2980,7 @@ static void pause_recording_fn(ng_command_ctx_t *ctx, call_t *call) {
recording_pause(call); recording_pause(call);
} }
const char *call_pause_recording_ng(ng_command_ctx_t *ctx) { const char *call_pause_recording_ng(ng_command_ctx_t *ctx) {
return call_recording_common_ng(ctx, OP_PAUSE_RECORDING, pause_recording_fn);
return call_recording_common_ng(ctx, pause_recording_fn);
} }
@ -3012,12 +3010,12 @@ static void stop_recording_fn(ng_command_ctx_t *ctx, call_t *call) {
fn(call); fn(call);
} }
const char *call_stop_recording_ng(ng_command_ctx_t *ctx) { const char *call_stop_recording_ng(ng_command_ctx_t *ctx) {
return call_recording_common_ng(ctx, OP_STOP_RECORDING, stop_recording_fn);
return call_recording_common_ng(ctx, stop_recording_fn);
} }
static const char *media_block_match1(call_t *call, struct call_monologue **monologue, static const char *media_block_match1(call_t *call, struct call_monologue **monologue,
sdp_ng_flags *flags, enum ng_opmode opmode)
sdp_ng_flags *flags)
{ {
if (flags->label.s) { if (flags->label.s) {
*monologue = t_hash_table_lookup(call->labels, &flags->label); *monologue = t_hash_table_lookup(call->labels, &flags->label);
@ -3051,8 +3049,8 @@ found:
} }
/* ignore from-tag, if directional is not set */ /* ignore from-tag, if directional is not set */
else if (flags->from_tag.s && else if (flags->from_tag.s &&
(!IS_OP_DIRECTIONAL(opmode) ||
(IS_OP_DIRECTIONAL(opmode) && flags->directional))) {
(!IS_OP_DIRECTIONAL(flags->opmode) ||
(IS_OP_DIRECTIONAL(flags->opmode) && flags->directional))) {
*monologue = call_get_monologue(call, &flags->from_tag); *monologue = call_get_monologue(call, &flags->from_tag);
if (!*monologue) if (!*monologue)
return "From-tag given, but no such tag exists"; return "From-tag given, but no such tag exists";
@ -3062,16 +3060,16 @@ found:
return NULL; return NULL;
} }
static const char *media_block_match(call_t **call, struct call_monologue **monologue, static const char *media_block_match(call_t **call, struct call_monologue **monologue,
sdp_ng_flags *flags, ng_command_ctx_t *ctx, enum ng_opmode opmode)
sdp_ng_flags *flags, ng_command_ctx_t *ctx)
{ {
*call = NULL; *call = NULL;
*monologue = NULL; *monologue = NULL;
call_ng_process_flags(flags, ctx, opmode);
call_ng_process_flags(flags, ctx);
if (!flags->call_id.s) if (!flags->call_id.s)
return "No call-id in message"; return "No call-id in message";
*call = call_get_opmode(&flags->call_id, opmode);
*call = call_get_opmode(&flags->call_id, flags->opmode);
if (!*call) if (!*call)
return "Unknown call-ID"; return "Unknown call-ID";
@ -3079,12 +3077,12 @@ static const char *media_block_match(call_t **call, struct call_monologue **mono
if (flags->all == ALL_ALL) // explicitly non-directional, so skip the rest if (flags->all == ALL_ALL) // explicitly non-directional, so skip the rest
return NULL; return NULL;
const char *err = media_block_match1(*call, monologue, flags, opmode);
const char *err = media_block_match1(*call, monologue, flags);
if (err) if (err)
return err; return err;
// for generic ops, handle set-label here if given // for generic ops, handle set-label here if given
if (IS_OP_OTHER(opmode) && flags->set_label.len && *monologue) {
if (IS_OP_OTHER(flags->opmode) && flags->set_label.len && *monologue) {
(*monologue)->label = call_str_cpy(&flags->set_label); (*monologue)->label = call_str_cpy(&flags->set_label);
t_hash_table_replace((*call)->labels, &(*monologue)->label, *monologue); t_hash_table_replace((*call)->labels, &(*monologue)->label, *monologue);
} }
@ -3098,13 +3096,13 @@ void add_media_to_sub_list(subscription_q *q, struct call_media *media, struct c
t_queue_push_tail(q, ms); t_queue_push_tail(q, ms);
} }
static const char *media_block_match_mult(call_t **call, subscription_q *medias, static const char *media_block_match_mult(call_t **call, subscription_q *medias,
sdp_ng_flags *flags, ng_command_ctx_t *ctx, enum ng_opmode opmode)
sdp_ng_flags *flags, ng_command_ctx_t *ctx)
{ {
call_ng_process_flags(flags, ctx, opmode);
call_ng_process_flags(flags, ctx);
if (!flags->call_id.s) if (!flags->call_id.s)
return "No call-id in message"; return "No call-id in message";
*call = call_get_opmode(&flags->call_id, opmode);
*call = call_get_opmode(&flags->call_id, flags->opmode);
if (!*call) if (!*call)
return "Unknown call-ID"; return "Unknown call-ID";
@ -3124,7 +3122,7 @@ static const char *media_block_match_mult(call_t **call, subscription_q *medias,
/* is a single ml given? */ /* is a single ml given? */
struct call_monologue *ml = NULL; struct call_monologue *ml = NULL;
const char *err = media_block_match1(*call, &ml, flags, opmode);
const char *err = media_block_match1(*call, &ml, flags);
if (err) if (err)
return err; return err;
if (ml) { if (ml) {
@ -3168,7 +3166,7 @@ const char *call_start_forwarding_ng(ng_command_ctx_t *ctx) {
const char *errstr = NULL; const char *errstr = NULL;
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
errstr = media_block_match(&call, &monologue, &flags, ctx, OP_START_FORWARDING);
errstr = media_block_match(&call, &monologue, &flags, ctx);
if (errstr) if (errstr)
return errstr; return errstr;
@ -3197,7 +3195,7 @@ const char *call_stop_forwarding_ng(ng_command_ctx_t *ctx) {
const char *errstr = NULL; const char *errstr = NULL;
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
errstr = media_block_match(&call, &monologue, &flags, ctx, OP_STOP_FORWARDING);
errstr = media_block_match(&call, &monologue, &flags, ctx);
if (errstr) if (errstr)
return errstr; return errstr;
@ -3305,7 +3303,7 @@ const char *call_block_dtmf_ng(ng_command_ctx_t *ctx) {
const char *errstr = NULL; const char *errstr = NULL;
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
errstr = media_block_match(&call, &monologue, &flags, ctx, OP_BLOCK_DTMF);
errstr = media_block_match(&call, &monologue, &flags, ctx);
if (errstr) if (errstr)
return errstr; return errstr;
@ -3320,7 +3318,7 @@ const char *call_unblock_dtmf_ng(ng_command_ctx_t *ctx) {
const char *errstr = NULL; const char *errstr = NULL;
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
errstr = media_block_match(&call, &monologue, &flags, ctx, OP_UNBLOCK_DTMF);
errstr = media_block_match(&call, &monologue, &flags, ctx);
if (errstr) if (errstr)
return errstr; return errstr;
@ -3383,7 +3381,7 @@ static const char *call_block_silence_media(ng_command_ctx_t *ctx, bool on_off,
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
bool found_subscriptions = false; bool found_subscriptions = false;
errstr = media_block_match(&call, &monologue, &flags, ctx, OP_BLOCK_SILENCE_MEDIA);
errstr = media_block_match(&call, &monologue, &flags, ctx);
if (errstr) if (errstr)
return errstr; return errstr;
@ -3560,7 +3558,7 @@ static const char *play_media_select_party(call_t **call, monologues_q *monologu
t_queue_init(monologues); t_queue_init(monologues);
const char *err = media_block_match(call, &monologue, flags, ctx, OP_PLAY_MEDIA);
const char *err = media_block_match(call, &monologue, flags, ctx);
if (err) if (err)
return err; return err;
if (flags->all == ALL_ALL) if (flags->all == ALL_ALL)
@ -3586,8 +3584,6 @@ const char *call_play_media_ng(ng_command_ctx_t *ctx) {
if (err) if (err)
return err; return err;
flags.opmode = OP_PLAY_MEDIA;
for (__auto_type l = monologues.head; l; l = l->next) { for (__auto_type l = monologues.head; l; l = l->next) {
struct call_monologue *monologue = l->data; struct call_monologue *monologue = l->data;
@ -3783,9 +3779,9 @@ const char *call_publish_ng(ng_command_ctx_t *ctx,
int ret; int ret;
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
call_ng_process_flags(&flags, ctx, OP_PUBLISH);
call_ng_process_flags(&flags, ctx);
if ((ret = call_ng_basic_checks(&flags, OP_PUBLISH)) > 0)
if ((ret = call_ng_basic_checks(&flags)) > 0)
return _ng_basic_errors[ret]; return _ng_basic_errors[ret];
call = call_get_or_create(&flags.call_id, false); call = call_get_or_create(&flags.call_id, false);
@ -3838,7 +3834,7 @@ const char *call_subscribe_request_ng(ng_command_ctx_t *ctx) {
const ng_parser_t *parser = ctx->parser_ctx.parser; const ng_parser_t *parser = ctx->parser_ctx.parser;
/* get source monologue */ /* get source monologue */
err = media_block_match_mult(&call, &srms, &flags, ctx, OP_SUBSCRIBE_REQ);
err = media_block_match_mult(&call, &srms, &flags, ctx);
if (err) if (err)
return err; return err;
@ -3944,11 +3940,11 @@ const char *call_subscribe_answer_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_streams_q) streams = TYPED_GQUEUE_INIT; g_auto(sdp_streams_q) streams = TYPED_GQUEUE_INIT;
g_autoptr(call_t) call = NULL; g_autoptr(call_t) call = NULL;
call_ng_process_flags(&flags, ctx, OP_SUBSCRIBE_ANS);
call_ng_process_flags(&flags, ctx);
if (!flags.call_id.s) if (!flags.call_id.s)
return "No call-id in message"; return "No call-id in message";
call = call_get_opmode(&flags.call_id, OP_SUBSCRIBE_ANS);
call = call_get_opmode(&flags.call_id, flags.opmode);
if (!call) if (!call)
return "Unknown call-ID"; return "Unknown call-ID";
@ -3985,11 +3981,11 @@ const char *call_unsubscribe_ng(ng_command_ctx_t *ctx) {
g_auto(sdp_ng_flags) flags; g_auto(sdp_ng_flags) flags;
g_autoptr(call_t) call = NULL; g_autoptr(call_t) call = NULL;
call_ng_process_flags(&flags, ctx, OP_SUBSCRIBE_ANS);
call_ng_process_flags(&flags, ctx);
if (!flags.call_id.s) if (!flags.call_id.s)
return "No call-id in message"; return "No call-id in message";
call = call_get_opmode(&flags.call_id, OP_SUBSCRIBE_ANS);
call = call_get_opmode(&flags.call_id, flags.opmode);
if (!call) if (!call)
return "Unknown call-ID"; return "Unknown call-ID";


+ 34
- 35
daemon/control_ng.c View File

@ -671,9 +671,8 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
GString *log_str; GString *log_str;
struct timeval cmd_start, cmd_stop, cmd_process_time = {0}; struct timeval cmd_start, cmd_stop, cmd_process_time = {0};
struct control_ng_stats* cur = get_control_ng_stats(&sin->address); struct control_ng_stats* cur = get_control_ng_stats(&sin->address);
enum ng_opmode command = -1;
ng_command_ctx_t command_ctx = {0};
ng_command_ctx_t command_ctx = {.opmode = -1};
const ng_parser_t *parser = &ng_parser_native; const ng_parser_t *parser = &ng_parser_native;
command_ctx.ngbuf = *ngbufp = ng_buffer_new(ref); command_ctx.ngbuf = *ngbufp = ng_buffer_new(ref);
@ -744,109 +743,109 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
switch (__csh_lookup(&cmd)) { switch (__csh_lookup(&cmd)) {
case CSH_LOOKUP("ping"): case CSH_LOOKUP("ping"):
resultstr = "pong"; resultstr = "pong";
command = OP_PING;
command_ctx.opmode = OP_PING;
break; break;
case CSH_LOOKUP("offer"): case CSH_LOOKUP("offer"):
command_ctx.opmode = OP_OFFER;
errstr = call_offer_ng(&command_ctx, addr, sin); errstr = call_offer_ng(&command_ctx, addr, sin);
command = OP_OFFER;
break; break;
case CSH_LOOKUP("answer"): case CSH_LOOKUP("answer"):
command_ctx.opmode = OP_ANSWER;
errstr = call_answer_ng(&command_ctx); errstr = call_answer_ng(&command_ctx);
command = OP_ANSWER;
break; break;
case CSH_LOOKUP("delete"): case CSH_LOOKUP("delete"):
command_ctx.opmode = OP_DELETE;
errstr = call_delete_ng(&command_ctx); errstr = call_delete_ng(&command_ctx);
command = OP_DELETE;
break; break;
case CSH_LOOKUP("query"): case CSH_LOOKUP("query"):
command_ctx.opmode = OP_QUERY;
errstr = call_query_ng(&command_ctx); errstr = call_query_ng(&command_ctx);
command = OP_QUERY;
break; break;
case CSH_LOOKUP("list"): case CSH_LOOKUP("list"):
command_ctx.opmode = OP_LIST;
errstr = call_list_ng(&command_ctx); errstr = call_list_ng(&command_ctx);
command = OP_LIST;
break; break;
case CSH_LOOKUP("start recording"): case CSH_LOOKUP("start recording"):
command_ctx.opmode = OP_START_RECORDING;
errstr = call_start_recording_ng(&command_ctx); errstr = call_start_recording_ng(&command_ctx);
command = OP_START_RECORDING;
break; break;
case CSH_LOOKUP("stop recording"): case CSH_LOOKUP("stop recording"):
command_ctx.opmode = OP_STOP_RECORDING;
errstr = call_stop_recording_ng(&command_ctx); errstr = call_stop_recording_ng(&command_ctx);
command = OP_STOP_RECORDING;
break; break;
case CSH_LOOKUP("pause recording"): case CSH_LOOKUP("pause recording"):
command_ctx.opmode = OP_PAUSE_RECORDING;
errstr = call_pause_recording_ng(&command_ctx); errstr = call_pause_recording_ng(&command_ctx);
command = OP_PAUSE_RECORDING;
break; break;
case CSH_LOOKUP("start forwarding"): case CSH_LOOKUP("start forwarding"):
command_ctx.opmode = OP_START_FORWARDING;
errstr = call_start_forwarding_ng(&command_ctx); errstr = call_start_forwarding_ng(&command_ctx);
command = OP_START_FORWARDING;
break; break;
case CSH_LOOKUP("stop forwarding"): case CSH_LOOKUP("stop forwarding"):
command_ctx.opmode = OP_STOP_FORWARDING;
errstr = call_stop_forwarding_ng(&command_ctx); errstr = call_stop_forwarding_ng(&command_ctx);
command = OP_STOP_FORWARDING;
break; break;
case CSH_LOOKUP("block DTMF"): case CSH_LOOKUP("block DTMF"):
command_ctx.opmode = OP_BLOCK_DTMF;
errstr = call_block_dtmf_ng(&command_ctx); errstr = call_block_dtmf_ng(&command_ctx);
command = OP_BLOCK_DTMF;
break; break;
case CSH_LOOKUP("unblock DTMF"): case CSH_LOOKUP("unblock DTMF"):
command_ctx.opmode = OP_UNBLOCK_DTMF;
errstr = call_unblock_dtmf_ng(&command_ctx); errstr = call_unblock_dtmf_ng(&command_ctx);
command = OP_UNBLOCK_DTMF;
break; break;
case CSH_LOOKUP("block media"): case CSH_LOOKUP("block media"):
command_ctx.opmode = OP_BLOCK_MEDIA;
errstr = call_block_media_ng(&command_ctx); errstr = call_block_media_ng(&command_ctx);
command = OP_BLOCK_MEDIA;
break; break;
case CSH_LOOKUP("unblock media"): case CSH_LOOKUP("unblock media"):
command_ctx.opmode = OP_UNBLOCK_MEDIA;
errstr = call_unblock_media_ng(&command_ctx); errstr = call_unblock_media_ng(&command_ctx);
command = OP_UNBLOCK_MEDIA;
break; break;
case CSH_LOOKUP("silence media"): case CSH_LOOKUP("silence media"):
command_ctx.opmode = OP_SILENCE_MEDIA;
errstr = call_silence_media_ng(&command_ctx); errstr = call_silence_media_ng(&command_ctx);
command = OP_SILENCE_MEDIA;
break; break;
case CSH_LOOKUP("unsilence media"): case CSH_LOOKUP("unsilence media"):
command_ctx.opmode = OP_UNSILENCE_MEDIA;
errstr = call_unsilence_media_ng(&command_ctx); errstr = call_unsilence_media_ng(&command_ctx);
command = OP_UNSILENCE_MEDIA;
break; break;
case CSH_LOOKUP("play media"): case CSH_LOOKUP("play media"):
command_ctx.opmode = OP_PLAY_MEDIA;
errstr = call_play_media_ng(&command_ctx); errstr = call_play_media_ng(&command_ctx);
command = OP_PLAY_MEDIA;
break; break;
case CSH_LOOKUP("stop media"): case CSH_LOOKUP("stop media"):
command_ctx.opmode = OP_STOP_MEDIA;
errstr = call_stop_media_ng(&command_ctx); errstr = call_stop_media_ng(&command_ctx);
command = OP_STOP_MEDIA;
break; break;
case CSH_LOOKUP("play DTMF"): case CSH_LOOKUP("play DTMF"):
command_ctx.opmode = OP_PLAY_DTMF;
errstr = call_play_dtmf_ng(&command_ctx); errstr = call_play_dtmf_ng(&command_ctx);
command = OP_PLAY_DTMF;
break; break;
case CSH_LOOKUP("statistics"): case CSH_LOOKUP("statistics"):
command_ctx.opmode = OP_STATISTICS;
errstr = statistics_ng(&command_ctx); errstr = statistics_ng(&command_ctx);
command = OP_STATISTICS;
break; break;
case CSH_LOOKUP("publish"): case CSH_LOOKUP("publish"):
command_ctx.opmode = OP_PUBLISH;
errstr = call_publish_ng(&command_ctx, addr, sin); errstr = call_publish_ng(&command_ctx, addr, sin);
command = OP_PUBLISH;
break; break;
case CSH_LOOKUP("subscribe request"): case CSH_LOOKUP("subscribe request"):
command_ctx.opmode = OP_SUBSCRIBE_REQ;
errstr = call_subscribe_request_ng(&command_ctx); errstr = call_subscribe_request_ng(&command_ctx);
command = OP_SUBSCRIBE_REQ;
break; break;
case CSH_LOOKUP("subscribe answer"): case CSH_LOOKUP("subscribe answer"):
command_ctx.opmode = OP_SUBSCRIBE_ANS;
errstr = call_subscribe_answer_ng(&command_ctx); errstr = call_subscribe_answer_ng(&command_ctx);
command = OP_SUBSCRIBE_ANS;
break; break;
case CSH_LOOKUP("unsubscribe"): case CSH_LOOKUP("unsubscribe"):
command_ctx.opmode = OP_UNSUBSCRIBE;
errstr = call_unsubscribe_ng(&command_ctx); errstr = call_unsubscribe_ng(&command_ctx);
command = OP_UNSUBSCRIBE;
break; break;
default: default:
errstr = "Unrecognized command"; errstr = "Unrecognized command";
} }
CH(homer_fill_values, hctx, &callid, command);
CH(homer_fill_values, hctx, &callid, command_ctx.opmode);
CH(homer_trace_msg_in, hctx, data); CH(homer_trace_msg_in, hctx, data);
// stop command timer // stop command timer
@ -854,11 +853,11 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
//print command duration //print command duration
timeval_from_us(&cmd_process_time, timeval_diff(&cmd_stop, &cmd_start)); timeval_from_us(&cmd_process_time, timeval_diff(&cmd_stop, &cmd_start));
if (command >= 0 && command < OP_COUNT) {
mutex_lock(&cur->cmd[command].lock);
cur->cmd[command].count++;
timeval_add(&cur->cmd[command].time, &cur->cmd[command].time, &cmd_process_time);
mutex_unlock(&cur->cmd[command].lock);
if (command_ctx.opmode >= 0 && command_ctx.opmode < OP_COUNT) {
mutex_lock(&cur->cmd[command_ctx.opmode].lock);
cur->cmd[command_ctx.opmode].count++;
timeval_add(&cur->cmd[command_ctx.opmode].time, &cur->cmd[command_ctx.opmode].time, &cmd_process_time);
mutex_unlock(&cur->cmd[command_ctx.opmode].lock);
} }
if (errstr) if (errstr)
@ -867,8 +866,8 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
parser->dict_add_string(command_ctx.resp, "result", resultstr); parser->dict_add_string(command_ctx.resp, "result", resultstr);
// update interval statistics // update interval statistics
RTPE_STATS_INC(ng_commands[command]);
RTPE_STATS_SAMPLE(ng_command_times[command], timeval_us(&cmd_process_time));
RTPE_STATS_INC(ng_commands[command_ctx.opmode]);
RTPE_STATS_SAMPLE(ng_command_times[command_ctx.opmode], timeval_us(&cmd_process_time));
goto send_resp; goto send_resp;


Loading…
Cancel
Save