diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-07-02 18:19:18 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-07-11 23:21:00 +0200 |
commit | 148466f7680c287d4b7c8204203c3292a6250de4 (patch) | |
tree | ffa2fe58ebf70ca05c753dbf0984ed30d4626150 /src | |
parent | 75d2431f960318c2f8b87ee821056bb38336cb16 (diff) |
broadband-modem: implement LeaveMultiparty() with +CHLD=2x
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 8ce91c4d..4b953693 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -7877,6 +7877,61 @@ modem_voice_join_multiparty (MMIfaceModemVoice *self, } /*****************************************************************************/ +/* Leave multiparty (Voice interface) */ + +static gboolean +modem_voice_leave_multiparty_finish (MMIfaceModemVoice *self, + GAsyncResult *res, + GError **error) +{ + return g_task_propagate_boolean (G_TASK (res), error); +} + +static void +chld_leave_multiparty_ready (MMBaseModem *self, + GAsyncResult *res, + GTask *task) +{ + GError *error = NULL; + + if (!mm_base_modem_at_command_finish (self, res, &error)) + g_task_return_error (task, error); + else + g_task_return_boolean (task, TRUE); + g_object_unref (task); +} + +static void +modem_voice_leave_multiparty (MMIfaceModemVoice *self, + MMBaseCall *call, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GTask *task; + guint idx; + gchar *cmd; + + task = g_task_new (self, NULL, callback, user_data); + + idx = mm_base_call_get_index (call); + if (!idx) { + g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_WRONG_STATE, + "unknown call index"); + g_object_unref (task); + return; + } + + cmd = g_strdup_printf ("+CHLD=2%u", idx); + mm_base_modem_at_command (MM_BASE_MODEM (self), + cmd, + 20, + FALSE, + (GAsyncReadyCallback) chld_leave_multiparty_ready, + task); + g_free (cmd); +} + +/*****************************************************************************/ /* Transfer (Voice interface) */ static gboolean @@ -12136,6 +12191,8 @@ iface_modem_voice_init (MMIfaceModemVoice *iface) iface->hangup_all_finish = modem_voice_hangup_all_finish; iface->join_multiparty = modem_voice_join_multiparty; iface->join_multiparty_finish = modem_voice_join_multiparty_finish; + iface->leave_multiparty = modem_voice_leave_multiparty; + iface->leave_multiparty_finish = modem_voice_leave_multiparty_finish; iface->transfer = modem_voice_transfer; iface->transfer_finish = modem_voice_transfer_finish; } |