private void RemoveUrl(UrlData data) { m_HttpServer.RemovePollServiceHTTPHandler("", "/lslhttp/"+data.urlcode.ToString()+"/"); }
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); } } }
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; }
private void RemoveUrl(UrlData data) { MainServer.Instance.RemovePollServiceHTTPHandler("", "/lslhttp/" + data.urlcode.ToString() + "/"); }