[Telepathy-commits] [telepathy-gabble/master] Send codec parameters as <parameter/> tags.
Will Thompson
will.thompson at collabora.co.uk
Thu Dec 11 04:54:13 PST 2008
Fixes fd.o bug #18918
---
src/jingle-media-rtp.c | 37 +++++++++++++++++++++++++------------
1 files changed, 25 insertions(+), 12 deletions(-)
diff --git a/src/jingle-media-rtp.c b/src/jingle-media-rtp.c
index b3f501d..c28eea6 100644
--- a/src/jingle-media-rtp.c
+++ b/src/jingle-media-rtp.c
@@ -98,7 +98,8 @@ jingle_media_rtp_codec_new (guint id, const gchar *name,
if (params != NULL)
p->params = params;
else
- p->params = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+ p->params = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
+ g_free);
return p;
}
@@ -222,9 +223,6 @@ gabble_jingle_media_rtp_class_init (GabbleJingleMediaRtpClass *cls)
#define SET_OUT_ORDER(txt...) g_set_error (error, GABBLE_XMPP_ERROR, XMPP_ERROR_JINGLE_OUT_OF_ORDER, txt)
#define SET_CONFLICT(txt...) g_set_error (error, GABBLE_XMPP_ERROR, XMPP_ERROR_CONFLICT, txt)
-static const gchar *video_codec_params[] = {
- "x", "y", "width", "height", "layer", "transparent", NULL,
-};
static void
parse_description (GabbleJingleContent *content,
@@ -294,7 +292,7 @@ parse_description (GabbleJingleContent *content,
guchar id;
const gchar *name;
guint clockrate, channels;
- guint i;
+ LmMessageNode *param;
if (tp_strdiff (lm_message_node_get_name (node), "payload-type"))
continue;
@@ -336,12 +334,21 @@ parse_description (GabbleJingleContent *content,
p = jingle_media_rtp_codec_new (id, name, clockrate, channels, NULL);
- for (i = 0; video_codec_params[i] != NULL; i++)
+ for (param = node->children; param != NULL; param = param->next)
{
- txt = lm_message_node_get_attribute (node, video_codec_params[i]);
- if (txt != NULL)
- g_hash_table_insert (p->params, (gpointer) video_codec_params[i],
- g_strdup (txt));
+ const gchar *param_name, *param_value;
+
+ if (tp_strdiff (lm_message_node_get_name (param), "parameter"))
+ continue;
+
+ param_name = lm_message_node_get_attribute (param, "name");
+ param_value = lm_message_node_get_attribute (param, "value");
+
+ if (param_name == NULL || param_value == NULL)
+ continue;
+
+ g_hash_table_insert (p->params, g_strdup (param_name),
+ g_strdup (param_value));
}
DEBUG ("new remote codec: id = %u, name = %s, clockrate = %u, channels = %u",
@@ -370,8 +377,14 @@ parse_description (GabbleJingleContent *content,
static void
_produce_extra_param (gpointer key, gpointer value, gpointer user_data)
{
- lm_message_node_set_attribute ((LmMessageNode *) user_data,
- (gchar *) key, (gchar *) value);
+ LmMessageNode *pt_node = user_data;
+ LmMessageNode *param;
+ gchar *param_name = key;
+ gchar *param_value = value;
+
+ param = lm_message_node_add_child (pt_node, "parameter", NULL);
+ lm_message_node_set_attribute (param, "name", param_name);
+ lm_message_node_set_attribute (param, "value", param_value);
}
static void
--
1.5.6.5
More information about the Telepathy-commits
mailing list