Prepare for getaddrinfo call.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
diff --git a/cgminer.c b/cgminer.c
index 10c9220..67197c3 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 3a0dbc1..ef5232b 100644
--- a/util.c
+++ b/util.c
@@ -30,6 +30,7 @@
# include <winsock2.h>
# include <mstcpip.h>
#endif
+#include <netdb.h>
#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 3dcc948..b8c062b 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__ */