From ee6d029fd59b003a924ee674e6823282367aab41 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 5 Jun 2015 08:18:48 -0400 Subject: [PATCH] fix mixup of reported local address --- daemon/call.c | 11 ++++++----- daemon/socket.c | 2 ++ daemon/socket.h | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index 70c510183..ab2e37d97 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1968,17 +1968,18 @@ int call_stream_address46(char *o, struct packet_stream *ps, enum stream_address int l = 0; const struct intf_address *ifa_addr; - sink = packet_stream_sink(ps); if (!ifa) - ifa = sink->selected_sfd->local_intf; + ifa = ps->selected_sfd->local_intf; ifa_addr = &ifa->spec->address; + sink = packet_stream_sink(ps); + if (format == SAF_NG) l += sprintf(o + l, "%s ", ifa_addr->addr.family->rfc_name); - if (is_addr_unspecified(&ps->advertised_endpoint.address) - && !is_trickle_ice_address(&ps->advertised_endpoint)) - l += sprintf(o + l, "%s", sockaddr_print_buf(&ps->advertised_endpoint.address)); + if (is_addr_unspecified(&sink->advertised_endpoint.address) + && !is_trickle_ice_address(&sink->advertised_endpoint)) + l += sprintf(o + l, "%s", ifa_addr->addr.family->unspec_string); else l += sprintf(o + l, "%s", sockaddr_print_buf(&ifa_addr->advertised)); diff --git a/daemon/socket.c b/daemon/socket.c index afbb0b9a7..369c18fbe 100644 --- a/daemon/socket.c +++ b/daemon/socket.c @@ -45,6 +45,7 @@ static struct socket_family __socket_families[__SF_LAST] = { .sockaddr_size = sizeof(struct sockaddr_in), .name = "IPv4", .rfc_name = "IP4", + .unspec_string = "0.0.0.0", .hash = __ip4_hash, .eq = __ip4_eq, .addr_parse = __ip4_addr_parse, @@ -66,6 +67,7 @@ static struct socket_family __socket_families[__SF_LAST] = { .sockaddr_size = sizeof(struct sockaddr_in6), .name = "IPv6", .rfc_name = "IP6", + .unspec_string = "::", .hash = __ip6_hash, .eq = __ip6_eq, .addr_parse = __ip6_addr_parse, diff --git a/daemon/socket.h b/daemon/socket.h index 22b10dd56..ce1d10dbb 100644 --- a/daemon/socket.h +++ b/daemon/socket.h @@ -46,6 +46,7 @@ struct socket_family { size_t sockaddr_size; const char *name; /* "IPv4" */ const char *rfc_name; /* "IP4" */ + const char *unspec_string; /* 0.0.0.0 or :: */ unsigned int (*hash)(const sockaddr_t *); int (*eq)(const sockaddr_t *, const sockaddr_t *); int (*addr_parse)(sockaddr_t *, const char *);