From 4c45b9e0496cfc36aaf9a316c1047383493224f7 Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 20 Aug 2012 23:42:09 +0200 Subject: [PATCH] added more debug output to cmd_nicklist --- .../NeonServ.mod/cmd_neonserv_nicklist.c | 70 ++++++++++++------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c index c978247..d8fe67a 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c @@ -22,37 +22,46 @@ * argv[1] (optional) nick mask */ static USERLIST_CALLBACK(neonserv_cmd_nicklist_userlist_lookup); -static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nickmask, int syncusers); +static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nickmask, int flags); static void neonserv_cmd_nicklist_synchronize_user(struct ChanNode *chan, struct UserNode *user, int access); +#define NEONSERV_CMD_NICKLIST_FLAG_SYNCUSERS 0x01 +#define NEONSERV_CMD_NICKLIST_FLAG_NOWHO 0x02 +#define NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT 0x04 + struct neonserv_cmd_nicklist_cache { struct ClientSocket *client, *textclient; struct UserNode *user; struct Event *event; char *nickmask; - int syncusers; + int flags; }; CMD_BIND(neonserv_cmd_nicklist) { - int syncusers = 0; - if(argc && !stricmp(argv[0], "sync")) { - if(!checkChannelAccess(user, chan, "channel_canadd", 0)) { - if(isGodMode(user)) { - event->flags |= CMDFLAG_OPLOG; - } else { - reply(textclient, user, "NS_ACCESS_DENIED"); - return; + int flags = 0; + while(argc) { + if(!stricmp(argv[0], "sync")) { + if(!checkChannelAccess(user, chan, "channel_canadd", 0)) { + if(isGodMode(user)) { + event->flags |= CMDFLAG_OPLOG; + } else { + reply(textclient, user, "NS_ACCESS_DENIED"); + return; + } } - } + flags |= NEONSERV_CMD_NICKLIST_FLAG_SYNCUSERS; + event->flags |= CMDFLAG_LOG; + } else if(argc && !stricmp(argv[0], "nowho") && isGodMode(user)) { + flags |= NEONSERV_CMD_NICKLIST_FLAG_NOWHO; + } else if(argc && !stricmp(argv[0], "viscount") && isGodMode(user)) { + flags |= NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT; + } else + break; argv++; argc--; - syncusers = 1; - event->flags |= CMDFLAG_LOG; } - if(argc && !stricmp(argv[0], "nowho") && isGodMode(user)) { - argv++; - argc--; - neonserv_cmd_nicklist_async1(client, textclient, user, chan, event, (argc ? argv[0] : NULL), syncusers); + if(flags & NEONSERV_CMD_NICKLIST_FLAG_NOWHO) { + neonserv_cmd_nicklist_async1(client, textclient, user, chan, event, (argc ? argv[0] : NULL), flags); return; } struct neonserv_cmd_nicklist_cache *cache = malloc(sizeof(*cache)); @@ -68,13 +77,13 @@ CMD_BIND(neonserv_cmd_nicklist) { cache->nickmask = strdup(argv[0]); } else cache->nickmask = NULL; - cache->syncusers = syncusers; + cache->flags = flags; get_userlist_with_invisible(chan, module_id, neonserv_cmd_nicklist_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_nicklist_userlist_lookup) { struct neonserv_cmd_nicklist_cache *cache = data; - neonserv_cmd_nicklist_async1(cache->client, cache->textclient, cache->user, chan, cache->event, cache->nickmask, cache->syncusers); + neonserv_cmd_nicklist_async1(cache->client, cache->textclient, cache->user, chan, cache->event, cache->nickmask, cache->flags); if(cache->nickmask) free(cache->nickmask); free(cache); @@ -106,11 +115,11 @@ static int neonserv_cmd_nicklist_sort(const void *a, const void *b) { return i_a - i_b; } -static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nickmask, int syncusers) { +static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *nickmask, int flags) { MYSQL_RES *res; MYSQL_ROW row, defaults = NULL; struct Table *table; - char *content[3]; + char *content[4]; int userlistlen, i, j; int db_enfops, db_enfvoice; int caccess, synced_user; @@ -119,9 +128,15 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli int chanuser_count; char statebuf[5]; char accessbuf[9]; + char viscountbuf[5]; int uaccess; - table = table_init(3, chan->usercount + 1, 0); + i = 3; + if(flags & NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT) { + i++; + content[3] = "VisCount"; + } + table = table_init(i, chan->usercount + 1, 0); content[0] = get_language_string(user, "NS_NICKLIST_NICK"); content[1] = get_language_string(user, "NS_NICKLIST_STATE"); content[2] = get_language_string(user, "NS_NICKLIST_ACCESS"); @@ -173,7 +188,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli if(!stricmp(chanuser->user->auth, userlist[j][1])) { uaccess = atoi(userlist[j][0]); if((((chanuser->flags & CHANUSERFLAG_OPPED) && uaccess < db_enfops) || ((chanuser->flags & CHANUSERFLAG_VOICED) && uaccess < db_enfvoice)) && !isNetworkService(chanuser->user)) { - if(syncusers) { + if(flags & NEONSERV_CMD_NICKLIST_FLAG_SYNCUSERS) { if((chanuser->flags & CHANUSERFLAG_OPPED) && (db_enfops < caccess || isGodMode(user))) { if(db_enfops >= caccess) event->flags |= CMDFLAG_OPLOG; @@ -203,7 +218,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli } } if(!uaccess && (chanuser->flags & CHANUSERFLAG_OPPED_OR_VOICED) && !isNetworkService(chanuser->user)) { - if(syncusers) { + if(flags & NEONSERV_CMD_NICKLIST_FLAG_SYNCUSERS) { if((chanuser->flags & CHANUSERFLAG_OPPED) && (db_enfops < caccess || isGodMode(user))) { if(db_enfops >= caccess) event->flags |= CMDFLAG_OPLOG; @@ -230,7 +245,10 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli } else if(!uaccess) sprintf(accessbuf, "0"); content[2] = accessbuf; - + if(flags & NEONSERV_CMD_NICKLIST_FLAG_VISCOUNT) { + sprintf(viscountbuf, "%d", chanuser->visCount); + content[3] = viscountbuf; + } table_add(table, content); } @@ -244,7 +262,7 @@ static void neonserv_cmd_nicklist_async1(struct ClientSocket *client, struct Cli reply(textclient, user, "NS_TABLE_COUNT", table->length - 1); table_free(table); if(synced_user) { - if(!syncusers) + if(!(flags & NEONSERV_CMD_NICKLIST_FLAG_SYNCUSERS)) reply(textclient, user, "NS_NICKLIST_SYNC", db_enfops, db_enfvoice); else logEvent(event); -- 2.20.1