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.


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@312889 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2011-04-05 16:19:35 +00:00
parent 0acdb60dbd
commit ddc3fac28b

View 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,