diff options
Diffstat (limited to 'OpenSim/Services/Connectors/Simulation')
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 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenMetaverse; | ||
31 | using log4net; | ||
32 | using Mono.Addins; | ||
33 | using Nini.Config; | ||
34 | using System.Reflection; | ||
35 | using OpenSim.Services.Base; | ||
36 | using OpenSim.Services.Interfaces; | ||
37 | using OpenSim.Data; | ||
38 | using OpenSim.Framework; | ||
39 | using OpenSim.Region.Framework.Interfaces; | ||
40 | using OpenSim.Region.Framework.Scenes; | ||
41 | |||
42 | namespace 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 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using OpenMetaverse; | ||
31 | using log4net; | ||
32 | using Mono.Addins; | ||
33 | using Nini.Config; | ||
34 | using System.Reflection; | ||
35 | using OpenSim.Services.Base; | ||
36 | using OpenSim.Services.Interfaces; | ||
37 | using OpenSim.Data; | ||
38 | using OpenSim.Framework; | ||
39 | using OpenSim.Region.Framework.Interfaces; | ||
40 | using OpenSim.Region.Framework.Scenes; | ||
41 | |||
42 | namespace 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; |