diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | 165 | ||||
-rw-r--r-- | OpenSim/Services/EstateService/EstateDataService.cs (renamed from OpenSim/Services/Connectors/Simulation/EstateDataService.cs) | 5 | ||||
-rw-r--r-- | OpenSim/Services/SimulationService/SimulationDataService.cs (renamed from OpenSim/Services/Connectors/Simulation/SimulationDataService.cs) | 13 |
3 files changed, 113 insertions, 70 deletions
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index 57f2ffa..cea870b 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -79,11 +79,37 @@ namespace OpenSim.Services.Connectors.Simulation | |||
79 | return "agent/"; | 79 | return "agent/"; |
80 | } | 80 | } |
81 | 81 | ||
82 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) | 82 | protected virtual void PackData(OSDMap args, GridRegion source, AgentCircuitData aCircuit, GridRegion destination, uint flags) |
83 | { | 83 | { |
84 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: CreateAgent start"); | 84 | if (source != null) |
85 | 85 | { | |
86 | args["source_x"] = OSD.FromString(source.RegionLocX.ToString()); | ||
87 | args["source_y"] = OSD.FromString(source.RegionLocY.ToString()); | ||
88 | args["source_name"] = OSD.FromString(source.RegionName); | ||
89 | args["source_uuid"] = OSD.FromString(source.RegionID.ToString()); | ||
90 | if (!String.IsNullOrEmpty(source.RawServerURI)) | ||
91 | args["source_server_uri"] = OSD.FromString(source.RawServerURI); | ||
92 | } | ||
93 | |||
94 | args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString()); | ||
95 | args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString()); | ||
96 | args["destination_name"] = OSD.FromString(destination.RegionName); | ||
97 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); | ||
98 | args["teleport_flags"] = OSD.FromString(flags.ToString()); | ||
99 | } | ||
100 | |||
101 | public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) | ||
102 | { | ||
103 | string tmp = String.Empty; | ||
104 | return CreateAgent(source, destination, aCircuit, flags, out tmp, out reason); | ||
105 | } | ||
106 | |||
107 | public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason) | ||
108 | { | ||
109 | m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: Creating agent at {0}", destination.ServerURI); | ||
86 | reason = String.Empty; | 110 | reason = String.Empty; |
111 | myipaddress = String.Empty; | ||
112 | |||
87 | if (destination == null) | 113 | if (destination == null) |
88 | { | 114 | { |
89 | m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Given destination is null"); | 115 | m_log.Debug("[REMOTE SIMULATION CONNECTOR]: Given destination is null"); |
@@ -95,12 +121,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
95 | try | 121 | try |
96 | { | 122 | { |
97 | OSDMap args = aCircuit.PackAgentCircuitData(); | 123 | OSDMap args = aCircuit.PackAgentCircuitData(); |
98 | 124 | PackData(args, source, aCircuit, destination, flags); | |
99 | args["destination_x"] = OSD.FromString(destination.RegionLocX.ToString()); | ||
100 | args["destination_y"] = OSD.FromString(destination.RegionLocY.ToString()); | ||
101 | args["destination_name"] = OSD.FromString(destination.RegionName); | ||
102 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); | ||
103 | args["teleport_flags"] = OSD.FromString(flags.ToString()); | ||
104 | 125 | ||
105 | OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000); | 126 | OSDMap result = WebUtil.PostToServiceCompressed(uri, args, 30000); |
106 | bool success = result["success"].AsBoolean(); | 127 | bool success = result["success"].AsBoolean(); |
@@ -110,11 +131,12 @@ namespace OpenSim.Services.Connectors.Simulation | |||
110 | 131 | ||
111 | reason = data["reason"].AsString(); | 132 | reason = data["reason"].AsString(); |
112 | success = data["success"].AsBoolean(); | 133 | success = data["success"].AsBoolean(); |
134 | myipaddress = data["your_ip"].AsString(); | ||
113 | return success; | 135 | return success; |
114 | } | 136 | } |
115 | 137 | ||
116 | // Try the old version, uncompressed | 138 | // Try the old version, uncompressed |
117 | result = WebUtil.PostToService(uri, args, 30000); | 139 | result = WebUtil.PostToService(uri, args, 30000, false); |
118 | 140 | ||
119 | if (result["Success"].AsBoolean()) | 141 | if (result["Success"].AsBoolean()) |
120 | { | 142 | { |
@@ -124,6 +146,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
124 | 146 | ||
125 | reason = data["reason"].AsString(); | 147 | reason = data["reason"].AsString(); |
126 | success = data["success"].AsBoolean(); | 148 | success = data["success"].AsBoolean(); |
149 | myipaddress = data["your_ip"].AsString(); | ||
127 | m_log.WarnFormat( | 150 | m_log.WarnFormat( |
128 | "[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName); | 151 | "[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName); |
129 | return success; | 152 | return success; |
@@ -228,7 +251,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
228 | /// </summary> | 251 | /// </summary> |
229 | private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, int timeout) | 252 | private bool UpdateAgent(GridRegion destination, IAgentData cAgentData, int timeout) |
230 | { | 253 | { |
231 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: UpdateAgent start"); | 254 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: UpdateAgent in {0}", destination.ServerURI); |
232 | 255 | ||
233 | // Eventually, we want to use a caps url instead of the agentID | 256 | // Eventually, we want to use a caps url instead of the agentID |
234 | string uri = destination.ServerURI + AgentPath() + cAgentData.AgentID + "/"; | 257 | string uri = destination.ServerURI + AgentPath() + cAgentData.AgentID + "/"; |
@@ -258,48 +281,10 @@ namespace OpenSim.Services.Connectors.Simulation | |||
258 | return false; | 281 | return false; |
259 | } | 282 | } |
260 | 283 | ||
261 | /// <summary> | ||
262 | /// Not sure what sequence causes this function to be invoked. The only calling | ||
263 | /// path is through the GET method | ||
264 | /// </summary> | ||
265 | public bool RetrieveAgent(GridRegion destination, UUID id, out IAgentData agent) | ||
266 | { | ||
267 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: RetrieveAgent start"); | ||
268 | |||
269 | agent = null; | ||
270 | |||
271 | // Eventually, we want to use a caps url instead of the agentID | ||
272 | string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/"; | ||
273 | |||
274 | try | ||
275 | { | ||
276 | OSDMap result = WebUtil.GetFromService(uri, 10000); | ||
277 | if (result["Success"].AsBoolean()) | ||
278 | { | ||
279 | // OSDMap args = Util.GetOSDMap(result["_RawResult"].AsString()); | ||
280 | OSDMap args = (OSDMap)result["_Result"]; | ||
281 | if (args != null) | ||
282 | { | ||
283 | agent = new CompleteAgentData(); | ||
284 | agent.Unpack(args, null); | ||
285 | return true; | ||
286 | } | ||
287 | } | ||
288 | } | ||
289 | catch (Exception e) | ||
290 | { | ||
291 | m_log.Warn("[REMOTE SIMULATION CONNECTOR]: UpdateAgent failed with exception: " + e.ToString()); | ||
292 | } | ||
293 | |||
294 | return false; | ||
295 | } | ||
296 | 284 | ||
297 | /// <summary> | 285 | public bool QueryAccess(GridRegion destination, UUID agentID, string agentHomeURI, bool viaTeleport, Vector3 position, List<UUID> featuresAvailable, EntityTransferContext ctx, out string reason) |
298 | /// </summary> | ||
299 | public bool QueryAccess(GridRegion destination, UUID id, Vector3 position, out string version, out string reason) | ||
300 | { | 286 | { |
301 | reason = "Failed to contact destination"; | 287 | reason = "Failed to contact destination"; |
302 | version = "Unknown"; | ||
303 | 288 | ||
304 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: QueryAccess start, position={0}", position); | 289 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: QueryAccess start, position={0}", position); |
305 | 290 | ||
@@ -307,14 +292,32 @@ namespace OpenSim.Services.Connectors.Simulation | |||
307 | if (ext == null) return false; | 292 | if (ext == null) return false; |
308 | 293 | ||
309 | // Eventually, we want to use a caps url instead of the agentID | 294 | // Eventually, we want to use a caps url instead of the agentID |
310 | string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/"; | 295 | string uri = destination.ServerURI + AgentPath() + agentID + "/" + destination.RegionID.ToString() + "/"; |
311 | 296 | ||
312 | OSDMap request = new OSDMap(); | 297 | OSDMap request = new OSDMap(); |
298 | request.Add("viaTeleport", OSD.FromBoolean(viaTeleport)); | ||
313 | request.Add("position", OSD.FromString(position.ToString())); | 299 | request.Add("position", OSD.FromString(position.ToString())); |
300 | // To those who still understad this field, we're telling them | ||
301 | // the lowest version just to be safe | ||
302 | request.Add("my_version", OSD.FromString(String.Format("SIMULATION/{0}", VersionInfo.SimulationServiceVersionSupportedMin))); | ||
303 | // New simulation service negotiation | ||
304 | request.Add("simulation_service_supported_min", OSD.FromReal(VersionInfo.SimulationServiceVersionSupportedMin)); | ||
305 | request.Add("simulation_service_supported_max", OSD.FromReal(VersionInfo.SimulationServiceVersionSupportedMax)); | ||
306 | request.Add("simulation_service_accepted_min", OSD.FromReal(VersionInfo.SimulationServiceVersionAcceptedMin)); | ||
307 | request.Add("simulation_service_accepted_max", OSD.FromReal(VersionInfo.SimulationServiceVersionAcceptedMax)); | ||
308 | |||
309 | OSDArray features = new OSDArray(); | ||
310 | foreach (UUID feature in featuresAvailable) | ||
311 | features.Add(OSD.FromString(feature.ToString())); | ||
312 | |||
313 | request.Add("features", features); | ||
314 | |||
315 | if (agentHomeURI != null) | ||
316 | request.Add("agent_home_uri", OSD.FromString(agentHomeURI)); | ||
314 | 317 | ||
315 | try | 318 | try |
316 | { | 319 | { |
317 | OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false); | 320 | OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false, false); |
318 | bool success = result["success"].AsBoolean(); | 321 | bool success = result["success"].AsBoolean(); |
319 | if (result.ContainsKey("_Result")) | 322 | if (result.ContainsKey("_Result")) |
320 | { | 323 | { |
@@ -325,15 +328,32 @@ namespace OpenSim.Services.Connectors.Simulation | |||
325 | success = data["success"]; | 328 | success = data["success"]; |
326 | 329 | ||
327 | reason = data["reason"].AsString(); | 330 | reason = data["reason"].AsString(); |
328 | if (data["version"] != null && data["version"].AsString() != string.Empty) | 331 | // We will need to plumb this and start sing the outbound version as well |
329 | version = data["version"].AsString(); | 332 | // TODO: lay the pipe for version plumbing |
333 | if (data.ContainsKey("negotiated_inbound_version") && data["negotiated_inbound_version"] != null) | ||
334 | { | ||
335 | ctx.InboundVersion = (float)data["negotiated_inbound_version"].AsReal(); | ||
336 | ctx.OutboundVersion = (float)data["negotiated_outbound_version"].AsReal(); | ||
337 | } | ||
338 | else if (data["version"] != null && data["version"].AsString() != string.Empty) | ||
339 | { | ||
340 | string versionString = data["version"].AsString(); | ||
341 | String[] parts = versionString.Split(new char[] {'/'}); | ||
342 | if (parts.Length > 1) | ||
343 | { | ||
344 | ctx.InboundVersion = float.Parse(parts[1]); | ||
345 | ctx.OutboundVersion = float.Parse(parts[1]); | ||
346 | } | ||
347 | } | ||
348 | if (data.ContainsKey("variable_wearables_count_supported")) | ||
349 | ctx.VariableWearablesSupported = true; | ||
330 | 350 | ||
331 | m_log.DebugFormat( | 351 | m_log.DebugFormat( |
332 | "[REMOTE SIMULATION CONNECTOR]: QueryAccess to {0} returned {1}, reason {2}, version {3} ({4})", | 352 | "[REMOTE SIMULATION CONNECTOR]: QueryAccess to {0} returned {1}, reason {2}, version {3}/{4}", |
333 | uri, success, reason, version, data["version"].AsString()); | 353 | uri, success, reason, ctx.InboundVersion, ctx.OutboundVersion); |
334 | } | 354 | } |
335 | 355 | ||
336 | if (!success) | 356 | if (!success || ctx.InboundVersion == 0f || ctx.OutboundVersion == 0f) |
337 | { | 357 | { |
338 | // If we don't check this then OpenSimulator 0.7.3.1 and some period before will never see the | 358 | // If we don't check this then OpenSimulator 0.7.3.1 and some period before will never see the |
339 | // actual failure message | 359 | // actual failure message |
@@ -359,6 +379,17 @@ namespace OpenSim.Services.Connectors.Simulation | |||
359 | return false; | 379 | return false; |
360 | } | 380 | } |
361 | 381 | ||
382 | |||
383 | featuresAvailable.Clear(); | ||
384 | |||
385 | if (result.ContainsKey("features")) | ||
386 | { | ||
387 | OSDArray array = (OSDArray)result["features"]; | ||
388 | |||
389 | foreach (OSD o in array) | ||
390 | featuresAvailable.Add(new UUID(o.AsString())); | ||
391 | } | ||
392 | |||
362 | return success; | 393 | return success; |
363 | } | 394 | } |
364 | catch (Exception e) | 395 | catch (Exception e) |
@@ -377,7 +408,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
377 | 408 | ||
378 | try | 409 | try |
379 | { | 410 | { |
380 | WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false); | 411 | WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false, false); |
381 | } | 412 | } |
382 | catch (Exception e) | 413 | catch (Exception e) |
383 | { | 414 | { |
@@ -389,15 +420,14 @@ namespace OpenSim.Services.Connectors.Simulation | |||
389 | 420 | ||
390 | /// <summary> | 421 | /// <summary> |
391 | /// </summary> | 422 | /// </summary> |
392 | public bool CloseAgent(GridRegion destination, UUID id) | 423 | public bool CloseAgent(GridRegion destination, UUID id, string auth_code) |
393 | { | 424 | { |
394 | // m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: CloseAgent start"); | 425 | string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/?auth=" + auth_code; |
395 | 426 | m_log.DebugFormat("[REMOTE SIMULATION CONNECTOR]: CloseAgent {0}", uri); | |
396 | string uri = destination.ServerURI + AgentPath() + id + "/" + destination.RegionID.ToString() + "/"; | ||
397 | 427 | ||
398 | try | 428 | try |
399 | { | 429 | { |
400 | WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false); | 430 | WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false, false); |
401 | } | 431 | } |
402 | catch (Exception e) | 432 | catch (Exception e) |
403 | { | 433 | { |
@@ -444,11 +474,18 @@ namespace OpenSim.Services.Connectors.Simulation | |||
444 | args["destination_name"] = OSD.FromString(destination.RegionName); | 474 | args["destination_name"] = OSD.FromString(destination.RegionName); |
445 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); | 475 | args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString()); |
446 | 476 | ||
447 | WebUtil.PostToService(uri, args, 40000); | 477 | OSDMap result = WebUtil.PostToService(uri, args, 40000, false); |
478 | |||
479 | if (result == null) | ||
480 | return false; | ||
481 | bool success = result["success"].AsBoolean(); | ||
482 | if (!success) | ||
483 | return false; | ||
448 | } | 484 | } |
449 | catch (Exception e) | 485 | catch (Exception e) |
450 | { | 486 | { |
451 | m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR] CreateObject failed with exception; {0}",e.ToString()); | 487 | m_log.WarnFormat("[REMOTE SIMULATION CONNECTOR] CreateObject failed with exception; {0}",e.ToString()); |
488 | return false; | ||
452 | } | 489 | } |
453 | 490 | ||
454 | return true; | 491 | return true; |
diff --git a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs b/OpenSim/Services/EstateService/EstateDataService.cs index cdcdecf..f6a8654 100644 --- a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs +++ b/OpenSim/Services/EstateService/EstateDataService.cs | |||
@@ -29,17 +29,14 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using OpenMetaverse; | 30 | using OpenMetaverse; |
31 | using log4net; | 31 | using log4net; |
32 | using Mono.Addins; | ||
33 | using Nini.Config; | 32 | using Nini.Config; |
34 | using System.Reflection; | 33 | using System.Reflection; |
35 | using OpenSim.Services.Base; | 34 | using OpenSim.Services.Base; |
36 | using OpenSim.Services.Interfaces; | 35 | using OpenSim.Services.Interfaces; |
37 | using OpenSim.Data; | 36 | using OpenSim.Data; |
38 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
39 | using OpenSim.Region.Framework.Interfaces; | ||
40 | using OpenSim.Region.Framework.Scenes; | ||
41 | 38 | ||
42 | namespace OpenSim.Services.Connectors | 39 | namespace OpenSim.Services.EstateService |
43 | { | 40 | { |
44 | public class EstateDataService : ServiceBase, IEstateDataService | 41 | public class EstateDataService : ServiceBase, IEstateDataService |
45 | { | 42 | { |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs b/OpenSim/Services/SimulationService/SimulationDataService.cs index 504fcaf..d9684c4 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs +++ b/OpenSim/Services/SimulationService/SimulationDataService.cs | |||
@@ -29,7 +29,6 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using OpenMetaverse; | 30 | using OpenMetaverse; |
31 | using log4net; | 31 | using log4net; |
32 | using Mono.Addins; | ||
33 | using Nini.Config; | 32 | using Nini.Config; |
34 | using System.Reflection; | 33 | using System.Reflection; |
35 | using OpenSim.Services.Base; | 34 | using OpenSim.Services.Base; |
@@ -39,7 +38,7 @@ using OpenSim.Framework; | |||
39 | using OpenSim.Region.Framework.Interfaces; | 38 | using OpenSim.Region.Framework.Interfaces; |
40 | using OpenSim.Region.Framework.Scenes; | 39 | using OpenSim.Region.Framework.Scenes; |
41 | 40 | ||
42 | namespace OpenSim.Services.Connectors | 41 | namespace OpenSim.Services.SimulationService |
43 | { | 42 | { |
44 | public class SimulationDataService : ServiceBase, ISimulationDataService | 43 | public class SimulationDataService : ServiceBase, ISimulationDataService |
45 | { | 44 | { |
@@ -100,6 +99,11 @@ namespace OpenSim.Services.Connectors | |||
100 | return m_database.LoadObjects(regionUUID); | 99 | return m_database.LoadObjects(regionUUID); |
101 | } | 100 | } |
102 | 101 | ||
102 | public void StoreTerrain(TerrainData terrain, UUID regionID) | ||
103 | { | ||
104 | m_database.StoreTerrain(terrain, regionID); | ||
105 | } | ||
106 | |||
103 | public void StoreTerrain(double[,] terrain, UUID regionID) | 107 | public void StoreTerrain(double[,] terrain, UUID regionID) |
104 | { | 108 | { |
105 | m_database.StoreTerrain(terrain, regionID); | 109 | m_database.StoreTerrain(terrain, regionID); |
@@ -110,6 +114,11 @@ namespace OpenSim.Services.Connectors | |||
110 | return m_database.LoadTerrain(regionID); | 114 | return m_database.LoadTerrain(regionID); |
111 | } | 115 | } |
112 | 116 | ||
117 | public TerrainData LoadTerrain(UUID regionID, int pSizeX, int pSizeY, int pSizeZ) | ||
118 | { | ||
119 | return m_database.LoadTerrain(regionID, pSizeX, pSizeY, pSizeZ); | ||
120 | } | ||
121 | |||
113 | public void StoreLandObject(ILandObject Parcel) | 122 | public void StoreLandObject(ILandObject Parcel) |
114 | { | 123 | { |
115 | m_database.StoreLandObject(Parcel); | 124 | m_database.StoreLandObject(Parcel); |