diff options
author | Mark Spencer <markster@digium.com> | 2003-04-30 21:53:55 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2003-04-30 21:53:55 +0000 |
commit | 4981335c1df62d1a986e17202c7d506159e8420d (patch) | |
tree | 60d3d349b0f82b5cb2004680511873aec0709529 | |
parent | d7216653dfca7e4bb6748415583324b268dcaf1f (diff) |
Keep track of redirected place for sending reinvites
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@941 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rwxr-xr-x | channels/chan_sip.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 1aeeb2888..94c35a441 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; |