aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services/Connectors/Simulation
diff options
context:
space:
mode:
authorDavid Walter Seikel2016-11-03 21:44:39 +1000
committerDavid Walter Seikel2016-11-03 21:44:39 +1000
commit134f86e8d5c414409631b25b8c6f0ee45fbd8631 (patch)
tree216b89d3fb89acfb81be1e440c25c41ab09fa96d /OpenSim/Services/Connectors/Simulation
parentMore changing to production grid. Double oops. (diff)
downloadopensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.zip
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.gz
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.bz2
opensim-SC_OLD-134f86e8d5c414409631b25b8c6f0ee45fbd8631.tar.xz
Initial update to OpenSim 0.8.2.1 source code.
Diffstat (limited to 'OpenSim/Services/Connectors/Simulation')
-rw-r--r--OpenSim/Services/Connectors/Simulation/EstateDataService.cs139
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationDataService.cs182
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs165
3 files changed, 101 insertions, 385 deletions
diff --git a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs b/OpenSim/Services/Connectors/Simulation/EstateDataService.cs
deleted file mode 100644
index cdcdecf..0000000
--- a/OpenSim/Services/Connectors/Simulation/EstateDataService.cs
+++ /dev/null
@@ -1,139 +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
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using log4net;
32using Mono.Addins;
33using Nini.Config;
34using System.Reflection;
35using OpenSim.Services.Base;
36using OpenSim.Services.Interfaces;
37using OpenSim.Data;
38using OpenSim.Framework;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes;
41
42namespace OpenSim.Services.Connectors
43{
44 public class EstateDataService : ServiceBase, IEstateDataService
45 {
46// private static readonly ILog m_log =
47// LogManager.GetLogger(
48// MethodBase.GetCurrentMethod().DeclaringType);
49
50 protected IEstateDataStore m_database;
51
52 public EstateDataService(IConfigSource config)
53 : base(config)
54 {
55 string dllName = String.Empty;
56 string connString = String.Empty;
57
58 // Try reading the [DatabaseService] section, if it exists
59 IConfig dbConfig = config.Configs["DatabaseService"];
60 if (dbConfig != null)
61 {
62 dllName = dbConfig.GetString("StorageProvider", String.Empty);
63 connString = dbConfig.GetString("ConnectionString", String.Empty);
64 connString = dbConfig.GetString("EstateConnectionString", connString);
65 }
66
67 // Try reading the [EstateDataStore] section, if it exists
68 IConfig estConfig = config.Configs["EstateDataStore"];
69 if (estConfig != null)
70 {
71 dllName = estConfig.GetString("StorageProvider", dllName);
72 connString = estConfig.GetString("ConnectionString", connString);
73 }
74
75 // We tried, but this doesn't exist. We can't proceed
76 if (dllName == String.Empty)
77 throw new Exception("No StorageProvider configured");
78
79 m_database = LoadPlugin<IEstateDataStore>(dllName, new Object[] { connString });
80 if (m_database == null)
81 throw new Exception("Could not find a storage interface in the given module");
82 }
83
84 public EstateSettings LoadEstateSettings(UUID regionID, bool create)
85 {
86 return m_database.LoadEstateSettings(regionID, create);
87 }
88
89 public EstateSettings LoadEstateSettings(int estateID)
90 {
91 return m_database.LoadEstateSettings(estateID);
92 }
93
94 public EstateSettings CreateNewEstate()
95 {
96 return m_database.CreateNewEstate();
97 }
98
99 public List<EstateSettings> LoadEstateSettingsAll()
100 {
101 return m_database.LoadEstateSettingsAll();
102 }
103
104 public void StoreEstateSettings(EstateSettings es)
105 {
106 m_database.StoreEstateSettings(es);
107 }
108
109 public List<int> GetEstates(string search)
110 {
111 return m_database.GetEstates(search);
112 }
113
114 public List<int> GetEstatesAll()
115 {
116 return m_database.GetEstatesAll();
117 }
118
119 public List<int> GetEstatesByOwner(UUID ownerID)
120 {
121 return m_database.GetEstatesByOwner(ownerID);
122 }
123
124 public bool LinkRegion(UUID regionID, int estateID)
125 {
126 return m_database.LinkRegion(regionID, estateID);
127 }
128
129 public List<UUID> GetRegions(int estateID)
130 {
131 return m_database.GetRegions(estateID);
132 }
133
134 public bool DeleteEstate(int estateID)
135 {
136 return m_database.DeleteEstate(estateID);
137 }
138 }
139}
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs b/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
deleted file mode 100644
index 504fcaf..0000000
--- a/OpenSim/Services/Connectors/Simulation/SimulationDataService.cs
+++ /dev/null
@@ -1,182 +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
28using System;
29using System.Collections.Generic;
30using OpenMetaverse;
31using log4net;
32using Mono.Addins;
33using Nini.Config;
34using System.Reflection;
35using OpenSim.Services.Base;
36using OpenSim.Services.Interfaces;
37using OpenSim.Data;
38using OpenSim.Framework;
39using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes;
41
42namespace OpenSim.Services.Connectors
43{
44 public class SimulationDataService : ServiceBase, ISimulationDataService
45 {
46// private static readonly ILog m_log =
47// LogManager.GetLogger(
48// MethodBase.GetCurrentMethod().DeclaringType);
49
50 protected ISimulationDataStore m_database;
51
52 public SimulationDataService(IConfigSource config)
53 : base(config)
54 {
55 string dllName = String.Empty;
56 string connString = String.Empty;
57
58 // Try reading the [DatabaseService] section, if it exists
59 IConfig dbConfig = config.Configs["DatabaseService"];
60 if (dbConfig != null)
61 {
62 dllName = dbConfig.GetString("StorageProvider", String.Empty);
63 connString = dbConfig.GetString("ConnectionString", String.Empty);
64 }
65
66 // Try reading the [SimulationDataStore] section
67 IConfig simConfig = config.Configs["SimulationDataStore"];
68 if (simConfig != null)
69 {
70 dllName = simConfig.GetString("StorageProvider", dllName);
71 connString = simConfig.GetString("ConnectionString", connString);
72 }
73
74 // We tried, but this doesn't exist. We can't proceed
75 if (dllName == String.Empty)
76 throw new Exception("No StorageProvider configured");
77
78 m_database = LoadPlugin<ISimulationDataStore>(dllName, new Object[] { connString });
79 if (m_database == null)
80 throw new Exception("Could not find a storage interface in the given module");
81 }
82
83 public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
84 {
85 m_database.StoreObject(obj, regionUUID);
86 }
87
88 public void RemoveObject(UUID uuid, UUID regionUUID)
89 {
90 m_database.RemoveObject(uuid, regionUUID);
91 }
92
93 public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
94 {
95 m_database.StorePrimInventory(primID, items);
96 }
97
98 public List<SceneObjectGroup> LoadObjects(UUID regionUUID)
99 {
100 return m_database.LoadObjects(regionUUID);
101 }
102
103 public void StoreTerrain(double[,] terrain, UUID regionID)
104 {
105 m_database.StoreTerrain(terrain, regionID);
106 }
107
108 public double[,] LoadTerrain(UUID regionID)
109 {
110 return m_database.LoadTerrain(regionID);
111 }
112
113 public void StoreLandObject(ILandObject Parcel)
114 {
115 m_database.StoreLandObject(Parcel);
116 }
117
118 public void RemoveLandObject(UUID globalID)
119 {
120 m_database.RemoveLandObject(globalID);
121 }
122
123 public List<LandData> LoadLandObjects(UUID regionUUID)
124 {
125 return m_database.LoadLandObjects(regionUUID);
126 }
127
128 public void StoreRegionSettings(RegionSettings rs)
129 {
130 m_database.StoreRegionSettings(rs);
131 }
132
133 public RegionSettings LoadRegionSettings(UUID regionUUID)
134 {
135 return m_database.LoadRegionSettings(regionUUID);
136 }
137
138 public RegionLightShareData LoadRegionWindlightSettings(UUID regionUUID)
139 {
140 return m_database.LoadRegionWindlightSettings(regionUUID);
141 }
142
143 public void StoreRegionWindlightSettings(RegionLightShareData wl)
144 {
145 m_database.StoreRegionWindlightSettings(wl);
146 }
147 public void RemoveRegionWindlightSettings(UUID regionID)
148 {
149 m_database.RemoveRegionWindlightSettings(regionID);
150 }
151
152 public string LoadRegionEnvironmentSettings(UUID regionUUID)
153 {
154 return m_database.LoadRegionEnvironmentSettings(regionUUID);
155 }
156
157 public void StoreRegionEnvironmentSettings(UUID regionUUID, string settings)
158 {
159 m_database.StoreRegionEnvironmentSettings(regionUUID, settings);
160 }
161
162 public void RemoveRegionEnvironmentSettings(UUID regionUUID)
163 {
164 m_database.RemoveRegionEnvironmentSettings(regionUUID);
165 }
166
167 public void SaveExtra(UUID regionID, string name, string val)
168 {
169 m_database.SaveExtra(regionID, name, val);
170 }
171
172 public void RemoveExtra(UUID regionID, string name)
173 {
174 m_database.RemoveExtra(regionID, name);
175 }
176
177 public Dictionary<string, string> GetExtra(UUID regionID)
178 {
179 return m_database.GetExtra(regionID);
180 }
181 }
182}
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;