[Telepathy-commits] [telepathy-gabble/master] Extract processing one incoming codec update
Will Thompson
will.thompson at collabora.co.uk
Thu Mar 5 04:26:46 PST 2009
---
src/jingle-media-rtp.c | 87 +++++++++++++++++++++++++++--------------------
1 files changed, 50 insertions(+), 37 deletions(-)
diff --git a/src/jingle-media-rtp.c b/src/jingle-media-rtp.c
index 322dd8f..29c1540 100644
--- a/src/jingle-media-rtp.c
+++ b/src/jingle-media-rtp.c
@@ -345,13 +345,54 @@ parse_payload_type (LmMessageNode *node)
return p;
}
+static gboolean
+update_one_codec (GabbleJingleMediaRtp *self,
+ JingleCodec *new_codec,
+ GError **error)
+{
+ GabbleJingleMediaRtpPrivate *priv = self->priv;
+ GList *l;
+
+ for (l = priv->remote_codecs; l != NULL; l = l->next)
+ {
+ JingleCodec *old_codec = l->data;
+ GHashTable *tmp;
+
+ if (old_codec->id != new_codec->id)
+ continue;
+
+ if (tp_strdiff (old_codec->name, new_codec->name))
+ {
+ SET_BAD_REQ ("Codec with id %u is called %s, not %s", old_codec->id,
+ old_codec->name, new_codec->name);
+ return FALSE;
+ }
+
+ old_codec->clockrate = new_codec->clockrate;
+ old_codec->channels = new_codec->channels;
+
+ tmp = old_codec->params;
+ old_codec->params = new_codec->params;
+ new_codec->params = tmp;
+
+ break;
+ }
+
+ if (l == NULL)
+ DEBUG ("Codec with id %u ('%s') unknown; ignoring update",
+ new_codec->id, new_codec->name);
+
+ return TRUE;
+}
+
static void
update_remote_codecs (GabbleJingleMediaRtp *self,
GList *new_codecs,
GError **error)
{
GabbleJingleMediaRtpPrivate *priv = self->priv;
- GList *k, *l;
+ GList *k;
+ GError *e = NULL;
if (priv->remote_codecs == NULL)
{
@@ -363,46 +404,18 @@ update_remote_codecs (GabbleJingleMediaRtp *self,
* some parameters.
*/
for (k = new_codecs; k != NULL; k = k->next)
- {
- JingleCodec *new_codec = k->data;
-
- for (l = priv->remote_codecs; l != NULL; l = l->next)
- {
- JingleCodec *old_codec = l->data;
- GHashTable *tmp;
-
- if (old_codec->id != new_codec->id)
- continue;
-
- if (tp_strdiff (old_codec->name, new_codec->name))
- {
- DEBUG ("Codec with id %u has changed from %s to %s! Rejecting",
- old_codec->id, old_codec->name, new_codec->name);
- SET_BAD_REQ ("Codec with id %u is %s, not %s", old_codec->id,
- old_codec->name, new_codec->name);
- jingle_media_rtp_free_codecs (new_codecs);
- return;
- }
-
- old_codec->clockrate = new_codec->clockrate;
- old_codec->channels = new_codec->channels;
-
- tmp = old_codec->params;
- old_codec->params = new_codec->params;
- new_codec->params = tmp;
+ if (!update_one_codec (self, k->data, &e))
+ break;
- break;
- }
+ jingle_media_rtp_free_codecs (new_codecs);
- if (l == NULL)
- {
- DEBUG ("Codec with id %u ('%s') unknown; ignoring update",
- new_codec->id, new_codec->name);
- }
+ if (e != NULL)
+ {
+ DEBUG ("Rejecting codec update: %s", e->message);
+ g_propagate_error (error, e);
+ return;
}
- jingle_media_rtp_free_codecs (new_codecs);
-
out:
DEBUG ("emitting remote-codecs signal");
g_signal_emit (self, signals[REMOTE_CODECS], 0, priv->remote_codecs);
--
1.5.6.5
More information about the telepathy-commits
mailing list