aboutsummaryrefslogtreecommitdiff
path: root/src/mm-base-call.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-base-call.c')
-rw-r--r--src/mm-base-call.c320
1 files changed, 1 insertions, 319 deletions
diff --git a/src/mm-base-call.c b/src/mm-base-call.c
index 6308fd18..e0158495 100644
--- a/src/mm-base-call.c
+++ b/src/mm-base-call.c
@@ -28,6 +28,7 @@
#include "mm-base-call.h"
#include "mm-broadband-modem.h"
+#include "mm-auth-provider.h"
#include "mm-iface-modem.h"
#include "mm-iface-modem-voice.h"
#include "mm-base-modem-at.h"
@@ -989,314 +990,6 @@ mm_base_call_received_dtmf (MMBaseCall *self,
}
/*****************************************************************************/
-/* Start the CALL */
-
-static gboolean
-call_start_finish (MMBaseCall *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-call_start_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- const gchar *response = NULL;
-
- response = mm_base_modem_at_command_finish (modem, res, &error);
-
- /* check response for error */
- if (response && response[0])
- error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "Couldn't start the call: Unhandled response '%s'", response);
-
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-call_start (MMBaseCall *self,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GError *error = NULL;
- GTask *task;
- gchar *cmd;
- MMIfacePortAt *port;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- port = mm_base_modem_peek_best_at_port (MM_BASE_MODEM (self->priv->modem), &error);
- if (!port) {
- g_task_return_error (task, error);
- g_object_unref (task);
- return;
- }
-
- cmd = g_strdup_printf ("ATD%s;", mm_gdbus_call_get_number (MM_GDBUS_CALL (self)));
- mm_base_modem_at_command_full (self->priv->modem,
- port,
- cmd,
- 90,
- FALSE, /* no cached */
- FALSE, /* no raw */
- cancellable,
- (GAsyncReadyCallback)call_start_ready,
- task);
- g_free (cmd);
-}
-
-/*****************************************************************************/
-/* Accept the call */
-
-static gboolean
-call_accept_finish (MMBaseCall *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-call_accept_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
- const gchar *response;
-
- response = mm_base_modem_at_command_finish (modem, res, &error);
-
- /* check response for error */
- if (response && response[0])
- g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "Couldn't accept the call: Unhandled response '%s'", response);
-
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-call_accept (MMBaseCall *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
-
- task = g_task_new (self, NULL, callback, user_data);
- mm_base_modem_at_command (self->priv->modem,
- "ATA",
- 2,
- FALSE,
- (GAsyncReadyCallback)call_accept_ready,
- task);
-}
-
-/*****************************************************************************/
-/* Deflect the call */
-
-static gboolean
-call_deflect_finish (MMBaseCall *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-call_deflect_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
-
- mm_base_modem_at_command_finish (modem, res, &error);
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-call_deflect (MMBaseCall *self,
- const gchar *number,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
- gchar *cmd;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- cmd = g_strdup_printf ("+CTFR=%s", number);
- mm_base_modem_at_command (self->priv->modem,
- cmd,
- 20,
- FALSE,
- (GAsyncReadyCallback)call_deflect_ready,
- task);
- g_free (cmd);
-}
-
-/*****************************************************************************/
-/* Hangup the call */
-
-static gboolean
-call_hangup_finish (MMBaseCall *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-chup_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- GError *error = NULL;
-
- mm_base_modem_at_command_finish (modem, res, &error);
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-chup_fallback (GTask *task)
-{
- MMBaseCall *self;
-
- self = g_task_get_source_object (task);
- mm_base_modem_at_command (self->priv->modem,
- "+CHUP",
- 2,
- FALSE,
- (GAsyncReadyCallback)chup_ready,
- task);
-}
-
-static void
-chld_hangup_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- MMBaseCall *self;
- GError *error = NULL;
-
- self = g_task_get_source_object (task);
-
- mm_base_modem_at_command_finish (modem, res, &error);
- if (error) {
- mm_obj_warn (self, "couldn't hangup single call with call id '%u': %s",
- self->priv->index, error->message);
- g_error_free (error);
- chup_fallback (task);
- return;
- }
-
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-call_hangup (MMBaseCall *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- /* Try to hangup the single call id */
- if (self->priv->index) {
- gchar *cmd;
-
- cmd = g_strdup_printf ("+CHLD=1%u", self->priv->index);
- mm_base_modem_at_command (self->priv->modem,
- cmd,
- 2,
- FALSE,
- (GAsyncReadyCallback)chld_hangup_ready,
- task);
- g_free (cmd);
- return;
- }
-
- /* otherwise terminate all */
- chup_fallback (task);
-}
-
-/*****************************************************************************/
-/* Send DTMF tone to call */
-
-static gboolean
-call_send_dtmf_finish (MMBaseCall *self,
- GAsyncResult *res,
- GError **error)
-{
- return g_task_propagate_boolean (G_TASK (res), error);
-}
-
-static void
-call_send_dtmf_ready (MMBaseModem *modem,
- GAsyncResult *res,
- GTask *task)
-{
- MMBaseCall *self;
- GError *error = NULL;
-
- self = g_task_get_source_object (task);
-
- mm_base_modem_at_command_finish (modem, res, &error);
- if (error) {
- mm_obj_dbg (self, "couldn't send dtmf: %s", error->message);
- g_task_return_error (task, error);
- g_object_unref (task);
- return;
- }
-
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
-}
-
-static void
-call_send_dtmf (MMBaseCall *self,
- const gchar *dtmf,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GTask *task;
- gchar *cmd;
-
- task = g_task_new (self, NULL, callback, user_data);
-
- cmd = g_strdup_printf ("AT+VTS=%c", dtmf[0]);
- mm_base_modem_at_command (self->priv->modem,
- cmd,
- 3,
- FALSE,
- (GAsyncReadyCallback)call_send_dtmf_ready,
- task);
-
- g_free (cmd);
-}
-
-/*****************************************************************************/
static gchar *
log_object_build_id (MMLogObject *_self)
@@ -1498,17 +1191,6 @@ mm_base_call_class_init (MMBaseCallClass *klass)
object_class->finalize = finalize;
object_class->dispose = dispose;
- klass->start = call_start;
- klass->start_finish = call_start_finish;
- klass->accept = call_accept;
- klass->accept_finish = call_accept_finish;
- klass->deflect = call_deflect;
- klass->deflect_finish = call_deflect_finish;
- klass->hangup = call_hangup;
- klass->hangup_finish = call_hangup_finish;
- klass->send_dtmf = call_send_dtmf;
- klass->send_dtmf_finish = call_send_dtmf_finish;
-
properties[PROP_CONNECTION] =
g_param_spec_object (MM_BASE_CALL_CONNECTION,
"Connection",