tizen 2.3.1 release
[framework/telephony/tel-plugin-dbus_tapi.git] / src / network.c
old mode 100644 (file)
new mode 100755 (executable)
index 8b0ee9b..e35fad0
@@ -1,3 +1,23 @@
+/*
+ * tel-plugin-dbus-tapi
+ *
+ * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Ja-young Gu <jygu@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
@@ -5,7 +25,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <glib.h>
-#include <glib-object.h>
 #include <gio/gio.h>
 
 #include <tcore.h>
 #include "generated-code.h"
 #include "common.h"
 
-
-static char *_get_network_name_by_plmn(CoreObject *o, const char *plmn)
+static int __convert_act_to_systemtype(enum telephony_network_access_technology act)
 {
-       struct tcore_network_operator_info *noi = NULL;
-       char mcc[4] = { 0, };
-       char mnc[4] = { 0, };
+       switch (act) {
+       case NETWORK_ACT_UNKNOWN:
+               return 0;
 
-       if (!plmn)
-               return NULL;
+       case NETWORK_ACT_GSM:
+               return 1;
 
-       snprintf(mcc, 4, "%s", plmn);
-       snprintf(mnc, 4, "%s", plmn+3);
+       case NETWORK_ACT_GPRS:
+               return 2;
 
-       if (mnc[2] == '#')
-               mnc[2] = '\0';
+       case NETWORK_ACT_EGPRS:
+               return 3;
 
-       noi = tcore_network_operator_info_find(o, mcc, mnc);
-       if (noi) {
-               dbg("%s-%s: country=[%s], oper=[%s]", mcc, mnc, noi->country, noi->name);
-               return noi->name;
-       }
-       else {
-               dbg("%s-%s: no network operator name", mcc, mnc);
-       }
+       case NETWORK_ACT_UMTS:
+               return 5;
 
-       return NULL;
-}
+       case NETWORK_ACT_GSM_UTRAN:
+               return 6;
 
+       case NETWORK_ACT_IS95A:
+               return 8;
 
-static enum tcore_hook_return on_hook_location_cellinfo(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_location_cellinfo *info = data;
-       TelephonyNetwork *network = user_data;
-
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       case NETWORK_ACT_IS95B:
+               return 9;
 
-       telephony_network_set_lac(network, info->lac);
-       telephony_network_set_cell_id(network, info->cell_id);
+       case NETWORK_ACT_CDMA_1X:
+               return 10;
 
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static enum tcore_hook_return on_hook_icon_info(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_icon_info *info = data;
-       TelephonyNetwork *network = user_data;
-
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
-
-       telephony_network_set_rssi(network, info->rssi);
-
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
-
-static enum tcore_hook_return on_hook_registration_status(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_network_registration_status *info = data;
-       TelephonyNetwork *network = user_data;
+       case NETWORK_ACT_EVDO_REV0:
+               return 11;
 
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       case NETWORK_ACT_CDMA_1X_EVDO_REV0:
+               return 12;
 
-       telephony_network_set_circuit_status(network, info->cs_domain_status);
-       telephony_network_set_packet_status(network, info->ps_domain_status);
-       telephony_network_set_service_type(network, info->service_type);
-       telephony_network_set_roaming_status(network, info->roaming_status);
+       case NETWORK_ACT_EVDO_REVA:
+               return 13;
 
-       switch (info->service_type) {
-               case NETWORK_SERVICE_TYPE_UNKNOWN:
-               case NETWORK_SERVICE_TYPE_NO_SERVICE:
-                       telephony_network_set_network_name(network, "No Service");
-                       break;
+       case NETWORK_ACT_CDMA_1X_EVDO_REVA:
+               return 14;
 
-               case NETWORK_SERVICE_TYPE_EMERGENCY:
-                       telephony_network_set_network_name(network, "EMERGENCY");
-                       break;
+       case NETWORK_ACT_EVDV:
+               return 15;
 
-               case NETWORK_SERVICE_TYPE_SEARCH:
-                       telephony_network_set_network_name(network, "Searching...");
-                       break;
+       case NETWORK_ACT_LTE:
+               return 16;
 
-               default:
-                       break;
+       default:
+       break;
        }
 
-       return TCORE_HOOK_RETURN_CONTINUE;
+       return 0;
 }
 
-static enum tcore_hook_return on_hook_change(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
+static void __update_network_name (TelephonyNetwork *network, CoreObject *o, const char *cp_name)
 {
-       const struct tnoti_network_change *info = data;
-       TelephonyNetwork *network = user_data;
-       struct tcore_network_operator_info *noi = NULL;
-       char mcc[4] = { 0, };
-       char mnc[4] = { 0, };
+       char *spnname = NULL, *nwname = NULL;
        enum telephony_network_service_type svc_type;
+       enum telephony_network_access_technology svc_act;
        enum tcore_network_name_priority network_name_priority;
-       char *tmp;
 
-       if (!network)
-               return TCORE_HOOK_RETURN_CONTINUE;
+       tcore_network_get_service_type (o, &svc_type);
+       if (svc_type != NETWORK_SERVICE_TYPE_3G) {
+               telephony_network_set_ps_type (network, TELEPHONY_HSDPA_OFF);
+       }
 
-       telephony_network_set_plmn(network, info->plmn);
-       telephony_network_set_lac(network, info->gsm.lac);
+       tcore_network_get_access_technology (o, &svc_act);
+       telephony_network_set_access_technology (network, __convert_act_to_systemtype(svc_act));
 
-       snprintf(mcc, 4, "%s", info->plmn);
-       snprintf(mnc, 4, "%s", info->plmn+3);
+       tcore_network_get_network_name_priority (o, &network_name_priority);
+       switch (network_name_priority) {
+       case TCORE_NETWORK_NAME_PRIORITY_SPN:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_SPN);
+       break;
 
-       if (mnc[2] == '#')
-               mnc[2] = '\0';
+       case TCORE_NETWORK_NAME_PRIORITY_NETWORK:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_OPERATOR);
+       break;
 
-       tcore_network_get_network_name_priority(source, &network_name_priority);
-       telephony_network_set_name_priority(network, network_name_priority);
+       case TCORE_NETWORK_NAME_PRIORITY_ANY:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_ANY);
+       break;
 
-       tmp = tcore_network_get_network_name(source, TCORE_NETWORK_NAME_TYPE_SPN);
-       if (tmp) {
-               telephony_network_set_spn_name(network, tmp);
-               free(tmp);
+       default:
+               telephony_network_set_name_option (network, NETWORK_NAME_OPTION_NONE);
+       break;
        }
 
-       tcore_network_get_service_type(source, &svc_type);
-       switch(svc_type) {
-               case NETWORK_SERVICE_TYPE_UNKNOWN:
-               case NETWORK_SERVICE_TYPE_NO_SERVICE:
-                       telephony_network_set_network_name(network, "No Service");
-                       break;
+       do {
+               /* spn */
+               spnname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_SPN);
+               if (spnname) {
+                       telephony_network_set_spn_name (network, spnname);
+               }
 
