Add new features and fixes
[platform/core/telephony/tel-plugin-packetservice.git] / src / ps_modem.c
index 4e60b0b..714482b 100644 (file)
@@ -31,6 +31,8 @@
 #include <co_context.h>
 #include <co_ps.h>
 
+#define MODULE_TAG "PS-MODEM"
+
 #define PROP_DEFAULT   FALSE
 #define PROP_DEFAULT_STR   NULL
 #define DATABASE_PATH_0        tzplatform_mkpath(TZ_SYS_DB, ".dnet.db")
@@ -69,14 +71,14 @@ static gboolean __ps_modem_thread_finish_cb(gpointer data)
 
        modem = thread_data->modem;
 
-       dbg("Thread %p return is complete", thread_data->selfi);
+       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Thread %p return is complete", thread_data->selfi);
 
        _ps_get_co_modem_values(thread_data->modem);
        _ps_modem_set_reset_profile(thread_data->modem, FALSE);
        packet_service_modem_complete_reset_profile(thread_data->modem->if_obj, thread_data->modem->invocation, TRUE);
 
        g_thread_join(thread_data->selfi);
-       dbg("Clean up of thread %p is complete", thread_data->selfi);
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "Clean up of thread %p is complete", thread_data->selfi);
        thread_data->modem->invocation = NULL;
        _ps_modem_remove_profile_reset_gsource(thread_data->modem);
        thread_data->modem = NULL;
@@ -100,7 +102,7 @@ static gpointer __ps_modem_regenerate_database(gpointer data)
 
        thread_data = g_try_malloc0(sizeof(*thread_data));
        if (!thread_data) {
-               err("mamory alloc is fail !!!");
+               ps_err_ex_co(_ps_modem_ref_co_modem(modem), "memory alloc is fail !!!");
                return NULL;
        }
        thread_data->modem = modem;
@@ -117,7 +119,7 @@ static gpointer __ps_modem_regenerate_database(gpointer data)
        rv = _ps_context_fill_profile_table_from_ini_file(modem->cp_name);
 
        if (TRUE == ps_util_thread_dispatch(g_main_context_default(), G_PRIORITY_LOW, (GSourceFunc)__ps_modem_thread_finish_cb, thread_data))
-               dbg("Thread %p processing is complete", thread_data->selfi);
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "Thread %p processing is complete", thread_data->selfi);
 
        g_free(command);
 
@@ -128,14 +130,16 @@ void __remove_modem_handler(gpointer data)
 {
        ps_modem_t *modem = data;
 
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Entered");
        if (!modem) {
-               dbg("Modem is NULL");
+               warn("Modem is NULL");
                return;
        }
 
-       __ps_modem_cp_reset_send_pending_request_response(modem);
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "Entered");
 
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
+       __ps_modem_cp_reset_send_pending_request_response(modem);
+#endif
        /*Need to remove the compelete hash table*/
        g_hash_table_remove_all(modem->services);
 
@@ -145,7 +149,9 @@ void __remove_modem_handler(gpointer data)
        g_object_unref(modem->if_obj);
 
        /*Need to free memory allocated for the internal structure*/
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
        g_queue_free(modem->work_queue);
+#endif
        g_free(modem->path);
        g_free(modem->operator);
        g_free(modem->cp_name);
@@ -213,7 +219,7 @@ static void __ps_modem_create_service(GDBusConnection *conn, TcorePlugin *p,
                g_free(t_path);
                return;
        }
-       ps_dbg_ex_co(co_modem, "service path (%s)", t_path);
+       ps_info_ex_co(co_modem, "service path (%s)", t_path);
        object = _ps_service_create_service(conn, p, modem, co_network, co_ps, t_path);
        if (object == NULL) {
                ps_err_ex_co(co_modem, "Failed to create service ");
@@ -244,7 +250,7 @@ static void __ps_modem_remove_service(ps_modem_t *modem, gpointer service)
 
        g_hash_table_remove(modem->services, _ps_service_ref_path(service));
 
-       dbg("Successfully removed the service from the modem");
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "Successfully removed the service from the modem");
        return;
 }
 
