X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Futils.h;h=5e9555deac3ea6c2dfec6884f0f75d2bf45d7cd7;hb=5a5a061c48af830ca90b699993cac079a9311b08;hp=0203e760202e5ac212d432f55b6171a058c36d51;hpb=b2b111041d10485a98a141b4ceaf32e88b6a20f0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/utils.h b/src/modules/m_spanningtree/utils.h index 0203e7602..5e9555dea 100644 --- a/src/modules/m_spanningtree/utils.h +++ b/src/modules/m_spanningtree/utils.h @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2009 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -21,19 +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; + 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(InspIRCd* Instance, SpanningTreeUtilities *u, int port, char* addr) : ListenSocketBase(Instance, port, addr) + { + this->Utils = u; + } + + virtual void OnAcceptReady(const std::string &ipconnectedto, int nfd, const std::string &incomingip); +}; + 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; @@ -41,7 +62,7 @@ typedef std::map hookmodules; /** 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 @@ -51,9 +72,7 @@ class SpanningTreeUtilities /** Creator module */ ModuleSpanningTree* Creator; - /** Remote servers that are currently bursting - */ - server_hash RemoteServersBursting; + /** Flatten links and /MAP for non-opers */ bool FlatLinks; @@ -63,15 +82,14 @@ class SpanningTreeUtilities /** Announce TS changes to channels on merge */ bool AnnounceTSChange; - /** Synchronize timestamps between servers - */ - bool EnableTimeSync; + /** 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. */ @@ -91,20 +109,12 @@ 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 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. - */ - int lines_to_apply; - - /** If this is true, this server is the master sync server for time - * synching - e.g. it is the server with its clock correct. It will - * send out the correct time at intervals. - */ - bool MasterTime; /** List of module pointers which can provide I/O abstraction */ @@ -129,77 +139,78 @@ class SpanningTreeUtilities /** Initialise utility class */ SpanningTreeUtilities(InspIRCd* Instance, 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); + /** 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); + /** 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); + /** Send a message from this server to all others */ bool DoOneToMany(const std::string &prefix, const std::string &command, std::deque ¶ms); + /** Send a message from this server to all others */ bool DoOneToMany(const char* prefix, const char* command, std::deque ¶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); + /** 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 remote bursting server by name - */ - TreeServer* FindRemoteBurstServer(TreeServer* Server); - /** Set a remote server to bursting or not bursting - */ - void SetRemoteBursting(TreeServer* Server, bool bursting); + /** 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); + /** 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(); - - TreeSocket* FindBurstingServer(const std::string &ServerName); - - void AddBurstingServer(const std::string &ServerName, TreeSocket* s); - - void DelBurstingServer(TreeSocket* s); - - /** Return true if str looks like a server ID - * @param string to check against - */ - bool IsSID(const std::string &str); }; #endif