-               case NETWORK_SERVICE_TYPE_EMERGENCY:
-                       telephony_network_set_network_name(network, "EMERGENCY");
+               /* nitz */
+               nwname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_FULL);
+               if (nwname && strlen(nwname) > 0) {
+                       info("[DBUSINFO][%s] SPN:[%s] FULL:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                                       cp_name, spnname?spnname:"", nwname, network_name_priority, svc_act, svc_type);
+                       telephony_network_set_network_name (network, nwname);
                        break;
+               }
+               else {
+                       g_free(nwname);
+                       nwname = tcore_network_get_network_name(o, TCORE_NETWORK_NAME_TYPE_SHORT);
+                       if (nwname) {
+                               info("[DBUSINFO][%s] SPN:[%s] SHORT:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                                               cp_name, spnname?spnname:"", nwname, network_name_priority, svc_act, svc_type);
+                               telephony_network_set_network_name (network, nwname);
+                               break;
+                       }
+               }
+               info("[DBUSINFO][%s] NW name is not fixed yet. SPN:[%s] prio:[%d] act:[%d] svc_type:[%d]",
+                       cp_name, spnname?spnname:"", network_name_priority, svc_act, svc_type);
+       }while(0);
+       g_free(spnname);
+       g_free(nwname);
+}
 
-               case NETWORK_SERVICE_TYPE_SEARCH:
-                       telephony_network_set_network_name(network, "Searching...");
-                       break;
+static enum tcore_hook_return on_hook_ps_protocol_status(Server *s,
+       CoreObject *source, enum tcore_notification_command command,
+       unsigned int data_len, void *data, void *user_data)
+{
+       const struct tnoti_ps_protocol_status *protocol_status = data;
 
-               default:
-                       tmp = tcore_network_get_network_name(source, TCORE_NETWORK_NAME_TYPE_SHORT);
-                       if (tmp) {
-                               telephony_network_set_network_name(network, tmp);
-                               free(tmp);
-                       }
-                       else {
-                               /* pre-defined table */
-                               noi = tcore_network_operator_info_find(source, mcc, mnc);
-                               if (noi) {
-                                       dbg("%s-%s: country=[%s], oper=[%s]", mcc, mnc, noi->country, noi->name);
-                                       dbg("NWNAME = pre-define table[%s]", noi->name);
-                                       telephony_network_set_network_name(network, noi->name);
-                               }
-                               else {
-                                       dbg("%s-%s: no network operator name", mcc, mnc);
-                                       telephony_network_set_network_name(network, info->plmn);
-                               }
-                       }
-                       break;
+       TelephonyObjectSkeleton *object;
+       TelephonyNetwork *network = NULL;
+       struct custom_data *ctx = user_data;
+       const char *cp_name;
+       char *path;
+
+       enum telephony_ps_protocol_status ps_protocol_status = TELEPHONY_HSDPA_OFF;
+
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
+       if (cp_name == NULL) {
+               err("CP name is NULL");
+               return TCORE_HOOK_RETURN_CONTINUE;
        }
 
-       return TCORE_HOOK_RETURN_CONTINUE;
-}
+       info("[DBUSINFO][%s] PS_PROTOCOL_STATUS (status:[%d])", cp_name, protocol_status->status);
 
-static enum tcore_hook_return on_hook_ps_protocol_status(Server *s, CoreObject *source, enum tcore_notification_command command, unsigned int data_len, void *data, void *user_data)
-{
-       const struct tnoti_ps_protocol_status *info = data;
-       TelephonyNetwork *network = user_data;
+       path = g_strdup_printf("%s/%s", MY_DBUS_PATH, cp_name);
 
-       if (!network)
+       /* Look-up Hash table for Object */
+       object = g_hash_table_lookup(ctx->objects, path);
+       g_free(path);
+       if (object == NULL) {
+               err("Object is NOT defined!!!");
                return TCORE_HOOK_RETURN_CONTINUE;
+       }
 
-       telephony_network_set_network_type(network, info->status);
+       network = telephony_object_peek_network(TELEPHONY_OBJECT(object));
+       if (network == NULL) {
+               err("Network object is NULL!!!");
+               return TCORE_HOOK_RETURN_CONTINUE;
+       }
+
+       if (telephony_network_get_service_type (network) < NETWORK_SERVICE_TYPE_2G) {
+               telephony_network_set_ps_type(network, TELEPHONY_HSDPA_OFF);
+               return TCORE_HOOK_RETURN_CONTINUE;
+       }
+
+       switch (protocol_status->status) {
+       case TELEPHONY_HSDPA_OFF:
+               ps_protocol_status = TELEPHONY_HSDPA_OFF;
+               break;
+
+       case TELEPHONY_HSDPA_ON:
+               ps_protocol_status = TELEPHONY_HSDPA_ON;
+               break;
+
+       case TELEPHONY_HSUPA_ON:
+               ps_protocol_status = TELEPHONY_HSUPA_ON;
+               break;
+
+       case TELEPHONY_HSPA_ON:
+               ps_protocol_status = TELEPHONY_HSPA_ON;
+               break;
+
+       case TELEPHONY_HSPAP_ON:
+               ps_protocol_status = TELEPHONY_HSPAP_ON;
+               break;
+       default:
+               err("Unhandled protocol status!");
+       break;
+       }
+
+       /* Check and Set - To avoid double update */
+       if (telephony_network_get_ps_type(network) != (gint)ps_protocol_status)
+               telephony_network_set_ps_type(network, ps_protocol_status);
 
        return TCORE_HOOK_RETURN_CONTINUE;
 }
 
 static gboolean
-on_network_search (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_search (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
-#if 1
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_SEARCH);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_search(network, invocation, NULL, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
-#else
-       /* Dummy return */
-       GVariant *result = NULL;
-       GVariantBuilder b;
-       int i;
-       char *buf;
-
-       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
-
-       for (i = 0; i < 3; i++) {
-               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-
-               g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string("45001"));
-               g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(4));
-               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(2));
-               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string("Samsung"));
-
-               g_variant_builder_close(&b);
-       }
-
-       result = g_variant_builder_end(&b);
-
-       telephony_network_complete_search(network, invocation, result, 0);
-       g_variant_unref(result);
-#endif
 
        return TRUE;
 }
 
 static gboolean
