X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=f5129c83724389877f26ce08bb6cf0133fa9b262;hb=6b43da7511ca875b64e58b84f72dd89485c0e7fd;hp=22433b8acbc8abc959f5a8a99ea281d5a2389d42;hpb=9c64f695f6becd596889ecebdeb40242e255f5b0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index 22433b8ac..f5129c837 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -235,8 +235,8 @@ void Module::OnPostOper(userrec* user, std::string opertype) { }; void Module::OnInfo(userrec* user) { }; void Module::OnWhois(userrec* source, userrec* dest) { }; int Module::OnUserPreInvite(userrec* source,userrec* dest,chanrec* channel) { return 0; }; -int Module::OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text) { return 0; }; -int Module::OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text) { return 0; }; +int Module::OnUserPreMessage(userrec* user,void* dest,int target_type, std::string &text,char status) { return 0; }; +int Module::OnUserPreNotice(userrec* user,void* dest,int target_type, std::string &text,char status) { return 0; }; int Module::OnUserPreNick(userrec* user, std::string newnick) { return 0; }; void Module::OnUserPostNick(userrec* user, std::string oldnick) { }; int Module::OnAccessCheck(userrec* source,userrec* dest,chanrec* channel,int access_type) { return ACR_DEFAULT; }; @@ -302,6 +302,8 @@ void Module::OnCleanup(int target_type, void* item) { }; void Module::Implements(char* Implements) { for (int j = 0; j < 255; j++) Implements[j] = 0; }; void Module::OnChannelDelete(chanrec* chan) { }; Priority Module::Prioritize() { return PRIORITY_DONTCARE; } +void Module::OnSetAway(userrec* user) { }; +void Module::OnCancelAway(userrec* user) { }; /* server is a wrapper class that provides methods to all of the C-style * exports in the core @@ -389,6 +391,34 @@ void Server::DelSocket(InspSocket* sock) } } +long Server::GetChannelCount() +{ + return (long)chanlist.size(); +} + +/* This is ugly, yes, but hash_map's arent designed to be + * addressed in this manner, and this is a bit of a kludge. + * Luckily its a specialist function and rarely used by + * many modules (in fact, it was specially created to make + * m_safelist possible, initially). + */ + +chanrec* Server::GetChannelIndex(long index) +{ + int target = 0; + for (chan_hash::iterator n = chanlist.begin(); n != chanlist.end(); n++, target++) + { + if (index == target) + return n->second; + } + return NULL; +} + +void Server::AddTimer(InspTimer* T) +{ + ::AddTimer(T); +} + void Server::SendOpers(std::string s) { WriteOpers("%s",s.c_str()); @@ -421,12 +451,9 @@ chanuserlist Server::GetUsers(chanrec* chan) { chanuserlist userl; userl.clear(); - std::map *list = chan->GetUsers(); - for (std::map::iterator i = list->begin(); i != list->end(); i++) - { - char* o = i->second; - userl.push_back((userrec*)o); - } + CUList *list = chan->GetUsers(); + for (CUList::iterator i = list->begin(); i != list->end(); i++) + userl.push_back(i->second); return userl; } void Server::ChangeUserNick(userrec* user, std::string nickname) @@ -456,9 +483,9 @@ bool Server::IsUlined(std::string server) return is_uline(server.c_str()); } -void Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user) +bool Server::CallCommandHandler(std::string commandname, char** parameters, int pcnt, userrec* user) { - ServerInstance->Parser->CallHandler(commandname,parameters,pcnt,user); + return ServerInstance->Parser->CallHandler(commandname,parameters,pcnt,user); } bool Server::IsValidModuleCommand(std::string commandname, int pcnt, userrec* user) @@ -473,7 +500,11 @@ void Server::Log(int level, std::string s) void Server::AddCommand(command_t *f) { - ServerInstance->Parser->CreateCommand(f); + if (!ServerInstance->Parser->CreateCommand(f)) + { + ModuleException err("Command "+std::string(f->command)+" already exists."); + throw (err); + } } void Server::SendMode(char **parameters, int pcnt, userrec *user) @@ -501,7 +532,7 @@ void Server::SendTo(userrec* Source, userrec* Dest, std::string s) if (!Source) { // if source is NULL, then the message originates from the local server - Write(Dest->fd,":%s %s",this->GetServerName().c_str(),s.c_str()); + WriteServ_NoFormat(Dest->fd,s.c_str()); } else { @@ -532,6 +563,22 @@ bool Server::CommonChannels(userrec* u1, userrec* u2) return (common_channels(u1,u2) != 0); } +void Server::DumpText(userrec* User, std::string LinePrefix, stringstream &TextStream) +{ + std::string CompleteLine = LinePrefix; + std::string Word = ""; + while (TextStream >> Word) + { + if (CompleteLine.length() + Word.length() + 3 > 500) + { + WriteServ_NoFormat(User->fd,CompleteLine.c_str()); + CompleteLine = LinePrefix; + } + CompleteLine = CompleteLine + Word + " "; + } + WriteServ_NoFormat(User->fd,CompleteLine.c_str()); +} + void Server::SendCommon(userrec* User, std::string text,bool IncludeSender) { if (IncludeSender) @@ -584,11 +631,6 @@ std::string Server::ChanMode(userrec* User, chanrec* Chan) return cmode(User,Chan); } -bool Server::IsOnChannel(userrec* User, chanrec* Chan) -{ - return has_channel(User,Chan); -} - std::string Server::GetServerName() { return Config->ServerName; @@ -617,24 +659,28 @@ bool Server::AddExtendedMode(char modechar, int type, bool requires_oper, int pa { if (type == MT_SERVER) { - log(DEBUG,"*** API ERROR *** Modes of type MT_SERVER are reserved for future expansion"); + ModuleException e("Modes of type MT_SERVER are reserved for future expansion"); + throw(e); return false; } if (((params_when_on>0) || (params_when_off>0)) && (type == MT_CLIENT)) { - log(DEBUG,"*** API ERROR *** Parameters on MT_CLIENT modes are not supported"); + ModuleException e("Parameters on MT_CLIENT modes are not supported"); + throw(e); return false; } if ((params_when_on>1) || (params_when_off>1)) { - log(DEBUG,"*** API ERROR *** More than one parameter for an MT_CHANNEL mode is not yet supported"); + ModuleException e("More than one parameter for an MT_CHANNEL mode is not yet supported"); + throw(e); return false; } return DoAddExtendedMode(modechar,type,requires_oper,params_when_on,params_when_off); } else { - log(DEBUG,"*** API ERROR *** Muppet modechar detected."); + ModuleException e("Muppet modechar detected."); + throw(e); } return false; } @@ -776,26 +822,26 @@ long Server::CalcDuration(std::string delta) bool Server::IsValidMask(std::string mask) { - const char* dest = mask.c_str(); + char* dest = (char*)mask.c_str(); if (strchr(dest,'!')==0) return false; if (strchr(dest,'@')==0) return false; - for (unsigned int i = 0; i < strlen(dest); i++) - if (dest[i] < 32) + for (char* i = dest; *i; i++) + if (*i < 32) return false; - for (unsigned int i = 0; i < strlen(dest); i++) - if (dest[i] > 126) + for (char* i = dest; *i; i++) + if (*i > 126) return false; unsigned int c = 0; - for (unsigned int i = 0; i < strlen(dest); i++) - if (dest[i] == '!') + for (char* i = dest; *i; i++) + if (*i == '!') c++; if (c>1) return false; c = 0; - for (unsigned int i = 0; i < strlen(dest); i++) - if (dest[i] == '@') + for (char* i = dest; *i; i++) + if (*i == '@') c++; if (c>1) return false; @@ -891,9 +937,9 @@ long ConfigReader::ReadInteger(std::string tag, std::string name, int index, boo this->error = CONF_VALUE_NOT_FOUND; return 0; } - for (unsigned int i = 0; i < strlen(val); i++) + for (char* i = val; *i; i++) { - if (!isdigit(val[i])) + if (!isdigit(*i)) { this->error = CONF_NOT_A_NUMBER; return 0;