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);
}
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);
}
/**
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;
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;
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) {
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();
}
/**