diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index b46f87200..ab92968cb 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -1272,7 +1272,8 @@ void call_ng_flags_init(sdp_ng_flags *out, enum call_opmode opmode) { } static void call_ng_dict_iter(sdp_ng_flags *out, bencode_item_t *input, - void (*callback)(sdp_ng_flags *, str *key, bencode_item_t *value)) + enum call_opmode opmode, + void (*callback)(sdp_ng_flags *, str *key, bencode_item_t *value, enum call_opmode _opmode)) { if (input->type != BENCODE_DICTIONARY) return; @@ -1287,11 +1288,13 @@ static void call_ng_dict_iter(sdp_ng_flags *out, bencode_item_t *input, if (!bencode_get_str(key, &k)) continue; - callback(out, &k, value); + callback(out, &k, value, opmode); } } -static void call_ng_codec_flags(sdp_ng_flags *out, str *key, bencode_item_t *value) { +static void call_ng_codec_flags(sdp_ng_flags *out, str *key, bencode_item_t *value, + enum call_opmode opmode) +{ switch (__csh_lookup(key)) { case CSH_LOOKUP("except"): call_ng_flags_str_list(out, value, call_ng_flags_str_ht, &out->codec_except); @@ -1395,7 +1398,9 @@ static void call_ng_flags_freqs(sdp_ng_flags *out, bencode_item_t *value) { } } -static void call_ng_main_flags(sdp_ng_flags *out, str *key, bencode_item_t *value) { +static void call_ng_main_flags(sdp_ng_flags *out, str *key, bencode_item_t *value, + enum call_opmode opmode) +{ str s = STR_NULL; bencode_item_t *it; @@ -1480,7 +1485,7 @@ static void call_ng_main_flags(sdp_ng_flags *out, str *key, bencode_item_t *valu out->digit = s.s[0]; break; case CSH_LOOKUP("codec"): - call_ng_dict_iter(out, value, call_ng_codec_flags); + call_ng_dict_iter(out, value, opmode, call_ng_codec_flags); break; case CSH_LOOKUP("command"): break; @@ -1830,9 +1835,9 @@ static void call_ng_main_flags(sdp_ng_flags *out, str *key, bencode_item_t *valu assert(dict != NULL); /* s - parse rtpp flags */ - parse_rtpp_flags(&s, dict); + parse_rtpp_flags(&s, dict, opmode, out); if (dict && dict->child) - call_ng_dict_iter(out, dict, call_ng_main_flags); /* recursive */ + call_ng_dict_iter(out, dict, opmode, call_ng_main_flags); /* recursive */ break; case CSH_LOOKUP("SDES"): @@ -1977,7 +1982,7 @@ static void call_ng_main_flags(sdp_ng_flags *out, str *key, bencode_item_t *valu static void call_ng_process_flags(sdp_ng_flags *out, bencode_item_t *input, enum call_opmode opmode) { call_ng_flags_init(out, opmode); - call_ng_dict_iter(out, input, call_ng_main_flags); + call_ng_dict_iter(out, input, opmode, call_ng_main_flags); } static void ng_sdp_attr_manipulations_free(struct sdp_manipulations * array[__MT_MAX]) { diff --git a/daemon/control_ng_flags_parser.c b/daemon/control_ng_flags_parser.c index 1af1d3d40..58b143194 100644 --- a/daemon/control_ng_flags_parser.c +++ b/daemon/control_ng_flags_parser.c @@ -254,7 +254,8 @@ static bool parse_str_flag(str * key, str * val, const char * name, * @param rtpp_flags - raw str rtpp_flags * @param dict - root dict to store encoded flags */ -void parse_rtpp_flags(const str * rtpp_flags, bencode_item_t * root_dict) +void parse_rtpp_flags(const str * rtpp_flags, bencode_item_t * root_dict, + enum call_opmode opmode, sdp_ng_flags * out) { char * start, * end, * eptr, c; str key, val, s; diff --git a/include/control_ng_flags_parser.h b/include/control_ng_flags_parser.h index fff455c89..d8eaf8220 100644 --- a/include/control_ng_flags_parser.h +++ b/include/control_ng_flags_parser.h @@ -6,12 +6,15 @@ #include "bencode.h" #include "obj.h" #include "str.h" +#include "call.h" +#include "call_interfaces.h" /** * Parse flags in raw format and return bencode. * Syntax: * rtpp_flags: flag1=, flag2- ... */ -void parse_rtpp_flags(const str * rtpp_flags, bencode_item_t * dict); +void parse_rtpp_flags(const str * rtpp_flags, bencode_item_t * dict, + enum call_opmode opmode, sdp_ng_flags * out); #endif \ No newline at end of file