summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2011-04-05 16:21:28 +0000
committerRichard Mudgett <rmudgett@digium.com>2011-04-05 16:21:28 +0000
commitad30fa75692f92d72be81133de789c6a27d50233 (patch)
treee12642f2e0b1bf533443b76b5311d552ee382250 /channels
parente005f07b7d0ebdc7fa142dcf187885813af11c4d (diff)
Merged revisions 312889 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r312889 | rmudgett | 2011-04-05 11:19:35 -0500 (Tue, 05 Apr 2011) | 5 lines 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/trunk@312897 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_sip.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 93792a585..23566a023 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -21015,6 +21015,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) {
@@ -21046,24 +21048,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,