diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-04-10 13:43:54 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-04-10 13:43:54 +0000 |
commit | cd60e503a94891be4c611894a6ac6c5f13088f01 (patch) | |
tree | 5a8521a297d87588de2876f9b4822de6d3ad615c | |
parent | f61aeffd402993cbbf0ef5027ed15f1acf054eba (diff) |
Making sure that cancel destroy is only executed once...
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@18799 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 6a1c6c159..4df8cab40 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -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)) { |