Fix derefrencing of NULL pointer
[platform/upstream/connman.git] / src / service.c
index b130888..dd4f191 100755 (executable)
@@ -860,6 +860,9 @@ static int service_ext_load(struct connman_service *service)
        int i;
        int err = 0;
 
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        if (!service->network)
@@ -1036,7 +1039,9 @@ static int service_load(struct connman_service *service)
 #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
        bool use_eapol;
 #endif
-
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        keyfile = connman_storage_load_service(service->identifier);
@@ -2964,6 +2969,31 @@ static void default_changed(void)
        __connman_notifier_default_changed(service);
 }
 
+#if defined TIZEN_EXT
+static void append_struct(gpointer value, gpointer user_data);
+
+static void emit_state_changed_with_properties(struct connman_service *service)
+{
+       DBusMessage *signal;
+       DBusMessageIter iter;
+
+       if (!service)
+               return;
+
+       signal = dbus_message_new_signal(service->path, CONNMAN_SERVICE_INTERFACE,
+                       "StateChangedProperties");
+       if (!signal)
+               return;
+
+       dbus_message_iter_init_append(signal, &iter);
+       append_struct(service, &iter);
+
+       g_dbus_send_message(connection, signal);
+
+       return;
+}
+#endif
+
 static void state_changed(struct connman_service *service)
 {
        const char *str;
@@ -2977,14 +3007,17 @@ static void state_changed(struct connman_service *service)
 #if !defined TIZEN_EXT
        if (!allow_property_changed(service))
                return;
-
-#endif
-#if defined TIZEN_EXT
+#else
        DBG(" %s, %s", str, service->path);
 #endif
+
        connman_dbus_property_changed_basic(service->path,
                                CONNMAN_SERVICE_INTERFACE, "State",
                                                DBUS_TYPE_STRING, &str);
+
+#if defined TIZEN_EXT
+       emit_state_changed_with_properties(service);
+#endif
 }
 
 #if defined TIZEN_EXT
@@ -4381,8 +4414,9 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "AssocStatusCode",
                                DBUS_TYPE_INT32, &service->assoc_status_code);
 
+               val = service->hidden_service;
                connman_dbus_dict_append_basic(dict, "Hidden",
-                               DBUS_TYPE_BOOLEAN, &service->hidden_service);
+                               DBUS_TYPE_BOOLEAN, &val);
 
                break;
 #endif
@@ -4390,7 +4424,7 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
 #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
                connman_dbus_dict_append_dict(dict, "EapOverEthernet",
                                                append_eap_over_ethernet, service);
-
+               /* fall through */
 #endif /* defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET */
        case CONNMAN_SERVICE_TYPE_BLUETOOTH:
        case CONNMAN_SERVICE_TYPE_GADGET:
@@ -6258,6 +6292,9 @@ static void preferred_tech_add_by_type(gpointer data, gpointer user_data)
                tech_data->preferred_list =
                        g_list_append(tech_data->preferred_list, service);
 
+#if defined TIZEN_EXT
+               if (!simplified_log)
+#endif
                DBG("type %d service %p %s", tech_data->type, service,
                                service->name);
        }
