multiple fixes
authorpk910 <philipp@zoelle1.de>
Sun, 12 Feb 2012 09:44:58 +0000 (10:44 +0100)
committerpk910 <philipp@zoelle1.de>
Sun, 12 Feb 2012 11:32:02 +0000 (12:32 +0100)
80 files changed:
Makefile.am
src/ChanNode.c
src/ConfigParser.c
src/ConfigParser.h
src/DBHelper.c
src/HandleInfoHandler.c
src/HandleInfoHandler.h
src/IRCEvents.c
src/IRCParser.c
src/QServer.c
src/UserNode.h
src/bots.c
src/main.c
src/modcmd.c
src/modules.c
src/modules.h
src/modules/NeonHelp.mod/bot_NeonHelp.c
src/modules/NeonHelp.mod/cmd_neonhelp.c
src/modules/NeonHelp.mod/cmd_neonhelp.h
src/modules/NeonServ.mod/cmd_neonserv.h
src/modules/NeonServ.mod/cmd_neonserv_access.c
src/modules/NeonServ.mod/cmd_neonserv_addban.c
src/modules/NeonServ.mod/cmd_neonserv_addtimeban.c
src/modules/NeonServ.mod/cmd_neonserv_adduser.c
src/modules/NeonServ.mod/cmd_neonserv_assignrank.c
src/modules/NeonServ.mod/cmd_neonserv_ban.c
src/modules/NeonServ.mod/cmd_neonserv_chanservsync.c
src/modules/NeonServ.mod/cmd_neonserv_clvl.c
src/modules/NeonServ.mod/cmd_neonserv_dehalfop.c
src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c
src/modules/NeonServ.mod/cmd_neonserv_deluser.c
src/modules/NeonServ.mod/cmd_neonserv_deop.c
src/modules/NeonServ.mod/cmd_neonserv_deopall.c
src/modules/NeonServ.mod/cmd_neonserv_devoiceall.c
src/modules/NeonServ.mod/cmd_neonserv_extscript.c
src/modules/NeonServ.mod/cmd_neonserv_giveowner.c
src/modules/NeonServ.mod/cmd_neonserv_halfop.c
src/modules/NeonServ.mod/cmd_neonserv_halfopall.c
src/modules/NeonServ.mod/cmd_neonserv_invite.c
src/modules/NeonServ.mod/cmd_neonserv_kick.c
src/modules/NeonServ.mod/cmd_neonserv_kickban.c
src/modules/NeonServ.mod/cmd_neonserv_mode.c
src/modules/NeonServ.mod/cmd_neonserv_myaccess.c
src/modules/NeonServ.mod/cmd_neonserv_nicklist.c
src/modules/NeonServ.mod/cmd_neonserv_noregister.c
src/modules/NeonServ.mod/cmd_neonserv_op.c
src/modules/NeonServ.mod/cmd_neonserv_opall.c
src/modules/NeonServ.mod/cmd_neonserv_peek.c
src/modules/NeonServ.mod/cmd_neonserv_rename.c
src/modules/NeonServ.mod/cmd_neonserv_resync.c
src/modules/NeonServ.mod/cmd_neonserv_suspend.c
src/modules/NeonServ.mod/cmd_neonserv_trim.c
src/modules/NeonServ.mod/cmd_neonserv_unban.c
src/modules/NeonServ.mod/cmd_neonserv_unsuspend.c
src/modules/NeonServ.mod/cmd_neonserv_unvisited.c
src/modules/NeonServ.mod/cmd_neonserv_up.c
src/modules/NeonServ.mod/cmd_neonserv_users.c
src/modules/NeonServ.mod/cmd_neonserv_voice.c
src/modules/NeonServ.mod/cmd_neonserv_voiceall.c
src/modules/NeonServ.mod/cmd_neonserv_wipeinfo.c
src/modules/NeonServ.mod/event_neonserv_ctcp.c
src/modules/NeonServ.mod/event_neonserv_join.c
src/modules/NeonServ.mod/event_neonserv_kick.c
src/modules/NeonServ.mod/event_neonserv_mode.c
src/modules/NeonServ.mod/event_neonserv_notice.c
src/modules/NeonServ.mod/event_neonserv_topic.c
src/modules/NeonSpam.mod/bot_NeonSpam.c
src/modules/NeonSpam.mod/cmd_neonspam.c
src/modules/NeonSpam.mod/cmd_neonspam.h
src/modules/NeonSpam.mod/event_neonspam_chanmsg.c
src/modules/NeonSpam.mod/event_neonspam_join.c
src/modules/global.mod/cmd_global_meminfo.c
src/modules/global.mod/cmd_global_netinfo.c
src/modules/global.mod/cmd_global_register.c
src/modules/global.mod/cmd_global_setaccess.c
src/modules/global.mod/cmd_global_setbot.c
src/modules/global.mod/cmd_global_version.c
src/modules/module.h
src/version.h
src/version.sh

index 5c9fc521f5882cc6275c9ab67775e3aaba1b1fa3..43a21228d1a426a2a00a961a82bef5471bdaa9ec 100644 (file)
@@ -153,13 +153,13 @@ neonserv_SOURCES = src/version.c \
       src/timeq.c \
       src/DBHelper.c \
       src/IRCQueue.c \
-      src/commands.c \
       src/bots.c \
       src/ConfigParser.c \
       src/QServer.c \
+      src/modules.c \
       src/memoryDebug.c
 
-neonserv_LDADD = $(MYSQL_LIBS) $(WINSOCK_LIBS)
+neonserv_LDADD = $(MYSQL_LIBS) $(WINSOCK_LIBS) -ldl
 
 install-exec-local:
        $(INSTALL) -d -m 755 $(prefix)
index 528d441d59c7c0cd97ea33e06024b1c341d7ed84..1431597a3c09be1198e27e5000652e6492c63544 100644 (file)
@@ -20,7 +20,6 @@
 #include "BanNode.h"
 #include "modcmd.h"
 #include "ModeNode.h"
-#include "bot_NeonSpam.h"
 #include "IRCEvents.h"
 
 static struct ChanNode **chanList;
@@ -231,8 +230,6 @@ void freeChanNode(struct ChanNode* chan) {
     freeModeNode(chan->modes);
     if(chan->bans)
         removeChannelBans(chan);
-    if(chan->spam_settings)
-        freeNeonSpamSettings(chan->spam_settings);
     free(chan);
 }
 
index 8ce6cde088e3758123259395873bc9a522510bee..bbf479131800b177e0331cc9828f4c4791057d89 100644 (file)
@@ -299,6 +299,52 @@ char *get_string_field(char *field_path) {
         return NULL;
 }
 
+char **get_all_fieldnames(char *block_path) {
+    struct ConfigEntry *centry = root_entry;
+    char *a, *b = block_path;
+    struct ConfigEntry *subentry;
+    while((a = strstr(b, ".")) && centry) {
+        if(centry->type == ENTRYTYPE_BLOCK) {
+            int found = 0;
+            for(subentry = centry->value; subentry; subentry = subentry->next) {
+                if(!stricmplen(subentry->name, b, a-b)) {
+                    centry = subentry;
+                    found = 1;
+                    break;
+                }
+            }
+            if(!found)
+                return NULL;
+        } else
+            return NULL;
+        b = a+1;
+    }
+    if(centry->type == ENTRYTYPE_BLOCK) {
+        int found = 0;
+        for(subentry = centry->value; subentry; subentry = subentry->next) {
+            if(!stricmp(subentry->name, b)) {
+                centry = subentry;
+                found = 1;
+                break;
+            }
+        }
+        if(!found)
+            return NULL;
+    } else
+        return NULL;
+    if(centry->type != ENTRYTYPE_BLOCK) return NULL;
+    int count = 0;
+    for(subentry = centry->value; subentry; subentry = subentry->next) {
+        count++;
+    }
+    char **fieldnames = calloc(count+1, sizeof(char *));
+    count = 0;
+    for(subentry = centry->value; subentry; subentry = subentry->next) {
+        fieldnames[count++] = subentry->name;
+    }
+    return fieldnames;
+}
+
 void free_loaded_config() {
     if(root_entry) {
         free_entry_rekursiv(root_entry, 1);
index fb529da2eeef41bc2e0a8f0e34fd3e185cc7fbe5..ea5a1b566aa56113e2cef338782a283fd3f0f966 100644 (file)
@@ -23,6 +23,7 @@
 int loadConfig(const char *filename);
 /* MODULAR ACCESSIBLE */ int get_int_field(char *field_path);
 /* MODULAR ACCESSIBLE */ char *get_string_field(char *field_path);
+char **get_all_fieldnames(char *block_path);
 void free_loaded_config();
 #endif
 #endif
index 9fa6c1cad7a2a7ba460ea3899f14fafde6d9bc95..20037156cab4819c9c22bd14572393f29170f8e9 100644 (file)
@@ -287,7 +287,7 @@ static int event_user_registered(struct UserNode *old_user, struct UserNode *new
         }
         cache->new_user = new_user;
         cache->oldauth = strdup(oldauth);
-        lookup_authname(newauth, event_user_registered_auth_lookup, cache);
+        lookup_authname(newauth, 0, event_user_registered_auth_lookup, cache);
     }
     return 1;
 }
@@ -343,6 +343,6 @@ void deleteUser(int userid) {
 }
 
 void init_DBHelper() {
-    bind_registered(event_user_registered);
+    bind_registered(event_user_registered, 0);
 }
 
index 6e5415ffe40381af7b894b72cc37f97d512a156a..c6a2efe808d2447330084c5396584613f64c2c9b 100644 (file)
@@ -21,6 +21,7 @@
 #include "ChanNode.h"
 #include "IRCEvents.h"
 #include "tools.h"
+#include "modules.h"
 
 #define AUTHSERV_NICK "AuthServ"
 
