comparison libpurple/media.c @ 26389:5a7fa2093d1e

Make Finch not crash if someone requests a session with video with you.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Tue, 31 Mar 2009 06:23:27 +0000
parents de03cce95e17
children 9c671fc1b351
comparison
equal deleted inserted replaced
26388:de03cce95e17 26389:5a7fa2093d1e
1135 PurpleMediaSession *session; 1135 PurpleMediaSession *session;
1136 GstPad *sinkpad; 1136 GstPad *sinkpad;
1137 GstPad *srcpad; 1137 GstPad *srcpad;
1138 1138
1139 g_return_if_fail(PURPLE_IS_MEDIA(media)); 1139 g_return_if_fail(PURPLE_IS_MEDIA(media));
1140 g_return_if_fail(GST_IS_ELEMENT(src));
1140 1141
1141 session = purple_media_get_session(media, sess_id); 1142 session = purple_media_get_session(media, sess_id);
1142 1143
1143 if (session == NULL) { 1144 if (session == NULL) {
1144 purple_debug_warning("media", "purple_media_set_src: trying" 1145 purple_debug_warning("media", "purple_media_set_src: trying"
1677 if (!session) { 1678 if (!session) {
1678 GError *err = NULL; 1679 GError *err = NULL;
1679 GList *codec_conf = NULL; 1680 GList *codec_conf = NULL;
1680 gchar *filename = NULL; 1681 gchar *filename = NULL;
1681 PurpleMediaSessionType session_type; 1682 PurpleMediaSessionType session_type;
1683 GstElement *src = NULL;
1682 1684
1683 session = g_new0(PurpleMediaSession, 1); 1685 session = g_new0(PurpleMediaSession, 1);
1684 1686
1685 session->session = fs_conference_new_session( 1687 session->session = fs_conference_new_session(
1686 media->priv->conference, media_type, &err); 1688 media->priv->conference, media_type, &err);
1740 0, PURPLE_MEDIA_STATE_NEW, 1742 0, PURPLE_MEDIA_STATE_NEW,
1741 session->id, NULL); 1743 session->id, NULL);
1742 1744
1743 session_type = purple_media_from_fs(media_type, 1745 session_type = purple_media_from_fs(media_type,
1744 FS_DIRECTION_SEND); 1746 FS_DIRECTION_SEND);
1745 purple_media_set_src(media, session->id, 1747 src = purple_media_manager_get_element(
1746 purple_media_manager_get_element( 1748 media->priv->manager, session_type);
1747 media->priv->manager, session_type)); 1749 if (!GST_IS_ELEMENT(src)) {
1750 purple_debug_error("media",
1751 "Error creating src for session %s\n",
1752 session->id);
1753 purple_media_end(media, session->id, NULL);
1754 return FALSE;
1755 }
1756
1757 purple_media_set_src(media, session->id, src);
1748 gst_element_set_state(session->src, GST_STATE_PLAYING); 1758 gst_element_set_state(session->src, GST_STATE_PLAYING);
1749 1759
1750 purple_media_manager_create_output_window( 1760 purple_media_manager_create_output_window(
1751 media->priv->manager, 1761 media->priv->manager,
1752 session->media, 1762 session->media,
1937 PurpleMediaStream *stream; 1947 PurpleMediaStream *stream;
1938 GError *err = NULL; 1948 GError *err = NULL;
1939 1949
1940 g_return_if_fail(PURPLE_IS_MEDIA(media)); 1950 g_return_if_fail(PURPLE_IS_MEDIA(media));
1941 stream = purple_media_get_stream(media, sess_id, name); 1951 stream = purple_media_get_stream(media, sess_id, name);
1952
1953 if (stream == NULL) {
1954 purple_debug_error("media",
1955 "purple_media_add_remote_candidates: "
1956 "couldn't find stream %s %s.\n",
1957 sess_id, name);
1958 return;
1959 }
1942 1960
1943 stream->remote_candidates = g_list_concat(stream->remote_candidates, 1961 stream->remote_candidates = g_list_concat(stream->remote_candidates,
1944 purple_media_candidate_list_to_fs(remote_candidates)); 1962 purple_media_candidate_list_to_fs(remote_candidates));
1945 1963
1946 fs_stream_set_remote_candidates(stream->stream, 1964 fs_stream_set_remote_candidates(stream->stream,