diff options
10 files changed, 41 insertions, 14 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 8a1bf20..4be19f0 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -762,7 +762,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
762 | string version; | 762 | string version; |
763 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); | 763 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); |
764 | if (!Scene.SimulationService.QueryAccess( | 764 | if (!Scene.SimulationService.QueryAccess( |
765 | finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, out version, out reason)) | 765 | finalDestination, sp.ControllingClient.AgentId, homeURI, true, position, myversion, sp.Scene.GetFormatsOffered(), out version, out reason)) |
766 | { | 766 | { |
767 | sp.ControllingClient.SendTeleportFailed(reason); | 767 | sp.ControllingClient.SendTeleportFailed(reason); |
768 | 768 | ||
@@ -1517,7 +1517,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1517 | // Check to see if we have access to the target region. | 1517 | // Check to see if we have access to the target region. |
1518 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); | 1518 | string myversion = string.Format("{0}/{1}", OutgoingTransferVersionName, MaxOutgoingTransferVersion); |
1519 | if (neighbourRegion != null | 1519 | if (neighbourRegion != null |
1520 | && !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, out version, out failureReason)) | 1520 | && !scene.SimulationService.QueryAccess(neighbourRegion, agentID, homeURI, false, newpos, myversion, scene.GetFormatsOffered(), out version, out failureReason)) |
1521 | { | 1521 | { |
1522 | // remember banned | 1522 | // remember banned |
1523 | m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); | 1523 | m_bannedRegionCache.Add(neighbourRegion.RegionHandle, agentID); |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs index 8fd5df8..adf3a91 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs | |||
@@ -269,7 +269,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
269 | return true; | 269 | return true; |
270 | } | 270 | } |
271 | 271 | ||
272 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, out string version, out string reason) | 272 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string theirversion, List<UUID> features, out string version, out string reason) |
273 | { | 273 | { |
274 | reason = "Communications failure"; | 274 | reason = "Communications failure"; |
275 | version = ServiceVersion; | 275 | version = ServiceVersion; |
@@ -298,7 +298,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
298 | 298 | ||
299 | } | 299 | } |
300 | 300 | ||
301 | return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, out reason); | 301 | return m_scenes[destination.RegionID].QueryAccess(agentID, agentHomeURI, viaTeleport, position, features, out reason); |
302 | } | 302 | } |
303 | 303 | ||
304 | //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess"); | 304 | //m_log.Debug("[LOCAL COMMS]: region not found for QueryAccess"); |
@@ -394,4 +394,4 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
394 | 394 | ||
395 | #endregion | 395 | #endregion |
396 | } | 396 | } |
397 | } \ No newline at end of file | 397 | } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs index 3a32d77..dca3dd7 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | ||
30 | using System.IO; | 31 | using System.IO; |
31 | using System.Net; | 32 | using System.Net; |
32 | using System.Reflection; | 33 | using System.Reflection; |
@@ -205,7 +206,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
205 | return m_remoteConnector.UpdateAgent(destination, cAgentData); | 206 | return m_remoteConnector.UpdateAgent(destination, cAgentData); |
206 | } | 207 | } |
207 | 208 | ||
208 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, out string version, out string reason) | 209 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason) |
209 | { | 210 | { |
210 | reason = "Communications failure"; | 211 | reason = "Communications failure"; |
211 | version = "Unknown"; | 212 | version = "Unknown"; |
@@ -214,12 +215,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation | |||
214 | return false; | 215 | return false; |
215 | 216 | ||
216 | // Try local first | 217 | // Try local first |
217 | if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason)) | 218 | if (m_localBackend.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason)) |
218 | return true; | 219 | return true; |
219 | 220 | ||
220 | // else do the remote thing | 221 | // else do the remote thing |
221 | if (!m_localBackend.IsLocalRegion(destination.RegionID)) | 222 | if (!m_localBackend.IsLocalRegion(destination.RegionID)) |
222 | return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, out version, out reason); | 223 | return m_remoteConnector.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, sversion, features, out version, out reason); |
223 | 224 | ||
224 | return false; | 225 | return false; |
225 | } | 226 | } |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 24c95d1..fe99ae5 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -5810,7 +5810,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
5810 | /// <param name='position'></param> | 5810 | /// <param name='position'></param> |
5811 | /// <param name='reason'></param> | 5811 | /// <param name='reason'></param> |
5812 | /// <returns></returns> | 5812 | /// <returns></returns> |
5813 | public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, out string reason) | 5813 | public bool QueryAccess(UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, List<UUID> features, out string reason) |
5814 | { | 5814 | { |
5815 | reason = string.Empty; | 5815 | reason = string.Empty; |
5816 | 5816 | ||
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index a928db4..7ff3d40 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs | |||
@@ -374,6 +374,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
374 | return m_moduleCommanders; | 374 | return m_moduleCommanders; |
375 | } | 375 | } |
376 | 376 | ||
377 | public List<UUID> GetFormatsOffered() | ||
378 | { | ||
379 | List<UUID> ret = new List<UUID>(FormatsOffered); | ||
380 | |||
381 | return ret; | ||
382 | } | ||
383 | |||
377 | protected void CheckAndAddAgentDataFormats(object mod) | 384 | protected void CheckAndAddAgentDataFormats(object mod) |
378 | { | 385 | { |
379 | if (!(mod is IAgentStatefulModule)) | 386 | if (!(mod is IAgentStatefulModule)) |
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs index 81c9df2..68cec4b 100644 --- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | ||
30 | using System.Collections.Specialized; | 31 | using System.Collections.Specialized; |
31 | using System.IO; | 32 | using System.IO; |
32 | using System.IO.Compression; | 33 | using System.IO.Compression; |
@@ -148,12 +149,22 @@ namespace OpenSim.Server.Handlers.Simulation | |||
148 | if (args.ContainsKey("my_version")) | 149 | if (args.ContainsKey("my_version")) |
149 | theirVersion = args["my_version"].AsString(); | 150 | theirVersion = args["my_version"].AsString(); |
150 | 151 | ||
152 | List<UUID> features = new List<UUID>(); | ||
153 | |||
154 | if (args.ContainsKey("features")) | ||
155 | { | ||
156 | OSDArray array = (OSDArray)args["features"]; | ||
157 | |||
158 | foreach (OSD o in array) | ||
159 | features.Add(new UUID(o.AsString())); | ||
160 | } | ||
161 | |||
151 | GridRegion destination = new GridRegion(); | 162 | GridRegion destination = new GridRegion(); |
152 | destination.RegionID = regionID; | 163 | destination.RegionID = regionID; |
153 | 164 | ||
154 | string reason; | 165 | string reason; |
155 | string version; | 166 | string version; |
156 | bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, theirVersion, out version, out reason); | 167 | bool result = m_SimulationService.QueryAccess(destination, agentID, agentHomeURI, viaTeleport, position, theirVersion, features, out version, out reason); |
157 | 168 | ||
158 | responsedata["int_response_code"] = HttpStatusCode.OK; | 169 | responsedata["int_response_code"] = HttpStatusCode.OK; |
159 | 170 | ||
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index b6fde72..a6f90b4 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -282,7 +282,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
282 | } | 282 | } |
283 | 283 | ||
284 | 284 | ||
285 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string myversion, out string version, out string reason) | 285 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string myversion, List<UUID> featuresAvailable, out string version, out string reason) |
286 | { | 286 | { |
287 | reason = "Failed to contact destination"; | 287 | reason = "Failed to contact destination"; |
288 | version = "Unknown"; | 288 | version = "Unknown"; |
@@ -299,6 +299,13 @@ namespace OpenSim.Services.Connectors.Simulation | |||
299 | request.Add("viaTeleport", OSD.FromBoolean(viaTeleport)); | 299 | request.Add("viaTeleport", OSD.FromBoolean(viaTeleport)); |
300 | request.Add("position", OSD.FromString(position.ToString())); | 300 | request.Add("position", OSD.FromString(position.ToString())); |
301 | request.Add("my_version", OSD.FromString(myversion)); | 301 | request.Add("my_version", OSD.FromString(myversion)); |
302 | |||
303 | OSDArray features = new OSDArray(); | ||
304 | foreach (UUID feature in featuresAvailable) | ||
305 | features.Add(OSD.FromString(feature.ToString())); | ||
306 | |||
307 | request.Add("features", features); | ||
308 | |||
302 | if (agentHomeURI != null) | 309 | if (agentHomeURI != null) |
303 | request.Add("agent_home_uri", OSD.FromString(agentHomeURI)); | 310 | request.Add("agent_home_uri", OSD.FromString(agentHomeURI)); |
304 | 311 | ||
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index e0038b4..44b26d5 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs | |||
@@ -453,7 +453,7 @@ namespace OpenSim.Services.HypergridService | |||
453 | 453 | ||
454 | if (!m_SimulationService.QueryAccess( | 454 | if (!m_SimulationService.QueryAccess( |
455 | destination, aCircuit.AgentID, aCircuit.ServiceURLs["HomeURI"].ToString(), | 455 | destination, aCircuit.AgentID, aCircuit.ServiceURLs["HomeURI"].ToString(), |
456 | true, aCircuit.startpos, "SIMULATION/0.3", out version, out reason)) | 456 | true, aCircuit.startpos, "SIMULATION/0.3", new List<UUID>(), out version, out reason)) |
457 | return false; | 457 | return false; |
458 | 458 | ||
459 | return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason); | 459 | return m_SimulationService.CreateAgent(source, destination, aCircuit, (uint)loginFlag, out reason); |
diff --git a/OpenSim/Services/Interfaces/ISimulationService.cs b/OpenSim/Services/Interfaces/ISimulationService.cs index ef014f9..42c414d 100644 --- a/OpenSim/Services/Interfaces/ISimulationService.cs +++ b/OpenSim/Services/Interfaces/ISimulationService.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using OpenSim.Framework; | 30 | using OpenSim.Framework; |
30 | using OpenMetaverse; | 31 | using OpenMetaverse; |
31 | 32 | ||
@@ -91,7 +92,7 @@ namespace OpenSim.Services.Interfaces | |||
91 | /// <param name="version">Version that the target simulator is running</param> | 92 | /// <param name="version">Version that the target simulator is running</param> |
92 | /// <param name="reason">[out] Optional error message</param> | 93 | /// <param name="reason">[out] Optional error message</param> |
93 | /// <returns>True: ok; False: not allowed</returns> | 94 | /// <returns>True: ok; False: not allowed</returns> |
94 | bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, out string version, out string reason); | 95 | bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, string sversion, List<UUID> features, out string version, out string reason); |
95 | 96 | ||
96 | /// <summary> | 97 | /// <summary> |
97 | /// Message from receiving region to departing region, telling it got contacted by the client. | 98 | /// Message from receiving region to departing region, telling it got contacted by the client. |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 65030a4..d67bc4d 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -983,7 +983,7 @@ namespace OpenSim.Services.LLLoginService | |||
983 | 983 | ||
984 | if ( | 984 | if ( |
985 | !simConnector.QueryAccess( | 985 | !simConnector.QueryAccess( |
986 | region, aCircuit.AgentID, null, true, aCircuit.startpos, "SIMULATION/0.3", out version, out reason)) | 986 | region, aCircuit.AgentID, null, true, aCircuit.startpos, "SIMULATION/0.3", new List<UUID>(), out version, out reason)) |
987 | return false; | 987 | return false; |
988 | 988 | ||
989 | return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason); | 989 | return simConnector.CreateAgent(null, region, aCircuit, (uint)flags, out reason); |