comparison libpurple/protocols/jabber/jingle/rtp.c @ 30512:0b5520bf1fe3

propagate from branch 'im.pidgin.pidgin' (head 70ee6c0f2e2858657f0eb06a128db6abd076bdb7) to branch 'im.pidgin.cpw.malu.xmpp.google_relay' (head 641fddadf56116198e116bb86f3ddb266e3ac632)
author Marcus Lundblad <ml@update.uu.se>
date Mon, 23 Nov 2009 21:32:39 +0000
parents f858b53dfbf0 52eef06b1829
children ee3226c6092f
comparison
equal deleted inserted replaced
30511:4b7d599b5a00 30512:0b5520bf1fe3
822 g_free(remote_jid); 822 g_free(remote_jid);
823 g_free(name); 823 g_free(name);
824 g_object_unref(session); 824 g_object_unref(session);
825 break; 825 break;
826 } 826 }
827 case JINGLE_DESCRIPTION_INFO: {
828 JingleSession *session =
829 jingle_content_get_session(content);
830 xmlnode *description = xmlnode_get_child(
831 xmlcontent, "description");
832 GList *codecs, *iter, *iter2, *remote_codecs =
833 jingle_rtp_parse_codecs(description);
834 gchar *name = jingle_content_get_name(content);
835 gchar *remote_jid =
836 jingle_session_get_remote_jid(session);
837 PurpleMedia *media;
838
839 media = jingle_rtp_get_media(session);
840
841 /*
842 * This may have problems if description-info is
843 * received without the optional parameters for a
844 * codec with configuration info (such as THEORA
845 * or H264). The local configuration info may be
846 * set for the remote codec.
847 *
848 * As of 2.6.3 there's no API to support getting
849 * the remote codecs specifically, just the
850 * intersection. Another option may be to cache
851 * the remote codecs received in initiate/accept.
852 */
853 codecs = purple_media_get_codecs(media, name);
854
855 for (iter = codecs; iter; iter = g_list_next(iter)) {
856 guint id;
857
858 id = purple_media_codec_get_id(iter->data);
859 iter2 = remote_codecs;
860
861 for (; iter2; iter2 = g_list_next(iter2)) {
862 if (purple_media_codec_get_id(
863 iter2->data) != id)
864 continue;
865
866 g_object_unref(iter->data);
867 iter->data = iter2->data;
868 remote_codecs = g_list_delete_link(
869 remote_codecs, iter2);
870 break;
871 }
872 }
873
874 codecs = g_list_concat(codecs, remote_codecs);
875
876 purple_media_set_remote_codecs(media,
877 name, remote_jid, codecs);
878
879 purple_media_codec_list_free (codecs);
880 g_free(remote_jid);
881 g_free(name);
882 g_object_unref(session);
883 break;
884 }
827 default: 885 default:
828 break; 886 break;
829 } 887 }
830 } 888 }
831 889