Browse Source

MT#55283 use typed GHashTable for SDP rem/subst

Change-Id: I65e66df16980a56f8265c14044dc190a13b117a1
pull/1776/head
Richard Fuchs 2 years ago
parent
commit
e5ccca36fc
3 changed files with 19 additions and 26 deletions
  1. +13
    -20
      daemon/call_interfaces.c
  2. +4
    -4
      daemon/sdp.c
  3. +2
    -2
      include/sdp.h

+ 13
- 20
daemon/call_interfaces.c View File

@ -36,7 +36,6 @@
typedef union { typedef union {
const struct sdp_attr_helper *attr_helper; const struct sdp_attr_helper *attr_helper;
str_q *q; str_q *q;
GHashTable **htp;
str_case_ht *sct; str_case_ht *sct;
str_case_value_ht *svt; str_case_value_ht *svt;
void **generic; void **generic;
@ -615,10 +614,10 @@ static void call_ng_flags_str_pair_ht(sdp_ng_flags *out, str *s, helper_arg arg)
free(s_copy); free(s_copy);
return; return;
} }
GHashTable **ht = arg.htp;
if (!*ht)
*ht = g_hash_table_new_full(str_case_hash, str_case_equal, free, free);
g_hash_table_replace(*ht, str_dup(&token), s_copy);
str_case_value_ht *ht = arg.svt;
if (!t_hash_table_is_set(*ht))
*ht = str_case_value_ht_new();
t_hash_table_replace(*ht, str_dup(&token), s_copy);
} }
static void call_ng_flags_item_pair_ht(sdp_ng_flags *out, bencode_item_t *it, helper_arg arg) { static void call_ng_flags_item_pair_ht(sdp_ng_flags *out, bencode_item_t *it, helper_arg arg) {
@ -640,10 +639,10 @@ static void call_ng_flags_item_pair_ht(sdp_ng_flags *out, bencode_item_t *it, he
str * s_copy_from = str_dup_escape(&from); str * s_copy_from = str_dup_escape(&from);
str * s_copy_to = str_dup_escape(&to); str * s_copy_to = str_dup_escape(&to);
GHashTable **ht = arg.htp;
if (!*ht)
*ht = g_hash_table_new_full(str_case_hash, str_case_equal, free, free);
g_hash_table_replace(*ht, s_copy_from, s_copy_to);
str_case_value_ht *ht = arg.svt;
if (!t_hash_table_is_set(*ht))
*ht = str_case_value_ht_new();
t_hash_table_replace(*ht, s_copy_from, s_copy_to);
} }
INLINE void ng_sdp_attr_manipulations(sdp_ng_flags *flags, bencode_item_t *value) { INLINE void ng_sdp_attr_manipulations(sdp_ng_flags *flags, bencode_item_t *value) {
@ -657,7 +656,6 @@ INLINE void ng_sdp_attr_manipulations(sdp_ng_flags *flags, bencode_item_t *value
{ {
bencode_item_t *command_action = it->sibling ? it->sibling : NULL; bencode_item_t *command_action = it->sibling ? it->sibling : NULL;
str media_type; str media_type;
GHashTable ** ht = NULL;
if (!command_action) /* if no action, makes no sense to continue */ if (!command_action) /* if no action, makes no sense to continue */
continue; continue;
@ -688,9 +686,8 @@ INLINE void ng_sdp_attr_manipulations(sdp_ng_flags *flags, bencode_item_t *value
switch (__csh_lookup(&command_type)) { switch (__csh_lookup(&command_type)) {
case CSH_LOOKUP("substitute"): case CSH_LOOKUP("substitute"):
ht = &sm->subst_commands;
call_ng_flags_list(NULL, command_value, call_ng_flags_str_pair_ht, call_ng_flags_item_pair_ht, ht);
call_ng_flags_list(NULL, command_value, call_ng_flags_str_pair_ht, call_ng_flags_item_pair_ht,
&sm->subst_commands);
break; break;
case CSH_LOOKUP("add"): case CSH_LOOKUP("add"):
@ -699,9 +696,7 @@ INLINE void ng_sdp_attr_manipulations(sdp_ng_flags *flags, bencode_item_t *value
/* CMD_REM commands */ /* CMD_REM commands */
case CSH_LOOKUP("remove"): case CSH_LOOKUP("remove"):
ht = &sm->rem_commands;
call_ng_flags_str_list(NULL, command_value, call_ng_flags_str_ht, ht);
call_ng_flags_str_list(NULL, command_value, call_ng_flags_str_ht, &sm->rem_commands);
break; break;
default: default:
@ -1857,10 +1852,8 @@ static void ng_sdp_attr_manipulations_free(struct sdp_manipulations * array[__MT
if (!sdp_manipulations) if (!sdp_manipulations)
continue; continue;
if (sdp_manipulations->rem_commands)
g_hash_table_destroy(sdp_manipulations->rem_commands);
if (sdp_manipulations->subst_commands)
g_hash_table_destroy(sdp_manipulations->subst_commands);
str_case_ht_destroy_ptr(&sdp_manipulations->rem_commands);
str_case_value_ht_destroy_ptr(&sdp_manipulations->subst_commands);
t_queue_clear_full(&sdp_manipulations->add_commands, str_free); t_queue_clear_full(&sdp_manipulations->add_commands, str_free);
g_slice_free1(sizeof(*sdp_manipulations), sdp_manipulations); g_slice_free1(sizeof(*sdp_manipulations), sdp_manipulations);


+ 4
- 4
daemon/sdp.c View File

@ -328,8 +328,8 @@ static bool sdp_manipulate_remove(struct sdp_manipulations * sdp_manipulations,
if (!attr_name || !attr_name->len) if (!attr_name || !attr_name->len)
return false; return false;
GHashTable * ht = sdp_manipulations->rem_commands;
if (ht && g_hash_table_lookup(ht, attr_name))
str_case_ht ht = sdp_manipulations->rem_commands;
if (t_hash_table_is_set(ht) && t_hash_table_lookup(ht, attr_name))
return true; return true;
return false; return false;
} }
@ -365,9 +365,9 @@ static str *sdp_manipulations_subst(struct sdp_manipulations * sdp_manipulations
if (!sdp_manipulations) if (!sdp_manipulations)
return NULL; return NULL;
GHashTable * ht = sdp_manipulations->subst_commands;
str_case_value_ht ht = sdp_manipulations->subst_commands;
str * cmd_subst_value = ht ? g_hash_table_lookup(ht, attr_name) : NULL;
str * cmd_subst_value = t_hash_table_is_set(ht) ? t_hash_table_lookup(ht, attr_name) : NULL;
return cmd_subst_value; return cmd_subst_value;
} }


+ 2
- 2
include/sdp.h View File

@ -13,8 +13,8 @@
*/ */
struct sdp_manipulations { struct sdp_manipulations {
str_q add_commands; str_q add_commands;
GHashTable * rem_commands;
GHashTable * subst_commands;
str_case_ht rem_commands;
str_case_value_ht subst_commands;
}; };
struct ice_candidate; struct ice_candidate;


Loading…
Cancel
Save