aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorautomerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-06 22:54:26 +0000
committerautomerge <automerge@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-06 22:54:26 +0000
commit91a0561ef49cbe23479928fcd3eba85b8fda28a9 (patch)
treed32b5faffc8eb1b5d5a7bae039d2bd6e6b9d1f8d
parent372cb67f0ca445caedb2d9d2185d115fc45fa098 (diff)
automerge commit
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@58118 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--channels/chan_sip.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 655f0e116..a6caf0bea 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -11192,10 +11192,23 @@ static int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req,
p->subscribed = CPIM_PIDF_XML; /* RFC 3863 format */
} else if (strstr(accept, "application/xpidf+xml")) {
p->subscribed = XPIDF_XML; /* Early pre-RFC 3863 format with MSN additions (Microsoft Messenger) */
+ } else if (ast_strlen_zero(accept)) {
+ if (p->subscribed == NONE) { /* if the subscribed field is not already set, and there is no accept header... */
+ transmit_response(p, "489 Bad Event", req);
+
+ ast_log(LOG_WARNING,"SUBSCRIBE failure: no Accept header: pvt: stateid: %d, laststate: %d, dialogver: %d, subscribecont: '%s'\n",
+ p->stateid, p->laststate, p->dialogver, p->subscribecontext);
+ ast_set_flag(p, SIP_NEEDDESTROY);
+ return 0;
+ }
+ /* if p->subscribed is non-zero, then accept is not obligatory; according to rfc 3265 section 3.1.3, at least.
+ so, we'll just let it ride, keeping the value from a previous subscription, and not abort the subscription */
} else {
/* Can't find a format for events that we know about */
- transmit_response(p, "489 Bad Event", req);
- ast_set_flag(p, SIP_NEEDDESTROY);
+ char mybuf[200];
+ snprintf(mybuf,sizeof(mybuf),"489 Bad Event (format %s)", accept);
+ transmit_response(p, mybuf, req);
+ ast_set_flag(p, SIP_NEEDDESTROY);
return 0;
}
if (option_debug > 2)