| 262 return NULL; |
262 return NULL; |
| 263 } |
263 } |
| 264 } |
264 } |
| 265 |
265 |
| 266 static void |
266 static void |
| 267 jingle_rtp_hangup_cb(PurpleMedia *media, JingleSession *session) |
|
| 268 { |
|
| 269 gchar *sid = jingle_session_get_sid(session); |
|
| 270 jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); |
|
| 271 g_hash_table_remove(jingle_session_get_js(session)->medias, sid); |
|
| 272 g_free(sid); |
|
| 273 g_object_unref(session); |
|
| 274 } |
|
| 275 |
|
| 276 static void |
|
| 277 jingle_rtp_new_candidate_cb(PurpleMedia *media, gchar *sid, gchar *name, FsCandidate *candidate, JingleSession *session) |
267 jingle_rtp_new_candidate_cb(PurpleMedia *media, gchar *sid, gchar *name, FsCandidate *candidate, JingleSession *session) |
| 278 { |
268 { |
| 279 purple_debug_info("jingle-rtp", "jingle_rtp_new_candidate_cb\n"); |
269 purple_debug_info("jingle-rtp", "jingle_rtp_new_candidate_cb\n"); |
| 280 } |
270 } |
| 281 |
271 |
| 332 static void |
322 static void |
| 333 jingle_rtp_state_changed_cb(PurpleMedia *media, PurpleMediaStateChangedType type, |
323 jingle_rtp_state_changed_cb(PurpleMedia *media, PurpleMediaStateChangedType type, |
| 334 gchar *sid, gchar *name, JingleSession *session) |
324 gchar *sid, gchar *name, JingleSession *session) |
| 335 { |
325 { |
| 336 purple_debug_info("jingle-rtp", "state-changed: type %d id: %s name: %s\n", type, sid, name); |
326 purple_debug_info("jingle-rtp", "state-changed: type %d id: %s name: %s\n", type, sid, name); |
| |
327 |
| |
328 if (sid == NULL && name == NULL && |
| |
329 jingle_session_is_initiator(session) == TRUE) { |
| |
330 gchar *sid = jingle_session_get_sid(session); |
| |
331 jabber_iq_send(jingle_session_to_packet(session, |
| |
332 JINGLE_SESSION_TERMINATE)); |
| |
333 g_hash_table_remove(jingle_session_get_js(session)->medias, sid); |
| |
334 g_free(sid); |
| |
335 g_object_unref(session); |
| |
336 } |
| 337 } |
337 } |
| 338 |
338 |
| 339 static PurpleMedia * |
339 static PurpleMedia * |
| 340 jingle_rtp_create_media(JingleContent *content) |
340 jingle_rtp_create_media(JingleContent *content) |
| 341 { |
341 { |
| 361 } |
361 } |
| 362 purple_debug_info("jingle-rtp", "inserting media with sid: %s into table\n", sid); |
362 purple_debug_info("jingle-rtp", "inserting media with sid: %s into table\n", sid); |
| 363 g_hash_table_insert(js->medias, sid, media); |
363 g_hash_table_insert(js->medias, sid, media); |
| 364 |
364 |
| 365 /* connect callbacks */ |
365 /* connect callbacks */ |
| 366 g_signal_connect(G_OBJECT(media), "reject", |
|
| 367 G_CALLBACK(jingle_rtp_hangup_cb), session); |
|
| 368 g_signal_connect(G_OBJECT(media), "hangup", |
|
| 369 G_CALLBACK(jingle_rtp_hangup_cb), session); |
|
| 370 g_signal_connect(G_OBJECT(media), "new-candidate", |
366 g_signal_connect(G_OBJECT(media), "new-candidate", |
| 371 G_CALLBACK(jingle_rtp_new_candidate_cb), session); |
367 G_CALLBACK(jingle_rtp_new_candidate_cb), session); |
| 372 g_signal_connect(G_OBJECT(media), "candidates-prepared", |
368 g_signal_connect(G_OBJECT(media), "candidates-prepared", |
| 373 G_CALLBACK(jingle_rtp_candidates_prepared_cb), session); |
369 G_CALLBACK(jingle_rtp_candidates_prepared_cb), session); |
| 374 g_signal_connect(G_OBJECT(media), "candidate-pair", |
370 g_signal_connect(G_OBJECT(media), "candidate-pair", |