File mu-conference-tcl.patch of Package mu-conference
--- include/conference.h.orig
+++ include/conference.h
@@ -74,6 +74,7 @@
#define LOG_TEXT 0
#define LOG_XML 1
#define LOG_XHTML 2
+#define LOG_TCL 3
/* Role List */
--- src/Makefile.orig
+++ src/Makefile
@@ -2,7 +2,7 @@
OPTFLAGS=-O2 -Wall
CFLAGS:=$(CFLAGS) $(OPTFLAGS) -I../../lib -I../include `pkg-config --cflags glib-2.0` -D_JCOMP -D_REENTRANT -DLIBIDN
#CFLAGS:=$(CFLAGS) -O2 -Wall -I../../lib -I../include `pkg-config --cflags glib-2.0` -D_JCOMP -D_REENTRANT -DLIBIDN -DHAVE_MYSQL
-LIBS:=$(LIBS) -ljcomp -lm `pkg-config --libs glib-2.0` `pkg-config --libs gthread-2.0` -lexpat -lidn
+LIBS:=$(LIBS) -ljcomp -lm `pkg-config --libs glib-2.0` `pkg-config --libs gthread-2.0` -lexpat -lidn $(TCL_LIB_FLAG)
#LIBS:=$(LIBS) -ljcomp -lm `pkg-config --libs glib-2.0` `pkg-config --libs gthread-2.0` -lexpat -lidn `mysql_config --libs`
LDFLAGS:=-L.
--- src/conference_room.c.orig
+++ src/conference_room.c
@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA
*/
+#include <tcl.h>
#include "conference.h"
extern int deliver__flag;
@@ -50,7 +51,20 @@
return temp;
}
+static void con_room_log_xml(cnr room, char *nick, xmlnode xml)
+{
+ char *message;
+ if (xml == NULL) {
+ log_warn(NAME, "[%s] ERR: Aborting - NULL reference found - ", FZONE);
+ return;
+ }
+ /* the sender requested the message not to be logged */
+ if (xmlnode_get_tag(xml, "x?nolog=1")) return;
+
+ message = xmlnode_get_tag_data(xml, "body");
+ con_room_log(room, nick, message);
+}
/* Handles logging for each room, simply returning if logfile is not defined */
void con_room_log(cnr room, char *nick, char *message)
@@ -122,6 +136,18 @@
fprintf(logfile, "<span class=\"time\">%s</span> --- %s<br />\n", timestr, message);
}
}
+ else if(room->logformat == LOG_TCL) {
+ Tcl_Obj *objs[4];
+ Tcl_Obj *cmdline;
+
+ objs[0] = Tcl_NewStringObj("m", -1);
+ objs[1] = Tcl_NewStringObj(jutil_timestamp(), -1);
+ objs[2] = Tcl_NewStringObj(nick, -1);
+ objs[3] = Tcl_NewStringObj(message, -1);
+ cmdline = Tcl_NewListObj(4, objs);
+ fprintf(logfile, "%s\n", Tcl_GetStringFromObj(cmdline, NULL));
+ Tcl_DecrRefCount(cmdline);
+ }
else
{
if(nick)
@@ -227,6 +253,8 @@
spool_add(sp, ".xml");
else if(type == LOG_XHTML)
spool_add(sp, ".html");
+ else if(type == LOG_TCL)
+ spool_add(sp, ".tcl");
else
spool_add(sp, ".txt");
@@ -1138,7 +1166,7 @@
g_hash_table_foreach(room->local, con_room_sendwalk, (void*)jp->x);
/* log */
- con_room_log(room, from->localid->resource, xmlnode_get_tag_data(jp->x, "body"));
+ con_room_log_xml(room, from->localid->resource, jp->x);
/* Save from address */
if (cont == 0) {
@@ -1585,7 +1613,7 @@
log_debug(NAME,"[%s] Sending packet from room %s: %s", FZONE, jid_full(room->id), xmlnode2str(x));
/* log */
- con_room_log(room, NULL, xmlnode_get_tag_data(x, "body"));
+ con_room_log_xml(room, NULL, x);
xmlnode_put_attrib(x, "from", jid_full(room->id));
--- src/xdata.c.orig
+++ src/xdata.c
@@ -287,6 +287,19 @@
room->logformat = LOG_XHTML;
}
}
+ else if(j_strcmp(xmlnode_get_tag_data(xmlnode_get_tag(results,var),"value"), "tcl") == 0)
+ {
+ if(room->logfile != NULL && room->logformat != LOG_TCL)
+ {
+ fclose(room->logfile);
+ room->logformat = LOG_TCL;
+ con_room_log_new(room);
+ }
+ else
+ {
+ room->logformat = LOG_TCL;
+ }
+ }
else
{
if(room->logfile != NULL && room->logformat != LOG_TEXT)
@@ -555,6 +568,8 @@
xmlnode_insert_cdata(xmlnode_insert_tag(field, "value"),"xml", -1);
else if(room->logformat == LOG_XHTML)
xmlnode_insert_cdata(xmlnode_insert_tag(field, "value"),"xhtml", -1);
+ else if(room->logformat == LOG_TCL)
+ xmlnode_insert_cdata(xmlnode_insert_tag(field, "value"),"tcl", -1);
else
xmlnode_insert_cdata(xmlnode_insert_tag(field, "value"),"text", -1);
@@ -565,6 +580,9 @@
xmlnode_put_attrib(element, "label", "XHTML");
xmlnode_insert_cdata(xmlnode_insert_tag(element, "value"), "xhtml", -1);
element = xmlnode_insert_tag(field, "option");
+ xmlnode_put_attrib(element, "label", "Tcl Script");
+ xmlnode_insert_cdata(xmlnode_insert_tag(element, "value"), "tcl", -1);
+ element = xmlnode_insert_tag(field, "option");
xmlnode_put_attrib(element, "label", "Plain Text");
xmlnode_insert_cdata(xmlnode_insert_tag(element, "value"), "text", -1);
}
--- src/main.c.orig
+++ src/main.c
@@ -20,6 +20,7 @@
*/
+#include <tcl.h>
#include "jcomp.h"
#include "lib.h"
@@ -48,6 +49,8 @@
/* GThread *dthread; */ /* the packet delivery thread */
GMainLoop *gmain; /* the receive packet event loop */
+
+ Tcl_FindExecutable(argv[0]);
jcr = (jcr_instance)calloc(1, sizeof(_jcr_instance));