Example #1
0
        /// <summary>
        /// Remove a specific script (and all its pending commands)
        /// </summary>
        /// <param name="localID"></param>
        /// <param name="itemID"></param>
        public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID)
        {
            // Remove a specific script

            // Remove dataserver events
            m_Dataserver[engine].RemoveEvents(localID, itemID);

            // Remove from: Timers
            m_Timer[engine].UnSetTimerEvents(localID, itemID);

            // Remove from: HttpRequest
            IHttpRequestModule iHttpReq =
                engine.World.RequestModuleInterface <IHttpRequestModule>();

            iHttpReq.StopHttpRequest(localID, itemID);

            IWorldComm comms = engine.World.RequestModuleInterface <IWorldComm>();

            if (comms != null)
            {
                comms.DeleteListener(itemID);
            }

            IXMLRPC xmlrpc = engine.World.RequestModuleInterface <IXMLRPC>();

            xmlrpc.DeleteChannels(itemID);
            xmlrpc.CancelSRDRequests(itemID);

            // Remove Sensors
            m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
        }
Example #2
0
        public void CheckHttpRequests()
        {
            if (m_CmdManager.m_ScriptEngine.World == null)
            {
                return;
            }

            IHttpRequestModule iHttpReq =
                m_CmdManager.m_ScriptEngine.World.RequestModuleInterface <IHttpRequestModule>();

            HttpRequestClass httpInfo = null;

            if (iHttpReq != null)
            {
                httpInfo = (HttpRequestClass)iHttpReq.GetNextCompletedRequest();
            }

            while (httpInfo != null)
            {
                //m_log.Debug("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status);

                // Deliver data to prim's remote_data handler
                //
                // TODO: Returning null for metadata, since the lsl function
                // only returns the byte for HTTP_BODY_TRUNCATED, which is not
                // implemented here yet anyway.  Should be fixed if/when maxsize
                // is supported

                iHttpReq.RemoveCompletedRequest(httpInfo.ReqID);

                object[] resobj = new object[]
                {
                    new LSL_Types.LSLString(httpInfo.ReqID.ToString()),
                    new LSL_Types.LSLInteger(httpInfo.Status),
                    new LSL_Types.list(),
                    new LSL_Types.LSLString(httpInfo.ResponseBody)
                };

                foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
                {
                    if (e.PostObjectEvent(httpInfo.LocalID,
                                          new EventParams("http_response",
                                                          resobj, new DetectParams[0])))
                    {
                        break;
                    }
                }
                httpInfo = (HttpRequestClass)iHttpReq.GetNextCompletedRequest();
            }
        }
Example #3
0
        /// <summary>
        /// Unregister a specific script from facilities (and all its pending commands)
        /// </summary>
        /// <param name="localID"></param>
        /// <param name="itemID"></param>
        public static void UnregisterScriptFacilities(IScriptEngine engine, uint localID, UUID itemID, bool resetScript)
        {
//            m_log.DebugFormat("[ASYNC COMMAND MANAGER]: Removing facilities for script {0}", itemID);

            staticLock.AcquireReaderLock(-1);
            try
            {
                // Remove dataserver events
                m_Dataserver[engine].RemoveEvents(localID, itemID);

                if (resetScript)
                {
                    // Remove from: Timers
                    m_Timer[engine].UnSetTimerEvents(localID, itemID);

                    // Remove from: HttpRequest
                    IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface <IHttpRequestModule>();
                    if (iHttpReq != null)
                    {
                        iHttpReq.StopHttpRequestsForScript(itemID);
                    }
                }

                IWorldComm comms = engine.World.RequestModuleInterface <IWorldComm>();
                if (comms != null)
                {
                    comms.DeleteListener(itemID);
                }

                IXMLRPC xmlrpc = engine.World.RequestModuleInterface <IXMLRPC>();
                if (xmlrpc != null)
                {
                    xmlrpc.DeleteChannels(itemID);
                    xmlrpc.CancelSRDRequests(itemID);
                }

                // Remove Sensors
                m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
            }
            finally
            {
                staticLock.ReleaseReaderLock();
            }
        }
        /// <summary>
        /// Remove a specific script (and all its pending commands)
        /// </summary>
        /// <param name="localID"></param>
        /// <param name="itemID"></param>
        public static void RemoveScript(IScriptEngine engine, uint localID, UUID itemID)
        {
            // Remove a specific script
            //            m_log.DebugFormat("[ASYNC COMMAND MANAGER]: Removing facilities for script {0}", itemID);

            lock (staticLock)
            {
                // Remove dataserver events
                m_Dataserver[engine].RemoveEvents(localID, itemID);

                // Remove from: Timers
                m_Timer[engine].UnSetTimerEvents(localID, itemID);

                if (engine.World != null)
                {
                    // Remove from: HttpRequest
                    IHttpRequestModule iHttpReq = engine.World.RequestModuleInterface <IHttpRequestModule>();
                    if (iHttpReq != null)
                    {
                        iHttpReq.StopHttpRequest(localID, itemID);
                    }

                    IWorldComm comms = engine.World.RequestModuleInterface <IWorldComm>();
                    if (comms != null)
                    {
                        comms.DeleteListener(itemID);
                    }

                    IXMLRPC xmlrpc = engine.World.RequestModuleInterface <IXMLRPC>();
                    if (xmlrpc != null)
                    {
                        xmlrpc.DeleteChannels(itemID);
                        xmlrpc.CancelSRDRequests(itemID);
                    }
                }
                // Remove Sensors
                m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
            }
        }
