Mercurial > pidgin.yaz
diff libpurple/media.c @ 25651:43b3b9ff6028
Added better Farsight error handling. Fixes several crash bugs related
to missing GStreamer/Farsight plugins.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Tue, 27 May 2008 02:24:03 +0000 |
parents | 6bf2dfb350c0 |
children | cbe97caec684 |
line wrap: on
line diff
--- a/libpurple/media.c Sun May 25 04:01:44 2008 +0000 +++ b/libpurple/media.c Tue May 27 02:24:03 2008 +0000 @@ -710,7 +710,7 @@ gst_element_set_state(pipeline, GST_STATE_PLAYING); } -static void +static gboolean purple_media_add_stream_internal(PurpleMedia *media, FsSession **session, GList **streams, GstElement *src, const gchar *who, FsMediaType type, FsStreamDirection type_direction, const gchar *transmitter) @@ -724,7 +724,18 @@ FsSession *s = NULL; if (!*session) { - *session = fs_conference_new_session(media->priv->conference, type, NULL); + GError *err = NULL; + *session = fs_conference_new_session(media->priv->conference, type, &err); + + if (err != NULL) { + purple_debug_error("media", "Error creating session: %s\n", err->message); + g_error_free(err); + purple_conv_present_error(who, + purple_connection_get_account(purple_media_get_connection(media)), + _("Error creating session.")); + return FALSE; + } + if (src) { GstPad *sinkpad; GstPad *srcpad; @@ -782,9 +793,11 @@ /* change direction */ g_object_set(stream, "direction", type_direction, NULL); } + + return TRUE; } -void +gboolean purple_media_add_stream(PurpleMedia *media, const gchar *who, PurpleMediaStreamType type, const gchar *transmitter) @@ -801,11 +814,13 @@ else type_direction = FS_DIRECTION_NONE; - purple_media_add_stream_internal(media, &media->priv->audio_session, - &media->priv->audio_streams, - media->priv->audio_src, who, - FS_MEDIA_TYPE_AUDIO, type_direction, - transmitter); + if (!purple_media_add_stream_internal(media, &media->priv->audio_session, + &media->priv->audio_streams, + media->priv->audio_src, who, + FS_MEDIA_TYPE_AUDIO, type_direction, + transmitter)) { + return FALSE; + } } if (type & PURPLE_MEDIA_VIDEO) { if (type & PURPLE_MEDIA_SEND_VIDEO && type & PURPLE_MEDIA_RECV_VIDEO) @@ -817,12 +832,15 @@ else type_direction = FS_DIRECTION_NONE; - purple_media_add_stream_internal(media, &media->priv->video_session, - &media->priv->video_streams, - media->priv->video_src, who, - FS_MEDIA_TYPE_VIDEO, type_direction, - transmitter); + if (!purple_media_add_stream_internal(media, &media->priv->video_session, + &media->priv->video_streams, + media->priv->video_src, who, + FS_MEDIA_TYPE_VIDEO, type_direction, + transmitter)) { + return FALSE; + } } + return TRUE; } void