Refactor set_property's Proxy.Configuration to a separate function.
---
src/connman.h | 3 ++
src/service.c | 169 +++++++++++++++++++++++++++++-----------------------------
2 files changed, 88 insertions(+), 84 deletions(-)
diff --git a/src/connman.h b/src/connman.h
index 914c623..eb83d8a 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -767,6 +767,9 @@ bool __connman_service_set_timeservers_conf(struct
connman_service *service,
char **nameservers);
bool __connman_service_set_domains_conf(struct connman_service *service,
char **domains);
+bool __connman_service_set_proxy_conf(struct connman_service *service,
+ enum connman_service_proxy_method method,
+ char *url, char **servers, char **excludes);
void __connman_service_set_hidden(struct connman_service *service);
void __connman_service_set_hostname(struct connman_service *service,
const char *hostname);
diff --git a/src/service.c b/src/service.c
index 7929113..e9107c2 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2589,6 +2589,72 @@ bool __connman_service_set_domains_conf(struct
connman_service *service,
return true;
}
+bool __connman_service_set_proxy_conf(struct connman_service *service,
+ enum connman_service_proxy_method method,
+ char *url, char **servers, char **excludes)
+{
+ switch (method) {
+ case CONNMAN_SERVICE_PROXY_METHOD_DIRECT:
+ break;
+ case CONNMAN_SERVICE_PROXY_METHOD_MANUAL:
+ if (!servers)
+ goto error;
+
+ g_strfreev(service->proxies);
+ servers = remove_empty_strings(servers);
+ service->proxies = servers;
+
+ g_strfreev(service->excludes);
+ service->excludes = NULL;
+
+ if (excludes) {
+ excludes = remove_empty_strings(excludes);
+ service->excludes = excludes;
+ }
+
+ break;
+ case CONNMAN_SERVICE_PROXY_METHOD_AUTO:
+ g_free(service->pac);
+
+ if (url && strlen(url) > 0)
+ service->pac = g_strstrip(g_strdup(url));
+ else
+ service->pac = NULL;
+
+ /* if we are connected:
+ - if service->pac == NULL
+ - if __connman_ipconfig_get_proxy_autoconfig(
+ service->ipconfig) == NULL
+ --> We should start WPAD */
+
+ break;
+ case CONNMAN_SERVICE_PROXY_METHOD_UNKNOWN:
+ goto error;
+ }
+
+ g_free(url);
+
+ if (method != CONNMAN_SERVICE_PROXY_METHOD_MANUAL) {
+ g_strfreev(servers);
+ g_strfreev(excludes);
+ }
+
+ service->proxy_config = method;
+ proxy_configuration_changed(service);
+ __connman_notifier_proxy_changed(service);
+
+ service_save(service);
+
+ return true;
+
+error:
+ g_free(url);
+ g_strfreev(servers);
+ g_strfreev(excludes);
+
+ return false;
+}
+
void __connman_service_set_hidden(struct connman_service *service)
{
if (!service || service->hidden)
@@ -3065,6 +3131,8 @@ static int update_proxy_configuration(struct
connman_service *service,
enum connman_service_proxy_method method;
GString *servers_str = NULL;
GString *excludes_str = NULL;
+ char **servers = NULL;
+ char **excludes = NULL;
const char *url = NULL;
method = CONNMAN_SERVICE_PROXY_METHOD_UNKNOWN;
@@ -3079,13 +3147,13 @@ static int update_proxy_configuration(struct
connman_service *service,
dbus_message_iter_recurse(&dict, &entry);
if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_STRING)
- goto error;
+ return -EINVAL;
dbus_message_iter_get_basic(&entry, &key);
dbus_message_iter_next(&entry);
if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_VARIANT)
- goto error;
+ return -EINVAL;
dbus_message_iter_recurse(&entry, &variant);
@@ -3095,24 +3163,24 @@ static int update_proxy_configuration(struct
connman_service *service,
const char *val;
if (type != DBUS_TYPE_STRING)
- goto error;
+ return -EINVAL;
dbus_message_iter_get_basic(&variant, &val);
method = string2proxymethod(val);
} else if (g_str_equal(key, "URL")) {
if (type != DBUS_TYPE_STRING)
- goto error;
+ return -EINVAL;
dbus_message_iter_get_basic(&variant, &url);
} else if (g_str_equal(key, "Servers")) {
DBusMessageIter str_array;
if (type != DBUS_TYPE_ARRAY)
- goto error;
+ return -EINVAL;
servers_str = g_string_new(NULL);
if (!servers_str)
- goto error;
+ return -ENOMEM;
dbus_message_iter_recurse(&variant, &str_array);
@@ -3130,15 +3198,18 @@ static int update_proxy_configuration(struct
connman_service *service,
dbus_message_iter_next(&str_array);
}
+ if (servers_str->len > 0)
+ servers = g_strsplit(servers_str->str, " ", 0);
+ g_string_free(servers_str, TRUE);
} else if (g_str_equal(key, "Excludes")) {
DBusMessageIter str_array;
if (type != DBUS_TYPE_ARRAY)
- goto error;
+ return -EINVAL;
excludes_str = g_string_new(NULL);
if (!excludes_str)
- goto error;
+ return -ENOMEM;
dbus_message_iter_recurse(&variant, &str_array);
@@ -3156,83 +3227,19 @@ static int update_proxy_configuration(struct
connman_service *service,
dbus_message_iter_next(&str_array);
}
+ if (excludes_str && excludes_str->len > 1)
+ excludes = g_strsplit(excludes_str->str, " ",
0);
+ g_string_free(excludes_str, TRUE);
}
dbus_message_iter_next(&dict);
}
- switch (method) {
- case CONNMAN_SERVICE_PROXY_METHOD_DIRECT:
- break;
- case CONNMAN_SERVICE_PROXY_METHOD_MANUAL:
- if (!servers_str && !service->proxies)
- goto error;
-
- if (servers_str) {
- g_strfreev(service->proxies);
-
- if (servers_str->len > 0) {
- char **proxies = g_strsplit_set(
- servers_str->str, " ", 0);
- proxies = remove_empty_strings(proxies);
- service->proxies = proxies;
- } else
- service->proxies = NULL;
- }
-
- if (excludes_str) {
- g_strfreev(service->excludes);
-
- if (excludes_str->len > 0) {
- char **excludes = g_strsplit_set(
- excludes_str->str, " ", 0);
- excludes = remove_empty_strings(excludes);
- service->excludes = excludes;
- } else
- service->excludes = NULL;
- }
-
- if (!service->proxies)
- method = CONNMAN_SERVICE_PROXY_METHOD_DIRECT;
-
- break;
- case CONNMAN_SERVICE_PROXY_METHOD_AUTO:
- g_free(service->pac);
-
- if (url && strlen(url) > 0)
- service->pac = g_strstrip(g_strdup(url));
- else
- service->pac = NULL;
-
- /* if we are connected:
- - if service->pac == NULL
- - if __connman_ipconfig_get_proxy_autoconfig(
- service->ipconfig) == NULL
- --> We should start WPAD */
-
- break;
- case CONNMAN_SERVICE_PROXY_METHOD_UNKNOWN:
- goto error;
- }
-
- if (servers_str)
- g_string_free(servers_str, TRUE);
-
- if (excludes_str)
- g_string_free(excludes_str, TRUE);
-
- service->proxy_config = method;
+ if (!__connman_service_set_proxy_conf(service, method, g_strdup(url),
+ servers, excludes))
+ return -EINVAL;
return 0;
-
-error:
- if (servers_str)
- g_string_free(servers_str, TRUE);
-
- if (excludes_str)
- g_string_free(excludes_str, TRUE);
-
- return -EINVAL;
}
int __connman_service_reset_ipconfig(struct connman_service *service,
@@ -3480,12 +3487,6 @@ static DBusMessage *set_property(DBusConnection *conn,
if (err < 0)
return __connman_error_failed(msg, -err);
-
- proxy_configuration_changed(service);
-
- __connman_notifier_proxy_changed(service);
-
- service_save(service);
} else if (g_str_equal(name, "IPv4.Configuration") ||
g_str_equal(name, "IPv6.Configuration")) {
--
2.5.3
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman