diff options
Diffstat (limited to 'OpenSim')
28 files changed, 284 insertions, 252 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs index ffa30d5..016ab73 100644 --- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs | |||
@@ -319,6 +319,13 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
319 | OSHttpRequest req = new OSHttpRequest(context, request); | 319 | OSHttpRequest req = new OSHttpRequest(context, request); |
320 | OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); | 320 | OSHttpResponse resp = new OSHttpResponse(new HttpResponse(context, request),context); |
321 | HandleRequest(req, resp); | 321 | HandleRequest(req, resp); |
322 | |||
323 | // !!!HACK ALERT!!! | ||
324 | // There seems to be a bug in the underlying http code that makes subsequent requests | ||
325 | // come up with trash in Accept headers. Until that gets fixed, we're cleaning them up here. | ||
326 | if (request.AcceptTypes != null) | ||
327 | for (int i = 0; i < request.AcceptTypes.Length; i++) | ||
328 | request.AcceptTypes[i] = string.Empty; | ||
322 | } | 329 | } |
323 | 330 | ||
324 | // public void ConvertIHttpClientContextToOSHttp(object stateinfo) | 331 | // public void ConvertIHttpClientContextToOSHttp(object stateinfo) |
diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs index 3619606..5449757 100644 --- a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs | |||
@@ -390,36 +390,41 @@ Asset service request failures: {3}" + Environment.NewLine, | |||
390 | public override string XReport(string uptime, string version) | 390 | public override string XReport(string uptime, string version) |
391 | { | 391 | { |
392 | OSDMap args = new OSDMap(30); | 392 | OSDMap args = new OSDMap(30); |
393 | args["AssetsInCache"] = OSD.FromReal(AssetsInCache); | 393 | args["AssetsInCache"] = OSD.FromString (String.Format ("{0:0.##}", AssetsInCache)); |
394 | args["TimeAfterCacheMiss"] = OSD.FromReal(assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0); | 394 | args["TimeAfterCacheMiss"] = OSD.FromString (String.Format ("{0:0.##}", |
395 | args["BlockedMissingTextureRequests"] = OSD.FromReal(BlockedMissingTextureRequests); | 395 | assetRequestTimeAfterCacheMiss.Milliseconds / 1000.0)); |
396 | args["AssetServiceRequestFailures"] = OSD.FromReal(AssetServiceRequestFailures); | 396 | args["BlockedMissingTextureRequests"] = OSD.FromString (String.Format ("{0:0.##}", |
397 | args["abnormalClientThreadTerminations"] = OSD.FromReal(abnormalClientThreadTerminations); | 397 | BlockedMissingTextureRequests)); |
398 | args["InventoryServiceRetrievalFailures"] = OSD.FromReal(InventoryServiceRetrievalFailures); | 398 | args["AssetServiceRequestFailures"] = OSD.FromString (String.Format ("{0:0.##}", |
399 | args["Dilatn"] = OSD.FromReal(timeDilation); | 399 | AssetServiceRequestFailures)); |
400 | args["SimFPS"] = OSD.FromReal(simFps); | 400 | args["abnormalClientThreadTerminations"] = OSD.FromString (String.Format ("{0:0.##}", |
401 | args["PhyFPS"] = OSD.FromReal(physicsFps); | 401 | abnormalClientThreadTerminations)); |
402 | args["AgntUp"] = OSD.FromReal(agentUpdates); | 402 | args["InventoryServiceRetrievalFailures"] = OSD.FromString (String.Format ("{0:0.##}", |
403 | args["RootAg"] = OSD.FromReal(rootAgents); | 403 | InventoryServiceRetrievalFailures)); |
404 | args["ChldAg"] = OSD.FromReal(childAgents); | 404 | args["Dilatn"] = OSD.FromString (String.Format ("{0:0.##}", timeDilation)); |
405 | args["Prims"] = OSD.FromReal(totalPrims); | 405 | args["SimFPS"] = OSD.FromString (String.Format ("{0:0.##}", simFps)); |
406 | args["AtvPrm"] = OSD.FromReal(activePrims); | 406 | args["PhyFPS"] = OSD.FromString (String.Format ("{0:0.##}", physicsFps)); |
407 | args["AtvScr"] = OSD.FromReal(activeScripts); | 407 | args["AgntUp"] = OSD.FromString (String.Format ("{0:0.##}", agentUpdates)); |
408 | args["ScrLPS"] = OSD.FromReal(scriptLinesPerSecond); | 408 | args["RootAg"] = OSD.FromString (String.Format ("{0:0.##}", rootAgents)); |
409 | args["PktsIn"] = OSD.FromReal(inPacketsPerSecond); | 409 | args["ChldAg"] = OSD.FromString (String.Format ("{0:0.##}", childAgents)); |
410 | args["PktOut"] = OSD.FromReal(outPacketsPerSecond); | 410 | args["Prims"] = OSD.FromString (String.Format ("{0:0.##}", totalPrims)); |
411 | args["PendDl"] = OSD.FromReal(pendingDownloads); | 411 | args["AtvPrm"] = OSD.FromString (String.Format ("{0:0.##}", activePrims)); |
412 | args["PendUl"] = OSD.FromReal(pendingUploads); | 412 | args["AtvScr"] = OSD.FromString (String.Format ("{0:0.##}", activeScripts)); |
413 | args["UnackB"] = OSD.FromReal(unackedBytes); | 413 | args["ScrLPS"] = OSD.FromString (String.Format ("{0:0.##}", scriptLinesPerSecond)); |
414 | args["TotlFt"] = OSD.FromReal(totalFrameTime); | 414 | args["PktsIn"] = OSD.FromString (String.Format ("{0:0.##}", inPacketsPerSecond)); |
415 | args["NetFt"] = OSD.FromReal(netFrameTime); | 415 | args["PktOut"] = OSD.FromString (String.Format ("{0:0.##}", outPacketsPerSecond)); |
416 | args["PhysFt"] = OSD.FromReal(physicsFrameTime); | 416 | args["PendDl"] = OSD.FromString (String.Format ("{0:0.##}", pendingDownloads)); |
417 | args["OthrFt"] = OSD.FromReal(otherFrameTime); | 417 | args["PendUl"] = OSD.FromString (String.Format ("{0:0.##}", pendingUploads)); |
418 | args["AgntFt"] = OSD.FromReal(agentFrameTime); | 418 | args["UnackB"] = OSD.FromString (String.Format ("{0:0.##}", unackedBytes)); |
419 | args["ImgsFt"] = OSD.FromReal(imageFrameTime); | 419 | args["TotlFt"] = OSD.FromString (String.Format ("{0:0.##}", totalFrameTime)); |
420 | args["Memory"] = OSD.FromString(base.XReport(uptime, version)); | 420 | args["NetFt"] = OSD.FromString (String.Format ("{0:0.##}", netFrameTime)); |
421 | args["Uptime"] = OSD.FromString(uptime); | 421 | args["PhysFt"] = OSD.FromString (String.Format ("{0:0.##}", physicsFrameTime)); |
422 | args["Version"] = OSD.FromString(version); | 422 | args["OthrFt"] = OSD.FromString (String.Format ("{0:0.##}", otherFrameTime)); |
423 | args["AgntFt"] = OSD.FromString (String.Format ("{0:0.##}", agentFrameTime)); | ||
424 | args["ImgsFt"] = OSD.FromString (String.Format ("{0:0.##}", imageFrameTime)); | ||
425 | args["Memory"] = OSD.FromString (base.XReport (uptime, version)); | ||
426 | args["Uptime"] = OSD.FromString (uptime); | ||
427 | args["Version"] = OSD.FromString (version); | ||
423 | 428 | ||
424 | string strBuffer = ""; | 429 | string strBuffer = ""; |
425 | strBuffer = OSDParser.SerializeJsonString(args); | 430 | strBuffer = OSDParser.SerializeJsonString(args); |
diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index c39fb6f..af5a0ce 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs | |||
@@ -1171,6 +1171,16 @@ namespace OpenSim.Framework | |||
1171 | 1171 | ||
1172 | } | 1172 | } |
1173 | 1173 | ||
1174 | public static uint ConvertAccessLevelToMaturity(byte maturity) | ||
1175 | { | ||
1176 | if (maturity <= 13) | ||
1177 | return 0; | ||
1178 | else if (maturity <= 21) | ||
1179 | return 1; | ||
1180 | else | ||
1181 | return 2; | ||
1182 | } | ||
1183 | |||
1174 | /// <summary> | 1184 | /// <summary> |
1175 | /// Produces an OSDMap from its string representation on a stream | 1185 | /// Produces an OSDMap from its string representation on a stream |
1176 | /// </summary> | 1186 | /// </summary> |
@@ -1486,4 +1496,4 @@ namespace OpenSim.Framework | |||
1486 | } | 1496 | } |
1487 | 1497 | ||
1488 | } | 1498 | } |
1489 | } \ No newline at end of file | 1499 | } |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index d2d1e8f..af2dd85 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -2675,7 +2675,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2675 | 2675 | ||
2676 | // Bit 0: Mature, bit 7: on sale, other bits: no idea | 2676 | // Bit 0: Mature, bit 7: on sale, other bits: no idea |
2677 | reply.Data.Flags = (byte)( | 2677 | reply.Data.Flags = (byte)( |
2678 | ((land.Flags & (uint)ParcelFlags.MaturePublish) != 0 ? (1 << 0) : 0) + | 2678 | (info.AccessLevel > 13 ? (1 << 0) : 0) + |
2679 | ((land.Flags & (uint)ParcelFlags.ForSale) != 0 ? (1 << 7) : 0)); | 2679 | ((land.Flags & (uint)ParcelFlags.ForSale) != 0 ? (1 << 7) : 0)); |
2680 | 2680 | ||
2681 | Vector3 pos = land.UserLocation; | 2681 | Vector3 pos = land.UserLocation; |
@@ -2683,8 +2683,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2683 | { | 2683 | { |
2684 | pos = (land.AABBMax + land.AABBMin) * 0.5f; | 2684 | pos = (land.AABBMax + land.AABBMin) * 0.5f; |
2685 | } | 2685 | } |
2686 | reply.Data.GlobalX = info.RegionLocX * Constants.RegionSize + x; | 2686 | reply.Data.GlobalX = info.RegionLocX + x; |
2687 | reply.Data.GlobalY = info.RegionLocY * Constants.RegionSize + y; | 2687 | reply.Data.GlobalY = info.RegionLocY + y; |
2688 | reply.Data.GlobalZ = pos.Z; | 2688 | reply.Data.GlobalZ = pos.Z; |
2689 | reply.Data.SimName = Utils.StringToBytes(info.RegionName); | 2689 | reply.Data.SimName = Utils.StringToBytes(info.RegionName); |
2690 | reply.Data.SnapshotID = land.SnapshotID; | 2690 | reply.Data.SnapshotID = land.SnapshotID; |
diff --git a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs index e557d2c..c802490 100644 --- a/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Attachments/AttachmentsModule.cs | |||
@@ -293,8 +293,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments | |||
293 | } | 293 | } |
294 | 294 | ||
295 | // Fire after attach, so we don't get messy perms dialogs | 295 | // Fire after attach, so we don't get messy perms dialogs |
296 | // 3 == AttachedRez | 296 | // 4 == AttachedRez |
297 | objatt.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 3); | 297 | objatt.CreateScriptInstances(0, true, m_scene.DefaultScriptEngine, 4); |
298 | objatt.ResumeScripts(); | 298 | objatt.ResumeScripts(); |
299 | 299 | ||
300 | // Do this last so that event listeners have access to all the effects of the attachment | 300 | // Do this last so that event listeners have access to all the effects of the attachment |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs index cbea54c..1603c07 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/InstantMessageModule.cs | |||
@@ -169,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
169 | } | 169 | } |
170 | catch | 170 | catch |
171 | { | 171 | { |
172 | m_log.Info("[OFFLINE MESSAGING]: No PST timezone found on this machine. Saving with local timestamp."); | 172 | //m_log.Info("[OFFLINE MESSAGING]: No PST timezone found on this machine. Saving with local timestamp."); |
173 | } | 173 | } |
174 | 174 | ||
175 | // And make it look local again to fool the unix time util | 175 | // And make it look local again to fool the unix time util |
diff --git a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs index d025f0c..e1ee0b1 100644 --- a/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/InstantMessage/MessageTransferModule.cs | |||
@@ -132,7 +132,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
132 | { | 132 | { |
133 | UUID toAgentID = new UUID(im.toAgentID); | 133 | UUID toAgentID = new UUID(im.toAgentID); |
134 | 134 | ||
135 | m_log.DebugFormat("[INSTANT MESSAGE]: Attempting delivery of IM from {0} to {1}", im.fromAgentName, toAgentID.ToString()); | 135 | //m_log.DebugFormat("[INSTANT MESSAGE]: Attempting delivery of IM from {0} to {1}", im.fromAgentName, toAgentID.ToString()); |
136 | 136 | ||
137 | // Try root avatar only first | 137 | // Try root avatar only first |
138 | foreach (Scene scene in m_Scenes) | 138 | foreach (Scene scene in m_Scenes) |
@@ -140,12 +140,12 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
140 | if (scene.Entities.ContainsKey(toAgentID) && | 140 | if (scene.Entities.ContainsKey(toAgentID) && |
141 | scene.Entities[toAgentID] is ScenePresence) | 141 | scene.Entities[toAgentID] is ScenePresence) |
142 | { | 142 | { |
143 | m_log.DebugFormat("[INSTANT MESSAGE]: Looking for {0} in {1}", toAgentID.ToString(), scene.RegionInfo.RegionName); | 143 | // m_log.DebugFormat("[INSTANT MESSAGE]: Looking for {0} in {1}", toAgentID.ToString(), scene.RegionInfo.RegionName); |
144 | // Local message | 144 | // Local message |
145 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; | 145 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; |
146 | if (!user.IsChildAgent) | 146 | if (!user.IsChildAgent) |
147 | { | 147 | { |
148 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering to client"); | 148 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering to client"); |
149 | user.ControllingClient.SendInstantMessage(im); | 149 | user.ControllingClient.SendInstantMessage(im); |
150 | 150 | ||
151 | // Message sent | 151 | // Message sent |
@@ -167,7 +167,7 @@ namespace OpenSim.Region.CoreModules.Avatar.InstantMessage | |||
167 | // Local message | 167 | // Local message |
168 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; | 168 | ScenePresence user = (ScenePresence) scene.Entities[toAgentID]; |
169 | 169 | ||
170 | m_log.DebugFormat("[INSTANT MESSAGE]: Delivering to client"); | 170 | // m_log.DebugFormat("[INSTANT MESSAGE]: Delivering to client"); |
171 | user.ControllingClient.SendInstantMessage(im); | 171 | user.ControllingClient.SendInstantMessage(im); |
172 | 172 | ||
173 | // Message sent | 173 | // Message sent |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index 2d80382..3fb2c8c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs | |||
@@ -741,7 +741,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
741 | public void TestMergeIarPath() | 741 | public void TestMergeIarPath() |
742 | { | 742 | { |
743 | TestHelper.InMethod(); | 743 | TestHelper.InMethod(); |
744 | log4net.Config.XmlConfigurator.Configure(); | 744 | // log4net.Config.XmlConfigurator.Configure(); |
745 | 745 | ||
746 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); | 746 | Scene scene = SceneSetupHelpers.SetupScene("inventory"); |
747 | UserAccount ua1 = UserProfileTestUtils.CreateUserWithInventory(scene); | 747 | UserAccount ua1 = UserProfileTestUtils.CreateUserWithInventory(scene); |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs index bce160a..23251c9 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsIn/Land/LandServiceInConnectorModule.cs | |||
@@ -121,7 +121,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land | |||
121 | 121 | ||
122 | #region ILandService | 122 | #region ILandService |
123 | 123 | ||
124 | public LandData GetLandData(ulong regionHandle, uint x, uint y) | 124 | public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) |
125 | { | 125 | { |
126 | m_log.DebugFormat("[LAND IN CONNECTOR]: GetLandData for {0}. Count = {1}", | 126 | m_log.DebugFormat("[LAND IN CONNECTOR]: GetLandData for {0}. Count = {1}", |
127 | regionHandle, m_Scenes.Count); | 127 | regionHandle, m_Scenes.Count); |
@@ -130,10 +130,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsIn.Land | |||
130 | if (s.RegionInfo.RegionHandle == regionHandle) | 130 | if (s.RegionInfo.RegionHandle == regionHandle) |
131 | { | 131 | { |
132 | m_log.Debug("[LAND IN CONNECTOR]: Found region to GetLandData from"); | 132 | m_log.Debug("[LAND IN CONNECTOR]: Found region to GetLandData from"); |
133 | regionAccess = s.RegionInfo.AccessLevel; | ||
133 | return s.GetLandData(x, y); | 134 | return s.GetLandData(x, y); |
134 | } | 135 | } |
135 | } | 136 | } |
136 | m_log.DebugFormat("[LAND IN CONNECTOR]: region handle {0} not found", regionHandle); | 137 | m_log.DebugFormat("[LAND IN CONNECTOR]: region handle {0} not found", regionHandle); |
138 | regionAccess = 42; | ||
137 | return null; | 139 | return null; |
138 | } | 140 | } |
139 | 141 | ||
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs index b2e3f4f..023a44c 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/LocalGridServiceConnector.cs | |||
@@ -233,6 +233,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid | |||
233 | return m_GridService.GetFallbackRegions(scopeID, x, y); | 233 | return m_GridService.GetFallbackRegions(scopeID, x, y); |
234 | } | 234 | } |
235 | 235 | ||
236 | public List<GridRegion> GetHyperlinks(UUID scopeID) | ||
237 | { | ||
238 | return m_GridService.GetHyperlinks(scopeID); | ||
239 | } | ||
240 | |||
236 | public int GetRegionFlags(UUID scopeID, UUID regionID) | 241 | public int GetRegionFlags(UUID scopeID, UUID regionID) |
237 | { | 242 | { |
238 | return m_GridService.GetRegionFlags(scopeID, regionID); | 243 | return m_GridService.GetRegionFlags(scopeID, regionID); |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs index 95d8737..2726ae8 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Grid/Tests/GridConnectorsTests.cs | |||
@@ -136,6 +136,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.Tests | |||
136 | 900 * (int)Constants.RegionSize, 1100 * (int)Constants.RegionSize); | 136 | 900 * (int)Constants.RegionSize, 1100 * (int)Constants.RegionSize); |
137 | Assert.IsNotNull(results, "Retrieved GetRegionRange list is null"); | 137 | Assert.IsNotNull(results, "Retrieved GetRegionRange list is null"); |
138 | Assert.That(results.Count, Is.EqualTo(2), "Retrieved neighbour collection is not the number expected"); | 138 | Assert.That(results.Count, Is.EqualTo(2), "Retrieved neighbour collection is not the number expected"); |
139 | |||
140 | results = m_LocalConnector.GetHyperlinks(UUID.Zero); | ||
141 | Assert.IsNotNull(results, "Retrieved GetHyperlinks list is null"); | ||
142 | Assert.That(results.Count, Is.EqualTo(0), "Retrieved linked regions collection is not the number expected"); | ||
143 | |||
139 | } | 144 | } |
140 | } | 145 | } |
141 | } | 146 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs index cb87f6f..e15f624 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/LocalLandServiceConnector.cs | |||
@@ -116,8 +116,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | |||
116 | 116 | ||
117 | #region ILandService | 117 | #region ILandService |
118 | 118 | ||
119 | public LandData GetLandData(ulong regionHandle, uint x, uint y) | 119 | public LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) |
120 | { | 120 | { |
121 | regionAccess = 2; | ||
121 | m_log.DebugFormat("[LAND CONNECTOR]: request for land data in {0} at {1}, {2}", | 122 | m_log.DebugFormat("[LAND CONNECTOR]: request for land data in {0} at {1}, {2}", |
122 | regionHandle, x, y); | 123 | regionHandle, x, y); |
123 | 124 | ||
@@ -126,6 +127,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | |||
126 | if (s.RegionInfo.RegionHandle == regionHandle) | 127 | if (s.RegionInfo.RegionHandle == regionHandle) |
127 | { | 128 | { |
128 | LandData land = s.GetLandData(x, y); | 129 | LandData land = s.GetLandData(x, y); |
130 | regionAccess = s.RegionInfo.AccessLevel; | ||
129 | return land; | 131 | return land; |
130 | } | 132 | } |
131 | } | 133 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs index b0ace39..2386060 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Land/RemoteLandServiceConnector.cs | |||
@@ -90,7 +90,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | |||
90 | if (!m_Enabled) | 90 | if (!m_Enabled) |
91 | return; | 91 | return; |
92 | 92 | ||
93 | m_GridService = scene.GridService; | ||
94 | m_LocalService.AddRegion(scene); | 93 | m_LocalService.AddRegion(scene); |
95 | scene.RegisterModuleInterface<ILandService>(this); | 94 | scene.RegisterModuleInterface<ILandService>(this); |
96 | } | 95 | } |
@@ -103,18 +102,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Land | |||
103 | 102 | ||
104 | public void RegionLoaded(Scene scene) | 103 | public void RegionLoaded(Scene scene) |
105 | { | 104 | { |
105 | m_GridService = scene.GridService; | ||
106 | } | 106 | } |
107 | 107 | ||
108 | 108 | ||
109 | #region ILandService | 109 | #region ILandService |
110 | 110 | ||
111 | public override LandData GetLandData(ulong regionHandle, uint x, uint y) | 111 | public override LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) |
112 | { | 112 | { |
113 | LandData land = m_LocalService.GetLandData(regionHandle, x, y); | 113 | LandData land = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess); |
114 | if (land != null) | 114 | if (land != null) |
115 | return land; | 115 | return land; |
116 | 116 | ||
117 | return base.GetLandData(regionHandle, x, y); | 117 | return base.GetLandData(regionHandle, x, y, out regionAccess); |
118 | 118 | ||
119 | } | 119 | } |
120 | #endregion ILandService | 120 | #endregion ILandService |
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index cfee1b0..7e29a56 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs | |||
@@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
51 | public LandData LandData; | 51 | public LandData LandData; |
52 | public ulong RegionHandle; | 52 | public ulong RegionHandle; |
53 | public uint X, Y; | 53 | public uint X, Y; |
54 | public byte RegionAccess; | ||
54 | } | 55 | } |
55 | 56 | ||
56 | public class LandManagementModule : INonSharedRegionModule | 57 | public class LandManagementModule : INonSharedRegionModule |
@@ -1484,13 +1485,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1484 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) | 1485 | if (extLandData.RegionHandle == m_scene.RegionInfo.RegionHandle) |
1485 | { | 1486 | { |
1486 | extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData; | 1487 | extLandData.LandData = this.GetLandObject(extLandData.X, extLandData.Y).LandData; |
1488 | extLandData.RegionAccess = m_scene.RegionInfo.AccessLevel; | ||
1487 | } | 1489 | } |
1488 | else | 1490 | else |
1489 | { | 1491 | { |
1490 | ILandService landService = m_scene.RequestModuleInterface<ILandService>(); | 1492 | ILandService landService = m_scene.RequestModuleInterface<ILandService>(); |
1491 | extLandData.LandData = landService.GetLandData(extLandData.RegionHandle, | 1493 | extLandData.LandData = landService.GetLandData(extLandData.RegionHandle, |
1492 | extLandData.X, | 1494 | extLandData.X, |
1493 | extLandData.Y); | 1495 | extLandData.Y, |
1496 | out extLandData.RegionAccess); | ||
1494 | if (extLandData.LandData == null) | 1497 | if (extLandData.LandData == null) |
1495 | { | 1498 | { |
1496 | // we didn't find the region/land => don't cache | 1499 | // we didn't find the region/land => don't cache |
@@ -1522,6 +1525,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
1522 | r.RegionName = info.RegionName; | 1525 | r.RegionName = info.RegionName; |
1523 | r.RegionLocX = (uint)info.RegionLocX; | 1526 | r.RegionLocX = (uint)info.RegionLocX; |
1524 | r.RegionLocY = (uint)info.RegionLocY; | 1527 | r.RegionLocY = (uint)info.RegionLocY; |
1528 | r.RegionSettings.Maturity = (int)Util.ConvertAccessLevelToMaturity(data.RegionAccess); | ||
1525 | remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y); | 1529 | remoteClient.SendParcelInfo(r, data.LandData, parcelID, data.X, data.Y); |
1526 | } | 1530 | } |
1527 | else | 1531 | else |
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index c0ec5df..5acc227 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs | |||
@@ -1824,6 +1824,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
1824 | /// <param name="originalPrim"></param> | 1824 | /// <param name="originalPrim"></param> |
1825 | /// <param name="offset"></param> | 1825 | /// <param name="offset"></param> |
1826 | /// <param name="flags"></param> | 1826 | /// <param name="flags"></param> |
1827 | /// <param name="AgentID"></param> | ||
1828 | /// <param name="GroupID"></param> | ||
1827 | protected internal void DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID) | 1829 | protected internal void DuplicateObject(uint originalPrim, Vector3 offset, uint flags, UUID AgentID, UUID GroupID) |
1828 | { | 1830 | { |
1829 | //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); | 1831 | //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); |
@@ -1838,7 +1840,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1838 | /// <param name="originalPrim"></param> | 1840 | /// <param name="originalPrim"></param> |
1839 | /// <param name="offset"></param> | 1841 | /// <param name="offset"></param> |
1840 | /// <param name="flags"></param> | 1842 | /// <param name="flags"></param> |
1841 | protected internal SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) | 1843 | /// <param name="AgentID"></param> |
1844 | /// <param name="GroupID"></param> | ||
1845 | /// <param name="rot"></param> | ||
1846 | public SceneObjectGroup DuplicateObject(uint originalPrimID, Vector3 offset, uint flags, UUID AgentID, UUID GroupID, Quaternion rot) | ||
1842 | { | 1847 | { |
1843 | //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); | 1848 | //m_log.DebugFormat("[SCENE]: Duplication of object {0} at offset {1} requested by agent {2}", originalPrim, offset, AgentID); |
1844 | SceneObjectGroup original = GetGroupByPrim(originalPrimID); | 1849 | SceneObjectGroup original = GetGroupByPrim(originalPrimID); |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index d544619..b0ce450 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -1184,6 +1184,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
1184 | set { _nextOwnerMask = value; } | 1184 | set { _nextOwnerMask = value; } |
1185 | } | 1185 | } |
1186 | 1186 | ||
1187 | /// <summary> | ||
1188 | /// Property flags. See OpenMetaverse.PrimFlags | ||
1189 | /// </summary> | ||
1190 | /// Example properties are PrimFlags.Phantom and PrimFlags.DieAtEdge | ||
1187 | public PrimFlags Flags | 1191 | public PrimFlags Flags |
1188 | { | 1192 | { |
1189 | get { return _flags; } | 1193 | get { return _flags; } |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs index 42587c1..8a103d7 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneBaseTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneGraphTests.cs | |||
@@ -1,4 +1,4 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | 4 | * |
@@ -26,61 +26,46 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Reflection; | ||
29 | using NUnit.Framework; | 30 | using NUnit.Framework; |
31 | using NUnit.Framework.SyntaxHelpers; | ||
30 | using OpenMetaverse; | 32 | using OpenMetaverse; |
31 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
32 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | 34 | using OpenSim.Framework.Communications; |
35 | using OpenSim.Region.Framework.Scenes; | ||
36 | using OpenSim.Tests.Common; | ||
37 | using OpenSim.Tests.Common.Mock; | ||
38 | using OpenSim.Tests.Common.Setup; | ||
33 | 39 | ||
34 | namespace OpenSim.Region.Framework.Scenes.Tests | 40 | namespace OpenSim.Region.Framework.Scenes.Tests |
35 | { | 41 | { |
36 | /// <summary> | ||
37 | /// Scene presence tests | ||
38 | /// </summary> | ||
39 | [TestFixture] | 42 | [TestFixture] |
40 | public class SceneBaseTests | 43 | public class SceneGraphTests |
41 | { | 44 | { |
42 | private class SceneBaseImpl : SceneBase | 45 | [Test] |
46 | public void TestDuplicateObject() | ||
43 | { | 47 | { |
44 | public override void Update() | 48 | TestHelper.InMethod(); |
45 | { | 49 | Scene scene = SceneSetupHelpers.SetupScene(); |
46 | throw new NotImplementedException(); | ||
47 | } | ||
48 | |||
49 | public override void LoadWorldMap() | ||
50 | { | ||
51 | throw new NotImplementedException(); | ||
52 | } | ||
53 | |||
54 | public override void AddNewClient(IClientAPI client) | ||
55 | { | ||
56 | throw new NotImplementedException(); | ||
57 | } | ||
58 | |||
59 | public override void RemoveClient(UUID agentID) | ||
60 | { | ||
61 | throw new NotImplementedException(); | ||
62 | } | ||
63 | 50 | ||
64 | public override void OtherRegionUp(GridRegion otherRegion) | 51 | UUID ownerUuid = new UUID("00000000-0000-0000-0000-000000000010"); |
65 | { | 52 | string objName = "obj1"; |
66 | throw new NotImplementedException(); | 53 | UUID objUuid = new UUID("00000000-0000-0000-0000-000000000001"); |
67 | } | ||
68 | 54 | ||
69 | public override bool TryGetScenePresence(UUID agentID, out ScenePresence scenePresence) | 55 | SceneObjectPart part |
70 | { | 56 | = new SceneObjectPart(ownerUuid, PrimitiveBaseShape.Default, Vector3.Zero, Quaternion.Identity, Vector3.Zero) |
71 | throw new NotImplementedException(); | 57 | { Name = objName, UUID = objUuid }; |
72 | } | ||
73 | 58 | ||
74 | public override bool CheckClient(UUID agentID, System.Net.IPEndPoint ep) | 59 | scene.AddNewSceneObject(new SceneObjectGroup(part), false); |
75 | { | 60 | |
76 | throw new NotImplementedException(); | 61 | SceneObjectGroup duplicatedSo |
77 | } | 62 | = scene.SceneGraph.DuplicateObject( |
78 | } | 63 | part.LocalId, new Vector3(10, 0, 0), 0, ownerUuid, UUID.Zero, Quaternion.Identity); |
79 | 64 | ||
80 | [Test] | 65 | Assert.That(duplicatedSo.Children.Count, Is.EqualTo(1)); |
81 | public void TestConstructor() | 66 | Assert.That(duplicatedSo.RootPart.LocalId, Is.Not.EqualTo(part.LocalId)); |
82 | { | 67 | |
83 | new SceneBaseImpl(); | 68 | //SceneObjectPart retrievedPart = scene.GetSceneObjectPart(objUuid); |
84 | } | 69 | } |
85 | } | 70 | } |
86 | } | 71 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs index 4baa22c..d4f9f18 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectBasicTests.cs | |||
@@ -32,7 +32,6 @@ using NUnit.Framework.SyntaxHelpers; | |||
32 | using OpenMetaverse; | 32 | using OpenMetaverse; |
33 | using OpenSim.Framework; | 33 | using OpenSim.Framework; |
34 | using OpenSim.Framework.Communications; | 34 | using OpenSim.Framework.Communications; |
35 | |||
36 | using OpenSim.Region.Framework.Scenes; | 35 | using OpenSim.Region.Framework.Scenes; |
37 | using OpenSim.Tests.Common; | 36 | using OpenSim.Tests.Common; |
38 | using OpenSim.Tests.Common.Mock; | 37 | using OpenSim.Tests.Common.Mock; |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs deleted file mode 100644 index 8b2d387..0000000 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneTests.cs +++ /dev/null | |||
@@ -1,147 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using NUnit.Framework; | ||
31 | using OpenMetaverse; | ||
32 | using OpenSim.Framework; | ||
33 | using OpenSim.Region.Framework.Interfaces; | ||
34 | |||
35 | namespace OpenSim.Region.Framework.Scenes.Tests | ||
36 | { | ||
37 | /// <summary> | ||
38 | /// Scene presence tests | ||
39 | /// </summary> | ||
40 | [TestFixture] | ||
41 | public class SceneTests | ||
42 | { | ||
43 | private class FakeStorageManager : StorageManager | ||
44 | { | ||
45 | private class FakeRegionDataStore : IRegionDataStore | ||
46 | { | ||
47 | public void Initialise(string filename) | ||
48 | { | ||
49 | } | ||
50 | |||
51 | public void Dispose() | ||
52 | { | ||
53 | } | ||
54 | |||
55 | public void StoreObject(SceneObjectGroup obj, UUID regionUUID) | ||
56 | { | ||
57 | throw new NotImplementedException(); | ||
58 | } | ||
59 | |||
60 | public void RemoveObject(UUID uuid, UUID regionUUID) | ||
61 | { | ||
62 | throw new NotImplementedException(); | ||
63 | } | ||
64 | |||
65 | public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) | ||
66 | { | ||
67 | throw new NotImplementedException(); | ||
68 | } | ||
69 | |||
70 | public List<SceneObjectGroup> LoadObjects(UUID regionUUID) | ||
71 | { | ||
72 | throw new NotImplementedException(); | ||
73 | } | ||
74 | |||
75 | public void StoreTerrain(double[,] terrain, UUID regionID) | ||
76 | { | ||
77 | throw new NotImplementedException(); | ||
78 | } | ||
79 | |||
80 | public double[,] LoadTerrain(UUID regionID) | ||
81 | { | ||
82 | throw new NotImplementedException(); | ||
83 | } | ||
84 | |||
85 | public void StoreLandObject(ILandObject Parcel) | ||
86 | { | ||
87 | throw new NotImplementedException(); | ||
88 | } | ||
89 | |||
90 | public void RemoveLandObject(UUID globalID) | ||
91 | { | ||
92 | throw new NotImplementedException(); | ||
93 | } | ||
94 | |||
95 | public List<LandData> LoadLandObjects(UUID regionUUID) | ||
96 | { | ||
97 | throw new NotImplementedException(); | ||
98 | } | ||
99 | |||
100 | public void StoreRegionSettings(RegionSettings rs) | ||
101 | { | ||
102 | throw new NotImplementedException(); | ||
103 | } | ||
104 | public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID) | ||
105 | { | ||
106 | //This connector doesn't support the windlight module yet | ||
107 | //Return default LL windlight settings | ||
108 | return new RegionLightShareData(); | ||
109 | } | ||
110 | public void StoreRegionWindlightSettings(RegionLightShareData wl) | ||
111 | { | ||
112 | //This connector doesn't support the windlight module yet | ||
113 | } | ||
114 | public RegionSettings LoadRegionSettings(UUID regionUUID) | ||
115 | { | ||
116 | return null; | ||
117 | } | ||
118 | |||
119 | public void Shutdown() | ||
120 | { | ||
121 | throw new NotImplementedException(); | ||
122 | } | ||
123 | } | ||
124 | |||
125 | public FakeStorageManager() : base(new FakeRegionDataStore()) | ||
126 | { | ||
127 | } | ||
128 | |||
129 | public FakeStorageManager(IRegionDataStore storage) : this() | ||
130 | { | ||
131 | } | ||
132 | |||
133 | public FakeStorageManager(string dllName, string connectionstring, string estateconnectionstring) : this() | ||
134 | { | ||
135 | } | ||
136 | } | ||
137 | |||
138 | [Test] | ||
139 | public void TestConstructor() | ||
140 | { | ||
141 | RegionInfo regionInfo = new RegionInfo(0,0,null,null); | ||
142 | FakeStorageManager storageManager = new FakeStorageManager(); | ||
143 | |||
144 | new Scene(regionInfo, null, null, storageManager, null, false, false, false, null, null); | ||
145 | } | ||
146 | } | ||
147 | } | ||
diff --git a/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs b/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs index c90dd6f..913c6c9 100644 --- a/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs +++ b/OpenSim/Server/Handlers/Grid/GridServerPostHandler.cs | |||
@@ -109,6 +109,9 @@ namespace OpenSim.Server.Handlers.Grid | |||
109 | case "get_fallback_regions": | 109 | case "get_fallback_regions": |
110 | return GetFallbackRegions(request); | 110 | return GetFallbackRegions(request); |
111 | 111 | ||
112 | case "get_hyperlinks": | ||
113 | return GetHyperlinks(request); | ||
114 | |||
112 | case "get_region_flags": | 115 | case "get_region_flags": |
113 | return GetRegionFlags(request); | 116 | return GetRegionFlags(request); |
114 | } | 117 | } |
@@ -483,6 +486,36 @@ namespace OpenSim.Server.Handlers.Grid | |||
483 | return encoding.GetBytes(xmlString); | 486 | return encoding.GetBytes(xmlString); |
484 | } | 487 | } |
485 | 488 | ||
489 | byte[] GetHyperlinks(Dictionary<string, object> request) | ||
490 | { | ||
491 | //m_log.DebugFormat("[GRID HANDLER]: GetHyperlinks"); | ||
492 | UUID scopeID = UUID.Zero; | ||
493 | if (request.ContainsKey("SCOPEID")) | ||
494 | UUID.TryParse(request["SCOPEID"].ToString(), out scopeID); | ||
495 | else | ||
496 | m_log.WarnFormat("[GRID HANDLER]: no scopeID in request to get linked regions"); | ||
497 | |||
498 | List<GridRegion> rinfos = m_GridService.GetHyperlinks(scopeID); | ||
499 | |||
500 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
501 | if ((rinfos == null) || ((rinfos != null) && (rinfos.Count == 0))) | ||
502 | result["result"] = "null"; | ||
503 | else | ||
504 | { | ||
505 | int i = 0; | ||
506 | foreach (GridRegion rinfo in rinfos) | ||
507 | { | ||
508 | Dictionary<string, object> rinfoDict = rinfo.ToKeyValuePairs(); | ||
509 | result["region" + i] = rinfoDict; | ||
510 | i++; | ||
511 | } | ||
512 | } | ||
513 | string xmlString = ServerUtils.BuildXmlResponse(result); | ||
514 | //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString); | ||
515 | UTF8Encoding encoding = new UTF8Encoding(); | ||
516 | return encoding.GetBytes(xmlString); | ||
517 | } | ||
518 | |||
486 | byte[] GetRegionFlags(Dictionary<string, object> request) | 519 | byte[] GetRegionFlags(Dictionary<string, object> request) |
487 | { | 520 | { |
488 | UUID scopeID = UUID.Zero; | 521 | UUID scopeID = UUID.Zero; |
diff --git a/OpenSim/Server/Handlers/Land/LandHandlers.cs b/OpenSim/Server/Handlers/Land/LandHandlers.cs index a21f9de..561f285 100644 --- a/OpenSim/Server/Handlers/Land/LandHandlers.cs +++ b/OpenSim/Server/Handlers/Land/LandHandlers.cs | |||
@@ -66,7 +66,8 @@ namespace OpenSim.Server.Handlers.Land | |||
66 | uint y = Convert.ToUInt32(requestData["y"]); | 66 | uint y = Convert.ToUInt32(requestData["y"]); |
67 | m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle); | 67 | m_log.DebugFormat("[LAND HANDLER]: Got request for land data at {0}, {1} for region {2}", x, y, regionHandle); |
68 | 68 | ||
69 | LandData landData = m_LocalService.GetLandData(regionHandle, x, y); | 69 | byte regionAccess; |
70 | LandData landData = m_LocalService.GetLandData(regionHandle, x, y, out regionAccess); | ||
70 | Hashtable hash = new Hashtable(); | 71 | Hashtable hash = new Hashtable(); |
71 | if (landData != null) | 72 | if (landData != null) |
72 | { | 73 | { |
@@ -83,6 +84,7 @@ namespace OpenSim.Server.Handlers.Land | |||
83 | hash["SalePrice"] = landData.SalePrice.ToString(); | 84 | hash["SalePrice"] = landData.SalePrice.ToString(); |
84 | hash["SnapshotID"] = landData.SnapshotID.ToString(); | 85 | hash["SnapshotID"] = landData.SnapshotID.ToString(); |
85 | hash["UserLocation"] = landData.UserLocation.ToString(); | 86 | hash["UserLocation"] = landData.UserLocation.ToString(); |
87 | hash["RegionAccess"] = regionAccess.ToString(); | ||
86 | } | 88 | } |
87 | 89 | ||
88 | XmlRpcResponse response = new XmlRpcResponse(); | 90 | XmlRpcResponse response = new XmlRpcResponse(); |
diff --git a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs index 1831533..80f0d2d 100644 --- a/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs +++ b/OpenSim/Services/Connectors/Grid/GridServiceConnector.cs | |||
@@ -556,6 +556,56 @@ namespace OpenSim.Services.Connectors | |||
556 | return rinfos; | 556 | return rinfos; |
557 | } | 557 | } |
558 | 558 | ||
559 | public List<GridRegion> GetHyperlinks(UUID scopeID) | ||
560 | { | ||
561 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | ||
562 | |||
563 | sendData["SCOPEID"] = scopeID.ToString(); | ||
564 | |||
565 | sendData["METHOD"] = "get_hyperlinks"; | ||
566 | |||
567 | List<GridRegion> rinfos = new List<GridRegion>(); | ||
568 | string reply = string.Empty; | ||
569 | try | ||
570 | { | ||
571 | reply = SynchronousRestFormsRequester.MakeRequest("POST", | ||
572 | m_ServerURI + "/grid", | ||
573 | ServerUtils.BuildQueryString(sendData)); | ||
574 | |||
575 | //m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply); | ||
576 | } | ||
577 | catch (Exception e) | ||
578 | { | ||
579 | m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server: {0}", e.Message); | ||
580 | return rinfos; | ||
581 | } | ||
582 | |||
583 | if (reply != string.Empty) | ||
584 | { | ||
585 | Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply); | ||
586 | |||
587 | if (replyData != null) | ||
588 | { | ||
589 | Dictionary<string, object>.ValueCollection rinfosList = replyData.Values; | ||
590 | foreach (object r in rinfosList) | ||
591 | { | ||
592 | if (r is Dictionary<string, object>) | ||
593 | { | ||
594 | GridRegion rinfo = new GridRegion((Dictionary<string, object>)r); | ||
595 | rinfos.Add(rinfo); | ||
596 | } | ||
597 | } | ||
598 | } | ||
599 | else | ||
600 | m_log.DebugFormat("[GRID CONNECTOR]: GetHyperlinks {0} received null response", | ||
601 | scopeID); | ||
602 | } | ||
603 | else | ||
604 | m_log.DebugFormat("[GRID CONNECTOR]: GetHyperlinks received null reply"); | ||
605 | |||
606 | return rinfos; | ||
607 | } | ||
608 | |||
559 | public virtual int GetRegionFlags(UUID scopeID, UUID regionID) | 609 | public virtual int GetRegionFlags(UUID scopeID, UUID regionID) |
560 | { | 610 | { |
561 | Dictionary<string, object> sendData = new Dictionary<string, object>(); | 611 | Dictionary<string, object> sendData = new Dictionary<string, object>(); |
diff --git a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs index 0223a77..c439dc5 100644 --- a/OpenSim/Services/Connectors/Land/LandServiceConnector.cs +++ b/OpenSim/Services/Connectors/Land/LandServiceConnector.cs | |||
@@ -64,7 +64,7 @@ namespace OpenSim.Services.Connectors | |||
64 | m_GridService = gridServices; | 64 | m_GridService = gridServices; |
65 | } | 65 | } |
66 | 66 | ||
67 | public virtual LandData GetLandData(ulong regionHandle, uint x, uint y) | 67 | public virtual LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess) |
68 | { | 68 | { |
69 | LandData landData = null; | 69 | LandData landData = null; |
70 | Hashtable hash = new Hashtable(); | 70 | Hashtable hash = new Hashtable(); |
@@ -74,6 +74,7 @@ namespace OpenSim.Services.Connectors | |||
74 | 74 | ||
75 | IList paramList = new ArrayList(); | 75 | IList paramList = new ArrayList(); |
76 | paramList.Add(hash); | 76 | paramList.Add(hash); |
77 | regionAccess = 42; // Default to adult. Better safe... | ||
77 | 78 | ||
78 | try | 79 | try |
79 | { | 80 | { |
@@ -109,6 +110,8 @@ namespace OpenSim.Services.Connectors | |||
109 | landData.SalePrice = Convert.ToInt32(hash["SalePrice"]); | 110 | landData.SalePrice = Convert.ToInt32(hash["SalePrice"]); |
110 | landData.SnapshotID = new UUID((string)hash["SnapshotID"]); | 111 | landData.SnapshotID = new UUID((string)hash["SnapshotID"]); |
111 | landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]); | 112 | landData.UserLocation = Vector3.Parse((string)hash["UserLocation"]); |
113 | if (hash["RegionAccess"] != null) | ||
114 | regionAccess = (byte)Convert.ToInt32((string)hash["RegionAccess"]); | ||
112 | m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name); | 115 | m_log.DebugFormat("[OGS1 GRID SERVICES] Got land data for parcel {0}", landData.Name); |
113 | } | 116 | } |
114 | catch (Exception e) | 117 | catch (Exception e) |
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs index 496eb2c..1ddcc75 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs | |||
@@ -359,6 +359,12 @@ namespace OpenSim.Services.Connectors.SimianGrid | |||
359 | return new List<GridRegion>(0); | 359 | return new List<GridRegion>(0); |
360 | } | 360 | } |
361 | 361 | ||
362 | public List<GridRegion> GetHyperlinks(UUID scopeID) | ||
363 | { | ||
364 | // Hypergrid/linked regions are not supported | ||
365 | return new List<GridRegion>(); | ||
366 | } | ||
367 | |||
362 | public int GetRegionFlags(UUID scopeID, UUID regionID) | 368 | public int GetRegionFlags(UUID scopeID, UUID regionID) |
363 | { | 369 | { |
364 | const int REGION_ONLINE = 4; | 370 | const int REGION_ONLINE = 4; |
diff --git a/OpenSim/Services/GridService/GridService.cs b/OpenSim/Services/GridService/GridService.cs index ebaed42..ce6f64b 100644 --- a/OpenSim/Services/GridService/GridService.cs +++ b/OpenSim/Services/GridService/GridService.cs | |||
@@ -426,6 +426,22 @@ namespace OpenSim.Services.GridService | |||
426 | return ret; | 426 | return ret; |
427 | } | 427 | } |
428 | 428 | ||
429 | public List<GridRegion> GetHyperlinks(UUID scopeID) | ||
430 | { | ||
431 | List<GridRegion> ret = new List<GridRegion>(); | ||
432 | |||
433 | List<RegionData> regions = m_Database.GetHyperlinks(scopeID); | ||
434 | |||
435 | foreach (RegionData r in regions) | ||
436 | { | ||
437 | if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Data.RegionFlags.RegionOnline) != 0) | ||
438 | ret.Add(RegionData2RegionInfo(r)); | ||
439 | } | ||
440 | |||
441 | m_log.DebugFormat("[GRID SERVICE]: Hyperlinks returned {0} regions", ret.Count); | ||
442 | return ret; | ||
443 | } | ||
444 | |||
429 | public int GetRegionFlags(UUID scopeID, UUID regionID) | 445 | public int GetRegionFlags(UUID scopeID, UUID regionID) |
430 | { | 446 | { |
431 | RegionData region = m_Database.Get(regionID, scopeID); | 447 | RegionData region = m_Database.Get(regionID, scopeID); |
diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 1f53007..b190f93 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs | |||
@@ -62,6 +62,7 @@ namespace OpenSim.Services.GridService | |||
62 | protected GatekeeperServiceConnector m_GatekeeperConnector; | 62 | protected GatekeeperServiceConnector m_GatekeeperConnector; |
63 | 63 | ||
64 | protected UUID m_ScopeID = UUID.Zero; | 64 | protected UUID m_ScopeID = UUID.Zero; |
65 | protected bool m_Check4096 = true; | ||
65 | 66 | ||
66 | // Hyperlink regions are hyperlinks on the map | 67 | // Hyperlink regions are hyperlinks on the map |
67 | public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>(); | 68 | public readonly Dictionary<UUID, GridRegion> m_HyperlinkRegions = new Dictionary<UUID, GridRegion>(); |
@@ -116,6 +117,8 @@ namespace OpenSim.Services.GridService | |||
116 | if (scope != string.Empty) | 117 | if (scope != string.Empty) |
117 | UUID.TryParse(scope, out m_ScopeID); | 118 | UUID.TryParse(scope, out m_ScopeID); |
118 | 119 | ||
120 | m_Check4096 = gridConfig.GetBoolean("Check4096", true); | ||
121 | |||
119 | m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService); | 122 | m_GatekeeperConnector = new GatekeeperServiceConnector(m_AssetService); |
120 | 123 | ||
121 | m_log.DebugFormat("[HYPERGRID LINKER]: Loaded all services..."); | 124 | m_log.DebugFormat("[HYPERGRID LINKER]: Loaded all services..."); |
@@ -277,7 +280,7 @@ namespace OpenSim.Services.GridService | |||
277 | } | 280 | } |
278 | 281 | ||
279 | uint x, y; | 282 | uint x, y; |
280 | if (!Check4096(handle, out x, out y)) | 283 | if (m_Check4096 && !Check4096(handle, out x, out y)) |
281 | { | 284 | { |
282 | RemoveHyperlinkRegion(regInfo.RegionID); | 285 | RemoveHyperlinkRegion(regInfo.RegionID); |
283 | reason = "Region is too far (" + x + ", " + y + ")"; | 286 | reason = "Region is too far (" + x + ", " + y + ")"; |
@@ -332,18 +335,50 @@ namespace OpenSim.Services.GridService | |||
332 | /// <returns></returns> | 335 | /// <returns></returns> |
333 | public bool Check4096(ulong realHandle, out uint x, out uint y) | 336 | public bool Check4096(ulong realHandle, out uint x, out uint y) |
334 | { | 337 | { |
335 | GridRegion defRegion = DefaultRegion; | ||
336 | |||
337 | uint ux = 0, uy = 0; | 338 | uint ux = 0, uy = 0; |
338 | Utils.LongToUInts(realHandle, out ux, out uy); | 339 | Utils.LongToUInts(realHandle, out ux, out uy); |
339 | x = ux / Constants.RegionSize; | 340 | x = ux / Constants.RegionSize; |
340 | y = uy / Constants.RegionSize; | 341 | y = uy / Constants.RegionSize; |
341 | 342 | ||
342 | if ((Math.Abs((int)defRegion.RegionLocX - ux) >= 4096 * Constants.RegionSize) || | 343 | const uint limit = (4096 - 1) * Constants.RegionSize; |
343 | (Math.Abs((int)defRegion.RegionLocY - uy) >= 4096 * Constants.RegionSize)) | 344 | uint xmin = ux - limit; |
345 | uint xmax = ux + limit; | ||
346 | uint ymin = uy - limit; | ||
347 | uint ymax = uy + limit; | ||
348 | // World map boundary checks | ||
349 | if (xmin < 0 || xmin > ux) | ||
350 | xmin = 0; | ||
351 | if (xmax > int.MaxValue || xmax < ux) | ||
352 | xmax = int.MaxValue; | ||
353 | if (ymin < 0 || ymin > uy) | ||
354 | ymin = 0; | ||
355 | if (ymax > int.MaxValue || ymax < uy) | ||
356 | ymax = int.MaxValue; | ||
357 | |||
358 | // Check for any regions that are within the possible teleport range to the linked region | ||
359 | List<GridRegion> regions = m_GridService.GetRegionRange(m_ScopeID, (int)xmin, (int)xmax, (int)ymin, (int)ymax); | ||
360 | if (regions.Count == 0) | ||
344 | { | 361 | { |
345 | return false; | 362 | return false; |
346 | } | 363 | } |
364 | else | ||
365 | { | ||
366 | // Check for regions which are not linked regions | ||
367 | List<GridRegion> hyperlinks = m_GridService.GetHyperlinks(m_ScopeID); | ||
368 | // would like to use .Except, but doesn't seem to exist | ||
369 | //IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks); | ||
370 | List<GridRegion> availableRegions = regions.FindAll(delegate(GridRegion region) | ||
371 | { | ||
372 | // Ewww! n^2 | ||
373 | if (hyperlinks.Find(delegate(GridRegion r) { return r.RegionID == region.RegionID; }) == null) // not hyperlink. good. | ||
374 | return true; | ||
375 | |||
376 | return false; | ||
377 | }); | ||
378 | if (availableRegions.Count == 0) | ||
379 | return false; | ||
380 | } | ||
381 | |||
347 | return true; | 382 | return true; |
348 | } | 383 | } |
349 | 384 | ||
diff --git a/OpenSim/Services/Interfaces/IGridService.cs b/OpenSim/Services/Interfaces/IGridService.cs index 94cee57..ac234dc 100644 --- a/OpenSim/Services/Interfaces/IGridService.cs +++ b/OpenSim/Services/Interfaces/IGridService.cs | |||
@@ -92,6 +92,7 @@ namespace OpenSim.Services.Interfaces | |||
92 | 92 | ||
93 | List<GridRegion> GetDefaultRegions(UUID scopeID); | 93 | List<GridRegion> GetDefaultRegions(UUID scopeID); |
94 | List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y); | 94 | List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y); |
95 | List<GridRegion> GetHyperlinks(UUID scopeID); | ||
95 | 96 | ||
96 | int GetRegionFlags(UUID scopeID, UUID regionID); | 97 | int GetRegionFlags(UUID scopeID, UUID regionID); |
97 | } | 98 | } |
diff --git a/OpenSim/Services/Interfaces/ILandService.cs b/OpenSim/Services/Interfaces/ILandService.cs index e2f1d1d..7a12aff 100644 --- a/OpenSim/Services/Interfaces/ILandService.cs +++ b/OpenSim/Services/Interfaces/ILandService.cs | |||
@@ -33,6 +33,6 @@ namespace OpenSim.Services.Interfaces | |||
33 | { | 33 | { |
34 | public interface ILandService | 34 | public interface ILandService |
35 | { | 35 | { |
36 | LandData GetLandData(ulong regionHandle, uint x, uint y); | 36 | LandData GetLandData(ulong regionHandle, uint x, uint y, out byte regionAccess); |
37 | } | 37 | } |
38 | } | 38 | } |