diff --git a/cgminer.c b/cgminer.c index 10c92207..67197c3c 100644 --- a/cgminer.c +++ b/cgminer.c @@ -554,6 +554,8 @@ static char *set_url(char *arg) arg = get_proxy(arg, pool); + extract_sockaddr(pool, arg); + opt_set_charp(arg, &pool->rpc_url); if (strncmp(arg, "http://", 7) && strncmp(arg, "https://", 8)) { diff --git a/util.c b/util.c index 3a0dbc18..ef5232b7 100644 --- a/util.c +++ b/util.c @@ -30,6 +30,7 @@ # include # include #endif +#include #include "miner.h" #include "elist.h" @@ -794,3 +795,34 @@ double tdiff(struct timeval *end, struct timeval *start) { return end->tv_sec - start->tv_sec + (end->tv_usec - start->tv_usec) / 1000000.0; } + +void extract_sockaddr(struct pool *pool, char *url) +{ + char *url_begin, *url_end, *url_address; + char *port_start, port80[3] = "80"; + struct addrinfo hints, *res; + size_t url_len, port_len; + + url_begin = strstr(url, "//"); + if (!url_begin) + url_begin = url; + else + url_begin += 2; + url_end = strstr(url_begin, ":"); + if (url_end) { + url_len = url_end - 1 - url_begin; + port_len = strlen(url_begin) - url_len - 1; + if (port_len <= 1) + return; + port_start = url_end + 1; + } else { + url_len = strlen(url_begin); + port_start = port80; + } + if (url_len <= 1) + return; + + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; +} diff --git a/util.h b/util.h index 3dcc9485..b8c062b2 100644 --- a/util.h +++ b/util.h @@ -108,5 +108,7 @@ #define in_addr_t uint32_t #endif #endif +struct pool; +void extract_sockaddr(struct pool *pool, char *url); #endif /* __UTIL_H__ */