fixed a core bug (user got lost in the channel userlist on nick change)
[NeonServV5.git] / src / cmd_neonserv_debug.c
1 /* cmd_neonserv_debug.c - NeonServ v5.0
2  * Copyright (C) 2011  Philipp Kreil (pk910)
3  * 
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * 
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  * 
14  * You should have received a copy of the GNU General Public License 
15  * along with this program. If not, see <http://www.gnu.org/licenses/>. 
16  */
17
18 #include "cmd_neonserv.h"
19
20 CMD_BIND(neonserv_cmd_debug) {
21     //heavy debug
22     reply(getTextBot(), user, "HEAVY DEBUG!");
23     struct ChanNode *dbg_chan;
24     struct ChanUser *dbg_chanuser, *dbg_chanuser2;
25     struct UserNode *dbg_user;
26     char *dbg_string;
27     reply(getTextBot(), user, "CHANNEL TRACE:");
28     for(dbg_chan = getAllChans(NULL); dbg_chan; dbg_chan = getAllChans(dbg_chan)) {
29         reply(getTextBot(), user, "  \0037%s\003 [0x%08x]  (ChanUsers: %d)", dbg_chan->name, dbg_chan, dbg_chan->usercount);
30         for(dbg_chanuser = dbg_chan->user; dbg_chanuser; dbg_chanuser = dbg_chanuser->next_user) {
31             reply(getTextBot(), user, "    \0032%s@%s\003 [0x%08x]   [UserNode: %08x] [ChanNode: %08x]", dbg_chanuser->user->nick, dbg_chanuser->chan->name, dbg_chanuser, dbg_chanuser->user, dbg_chanuser->chan);
32             dbg_user = dbg_chanuser->user;
33             dbg_string = "\0034fail\003";
34             for(dbg_chanuser2 = dbg_user->channel; dbg_chanuser2; dbg_chanuser2 = dbg_chanuser2->next_chan) {
35                 if(dbg_chanuser2->chan == dbg_chan) {
36                     dbg_string = "\0033OK\003";
37                     break;
38                 }
39             }
40             reply(getTextBot(), user, "      check for user->channel entry: %s", dbg_string);
41         }
42     }
43     reply(getTextBot(), user, "USER TRACE:");
44     for(dbg_user = getAllUsers(NULL); dbg_user; dbg_user = getAllUsers(dbg_user)) {
45         reply(getTextBot(), user, "  \0037%s\003 [0x%08x]  (Host: %s@%s  Auth: %s)", dbg_user->nick, dbg_user, dbg_user->ident, dbg_user->host, ((dbg_user->flags & USERFLAG_ISAUTHED) ? dbg_user->auth : "*"));
46         for(dbg_chanuser = dbg_user->channel; dbg_chanuser; dbg_chanuser = dbg_chanuser->next_chan) {
47             reply(getTextBot(), user, "    \0032%s@%s\003 [0x%08x]   [UserNode: %08x] [ChanNode: %08x]", dbg_chanuser->user->nick, dbg_chanuser->chan->name, dbg_chanuser, dbg_chanuser->user, dbg_chanuser->chan);
48             dbg_chan = dbg_chanuser->chan;
49             dbg_string = "\0034fail\003";
50             for(dbg_chanuser2 = dbg_chan->user; dbg_chanuser2; dbg_chanuser2 = dbg_chanuser2->next_user) {
51                 if(dbg_chanuser2->user == dbg_user) {
52                     dbg_string = "\0033OK\003";
53                     break;
54                 }
55             }
56             reply(getTextBot(), user, "      check for channel->user entry: %s", dbg_string);
57         }
58     }
59 }