diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-11-30 22:00:34 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-11-30 22:00:34 +0000 |
commit | e1a92daeb657da58dcfcc2f1256193cb72295635 (patch) | |
tree | a93211dba5725729e5a442b0061d2d20aee602c8 /src/modules | |
parent | 1b6bcd432ac77865e14a8046f0a4b29eeaa2bcd8 (diff) |
Added opaque protocol functions
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2069 e03df62e-2008-0410-955e-edbf42e46eb7
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; } |