- if (provider->host != NULL)
- connman_dbus_dict_append_basic(iter, "Host",
- DBUS_TYPE_STRING, &provider->host);
-
- if (provider->domain != NULL)
- connman_dbus_dict_append_basic(iter, "Domain",
- DBUS_TYPE_STRING, &provider->domain);
-
- if (provider->type != NULL)
- connman_dbus_dict_append_basic(iter, "Type", DBUS_TYPE_STRING,
- &provider->type);
-}
-
-int __connman_provider_append_user_route(struct connman_provider *provider,
- int family, const char *network, const char *netmask)
-{
- struct connman_route *route;
- char *key = g_strdup_printf("%d/%s/%s", family, network, netmask);
-
- DBG("family %d network %s netmask %s", family, network, netmask);
-
- route = g_hash_table_lookup(provider->user_routes, key);
- if (route == NULL) {
- route = g_try_new0(struct connman_route, 1);
- if (route == NULL) {
- connman_error("out of memory");
- return -ENOMEM;
- }
-
- route->family = family;
- route->host = g_strdup(network);
- route->netmask = g_strdup(netmask);
-
- g_hash_table_replace(provider->user_routes, key, route);
- } else
- g_free(key);
-
- return 0;
-}
-
-static void set_user_networks(struct connman_provider *provider,
- char **networks)
-{
- int i = 0;
-
- while (networks[i] != NULL) {
- char **elems = g_strsplit(networks[i], "/", 0);
- char *network, *netmask = NULL;
- int family = PF_UNSPEC, ret;
-
- if (elems == NULL)
- break;
-
- network = elems[0];
- if (elems[1] != NULL)
- netmask = elems[1];
-
- if (g_strrstr(network, ":") != NULL)
- family = AF_INET6;
- else if (g_strrstr(network, ".") != NULL) {
- family = AF_INET;
-
- if (g_strrstr(netmask, ".") == NULL) {
- /* We have netmask length */
- in_addr_t addr;
- struct in_addr netmask_in;
- unsigned char prefix_len = atoi(netmask);
-
- addr = 0xffffffff << (32 - prefix_len);
- netmask_in.s_addr = htonl(addr);
- netmask = inet_ntoa(netmask_in);
-
- DBG("network %s netmask %s", network, netmask);
- }
- }
-
- ret = __connman_provider_append_user_route(provider,
- family, network, netmask);
- g_strfreev(elems);
-
- if (ret != 0)
- break;
-
- i++;
- }
-}
-
-static int provider_load_from_keyfile(struct connman_provider *provider,
- GKeyFile *keyfile)
-{
- gsize idx = 0;
- gchar **settings;
- gchar *key, *value;
- gsize length;
-
- settings = g_key_file_get_keys(keyfile, provider->identifier, &length,
- NULL);
- if (settings == NULL) {
- g_key_file_free(keyfile);
- return -ENOENT;
- }
-
- while (idx < length) {
- key = settings[idx];
- if (key != NULL) {
- if (g_str_equal(key, "Networks") == TRUE) {
- g_strfreev(provider->user_networks);
- provider->user_networks =
- g_key_file_get_string_list(keyfile,
- provider->identifier,
- key,
- &provider->num_user_networks,
- NULL);
- } else {
- value = g_key_file_get_string(keyfile,
- provider->identifier,
- key, NULL);
- connman_provider_set_string(provider, key,
- value);
- g_free(value);
- }
- }
- idx += 1;
- }
- g_strfreev(settings);
-
- if (provider->user_networks != NULL)
- set_user_networks(provider, provider->user_networks);
-
- return 0;
-}
-
-static int connman_provider_load(struct connman_provider *provider)
-{
- GKeyFile *keyfile;
-
- DBG("provider %p", provider);