static void member_content_removed_cb (GabbleCallMemberContent *mcontent, gpointer user_data) { GabbleCallContent *self = GABBLE_CALL_CONTENT (user_data); GabbleCallContentPrivate *priv = self->priv; TpBaseCallContent *base = TP_BASE_CALL_CONTENT (self); GabbleJingleContent *content; GList *l; priv->contents = g_list_remove (priv->contents, mcontent); content = gabble_call_member_content_get_jingle_content (mcontent); for (l = tp_base_call_content_get_streams (base); l != NULL; l = l->next) { GabbleCallStream *stream = GABBLE_CALL_STREAM (l->data); if (content == gabble_call_stream_get_jingle_content (stream)) { tp_base_call_content_remove_stream (base, l->data, 0, TP_CALL_STATE_CHANGE_REASON_PROGRESS_MADE, "", ""); break; } } }
static void tp_base_media_call_stream_fail (TpSvcCallStreamInterfaceMedia *iface, const GValueArray *reason_array, DBusGMethodInvocation *context) { TpBaseMediaCallStream *self = TP_BASE_MEDIA_CALL_STREAM (iface); TpBaseCallStream *base = TP_BASE_CALL_STREAM (self); TpBaseCallChannel *channel; TpBaseCallContent *content; channel = _tp_base_call_stream_get_channel (base); content = _tp_base_call_stream_get_content (base); _tp_base_call_content_remove_stream_internal (content, base, reason_array); /* If it was the last stream, remove the content */ if (tp_base_call_content_get_streams (content) == NULL) { _tp_base_call_channel_remove_content_internal (channel, content, reason_array); } tp_svc_call_stream_interface_media_return_from_fail (context); }