profile: Ignore malformed profiles
[framework/connectivity/connman.git] / src / element.c
index 74383cc..40b1d7d 100644 (file)
@@ -56,18 +56,12 @@ static const char *type2string(enum connman_element_type type)
                return "network";
        case CONNMAN_ELEMENT_TYPE_SERVICE:
                return "service";
-       case CONNMAN_ELEMENT_TYPE_IPV4:
-               return "ipv4";
        case CONNMAN_ELEMENT_TYPE_IPV6:
                return "ipv6";
-       case CONNMAN_ELEMENT_TYPE_DHCP:
-               return "dhcp";
        case CONNMAN_ELEMENT_TYPE_BOOTP:
                return "bootp";
        case CONNMAN_ELEMENT_TYPE_ZEROCONF:
                return "zeroconf";
-       case CONNMAN_ELEMENT_TYPE_CONNECTION:
-               return "connection";
        case CONNMAN_ELEMENT_TYPE_VENDOR:
                return "vendor";
        }
@@ -196,8 +190,11 @@ struct connman_service *__connman_element_get_service(struct connman_element *el
        enum connman_device_type type;
 
        device = __connman_element_get_device(element);
-       if (device == NULL)
-               return NULL;
+       if (device == NULL) {
+               /* Workaround for the connection removal. */
+               service = __connman_service_lookup_from_index(element->index);
+               return service;
+       }
 
        type = connman_device_get_type(device);
 
@@ -205,6 +202,7 @@ struct connman_service *__connman_element_get_service(struct connman_element *el
        case CONNMAN_DEVICE_TYPE_UNKNOWN:
        case CONNMAN_DEVICE_TYPE_VENDOR:
        case CONNMAN_DEVICE_TYPE_GPS:
+       case CONNMAN_DEVICE_TYPE_GADGET:
                break;
        case CONNMAN_DEVICE_TYPE_ETHERNET:
        case CONNMAN_DEVICE_TYPE_WIFI:
@@ -233,29 +231,6 @@ struct connman_device *__connman_element_get_device(struct connman_element *elem
        return __connman_element_get_device(element->parent);
 }
 
-const char *__connman_element_get_device_path(struct connman_element *element)
-{
-       struct connman_device *device;
-
-       device = __connman_element_get_device(element);
-       if (device == NULL)
-               return NULL;
-
-       return connman_device_get_path(device);
-}
-
-const char *__connman_element_get_network_path(struct connman_element *element)
-{
-       if (element->type == CONNMAN_ELEMENT_TYPE_NETWORK &&
-                                               element->network != NULL)
-               return element->path;
-
-       if (element->parent == NULL)
-               return NULL;
-
-       return __connman_element_get_network_path(element->parent);
-}
-
 struct find_data {
        enum connman_service_type type;
        struct connman_device *device;
@@ -313,6 +288,7 @@ static gboolean request_scan(GNode *node, gpointer user_data)
        case CONNMAN_SERVICE_TYPE_CELLULAR:
        case CONNMAN_SERVICE_TYPE_GPS:
        case CONNMAN_SERVICE_TYPE_VPN:
+       case CONNMAN_SERVICE_TYPE_GADGET:
                return FALSE;
        case CONNMAN_SERVICE_TYPE_WIFI:
        case CONNMAN_SERVICE_TYPE_WIMAX:
@@ -357,6 +333,7 @@ static gboolean enable_technology(GNode *node, gpointer user_data)
        case CONNMAN_SERVICE_TYPE_SYSTEM:
        case CONNMAN_SERVICE_TYPE_GPS:
        case CONNMAN_SERVICE_TYPE_VPN:
+       case CONNMAN_SERVICE_TYPE_GADGET:
                return FALSE;
        case CONNMAN_SERVICE_TYPE_ETHERNET:
        case CONNMAN_SERVICE_TYPE_WIFI:
@@ -409,6 +386,7 @@ static gboolean disable_technology(GNode *node, gpointer user_data)
        case CONNMAN_SERVICE_TYPE_SYSTEM:
        case CONNMAN_SERVICE_TYPE_GPS:
        case CONNMAN_SERVICE_TYPE_VPN:
+       case CONNMAN_SERVICE_TYPE_GADGET:
                return FALSE;
        case CONNMAN_SERVICE_TYPE_ETHERNET:
        case CONNMAN_SERVICE_TYPE_WIFI:
@@ -616,6 +594,8 @@ struct connman_element *connman_element_create(const char *name)
 
        __connman_element_initialize(element);
 
+       element->name = g_strdup(name);
+
        return element;
 }
 
@@ -657,14 +637,6 @@ void connman_element_unref(struct connman_element *element)
                free_properties(element);
                g_free(element->hostname);
                g_free(element->domainname);
-               g_free(element->ipv4.address);
-               g_free(element->ipv4.netmask);
-               g_free(element->ipv4.gateway);
-               g_free(element->ipv4.network);
-               g_free(element->ipv4.broadcast);
-               g_free(element->ipv4.nameserver);
-               g_free(element->ipv4.timeserver);
-               g_free(element->ipv4.pac);
                g_free(element->ipv6.address);
                g_free(element->ipv6.network);
                g_free(element->devname);
@@ -765,54 +737,6 @@ int connman_element_get_value(struct connman_element *element,
                                                                id, value);
                *((char **) value) = element->domainname;
                break;
-       case CONNMAN_PROPERTY_ID_IPV4_METHOD:
-               if (element->ipv4.method == CONNMAN_IPCONFIG_METHOD_UNKNOWN)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((const char **) value) = __connman_ipconfig_method2string(element->ipv4.method);
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_ADDRESS:
-               if (element->ipv4.address == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.address;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_NETMASK:
-               if (element->ipv4.netmask == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.netmask;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_GATEWAY:
-               if (element->ipv4.gateway == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.gateway;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_BROADCAST:
-               if (element->ipv4.broadcast == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.broadcast;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_NAMESERVER:
-               if (element->ipv4.nameserver == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.nameserver;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_TIMESERVER:
-               if (element->ipv4.timeserver == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.timeserver;
-               break;
-       case CONNMAN_PROPERTY_ID_IPV4_PAC:
-               if (element->ipv4.pac == NULL)
-                       return connman_element_get_value(element->parent,
-                                                               id, value);
-               *((char **) value) = element->ipv4.pac;
-               break;
        case CONNMAN_PROPERTY_ID_IPV6_GATEWAY:
                if (element->ipv6.gateway == NULL)
                        return connman_element_get_value(element->parent,
@@ -1124,9 +1048,6 @@ setup:
                }
        }
 
-       if (element->type == CONNMAN_ELEMENT_TYPE_DHCP)
-               element->ipv4.method = CONNMAN_IPCONFIG_METHOD_DHCP;
-
        element->parent = parent;
 
        register_element(element, NULL);
@@ -1322,6 +1243,28 @@ void connman_element_set_error(struct connman_element *element,
        __connman_service_indicate_error(service, convert_error(error));
 }
 
+void __connman_element_set_driver(struct connman_element *element)
+{
+       GSList *list;
+
+       DBG("element %p name %s driver %p", element, element->name,
+                                               element->driver);
+
+       if (element->driver)
+               return;
+
+       for (list = driver_list; list; list = list->next) {
+               struct connman_driver *driver = list->data;
+
+               if (match_driver(element, driver) == FALSE)
+                       continue;
+
+               element->driver = driver;
+
+               break;
+       }
+}
+
 int __connman_element_init(const char *device, const char *nodevice)
 {
        struct connman_element *element;
@@ -1386,10 +1329,9 @@ void __connman_element_start(void)
 
        __connman_rtnl_start();
 
-       __connman_connection_init();
-       __connman_ipv4_init();
        __connman_dhcp_init();
        __connman_wpad_init();
+       __connman_wispr_init();
 
        __connman_rfkill_init();
 }
@@ -1400,11 +1342,10 @@ void __connman_element_stop(void)
 
        __connman_rfkill_cleanup();
 
+       __connman_wispr_cleanup();
        __connman_wpad_cleanup();
        __connman_dhcp_cleanup();
-       __connman_ipv4_cleanup();
        __connman_provider_cleanup();
-       __connman_connection_cleanup();
 }
 
 static gboolean free_driver(GNode *node, gpointer data)
@@ -1452,6 +1393,8 @@ void __connman_element_cleanup(void)
        g_node_traverse(element_root, G_POST_ORDER, G_TRAVERSE_ALL, -1,
                                                        free_node, NULL);
 
+       connman_element_unref(element_root->data);
+
        g_node_destroy(element_root);
        element_root = NULL;