aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorMelanie Thielker2015-08-20 00:18:45 +0200
committerMelanie Thielker2015-08-20 00:18:45 +0200
commit028506cf3cecb3666b0c185d9c25e21bab968c93 (patch)
tree22f544d4966ba2c71a7c86122d7f8efd525a2790 /OpenSim
parentMerge branch 'master' of opensimulator.org:/var/git/opensim (diff)
downloadopensim-SC-028506cf3cecb3666b0c185d9c25e21bab968c93.zip
opensim-SC-028506cf3cecb3666b0c185d9c25e21bab968c93.tar.gz
opensim-SC-028506cf3cecb3666b0c185d9c25e21bab968c93.tar.bz2
opensim-SC-028506cf3cecb3666b0c185d9c25e21bab968c93.tar.xz
Partial plumbing for the agent stateful module features negotiation
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs4
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/LocalSimulationConnector.cs6
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Simulation/RemoteSimulationConnector.cs7
-rwxr-xr-xOpenSim/Region/Framework/Scenes/Scene.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs7
-rw-r--r--OpenSim/Server/Handlers/Simulation/AgentHandlers.cs13
-rw-r--r--OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs9
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs2
-rw-r--r--OpenSim/Services/Interfaces/ISimulationService.cs3
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs2
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
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic;
30using System.IO; 31using System.IO;
31using System.Net; 32using System.Net;
32using System.Reflection; 33using 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
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic;
30using System.Collections.Specialized; 31using System.Collections.Specialized;
31using System.IO; 32using System.IO;
32using System.IO.Compression; 33using 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
28using System; 28using System;
29using System.Collections.Generic;
29using OpenSim.Framework; 30using OpenSim.Framework;
30using OpenMetaverse; 31using 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);