@@ -6356,7 +6393,7 @@ static bool auto_connect_service(GList *services,
        bool autoconnecting = false;
        GList *list;
 #if defined TIZEN_EXT
-       GList *wifi_ignore = NULL;
+       GSList *wifi_ignore = NULL;
 #endif
 
        DBG("preferred %d sessions %d reason %s", preferred, active_count,
@@ -6464,6 +6501,13 @@ static bool auto_connect_service(GList *services,
                if (autoconnect_no_session_active(service))
                        return true;
 #endif
+#if defined TIZEN_EXT
+               if (service->type == CONNMAN_SERVICE_TYPE_WIFI) {
+                       int index = connman_network_get_index(service->network);
+                       wifi_ignore = g_slist_prepend(wifi_ignore, GINT_TO_POINTER(index));
+                       autoconnecting = true;
+               }
+#endif
                ignore[service->type] = true;
        }
 #if defined TIZEN_EXT
@@ -7052,6 +7096,9 @@ static void service_append_added_foreach(gpointer data, gpointer user_data)
                append_struct(service, iter);
                g_hash_table_remove(services_notify->add, service->path);
        } else {
+#if defined TIZEN_EXT
+               if (!simplified_log)
+#endif
                DBG("changed %s", service->path);
 
                append_struct_service(iter, NULL, service);
@@ -7260,6 +7307,9 @@ static DBusMessage *downgrade_service(DBusConnection *conn,
 
 static void service_schedule_added(struct connman_service *service)
 {
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        g_hash_table_remove(services_notify->remove, service->path);
@@ -7328,6 +7378,10 @@ static const GDBusMethodTable service_methods[] = {
 static const GDBusSignalTable service_signals[] = {
        { GDBUS_SIGNAL("PropertyChanged",
                        GDBUS_ARGS({ "name", "s" }, { "value", "v" })) },
+#if defined TIZEN_EXT
+       { GDBUS_SIGNAL("StateChangedProperties",
+                       GDBUS_ARGS({ "properties", "a{sv}" })) },
+#endif
        { },
 };
 
@@ -7453,6 +7507,9 @@ static void stats_init(struct connman_service *service)
 
 static void service_initialize(struct connman_service *service)
 {
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        service->refcount = 1;
@@ -7600,6 +7657,9 @@ static int calculate_score_last_user_selection(struct connman_service *service)
        struct tm* ref_timeinfo;
 
        device = connman_network_get_device(service->network);
+       if (!device)
+               return 0;
+
        last_user_selection_time = connman_device_get_last_user_selection_time(device);
        last_user_selection_ident = connman_device_get_last_user_selection_ident(device);
        frequency = connman_network_get_frequency(service->network);
@@ -8727,6 +8787,14 @@ static int service_indicate_state(struct connman_service *service)
                searchdomain_remove_all(service);
 
        service->state = new_state;
+#if defined TIZEN_EXT
+       if (!is_connected(old_state) && is_connected(new_state))
+               connman_device_send_connected_signal(
+                               connman_network_get_device(service->network), true);
+       else if (is_connected(old_state) && !is_connected(new_state))
+               connman_device_send_connected_signal(
+                               connman_network_get_device(service->network), false);
+#endif
        state_changed(service);
 
        if (!is_connected(old_state) && is_connected(new_state))
@@ -8831,10 +8899,6 @@ static int service_indicate_state(struct connman_service *service)
 #if defined TIZEN_EXT
                if (service->type == CONNMAN_SERVICE_TYPE_WIFI)
                        set_priority_connected_service();
-
-               if (!is_connected(old_state))
-                       connman_device_send_connected_signal(
-                                       connman_network_get_device(service->network), true);
 #endif
 
                break;
@@ -8926,10 +8990,6 @@ static int service_indicate_state(struct connman_service *service)
                (old_state == CONNMAN_SERVICE_STATE_READY &&
                        new_state != CONNMAN_SERVICE_STATE_ONLINE)) {
                __connman_notifier_disconnect(service->type);
-#if defined TIZEN_EXT
-               connman_device_send_connected_signal(
-                               connman_network_get_device(service->network), false);
-#endif
        }
 
        if (new_state == CONNMAN_SERVICE_STATE_ONLINE) {
@@ -9959,7 +10019,9 @@ static struct connman_service *service_get(const char *identifier)
        service = connman_service_create();
        if (!service)
                return NULL;
-
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        service->identifier = g_strdup(identifier);
@@ -9974,6 +10036,9 @@ static struct connman_service *service_get(const char *identifier)
 
 static int service_register(struct connman_service *service)
 {
+#if defined TIZEN_EXT
+       if (!simplified_log)
+#endif
        DBG("service %p", service);
 
        if (service->path)
@@ -9991,7 +10056,7 @@ static int service_register(struct connman_service *service)
        if (ret == -ERANGE)
                service_ext_save(service);
        ret = __connman_config_provision_service(service);
-       if (ret < 0)
+       if (ret < 0 && !simplified_log)
                DBG("Failed to provision service");
 #else
        if (__connman_config_provision_service(service) < 0)
@@ -10607,7 +10672,8 @@ void __connman_service_notify_strength_changed(struct connman_network *network)
                return;
 
        service->strength = strength;
-       DBG("Strength %d", strength);
+       if (!simplified_log)
+               DBG("Strength %d", strength);
        strength_changed(service);
        service_list_sort();
 }