/*
* XMPP (Jabber) service for the Citadel system
- * Copyright (c) 2007-2017 by Art Cancro and citadel.org
+ * Copyright (c) 2007-2018 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
#include "ctdl_module.h"
#include "serv_xmpp.h"
+/* uncomment for more verbosity - it will log all received XML tags */
+#define XMPP_XML_DEBUG
+
/* XML_StopParser is present in expat 2.x */
#if XML_MAJOR_VERSION > 1
#define HAVE_XML_STOPPARSER
struct xmpp_event *xmpp_queue = NULL;
-
-
#ifdef HAVE_XML_STOPPARSER
/* Stop the parser if an entity declaration is hit. */
static void xmpp_entity_declaration(void *userData, const XML_Char *entityName,
#endif
-
/*
* Given a source string and a target buffer, returns the string
* properly escaped for insertion into an XML stream. Returns a
return n;
}
+
char *xmlesc(char *buf, char *str, int bufsiz)
{
int IsUtf8Sequence;
strcpy(el, ++sep);
}
- /*
+#ifdef XMPP_XML_DEBUG
syslog(LOG_DEBUG, "xmpp: ELEMENT START: <%s>", el);
for (i=0; attr[i] != NULL; i+=2) {
syslog(LOG_DEBUG, "xmpp: Attribute '%s' = '%s'", attr[i], attr[i+1]);
}
- uncomment for more verbosity */
+#endif
if (!strcasecmp(el, "stream")) {
xmpp_stream_start(data, supplied_el, attr);
strcpy(el, ++sep);
}
- /*
+#ifdef XMPP_XML_DEBUG
syslog(LOG_DEBUG, "xmpp: ELEMENT END : <%s>", el);
if (XMPP->chardata_len > 0) {
syslog(LOG_DEBUG, "xmpp: chardata: %s", XMPP->chardata);
}
- uncomment for more verbosity */
+#endif
if (!strcasecmp(el, "resource")) {
if (XMPP->chardata_len > 0) {
- safestrncpy(XMPP->iq_client_resource, XMPP->chardata,
- sizeof XMPP->iq_client_resource);
+ safestrncpy(XMPP->iq_client_resource, XMPP->chardata, sizeof XMPP->iq_client_resource);
striplt(XMPP->iq_client_resource);
}
}
else if (!strcasecmp(el, "username")) { /* NON SASL ONLY */
if (XMPP->chardata_len > 0) {
- safestrncpy(XMPP->iq_client_username, XMPP->chardata,
- sizeof XMPP->iq_client_username);
+ safestrncpy(XMPP->iq_client_username, XMPP->chardata, sizeof XMPP->iq_client_username);
striplt(XMPP->iq_client_username);
}
}
else if (!strcasecmp(el, "password")) { /* NON SASL ONLY */
if (XMPP->chardata_len > 0) {
- safestrncpy(XMPP->iq_client_password, XMPP->chardata,
- sizeof XMPP->iq_client_password);
+ safestrncpy(XMPP->iq_client_password, XMPP->chardata, sizeof XMPP->iq_client_password);
striplt(XMPP->iq_client_password);
}
}
* Query on a namespace
*/
if (!IsEmptyStr(XMPP->iq_query_xmlns)) {
- xmpp_query_namespace(XMPP->iq_id, XMPP->iq_from,
- XMPP->iq_to, XMPP->iq_query_xmlns);
+ xmpp_query_namespace(XMPP->iq_id, XMPP->iq_from, XMPP->iq_to, XMPP->iq_query_xmlns);
}
/*
else {
cprintf("<iq type=\"error\" id=\"%s\">", xmlesc(xmlbuf, XMPP->iq_id, sizeof xmlbuf));
- cprintf("<error>Don't know howto do '%s'!</error>", xmlesc(xmlbuf, XMPP->iq_type, sizeof xmlbuf));
+ cprintf("<error>Don't know how to do '%s'!</error>", xmlesc(xmlbuf, XMPP->iq_type, sizeof xmlbuf));
cprintf("</iq>");
+ syslog(LOG_DEBUG, "XMPP: don't know how to do iq_type='%s' with iq_query_xmlns='%s'", XMPP->iq_type, XMPP->iq_query_xmlns);
}
/* Now clear these fields out so they don't get used by a future stanza */
}
-
/*
* Here's where our XMPP session begins its happy day.
*/