@@ -29,6 +30,7 @@
 struct HandleInfoQueueEntry {
     char *auth;
     void *callback[MAXCALLBACKS];
+    int module_id[MAXCALLBACKS];
     void *data[MAXCALLBACKS];
     
     struct HandleInfoQueueEntry *next;
@@ -79,7 +81,7 @@ void clear_handleinfoqueue(struct ClientSocket *client) {
     DESYNCHRONIZE(cache_sync);
 }
 
-void lookup_authname(char *auth, authlookup_callback_t callback, void *data) {
+void lookup_authname(char *auth, int module_id, authlookup_callback_t callback, void *data) {
     struct ClientSocket *bot;
     struct HandleInfoQueueEntry* entry;
     for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
@@ -89,6 +91,7 @@ void lookup_authname(char *auth, authlookup_callback_t callback, void *data) {
                 for(i = 1; i < MAXCALLBACKS; i++) {
                     if(!entry->callback[i]) {
                         entry->callback[i] = callback;
+                        entry->module_id[i] = module_id;
                         entry->data[i] = data;
                         return;
                     }
@@ -103,6 +106,7 @@ void lookup_authname(char *auth, authlookup_callback_t callback, void *data) {
     int i;
     entry->auth = strdup(auth);
     entry->callback[0] = callback;
+    entry->module_id[0] = module_id;
     for(i = 1; i < MAXCALLBACKS; i++)
         entry->callback[i] = NULL;
     entry->data[0] = data;
@@ -224,7 +228,8 @@ static void recv_notice(struct UserNode *user, struct UserNode *target, char *me
             for(i = 0; i < MAXCALLBACKS; i++) {
                 callback = entry->callback[i];
                 if(!callback) break;
-                callback(entry->auth, exists, registered, entry->data[i]);
+                if(!entry->module_id[i] || module_loaded(entry->module_id[i]))
+                    callback(entry->auth, exists, registered, entry->data[i]);
             }
             free(entry->auth);
             free(entry);
@@ -233,7 +238,7 @@ static void recv_notice(struct UserNode *user, struct UserNode *target, char *me
 }
 
 void init_handleinfohandler() {
-    bind_privnotice(recv_notice);
+    bind_privnotice(recv_notice, 0);
 }
 
 void free_handleinfohandler() {
index c44b9a15e3a766691e9bca65f806c51a4b4b9c17..e77c4940ec2e263c5774f28292dc04e5f8f0ac2c 100644 (file)
@@ -27,7 +27,7 @@ typedef AUTHLOOKUP_CALLBACK(authlookup_callback_t);
 
 #ifndef DND_FUNCTIONS
 void clear_handleinfoqueue(struct ClientSocket *client);
-/* MODULAR ACCESSIBLE */ void lookup_authname(char *auth, authlookup_callback_t callback, void *data);
+/* MODULAR ACCESSIBLE */ void lookup_authname(char *auth, int module_id, authlookup_callback_t callback, void *data);
 void init_handleinfohandler();
 void free_handleinfohandler();
 #endif
index 9e0222bcbb1afaabc915d63045ae40a3d30acd7b..b0cbd02a722f955a7276f3687f0f8629d7b2d58d 100644 (file)
@@ -104,7 +104,7 @@ int bind_##NAME(FUNCTYPE *func, int module_id) { \
             return 0; \
         } \
         cbind->func = func; \
-        cbind->module_id = module_id \
+        cbind->module_id = module_id; \
         cbind->next = binds[TYPE]; \
         binds[TYPE] = cbind; \
         return 1; \
index b6fc71e8bffbf930c67f872dd691c7ffb256692e..17aeef45ed25ecfaf89d056c2b94d39c4214f497 100644 (file)
@@ -214,7 +214,7 @@ static IRC_CMD(raw_join) {
         //request member list
         chan->chanbot = user;
         struct ChanUser *chanuser = addChanUser(chan, user); //it must be a bot
-        get_userlist_with_invisible(chan, got_channel_userlist, chanuser);
+        get_userlist_with_invisible(chan, 0, got_channel_userlist, chanuser);
         putsock(client, "MODE %s", chan->name);
         putsock(client, "MODE %s +b", chan->name);
     } else if(!isUserOnChan(user, chan) && ((chan->flags & CHANFLAG_RECEIVED_USERLIST) || isBot(user))) {
index f8a98a11c04bf0022f7cc5f50624671bdf094c56..795650b4264133e5ac47aa68e90d4170f01a7106 100644 (file)
@@ -291,7 +291,7 @@ static void qserver_parse_U(struct QServerClient *client, char **argv, int argc)
     }
     client->references++;
     client->flags |= QSERVER_FLAG_IN_USE;
-    get_userauth(cuser, qserver_parse_U_async, client);
+    get_userauth(cuser, 0, qserver_parse_U_async, client);
 }
 
 static USERAUTH_CALLBACK(qserver_parse_U_async) {
@@ -348,7 +348,7 @@ static void qserver_parse_ACU(struct QServerClient *client, char **argv, int arg
     if(argc > 1 && !stricmp(argv[1], "1")) {
         client->references++;
         client->flags |= QSERVER_FLAG_IN_USE;
-        get_userlist_if_invisible(chan, qserver_parse_ACU_async, client);
+        get_userlist_if_invisible(chan, 0, qserver_parse_ACU_async, client);
         return;
     }
     char tmpStr[6];
index fb1afc1567c7ce8fd7613de1c6dcdf81fe394c46..59865967bae3c5fa23c41d876205726d7f77377c 100644 (file)
@@ -73,7 +73,7 @@ void free_UserNode();
 /* MODULAR ACCESSIBLE */ int getUserCount();
 struct UserNode* addUser(const char *nick);
 struct UserNode* addUserMask(const char *mask);
-struct UserNode* createTempUser(const char *nick);
+/* MODULAR ACCESSIBLE */ struct UserNode* createTempUser(const char *nick);
 struct UserNode* createTempUserMask(const char *mask);
 int renameUser(struct UserNode* user, const char *new_nick);
 void delUser(struct UserNode* user, int freeUser);
index 994dbbac5d0153ac8db931ab105c1b3e00a4248e..76fd9e6277cc16c2911db3705acde2f3a606c71f 100644 (file)
 #include "modcmd.h"
 #include "DBHelper.h"
 
-#include "bot_NeonServ.h"
-#include "bot_NeonSpam.h"
-#include "bot_DummyServ.h"
-#include "bot_NeonHelp.h"
-
 struct cmd_bot_alias {
     int botid;
     char *alias;
@@ -100,7 +95,7 @@ static void zero_bots_trigger_callback(int clientid, struct ChanNode *chan, char
 void init_bots() {
     set_bot_alias(0, "0");
     start_zero_bots();
-    set_trigger_callback(0, zero_bots_trigger_callback);
+    set_trigger_callback(0, 0, zero_bots_trigger_callback);
     
     MYSQL_RES *res;
     MYSQL_ROW row;
@@ -111,7 +106,7 @@ void init_bots() {
     while ((row = mysql_fetch_row(res)) != NULL) {
         if(atol(row[1]) - time(0) > 0) {
             sprintf(nameBuf, "ban_%s", row[0]);
-            timeq_add_name(nameBuf, atol(row[1]) - time(0), channel_ban_timeout, strdup(row[0]));
+            timeq_add_name(nameBuf, atol(row[1]) - time(0), 0, channel_ban_timeout, strdup(row[0]));
         } else {
             //timed out
             printf_mysql_query("DELETE FROM `bans` WHERE `ban_id` = '%s'", row[0]);
index 0ca3d31ea190c1be70efb3f6eded83e96dfa43d9..74fd93c0261b95c2d029fc95a75b0075fcaa55d5 100644 (file)
 #include "ModeNode.h"
 #include "IRCQueue.h"
 #include "DBHelper.h"
-#include "commands.h"
 #include "ConfigParser.h"
 #include "ssl.h"
 #include "QServer.h"
 #include "version.h"
+#include "modules.h"
 
 time_t start_time;
 static int running, hard_restart;
@@ -282,7 +282,7 @@ main:
        init_modcmd();
     init_handleinfohandler();
     init_tools();
-    
+    loadModules();
     init_bots();
     init_DBHelper();
     qserver_init();
@@ -457,7 +457,7 @@ TIMEQ_CALLBACK(main_checkauths) {
             if ((row = mysql_fetch_row(res)) != NULL) {
                 lastcheck = atoi(row[1]);
                 if(!lastcheck || unixtime - lastcheck >= min_unckecked) {
-                    lookup_authname(row[0], main_checkauths_callback, NULL);
+                    lookup_authname(row[0], 0, main_checkauths_callback, NULL);
                 } else 
                     next_call = 300;
             }
index 7ba0b939d6cae97eba0645fade114475474accfd..0bfe56dd3ce951e534d8296f75d9e050db43e6c8 100644 (file)
@@ -369,7 +369,7 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s
                 data->args_buffer = args_buffer;
                 data->cbind = cbind;
                 data->textclient = tmp_text_client;
-                get_userauth(user, command_checked_auth, data);
+                get_userauth(user, 0, command_checked_auth, data);
                 return;
             } else
                 handle_command_async(client, user, chan, sent_chan, cbind, argv, argc);
@@ -827,10 +827,10 @@ struct ClientSocket *getTextBot() {
 
 void init_modcmd() {
     cmd_binds = calloc(27, sizeof(*cmd_binds));
-    bind_chanmsg(got_chanmsg);
-    bind_privmsg(got_privmsg);
+    bind_chanmsg(got_chanmsg, 0);
+    bind_privmsg(got_privmsg, 0);
     register_default_language_table(msgtab);
-    register_command(0, "linker", modcmd_linker, 0, 0, 0, 0); //fake command for subcommands
+    register_command(0, "linker", 0, modcmd_linker, 0, 0, 0, 0); //fake command for subcommands
 }
 
 void free_modcmd() {
index 0c2034e3bfdf9032ae79e346a844d8302b0473bb..b8d3fec91cec76eb27d3d540531fd2e87fe5a95d 100644 (file)
@@ -15,6 +15,7 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>. 
  */
 #include "modules.h"
+#include <dlfcn.h>
 
 /* 000-011 */ #include "main.h"
 /* 012     */ #include "BanNode.h"
 /* 137-142 */ #include "mysqlConn.h"
 /* 143-149 */ #include "timeq.h"
 /* 150-169 */ #include "tools.h"
-/* 170-178 */ #include "UserNode.h"
-/* 179     */ #include "version.h"
-/* 180-182 */ #include "WHOHandler.h"
+/* 170-180 */ #include "UserNode.h"
+/* 181-183 */ #include "WHOHandler.h"
+/* 184-188 */ #include "version.h"
 
-void **global_functions = {
-/* 000 */ getStartTime,
-/* 001 */ getRunningThreads,
-/* 002 */ exit_daemon,
-/* 003 */ stricmp,
-/* 004 */ stricmplen,
-/* 005 */ restart_process,
-/* 006 */ cleanup,
-/* 007 */ restart_bot,
-/* 008 */ stop_bot,
-/* 009 */ reload_config,
-/* 010 */ putlog,
+#define Function void *
+
+void *global_functions[] = {
+/* 000 */ (Function) getStartTime,
+/* 001 */ (Function) getRunningThreads,
+/* 002 */ (Function) exit_daemon,
+/* 003 */ (Function) stricmp,
+/* 004 */ (Function) stricmplen,
+/* 005 */ (Function) restart_process,
+/* 006 */ (Function) cleanup,
+/* 007 */ (Function) restart_bot,
+/* 008 */ (Function) stop_bot,
+/* 009 */ (Function) reload_config,
+/* 010 */ (Function) putlog,
 #ifdef HAVE_THREADS
-/* 011 */ getCurrentThreadID,
+/* 011 */ (Function) getCurrentThreadID,
 #else
-/* 011 */ NULL,
+/* 011 */ (Function) NULL,
 #endif
-/* 012 */ getMatchingChannelBan,
-/* 013 */ getChannelBot,
-/* 014 */ requestOp,
-/* 015 */ channel_ban_timeout,
-/* 016 */ general_event_privctcp,
-/* 017 */ set_bot_alias,
-/* 018 */ resolve_botid,
-/* 019 */ resolve_botalias,
-/* 020 */ is_valid_chan,
-/* 021 */ getAllChans,
-/* 022 */ getChanByName,
-/* 023 */ getChannelCount,
-/* 024 */ getChanUserCount,
-/* 025 */ getChanBanCount,
-/* 026 */ isUserOnChan,
-/* 027 */ getChanUser,
-/* 028 */ getChannelUsers,
-/* 029 */ getUserChannels,
-/* 030 */ create_socket,
-/* 031 */ connect_socket,
-/* 032 */ close_socket,
-/* 033 */ disconnect_socket,
-/* 034 */ write_socket,
-/* 035 */ putsock,
-/* 036 */ getBots,
-/* 037 */ get_int_field,
-/* 038 */ get_string_field,
-/* 039 */ _loadUserSettings,
-/* 040 */ isGodMode,
-/* 041 */ getChanDefault,
-/* 042 */ getChannelAccess,
-/* 043 */ checkChannelAccess,
-/* 044 */ _loadChannelSettings,
-/* 045 */ isUserProtected,
-/* 046 */ getBanAffectingMask,
-/* 047 */ renameAccount,
-/* 048 */ deleteUser,
-/* 049 */ logEvent,
-/* 050 */ lookup_authname,
-/* 051 */ bind_join,
-/* 052 */ unbind_join,
-/* 053 */ bind_nick,
-/* 054 */ unbind_nick,
-/* 055 */ bind_part,
-/* 056 */ unbind_part,
-/* 057 */ bind_quit,
-/* 058 */ unbind_quit,
-/* 059 */ bind_kick,
-/* 060 */ unbind_kick,
-/* 061 */ bind_topic,
-/* 062 */ unbind_topic,
-/* 063 */ bind_mode,
-/* 064 */ unbind_mode,
-/* 065 */ bind_chanmsg,
-/* 066 */ unbind_chanmsg,
-/* 067 */ bind_privmsg,
-/* 068 */ unbind_privmsg,
-/* 069 */ bind_channotice,
-/* 070 */ unbind_channotice,
-/* 071 */ bind_privnotice,
-/* 072 */ unbind_privnotice,
-/* 073 */ bind_chanctcp,
-/* 074 */ unbind_chanctcp,
-/* 075 */ bind_privctcp,
-/* 076 */ unbind_privctcp,
-/* 077 */ bind_invite,
-/* 078 */ unbind_invite,
-/* 079 */ bind_raw,
-/* 080 */ unbind_raw,
-/* 081 */ bind_bot_ready,
-/* 082 */ unbind_bot_ready,
-/* 083 */ bind_registered,
-/* 084 */ unbind_registered,
-/* 085 */ bind_freeuser,
-/* 086 */ unbind_freeuser,
-/* 087 */ bind_freechan,
-/* 088 */ unbind_freechan,
-/* 089 */ reply,
-/* 090 */ merge_argv,
-/* 091 */ merge_argv_char,
-/* 092 */ get_language_by_tag,
-/* 093 */ get_language_by_name,
-/* 094 */ get_default_language,
-/* 095 */ load_language,
-/* 096 */ register_default_language_table,
-/* 097 */ get_language_string,
-/* 098 */ build_language_string,
+/* 012 */ (Function) getMatchingChannelBan,
+/* 013 */ (Function) getChannelBot,
+/* 014 */ (Function) requestOp,
+/* 015 */ (Function) channel_ban_timeout,
+/* 016 */ (Function) general_event_privctcp,
+/* 017 */ (Function) set_bot_alias,
+/* 018 */ (Function) resolve_botid,
+/* 019 */ (Function) resolve_botalias,
+/* 020 */ (Function) is_valid_chan,
+/* 021 */ (Function) getAllChans,
+/* 022 */ (Function) getChanByName,
+/* 023 */ (Function) getChannelCount,
+/* 024 */ (Function) getChanUserCount,
+/* 025 */ (Function) getChanBanCount,
+/* 026 */ (Function) isUserOnChan,
+/* 027 */ (Function) getChanUser,
+/* 028 */ (Function) getChannelUsers,
+/* 029 */ (Function) getUserChannels,
+/* 030 */ (Function) create_socket,
+/* 031 */ (Function) connect_socket,
+/* 032 */ (Function) close_socket,
+/* 033 */ (Function) disconnect_socket,
+/* 034 */ (Function) write_socket,
+/* 035 */ (Function) putsock,
+/* 036 */ (Function) getBots,
+/* 037 */ (Function) get_int_field,
+/* 038 */ (Function) get_string_field,
+/* 039 */ (Function) _loadUserSettings,
+/* 040 */ (Function) isGodMode,
+/* 041 */ (Function) getChanDefault,
+/* 042 */ (Function) getChannelAccess,
+/* 043 */ (Function) checkChannelAccess,
+/* 044 */ (Function) _loadChannelSettings,
+/* 045 */ (Function) isUserProtected,
+/* 046 */ (Function) getBanAffectingMask,
+/* 047 */ (Function) renameAccount,
+/* 048 */ (Function) deleteUser,
+/* 049 */ (Function) logEvent,
+/* 050 */ (Function) lookup_authname,
+/* 051 */ (Function) bind_join,
+/* 052 */ (Function) unbind_join,
+/* 053 */ (Function) bind_nick,
+/* 054 */ (Function) unbind_nick,
+/* 055 */ (Function) bind_part,
+/* 056 */ (Function) unbind_part,
+/* 057 */ (Function) bind_quit,
+/* 058 */ (Function) unbind_quit,
+/* 059 */ (Function) bind_kick,
+/* 060 */ (Function) unbind_kick,
+/* 061 */ (Function) bind_topic,
+/* 062 */ (Function) unbind_topic,
+/* 063 */ (Function) bind_mode,
+/* 064 */ (Function) unbind_mode,
+/* 065 */ (Function) bind_chanmsg,
+/* 066 */ (Function) unbind_chanmsg,
+/* 067 */ (Function) bind_privmsg,
+/* 068 */ (Function) unbind_privmsg,
+/* 069 */ (Function) bind_channotice,
+/* 070 */ (Function) unbind_channotice,
+/* 071 */ (Function) bind_privnotice,
+/* 072 */ (Function) unbind_privnotice,
+/* 073 */ (Function) bind_chanctcp,
+/* 074 */ (Function) unbind_chanctcp,
+/* 075 */ (Function) bind_privctcp,
+/* 076 */ (Function) unbind_privctcp,
+/* 077 */ (Function) bind_invite,
+/* 078 */ (Function) unbind_invite,
+/* 079 */ (Function) bind_raw,
+/* 080 */ (Function) unbind_raw,
+/* 081 */ (Function) bind_bot_ready,
+/* 082 */ (Function) unbind_bot_ready,
+/* 083 */ (Function) bind_registered,
+/* 084 */ (Function) unbind_registered,
+/* 085 */ (Function) bind_freeuser,
+/* 086 */ (Function) unbind_freeuser,
+/* 087 */ (Function) bind_freechan,
+/* 088 */ (Function) unbind_freechan,
+/* 089 */ (Function) reply,
+/* 090 */ (Function) merge_argv,
+/* 091 */ (Function) merge_argv_char,
+/* 092 */ (Function) get_language_by_tag,
+/* 093 */ (Function) get_language_by_name,
+/* 094 */ (Function) get_default_language,
+/* 095 */ (Function) load_language,
+/* 096 */ (Function) register_default_language_table,
+/* 097 */ (Function) get_language_string,
+/* 098 */ (Function) build_language_string,
 #ifdef ENABLE_MEMORY_DEBUG
-/* 099 */ xmalloc,
-/* 100 */ xcalloc,
-/* 101 */ xstrdup,
-/* 102 */ xfree,
+/* 099 */ (Function) xmalloc,
+/* 100 */ (Function) xcalloc,
+/* 101 */ (Function) xstrdup,
+/* 102 */ (Function) xfree,
 #else
-/* 099 */ NULL,
-/* 100 */ NULL,
-/* 101 */ NULL,
-/* 102 */ NULL,
+/* 099 */ (Function) NULL,
+/* 100 */ (Function) NULL,
+/* 101 */ (Function) NULL,
+/* 102 */ (Function) NULL,
 #endif
-/* 103 */ getMemoryInfoFiles,
-/* 104 */ freeMemoryInfoFiles,
-/* 105 */ getMemoryInfoLines,
-/* 106 */ freeMemoryInfoLines,
-/* 107 */ get_botwise_prefered_bot,
-/* 108 */ register_command,
-/* 109 */ set_trigger_callback,
-/* 110 */ flush_trigger_cache,
-/* 111 */ changeBotwiseChannelTrigger,
-/* 112 */ bind_botwise_cmd_to_function,
-/* 113 */ bind_botwise_cmd_to_command,
-/* 114 */ unbind_botwise_cmd,
-/* 115 */ unbind_botwise_allcmd,
-/* 116 */ bind_botwise_set_parameters,
-/* 117 */ bind_botwise_set_global_access,
-/* 118 */ bind_botwise_set_channel_access,
-/* 119 */ bind_botwise_set_bind_flags,
-/* 120 */ find_botwise_cmd_binding,
-/* 121 */ bind_botwise_unbound_required_functions,
-/* 122 */ find_cmd_function,
-/* 123 */ getTextBot,
-/* 124 */ register_command_alias,
-/* 125 */ getAllBinds,
-/* 126 */ createModeNode,
-/* 127 */ freeModeNode,
-/* 128 */ isModeSet,
-/* 129 */ isModeAffected,
-/* 130 */ getModeValue,
-/* 131 */ getModeType,
-/* 132 */ parseModes,
-/* 133 */ parseModeString,
-/* 134 */ parseMode,
-/* 135 */ getModeString,
-/* 136 */ getFullModeString,
-/* 137 */ mysql_use,
-/* 138 */ mysql_free,
-/* 139 */ printf_mysql_query,
-/* 140 */ printf_long_mysql_query,
-/* 141 */ escape_string,
-/* 142 */ get_mysql_conn,
-/* 143 */ timeq_add,
-/* 144 */ timeq_uadd,
-/* 145 */ timeq_add_name,
-/* 146 */ timeq_uadd_name,
-/* 147 */ timeq_del,
-/* 148 */ timeq_del_name,
-/* 149 */ timeq_name_exists,
-/* 150 */ match,
-/* 151 */ table_init,
-/* 152 */ table_add,
-/* 153 */ table_change,
-/* 154 */ table_change_field,
-/* 155 */ table_set_bold,
-/* 156 */ table_end,
-/* 157 */ table_free,
-/* 158 */ timeToStr,
-/* 159 */ strToTime,
-/* 160 */ initModeBuffer,
-/* 161 */ modeBufferSet,
-/* 162 */ flushModeBuffer,
-/* 163 */ freeModeBuffer,
-/* 164 */ is_ircmask,
-/* 165 */ generate_banmask,
-/* 166 */ make_banmask,
-/* 167 */ isFakeHost,
-/* 168 */ mask_match,
-/* 169 */ crc32,
-/* 170 */ is_valid_nick,
-/* 171 */ getUserByNick,
-/* 172 */ getUserByMask,
-/* 173 */ countUsersWithHost,
-/* 174 */ getAuthFakehost,
-/* 175 */ searchUserByNick,
-/* 176 */ getAllUsers,
-/* 177 */ getUsersWithAuth,
-/* 178 */ getUserCount,
-/* 179 */ get_userlist,
-/* 180 */ _get_userlist_with_invisible,
-/* 181 */ get_userauth,
-/* 182 */ &compilation,
-/* 183 */ &creation,
-/* 184 */ &revision,
-/* 185 */ &codelines,
-/* 186 */ &patchlevel
+/* 103 */ (Function) getMemoryInfoFiles,
+/* 104 */ (Function) freeMemoryInfoFiles,
+/* 105 */ (Function) getMemoryInfoLines,
+/* 106 */ (Function) freeMemoryInfoLines,
+/* 107 */ (Function) get_botwise_prefered_bot,
+/* 108 */ (Function) register_command,
+/* 109 */ (Function) set_trigger_callback,
+/* 110 */ (Function) flush_trigger_cache,
+/* 111 */ (Function) changeBotwiseChannelTrigger,
+/* 112 */ (Function) bind_botwise_cmd_to_function,
+/* 113 */ (Function) bind_botwise_cmd_to_command,
+/* 114 */ (Function) unbind_botwise_cmd,
+/* 115 */ (Function) unbind_botwise_allcmd,
+/* 116 */ (Function) bind_botwise_set_parameters,
+/* 117 */ (Function) bind_botwise_set_global_access,
+/* 118 */ (Function) bind_botwise_set_channel_access,
+/* 119 */ (Function) bind_botwise_set_bind_flags,
+/* 120 */ (Function) find_botwise_cmd_binding,
+/* 121 */ (Function) bind_botwise_unbound_required_functions,
+/* 122 */ (Function) find_cmd_function,
+/* 123 */ (Function) getTextBot,
+/* 124 */ (Function) register_command_alias,
+/* 125 */ (Function) getAllBinds,
+/* 126 */ (Function) createModeNode,
+/* 127 */ (Function) freeModeNode,
+/* 128 */ (Function) isModeSet,
+/* 129 */ (Function) isModeAffected,
+/* 130 */ (Function) getModeValue,
+/* 131 */ (Function) getModeType,
+/* 132 */ (Function) parseModes,
+/* 133 */ (Function) parseModeString,
+/* 134 */ (Function) parseMode,
+/* 135 */ (Function) getModeString,
+/* 136 */ (Function) getFullModeString,
+/* 137 */ (Function) mysql_use,
+/* 138 */ (Function) mysql_free,
+/* 139 */ (Function) printf_mysql_query,
+/* 140 */ (Function) printf_long_mysql_query,
+/* 141 */ (Function) escape_string,
+/* 142 */ (Function) get_mysql_conn,
+/* 143 */ (Function) timeq_add,
+/* 144 */ (Function) timeq_uadd,
+/* 145 */ (Function) timeq_add_name,
+/* 146 */ (Function) timeq_uadd_name,
+/* 147 */ (Function) timeq_del,
+/* 148 */ (Function) timeq_del_name,
+/* 149 */ (Function) timeq_name_exists,
+/* 150 */ (Function) match,
+/* 151 */ (Function) table_init,
+/* 152 */ (Function) table_add,
+/* 153 */ (Function) table_change,
+/* 154 */ (Function) table_change_field,
+/* 155 */ (Function) table_set_bold,
+/* 156 */ (Function) table_end,
+/* 157 */ (Function) table_free,
+/* 158 */ (Function) timeToStr,
+/* 159 */ (Function) strToTime,
+/* 160 */ (Function) initModeBuffer,
+/* 161 */ (Function) modeBufferSet,
+/* 162 */ (Function) flushModeBuffer,
+/* 163 */ (Function) freeModeBuffer,
+/* 164 */ (Function) is_ircmask,
+/* 165 */ (Function) generate_banmask,
+/* 166 */ (Function) make_banmask,
+/* 167 */ (Function) isFakeHost,
+/* 168 */ (Function) mask_match,
+/* 169 */ (Function) crc32,
+/* 170 */ (Function) is_valid_nick,
+/* 171 */ (Function) getUserByNick,
+/* 172 */ (Function) getUserByMask,
+/* 173 */ (Function) countUsersWithHost,
+/* 174 */ (Function) getAuthFakehost,
+/* 175 */ (Function) searchUserByNick,
+/* 176 */ (Function) getAllUsers,
+/* 177 */ (Function) getUsersWithAuth,
+/* 178 */ (Function) getUserCount,
+/* 179 */ (Function) createTempUser,
+/* 180 */ (Function) createTempUserMask,
+/* 181 */ (Function) get_userlist,
+/* 182 */ (Function) _get_userlist_with_invisible,
+/* 183 */ (Function) get_userauth,
+/* 184 */ (Function) get_compilation,
+/* 185 */ (Function) get_creation,
+/* 186 */ (Function) get_revision,
+/* 187 */ (Function) get_codelines,
+/* 188 */ (Function) get_patchlevel
 };
 
 #define MODINFO_STATE_STARTED 0x01
@@ -258,21 +263,35 @@ struct ModuleInfo {
     void *loopfunc;
     void *stopfunc;
     struct ModuleInfo *next;
-}
+};
 
 static int module_id_counter = 1;
 static struct ModuleInfo *modules = NULL;
 
 static void unregister_module_hooks(int module_id);
 
+void loadModules() {
+    char **modulelist = get_all_fieldnames("modules");
+    int i = 0;
+    while(*modulelist[i]) {
+        loadModule(modulelist[i]);
+        i++;
+    }
+    start_modules();
+}
+
 int loadModule(char *name) {
     char fname[256];
     #ifndef WIN32
-    sprintf(fname, "%s.so", name);
+    sprintf(fname, "%s.a", name);
     void* module = dlopen(fname, RTLD_LAZY);
     if(!module) {
-        putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.", name, fname);
-        return 0;
+        sprintf(fname, ".libs/%s.a", name);
+        module = dlopen(fname, RTLD_LAZY);
+        if(!module) {
+            putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.\n", name, fname);
+            return 0;
+        }
     }
     void* initfunc = dlsym(module, "init_module");
     void* startfunc = dlsym(module, "start_module");
@@ -283,7 +302,7 @@ int loadModule(char *name) {
     sprintf(fname, "%s.dll", name);
     HMODULE module = LoadLibrary(fname);
     if(!module) {
-        putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.", name, fname);
+        putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.\n", name, fname);
         return 0;
     }
     FARPROC initfunc = GetProcAddress(module, "init_module");
@@ -293,19 +312,19 @@ int loadModule(char *name) {
     FARPROC modversion = GetProcAddress(module, "modversion");
     #endif
     if(!startfunc || !loopfunc || !stopfunc || !modversion) {
-        putlog(LOGLEVEL_ERROR, "Error loading module '%s': required symbols not found.", name);
+        putlog(LOGLEVEL_ERROR, "Error loading module '%s': required symbols not found.\n", name);
         return 0;
     }
     int version = ((int (*)(void)) modversion)();
     if(version != MODULE_VERSION) {
-        putlog(LOGLEVEL_ERROR, "Error loading module '%s': version mismatch ('%d' main code, '%d' module)", name, MODULE_VERSION, version);
+        putlog(LOGLEVEL_ERROR, "Error loading module '%s': version mismatch ('%d' main code, '%d' module)\n", name, MODULE_VERSION, version);
         return 0;
     }
     //start module
     int errid;
     int module_id = module_id_counter++;
     if((errid = ((int (*)(void **, int)) initfunc)(global_functions, module_id))) {
-        putlog(LOGLEVEL_ERROR, "Error loading module '%s': module reported error (errid: %d)", name, errid);
+        putlog(LOGLEVEL_ERROR, "Error loading module '%s': module reported error (errid: %d)\n", name, errid);
         return 0;
     }
     struct ModuleInfo *modinfo = malloc(sizeof(*modinfo));
@@ -337,27 +356,30 @@ static void closemodule(HMODULE module) {
 int reload_module(char *name) {
     struct ModuleInfo *old_modinfo, *old_prev = NULL;
     for(old_modinfo = modules; old_modinfo; old_modinfo = old_modinfo->next) {
-        if(old_prev)
-            old_prev->next = old_modinfo->next;
-        else
-            modules = old_modinfo->next;
-        unregister_module_hooks(old_modinfo->module_id);
-        ((void (*)(void)) old_modinfo->stopfunc)(MODSTATE_RELOAD);
-        closemodule(old_modinfo->module);
-        free(old_modinfo->name);
-        free(old_modinfo);
-        break;
-    } else
-        old_prev = old_modinfo;
+        if(!stricmp(old_modinfo->name, name)) {
+            if(old_prev)
+                old_prev->next = old_modinfo->next;
+            else
+                modules = old_modinfo->next;
+            unregister_module_hooks(old_modinfo->module_id);
+            ((void (*)(int)) old_modinfo->stopfunc)(MODSTATE_RELOAD);
+            closemodule(old_modinfo->module);
+            free(old_modinfo->name);
+            free(old_modinfo);
+            break;
+        } else
+            old_prev = old_modinfo;
+    }
     if(!loadModule(name)) return 0;
     struct ModuleInfo *modinfo;
     for(modinfo = modules; modinfo; modinfo = modinfo->next) {
         if(!(modinfo->state & MODINFO_STATE_STARTED)) {
             modinfo->state |= MODINFO_STATE_STARTED;
-            ((void (*)(void)) modinfo->startfunc)(MODSTATE_STARTSTOP);
+            ((void (*)(int)) modinfo->startfunc)(MODSTATE_STARTSTOP);
         } else
-            ((void (*)(void)) modinfo->startfunc)(MODSTATE_REBIND);
+            ((void (*)(int)) modinfo->startfunc)(MODSTATE_REBIND);
     }
+    return 1;
 }
 
 void start_modules() {
@@ -365,7 +387,7 @@ void start_modules() {
     for(modinfo = modules; modinfo; modinfo = modinfo->next) {
         if(!(modinfo->state & MODINFO_STATE_STARTED)) {
             modinfo->state |= MODINFO_STATE_STARTED;
-            ((void (*)(void)) modinfo->startfunc)(MODSTATE_STARTSTOP);
+            ((void (*)(int)) modinfo->startfunc)(MODSTATE_STARTSTOP);
         }
     }
 }
index 321b5c166b930c7de73f5e43659508f9bec37abe..8e326ea6fd46f885183078fdf7d8c8269afa1b8f 100644 (file)
@@ -17,7 +17,8 @@
 #ifndef _modules_h
 #define _modules_h
 
-void load_module(char *name);
+void loadModules();
+int loadModule(char *name);
 void start_modules();
 void loop_modules();
 void stop_modules();
index 8b00188b8cb7282fdb527891a2192fd4b73b0f31..ee02574fe2a1ee5838de4fabba162957bbf5f312 100644 (file)
@@ -18,7 +18,7 @@
 
 #include "bot_NeonHelp.h"
 #include "../../modcmd.h"
-#include "../../cmd_neonhelp.h"
+#include "cmd_neonhelp.h"
 #include "../../lang.h"
 #include "../../mysqlConn.h"
 #include "../../ClientSocket.h"
@@ -175,7 +175,7 @@ static void neonhelp_event_privmsg(struct UserNode *user, struct UserNode *targe
         cache->user = user;
         cache->target = target;
         cache->message = strdup(message);
-        get_userauth(user, neonhelp_event_privmsg_nick_lookup, cache);
+        get_userauth(user, module_id, neonhelp_event_privmsg_nick_lookup, cache);
     }
 }
 
@@ -266,7 +266,7 @@ static void neonhelp_event_privmsg_async(struct ClientSocket *client, struct Use
         if(!timeq_name_exists(nameBuf)) {
             int *cidptr = malloc(sizeof(int));
             *cidptr = client->clientid;
-            timeq_add_name(nameBuf, 300, neonhelp_remind_open_requests, cidptr);
+            timeq_add_name(nameBuf, 300, module_id, neonhelp_remind_open_requests, cidptr);
         }
     }
     printf_mysql_query("INSERT INTO `helpserv_requests` (`botid`, `host`, `hand`, `nick`, `status`, `supporter`, `time`, `text`) VALUES ('%d', '%s@%s', '%s', '%s', '0', '-1', UNIX_TIMESTAMP(), '%s')", client->clientid, escape_string(user->ident), escape_string(user->host), ((user->flags & USERFLAG_ISAUTHED) ? escape_string(user->auth) : "*"), escape_string(user->nick), escape_string(message));
@@ -339,7 +339,7 @@ static TIMEQ_CALLBACK(neonhelp_remind_open_requests) {
         char nameBuf[30];
         sprintf(nameBuf, "neonhelp_%d", client->clientid);
         if(!timeq_name_exists(nameBuf)) {
-            timeq_add_name(nameBuf, 300, neonhelp_remind_open_requests, data);
+            timeq_add_name(nameBuf, 300, module_id, neonhelp_remind_open_requests, data);
         }
         char replybuf[MAXLEN];
         build_language_string(NULL, replybuf, (requests == 1 ? "NH_REMIND_OPEN_REQUESTS_1" : "NH_REMIND_OPEN_REQUESTS_2"), requests);
@@ -513,19 +513,19 @@ static void neonhelp_event_quit(struct UserNode *target, char *reason) {
 
 void init_NeonHelp(int type) {
     set_bot_alias(BOTID, BOTALIAS);
-    start_bots();
+    start_bots(type);
     
     if(type == MODSTATE_REBIND) return;
     
     //register events
-    bind_bot_ready(neonhelp_bot_ready);
-    bind_privmsg(neonhelp_event_privmsg);
-    bind_chanmsg(neonhelp_event_chanmsg);
-    bind_part(neonhelp_event_part);
-    bind_kick(neonhelp_event_kick);
-    bind_quit(neonhelp_event_quit);
+    bind_bot_ready(neonhelp_bot_ready, module_id);
+    bind_privmsg(neonhelp_event_privmsg, module_id);
+    bind_chanmsg(neonhelp_event_chanmsg, module_id);
+    bind_part(neonhelp_event_part, module_id);
+    bind_kick(neonhelp_event_kick, module_id);
+    bind_quit(neonhelp_event_quit, module_id);
     
-    set_trigger_callback(BOTID, neonhelp_trigger_callback);
+    set_trigger_callback(BOTID, module_id, neonhelp_trigger_callback);
     
     register_default_language_table(msgtab);
 }
index fc71850713b99d78c8ea3b39de6f7c60304672b7..eae395770800190c740af72f874b8d98b2cdf97f 100644 (file)
@@ -23,7 +23,7 @@ void register_commands() {
     //NeonHelp Commands
     register_command_alias(4, "NeonHelp");
     
-    #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(4, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
+    #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(4, NAME, module_id, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
     //               NAME              FUNCTION        PARAMS     PRIVS                FLAGS
     USER_COMMAND("next",         neonhelp_cmd_next,      0, NULL,                   CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
     USER_COMMAND("delete",       neonhelp_cmd_delete,    1, NULL,                   CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
index c9b91528df2d83192a8e945835dc9717a4c9c1d6..03312952bcde708522036da19a8d258e887868d1 100644 (file)
@@ -26,7 +26,7 @@
 #include "../../ChanUser.h"
 #include "../../DBHelper.h"
 #include "../../IRCParser.h"
-#include "../../bot_NeonHelp.h"
+#include "bot_NeonHelp.h"
 #include "../../lang.h"
 #include "../../tools.h"
 
index bef9dd927e8a9b163bc8f6990f3517e8eeb93e78..0c824e962824f2badcbd1223569632efd702dfbd 100644 (file)
@@ -37,7 +37,7 @@
 #include "../../version.h"
 #include "../../EventLogger.h"
 #include "../../bots.h"
-#include "../../bot_NeonServ.h"
+#include "bot_NeonServ.h"
 #include "../../ConfigParser.h"
 
 void register_commands();
index 25b2501c96b6008f34424a8a60fe9602e2fa287d..3bda084272ddbcbe3e62906b9e5c75861503d9fe 100644 (file)
@@ -44,7 +44,7 @@ CMD_BIND(neonserv_cmd_access) {
             cache->user = user;
             cache->chan = chan;
             cache->nick = strdup(user->nick);
-            get_userauth(user, neonserv_cmd_access_nick_lookup, cache);
+            get_userauth(user, module_id, neonserv_cmd_access_nick_lookup, cache);
         } else
             neonserv_cmd_access_async1(client, getTextBot(), user, chan, user->nick, user->auth, user);
     }
@@ -75,7 +75,7 @@ CMD_BIND(neonserv_cmd_access) {
             cache->user = user;
             cache->chan = chan;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_access_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_access_nick_lookup, cache);
         }
     }
 }
index fffadf53108180897450f31270b52b8b748fe1e3..3938999628faeb716bdbf0258f604c457c0552b8 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_addban) {
         cache->reason = strdup(merge_argv(argv, 1, argc));
     } else
         cache->reason = NULL;
-    get_userlist(chan, neonserv_cmd_addban_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_addban_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_addban_userlist_lookup) {
index 837812e8e856e6264316c95ddd928bc83d815395..c74a029b0400aa2eeda1f75b524051e23455e9c2 100644 (file)
@@ -55,7 +55,7 @@ CMD_BIND(neonserv_cmd_addtimeban) {
         cache->reason = strdup(merge_argv(argv, 2, argc));
     } else
         cache->reason = NULL;
-    get_userlist(chan, neonserv_cmd_addtimeban_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_addtimeban_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_addtimeban_userlist_lookup) {
@@ -132,7 +132,7 @@ static void neonserv_cmd_addtimeban_async1(struct ClientSocket *client, struct C
     char banidBuf[20];
     sprintf(nameBuf, "ban_%d", banid);
     sprintf(banidBuf, "%d", banid);
-    timeq_add_name(nameBuf, duration, channel_ban_timeout, strdup(banidBuf));
+    timeq_add_name(nameBuf, duration, module_id, channel_ban_timeout, strdup(banidBuf));
     reply(textclient, user, "NS_TIMEBAN_DONE", mask, chan->name, timeToStr(user, duration, 2, nameBuf), match_count);
     logEvent(event);
 }
index 0e8432b34c6a696d8be3e034dda81bbc59d98280..65f021af016c32676384e124f14c7ada47d078a5 100644 (file)
@@ -74,7 +74,7 @@ CMD_BIND(neonserv_cmd_adduser) {
             cache->event = event;
             cache->access = caccess;
             cache->nick = strdup(argv[0]);
-            lookup_authname(argv[0], neonserv_cmd_adduser_auth_lookup, cache);
+            lookup_authname(argv[0], module_id, neonserv_cmd_adduser_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[0]);
@@ -101,7 +101,7 @@ CMD_BIND(neonserv_cmd_adduser) {
             cache->event = event;
             cache->access = caccess;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_adduser_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_adduser_nick_lookup, cache);
         }
     }
 }
index 4fedaf85089e5fc508cfefba62991cef49be18c6..f2cbd66764c06a4e0d78b26165289dd005382bfd 100644 (file)
@@ -68,7 +68,7 @@ CMD_BIND(neonserv_cmd_assignrank) {
             cache->event = event;
             cache->rank_id = rank_id;
             cache->nick = strdup(argv[0]);
-            lookup_authname(argv[0], neonserv_cmd_assignrank_auth_lookup, cache);
+            lookup_authname(argv[0], module_id, neonserv_cmd_assignrank_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[0]);
@@ -94,7 +94,7 @@ CMD_BIND(neonserv_cmd_assignrank) {
             cache->event = event;
             cache->rank_id = rank_id;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_assignrank_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_assignrank_nick_lookup, cache);
         }
     }
 }
index 84a497a3ef165c8418841f6f3c46ac3c2cc9e167..35adf6257a395ecc01b7780d88f4c7330852f66e 100644 (file)
@@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_ban) {
     cache->user = user;
     cache->event = event;
     cache->masks = strdup(merge_argv_char(argv, 0, argc, ','));
-    get_userlist_with_invisible(chan, neonserv_cmd_ban_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_ban_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_ban_userlist_lookup) {
index 8581cb24be1155084a5da2bce450b2eed99f3059..9ad498f2816c32795a14c7db13e7507d8cd6d024 100644 (file)
@@ -106,7 +106,7 @@ CMD_BIND(neonserv_cmd_chanservsync) {
     cache->last_response = time(0);
     neonserv_cmd_chanservsync_used = cache;
     putsock(client, "PRIVMSG %s :users %s", botnick, chan->name);
-    bind_privnotice(neonserv_cmd_chanservsync_notice_listener);
+    bind_privnotice(neonserv_cmd_chanservsync_notice_listener, module_id);
     reply(getTextBot(), user, "NS_CHANSERVSYNC_SYNCHRONIZING", chan->name, botnick);
     logEvent(event);
 }
@@ -224,7 +224,7 @@ static void neonserv_cmd_chanservsync_notice_listener(struct UserNode *user, str
             cache->caccess = caccess;
             cache->seen = seen_time;
             cache->flags = flags;
-            lookup_authname(username, neonserv_cmd_chanservsync_auth_lookup, cache);
+            lookup_authname(username, module_id, neonserv_cmd_chanservsync_auth_lookup, cache);
         }
     }
 }
index a541c3d108a1368669fb0348209ce69a43c3b6ae..4d0faa1a5ca2e379ad23ed5b8b561c8b3f09806a 100644 (file)
@@ -77,7 +77,7 @@ CMD_BIND(neonserv_cmd_clvl) {
             cache->event = event;
             cache->nick = strdup(argv[0]);
             cache->access = caccess;
-            get_userauth(cuser, neonserv_cmd_clvl_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_clvl_nick_lookup, cache);
         }
     }
 }
index f995e0f767e31fa2cd19f730768a806727f7070e..549e53c1a9e8dda839f30c8135b94aa7c5792e71 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_dehalfop) {
         cache->argv[i] = strdup(argv[i]);
     }
     cache->argc = argc;
-    get_userlist(chan, neonserv_cmd_dehalfop_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_dehalfop_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_dehalfop_userlist_lookup) {
index 1cb58d03a1d6fb675b08db6c71089d8f97542e3a..daa6c18d262baf47b8c013ed9677597b241df38b 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_dehalfopall) {
         cache->argv[i] = strdup(argv[i]);
     }
     cache->argc = argc;
-    get_userlist(chan, neonserv_cmd_dehalfopall_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_dehalfopall_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_dehalfopall_userlist_lookup) {
index 5188f01c7f8ef5d19b4e3b547556a250e2cc941e..3f06b9babed0a47f49af6262e2314d9d5f4cae15 100644 (file)
@@ -60,7 +60,7 @@ CMD_BIND(neonserv_cmd_deluser) {
             cache->chan = chan;
             cache->event = event;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_deluser_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_deluser_nick_lookup, cache);
         }
     }
 }
index 20a4f44ff717d21dc1cdb94c829ff3eaf0cbf79d..bb9e886173be59194ad0104b2669d0c51fc0f657 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_deop) {
         cache->argv[i] = strdup(argv[i]);
     }
     cache->argc = argc;
-    get_userlist(chan, neonserv_cmd_deop_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_deop_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_deop_userlist_lookup) {
index 7b1cdb23ba1d6b0753c8188e363ed6c75e15eac5..36cf61714f016e5553320fa59ba981f3c9a8bb1e 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_deopall) {
         cache->argv[i] = strdup(argv[i]);
     }
     cache->argc = argc;
-    get_userlist(chan, neonserv_cmd_deopall_userlist_lookup, cache);
+    get_userlist(chan, module_id, neonserv_cmd_deopall_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_deopall_userlist_lookup) {
index 9254e46edbcbcbcc004d9478e156b5b78f9d0fbc..9dc3eacdfeba9f9781136d6f2903d78313ddbd1e 100644 (file)
@@ -26,7 +26,6 @@ CMD_BIND(neonserv_cmd_devoiceall) {
     char *nickmask = NULL;
     struct ChanUser *chanuser;
     struct ModeBuffer *modeBuf;
-    check_mysql();
     if(argc > 0)
         nickmask = argv[0];
     modeBuf = initModeBuffer(client, chan);
index e4a4e2e345ca02688eb6a6a0182ef51e00e69826..35564e288371434c9548797ca4ee2e69efeb3a99 100644 (file)
@@ -139,7 +139,7 @@ CMD_BIND(neonserv_cmd_extscript) {
     #ifndef WIN32
     fcntl(fileno(cache->pipe), F_SETFL, O_NONBLOCK);
     #endif
-    timeq_uadd(200, neonserv_cmd_extscript_callback, cache);
+    timeq_uadd(200, module_id, neonserv_cmd_extscript_callback, cache);
 }
 
 static TIMEQ_CALLBACK(neonserv_cmd_extscript_callback) {
@@ -163,7 +163,7 @@ static TIMEQ_CALLBACK(neonserv_cmd_extscript_callback) {
         else
             reply(cache->textclient, cache->user, "%s", command);
     }
-    timeq_uadd(200, neonserv_cmd_extscript_callback, cache);
+    timeq_uadd(200, module_id, neonserv_cmd_extscript_callback, cache);
 }
 
 
index 9cf5ae750941c0439e6ac25563a089e2fcef2e23..779e28db40da5149426212915274150d8ac8777d 100644 (file)
@@ -76,7 +76,7 @@ CMD_BIND(neonserv_cmd_giveowner) {
             cache->event = event;
             cache->nick = strdup(argv[0]);
             cache->key = (argc != 1 ? strdup(argv[1]) : NULL);
-            get_userauth(cuser, neonserv_cmd_giveowner_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_giveowner_nick_lookup, cache);
         }
     }
 }
index ba684cb9ede5b21f9169d149ba855b021d37f404..d334876db4db7cdebf2c0c57656e4dda1bba2b50 100644 (file)
@@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_halfop) {
     cache->user = user;
     cache->event = event;
     cache->nicks = strdup(merge_argv(argv, 0, argc));
-    get_userlist_if_invisible(chan, neonserv_cmd_halfop_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_halfop_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_halfop_userlist_lookup) {
index a52ad6dc8751b0f9d30a5219616768186f77ff78..bea8185546c9b7715dadf227f72393731ec64d97 100644 (file)
@@ -45,7 +45,7 @@ CMD_BIND(neonserv_cmd_halfopall) {
         cache->nickmask = strdup(argv[0]);
     } else
         cache->nickmask = NULL;
-    get_userlist_if_invisible(chan, neonserv_cmd_halfopall_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_halfopall_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_halfopall_userlist_lookup) {
index 60c00a219aea884d0dceb8d8e51a8c28a59e1e81..06f403bc492b084b6d923116e80fd661bb3c1903 100644 (file)
@@ -81,7 +81,7 @@ CMD_BIND(neonserv_cmd_invite) {
         cache->chan = chan;
         cache->event = event;
         cache->nick = strdup(argv[0]);
-        get_userauth(cuser, neonserv_cmd_invite_nick_lookup, cache);
+        get_userauth(cuser, module_id, neonserv_cmd_invite_nick_lookup, cache);
     }
 }
 
@@ -113,7 +113,7 @@ static void neonserv_cmd_invite_async1(struct ClientSocket *client, struct Clien
         }
     }
     struct neonserv_cmd_invite_timeout *timeout = neonserv_cmd_invite_add_timeout(nick, chan->name);
-    timeq_add(INVITE_TIMEOUT, neonserv_cmd_invite_timeout_timeout, timeout);
+    timeq_add(INVITE_TIMEOUT, module_id, neonserv_cmd_invite_timeout_timeout, timeout);
     putsock(client, "INVITE %s %s", nick, chan->name);
     struct UserNode *tmpu = getUserByNick(nick);
     if(!tmpu) {
index 7ffcf659d82b0b5ceecbd789d7269940a595824f..39b9cbd5b54a78b304df476a8a1173dcff77e86c 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_kick) {
         cache->reason = strdup(merge_argv(argv, 1, argc));
     } else
         cache->reason = NULL;
-    get_userlist_with_invisible(chan, neonserv_cmd_kick_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_kick_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_kick_userlist_lookup) {
index 1123cd7b5a12dbb9d16f6f38c57f855184738202..919ca25adcac52b93bed876fa3c86409f0279514 100644 (file)
@@ -47,7 +47,7 @@ CMD_BIND(neonserv_cmd_kickban) {
         cache->reason = strdup(merge_argv(argv, 1, argc));
     } else
         cache->reason = NULL;
-    get_userlist_with_invisible(chan, neonserv_cmd_kickban_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_kickban_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_kickban_userlist_lookup) {
index 8a11e36ea1d3612cd2a9515c889b904bdb62f5f8..789812974d4d2a481bf16ebb81924311cc5bbfa4 100644 (file)
@@ -42,7 +42,7 @@ CMD_BIND(neonserv_cmd_mode) {
     cache->user = user;
     cache->event = event;
     cache->mode = strdup(merge_argv(argv, 0, argc));
-    get_userlist_with_invisible(chan, neonserv_cmd_mode_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_mode_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_mode_userlist_lookup) {
index b9f65811f197282e5a07f855a98ae057972f39fe..7e84eee6f60afd61c3c3c4b3ae7942545669dde5 100644 (file)
@@ -49,7 +49,7 @@ CMD_BIND(neonserv_cmd_myaccess) {
             cache->chan = chan;
             cache->nick = strdup(argv[0]);
             cache->chanmatch = (chanmatch ? strdup(chanmatch) : NULL);
-            get_userauth(user, neonserv_cmd_myaccess_nick_lookup, cache);
+            get_userauth(user, module_id, neonserv_cmd_myaccess_nick_lookup, cache);
         } else
             neonserv_cmd_myaccess_async1(client, getTextBot(), user, chan, user->nick, user->auth, chanmatch);
     }
@@ -87,7 +87,7 @@ CMD_BIND(neonserv_cmd_myaccess) {
             cache->chan = chan;
             cache->nick = strdup(argv[0]);
             cache->chanmatch = (chanmatch ? strdup(chanmatch) : NULL);
-            get_userauth(cuser, neonserv_cmd_myaccess_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_myaccess_nick_lookup, cache);
         }
     }
 }
index 181923c45e611760fefbfc60c5bc28260e0824b3..fe2a5180e0039567e88624309e1ff532bef29e53 100644 (file)
@@ -69,7 +69,7 @@ CMD_BIND(neonserv_cmd_nicklist) {
     } else
         cache->nickmask = NULL;
     cache->syncusers = syncusers;
-    get_userlist_with_invisible(chan, neonserv_cmd_nicklist_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_nicklist_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_nicklist_userlist_lookup) {
index f0ba38020b2316e93c89bb09bfd112d4c98bf2fe..e2744f41318134a544eabc83d361898ab12f44bb 100644 (file)
@@ -81,7 +81,7 @@ CMD_BIND(neonserv_cmd_noregister) {
             cache->nick = strdup(argv[0]);
             cache->duration = duration;
             cache->reason = strdup(reason);
-            lookup_authname(argv[0], neonserv_cmd_noregister_auth_lookup, cache);
+            lookup_authname(argv[0], module_id, neonserv_cmd_noregister_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[0]);
@@ -109,7 +109,7 @@ CMD_BIND(neonserv_cmd_noregister) {
             cache->nick = strdup(user->nick);
             cache->duration = duration;
             cache->reason = strdup(reason);
-            get_userauth(cuser, neonserv_cmd_noregister_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_noregister_nick_lookup, cache);
         }
     }
 }
index 6bf3b287a71db568c13f46ced4e633331aec0025..38876c3775cbb63bbb157aecf5fb30b40eb09315 100644 (file)
@@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_op) {
     cache->user = user;
     cache->event = event;
     cache->nicks = strdup(merge_argv(argv, 0, argc));
-    get_userlist_if_invisible(chan, neonserv_cmd_op_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_op_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_op_userlist_lookup) {
index b6bdacc84305e51b89aa81ca8d8e097793a6fe28..956600fa1901e605064b7e741e42179562034857 100644 (file)
@@ -49,7 +49,7 @@ CMD_BIND(neonserv_cmd_opall) {
         cache->nickmask = strdup(argv[1]);
     } else
         cache->nickmask = NULL;
-    get_userlist_if_invisible(chan, neonserv_cmd_opall_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_opall_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_opall_userlist_lookup) {
index 51de508c12d535381a2d271bc359bd3f1e378bed..edbf2e717c0ea27906058cdf9d41282e3cd6d053 100644 (file)
@@ -37,7 +37,7 @@ CMD_BIND(neonserv_cmd_peek) {
     cache->client = client;
     cache->textclient = getTextBot();
     cache->user = user;
-    get_userlist_if_invisible(chan, neonserv_cmd_peek_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_peek_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_peek_userlist_lookup) {
index 9b87be4d1df8b88db4acc119518d0e5b7ebbd714..7dee974ae978ea06b9fc73ac748542561cf3d64a 100644 (file)
@@ -44,7 +44,7 @@ CMD_BIND(neonserv_cmd_rename) {
     cache->event = event;
     cache->oldauth = strdup(argv[0]);
     cache->newauth = strdup(argv[1]);
-    lookup_authname(argv[1], neonserv_cmd_rename_auth_lookup, cache);
+    lookup_authname(argv[1], module_id, neonserv_cmd_rename_auth_lookup, cache);
 }
 
 static AUTHLOOKUP_CALLBACK(neonserv_cmd_rename_auth_lookup) {
index 7c60a6eb044d6265d2db0735e52f8675dae49da5..271adbc27f9b05fb94d173fe339f594e811b122c 100644 (file)
@@ -61,7 +61,7 @@ CMD_BIND(neonserv_cmd_resync) {
     cache->min_access = min_access;
     cache->max_access = max_access;
     cache->override_noautoop = override_noautoop;
-    get_userlist_with_invisible(chan, neonserv_cmd_resync_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_resync_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_resync_userlist_lookup) {
index b6d18b4004808ba6744c1aef3f05583cc3a1f12a..fa54c40b37c444b3f51216c12097dada57e768ed 100644 (file)
@@ -60,7 +60,7 @@ CMD_BIND(neonserv_cmd_suspend) {
             cache->chan = chan;
             cache->event = event;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_suspend_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_suspend_nick_lookup, cache);
         }
     }
 }
index 65a0e73482f76d6a62ffbb2710dd8174670c28e2..21065e8103228e52a14e521633f5f54646508cfa 100644 (file)
@@ -117,7 +117,7 @@ CMD_BIND(neonserv_cmd_trim) {
     cache->min_access = min_access;
     cache->max_access = max_access;
     cache->duration = duration;
-    get_userlist_with_invisible(chan, neonserv_cmd_trim_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_trim_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_trim_userlist_lookup) {
index f88033b308e80cce06e4dc8f58e0698f43c0dd89..805358fb4322b8e24479922b38ff9c62614fc0e8 100644 (file)
@@ -68,7 +68,7 @@ CMD_BIND(neonserv_cmd_unban) {
                                        break; //internal bot error
                                }
                 cuser->flags |= USERFLAG_ISTMPUSER;
-                get_userauth(cuser, neonserv_cmd_unban_userauth_lookup, cache);
+                get_userauth(cuser, module_id, neonserv_cmd_unban_userauth_lookup, cache);
                 cache->pending_whos++;
             } else {
                 neonserv_cmd_unban_nick(cache, cuser);
index 4053950e4b6c29aab397bb960257d47be227d077..7d61c957640dd3cc59158d80c658c3f82d9a07be 100644 (file)
@@ -60,7 +60,7 @@ CMD_BIND(neonserv_cmd_unsuspend) {
             cache->chan = chan;
             cache->event = event;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_unsuspend_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_unsuspend_nick_lookup, cache);
         }
     }
 }
index 9d7cda7f2e4f9fd07587007d3edf706560304afc..badd0262cb18f723262b4e2f990dd0882a7c1a47 100644 (file)
@@ -57,7 +57,7 @@ CMD_BIND(neonserv_cmd_unvisited) {
         if(channel) {
             cache->who_count++;
             channel->channel_id = atoi(row[0]);
-            get_userlist_with_invisible(channel, neonserv_cmd_unvisited_userlist_lookup, cache);
+            get_userlist_with_invisible(channel, module_id, neonserv_cmd_unvisited_userlist_lookup, cache);
         } else {
             reply(getTextBot(), user, "%s", row[1]);
             cache->matches++;
index 0085b5fae757c624716268edc26ad948dcc36565..c0ef253c24ecbb3ed93527d6f95d588d97a1ba42 100644 (file)
@@ -42,7 +42,7 @@ CMD_BIND(neonserv_cmd_up) {
         cache->textclient = getTextBot();
         cache->user = user;
         cache->event = event;
-        get_userlist_if_invisible(chan, neonserv_cmd_up_userlist_lookup, cache);
+        get_userlist_if_invisible(chan, module_id, neonserv_cmd_up_userlist_lookup, cache);
     } else {
         neonserv_cmd_up_async1(client, getTextBot(), user, chan, event);
     }
index cd8d3754f9ad2308c22920a274ae66c8eadf30ea..5f032e6b2bc3bc1b1dbc095a8bf0092f4a69e4c1 100644 (file)
@@ -53,7 +53,7 @@ CMD_BIND(neonserv_cmd_users) {
     cache->usermask = (usermask ? strdup(usermask) : NULL);
     cache->min_access = min_access;
     cache->max_access = max_access;
-    get_userlist_with_invisible(chan, neonserv_cmd_users_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_cmd_users_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_users_userlist_lookup) {
index 49dfe6cf7183900661079648bd39a2eacf2fd195..1325d8d4c441b5cf3b3a5bed99bea70178fb8f37 100644 (file)
@@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_voice) {
     cache->user = user;
     cache->event = event;
     cache->nicks = strdup(merge_argv(argv, 0, argc));
-    get_userlist_if_invisible(chan, neonserv_cmd_voice_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_voice_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_voice_userlist_lookup) {
index 779110ccdf7278e971b4d05d19b5edc0fa267a66..8a2c018101dbb60371c4cd2a510d93f2439458ac 100644 (file)
@@ -44,7 +44,7 @@ CMD_BIND(neonserv_cmd_voiceall) {
         cache->nickmask = strdup(argv[0]);
     } else
         cache->nickmask = NULL;
-    get_userlist_if_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache);
+    get_userlist_if_invisible(chan, module_id, neonserv_cmd_voiceall_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_cmd_voiceall_userlist_lookup) {
index 71a1cc8b95a45ca1488bcb16b6d07a56ad1f0c65..a7b2ee1f65f3e8e4651d81748b0413315f60a1e0 100644 (file)
@@ -60,7 +60,7 @@ CMD_BIND(neonserv_cmd_wipeinfo) {
             cache->chan = chan;
             cache->event = event;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, neonserv_cmd_wipeinfo_nick_lookup, cache);
+            get_userauth(cuser, module_id, neonserv_cmd_wipeinfo_nick_lookup, cache);
         }
     }
 }
index 11d03e25ae99285247b454daf3c8b14b45b93d8f..f9d9de3a776f4d8f11ba842e88edd664929edbda 100644 (file)
@@ -44,7 +44,7 @@ static void neonserv_event_chanctcp(struct UserNode *user, struct ChanNode *chan
         cache->chan = chan;
         cache->command = strdup(command);
         cache->text = (text ? strdup(text) : NULL);
-        get_userauth(user, neonserv_event_ctcp_nick_lookup, cache);
+        get_userauth(user, module_id, neonserv_event_ctcp_nick_lookup, cache);
     } else
         neonserv_event_ctcp_async1(client, user, chan, command, text);
 }
@@ -98,7 +98,7 @@ static void neonserv_event_ctcp_async1(struct ClientSocket *client, struct UserN
                 char banidBuf[20];
                 sprintf(nameBuf, "ban_%d", banid);
                 sprintf(banidBuf, "%d", banid);
-                timeq_add_name(nameBuf, duration, channel_ban_timeout, strdup(banidBuf));
+                timeq_add_name(nameBuf, duration, module_id, channel_ban_timeout, strdup(banidBuf));
             case 1: //KICKBAN
                 if(!banmask)
                     banmask = generate_banmask(user, banmaskBuf);
index 77d5de7519a200df297dbe939b3b691b405e8c03..ad2ee0e7aaa891188f10967f3ac30310937811a0 100644 (file)
@@ -59,7 +59,7 @@ static void neonserv_event_join(struct ChanUser *chanuser) {
         cache->client = client;
         cache->chanuser = chanuser;
         cache->was_registering = (user->flags & USERFLAG_WAS_REGISTRING);
-        get_userauth(user, neonserv_event_join_nick_lookup, cache);
+        get_userauth(user, module_id, neonserv_event_join_nick_lookup, cache);
     } else
         neonserv_event_join_async1(client, chanuser, (user->flags & USERFLAG_WAS_REGISTRING));
 }
@@ -173,7 +173,7 @@ static void neonserv_event_join_async1(struct ClientSocket *client, struct ChanU
         sprintf(nameBuf, "dynlimit_%s", chan->name);
         if(!timeq_name_exists(nameBuf)) {
             //neonserv_event_join_dynlimit
-            timeq_add_name(nameBuf, 30, neonserv_event_join_dynlimit, strdup(chan->name));
+            timeq_add_name(nameBuf, 30, module_id, neonserv_event_join_dynlimit, strdup(chan->name));
         }
     }
     //AUTOINVITE
index 8e32d02a4dab680b87302f0a5f2d4310ede83131..79c26031e6bcf0c03df63f9864c01f471a014f0b 100644 (file)
@@ -67,11 +67,11 @@ static void neonserv_event_kick(struct UserNode *user, struct ChanUser *target,
     cache->chan = target->chan;
     cache->userauth_pending = 0;
     if(!(user->flags & USERFLAG_ISAUTHED)) {
-        get_userauth(user, neonserv_event_kick_nick_lookup, cache);
+        get_userauth(user, module_id, neonserv_event_kick_nick_lookup, cache);
         cache->userauth_pending++;
     }
     if(!(target->user->flags & USERFLAG_ISAUTHED)) {
-        get_userauth(target->user, neonserv_event_kick_nick_lookup, cache);
+        get_userauth(target->user, module_id, neonserv_event_kick_nick_lookup, cache);
         cache->userauth_pending++;
     }
     neonserv_event_kick_async1(cache);
index f0794a906b7aa30db06ba1fb9e5e62360cedb239..3194dfd4e8eff248ee1c18b9b349185404e26d47 100644 (file)
@@ -52,7 +52,7 @@ static void neonserv_event_mode(struct UserNode *user, struct ChanNode *chan, ch
     cache->modes = strdup(modes);
     cache->argv = temp_argv;
     cache->argc = argc;
-    get_userlist_with_invisible(chan, neonserv_event_mode_userlist_lookup, cache);
+    get_userlist_with_invisible(chan, module_id, neonserv_event_mode_userlist_lookup, cache);
 }
 
 static USERLIST_CALLBACK(neonserv_event_mode_userlist_lookup) {
index 84fb51a25084da0394b3c8fc608b3d253f4cf213..cb598e1f145ee8a7b5d44c2b6d291da02ee3c1f5 100644 (file)
@@ -41,7 +41,7 @@ static void neonserv_event_channotice(struct UserNode *user, struct ChanNode *ch
         cache->user = user;
         cache->chan = chan;
         cache->message = strdup(message);
-        get_userauth(user, neonserv_event_notice_nick_lookup, cache);
+        get_userauth(user, module_id, neonserv_event_notice_nick_lookup, cache);
     } else
         neonserv_event_notice_async1(client, user, chan, message);
 }
@@ -93,7 +93,7 @@ static void neonserv_event_notice_async1(struct ClientSocket *client, struct Use
                 char banidBuf[20];
                 sprintf(nameBuf, "ban_%d", banid);
                 sprintf(banidBuf, "%d", banid);
-                timeq_add_name(nameBuf, duration, channel_ban_timeout, strdup(banidBuf));
+                timeq_add_name(nameBuf, duration, module_id, channel_ban_timeout, strdup(banidBuf));
             case 1: //KICKBAN
                 if(!banmask)
                     banmask = generate_banmask(user, banmaskBuf);
index 577e0a349d3a45beb2fe6fafa7a8f0d2b882eaa2..da117de5ff1374d4e5923144ffdf5ee450245c29 100644 (file)
@@ -41,7 +41,7 @@ static void neonserv_event_topic(struct UserNode *user, struct ChanNode *chan, c
         cache->user = user;
         cache->chan = chan;
         cache->new_topic = strdup(new_topic);
-        get_userauth(user, neonserv_event_topic_nick_lookup, cache);
+        get_userauth(user, module_id, neonserv_event_topic_nick_lookup, cache);
     } else
         neonserv_event_topic_async1(client, user, chan, new_topic);
 }
index 8438381f39b212dabdb17bc52f325d87348e08e4..33aa14e1856254e1fe86756d931a93c256c2cde0 100644 (file)
@@ -324,6 +324,12 @@ static void createSpamNode(struct ChanUser *chanuser) {
     chanuser->spamnode = spamnode;
 }
 
+static int neonspam_event_freechan(struct ChanNode *chan) {
+    if(chan->spam_settings)
+        freeNeonSpamSettings(chan->spam_settings);
+    return 1;
+}
+
 void init_NeonSpam(int type) {
     
     set_bot_alias(BOTID, BOTALIAS);
@@ -332,13 +338,14 @@ void init_NeonSpam(int type) {
     if(type == MODSTATE_REBIND) return;
     
     //register events
-    bind_bot_ready(neonspam_bot_ready);
-    bind_join(neonspam_event_join);
-    bind_chanmsg(neonspam_event_chanmsg);
-    bind_privctcp(general_event_privctcp);
-    bind_kick(neonspam_event_kick);
+    bind_bot_ready(neonspam_bot_ready, module_id);
+    bind_join(neonspam_event_join, module_id);
+    bind_chanmsg(neonspam_event_chanmsg, module_id);
+    bind_privctcp(general_event_privctcp, module_id);
+    bind_kick(neonspam_event_kick, module_id);
+    bind_freechan(neonspam_event_freechan, module_id);
     
-    set_trigger_callback(BOTID, neonspam_trigger_callback);
+    set_trigger_callback(BOTID, module_id, neonspam_trigger_callback);
     
     register_default_language_table(msgtab);
 }
index 073512bbc48f9903290723a8db8658f8e11c1bcf..b0295ef674a6be6c00a14d038e58f439e842dad3 100644 (file)
@@ -24,7 +24,7 @@ void register_commands() {
     //NeonSpam Commands
     register_command_alias(2, "NeonSpam");
     
-    #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(2, NAME, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
+    #define USER_COMMAND(NAME,FUNCTION,PARAMCOUNT,PRIVS,FLAGS) register_command(2, NAME, module_id, FUNCTION, PARAMCOUNT, PRIVS, 0, FLAGS)
     //               NAME              FUNCTION        PARAMS     PRIVS                FLAGS
     USER_COMMAND("set",          neonspam_cmd_set,       0, "#channel_setters",     CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH | CMDFLAG_LOG);
     #undef USER_COMMAND
index 383eeaf27e4a777c3a4020a7c8b659d49bf83933..02355cd9dd2377120c723be8285929d5bd11ca0d 100644 (file)
@@ -37,7 +37,9 @@
 #include "../../version.h"
 #include "../../EventLogger.h"
 #include "../../bots.h"
-#include "../../bot_NeonSpam.h"
+#include "bot_NeonSpam.h"
+
+void register_commands();
 
 CMD_BIND(neonspam_cmd_set);
 
index 163315db30fd03e13c096403d1b3fab85faa9b29..114ab0f73363e61688c7680e8dbf434d06ba4e5d 100644 (file)
@@ -144,7 +144,7 @@ static void neonspam_event_chanmsg(struct UserNode *user, struct ChanNode *chan,
             cache->settings = settings;
             cache->warn = warn;
             cache->punish = punish;
-            get_userauth(user, neonspam_event_chanmsg_nick_lookup, cache);
+            get_userauth(user, module_id, neonspam_event_chanmsg_nick_lookup, cache);
         }
         
     }
@@ -248,7 +248,7 @@ static void neonspam_event_chanmsg_punish(struct ClientSocket *client, struct Ch
                     char banidBuf[20];
                     sprintf(nameBuf, "ban_%d", banid);
                     sprintf(banidBuf, "%d", banid);
-                    timeq_add_name(nameBuf, punish_time, channel_ban_timeout, strdup(banidBuf));
+                    timeq_add_name(nameBuf, punish_time, module_id, channel_ban_timeout, strdup(banidBuf));
                 }
             case 2: //KICKBAN
                 if(!banmask)
index 5a169f207487c0c702e3752363704a14da9750d4..490384990f6dd9f25b569cb2f4733c711f027dd5 100644 (file)
@@ -54,7 +54,7 @@ static void neonspam_event_join(struct ChanUser *chanuser) {
             cache->chanuser = chanuser;
             cache->settings = settings;
             cache->action = result;
-            get_userauth(chanuser->user, neonspam_event_join_nick_lookup, cache);
+            get_userauth(chanuser->user, module_id, neonspam_event_join_nick_lookup, cache);
         }
     }
 }
@@ -102,7 +102,7 @@ static void neonspam_event_join_punish(struct ClientSocket *client, struct ChanU
                     char banidBuf[20];
                     sprintf(nameBuf, "ban_%d", banid);
                     sprintf(banidBuf, "%d", banid);
-                    timeq_add_name(nameBuf, duration, channel_ban_timeout, strdup(banidBuf));
+                    timeq_add_name(nameBuf, duration, module_id, channel_ban_timeout, strdup(banidBuf));
                 }
             case 1: //KICKBAN
                 if(!banmask)
index bdcf45a50e266769aa0765a4f434de952922b4f6..eb08ef566950c05cfc9a976a205d625253dcbc78 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 #include "cmd_global.h"
-#include "memoryInfo.h"
+#include "../../memoryInfo.h"
 
 /*
 * no arguments
index 3d01c989f0da3089f78e614233636fc63f9f7170..a3e4f736a58850e374e7a9d020602c1c6d2840e6 100644 (file)
@@ -29,7 +29,7 @@ CMD_BIND(global_cmd_netinfo) {
     char *content[2];
     
     content[0] = get_language_string(user, "NS_NETINFO_UPTIME");
-    content[1] = timeToStr(user, (time(0) - start_time), 3, tmp);
+    content[1] = timeToStr(user, (time(0) - getStartTime()), 3, tmp);
     table_add(table, content);
     
     content[0] = get_language_string(user, "NS_NETINFO_BOTS");
@@ -146,25 +146,25 @@ CMD_BIND(global_cmd_netinfo) {
     
     #ifdef HAVE_THREADS
     content[0] = get_language_string(user, "NS_NETINFO_THREADS");
-    sprintf(tmp, "%d (current thread: %i)", running_threads, getCurrentThreadID());
+    sprintf(tmp, "%d (current thread: %i)", getRunningThreads(), getCurrentThreadID());
     content[1] = tmp;
     table_add(table, content);
     #endif
     
-    if(strcmp(revision, ""))
-        sprintf(tmp, "%s.%d  (%s)", NEONSERV_VERSION, patchlevel, revision);
+    if(strcmp(get_revision(), ""))
+        sprintf(tmp, "%s.%d  (%s)", NEONSERV_VERSION, get_patchlevel(), get_revision());
     else 
-        sprintf(tmp, "%s.%d", NEONSERV_VERSION, patchlevel);
+        sprintf(tmp, "%s.%d", NEONSERV_VERSION, get_patchlevel());
     content[0] = get_language_string(user, "NS_NETINFO_VERSION");
     content[1] = tmp;
     table_add(table, content);
     
     content[0] = get_language_string(user, "NS_NETINFO_COMPILER");
-    content[1] = build_language_string(user, tmp, "NS_NETINFO_COMPILER_VALUE", COMPILER, creation);
+    content[1] = build_language_string(user, tmp, "NS_NETINFO_COMPILER_VALUE", COMPILER, get_creation());
     table_add(table, content);
     
     content[0] = get_language_string(user, "NS_NETINFO_CODE");
-    content[1] = build_language_string(user, tmp, "NS_NETINFO_CODE_VALUE", codelines);
+    content[1] = build_language_string(user, tmp, "NS_NETINFO_CODE_VALUE", get_codelines());
     table_add(table, content);
     
     char **table_lines = table_end(table);
index 548860d65053f350ae753bba69bdc182d48d478a..d6ec183bcddb64d7488de60e0904e034f6a24af7 100644 (file)
@@ -108,7 +108,7 @@ CMD_BIND(global_cmd_register) {
             cache->channel = strdup(channel);
             cache->multibot = multibot;
             cache->botname = (botname ? strdup(botname) : NULL);
-            lookup_authname(argv[1], global_cmd_register_auth_lookup, cache);
+            lookup_authname(argv[1], module_id, global_cmd_register_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[1]);
@@ -137,7 +137,7 @@ CMD_BIND(global_cmd_register) {
             cache->channel = strdup(channel);
             cache->multibot = multibot;
             cache->botname = (botname ? strdup(botname) : NULL);
-            get_userauth(cuser, global_cmd_register_nick_lookup, cache);
+            get_userauth(cuser, module_id, global_cmd_register_nick_lookup, cache);
         }
     }
 }
index 0458bd660ebe4369dce177bc774fe1021b04ac95..8d1ffe20225da4e6ee8daccce6dd3b3d47ec88c1 100644 (file)
@@ -69,7 +69,7 @@ CMD_BIND(global_cmd_setaccess) {
             cache->event = event;
             cache->access = caccess;
             cache->nick = strdup(argv[0]);
-            lookup_authname(argv[0], global_cmd_setaccess_auth_lookup, cache);
+            lookup_authname(argv[0], module_id, global_cmd_setaccess_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[0]);
@@ -95,7 +95,7 @@ CMD_BIND(global_cmd_setaccess) {
             cache->event = event;
             cache->access = caccess;
             cache->nick = strdup(argv[0]);
-            get_userauth(cuser, global_cmd_setaccess_nick_lookup, cache);
+            get_userauth(cuser, module_id, global_cmd_setaccess_nick_lookup, cache);
         }
     }
 }
index 88ffeacec1703058c863372cd432491baab0030c..a95f8c360395026435171d0830cfc6f6a5d987ed 100644 (file)
@@ -385,7 +385,7 @@ static int global_cmd_setbot_class(struct UserNode *user, MYSQL_ROW bot, char *v
             struct ClientSocket *client;
             for(client = getBots(0, NULL); client; client = getBots(0, client)) {
                 if(client->clientid == atoi(bot[15])) {
-                    unbind_botwise_allcmd(client->clientid);
+                    unbind_botwise_allcmd(0, client->clientid);
                     client->botid = val;
                     if(client->botid == 0) {
                         MYSQL_RES *res;
index 307e34c299a51a66b71e2b65cc0123614cad05da..1faaf38bb682243b3c814e650d5a3cac2801f14b 100644 (file)
@@ -22,8 +22,8 @@
 */
 
 CMD_BIND(global_cmd_version) {
-    reply(getTextBot(), user, "\002NeonServ %s.%d\002 (%s), written by pk910", NEONSERV_VERSION, patchlevel, (strcmp(revision, "") ? revision : "-"));
-    reply(getTextBot(), user, "Build (#%s) %s (%s lines, " COMPILER ")", compilation, creation, codelines);
+    reply(getTextBot(), user, "\002NeonServ %s.%d\002 (%s), written by pk910", NEONSERV_VERSION, get_patchlevel(), (strcmp(get_revision(), "") ? get_revision() : "-"));
+    reply(getTextBot(), user, "Build (#%s) %s (%s lines, " COMPILER ")", get_compilation(), get_creation(), get_codelines());
     reply(getTextBot(), user, "NeonServ can be found on: http://dev.pk910.de/NeonServ");
     //helpers :D
     reply(getTextBot(), user, "special thanks to:");
index 7e7575c0eb2d64adc3f7a9e05fed0e602f8f5d86..8c132942b4e4e496b7562dc34fd51be18b43dbea 100644 (file)
@@ -77,7 +77,7 @@ extern int module_id;
 /* 047 */ #define renameAccount ((int (*)(char *, char *))global[47])
 /* 048 */ #define deleteUser ((void (*)(int))global[48])
 /* 049 */ #define logEvent ((void (*)(struct Event *))global[49])
-/* 050 */ #define lookup_authname ((void (*)(char *, authlookup_callback_t, void *))global[50])
+/* 050 */ #define lookup_authname ((void (*)(char *, int, authlookup_callback_t, void *))global[50])
 /* 051 */ #define bind_join ((int (*)(join_func_t *, int))global[51])
 /* 052 */ #define unbind_join ((void (*)(join_func_t *))global[52])
 /* 053 */ #define bind_nick ((int (*)(nick_func_t *, int))global[53])
@@ -208,14 +208,16 @@ extern int module_id;
 /* 176 */ #define getAllUsers ((struct UserNode * (*)(struct UserNode *))global[176])
 /* 177 */ #define getUsersWithAuth ((struct UserNode * (*)(const char *, struct UserNode *))global[177])
 /* 178 */ #define getUserCount ((int (*)(void))global[178])
-/* 179 */ #define get_userlist ((void (*)(struct ChanNode *, int, userlist_callback_t, void *))global[179])
-/* 180 */ #define _get_userlist_with_invisible ((void (*)(struct ChanNode *, int, userlist_callback_t, void *, int))global[180])
-/* 181 */ #define get_userauth ((void (*)(struct UserNode *, int, userauth_callback_t, void *))global[181])
-/* 182 */ #define compilation ((const char *) *global[182])
-/* 183 */ #define creation ((const char *) *global[183])
-/* 184 */ #define revision ((const char *) *global[184])
-/* 185 */ #define codelines ((const char *) *global[185])
-/* 186 */ #define patchlevel ((const int) *global[186])
+/* 179 */ #define createTempUser ((struct UserNode * (*)(const char *))global[179])
+/* 180 */ #define createTempUserMask ((struct UserNode * (*)(const char *))global[180])
+/* 181 */ #define get_userlist ((void (*)(struct ChanNode *, int, userlist_callback_t, void *))global[181])
+/* 182 */ #define _get_userlist_with_invisible ((void (*)(struct ChanNode *, int, userlist_callback_t, void *, int))global[182])
+/* 183 */ #define get_userauth ((void (*)(struct UserNode *, int, userauth_callback_t, void *))global[183])
+/* 184 */ #define get_compilation ((const char * (*)(void))global[184])
+/* 185 */ #define get_creation ((const char * (*)(void))global[185])
+/* 186 */ #define get_revision ((const char * (*)(void))global[186])
+/* 187 */ #define get_codelines ((const char * (*)(void))global[187])
+/* 188 */ #define get_patchlevel ((const int (*)(void))global[188])
 
 #define MODULE_HEADER(initfunc,startfunc,loopfunc,stopfunc) \
     void **global = NULL; \
index 8784d08e7c61c4cbb940ef77c732cd75adcc00a4..8c22f99110546e65b8c9667f695c57fbcad8601e 100644 (file)
@@ -27,5 +27,11 @@ extern const char *creation;
 extern const char *revision;
 extern const char *codelines;
 extern const int patchlevel;
+
+const char *get_compilation();
+const char *get_creation();
+const char *get_revision();
+const char *get_codelines();
+const int get_patchlevel();
 #endif
 #endif
index 2cdc0f42c8ba106b0be15b43353430ac429a0b33..4af226e8a4132e72d78a96f39407bedf70c34c16 100644 (file)
@@ -62,5 +62,25 @@ const char *codelines = "$codelines";
 
 const int patchlevel = ($git_commitcount ? ($git_commitcount - VERSION_PATCHLEVEL) : 0);
 
+const char *get_compilation() {
+    return compilation;
+}
+
+const char *get_creation() {
+    return creation;
+}
+
+const char *get_revision() {
+    return revision;
+}
+
+const char *get_codelines() {
+    return codelines;
+}
+
+const int get_patchlevel() {
+    return patchlevel;
+}
+
 !SUB!THIS!