X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=9b6a0d826a5afdc3d10c8adb6035c2ffce3dfa42;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=22433b8acbc8abc959f5a8a99ea281d5a2389d42;hpb=9c64f695f6becd596889ecebdeb40242e255f5b0;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index 22433b8ac..9b6a0d826 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()); @@ -473,7 +503,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) @@ -617,24 +651,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 +814,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 +929,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;