FInish basic asset server functionality on the new asset server

0.6.5-rc1
Melanie Thielker 2009-05-09 01:00:21 +00:00
parent a582d1b1a2
commit cc2b072f6e
4 changed files with 108 additions and 20 deletions

View File

@ -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<byte>(ref ret, (int)ms.Length);
return ret;
}
}
}

View File

@ -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);
}
}
}

View File

@ -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<byte>(ref ret, (int)ms.Length);
return ret;
}
}
}

View File

@ -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)