]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Making sure that cancel destroy is only executed once...
authorOlle Johansson <oej@edvina.net>
Mon, 10 Apr 2006 13:43:54 +0000 (13:43 +0000)
committerOlle Johansson <oej@edvina.net>
Mon, 10 Apr 2006 13:43:54 +0000 (13:43 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@18799 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 6a1c6c1591b260ccfa3d9db54a473fc71aa3f192..4df8cab40501ef3fdfdb17c33959a1407a2dc140 100644 (file)
@@ -1405,10 +1405,11 @@ static int sip_scheddestroy(struct sip_pvt *p, int ms)
 /*! \brief Cancel destruction of SIP dialog */
 static int sip_cancel_destroy(struct sip_pvt *p)
 {
-       if (p->autokillid > -1)
+       if (p->autokillid > -1) {
                ast_sched_del(sched, p->autokillid);
-       append_history(p, "CancelDestroy", "");
-       p->autokillid = -1;
+               append_history(p, "CancelDestroy", "");
+               p->autokillid = -1;
+       }
        return 0;
 }
 
@@ -9561,10 +9562,12 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
 
        switch (resp) {
        case 100:       /* Trying */
-               sip_cancel_destroy(p);
+               if (!ignore)
+                       sip_cancel_destroy(p);
                break;
        case 180:       /* 180 Ringing */
-               sip_cancel_destroy(p);
+               if (!ignore)
+                       sip_cancel_destroy(p);
                if (!ignore && p->owner) {
                        ast_queue_control(p->owner, AST_CONTROL_RINGING);
                        if (p->owner->_state != AST_STATE_UP)
@@ -9579,7 +9582,8 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
                }
                break;
        case 183:       /* Session progress */
-               sip_cancel_destroy(p);
+               if (!ignore)
+                       sip_cancel_destroy(p);
                /* Ignore 183 Session progress without SDP */
                if (!strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
                        process_sdp(p, req);
@@ -9590,11 +9594,11 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru
                }
                break;
        case 200:       /* 200 OK on invite - someone's answering our call */
-               sip_cancel_destroy(p);
+               if (!ignore)
+                       sip_cancel_destroy(p);
                p->authtries = 0;
-               if (!strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
+               if (!strcasecmp(get_header(req, "Content-Type"), "application/sdp")) 
                        process_sdp(p, req);
-               }
 
                /* Parse contact header for continued conversation */
                /* When we get 200 OK, we know which device (and IP) to contact for this call */
@@ -10221,8 +10225,9 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
                        /* Fallthrough */
                default:        /* Errors without handlers */
                        if ((resp >= 100) && (resp < 200)) {
-                               if (sipmethod == SIP_INVITE) {  /* re-invite */
-                                       sip_cancel_destroy(p);
+                               if (sipmethod == SIP_INVITE) {  /* re-invite */
+                                       if (!ignore)
+                                               sip_cancel_destroy(p);
                                }
                        }
                        if ((resp >= 300) && (resp < 700)) {