#include "inspircd.h"
+#include "modules/callerid.h"
enum
{
void* old = get_raw(container);
if (old)
- this->free(old);
+ this->free(NULL, old);
callerid_data* dat = new callerid_data;
set_raw(container, dat);
irc::commasepstream s(value);
std::string tok;
if (s.GetToken(tok))
- dat->lastnotify = ConvToInt(tok);
+ dat->lastnotify = ConvToNum<time_t>(tok);
while (s.GetToken(tok))
{
return dat;
}
- void free(void* item) CXX11_OVERRIDE
+ void free(Extensible* container, void* item) CXX11_OVERRIDE
{
callerid_data* dat = static_cast<callerid_data*>(item);
* /accept nick1,nick2,nick3,*
* to add 3 nicks and then show your list
*/
- CmdResult Handle(const std::vector<std::string>& parameters, User* user) CXX11_OVERRIDE
+ CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE
{
if (CommandParser::LoopCall(user, this, parameters, 0))
return CMD_SUCCESS;
return (RemoveAccept(user, action.first) ? CMD_SUCCESS : CMD_FAILURE);
}
- RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters) CXX11_OVERRIDE
+ RouteDescriptor GetRouting(User* user, const Params& parameters) CXX11_OVERRIDE
{
// There is a list in parameters[0] in two cases:
// Either when the source is remote, this happens because 2.0 servers send comma seperated uuid lists,
}
};
+class CallerIDAPIImpl : public CallerID::APIBase
+{
+ private:
+ CallerIDExtInfo& ext;
+
+ public:
+ CallerIDAPIImpl(Module* Creator, CallerIDExtInfo& Ext)
+ : CallerID::APIBase(Creator)
+ , ext(Ext)
+ {
+ }
+
+ bool IsOnAcceptList(User* source, User* target) CXX11_OVERRIDE
+ {
+ callerid_data* dat = ext.get(target, true);
+ return dat->accepting.count(source);
+ }
+};
+
+
class ModuleCallerID : public Module
{
CommandAccept cmd;
+ CallerIDAPIImpl api;
SimpleUserModeHandler myumode;
// Configuration variables:
public:
ModuleCallerID()
: cmd(this)
+ , api(this, cmd.extInfo)
, myumode(this, "callerid", 'g')
{
}
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* tag = ServerInstance->Config->ConfValue("callerid");
- cmd.maxaccepts = tag->getUInt("maxaccepts", 16);
+ cmd.maxaccepts = tag->getUInt("maxaccepts", 30);
tracknick = tag->getBool("tracknick");
notify_cooldown = tag->getDuration("cooldown", 60);
}