]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Add 416 response to OPTIONS packet.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 5 Apr 2011 16:19:35 +0000 (16:19 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 5 Apr 2011 16:19:35 +0000 (16:19 +0000)
RFC3261 Section 11.2 says the response code to an OPTIONS packet needs to
be the same as if it were an INVITE.

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

channels/chan_sip.c

index 7c11ba6d5c9b8dc989b26c460cb78e085845ce59..9a9fcc61d9c1c250f445edbc626cdc7ea51c42c8 100644 (file)
@@ -20700,6 +20700,8 @@ static int handle_request_notify(struct sip_pvt *p, struct sip_request *req, str
 */
 static int handle_request_options(struct sip_pvt *p, struct sip_request *req, struct ast_sockaddr *addr, const char *e)
 {
+       const char *msg;
+       enum sip_get_dest_result gotdest;
        int res;
 
        if (p->lastinvite) {
@@ -20731,24 +20733,37 @@ static int handle_request_options(struct sip_pvt *p, struct sip_request *req, st
        }
 
        /* must go through authentication before getting here */
-       res = (get_destination(p, req, NULL) == SIP_GET_DEST_EXTEN_FOUND ? 0 : -1);
+       gotdest = get_destination(p, req, NULL);
        build_contact(p);
 
        if (ast_strlen_zero(p->context))
                ast_string_field_set(p, context, sip_cfg.default_context);
 
-       if (ast_shutting_down())
-               transmit_response_with_allow(p, "503 Unavailable", req, 0);
-       else if (res < 0)
-               transmit_response_with_allow(p, "404 Not Found", req, 0);
-       else
-               transmit_response_with_allow(p, "200 OK", req, 0);
+       if (ast_shutting_down()) {
+               msg = "503 Unavailable";
+       } else {
+               msg = "404 Not Found";
+               switch (gotdest) {
+               case SIP_GET_DEST_INVALID_URI:
+                       msg = "416 Unsupported URI scheme";
+                       break;
+               case SIP_GET_DEST_PICKUP_EXTEN_FOUND:
+               case SIP_GET_DEST_REFUSED:
+               case SIP_GET_DEST_EXTEN_NOT_FOUND:
+                       //msg = "404 Not Found";
+                       break;
+               case SIP_GET_DEST_EXTEN_FOUND:
+                       msg = "200 OK";
+                       break;
+               }
+       }
+       transmit_response_with_allow(p, msg, req, 0);
 
        /* Destroy if this OPTIONS was the opening request, but not if
           it's in the middle of a normal call flow. */
        sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
 
-       return res;
+       return 0;
 }
 
 /*! \brief Handle the transfer part of INVITE with a replaces: header,