-on_network_search_cancel (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_search_cancel (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "x"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_CANCEL_MANUAL_SEARCH);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_search_cancel(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -267,20 +285,22 @@ on_network_search_cancel (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_selection_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_selection_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_PLMN_SELECTION_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_selection_mode(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -288,39 +308,32 @@ on_network_get_selection_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_selection_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               const gchar *plmn,
-               gint act,
-               gpointer user_data)
+on_network_set_selection_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+               gint mode, const gchar *plmn, gint act, gpointer user_data)
 {
        struct treq_network_set_plmn_selection_mode req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        memset(&req, 0, sizeof(struct treq_network_set_plmn_selection_mode));
 
-       if (mode == 0) {
-               /* Automatic */
-               req.mode = NETWORK_SELECT_MODE_GSM_AUTOMATIC;
+       if (mode == 0) {        /* Automatic */
+               req.mode = NETWORK_SELECT_MODE_AUTOMATIC;
        }
-       else if (mode == 1) {
-               /* Manual */
-               req.mode = NETWORK_SELECT_MODE_GSM_MANUAL;
+       else if (mode == 1) {   /* Manual */
+               req.mode = NETWORK_SELECT_MODE_MANUAL;
                snprintf(req.plmn, 7, "%s", plmn);
-               if (strlen(plmn) <= 5)
-                       req.plmn[5] = '#';
                req.act = act;
        }
        else {
-               telephony_network_complete_set_selection_mode(network, invocation, -1);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                return TRUE;
        }
-
-       dbg("mode = %d, plmn = [%s], act = %d",
-                       req.mode, req.plmn, req.act);
+       dbg("Mode: [%d] PLMN: [%s] AcT: [%d]", req.mode, req.plmn, req.act);
 
        ur = MAKE_UR(ctx, network, invocation);
 
@@ -328,7 +341,7 @@ on_network_set_selection_mode (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_PLMN_SELECTION_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_selection_mode(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -337,16 +350,17 @@ on_network_set_selection_mode (TelephonyNetwork *network,
 
 
 static gboolean
-on_network_set_service_domain (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint domain,
-               gpointer user_data)
+on_network_set_service_domain (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint domain, gpointer user_data)
 {
        struct treq_network_set_service_domain req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.domain = domain;
@@ -355,7 +369,7 @@ on_network_set_service_domain (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_SERVICE_DOMAIN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_service_domain(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -363,20 +377,22 @@ on_network_set_service_domain (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_service_domain (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_service_domain (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_SERVICE_DOMAIN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_service_domain(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -384,17 +400,17 @@ on_network_get_service_domain (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_band (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint band,
-               gint mode,
-               gpointer user_data)
+on_network_set_band (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint band, gint mode, gpointer user_data)
 {
        struct treq_network_set_band req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.mode = mode;
@@ -404,7 +420,7 @@ on_network_set_band (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_BAND);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_band(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -412,20 +428,22 @@ on_network_set_band (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_band (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_band (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_BAND);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_band(network, invocation, -1, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -433,16 +451,17 @@ on_network_get_band (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               gpointer user_data)
+on_network_set_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint mode, gpointer user_data)
 {
        struct treq_network_set_mode req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.mode = mode;
@@ -451,7 +470,7 @@ on_network_set_mode (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_mode(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -459,20 +478,22 @@ on_network_set_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_mode (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_mode (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_MODE);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_mode(network, invocation, -1, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -480,19 +501,17 @@ on_network_get_mode (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_set_preferred_plmn (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gint mode,
-               gint ef_index,
-               gint act,
-               const gchar *plmn,
-               gpointer user_data)
+on_network_set_preferred_plmn (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint mode, gint ef_index, gint act, const gchar *plmn, gpointer user_data)
 {
        struct treq_network_set_preferred_plmn req;
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
 
        req.operation = mode;
@@ -509,7 +528,7 @@ on_network_set_preferred_plmn (TelephonyNetwork *network,
        tcore_user_request_set_command(ur, TREQ_NETWORK_SET_PREFERRED_PLMN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_set_preferred_plmn(network, invocation, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -517,20 +536,22 @@ on_network_set_preferred_plmn (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_preferred_plmn (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_preferred_plmn (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_PREFERRED_PLMN);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_preferred_plmn(network, invocation, NULL, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
                tcore_user_request_unref(ur);
        }
 
@@ -538,20 +559,137 @@ on_network_get_preferred_plmn (TelephonyNetwork *network,
 }
 
 static gboolean
-on_network_get_serving_network (TelephonyNetwork *network,
-               GDBusMethodInvocation *invocation,
-               gpointer user_data)
+on_network_get_serving_network (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
 {
        struct custom_data *ctx = user_data;
        UserRequest *ur = NULL;
        TReturn ret;
 
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
        ur = MAKE_UR(ctx, network, invocation);
-       tcore_user_request_set_data(ur, 0, NULL);
+
        tcore_user_request_set_command(ur, TREQ_NETWORK_GET_SERVING_NETWORK);
        ret = tcore_communicator_dispatch_request(ctx->comm, ur);
        if (ret != TCORE_RETURN_SUCCESS) {
-               telephony_network_complete_get_serving_network(network, invocation, 0, NULL, 0, ret);
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_get_neighboring_cell_info (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_NETWORK_GET_NEIGHBORING_CELL_INFO);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_set_default_data_subscription (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command(ur, TREQ_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION);
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean
+on_network_get_default_data_subscription (TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur = NULL;
+       TReturn ret;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request(ctx->comm, ur);
+       if (ret != TCORE_RETURN_SUCCESS) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_network_set_default_subs(TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gint preferred_subscription, gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_NETWORK, "w"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_SET_DEFAULT_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
+               tcore_user_request_unref(ur);
+       }
+
+       return TRUE;
+}
+
+static gboolean on_network_get_default_subs(TelephonyNetwork *network, GDBusMethodInvocation *invocation,
+       gpointer user_data)
+{
+       struct custom_data *ctx = user_data;
+       UserRequest *ur;
+       TReturn ret = 0;
+
+       if (!check_access_control (invocation, AC_NETWORK, "r"))
+               return TRUE;
+
+       ur = MAKE_UR(ctx, network, invocation);
+
+       tcore_user_request_set_command( ur, TREQ_NETWORK_GET_DEFAULT_SUBSCRIPTION );
+       ret = tcore_communicator_dispatch_request( ctx->comm, ur );
+       if ( ret != TCORE_RETURN_SUCCESS ) {
+               FAIL_RESPONSE (invocation, DEFAULT_MSG_REQ_FAILED);
+               dbg("[ error ] tcore_communicator_dispatch_request() : (0x%x)", ret);
                tcore_user_request_unref(ur);
        }
 
@@ -631,298 +769,576 @@ gboolean dbus_plugin_setup_network_interface(TelephonyObjectSkeleton *object, st
                        G_CALLBACK (on_network_get_serving_network),
                        ctx);
 
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_LOCATION_CELLINFO, on_hook_location_cellinfo, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_ICON_INFO, on_hook_icon_info, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_REGISTRATION_STATUS, on_hook_registration_status, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_NETWORK_CHANGE, on_hook_change, network);
-       tcore_server_add_notification_hook(ctx->server, TNOTI_PS_PROTOCOL_STATUS, on_hook_ps_protocol_status, network);
+       g_signal_connect (network,
+                       "handle-get-ngbr-cell-info",
+                       G_CALLBACK (on_network_get_neighboring_cell_info),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-set-default-data-subscription",
+                       G_CALLBACK (on_network_set_default_data_subscription),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-get-default-data-subscription",
+                       G_CALLBACK (on_network_get_default_data_subscription),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-set-default-subscription",
+                       G_CALLBACK (on_network_set_default_subs),
+                       ctx);
+
+       g_signal_connect (network,
+                       "handle-get-default-subscription",
+                       G_CALLBACK (on_network_get_default_subs),
+                       ctx);
+
+       tcore_server_add_notification_hook(ctx->server,
+               TNOTI_PS_PROTOCOL_STATUS, on_hook_ps_protocol_status, ctx);
 
        return TRUE;
 }
 
-gboolean dbus_plugin_network_response(struct custom_data *ctx, UserRequest *ur, struct dbus_request_info *dbus_info, enum tcore_response_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_network_response(struct custom_data *ctx, UserRequest *ur,
+       struct dbus_request_info *dbus_info, enum tcore_response_command command,
+       unsigned int data_len, const void *data)
 {
-       const struct tresp_network_search *resp_network_search = data;
-       const struct tresp_network_set_cancel_manual_search *resp_set_cancel_manual_search = data;
-       const struct tresp_network_get_plmn_selection_mode *resp_get_plmn_selection_mode = data;
-       const struct tresp_network_set_plmn_selection_mode *resp_set_plmn_selection_mode = data;
-       const struct tresp_network_set_service_domain *resp_set_service_domain = data;
-       const struct tresp_network_get_service_domain *resp_get_service_domain = data;
-       const struct tresp_network_set_band *resp_set_band = data;
-       const struct tresp_network_get_band *resp_get_band = data;
-       const struct tresp_network_set_preferred_plmn *resp_set_preferred_plmn = data;
-       const struct tresp_network_get_preferred_plmn *resp_get_preferred_plmn = data;
-       const struct tresp_network_get_serving_network *resp_get_serving_network = data;
-       const struct tresp_network_set_mode *resp_set_mode = data;
-       const struct tresp_network_get_mode *resp_get_mode = data;
-
-       int i = 0;
-       char *buf;
-
-       GSList *co_list;
-       CoreObject *co_network;
-       char *modem_name = NULL;
-       TcorePlugin *p = NULL;
-
-       modem_name = tcore_user_request_get_modem_name(ur);
-       if (!modem_name)
-               return FALSE;
+       dbg("Response!!! Command: [0x%x] CP Name: [%s]",
+               command, GET_CP_NAME(dbus_info->invocation));
 
-       p = tcore_server_find_plugin(ctx->server, modem_name);
-       free(modem_name);
-       if (!p)
-               return FALSE;
+       switch (command) {
+       case TRESP_NETWORK_SEARCH: {
+               const struct tresp_network_search *resp_network_search = data;
+               GVariant *network_search_result = NULL;
+               GVariantBuilder b;
+               int i = 0;
+
+               dbg("TRESP_NETWORK_SEARCH - Result: [%s] Count: [%d]",
+                       (resp_network_search->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_network_search->list_count);
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i < resp_network_search->list_count; i++) {
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+
+                       g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string(resp_network_search->list[i].plmn));
+                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_network_search->list[i].act));
+                       g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp_network_search->list[i].status));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].name));
+
+                       g_variant_builder_close(&b);
+               }
+               network_search_result = g_variant_builder_end(&b);
 
-       co_list = tcore_plugin_get_core_objects_bytype(p, CORE_OBJECT_TYPE_NETWORK);
-       if (!co_list) {
-               return FALSE;
+               telephony_network_complete_search(dbus_info->interface_object, dbus_info->invocation,
+                       network_search_result, resp_network_search->result);
        }
+       break;
 
-       co_network = (CoreObject *)co_list->data;
-       g_slist_free(co_list);
+       case TRESP_NETWORK_SET_PLMN_SELECTION_MODE: {
+               const struct tresp_network_set_plmn_selection_mode *resp_set_plmn_selection_mode = data;
 
-       if (!co_network) {
-               return FALSE;
+               dbg("TRESP_SET_PLMN_SELECTION_MODE - Result: [%s]",
+                       (resp_set_plmn_selection_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_plmn_selection_mode->result);
        }
+       break;
 
-       switch (command) {
-               case TRESP_NETWORK_SEARCH: {
-                       GVariant *result = NULL;
-                       GVariantBuilder b;
-
-                       dbg("receive TRESP_NETWORK_SEARCH");
-                       dbg("resp->result = %d", resp_network_search->result);
-
-                       g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
-
-                       for (i = 0; i < resp_network_search->list_count; i++) {
-                               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
-
-                               g_variant_builder_add(&b, "{sv}", "plmn", g_variant_new_string(resp_network_search->list[i].plmn));
-                               g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_network_search->list[i].act));
-                               g_variant_builder_add(&b, "{sv}", "type", g_variant_new_int32(resp_network_search->list[i].status));
-
-                               if (strlen(resp_network_search->list[i].name) > 0) {
-                                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].name));
-                               }
-                               else {
-                                       buf = _get_network_name_by_plmn(co_network, resp_network_search->list[i].plmn);
-                                       if (buf)
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(buf));
-                                       else
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_network_search->list[i].plmn));
-                               }
-
-                               g_variant_builder_close(&b);
-                       }
+       case TRESP_NETWORK_GET_PLMN_SELECTION_MODE: {
+               const struct tresp_network_get_plmn_selection_mode *resp_get_plmn_selection_mode = data;
 
-                       result = g_variant_builder_end(&b);
+               dbg("TRESP_GET_PLMN_SELECTION_MODE - Result: [%s] Mode: [%s]",
+                       (resp_get_plmn_selection_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_plmn_selection_mode->mode == NETWORK_SELECT_MODE_AUTOMATIC ? "Auto" :
+                       (resp_get_plmn_selection_mode->mode == NETWORK_SELECT_MODE_MANUAL ? "Manual" :
+                       "Unknown")));
 
-                       telephony_network_complete_search(dbus_info->interface_object, dbus_info->invocation, result, resp_network_search->result);
+               switch (resp_get_plmn_selection_mode->mode) {
+               case NETWORK_SELECT_MODE_AUTOMATIC:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               0, resp_get_plmn_selection_mode->result);
+               break;
+
+               case NETWORK_SELECT_MODE_MANUAL:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               1, resp_get_plmn_selection_mode->result);
+               break;
+
+               default:
+                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation,
+                               -1, resp_get_plmn_selection_mode->result);
+               break;
                }
+       }
+       break;
 
-                       break;
+       case TRESP_NETWORK_SET_SERVICE_DOMAIN: {
+               const struct tresp_network_set_service_domain *resp_set_service_domain = data;
 
-               case TRESP_NETWORK_SET_PLMN_SELECTION_MODE:
-                       dbg("receive TRESP_SET_PLMN_SELECTION_MODE");
-                       dbg("resp->result = %d", resp_set_plmn_selection_mode->result);
-                       telephony_network_complete_set_selection_mode(dbus_info->interface_object, dbus_info->invocation, resp_set_plmn_selection_mode->result);
-                       break;
+               dbg("TRESP_NETWORK_SET_SERVICE_DOMAIN - Result: [%s]",
+                       (resp_set_service_domain->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_NETWORK_GET_PLMN_SELECTION_MODE:
-                       dbg("receive TRESP_GET_PLMN_SELECTION_MODE");
-                       dbg("resp->mode = %d", resp_get_plmn_selection_mode->mode);
-                       switch (resp_get_plmn_selection_mode->mode) {
-                               case NETWORK_SELECT_MODE_GLOBAL_AUTOMATIC:
-                               case NETWORK_SELECT_MODE_GSM_AUTOMATIC:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, 0, resp_get_plmn_selection_mode->result);
-                                       break;
-
-                               case NETWORK_SELECT_MODE_GSM_MANUAL:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, 1, resp_get_plmn_selection_mode->result);
-                                       break;
-
-                               default:
-                                       telephony_network_complete_get_selection_mode(dbus_info->interface_object, dbus_info->invocation, -1, resp_get_plmn_selection_mode->result);
-                                       break;
-                       }
-                       break;
+               telephony_network_complete_set_service_domain(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_service_domain->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_SERVICE_DOMAIN:
-                       dbg("receive TRESP_NETWORK_SET_SERVICE_DOMAIN");
-                       dbg("resp->result = %d", resp_set_service_domain->result);
-                       telephony_network_complete_set_service_domain(dbus_info->interface_object, dbus_info->invocation, resp_set_service_domain->result);
-                       break;
+       case TRESP_NETWORK_GET_SERVICE_DOMAIN: {
+               const struct tresp_network_get_service_domain *resp_get_service_domain = data;
 
-               case TRESP_NETWORK_GET_SERVICE_DOMAIN:
-                       dbg("receive TRESP_NETWORK_GET_SERVICE_DOMAIN");
-                       dbg("resp->domain = %d", resp_get_service_domain->domain);
-                       telephony_network_complete_get_service_domain(dbus_info->interface_object, dbus_info->invocation, resp_get_service_domain->domain, resp_get_service_domain->result);
-                       break;
+               dbg("TRESP_NETWORK_GET_SERVICE_DOMAIN - Result: [%s] Domain: [%d]",
+                       (resp_get_service_domain->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_service_domain->domain);
 
-               case TRESP_NETWORK_SET_BAND:
-                       dbg("receive TRESP_NETWORK_SET_BAND");
-                       dbg("resp->result = %d", resp_set_band->result);
-                       telephony_network_complete_set_band(dbus_info->interface_object, dbus_info->invocation, resp_set_band->result);
-                       break;
+               telephony_network_complete_get_service_domain(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_service_domain->domain, resp_get_service_domain->result);
+       }
+       break;
 
-               case TRESP_NETWORK_GET_BAND:
-                       dbg("receive TRESP_NETWORK_GET_BAND");
-                       dbg("resp->mode = %d", resp_get_band->mode);
-                       dbg("resp->band = %d", resp_get_band->band);
-                       telephony_network_complete_get_band(dbus_info->interface_object, dbus_info->invocation, resp_get_band->band, resp_get_band->mode, resp_get_band->result);
-                       break;
+       case TRESP_NETWORK_SET_BAND: {
+               const struct tresp_network_set_band *resp_set_band = data;
 
-               case TRESP_NETWORK_SET_MODE:
-                       dbg("receive TRESP_NETWORK_SET_MODE");
-                       dbg("resp->result = %d", resp_set_mode->result);
-                       telephony_network_complete_set_mode(dbus_info->interface_object, dbus_info->invocation, resp_set_mode->result);
-                       break;
+               dbg("TRESP_NETWORK_SET_BAND - Result: [%s]",
+                       (resp_set_band->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               case TRESP_NETWORK_GET_MODE:
-                       dbg("receive TRESP_NETWORK_GET_MODE");
-                       dbg("resp->mode = %d", resp_get_mode->mode);
-                       telephony_network_complete_get_mode(dbus_info->interface_object, dbus_info->invocation, resp_get_mode->mode, resp_get_mode->result);
-                       break;
+               telephony_network_complete_set_band(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_band->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_PREFERRED_PLMN:
-                       dbg("receive TRESP_NETWORK_SET_PREFERRED_PLMN");
-                       dbg("resp->result = %d", resp_set_preferred_plmn->result);
-                       telephony_network_complete_set_preferred_plmn(dbus_info->interface_object, dbus_info->invocation, resp_set_preferred_plmn->result);
-                       break;
+       case TRESP_NETWORK_GET_BAND: {
+               const struct tresp_network_get_band *resp_get_band = data;
 
-               case TRESP_NETWORK_GET_PREFERRED_PLMN:
-                       dbg("receive TRESP_NETWORK_GET_PREFERRED_PLMN");
-                       dbg("resp->result = %d", resp_get_preferred_plmn->result);
-                       {
-                               GVariant *result = NULL;
-                               GVariantBuilder b;
+               dbg("TRESP_NETWORK_GET_BAND - Result: [%s] Mode: [%s] Band: [%d]",
+                       (resp_get_band->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_band->mode == NETWORK_BAND_MODE_PREFERRED ? "Preferred" :
+                       (resp_get_band->mode == NETWORK_BAND_MODE_ONLY ? "Only" :
+                       "Unknown")), resp_get_band->band);
 
-                               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               telephony_network_complete_get_band(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_band->band, resp_get_band->mode, resp_get_band->result);
+       }
+       break;
 
-                               for (i = 0; i < resp_get_preferred_plmn->list_count; i++) {
-                                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+       case TRESP_NETWORK_SET_MODE: {
+               const struct tresp_network_set_mode *resp_set_mode = data;
 
-                                       g_variant_builder_add(&b, "{sv}", "plmn",
-                                                       g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
-                                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_get_preferred_plmn->list[i].act));
-                                       g_variant_builder_add(&b, "{sv}", "index",
-                                                       g_variant_new_int32(resp_get_preferred_plmn->list[i].ef_index));
+               dbg("TRESP_NETWORK_SET_MODE - Result: [%s]",
+                       (resp_set_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-                                       buf = _get_network_name_by_plmn(co_network, resp_get_preferred_plmn->list[i].plmn);
-                                       if (buf)
-                                               g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(buf));
-                                       else
-                                               g_variant_builder_add(&b, "{sv}", "name",
-                                                               g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
+               telephony_network_complete_set_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_mode->result);
+       }
+       break;
 
-                                       g_variant_builder_close(&b);
-                               }
+       case TRESP_NETWORK_GET_MODE: {
+               const struct tresp_network_get_mode *resp_get_mode = data;
 
-                               result = g_variant_builder_end(&b);
+               dbg("TRESP_NETWORK_GET_MODE - Result: [%s] Mode: [%d]",
+                       (resp_get_mode->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_mode->mode);
 
-                               telephony_network_complete_get_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
-                                               result, resp_get_preferred_plmn->result);
-                       }
-                       break;
+               telephony_network_complete_get_mode(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_mode->mode, resp_get_mode->result);
+       }
+       break;
 
-               case TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH:
-                       dbg("receive TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH");
-                       dbg("resp->result = %d", resp_set_cancel_manual_search->result);
-                       telephony_network_complete_search_cancel(dbus_info->interface_object, dbus_info->invocation, resp_set_cancel_manual_search->result);
-                       break;
+       case TRESP_NETWORK_GET_NEIGHBORING_CELL_INFO: {
+               const struct tresp_network_get_neighboring_cell_info *resp_get_ngbr_cell_info = data;
+               GVariant *neighboring_cell_info_result = NULL;
+               GVariant *value = NULL;
+               GVariantBuilder b;
+               enum telephony_network_access_technology act;
+               int i = 0;
 
-               case TRESP_NETWORK_GET_SERVING_NETWORK:
-                       dbg("receive TRESP_NETWORK_GET_SERVING_NETWORK");
-                       dbg("resp->act = %d", resp_get_serving_network->act);
-                       dbg("resp->plmn = %s", resp_get_serving_network->plmn);
-                       dbg("resp->lac = %d", resp_get_serving_network->gsm.lac);
-                       telephony_network_complete_get_serving_network(dbus_info->interface_object, dbus_info->invocation,
-                                       resp_get_serving_network->act,
-                                       resp_get_serving_network->plmn,
-                                       resp_get_serving_network->gsm.lac,
-                                       resp_get_serving_network->result);
-                       break;
+               dbg("TRESP_NETWORK_GET_NEIGHBORING_CELL_INFO - Result: [%s]",
+                       (resp_get_ngbr_cell_info->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
 
-               default:
-                       dbg("not handled cmd[0x%x]", command);
-                       break;
+               act = resp_get_ngbr_cell_info->info.serving.act;
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+
+               /* Fill Serving cell parameter */
+               value = g_variant_new("(iii)",
+                               resp_get_ngbr_cell_info->info.serving.act,
+                               resp_get_ngbr_cell_info->info.serving.mcc,
+                               resp_get_ngbr_cell_info->info.serving.mnc);
+               g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+               g_variant_builder_add(&b, "{sv}", "serving", value);
+               g_variant_builder_close(&b);
+
+               if (act >= NETWORK_ACT_GSM && act <= NETWORK_ACT_EGPRS) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.bcch,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.bsic,
+                                       resp_get_ngbr_cell_info->info.serving.cell.geran.rxlev);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "g_serving", value);
+                       g_variant_builder_close(&b);
+
+               }
+               else if (act >= NETWORK_ACT_UMTS && act <= NETWORK_ACT_GSM_UTRAN) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.arfcn,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.psc,
+                                       resp_get_ngbr_cell_info->info.serving.cell.umts.rscp);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "u_serving", value);
+                       g_variant_builder_close(&b);
+               }
+               else if (act == NETWORK_ACT_LTE) {
+                       value = g_variant_new("(iiiii)",
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.cell_id,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.lac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.earfcn,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.tac,
+                                       resp_get_ngbr_cell_info->info.serving.cell.lte.rssi);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "l_serving", value);
+                       g_variant_builder_close(&b);
+               }
+
+               /* Fill GERAN neighbor cell parameter */
+               for (i = 0; i < resp_get_ngbr_cell_info->info.geran_list_count; i++) {
+                       value = g_variant_new("(iiiii)",
+                               resp_get_ngbr_cell_info->info.geran_list[i].cell_id,
+                               resp_get_ngbr_cell_info->info.geran_list[i].lac,
+                               resp_get_ngbr_cell_info->info.geran_list[i].bcch,
+                               resp_get_ngbr_cell_info->info.geran_list[i].bsic,
+                               resp_get_ngbr_cell_info->info.geran_list[i].rxlev);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "geran", value);
+                       g_variant_builder_close(&b);
+               }
+
+               /* Fill UMTS neighbor cell parameter */
+               for (i = 0; i < resp_get_ngbr_cell_info->info.umts_list_count; i++) {
+                       value = g_variant_new("(iiiii)",
+                               resp_get_ngbr_cell_info->info.umts_list[i].cell_id,
+                               resp_get_ngbr_cell_info->info.umts_list[i].lac,
+                               resp_get_ngbr_cell_info->info.umts_list[i].arfcn,
+                               resp_get_ngbr_cell_info->info.umts_list[i].psc,
+                               resp_get_ngbr_cell_info->info.umts_list[i].rscp);
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+                       g_variant_builder_add(&b, "{sv}", "umts", value);
+                       g_variant_builder_close(&b);
+               }
+               neighboring_cell_info_result = g_variant_builder_end(&b);
+
+               telephony_network_complete_get_ngbr_cell_info(dbus_info->interface_object, dbus_info->invocation,
+                       neighboring_cell_info_result, resp_get_ngbr_cell_info->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_PREFERRED_PLMN: {
+               const struct tresp_network_set_preferred_plmn *resp_set_preferred_plmn = data;
+
+               dbg("TRESP_NETWORK_SET_PREFERRED_PLMN - Result: [%s]",
+                       (resp_set_preferred_plmn->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_preferred_plmn->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_PREFERRED_PLMN: {
+               const struct tresp_network_get_preferred_plmn *resp_get_preferred_plmn = data;
+               GVariant *preferred_plmn_result = NULL;
+               GVariantBuilder b;
+               int i = 0;
+
+               dbg("TRESP_NETWORK_GET_PREFERRED_PLMN - Result: [%s] Count: [%d]",
+                       (resp_get_preferred_plmn->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_preferred_plmn->list_count);
+
+               g_variant_builder_init(&b, G_VARIANT_TYPE("aa{sv}"));
+               for (i = 0; i < resp_get_preferred_plmn->list_count; i++) {
+                       g_variant_builder_open(&b, G_VARIANT_TYPE("a{sv}"));
+
+                       g_variant_builder_add(&b, "{sv}", "plmn",
+                                       g_variant_new_string(resp_get_preferred_plmn->list[i].plmn));
+                       g_variant_builder_add(&b, "{sv}", "act", g_variant_new_int32(resp_get_preferred_plmn->list[i].act));
+                       g_variant_builder_add(&b, "{sv}", "index",
+                                       g_variant_new_int32(resp_get_preferred_plmn->list[i].ef_index));
+                       g_variant_builder_add(&b, "{sv}", "name", g_variant_new_string(resp_get_preferred_plmn->list[i].name));
+
+                       g_variant_builder_close(&b);
+               }
+               preferred_plmn_result = g_variant_builder_end(&b);
+
+               telephony_network_complete_get_preferred_plmn(dbus_info->interface_object, dbus_info->invocation,
+                               preferred_plmn_result, resp_get_preferred_plmn->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH: {
+               const struct tresp_network_set_cancel_manual_search *resp_set_cancel_manual_search = data;
+
+               dbg("TRESP_NETWORK_SET_CANCEL_MANUAL_SEARCH - Result: [%s]",
+                       (resp_set_cancel_manual_search->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_search_cancel(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_cancel_manual_search->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_SERVING_NETWORK: {
+               const struct tresp_network_get_serving_network *resp_get_serving_network = data;
+
+               dbg("TRESP_NETWORK_GET_SERVING_NETWORK - Result: [%s] AcT: [%d] PLMN: [%s] LAC: [%d])",
+                       (resp_get_serving_network->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       resp_get_serving_network->act, resp_get_serving_network->plmn, resp_get_serving_network->gsm.lac);
+
+               telephony_network_complete_get_serving_network(dbus_info->interface_object, dbus_info->invocation,
+                               resp_get_serving_network->act, resp_get_serving_network->plmn,
+                               resp_get_serving_network->gsm.lac, resp_get_serving_network->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tresp_network_set_default_data_subscription *resp_set_default_data_subs = data;
+
+               dbg("TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION - Result: [%s]",
+                       (resp_set_default_data_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_default_data_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_default_data_subs->result);
+       }
+       break;
+
+       case TRESP_NETWORK_GET_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tresp_network_get_default_data_subs *resp_get_default_data_subs = data;
+
+               dbg("TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION - Result: [%s] 'default' Data subscription: [%s]",
+                       (resp_get_default_data_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_default_data_subs->default_subs == NETWORK_DEFAULT_DATA_SUBS_SIM1 ? "SIM1" :
+                       (resp_get_default_data_subs->default_subs == NETWORK_DEFAULT_DATA_SUBS_SIM2 ? "SIM2" :
+                       "Unknown")));
+
+               telephony_network_complete_get_default_data_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_default_data_subs->default_subs, resp_get_default_data_subs->result);
+       }
+       break;
+
+       case TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION: {
+               const struct tresp_network_set_default_subs *resp_set_default_subs = data;
+
+               dbg("TRESP_NETWORK_SET_DEFAULT_SUBSCRIPTION - Result: [%s]",
+                       (resp_set_default_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"));
+
+               telephony_network_complete_set_default_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_set_default_subs->result );
+       }
+       break;
+
+       case TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION: {
+               const struct tresp_network_get_default_subs *resp_get_default_subs = data;
+
+               dbg("TRESP_NETWORK_GET_DEFAULT_SUBSCRIPTION - Result: [%s] 'default' subscription: [%s]",
+                       (resp_get_default_subs->result == TCORE_RETURN_SUCCESS ? "Success" : "Fail"),
+                       (resp_get_default_subs->default_subs == NETWORK_DEFAULT_SUBS_SIM1 ? "SIM1" :
+                       (resp_get_default_subs->default_subs == NETWORK_DEFAULT_SUBS_SIM2 ? "SIM2" :
+                       "Unknown")));
+
+               telephony_network_complete_get_default_subscription(dbus_info->interface_object, dbus_info->invocation,
+                       resp_get_default_subs->default_subs, resp_get_default_subs->result );
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Response!!!");
+       break;
        }
 
        return TRUE;
 }
 
-gboolean dbus_plugin_network_notification(struct custom_data *ctx, const char *plugin_name, TelephonyObjectSkeleton *object, enum tcore_notification_command command, unsigned int data_len, const void *data)
+gboolean dbus_plugin_network_notification(struct custom_data *ctx, CoreObject *source,
+       TelephonyObjectSkeleton *object, enum tcore_notification_command command,
+       unsigned int data_len, const void *data)
 {
        TelephonyNetwork *network;
-       const struct tnoti_network_registration_status *registration = data;
-       const struct tnoti_network_change *change = data;
-       const struct tnoti_network_icon_info *icon_info = data;
-       const struct tnoti_network_timeinfo *time_info = data;
-       const struct tnoti_network_identity *identity = data;
-       const struct tnoti_network_location_cellinfo *location = data;
-
-       if (!object) {
-               dbg("object is NULL");
-               return FALSE;
-       }
+       const char *cp_name;
+
+       cp_name = tcore_server_get_cp_name_by_plugin(tcore_object_ref_plugin(source));
 
        network = telephony_object_peek_network(TELEPHONY_OBJECT(object));
-       dbg("network = %p", network);
+       if (network == NULL) {
+               err("Network object is NULL!!!");
+               return FALSE;
+       }
 
        switch (command) {
-               case TNOTI_NETWORK_REGISTRATION_STATUS:
-                       telephony_network_emit_registration_status(network,
-                                       registration->cs_domain_status,
-                                       registration->ps_domain_status,
-                                       registration->service_type,
-                                       registration->roaming_status);
-                       break;
+       case TNOTI_NETWORK_REGISTRATION_STATUS: {
+               const struct tnoti_network_registration_status *reg = data;
 
-               case TNOTI_NETWORK_CHANGE:
-                       telephony_network_emit_change(network,
-                                       change->act,
-                                       change->plmn,
-                                       change->gsm.lac);
-                       break;
+               info("[DBUSINFO][%s] NET_REGI_STATUS. (cs:[%d] ps:[%d] svc:[%d] roam:[%d])",
+                       cp_name, reg->cs_domain_status, reg->ps_domain_status, reg->service_type, reg->roaming_status);
 
-               case TNOTI_NETWORK_ICON_INFO:
-                       telephony_network_emit_info(network,
-                                       icon_info->rssi,
-                                       icon_info->battery);
-                       break;
+#ifdef ENABLE_KPI_LOGS
+               /* We ignore No SIM present case for KPI */
+               if (reg->cs_domain_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL
+                       && telephony_network_get_circuit_status(network) != NETWORK_SERVICE_DOMAIN_STATUS_FULL)
+                       TIME_CHECK("[%s] CS Network Full", cp_name);
 
-               case TNOTI_NETWORK_TIMEINFO:
-                       telephony_network_emit_time_info(network,
-                                       time_info->year,
-                                       time_info->month,
-                                       time_info->day,
-                                       time_info->hour,
-                                       time_info->minute,
-                                       time_info->second,
-                                       time_info->wday,
-                                       time_info->gmtoff,
-                                       time_info->dstoff,
-                                       time_info->isdst,
-                                       time_info->plmn);
-                       break;
+               if (reg->ps_domain_status == NETWORK_SERVICE_DOMAIN_STATUS_FULL
+                       && telephony_network_get_packet_status(network) != NETWORK_SERVICE_DOMAIN_STATUS_FULL)
+                       TIME_CHECK("[%s] PS Network Full", cp_name);
+#endif
 
-               case TNOTI_NETWORK_IDENTITY:
-                       telephony_network_emit_identity(network,
-                                       identity->plmn,
-                                       identity->short_name,
-                                       identity->full_name);
-                       break;
+               /* Update properties */
+               telephony_network_set_circuit_status (network, reg->cs_domain_status);
+               telephony_network_set_packet_status (network, reg->ps_domain_status);
+               telephony_network_set_service_type (network, reg->service_type);
+               telephony_network_set_roaming_status (network, reg->roaming_status);
+
+               /* Update Network name */
+               __update_network_name(network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_registration_status(network,
+                               reg->cs_domain_status,
+                               reg->ps_domain_status,
+                               reg->service_type,
+                               reg->roaming_status);
+       }
+       break;
 
-               case TNOTI_NETWORK_LOCATION_CELLINFO:
-                       telephony_network_emit_cell_info(network,
-                                       location->lac,
-                                       location->cell_id);
-                       break;
+       case TNOTI_NETWORK_CHANGE: {
+               const struct tnoti_network_change *change = data;
 
-               default:
-                       dbg("not handled cmd[0x%x]", command);
-                       break;
+               info("[DBUSINFO][%s] NET_CHANGE. (plmn:[%s] lac:[%d])",
+                       cp_name, change->plmn, change->gsm.lac);
+
+               /* Update properties */
+               telephony_network_set_plmn (network, change->plmn);
+               telephony_network_set_lac (network, change->gsm.lac);
+
+               /* Update Network name */
+               __update_network_name(network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_change(network,
+                               change->act,
+                               change->plmn);
+       }
+       break;
+
+       case TNOTI_NETWORK_TIMEINFO: {
+               const struct tnoti_network_timeinfo *time_info = data;
+
+               info("[DBUSINFO][%s] NET_TIMEINFO", cp_name);
+
+               /* Emit signal */
+               telephony_network_emit_time_info(network,
+                               time_info->year,
+                               time_info->month,
+                               time_info->day,
+                               time_info->hour,
+                               time_info->minute,
+                               time_info->second,
+                               time_info->wday,
+                               time_info->gmtoff,
+                               time_info->dstoff,
+                               time_info->isdst,
+                               time_info->plmn);
+       }
+       break;
+
+       case TNOTI_NETWORK_ICON_INFO: {
+               const struct tnoti_network_icon_info *icon_info = data;
+
+               /* Update property */
+               if (icon_info->type & NETWORK_ICON_INFO_RSSI) {
+                       info("[DBUSINFO][%s] NET_ICON_INFO (Ant:[%d])", cp_name, icon_info->rssi);
+                       telephony_network_set_sig_level (network, icon_info->rssi);
+               }
+       }
+       break;
+
+       case TNOTI_NETWORK_IDENTITY: {
+               const struct tnoti_network_identity *identity = data;
+
+               info("[DBUSINFO][%s] NET_IDENTITY (long:[%s] short:[%s] plmn:[%s])",
+                       cp_name, identity->full_name, identity->short_name, identity->plmn);
+
+               /* Update properties */
+               telephony_network_set_plmn (network, identity->plmn);
+
+               /* Update Network name */
+               __update_network_name (network, source, cp_name);
+
+               /* Emit Signal */
+               telephony_network_emit_identity(network,
+                               identity->plmn,
+                               identity->short_name,
+                               identity->full_name);
+       }
+       break;
+
+       case TNOTI_NETWORK_LOCATION_CELLINFO: {
+               const struct tnoti_network_location_cellinfo *location = data;
+
+               info("[DBUSINFO][%s] NET_LOCATION_CELLINFO (lac:[%d] cell_id:[%d])",
+                       cp_name, location->lac, location->cell_id);
+
+               /* Update properties */
+               telephony_network_set_lac (network, location->lac);
+               telephony_network_set_cell_id (network, location->cell_id);
+
+               /* Emit signal */
+               telephony_network_emit_cell_info(network,
+                               location->lac,
+                               location->cell_id);
+       }
+       break;
+
+       case TNOTI_NETWORK_SIGNAL_STRENGTH: {
+               const struct tnoti_network_signal_strength *signal_strength = data;
+
+               info("[DBUSINFO][%s] NET_SIGNAL_STRENGTH (dbm:[%d])", cp_name, signal_strength->dbm);
+
+               /* Update properties */
+               telephony_network_set_sig_dbm (network, signal_strength->dbm);
+
+               /* Emit signal */
+               telephony_network_emit_signal_strength(network,
+                               signal_strength->dbm);
+       }
+       break;
+
+       case TNOTI_NETWORK_DEFAULT_DATA_SUBSCRIPTION: {
+               const struct tnoti_network_default_data_subs *default_data_subs_info = data;
+
+               info("[DBUSINFO][%s] NET_DEFAULT_DATA_SUBSCRIPTION (default:[%d])", cp_name, default_data_subs_info->default_subs);
+
+               /* Emit signal */
+               telephony_network_emit_default_data_subscription(network,
+                               default_data_subs_info->default_subs);
+       }
+       break;
+
+       case TNOTI_NETWORK_DEFAULT_SUBSCRIPTION: {
+               const struct tnoti_network_default_subs *default_subs_info = data;
+
+               info("[DBUSINFO][%s] NET_DEFAULT_SUBSCRIPTION (default:[%d])", cp_name, default_subs_info->default_subs);
+
+               /* Emit signal */
+               telephony_network_emit_default_subscription(network,
+                               default_subs_info->default_subs);
+       }
+       break;
+
+       default:
+               err("Unhandled/Unknown Notification!!!");
+       break;
        }
 
        return TRUE;