@@ -252,9 +258,11 @@ static gboolean __ps_modem_set_powered(ps_modem_t *modem, gboolean value)
 {
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->powered = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) powered(%d)", modem, modem->powered);
-       __ps_modem_emit_property_changed_signal(modem);
+       if (modem->powered != value) {
+               modem->powered = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) powered(%d)", modem, modem->powered);
+               __ps_modem_emit_property_changed_signal(modem);
+       }
        return TRUE;
 }
 
@@ -262,13 +270,15 @@ static gboolean __ps_modem_set_sim_complete(ps_modem_t *modem, gboolean value, g
 {
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       /* Update SIM init status */
-       modem->sim_init = value;
-       if (value && operator != NULL && !modem->operator)
-               modem->operator = g_strdup(operator);
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem [%p] SIM-Init [%s]", modem, (modem->sim_init ? "INITIALIZED" : "UNINITIALIZED"));
+       if (modem->sim_init != value) {
+               /* Update SIM init status */
+               modem->sim_init = value;
+               if (value && operator != NULL && !modem->operator)
+                       modem->operator = g_strdup(operator);
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem [%p] SIM-Init [%s]", modem, (modem->sim_init ? "INITIALIZED" : "UNINITIALIZED"));
 
-       __ps_modem_emit_property_changed_signal(modem);
+               __ps_modem_emit_property_changed_signal(modem);
+       }
 
        return TRUE;
 }
@@ -277,10 +287,12 @@ static gboolean __ps_modem_set_flght_mode(ps_modem_t *modem, gboolean value)
 {
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->flight_mode = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) flight_mode(%d)", modem, modem->flight_mode);
-       __ps_modem_emit_property_changed_signal(modem);
-       __ps_modem_processing_modem_event(modem);
+       if (modem->flight_mode != value) {
+               modem->flight_mode = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) flight_mode(%d)", modem, modem->flight_mode);
+               __ps_modem_emit_property_changed_signal(modem);
+               __ps_modem_processing_modem_event(modem);
+       }
 
        return TRUE;
 }
@@ -292,9 +304,6 @@ static void __ps_modem_get_ps_setting_from_storage(ps_modem_t *object)
        gint key_ps_mode = 0;
        ps_modem_t *modem = NULL;
        CoreObject *co_modem;
-#if defined(TIZEN_UPS_ENABLED)
-       struct treq_modem_set_flightmode data = {0};
-#endif
 
        modem = (ps_modem_t *) object;
        co_modem = _ps_modem_ref_co_modem(modem);
@@ -308,18 +317,6 @@ static void __ps_modem_get_ps_setting_from_storage(ps_modem_t *object)
 
 #if defined(TIZEN_UPS_ENABLED)
        _ps_modem_set_psmode(modem, key_ps_mode);
-       if (key_ps_mode == POWER_SAVING_MODE_NORMAL) {
-               dbg("set flight mode off");
-               data.enable = FALSE;
-       } else if (key_ps_mode == POWER_SAVING_MODE_WEARABLE) {
-               dbg("set flight mode on");
-               data.enable = TRUE;
-       } else {
-               err("Not supported");
-               goto OUT;
-       }
-       _ps_modem_send_filght_mode_request(modem, &data);
-OUT:
 #endif
        ps_dbg_ex_co(co_modem, "data allowed(%d) roaming allowed(%d) power saving mode(%d), network restrict mode (%d)",
                key_3g_enable, key_roaming_allowed, key_ps_mode, key_nw_restrict_mode);
@@ -355,11 +352,11 @@ static void __ps_modem_processing_modem_event(gpointer object)
                        continue;
                }
 
