diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index 36f8d2eede..aa93f6ecab 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -428,25 +428,6 @@ namespace OpenSim.Framework.Servers
}
m_version += string.IsNullOrEmpty(buildVersion) ? " " : ("." + buildVersion + " ").Substring(0, 6);
-
- // Add operating system information if available
- string OSString = "";
-
- if (System.Environment.OSVersion.Platform != PlatformID.Unix)
- {
- OSString = System.Environment.OSVersion.ToString();
- }
- else
- {
- OSString = Util.ReadEtcIssue();
- }
-
- if (OSString.Length > 45)
- {
- OSString = OSString.Substring(0, 45);
- }
-
- m_version += " (OS " + OSString + ")";
}
}
}
diff --git a/OpenSim/Framework/Servers/VersionInfo.cs b/OpenSim/Framework/Servers/VersionInfo.cs
index 8f848596e8..c6a43ecf09 100644
--- a/OpenSim/Framework/Servers/VersionInfo.cs
+++ b/OpenSim/Framework/Servers/VersionInfo.cs
@@ -27,11 +27,27 @@
namespace OpenSim
{
- ///
- /// This is the OpenSim version string. Change this if you are releasing a new OpenSim version.
- ///
public class VersionInfo
{
+ ///
+ /// This is the OpenSim version string. Change this if you are releasing a new OpenSim version.
+ ///
public readonly static string Version = "OpenSimulator Server 0.6.0"; // stay with 27 chars (used in regioninfo)
+
+ ///
+ /// This is the external interface version. It is separate from the OpenSimulator project version.
+ ///
+ /// This version number should be
+ /// increased by 1 every time a code change makes the previous OpenSimulator revision incompatible
+ /// with the new revision. This will usually be due to interregion or grid facing interface changes.
+ ///
+ /// Changes which are compatible with an older revision (e.g. older revisions experience degraded functionality
+ /// but not outright failure) do not need a version number increment.
+ ///
+ /// Having this version number allows the grid service to reject connections from regions running a version
+ /// of the code that is too old.
+ ///
+ ///
+ public readonly static int MajorInterfaceVersion = 0;
}
}
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs
index 7caa414d12..f72797f705 100644
--- a/OpenSim/Framework/Util.cs
+++ b/OpenSim/Framework/Util.cs
@@ -799,6 +799,33 @@ namespace OpenSim.Framework
x += rx;
y += ry;
}
+
+ ///
+ /// Get operating system information if available. Returns only the first 45 characters of information
+ ///
+ ///
+ /// Operating system information. Returns an empty string if none was available.
+ ///
+ public static string GetOperatingSystemInformation()
+ {
+ string os = String.Empty;
+
+ if (System.Environment.OSVersion.Platform != PlatformID.Unix)
+ {
+ os = System.Environment.OSVersion.ToString();
+ }
+ else
+ {
+ os = ReadEtcIssue();
+ }
+
+ if (os.Length > 45)
+ {
+ os = os.Substring(0, 45);
+ }
+
+ return os;
+ }
///
/// Is the given string a UUID?
diff --git a/OpenSim/Grid/GridServer/GridManager.cs b/OpenSim/Grid/GridServer/GridManager.cs
index 0fc2147092..32b7554082 100644
--- a/OpenSim/Grid/GridServer/GridManager.cs
+++ b/OpenSim/Grid/GridServer/GridManager.cs
@@ -53,6 +53,22 @@ namespace OpenSim.Grid.GridServer
private List _MessageServers = new List();
public GridConfig Config;
+
+ ///
+ /// Used to notify old regions as to which OpenSim version to upgrade to
+ ///
+ private string m_opensimVersion;
+
+ ///
+ /// Constructor
+ ///
+ ///
+ /// Used to notify old regions as to which OpenSim version to upgrade to
+ ///
+ public GridManager(string opensimVersion)
+ {
+ m_opensimVersion = opensimVersion;
+ }
///
/// Adds a new grid server plugin - grid servers will be requested in the order they were loaded.
@@ -360,7 +376,7 @@ namespace OpenSim.Grid.GridServer
if (!requestData.ContainsKey("UUID") || !UUID.TryParse((string)requestData["UUID"], out uuid))
{
- m_log.Warn("[LOGIN PRELUDE]: Region connected without a UUID, sending back error response.");
+ m_log.Debug("[LOGIN PRELUDE]: Region connected without a UUID, sending back error response.");
return ErrorResponse("No UUID passed to grid server - unable to connect you");
}
@@ -370,21 +386,33 @@ namespace OpenSim.Grid.GridServer
}
catch (FormatException e)
{
- m_log.Warn("[LOGIN PRELUDE]: Invalid login parameters, sending back error response.");
+ m_log.Debug("[LOGIN PRELUDE]: Invalid login parameters, sending back error response.");
return ErrorResponse("Wrong format in login parameters. Please verify parameters." + e.ToString());
}
+
+ m_log.InfoFormat("[LOGIN BEGIN]: Received login request from simulator: {0}", sim.regionName);
if (!Config.AllowRegionRegistration)
{
- m_log.InfoFormat(
+ m_log.DebugFormat(
"[LOGIN END]: Disabled region registration blocked login request from simulator: {0}",
sim.regionName);
- return ErrorResponse("The grid is currently not accepting region registrations.");
+ return ErrorResponse("This grid is currently not accepting region registrations.");
+ }
+
+ int majorInterfaceVersion = 0;
+ if (requestData.ContainsKey("major_interface_version"))
+ int.TryParse((string)requestData["major_interface_version"], out majorInterfaceVersion);
+
+ if (majorInterfaceVersion != VersionInfo.MajorInterfaceVersion)
+ {
+ return ErrorResponse(
+ String.Format(
+ "Your region is the wrong version to connect to this grid. Try changing to version {0} (interface version {1})",
+ m_opensimVersion, VersionInfo.MajorInterfaceVersion));
}
- m_log.InfoFormat("[LOGIN BEGIN]: Received login request from simulator: {0}", sim.regionName);
-
existingSim = GetRegion(sim.regionHandle);
if (existingSim == null || existingSim.UUID == sim.UUID || sim.UUID != sim.originUUID)
diff --git a/OpenSim/Grid/GridServer/GridServerBase.cs b/OpenSim/Grid/GridServer/GridServerBase.cs
index 36ea238bc8..9652765171 100644
--- a/OpenSim/Grid/GridServer/GridServerBase.cs
+++ b/OpenSim/Grid/GridServer/GridServerBase.cs
@@ -153,7 +153,7 @@ namespace OpenSim.Grid.GridServer
protected virtual void SetupGridManager()
{
m_log.Info("[DATA]: Connecting to Storage Server");
- m_gridManager = new GridManager();
+ m_gridManager = new GridManager(m_version);
m_gridManager.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect);
m_gridManager.Config = m_config;
}
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index a4fa3bb0a5..0c131203e0 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -130,6 +130,7 @@ namespace OpenSim.Region.Communications.OGS1
GridParams["originUUID"] = regionInfo.originRegionID.ToString();
GridParams["server_uri"] = regionInfo.ServerURI;
GridParams["region_secret"] = regionInfo.regionSecret;
+ GridParams["major_interface_version"] = VersionInfo.MajorInterfaceVersion.ToString();
if (regionInfo.MasterAvatarAssignedUUID != UUID.Zero)
GridParams["master_avatar_uuid"] = regionInfo.MasterAvatarAssignedUUID.ToString();
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 68fac590b5..fd4eb58a35 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -319,6 +319,7 @@ namespace OpenSim.Region.Environment.Scenes
m_statsReporter.SetObjectCapacity(objectCapacity);
m_simulatorVersion = simulatorVersion
+ + " (OS " + Util.GetOperatingSystemInformation() + ")"
+ " ChilTasks:" + m_seeIntoRegionFromNeighbor.ToString()
+ " PhysPrim:" + m_physicalPrim.ToString();