]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_globalload.cpp
Remove unnecessary header traffic
[user/henk/code/inspircd.git] / src / modules / m_globalload.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd: (C) 2002-2007 InspIRCd Development Team
6  * See: http://www.inspircd.org/wiki/index.php/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 cmd_gloadmodule : public command_t
21 {
22  public:
23         cmd_gloadmodule (InspIRCd* Instance) : command_t(Instance,"GLOADMODULE", 'o', 1)
24         {
25                 this->source = "m_globalload.so";
26                 syntax = "<modulename> [servermask]";
27         }
28
29         CmdResult Handle (const char** parameters, int pcnt, userrec *user)
30         {
31                 std::string servername = pcnt > 1 ? parameters[1] : "*";
32
33                 if (ServerInstance->MatchText(ServerInstance->Config->ServerName, servername))
34                 {
35                         if (ServerInstance->LoadModule(parameters[0]))
36                         {
37                                 ServerInstance->WriteOpers("*** NEW MODULE '%s' GLOBALLY LOADED BY '%s'",parameters[0],user->nick);
38                                 user->WriteServ("975 %s %s :Module successfully loaded.",user->nick, parameters[0]);
39                         }
40                         else
41                         {
42                                 user->WriteServ("974 %s %s :Failed to load module: %s",user->nick, parameters[0],ServerInstance->ModuleError());
43                         }
44                 }
45                 else
46                         ServerInstance->WriteOpers("*** MODULE '%s' GLOBAL LOAD BY '%s' (not loaded here)",parameters[0],user->nick);
47
48                 return CMD_SUCCESS;
49         }
50 };
51
52 /** Handle /GUNLOADMODULE
53  */
54 class cmd_gunloadmodule : public command_t
55 {
56  public:
57         cmd_gunloadmodule (InspIRCd* Instance) : command_t(Instance,"GUNLOADMODULE", 'o', 1)
58         {
59                 this->source = "m_globalload.so";
60                 syntax = "<modulename> [servermask]";
61         }
62
63         CmdResult Handle (const char** parameters, int pcnt, userrec *user)
64         {
65                 std::string servername = pcnt > 1 ? parameters[1] : "*";
66
67                 if (ServerInstance->MatchText(ServerInstance->Config->ServerName, servername))
68                 {
69                         if (ServerInstance->UnloadModule(parameters[0]))
70                         {
71                                 ServerInstance->WriteOpers("*** MODULE '%s' GLOBALLY UNLOADED BY '%s'",parameters[0],user->nick);
72                                 user->WriteServ("973 %s %s :Module successfully unloaded.",user->nick, parameters[0]);
73                         }
74                         else
75                         {
76                                 user->WriteServ("972 %s %s :Failed to unload module: %s",user->nick, parameters[0],ServerInstance->ModuleError());
77                         }
78                 }
79                 else
80                         ServerInstance->WriteOpers("*** MODULE '%s' GLOBAL UNLOAD BY '%s' (not unloaded here)",parameters[0],user->nick);
81
82                 return CMD_SUCCESS;
83         }
84 };
85
86 /** Handle /GRELOADMODULE
87  */
88 class cmd_greloadmodule : public command_t
89 {
90  public:
91         cmd_greloadmodule (InspIRCd* Instance) : command_t(Instance, "GRELOADMODULE", 'o', 1)
92         {
93                 this->source = "m_globalload.so";
94                 syntax = "<modulename> [servermask]";
95         }
96
97         CmdResult Handle(const char** parameters, int pcnt, userrec *user)
98         {
99                 std::string servername = pcnt > 1 ? parameters[1] : "*";
100
101                 if (ServerInstance->MatchText(ServerInstance->Config->ServerName, servername))
102                 {
103                         if (!ServerInstance->UnloadModule(parameters[0]))
104                         {
105                                 user->WriteServ("972 %s %s :Failed to unload module: %s",user->nick, parameters[0],ServerInstance->ModuleError());
106                         }
107                         if (!ServerInstance->LoadModule(parameters[0]))
108                         {
109                                 user->WriteServ("974 %s %s :Failed to load module: %s",user->nick, parameters[0],ServerInstance->ModuleError());
110                         }
111                         ServerInstance->WriteOpers("*** MODULE '%s' GLOBALLY RELOADED BY '%s'",parameters[0],user->nick);
112                         user->WriteServ("975 %s %s :Module successfully loaded.",user->nick, parameters[0]);
113                 }
114                 else
115                         ServerInstance->WriteOpers("*** MODULE '%s' GLOBAL RELOAD BY '%s' (not reloaded here)",parameters[0],user->nick);
116
117                 return CMD_SUCCESS;
118         }
119 };
120
121 class ModuleGlobalLoad : public Module
122 {
123         cmd_gloadmodule *mycommand;
124         cmd_gunloadmodule *mycommand2;
125         cmd_greloadmodule *mycommand3;
126         
127  public:
128         ModuleGlobalLoad(InspIRCd* Me) : Module(Me)
129         {
130                 
131                 mycommand = new cmd_gloadmodule(ServerInstance);
132                 mycommand2 = new cmd_gunloadmodule(ServerInstance);
133                 mycommand3 = new cmd_greloadmodule(ServerInstance);
134                 ServerInstance->AddCommand(mycommand);
135                 ServerInstance->AddCommand(mycommand2);
136                 ServerInstance->AddCommand(mycommand3);
137         }
138         
139         virtual ~ModuleGlobalLoad()
140         {
141         }
142         
143         virtual Version GetVersion()
144         {
145                 return Version(1, 1, 0, 0, VF_COMMON | VF_VENDOR, API_VERSION);
146         }
147 };
148
149 MODULE_INIT(ModuleGlobalLoad)