diff options
-rw-r--r-- | src/voicecall.c | 62 |
1 files changed, 22 insertions, 40 deletions
diff --git a/src/voicecall.c b/src/voicecall.c index 247a4311..cb5258de 100644 --- a/src/voicecall.c +++ b/src/voicecall.c @@ -2710,59 +2710,40 @@ static void ssn_mt_forwarded_notify(struct ofono_voicecall *vc, } static struct voicecall *voicecall_select(struct ofono_voicecall *vc, - unsigned int id, int code) + unsigned int id) { - struct voicecall *v = NULL; - GSList *l; - if (id != 0) { - l = g_slist_find_custom(vc->call_list, GUINT_TO_POINTER(id), - call_compare_by_id); + GSList *l = g_slist_find_custom(vc->call_list, + GUINT_TO_POINTER(id), + call_compare_by_id); if (l == NULL) return NULL; - v = l->data; - } else if (g_slist_length(vc->call_list) == 1) { - v = vc->call_list->data; - - switch (code) { - case SS_MT_VOICECALL_RETRIEVED: - if (v->remote_held != TRUE) - return NULL; - break; - case SS_MT_VOICECALL_ON_HOLD: - if (v->remote_held == TRUE) - return NULL; - break; - case SS_MT_MULTIPARTY_VOICECALL: - if (v->remote_multiparty == TRUE) - return NULL; - break; - default: - return NULL; - } + return l->data; } - return v; + if (g_slist_length(vc->call_list) == 1) + return vc->call_list->data; + + return NULL; } static void ssn_mt_remote_held_notify(struct ofono_voicecall *vc, - unsigned int id, int code, + unsigned int id, gboolean held, const struct ofono_phone_number *ph) { - struct voicecall *v = voicecall_select(vc, id, code); + struct voicecall *v = voicecall_select(vc, id); DBusConnection *conn = ofono_dbus_get_connection(); const char *path; if (v == NULL) return; - if (code == SS_MT_VOICECALL_ON_HOLD) - v->remote_held = TRUE; - else - v->remote_held = FALSE; + if (v->remote_held == held) + return; + v->remote_held = held; path = voicecall_build_path(vc, v->call); ofono_dbus_signal_property_changed(conn, path, @@ -2772,16 +2753,19 @@ static void ssn_mt_remote_held_notify(struct ofono_voicecall *vc, } static void ssn_mt_remote_multiparty_notify(struct ofono_voicecall *vc, - unsigned int id, int code, + unsigned int id, const struct ofono_phone_number *ph) { - struct voicecall *v = voicecall_select(vc, id, code); + struct voicecall *v = voicecall_select(vc, id); DBusConnection *conn = ofono_dbus_get_connection(); const char *path; if (v == NULL) return; + if (v->remote_multiparty == TRUE) + return; + v->remote_multiparty = TRUE; path = voicecall_build_path(vc, v->call); @@ -2801,13 +2785,13 @@ void ofono_voicecall_ssn_mt_notify(struct ofono_voicecall *vc, ssn_mt_forwarded_notify(vc, id, code, ph); break; case SS_MT_VOICECALL_ON_HOLD: - ssn_mt_remote_held_notify(vc, id, code, ph); + ssn_mt_remote_held_notify(vc, id, TRUE, ph); break; case SS_MT_VOICECALL_RETRIEVED: - ssn_mt_remote_held_notify(vc, id, code, ph); + ssn_mt_remote_held_notify(vc, id, FALSE, ph); break; case SS_MT_MULTIPARTY_VOICECALL: - ssn_mt_remote_multiparty_notify(vc, id, code, ph); + ssn_mt_remote_multiparty_notify(vc, id, ph); break; } } @@ -2848,8 +2832,6 @@ void ofono_voicecall_ssn_mo_notify(struct ofono_voicecall *vc, { switch (code) { case SS_MO_OUTGOING_BARRING: - ssn_mo_call_barred_notify(vc, id, code); - break; case SS_MO_INCOMING_BARRING: ssn_mo_call_barred_notify(vc, id, code); break; |