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);