- /* m_dccallow - Jamie Penman-Smithson <jamie@silverdream.org> - September 2006 */
-
-using namespace std;
+/* +------------------------------------+
+ * | Inspire Internet Relay Chat Daemon |
+ * +------------------------------------+
+ *
+ * InspIRCd: (C) 2002-2007 InspIRCd Development Team
+ * See: http://www.inspircd.org/wiki/index.php/Credits
+ *
+ * This program is free but copyrighted software; see
+ * the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
#include <stdio.h>
#include <vector>
DCCAllow() { }
- DCCAllow(std::string nick, std::string hm, time_t so, long ln) : nickname(nick), hostmask(hm), set_on(so), length(ln) { }
+ DCCAllow(const std::string &nick, const std::string &hm, const time_t so, const long ln) : nickname(nick), hostmask(hm), set_on(so), length(ln) { }
};
typedef std::vector<userrec *> userlist;
cmd_dccallow(InspIRCd* Me) : command_t(Me, "DCCALLOW", 0, 0)
{
this->source = "m_dccallow.so";
- syntax = "{[+|-]<nick> <time>}";
+ syntax = "{[+|-]<nick> <time>|HELP|LIST}";
}
CmdResult Handle(const char **parameters, int pcnt, userrec *user)
{
// display current DCCALLOW list
DisplayDCCAllowList(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
else if (pcnt > 0)
{
{
// list current DCCALLOW list
DisplayDCCAllowList(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
else if (!strcasecmp(parameters[0], "HELP"))
{
// display help
DisplayHelp(user);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
}
if (!dl)
{
dl = new dccallowlist;
- user->Extend(std::string("dccallow_list"), dl);
+ user->Extend("dccallow_list", dl);
// add this user to the userlist
ul.push_back(user);
}
if (k->nickname == target->nick)
{
user->WriteServ("996 %s %s :%s is already on your DCCALLOW list", user->nick, user->nick, target->nick);
- return CMD_SUCCESS;
+ return CMD_FAILURE;
+ }
+ else if (ServerInstance->MatchText(user->GetFullHost(), k->hostmask))
+ {
+ user->WriteServ("996 %s %s :You cannot add yourself to your own DCCALLOW list!", user->nick, user->nick);
+ return CMD_FAILURE;
}
}
std::string mask = std::string(target->nick)+"!"+std::string(target->ident)+"@"+std::string(target->dhost);
- std::string default_length = Conf->ReadValue("dccallow", "length", 0).c_str();
+ std::string default_length = Conf->ReadValue("dccallow", "length", 0);
long length;
- if (pcnt == 1 || ServerInstance->Duration(parameters[1]) < 1)
+ if (pcnt < 2)
{
length = ServerInstance->Duration(default_length.c_str());
}
- else if (parameters[1] == 0)
+ else if (!atoi(parameters[1]))
{
length = 0;
}
return CMD_FAILURE;
}
}
- return CMD_SUCCESS;
+ return CMD_FAILURE;
}
void DisplayHelp(userrec* user)
List[I_OnUserPreMessage] = List[I_OnUserPreNotice] = List[I_OnUserQuit] = List[I_OnUserPreNick] = List[I_OnRehash] = 1;
}
- virtual void OnRehash(const std::string ¶meter)
+ virtual void OnRehash(userrec* user, const std::string ¶meter)
{
delete Conf;
Conf = new ConfigReader(ServerInstance);
return 0;
}
- virtual int OnUserPreMessage(userrec* user, void* dest, int target_type, std::string &text, char status)
+ virtual int OnUserPreMessage(userrec* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
{
- return OnUserPreNotice(user, dest, target_type, text, status);
+ return OnUserPreNotice(user, dest, target_type, text, status, exempt_list);
}
- virtual int OnUserPreNotice(userrec* user, void* dest, int target_type, std::string &text, char status)
+ virtual int OnUserPreNotice(userrec* user, void* dest, int target_type, std::string &text, char status, CUList &exempt_list)
{
Expire();
if (target_type == TYPE_USER)
{
userrec* u = (userrec*)dest;
+
+ /* Always allow a user to dcc themselves (although... why?) */
+ if (user == u)
+ return 0;
if ((text.length()) && (text[0] == '\1'))
{
virtual Version GetVersion()
{
- return Version(1,0,0,0,VF_COMMON,API_VERSION);
+ return Version(1,1,0,0,VF_COMMON,API_VERSION);
}
};