From 91a0561ef49cbe23479928fcd3eba85b8fda28a9 Mon Sep 17 00:00:00 2001 From: automerge Date: Tue, 6 Mar 2007 22:54:26 +0000 Subject: automerge commit git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2-netsec@58118 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'channels') 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) -- cgit v1.2.3