[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