]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix for 9220: Eyebeam cannot renew subscriptions for presence info. Reason: re-SUBSCR...
authorSteve Murphy <murf@digium.com>
Tue, 6 Mar 2007 22:52:52 +0000 (22:52 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 6 Mar 2007 22:52:52 +0000 (22:52 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@58115 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index a9d658b462a4d9ecbacdc5a4ebb51d7cd4f873d9..c9eefcdf8c101a7b96c0d1068af4cd2a0af6b902 100644 (file)
@@ -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)