From: pk910 Date: Mon, 27 Aug 2012 04:15:57 +0000 (+0200) Subject: Merge branch 'master' into IOMultiplexer X-Git-Tag: v5.5~9^2~1 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=9fe7d57a2038c122f9fd0217fd09e6e74732c6ce;hp=c49eed20311de32444533a519fa6fbacab481688 Merge branch 'master' into IOMultiplexer --- diff --git a/src/IRCEvents.c b/src/IRCEvents.c index 2ef7f3f..b4eba22 100644 --- a/src/IRCEvents.c +++ b/src/IRCEvents.c @@ -48,8 +48,9 @@ static void **binds; #define BIND_TYPE_REGISTERED 16 #define BIND_TYPE_FREEUSER 17 #define BIND_TYPE_FREECHAN 18 +#define BIND_TYPE_RELOAD 19 -#define TOTAL_BIND_TYPES 19 +#define TOTAL_BIND_TYPES 20 void init_bind() { binds = calloc(TOTAL_BIND_TYPES, sizeof(*binds)); @@ -221,3 +222,7 @@ FUNC_EVENT(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER, (struct UserNode *user FUNC_BIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN) FUNC_UNBIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN) FUNC_EVENT(freechan, freechan_func_t, BIND_TYPE_FREECHAN, (struct ChanNode *chan), (chan)) + +FUNC_BIND(reload, reload_func_t, BIND_TYPE_RELOAD) +FUNC_UNBIND(reload, reload_func_t, BIND_TYPE_RELOAD) +FUNC_EVENT(reload, reload_func_t, BIND_TYPE_RELOAD, (int initialization), (initialization)) \ No newline at end of file diff --git a/src/IRCEvents.h b/src/IRCEvents.h index e319037..2b8e947 100644 --- a/src/IRCEvents.h +++ b/src/IRCEvents.h @@ -156,4 +156,11 @@ typedef int freechan_func_t(struct ChanNode *chan); int event_freechan(struct ChanNode *chan); #endif +typedef int reload_func_t(int initialization); +#ifndef DND_FUNCTIONS +/* MODULAR ACCESSIBLE */ int bind_reload(reload_func_t *func, int module_id); +/* MODULAR ACCESSIBLE */ void unbind_reload(reload_func_t *func); +int event_reload(int initialization); +#endif + #endif diff --git a/src/IRCParser.c b/src/IRCParser.c index 2d9fbbf..f7ff777 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -395,13 +395,16 @@ static IRC_CMD(raw_quit) { struct ChanUser *chanuser, *next_chanuser; for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) { next_chanuser = getUserChannels(user, chanuser); - chanuser->visCount--; - if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) { - delChanUser(chanuser, 0); //not free, yet! - event_part(chanuser, 1, argv[0]); - if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING)) - check_full_rejoin(chanuser->chan); - freeChanUser(chanuser); + //decrease visCount counter only if client is in the channel + if(isUserOnChan(client->user, chanuser->chan)) { + chanuser->visCount--; + if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) { + delChanUser(chanuser, 0); //not free, yet! + event_part(chanuser, 1, argv[0]); + if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING)) + check_full_rejoin(chanuser->chan); + freeChanUser(chanuser); + } } } diff --git a/src/main.c b/src/main.c index d585ada..1127263 100644 --- a/src/main.c +++ b/src/main.c @@ -202,6 +202,7 @@ int main(int argc, char *argv[]) { fprintf(stderr, "Unable to load " CONF_FILE "\n"); exit(0); } + event_reload(1); #if HAVE_THREADS THREAD_MUTEX_INIT(log_sync); #endif @@ -366,6 +367,7 @@ void stop_bot() { void reload_config() { loadConfig(CONF_FILE); + event_reload(0); } static int getCurrentSecondsOfDay() { diff --git a/src/modules.c b/src/modules.c index eda8f46..b451c0d 100644 --- a/src/modules.c +++ b/src/modules.c @@ -113,8 +113,8 @@ void *global_functions[] = { /* 054 */ (Function) unbind_nick, /* 055 */ (Function) bind_part, /* 056 */ (Function) unbind_part, -/* 057 */ (Function) NULL, /* deprecated */ -/* 058 */ (Function) NULL, /* deprecated */ +/* 057 */ (Function) bind_reload, +/* 058 */ (Function) unbind_reload, /* 059 */ (Function) bind_kick, /* 060 */ (Function) unbind_kick, /* 061 */ (Function) bind_topic, diff --git a/src/modules/module.h b/src/modules/module.h index 5e203a7..1a8426c 100644 --- a/src/modules/module.h +++ b/src/modules/module.h @@ -84,8 +84,8 @@ extern int module_id; /* 054 */ #define unbind_nick ((void (*)(nick_func_t *))global[54]) /* 055 */ #define bind_part ((int (*)(part_func_t *, int))global[55]) /* 056 */ #define unbind_part ((void (*)(part_func_t *))global[56]) -/* 057 */ /* deprecated */ -/* 058 */ /* deprecated */ +/* 057 */ #define bind_reload ((int (*)(reload_func_t *, int))global[57]) +/* 058 */ #define unbind_reload ((void (*)(reload_func_t *))global[58]) /* 059 */ #define bind_kick ((int (*)(kick_func_t *, int))global[59]) /* 060 */ #define unbind_kick ((void (*)(kick_func_t *))global[60]) /* 061 */ #define bind_topic ((int (*)(topic_func_t *, int))global[61]) diff --git a/src/version.h b/src/version.h index 26a178b..2b653c2 100644 --- a/src/version.h +++ b/src/version.h @@ -19,7 +19,7 @@ #include "main.h" -#define MODULE_VERSION 5 +#define MODULE_VERSION 6 #ifndef DND_FUNCTIONS extern const char *compilation;