Fix signals for connected and default technologies
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Jul 2009 19:50:58 +0000 (21:50 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 23 Jul 2009 19:50:58 +0000 (21:50 +0200)
src/connection.c
src/device.c
src/service.c

index 7c81c0d..f722cc3 100644 (file)
@@ -538,9 +538,11 @@ static int connection_probe(struct connman_element *element)
 
        if (register_interface(element) < 0)
                return -ENODEV;
+
        service = __connman_element_get_service(element);
        __connman_service_indicate_state(service,
                                        CONNMAN_SERVICE_STATE_READY);
+
        connman_element_set_enabled(element, TRUE);
        emit_default_signal(element);
 
index 53ff6f4..13105a1 100644 (file)
@@ -255,16 +255,11 @@ static int set_connected(struct connman_device *device,
 
 static int set_carrier(struct connman_device *device, connman_bool_t carrier)
 {
-       struct connman_service *service;
-
        if (carrier == TRUE)
                __connman_profile_add_device(device);
        else
                __connman_profile_remove_device(device);
 
-       service = __connman_service_lookup_from_device(device);
-       __connman_service_set_carrier(service, carrier);
-
        return set_connected(device, carrier);
 }
 
@@ -1629,22 +1624,12 @@ int __connman_device_set_offlinemode(connman_bool_t offlinemode)
 
 void __connman_device_increase_connections(struct connman_device *device)
 {
-       enum connman_service_type type;
-
        device->connections++;
-
-       type = __connman_device_get_service_type(device);
-       __connman_notifier_connect(type);
 }
 
 void __connman_device_decrease_connections(struct connman_device *device)
 {
-       enum connman_service_type type;
-
        device->connections--;
-
-       type = __connman_device_get_service_type(device);
-       __connman_notifier_disconnect(type);
 }
 
 /**
index d515771..b871b66 100644 (file)
@@ -950,39 +950,6 @@ int connman_service_set_favorite(struct connman_service *service,
        return 0;
 }
 
-int __connman_service_set_carrier(struct connman_service *service,
-                                               connman_bool_t carrier)
-{
-       DBG("service %p carrier %d", service, carrier);
-
-       if (service == NULL)
-               return -EINVAL;
-
-       switch (service->type) {
-       case CONNMAN_SERVICE_TYPE_UNKNOWN:
-       case CONNMAN_SERVICE_TYPE_WIFI:
-       case CONNMAN_SERVICE_TYPE_WIMAX:
-       case CONNMAN_SERVICE_TYPE_BLUETOOTH:
-       case CONNMAN_SERVICE_TYPE_CELLULAR:
-               return -EINVAL;
-       case CONNMAN_SERVICE_TYPE_ETHERNET:
-               break;
-       }
-
-       if (carrier == FALSE) {
-               service->state = CONNMAN_SERVICE_STATE_DISCONNECT;
-               state_changed(service);
-
-               service->state = CONNMAN_SERVICE_STATE_IDLE;
-               state_changed(service);
-       } else {
-               service->state = CONNMAN_SERVICE_STATE_CARRIER;
-               state_changed(service);
-       }
-
-       return connman_service_set_favorite(service, carrier);
-}
-
 static void default_changed(void)
 {
        DBusMessage *signal;
@@ -1017,15 +984,9 @@ int __connman_service_indicate_state(struct connman_service *service,
        if (service == NULL)
                return -EINVAL;
 
-       if (state == CONNMAN_SERVICE_STATE_CARRIER)
-               return __connman_service_set_carrier(service, TRUE);
-
        if (service->state == state)
                return -EALREADY;
 
-       if (service->state == CONNMAN_SERVICE_STATE_READY)
-               default_changed();
-
        if (service->state == CONNMAN_SERVICE_STATE_FAILURE &&
                                state == CONNMAN_SERVICE_STATE_IDLE)
                return -EINVAL;
@@ -1052,6 +1013,14 @@ int __connman_service_indicate_state(struct connman_service *service,
 
                g_get_current_time(&service->modified);
                __connman_storage_save_service(service);
+
+               __connman_notifier_connect(service->type);
+
+               default_changed();
+       } else if (state == CONNMAN_SERVICE_STATE_DISCONNECT) {
+               default_changed();
+
+               __connman_notifier_disconnect(service->type);
        }
 
        if (state == CONNMAN_SERVICE_STATE_FAILURE) {
@@ -1533,18 +1502,21 @@ struct connman_service *__connman_service_create_from_device(struct connman_devi
 void __connman_service_remove_from_device(struct connman_device *device)
 {
        struct connman_service *service;
-       connman_bool_t favorite;
+       enum connman_service_type type;
 
        service = __connman_service_lookup_from_device(device);
        if (service == NULL)
                return;
 
-       favorite = service->favorite;
+       type = service->type;
 
        __connman_service_put(service);
 
-       if (favorite == TRUE)
-               __connman_service_auto_connect();
+       default_changed();
+
+       __connman_notifier_disconnect(type);
+
+       __connman_service_auto_connect();
 }
 
 /**