diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-03-13 10:14:13 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-03-13 10:14:13 +0000 |
commit | e6cf30c5ae0a9157f66d4e42e95c796a1741ea9d (patch) | |
tree | 57c11678e2b11a081edad71a661f640ba12a0d5d | |
parent | ed536f0fd2b52847758f760a090c21c45edbeb41 (diff) |
Merged revisions 58845 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r58845 | oej | 2007-03-13 11:03:03 +0100 (Tue, 13 Mar 2007) | 3 lines
Don't hangup the call on OK or errors on MESSAGE and INFO
inside of a dialog (like video update requests).
........
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@58846 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 8b1bcf4d2..acbcfbbc0 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12891,9 +12891,10 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ break; case 200: /* 200 OK */ p->authtries = 0; /* Reset authentication counter */ - if (sipmethod == SIP_MESSAGE) { - /* We successfully transmitted a message */ - ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); + if (sipmethod == SIP_MESSAGE || sipmethod == SIP_INFO) { + /* We successfully transmitted a message + or a video update request in INFO */ + /* Nothing happens here - the message is inside a dialog */ } else if (sipmethod == SIP_INVITE) { handle_response_invite(p, resp, rest, req, seqno); } else if (sipmethod == SIP_NOTIFY) { @@ -13026,7 +13027,8 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ if ((option_verbose > 2) && (resp != 487)) ast_verbose(VERBOSE_PREFIX_3 "Got SIP response %d \"%s\" back from %s\n", resp, rest, ast_inet_ntoa(p->sa.sin_addr)); - stop_media_flows(p); /* Immediately stop RTP, VRTP and UDPTL as applicable */ + if (sipmethod == SIP_INVITE) + stop_media_flows(p); /* Immediately stop RTP, VRTP and UDPTL as applicable */ /* XXX Locking issues?? XXX */ switch(resp) { @@ -13070,14 +13072,15 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ break; default: /* Send hangup */ - if (owner) + if (owner && sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO) ast_queue_hangup(p->owner); break; } /* ACK on invite */ if (sipmethod == SIP_INVITE) transmit_request(p, SIP_ACK, seqno, XMIT_UNRELIABLE, FALSE); - sip_alreadygone(p); + if (sipmethod != SIP_MESSAGE && sipmethod != SIP_INFO) + sip_alreadygone(p); if (!p->owner) ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); } else if ((resp >= 100) && (resp < 200)) { @@ -13133,10 +13136,10 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ } } else if (sipmethod == SIP_BYE) ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); - else if (sipmethod == SIP_MESSAGE) - /* We successfully transmitted a message */ - /* XXX Why destroy this pvt after message transfer? Bad */ - ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); + else if (sipmethod == SIP_MESSAGE || sipmethod == SIP_INFO) + /* We successfully transmitted a message or + a video update request in INFO */ + ; else if (sipmethod == SIP_BYE) /* Ok, we're ready to go */ ast_set_flag(&p->flags[0], SIP_NEEDDESTROY); |