Mercurial > pidgin
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 |