Mercurial > pidgin
comparison libpurple/protocols/jabber/google.c @ 23821:12a16471f94e
Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Fri, 06 Jun 2008 07:43:03 +0000 |
parents | cbe97caec684 |
children | e23b447aa5ca |
comparison
equal
deleted
inserted
replaced
23820:42e17cc5b6d2 | 23821:12a16471f94e |
---|---|
100 | 100 |
101 static void | 101 static void |
102 google_session_send_accept(GoogleSession *session) | 102 google_session_send_accept(GoogleSession *session) |
103 { | 103 { |
104 xmlnode *sess, *desc, *payload; | 104 xmlnode *sess, *desc, *payload; |
105 GList *codecs = purple_media_get_negotiated_audio_codecs(session->media); | 105 GList *codecs = purple_media_get_negotiated_codecs(session->media, "google-voice"); |
106 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); | 106 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
107 | 107 |
108 xmlnode_set_attrib(iq->node, "to", session->remote_jid); | 108 xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
109 sess = google_session_create_xmlnode(session, "accept"); | 109 sess = google_session_create_xmlnode(session, "accept"); |
110 xmlnode_insert_child(iq->node, sess); | 110 xmlnode_insert_child(iq->node, sess); |
122 xmlnode_set_attrib(payload, "clockrate", clockrate); | 122 xmlnode_set_attrib(payload, "clockrate", clockrate); |
123 } | 123 } |
124 | 124 |
125 fs_codec_list_destroy(codecs); | 125 fs_codec_list_destroy(codecs); |
126 jabber_iq_send(iq); | 126 jabber_iq_send(iq); |
127 gst_element_set_state(purple_media_get_audio_pipeline(session->media), GST_STATE_PLAYING); | 127 gst_element_set_state(purple_media_get_pipeline(session->media), GST_STATE_PLAYING); |
128 } | 128 } |
129 | 129 |
130 static void | 130 static void |
131 google_session_send_terminate(GoogleSession *session) | 131 google_session_send_terminate(GoogleSession *session) |
132 { | 132 { |
158 | 158 |
159 static void | 159 static void |
160 google_session_candidates_prepared (PurpleMedia *media, GoogleSession *session) | 160 google_session_candidates_prepared (PurpleMedia *media, GoogleSession *session) |
161 { | 161 { |
162 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); | 162 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
163 GList *candidates = purple_media_get_local_audio_candidates(session->media); | 163 GList *candidates = purple_media_get_local_candidates(session->media, "google-voice", |
164 session->remote_jid); | |
164 FsCandidate *transport; | 165 FsCandidate *transport; |
165 xmlnode *sess; | 166 xmlnode *sess; |
166 xmlnode *candidate; | 167 xmlnode *candidate; |
167 sess = google_session_create_xmlnode(session, "candidates"); | 168 sess = google_session_create_xmlnode(session, "candidates"); |
168 xmlnode_insert_child(iq->node, sess); | 169 xmlnode_insert_child(iq->node, sess); |
215 | 216 |
216 session->media = purple_media_manager_create_media(purple_media_manager_get(), js->gc, | 217 session->media = purple_media_manager_create_media(purple_media_manager_get(), js->gc, |
217 "fsrtpconference", session->remote_jid); | 218 "fsrtpconference", session->remote_jid); |
218 | 219 |
219 /* "rawudp" will need to be changed to "nice" when libnice is finished */ | 220 /* "rawudp" will need to be changed to "nice" when libnice is finished */ |
220 purple_media_add_stream(session->media, session->remote_jid, | 221 purple_media_add_stream(session->media, "google-voice", session->remote_jid, |
221 PURPLE_MEDIA_AUDIO, "rawudp"); | 222 PURPLE_MEDIA_AUDIO, "rawudp"); |
222 | 223 |
223 desc_element = xmlnode_get_child(sess, "description"); | 224 desc_element = xmlnode_get_child(sess, "description"); |
224 | 225 |
225 for (codec_element = xmlnode_get_child(desc_element, "payload-type"); | 226 for (codec_element = xmlnode_get_child(desc_element, "payload-type"); |
232 codec = fs_codec_new(atoi(id), encoding_name, FS_MEDIA_TYPE_AUDIO, | 233 codec = fs_codec_new(atoi(id), encoding_name, FS_MEDIA_TYPE_AUDIO, |
233 clock_rate ? atoi(clock_rate) : 0); | 234 clock_rate ? atoi(clock_rate) : 0); |
234 codecs = g_list_append(codecs, codec); | 235 codecs = g_list_append(codecs, codec); |
235 } | 236 } |
236 | 237 |
237 purple_media_set_remote_audio_codecs(session->media, session->remote_jid, codecs); | 238 purple_media_set_remote_codecs(session->media, "google-voice", session->remote_jid, codecs); |
238 | 239 |
239 g_signal_connect_swapped(G_OBJECT(session->media), "accepted", | 240 g_signal_connect_swapped(G_OBJECT(session->media), "accepted", |
240 G_CALLBACK(google_session_send_accept), session); | 241 G_CALLBACK(google_session_send_accept), session); |
241 g_signal_connect_swapped(G_OBJECT(session->media), "reject", | 242 g_signal_connect_swapped(G_OBJECT(session->media), "reject", |
242 G_CALLBACK(google_session_send_reject), session); | 243 G_CALLBACK(google_session_send_reject), session); |
280 info->password = g_strdup(xmlnode_get_attrib(cand, "password")); | 281 info->password = g_strdup(xmlnode_get_attrib(cand, "password")); |
281 | 282 |
282 list = g_list_append(list, info); | 283 list = g_list_append(list, info); |
283 } | 284 } |
284 | 285 |
285 purple_media_add_remote_audio_candidates(session->media, session->remote_jid, list); | 286 purple_media_add_remote_candidates(session->media, "google-voice", session->remote_jid, list); |
286 fs_candidate_list_destroy(list); | 287 fs_candidate_list_destroy(list); |
287 | 288 |
288 result = jabber_iq_new(js, JABBER_IQ_RESULT); | 289 result = jabber_iq_new(js, JABBER_IQ_RESULT); |
289 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); | 290 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id")); |
290 xmlnode_set_attrib(result->node, "to", session->remote_jid); | 291 xmlnode_set_attrib(result->node, "to", session->remote_jid); |