aboutsummaryrefslogtreecommitdiff
path: root/src/mm-iface-modem-voice.c
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2018-06-14 15:36:06 +0200
committerDan Williams <dcbw@redhat.com>2018-10-16 17:09:21 +0000
commitbd3b5aca01a3d3102c607b7ca6fab310963ec77c (patch)
tree12f0701ab5575a6aa198f54ba97bbd65298e6763 /src/mm-iface-modem-voice.c
parent0090124ec0d0d28fa78f5a0dd153e36584a0f171 (diff)
base-call: automatically terminate unanswered incoming calls
Try to automatically detect when the caller finishes the attempt to establish the call.
Diffstat (limited to 'src/mm-iface-modem-voice.c')
-rw-r--r--src/mm-iface-modem-voice.c53
1 files changed, 30 insertions, 23 deletions
diff --git a/src/mm-iface-modem-voice.c b/src/mm-iface-modem-voice.c
index 844b8310..9cab1cdd 100644
--- a/src/mm-iface-modem-voice.c
+++ b/src/mm-iface-modem-voice.c
@@ -46,8 +46,8 @@ mm_iface_modem_voice_create_call (MMIfaceModemVoice *self)
return MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call (self);
}
-MMBaseCall *
-mm_iface_modem_voice_create_incoming_call (MMIfaceModemVoice *self)
+void
+mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self)
{
MMBaseCall *call = NULL;
MMCallList *list = NULL;
@@ -56,29 +56,36 @@ mm_iface_modem_voice_create_incoming_call (MMIfaceModemVoice *self)
MM_IFACE_MODEM_VOICE_CALL_LIST, &list,
NULL);
- if (list) {
- call = mm_call_list_get_new_incoming (list);
-
- if (!call) {
- mm_dbg ("Creating new incoming call...");
-
- call = mm_base_call_new (MM_BASE_MODEM (self));
- g_object_set (call,
- "state", MM_CALL_STATE_RINGING_IN,
- "state-reason", MM_CALL_STATE_REASON_INCOMING_NEW,
- "direction", MM_CALL_DIRECTION_INCOMING,
- NULL);
-
- /* Only export once properly created */
- mm_base_call_export (call);
- mm_call_list_add_call (list, call);
- g_object_unref (call);
- }
+ if (!list) {
+ mm_warn ("Cannot create incoming call: missing call list");
+ return;
+ }
+
+ call = mm_call_list_get_first_ringing_in_call (list);
+ /* If call exists already, refresh its validity */
+ if (call) {
+ mm_base_call_incoming_refresh (call);
g_object_unref (list);
+ return;
}
- return call;
+ mm_dbg ("Creating new incoming call...");
+ call = mm_base_call_new (MM_BASE_MODEM (self));
+ g_object_set (call,
+ "state", MM_CALL_STATE_RINGING_IN,
+ "state-reason", MM_CALL_STATE_REASON_INCOMING_NEW,
+ "direction", MM_CALL_DIRECTION_INCOMING,
+ NULL);
+
+ /* Start its validity timeout */
+ mm_base_call_incoming_refresh (call);
+
+ /* Only export once properly created */
+ mm_base_call_export (call);
+ mm_call_list_add_call (list, call);
+ g_object_unref (call);
+ g_object_unref (list);
}
gboolean
@@ -96,7 +103,7 @@ mm_iface_modem_voice_update_incoming_call_number (MMIfaceModemVoice *self,
NULL);
if (list) {
- call = mm_call_list_get_new_incoming (list);
+ call = mm_call_list_get_first_ringing_in_call (list);
if (call) {
mm_gdbus_call_set_number (MM_GDBUS_CALL (call), number);
@@ -153,7 +160,7 @@ mm_iface_modem_voice_call_ringing_to_active (MMIfaceModemVoice *self)
NULL);
if (list) {
- call = mm_call_list_get_first_ringing_call (list);
+ call = mm_call_list_get_first_ringing_out_call (list);
if (call) {
mm_base_call_change_state (call, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);