Related to issue #9235 btw.
authorOlle Johansson <oej@edvina.net>
Fri, 18 May 2007 18:18:59 +0000 (18:18 +0000)
committerOlle Johansson <oej@edvina.net>
Fri, 18 May 2007 18:18:59 +0000 (18:18 +0000)
Merged revisions 65123 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r65123 | oej | 2007-05-18 20:16:09 +0200 (Fri, 18 May 2007) | 10 lines

Merged revisions 65122 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r65122 | oej | 2007-05-18 20:10:46 +0200 (Fri, 18 May 2007) | 2 lines

Not getting an ACK to a 200 OK in the initial invite is critical to the call.

........

................

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@65124 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index cdb2487..42ad363 100644 (file)
@@ -14052,6 +14052,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
        const char *required;
        unsigned int required_profile = 0;
        struct ast_channel *c = NULL;           /* New channel */
        const char *required;
        unsigned int required_profile = 0;
        struct ast_channel *c = NULL;           /* New channel */
+       int reinvite = 0;
 
        /* Find out what they support */
        if (!p->sipoptions) {
 
        /* Find out what they support */
        if (!p->sipoptions) {
@@ -14354,6 +14355,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
                        else
                                ast_log(LOG_DEBUG, "Got a SIP re-transmit of INVITE for call %s\n", p->callid);
                }
                        else
                                ast_log(LOG_DEBUG, "Got a SIP re-transmit of INVITE for call %s\n", p->callid);
                }
+               reinvite = 1;
                c = p->owner;
        }
 
                c = p->owner;
        }
 
@@ -14525,7 +14527,8 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
                                } 
                                /* Respond to normal re-invite */
                                if (sendok)
                                } 
                                /* Respond to normal re-invite */
                                if (sendok)
-                                       transmit_response_with_sdp(p, "200 OK", req, ast_test_flag(req, SIP_PKT_IGNORE) ?  XMIT_UNRELIABLE : XMIT_CRITICAL);
+                                       /* If this is not a re-invite or something to ignore - it's critical */
+                                       transmit_response_with_sdp(p, "200 OK", req, (reinvite || ast_test_flag(req, SIP_PKT_IGNORE)) ?  XMIT_UNRELIABLE : XMIT_CRITICAL);
                        }
                        p->invitestate = INV_TERMINATED;
                        break;
                        }
                        p->invitestate = INV_TERMINATED;
                        break;