aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie Thielker2009-05-09 01:00:21 +0000
committerMelanie Thielker2009-05-09 01:00:21 +0000
commitcc2b072f6e9f535dfad79e79d778177a5aa90890 (patch)
tree54ac19fef6442bd5e7b648dceb7ff3e22a7698ff
parentAdd the /data and /metadata retrieval modes to the new asset server. (diff)
downloadopensim-SC_OLD-cc2b072f6e9f535dfad79e79d778177a5aa90890.zip
opensim-SC_OLD-cc2b072f6e9f535dfad79e79d778177a5aa90890.tar.gz
opensim-SC_OLD-cc2b072f6e9f535dfad79e79d778177a5aa90890.tar.bz2
opensim-SC_OLD-cc2b072f6e9f535dfad79e79d778177a5aa90890.tar.xz
FInish basic asset server functionality on the new asset server
-rw-r--r--OpenSim/Servers/Asset/AssetServerGetHandler.cs19
-rw-r--r--OpenSim/Servers/Asset/AssetServerPostHandler.cs68
-rw-r--r--OpenSim/Servers/Base/ServerUtils.cs21
-rw-r--r--OpenSim/Services/AssetService/AssetService.cs20
4 files changed, 108 insertions, 20 deletions
diff --git a/OpenSim/Servers/Asset/AssetServerGetHandler.cs b/OpenSim/Servers/Asset/AssetServerGetHandler.cs
index 80226d4..1535fb5 100644
--- a/OpenSim/Servers/Asset/AssetServerGetHandler.cs
+++ b/OpenSim/Servers/Asset/AssetServerGetHandler.cs
@@ -78,7 +78,7 @@ namespace OpenSim.Servers.AssetServer
78 { 78 {
79 XmlSerializer xs = 79 XmlSerializer xs =
80 new XmlSerializer(typeof(AssetMetadata)); 80 new XmlSerializer(typeof(AssetMetadata));
81 result = SerializeResult(xs, metadata); 81 result = ServerUtils.SerializeResult(xs, metadata);
82 82
83 httpResponse.StatusCode = (int)HttpStatusCode.OK; 83 httpResponse.StatusCode = (int)HttpStatusCode.OK;
84 httpResponse.ContentType = 84 httpResponse.ContentType =
@@ -92,7 +92,7 @@ namespace OpenSim.Servers.AssetServer
92 if (asset != null) 92 if (asset != null)
93 { 93 {
94 XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); 94 XmlSerializer xs = new XmlSerializer(typeof(AssetBase));
95 result = SerializeResult(xs, asset); 95 result = ServerUtils.SerializeResult(xs, asset);
96 96
97 httpResponse.StatusCode = (int)HttpStatusCode.OK; 97 httpResponse.StatusCode = (int)HttpStatusCode.OK;
98 httpResponse.ContentType = 98 httpResponse.ContentType =
@@ -101,20 +101,5 @@ namespace OpenSim.Servers.AssetServer
101 } 101 }
102 return result; 102 return result;
103 } 103 }
104
105 private byte[] SerializeResult(XmlSerializer xs, object data)
106 {
107 MemoryStream ms = new MemoryStream();
108 XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8);
109 xw.Formatting = Formatting.Indented;
110 xs.Serialize(xw, data);
111 xw.Flush();
112
113 ms.Seek(0, SeekOrigin.Begin);
114 byte[] ret = ms.GetBuffer();
115 Array.Resize<byte>(ref ret, (int)ms.Length);
116
117 return ret;
118 }
119 } 104 }
120} 105}
diff --git a/OpenSim/Servers/Asset/AssetServerPostHandler.cs b/OpenSim/Servers/Asset/AssetServerPostHandler.cs
new file mode 100644
index 0000000..fb626c6
--- /dev/null
+++ b/OpenSim/Servers/Asset/AssetServerPostHandler.cs
@@ -0,0 +1,68 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSim Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using Nini.Config;
29using System;
30using System.IO;
31using System.Net;
32using System.Text;
33using System.Text.RegularExpressions;
34using System.Xml;
35using System.Xml.Serialization;
36using OpenSim.Servers.Base;
37using OpenSim.Services.Interfaces;
38using OpenSim.Services.AssetService;
39using OpenSim.Framework;
40using OpenSim.Framework.Servers.HttpServer;
41
42namespace OpenSim.Servers.AssetServer
43{
44 public class AssetServerPostHandler : BaseStreamHandler
45 {
46 private IAssetService m_AssetService;
47
48 public AssetServerPostHandler(IAssetService service) :
49 base("POST", "/assets")
50 {
51 m_AssetService = service;
52 }
53
54 public override byte[] Handle(string path, Stream request,
55 OSHttpRequest httpRequest, OSHttpResponse httpResponse)
56 {
57 byte[] result = new byte[0];
58
59 XmlSerializer xs = new XmlSerializer(typeof (AssetBase));
60 AssetBase asset = (AssetBase) xs.Deserialize(request);
61
62 string id = m_AssetService.Store(asset);
63
64 xs = new XmlSerializer(typeof(string));
65 return ServerUtils.SerializeResult(xs, id);
66 }
67 }
68}
diff --git a/OpenSim/Servers/Base/ServerUtils.cs b/OpenSim/Servers/Base/ServerUtils.cs
index b648e45..58d2b2b 100644
--- a/OpenSim/Servers/Base/ServerUtils.cs
+++ b/OpenSim/Servers/Base/ServerUtils.cs
@@ -25,6 +25,12 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
29using System.IO;
30using System.Xml;
31using System.Xml.Serialization;
32using System.Text;
33
28namespace OpenSim.Servers.AssetServer 34namespace OpenSim.Servers.AssetServer
29{ 35{
30 public static class ServerUtils 36 public static class ServerUtils
@@ -71,5 +77,20 @@ namespace OpenSim.Servers.AssetServer
71 return "application/octet-stream"; 77 return "application/octet-stream";
72 } 78 }
73 } 79 }
80
81 public static byte[] SerializeResult(XmlSerializer xs, object data)
82 {
83 MemoryStream ms = new MemoryStream();
84 XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8);
85 xw.Formatting = Formatting.Indented;
86 xs.Serialize(xw, data);
87 xw.Flush();
88
89 ms.Seek(0, SeekOrigin.Begin);
90 byte[] ret = ms.GetBuffer();
91 Array.Resize<byte>(ref ret, (int)ms.Length);
92
93 return ret;
94 }
74 } 95 }
75} 96}
diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs
index d6e5141..c279699 100644
--- a/OpenSim/Services/AssetService/AssetService.cs
+++ b/OpenSim/Services/AssetService/AssetService.cs
@@ -74,17 +74,31 @@ namespace OpenSim.Services.AssetService
74 74
75 public AssetMetadata GetMetadata(string id) 75 public AssetMetadata GetMetadata(string id)
76 { 76 {
77 return null; 77 UUID assetID;
78
79 if (!UUID.TryParse(id, out assetID))
80 return null;
81
82 AssetBase asset = m_Database.FetchAsset(assetID);
83 return asset.Metadata;
78 } 84 }
79 85
80 public byte[] GetData(string id) 86 public byte[] GetData(string id)
81 { 87 {
82 return null; 88 UUID assetID;
89
90 if (!UUID.TryParse(id, out assetID))
91 return null;
92
93 AssetBase asset = m_Database.FetchAsset(assetID);
94 return asset.Data;
83 } 95 }
84 96
85 public string Store(AssetBase asset) 97 public string Store(AssetBase asset)
86 { 98 {
87 return String.Empty; 99 m_Database.CreateAsset(asset);
100
101 return asset.ID;
88 } 102 }
89 103
90 public bool UpdateContent(string id, byte[] data) 104 public bool UpdateContent(string id, byte[] data)