static int connection_probe(struct connman_element *element)
{
+ struct connman_service *service;
const char *gateway = NULL;
DBG("element %p name %s", element, element->name);
if (register_interface(element) < 0)
return -ENODEV;
+ service = __connman_element_get_service(element);
+ __connman_service_ready(service);
+
if (gateway == NULL)
return 0;
static void connection_remove(struct connman_element *element)
{
+ struct connman_service *service;
const char *gateway = NULL;
DBG("element %p name %s", element, element->name);
+ service = __connman_element_get_service(element);
+ __connman_service_disconnect(service);
+
unregister_interface(element);
connman_element_get_value(element,
int __connman_element_count(struct connman_element *element,
enum connman_element_type type);
+struct connman_service *__connman_element_get_service(struct connman_element *element);
struct connman_device *__connman_element_get_device(struct connman_element *element);
const char *__connman_element_get_device_path(struct connman_element *element);
const char *__connman_element_get_network_path(struct connman_element *element);
int __connman_service_set_carrier(struct connman_service *service,
connman_bool_t carrier);
int __connman_service_indicate_configuration(struct connman_service *service);
+int __connman_service_ready(struct connman_service *service);
+int __connman_service_disconnect(struct connman_service *service);
#include <connman/notifier.h>
return data.count;
}
+struct connman_service *__connman_element_get_service(struct connman_element *element)
+{
+ struct connman_service *service;
+ struct connman_device *device;
+ enum connman_device_type type;
+
+ device = __connman_element_get_device(element);
+ if (device == NULL)
+ return NULL;
+
+ type = connman_device_get_type(device);
+
+ switch (type) {
+ case CONNMAN_DEVICE_TYPE_UNKNOWN:
+ case CONNMAN_DEVICE_TYPE_VENDOR:
+ case CONNMAN_DEVICE_TYPE_WIFI:
+ case CONNMAN_DEVICE_TYPE_WIMAX:
+ case CONNMAN_DEVICE_TYPE_BLUETOOTH:
+ case CONNMAN_DEVICE_TYPE_GPS:
+ case CONNMAN_DEVICE_TYPE_HSO:
+ case CONNMAN_DEVICE_TYPE_NOZOMI:
+ case CONNMAN_DEVICE_TYPE_HUAWEI:
+ case CONNMAN_DEVICE_TYPE_NOVATEL:
+ return NULL;
+ case CONNMAN_DEVICE_TYPE_ETHERNET:
+ service = __connman_service_lookup_from_device(device);
+ break;
+ }
+
+ return service;
+}
+
struct connman_device *__connman_element_get_device(struct connman_element *element)
{
if (element->type == CONNMAN_ELEMENT_TYPE_DEVICE &&
return 0;
}
+int __connman_service_ready(struct connman_service *service)
+{
+ if (service == NULL)
+ return -EINVAL;
+
+ service->state = CONNMAN_SERVICE_STATE_READY;
+
+ state_changed(service);
+
+ return 0;
+}
+
+int __connman_service_disconnect(struct connman_service *service)
+{
+ if (service == NULL)
+ return -EINVAL;
+
+ service->state = CONNMAN_SERVICE_STATE_DISCONNECT;
+
+ state_changed(service);
+
+ return 0;
+}
+
/**
* connman_service_lookup:
* @identifier: service identifier