aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Server/Handlers/Simulation/AgentHandlers.cs')
-rw-r--r--OpenSim/Server/Handlers/Simulation/AgentHandlers.cs53
1 files changed, 45 insertions, 8 deletions
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
index 98c5312..c19421a 100644
--- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
+++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs
@@ -120,6 +120,8 @@ namespace OpenSim.Server.Handlers.Simulation
120 120
121 protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID) 121 protected virtual void DoQueryAccess(Hashtable request, Hashtable responsedata, UUID agentID, UUID regionID)
122 { 122 {
123 EntityTransferContext ctx = new EntityTransferContext();
124
123 if (m_SimulationService == null) 125 if (m_SimulationService == null)
124 { 126 {
125 m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless."); 127 m_log.Debug("[AGENT HANDLER]: Agent QUERY called. Harmless but useless.");
@@ -155,6 +157,9 @@ namespace OpenSim.Server.Handlers.Simulation
155 theirVersion = float.Parse(parts[1]); 157 theirVersion = float.Parse(parts[1]);
156 } 158 }
157 159
160 if (args.ContainsKey("context"))
161 ctx.Unpack((OSDMap)args["context"]);
162
158 // Decode the new versioning data 163 // Decode the new versioning data
159 float minVersionRequired = 0f; 164 float minVersionRequired = 0f;
160 float maxVersionRequired = 0f; 165 float maxVersionRequired = 0f;
@@ -245,7 +250,6 @@ namespace OpenSim.Server.Handlers.Simulation
245 250
246 string reason; 251 string reason;
247 // We're sending the version numbers down to the local connector to do the varregion check. 252 // We're sending the version numbers down to the local connector to do the varregion check.
248 EntityTransferContext ctx = new EntityTransferContext();
249 ctx.InboundVersion = inboundVersion; 253 ctx.InboundVersion = inboundVersion;
250 ctx.OutboundVersion = outboundVersion; 254 ctx.OutboundVersion = outboundVersion;
251 if (minVersionProvided == 0f) 255 if (minVersionProvided == 0f)
@@ -262,7 +266,6 @@ namespace OpenSim.Server.Handlers.Simulation
262 resp["version"] = OSD.FromString(legacyVersion); 266 resp["version"] = OSD.FromString(legacyVersion);
263 resp["negotiated_inbound_version"] = OSD.FromReal(inboundVersion); 267 resp["negotiated_inbound_version"] = OSD.FromReal(inboundVersion);
264 resp["negotiated_outbound_version"] = OSD.FromReal(outboundVersion); 268 resp["negotiated_outbound_version"] = OSD.FromReal(outboundVersion);
265 resp["variable_wearables_count_supported"] = OSD.FromBoolean(true);
266 269
267 OSDArray featuresWanted = new OSDArray(); 270 OSDArray featuresWanted = new OSDArray();
268 foreach (UUID feature in features) 271 foreach (UUID feature in features)
@@ -407,6 +410,8 @@ namespace OpenSim.Server.Handlers.Simulation
407 410
408 protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id) 411 protected void DoAgentPost(Hashtable request, Hashtable responsedata, UUID id)
409 { 412 {
413 EntityTransferContext ctx = new EntityTransferContext();
414
410 OSDMap args = Utils.GetOSDMap((string)request["body"]); 415 OSDMap args = Utils.GetOSDMap((string)request["body"]);
411 if (args == null) 416 if (args == null)
412 { 417 {
@@ -415,6 +420,9 @@ namespace OpenSim.Server.Handlers.Simulation
415 return; 420 return;
416 } 421 }
417 422
423 if (args.ContainsKey("context"))
424 ctx.Unpack((OSDMap)args["context"]);
425
418 AgentDestinationData data = CreateAgentDestinationData(); 426 AgentDestinationData data = CreateAgentDestinationData();
419 UnpackData(args, data, request); 427 UnpackData(args, data, request);
420 428
@@ -461,7 +469,8 @@ namespace OpenSim.Server.Handlers.Simulation
461 // This is the meaning of POST agent 469 // This is the meaning of POST agent
462 //m_regionClient.AdjustUserInformation(aCircuit); 470 //m_regionClient.AdjustUserInformation(aCircuit);
463 //bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason); 471 //bool result = m_SimulationService.CreateAgent(destination, aCircuit, teleportFlags, out reason);
464 bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, out reason); 472
473 bool result = CreateAgent(source, gatekeeper, destination, aCircuit, data.flags, data.fromLogin, ctx, out reason);
465 474
466 resp["reason"] = OSD.FromString(reason); 475 resp["reason"] = OSD.FromString(reason);
467 resp["success"] = OSD.FromBoolean(result); 476 resp["success"] = OSD.FromBoolean(result);
@@ -536,9 +545,29 @@ namespace OpenSim.Server.Handlers.Simulation
536 545
537 // subclasses can override this 546 // subclasses can override this
538 protected virtual bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination, 547 protected virtual bool CreateAgent(GridRegion source, GridRegion gatekeeper, GridRegion destination,
539 AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, out string reason) 548 AgentCircuitData aCircuit, uint teleportFlags, bool fromLogin, EntityTransferContext ctx, out string reason)
540 { 549 {
541 return m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, out reason); 550 reason = String.Empty;
551 // The data and protocols are already defined so this is just a dummy to satisfy the interface
552 // TODO: make this end-to-end
553 if ((teleportFlags & (uint)TeleportFlags.ViaLogin) == 0)
554 {
555 Util.FireAndForget(x =>
556 {
557 string r;
558 m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out r);
559 m_log.DebugFormat("[AGENT HANDLER]: ASYNC CreateAgent {0}", r);
560 });
561
562 return true;
563 }
564 else
565 {
566
567 bool ret = m_SimulationService.CreateAgent(source, destination, aCircuit, teleportFlags, ctx, out reason);
568 m_log.DebugFormat("[AGENT HANDLER]: SYNC CreateAgent {0} {1}", ret.ToString(), reason);
569 return ret;
570 }
542 } 571 }
543 } 572 }
544 573
@@ -639,6 +668,9 @@ namespace OpenSim.Server.Handlers.Simulation
639 668
640 protected void DoAgentPut(Hashtable request, Hashtable responsedata) 669 protected void DoAgentPut(Hashtable request, Hashtable responsedata)
641 { 670 {
671 // TODO: Encode the ENtityTransferContext
672 EntityTransferContext ctx = new EntityTransferContext();
673
642 OSDMap args = Utils.GetOSDMap((string)request["body"]); 674 OSDMap args = Utils.GetOSDMap((string)request["body"]);
643 if (args == null) 675 if (args == null)
644 { 676 {
@@ -659,6 +691,8 @@ namespace OpenSim.Server.Handlers.Simulation
659 UUID.TryParse(args["destination_uuid"].AsString(), out uuid); 691 UUID.TryParse(args["destination_uuid"].AsString(), out uuid);
660 if (args.ContainsKey("destination_name") && args["destination_name"] != null) 692 if (args.ContainsKey("destination_name") && args["destination_name"] != null)
661 regionname = args["destination_name"].ToString(); 693 regionname = args["destination_name"].ToString();
694 if (args.ContainsKey("context"))
695 ctx.Unpack((OSDMap)args["context"]);
662 696
663 GridRegion destination = new GridRegion(); 697 GridRegion destination = new GridRegion();
664 destination.RegionID = uuid; 698 destination.RegionID = uuid;
@@ -681,7 +715,7 @@ namespace OpenSim.Server.Handlers.Simulation
681 AgentData agent = new AgentData(); 715 AgentData agent = new AgentData();
682 try 716 try
683 { 717 {
684 agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID)); 718 agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID), ctx);
685 } 719 }
686 catch (Exception ex) 720 catch (Exception ex)
687 { 721 {
@@ -700,7 +734,7 @@ namespace OpenSim.Server.Handlers.Simulation
700 AgentPosition agent = new AgentPosition(); 734 AgentPosition agent = new AgentPosition();
701 try 735 try
702 { 736 {
703 agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID)); 737 agent.Unpack(args, m_SimulationService.GetScene(destination.RegionID), ctx);
704 } 738 }
705 catch (Exception ex) 739 catch (Exception ex)
706 { 740 {
@@ -721,7 +755,10 @@ namespace OpenSim.Server.Handlers.Simulation
721 // subclasses can override this 755 // subclasses can override this
722 protected virtual bool UpdateAgent(GridRegion destination, AgentData agent) 756 protected virtual bool UpdateAgent(GridRegion destination, AgentData agent)
723 { 757 {
724 return m_SimulationService.UpdateAgent(destination, agent); 758 // The data and protocols are already defined so this is just a dummy to satisfy the interface
759 // TODO: make this end-to-end
760 EntityTransferContext ctx = new EntityTransferContext();
761 return m_SimulationService.UpdateAgent(destination, agent, ctx);
725 } 762 }
726 } 763 }
727 764