X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fhelperfuncs.cpp;h=b80a3897c49abc12fc82f57be648bb14f07875ed;hb=4aa27e75af8da0a5bc2e35f931f0165339f5f289;hp=bebb22007b9558f4a054e00f887c0dbb6873c0f2;hpb=f71e6bf9cb41811f18864f5d4eecb26e29d03f25;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index bebb22007..b80a3897c 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -37,14 +37,7 @@ User* InspIRCd::FindNick(const std::string &nick) { if (!nick.empty() && isdigit(*nick.begin())) return FindUUID(nick); - - user_hash::iterator iter = this->Users->clientlist.find(nick); - - if (iter == this->Users->clientlist.end()) - /* Couldn't find it */ - return NULL; - - return iter->second; + return FindNickOnly(nick); } User* InspIRCd::FindNickOnly(const std::string &nick) @@ -79,24 +72,6 @@ Channel* InspIRCd::FindChan(const std::string &chan) return iter->second; } -/* Send an error notice to all users, registered or not */ -void InspIRCd::SendError(const std::string &s) -{ - for (LocalUserList::const_iterator i = this->Users->local_users.begin(); i != this->Users->local_users.end(); i++) - { - User* u = *i; - if (u->registered == REG_ALL) - { - u->WriteNotice(s); - } - else - { - /* Unregistered connections receive ERROR, not a NOTICE */ - u->Write("ERROR :" + s); - } - } -} - bool InspIRCd::IsValidMask(const std::string &mask) { const char* dest = mask.c_str(); @@ -152,7 +127,8 @@ void InspIRCd::StripColor(std::string &sentence) else seq = 0; - if (seq || ((*i == 2) || (*i == 15) || (*i == 22) || (*i == 21) || (*i == 31))) + // Strip all control codes too except \001 for CTCP + if (seq || ((*i >= 0) && (*i < 32) && (*i != 1))) i = sentence.erase(i); else ++i; @@ -217,7 +193,7 @@ void InspIRCd::ProcessColors(file_cache& input) } /* true for valid channel name, false else */ -bool IsChannelHandler::Call(const std::string& chname) +bool InspIRCd::DefaultIsChannel(const std::string& chname) { if (chname.empty() || chname.length() > ServerInstance->Config->Limits.ChanMax) return false; @@ -240,7 +216,7 @@ bool IsChannelHandler::Call(const std::string& chname) } /* true for valid nickname, false else */ -bool IsNickHandler::Call(const std::string& n) +bool InspIRCd::DefaultIsNick(const std::string& n) { if (n.empty() || n.length() > ServerInstance->Config->Limits.NickMax) return false; @@ -267,7 +243,7 @@ bool IsNickHandler::Call(const std::string& n) } /* return true for good ident, false else */ -bool IsIdentHandler::Call(const std::string& n) +bool InspIRCd::DefaultIsIdent(const std::string& n) { if (n.empty()) return false; @@ -312,24 +288,6 @@ void InspIRCd::CheckRoot() #endif } -void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const std::string &text) -{ - std::string copy_text = text; - - ModResult MOD_RESULT; - FIRST_MOD_RESULT(OnWhoisLine, MOD_RESULT, (user, dest, numeric, copy_text)); - - if (MOD_RESULT != MOD_RES_DENY) - user->WriteNumeric(numeric, copy_text); -} - -void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const char* format, ...) -{ - 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 * lookups and pointer maths. */ @@ -403,14 +361,14 @@ const char* InspIRCd::Format(const char* formatString, ...) return ret; } -std::string InspIRCd::TimeString(time_t curtime) +std::string InspIRCd::TimeString(time_t curtime, const char* format, bool utc) { #ifdef _WIN32 if (curtime < 0) curtime = 0; #endif - struct tm* timeinfo = localtime(&curtime); + struct tm* timeinfo = utc ? gmtime(&curtime) : localtime(&curtime); if (!timeinfo) { curtime = 0; @@ -424,16 +382,24 @@ std::string InspIRCd::TimeString(time_t curtime) else if (timeinfo->tm_year + 1900 < 1000) timeinfo->tm_year = 0; - return std::string(asctime(timeinfo),24); + // This is the default format used by asctime without the terminating new line. + if (!format) + format = "%a %b %d %Y %H:%M:%S"; + + char buffer[512]; + if (!strftime(buffer, sizeof(buffer), format, timeinfo)) + buffer[0] = '\0'; + + return buffer; } -std::string InspIRCd::GenRandomStr(int length, bool printable) +std::string InspIRCd::GenRandomStr(unsigned int length, bool printable) { char* buf = new char[length]; GenRandom(buf, length); std::string rv; rv.resize(length); - for(int i=0; i < length; i++) + for(size_t i = 0; i < length; i++) rv[i] = printable ? 0x3F + (buf[i] & 0x3F) : buf[i]; delete[] buf; return rv; @@ -449,7 +415,7 @@ unsigned long InspIRCd::GenRandomInt(unsigned long max) } // This is overridden by a higher-quality algorithm when SSL support is loaded -void GenRandomHandler::Call(char *output, size_t max) +void InspIRCd::DefaultGenRandom(char* output, size_t max) { for(unsigned int i=0; i < max; i++) #ifdef _WIN32 @@ -464,28 +430,3 @@ void GenRandomHandler::Call(char *output, size_t max) output[i] = random(); #endif } - -ModResult OnCheckExemptionHandler::Call(User* user, Channel* chan, const std::string& restriction) -{ - unsigned int mypfx = chan->GetPrefixValue(user); - char minmode = 0; - std::string current; - - irc::spacesepstream defaultstream(ServerInstance->Config->ConfValue("options")->getString("exemptchanops")); - - while (defaultstream.GetToken(current)) - { - std::string::size_type pos = current.find(':'); - if (pos == std::string::npos) - continue; - if (current.substr(0,pos) == restriction) - minmode = current[pos+1]; - } - - PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(minmode); - if (mh && mypfx >= mh->GetPrefixRank()) - return MOD_RES_ALLOW; - if (mh || minmode == '*') - return MOD_RES_DENY; - return MOD_RES_PASSTHRU; -}