aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorUbitUmarov2016-12-04 15:50:48 +0000
committerUbitUmarov2016-12-04 15:50:48 +0000
commite1cf34d6fb2d43261ad66262af091574c075f489 (patch)
treecc9ec985eb69e2104cb2c0514f2587acdaee6940 /OpenSim/Region
parentAdding new string-parameter: "region_max_prims" for llGetEnv(string name); (diff)
downloadopensim-SC_OLD-e1cf34d6fb2d43261ad66262af091574c075f489.zip
opensim-SC_OLD-e1cf34d6fb2d43261ad66262af091574c075f489.tar.gz
opensim-SC_OLD-e1cf34d6fb2d43261ad66262af091574c075f489.tar.bz2
opensim-SC_OLD-e1cf34d6fb2d43261ad66262af091574c075f489.tar.xz
replace GetDisplaynames by a handler really usable as a client cap. Most capabilities.handlers are so it all things not propor PER CLIENT CAP handlers
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs84
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/GetDisplayNamesModule.cs143
2 files changed, 84 insertions, 143 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 60bfaa5..f96ae8b 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -29,9 +29,11 @@ using System;
29using System.Timers; 29using System.Timers;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Collections.Specialized;
32using System.IO; 33using System.IO;
33using System.Reflection; 34using System.Reflection;
34using System.Text; 35using System.Text;
36using System.Web;
35 37
36using OpenMetaverse; 38using OpenMetaverse;
37using OpenMetaverse.StructuredData; 39using OpenMetaverse.StructuredData;
@@ -125,6 +127,8 @@ namespace OpenSim.Region.ClientStack.Linden
125 127
126 private bool m_AllowCapHomeLocation = true; 128 private bool m_AllowCapHomeLocation = true;
127 private bool m_AllowCapGroupMemberData = true; 129 private bool m_AllowCapGroupMemberData = true;
130 private IUserManagement m_UserManager;
131
128 132
129 private enum FileAgentInventoryState : int 133 private enum FileAgentInventoryState : int
130 { 134 {
@@ -196,6 +200,7 @@ namespace OpenSim.Region.ClientStack.Linden
196 200
197 m_assetService = m_Scene.AssetService; 201 m_assetService = m_Scene.AssetService;
198 m_regionName = m_Scene.RegionInfo.RegionName; 202 m_regionName = m_Scene.RegionInfo.RegionName;
203 m_UserManager = m_Scene.RequestModuleInterface<IUserManagement>();
199 204
200 RegisterHandlers(); 205 RegisterHandlers();
201 206
@@ -229,6 +234,7 @@ namespace OpenSim.Region.ClientStack.Linden
229 234
230 RegisterRegionServiceHandlers(); 235 RegisterRegionServiceHandlers();
231 RegisterInventoryServiceHandlers(); 236 RegisterInventoryServiceHandlers();
237 RegisterOtherHandlers();
232 } 238 }
233 239
234 public void RegisterRegionServiceHandlers() 240 public void RegisterRegionServiceHandlers()
@@ -314,6 +320,19 @@ namespace OpenSim.Region.ClientStack.Linden
314 } 320 }
315 } 321 }
316 322
323 public void RegisterOtherHandlers()
324 {
325 try
326 {
327 IRequestHandler GetDisplayNamesHandler = new RestStreamHandler(
328 "GET", GetNewCapPath(), GetDisplayNames, "GetDisplayNames", null);
329 m_HostCapsObj.RegisterHandler("GetDisplayNames", GetDisplayNamesHandler);
330 }
331 catch (Exception e)
332 {
333 m_log.Error("[CAPS]: " + e.ToString());
334 }
335 }
317 /// <summary> 336 /// <summary>
318 /// Construct a client response detailing all the capabilities this server can provide. 337 /// Construct a client response detailing all the capabilities this server can provide.
319 /// </summary> 338 /// </summary>
@@ -1794,6 +1813,71 @@ namespace OpenSim.Region.ClientStack.Linden
1794 response = OSDParser.SerializeLLSDXmlString(resp); 1813 response = OSDParser.SerializeLLSDXmlString(resp);
1795 return response; 1814 return response;
1796 } 1815 }
1816
1817 public string GetDisplayNames(string request, string path,
1818 string param, IOSHttpRequest httpRequest,
1819 IOSHttpResponse httpResponse)
1820 {
1821 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.NoContent;
1822 httpResponse.ContentType = "text/plain";
1823
1824 ScenePresence sp = m_Scene.GetScenePresence(m_AgentID);
1825 if(sp == null || sp.IsDeleted)
1826 return "";
1827
1828 NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
1829 string[] ids = query.GetValues("ids");
1830
1831 if (m_UserManager == null)
1832 {
1833 m_log.Error("[GET_DISPLAY_NAMES]: Cannot fetch display names without a user management component");
1834 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
1835 return "";
1836 }
1837
1838 Dictionary<UUID,string> names = m_UserManager.GetUsersNames(ids);
1839
1840 OSDMap osdReply = new OSDMap();
1841 OSDArray agents = new OSDArray();
1842
1843 osdReply["agents"] = agents;
1844 foreach (KeyValuePair<UUID,string> kvp in names)
1845 {
1846 if (string.IsNullOrEmpty(kvp.Value))
1847 continue;
1848 if(kvp.Key == UUID.Zero)
1849 continue;
1850
1851 string[] parts = kvp.Value.Split(new char[] {' '});
1852 OSDMap osdname = new OSDMap();
1853 if(parts[0] == "Unknown")
1854 {
1855 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddHours(1));
1856 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddHours(2));
1857 }
1858 else
1859 {
1860 osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8));
1861 osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1));
1862 }
1863 osdname["display_name"] = OSD.FromString(kvp.Value);
1864 osdname["legacy_first_name"] = parts[0];
1865 osdname["legacy_last_name"] = parts[1];
1866 osdname["username"] = OSD.FromString(kvp.Value);
1867 osdname["id"] = OSD.FromUUID(kvp.Key);
1868 osdname["is_display_name_default"] = OSD.FromBoolean(true);
1869
1870 agents.Add(osdname);
1871 }
1872
1873 // Full content request
1874 httpResponse.StatusCode = (int)System.Net.HttpStatusCode.OK;
1875 //httpResponse.ContentLength = ??;
1876 httpResponse.ContentType = "application/llsd+xml";
1877
1878 string reply = OSDParser.SerializeLLSDXmlString(osdReply);
1879 return reply;
1880 }
1797 } 1881 }
1798 1882
1799 public class AssetUploader 1883 public class AssetUploader
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetDisplayNamesModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetDisplayNamesModule.cs
deleted file mode 100644
index bf559d3..0000000
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetDisplayNamesModule.cs
+++ /dev/null
@@ -1,143 +0,0 @@
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 System;
29using System.Collections;
30using System.Collections.Specialized;
31using System.Drawing;
32using System.Drawing.Imaging;
33using System.Reflection;
34using System.IO;
35using System.Web;
36using log4net;
37using Nini.Config;
38using Mono.Addins;
39using OpenMetaverse;
40using OpenMetaverse.StructuredData;
41using OpenMetaverse.Imaging;
42using OpenSim.Framework;
43using OpenSim.Framework.Servers;
44using OpenSim.Framework.Servers.HttpServer;
45using OpenSim.Region.Framework.Interfaces;
46using OpenSim.Region.Framework.Scenes;
47using OpenSim.Services.Interfaces;
48using Caps = OpenSim.Framework.Capabilities.Caps;
49using OpenSim.Capabilities.Handlers;
50
51namespace OpenSim.Region.ClientStack.Linden
52{
53
54 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GetDisplayNamesModule")]
55 public class GetDisplayNamesModule : INonSharedRegionModule
56 {
57 private static readonly ILog m_log =
58 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
59
60 protected Scene m_scene;
61 protected IUserManagement m_UserManager;
62
63 protected bool m_Enabled = false;
64
65 protected string m_URL;
66
67 #region ISharedRegionModule Members
68
69 public virtual void Initialise(IConfigSource source)
70 {
71 IConfig config = source.Configs["ClientStack.LindenCaps"];
72 if (config == null)
73 return;
74
75 m_URL = config.GetString("Cap_GetDisplayNames", string.Empty);
76 if (m_URL != string.Empty)
77 m_Enabled = true;
78 }
79
80 public virtual void AddRegion(Scene s)
81 {
82 if (!m_Enabled)
83 return;
84
85 m_scene = s;
86 }
87
88 public virtual void RemoveRegion(Scene s)
89 {
90 if (!m_Enabled)
91 return;
92
93 m_scene.EventManager.OnRegisterCaps -= RegisterCaps;
94 m_scene = null;
95 }
96
97 public virtual void RegionLoaded(Scene s)
98 {
99 if (!m_Enabled)
100 return;
101
102 m_UserManager = m_scene.RequestModuleInterface<IUserManagement>();
103 m_scene.EventManager.OnRegisterCaps += RegisterCaps;
104 }
105
106 public virtual void PostInitialise()
107 {
108 }
109
110 public virtual void Close() { }
111
112 public virtual string Name { get { return "GetDisplayNamesModule"; } }
113
114 public virtual Type ReplaceableInterface
115 {
116 get { return null; }
117 }
118
119 #endregion
120
121 public virtual void RegisterCaps(UUID agentID, Caps caps)
122 {
123 if (m_URL == "localhost")
124 {
125 string capUrl = "/CAPS/" + UUID.Random() + "/";
126// m_log.DebugFormat("[GET_DISPLAY_NAMES]: {0} in region {1}", capUrl, m_scene.RegionInfo.RegionName);
127 caps.RegisterHandler(
128 "GetDisplayNames",
129 new GetDisplayNamesHandler(capUrl, m_UserManager, "GetDisplayNames", agentID.ToString()));
130 }
131 else
132 {
133// m_log.DebugFormat("[GETTEXTURE]: {0} in region {1}", m_URL, m_scene.RegionInfo.RegionName);
134 IExternalCapsModule handler = m_scene.RequestModuleInterface<IExternalCapsModule>();
135 if (handler != null)
136 handler.RegisterExternalUserCapsHandler(agentID,caps,"GetDisplayNames", m_URL);
137 else
138 caps.RegisterHandler("GetDisplayNames", m_URL);
139 }
140 }
141
142 }
143}