forked from enlightenment/efl
curl patch from bluezery to use ECORE_CON_SOCKS_V4 env variable and also add socks proxying api
SVN revision: 66462
This commit is contained in:
parent
4dde203f06
commit
3258503e8a
|
@ -433,3 +433,7 @@
|
||||||
2011-12-21 Tae-Hwan Kim (Bluezery)
|
2011-12-21 Tae-Hwan Kim (Bluezery)
|
||||||
|
|
||||||
* Add proxy set and timeout set functions in ecore_con.
|
* Add proxy set and timeout set functions in ecore_con.
|
||||||
|
|
||||||
|
2011-12-26 Tae-Hwan Kim (Bluezery)
|
||||||
|
|
||||||
|
* Add proxy username/password set functions in ecore_con.
|
||||||
|
|
|
@ -13,6 +13,8 @@ Additions:
|
||||||
- ECORE_CON_REMOTE_CORK
|
- ECORE_CON_REMOTE_CORK
|
||||||
- ecore_con_url_proxy_set()
|
- ecore_con_url_proxy_set()
|
||||||
- ecore_con_url_timeout_set()
|
- ecore_con_url_timeout_set()
|
||||||
|
- ecore_con_url_proxy_username_set
|
||||||
|
- ecore_con_url_proxy_password_set()
|
||||||
* ecore_x:
|
* ecore_x:
|
||||||
- ecore_x_randr_output_backlight_available()
|
- ecore_x_randr_output_backlight_available()
|
||||||
|
|
||||||
|
|
|
@ -1863,6 +1863,38 @@ EAPI int ecore_con_url_ssl_ca_set(Ecore_Con_Url *url_con,
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy);
|
EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set zero terminated username to use for proxy.
|
||||||
|
*
|
||||||
|
* if socks protocol is used for proxy, protocol should be socks5 and above.
|
||||||
|
*
|
||||||
|
* @param url_con Connection object that will use the proxy.
|
||||||
|
* @param username Username string.
|
||||||
|
*
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE on error.
|
||||||
|
*
|
||||||
|
* @see ecore_con_url_proxy_set()
|
||||||
|
*
|
||||||
|
* @since 1.2
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set zero terminated password to use for proxy.
|
||||||
|
*
|
||||||
|
* if socks protocol is used for proxy, protocol should be socks5 and above.
|
||||||
|
*
|
||||||
|
* @param url_con Connection object that will use the proxy.
|
||||||
|
* @param password Password string.
|
||||||
|
*
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE on error.
|
||||||
|
*
|
||||||
|
* @see ecore_con_url_proxy_set()
|
||||||
|
*
|
||||||
|
* @since 1.2
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set timeout in seconds.
|
* Set timeout in seconds.
|
||||||
*
|
*
|
||||||
|
@ -1873,6 +1905,9 @@ EAPI Eina_Bool ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy
|
||||||
*
|
*
|
||||||
* @param url_con Connection object that will use the timeout.
|
* @param url_con Connection object that will use the timeout.
|
||||||
* @param timeout time in seconds.
|
* @param timeout time in seconds.
|
||||||
|
*
|
||||||
|
* @see ecore_con_url_cookies_jar_file_set()
|
||||||
|
*
|
||||||
* @since 1.2
|
* @since 1.2
|
||||||
*/
|
*/
|
||||||
EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
|
EAPI void ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout);
|
||||||
|
|
|
@ -201,6 +201,7 @@ struct _Ecore_Con_Url
|
||||||
Eina_List *additional_headers;
|
Eina_List *additional_headers;
|
||||||
Eina_List *response_headers;
|
Eina_List *response_headers;
|
||||||
const char *url;
|
const char *url;
|
||||||
|
long proxy_type;
|
||||||
|
|
||||||
Ecore_Timer *timer;
|
Ecore_Timer *timer;
|
||||||
|
|
||||||
|
|
|
@ -196,6 +196,24 @@ ecore_con_url_new(const char *url)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
url_con->proxy_type = -1;
|
||||||
|
if (_ecore_con_proxy_global)
|
||||||
|
{
|
||||||
|
if (_ecore_con_proxy_global->ip)
|
||||||
|
{
|
||||||
|
char host[128];
|
||||||
|
if (_ecore_con_proxy_global->port > 0 &&
|
||||||
|
_ecore_con_proxy_global->port <= 65535)
|
||||||
|
snprintf(host, sizeof(host), "socks4://%s:%d",
|
||||||
|
_ecore_con_proxy_global->ip,
|
||||||
|
_ecore_con_proxy_global->port);
|
||||||
|
else
|
||||||
|
snprintf(host, sizeof(host), "socks4://%s",
|
||||||
|
_ecore_con_proxy_global->ip);
|
||||||
|
ecore_con_url_proxy_set(url_con, host);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_ENCODING, "gzip,deflate");
|
ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_ENCODING, "gzip,deflate");
|
||||||
if (ret != CURLE_OK)
|
if (ret != CURLE_OK)
|
||||||
{
|
{
|
||||||
|
@ -1074,6 +1092,8 @@ ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_CURL
|
#ifdef HAVE_CURL
|
||||||
int res = -1;
|
int res = -1;
|
||||||
|
curl_version_info_data *vers = NULL;
|
||||||
|
|
||||||
if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL))
|
if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL))
|
||||||
{
|
{
|
||||||
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, "ecore_con_url_proxy_set");
|
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, "ecore_con_url_proxy_set");
|
||||||
|
@ -1083,12 +1103,33 @@ ecore_con_url_proxy_set(Ecore_Con_Url *url_con, const char *proxy)
|
||||||
if (eina_list_data_find(_url_con_list, url_con)) return EINA_FALSE;
|
if (eina_list_data_find(_url_con_list, url_con)) return EINA_FALSE;
|
||||||
if (!url_con->url) return EINA_FALSE;
|
if (!url_con->url) return EINA_FALSE;
|
||||||
|
|
||||||
if (proxy == NULL) res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PROXY, "");
|
if (!proxy) res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PROXY, "");
|
||||||
else res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PROXY, proxy);
|
else
|
||||||
|
{
|
||||||
|
// before curl version 7.21.7, socks protocol:// prefix is not supported
|
||||||
|
// (e.g. socks4://, socks4a://, socks5:// or socks5h://, etc.)
|
||||||
|
vers = curl_version_info(CURLVERSION_NOW);
|
||||||
|
if (vers->age >=0 && vers->version_num < 0x71507)
|
||||||
|
{
|
||||||
|
url_con->proxy_type = CURLPROXY_HTTP;
|
||||||
|
if (strstr(proxy, "socks4")) url_con->proxy_type = CURLPROXY_SOCKS4;
|
||||||
|
else if (strstr(proxy, "socks4a")) url_con->proxy_type = CURLPROXY_SOCKS4A;
|
||||||
|
else if (strstr(proxy, "socks5")) url_con->proxy_type = CURLPROXY_SOCKS5;
|
||||||
|
else if (strstr(proxy, "socks5h")) url_con->proxy_type = CURLPROXY_SOCKS5_HOSTNAME;
|
||||||
|
res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PROXYTYPE, url_con->proxy_type);
|
||||||
|
if (res != CURLE_OK)
|
||||||
|
{
|
||||||
|
ERR("curl proxy type setting failed: %s", curl_easy_strerror(res));
|
||||||
|
url_con->proxy_type = -1;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PROXY, proxy);
|
||||||
|
}
|
||||||
if (res != CURLE_OK)
|
if (res != CURLE_OK)
|
||||||
{
|
{
|
||||||
ERR("curl_easy_setopt() failed");
|
ERR("curl proxy setting failed: %s", curl_easy_strerror(res));
|
||||||
|
url_con->proxy_type = -1;
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
|
@ -1120,6 +1161,73 @@ ecore_con_url_timeout_set(Ecore_Con_Url *url_con, double timeout)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
ecore_con_url_proxy_username_set(Ecore_Con_Url *url_con, const char *username)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_CURL
|
||||||
|
int res = -1;
|
||||||
|
if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, "ecore_con_url_proxy_username_set");
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eina_list_data_find(_url_con_list, url_con)) return EINA_FALSE;
|
||||||
|
if (!url_con->url) return EINA_FALSE;
|
||||||
|
if (!username) return EINA_FALSE;
|
||||||
|
if (url_con->proxy_type == CURLPROXY_SOCKS4 || url_con->proxy_type == CURLPROXY_SOCKS4A)
|
||||||
|
{
|
||||||
|
ERR("Proxy type should be socks5 and above");
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = curl_easy_setopt(url_con->curl_easy, CURLOPT_USERNAME, username);
|
||||||
|
if (res != CURLE_OK)
|
||||||
|
{
|
||||||
|
ERR("curl_easy_setopt() failed: %s", curl_easy_strerror(res));
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)url_con;
|
||||||
|
(void)username;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
ecore_con_url_proxy_password_set(Ecore_Con_Url *url_con, const char *password)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_CURL
|
||||||
|
int res = -1;
|
||||||
|
if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, "ecore_con_url_proxy_password_set");
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
if (eina_list_data_find(_url_con_list, url_con)) return EINA_FALSE;
|
||||||
|
if (!url_con->url) return EINA_FALSE;
|
||||||
|
if (!password) return EINA_FALSE;
|
||||||
|
if (url_con->proxy_type == CURLPROXY_SOCKS4 || url_con->proxy_type == CURLPROXY_SOCKS4A)
|
||||||
|
{
|
||||||
|
ERR("Proxy type should be socks5 and above");
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = curl_easy_setopt(url_con->curl_easy, CURLOPT_PASSWORD, password);
|
||||||
|
if (res != CURLE_OK)
|
||||||
|
{
|
||||||
|
ERR("curl_easy_setopt() failed: %s", curl_easy_strerror(res));
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
return EINA_TRUE;
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)url_con;
|
||||||
|
(void)password;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue