]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_globalload.cpp
86b535f4eca5ec232aad5307b5ee8e183cb363f2
[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';
26                 syntax = "<modulename> [servermask]";
27                 TRANSLATE3(TR_TEXT, TR_TEXT, TR_END);
28         }
29
30         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
31         {
32                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
33
34                 if (InspIRCd::Match(ServerInstance->Config->ServerName.c_str(), servername))
35                 {
36                         if (ServerInstance->Modules->Load(parameters[0].c_str()))
37                         {
38                                 ServerInstance->SNO->WriteToSnoMask('a', "NEW MODULE '%s' GLOBALLY LOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
39                                 user->WriteNumeric(975, "%s %s :Module successfully loaded.",user->nick.c_str(), parameters[0].c_str());
40                         }
41                         else
42                         {
43                                 user->WriteNumeric(974, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
44                         }
45                 }
46                 else
47                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL LOAD BY '%s' (not loaded here)",parameters[0].c_str(), user->nick.c_str());
48
49                 return CMD_SUCCESS;
50         }
51
52         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
53         {
54                 return ROUTE_BROADCAST;
55         }
56 };
57
58 /** Handle /GUNLOADMODULE
59  */
60 class CommandGunloadmodule : public Command
61 {
62  public:
63         CommandGunloadmodule(Module* Creator) : Command(Creator,"GUNLOADMODULE", 1)
64         {
65                 flags_needed = 'o';
66                 syntax = "<modulename> [servermask]";
67         }
68
69         CmdResult Handle (const std::vector<std::string> &parameters, User *user)
70         {
71                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
72
73                 if (InspIRCd::Match(ServerInstance->Config->ServerName.c_str(), servername))
74                 {
75                         Module* m = ServerInstance->Modules->Find(parameters[0]);
76                         if (m && ServerInstance->Modules->Unload(m))
77                         {
78                                 ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBALLY UNLOADED BY '%s'",parameters[0].c_str(), user->nick.c_str());
79                                 user->SendText(":%s 973 %s %s :Module successfully unloaded.",
80                                         ServerInstance->Config->ServerName.c_str(), user->nick.c_str(), parameters[0].c_str());
81                         }
82                         else
83                         {
84                                 user->WriteNumeric(972, "%s %s :%s",user->nick.c_str(), parameters[0].c_str(), ServerInstance->Modules->LastError().c_str());
85                         }
86                 }
87                 else
88                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL UNLOAD BY '%s' (not unloaded here)",parameters[0].c_str(), user->nick.c_str());
89
90                 return CMD_SUCCESS;
91         }
92
93         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
94         {
95                 return ROUTE_BROADCAST;
96         }
97 };
98
99 /** Handle /GRELOADMODULE
100  */
101 class CommandGreloadmodule : public Command
102 {
103  public:
104         CommandGreloadmodule(Module* Creator) : Command(Creator, "GRELOADMODULE", 1)
105         {
106                 flags_needed = 'o'; syntax = "<modulename> [servermask]";
107         }
108
109         CmdResult Handle(const std::vector<std::string> &parameters, User *user)
110         {
111                 std::string servername = parameters.size() > 1 ? parameters[1] : "*";
112
113                 if (InspIRCd::Match(ServerInstance->Config->ServerName.c_str(), servername))
114                 {
115                         Module* m = ServerInstance->Modules->Find(parameters[0]);
116                         ServerInstance->Modules->Reload(m, NULL);
117                 }
118                 else
119                         ServerInstance->SNO->WriteToSnoMask('a', "MODULE '%s' GLOBAL RELOAD BY '%s' (not reloaded here)",parameters[0].c_str(), user->nick.c_str());
120
121                 return CMD_SUCCESS;
122         }
123
124         RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)
125         {
126                 return ROUTE_BROADCAST;
127         }
128 };
129
130 class ModuleGlobalLoad : public Module
131 {
132         CommandGloadmodule cmd1;
133         CommandGunloadmodule cmd2;
134         CommandGreloadmodule cmd3;
135
136  public:
137         ModuleGlobalLoad()
138                 : cmd1(this), cmd2(this), cmd3(this)
139         {
140                 ServerInstance->AddCommand(&cmd1);
141                 ServerInstance->AddCommand(&cmd2);
142                 ServerInstance->AddCommand(&cmd3);
143         }
144
145         ~ModuleGlobalLoad()
146         {
147         }
148
149         Version GetVersion()
150         {
151                 return Version("Allows global loading of a module.", VF_COMMON | VF_VENDOR);
152         }
153 };
154
155 MODULE_INIT(ModuleGlobalLoad)
156