/* * Copyright (c) 2008 Intel Corporation * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * -- Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * -- Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * -- Neither the name of the Intel Corporation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR ITS * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ using System; using System.Collections.Generic; using System.Net; using System.IO; using System.Xml; using OpenMetaverse; using OpenMetaverse.Capabilities; using OpenMetaverse.StructuredData; namespace AssetServer { public class AssetServer { public int HttpPort = 9001; public HttpServer HttpServer; public AssetServer() { } public bool Start(int port, bool ssl) { HttpPort = port; InitHttpServer(HttpPort, ssl); return true; } public void Stop() { HttpServer.Stop(); } void InitHttpServer(int port, bool ssl) { HttpServer = new HttpServer(HttpPort, ssl); // Texture request HttpRequestSignature signature = new HttpRequestSignature(); signature.Method = "get"; signature.Path = "/"; HttpServer.HttpRequestCallback callback = new HttpServer.HttpRequestCallback(RequestHandler); HttpServer.HttpRequestHandler handler = new HttpServer.HttpRequestHandler(signature, callback); handler.Signature = signature; handler.Callback = callback; HttpServer.AddHandler(handler); HttpServer.Start(); } void RequestHandler(HttpRequestSignature signature, ref HttpListenerContext context) { // Split the URL up into an AssetID and a method string[] rawUrl = context.Request.RawUrl.Split('/'); if (rawUrl.Length >= 3) { UUID assetID; if (UUID.TryParse(rawUrl[1], out assetID)) { string method = rawUrl[2]; string[] authHeader = context.Request.Headers.GetValues("Authorization"); context.Response.StatusCode = (int)HttpStatusCode.OK; context.Response.StatusDescription = "Requested " + assetID.ToString() + " with method " + method; context.Response.Close(); return; } } context.Response.StatusCode = (int)HttpStatusCode.NotFound; context.Response.StatusDescription = "Requests take the form of /AssetID/method"; context.Response.Close(); } } }