From: Joshua Colp Date: Wed, 10 Oct 2007 14:28:18 +0000 (+0000) Subject: Add support for handling a 182 Queued response. X-Git-Tag: 1.4.13~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e568fc66d959fd38c07aaa6f473db749d84577a7;p=thirdparty%2Fasterisk.git Add support for handling a 182 Queued response. (closes issue #10924) Reported by: ramonpeek Patches: queued-182.diff uploaded by ramonpeek (license 266) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@85277 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 97528a2c24..9cf7fa47a1 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -11834,7 +11834,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru /* RFC3261 says we must treat every 1xx response (but not 100) that we don't recognize as if it was 183. */ - if (resp > 100 && resp < 200 && resp!=101 && resp != 180 && resp != 183) + if (resp > 100 && resp < 200 && resp!=101 && resp != 180 && resp != 182 && resp != 183) resp = 183; /* Any response between 100 and 199 is PROCEEDING */ @@ -11855,6 +11855,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru break; case 180: /* 180 Ringing */ + case 182: /* 182 Queued */ if (!ast_test_flag(req, SIP_PKT_IGNORE)) sip_cancel_destroy(p); if (!ast_test_flag(req, SIP_PKT_IGNORE) && p->owner) { @@ -11867,7 +11868,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, char *rest, stru p->invitestate = INV_EARLY_MEDIA; res = process_sdp(p, req); if (!ast_test_flag(req, SIP_PKT_IGNORE) && p->owner) { - /* Queue a progress frame only if we have SDP in 180 */ + /* Queue a progress frame only if we have SDP in 180 or 182 */ ast_queue_control(p->owner, AST_CONTROL_PROGRESS); } } @@ -12416,6 +12417,10 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_ if (sipmethod == SIP_INVITE) handle_response_invite(p, resp, rest, req, seqno); break; + case 182: /* 182 Queued */ + if (sipmethod == SIP_INVITE) + handle_response_invite(p, resp, rest, req, seqno); + break; case 200: /* 200 OK */ p->authtries = 0; /* Reset authentication counter */ if (sipmethod == SIP_MESSAGE || sipmethod == SIP_INFO) {