forked from enlightenment/enlightenment
support proxy settings provided by Connman.
Summary: This implements support for Connman's proxy configuration. The 'all_proxy', 'http_proxy', 'https_proxy' environment variables are set to the first value of the 'proxy_servers' set. The 'no_proxy' environment variable is set to a concatenated string of all the 'proxy_exclude' values. Reviewers: zmike! Subscribers: cedric Maniphest Tasks: T5442 Differential Revision: https://phab.enlightenment.org/D4833 modified by zmike
This commit is contained in:
parent
bbea839dfa
commit
67ca168f6f
|
@ -196,6 +196,93 @@ static void _service_parse_prop_changed(struct Connman_Service *cs,
|
||||||
_dbus_str_array_to_eina(value, &cs->security, 2);
|
_dbus_str_array_to_eina(value, &cs->security, 2);
|
||||||
DBG("New security count: %d", eina_array_count(cs->security));
|
DBG("New security count: %d", eina_array_count(cs->security));
|
||||||
}
|
}
|
||||||
|
else if (strcmp(prop_name, "Proxy") == 0)
|
||||||
|
{
|
||||||
|
Eldbus_Message_Iter* proxy_dict = NULL;
|
||||||
|
const char* method = "direct";
|
||||||
|
Eina_Array *proxy_servers = NULL, *proxy_excludes = NULL;
|
||||||
|
Eldbus_Message_Iter* proxy_dict_entry = NULL;
|
||||||
|
|
||||||
|
// 'Proxy': {'Excludes': [], 'Method': 'manual', 'Servers': []}
|
||||||
|
if (!eldbus_message_iter_arguments_get(value, "a{sv}", &proxy_dict))
|
||||||
|
{
|
||||||
|
ERR("Error getting arguments.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (eldbus_message_iter_get_and_next(proxy_dict, 'e',
|
||||||
|
&proxy_dict_entry))
|
||||||
|
{
|
||||||
|
Eldbus_Message_Iter* proxy_dict_entry_val = NULL;
|
||||||
|
char* proxy_dict_entry_key = NULL;
|
||||||
|
if (!eldbus_message_iter_arguments_get(proxy_dict_entry, "sv",
|
||||||
|
&proxy_dict_entry_key,
|
||||||
|
&proxy_dict_entry_val))
|
||||||
|
continue;
|
||||||
|
if (strcmp(proxy_dict_entry_key, "Excludes") == 0)
|
||||||
|
{
|
||||||
|
_dbus_str_array_to_eina(proxy_dict_entry_val, &proxy_excludes, 4);
|
||||||
|
}
|
||||||
|
else if (strcmp(proxy_dict_entry_key, "Method") == 0)
|
||||||
|
{
|
||||||
|
EINA_SAFETY_ON_FALSE_RETURN(eldbus_message_iter_arguments_get(
|
||||||
|
proxy_dict_entry_val, "s", &method));
|
||||||
|
}
|
||||||
|
else if (strcmp(proxy_dict_entry_key, "Servers") == 0)
|
||||||
|
{
|
||||||
|
_dbus_str_array_to_eina(proxy_dict_entry_val, &proxy_servers, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(method, "manual") == 0)
|
||||||
|
{
|
||||||
|
if (eina_array_count(proxy_servers) > 0)
|
||||||
|
{
|
||||||
|
DBG("New {all,http{,s}}_proxy: %s",
|
||||||
|
(const char*)eina_array_data_get(proxy_servers, 0));
|
||||||
|
e_env_set("all_proxy", eina_array_data_get(proxy_servers, 0));
|
||||||
|
e_env_set("http_proxy", eina_array_data_get(proxy_servers, 0));
|
||||||
|
e_env_set("https_proxy", eina_array_data_get(proxy_servers, 0));
|
||||||
|
}
|
||||||
|
if (eina_array_count(proxy_excludes) > 0)
|
||||||
|
{
|
||||||
|
char buf[256], concatinated_proxy_exceptions[256];
|
||||||
|
size_t concatinated_string_length;
|
||||||
|
concatinated_proxy_exceptions[0] = '\0';
|
||||||
|
for (unsigned int i = 0; i < eina_array_count(proxy_excludes); i++)
|
||||||
|
{
|
||||||
|
snprintf(buf, (sizeof(buf) - 1), "%s ",
|
||||||
|
(const char*)eina_array_data_get(proxy_excludes, i));
|
||||||
|
concatinated_string_length = eina_strlcat(concatinated_proxy_exceptions, buf,
|
||||||
|
sizeof(concatinated_proxy_exceptions));
|
||||||
|
}
|
||||||
|
if ((concatinated_string_length < sizeof(concatinated_proxy_exceptions)) && (concatinated_string_length > 0))
|
||||||
|
{
|
||||||
|
concatinated_proxy_exceptions[concatinated_string_length - 1] = '\0';
|
||||||
|
}
|
||||||
|
DBG("New no_proxy: %s", (const char*)concatinated_proxy_exceptions);
|
||||||
|
e_env_set("no_proxy", concatinated_proxy_exceptions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (strcmp(method, "direct") == 0)
|
||||||
|
{
|
||||||
|
e_env_unset("all_proxy");
|
||||||
|
e_env_unset("http_proxy");
|
||||||
|
e_env_unset("https_proxy");
|
||||||
|
e_env_unset("no_proxy");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (proxy_excludes)
|
||||||
|
{
|
||||||
|
_eina_str_array_clean(proxy_excludes);
|
||||||
|
eina_array_free(proxy_excludes);
|
||||||
|
}
|
||||||
|
if (proxy_servers)
|
||||||
|
{
|
||||||
|
_eina_str_array_clean(proxy_servers);
|
||||||
|
eina_array_free(proxy_servers);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _service_prop_dict_changed(struct Connman_Service *cs,
|
static void _service_prop_dict_changed(struct Connman_Service *cs,
|
||||||
|
|
Loading…
Reference in New Issue