-               if (modem->flight_mode || (s_roaming && !modem->roaming_allowed)) {
+               if (modem->flight_mode) {
                        _ps_service_disconnect_contexts(value);
                        continue;
-               } else if (!modem->data_allowed) {
-                       _ps_service_disconnect_internet_mms_contexts(value);
+               } else if (!modem->data_allowed || (s_roaming && !modem->roaming_allowed)) {
+                       _ps_service_disconnect_internet_mms_tethering_contexts(value);
                        continue;
                }
 
@@ -397,6 +394,7 @@ gpointer _ps_modem_create_modem(GDBusConnection *conn, TcorePlugin *p, gpointer
                return NULL;
        }
 
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
        /*Add work queue to keep user request in case of handling active PDP context*/
        new_modem->hook_flag = 0x00;
        new_modem->work_queue = g_queue_new();
@@ -405,7 +403,7 @@ gpointer _ps_modem_create_modem(GDBusConnection *conn, TcorePlugin *p, gpointer
                g_free(new_modem);
                return NULL;
        }
-
+#endif
        new_modem->conn = conn;
        new_modem->p_master = master;
        new_modem->plg = p;
@@ -430,6 +428,7 @@ gpointer _ps_modem_create_modem(GDBusConnection *conn, TcorePlugin *p, gpointer
 
        g_assert_no_error(error);
 
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
        /* Adding hooks for special Network Requests */
        tcore_server_add_request_hook(tcore_plugin_ref_server(p),
                        TREQ_NETWORK_SEARCH,
@@ -461,8 +460,9 @@ gpointer _ps_modem_create_modem(GDBusConnection *conn, TcorePlugin *p, gpointer
        tcore_server_add_request_hook(tcore_plugin_ref_server(p),
                        TREQ_MODEM_POWER_ON,
                        ps_handle_hook, new_modem);
+#endif
 
-       ps_err_ex_co(co_modem, "Successfully created the modem");
+       ps_info_ex_co(co_modem, "Successfully created the modem");
        return new_modem;
 }
 
@@ -479,7 +479,7 @@ void _ps_modem_destroy_modem(GDBusConnection *conn, gpointer object)
        if (modem->services == NULL)
                return;
 
-       dbg("Clearing all services");
+       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Clearing all services");
        g_hash_table_iter_init(&iter, modem->services);
        while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
                /* Update Cellular state */
@@ -508,33 +508,6 @@ void _ps_modem_destroy_modem(GDBusConnection *conn, gpointer object)
        _ps_free_co_modem_event(modem);
 }
 
-gboolean _ps_modem_send_filght_mode_request(gpointer value, void *data)
-{
-       CoreObject *co_modem = NULL, *co_ps = NULL;
-       UserRequest *ur = NULL;
-       ps_modem_t *modem = value;
-       TReturn rv;
-
-       co_modem = _ps_modem_ref_co_modem(modem);
-       co_ps = tcore_plugin_ref_core_object(tcore_object_ref_plugin(co_modem), CORE_OBJECT_TYPE_PS);
-       /* deactivate contexts first. */
-       rv = tcore_ps_deactivate_contexts(co_ps);
-       if (rv != TCORE_RETURN_SUCCESS)
-               ps_dbg_ex_co(co_ps, "fail to deactivation");
-
-       tcore_ps_set_online(co_ps, FALSE);
-
-       ur = tcore_user_request_new(NULL, NULL);
-       tcore_user_request_set_data(ur, sizeof(struct treq_modem_set_flightmode), data);
-       tcore_user_request_set_command(ur, TREQ_MODEM_SET_FLIGHTMODE);
-       if (TCORE_RETURN_SUCCESS != tcore_object_dispatch_request(co_modem, ur)) {
-               err("fail to send user request");
-               tcore_user_request_unref(ur);
-               return FALSE;
-       }
-       return TRUE;
-}
-
 gboolean _ps_modem_processing_flight_mode(gpointer object, gboolean enable)
 {
        ps_modem_t *modem = object;
@@ -554,7 +527,7 @@ gboolean _ps_modem_processing_power_enable(gpointer object, int modem_state)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       dbg("modem->powered [%d], Modem->sim_init [%d], modem_state [%d]",
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem->powered [%d], Modem->sim_init [%d], modem_state [%d]",
                modem->powered, modem->sim_init, modem_state);
 
        if (modem->powered == modem_state)
@@ -570,7 +543,7 @@ gboolean _ps_modem_processing_power_enable(gpointer object, int modem_state)
                        if (contexts != NULL) {
                                GHashTableIter iter;
                                gpointer key, value;
-                               warn("[WARN] contexts exist, SIM init complete before Modem Power On event.");
+                               ps_warn_ex_co(_ps_modem_ref_co_modem(modem), "contexts exist, SIM init complete before Modem Power On event.");
                                g_hash_table_iter_init(&iter, modem->services);
                                while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
                                        _ps_service_set_number_of_pdn_cnt(value, modem->operator);
@@ -604,7 +577,7 @@ gboolean _ps_modem_processing_sim_complete(gpointer object, gboolean complete, g
                gboolean different_sim = FALSE;
 
                if (operator && (g_strcmp0(modem->operator, operator) != 0)) {
-                       ps_dbg_ex_co(co_modem, "Previous operator: [%s] Present operator: [%s]", modem->operator, operator);
+                       ps_info_ex_co(co_modem, "Previous operator: [%s] Present operator: [%s]", modem->operator, operator);
                        g_free(modem->operator);
 
                        modem->operator = g_strdup(operator);
@@ -651,7 +624,7 @@ gboolean _ps_modem_processing_sim_complete(gpointer object, gboolean complete, g
                                                _ps_service_set_attach_apn(value);
                                        }
                                } else {
-                                       ps_dbg_ex_co(co_modem, "Failed to create HASH table");
+                                       ps_err_ex_co(co_modem, "Failed to create HASH table");
                                        return FALSE;
                                }
                        }
@@ -664,13 +637,13 @@ gboolean _ps_modem_processing_sim_complete(gpointer object, gboolean complete, g
 
                        g_hash_table_iter_init(&iter, modem->services);
                        while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
-                               ps_dbg_ex_co(co_modem, "Remove contexts on service(%p)", value);
+                               ps_info_ex_co(co_modem, "Remove contexts on service(%p)", value);
                                _ps_service_remove_contexts(value);
                        }
                }
        }
 EXIT:
-       dbg("Exiting");
+       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Exiting");
        return TRUE;
 }
 
@@ -680,8 +653,11 @@ gboolean _ps_modem_set_reset_profile(gpointer object, gboolean value)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->reset_profile = value;
-       dbg("modem(%p) reset_profile(%d)", modem, modem->reset_profile);
+       if (modem->reset_profile != value) {
+               modem->reset_profile = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) reset_profile(%d)", modem, modem->reset_profile);
+       }
+
        return TRUE;
 }
 
