Refactor set_property's Nameservers.Configuration to a separate
function.
---
src/connman.h | 2 +
src/service.c | 131 +++++++++++++++++++++++++++++++---------------------------
2 files changed, 73 insertions(+), 60 deletions(-)
diff --git a/src/connman.h b/src/connman.h
index d1cb71b..8f64e65 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -761,6 +761,8 @@ bool __connman_service_index_is_split_routing(int index);
int __connman_service_get_index(struct connman_service *service);
bool __connman_service_set_autoconnect(struct connman_service *service,
bool autoconnect);
+bool __connman_service_set_nameservers_conf(struct connman_service *service,
+ char **nameservers);
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 9027810..0ed3bdb 100644
--- a/src/service.c
+++ b/src/service.c
@@ -2472,6 +2472,72 @@ bool __connman_service_set_autoconnect(struct
connman_service *service,
return true;
}
+static char **remove_empty_strings(char **strv)
+{
+ int index = 0;
+ char **iter = strv;
+
+ while (*iter) {
+ if (**iter)
+ strv[index++] = *iter;
+ else
+ g_free(*iter);
+ iter++;
+ }
+
+ strv[index] = NULL;
+ return strv;
+}
+
+bool __connman_service_set_nameservers_conf(struct connman_service *service,
+ char **nameservers)
+{
+ int index;
+ const char *gw;
+ char **iter;
+
+ if (!service->nameservers_config && !nameservers)
+ return false;
+
+ index = __connman_service_get_index(service);
+ gw = __connman_ipconfig_get_gateway_from_index(index,
+ CONNMAN_IPCONFIG_TYPE_ALL);
+
+ if (gw && strlen(gw))
+ __connman_service_nameserver_del_routes(service,
+ CONNMAN_IPCONFIG_TYPE_ALL);
+
+ nameserver_remove_all(service, CONNMAN_IPCONFIG_TYPE_ALL);
+ g_strfreev(service->nameservers_config);
+ service->nameservers_config = NULL;
+
+ if (nameservers) {
+ for (iter = nameservers; *iter; iter++)
+ if (connman_inet_check_ipaddress(*iter) <= 0)
+ *iter[0] = '\0';
+
+ nameservers = remove_empty_strings(nameservers);
+ service->nameservers_config = nameservers;
+ }
+
+ nameserver_add_all(service, CONNMAN_IPCONFIG_TYPE_ALL);
+ dns_configuration_changed(service);
+
+ if (__connman_service_is_connected_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV4))
+ __connman_wispr_start(service,
+ CONNMAN_IPCONFIG_TYPE_IPV4);
+
+ if (__connman_service_is_connected_state(service,
+ CONNMAN_IPCONFIG_TYPE_IPV6))
+ __connman_wispr_start(service,
+ CONNMAN_IPCONFIG_TYPE_IPV6);
+
+ service_save(service);
+
+ return true;
+}
+
void __connman_service_set_hidden(struct connman_service *service)
{
if (!service || service->hidden)
@@ -2941,23 +3007,6 @@ static DBusMessage *get_properties(DBusConnection *conn,
return reply;
}
-static char **remove_empty_strings(char **strv)
-{
- int index = 0;
- char **iter = strv;
-
- while (*iter) {
- if (**iter)
- strv[index++] = *iter;
- else
- g_free(*iter);
- iter++;
- }
-
- strv[index] = NULL;
- return strv;
-}
-
static int update_proxy_configuration(struct connman_service *service,
DBusMessageIter *array)
{
@@ -3252,8 +3301,7 @@ static DBusMessage *set_property(DBusConnection *conn,
} else if (g_str_equal(name, "Nameservers.Configuration")) {
DBusMessageIter entry;
GString *str;
- int index;
- const char *gw;
+ char **nameservers = NULL;
if (__connman_provider_is_immutable(service->provider) ||
service->immutable)
@@ -3266,14 +3314,6 @@ static DBusMessage *set_property(DBusConnection *conn,
if (!str)
return __connman_error_invalid_arguments(msg);
- index = __connman_service_get_index(service);
- gw = __connman_ipconfig_get_gateway_from_index(index,
- CONNMAN_IPCONFIG_TYPE_ALL);
-
- if (gw && strlen(gw))
- __connman_service_nameserver_del_routes(service,
- CONNMAN_IPCONFIG_TYPE_ALL);
-
dbus_message_iter_recurse(&value, &entry);
while (dbus_message_iter_get_arg_type(&entry) ==
DBUS_TYPE_STRING) {
@@ -3290,43 +3330,14 @@ static DBusMessage *set_property(DBusConnection *conn,
g_string_append(str, val);
}
- nameserver_remove_all(service, CONNMAN_IPCONFIG_TYPE_ALL);
- g_strfreev(service->nameservers_config);
-
- if (str->len > 0) {
- char **nameservers, **iter;
-
+ if (str->len > 0)
nameservers = g_strsplit_set(str->str, " ", 0);
- for (iter = nameservers; *iter; iter++)
- if (connman_inet_check_ipaddress(*iter) <= 0)
- *iter[0] = '\0';
-
- nameservers = remove_empty_strings(nameservers);
- service->nameservers_config = nameservers;
- } else {
- service->nameservers_config = NULL;
- }
-
g_string_free(str, TRUE);
- if (gw && strlen(gw))
- __connman_service_nameserver_add_routes(service, gw);
-
- nameserver_add_all(service, CONNMAN_IPCONFIG_TYPE_ALL);
- dns_configuration_changed(service);
-
- if (__connman_service_is_connected_state(service,
- CONNMAN_IPCONFIG_TYPE_IPV4))
- __connman_wispr_start(service,
- CONNMAN_IPCONFIG_TYPE_IPV4);
-
- if (__connman_service_is_connected_state(service,
- CONNMAN_IPCONFIG_TYPE_IPV6))
- __connman_wispr_start(service,
- CONNMAN_IPCONFIG_TYPE_IPV6);
-
- service_save(service);
+ if (!__connman_service_set_nameservers_conf(service,
+ nameservers))
+ return __connman_error_invalid_arguments(msg);
} else if (g_str_equal(name, "Timeservers.Configuration")) {
DBusMessageIter entry;
GString *str;
--
2.5.3
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman