From cc2b072f6e9f535dfad79e79d778177a5aa90890 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 9 May 2009 01:00:21 +0000 Subject: [PATCH] FInish basic asset server functionality on the new asset server --- .../Servers/Asset/AssetServerGetHandler.cs | 19 +----- .../Servers/Asset/AssetServerPostHandler.cs | 68 +++++++++++++++++++ OpenSim/Servers/Base/ServerUtils.cs | 21 ++++++ OpenSim/Services/AssetService/AssetService.cs | 20 +++++- 4 files changed, 108 insertions(+), 20 deletions(-) create mode 100644 OpenSim/Servers/Asset/AssetServerPostHandler.cs diff --git a/OpenSim/Servers/Asset/AssetServerGetHandler.cs b/OpenSim/Servers/Asset/AssetServerGetHandler.cs index 80226d447f..1535fb57b8 100644 --- a/OpenSim/Servers/Asset/AssetServerGetHandler.cs +++ b/OpenSim/Servers/Asset/AssetServerGetHandler.cs @@ -78,7 +78,7 @@ namespace OpenSim.Servers.AssetServer { XmlSerializer xs = new XmlSerializer(typeof(AssetMetadata)); - result = SerializeResult(xs, metadata); + result = ServerUtils.SerializeResult(xs, metadata); httpResponse.StatusCode = (int)HttpStatusCode.OK; httpResponse.ContentType = @@ -92,7 +92,7 @@ namespace OpenSim.Servers.AssetServer if (asset != null) { XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); - result = SerializeResult(xs, asset); + result = ServerUtils.SerializeResult(xs, asset); httpResponse.StatusCode = (int)HttpStatusCode.OK; httpResponse.ContentType = @@ -101,20 +101,5 @@ namespace OpenSim.Servers.AssetServer } return result; } - - private byte[] SerializeResult(XmlSerializer xs, object data) - { - MemoryStream ms = new MemoryStream(); - XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); - xw.Formatting = Formatting.Indented; - xs.Serialize(xw, data); - xw.Flush(); - - ms.Seek(0, SeekOrigin.Begin); - byte[] ret = ms.GetBuffer(); - Array.Resize(ref ret, (int)ms.Length); - - return ret; - } } } diff --git a/OpenSim/Servers/Asset/AssetServerPostHandler.cs b/OpenSim/Servers/Asset/AssetServerPostHandler.cs new file mode 100644 index 0000000000..fb626c6d5e --- /dev/null +++ b/OpenSim/Servers/Asset/AssetServerPostHandler.cs @@ -0,0 +1,68 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * 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 OpenSim Project 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 DEVELOPERS ``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 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 Nini.Config; +using System; +using System.IO; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Xml; +using System.Xml.Serialization; +using OpenSim.Servers.Base; +using OpenSim.Services.Interfaces; +using OpenSim.Services.AssetService; +using OpenSim.Framework; +using OpenSim.Framework.Servers.HttpServer; + +namespace OpenSim.Servers.AssetServer +{ + public class AssetServerPostHandler : BaseStreamHandler + { + private IAssetService m_AssetService; + + public AssetServerPostHandler(IAssetService service) : + base("POST", "/assets") + { + m_AssetService = service; + } + + public override byte[] Handle(string path, Stream request, + OSHttpRequest httpRequest, OSHttpResponse httpResponse) + { + byte[] result = new byte[0]; + + XmlSerializer xs = new XmlSerializer(typeof (AssetBase)); + AssetBase asset = (AssetBase) xs.Deserialize(request); + + string id = m_AssetService.Store(asset); + + xs = new XmlSerializer(typeof(string)); + return ServerUtils.SerializeResult(xs, id); + } + } +} diff --git a/OpenSim/Servers/Base/ServerUtils.cs b/OpenSim/Servers/Base/ServerUtils.cs index b648e45ad5..58d2b2b44b 100644 --- a/OpenSim/Servers/Base/ServerUtils.cs +++ b/OpenSim/Servers/Base/ServerUtils.cs @@ -25,6 +25,12 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using System.Text; + namespace OpenSim.Servers.AssetServer { public static class ServerUtils @@ -71,5 +77,20 @@ namespace OpenSim.Servers.AssetServer return "application/octet-stream"; } } + + public static byte[] SerializeResult(XmlSerializer xs, object data) + { + MemoryStream ms = new MemoryStream(); + XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); + xw.Formatting = Formatting.Indented; + xs.Serialize(xw, data); + xw.Flush(); + + ms.Seek(0, SeekOrigin.Begin); + byte[] ret = ms.GetBuffer(); + Array.Resize(ref ret, (int)ms.Length); + + return ret; + } } } diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs index d6e514145b..c279699c97 100644 --- a/OpenSim/Services/AssetService/AssetService.cs +++ b/OpenSim/Services/AssetService/AssetService.cs @@ -74,17 +74,31 @@ namespace OpenSim.Services.AssetService public AssetMetadata GetMetadata(string id) { - return null; + UUID assetID; + + if (!UUID.TryParse(id, out assetID)) + return null; + + AssetBase asset = m_Database.FetchAsset(assetID); + return asset.Metadata; } public byte[] GetData(string id) { - return null; + UUID assetID; + + if (!UUID.TryParse(id, out assetID)) + return null; + + AssetBase asset = m_Database.FetchAsset(assetID); + return asset.Data; } public string Store(AssetBase asset) { - return String.Empty; + m_Database.CreateAsset(asset); + + return asset.ID; } public bool UpdateContent(string id, byte[] data)