@@ -691,7 +667,7 @@ gboolean _ps_modem_get_reset_profile(gpointer object)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       dbg("modem(%p) reset_profile(%d)", modem, modem->reset_profile);
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) reset_profile(%d)", modem, modem->reset_profile);
 
        return modem->reset_profile;
 }
@@ -736,8 +712,25 @@ gboolean _ps_modem_set_sim_enabled(gpointer object, gboolean value)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->sim_init = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) sim_enabled(%d)", modem, modem->sim_init);
+       if (modem->sim_init != value) {
+               modem->sim_init = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) sim_enabled(%d)", modem, modem->sim_init);
+       }
+       return TRUE;
+}
+
+gboolean _ps_modem_connect_default_context(gpointer object)
+{
+       ps_modem_t *modem = object;
+       GHashTableIter iter;
+       gpointer key, value;
+
+       g_return_val_if_fail(modem != NULL, FALSE);
+
+       g_hash_table_iter_init(&iter, modem->services);
+       while (g_hash_table_iter_next(&iter, &key, &value) == TRUE)
+               _ps_service_connect_default_context(value);
+
        return TRUE;
 }
 
@@ -747,10 +740,12 @@ gboolean _ps_modem_set_data_allowed(gpointer object, gboolean value)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->data_allowed = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) data allowed(%d)", modem, modem->data_allowed);
-       __ps_modem_emit_property_changed_signal(modem);
-       __ps_modem_processing_modem_event(modem);
+       if (modem->data_allowed != value)  {
+               modem->data_allowed = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) data allowed(%d)", modem, modem->data_allowed);
+               __ps_modem_emit_property_changed_signal(modem);
+               __ps_modem_processing_modem_event(modem);
+       }
 
        return TRUE;
 }
