XMPP: make logging configurable.
authorWilfried Goesgens <dothebart@citadel.org>
Sun, 29 Apr 2012 13:48:48 +0000 (15:48 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Sun, 29 Apr 2012 13:48:48 +0000 (15:48 +0200)
citadel/modules/xmpp/serv_xmpp.c
citadel/modules/xmpp/serv_xmpp.h
citadel/modules/xmpp/xmpp_presence.c
citadel/modules/xmpp/xmpp_query_namespace.c
citadel/modules/xmpp/xmpp_queue.c

index 86685664d5dc65a7b5db06a59683c081594d982e..374c4914277febee7937e90db62bb2708b22ab4e 100644 (file)
@@ -64,6 +64,8 @@
 
 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 <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\">"
@@ -473,14 +475,14 @@ 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("</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;
@@ -545,7 +547,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 +584,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 +616,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,6 +632,7 @@ 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);
index df1298c9d72b20ebe056f42461077875279d4d3a..c3281a5c486e21fe6039cfca737b2e234a9fbb33 100644 (file)
@@ -83,3 +83,16 @@ void xmpp_massacre_roster(void);
 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);
+
index f42d74f40b608cd99806790747325bac90ac9453..d4e69316ab80a8f8c7157f7e20983146ed2c50f1 100644 (file)
@@ -194,13 +194,13 @@ void xmpp_presence_notify(char *presence_jid, int event_type) {
                }
        }
 
-       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);
@@ -214,8 +214,8 @@ void xmpp_presence_notify(char *presence_jid, int event_type) {
        }
 
        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 */
        }
 
@@ -271,7 +271,7 @@ void xmpp_fetch_mortuary_backend(long msgnum, void *userdata) {
 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);
        }
 
index 161d306d39ac97b95b26f9ce14b4f05de0e5d630..cf6f423a56516cd392ce78ae9c79f93d486ff2f5 100644 (file)
@@ -88,7 +88,7 @@ void xmpp_iq_roster_query(void)
        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]);
                        }
                }
@@ -124,7 +124,7 @@ void xmpp_query_namespace(char *iq_id, char *iq_from, char *iq_to, char *query_x
                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.
@@ -162,9 +162,9 @@ void xmpp_query_namespace(char *iq_id, char *iq_from, char *iq_to, char *query_x
         */
 
        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\"/>"
index 530ea5a76942131f5b69dba7adfa563377380478..8cb5662d89f846728c2b53140692325e18553b79 100644 (file)
@@ -66,7 +66,7 @@ void xmpp_queue_event(int event_type, char *email_addr) {
        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);