MT#55283 add append_int_tagged_attr_to_gstring()

Convenience function for attributes using the `a=name:uint value`
format.

Change-Id: I984a61e6146aa3f6e41a7190a23b7c94293f11ff
pull/1786/head
Richard Fuchs 1 year ago
parent 282e2c0a16
commit 6b35f2eda1

@ -386,6 +386,8 @@ static void append_attr_int_to_gstring(GString *s, const char * value, const int
sdp_ng_flags *flags, enum media_type media_type);
static void append_tagged_attr_to_gstring(GString *s, const char * name, const str *tag, const str * value,
sdp_ng_flags *flags, enum media_type media_type);
static void append_int_tagged_attr_to_gstring(GString *s, const char * name, unsigned int tag, const str * value,
sdp_ng_flags *flags, enum media_type media_type);
INLINE struct sdp_attribute *attr_get_by_id(struct sdp_attributes *a, enum attr_id id) {
return t_hash_table_lookup(a->id_hash, &id);
@ -2120,53 +2122,28 @@ static void insert_codec_parameters(GString *s, struct call_media *cm,
if (!pt->encoding_with_params.len)
continue;
g_autoptr(GString) s_dst = g_string_new("");
/* rtpmap */
{
g_string_append_printf(s_dst, "rtpmap:%u " STR_FORMAT,
pt->payload_type,
STR_FMT(&pt->encoding_with_params));
/* append to the chop->output */
append_attr_to_gstring(s, s_dst->str, NULL, flags, cm->type_id);
g_string_truncate(s_dst, 0);
}
append_int_tagged_attr_to_gstring(s, "rtpmap", pt->payload_type, &pt->encoding_with_params,
flags, cm->type_id);
/* fmtp */
{
bool check_format = true;
if (pt->codec_def && pt->codec_def->format_print) {
g_string_append_printf(s_dst, "fmtp:%u ", pt->payload_type);
gsize fmtp_len = s_dst->len;
bool added = pt->codec_def->format_print(s_dst, pt); /* try appending list of parameters */
if (!added || fmtp_len == s_dst->len)
g_string_truncate(s_dst, 0);
else
check_format = false;
}
if (check_format && pt->format_parameters.len) {
g_string_append_printf(s_dst, "fmtp:%u " STR_FORMAT,
pt->payload_type,
STR_FMT(&pt->format_parameters));
}
if (s_dst->len) {
/* append to the chop->output */
append_attr_to_gstring(s, s_dst->str, NULL, flags, cm->type_id);
}
g_string_truncate(s_dst, 0);
bool added = false;
if (pt->codec_def && pt->codec_def->format_print) {
g_autoptr(GString) s_dst = g_string_new("");
added = pt->codec_def->format_print(s_dst, pt); /* try appending list of parameters */
if (s_dst->len)
append_int_tagged_attr_to_gstring(s, "fmtp", pt->payload_type,
&STR_INIT_GS(s_dst), flags, cm->type_id);
}
if (!added && pt->format_parameters.len)
append_int_tagged_attr_to_gstring(s, "fmtp", pt->payload_type,
&pt->format_parameters, flags, cm->type_id);
/* rtcp-fb */
{
for (GList *k = pt->rtcp_fb.head; k; k = k->next) {
str *fb = k->data;
g_string_truncate(s_dst, 0); /* don't forget to clear for each cycle */
g_string_append_printf(s_dst, "rtcp-fb:%u " STR_FORMAT,
pt->payload_type,
STR_FMT(fb));
/* append to the chop->output */
append_attr_to_gstring(s, s_dst->str, NULL, flags, cm->type_id);
}
for (GList *k = pt->rtcp_fb.head; k; k = k->next) {
str *fb = k->data;
append_int_tagged_attr_to_gstring(s, "rtcp-fb", pt->payload_type, fb,
flags, cm->type_id);
}
}
}
@ -2810,7 +2787,6 @@ static void insert_crypto1(GString *s, struct call_media *media, struct crypto_p
p--;
}
g_string_append_printf(s_dst, "%u ", cps->tag);
g_string_append(s_dst, cps->params.crypto_suite->name);
g_string_append(s_dst, " inline:");
g_string_append_len(s_dst, b64_buf, p - b64_buf);
@ -2831,7 +2807,7 @@ static void insert_crypto1(GString *s, struct call_media *media, struct crypto_p
g_string_append(s_dst, " UNAUTHENTICATED_SRTP");
/* append to the chop->output */
append_attr_to_gstring(s, "crypto", &STR_INIT_GS(s_dst), flags, media->type_id);
append_int_tagged_attr_to_gstring(s, "crypto", cps->tag, &STR_INIT_GS(s_dst), flags, media->type_id);
}
static void insert_crypto(GString *s, struct call_media *media, sdp_ng_flags *flags) {
@ -2988,6 +2964,15 @@ static void append_tagged_attr_to_gstring(GString *s, const char * name, const s
generic_append_attr_to_gstring(s, n->str, ' ', value, flags, media_type);
}
/* A function used to append attributes (`a=name:uint value`) to the output chop */
static void append_int_tagged_attr_to_gstring(GString *s, const char * name, unsigned int tag, const str * value,
sdp_ng_flags *flags, enum media_type media_type)
{
g_autoptr(GString) n = g_string_new(name);
g_string_append_printf(n, ":%u", tag);
generic_append_attr_to_gstring(s, n->str, ' ', value, flags, media_type);
}
/* A function used to append attributes to the output chop */
static void append_attr_int_to_gstring(GString *s, const char * name, const int value,
sdp_ng_flags *flags, enum media_type media_type)

Loading…
Cancel
Save