[asterisk-commits] rmudgett: branch 1.8 r312889 - /branches/1.8/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Apr 5 11:19:42 CDT 2011


Author: rmudgett
Date: Tue Apr  5 11:19:35 2011
New Revision: 312889

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=312889
Log:
Add 416 response to OPTIONS packet.

RFC3261 Section 11.2 says the response code to an OPTIONS packet needs to
be the same as if it were an INVITE.

Modified:
    branches/1.8/channels/chan_sip.c

Modified: branches/1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_sip.c?view=diff&rev=312889&r1=312888&r2=312889
==============================================================================
--- branches/1.8/channels/chan_sip.c (original)
+++ branches/1.8/channels/chan_sip.c Tue Apr  5 11:19:35 2011
@@ -20700,6 +20700,8 @@
 */
 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 @@
 	}
 
 	/* 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,




More information about the asterisk-commits mailing list