From: Jonathan Rose Date: Thu, 19 Sep 2013 16:45:02 +0000 (+0000) Subject: chan_sip: Make direct media reinvites for T38 put Asterisk in the media path X-Git-Tag: 11.7.0-rc1~55 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=155e9f821c5d1fdbf7cf2e4697c469d66c7ca660;p=thirdparty%2Fasterisk.git chan_sip: Make direct media reinvites for T38 put Asterisk in the media path Prior to this patch, Asterisk would incorrectly use the previous endpoint addresses in SDP in spite of providing its own port. T38 is never meant to be done through directmedia and Asterisk should always be in the media path for these streams. (closes issue ASTERISK-17273) Reported by: Kevin Stewart (closes issue ASTERISK-18706) Reported by: Jeremy Kister Review: https://reviewboard.asterisk.org/r/2853/ ........ Merged revisions 399456 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@399457 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index db48ca1d83..1c70e221ad 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -13282,13 +13282,9 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int /* Our T.38 end is */ ast_udptl_get_us(p->udptl, &udptladdr); - /* Determine T.38 UDPTL destination */ - if (!ast_sockaddr_isnull(&p->udptlredirip)) { - ast_sockaddr_copy(&udptldest, &p->udptlredirip); - } else { - ast_sockaddr_copy(&udptldest, &p->ourip); - ast_sockaddr_set_port(&udptldest, ast_sockaddr_port(&udptladdr)); - } + /* We don't use directmedia for T.38, so keep the destination the same as our IP address. */ + ast_sockaddr_copy(&udptldest, &p->ourip); + ast_sockaddr_set_port(&udptldest, ast_sockaddr_port(&udptladdr)); if (debug) { ast_debug(1, "T.38 UDPTL is at %s port %d\n", ast_sockaddr_stringify_addr(&p->ourip), ast_sockaddr_port(&udptladdr)); @@ -13299,9 +13295,9 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int ast_str_append(&m_modem, 0, "m=image %d udptl t38\r\n", ast_sockaddr_port(&udptldest)); - if (!ast_sockaddr_cmp(&udptldest, &dest)) { + if (ast_sockaddr_cmp(&udptldest, &dest)) { ast_str_append(&m_modem, 0, "c=IN %s %s\r\n", - (ast_sockaddr_is_ipv6(&dest) && !ast_sockaddr_is_ipv4_mapped(&dest)) ? + (ast_sockaddr_is_ipv6(&udptldest) && !ast_sockaddr_is_ipv4_mapped(&udptldest)) ? "IP6" : "IP4", ast_sockaddr_stringify_addr_remote(&udptldest)); }