diff options
Diffstat (limited to 'src/modules')
-rw-r--r-- | src/modules/m_spanningtree.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index 124ae0be7..35a0d77e4 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -42,6 +42,8 @@ using namespace std; #define nspace std #endif +static Module* TreeProtocolModule; + enum ServerState { LISTENER, CONNECTING, WAIT_AUTH_1, WAIT_AUTH_2, CONNECTED }; typedef nspace::hash_map<std::string, userrec*, nspace::hash<string>, irc::StrHashComp> user_hash; @@ -604,6 +606,7 @@ class TreeSocket : public InspSocket snprintf(data,MAXBUF,":%s FMODE %s +b %s",Srv->GetServerName().c_str(),c->second->name,b->data); this->WriteLine(data); } + FOREACH_MOD OnSyncChannel(c->second,TreeProtocolModule,this); } } @@ -626,6 +629,7 @@ class TreeSocket : public InspSocket { this->WriteLine(":"+std::string(u->second->nick)+" FJOIN "+std::string(chl)); } + FOREACH_MOD OnSyncUser(u->second,TreeProtocolModule,this); } } } @@ -1051,6 +1055,16 @@ class TreeSocket : public InspSocket return true; } + virtual std::string GetName() + { + std::string sourceserv = this->myhost; + if (this->InboundServerName != "") + { + sourceserv = this->InboundServerName; + } + return sourceserv; + } + virtual void OnTimeout() { if (this->LinkState == CONNECTING) @@ -1621,6 +1635,24 @@ class ModuleSpanningTree : public Module } } + virtual void ProtoSendMode(void* opaque, int target_type, void* target, std::string modeline); + { + TreeSocket* s = (TreeSocket*)opaque; + if (target) + { + if (target_type == TYPE_USER) + { + userrec* u = (userrec*)target; + opaque->WriteLine(":"+opaque->GetName()+" FMODE "+u->nick+" "+modeline); + } + else (target_type == TYPE_CHANNEL) + { + chanrec* c = (chanrec*)target; + opaque->WriteLine(":"+opaque->GetName()+" FMODE "+c->name+" "+modeline); + } + } + } + virtual ~ModuleSpanningTree() { delete Srv; @@ -1654,6 +1686,7 @@ class ModuleSpanningTreeFactory : public ModuleFactory extern "C" void * init_module( void ) { - return new ModuleSpanningTreeFactory; + TreeProtocolModule = new ModuleSpanningTreeFactory; + return TreeProtocolModule; } |