Mercurial > pidgin.yaz
comparison libpurple/media.c @ 25695:13936e4405b7
Added better Farsight error handling.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Fri, 27 Jun 2008 21:39:56 +0000 |
parents | 72e738dac5f7 |
children | 86f05fa8a90a |
comparison
equal
deleted
inserted
replaced
25694:72e738dac5f7 | 25695:13936e4405b7 |
---|---|
377 media->priv->sessions = g_hash_table_new(g_str_hash, g_str_equal); | 377 media->priv->sessions = g_hash_table_new(g_str_hash, g_str_equal); |
378 } | 378 } |
379 g_hash_table_insert(media->priv->sessions, g_strdup(session->id), session); | 379 g_hash_table_insert(media->priv->sessions, g_strdup(session->id), session); |
380 } | 380 } |
381 | 381 |
382 static gboolean | |
383 purple_media_remove_session(PurpleMedia *media, PurpleMediaSession *session) | |
384 { | |
385 return g_hash_table_remove(media->priv->sessions, session->id); | |
386 } | |
387 | |
382 static FsParticipant * | 388 static FsParticipant * |
383 purple_media_add_participant(PurpleMedia *media, const gchar *name) | 389 purple_media_add_participant(PurpleMedia *media, const gchar *name) |
384 { | 390 { |
385 FsParticipant *participant = purple_media_get_participant(media, name); | 391 FsParticipant *participant = purple_media_get_participant(media, name); |
392 GError *err = NULL; | |
386 | 393 |
387 if (participant) | 394 if (participant) |
388 return participant; | 395 return participant; |
389 | 396 |
390 participant = fs_conference_new_participant(media->priv->conference, g_strdup(name), NULL); | 397 participant = fs_conference_new_participant(media->priv->conference, |
398 g_strdup(name), &err); | |
399 | |
400 if (err) { | |
401 purple_debug_error("media", "Error creating participant: %s\n", | |
402 err->message); | |
403 g_error_free(err); | |
404 return NULL; | |
405 } | |
391 | 406 |
392 if (!media->priv->participants) { | 407 if (!media->priv->participants) { |
393 purple_debug_info("media", "Creating hash table for participants\n"); | 408 purple_debug_info("media", "Creating hash table for participants\n"); |
394 media->priv->participants = g_hash_table_new(g_str_hash, g_str_equal); | 409 media->priv->participants = g_hash_table_new(g_str_hash, g_str_equal); |
395 } | 410 } |
986 session->type = purple_media_from_fs(type, type_direction); | 1001 session->type = purple_media_from_fs(type, type_direction); |
987 | 1002 |
988 purple_media_add_session(media, session); | 1003 purple_media_add_session(media, session); |
989 } | 1004 } |
990 | 1005 |
991 participant = purple_media_add_participant(media, who); | 1006 if (!(participant = purple_media_add_participant(media, who))) { |
1007 purple_media_remove_session(media, session); | |
1008 g_free(session); | |
1009 return FALSE; | |
1010 } | |
992 | 1011 |
993 stream = purple_media_session_get_stream(session, who); | 1012 stream = purple_media_session_get_stream(session, who); |
994 | 1013 |
995 if (!stream) { | 1014 if (!stream) { |
1015 GError *err = NULL; | |
1016 | |
996 stream = fs_session_new_stream(session->session, participant, | 1017 stream = fs_session_new_stream(session->session, participant, |
997 type_direction, transmitter, 0, NULL, NULL); | 1018 type_direction, transmitter, 0, |
1019 NULL, &err); | |
1020 | |
1021 if (err) { | |
1022 purple_debug_error("media", "Error creating stream: %s\n", | |
1023 err->message); | |
1024 g_error_free(err); | |
1025 g_object_unref(participant); | |
1026 purple_media_remove_session(media, session); | |
1027 g_free(session); | |
1028 return FALSE; | |
1029 } | |
1030 | |
998 purple_media_insert_stream(session, who, stream); | 1031 purple_media_insert_stream(session, who, stream); |
999 /* callback for new local candidate (new local candidate retreived) */ | 1032 /* callback for new local candidate (new local candidate retreived) */ |
1000 g_signal_connect(G_OBJECT(stream), | 1033 g_signal_connect(G_OBJECT(stream), |
1001 "new-local-candidate", G_CALLBACK(purple_media_new_local_candidate_cb), session); | 1034 "new-local-candidate", G_CALLBACK(purple_media_new_local_candidate_cb), session); |
1002 /* callback for source pad added (new stream source ready) */ | 1035 /* callback for source pad added (new stream source ready) */ |
1089 const gchar *name, GList *remote_candidates) | 1122 const gchar *name, GList *remote_candidates) |
1090 { | 1123 { |
1091 PurpleMediaSession *session = purple_media_get_session(media, sess_id); | 1124 PurpleMediaSession *session = purple_media_get_session(media, sess_id); |
1092 FsStream *stream = purple_media_session_get_stream(session, name); | 1125 FsStream *stream = purple_media_session_get_stream(session, name); |
1093 GList *candidates = remote_candidates; | 1126 GList *candidates = remote_candidates; |
1094 for (; candidates; candidates = candidates->next) | 1127 for (; candidates; candidates = candidates->next) { |
1095 fs_stream_add_remote_candidate(stream, candidates->data, NULL); | 1128 GError *err = NULL; |
1129 fs_stream_add_remote_candidate(stream, candidates->data, &err); | |
1130 | |
1131 if (err) { | |
1132 purple_debug_error("media", "Error adding remote candidate: %s\n", | |
1133 err->message); | |
1134 g_error_free(err); | |
1135 } | |
1136 } | |
1096 } | 1137 } |
1097 | 1138 |
1098 FsCandidate * | 1139 FsCandidate * |
1099 purple_media_get_local_candidate(PurpleMedia *media, const gchar *sess_id, const gchar *name) | 1140 purple_media_get_local_candidate(PurpleMedia *media, const gchar *sess_id, const gchar *name) |
1100 { | 1141 { |
1107 { | 1148 { |
1108 PurpleMediaSession *session = purple_media_get_session(media, sess_id); | 1149 PurpleMediaSession *session = purple_media_get_session(media, sess_id); |
1109 return session->remote_candidate; | 1150 return session->remote_candidate; |
1110 } | 1151 } |
1111 | 1152 |
1112 void | 1153 gboolean |
1113 purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id, const gchar *name, GList *codecs) | 1154 purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id, const gchar *name, GList *codecs) |
1114 { | 1155 { |
1115 PurpleMediaSession *session = purple_media_get_session(media, sess_id); | 1156 PurpleMediaSession *session = purple_media_get_session(media, sess_id); |
1116 FsStream *stream = purple_media_session_get_stream(session, name); | 1157 FsStream *stream = purple_media_session_get_stream(session, name); |
1117 fs_stream_set_remote_codecs(stream, codecs, NULL); | 1158 GError *err = NULL; |
1159 | |
1160 fs_stream_set_remote_codecs(stream, codecs, &err); | |
1161 | |
1162 if (err) { | |
1163 purple_debug_error("media", "Error setting remote codecs: %s\n", | |
1164 err->message); | |
1165 g_error_free(err); | |
1166 return FALSE; | |
1167 } | |
1168 return TRUE; | |
1118 } | 1169 } |
1119 | 1170 |
1120 gboolean | 1171 gboolean |
1121 purple_media_candidates_prepared(PurpleMedia *media, const gchar *name) | 1172 purple_media_candidates_prepared(PurpleMedia *media, const gchar *name) |
1122 { | 1173 { |