]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_globalload.cpp
Remove InspIRCd* parameters and fields
[user/henk/code/inspircd.git] / src / modules / m_globalload.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
6  * See: http://wiki.inspircd.org/Credits
7  *
8  * This program is free but copyrighted software; see
9  *            the file COPYING for details.
10  *
11  * ---------------------------------------------------
12  */
13
14 /* $ModDesc: Allows global loading of a module. */
15
16 #include "inspircd.h"
17
18 /** Handle /GLOADMODULE
19  */
20 class CommandGloadmodule : public Command
21 {
22  public:
23         CommandGloadmodule(Module* Creator) : Command(Creator,"GLOADMODULE", 1)
24         {
25                 flags_needed = 'o'; syntax = "<modulename> [servermask]";
26                 TRANSLATE3(TR_TEXT, TR_TEXT, TR_END);
27         }
28
29         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
30         {
31                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
32
33                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
34                 {
35                         if (ServerInstance->Modules->Load(parameters[0].c_str()))
36                         {
37                                 ServerInstance->SNO->WriteToSnoMask('a', "NEW MODULE '%s' GLOBALLY LOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
38                                 user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick.c_str(), parameters[0].c_str());
39                         }
40                         else
41                         {
42                                 user->WriteNumeric(974, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
43                         }
44                 }
45                 else
46                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL LOAD BY '%s' (not loaded here)",parameters[0].c_str(), user->nick.c_str());
47
48                 return CMD_SUCCESS;
49         }
50
51         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
52         {
53                 return ROUTE_BROADCAST;
54         }
55 };
56
57 /** Handle /GUNLOADMODULE
58  */
59 class CommandGunloadmodule : public Command
60 {
61  public:
62         CommandGunloadmodule(Module* Creator) : Command(Creator,"GUNLOADMODULE", 1)
63         {
64                 flags_needed = 'o'; syntax = "<modulename> [servermask]";
65         }
66
67         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
68         {
69                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
70
71                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
72                 {
73                         if (ServerInstance->Modules->Unload(parameters[0].c_str()))
74                         {
75                                 ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY UNLOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
76                                 user->WriteNumeric(973, "%s %s :Module successfully unloaded.",user->nick.c_str(), parameters[0].c_str());
77                         }
78                         else
79                         {
80                                 user->WriteNumeric(972, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
81                         }
82                 }
83                 else
84                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL UNLOAD BY '%s' (not unloaded here)",parameters[0].c_str(), user->nick.c_str());
85
86                 return CMD_SUCCESS;
87         }
88
89         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
90         {
91                 return ROUTE_BROADCAST;
92         }
93 };
94
95 /** Handle /GRELOADMODULE
96  */
97 class CommandGreloadmodule : public Command
98 {
99  public:
100         CommandGreloadmodule(Module* Creator) : Command(Creator, "GRELOADMODULE", 1)
101         {
102                 flags_needed = 'o'; syntax = "<modulename> [servermask]";
103         }
104
105         CmdResult Handle(const std::vector<std::string> &parameters, User *user)
106         {
107                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
108
109                 if (InspIRCd::Match(ServerInstance->Config->ServerName, servername))
110                 {
111                         bool ok = true;
112                         if (!ServerInstance->Modules->Unload(parameters[0].c_str()))
113                         {
114                                 ok = false;
115                                 user->WriteNumeric(972, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
116                         }
117                         if (!ServerInstance->Modules->Load(parameters[0].c_str()))
118                         {
119                                 ok = false;
120                                 user->WriteNumeric(974, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
121                         }
122                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY RELOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
123                         if (ok)
124                                 user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick.c_str(), parameters[0].c_str());
125                 }
126                 else
127                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL RELOAD BY '%s' (not reloaded here)",parameters[0].c_str(), user->nick.c_str());
128
129                 return CMD_SUCCESS;
130         }
131
132         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
133         {
134                 return ROUTE_BROADCAST;
135         }
136 };
137
138 class ModuleGlobalLoad : public Module
139 {
140         CommandGloadmodule cmd1;
141         CommandGunloadmodule cmd2;
142         CommandGreloadmodule cmd3;
143
144  public:
145         ModuleGlobalLoad()
146                 : cmd1(this), cmd2(this), cmd3(this)
147         {
148                 ServerInstance->AddCommand(&cmd1);
149                 ServerInstance->AddCommand(&cmd2);
150                 ServerInstance->AddCommand(&cmd3);
151         }
152
153         virtual ~ModuleGlobalLoad()
154         {
155         }
156
157         virtual Version GetVersion()
158         {
159                 return Version("Allows global loading of a module.", VF_COMMON | VF_VENDOR, API_VERSION);
160         }
161 };
162
163 MODULE_INIT(ModuleGlobalLoad)
164