---
 src/ofono.h     |    6 +++++
 src/voicecall.c |   65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/src/ofono.h b/src/ofono.h
index 6524806..808a8f1 100644
--- a/src/ofono.h
+++ b/src/ofono.h
@@ -266,6 +266,12 @@ int __ofono_voicecall_dial(struct ofono_voicecall *vc,
                                ofono_voicecall_dial_cb_t cb, void *user_data);
 void __ofono_voicecall_dial_cancel(struct ofono_voicecall *vc);
 
+void __ofono_voicecall_set_alpha_and_icon_id(struct ofono_voicecall *vc,
+                                               const char *addr, int addr_type,
+                                               const char *message,
+                                               unsigned char icon_id);
+void __ofono_voicecall_clear_alpha_and_icon_id(struct ofono_voicecall *vc);
+
 int __ofono_voicecall_tone_send(struct ofono_voicecall *vc,
                                const char *tone_str,
                                ofono_voicecall_tone_cb_t cb, void *user_data);
diff --git a/src/voicecall.c b/src/voicecall.c
index f4c2358..14b5d22 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -42,6 +42,7 @@
 #define MAX_VOICE_CALLS 16
 
 #define VOICECALL_FLAG_SIM_ECC_READY 0x1
+#define VOICECALL_FLAG_STK_MODEM_CALLSETUP 0x2
 
 #define SETTINGS_STORE "voicecall"
 #define SETTINGS_GROUP "Settings"
@@ -2223,6 +2224,39 @@ void ofono_voicecall_notify(struct ofono_voicecall *vc,
                goto error;
        }
 
+       if (vc->flags & VOICECALL_FLAG_STK_MODEM_CALLSETUP) {
+               struct dial_request *req = vc->dial_req;
+               const char *number = phone_number_to_string(&req->ph);
+
+               if (!strcmp(number, "112")) {
+                       struct ofono_modem *modem =
+                                       __ofono_atom_get_modem(vc->atom);
+
+                       __ofono_modem_inc_emergency_mode(modem);
+               }
+
+               if (v->call->clip_validity == CLIP_VALIDITY_NOT_AVAILABLE) {
+                       v->call->phone_number.type = req->ph.type;
+                       strncpy(v->call->phone_number.number, req->ph.number,
+                                                                       20);
+                       v->call->clip_validity = CLIP_VALIDITY_VALID;
+               }
+
+               v->message = req->message;
+               v->icon_id = req->icon_id;
+
+               req->message = NULL;
+               req->call = v;
+
+               /*
+                * TS 102 223 Section 6.4.13: The terminal shall not store
+                * in the UICC the call set-up details (called party number
+                * and associated parameters)
+                */
+               v->untracked = TRUE;
+               vc->flags &= ~VOICECALL_FLAG_STK_MODEM_CALLSETUP;
+       }
+
        v->detect_time = time(NULL);
 
        if (!voicecall_dbus_register(v)) {
@@ -3682,6 +3716,37 @@ void __ofono_voicecall_tone_cancel(struct 
ofono_voicecall *vc, int id)
        }
 }
 
+void __ofono_voicecall_set_alpha_and_icon_id(struct ofono_voicecall *vc,
+                                               const char *addr, int addr_type,
+                                               const char *message,
+                                               unsigned char icon_id)
+{
+       struct dial_request *req;
+
+       req = g_new0(struct dial_request, 1);
+
+       req->message = g_strdup(message);
+       req->icon_id = icon_id;
+
+       req->ph.type = addr_type;
+       strncpy(req->ph.number, addr, 20);
+
+       vc->dial_req = req;
+
+       vc->flags |= VOICECALL_FLAG_STK_MODEM_CALLSETUP;
+}
+
+void __ofono_voicecall_clear_alpha_and_icon_id(struct ofono_voicecall *vc)
+{
+       g_free(vc->dial_req->message);
+       vc->dial_req->message = NULL;
+
+       g_free(vc->dial_req);
+       vc->dial_req = NULL;
+
+       vc->flags &= ~VOICECALL_FLAG_STK_MODEM_CALLSETUP;
+}
+
 static void ssn_mt_forwarded_notify(struct ofono_voicecall *vc,
                                        unsigned int id, int code,
                                        const struct ofono_phone_number *ph)
-- 
1.7.4.1

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to