Browse Source

fix #181

pull/183/head
Max Lv 10 years ago
parent
commit
5838c021a4
2 changed files with 13 additions and 6 deletions
  1. 15
      src/jconf.c
  2. 4
      src/udprelay.c

15
src/jconf.c

@ -59,7 +59,7 @@ void free_addr(ss_addr_t *addr)
void parse_addr(const char *str, ss_addr_t *addr) void parse_addr(const char *str, ss_addr_t *addr)
{ {
int ret = -1, n = 0;
int ipv6 = 0, ret = -1, n = 0;
char *pch; char *pch;
pch = strchr(str, ':'); pch = strchr(str, ':');
while (pch != NULL) { while (pch != NULL) {
@ -68,15 +68,22 @@ void parse_addr(const char *str, ss_addr_t *addr)
pch = strchr(pch + 1, ':'); pch = strchr(pch + 1, ':');
} }
if (n > 1) { if (n > 1) {
if (strcmp(str + ret, "]") != 0) {
ipv6 = 1;
if (str[ret - 1] != ']') {
ret = -1; ret = -1;
} }
} }
if (ret == -1) { if (ret == -1) {
addr->host = strdup(str);
if (ipv6)
addr->host = ss_strndup(str + 1, strlen(str) - 2);
else
addr->host = strdup(str);
addr->port = NULL; addr->port = NULL;
} else { } else {
addr->host = ss_strndup(str, ret);
if (ipv6)
addr->host = ss_strndup(str + 1, ret - 2);
else
addr->host = ss_strndup(str, ret);
addr->port = strdup(str + ret + 1); addr->port = strdup(str + ret + 1);
} }
} }

4
src/udprelay.c

@ -421,7 +421,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
err = asyncns_getaddrinfo_done(asyncns, query, &result); err = asyncns_getaddrinfo_done(asyncns, query, &result);
if (err) { if (err) {
ERROR("[udp] getaddrinfo");
ERROR("[udp] asysncns_getaddrinfo");
} else { } else {
// Use IPV4 address if possible // Use IPV4 address if possible
for (rp = result; rp != NULL; rp = rp->ai_next) { for (rp = result; rp != NULL; rp = rp->ai_next) {
@ -819,7 +819,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
asyncns_query_t *query; asyncns_query_t *query;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC; hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_socktype = SOCK_DGRAM;
query = asyncns_getaddrinfo(server_ctx->asyncns, query = asyncns_getaddrinfo(server_ctx->asyncns,
host, port, &hints); host, port, &hints);

Loading…
Cancel
Save