Example #5
0
 public void Initialize(ScriptEngine engine, Scene scene)
 {
     iHttpReq = scene.RequestModuleInterface<IHttpRequestModule>();
     m_ScriptEngine = engine;
 }
        public LSL_String llHTTPRequest(string url, LSL_List parameters, string body)
        {
            // Partial implementation: support for parameter flags needed
            //   see http://wiki.secondlife.com/wiki/LlHTTPRequest
            // parameter flags support are implemented in ScriptsHttpRequests.cs
            //   in StartHttpRequest

            if (!ScriptProtection.CheckThreatLevel(ThreatLevel.None, "LSL", m_host, "LSL", m_itemID))
            {
                return("");
            }

            IHttpRequestModule httpScriptMod =
                World.RequestModuleInterface <IHttpRequestModule>();

            List <string> param = parameters.Data.Select(o => o.ToString()).ToList();

            Vector3        position      = m_host.AbsolutePosition;
            Vector3        velocity      = m_host.Velocity;
            Quaternion     rotation      = m_host.GetRotationOffset();
            string         ownerName     = string.Empty;
            IScenePresence scenePresence = World.GetScenePresence(m_host.OwnerID);

            ownerName = scenePresence == null?resolveName(m_host.OwnerID) : scenePresence.Name;

            RegionInfo regionInfo = World.RegionInfo;

            Dictionary <string, string> httpHeaders = new Dictionary <string, string>();

            string        shard  = "OpenSim";
            IConfigSource config = m_ScriptEngine.ConfigSource;

            if (config.Configs["LSLRemoting"] != null)
            {
                shard = config.Configs["LSLRemoting"].GetString("shard", shard);
            }

            httpHeaders["X-SecondLife-Shard"]       = shard;
            httpHeaders["X-SecondLife-Object-Name"] = m_host.Name;
            httpHeaders["X-SecondLife-Object-Key"]  = m_host.UUID.ToString();
            httpHeaders["X-SecondLife-Region"]      = string.Format("{0} ({1}, {2})", regionInfo.RegionName,
                                                                    regionInfo.RegionLocX, regionInfo.RegionLocY);
            httpHeaders["X-SecondLife-Local-Position"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})",
                                                                       position.X, position.Y, position.Z);
            httpHeaders["X-SecondLife-Local-Velocity"] = string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000})",
                                                                       velocity.X, velocity.Y, velocity.Z);
            httpHeaders["X-SecondLife-Local-Rotation"] =
                string.Format("({0:0.000000}, {1:0.000000}, {2:0.000000}, {3:0.000000})", rotation.X, rotation.Y,
                              rotation.Z, rotation.W);
            httpHeaders["X-SecondLife-Owner-Name"] = ownerName;
            httpHeaders["X-SecondLife-Owner-Key"]  = m_host.OwnerID.ToString();
            string userAgent = "";

            if (config.Configs["LSLRemoting"] != null)
            {
                userAgent = config.Configs["LSLRemoting"].GetString("user_agent", null);
            }

            if (userAgent != null)
            {
                httpHeaders["User-Agent"] = userAgent;
            }

            const string authregex = @"^(https?:\/\/)(\w+):(\w+)@(.*)$";
            Regex        r         = new Regex(authregex);
            Match        m         = r.Match(url);

            if (m.Success)
            {
                //for (int i = 1; i < gnums.Length; i++) {
                //    //System.Text.RegularExpressions.Group g = m.Groups[gnums[i]];
                //    //CaptureCollection cc = g.Captures;
                //}
                if (m.Groups.Count == 5)
                {
                    httpHeaders["Authorization"] =
                        string.Format("Basic {0}",
                                      Convert.ToBase64String(Encoding.ASCII.GetBytes(m.Groups[2] + ":" + m.Groups[3])));
                    url = m.Groups[1].ToString() + m.Groups[4];
                }
            }

            UUID reqID = httpScriptMod.
                         StartHttpRequest(m_host.UUID, m_itemID, url, param, httpHeaders, body);

            if (reqID != UUID.Zero)
            {
                return(reqID.ToString());
            }
            else
            {
                return(new LSL_String(""));
            }
        }