rendered paste body
static void
set_stream_held (TpMediaStreamHandler *proxy,
gboolean held,
gpointer user_data,
GObject *object)
{
TpStreamEngineStream *self = TP_STREAM_ENGINE_STREAM (object);
g_assert (self->priv->fs_stream != NULL);
DEBUG ("parent_channel = %p. Holding : %d", self->priv->parent_channel, held);
if (held)
{
/* Hold the call */
if (farsight_stream_hold (self->priv->fs_stream)) {
tp_stream_engine_stream_held ();
/* Send success message */
if (self->priv->stream_handler_proxy)
{
tp_cli_media_stream_handler_call_hold_state (
self->priv->stream_handler_proxy, -1, TRUE,
async_method_callback, "Media.StreamHandler::HoldState",
NULL, (GObject *) self);
}
} else {
stop_stream (self);
tp_stream_engine_stream_error (self, 0, "Error holding call");
}
}
else
{
/* Make sure we have access to the resource */
if (tp_stream_engine_get_unheld_call () == NULL ||
tp_stream_engine_get_unheld_call () == self->priv->parent_channel) {
/* Unhold the call */
if (farsight_stream_unhold (self->priv->fs_stream)) {
tp_stream_engine_stream_unheld (self->priv->parent_channel);
/* Send success message */
if (self->priv->stream_handler_proxy)
{
tp_cli_media_stream_handler_call_hold_state (
self->priv->stream_handler_proxy, -1, FALSE,
async_method_callback, "Media.StreamHandler::HoldState",
NULL, (GObject *) self);
}
} else {
stop_stream (self);
tp_stream_engine_stream_error (self, 0, "Error unholding call");
}
} else {
/* Send failure message */
if (self->priv->stream_handler_proxy)
{
tp_cli_media_stream_handler_call_unhold_failure (
self->priv->stream_handler_proxy, -1,
async_method_callback, "Media.StreamHandler::UnholdFailure",
NULL, (GObject *) self);
}
}
}
}