---
 doc/voicecall-api.txt |    5 +++++
 src/voicecall.c       |   37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/doc/voicecall-api.txt b/doc/voicecall-api.txt
index f0ba316..95a43a6 100644
--- a/doc/voicecall-api.txt
+++ b/doc/voicecall-api.txt
@@ -125,3 +125,8 @@ Properties  string LineIdentification [readonly]
 
                        Icon identifier to be used instead of or together
                        with the text information.
+
+               boolean Emergency [readonly]
+
+                       Contains the indication if the voice call is an 
emergency
+                       call or not.
diff --git a/src/voicecall.c b/src/voicecall.c
index dbf3e9a..3f9fe54 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -316,6 +316,23 @@ static void tone_request_finish(struct ofono_voicecall *vc,
        g_free(entry);
 }
 
+static gint number_compare(gconstpointer a, gconstpointer b)
+{
+       const char *s1 = a, *s2 = b;
+       return strcmp(s1, s2);
+}
+
+static gboolean voicecall_is_emergency(struct voicecall *v)
+{
+       struct ofono_call *call = v->call;
+       const char *lineid_str;
+
+       lineid_str = phone_number_to_string(&call->phone_number);
+
+       return (g_slist_find_custom(v->vc->en_list, lineid_str,
+                                               number_compare)) ? TRUE : FALSE;
+}
+
 static void append_voicecall_properties(struct voicecall *v,
                                        DBusMessageIter *dict)
 {
@@ -324,6 +341,7 @@ static void append_voicecall_properties(struct voicecall *v,
        const char *callerid;
        const char *timestr;
        ofono_bool_t mpty;
+       dbus_bool_t emergency_call;
 
        status = call_status_to_string(call->status);
        callerid = phone_number_to_string(&call->phone_number);
@@ -359,6 +377,15 @@ static void append_voicecall_properties(struct voicecall 
*v,
        if (v->icon_id)
                ofono_dbus_dict_append(dict, "Icon", DBUS_TYPE_BYTE,
                                        &v->icon_id);
+
+       if (voicecall_is_emergency(v) == TRUE)
+               emergency_call = TRUE;
+       else
+               emergency_call = FALSE;
+
+       ofono_dbus_dict_append(dict, "Emergency", DBUS_TYPE_BOOLEAN,
+                                       &emergency_call);
+
 }
 
 static DBusMessage *voicecall_get_properties(DBusConnection *conn,
@@ -721,6 +748,16 @@ static void voicecall_set_call_lineid(struct voicecall *v,
                                                OFONO_VOICECALL_INTERFACE,
                                                "LineIdentification",
                                                DBUS_TYPE_STRING, &lineid_str);
+
+       if (voicecall_is_emergency(v)) {
+               dbus_bool_t emergency_call = TRUE;
+
+               ofono_dbus_signal_property_changed(conn, path,
+                                               OFONO_VOICECALL_INTERFACE,
+                                               "Emergency",
+                                               DBUS_TYPE_BOOLEAN,
+                                               &emergency_call);
+       }
 }
 
 static gboolean voicecall_dbus_register(struct voicecall *v)
-- 
1.7.0.4

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to