diff -Nru jabberd-2.0s2-orig/c2s/authreg_mysql.c jabberd-2.0s2/c2s/authreg_mysql.c --- jabberd-2.0s2-orig/c2s/authreg_mysql.c 2003-10-29 04:03:03.000000000 +0300 +++ jabberd-2.0s2/c2s/authreg_mysql.c 2004-03-10 22:58:41.000000000 +0300 @@ -489,6 +489,12 @@ mysql_close(conn); return 1; } + char sql[2049]; + sprintf(sql, "set character set utf8"); + if(mysql_query(conn, sql) != 0) { + log_write(ar->c2s->log, LOG_ERR, "mysql: set character set failed: %s", mysql_error(conn)); + } + mysqlcontext->conn = conn; diff -Nru jabberd-2.0s2-orig/sm/Makefile.am jabberd-2.0s2/sm/Makefile.am --- jabberd-2.0s2-orig/sm/Makefile.am 2003-10-29 04:03:04.000000000 +0300 +++ jabberd-2.0s2/sm/Makefile.am 2004-02-21 16:03:14.000000000 +0300 @@ -34,6 +34,7 @@ mod_vacation.c \ mod_validate.c \ mod_iq_last.c \ + mod_iq_logon.c \ mod_iq_private.c \ mod_iq_time.c \ mod_iq_vcard.c \ diff -Nru jabberd-2.0s2-orig/sm/Makefile.in jabberd-2.0s2/sm/Makefile.in --- jabberd-2.0s2-orig/sm/Makefile.in 2004-02-10 13:10:36.000000000 +0300 +++ jabberd-2.0s2/sm/Makefile.in 2004-02-21 16:55:57.000000000 +0300 @@ -140,6 +140,7 @@ mod_vacation.c \ mod_validate.c \ mod_iq_last.c \ + mod_iq_logon.c \ mod_iq_private.c \ mod_iq_time.c \ mod_iq_vcard.c \ @@ -173,6 +174,7 @@ mod_privacy.$(OBJEXT) mod_roster.$(OBJEXT) \ mod_session.$(OBJEXT) mod_vacation.$(OBJEXT) \ mod_validate.$(OBJEXT) mod_iq_last.$(OBJEXT) \ + mod_iq_logon.$(OBJEXT) \ mod_iq_private.$(OBJEXT) mod_iq_time.$(OBJEXT) \ mod_iq_vcard.$(OBJEXT) mod_iq_version.$(OBJEXT) \ mod_template_roster.$(OBJEXT) @@ -198,6 +200,7 @@ @AMDEP_TRUE@ ./$(DEPDIR)/mod_disco_publish.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/mod_echo.Po ./$(DEPDIR)/mod_help.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/mod_iq_last.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/mod_iq_logon.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/mod_iq_private.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/mod_iq_time.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/mod_iq_vcard.Po \ @@ -291,6 +294,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_echo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_iq_last.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_iq_logon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_iq_private.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_iq_time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_iq_vcard.Po@am__quote@ diff -Nru jabberd-2.0s2-orig/sm/mm.c jabberd-2.0s2/sm/mm.c --- jabberd-2.0s2-orig/sm/mm.c 2004-01-23 04:38:51.000000000 +0300 +++ jabberd-2.0s2/sm/mm.c 2004-02-21 16:04:44.000000000 +0300 @@ -48,6 +48,7 @@ extern int vacation_init(mod_instance_t); extern int validate_init(mod_instance_t); extern int iq_last_init(mod_instance_t); +extern int iq_logon_init(mod_instance_t); extern int iq_private_init(mod_instance_t); extern int iq_time_init(mod_instance_t); extern int iq_vcard_init(mod_instance_t); @@ -70,6 +71,7 @@ "vacation", "validate", "iq-last", + "iq-logon", "iq-private", "iq-time", "iq-vcard", @@ -94,6 +96,7 @@ vacation_init, validate_init, iq_last_init, + iq_logon_init, iq_private_init, iq_time_init, iq_vcard_init, diff -Nru jabberd-2.0s2-orig/sm/mod_iq_logon.c jabberd-2.0s2/sm/mod_iq_logon.c --- jabberd-2.0s2-orig/sm/mod_iq_logon.c 1970-01-01 03:00:00.000000000 +0300 +++ jabberd-2.0s2/sm/mod_iq_logon.c 2004-02-23 20:19:48.000000000 +0300 @@ -0,0 +1,48 @@ +#include "sm.h" + +/** @file sm/mod_iq_logon.c + * @brief last activity + * @author Dmitry Serov + * $Date: 2004/02/21 15:43:00 $ + * $Revision: 1.00 $ + */ + +static int _iq_logon_sess_start(mod_instance_t mi, sess_t sess) { + time_t t; + os_t os; + os_object_t o; + + /* store their logon time */ + t = time(NULL); + + os = os_new(); + o = os_object_new(os); + + os_object_put(o, "time", (void **) &t, os_type_INTEGER); + + storage_replace(sess->user->sm->st, "logon", jid_user(sess->jid), NULL, os); + + os_free(os); + + return 0; +} + +static void _iq_logon_user_delete(mod_instance_t mi, jid_t jid) { + log_debug(ZONE, "deleting logon time for %s", jid_user(jid)); + + storage_delete(mi->sm->st, "logon", jid_user(jid), NULL); +} + +int iq_logon_init(mod_instance_t mi, char *arg) { + module_t mod = mi->mod; + + if(mod->init) return 0; + + mod->sess_start = _iq_logon_sess_start; + mod->user_delete = _iq_logon_user_delete; + + /* startup time */ + mod->private = (void *) time(NULL); + + return 0; +} diff -Nru jabberd-2.0s2-orig/sm/storage_mysql.c jabberd-2.0s2/sm/storage_mysql.c --- jabberd-2.0s2-orig/sm/storage_mysql.c 2004-01-23 04:38:51.000000000 +0300 +++ jabberd-2.0s2/sm/storage_mysql.c 2004-02-13 09:53:34.000000000 +0300 @@ -555,6 +555,12 @@ mysql_close(conn); return 1; } + char sql[2049]; + sprintf(sql, "set character set utf8"); + if(mysql_query(conn, sql) != 0) { + log_write(drv->st->sm->log, LOG_ERR, "mysql: set character set failed: %s", mysql_error(conn)); + } + data = (drvdata_t) malloc(sizeof(struct drvdata_st)); memset(data, 0, sizeof(struct drvdata_st)); diff -Nru jabberd-2.0s2-orig/tools/db-setup.mysql jabberd-2.0s2/tools/db-setup.mysql --- jabberd-2.0s2-orig/tools/db-setup.mysql 2003-10-29 04:03:04.000000000 +0300 +++ jabberd-2.0s2/tools/db-setup.mysql 2004-03-10 23:10:03.000000000 +0300 @@ -42,6 +42,17 @@ `time` INT ); -- +-- Login times +-- used by: mod_iq_logon +-- +CREATE TABLE `logon` ( + `collection-owner` text NOT NULL, + `object-sequence` bigint(20) NOT NULL auto_increment, + `time` int(11) default NULL, + PRIMARY KEY (`collection-owner`(255)), + KEY `object-sequence` (`object-sequence`) ); + +-- -- Roster items -- Used by: mod_roster --