summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-09-02 15:28:16 -0400
committerAdam <Adam@anope.org>2011-09-10 02:05:03 -0400
commit17ea4ed8f5c4b08668223897c6de87dd3bdd598c (patch)
treea32cf0bde18678d9ad8895f3e032cf69c48d13f2
parentfeaef7cc4aa97a0851ad404fc76652560bb14a70 (diff)
Fixed service_reference to work correctly with external classes
-rw-r--r--include/modules.h4
-rw-r--r--include/services.h2
-rw-r--r--modules/commands/os_defcon.cpp2
-rw-r--r--modules/commands/os_forbid.cpp2
-rw-r--r--modules/commands/os_forbid.h4
-rw-r--r--modules/commands/os_ignore.cpp10
-rw-r--r--modules/commands/os_ignore.h4
-rw-r--r--modules/commands/os_news.cpp2
-rw-r--r--modules/commands/os_news.h4
-rw-r--r--modules/commands/os_session.cpp4
-rw-r--r--modules/commands/os_session.h4
-rw-r--r--modules/database/db_mysql.cpp4
-rw-r--r--modules/database/db_mysql_live.cpp2
-rw-r--r--modules/database/db_plain.cpp2
-rw-r--r--modules/extra/ldap.h4
-rw-r--r--modules/extra/m_ldap_authentication.cpp2
-rw-r--r--modules/extra/m_ldap_oper.cpp2
-rw-r--r--modules/extra/m_xmlrpc.cpp2
-rw-r--r--modules/extra/m_xmlrpc_main.cpp2
-rw-r--r--modules/extra/sql.h4
-rw-r--r--modules/extra/ssl.h4
-rw-r--r--modules/extra/xmlrpc.h4
-rw-r--r--modules/pseudoclients/botserv.h63
-rw-r--r--modules/pseudoclients/global.h6
-rw-r--r--modules/pseudoclients/memoserv.h6
-rw-r--r--modules/pseudoclients/nickserv.h6
26 files changed, 47 insertions, 108 deletions
diff --git a/include/modules.h b/include/modules.h
index f76a1f58a..600b3ce8c 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -1219,7 +1219,7 @@ class CallBack : public Timer
}
};
-template<typename T>
+template<typename T, typename U = T>
class service_reference : public dynamic_reference<T>
{
Anope::string name;
@@ -1238,7 +1238,7 @@ class service_reference : public dynamic_reference<T>
}
if (!this->ref)
{
- this->ref = Service<T>::FindService(this->name);
+ this->ref = static_cast<T *>(Service<U>::FindService(this->name));
if (this->ref)
this->ref->AddReference(this);
}
diff --git a/include/services.h b/include/services.h
index 47e9b8940..5b5cf46bb 100644
--- a/include/services.h
+++ b/include/services.h
@@ -396,6 +396,8 @@ template<typename T> class CoreExport Service : public Base
};
template<typename T> Anope::map<T *> Service<T>::services;
+template class Service<Base>;
+
#include "sockets.h"
#include "socketengine.h"
#include "extensible.h"
diff --git a/modules/commands/os_defcon.cpp b/modules/commands/os_defcon.cpp
index 47851bd89..4966f9e78 100644
--- a/modules/commands/os_defcon.cpp
+++ b/modules/commands/os_defcon.cpp
@@ -243,7 +243,7 @@ class CommandOSDefcon : public Command
class OSDefcon : public Module
{
- service_reference<SessionService> session_service;
+ service_reference<SessionService, Base> session_service;
service_reference<XLineManager> akills;
CommandOSDefcon commandosdefcon;
diff --git a/modules/commands/os_forbid.cpp b/modules/commands/os_forbid.cpp
index f4ce7b0c8..ef591923c 100644
--- a/modules/commands/os_forbid.cpp
+++ b/modules/commands/os_forbid.cpp
@@ -75,7 +75,7 @@ class MyForbidService : public ForbidService
class CommandOSForbid : public Command
{
- service_reference<ForbidService> fs;
+ service_reference<ForbidService, Base> fs;
public:
CommandOSForbid(Module *creator) : Command(creator, "operserv/forbid", 1, 5), fs("forbid")
{
diff --git a/modules/commands/os_forbid.h b/modules/commands/os_forbid.h
index d7b6e1467..06a936645 100644
--- a/modules/commands/os_forbid.h
+++ b/modules/commands/os_forbid.h
@@ -19,10 +19,10 @@ struct ForbidData
ForbidType type;
};
-class ForbidService : public Service<ForbidService>
+class ForbidService : public Service<Base>
{
public:
- ForbidService(Module *m) : Service<ForbidService>(m, "forbid") { }
+ ForbidService(Module *m) : Service<Base>(m, "forbid") { }
virtual void AddForbid(ForbidData *d) = 0;
diff --git a/modules/commands/os_ignore.cpp b/modules/commands/os_ignore.cpp
index 46286786f..5f2cbb195 100644
--- a/modules/commands/os_ignore.cpp
+++ b/modules/commands/os_ignore.cpp
@@ -146,7 +146,7 @@ class CommandOSIgnore : public Command
private:
void DoAdd(CommandSource &source, const std::vector<Anope::string> &params)
{
- service_reference<IgnoreService> ignore_service("ignore");
+ service_reference<IgnoreService, Base> ignore_service("ignore");
if (!ignore_service)
return;
@@ -181,7 +181,7 @@ class CommandOSIgnore : public Command
void DoList(CommandSource &source)
{
- service_reference<IgnoreService> ignore_service("ignore");
+ service_reference<IgnoreService, Base> ignore_service("ignore");
if (!ignore_service)
return;
@@ -205,7 +205,7 @@ class CommandOSIgnore : public Command
void DoDel(CommandSource &source, const std::vector<Anope::string> &params)
{
- service_reference<IgnoreService> ignore_service("ignore");
+ service_reference<IgnoreService, Base> ignore_service("ignore");
if (!ignore_service)
return;
@@ -222,7 +222,7 @@ class CommandOSIgnore : public Command
void DoClear(CommandSource &source)
{
- service_reference<IgnoreService> ignore_service("ignore");
+ service_reference<IgnoreService, Base> ignore_service("ignore");
if (!ignore_service)
return;
@@ -301,7 +301,7 @@ class OSIgnore : public Module
{
if (params.size() >= 4 && params[0].equals_ci("OS") && params[1].equals_ci("IGNORE"))
{
- service_reference<IgnoreService> ignore_service("ignore");
+ service_reference<IgnoreService, Base> ignore_service("ignore");
if (ignore_service)
{
const Anope::string &mask = params[2];
diff --git a/modules/commands/os_ignore.h b/modules/commands/os_ignore.h
index daa8e1863..b00f427dd 100644
--- a/modules/commands/os_ignore.h
+++ b/modules/commands/os_ignore.h
@@ -18,12 +18,12 @@ struct IgnoreData
time_t time; /* When do we stop ignoring them? */
};
-class IgnoreService : public Service<IgnoreService>
+class IgnoreService : public Service<Base>
{
protected:
std::list<IgnoreData> ignores;
- IgnoreService(Module *c, const Anope::string &n) : Service<IgnoreService>(c, n) { }
+ IgnoreService(Module *c, const Anope::string &n) : Service<Base>(c, n) { }
public:
virtual void AddIgnore(const Anope::string &mask, const Anope::string &creator, const Anope::string &reason, time_t delta = Anope::CurTime) = 0;
diff --git a/modules/commands/os_news.cpp b/modules/commands/os_news.cpp
index 227bc9380..6a959ee47 100644
--- a/modules/commands/os_news.cpp
+++ b/modules/commands/os_news.cpp
@@ -106,7 +106,7 @@ static const char **findmsgs(NewsType type)
class NewsBase : public Command
{
- service_reference<NewsService> ns;
+ service_reference<NewsService, Base> ns;
protected:
void DoList(CommandSource &source, NewsType type, const char **msgs)
diff --git a/modules/commands/os_news.h b/modules/commands/os_news.h
index 484c8403e..436cadcb4 100644
--- a/modules/commands/os_news.h
+++ b/modules/commands/os_news.h
@@ -23,10 +23,10 @@ struct NewsItem
time_t time;
};
-class NewsService : public Service<NewsService>
+class NewsService : public Service<Base>
{
public:
- NewsService(Module *m) : Service<NewsService>(m, "news") { }
+ NewsService(Module *m) : Service<Base>(m, "news") { }
virtual void AddNewsItem(NewsItem *n) = 0;
diff --git a/modules/commands/os_session.cpp b/modules/commands/os_session.cpp
index a8808420c..8b174f333 100644
--- a/modules/commands/os_session.cpp
+++ b/modules/commands/os_session.cpp
@@ -14,7 +14,7 @@
#include "module.h"
#include "os_session.h"
-static service_reference<SessionService> sessionservice("session");
+static service_reference<SessionService, Base> sessionservice("session");
class MySessionService : public SessionService
{
@@ -634,7 +634,7 @@ class OSSession : public Module
ExpireTimer expiretimer;
CommandOSSession commandossession;
CommandOSException commandosexception;
- service_reference<XLineManager> akills;
+ service_reference<XLineManager, Base> akills;
void AddSession(User *u, bool exempt)
{
diff --git a/modules/commands/os_session.h b/modules/commands/os_session.h
index e47fb3c51..d406a7154 100644
--- a/modules/commands/os_session.h
+++ b/modules/commands/os_session.h
@@ -1,13 +1,13 @@
#ifndef OS_SESSION_H
#define OS_SESSION_H
-class SessionService : public Service<SessionService>
+class SessionService : public Service<Base>
{
public:
typedef Anope::map<Session *> SessionMap;
typedef std::vector<Exception *> ExceptionVector;
- SessionService(Module *m) : Service<SessionService>(m, "session") { }
+ SessionService(Module *m) : Service<Base>(m, "session") { }
virtual void AddException(Exception *e) = 0;
diff --git a/modules/database/db_mysql.cpp b/modules/database/db_mysql.cpp
index 163bb5a44..4a9c52202 100644
--- a/modules/database/db_mysql.cpp
+++ b/modules/database/db_mysql.cpp
@@ -88,10 +88,10 @@ class DBMySQL : public Module
private:
CommandSQLSync commandsqlsync;
MySQLInterface sqlinterface;
- service_reference<SQLProvider> SQL;
+ service_reference<SQLProvider, Base> SQL;
public:
- service_reference<SessionService> SessionInterface;
+ service_reference<SessionService, Base> SessionInterface;
time_t lastwarn;
bool ro;
diff --git a/modules/database/db_mysql_live.cpp b/modules/database/db_mysql_live.cpp
index d320b5001..d583c394c 100644
--- a/modules/database/db_mysql_live.cpp
+++ b/modules/database/db_mysql_live.cpp
@@ -134,7 +134,7 @@ static void NickCoreUpdate(const SQLResult &res)
class MySQLLiveModule : public Module
{
- service_reference<SQLProvider> SQL;
+ service_reference<SQLProvider, Base> SQL;
SQLCache chan_cache, nick_cache, core_cache;
diff --git a/modules/database/db_plain.cpp b/modules/database/db_plain.cpp
index 83098ced9..dfcddfcfe 100644
--- a/modules/database/db_plain.cpp
+++ b/modules/database/db_plain.cpp
@@ -15,7 +15,7 @@
Anope::string DatabaseFile;
std::stringstream db_buffer;
-service_reference<SessionService> SessionInterface("session");
+service_reference<SessionService, Base> SessionInterface("session");
/** Enum used for what METADATA type we are reading
*/
diff --git a/modules/extra/ldap.h b/modules/extra/ldap.h
index 7ac0d545f..e4be8a1a3 100644
--- a/modules/extra/ldap.h
+++ b/modules/extra/ldap.h
@@ -111,10 +111,10 @@ class LDAPInterface
virtual void OnError(const LDAPResult &err) { }
};
-class LDAPProvider : public Service<LDAPProvider>
+class LDAPProvider : public Service<Base>
{
public:
- LDAPProvider(Module *c, const Anope::string &n) : Service<LDAPProvider>(c, n) { }
+ LDAPProvider(Module *c, const Anope::string &n) : Service<Base>(c, n) { }
/** Attempt to bind to the LDAP server as an admin
* @param i The LDAPInterface the result is sent to
diff --git a/modules/extra/m_ldap_authentication.cpp b/modules/extra/m_ldap_authentication.cpp
index 4b1b8ca27..25d75a410 100644
--- a/modules/extra/m_ldap_authentication.cpp
+++ b/modules/extra/m_ldap_authentication.cpp
@@ -165,7 +165,7 @@ class OnRegisterInterface : public LDAPInterface
class NSIdentifyLDAP : public Module
{
- service_reference<LDAPProvider> ldap;
+ service_reference<LDAPProvider, Base> ldap;
IdentifyInterface iinterface;
OnIdentifyInterface oninterface;
OnRegisterInterface orinterface;
diff --git a/modules/extra/m_ldap_oper.cpp b/modules/extra/m_ldap_oper.cpp
index 7ea68dc67..59ad0e670 100644
--- a/modules/extra/m_ldap_oper.cpp
+++ b/modules/extra/m_ldap_oper.cpp
@@ -76,7 +76,7 @@ class IdentifyInterface : public LDAPInterface
class LDAPOper : public Module
{
- service_reference<LDAPProvider> ldap;
+ service_reference<LDAPProvider, Base> ldap;
IdentifyInterface iinterface;
Anope::string binddn;
diff --git a/modules/extra/m_xmlrpc.cpp b/modules/extra/m_xmlrpc.cpp
index 5a5556822..01cbc7c85 100644
--- a/modules/extra/m_xmlrpc.cpp
+++ b/modules/extra/m_xmlrpc.cpp
@@ -220,7 +220,7 @@ class ModuleXMLRPC;
static ModuleXMLRPC *me;
class ModuleXMLRPC : public Module
{
- service_reference<SSLService> sslref;
+ service_reference<SSLService, Base> sslref;
public:
MyXMLRPCServiceInterface xmlrpcinterface;
diff --git a/modules/extra/m_xmlrpc_main.cpp b/modules/extra/m_xmlrpc_main.cpp
index ee8306e34..a8294b576 100644
--- a/modules/extra/m_xmlrpc_main.cpp
+++ b/modules/extra/m_xmlrpc_main.cpp
@@ -255,7 +255,7 @@ class MyXMLRPCEvent : public XMLRPCEvent
class ModuleXMLRPCMain : public Module
{
- service_reference<XMLRPCServiceInterface> xmlrpc;
+ service_reference<XMLRPCServiceInterface, Base> xmlrpc;
MyXMLRPCEvent stats;
diff --git a/modules/extra/sql.h b/modules/extra/sql.h
index bc7267ce0..2487b2305 100644
--- a/modules/extra/sql.h
+++ b/modules/extra/sql.h
@@ -108,10 +108,10 @@ class SQLInterface
/** Class providing the SQL service, modules call this to execute queries
*/
-class SQLProvider : public Service<SQLProvider>
+class SQLProvider : public Service<Base>
{
public:
- SQLProvider(Module *c, const Anope::string &n) : Service<SQLProvider>(c, n) { }
+ SQLProvider(Module *c, const Anope::string &n) : Service<Base>(c, n) { }
virtual void Run(SQLInterface *i, const SQLQuery &query) = 0;
diff --git a/modules/extra/ssl.h b/modules/extra/ssl.h
index 8261e4705..5b404067a 100644
--- a/modules/extra/ssl.h
+++ b/modules/extra/ssl.h
@@ -1,8 +1,8 @@
-class SSLService : public Service<SSLService>
+class SSLService : public Service<Base>
{
public:
- SSLService(Module *o, const Anope::string &n) : Service<SSLService>(o, n) { }
+ SSLService(Module *o, const Anope::string &n) : Service<Base>(o, n) { }
virtual void Init(Socket *s) = 0;
};
diff --git a/modules/extra/xmlrpc.h b/modules/extra/xmlrpc.h
index 3a5c05332..a76400728 100644
--- a/modules/extra/xmlrpc.h
+++ b/modules/extra/xmlrpc.h
@@ -55,10 +55,10 @@ class XMLRPCEvent
virtual void Run(XMLRPCServiceInterface *iface, XMLRPCClientSocket *source, XMLRPCRequest *request) = 0;
};
-class XMLRPCServiceInterface : public Service<XMLRPCServiceInterface>
+class XMLRPCServiceInterface : public Service<Base>
{
public:
- XMLRPCServiceInterface(Module *creator, const Anope::string &sname) : Service<XMLRPCServiceInterface>(creator, sname) { }
+ XMLRPCServiceInterface(Module *creator, const Anope::string &sname) : Service<Base>(creator, sname) { }
virtual void Register(XMLRPCEvent *event) = 0;
diff --git a/modules/pseudoclients/botserv.h b/modules/pseudoclients/botserv.h
deleted file mode 100644
index 5fa03f870..000000000
--- a/modules/pseudoclients/botserv.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef BOTSERV_H
-#define BOTSERV_H
-
-struct UserData
-{
- UserData()
- {
- this->Clear();
- }
-
- void Clear()
- {
- last_use = last_start = Anope::CurTime;
- lines = times = 0;
- lastline.clear();
- }
-
- /* Data validity */
- time_t last_use;
-
- /* for flood kicker */
- int16 lines;
- time_t last_start;
-
- /* for repeat kicker */
- Anope::string lastline;
- Anope::string lasttarget;
- int16 times;
-};
-
-struct BanData
-{
- Anope::string mask;
- time_t last_use;
- int16 ttb[TTB_SIZE];
-
- BanData()
- {
- this->Clear();
- }
-
- void Clear()
- {
- last_use = 0;
- for (int i = 0; i < TTB_SIZE; ++i)
- this->ttb[i] = 0;
- }
-};
-
-class BotServService : public Service
-{
- public:
- BotServService(Module *m) : Service(m, "BotServ") { }
-
- virtual UserData *GetUserData(User *u, Channel *c) = 0;
-
- virtual BanData *GetBanData(User *u, Channel *c) = 0;
-};
-
-static service_reference<BotServService> botserv("BotServ");
-
-#endif // BOTSERV_H
-
diff --git a/modules/pseudoclients/global.h b/modules/pseudoclients/global.h
index 364834e73..440ca1d8b 100644
--- a/modules/pseudoclients/global.h
+++ b/modules/pseudoclients/global.h
@@ -1,10 +1,10 @@
#ifndef GLOBAL_H
#define GLOBAL_H
-class GlobalService : public Service<GlobalService>
+class GlobalService : public Service<Base>
{
public:
- GlobalService(Module *m) : Service<GlobalService>(m, "Global") { }
+ GlobalService(Module *m) : Service<Base>(m, "Global") { }
/** Send out a global message to all users
* @param sender Our client which should send the global
@@ -14,7 +14,7 @@ class GlobalService : public Service<GlobalService>
virtual void SendGlobal(BotInfo *sender, const Anope::string &source, const Anope::string &message) = 0;
};
-static service_reference<GlobalService> global("Global");
+static service_reference<GlobalService, Base> global("Global");
#endif // GLOBAL_H
diff --git a/modules/pseudoclients/memoserv.h b/modules/pseudoclients/memoserv.h
index ab608326a..0cc88c9f0 100644
--- a/modules/pseudoclients/memoserv.h
+++ b/modules/pseudoclients/memoserv.h
@@ -1,7 +1,7 @@
#ifndef MEMOSERV_H
#define MEMOSERV_H
-class MemoServService : public Service<MemoServService>
+class MemoServService : public Service<Base>
{
public:
enum MemoResult
@@ -12,7 +12,7 @@ class MemoServService : public Service<MemoServService>
MEMO_TARGET_FULL
};
- MemoServService(Module *m) : Service<MemoServService>(m, "MemoServ") { }
+ MemoServService(Module *m) : Service<Base>(m, "MemoServ") { }
/** Retrieve the memo info for a nick or channel
* @param target Target
@@ -35,7 +35,7 @@ class MemoServService : public Service<MemoServService>
virtual void Check(User *u) = 0;
};
-static service_reference<MemoServService> memoserv("MemoServ");
+static service_reference<MemoServService, Base> memoserv("MemoServ");
#endif // MEMOSERV_H
diff --git a/modules/pseudoclients/nickserv.h b/modules/pseudoclients/nickserv.h
index 1619fac2d..dcca4164b 100644
--- a/modules/pseudoclients/nickserv.h
+++ b/modules/pseudoclients/nickserv.h
@@ -1,15 +1,15 @@
#ifndef NICKSERV_H
#define NICKSERV_H
-class NickServService : public Service<NickServService>
+class NickServService : public Service<Base>
{
public:
- NickServService(Module *m) : Service<NickServService>(m, "NickServ") { }
+ NickServService(Module *m) : Service<Base>(m, "NickServ") { }
virtual void Validate(User *u) = 0;
};
-static service_reference<NickServService> nickserv("NickServ");
+static service_reference<NickServService, Base> nickserv("NickServ");
#endif // NICKSERV_H