struct xmpp_event *xmpp_queue = NULL;
+int XMPPSrvDebugEnable = 0;
+
#ifdef HAVE_XML_STOPPARSER
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
}
/*
- 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 */
}
/*
- 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 */
* Unknown query ... return the XML equivalent of a blank stare
*/
else {
- syslog(LOG_DEBUG,
- "Unknown query <%s> - returning <service-unavailable/>\n",
- el
+ XMPP_syslog(LOG_DEBUG,
+ "Unknown query <%s> - returning <service-unavailable/>\n",
+ el
);
cprintf("<iq type=\"error\" id=\"%s\">", xmlesc(xmlbuf, XMPP->iq_id, sizeof xmlbuf));
cprintf("<error code=\"503\" type=\"cancel\">"
}
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("</stream>\n");
CC->kill_me = KILLME_CLIENT_LOGGED_OUT;
}
else {
- syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el);
+ XMPP_syslog(LOG_DEBUG, "Ignoring unknown tag <%s>\n", el);
}
XMPP->chardata_len = 0;
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;
}
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);
}
+void LogXMPPSrvDebugEnable(const int n)
+{
+ XMPPSrvDebugEnable = n;
+}
const char *CitadelServiceXMPP="XMPP";
extern void xmpp_cleanup_events(void);
CTDL_MODULE_INIT(xmpp)
xmpp_async_loop,
CitadelServiceXMPP
);
+ CtdlRegisterDebugFlagHook(HKEY("serv_xmpp"), LogXMPPSrvDebugEnable, &XMPPSrvDebugEnable);
CtdlRegisterSessionHook(xmpp_cleanup_function, EVT_STOP);
CtdlRegisterSessionHook(xmpp_login_hook, EVT_LOGIN);
CtdlRegisterSessionHook(xmpp_logout_hook, EVT_LOGOUT);
void xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster(void);
int xmpp_is_visible(struct CitContext *from, struct CitContext *to_whom);
char *xmlesc(char *buf, char *str, int bufsiz);
+
+extern int XMPPSrvDebugEnable;
+
+#define DBGLOG(LEVEL) if ((LEVEL != LOG_DEBUG) || (XMPPSrvDebugEnable != 0))
+
+#define XMPP_syslog(LEVEL, FORMAT, ...) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "XMPP: " FORMAT, __VA_ARGS__)
+
+#define XMPPM_syslog(LEVEL, FORMAT) \
+ DBGLOG(LEVEL) syslog(LEVEL, \
+ "XMPP: " FORMAT);
+
}
}
- syslog(LOG_DEBUG, "%d sessions for <%s> are now visible to session %d\n",
- visible_sessions, presence_jid, CC->cs_pid);
+ XMPP_syslog(LOG_DEBUG, "%d sessions for <%s> are now visible to session %d\n",
+ visible_sessions, presence_jid, CC->cs_pid);
if ( (event_type == XMPP_EVT_LOGIN) && (visible_sessions == 1) ) {
- syslog(LOG_DEBUG, "Telling session %d that <%s> logged in\n",
- CC->cs_pid, presence_jid);
+ XMPP_syslog(LOG_DEBUG, "Telling session %d that <%s> logged in\n",
+ CC->cs_pid, presence_jid);
/* Do an unsolicited roster update that adds a new contact. */
assert(which_cptr_is_relevant >= 0);
}
if (visible_sessions == 0) {
- syslog(LOG_DEBUG, "Telling session %d that <%s> logged out\n",
- CC->cs_pid, presence_jid);
+ XMPP_syslog(LOG_DEBUG, "Telling session %d that <%s> logged out\n",
+ CC->cs_pid, presence_jid);
xmpp_destroy_buddy(presence_jid, 0); /* non aggressive presence update */
}
HashList *xmpp_fetch_mortuary(void) {
HashList *mortuary = NewHash(1, NULL);
if (!mortuary) {
- syslog(LOG_ALERT, "NewHash() failed!\n");
+ XMPPM_syslog(LOG_ALERT, "NewHash() failed!\n");
return(NULL);
}
if (cptr) {
for (i=0; i<nContexts; i++) {
if (xmpp_is_visible(&cptr[i], CC)) {
- syslog(LOG_DEBUG, "Rosterizing %s\n", cptr[i].user.fullname);
+ XMPP_syslog(LOG_DEBUG, "Rosterizing %s\n", cptr[i].user.fullname);
xmpp_roster_item(&cptr[i]);
}
}
supported_namespace = 1;
}
- syslog(LOG_DEBUG, "xmpp_query_namespace(%s, %s, %s, %s)\n", iq_id, iq_from, iq_to, query_xmlns);
+ XMPP_syslog(LOG_DEBUG, "xmpp_query_namespace(%s, %s, %s, %s)\n", iq_id, iq_from, iq_to, query_xmlns);
/*
* Beginning of query result.
*/
else {
- syslog(LOG_DEBUG,
- "Unknown query namespace '%s' - returning <service-unavailable/>\n",
- query_xmlns
+ XMPP_syslog(LOG_DEBUG,
+ "Unknown query namespace '%s' - returning <service-unavailable/>\n",
+ query_xmlns
);
cprintf("<error code=\"503\" type=\"cancel\">"
"<service-unavailable xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>"
int purged_something = 0;
struct CitContext *cptr;
- syslog(LOG_DEBUG, "xmpp_queue_event(%d, %s)\n", event_type, email_addr);
+ XMPP_syslog(LOG_DEBUG, "xmpp_queue_event(%d, %s)\n", event_type, email_addr);
/* Purge events more than a minute old */
begin_critical_section(S_XMPP_QUEUE);