aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Server/Handlers/Asset
diff options
context:
space:
mode:
authorOren Hurvitz2014-03-31 11:53:12 +0300
committerOren Hurvitz2014-04-02 06:30:57 +0100
commitd1c3f8eef58b29eb8760eeb1ac03852a2387f927 (patch)
treeb8686f4ea01b6dac3740b9685734686e2178dd2d /OpenSim/Server/Handlers/Asset
parentfix orphaned code in sun module per mantis 7068 (diff)
downloadopensim-SC-d1c3f8eef58b29eb8760eeb1ac03852a2387f927.zip
opensim-SC-d1c3f8eef58b29eb8760eeb1ac03852a2387f927.tar.gz
opensim-SC-d1c3f8eef58b29eb8760eeb1ac03852a2387f927.tar.bz2
opensim-SC-d1c3f8eef58b29eb8760eeb1ac03852a2387f927.tar.xz
Added assets service method AssetsExist(), which returns whether the given list of assets exist.
This method is used to optimize sending assets with embedded assets: e.g., when a Hypergrid visitor takes an item into the inventory.
Diffstat (limited to 'OpenSim/Server/Handlers/Asset')
-rw-r--r--OpenSim/Server/Handlers/Asset/AssetServerConnector.cs3
-rw-r--r--OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs74
-rw-r--r--OpenSim/Server/Handlers/Asset/AssetsExistHandler.cs80
3 files changed, 131 insertions, 26 deletions
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
index cc4325a..9b86986 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerConnector.cs
@@ -86,6 +86,7 @@ namespace OpenSim.Server.Handlers.Asset
86 server.AddStreamHandler(new AssetServerGetHandler(m_AssetService)); 86 server.AddStreamHandler(new AssetServerGetHandler(m_AssetService));
87 server.AddStreamHandler(new AssetServerPostHandler(m_AssetService)); 87 server.AddStreamHandler(new AssetServerPostHandler(m_AssetService));
88 server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService, allowedRemoteDeleteTypes)); 88 server.AddStreamHandler(new AssetServerDeleteHandler(m_AssetService, allowedRemoteDeleteTypes));
89 server.AddStreamHandler(new AssetsExistHandler(m_AssetService));
89 90
90 MainConsole.Instance.Commands.AddCommand("Assets", false, 91 MainConsole.Instance.Commands.AddCommand("Assets", false,
91 "show asset", 92 "show asset",
@@ -212,4 +213,4 @@ namespace OpenSim.Server.Handlers.Asset
212 } 213 }
213 } 214 }
214 } 215 }
215} \ No newline at end of file 216}
diff --git a/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs b/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs
index 8b23a83..ed3b4af 100644
--- a/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs
+++ b/OpenSim/Server/Handlers/Asset/AssetServerGetHandler.cs
@@ -64,45 +64,61 @@ namespace OpenSim.Server.Handlers.Asset
64 if (p.Length == 0) 64 if (p.Length == 0)
65 return result; 65 return result;
66 66
67 if (p.Length > 1 && p[1] == "data") 67 if (p.Length > 1)
68 { 68 {
69 result = m_AssetService.GetData(p[0]); 69 string id = p[0];
70 if (result == null) 70 string cmd = p[1];
71
72 if (cmd == "data")
71 { 73 {
72 httpResponse.StatusCode = (int)HttpStatusCode.NotFound; 74 result = m_AssetService.GetData(id);
73 httpResponse.ContentType = "text/plain"; 75 if (result == null)
74 result = new byte[0]; 76 {
77 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
78 httpResponse.ContentType = "text/plain";
79 result = new byte[0];
80 }
81 else
82 {
83 httpResponse.StatusCode = (int)HttpStatusCode.OK;
84 httpResponse.ContentType = "application/octet-stream";
85 }
75 } 86 }
76 else 87 else if (cmd == "metadata")
77 { 88 {
78 httpResponse.StatusCode = (int)HttpStatusCode.OK; 89 AssetMetadata metadata = m_AssetService.GetMetadata(id);
79 httpResponse.ContentType = "application/octet-stream";
80 }
81 }
82 else if (p.Length > 1 && p[1] == "metadata")
83 {
84 AssetMetadata metadata = m_AssetService.GetMetadata(p[0]);
85 90
86 if (metadata != null) 91 if (metadata != null)
87 { 92 {
88 XmlSerializer xs = 93 XmlSerializer xs =
89 new XmlSerializer(typeof(AssetMetadata)); 94 new XmlSerializer(typeof(AssetMetadata));
90 result = ServerUtils.SerializeResult(xs, metadata); 95 result = ServerUtils.SerializeResult(xs, metadata);
91 96
92 httpResponse.StatusCode = (int)HttpStatusCode.OK; 97 httpResponse.StatusCode = (int)HttpStatusCode.OK;
93 httpResponse.ContentType = 98 httpResponse.ContentType =
94 SLUtil.SLAssetTypeToContentType(metadata.Type); 99 SLUtil.SLAssetTypeToContentType(metadata.Type);
100 }
101 else
102 {
103 httpResponse.StatusCode = (int)HttpStatusCode.NotFound;
104 httpResponse.ContentType = "text/plain";
105 result = new byte[0];
106 }
95 } 107 }
96 else 108 else
97 { 109 {
98 httpResponse.StatusCode = (int)HttpStatusCode.NotFound; 110 // Unknown request
111 httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
99 httpResponse.ContentType = "text/plain"; 112 httpResponse.ContentType = "text/plain";
100 result = new byte[0]; 113 result = new byte[0];
101 } 114 }
102 } 115 }
103 else 116 else if (p.Length == 1)
104 { 117 {
105 AssetBase asset = m_AssetService.Get(p[0]); 118 // Get the entire asset (metadata + data)
119
120 string id = p[0];
121 AssetBase asset = m_AssetService.Get(id);
106 122
107 if (asset != null) 123 if (asset != null)
108 { 124 {
@@ -120,6 +136,14 @@ namespace OpenSim.Server.Handlers.Asset
120 result = new byte[0]; 136 result = new byte[0];
121 } 137 }
122 } 138 }
139 else
140 {
141 // Unknown request
142 httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
143 httpResponse.ContentType = "text/plain";
144 result = new byte[0];
145 }
146
123 return result; 147 return result;
124 } 148 }
125 } 149 }
diff --git a/OpenSim/Server/Handlers/Asset/AssetsExistHandler.cs b/OpenSim/Server/Handlers/Asset/AssetsExistHandler.cs
new file mode 100644
index 0000000..6d01f86
--- /dev/null
+++ b/OpenSim/Server/Handlers/Asset/AssetsExistHandler.cs
@@ -0,0 +1,80 @@
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 OpenSimulator 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 log4net;
30using System;
31using System.Reflection;
32using System.IO;
33using System.Net;
34using System.Text;
35using System.Text.RegularExpressions;
36using System.Xml;
37using System.Xml.Serialization;
38using OpenSim.Server.Base;
39using OpenSim.Services.Interfaces;
40using OpenSim.Framework;
41using OpenSim.Framework.Servers.HttpServer;
42using OpenMetaverse;
43
44namespace OpenSim.Server.Handlers.Asset
45{
46 public class AssetsExistHandler : BaseStreamHandler
47 {
48 //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49
50 private IAssetService m_AssetService;
51
52 public AssetsExistHandler(IAssetService service) :
53 base("POST", "/get_assets_exist")
54 {
55 m_AssetService = service;
56 }
57
58 protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
59 {
60 XmlSerializer xs;
61
62 string[] ids;
63 try
64 {
65 xs = new XmlSerializer(typeof(string[]));
66 ids = (string[])xs.Deserialize(request);
67 }
68 catch (Exception)
69 {
70 httpResponse.StatusCode = (int)HttpStatusCode.BadRequest;
71 return null;
72 }
73
74 bool[] exist = m_AssetService.AssetsExist(ids);
75
76 xs = new XmlSerializer(typeof(bool[]));
77 return ServerUtils.SerializeResult(xs, exist);
78 }
79 }
80}