@@ -769,15 +764,17 @@ gboolean _ps_modem_set_data_roaming_allowed(gpointer object, gboolean roaming_al
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->roaming_allowed = roaming_allowed;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming allowed(%d)", modem, modem->roaming_allowed);
-       __ps_modem_emit_property_changed_signal(modem);
+       if (modem->roaming_allowed != roaming_allowed) {
+               modem->roaming_allowed = roaming_allowed;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming allowed(%d)", modem, modem->roaming_allowed);
+               __ps_modem_emit_property_changed_signal(modem);
 
-       if (!modem->services)
-               return TRUE;
+               if (!modem->services)
+                       return TRUE;
 
-       if (modem->roaming)
-               __ps_modem_processing_modem_event(modem);
+               if (modem->roaming)
+                       __ps_modem_processing_modem_event(modem);
+       }
 
        return TRUE;
 }
@@ -788,8 +785,10 @@ gboolean _ps_modem_set_psmode(gpointer object, gint value)
 
        g_return_val_if_fail(modem != NULL, FALSE);
 
-       modem->ps_mode = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) power saving mode(%d)", modem, modem->ps_mode);
+       if (modem->ps_mode != value) {
+               modem->ps_mode = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) power saving mode(%d)", modem, modem->ps_mode);
+       }
 
        return TRUE;
 }
@@ -807,10 +806,10 @@ void _ps_modem_set_roaming(gpointer object, gboolean value)
        ps_modem_t *modem = object;
        g_return_if_fail(modem != NULL);
 
-       modem->roaming = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming(%d)", modem, modem->roaming);
-
-       return;
+       if (modem->roaming != value) {
+               modem->roaming = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming(%d)", modem, modem->roaming);
+       }
 }
 
 gint _ps_modem_get_roaming_apn_support(gpointer object)
@@ -827,8 +826,10 @@ void _ps_modem_set_roaming_apn_support(gpointer object, gboolean value)
        ps_modem_t *modem = object;
        g_return_if_fail(modem != NULL);
 
-       modem->roaming_apn_support = value;
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming_apn_support(%d)", modem, modem->roaming);
+       if (modem->roaming_apn_support != value) {
+               modem->roaming_apn_support = value;
+               ps_info_ex_co(_ps_modem_ref_co_modem(modem), "modem(%p) roaming_apn_support(%d)", modem, modem->roaming);
+       }
 }
 
 gint _ps_modem_get_psmode(gpointer object)
@@ -840,6 +841,7 @@ gint _ps_modem_get_psmode(gpointer object)
        return modem->ps_mode;
 }
 
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
 guchar _ps_modem_get_hook_flag(gpointer object)
 {
        ps_modem_t *modem = object;
@@ -848,6 +850,7 @@ guchar _ps_modem_get_hook_flag(gpointer object)
 
        return modem->hook_flag;
 }
+#endif
 
 gboolean _ps_modem_get_data_roaming_allowed(gpointer object)
 {
@@ -865,25 +868,6 @@ gboolean _ps_modem_get_flght_mode(gpointer object)
        return modem->flight_mode;
 }
 
