X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Futils.h;h=2f8fc75dbd14a123cfacfb6aa243f8d4d1816607;hb=6d03943426dcce76ba66567a9b18425a5ebb4c0c;hp=97c617e0ada9bff406f889c02f836fd76de624ad;hpb=d5c765053ea023497d11c375aaf60bfc7e0dd55f;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/utils.h b/src/modules/m_spanningtree/utils.h index 97c617e0a..2f8fc75db 100644 --- a/src/modules/m_spanningtree/utils.h +++ b/src/modules/m_spanningtree/utils.h @@ -1,10 +1,19 @@ +/* +------------------------------------+ + * | Inspire Internet Relay Chat Daemon | + * +------------------------------------+ + * + * 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. + * + * --------------------------------------------------- + */ + #ifndef __ST__UTIL__ #define __ST__UTIL__ -#include "configreader.h" -#include "users.h" -#include "channels.h" -#include "modules.h" #include "inspircd.h" /* Foward declarations */ @@ -12,32 +21,72 @@ 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. */ -typedef nspace::hash_map, irc::StrHashComp> server_hash; +#if defined(WINDOWS) && !defined(HASHMAP_DEPRECATED) + typedef nspace::hash_map > > server_hash; +#else + #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 InspSocketHook +/** A group of modules that implement BufferedSocketHook * that we can use to hook our server to server connections. */ 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 */ ModuleSpanningTree* Creator; + /** Flatten links and /MAP for non-opers */ bool FlatLinks; @@ -47,29 +96,49 @@ class SpanningTreeUtilities /** Announce TS changes to channels on merge */ bool AnnounceTSChange; - /** Synchronize timestamps between servers + + /** Allow modules marked as VF_OPTCOMMON to be mismatched when linking */ - bool EnableTimeSync; + 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. + */ + int PingWarnTime; /** 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; /** Hash of currently connected servers by name */ server_hash serverlist; + /** Hash of currently known server ids + */ + server_hash sidlist; + /** 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 a bitmask of queued xline types waiting to be applied. - * Will be a mask containing values APPLY_GLINES, APPLY_KLINES, - * APPLY_QLINES and APPLY_ZLINES. + /** Holds the data from the tags in the conf */ - int lines_to_apply; + std::vector AutoconnectBlocks; /** List of module pointers which can provide I/O abstraction */ @@ -79,57 +148,93 @@ class SpanningTreeUtilities */ std::vector hooknames; + /** True (default) if we are to use challenge-response HMAC + * to authenticate passwords. + * + * NOTE: This defaults to on, but should be turned off if + * you are linking to an older version of inspircd. + */ + bool ChallengeResponse; + + /** Ping frequency of server to server links + */ + int PingFreq; + /** Initialise utility class */ - SpanningTreeUtilities(InspIRCd* Instance, ModuleSpanningTree* Creator); + SpanningTreeUtilities(ModuleSpanningTree* Creator); + /** Destroy class and free listeners etc */ ~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 */ void ReadConfiguration(bool rebind); + /** Add a server to the server list for GetListOfServersForChannel */ void AddThisServer(TreeServer* server, TreeServerList &list); + /** Compile a list of servers which contain members of channel c */ - void GetListOfServersForChannel(chanrec* c, TreeServerList &list, char status, const CUList &exempt_list); + void GetListOfServersForChannel(Channel* c, TreeServerList &list, char status, const CUList &exempt_list); + /** Find a server by name */ TreeServer* FindServer(const std::string &ServerName); + + /** Find server by SID + */ + TreeServer* FindServerID(const std::string &id); + /** Find a route to a server by name */ TreeServer* BestRouteTo(const std::string &ServerName); + /** Find a server by glob mask */ TreeServer* FindServerMask(const std::string &ServerName); + /** Returns true if this is a server name we recognise */ bool IsServer(const std::string &ServerName); + /** 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 */ Link* FindLink(const std::string& name); + + /** Refresh the IP cache used for allowing inbound connections + */ + void RefreshIPCache(); }; #endif