]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Don't hangup the call on OK or errors on MESSAGE and INFO
authorOlle Johansson <oej@edvina.net>
Tue, 13 Mar 2007 10:03:03 +0000 (10:03 +0000)
committerOlle Johansson <oej@edvina.net>
Tue, 13 Mar 2007 10:03:03 +0000 (10:03 +0000)
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

channels/chan_sip.c

index 12e353147f7470890acd7598386bdf770983b6cf..d5e4870c99986177f4d6967ae1616d2b5b53eb08 100644 (file)
@@ -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);