---
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
[email protected]
http://lists.connman.net/listinfo/connman