From df8918ff8c0668068eb1244921092d885439af6c Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Mon, 1 Jul 2019 15:25:24 +0200 Subject: base-call: implement Deflect() with +CTFR --- src/mm-base-call.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src') diff --git a/src/mm-base-call.c b/src/mm-base-call.c index 5b83b4e5..3ff8fda7 100644 --- a/src/mm-base-call.c +++ b/src/mm-base-call.c @@ -1129,6 +1129,53 @@ call_accept (MMBaseCall *self, 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 */ @@ -1442,6 +1489,8 @@ mm_base_call_class_init (MMBaseCallClass *klass) 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; -- cgit v1.2.3-70-g09d2