summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules/callerid.h51
-rw-r--r--src/modules/m_callerid.cpp23
2 files changed, 74 insertions, 0 deletions
diff --git a/include/modules/callerid.h b/include/modules/callerid.h
new file mode 100644
index 000000000..ed03419b0
--- /dev/null
+++ b/include/modules/callerid.h
@@ -0,0 +1,51 @@
+/*
+ * InspIRCd -- Internet Relay Chat Daemon
+ *
+ * Copyright (C) 2018 Peter Powell <petpow@saberuk.com>
+ *
+ * This file is part of InspIRCd. InspIRCd is free software: you can
+ * redistribute it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, version 2.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#pragma once
+
+namespace CallerID
+{
+ class APIBase;
+ class API;
+}
+
+class CallerID::APIBase : public DataProvider
+{
+ public:
+ APIBase(Module* parent)
+ : DataProvider(parent, "m_callerid_api")
+ {
+ }
+
+ /** Determines whether \p source is on the accept list of \p target.
+ * @param source The user to search for in the accept list.
+ * @param target The user who's accept list to search in.
+ * @return True if \p source is on \p target's accept list; otherwise, false.
+ */
+ virtual bool IsOnAcceptList(User* source, User* target) = 0;
+};
+
+class CallerID::API : public dynamic_reference<CallerID::APIBase>
+{
+ public:
+ API(Module* parent)
+ : dynamic_reference<CallerID::APIBase>(parent, "m_callerid_api")
+ {
+ }
+};
diff --git a/src/modules/m_callerid.cpp b/src/modules/m_callerid.cpp
index cdb10c04c..40cbc3506 100644
--- a/src/modules/m_callerid.cpp
+++ b/src/modules/m_callerid.cpp
@@ -21,6 +21,7 @@
#include "inspircd.h"
+#include "modules/callerid.h"
enum
{
@@ -324,9 +325,30 @@ public:
}
};
+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:
@@ -359,6 +381,7 @@ class ModuleCallerID : public Module
public:
ModuleCallerID()
: cmd(this)
+ , api(this, cmd.extInfo)
, myumode(this, "callerid", 'g')
{
}