MT#55283 add abstract dict_get_str()

Change-Id: Ibb453a18913803042ee0074cbfd5d4c19c30418b
pull/1848/head
Richard Fuchs 1 year ago
parent cc43740ce0
commit a2c89d64df

@ -2298,11 +2298,11 @@ const char *call_delete_ng(ng_parser_ctx_t *ctx) {
bencode_item_t *input = ctx->req;
bencode_item_t *output = ctx->resp;
if (!bencode_dictionary_get_str(input, "call-id", &callid))
if (!ctx->parser->dict_get_str(input, "call-id", &callid))
return "No call-id in message";
bencode_dictionary_get_str(input, "from-tag", &fromtag);
bencode_dictionary_get_str(input, "to-tag", &totag);
bencode_dictionary_get_str(input, "via-branch", &viabranch);
ctx->parser->dict_get_str(input, "from-tag", &fromtag);
ctx->parser->dict_get_str(input, "to-tag", &totag);
ctx->parser->dict_get_str(input, "via-branch", &viabranch);
flags = bencode_dictionary_get_expect(input, "flags", BENCODE_LIST);
if (flags) {
@ -2761,13 +2761,13 @@ const char *call_query_ng(ng_parser_ctx_t *ctx) {
bencode_item_t *input = ctx->req;
bencode_item_t *output = ctx->resp;
if (!bencode_dictionary_get_str(input, "call-id", &callid))
if (!ctx->parser->dict_get_str(input, "call-id", &callid))
return "No call-id in message";
call = call_get_opmode(&callid, OP_QUERY);
if (!call)
return "Unknown call-id";
bencode_dictionary_get_str(input, "from-tag", &fromtag);
bencode_dictionary_get_str(input, "to-tag", &totag);
ctx->parser->dict_get_str(input, "from-tag", &fromtag);
ctx->parser->dict_get_str(input, "to-tag", &totag);
ng_call_stats(call, &fromtag, &totag, output, NULL);
rwlock_unlock_w(&call->master_lock);
@ -2798,7 +2798,7 @@ const char *call_list_ng(ng_parser_ctx_t *ctx) {
static const char *call_recording_common_ng(ng_parser_ctx_t *ctx,
enum call_opmode opmode,
void (*fn)(bencode_item_t *input, call_t *call))
void (*fn)(ng_parser_ctx_t *, call_t *call))
{
g_auto(sdp_ng_flags) flags;
g_autoptr(call_t) call = NULL;
@ -2806,7 +2806,7 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx,
call_ng_process_flags(&flags, ctx, opmode);
if (!bencode_dictionary_get_str(input, "call-id", &flags.call_id))
if (!ctx->parser->dict_get_str(input, "call-id", &flags.call_id))
return "No call-id in message";
call = call_get_opmode(&flags.call_id, opmode);
if (!call)
@ -2814,7 +2814,7 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx,
struct call_monologue *ml = NULL;
if (bencode_dictionary_get_str(input, "from-tag", &flags.from_tag)) {
if (ctx->parser->dict_get_str(input, "from-tag", &flags.from_tag)) {
if (flags.from_tag.s) {
ml = call_get_monologue(call, &flags.from_tag);
if (!ml)
@ -2828,13 +2828,13 @@ static const char *call_recording_common_ng(ng_parser_ctx_t *ctx,
else
update_metadata_call(call, &flags);
fn(input, call);
fn(ctx, call);
return NULL;
}
static void start_recording_fn(bencode_item_t *input, call_t *call) {
static void start_recording_fn(ng_parser_ctx_t *ctx, call_t *call) {
recording_start(call);
}
const char *call_start_recording_ng(ng_parser_ctx_t *ctx) {
@ -2842,7 +2842,7 @@ const char *call_start_recording_ng(ng_parser_ctx_t *ctx) {
}
static void pause_recording_fn(bencode_item_t *input, call_t *call) {
static void pause_recording_fn(ng_parser_ctx_t *ctx, call_t *call) {
recording_pause(call);
}
const char *call_pause_recording_ng(ng_parser_ctx_t *ctx) {
@ -2850,12 +2850,13 @@ const char *call_pause_recording_ng(ng_parser_ctx_t *ctx) {
}
static void stop_recording_fn(bencode_item_t *input, call_t *call) {
static void stop_recording_fn(ng_parser_ctx_t *ctx, call_t *call) {
// support alternative usage for "pause" call: either `pause=yes` ...
bencode_item_t *input = ctx->req;
str pause;
if (bencode_dictionary_get_str(input, "pause", &pause)) {
if (ctx->parser->dict_get_str(input, "pause", &pause)) {
if (!str_cmp(&pause, "yes") || !str_cmp(&pause, "on") || !str_cmp(&pause, "true")) {
pause_recording_fn(input, call);
pause_recording_fn(ctx, call);
return;
}
}
@ -2864,7 +2865,7 @@ static void stop_recording_fn(bencode_item_t *input, call_t *call) {
if (item) {
for (bencode_item_t *child = item->child; child; child = child->sibling) {
if (bencode_strcmp(child, "pause") == 0) {
pause_recording_fn(input, call);
pause_recording_fn(ctx, call);
return;
}
if (bencode_strcmp(child, "discard-recording") == 0) {

@ -141,6 +141,7 @@ const ng_parser_t ng_parser_native = {
.is_int = bencode_is_int,
.get_int = bencode_get_int,
.dict = __bencode_dict,
.dict_get_str = bencode_dictionary_get_str,
};
const ng_parser_t ng_parser_json = {
.collapse = bencode_collapse_str_json,
@ -152,6 +153,7 @@ const ng_parser_t ng_parser_json = {
.is_int = bencode_is_int,
.get_int = bencode_get_int,
.dict = __bencode_dict,
.dict_get_str = bencode_dictionary_get_str,
};
@ -294,7 +296,7 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
str cmd = STR_NULL, callid;
const char *errstr, *resultstr;
GString *log_str;
struct timeval cmd_start, cmd_stop, cmd_process_time;
struct timeval cmd_start, cmd_stop, cmd_process_time = {0};
struct control_ng_stats* cur = get_control_ng_stats(&sin->address);
enum ng_command command = -1;
@ -338,12 +340,12 @@ static void control_ng_process_payload(ng_ctx *hctx, str *reply, str *data, cons
parser_ctx.resp = parser_ctx.parser->dict(&parser_ctx);
assert(parser_ctx.resp != NULL);
bencode_dictionary_get_str(parser_ctx.req, "command", &cmd);
parser_ctx.parser->dict_get_str(parser_ctx.req, "command", &cmd);
errstr = "Dictionary contains no key \"command\"";
if (!cmd.s)
goto err_send;
bencode_dictionary_get_str(parser_ctx.req, "call-id", &callid);
parser_ctx.parser->dict_get_str(parser_ctx.req, "call-id", &callid);
log_info_str(&callid);
ilogs(control, LOG_INFO, "Received command '"STR_FORMAT"' from %s", STR_FMT(&cmd), addr);

@ -122,6 +122,7 @@ struct ng_parser {
bool (*is_int)(bencode_item_t *);
long long (*get_int)(bencode_item_t *);
bencode_item_t *(*dict)(ng_parser_ctx_t *);
char *(*dict_get_str)(bencode_item_t *, const char *, str *);
};
struct ng_parser_ctx {
const ng_parser_t *parser;

Loading…
Cancel
Save