X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fserv_xmpp.c;h=e23ede887bd2bddf2190356afa4d37c41f584d0a;hb=af679dc8a1dc74b7e4b204ccc1b6e187299ab896;hp=733c2363c6d6324e42aefd859fa99356444c4b31;hpb=0428f9c321bffd2afbd5c41c1170b74d240a5c64;p=citadel.git
diff --git a/citadel/modules/xmpp/serv_xmpp.c b/citadel/modules/xmpp/serv_xmpp.c
index 733c2363c..e23ede887 100644
--- a/citadel/modules/xmpp/serv_xmpp.c
+++ b/citadel/modules/xmpp/serv_xmpp.c
@@ -1,6 +1,6 @@
/*
* XMPP (Jabber) service for the Citadel system
- * Copyright (c) 2007-2011 by Art Cancro
+ * Copyright (c) 2007-2015 by Art Cancro and citadel.org
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -57,13 +57,15 @@
#include "ctdl_module.h"
#include "serv_xmpp.h"
-#if XML_MAJOR_VERSION > 0
/* XML_StopParser is present in expat 2.x */
+#if XML_MAJOR_VERSION > 1
#define HAVE_XML_STOPPARSER
#endif
struct xmpp_event *xmpp_queue = NULL;
+int XMPPSrvDebugEnable = 0;
+
#ifdef HAVE_XML_STOPPARSER
@@ -74,7 +76,7 @@ static void xmpp_entity_declaration(void *userData, const XML_Char *entityName,
const XML_Char *systemId, const XML_Char *publicId,
const XML_Char *notationName
) {
- syslog(LOG_WARNING, "Illegal entity declaration encountered; stopping parser.");
+ XMPPM_syslog(LOG_WARNING, "Illegal entity declaration encountered; stopping parser.");
XML_StopParser(XMPP->xp, XML_FALSE);
}
#endif
@@ -203,9 +205,9 @@ void xmpp_xml_start(void *data, const char *supplied_el, const char **attr) {
}
/*
- syslog(LOG_DEBUG, "XMPP ELEMENT START: <%s>\n", el);
+ XMPP_syslog(LOG_DEBUG, "XMPP ELEMENT START: <%s>\n", el);
for (i=0; attr[i] != NULL; i+=2) {
- syslog(LOG_DEBUG, " Attribute '%s' = '%s'\n", attr[i], attr[i+1]);
+ XMPP_syslog(LOG_DEBUG, " Attribute '%s' = '%s'\n", attr[i], attr[i+1]);
}
uncomment for more verbosity */
@@ -275,9 +277,9 @@ void xmpp_xml_end(void *data, const char *supplied_el) {
}
/*
- syslog(LOG_DEBUG, "XMPP ELEMENT END : <%s>\n", el);
+ XMPP_syslog(LOG_DEBUG, "XMPP ELEMENT END : <%s>\n", el);
if (XMPP->chardata_len > 0) {
- syslog(LOG_DEBUG, " chardata: %s\n", XMPP->chardata);
+ XMPP_syslog(LOG_DEBUG, " chardata: %s\n", XMPP->chardata);
}
uncomment for more verbosity */
@@ -338,9 +340,9 @@ void xmpp_xml_end(void *data, const char *supplied_el) {
* Unknown query ... return the XML equivalent of a blank stare
*/
else {
- syslog(LOG_DEBUG,
- "Unknown query <%s> - returning \n",
- el
+ XMPP_syslog(LOG_DEBUG,
+ "Unknown query <%s> - returning \n",
+ el
);
cprintf("", xmlesc(xmlbuf, XMPP->iq_id, sizeof xmlbuf));
cprintf(""
@@ -473,14 +475,22 @@ void xmpp_xml_end(void *data, const char *supplied_el) {
}
else if (!strcasecmp(el, "stream")) {
- syslog(LOG_DEBUG, "XMPP client shut down their stream\n");
+ XMPPM_syslog(LOG_DEBUG, "XMPP client shut down their stream\n");
xmpp_massacre_roster();
cprintf("\n");
CC->kill_me = KILLME_CLIENT_LOGGED_OUT;
}
+ else if (!strcasecmp(el, "query")) {
+ /* already processed , no further action needed here */
+ }
+
+ else if (!strcasecmp(el, "bind")) {
+ /* already processed , no further action needed here */
+ }
+
else {
- syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el);
+ XMPP_syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el);
}
XMPP->chardata_len = 0;
@@ -545,7 +555,7 @@ void xmpp_greeting(void) {
XMPP->xp = XML_ParserCreateNS("UTF-8", ':');
if (XMPP->xp == NULL) {
- syslog(LOG_ALERT, "Cannot create XML parser!\n");
+ XMPPM_syslog(LOG_ALERT, "Cannot create XML parser!\n");
CC->kill_me = KILLME_XML_PARSER;
return;
}
@@ -582,7 +592,7 @@ void xmpp_command_loop(void) {
XML_Parse(XMPP->xp, ChrPtr(stream_input), rc, 0);
}
else {
- syslog(LOG_ERR, "XMPP: client disconnected: ending session.\n");
+ XMPPM_syslog(LOG_ERR, "client disconnected: ending session.\n");
CC->kill_me = KILLME_CLIENT_DISCONNECTED;
}
FreeStrBuf(&stream_input);
@@ -614,6 +624,10 @@ void xmpp_logout_hook(void) {
}
+void LogXMPPSrvDebugEnable(const int n)
+{
+ XMPPSrvDebugEnable = n;
+}
const char *CitadelServiceXMPP="XMPP";
extern void xmpp_cleanup_events(void);
CTDL_MODULE_INIT(xmpp)
@@ -626,11 +640,12 @@ CTDL_MODULE_INIT(xmpp)
xmpp_async_loop,
CitadelServiceXMPP
);
- CtdlRegisterSessionHook(xmpp_cleanup_function, EVT_STOP);
- CtdlRegisterSessionHook(xmpp_login_hook, EVT_LOGIN);
- CtdlRegisterSessionHook(xmpp_logout_hook, EVT_LOGOUT);
- CtdlRegisterSessionHook(xmpp_login_hook, EVT_UNSTEALTH);
- CtdlRegisterSessionHook(xmpp_logout_hook, EVT_STEALTH);
+ CtdlRegisterDebugFlagHook(HKEY("serv_xmpp"), LogXMPPSrvDebugEnable, &XMPPSrvDebugEnable);
+ CtdlRegisterSessionHook(xmpp_cleanup_function, EVT_STOP, PRIO_STOP + 70);
+ CtdlRegisterSessionHook(xmpp_login_hook, EVT_LOGIN, PRIO_LOGIN + 90);
+ CtdlRegisterSessionHook(xmpp_logout_hook, EVT_LOGOUT, PRIO_LOGOUT + 90);
+ CtdlRegisterSessionHook(xmpp_login_hook, EVT_UNSTEALTH, PRIO_UNSTEALTH + 1);
+ CtdlRegisterSessionHook(xmpp_logout_hook, EVT_STEALTH, PRIO_STEALTH + 1);
CtdlRegisterCleanupHook(xmpp_cleanup_events);
}