public ICircuit UseSimCircuit(IPEndPoint ep, UUID sessionID, SceneInterface thisScene, UUID remoteSceneID, uint circuitcode, GridVector remoteLocation, Vector3 remoteOffset)
        {
            var circuit = new SimCircuit(this, circuitcode, remoteSceneID, sessionID, remoteLocation, remoteOffset)
            {
                Scene = thisScene
            };

            AddCircuit(circuit);
            var useCircuitCode = new UseCircuitCode
            {
                SessionID   = sessionID,
                AgentID     = thisScene.ID,
                CircuitCode = circuitcode
            };

            circuit.SendMessage(useCircuitCode);
            return(circuit);
        }
Example #2
0
        public static void HandleSimCircuitRequest(HttpRequest req, ConfigurationLoader loader)
        {
            if (req.ContainsHeader("X-SecondLife-Shard"))
            {
                req.ErrorResponse(HttpStatusCode.MethodNotAllowed, "Request source not allowed");
                return;
            }

            if (req.Method != "POST")
            {
                req.ErrorResponse(HttpStatusCode.MethodNotAllowed, "Method not allowed");
                return;
            }

            Map reqmap;

            try
            {
                reqmap = LlsdXml.Deserialize(req.Body) as Map;
            }
            catch
            {
                req.ErrorResponse(HttpStatusCode.BadRequest, "Bad Request");
                return;
            }
            if (reqmap == null)
            {
                req.ErrorResponse(HttpStatusCode.BadRequest, "Bad Request");
                return;
            }

            var regionID     = reqmap["to_region_id"].AsUUID;
            var fromRegionID = reqmap["from_region_id"].AsUUID;

            SceneInterface scene;

            try
            {
                scene = loader.Scenes[regionID];
            }
            catch
            {
                req.ErrorResponse(HttpStatusCode.BadRequest, "Bad Request");
                return;
            }

            var gridService = scene.GridService;

            if (gridService == null)
            {
                req.ErrorResponse(HttpStatusCode.BadRequest, "Bad Request");
                return;
            }

            RegionInfo regionInfo;

            try
            {
                regionInfo = gridService[fromRegionID];
            }
            catch
            {
                req.ErrorResponse(HttpStatusCode.BadRequest, "Bad Request");
                return;
            }

            var     sessionID    = UUID.Random;
            uint    circuitCode  = NewCircuitCode;
            Vector3 remoteOffset = regionInfo.Location - scene.GridPosition;
            var     udpServer    = (UDPCircuitsManager)scene.UDPServer;
            var     circuit      = new SimCircuit(udpServer, circuitCode, fromRegionID, sessionID, regionInfo.Location, remoteOffset);

            udpServer.AddCircuit(circuit);
            var resmap = new Map
            {
                { "circuit_code", circuitCode },
                { "session_id", sessionID }
            };

            using (var res = req.BeginResponse("application/llsd+xml"))
            {
                using (var o = res.GetOutputStream())
                {
                    LlsdXml.Serialize(resmap, o);
                }
            }
        }
Example #3
0
 public ChildAgentUpdater(SimCircuit circuit, uint viewercircuitcode)
 {
     m_Circuit           = circuit;
     m_ViewerCircuitCode = viewercircuitcode;
 }