ModemRequest *
modem_call_request_answer (ModemCall *self,
                           ModemCallReply callback,
                           gpointer user_data)
{
  DEBUG ("enter");

  RETURN_NULL_IF_NOT_VALID (self);

  if (self->priv->state != MODEM_CALL_STATE_WAITING)
    {
      DEBUG ("%s.%s (%s)", MODEM_OFACE_CALL, "Answer",
          modem_call_get_path (self));
      return modem_request (MODEM_CALL (self),
          modem_oface_dbus_proxy (MODEM_OFACE (self)),
          "Answer", reply_to_instance_request,
          G_CALLBACK (callback), user_data,
          G_TYPE_INVALID);
    }
  else {
    DEBUG ("%s.%s (%s)", MODEM_OFACE_CALL_MANAGER, "HoldAndAnswer",
        modem_call_get_path (self));
    return modem_request (MODEM_CALL (self),
        modem_oface_dbus_proxy (MODEM_OFACE (self->priv->service)),
        "HoldAndAnswer", reply_to_instance_request,
        G_CALLBACK (callback), user_data,
        G_TYPE_INVALID);
  }
}
ModemRequest *
modem_call_request_split (ModemCall *self,
                          ModemCallReply callback,
                          gpointer user_data)
{
  DEBUG ("%s.%s (%s)", MODEM_OFACE_CALL_MANAGER, "PrivateChat",
      modem_call_get_path (self));
  RETURN_NULL_IF_NOT_VALID (self);

  return modem_request (MODEM_CALL (self),
      modem_oface_dbus_proxy (MODEM_OFACE (self->priv->service)),
      "PrivateChat", reply_to_private_chat_request,
      G_CALLBACK (callback), user_data,
      DBUS_TYPE_G_OBJECT_PATH, modem_call_get_path (self),
      G_TYPE_INVALID);
}
ModemRequest *
modem_call_request_release (ModemCall *self,
                            ModemCallReply callback,
                            gpointer user_data)
{
  DEBUG ("%s.%s (%s)", MODEM_OFACE_CALL, "Hangup", modem_call_get_path (self));
  RETURN_NULL_IF_NOT_VALID (self);

  return modem_request (MODEM_CALL (self),
      modem_oface_dbus_proxy (MODEM_OFACE (self)),
      "Hangup", reply_to_instance_request,
      G_CALLBACK (callback), user_data,
      G_TYPE_INVALID);
}
Beispiel #4
0
static void
modem_call_service_connect_to_instance (ModemCallService *self,
                                        ModemCall *instance)
{
  ModemCallServicePrivate *priv = self->priv;
  gchar const *object_path;

  if (!instance)
    return;

  g_signal_connect (instance, "state", G_CALLBACK (on_modem_call_state), self);

  modem_oface_connect (MODEM_OFACE (instance));

  object_path = modem_call_get_path (instance);

  g_hash_table_insert (priv->instances, (gpointer) object_path, instance);
}
Beispiel #5
0
static void
modem_call_service_disconnect_instance (ModemCallService *self,
                                        ModemCall *instance)
{
  ModemCallServicePrivate *priv = self->priv;

  if (!instance)
    return;

  g_hash_table_steal (priv->instances, modem_call_get_path (instance));

  g_signal_handlers_disconnect_by_func (instance, on_modem_call_state, self);

  g_signal_emit (self, signals[SIGNAL_REMOVED], 0, instance);

  modem_oface_disconnect (MODEM_OFACE (instance));

  g_object_unref (instance);
}