diff options
-rw-r--r-- | docs/inspircd.conf.example | 12 | ||||
-rw-r--r-- | include/configreader.h | 7 | ||||
-rw-r--r-- | src/configreader.cpp | 13 | ||||
-rw-r--r-- | src/inspircd.cpp | 19 | ||||
-rw-r--r-- | src/server.cpp | 4 |
5 files changed, 47 insertions, 8 deletions
diff --git a/docs/inspircd.conf.example b/docs/inspircd.conf.example index e1b33565b..edd3e5598 100644 --- a/docs/inspircd.conf.example +++ b/docs/inspircd.conf.example @@ -49,11 +49,23 @@ # <server name="server.name" # # description="Server Description" # # networkemail="Email address shown on g/k/z/q lines" # +# id="serverid" # # network="MyNetwork"> # # # +# The server ID is optional, and if omitted or set to 0, is auto- # +# matically calculated from the server name and description. This is # +# similar in behaviour to the server id on ircu and charybdis ircds. # +# You should only need to set this manually if there is a collision # +# between two server IDs on the network. The server ID must be # +# between 1 and 999, if it is not, it will be wrapped to this range. # +# There is a range of server IDs which are suffixed by two letters # +# rather than two numbers, e.g. 1AA, 2FF, 3ZZ, which are reserved # +# for use by non-inspircd servers such as services and stats servers.# +# # <server name="penguin.omega.org.za" description="Waddle World" + id="0" network="Omega"> diff --git a/include/configreader.h b/include/configreader.h index 4a9720862..b1eb9b263 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -603,6 +603,13 @@ class CoreExport ServerConfig : public Extensible */ unsigned int OperMaxChans; + /** TS6-like server ID. + * NOTE: 000...999 are usable for InspIRCd servers. This + * makes code simpler. 0AA, 1BB etc with letters are reserved + * for services use. + */ + int sid; + /** Construct a new ServerConfig */ ServerConfig(InspIRCd* Instance); diff --git a/src/configreader.cpp b/src/configreader.cpp index ec15db3a1..c5f37a1e4 100644 --- a/src/configreader.cpp +++ b/src/configreader.cpp @@ -367,6 +367,18 @@ bool ValidateInvite(ServerConfig* conf, const char* tag, const char* value, Valu return true; } +bool ValidateSID(ServerConfig* conf, const char* tag, const char* value, 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); + } + return true; +} + bool ValidateWhoWas(ServerConfig* conf, const char* tag, const char* value, ValueItem &data) { conf->WhoWasMaxKeep = conf->GetInstance()->Duration(data.GetString()); @@ -634,6 +646,7 @@ void ServerConfig::Read(bool bail, userrec* user) {"server", "name", "", new ValueContainerChar (this->ServerName), DT_CHARPTR, ValidateServerName}, {"server", "description", "Configure Me", new ValueContainerChar (this->ServerDesc), DT_CHARPTR, NoValidation}, {"server", "network", "Network", new ValueContainerChar (this->Network), DT_CHARPTR, NoValidation}, + {"server", "id", "0", new ValueContainerInt (&this->sid), DT_INTEGER, 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}, diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 9543ef856..1618266c0 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -544,11 +544,20 @@ InspIRCd::InspIRCd(int argc, char** argv) /* Generate SID */ size_t sid = 0; - for (const char* x = Config->ServerName; *x; ++x) - sid = 5 * sid + *x; - for (const char* y = Config->ServerDesc; *y; ++y) - sid = 5 * sid + *y; - sid = sid % 999; + if (Config->sid) + { + sid = Config->sid; + } + else + { + for (const char* x = Config->ServerName; *x; ++x) + sid = 5 * sid + *x; + for (const char* y = Config->ServerDesc; *y; ++y) + sid = 5 * sid + *y; + sid = sid % 999; + + Config->sid = sid; + } current_uid[0] = sid / 100 + 48; current_uid[1] = ((sid / 10) % 10) + 48; current_uid[2] = sid % 10 + 48; diff --git a/src/server.cpp b/src/server.cpp index 041b9f5dd..ea2ec4928 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -69,15 +69,13 @@ void InspIRCd::RehashServer() std::string InspIRCd::GetVersionString() { char versiondata[MAXBUF]; - char dnsengine[] = "singlethread-object"; - if (*Config->CustomVersion) { snprintf(versiondata,MAXBUF,"%s %s :%s",VERSION,Config->ServerName,Config->CustomVersion); } else { - snprintf(versiondata,MAXBUF,"%s %s :%s [FLAGS=%s,%s,%s]",VERSION,Config->ServerName,SYSTEM,REVISION,SE->GetName().c_str(),dnsengine); + snprintf(versiondata,MAXBUF,"%s %s :%s [FLAGS=%s,%s,%d]",VERSION,Config->ServerName,SYSTEM,REVISION,SE->GetName().c_str(),Config->sid); } return versiondata; } |