FQDN in relay-ip and listener-ip

libevent.rpm
mom040267 11 years ago
parent c4b7e3d1e1
commit 3465392cc8
  1. 43
      src/client/ns_turn_ioaddr.c

@ -218,24 +218,47 @@ int make_ioa_addr(const u08bits* saddr, int port, ioa_addr *addr) {
addr_hints.ai_next = NULL;
err = getaddrinfo((const char*)saddr, NULL, &addr_hints, &addr_result);
if (err != 0) {
if ((err != 0)||(!addr_result)) {
fprintf(stderr,"error resolving '%s' hostname: %s\n",saddr,gai_strerror(err));
return -1;
}
// getaddrinfo() returns a list of address structures. We just take the
// first one.
ns_bcopy(addr_result->ai_addr, addr, addr_result->ai_addrlen);
if (addr_result->ai_family == AF_INET) {
addr->s4.sin_port = nswap16(port);
} else if (addr_result->ai_family == AF_INET6) {
addr->s6.sin6_port = nswap16(port);
int family = AF_INET;
struct addrinfo *addr_result_orig = addr_result;
int found = 0;
beg_af:
while(!found && addr_result) {
if(addr_result->ai_family == family) {
ns_bcopy(addr_result->ai_addr, addr, addr_result->ai_addrlen);
if (addr_result->ai_family == AF_INET) {
addr->s4.sin_port = nswap16(port);
#if defined(TURN_HAS_SIN_LEN) /* tested when configured */
addr->s4.sin_len = sizeof(struct sockaddr_in);
#endif
} else if (addr_result->ai_family == AF_INET6) {
addr->s6.sin6_port = nswap16(port);
#if defined(SIN6_LEN) /* this define is required by IPv6 if used */
addr->s6.sin6_len = sizeof(struct sockaddr_in6);
addr->s6.sin6_len = sizeof(struct sockaddr_in6);
#endif
} else {
continue;
}
found = 1;
}
addr_result = addr_result->ai_next;
}
if(!found && family == AF_INET) {
family = AF_INET6;
addr_result = addr_result_orig;
goto beg_af;
}
freeaddrinfo(addr_result);
freeaddrinfo(addr_result_orig);
}
return 0;

Loading…
Cancel
Save