aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorDiva Canto2009-09-04 22:30:30 -0700
committerDiva Canto2009-09-04 22:30:30 -0700
commitc48ec978179ade68cf816e3134e11ddde71f8bfc (patch)
tree1e5821597bfb97a84f75789d78f67dd4c2b73fb0 /OpenSim/Region
parentAdd ids to iar requests (diff)
downloadopensim-SC-c48ec978179ade68cf816e3134e11ddde71f8bfc.zip
opensim-SC-c48ec978179ade68cf816e3134e11ddde71f8bfc.tar.gz
opensim-SC-c48ec978179ade68cf816e3134e11ddde71f8bfc.tar.bz2
opensim-SC-c48ec978179ade68cf816e3134e11ddde71f8bfc.tar.xz
Fixed some long-standing issues with appearance in HG1.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs2
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGCommunicationsStandalone.cs2
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGUserDataPlugin.cs72
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGUserServices.cs2
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1UserDataPlugin.cs10
-rw-r--r--OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs62
-rw-r--r--OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs36
7 files changed, 162 insertions, 24 deletions
diff --git a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs
index 381070e..80f2e79 100644
--- a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs
+++ b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsGridMode.cs
@@ -59,7 +59,7 @@ namespace OpenSim.Region.Communications.Hypergrid
59 HGUserServices userServices = new HGUserServices(this); 59 HGUserServices userServices = new HGUserServices(this);
60 // This plugin arrangement could eventually be configurable rather than hardcoded here. 60 // This plugin arrangement could eventually be configurable rather than hardcoded here.
61 userServices.AddPlugin(new TemporaryUserProfilePlugin()); 61 userServices.AddPlugin(new TemporaryUserProfilePlugin());
62 userServices.AddPlugin(new OGS1UserDataPlugin(this)); 62 userServices.AddPlugin(new HGUserDataPlugin(this, userServices));
63 63
64 m_userService = userServices; 64 m_userService = userServices;
65 m_messageService = userServices; 65 m_messageService = userServices;
diff --git a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsStandalone.cs b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsStandalone.cs
index 568437d..e4e12d4 100644
--- a/OpenSim/Region/Communications/Hypergrid/HGCommunicationsStandalone.cs
+++ b/OpenSim/Region/Communications/Hypergrid/HGCommunicationsStandalone.cs
@@ -57,7 +57,7 @@ namespace OpenSim.Region.Communications.Hypergrid
57 HGUserServices hgUserService = new HGUserServices(this, localUserService); 57 HGUserServices hgUserService = new HGUserServices(this, localUserService);
58 // This plugin arrangement could eventually be configurable rather than hardcoded here. 58 // This plugin arrangement could eventually be configurable rather than hardcoded here.
59 hgUserService.AddPlugin(new TemporaryUserProfilePlugin()); 59 hgUserService.AddPlugin(new TemporaryUserProfilePlugin());
60 hgUserService.AddPlugin(new OGS1UserDataPlugin(this)); 60 hgUserService.AddPlugin(new HGUserDataPlugin(this, hgUserService));
61 61
62 m_userService = hgUserService; 62 m_userService = hgUserService;
63 m_userAdminService = hgUserService; 63 m_userAdminService = hgUserService;
diff --git a/OpenSim/Region/Communications/Hypergrid/HGUserDataPlugin.cs b/OpenSim/Region/Communications/Hypergrid/HGUserDataPlugin.cs
new file mode 100644
index 0000000..4b8fc26
--- /dev/null
+++ b/OpenSim/Region/Communications/Hypergrid/HGUserDataPlugin.cs
@@ -0,0 +1,72 @@
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.Generic;
31using System.Net;
32using System.Reflection;
33using System.Text.RegularExpressions;
34using System.Xml.Serialization;
35using log4net;
36using Nwc.XmlRpc;
37using OpenMetaverse;
38using OpenSim.Data;
39using OpenSim.Framework;
40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Clients;
42using OpenSim.Region.Communications.OGS1;
43
44namespace OpenSim.Region.Communications.Hypergrid
45{
46 public class HGUserDataPlugin : OGS1UserDataPlugin
47 {
48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49
50 HGUserServices m_UserServices;
51
52 public HGUserDataPlugin()
53 {
54 }
55
56 public HGUserDataPlugin(CommunicationsManager commsManager, HGUserServices userServices)
57 {
58 m_log.DebugFormat("[HG USER SERVICES]: {0} initialized", Name);
59 m_commsManager = commsManager;
60 m_UserServices = userServices;
61 }
62
63 protected override string GetUserServerURL(UUID userID)
64 {
65 string url = string.Empty;
66 if (m_UserServices.IsForeignUser(userID, out url))
67 return url;
68 return m_commsManager.NetworkServersInfo.UserURL;
69 }
70
71 }
72}
diff --git a/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs b/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs
index 68a9076..aaa1c78 100644
--- a/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs
+++ b/OpenSim/Region/Communications/Hypergrid/HGUserServices.cs
@@ -311,7 +311,7 @@ namespace OpenSim.Region.Communications.Hypergrid
311 return m_commsManager.NetworkServersInfo.UserURL; 311 return m_commsManager.NetworkServersInfo.UserURL;
312 } 312 }
313 313
314 private bool IsForeignUser(UUID userID, out string userServerURL) 314 public bool IsForeignUser(UUID userID, out string userServerURL)
315 { 315 {
316 userServerURL = string.Empty; 316 userServerURL = string.Empty;
317 CachedUserInfo uinfo = m_commsManager.UserProfileCacheService.GetUserDetails(userID); 317 CachedUserInfo uinfo = m_commsManager.UserProfileCacheService.GetUserDetails(userID);
diff --git a/OpenSim/Region/Communications/OGS1/OGS1UserDataPlugin.cs b/OpenSim/Region/Communications/OGS1/OGS1UserDataPlugin.cs
index 9f234be..92e6ae3 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1UserDataPlugin.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1UserDataPlugin.cs
@@ -48,6 +48,10 @@ namespace OpenSim.Region.Communications.OGS1
48 48
49 protected CommunicationsManager m_commsManager; 49 protected CommunicationsManager m_commsManager;
50 50
51 public OGS1UserDataPlugin()
52 {
53 }
54
51 public OGS1UserDataPlugin(CommunicationsManager commsManager) 55 public OGS1UserDataPlugin(CommunicationsManager commsManager)
52 { 56 {
53 m_log.DebugFormat("[OGS1 USER SERVICES]: {0} initialized", Name); 57 m_log.DebugFormat("[OGS1 USER SERVICES]: {0} initialized", Name);
@@ -603,7 +607,7 @@ namespace OpenSim.Region.Communications.OGS1
603 { 607 {
604 if ((string)respData["returnString"] == "TRUE") 608 if ((string)respData["returnString"] == "TRUE")
605 { 609 {
606 610 m_log.DebugFormat("[OGS1 USER SERVICES]: Updated user appearance in {0}", GetUserServerURL(user));
607 } 611 }
608 else 612 else
609 { 613 {
@@ -622,8 +626,8 @@ namespace OpenSim.Region.Communications.OGS1
622 } 626 }
623 catch (WebException e) 627 catch (WebException e)
624 { 628 {
625 m_log.Warn("[OGS1 USER SERVICES]: Error when trying to update Avatar's appearance: " + 629 m_log.WarnFormat("[OGS1 USER SERVICES]: Error when trying to update Avatar's appearance in {0}: {1}",
626 e.Message); 630 GetUserServerURL(user), e.Message);
627 // Return Empty list (no friends) 631 // Return Empty list (no friends)
628 } 632 }
629 } 633 }
diff --git a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs
index a5894c6..613dbe9 100644
--- a/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs
+++ b/OpenSim/Region/CoreModules/Hypergrid/HGStandaloneLoginModule.cs
@@ -34,6 +34,7 @@ using System.Text.RegularExpressions;
34using log4net; 34using log4net;
35using Nini.Config; 35using Nini.Config;
36using OpenMetaverse; 36using OpenMetaverse;
37using Nwc.XmlRpc;
37using OpenSim.Framework; 38using OpenSim.Framework;
38using OpenSim.Framework.Communications; 39using OpenSim.Framework.Communications;
39using OpenSim.Framework.Communications.Services; 40using OpenSim.Framework.Communications.Services;
@@ -115,6 +116,8 @@ namespace OpenSim.Region.CoreModules.Hypergrid
115 116
116 httpServer.AddXmlRPCHandler("hg_login", m_loginService.XmlRpcLoginMethod); 117 httpServer.AddXmlRPCHandler("hg_login", m_loginService.XmlRpcLoginMethod);
117 httpServer.AddXmlRPCHandler("check_auth_session", m_loginService.XmlRPCCheckAuthSession, false); 118 httpServer.AddXmlRPCHandler("check_auth_session", m_loginService.XmlRPCCheckAuthSession, false);
119 httpServer.AddXmlRPCHandler("get_avatar_appearance", XmlRPCGetAvatarAppearance);
120 httpServer.AddXmlRPCHandler("update_avatar_appearance", XmlRPCUpdateAvatarAppearance);
118 121
119 } 122 }
120 } 123 }
@@ -256,5 +259,64 @@ namespace OpenSim.Region.CoreModules.Hypergrid
256 scene = null; 259 scene = null;
257 return false; 260 return false;
258 } 261 }
262
263 public XmlRpcResponse XmlRPCGetAvatarAppearance(XmlRpcRequest request, IPEndPoint remoteClient)
264 {
265 XmlRpcResponse response = new XmlRpcResponse();
266 Hashtable requestData = (Hashtable)request.Params[0];
267 AvatarAppearance appearance;
268 Hashtable responseData;
269 if (requestData.Contains("owner"))
270 {
271 appearance = m_firstScene.CommsManager.AvatarService.GetUserAppearance(new UUID((string)requestData["owner"]));
272 if (appearance == null)
273 {
274 responseData = new Hashtable();
275 responseData["error_type"] = "no appearance";
276 responseData["error_desc"] = "There was no appearance found for this avatar";
277 }
278 else
279 {
280 responseData = appearance.ToHashTable();
281 }
282 }
283 else
284 {
285 responseData = new Hashtable();
286 responseData["error_type"] = "unknown_avatar";
287 responseData["error_desc"] = "The avatar appearance requested is not in the database";
288 }
289
290 response.Value = responseData;
291 return response;
292 }
293
294 public XmlRpcResponse XmlRPCUpdateAvatarAppearance(XmlRpcRequest request, IPEndPoint remoteClient)
295 {
296 XmlRpcResponse response = new XmlRpcResponse();
297 Hashtable requestData = (Hashtable)request.Params[0];
298 Hashtable responseData;
299 if (requestData.Contains("owner"))
300 {
301 AvatarAppearance appearance = new AvatarAppearance(requestData);
302
303 // TODO: Sometime in the future we may have a database layer that is capable of updating appearance when
304 // the TextureEntry is null. When that happens, this check can be removed
305 if (appearance.Texture != null)
306 m_firstScene.CommsManager.AvatarService.UpdateUserAppearance(new UUID((string)requestData["owner"]), appearance);
307
308 responseData = new Hashtable();
309 responseData["returnString"] = "TRUE";
310 }
311 else
312 {
313 responseData = new Hashtable();
314 responseData["error_type"] = "unknown_avatar";
315 responseData["error_desc"] = "The avatar appearance requested is not in the database";
316 }
317 response.Value = responseData;
318 return response;
319 }
259 } 320 }
321
260} 322}
diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
index dd6928f..8fe3565 100644
--- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
@@ -113,26 +113,26 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
113 UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, 113 UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
114 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) 114 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
115 { 115 {
116 //m_log.DebugFormat("[HGScene] RezObject itemID={0} fromTaskID={1}", itemID, fromTaskID); 116 m_log.DebugFormat("[HGScene] RezObject itemID={0} fromTaskID={1}", itemID, fromTaskID);
117 117
118 if (fromTaskID.Equals(UUID.Zero)) 118 //if (fromTaskID.Equals(UUID.Zero))
119 //{
120 InventoryItemBase item = new InventoryItemBase(itemID);
121 item.Owner = remoteClient.AgentId;
122 item = InventoryService.GetItem(item);
123 //if (item == null)
124 //{ // Fetch the item
125 // item = new InventoryItemBase();
126 // item.Owner = remoteClient.AgentId;
127 // item.ID = itemID;
128 // item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo);
129 //}
130 if (item != null)
119 { 131 {
120 InventoryItemBase item = new InventoryItemBase(itemID); 132 m_assMapper.Get(item.AssetID, remoteClient.AgentId);
121 item.Owner = remoteClient.AgentId; 133
122 item = InventoryService.GetItem(item);
123 //if (item == null)
124 //{ // Fetch the item
125 // item = new InventoryItemBase();
126 // item.Owner = remoteClient.AgentId;
127 // item.ID = itemID;
128 // item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo);
129 //}
130 if (item != null)
131 {
132 m_assMapper.Get(item.AssetID, remoteClient.AgentId);
133
134 }
135 } 134 }
135 //}
136 136
137 // OK, we're done fetching. Pass it up to the default RezObject 137 // OK, we're done fetching. Pass it up to the default RezObject
138 return base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, 138 return base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,