comparison libpurple/media/media.c @ 29554:2460e6774e08

Move handling Farsight 2's new-local-candidate signal in Fs2 media backend.
author maiku@pidgin.im
date Fri, 23 Oct 2009 22:20:45 +0000
parents efeb21092ed2
children cc978a1a4bd1
comparison
equal deleted inserted replaced
29553:efeb21092ed2 29554:2460e6774e08
136 static void purple_media_dispose (GObject *object); 136 static void purple_media_dispose (GObject *object);
137 static void purple_media_finalize (GObject *object); 137 static void purple_media_finalize (GObject *object);
138 static void purple_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); 138 static void purple_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
139 static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); 139 static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
140 140
141 static void purple_media_new_local_candidate_cb(FsStream *stream, 141 static void purple_media_new_local_candidate_cb(PurpleMediaBackend *backend,
142 FsCandidate *local_candidate, PurpleMediaSession *session); 142 const gchar *sess_id, const gchar *participant,
143 PurpleMediaCandidate *candidate, PurpleMedia *media);
143 static void purple_media_candidates_prepared_cb(FsStream *stream, 144 static void purple_media_candidates_prepared_cb(FsStream *stream,
144 PurpleMediaSession *session); 145 PurpleMediaSession *session);
145 static void purple_media_candidate_pair_established_cb(FsStream *stream, 146 static void purple_media_candidate_pair_established_cb(FsStream *stream,
146 FsCandidate *native_candidate, FsCandidate *remote_candidate, 147 FsCandidate *native_candidate, FsCandidate *remote_candidate,
147 PurpleMediaSession *session); 148 PurpleMediaSession *session);
436 PURPLE_TYPE_MEDIA_BACKEND_FS2, 437 PURPLE_TYPE_MEDIA_BACKEND_FS2,
437 "conference-type", 438 "conference-type",
438 media->priv->conference_type, 439 media->priv->conference_type,
439 "media", media, 440 "media", media,
440 NULL); 441 NULL);
442 g_signal_connect(media->priv->backend,
443 "new-candidate",
444 G_CALLBACK(
445 purple_media_new_local_candidate_cb),
446 media);
441 break; 447 break;
442 case PROP_INITIATOR: 448 case PROP_INITIATOR:
443 media->priv->initiator = g_value_get_boolean(value); 449 media->priv->initiator = g_value_get_boolean(value);
444 break; 450 break;
445 case PROP_PRPL_DATA: 451 case PROP_PRPL_DATA:
1053 media->priv->conference != 1059 media->priv->conference !=
1054 FS_CONFERENCE(GST_MESSAGE_SRC(msg))) 1060 FS_CONFERENCE(GST_MESSAGE_SRC(msg)))
1055 break; 1061 break;
1056 1062
1057 if (gst_structure_has_name(msg->structure, 1063 if (gst_structure_has_name(msg->structure,
1058 "farsight-new-local-candidate")) {
1059 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
1060 FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "candidate"));
1061 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
1062 purple_media_new_local_candidate_cb(stream, local_candidate, session);
1063 } else if (gst_structure_has_name(msg->structure,
1064 "farsight-local-candidates-prepared")) { 1064 "farsight-local-candidates-prepared")) {
1065 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); 1065 FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream"));
1066 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); 1066 PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream);
1067 purple_media_candidates_prepared_cb(stream, session); 1067 purple_media_candidates_prepared_cb(stream, session);
1068 } else if (gst_structure_has_name(msg->structure, 1068 } else if (gst_structure_has_name(msg->structure,
1261 #endif 1261 #endif
1262 } 1262 }
1263 1263
1264 #ifdef USE_VV 1264 #ifdef USE_VV
1265 static void 1265 static void
1266 purple_media_new_local_candidate_cb(FsStream *stream, 1266 purple_media_new_local_candidate_cb(PurpleMediaBackend *backend,
1267 FsCandidate *local_candidate, 1267 const gchar *sess_id, const gchar *participant,
1268 PurpleMediaSession *session) 1268 PurpleMediaCandidate *candidate, PurpleMedia *media)
1269 { 1269 {
1270 gchar *name; 1270 PurpleMediaSession *session =
1271 FsParticipant *participant; 1271 purple_media_get_session(media, sess_id);
1272 PurpleMediaCandidate *candidate; 1272
1273 1273 purple_media_insert_local_candidate(session, participant,
1274 g_return_if_fail(FS_IS_STREAM(stream)); 1274 purple_media_candidate_to_fs(candidate));
1275 g_return_if_fail(session != NULL); 1275
1276
1277 purple_debug_info("media", "got new local candidate: %s\n", local_candidate->foundation);
1278 g_object_get(stream, "participant", &participant, NULL);
1279 g_object_get(participant, "cname", &name, NULL);
1280 g_object_unref(participant);
1281
1282 purple_media_insert_local_candidate(session, name, fs_candidate_copy(local_candidate));
1283
1284 candidate = purple_media_candidate_from_fs(local_candidate);
1285 g_signal_emit(session->media, purple_media_signals[NEW_CANDIDATE], 1276 g_signal_emit(session->media, purple_media_signals[NEW_CANDIDATE],
1286 0, session->id, name, candidate); 1277 0, session->id, participant, candidate);
1287 g_object_unref(candidate);
1288
1289 g_free(name);
1290 } 1278 }
1291 1279
1292 static void 1280 static void
1293 purple_media_candidates_prepared_cb(FsStream *stream, PurpleMediaSession *session) 1281 purple_media_candidates_prepared_cb(FsStream *stream, PurpleMediaSession *session)
1294 { 1282 {