summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-27 19:56:38 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-08-27 19:56:38 +0000
commit8c3a4a51ff092a0614e6c9a15e4bd53e4877bc48 (patch)
treed6f328603ac395238d6cba07f9f173da85b5dfcc
parent6b6db59d5fa3ffbde5f80f2e1b0900974485f145 (diff)
Add <server:id> - this is optional, as stated in the example conf,
and should only be set if you are getting collisions. The comment also points out that ids where either of the last two letters are numeric are reserved for services use (e.g. 0ZZ or 5CQ) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7917 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--docs/inspircd.conf.example12
-rw-r--r--include/configreader.h7
-rw-r--r--src/configreader.cpp13
-rw-r--r--src/inspircd.cpp19
-rw-r--r--src/server.cpp4
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;
}