add a compile switch to drop support for ipv4-only sockets.

fixes stun on non-ipv6 enabled hosts for now. temporary fix?
git.mgm/mediaproxy-ng/github/master
Richard Fuchs 13 years ago
parent b0839891f8
commit d9b2397712

@ -43,6 +43,10 @@
#define LOG_PARAMS_C(c) STR_FMT(&(c)->callid) #define LOG_PARAMS_C(c) STR_FMT(&(c)->callid)
#define LOG_PARAMS_CI(c) STR_FMT(&(c)->callid), STR_FMT0(log_info) #define LOG_PARAMS_CI(c) STR_FMT(&(c)->callid), STR_FMT0(log_info)
#define IPV4_ONLY_SUPPORT 0
static __thread const str *log_info; static __thread const str *log_info;
@ -504,7 +508,9 @@ static int stream_packet(struct streamrelay *sr_incoming, str *s, struct sockadd
struct peer *p_incoming, *p_outgoing; struct peer *p_incoming, *p_outgoing;
struct callstream *cs_incoming; struct callstream *cs_incoming;
int ret, update = 0, stun_ret = 0, handler_ret = 0, muxed_rtcp = 0; int ret, update = 0, stun_ret = 0, handler_ret = 0, muxed_rtcp = 0;
#if IPV4_ONLY_SUPPORT
struct sockaddr_in sin; struct sockaddr_in sin;
#endif
struct sockaddr_in6 sin6; struct sockaddr_in6 sin6;
struct msghdr mh; struct msghdr mh;
struct iovec iov; struct iovec iov;
@ -614,6 +620,7 @@ forward:
ch = CMSG_FIRSTHDR(&mh); ch = CMSG_FIRSTHDR(&mh);
ZERO(*ch); ZERO(*ch);
#if IPV4_ONLY_SUPPORT
switch (sr_incoming->fd.fd_family) { switch (sr_incoming->fd.fd_family) {
case AF_INET: case AF_INET:
ZERO(sin); ZERO(sin);
@ -623,6 +630,9 @@ forward:
mh.msg_name = &sin; mh.msg_name = &sin;
mh.msg_namelen = sizeof(sin); mh.msg_namelen = sizeof(sin);
#else
goto ipv6;
#endif
ipv4_src: ipv4_src:
ch->cmsg_len = CMSG_LEN(sizeof(*pi)); ch->cmsg_len = CMSG_LEN(sizeof(*pi));
ch->cmsg_level = IPPROTO_IP; ch->cmsg_level = IPPROTO_IP;
@ -633,10 +643,15 @@ ipv4_src:
pi->ipi_spec_dst.s_addr = m->conf.ipv4; pi->ipi_spec_dst.s_addr = m->conf.ipv4;
mh.msg_controllen = CMSG_SPACE(sizeof(*pi)); mh.msg_controllen = CMSG_SPACE(sizeof(*pi));
#if IPV4_ONLY_SUPPORT
break; break;
case AF_INET6: case AF_INET6:
#else
goto ipv6_done;
ipv6:
#endif
ZERO(sin6); ZERO(sin6);
sin6.sin6_family = AF_INET6; sin6.sin6_family = AF_INET6;
sin6.sin6_addr = sr_incoming->peer.ip46; sin6.sin6_addr = sr_incoming->peer.ip46;
@ -656,12 +671,16 @@ ipv4_src:
pi6->ipi6_addr = m->conf.ipv6; pi6->ipi6_addr = m->conf.ipv6;
mh.msg_controllen = CMSG_SPACE(sizeof(*pi6)); mh.msg_controllen = CMSG_SPACE(sizeof(*pi6));
#if IPV4_ONLY_SUPPORT
break; break;
default: default:
abort(); abort();
} }
#else
ipv6_done:
#endif
ZERO(iov); ZERO(iov);
iov.iov_base = s->s; iov.iov_base = s->s;
@ -1147,6 +1166,7 @@ fail:
#if IPV4_ONLY_SUPPORT
static int get_port4(struct udp_fd *r, u_int16_t p, struct callmaster *m) { static int get_port4(struct udp_fd *r, u_int16_t p, struct callmaster *m) {
int fd; int fd;
struct sockaddr_in sin; struct sockaddr_in sin;
@ -1175,6 +1195,7 @@ fail:
close(fd); close(fd);
return -1; return -1;
} }
#endif
static int get_port6(struct udp_fd *r, u_int16_t p, struct callmaster *m) { static int get_port6(struct udp_fd *r, u_int16_t p, struct callmaster *m) {
int fd; int fd;
@ -1225,9 +1246,11 @@ static int get_port(struct udp_fd *r, u_int16_t p, struct callmaster *m) {
bit_array_set(m->ports_used, p); bit_array_set(m->ports_used, p);
mutex_unlock(&m->portlock); mutex_unlock(&m->portlock);
#if IPV4_ONLY_SUPPORT
if (is_addr_unspecified(&m->conf.ipv6)) if (is_addr_unspecified(&m->conf.ipv6))
ret = get_port4(r, p, m); ret = get_port4(r, p, m);
else else
#endif
ret = get_port6(r, p, m); ret = get_port6(r, p, m);
if (ret) { if (ret) {

Loading…
Cancel
Save