aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-04-30 21:53:55 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2003-04-30 21:53:55 +0000
commitea59650bc743e0b3a8bbfee03f2e020a30326ee3 (patch)
tree60d3d349b0f82b5cb2004680511873aec0709529 /channels
parentda0ca588aed0d2dd88e3e5e06e3ece2d410d5e93 (diff)
Keep track of redirected place for sending reinvites
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@941 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rwxr-xr-xchannels/chan_sip.c10
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;