From 4981335c1df62d1a986e17202c7d506159e8420d Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Wed, 30 Apr 2003 21:53:55 +0000 Subject: [PATCH] Keep track of redirected place for sending reinvites git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@941 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1aeeb2888c..94c35a441a 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -182,6 +182,7 @@ static struct sip_pvt { int tag; /* Another random number */ int nat; /* Whether to try to support NAT */ struct sockaddr_in sa; /* Our peer */ + struct sockaddr_in redirip; /* Where our RTP should be going if not to us */ struct sockaddr_in recv; /* Received as */ struct in_addr ourip; /* Our IP */ struct ast_channel *owner; /* Who owns us */ @@ -2163,7 +2164,10 @@ static int add_sdp(struct sip_request *resp, struct sip_pvt *p, struct ast_rtp * return -1; } ast_rtp_get_us(p->rtp, &sin); - if (rtp) { + if (p->redirip.sin_addr.s_addr) { + dest.sin_port = p->redirip.sin_port; + dest.sin_addr = p->redirip.sin_addr; + } else if (rtp) { ast_rtp_get_peer(rtp, &dest); } else { dest.sin_addr = p->ourip; @@ -5297,6 +5301,10 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp) struct sip_pvt *p; p = chan->pvt->pvt; if (p) { + if (rtp) + ast_rtp_get_peer(rtp, &p->redirip); + else + memset(&p->redirip, 0, sizeof(p->redirip)); transmit_reinvite_with_sdp(p, rtp); p->outgoing = 1; return 0; -- GitLab