Merged revisions 85277 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Wed, 10 Oct 2007 14:30:05 +0000 (14:30 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 10 Oct 2007 14:30:05 +0000 (14:30 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r85277 | file | 2007-10-10 11:28:18 -0300 (Wed, 10 Oct 2007) | 6 lines

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/trunk@85278 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 5f613ef..040f008 100644 (file)
@@ -13100,7 +13100,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 */
@@ -13121,6 +13121,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 (!req->ignore)
                        sip_cancel_destroy(p);
                if (!req->ignore && p->owner) {
@@ -13133,7 +13134,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 (!req->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);
                        }
                }
@@ -13686,6 +13687,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) {