-void _ps_modem_set_flght_mode_ups(gpointer object, gboolean value)
-{
-       ps_modem_t *modem = object;
-       g_return_if_fail(modem != NULL);
-
-       modem->flight_mode_ups = value;
-       dbg("modem(%p) flight_mode_ups(%d)", modem, modem->flight_mode_ups);
-
-       return;
-}
-
-gboolean _ps_modem_get_flght_mode_ups(gpointer object)
-{
-       ps_modem_t *modem = object;
-       g_return_val_if_fail(modem != NULL, FALSE);
-
-       return modem->flight_mode_ups;
-}
-
 gboolean _ps_modem_get_sim_init(gpointer object)
 {
        ps_modem_t *modem = object;
@@ -930,10 +914,11 @@ gboolean _ps_modem_get_properties_handler(gpointer object, GVariantBuilder *prop
 {
        ps_modem_t *modem = object;
 
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "get modem properties");
        g_return_val_if_fail(modem != NULL, FALSE);
        g_return_val_if_fail(properties != NULL, FALSE);
 
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "get modem properties");
+
        g_variant_builder_open(properties, G_VARIANT_TYPE("a{ss}"));
        g_variant_builder_add(properties, "{ss}", "path", modem->path);
 
@@ -946,7 +931,7 @@ gboolean _ps_modem_get_properties_handler(gpointer object, GVariantBuilder *prop
        g_variant_builder_add(properties, "{ss}", "data_allowed", BOOL2STRING(modem->data_allowed));
        g_variant_builder_close(properties);
 
-       dbg("Exiting");
+       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Exiting");
        return TRUE;
 }
 
@@ -954,10 +939,11 @@ GVariant *_ps_modem_get_properties(gpointer object, GVariantBuilder *properties)
 {
        ps_modem_t *modem = object;
 
-       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "get modem properties");
        g_return_val_if_fail(modem != NULL, FALSE);
        g_return_val_if_fail(properties != NULL, FALSE);
 
+       ps_info_ex_co(_ps_modem_ref_co_modem(modem), "get modem properties");
+
        g_variant_builder_init(properties, G_VARIANT_TYPE("a{ss}"));
 
        g_variant_builder_add(properties, "{ss}", "path", modem->path);
@@ -970,10 +956,18 @@ GVariant *_ps_modem_get_properties(gpointer object, GVariantBuilder *properties)
        g_variant_builder_add(properties, "{ss}", "roaming_allowed", BOOL2STRING(modem->roaming_allowed));
        g_variant_builder_add(properties, "{ss}", "data_allowed", BOOL2STRING(modem->data_allowed));
 
-       dbg("Exiting");
+       ps_dbg_ex_co(_ps_modem_ref_co_modem(modem), "Exiting");
        return g_variant_builder_end(properties);
 }
 
+gpointer _ps_modem_ref_master(gpointer object)
+{
+       ps_modem_t *modem = object;
+       g_return_val_if_fail(modem != NULL, NULL);
+
+       return modem->p_master;
+}
+
 GHashTable *_ps_modem_ref_services(gpointer object)
 {
        ps_modem_t *modem = object;
@@ -1014,6 +1008,7 @@ gpointer _ps_modem_ref_co_modem(gpointer object)
        return modem->co_modem;
 }
 
+#ifdef TIZEN_SUPPORT_REQUEST_HOOK_PDP_CONTROL
 gpointer _ps_modem_ref_work_queue(gpointer object)
 {
        ps_modem_t *modem = object;
@@ -1021,6 +1016,7 @@ gpointer _ps_modem_ref_work_queue(gpointer object)
 
        return modem->work_queue;
 }
