Пример #1
0
 private void RemoveUrl(UrlData data)
 {
     m_HttpServer.RemovePollServiceHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/");
 }
Пример #2
0
        public void HttpRequestHandler(UUID requestID, OSHttpRequest request)
        {
            lock (request)
            {
                string uri = request.RawUrl;

                try
                {
                    int    pos1    = uri.IndexOf("/");           // /lslhttp
                    int    pos2    = uri.IndexOf("/", pos1 + 1); // /lslhttp/
                    int    pos3    = uri.IndexOf("/", pos2 + 1); // /lslhttp/<UUID>/
                    string uri_tmp = uri.Substring(0, pos3 + 1);

                    string pathInfo = uri.Substring(pos3);

                    UrlData url = m_UrlMap[MainServer.Instance.ServerURI + uri_tmp];

                    //for llGetHttpHeader support we need to store original URI here
                    //to make x-path-info / x-query-string / x-script-url / x-remote-ip headers
                    //as per http://wiki.secondlife.com/wiki/LlGetHTTPHeader

                    RequestData requestData = new RequestData
                    {
                        requestID   = requestID,
                        requestDone = false,
                        startTime   = Environment.TickCount,
                        uri         = uri
                    };
                    if (requestData.headers == null)
                    {
                        requestData.headers = new Dictionary <string, string>();
                    }

                    foreach (string header in request.Headers.Keys)
                    {
                        requestData.headers.Add(header, request.Headers[header]);
                    }

                    //if this machine is behind DNAT/port forwarding, currently this is being
                    //set to address of port forwarding router
                    requestData.headers["x-remote-ip"]    = request.RemoteIPEndPoint.ToString();
                    requestData.headers["x-path-info"]    = pathInfo;
                    requestData.headers["x-query-string"] = request.QueryString.ToString();
                    requestData.headers["x-script-url"]   = url.url;
                    requestData.contentType = "text/plain";

                    lock (url.requests)
                    {
                        url.requests.Add(requestID, requestData);
                    }
                    lock (m_RequestMap)
                    {
                        //add to request map
                        m_RequestMap.Add(requestID, url);
                    }

                    url.engine.PostScriptEvent(url.itemID, url.hostID, "http_request",
                                               new Object[]
                    {
                        requestID.ToString(), request.HttpMethod,
                        HttpServerHandlerHelpers.ReadString(request.InputStream)
                    });
                }
                catch (Exception we)
                {
                    MainConsole.Instance.Warn("[HttpRequestHandler]: http-in request failed");
                    MainConsole.Instance.Warn(we.Message);
                    MainConsole.Instance.Warn(we.StackTrace);
                }
            }
        }
Пример #3
0
        public UUID RequestURL (IScriptModule engine, ISceneChildEntity host, UUID itemID)
        {
            UUID urlcode = UUID.Random();

            lock (m_UrlMap)
            {
                if (m_UrlMap.Count >= m_TotalUrls)
                {
                    engine.PostScriptEvent(itemID, host.UUID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_DENIED", "" });
                    return urlcode;
                }
                string url = m_HttpServer.ServerURI + "/lslhttp/" + urlcode.ToString() + "/";

                UrlData urlData = new UrlData
                                      {
                                          hostID = host.UUID,
                                          itemID = itemID,
                                          engine = engine,
                                          url = url,
                                          urlcode = urlcode,
                                          requests = new Dictionary<UUID, RequestData>()
                                      };


                m_UrlMap[url] = urlData;
                
                string uri = "/lslhttp/" + urlcode.ToString() + "/";
                m_HttpServer.AddPollServiceHTTPHandler(uri, HandleHttpPoll,
                        new PollServiceEventArgs(HttpRequestHandler,HasEvents, GetEvents, NoEvents, Valid,
                            urlcode));

                engine.PostScriptEvent(itemID, host.UUID, "http_request", new Object[] { urlcode.ToString(), "URL_REQUEST_GRANTED", url });
            }

            return urlcode;
        }
Пример #4
0
 private void RemoveUrl(UrlData data)
 {
     MainServer.Instance.RemovePollServiceHTTPHandler("", "/lslhttp/" + data.urlcode.ToString() + "/");
 }