X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fconfigreader.cpp;h=b5d999f1d2e543ec519fa3de82b62c808ef085ea;hb=84083a73e80734e39892f44411549d2381654c95;hp=31025290cd07a9350daf03ee22421cd6162baf8f;hpb=c68ed91549574705fa5f3c0971e5d0878d56fac7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/configreader.cpp b/src/configreader.cpp index 31025290c..b5d999f1d 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -478,13 +478,7 @@ bool ValidateInvite(ServerConfig* conf, const char*, const char*, ValueItem &dat bool ValidateSID(ServerConfig* conf, const char*, const char*, ValueItem &data) { - int sid = data.GetInteger(); - if ((sid > 999) || (sid < 0)) - { - sid = sid % 1000; - data.Set(sid); - conf->GetInstance()->Log(DEFAULT,"WARNING: Server ID is less than 0 or greater than 999. Set to %d", sid); - } +// std::string sid = data.GetString(); return true; } @@ -527,20 +521,28 @@ bool InitConnect(ServerConfig* conf, const char*) conf->GetInstance()->Log(DEBUG, "Address of class is %p", c); } - for (ClassVector::iterator i = conf->Classes.begin(); i != conf->Classes.end(); i++) + for (ClassVector::iterator i = conf->Classes.begin(); i != conf->Classes.end() ; ) { - ConnectClass *c = *i; + ConnectClass* c = *i; /* only delete a class with refcount 0 */ if (c->RefCount == 0) { conf->GetInstance()->Log(DEFAULT, "Removing connect class, refcount is 0!"); + + /* This was causing a crash, because we'd set i to .begin() just here, but then the for loop's increment would + * set it to .begin() + 1. Which if it was already the last thing in the list, wasn't good. + * Now the increment is in the else { } below. + */ conf->Classes.erase(i); i = conf->Classes.begin(); // start over so we don't trample on a bad iterator } - - /* also mark all existing classes disabled, if they still exist in the conf, they will be reenabled. */ - c->SetDisabled(true); + else + { + /* also mark all existing classes disabled, if they still exist in the conf, they will be reenabled. */ + c->SetDisabled(true); + i++; + } } return true; @@ -801,7 +803,7 @@ void ServerConfig::Read(bool bail, User* user, int pass) {"server", "name", "", new ValueContainerChar (this->ServerName), DT_HOSTNAME, ValidateServerName}, {"server", "description", "Configure Me", new ValueContainerChar (this->ServerDesc), DT_CHARPTR, NoValidation}, {"server", "network", "Network", new ValueContainerChar (this->Network), DT_NOSPACES, NoValidation}, - {"server", "id", "0", new ValueContainerInt (&this->sid), DT_NOSPACES, ValidateSID}, + {"server", "id", "", new ValueContainerChar (this->sid), DT_CHARPTR, ValidateSID}, {"admin", "name", "", new ValueContainerChar (this->AdminName), DT_CHARPTR, NoValidation}, {"admin", "email", "Mis@configu.red", new ValueContainerChar (this->AdminEmail), DT_CHARPTR, NoValidation}, {"admin", "nick", "Misconfigured", new ValueContainerChar (this->AdminNick), DT_CHARPTR, NoValidation}, @@ -813,6 +815,9 @@ void ServerConfig::Read(bool bail, User* user, int pass) {"options", "prefixquit", "", new ValueContainerChar (this->PrefixQuit), DT_CHARPTR, NoValidation}, {"options", "suffixquit", "", new ValueContainerChar (this->SuffixQuit), DT_CHARPTR, NoValidation}, {"options", "fixedquit", "", new ValueContainerChar (this->FixedQuit), DT_CHARPTR, NoValidation}, + {"options", "prefixpart", "", new ValueContainerChar (this->PrefixPart), DT_CHARPTR, NoValidation}, + {"options", "suffixpart", "", new ValueContainerChar (this->SuffixPart), DT_CHARPTR, NoValidation}, + {"options", "fixedpart", "", new ValueContainerChar (this->FixedPart), DT_CHARPTR, NoValidation}, {"options", "loglevel", "default", new ValueContainerChar (debug), DT_CHARPTR, ValidateLogLevel}, {"options", "netbuffersize","10240", new ValueContainerInt (&this->NetBufferSize), DT_INTEGER, ValidateNetBufferSize}, {"options", "maxwho", "128", new ValueContainerInt (&this->MaxWhoResults), DT_INTEGER, ValidateMaxWho}, @@ -1144,8 +1149,7 @@ void ServerConfig::Read(bool bail, User* user, int pass) if (pass == 0) { - if (isatty(0) && isatty(1) && isatty(2)) - printf("Downloading configuration "); + ServerInstance->Log(DEBUG, "Downloading configuration"); TotalDownloaded = 0; FileErrors = 0; @@ -1256,44 +1260,19 @@ void ServerConfig::Read(bool bail, User* user, int pass) ServerInstance->WriteOpers("*** Successfully rehashed server."); } -bool ServerConfig::Downloading() -{ - if (isatty(0) && isatty(1) && isatty(2)) - { - printf("."); - fflush(stdout); - } - - /* Returns true if there are still files in the process of downloading */ - return (TotalDownloaded < IncludedFiles.size()); -} - -void ServerConfig::Complete(const std::string &filename, bool error) +/* XXX: This can and will block! */ +void ServerConfig::DoDownloads() { - ServerInstance->Log(DEBUG,"Flag complete: %s %d", filename.c_str(), error); - std::map::iterator x = IncludedFiles.find(filename); - - if (x != IncludedFiles.end()) - { - TotalDownloaded++; - if (error) - { - delete x->second; - x->second = NULL; - FileErrors++; - } - } - - return; -} - -void ServerConfig::StartDownloads() -{ - ServerInstance->Log(DEBUG,"StartDownloads() size=%d", IncludedFiles.size()); + ServerInstance->Log(DEBUG,"In DoDownloads()"); /* Reads all local files into the IncludedFiles map, then initiates sockets for the remote ones */ for (std::map::iterator x = IncludedFiles.begin(); x != IncludedFiles.end(); ++x) { + if (CompletedFiles.find(x->first) != CompletedFiles.end()) + continue; + + ServerInstance->Log(DEBUG,"StartDownloads File: %s", x->first.c_str()); + std::string file = x->first; if ((file[0] == '/') || (file.substr(0, 7) == "file://")) { @@ -1333,7 +1312,12 @@ void ServerConfig::StartDownloads() delete x->second; x->second = NULL; } + else + { + /* Search new file here for more includes to parse */ + } } + CompletedFiles[x->first] = true; } } @@ -2115,11 +2099,7 @@ InspIRCd* ServerConfig::GetInstance() std::string ServerConfig::GetSID() { - std::string OurSID; - OurSID += (char)((sid / 100) + 48); - OurSID += (char)((sid / 10) % 10 + 48); - OurSID += (char)(sid % 10 + 48); - return OurSID; + return sid; } ValueItem::ValueItem(int value) @@ -2319,4 +2299,3 @@ bool DoneELine(ServerConfig* conf, const char* tag) conf->GetInstance()->XLines->CheckELines(); return true; } -