X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Futils.h;h=2f8fc75dbd14a123cfacfb6aa243f8d4d1816607;hb=6d03943426dcce76ba66567a9b18425a5ebb4c0c;hp=c824b75edc20f49f996dbd825bd9bc21c819cdcf;hpb=29b51086b95c86f812ac35ed7d3333f060ba5a8c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/utils.h b/src/modules/m_spanningtree/utils.h index c824b75ed..2f8fc75db 100644 --- a/src/modules/m_spanningtree/utils.h +++ b/src/modules/m_spanningtree/utils.h @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -21,16 +21,40 @@ class TreeServer; class TreeSocket; class Link; class ModuleSpanningTree; +class SpanningTreeUtilities; /* This hash_map holds the hash equivalent of the server * tree, used for rapid linear lookups. */ -#ifdef WINDOWS -typedef nspace::hash_map > > server_hash; +#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED) + typedef nspace::hash_map > > server_hash; #else -typedef nspace::hash_map, irc::StrHashComp> server_hash; + #ifdef HASHCOMP_DEPRECATED + typedef nspace::hash_map server_hash; + #else + typedef nspace::hash_map, irc::StrHashComp> server_hash; + #endif #endif +/* + * Initialises server connections + */ +class ServerSocketListener : public ListenSocketBase +{ + SpanningTreeUtilities *Utils; + + public: + ServerSocketListener(SpanningTreeUtilities *u, int port, char* addr) : ListenSocketBase(port, addr) + { + this->Utils = u; + Hook = NULL; + } + + Module* Hook; + + virtual void OnAcceptReady(int nfd); +}; + typedef std::map TreeServerList; /** A group of modules that implement BufferedSocketHook @@ -38,15 +62,26 @@ typedef std::map TreeServerList; */ typedef std::map hookmodules; +/** The Autoconnect class might as well be a struct, + * but this is C++ and we don't believe in structs (!). + * It holds the entire information of one + * tag from the main config file. We maintain a list + * of them, and populate the list on rehash/load. + */ +class Autoconnect : public classbase +{ + public: + unsigned long Period; + std::string Server; + time_t NextConnectTime; + std::string FailOver; +}; + /** Contains helper functions and variables for this module, * and keeps them out of the global namespace */ -class SpanningTreeUtilities +class SpanningTreeUtilities : public classbase { - private: - /** Creator server - */ - InspIRCd* ServerInstance; public: /** Creator module */ @@ -62,12 +97,17 @@ class SpanningTreeUtilities */ bool AnnounceTSChange; + /** Allow modules marked as VF_OPTCOMMON to be mismatched when linking + */ + bool AllowOptCommon; + /** Make snomasks +CQ quiet during bursts and splits */ bool quiet_bursts; + /** Socket bindings for listening sockets */ - std::vector Bindings; + std::vector Bindings; /* Number of seconds that a server can go without ping * before opers are warned of high latency. */ @@ -75,6 +115,9 @@ class SpanningTreeUtilities /** This variable represents the root of the server tree */ TreeServer *TreeRoot; + /** Represents the server whose command we are processing + */ + FakeUser *ServerUser; /** IPs allowed to link to us */ std::vector ValidIPs; @@ -87,9 +130,15 @@ class SpanningTreeUtilities /** Hash of servers currently bursting but not initialized as connected */ std::map burstingserverlist; + /** List of all outgoing sockets and their timeouts + */ + std::map > timeoutlist; /** Holds the data from the tags in the conf */ std::vector LinkBlocks; + /** Holds the data from the tags in the conf + */ + std::vector AutoconnectBlocks; /** List of module pointers which can provide I/O abstraction */ @@ -113,7 +162,7 @@ class SpanningTreeUtilities /** Initialise utility class */ - SpanningTreeUtilities(InspIRCd* Instance, ModuleSpanningTree* Creator); + SpanningTreeUtilities(ModuleSpanningTree* Creator); /** Destroy class and free listeners etc */ @@ -121,27 +170,27 @@ class SpanningTreeUtilities /** Send a message from this server to one other local or remote */ - bool DoOneToOne(const std::string &prefix, const std::string &command, std::deque ¶ms, std::string target); + bool DoOneToOne(const std::string &prefix, const std::string &command, parameterlist ¶ms, std::string target); /** Send a message from this server to all but one other, local or remote */ - bool DoOneToAllButSender(const std::string &prefix, const std::string &command, std::deque ¶ms, std::string omit); + bool DoOneToAllButSender(const std::string &prefix, const std::string &command, parameterlist ¶ms, std::string omit); /** Send a message from this server to all but one other, local or remote */ - bool DoOneToAllButSender(const char* prefix, const char* command, std::deque ¶ms, std::string omit); + bool DoOneToAllButSender(const char* prefix, const char* command, parameterlist ¶ms, std::string omit); /** Send a message from this server to all others */ - bool DoOneToMany(const std::string &prefix, const std::string &command, std::deque ¶ms); + bool DoOneToMany(const std::string &prefix, const std::string &command, parameterlist ¶ms); /** Send a message from this server to all others */ - bool DoOneToMany(const char* prefix, const char* command, std::deque ¶ms); + bool DoOneToMany(const char* prefix, const char* command, parameterlist ¶ms); /** Send a message from this server to all others, without doing any processing on the command (e.g. send it as-is with colons and all) */ - bool DoOneToAllButSenderRaw(const std::string &data, const std::string &omit, const std::string &prefix, const irc::string &command, std::deque ¶ms); + bool DoOneToAllButSenderRaw(const std::string &data, const std::string &omit, const std::string &prefix, const irc::string &command, parameterlist ¶ms); /** Read the spanningtree module's tags from the config file */ @@ -177,7 +226,7 @@ class SpanningTreeUtilities /** Attempt to connect to the failover link of link x */ - void DoFailOver(Link* x); + void DoFailOver(Autoconnect* x); /** Find a link tag from a server name */