X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fhelperfuncs.cpp;h=2626da6bbd6132518866946809e73fd181503909;hb=8710724b5518ae9858309e548514f76e620a8459;hp=fba76805c0495b1ae9ef5f0463783318b6f69332;hpb=a5fe50aca04ca554d313e7361c571c6a497a9c4e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index fba76805c..2626da6bb 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -22,8 +22,6 @@ */ -/* $Core */ - #ifdef _WIN32 #define _CRT_RAND_S #include @@ -38,7 +36,7 @@ std::string InspIRCd::GetServerDescription(const std::string& servername) { std::string description; - FOREACH_MOD(I_OnGetServerDescription,OnGetServerDescription(servername,description)); + FOREACH_MOD(OnGetServerDescription, (servername,description)); if (!description.empty()) { @@ -66,19 +64,6 @@ User* InspIRCd::FindNick(const std::string &nick) return iter->second; } -User* InspIRCd::FindNick(const char* nick) -{ - if (isdigit(*nick)) - return FindUUID(nick); - - user_hash::iterator iter = this->Users->clientlist->find(nick); - - if (iter == this->Users->clientlist->end()) - return NULL; - - return iter->second; -} - User* InspIRCd::FindNickOnly(const std::string &nick) { user_hash::iterator iter = this->Users->clientlist->find(nick); @@ -89,16 +74,6 @@ User* InspIRCd::FindNickOnly(const std::string &nick) return iter->second; } -User* InspIRCd::FindNickOnly(const char* nick) -{ - user_hash::iterator iter = this->Users->clientlist->find(nick); - - if (iter == this->Users->clientlist->end()) - return NULL; - - return iter->second; -} - User *InspIRCd::FindUUID(const std::string &uid) { user_hash::iterator finduuid = this->Users->uuidlist->find(uid); @@ -108,23 +83,7 @@ User *InspIRCd::FindUUID(const std::string &uid) return finduuid->second; } - -User *InspIRCd::FindUUID(const char *uid) -{ - return FindUUID(std::string(uid)); -} - /* find a channel record by channel name and return a pointer to it */ -Channel* InspIRCd::FindChan(const char* chan) -{ - chan_hash::iterator iter = chanlist->find(chan); - - if (iter == chanlist->end()) - /* Couldn't find it */ - return NULL; - - return iter->second; -} Channel* InspIRCd::FindChan(const std::string &chan) { @@ -145,8 +104,8 @@ void InspIRCd::SendError(const std::string &s) User* u = *i; if (u->registered == REG_ALL) { - u->WriteServ("NOTICE %s :%s",u->nick.c_str(),s.c_str()); - } + u->WriteNotice(s); + } else { /* Unregistered connections receive ERROR, not a NOTICE */ @@ -155,12 +114,6 @@ void InspIRCd::SendError(const std::string &s) } } -/* return channel count */ -long InspIRCd::ChannelCount() -{ - return chanlist->size(); -} - bool InspIRCd::IsValidMask(const std::string &mask) { const char* dest = mask.c_str(); @@ -281,9 +234,9 @@ void InspIRCd::ProcessColors(file_cache& input) } /* true for valid channel name, false else */ -bool IsChannelHandler::Call(const std::string& chname, size_t max) +bool IsChannelHandler::Call(const std::string& chname) { - if (chname.empty() || chname.length() > max) + if (chname.empty() || chname.length() > ServerInstance->Config->Limits.ChanMax) return false; if (chname[0] != '#') @@ -304,9 +257,9 @@ bool IsChannelHandler::Call(const std::string& chname, size_t max) } /* true for valid nickname, false else */ -bool IsNickHandler::Call(const std::string& n, size_t max) +bool IsNickHandler::Call(const std::string& n) { - if (n.empty() || n.length() > max) + if (n.empty() || n.length() > ServerInstance->Config->Limits.NickMax) return false; for (std::string::const_iterator i = n.begin(); i != n.end(); ++i) @@ -364,35 +317,13 @@ bool InspIRCd::IsSID(const std::string &str) ((str[2] >= 'A' && str[2] <= 'Z') || isdigit(str[2]))); } -/* open the proper logfile */ -bool InspIRCd::OpenLog(char**, int) -{ - if (!Config->cmdline.writelog) return true; // Skip opening default log if -nolog - - if (Config->cmdline.startup_log.empty()) - Config->cmdline.startup_log = LOG_PATH "/startup.log"; - FILE* startup = fopen(Config->cmdline.startup_log.c_str(), "a+"); - - if (!startup) - { - return false; - } - - FileWriter* fw = new FileWriter(startup); - FileLogStream *f = new FileLogStream((Config->cmdline.forcedebug ? LOG_DEBUG : LOG_DEFAULT), fw); - - this->Logs->AddLogType("*", f, true); - - return true; -} - void InspIRCd::CheckRoot() { #ifndef _WIN32 if (geteuid() == 0) { std::cout << "ERROR: You are running an irc server as root! DO NOT DO THIS!" << std::endl << std::endl; - this->Logs->Log("STARTUP",LOG_DEFAULT,"Can't start as root"); + this->Logs->Log("STARTUP", LOG_DEFAULT, "Can't start as root"); Exit(EXIT_STATUS_ROOT); } #endif @@ -411,13 +342,9 @@ void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const std::str void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const char* format, ...) { - char textbuffer[MAXBUF]; - va_list argsPtr; - va_start (argsPtr, format); - vsnprintf(textbuffer, MAXBUF, format, argsPtr); - va_end(argsPtr); - - this->SendWhoisLine(user, dest, numeric, std::string(textbuffer)); + std::string textbuffer; + VAFORMAT(textbuffer, format, format) + this->SendWhoisLine(user, dest, numeric, textbuffer); } /** Refactored by Brain, Jun 2009. Much faster with some clever O(1) array @@ -463,6 +390,34 @@ unsigned long InspIRCd::Duration(const std::string &str) return total + subtotal; } +const char* InspIRCd::Format(va_list &vaList, const char* formatString) +{ + static std::vector formatBuffer(1024); + + while (true) + { + va_list dst; + va_copy(dst, vaList); + + int vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, dst); + if (vsnret > 0 && static_cast(vsnret) < formatBuffer.size()) + { + return &formatBuffer[0]; + } + + formatBuffer.resize(formatBuffer.size() * 2); + } + + throw CoreException(); +} + +const char* InspIRCd::Format(const char* formatString, ...) +{ + const char* ret; + VAFORMAT(ret, formatString, formatString); + return ret; +} + bool InspIRCd::ULine(const std::string& sserver) { if (sserver.empty())