From d336a2499746765fcea81164db1a6a21b1b5384d Mon Sep 17 00:00:00 2001 From: brain Date: Sat, 26 Nov 2005 21:58:07 +0000 Subject: Added reading of server link configs git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1960 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_spanningtree.cpp | 85 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 73 insertions(+), 12 deletions(-) (limited to 'src/modules/m_spanningtree.cpp') diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index 3dc5af0d3..b25e746a9 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -22,6 +22,8 @@ using namespace std; #include "channels.h" #include "modules.h" #include "socket.h" +#include "helperfuncs.h" +#include "inspircd.h" enum ServerState { CONNECTING, WAIT_AUTH_1, WAIT_AUTH_2, CONNECTED }; @@ -44,14 +46,24 @@ class TreeServer TreeServer() { + Parent = NULL; + ServerName = ""; + ServerDesc = ""; + VersionString = ""; + UserCount = OperCount = 0; } TreeServer(std::string Name, std::string Desc) : ServerName(Name), ServerDesc(Desc) { + Parent = NULL; + VersionString = ""; + UserCount = OperCount = 0; } TreeServer(std::string Name, std::string Desc, TreeServer* Above) : Parent(Above), ServerName(Name), ServerDesc(Desc) { + VersionString = ""; + UserCount = OperCount = 0; } void AddChild(TreeServer* Child) @@ -73,9 +85,22 @@ class TreeServer } }; +class Link +{ + public: + std::string Name; + std::string IPAddr; + int Port; + std::string SendPass; + std::string RecvPass; +}; + /* $ModDesc: Povides a spanning tree server link protocol */ Server *Srv; +ConfigReader *Conf; +TreeServer *TreeRoot; +std::vector LinkBlocks; // To attach sockets to the core of the ircd, we must use the InspSocket // class which can be found in socket.h. This class allows modules to create @@ -214,10 +239,6 @@ class TreeSocket : public InspSocket } }; -// This is a test function which creates an outbound socket to a given -// hostname. It provides an example of how to create a new outbound -// socket to a host. - void handle_connecttest(char **parameters, int pcnt, userrec *user) { std::string addr = parameters[0]; @@ -227,20 +248,60 @@ void handle_connecttest(char **parameters, int pcnt, userrec *user) class ModuleSpanningTree : public Module { + std::vector Bindings; + public: + + void ReadConfiguration(bool rebind) + { + if (rebind) + { + for (int j =0; j < Conf->Enumerate("bind"); j++) + { + std::string TypeName = Conf->ReadValue("bind","type",j); + std::string IP = Conf->ReadValue("bind","address"); + long Port = Conf->ReadInteger("bind","port",true); + if (IP == "*") + { + IP = ""; + } + // TODO: Error check here for failed bindings + TreeSocket* listener = new TreeSocket(IP.c_str(),Port,true,10); + if (listener->GetStatus() == I_LISTENING) + { + Srv->AddSocket(listener); + Bindings.push_back(listener); + } + else + { + log(DEFAULT,"m_spanningtree: Warning: Failed to bind server port %d",Port); + } + } + } + LinkBlocks.clear(); + for (j =0; j < Conf->Enumerate("link"); j++) + { + Link L; + L.Name = Conf->ReadValue("link","name",j); + L.IPAddr = Conf->ReadValue("link","ipaddr",j); + L.Port = Conf->ReadInteger("link","port",true); + L.SendPass = Conf->ReadValue("link","sendpass"); + L.RecvPass = Conf->ReadValue("link","recvpass"); + LinkBlocks.push_back(L); + log(DEBUG,"m_spanningtree: Read server %s with host %s:%d",L.Name.c_str(),L.IPAddr.c_str(),L.Port); + } + } + ModuleSpanningTree() { Srv = new Server; - - Srv->AddCommand("CONNECTTEST",handle_connecttest,'o',1,"m_spanningtree.so"); + Conf = new ConfigReader; + Bindings.clear(); - // This is an example of how to create a new inbound socket to a host. - // Please remember that so long as you AddSocket() your sockets, you - // do not need to track resources and do not need to delete your classes - // when you are finished with them. + // Create the root of the tree + TreeRoot = new TreeServer(Srv->GetServerName(),Srv->GetServerDescription()); - TreeSocket* listeningsock = new TreeSocket("127.0.0.1",11111,true,10); - Srv->AddSocket(listeningsock); + ReadConfiguration(true); } virtual ~ModuleSpanningTree() -- cgit v1.2.3