--- plugins/pacrunner.c | 77 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 64 insertions(+), 13 deletions(-)
diff --git a/plugins/pacrunner.c b/plugins/pacrunner.c index 3a21011..fcbce0c 100644 --- a/plugins/pacrunner.c +++ b/plugins/pacrunner.c @@ -73,6 +73,16 @@ static void append_string(DBusMessageIter *iter, void *user_data) dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, user_data); } +static void append_string_list(DBusMessageIter *iter, void *user_data) +{ + char **list = user_data; + int i; + + for (i = 0; list[i] != NULL; i++) + dbus_message_iter_append_basic(iter, + DBUS_TYPE_STRING, &list[i]); +} + static void create_proxy_configuration(void) { DBusMessage *msg; @@ -80,7 +90,9 @@ static void create_proxy_configuration(void) DBusPendingCall *call; dbus_bool_t result; char *interface; + const char *method = NULL; const char *str; + char **str_list; if (default_service == NULL) return; @@ -97,6 +109,58 @@ static void create_proxy_configuration(void) dbus_message_iter_init_append(msg, &iter); connman_dbus_dict_open(&iter, &dict); + switch(connman_service_get_proxy_method(default_service)) { + case CONNMAN_SERVICE_PROXY_METHOD_UNKNOWN: + break; + case CONNMAN_SERVICE_PROXY_METHOD_DIRECT: + method= "direct"; + break; + case CONNMAN_SERVICE_PROXY_METHOD_MANUAL: + str_list = connman_service_get_proxy_servers(default_service); + if (str_list == NULL) + break; + + method = "manual"; + + connman_dbus_dict_append_array(&dict, "Servers", + DBUS_TYPE_STRING, append_string_list, + str_list); + g_strfreev(str_list); + + str_list = connman_service_get_proxy_excludes(default_service); + if (str_list == NULL) + break; + + connman_dbus_dict_append_array(&dict, "Excludes", + DBUS_TYPE_STRING, append_string_list, + str_list); + g_strfreev(str_list); + + break; + case CONNMAN_SERVICE_PROXY_METHOD_AUTO: + str = connman_service_get_proxy_url(default_service); + if (str == NULL) + str = connman_service_get_proxy_autoconfig( + default_service); + + if (str == NULL) + break; + + method = "auto"; + + connman_dbus_dict_append_basic(&dict, "URL", + DBUS_TYPE_STRING, &str); + break; + } + + if (method == NULL) { + dbus_message_unref(msg); + return; + } + + connman_dbus_dict_append_basic(&dict, "Method", + DBUS_TYPE_STRING, &method); + interface = connman_service_get_interface(default_service); if (interface != NULL) { connman_dbus_dict_append_basic(&dict, "Interface", @@ -104,19 +168,6 @@ static void create_proxy_configuration(void) g_free(interface); } - str = connman_service_get_proxy_autoconfig(default_service); - if (str != NULL) { - const char *method = "auto"; - connman_dbus_dict_append_basic(&dict, "Method", - DBUS_TYPE_STRING, &method); - connman_dbus_dict_append_basic(&dict, "URL", - DBUS_TYPE_STRING, &str); - } else { - const char *method = "direct"; - connman_dbus_dict_append_basic(&dict, "Method", - DBUS_TYPE_STRING, &method); - } - str = connman_service_get_domainname(default_service); if (str != NULL) connman_dbus_dict_append_array(&dict, "Domains", -- 1.7.1 _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman