OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
GetDisplayNamesHandler.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;
30 using System.Collections.Generic;
31 using System.Collections.Specialized;
32 using System.Drawing;
33 using System.Drawing.Imaging;
34 using System.Reflection;
35 using System.IO;
36 using System.Web;
37 using log4net;
38 using Nini.Config;
39 using OpenMetaverse;
40 using OpenMetaverse.StructuredData;
41 using OpenMetaverse.Imaging;
42 using OpenSim.Framework;
43 using OpenSim.Framework.Capabilities;
44 using OpenSim.Framework.Servers;
45 using OpenSim.Framework.Servers.HttpServer;
46 using OpenSim.Region.Framework.Interfaces;
47 using OpenSim.Services.Interfaces;
51 
52 namespace OpenSim.Capabilities.Handlers
53 {
55  {
56  private static readonly ILog m_log =
57  LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
58  private IUserManagement m_UserManagement;
59 
60  public GetDisplayNamesHandler(string path, IUserManagement umService, string name, string description)
61  : base("GET", path, name, description)
62  {
63  m_UserManagement = umService;
64  }
65 
66  protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
67  {
68 // m_log.DebugFormat("[GET_DISPLAY_NAMES]: called {0}", httpRequest.Url.Query);
69 
70  NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query);
71  string[] ids = query.GetValues("ids");
72 
73 
74  if (m_UserManagement == null)
75  {
76  m_log.Error("[GET_DISPLAY_NAMES]: Cannot fetch display names without a user management component");
77  httpResponse.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
78  return new byte[0];
79  }
80 
81  OSDMap osdReply = new OSDMap();
82  OSDArray agents = new OSDArray();
83 
84  osdReply["agents"] = agents;
85  foreach (string id in ids)
86  {
87  UUID uuid = UUID.Zero;
88  if (UUID.TryParse(id, out uuid))
89  {
90  string name = m_UserManagement.GetUserName(uuid);
91  if (!string.IsNullOrEmpty(name))
92  {
93  string[] parts = name.Split(new char[] {' '});
94  OSDMap osdname = new OSDMap();
95  // a date that is valid
96 // osdname["display_name_next_update"] = OSD.FromDate(new DateTime(1970,1,1));
97  // but send one that blocks edition, since we actually don't suport this
98  osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8));
99  osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1));
100  osdname["display_name"] = OSD.FromString(name);
101  osdname["legacy_first_name"] = parts[0];
102  osdname["legacy_last_name"] = parts[1];
103  osdname["username"] = OSD.FromString(name);
104  osdname["id"] = OSD.FromUUID(uuid);
105  osdname["is_display_name_default"] = OSD.FromBoolean(true);
106 
107  agents.Add(osdname);
108  }
109  }
110  }
111 
112  // Full content request
113  httpResponse.StatusCode = (int)System.Net.HttpStatusCode.OK;
114  //httpResponse.ContentLength = ??;
115  httpResponse.ContentType = "application/llsd+xml";
116 
117  string reply = OSDParser.SerializeLLSDXmlString(osdReply);
118  return System.Text.Encoding.UTF8.GetBytes(reply);
119 
120  }
121 
122  }
123 }
OpenMetaverse.StructuredData.OSDArray OSDArray
GetDisplayNamesHandler(string path, IUserManagement umService, string name, string description)
OpenMetaverse.StructuredData.OSDMap OSDMap
OpenSim.Framework.Capabilities.Caps Caps
override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
This maintains the relationship between a UUID and a user name.