From 00cc28dff489df388fa8ccd8e9701b4ced1bdd01 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 27 Sep 2017 10:41:29 -0400 Subject: [PATCH] TT#22660 don't zero out SDP origin on zero connection address Change-Id: Idc68132a7ae23a6273464927ecf27237cdc9d6cf --- daemon/call.c | 5 +++-- daemon/call.h | 2 +- daemon/call_interfaces.c | 2 +- daemon/sdp.c | 15 ++++++++------- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/daemon/call.c b/daemon/call.c index c6b01925e..9b7994f72 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1966,7 +1966,7 @@ no_stats_output: /* XXX move these */ int call_stream_address46(char *o, struct packet_stream *ps, enum stream_address_format format, - int *len, const struct local_intf *ifa) + int *len, const struct local_intf *ifa, int keep_unspec) { struct packet_stream *sink; int l = 0; @@ -1986,7 +1986,8 @@ int call_stream_address46(char *o, struct packet_stream *ps, enum stream_address l += sprintf(o + l, "%s ", ifa_addr->addr.family->rfc_name); if (is_addr_unspecified(&sink->advertised_endpoint.address) - && !is_trickle_ice_address(&sink->advertised_endpoint)) + && !is_trickle_ice_address(&sink->advertised_endpoint) + && keep_unspec) l += sprintf(o + l, "%s", ifa_addr->addr.family->unspec_string); else l += sprintf(o + l, "%s", sockaddr_print_buf(&ifa->advertised_address.addr)); diff --git a/daemon/call.h b/daemon/call.h index d4858c6e2..977a92fd9 100644 --- a/daemon/call.h +++ b/daemon/call.h @@ -466,7 +466,7 @@ void call_media_state_machine(struct call_media *m); void call_media_unkernelize(struct call_media *media); int call_stream_address46(char *o, struct packet_stream *ps, enum stream_address_format format, - int *len, const struct local_intf *ifa); + int *len, const struct local_intf *ifa, int keep_unspec); const struct transport_protocol *transport_protocol(const str *s); void add_total_calls_duration_in_interval(struct callmaster *cm, struct timeval *interval_tv); diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index bcbeb2d3d..91b4b9e66 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -33,7 +33,7 @@ static int call_stream_address_gstring(GString *o, struct packet_stream *ps, enu int len, ret; char buf[64]; /* 64 bytes ought to be enough for anybody */ - ret = call_stream_address46(buf, ps, format, &len, NULL); + ret = call_stream_address46(buf, ps, format, &len, NULL, 1); g_string_append_len(o, buf, len); return ret; } diff --git a/daemon/sdp.c b/daemon/sdp.c index 520b783e6..49d8c6398 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -1464,7 +1464,7 @@ static int insert_ice_address(struct sdp_chopper *chop, struct stream_fd *sfd) { char buf[64]; int len; - call_stream_address46(buf, sfd->stream, SAF_ICE, &len, sfd->local_intf); + call_stream_address46(buf, sfd->stream, SAF_ICE, &len, sfd->local_intf, 0); chopper_append_dup(chop, buf, len); chopper_append_printf(chop, " %u", sfd->socket.local.port); @@ -1476,7 +1476,7 @@ static int insert_raddr_rport(struct sdp_chopper *chop, struct packet_stream *ps int len; chopper_append_c(chop, " raddr "); - call_stream_address46(buf, ps, SAF_ICE, &len, ifa); + call_stream_address46(buf, ps, SAF_ICE, &len, ifa, 0); chopper_append_dup(chop, buf, len); chopper_append_c(chop, " rport "); chopper_append_printf(chop, "%u", ps->selected_sfd->socket.local.port); @@ -1486,7 +1486,7 @@ static int insert_raddr_rport(struct sdp_chopper *chop, struct packet_stream *ps static int replace_network_address(struct sdp_chopper *chop, struct network_address *address, - struct packet_stream *ps, struct sdp_ng_flags *flags) + struct packet_stream *ps, struct sdp_ng_flags *flags, int keep_unspec) { char buf[64]; int len; @@ -1507,7 +1507,7 @@ static int replace_network_address(struct sdp_chopper *chop, struct network_addr flags->parsed_media_address.family->rfc_name, sockaddr_print_buf(&flags->parsed_media_address)); else - call_stream_address46(buf, ps, SAF_NG, &len, NULL); + call_stream_address46(buf, ps, SAF_NG, &len, NULL, keep_unspec); chopper_append_dup(chop, buf, len); if (skip_over(chop, &address->address)) @@ -1923,12 +1923,12 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu if (session->origin.parsed && flags->replace_origin && !flags->ice_force_relay) { - if (replace_network_address(chop, &session->origin.address, ps, flags)) + if (replace_network_address(chop, &session->origin.address, ps, flags, 0)) goto error; } if (session->connection.parsed && sess_conn && !flags->ice_force_relay) { - if (replace_network_address(chop, &session->connection.address, ps, flags)) + if (replace_network_address(chop, &session->connection.address, ps, flags, 1)) goto error; } @@ -1960,7 +1960,8 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu goto error; if (sdp_media->connection.parsed) { - if (replace_network_address(chop, &sdp_media->connection.address, ps, flags)) + if (replace_network_address(chop, &sdp_media->connection.address, ps, + flags, 1)) goto error; } }