diff options
Diffstat (limited to 'OpenSim/Grid/AssetServer/RestService.cs')
-rw-r--r-- | OpenSim/Grid/AssetServer/RestService.cs | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/OpenSim/Grid/AssetServer/RestService.cs b/OpenSim/Grid/AssetServer/RestService.cs new file mode 100644 index 0000000..88a1668 --- /dev/null +++ b/OpenSim/Grid/AssetServer/RestService.cs | |||
@@ -0,0 +1,109 @@ | |||
1 | using System; | ||
2 | using System.IO; | ||
3 | using System.Xml; | ||
4 | using System.Xml.Serialization; | ||
5 | using System.Text; | ||
6 | |||
7 | using libsecondlife; | ||
8 | using OpenSim.Framework.Types; | ||
9 | using OpenSim.Framework.Servers; | ||
10 | using OpenSim.Framework.Interfaces; | ||
11 | using OpenSim.Framework.Console; | ||
12 | |||
13 | namespace OpenSim.Grid.AssetServer | ||
14 | { | ||
15 | public class GetAssetStreamHandler : BaseStreamHandler | ||
16 | { | ||
17 | OpenAsset_Main m_assetManager; | ||
18 | IAssetProvider m_assetProvider; | ||
19 | |||
20 | override public byte[] Handle(string path, Stream request) | ||
21 | { | ||
22 | string param = GetParam(path); | ||
23 | byte[] result = new byte[] { }; | ||
24 | try { | ||
25 | |||
26 | string[] p = param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries); | ||
27 | |||
28 | if (p.Length > 0) | ||
29 | { | ||
30 | LLUUID assetID; | ||
31 | bool isTexture = false; | ||
32 | LLUUID.TryParse(p[0], out assetID); | ||
33 | if (p.Length > 1) | ||
34 | { | ||
35 | if (string.Compare(p[1], "texture", true) == 0) | ||
36 | isTexture = true; | ||
37 | } | ||
38 | |||
39 | |||
40 | AssetBase asset = m_assetProvider.FetchAsset(assetID); | ||
41 | if (asset != null) | ||
42 | { | ||
43 | MainLog.Instance.Debug("REST", "GET:/asset found {0}, {1}", assetID, asset.Name); | ||
44 | |||
45 | XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); | ||
46 | MemoryStream ms = new MemoryStream(); | ||
47 | XmlTextWriter xw = new XmlTextWriter(ms, Encoding.UTF8); | ||
48 | xw.Formatting = Formatting.Indented; | ||
49 | xs.Serialize(xw, asset); | ||
50 | xw.Flush(); | ||
51 | |||
52 | ms.Seek(0, SeekOrigin.Begin); | ||
53 | StreamReader sr = new StreamReader(ms); | ||
54 | |||
55 | result = ms.GetBuffer(); | ||
56 | Array.Resize<byte>(ref result, (int)ms.Length); | ||
57 | } | ||
58 | else | ||
59 | { | ||
60 | MainLog.Instance.Verbose("REST", "GET:/asset failed to find {0}", assetID); | ||
61 | } | ||
62 | } | ||
63 | } | ||
64 | catch (Exception e) | ||
65 | { | ||
66 | MainLog.Instance.Error(e.ToString()); | ||
67 | } | ||
68 | return result; | ||
69 | } | ||
70 | |||
71 | public GetAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider) | ||
72 | : base("GET", "/assets" ) | ||
73 | { | ||
74 | m_assetManager = assetManager; | ||
75 | m_assetProvider = assetProvider; | ||
76 | } | ||
77 | } | ||
78 | |||
79 | public class PostAssetStreamHandler : BaseStreamHandler | ||
80 | { | ||
81 | OpenAsset_Main m_assetManager; | ||
82 | IAssetProvider m_assetProvider; | ||
83 | |||
84 | override public byte[] Handle(string path, Stream request) | ||
85 | { | ||
86 | string param = GetParam(path); | ||
87 | |||
88 | LLUUID assetId; | ||
89 | if(param.Length > 0) | ||
90 | LLUUID.TryParse(param, out assetId); | ||
91 | byte[] txBuffer = new byte[4096]; | ||
92 | |||
93 | XmlSerializer xs = new XmlSerializer(typeof(AssetBase)); | ||
94 | AssetBase asset = (AssetBase)xs.Deserialize(request); | ||
95 | |||
96 | MainLog.Instance.Verbose("REST", "StoreAndCommitAsset {0}", asset.FullID); | ||
97 | m_assetProvider.CreateAsset(asset); | ||
98 | |||
99 | return new byte[] { }; | ||
100 | } | ||
101 | |||
102 | public PostAssetStreamHandler(OpenAsset_Main assetManager, IAssetProvider assetProvider) | ||
103 | : base("POST", "/assets") | ||
104 | { | ||
105 | m_assetManager = assetManager; | ||
106 | m_assetProvider = assetProvider; | ||
107 | } | ||
108 | } | ||
109 | } | ||