Fix for 9220: Eyebeam cannot renew subscriptions for presence info. Reason: re-SUBSCRIBE requests don't include Accept headers, which the rfc says are optional (to put it tersely), (it uses MAY), and luckily, the sip_pvt struct has the format info stored, so we simply leave it if the format is set, and the accept header null.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58115 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2
Steve Murphy 18 years ago
parent 7d74199c6f
commit c7c8b06817

@ -11082,10 +11082,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)

Loading…
Cancel
Save