Browse Source

Prepare for getaddrinfo call.

Con Kolivas 13 years ago
parent
commit
ee3b7865e2
3 changed files with 36 additions and 0 deletions
  1. 2 0
      cgminer.c
  2. 32 0
      util.c
  3. 2 0
      util.h

+ 2 - 0
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)) {

+ 32 - 0
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;
+}

+ 2 - 0
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__ */