@ -305,7 +305,10 @@ json_t *json_rpc_call(CURL *curl, const char *url,
@@ -305,7 +305,10 @@ json_t *json_rpc_call(CURL *curl, const char *url,
curl_easy_setopt ( curl , CURLOPT_HEADERFUNCTION , resp_hdr_cb ) ;
curl_easy_setopt ( curl , CURLOPT_HEADERDATA , & hi ) ;
curl_easy_setopt ( curl , CURLOPT_USE_SSL , CURLUSESSL_TRY ) ;
if ( opt_socks_proxy ) {
if ( pool - > rpc_proxy ) {
curl_easy_setopt ( curl , CURLOPT_PROXY , pool - > rpc_proxy ) ;
curl_easy_setopt ( curl , CURLOPT_PROXYTYPE , pool - > rpc_proxytype ) ;
} else if ( opt_socks_proxy ) {
curl_easy_setopt ( curl , CURLOPT_PROXY , opt_socks_proxy ) ;
curl_easy_setopt ( curl , CURLOPT_PROXYTYPE , CURLPROXY_SOCKS4 ) ;
}
@ -460,6 +463,68 @@ err_out:
@@ -460,6 +463,68 @@ err_out:
return NULL ;
}
# if (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR >= 10) || (LIBCURL_VERSION_MAJOR > 7)
static struct {
const char * name ;
curl_proxytype proxytype ;
} proxynames [ ] = {
{ " http: " , CURLPROXY_HTTP } ,
# if (LIBCURL_VERSION_MAJOR > 7) || (LIBCURL_VERSION_MINOR > 19) || (LIBCURL_VERSION_MINOR == 19 && LIBCURL_VERSION_PATCH >= 4)
{ " http0: " , CURLPROXY_HTTP_1_0 } ,
# endif
# if (LIBCURL_VERSION_MAJOR > 7) || (LIBCURL_VERSION_MINOR > 15) || (LIBCURL_VERSION_MINOR == 15 && LIBCURL_VERSION_PATCH >= 2)
{ " socks4: " , CURLPROXY_SOCKS4 } ,
# endif
{ " socks5: " , CURLPROXY_SOCKS5 } ,
# if (LIBCURL_VERSION_MAJOR > 7) || (LIBCURL_VERSION_MINOR >= 18)
{ " socks4a: " , CURLPROXY_SOCKS4A } ,
{ " socks5h: " , CURLPROXY_SOCKS5_HOSTNAME } ,
# endif
} ;
# endif
const char * proxytype ( curl_proxytype proxytype )
{
int i ;
for ( i = 0 ; proxynames [ i ] . name ; i + + )
if ( proxynames [ i ] . proxytype = = proxytype )
return proxynames [ i ] . name ;
return " invalid " ;
}
char * get_proxy ( char * url , struct pool * pool )
{
pool - > rpc_proxy = NULL ;
# if (LIBCURL_VERSION_MAJOR == 7 && LIBCURL_VERSION_MINOR >= 10) || (LIBCURL_VERSION_MAJOR > 7)
char * split ;
int plen , len , i ;
for ( i = 0 ; proxynames [ i ] . name ; i + + ) {
plen = strlen ( proxynames [ i ] . name ) ;
if ( strncmp ( url , proxynames [ i ] . name , plen ) = = 0 ) {
if ( ! ( split = strchr ( url , ' | ' ) ) )
return url ;
* split = ' \0 ' ;
len = split - url ;
pool - > rpc_proxy = malloc ( 1 + len - plen ) ;
if ( ! ( pool - > rpc_proxy ) )
quit ( 1 , " Failed to malloc rpc_proxy " ) ;
strcpy ( pool - > rpc_proxy , url ) ;
pool - > rpc_proxytype = proxynames [ i ] . proxytype ;
url = split + 1 ;
break ;
}
}
# endif
return url ;
}
char * bin2hex ( const unsigned char * p , size_t len )
{
char * s = malloc ( ( len * 2 ) + 1 ) ;