*
* Copyright (c) 2007-2010 by Art Cancro
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * 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.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *
+ *
*
*/
* If the client session has instant messages waiting, it outputs
* unsolicited XML stanzas containing them.
*/
-void xmpp_output_incoming_messages(void) {
-
+void xmpp_output_incoming_messages(void)
+{
+ struct CitContext *CCC = CC;
+ citxmpp *Xmpp = XMPP;
struct ExpressMessage *ptr;
- char xmlbuf1[4096];
- char xmlbuf2[4096];
- while (CC->FirstExpressMessage != NULL) {
+ while (CCC->FirstExpressMessage != NULL) {
begin_critical_section(S_SESSION_TABLE);
- ptr = CC->FirstExpressMessage;
- CC->FirstExpressMessage = CC->FirstExpressMessage->next;
+ ptr = CCC->FirstExpressMessage;
+ CCC->FirstExpressMessage = CCC->FirstExpressMessage->next;
end_critical_section(S_SESSION_TABLE);
- cprintf("<message to=\"%s\" from=\"%s\" type=\"chat\">",
- xmlesc(xmlbuf1, XMPP->client_jid, sizeof xmlbuf1),
- xmlesc(xmlbuf2, ptr->sender_email, sizeof xmlbuf2)
- );
+ XPrint(HKEY("message"), 0,
+ XCPROPERTY("type", "chat"),
+ XPROPERTY("to", Xmpp->client_jid, strlen(Xmpp->client_jid)),
+ XPROPERTY("from", ptr->sender_email, strlen(ptr->sender_email)),
+ TYPE_ARGEND);
+
if (ptr->text != NULL) {
striplt(ptr->text);
- cprintf("<body>%s</body>", xmlesc(xmlbuf1, ptr->text, sizeof xmlbuf1));
+ XPrint(HKEY("body"), XCLOSED,
+ XBODY(ptr->text, strlen(ptr->text)),
+ TYPE_ARGEND);
free(ptr->text);
}
- cprintf("</message>");
+ XPUT("</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 (!CC->logged_in) return;
+ if (!CCC->logged_in) return;
for (cptr = ContextList; cptr != NULL; cptr = cptr->next) {
if ( (cptr->logged_in)
}
if (recp) {
- PerformXmsgHooks(CC->user.fullname, CC->cs_inet_email, recp, message_body);
+ PerformXmsgHooks(CCC->user.fullname, CCC->cs_inet_email, recp, message_body);
}
free(XMPP->message_body);
XMPP->message_body = NULL;
XMPP->message_to[0] = 0;
- time(&CC->lastidle);
+ 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;
+}
+
+
+CTDL_MODULE_INIT(xmpp_message)
+{
+ if (!threading) {
+ AddXMPPEndHandler(HKEY("message"), xmpp_end_message, 0);
+ }
+ return "xmpp_message";
+}