X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=9b6a0d826a5afdc3d10c8adb6035c2ffce3dfa42;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=c7b7fadc16879fafbab5c5f8df78b3716aaac4ea;hpb=e9c208d82b288226437fdef3c9ca4c5438d43abc;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index c7b7fadc1..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; }; @@ -271,8 +271,8 @@ void Module::OnRawSocketAccept(int fd, std::string ip, int localport) { }; int Module::OnRawSocketWrite(int fd, char* buffer, int count) { return 0; }; void Module::OnRawSocketClose(int fd) { }; int Module::OnRawSocketRead(int fd, char* buffer, unsigned int count, int &readresult) { return 0; }; -void Module::OnUserMessage(userrec* user, void* dest, int target_type, std::string text) { }; -void Module::OnUserNotice(userrec* user, void* dest, int target_type, std::string text) { }; +void Module::OnUserMessage(userrec* user, void* dest, int target_type, std::string text, char status) { }; +void Module::OnUserNotice(userrec* user, void* dest, int target_type, std::string text, char status) { }; void Module::OnRemoteKill(userrec* source, userrec* dest, std::string reason) { }; void Module::OnUserInvite(userrec* source,userrec* dest,chanrec* channel) { }; void Module::OnPostLocalTopicChange(userrec* user, chanrec* chan, std::string topic) { }; @@ -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) @@ -523,7 +557,7 @@ void Server::SendChannel(userrec* User, chanrec* Channel, std::string s,bool Inc } else { - ChanExceptSender_NoFormat(Channel,User,s.c_str()); + ChanExceptSender_NoFormat(Channel,User,0,s.c_str()); } } @@ -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;