#include <vector>
#include "users.h"
#include "channels.h"
-#include "helperfuncs.h"
+
#include "modules.h"
#include "inspircd.h"
-extern InspIRCd* ServerInstance;
+
/* $ModDesc: Provides support for user parking/unparking */
time_t parktime;
};
-static Server *Srv;
+
typedef std::vector<awaymsg> awaylog;
typedef std::vector<parkedinfo> parkinfo;
parkinfo pinfo;
class cmd_park : public command_t
{
public:
- cmd_park () : command_t("PARK", 0, 0)
+ cmd_park (InspIRCd* Instance) : command_t(Instance,"PARK", 0, 0)
{
this->source = "m_park.so";
}
- void Handle (const char** parameters, int pcnt, userrec *user)
+ CmdResult Handle (const char** parameters, int pcnt, userrec *user)
{
/** Parking. easy stuff.
*
if (othersessions >= ConcurrentParks)
{
user->WriteServ("927 "+std::string(user->nick)+" :You are already parked up to the maximum number of allowed times.");
+ return CMD_FAILURE;
}
else
{
pi.host = user->host;
pi.parktime = time(NULL);
pinfo.push_back(pi);
+ return CMD_SUCCESS;
}
}
class cmd_parkstats : public command_t
{
public:
- cmd_parkstats () : command_t("PARKSTATS", 'o', 0)
+ cmd_parkstats (InspIRCd* Instance) : command_t(Instance,"PARKSTATS", 'o', 0)
{
this->source = "m_park.so";
}
- void Handle (const char** parameters, int pcnt, userrec *user)
+ CmdResult Handle (const char** parameters, int pcnt, userrec *user)
{
char status[MAXBUF];
snprintf(status,MAXBUF,"NOTICE %s :There are a total of %lu parked clients on this server, with a maximum of %lu parked sessions allowed per user.",user->nick,(unsigned long)pinfo.size(),(unsigned long)ConcurrentParks);
user->WriteServ(std::string(status));
+ return CMD_SUCCESS;
}
};
class cmd_unpark : public command_t
{
public:
- cmd_unpark () : command_t("UNPARK", 0, 2)
+ cmd_unpark (InspIRCd* Instance) : command_t(Instance,"UNPARK", 0, 2)
{
this->source = "m_park.so";
syntax = "<nick> <key>";
}
- void Handle (const char** parameters, int pcnt, userrec *user)
+ CmdResult Handle (const char** parameters, int pcnt, userrec *user)
{
/** Unparking. complicated stuff.
*
if (!unpark)
{
user->WriteServ("942 %s %s :Invalid user specified.",user->nick, parameters[0]);
- return;
+ return CMD_FAILURE;
}
awaylog* awy;
unpark->GetExt("park_awaylog", awy);
if (!awy)
{
user->WriteServ("943 %s %s :This user is not parked.",user->nick, unpark->nick);
- return;
+ return CMD_FAILURE;
}
if (*key == atoi(parameters[1]))
{
else
{
user->WriteServ("928 "+std::string(user->nick)+" :Incorrect park key.");
+ return CMD_FAILURE;
}
+
+ return CMD_SUCCESS;
}
};
public:
virtual void ReadSettings()
{
- Conf = new ConfigReader;
+ Conf = new ConfigReader(ServerInstance);
ParkMaxTime = Conf->ReadInteger("park","maxtime",0,true);
ConcurrentParks = Conf->ReadInteger("park","maxperip",0,true);
ParkMaxMsgs = Conf->ReadInteger("park","maxmessages",0,true);
pinfo.clear();
this->ReadSettings();
- cmd1 = new cmd_park();
- cmd2 = new cmd_unpark();
- cmd3 = new cmd_parkstats();
- Srv->AddCommand(cmd1);
- Srv->AddCommand(cmd2);
- Srv->AddCommand(cmd3);
+ cmd1 = new cmd_park(ServerInstance);
+ cmd2 = new cmd_unpark(ServerInstance);
+ cmd3 = new cmd_parkstats(ServerInstance);
+ ServerInstance->AddCommand(cmd1);
+ ServerInstance->AddCommand(cmd2);
+ ServerInstance->AddCommand(cmd3);
}
virtual ~ModulePark()