1 /* +------------------------------------+
2 * | Inspire Internet Relay Chat Daemon |
3 * +------------------------------------+
5 * Inspire is copyright (C) 2002-2005 ChatSpike-Dev.
10 * Written by Craig Edwards, Craig McLure, and others.
11 * This program is free but copyrighted software; see
12 * the file COPYING for details.
14 * ---------------------------------------------------
19 #include "inspircd_config.h"
21 #include "inspircd_io.h"
25 #include <ext/hash_map>
43 #include "inspstring.h"
45 #include "helperfuncs.h"
47 #include "socketengine.h"
49 #include "command_parse.h"
50 #include "cmd_modules.h"
52 extern ServerConfig* Config;
53 extern InspIRCd* ServerInstance;
55 extern std::vector<Module*> modules;
56 extern std::vector<ircd_module*> factory;
58 extern user_hash clientlist;
59 extern chan_hash chanlist;
60 extern whowas_hash whowas;
61 extern std::vector<userrec*> all_opers;
62 extern std::vector<userrec*> local_users;
63 extern userrec* fd_ref_table[65536];
65 void cmd_modules::Handle (char **parameters, int pcnt, userrec *user)
67 for (unsigned int i = 0; i < Config->module_names.size(); i++)
69 Version V = modules[i]->GetVersion();
70 char modulename[MAXBUF];
71 char flagstate[MAXBUF];
73 if (V.Flags & VF_STATIC)
74 strlcat(flagstate,", static",MAXBUF);
75 if (V.Flags & VF_VENDOR)
76 strlcat(flagstate,", vendor",MAXBUF);
77 if (V.Flags & VF_COMMON)
78 strlcat(flagstate,", common",MAXBUF);
79 if (V.Flags & VF_SERVICEPROVIDER)
80 strlcat(flagstate,", service provider",MAXBUF);
82 strcpy(flagstate," <no flags>");
83 strlcpy(modulename,Config->module_names[i].c_str(),256);
84 if (strchr(user->modes,'o'))
86 WriteServ(user->fd,"900 %s :0x%08lx %d.%d.%d.%d %s (%s)",user->nick,modules[i],V.Major,V.Minor,V.Revision,V.Build,CleanFilename(modulename),flagstate+2);
90 WriteServ(user->fd,"900 %s :%s",user->nick,CleanFilename(modulename));
93 WriteServ(user->fd,"901 %s :End of MODULES list",user->nick);