/* * ================================================================= * Filename: networktracking.c * Description: Tracks Client Connects/Exits across Network Links * Description: Linkli Serverlardan giris cikislari gosterir * Author: Raistlin * Version: Unreal3.2 * ================================================================= */ #include "config.h" #include "struct.h" #include "common.h" #include "sys.h" #include "numeric.h" #include "msg.h" #include "channel.h" #include #include #include #include "h.h" #include "version.h" int cb_remote_connect(aClient *sptr); int cb_remote_quit(aClient *sptr, char *comment); void send_unified_notice(char *mesaj); ModuleHeader MOD_HEADER(NetworkTracking) = { "networktracking", "IRCops Olny", "Author: Raistlin Connects/Exits across Network Links", "3.2-b8-1", NULL }; DLLFUNC int MOD_INIT(NetworkTracking)(ModuleInfo *modinfo) { HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_CONNECT, cb_remote_connect); HookAddEx(modinfo->handle, HOOKTYPE_REMOTE_QUIT, cb_remote_quit); return MOD_SUCCESS; } DLLFUNC int MOD_LOAD(NetworkTracking)(int module_load) { return MOD_SUCCESS; } DLLFUNC int MOD_UNLOAD(NetworkTracking)(int module_unload) { return MOD_SUCCESS; } int cb_remote_connect(aClient *sptr) { if (sptr && IsPerson(sptr) && sptr->user) { char buf[512]; char *origin = (sptr->srvptr) ? sptr->srvptr->name : "Unknown"; snprintf(buf, sizeof(buf), ":%s NOTICE * :*** Notice -- Client connecting: %s (%s@%s) [Server: %s]", me.name, sptr->name, sptr->user->username, sptr->user->realhost, origin); send_unified_notice(buf); } return 0; } int cb_remote_quit(aClient *sptr, char *comment) { if (sptr && IsPerson(sptr) && sptr->user) { char buf[512]; char *origin = (sptr->srvptr) ? sptr->srvptr->name : "Unknown"; snprintf(buf, sizeof(buf), ":%s NOTICE * :*** Notice -- Client exiting: %s (%s@%s) [%s] [Server: %s]", me.name, sptr->name, sptr->user->username, sptr->user->realhost, (comment ? comment : "Quit"), origin); send_unified_notice(buf); } return 0; } void send_unified_notice(char *mesaj) { aClient *acptr; for (acptr = client; acptr; acptr = acptr->next) { if (IsPerson(acptr) && IsOper(acptr) && MyConnect(acptr)) { sendto_one(acptr, "%s", mesaj); } } }