--- src/service.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/service.c b/src/service.c index bde767f..b812dfc 100644 --- a/src/service.c +++ b/src/service.c @@ -103,6 +103,7 @@ struct connman_service { enum connman_service_proxy proxy; char **proxies; char **excludes; + char *pac; }; static void append_path(gpointer value, gpointer user_data) @@ -904,9 +905,12 @@ static void append_proxy(DBusMessageIter *iter, void *user_data) DBUS_TYPE_STRING, append_excludes, service); break; + case CONNMAN_SERVICE_PROXY_AUTO: + pac = service->pac; case CONNMAN_SERVICE_PROXY_AUTO_CONFIG: - connman_dbus_dict_append_basic(iter, "URL", DBUS_TYPE_STRING, - &pac); + if (pac != NULL) + connman_dbus_dict_append_basic(iter, "URL", + DBUS_TYPE_STRING, &pac); break; default: goto done; @@ -938,6 +942,11 @@ static void append_proxyconfig(DBusMessageIter *iter, void *user_data) DBUS_TYPE_STRING, append_excludes, service); break; + case CONNMAN_SERVICE_PROXY_AUTO: + if (service->pac != NULL) + connman_dbus_dict_append_basic(iter, "URL", + DBUS_TYPE_STRING, &service->pac); + break; default: goto done; } @@ -1603,6 +1612,7 @@ static int update_proxy_configuration(struct connman_service *service, enum connman_service_proxy method; GString *servers_str = NULL; GString *excludes_str = NULL; + const char *url = NULL; method = CONNMAN_SERVICE_PROXY_UNKNOWN; @@ -1637,6 +1647,12 @@ static int update_proxy_configuration(struct connman_service *service, dbus_message_iter_get_basic(&variant, &val); method = string2proxymethod(val); + } else if (g_str_equal(key, "URL") == TRUE) { + if (type != DBUS_TYPE_STRING) + return update_proxy_cleanup(servers_str, + excludes_str); + + dbus_message_iter_get_basic(&variant, &url); } else if (g_str_equal(key, "Servers") == TRUE) { DBusMessageIter str_array; @@ -1729,6 +1745,18 @@ static int update_proxy_configuration(struct connman_service *service, method = CONNMAN_SERVICE_PROXY_DIRECT; break; + case CONNMAN_SERVICE_PROXY_AUTO: + g_free(service->pac); + + if (url != NULL && strlen(url) > 0) + service->pac = g_strdup(url); + else + service->pac = NULL; + + /* If service->pac == NULL and if we are connected, we should + start WPAD */ + + break; default: return update_proxy_cleanup(servers_str, excludes_str); } @@ -2528,6 +2556,7 @@ static void service_free(gpointer user_data) g_free(service->nameserver); g_free(service->domainname); + g_free(service->pac); g_free(service->mcc); g_free(service->mnc); g_free(service->apn); @@ -4298,6 +4327,13 @@ static int service_load(struct connman_service *service) service->excludes = NULL; } + str = g_key_file_get_string(keyfile, + service->identifier, "Proxy.URL", NULL); + if (str != NULL) { + g_free(service->pac); + service->pac = str; + } + done: g_key_file_free(keyfile); @@ -4488,6 +4524,13 @@ update: g_key_file_remove_key(keyfile, service->identifier, "Proxy.Excludes", NULL); + if (service->pac != NULL && strlen(service->pac) > 0) + g_key_file_set_string(keyfile, service->identifier, + "Proxy.URL", service->pac); + else + g_key_file_remove_key(keyfile, service->identifier, + "Proxy.URL", NULL); + data = g_key_file_to_data(keyfile, &length, NULL); if (g_file_set_contents(pathname, data, length, NULL) == FALSE) -- 1.7.1 _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman