OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
WorldViewRequestHandler.cs
Go to the documentation of this file.
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.Generic;
30 using System.IO;
31 using System.Reflection;
32 using System.Xml;
33 
34 using OpenSim.Framework;
35 using OpenSim.Server.Base;
36 using OpenSim.Framework.Servers.HttpServer;
37 using OpenSim.Region.Framework.Scenes;
38 using OpenSim.Region.Framework.Interfaces;
39 
40 using OpenMetaverse;
41 using log4net;
42 
43 namespace OpenSim.Region.OptionalModules.World.WorldView
44 {
46  {
47  private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 
50  protected Object m_RequestLock = new Object();
51 
52  public WorldViewRequestHandler(WorldViewModule fmodule, string rid)
53  : base("GET", "/worldview/" + rid)
54  {
55  m_WorldViewModule = fmodule;
56  }
57 
58  protected override byte[] ProcessRequest(string path, Stream requestData,
59  IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
60  {
61  httpResponse.ContentType = "image/jpeg";
62 
63 // StreamReader sr = new StreamReader(requestData);
64 // string body = sr.ReadToEnd();
65 // sr.Close();
66 // body = body.Trim();
67 
68  try
69  {
70  lock (m_RequestLock)
71  {
72  Dictionary<string, object> request =
73  new Dictionary<string, object>();
74  foreach (string name in httpRequest.QueryString)
75  request[name] = httpRequest.QueryString[name];
76 
77  return SendWorldView(request);
78  }
79  }
80  catch (Exception e)
81  {
82  m_log.Debug("[WORLDVIEW]: Exception: " + e.ToString());
83  }
84 
85  return new Byte[0];
86  }
87 
88  public Byte[] SendWorldView(Dictionary<string, object> request)
89  {
90  float posX;
91  float posY;
92  float posZ;
93  float rotX;
94  float rotY;
95  float rotZ;
96  float fov;
97  int width;
98  int height;
99  bool usetex;
100 
101  if (!request.ContainsKey("posX"))
102  return new Byte[0];
103  if (!request.ContainsKey("posY"))
104  return new Byte[0];
105  if (!request.ContainsKey("posZ"))
106  return new Byte[0];
107  if (!request.ContainsKey("rotX"))
108  return new Byte[0];
109  if (!request.ContainsKey("rotY"))
110  return new Byte[0];
111  if (!request.ContainsKey("rotZ"))
112  return new Byte[0];
113  if (!request.ContainsKey("fov"))
114  return new Byte[0];
115  if (!request.ContainsKey("width"))
116  return new Byte[0];
117  if (!request.ContainsKey("height"))
118  return new Byte[0];
119  if (!request.ContainsKey("usetex"))
120  return new Byte[0];
121 
122  try
123  {
124  posX = Convert.ToSingle(request["posX"]);
125  posY = Convert.ToSingle(request["posY"]);
126  posZ = Convert.ToSingle(request["posZ"]);
127  rotX = Convert.ToSingle(request["rotX"]);
128  rotY = Convert.ToSingle(request["rotY"]);
129  rotZ = Convert.ToSingle(request["rotZ"]);
130  fov = Convert.ToSingle(request["fov"]);
131  width = Convert.ToInt32(request["width"]);
132  height = Convert.ToInt32(request["height"]);
133  usetex = Convert.ToBoolean(request["usetex"]);
134  }
135  catch
136  {
137  return new Byte[0];
138  }
139 
140  Vector3 pos = new Vector3(posX, posY, posZ);
141  Vector3 rot = new Vector3(rotX, rotY, rotZ);
142 
143  return m_WorldViewModule.GenerateWorldView(pos, rot, fov, width,
144  height, usetex);
145  }
146  }
147 }
148 
override byte[] ProcessRequest(string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)