*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3.
- *
- *
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
- *
- *
- *
- *
*/
#include "sysdep.h"
#include <pwd.h>
#include <errno.h>
#include <sys/types.h>
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-
+#include <time.h>
#include <sys/wait.h>
#include <string.h>
#include <limits.h>
#include "support.h"
#include "config.h"
#include "internet_addressing.h"
-#include "md5.h"
#include "ctdl_module.h"
#include "serv_xmpp.h"
* If the client session has instant messages waiting, it outputs
* unsolicited XML stanzas containing them.
*/
-void xmpp_output_incoming_messages(void)
-{
- struct CitContext *CCC = CC;
- citxmpp *Xmpp = XMPP;
+void xmpp_output_incoming_messages(void) {
+
struct ExpressMessage *ptr;
+ char xmlbuf1[4096];
+ char xmlbuf2[4096];
- while (CCC->FirstExpressMessage != NULL) {
+ while (CC->FirstExpressMessage != NULL) {
begin_critical_section(S_SESSION_TABLE);
- ptr = CCC->FirstExpressMessage;
- CCC->FirstExpressMessage = CCC->FirstExpressMessage->next;
+ ptr = CC->FirstExpressMessage;
+ CC->FirstExpressMessage = CC->FirstExpressMessage->next;
end_critical_section(S_SESSION_TABLE);
-
- XPUT("<message type=\"chat\" to=\"");
- XPutProp(Xmpp->client_jid, strlen(Xmpp->client_jid));
- XPUT("\" from=\"");
- XPutProp(ptr->sender_email, strlen(ptr->sender_email));
- XPUT("\" >");
-
+ cprintf("<message to=\"%s\" from=\"%s\" type=\"chat\">",
+ xmlesc(xmlbuf1, XMPP->client_jid, sizeof xmlbuf1),
+ xmlesc(xmlbuf2, ptr->sender_email, sizeof xmlbuf2)
+ );
if (ptr->text != NULL) {
striplt(ptr->text);
- XPUT("<body>");
- XPutBody(ptr->text, strlen(ptr->text));
- XPUT("</body>");
+ cprintf("<body>%s</body>", xmlesc(xmlbuf1, ptr->text, sizeof xmlbuf1));
free(ptr->text);
}
- XPUT("</message>");
+ cprintf("</message>");
free(ptr);
}
- XUnbuffer();
}
+
/*
* Client is sending a message.
*/
void xmpp_send_message(char *message_to, char *message_body) {
- struct CitContext *CCC = CC;
char *recp = NULL;
struct CitContext *cptr;
if (message_body == NULL) return;
if (message_to == NULL) return;
if (IsEmptyStr(message_to)) return;
- if (!CCC->logged_in) return;
+ if (!CC->logged_in) return;
for (cptr = ContextList; cptr != NULL; cptr = cptr->next) {
if ( (cptr->logged_in)
&& (cptr->can_receive_im)
- && (!strcasecmp(cptr->cs_inet_email, message_to))
+ && (!strcasecmp(cptr->cs_principal_id, message_to))
) {
recp = cptr->user.fullname;
}
}
if (recp) {
- PerformXmsgHooks(CCC->user.fullname, CCC->cs_inet_email, recp, message_body);
+ PerformXmsgHooks(CC->user.fullname, CC->cs_principal_id, recp, message_body);
}
free(XMPP->message_body);
XMPP->message_body = NULL;
XMPP->message_to[0] = 0;
- time(&CCC->lastidle);
-}
-void xmpp_end_message(void *data, const char *supplied_el, const char **attr)
-{
- xmpp_send_message(XMPP->message_to, XMPP->message_body);
- XMPP->html_tag_level = 0;
+ time(&CC->lastidle);
}
-
-
-CTDL_MODULE_INIT(xmpp_message)
-{
- if (!threading) {
- AddXMPPEndHandler(HKEY("message"), xmpp_end_message, 0);
- }
- return "xmpp_message";
-}