+#endif
 
 gchar *_ps_modem_ref_cp_name(gpointer object)
 {
@@ -1043,8 +1039,10 @@ static gboolean on_modem_get_properties(PacketServiceModem *obj_modem,
 {
        GVariant *gv = NULL;
        GVariantBuilder properties;
+       ps_modem_t *modem = user_data;
+       CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
 
-       dbg("get modem properties");
+       ps_info_ex_co(co_modem, "get modem properties");
 
        gv = _ps_modem_get_properties(user_data, &properties);
        packet_service_modem_complete_get_properties(obj_modem, invocation, gv);
@@ -1063,7 +1061,7 @@ static gboolean on_modem_get_services(PacketServiceModem *obj_modem,
        ps_modem_t *modem = user_data;
        CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
 
-       ps_dbg_ex_co(co_modem, "modem get service interface");
+       ps_info_ex_co(co_modem, "modem get service interface");
 
        if (modem->services == NULL) {
                FAIL_RESPONSE(invocation, PS_ERR_INTERNAL);
@@ -1078,7 +1076,7 @@ static gboolean on_modem_get_services(PacketServiceModem *obj_modem,
                g_variant_builder_open(&b_service, G_VARIANT_TYPE("{sa{ss}}"));
                path = _ps_service_ref_path(value);
                ps_dbg_ex_co(co_modem, "path added [%s]", path);
-               g_variant_builder_add(&b_service, "s", path);
+               g_variant_builder_add(&b_service, "s", g_strdup(path));
                if (FALSE == _ps_service_get_properties_handler(value, &b_service)) {
                        g_variant_builder_close(&b_service);
                        FAIL_RESPONSE(invocation, PS_ERR_INTERNAL);
@@ -1101,8 +1099,9 @@ static gboolean on_modem_go_dormant_all(PacketServiceModem *obj_modem,
        GHashTableIter iter;
        gpointer key, value;
        ps_modem_t *modem = user_data;
+       CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
 
-       dbg("modem go dormant all interface");
+       ps_info_ex_co(co_modem, "modem go dormant all interface");
 
        if (modem->services == NULL) {
                FAIL_RESPONSE(invocation, PS_ERR_INTERNAL);
@@ -1112,7 +1111,7 @@ static gboolean on_modem_go_dormant_all(PacketServiceModem *obj_modem,
        g_hash_table_iter_init(&iter, modem->services);
        while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
                ps_service_t *service = value;
-               dbg("service (%p), send dormant request, ", service);
+               ps_dbg_ex_co(co_modem, "service (%p), send dormant request, ", service);
                result = tcore_ps_send_dormant_request(service->co_ps, NULL);
        }
 
@@ -1131,7 +1130,7 @@ static gboolean on_modem_get_profile_list(PacketServiceModem *obj_modem,
        ps_modem_t *modem = user_data;
        CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
 
-       ps_dbg_ex_co(co_modem, "master get the profile list");
+       ps_info_ex_co(co_modem, "master get the profile list");
 
        if (modem->contexts == NULL) {
                ps_err_ex_co(co_modem, "no profiles");
@@ -1150,7 +1149,7 @@ static gboolean on_modem_get_profile_list(PacketServiceModem *obj_modem,
        }
 
        if (profiles == NULL) {
-               ps_dbg_ex_co(co_modem, "no profiles");
+               ps_warn_ex_co(co_modem, "no profiles");
                FAIL_RESPONSE(invocation, PS_ERR_NO_PROFILE);
                return TRUE;
        }
@@ -1174,7 +1173,7 @@ static gboolean on_modem_get_profile_list(PacketServiceModem *obj_modem,
 
        g_strfreev(strv);
        g_slist_free_full(profiles, g_free);
-       dbg("Exiting");
+       ps_dbg_ex_co(co_modem, "Exiting");
        return TRUE;
 }
 
@@ -1193,22 +1192,22 @@ static gboolean on_modem_add_profile(PacketServiceModem *obj_modem,
        CoreObject *co_modem = _ps_modem_ref_co_modem(modem);
        GHashTable *profile_property = NULL;
 
-       ps_dbg_ex_co(co_modem, "add profile request");
+       ps_info_ex_co(co_modem, "add profile request");
 
        operator = _ps_modem_ref_operator(modem);
 
        if (!operator) {
-               ps_dbg_ex_co(co_modem, "there is no active modem");
+               ps_warn_ex_co(co_modem, "there is no active modem");
                FAIL_RESPONSE(invocation, PS_ERR_INTERNAL);
                return TRUE;
        }
 
-       /*Create a hash table for the profile property as all fucntion already use ghash table */
+       /*Create a hash table for the profile property as all function already use ghash table */
        profile_property = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
        g_variant_iter_init(&g_iter, property);
        while (g_variant_iter_next(&g_iter, "{ss}", &g_key, &g_value)) {
 
-               ps_dbg_ex_co(co_modem, " '%s' value '%s'", g_key, g_value);
+               ps_info_ex_co(co_modem, " '%s' value '%s'", g_key, g_value);
                g_hash_table_insert(profile_property, g_strdup(g_key), g_strdup(g_value));
                /* must free data for ourselves */
                g_free(g_value);
@@ -1226,7 +1225,7 @@ static gboolean on_modem_add_profile(PacketServiceModem *obj_modem,
        packet_service_modem_complete_add_profile(obj_modem, invocation, TRUE);
 
        g_hash_table_destroy(profile_property);
-       dbg("Exiting");
+       ps_dbg_ex_co(co_modem, "Exiting");
        return TRUE;
 }
 
@@ -1242,11 +1241,35 @@ gboolean _ps_modem_initiate_reset_profile(gpointer value)
        co_modem = _ps_modem_ref_co_modem(modem);
 
        ps_dbg_ex_co(co_modem, "Reseting the hash table");
-       /* Remove contexts through only service. */
-       g_hash_table_iter_init(&iter, modem->services);
-       while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
-               ps_dbg_ex_co(co_modem, "Remove contexts on service(%p)", value);
-               _ps_service_remove_contexts(value);
+       if (modem->powered != PS_MODEM_STATE_ONLINE) {
+               gint index, count;
+               ps_context_t *pscontext;
+
+               count = g_slist_length(modem->contexts);
+               /* Remove contexts directly as there is no service */
+               for (index = 0; index < count; index++) {
+                       pscontext = g_slist_nth_data(modem->contexts, index);
+                       ps_warn_ex_co(co_modem, "Remove context(%p)", pscontext);
+                       _ps_context_remove_context(pscontext);
+               }
+               g_slist_free(modem->contexts);
+               modem->contexts = NULL;
+
+               g_hash_table_iter_init(&iter, modem->services);
+               while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+                       ps_service_t *service;
+                       service = (ps_service_t *)value;
+                       ps_warn_ex_co(co_modem, "Remove contexts on service(%p)", value);
+                       g_slist_free(service->contexts);
+                       service->contexts = NULL;
+               }
+       } else {
+               /* Remove contexts through only service. */
+               g_hash_table_iter_init(&iter, modem->services);
+               while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+                       ps_warn_ex_co(co_modem, "Remove contexts on service(%p)", value);
+                       _ps_service_remove_contexts(value);
+               }
        }
 
        if (modem->type == 0) {
@@ -1256,11 +1279,11 @@ gboolean _ps_modem_initiate_reset_profile(gpointer value)
                thread = g_thread_new(name, __ps_modem_regenerate_database, modem);
                g_free(name);
                if (thread == NULL) {
-                       dbg("Thread is not created");
+                       ps_err_ex_co(co_modem, "Thread is not created");
                        FAIL_RESPONSE(modem->invocation , PS_ERR_INTERNAL);
                        _ps_modem_remove_profile_reset_gsource(modem);
                } else {
-                       dbg("Thread(%p) is created", thread);
+                       ps_dbg_ex_co(co_modem, "Thread(%p) is created", thread);
                }
 
                return FALSE;
@@ -1296,7 +1319,7 @@ static gboolean on_modem_reset_profile(PacketServiceModem *obj_modem,
        CoreObject *co_ps;
        int state;
 
-       ps_dbg_ex_co(co_modem, "reset profile request type(%d)", type);
+       ps_info_ex_co(co_modem, "reset profile request type(%d)", type);
 
        if (_ps_modem_get_reset_profile(modem) == TRUE) {
                ps_err_ex_co(co_modem, "Reset Profile is already in Progress");
@@ -1316,18 +1339,17 @@ static gboolean on_modem_reset_profile(PacketServiceModem *obj_modem,
        contexts_active = tcore_ps_any_context_activating_activated(co_ps, &state);
 
        if (contexts_active == TRUE) {
-               ps_dbg_ex_co(co_modem, "Contexts are in [%d] state", state);
+               ps_info_ex_co(co_modem, "Contexts are in [%d] state", state);
                if (state == CONTEXT_STATE_ACTIVATED) {
                        ps_dbg_ex_co(co_modem, "Contexts are in Actived state. Sending Diconnect Notification to all connected contexts");
                        rv = tcore_ps_deactivate_contexts(co_ps);
                        if (rv != TCORE_RETURN_SUCCESS)
-                               ps_dbg_ex_co(co_modem, "fail to deactivation");
+                               ps_err_ex_co(co_modem, "fail to deactivation");
                } else if (state == CONTEXT_STATE_ACTIVATING) {
                        ps_dbg_ex_co(co_modem, "Contexts are in Activating state. Wait for them to connect");
                }
        } else {
-               ps_dbg_ex_co(co_modem, "No contexts are in activating or activated state");
-               ps_dbg_ex_co(co_modem, "Profiles reset is being initiated");
+               ps_info_ex_co(co_modem, "No contexts are in activating or activated state. Profiles reset is being initiated");
                _ps_modem_initiate_reset_profile(modem);
        }