X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=b36b28a132f75153fde1470fd838eb6407ee3e69;hb=72948525ec3ef03fe46553349c1892cafa5ac18c;hp=9590926410a6f50bcb9dc5662790c4af00f350f5;hpb=42d5b9571eff06b0c33093dc9118c29f9603fd2b;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index 959092641..b36b28a13 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -11,6 +11,7 @@ * --------------------------------------------------- */ +#include "inspircd.h" #include "configreader.h" #include "users.h" #include "modules.h" @@ -21,7 +22,6 @@ #include "socketengine.h" #include "command_parse.h" #include "dns.h" -#include "inspircd.h" // version is a simple class for holding a modules version number Version::Version(int major, int minor, int revision, int build, int flags, int api_ver) @@ -104,11 +104,11 @@ std::string Event::GetEventID() Module::Module(InspIRCd* Me) : ServerInstance(Me) { } Module::~Module() { } void Module::OnUserConnect(userrec* user) { } -void Module::OnUserQuit(userrec* user, const std::string& message) { } +void Module::OnUserQuit(userrec* user, const std::string& message, const std::string &oper_message) { } void Module::OnUserDisconnect(userrec* user) { } -void Module::OnUserJoin(userrec* user, chanrec* channel) { } +void Module::OnUserJoin(userrec* user, chanrec* channel, bool &silent) { } void Module::OnPostJoin(userrec* user, chanrec* channel) { } -void Module::OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage) { } +void Module::OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage, bool &silent) { } void Module::OnRehash(userrec* user, const std::string ¶meter) { } void Module::OnServerRaw(std::string &raw, bool inbound, userrec* user) { } int Module::OnUserPreJoin(userrec* user, chanrec* chan, const char* cname, std::string &privs) { return 0; } @@ -134,7 +134,7 @@ void Module::OnPostCommand(const std::string &command, const char** parameters, bool Module::OnCheckReady(userrec* user) { return true; }; int Module::OnUserRegister(userrec* user) { return 0; }; int Module::OnUserPreKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason) { return 0; }; -void Module::OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason) { }; +void Module::OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason, bool &silent) { }; int Module::OnCheckInvite(userrec* user, chanrec* chan) { return 0; }; int Module::OnCheckKey(userrec* user, chanrec* chan, const std::string &keygiven) { return 0; }; int Module::OnCheckLimit(userrec* user, chanrec* chan) { return 0; }; @@ -164,9 +164,9 @@ void Module::OnGetServerDescription(const std::string &servername,std::string & void Module::OnSyncUser(userrec* user, Module* proto, void* opaque) { }; void Module::OnSyncChannel(chanrec* chan, Module* proto, void* opaque) { }; void Module::ProtoSendMode(void* opaque, int target_type, void* target, const std::string &modeline) { }; -void Module::OnSyncChannelMetaData(chanrec* chan, Module* proto,void* opaque, const std::string &extname) { }; -void Module::OnSyncUserMetaData(userrec* user, Module* proto,void* opaque, const std::string &extname) { }; -void Module::OnSyncOtherMetaData(Module* proto, void* opaque) { }; +void Module::OnSyncChannelMetaData(chanrec* chan, Module* proto,void* opaque, const std::string &extname, bool displayable) { }; +void Module::OnSyncUserMetaData(userrec* user, Module* proto,void* opaque, const std::string &extname, bool displayable) { }; +void Module::OnSyncOtherMetaData(Module* proto, void* opaque, bool displayable) { }; void Module::OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata) { }; void Module::ProtoSendMetaData(void* opaque, int target_type, void* target, const std::string &extname, const std::string &extdata) { }; void Module::OnWallops(userrec* user, const std::string &text) { }; @@ -188,10 +188,11 @@ void Module::OnChannelDelete(chanrec* chan) { }; Priority Module::Prioritize() { return PRIORITY_DONTCARE; } void Module::OnSetAway(userrec* user) { }; void Module::OnCancelAway(userrec* user) { }; -int Module::OnUserList(userrec* user, chanrec* Ptr) { return 0; }; +int Module::OnUserList(userrec* user, chanrec* Ptr, CUList* &userlist) { return 0; }; int Module::OnWhoisLine(userrec* user, userrec* dest, int &numeric, std::string &text) { return 0; }; void Module::OnBuildExemptList(MessageType message_type, chanrec* chan, userrec* sender, char status, CUList &exempt_list) { }; void Module::OnGarbageCollect() { }; +void Module::OnBufferFlushed(userrec* user) { }; long InspIRCd::PriorityAfter(const std::string &modulename) { @@ -348,6 +349,7 @@ void InspIRCd::RehashServer() this->WriteOpers("*** Rehashing config file"); this->RehashUsersAndChans(); this->Config->Read(false,NULL); + this->ResetMaxBans(); this->Res->Rehash(); } @@ -374,7 +376,7 @@ bool InspIRCd::MatchText(const std::string &sliteral, const std::string &spatter return match(sliteral.c_str(),spattern.c_str()); } -bool InspIRCd::CallCommandHandler(const std::string &commandname, const char** parameters, int pcnt, userrec* user) +CmdResult InspIRCd::CallCommandHandler(const std::string &commandname, const char** parameters, int pcnt, userrec* user) { return this->Parser->CallHandler(commandname,parameters,pcnt,user); } @@ -434,63 +436,16 @@ bool InspIRCd::DelModeWatcher(ModeWatcher* mw) return this->Modes->DelModeWatcher(mw); } -bool InspIRCd::AddResolver(Resolver* r) -{ - return this->Res->AddResolverClass(r); -} - -bool InspIRCd::UserToPseudo(userrec* user, const std::string &message) +bool InspIRCd::AddResolver(Resolver* r, bool cached) { - unsigned int old_fd = user->GetFd(); - user->Write("ERROR :Closing link (%s@%s) [%s]",user->ident,user->host,message.c_str()); - user->FlushWriteBuf(); - user->ClearBuffer(); - user->SetFd(FD_MAGIC_NUMBER); - - if (find(local_users.begin(),local_users.end(),user) != local_users.end()) - { - local_users.erase(find(local_users.begin(),local_users.end(),user)); - } - - this->SE->DelFd(user); - shutdown(old_fd,2); - close(old_fd); - return true; -} - -bool InspIRCd::PseudoToUser(userrec* alive, userrec* zombie, const std::string &message) -{ - zombie->SetFd(alive->GetFd()); - FOREACH_MOD_I(this,I_OnUserQuit,OnUserQuit(alive,message)); - alive->SetFd(FD_MAGIC_NUMBER); - alive->FlushWriteBuf(); - alive->ClearBuffer(); - // save these for later - std::string oldnick = alive->nick; - std::string oldhost = alive->host; - std::string oldident = alive->ident; - userrec::QuitUser(this,alive,message.c_str()); - if (find(local_users.begin(),local_users.end(),alive) != local_users.end()) - { - local_users.erase(find(local_users.begin(),local_users.end(),alive)); - } - // Fix by brain - cant write the user until their fd table entry is updated - zombie->Write(":%s!%s@%s NICK %s",oldnick.c_str(),oldident.c_str(),oldhost.c_str(),zombie->nick); - for (UCListIter i = zombie->chans.begin(); i != zombie->chans.end(); i++) + if (!cached) + return this->Res->AddResolverClass(r); + else { - chanrec* Ptr = i->first; - zombie->WriteFrom(zombie,"JOIN %s",Ptr->name); - if (Ptr->topicset) - { - zombie->WriteServ("332 %s %s :%s", zombie->nick, Ptr->name, Ptr->topic); - zombie->WriteServ("333 %s %s %s %d", zombie->nick, Ptr->name, Ptr->setby, Ptr->topicset); - } - Ptr->UserList(zombie); - zombie->WriteServ("366 %s %s :End of /NAMES list.", zombie->nick, Ptr->name); + r->TriggerCachedResult(); + delete r; + return true; } - if ((find(local_users.begin(),local_users.end(),zombie) == local_users.end()) && (zombie->GetFd() != FD_MAGIC_NUMBER)) - local_users.push_back(zombie); - return true; } void InspIRCd::AddGLine(long duration, const std::string &source, const std::string &reason, const std::string &hostmask) @@ -710,10 +665,7 @@ bool ConfigReader::Verify() FileReader::FileReader(InspIRCd* Instance, const std::string &filename) : ServerInstance(Instance) { - file_cache c; - ServerInstance->Config->ReadFile(c,filename.c_str()); - this->fc = c; - this->CalcSize(); + LoadFile(filename); } FileReader::FileReader(InspIRCd* Instance) : ServerInstance(Instance) @@ -747,9 +699,12 @@ void FileReader::CalcSize() void FileReader::LoadFile(const std::string &filename) { file_cache c; - ServerInstance->Config->ReadFile(c,filename.c_str()); - this->fc = c; - this->CalcSize(); + c.clear(); + if (ServerInstance->Config->ReadFile(c,filename.c_str())) + { + this->fc = c; + this->CalcSize(); + } }