clockwerk-opensim – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 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  
28 using System;
29 using System.Collections;
30 using System.Collections.Specialized;
31 using System.Reflection;
32 using System.IO;
33 using System.Web;
34 using log4net;
35 using Nini.Config;
36 using OpenMetaverse;
37 using OpenMetaverse.StructuredData;
38 using OpenSim.Framework;
39 using OpenSim.Framework.Servers;
40 using OpenSim.Framework.Servers.HttpServer;
41 using OpenSim.Services.Interfaces;
42 using Caps = OpenSim.Framework.Capabilities.Caps;
43  
44 namespace OpenSim.Capabilities.Handlers
45 {
46 public class GetMeshHandler
47 {
48 // private static readonly ILog m_log =
49 // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50  
51 private IAssetService m_assetService;
52  
53 public GetMeshHandler(IAssetService assService)
54 {
55 m_assetService = assService;
56 }
57  
58 public Hashtable ProcessGetMesh(Hashtable request, UUID AgentId, Caps cap)
59 {
60 Hashtable responsedata = new Hashtable();
61 responsedata["int_response_code"] = 400; //501; //410; //404;
62 responsedata["content_type"] = "text/plain";
63 responsedata["keepalive"] = false;
64 responsedata["str_response_string"] = "Request wasn't what was expected";
65  
66 string meshStr = string.Empty;
67  
68 if (request.ContainsKey("mesh_id"))
69 meshStr = request["mesh_id"].ToString();
70  
71 UUID meshID = UUID.Zero;
72 if (!String.IsNullOrEmpty(meshStr) && UUID.TryParse(meshStr, out meshID))
73 {
74 if (m_assetService == null)
75 {
76 responsedata["int_response_code"] = 404; //501; //410; //404;
77 responsedata["content_type"] = "text/plain";
78 responsedata["keepalive"] = false;
79 responsedata["str_response_string"] = "The asset service is unavailable. So is your mesh.";
80 return responsedata;
81 }
82  
83 AssetBase mesh = m_assetService.Get(meshID.ToString());
84  
85 if (mesh != null)
86 {
87 if (mesh.Type == (SByte)AssetType.Mesh)
88 {
89 responsedata["str_response_string"] = Convert.ToBase64String(mesh.Data);
90 responsedata["content_type"] = "application/vnd.ll.mesh";
91 responsedata["int_response_code"] = 200;
92 }
93 // Optionally add additional mesh types here
94 else
95 {
96 responsedata["int_response_code"] = 404; //501; //410; //404;
97 responsedata["content_type"] = "text/plain";
98 responsedata["keepalive"] = false;
99 responsedata["str_response_string"] = "Unfortunately, this asset isn't a mesh.";
100 return responsedata;
101 }
102 }
103 else
104 {
105 responsedata["int_response_code"] = 404; //501; //410; //404;
106 responsedata["content_type"] = "text/plain";
107 responsedata["keepalive"] = false;
108 responsedata["str_response_string"] = "Your Mesh wasn't found. Sorry!";
109 return responsedata;
110 }
111 }
112  
113 return responsedata;
114 }
115 }
116 }