mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
Don't hangup the call on OK or errors on MESSAGE and INFO
inside of a dialog (like video update requests). git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@58845 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -12213,9 +12213,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) {
|
||||
@@ -12344,7 +12345,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) {
|
||||
@@ -12388,14 +12390,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)) {
|
||||
@@ -12451,10 +12454,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);
|
||||
|
Reference in New Issue
Block a user