]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Add basic stuff for protocol interface and implement a couple of the methods. It...
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 4 Apr 2008 12:30:38 +0000 (12:30 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Fri, 4 Apr 2008 12:30:38 +0000 (12:30 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9297 e03df62e-2008-0410-955e-edbf42e46eb7

include/inspircd.h
include/protocol.h [new file with mode: 0644]
src/inspircd.cpp
src/modules/m_spanningtree/main.cpp
src/modules/m_spanningtree/protocolinterface.cpp [new file with mode: 0644]
src/modules/m_spanningtree/protocolinterface.h [new file with mode: 0644]

index 05e33cf0c0f2d59d210abe1f883bed1e84519351..c1c6379a490c6edd9690e6d1be9044f696d3d759 100644 (file)
@@ -56,6 +56,7 @@
 #include "modules.h"
 #include "configreader.h"
 #include "inspstring.h"
+#include "protocol.h"
 
 /**
  * Used to define the maximum number of parameters a command may have.
@@ -463,6 +464,10 @@ class CoreExport InspIRCd : public classbase
         */
        int s_signal;
 
+       /** Protocol interface, overridden by server protocol modules
+        */
+       ProtocolInterface* PI;
+
        /** Get the current time
         * Because this only calls time() once every time around the mainloop,
         * it is much faster than calling time() directly.
diff --git a/include/protocol.h b/include/protocol.h
new file mode 100644 (file)
index 0000000..65369e7
--- /dev/null
@@ -0,0 +1,40 @@
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2008 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.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __PROTOCOL_H__
+#define __PROTOCOL_H__
+
+class InspIRCd;
+
+typedef std::deque<std::string> parameterlist;
+
+class ProtocolInterface : public Extensible
+{
+ protected:
+       InspIRCd* ServerInstance;
+ public:
+       ProtocolInterface(InspIRCd* Instance) : ServerInstance(Instance) { }
+       virtual ~ProtocolInterface() { }
+
+       virtual void SendEncapsulatedData(parameterlist &encap) { }
+       virtual void SendMetaData(void* target, int type, const std::string &key, const std::string &data) { }
+       virtual void SendTopic(Channel* channel, std::string &topic) { }
+       virtual void SendMode(const std::string &origin, const std::string &target, parameterlist &modedata) { }
+       virtual void SendOperNotice(const std::string &text) { }
+       virtual void SendModeNotice(const std::string &modes, const std::string &text) { }
+       virtual void SendSNONotice(const std::string &snomask, const std::string &text) { }
+       virtual void PushToClient(User* target, const std::string &rawline) { }
+};
+
+#endif
+
index cd13087cfa3a844ed67c551d8b2ff92e8e40c325..5f50e900cd3cb297136835607740003f6c263215 100644 (file)
@@ -309,11 +309,13 @@ InspIRCd::InspIRCd(int argc, char** argv)
        SE = SEF->Create(this);
        delete SEF;
 
-
        ThreadEngineFactory* tef = new ThreadEngineFactory();
        this->Threads = tef->Create(this);
        delete tef;
 
+       /* Default implementation does nothing */
+       this->PI = new ProtocolInterface(this);
+
        this->s_signal = 0;
        
        // Create base manager classes early, so nothing breaks
index b1f5d31530944eaa31d90ec367debfa7d1ad2fde..e5c7518e784e53f5f2abfedac472c61277640a4b 100644 (file)
@@ -30,8 +30,9 @@
 #include "m_spanningtree/treesocket.h"
 #include "m_spanningtree/rconnect.h"
 #include "m_spanningtree/rsquit.h"
+#include "m_spanningtree/protocolinterface.h"
 
-/* $ModDep: m_spanningtree/timesynctimer.h m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h m_spanningtree/rconnect.h m_spanningtree/rsquit.h */
+/* $ModDep: m_spanningtree/timesynctimer.h m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h m_spanningtree/rconnect.h m_spanningtree/rsquit.h m_spanningtree/protocolinterface.h */
 
 ModuleSpanningTree::ModuleSpanningTree(InspIRCd* Me)
        : Module(Me), max_local(0), max_global(0)
@@ -56,6 +57,9 @@ ModuleSpanningTree::ModuleSpanningTree(InspIRCd* Me)
        };
        ServerInstance->Modules->Attach(eventlist, this, 28);
 
+       delete ServerInstance->PI;
+       ServerInstance->PI = new SpanningTreeProtocolInterface(this, Utils, ServerInstance);
+
        for (std::vector<User*>::const_iterator i = ServerInstance->Users->local_users.begin(); i != ServerInstance->Users->local_users.end(); i++)
        {
                this->OnPostConnect((*i));
@@ -990,6 +994,9 @@ void ModuleSpanningTree::OnEvent(Event* event)
 ModuleSpanningTree::~ModuleSpanningTree()
 {
        /* This will also free the listeners */
+       delete ServerInstance->PI;
+       ServerInstance->PI = new ProtocolInterface(ServerInstance);
+
        delete Utils;
 
        ServerInstance->Timers->DelTimer(RefreshTimer);
diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp
new file mode 100644 (file)
index 0000000..cf774d6
--- /dev/null
@@ -0,0 +1,64 @@
+#include "inspircd.h"
+#include "m_spanningtree/main.h"
+#include "m_spanningtree/utils.h"
+#include "m_spanningtree/protocolinterface.h"
+
+void SpanningTreeProtocolInterface::SendEncapsulatedData(parameterlist &encap)
+{
+       Utils->DoOneToMany(ServerInstance->Config->GetSID(), "ENCAP", encap);
+}
+
+void SpanningTreeProtocolInterface::SendMetaData(void* target, int type, const std::string &key, const std::string &data)
+{
+       parameterlist params;
+
+       switch (type)
+       {
+               case TYPE_USER:
+                       params.push_back(((User*)target)->uuid);
+               break;
+               case TYPE_CHANNEL:
+                       params.push_back(((Channel*)target)->name);
+               break;
+               case TYPE_SERVER:
+                       params.push_back(ServerInstance->Config->GetSID());
+               break;
+       }
+       params.push_back(key);
+       params.push_back(":" + data);
+
+       Utils->DoOneToMany(ServerInstance->Config->GetSID(),"METADATA",params);
+}
+
+void SpanningTreeProtocolInterface::SendTopic(Channel* channel, std::string &topic)
+{
+       parameterlist params;
+
+       params.push_back(channel->name);
+       params.push_back(ConvToStr(ServerInstance->Time()));
+       params.push_back(ServerInstance->Config->ServerName);
+       params.push_back(":" + topic);
+
+       Utils->DoOneToMany(ServerInstance->Config->GetSID(),"FTOPIC", params);
+}
+
+void SpanningTreeProtocolInterface::SendMode(const std::string &origin, const std::string &target, parameterlist &modedata)
+{
+}
+
+void SpanningTreeProtocolInterface::SendOperNotice(const std::string &text)
+{
+}
+
+void SpanningTreeProtocolInterface::SendModeNotice(const std::string &modes, const std::string &text)
+{
+}
+
+void SpanningTreeProtocolInterface::SendSNONotice(const std::string &snomask, const std::string &text)
+{
+}
+
+void SpanningTreeProtocolInterface::PushToClient(User* target, const std::string &rawline)
+{
+}
+
diff --git a/src/modules/m_spanningtree/protocolinterface.h b/src/modules/m_spanningtree/protocolinterface.h
new file mode 100644 (file)
index 0000000..568f334
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef _SPANNINGTREE_PROTOCOL_INT_
+#define _SPANNINGTREE_PROTOCOL_INT_
+
+class SpanningTreeUtilities;
+class ModuleSpanningTree;
+
+
+class SpanningTreeProtocolInterface : public ProtocolInterface
+{
+       SpanningTreeUtilities* Utils;
+       ModuleSpanningTree* Module;
+ public:
+        SpanningTreeProtocolInterface(ModuleSpanningTree* mod, SpanningTreeUtilities* util, InspIRCd* Instance) : ProtocolInterface(Instance), Utils(util), Module(mod) { }
+        virtual ~SpanningTreeProtocolInterface() { }
+
+        virtual void SendEncapsulatedData(parameterlist &encap);
+        virtual void SendMetaData(void* target, int type, const std::string &key, const std::string &data);
+        virtual void SendTopic(Channel* channel, std::string &topic);
+        virtual void SendMode(const std::string &origin, const std::string &target, parameterlist &modedata);
+        virtual void SendOperNotice(const std::string &text);
+        virtual void SendModeNotice(const std::string &modes, const std::string &text);
+        virtual void SendSNONotice(const std::string &snomask, const std::string &text);
+        virtual void PushToClient(User* target, const std::string &rawline);
+};
+
+#endif