aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs398
-rw-r--r--OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneInventoryService.cs630
-rw-r--r--OpenSim/Region/Environment/Modules/Hypergrid/HGWorldMapModule.cs356
-rw-r--r--OpenSim/Region/Environment/Scenes/EntityManager.cs364
-rw-r--r--OpenSim/Region/Environment/Scenes/Hypergrid/HGAssetMapper.cs754
-rw-r--r--OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.Inventory.cs304
-rw-r--r--OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.cs156
-rw-r--r--OpenSim/Region/Environment/Scenes/Hypergrid/HGSceneCommunicationService.cs526
8 files changed, 1744 insertions, 1744 deletions
diff --git a/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
index 192904c..d090052 100644
--- a/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
+++ b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
@@ -1,200 +1,200 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Net; 31using System.Net;
32using System.Reflection; 32using System.Reflection;
33 33
34using log4net; 34using log4net;
35using Nini.Config; 35using Nini.Config;
36 36
37using OpenMetaverse; 37using OpenMetaverse;
38 38
39using OpenSim.Framework; 39using OpenSim.Framework;
40using OpenSim.Framework.Communications; 40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Cache; 41using OpenSim.Framework.Communications.Cache;
42using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
43using OpenSim.Region.Environment.Interfaces; 43using OpenSim.Region.Environment.Interfaces;
44using OpenSim.Region.Environment.Scenes; 44using OpenSim.Region.Environment.Scenes;
45using OpenSim.Grid.AssetServer; 45using OpenSim.Grid.AssetServer;
46 46
47namespace OpenSim.Region.Environment.Modules.Hypergrid 47namespace OpenSim.Region.Environment.Modules.Hypergrid
48{ 48{
49 public class HGStandaloneAssetService : IRegionModule 49 public class HGStandaloneAssetService : IRegionModule
50 { 50 {
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 private static bool initialized = false; 52 private static bool initialized = false;
53 private static bool enabled = false; 53 private static bool enabled = false;
54 54
55 Scene m_scene; 55 Scene m_scene;
56 //AssetService m_assetService; 56 //AssetService m_assetService;
57 57
58 #region IRegionModule interface 58 #region IRegionModule interface
59 59
60 public void Initialise(Scene scene, IConfigSource config) 60 public void Initialise(Scene scene, IConfigSource config)
61 { 61 {
62 if (!initialized) 62 if (!initialized)
63 { 63 {
64 initialized = true; 64 initialized = true;
65 m_scene = scene; 65 m_scene = scene;
66 66
67 // This module is only on for standalones in hypergrid mode 67 // This module is only on for standalones in hypergrid mode
68 enabled = !config.Configs["Startup"].GetBoolean("gridmode", true) && config.Configs["Startup"].GetBoolean("hypergrid", false); 68 enabled = !config.Configs["Startup"].GetBoolean("gridmode", true) && config.Configs["Startup"].GetBoolean("hypergrid", false);
69 } 69 }
70 } 70 }
71 71
72 public void PostInitialise() 72 public void PostInitialise()
73 { 73 {
74 if (enabled) 74 if (enabled)
75 { 75 {
76 m_log.Info("[HGStandaloneAssetService]: Starting..."); 76 m_log.Info("[HGStandaloneAssetService]: Starting...");
77 77
78 //m_assetService = new AssetService(m_scene); 78 //m_assetService = new AssetService(m_scene);
79 new AssetService(m_scene); 79 new AssetService(m_scene);
80 } 80 }
81 } 81 }
82 82
83 public void Close() 83 public void Close()
84 { 84 {
85 } 85 }
86 86
87 public string Name 87 public string Name
88 { 88 {
89 get { return "HGStandaloneAssetService"; } 89 get { return "HGStandaloneAssetService"; }
90 } 90 }
91 91
92 public bool IsSharedModule 92 public bool IsSharedModule
93 { 93 {
94 get { return true; } 94 get { return true; }
95 } 95 }
96 96
97 #endregion 97 #endregion
98 98
99 } 99 }
100 100
101 public class AssetService 101 public class AssetService
102 { 102 {
103 private IUserService m_userService; 103 private IUserService m_userService;
104 private bool m_doLookup = false; 104 private bool m_doLookup = false;
105 105
106 public bool DoLookup 106 public bool DoLookup
107 { 107 {
108 get { return m_doLookup; } 108 get { return m_doLookup; }
109 set { m_doLookup = value; } 109 set { m_doLookup = value; }
110 } 110 }
111 private static readonly ILog m_log 111 private static readonly ILog m_log
112 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 112 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
113 113
114 public AssetService(Scene m_scene) 114 public AssetService(Scene m_scene)
115 { 115 {
116 AddHttpHandlers(m_scene); 116 AddHttpHandlers(m_scene);
117 m_userService = m_scene.CommsManager.UserService; 117 m_userService = m_scene.CommsManager.UserService;
118 } 118 }
119 119
120 protected void AddHttpHandlers(Scene m_scene) 120 protected void AddHttpHandlers(Scene m_scene)
121 { 121 {
122 IAssetProviderPlugin m_assetProvider = ((AssetServerBase)m_scene.AssetCache.AssetServer).AssetProviderPlugin; 122 IAssetProviderPlugin m_assetProvider = ((AssetServerBase)m_scene.AssetCache.AssetServer).AssetProviderPlugin;
123 123
124 m_scene.AddStreamHandler(new GetAssetStreamHandler(m_assetProvider)); 124 m_scene.AddStreamHandler(new GetAssetStreamHandler(m_assetProvider));
125 m_scene.AddStreamHandler(new PostAssetStreamHandler(m_assetProvider)); 125 m_scene.AddStreamHandler(new PostAssetStreamHandler(m_assetProvider));
126 126
127 } 127 }
128 128
129 129
130 ///// <summary> 130 ///// <summary>
131 ///// Check that the source of an inventory request is one that we trust. 131 ///// Check that the source of an inventory request is one that we trust.
132 ///// </summary> 132 ///// </summary>
133 ///// <param name="peer"></param> 133 ///// <param name="peer"></param>
134 ///// <returns></returns> 134 ///// <returns></returns>
135 //public bool CheckTrustSource(IPEndPoint peer) 135 //public bool CheckTrustSource(IPEndPoint peer)
136 //{ 136 //{
137 // if (m_doLookup) 137 // if (m_doLookup)
138 // { 138 // {
139 // m_log.InfoFormat("[GRID AGENT INVENTORY]: Checking trusted source {0}", peer); 139 // m_log.InfoFormat("[GRID AGENT INVENTORY]: Checking trusted source {0}", peer);
140 // UriBuilder ub = new UriBuilder(m_userserver_url); 140 // UriBuilder ub = new UriBuilder(m_userserver_url);
141 // IPAddress[] uaddrs = Dns.GetHostAddresses(ub.Host); 141 // IPAddress[] uaddrs = Dns.GetHostAddresses(ub.Host);
142 // foreach (IPAddress uaddr in uaddrs) 142 // foreach (IPAddress uaddr in uaddrs)
143 // { 143 // {
144 // if (uaddr.Equals(peer.Address)) 144 // if (uaddr.Equals(peer.Address))
145 // { 145 // {
146 // return true; 146 // return true;
147 // } 147 // }
148 // } 148 // }
149 149
150 // m_log.WarnFormat( 150 // m_log.WarnFormat(
151 // "[GRID AGENT INVENTORY]: Rejecting request since source {0} was not in the list of trusted sources", 151 // "[GRID AGENT INVENTORY]: Rejecting request since source {0} was not in the list of trusted sources",
152 // peer); 152 // peer);
153 153
154 // return false; 154 // return false;
155 // } 155 // }
156 // else 156 // else
157 // { 157 // {
158 // return true; 158 // return true;
159 // } 159 // }
160 //} 160 //}
161 161
162 /// <summary> 162 /// <summary>
163 /// Check that the source of an inventory request for a particular agent is a current session belonging to 163 /// Check that the source of an inventory request for a particular agent is a current session belonging to
164 /// that agent. 164 /// that agent.
165 /// </summary> 165 /// </summary>
166 /// <param name="session_id"></param> 166 /// <param name="session_id"></param>
167 /// <param name="avatar_id"></param> 167 /// <param name="avatar_id"></param>
168 /// <returns></returns> 168 /// <returns></returns>
169 public bool CheckAuthSession(string session_id, string avatar_id) 169 public bool CheckAuthSession(string session_id, string avatar_id)
170 { 170 {
171 if (m_doLookup) 171 if (m_doLookup)
172 { 172 {
173 m_log.InfoFormat("[HGStandaloneInvService]: checking authed session {0} {1}", session_id, avatar_id); 173 m_log.InfoFormat("[HGStandaloneInvService]: checking authed session {0} {1}", session_id, avatar_id);
174 UUID userID = UUID.Zero; 174 UUID userID = UUID.Zero;
175 UUID sessionID = UUID.Zero; 175 UUID sessionID = UUID.Zero;
176 UUID.TryParse(avatar_id, out userID); 176 UUID.TryParse(avatar_id, out userID);
177 UUID.TryParse(session_id, out sessionID); 177 UUID.TryParse(session_id, out sessionID);
178 if (userID.Equals(UUID.Zero) || sessionID.Equals(UUID.Zero)) 178 if (userID.Equals(UUID.Zero) || sessionID.Equals(UUID.Zero))
179 { 179 {
180 m_log.Info("[HGStandaloneInvService]: Invalid user or session id " + avatar_id + "; " + session_id); 180 m_log.Info("[HGStandaloneInvService]: Invalid user or session id " + avatar_id + "; " + session_id);
181 return false; 181 return false;
182 } 182 }
183 UserProfileData userProfile = m_userService.GetUserProfile(userID); 183 UserProfileData userProfile = m_userService.GetUserProfile(userID);
184 if (userProfile != null && userProfile.CurrentAgent != null && 184 if (userProfile != null && userProfile.CurrentAgent != null &&
185 userProfile.CurrentAgent.SessionID == sessionID) 185 userProfile.CurrentAgent.SessionID == sessionID)
186 { 186 {
187 m_log.Info("[HGStandaloneInvService]: user is logged in and session is valid. Authorizing access."); 187 m_log.Info("[HGStandaloneInvService]: user is logged in and session is valid. Authorizing access.");
188 return true; 188 return true;
189 } 189 }
190 190
191 m_log.Warn("[HGStandaloneInvService]: unknown user or session_id, request rejected"); 191 m_log.Warn("[HGStandaloneInvService]: unknown user or session_id, request rejected");
192 return false; 192 return false;
193 } 193 }
194 else 194 else
195 { 195 {
196 return true; 196 return true;
197 } 197 }
198 } 198 }
199 } 199 }
200} 200}
diff --git a/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneInventoryService.cs b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneInventoryService.cs
index 7eeece9..bfdbcfc 100644
--- a/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneInventoryService.cs
+++ b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneInventoryService.cs
@@ -1,316 +1,316 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Net; 31using System.Net;
32using System.Reflection; 32using System.Reflection;
33 33
34using log4net; 34using log4net;
35using Nini.Config; 35using Nini.Config;
36 36
37using OpenMetaverse; 37using OpenMetaverse;
38 38
39using OpenSim.Framework; 39using OpenSim.Framework;
40using OpenSim.Framework.Communications; 40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Cache; 41using OpenSim.Framework.Communications.Cache;
42using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
43using OpenSim.Region.Environment.Interfaces; 43using OpenSim.Region.Environment.Interfaces;
44using OpenSim.Region.Environment.Scenes; 44using OpenSim.Region.Environment.Scenes;
45 45
46namespace OpenSim.Region.Environment.Modules.Hypergrid 46namespace OpenSim.Region.Environment.Modules.Hypergrid
47{ 47{
48 public class HGStandaloneInventoryService : IRegionModule 48 public class HGStandaloneInventoryService : IRegionModule
49 { 49 {
50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
51 private static bool initialized = false; 51 private static bool initialized = false;
52 private static bool enabled = false; 52 private static bool enabled = false;
53 53
54 Scene m_scene; 54 Scene m_scene;
55 //InventoryService m_inventoryService; 55 //InventoryService m_inventoryService;
56 56
57 #region IRegionModule interface 57 #region IRegionModule interface
58 58
59 public void Initialise(Scene scene, IConfigSource config) 59 public void Initialise(Scene scene, IConfigSource config)
60 { 60 {
61 if (!initialized) 61 if (!initialized)
62 { 62 {
63 initialized = true; 63 initialized = true;
64 m_scene = scene; 64 m_scene = scene;
65 65
66 // This module is only on for standalones 66 // This module is only on for standalones
67 enabled = !config.Configs["Startup"].GetBoolean("gridmode", true) && config.Configs["Startup"].GetBoolean("hypergrid", false); 67 enabled = !config.Configs["Startup"].GetBoolean("gridmode", true) && config.Configs["Startup"].GetBoolean("hypergrid", false);
68 } 68 }
69 } 69 }
70 70
71 public void PostInitialise() 71 public void PostInitialise()
72 { 72 {
73 if (enabled) 73 if (enabled)
74 { 74 {
75 m_log.Info("[HGStandaloneInvService]: Starting..."); 75 m_log.Info("[HGStandaloneInvService]: Starting...");
76 //m_inventoryService = new InventoryService(m_scene); 76 //m_inventoryService = new InventoryService(m_scene);
77 new InventoryService(m_scene); 77 new InventoryService(m_scene);
78 } 78 }
79 } 79 }
80 80
81 public void Close() 81 public void Close()
82 { 82 {
83 } 83 }
84 84
85 public string Name 85 public string Name
86 { 86 {
87 get { return "HGStandaloneInventoryService"; } 87 get { return "HGStandaloneInventoryService"; }
88 } 88 }
89 89
90 public bool IsSharedModule 90 public bool IsSharedModule
91 { 91 {
92 get { return true; } 92 get { return true; }
93 } 93 }
94 94
95 #endregion 95 #endregion
96 96
97 } 97 }
98 98
99 public class InventoryService 99 public class InventoryService
100 { 100 {
101 private InventoryServiceBase m_inventoryService; 101 private InventoryServiceBase m_inventoryService;
102 private IUserService m_userService; 102 private IUserService m_userService;
103 private bool m_doLookup = false; 103 private bool m_doLookup = false;
104 104
105 public bool DoLookup 105 public bool DoLookup
106 { 106 {
107 get { return m_doLookup; } 107 get { return m_doLookup; }
108 set { m_doLookup = value; } 108 set { m_doLookup = value; }
109 } 109 }
110 private static readonly ILog m_log 110 private static readonly ILog m_log
111 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 111 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
112 112
113 public InventoryService(Scene m_scene) 113 public InventoryService(Scene m_scene)
114 { 114 {
115 m_inventoryService = (InventoryServiceBase)m_scene.CommsManager.SecureInventoryService; 115 m_inventoryService = (InventoryServiceBase)m_scene.CommsManager.SecureInventoryService;
116 m_userService = m_scene.CommsManager.UserService; 116 m_userService = m_scene.CommsManager.UserService;
117 AddHttpHandlers(m_scene); 117 AddHttpHandlers(m_scene);
118 118
119 } 119 }
120 120
121 protected void AddHttpHandlers(Scene m_scene) 121 protected void AddHttpHandlers(Scene m_scene)
122 { 122 {
123 m_scene.AddStreamHandler( 123 m_scene.AddStreamHandler(
124 new RestDeserialiseSecureHandler<Guid, InventoryCollection>( 124 new RestDeserialiseSecureHandler<Guid, InventoryCollection>(
125 "POST", "/GetInventory/", GetUserInventory, CheckAuthSession)); 125 "POST", "/GetInventory/", GetUserInventory, CheckAuthSession));
126 126
127 m_scene.AddStreamHandler( 127 m_scene.AddStreamHandler(
128 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( 128 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>(
129 "POST", "/NewFolder/", m_inventoryService.AddFolder, CheckAuthSession)); 129 "POST", "/NewFolder/", m_inventoryService.AddFolder, CheckAuthSession));
130 130
131 m_scene.AddStreamHandler( 131 m_scene.AddStreamHandler(
132 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( 132 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>(
133 "POST", "/UpdateFolder/", m_inventoryService.UpdateFolder, CheckAuthSession)); 133 "POST", "/UpdateFolder/", m_inventoryService.UpdateFolder, CheckAuthSession));
134 134
135 m_scene.AddStreamHandler( 135 m_scene.AddStreamHandler(
136 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( 136 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>(
137 "POST", "/MoveFolder/", m_inventoryService.MoveFolder, CheckAuthSession)); 137 "POST", "/MoveFolder/", m_inventoryService.MoveFolder, CheckAuthSession));
138 138
139 m_scene.AddStreamHandler( 139 m_scene.AddStreamHandler(
140 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>( 140 new RestDeserialiseSecureHandler<InventoryFolderBase, bool>(
141 "POST", "/PurgeFolder/", m_inventoryService.PurgeFolder, CheckAuthSession)); 141 "POST", "/PurgeFolder/", m_inventoryService.PurgeFolder, CheckAuthSession));
142 142
143 m_scene.AddStreamHandler( 143 m_scene.AddStreamHandler(
144 new RestDeserialiseSecureHandler<InventoryItemBase, bool>( 144 new RestDeserialiseSecureHandler<InventoryItemBase, bool>(
145 "POST", "/NewItem/", m_inventoryService.AddItem, CheckAuthSession)); 145 "POST", "/NewItem/", m_inventoryService.AddItem, CheckAuthSession));
146 146
147 m_scene.AddStreamHandler( 147 m_scene.AddStreamHandler(
148 new RestDeserialiseSecureHandler<InventoryItemBase, bool>( 148 new RestDeserialiseSecureHandler<InventoryItemBase, bool>(
149 "POST", "/DeleteItem/", m_inventoryService.DeleteItem, CheckAuthSession)); 149 "POST", "/DeleteItem/", m_inventoryService.DeleteItem, CheckAuthSession));
150 150
151 //// WARNING: Root folders no longer just delivers the root and immediate child folders (e.g 151 //// WARNING: Root folders no longer just delivers the root and immediate child folders (e.g
152 //// system folders such as Objects, Textures), but it now returns the entire inventory skeleton. 152 //// system folders such as Objects, Textures), but it now returns the entire inventory skeleton.
153 //// It would have been better to rename this request, but complexities in the BaseHttpServer 153 //// It would have been better to rename this request, but complexities in the BaseHttpServer
154 //// (e.g. any http request not found is automatically treated as an xmlrpc request) make it easier 154 //// (e.g. any http request not found is automatically treated as an xmlrpc request) make it easier
155 //// to do this for now. 155 //// to do this for now.
156 //m_scene.AddStreamHandler( 156 //m_scene.AddStreamHandler(
157 // new RestDeserialiseTrustedHandler<Guid, List<InventoryFolderBase>> 157 // new RestDeserialiseTrustedHandler<Guid, List<InventoryFolderBase>>
158 // ("POST", "/RootFolders/", GetInventorySkeleton, CheckTrustSource)); 158 // ("POST", "/RootFolders/", GetInventorySkeleton, CheckTrustSource));
159 159
160 //// for persistent active gestures 160 //// for persistent active gestures
161 //m_scene.AddStreamHandler( 161 //m_scene.AddStreamHandler(
162 // new RestDeserialiseTrustedHandler<Guid, List<InventoryItemBase>> 162 // new RestDeserialiseTrustedHandler<Guid, List<InventoryItemBase>>
163 // ("POST", "/ActiveGestures/", GetActiveGestures, CheckTrustSource)); 163 // ("POST", "/ActiveGestures/", GetActiveGestures, CheckTrustSource));
164 } 164 }
165 165
166 166
167 ///// <summary> 167 ///// <summary>
168 ///// Check that the source of an inventory request is one that we trust. 168 ///// Check that the source of an inventory request is one that we trust.
169 ///// </summary> 169 ///// </summary>
170 ///// <param name="peer"></param> 170 ///// <param name="peer"></param>
171 ///// <returns></returns> 171 ///// <returns></returns>
172 //public bool CheckTrustSource(IPEndPoint peer) 172 //public bool CheckTrustSource(IPEndPoint peer)
173 //{ 173 //{
174 // if (m_doLookup) 174 // if (m_doLookup)
175 // { 175 // {
176 // m_log.InfoFormat("[GRID AGENT INVENTORY]: Checking trusted source {0}", peer); 176 // m_log.InfoFormat("[GRID AGENT INVENTORY]: Checking trusted source {0}", peer);
177 // UriBuilder ub = new UriBuilder(m_userserver_url); 177 // UriBuilder ub = new UriBuilder(m_userserver_url);
178 // IPAddress[] uaddrs = Dns.GetHostAddresses(ub.Host); 178 // IPAddress[] uaddrs = Dns.GetHostAddresses(ub.Host);
179 // foreach (IPAddress uaddr in uaddrs) 179 // foreach (IPAddress uaddr in uaddrs)
180 // { 180 // {
181 // if (uaddr.Equals(peer.Address)) 181 // if (uaddr.Equals(peer.Address))
182 // { 182 // {
183 // return true; 183 // return true;
184 // } 184 // }
185 // } 185 // }
186 186
187 // m_log.WarnFormat( 187 // m_log.WarnFormat(
188 // "[GRID AGENT INVENTORY]: Rejecting request since source {0} was not in the list of trusted sources", 188 // "[GRID AGENT INVENTORY]: Rejecting request since source {0} was not in the list of trusted sources",
189 // peer); 189 // peer);
190 190
191 // return false; 191 // return false;
192 // } 192 // }
193 // else 193 // else
194 // { 194 // {
195 // return true; 195 // return true;
196 // } 196 // }
197 //} 197 //}
198 198
199 /// <summary> 199 /// <summary>
200 /// Check that the source of an inventory request for a particular agent is a current session belonging to 200 /// Check that the source of an inventory request for a particular agent is a current session belonging to
201 /// that agent. 201 /// that agent.
202 /// </summary> 202 /// </summary>
203 /// <param name="session_id"></param> 203 /// <param name="session_id"></param>
204 /// <param name="avatar_id"></param> 204 /// <param name="avatar_id"></param>
205 /// <returns></returns> 205 /// <returns></returns>
206 public bool CheckAuthSession(string session_id, string avatar_id) 206 public bool CheckAuthSession(string session_id, string avatar_id)
207 { 207 {
208 if (m_doLookup) 208 if (m_doLookup)
209 { 209 {
210 m_log.InfoFormat("[HGStandaloneInvService]: checking authed session {0} {1}", session_id, avatar_id); 210 m_log.InfoFormat("[HGStandaloneInvService]: checking authed session {0} {1}", session_id, avatar_id);
211 UUID userID = UUID.Zero; 211 UUID userID = UUID.Zero;
212 UUID sessionID = UUID.Zero; 212 UUID sessionID = UUID.Zero;
213 UUID.TryParse(avatar_id, out userID); 213 UUID.TryParse(avatar_id, out userID);
214 UUID.TryParse(session_id, out sessionID); 214 UUID.TryParse(session_id, out sessionID);
215 if (userID.Equals(UUID.Zero) || sessionID.Equals(UUID.Zero)) 215 if (userID.Equals(UUID.Zero) || sessionID.Equals(UUID.Zero))
216 { 216 {
217 m_log.Info("[HGStandaloneInvService]: Invalid user or session id " + avatar_id + "; " + session_id); 217 m_log.Info("[HGStandaloneInvService]: Invalid user or session id " + avatar_id + "; " + session_id);
218 return false; 218 return false;
219 } 219 }
220 UserProfileData userProfile = m_userService.GetUserProfile(userID); 220 UserProfileData userProfile = m_userService.GetUserProfile(userID);
221 if (userProfile != null && userProfile.CurrentAgent != null && 221 if (userProfile != null && userProfile.CurrentAgent != null &&
222 userProfile.CurrentAgent.SessionID == sessionID) 222 userProfile.CurrentAgent.SessionID == sessionID)
223 { 223 {
224 m_log.Info("[HGStandaloneInvService]: user is logged in and session is valid. Authorizing access."); 224 m_log.Info("[HGStandaloneInvService]: user is logged in and session is valid. Authorizing access.");
225 return true; 225 return true;
226 } 226 }
227 227
228 m_log.Warn("[HGStandaloneInvService]: unknown user or session_id, request rejected"); 228 m_log.Warn("[HGStandaloneInvService]: unknown user or session_id, request rejected");
229 return false; 229 return false;
230 } 230 }
231 else 231 else
232 { 232 {
233 return true; 233 return true;
234 } 234 }
235 } 235 }
236 236
237 237
238 /// <summary> 238 /// <summary>
239 /// Return a user's entire inventory 239 /// Return a user's entire inventory
240 /// </summary> 240 /// </summary>
241 /// <param name="rawUserID"></param> 241 /// <param name="rawUserID"></param>
242 /// <returns>The user's inventory. If an inventory cannot be found then an empty collection is returned.</returns> 242 /// <returns>The user's inventory. If an inventory cannot be found then an empty collection is returned.</returns>
243 public InventoryCollection GetUserInventory(Guid rawUserID) 243 public InventoryCollection GetUserInventory(Guid rawUserID)
244 { 244 {
245 UUID userID = new UUID(rawUserID); 245 UUID userID = new UUID(rawUserID);
246 246
247 m_log.Info("[HGStandaloneInvService]: Processing request for inventory of " + userID); 247 m_log.Info("[HGStandaloneInvService]: Processing request for inventory of " + userID);
248 248
249 // Uncomment me to simulate a slow responding inventory server 249 // Uncomment me to simulate a slow responding inventory server
250 //Thread.Sleep(16000); 250 //Thread.Sleep(16000);
251 251
252 InventoryCollection invCollection = new InventoryCollection(); 252 InventoryCollection invCollection = new InventoryCollection();
253 253
254 List<InventoryFolderBase> allFolders = ((InventoryServiceBase)m_inventoryService).GetInventorySkeleton(userID); 254 List<InventoryFolderBase> allFolders = ((InventoryServiceBase)m_inventoryService).GetInventorySkeleton(userID);
255 255
256 if (null == allFolders) 256 if (null == allFolders)
257 { 257 {
258 m_log.WarnFormat("[HGStandaloneInvService]: No inventory found for user {0}", rawUserID); 258 m_log.WarnFormat("[HGStandaloneInvService]: No inventory found for user {0}", rawUserID);
259 259
260 return invCollection; 260 return invCollection;
261 } 261 }
262 262
263 List<InventoryItemBase> allItems = new List<InventoryItemBase>(); 263 List<InventoryItemBase> allItems = new List<InventoryItemBase>();
264 264
265 foreach (InventoryFolderBase folder in allFolders) 265 foreach (InventoryFolderBase folder in allFolders)
266 { 266 {
267 List<InventoryItemBase> items = ((InventoryServiceBase)m_inventoryService).RequestFolderItems(folder.ID); 267 List<InventoryItemBase> items = ((InventoryServiceBase)m_inventoryService).RequestFolderItems(folder.ID);
268 268
269 if (items != null) 269 if (items != null)
270 { 270 {
271 allItems.InsertRange(0, items); 271 allItems.InsertRange(0, items);
272 } 272 }
273 } 273 }
274 274
275 invCollection.UserID = userID; 275 invCollection.UserID = userID;
276 invCollection.Folders = allFolders; 276 invCollection.Folders = allFolders;
277 invCollection.Items = allItems; 277 invCollection.Items = allItems;
278 278
279 // foreach (InventoryFolderBase folder in invCollection.Folders) 279 // foreach (InventoryFolderBase folder in invCollection.Folders)
280 // { 280 // {
281 // m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back folder {0} {1}", folder.Name, folder.ID); 281 // m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back folder {0} {1}", folder.Name, folder.ID);
282 // } 282 // }
283 // 283 //
284 // foreach (InventoryItemBase item in invCollection.Items) 284 // foreach (InventoryItemBase item in invCollection.Items)
285 // { 285 // {
286 // m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back item {0} {1}, folder {2}", item.Name, item.ID, item.Folder); 286 // m_log.DebugFormat("[GRID AGENT INVENTORY]: Sending back item {0} {1}, folder {2}", item.Name, item.ID, item.Folder);
287 // } 287 // }
288 288
289 m_log.InfoFormat( 289 m_log.InfoFormat(
290 "[HGStandaloneInvService]: Sending back inventory response to user {0} containing {1} folders and {2} items", 290 "[HGStandaloneInvService]: Sending back inventory response to user {0} containing {1} folders and {2} items",
291 invCollection.UserID, invCollection.Folders.Count, invCollection.Items.Count); 291 invCollection.UserID, invCollection.Folders.Count, invCollection.Items.Count);
292 292
293 return invCollection; 293 return invCollection;
294 } 294 }
295 295
296 /// <summary> 296 /// <summary>
297 /// Guid to UUID wrapper for same name IInventoryServices method 297 /// Guid to UUID wrapper for same name IInventoryServices method
298 /// </summary> 298 /// </summary>
299 /// <param name="rawUserID"></param> 299 /// <param name="rawUserID"></param>
300 /// <returns></returns> 300 /// <returns></returns>
301 public List<InventoryFolderBase> GetInventorySkeleton(Guid rawUserID) 301 public List<InventoryFolderBase> GetInventorySkeleton(Guid rawUserID)
302 { 302 {
303 UUID userID = new UUID(rawUserID); 303 UUID userID = new UUID(rawUserID);
304 return ((InventoryServiceBase)m_inventoryService).GetInventorySkeleton(userID); 304 return ((InventoryServiceBase)m_inventoryService).GetInventorySkeleton(userID);
305 } 305 }
306 306
307 public List<InventoryItemBase> GetActiveGestures(Guid rawUserID) 307 public List<InventoryItemBase> GetActiveGestures(Guid rawUserID)
308 { 308 {
309 UUID userID = new UUID(rawUserID); 309 UUID userID = new UUID(rawUserID);
310 310
311 m_log.InfoFormat("[HGStandaloneInvService]: fetching active gestures for user {0}", userID); 311 m_log.InfoFormat("[HGStandaloneInvService]: fetching active gestures for user {0}", userID);
312 312
313 return ((InventoryServiceBase)m_inventoryService).GetActiveGestures(userID); 313 return ((InventoryServiceBase)m_inventoryService).GetActiveGestures(userID);
314 } 314 }
315 } 315 }
316} 316}
diff --git a/OpenSim/Region/Environment/Modules/Hypergrid/HGWorldMapModule.cs b/OpenSim/Region/Environment/Modules/Hypergrid/HGWorldMapModule.cs
index 7f8f285..e642b7f 100644
--- a/OpenSim/Region/Environment/Modules/Hypergrid/HGWorldMapModule.cs
+++ b/OpenSim/Region/Environment/Modules/Hypergrid/HGWorldMapModule.cs
@@ -1,178 +1,178 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29 29
30using System; 30using System;
31using System.Collections; 31using System.Collections;
32using System.Collections.Generic; 32using System.Collections.Generic;
33using System.Drawing; 33using System.Drawing;
34using System.Drawing.Imaging; 34using System.Drawing.Imaging;
35using System.IO; 35using System.IO;
36using System.Net; 36using System.Net;
37using System.Reflection; 37using System.Reflection;
38using System.Threading; 38using System.Threading;
39using OpenMetaverse; 39using OpenMetaverse;
40using OpenMetaverse.Imaging; 40using OpenMetaverse.Imaging;
41using OpenMetaverse.StructuredData; 41using OpenMetaverse.StructuredData;
42using log4net; 42using log4net;
43using Nini.Config; 43using Nini.Config;
44using Nwc.XmlRpc; 44using Nwc.XmlRpc;
45 45
46using OpenSim.Framework; 46using OpenSim.Framework;
47using OpenSim.Framework.Communications.Cache; 47using OpenSim.Framework.Communications.Cache;
48using OpenSim.Framework.Communications.Capabilities; 48using OpenSim.Framework.Communications.Capabilities;
49using OpenSim.Framework.Servers; 49using OpenSim.Framework.Servers;
50using OpenSim.Region.Environment.Interfaces; 50using OpenSim.Region.Environment.Interfaces;
51using OpenSim.Region.Environment.Modules.World.WorldMap; 51using OpenSim.Region.Environment.Modules.World.WorldMap;
52using OpenSim.Region.Environment.Scenes; 52using OpenSim.Region.Environment.Scenes;
53using OpenSim.Region.Environment.Types; 53using OpenSim.Region.Environment.Types;
54using Caps = OpenSim.Framework.Communications.Capabilities.Caps; 54using Caps = OpenSim.Framework.Communications.Capabilities.Caps;
55 55
56using OSD = OpenMetaverse.StructuredData.OSD; 56using OSD = OpenMetaverse.StructuredData.OSD;
57using OSDMap = OpenMetaverse.StructuredData.OSDMap; 57using OSDMap = OpenMetaverse.StructuredData.OSDMap;
58using OSDArray = OpenMetaverse.StructuredData.OSDArray; 58using OSDArray = OpenMetaverse.StructuredData.OSDArray;
59 59
60namespace OpenSim.Region.Environment.Modules.Hypergrid 60namespace OpenSim.Region.Environment.Modules.Hypergrid
61{ 61{
62 public class HGWorldMapModule : WorldMapModule, IRegionModule 62 public class HGWorldMapModule : WorldMapModule, IRegionModule
63 { 63 {
64 private static readonly ILog m_log = 64 private static readonly ILog m_log =
65 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 65 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
66 66
67 #region IRegionModule Members 67 #region IRegionModule Members
68 68
69 public override void Initialise(Scene scene, IConfigSource config) 69 public override void Initialise(Scene scene, IConfigSource config)
70 { 70 {
71 IConfig startupConfig = config.Configs["Startup"]; 71 IConfig startupConfig = config.Configs["Startup"];
72 if (startupConfig.GetString("WorldMapModule", "WorldMap") == "HGWorldMap") 72 if (startupConfig.GetString("WorldMapModule", "WorldMap") == "HGWorldMap")
73 m_Enabled = true; 73 m_Enabled = true;
74 74
75 if (!m_Enabled) 75 if (!m_Enabled)
76 return; 76 return;
77 m_log.Info("[HGMap] Initializing..."); 77 m_log.Info("[HGMap] Initializing...");
78 m_scene = scene; 78 m_scene = scene;
79 } 79 }
80 80
81 81
82 public override string Name 82 public override string Name
83 { 83 {
84 get { return "HGWorldMap"; } 84 get { return "HGWorldMap"; }
85 } 85 }
86 86
87 87
88 #endregion 88 #endregion
89 89
90 /// <summary> 90 /// <summary>
91 /// Requests map blocks in area of minX, maxX, minY, MaxY in world cordinates 91 /// Requests map blocks in area of minX, maxX, minY, MaxY in world cordinates
92 /// </summary> 92 /// </summary>
93 /// <param name="minX"></param> 93 /// <param name="minX"></param>
94 /// <param name="minY"></param> 94 /// <param name="minY"></param>
95 /// <param name="maxX"></param> 95 /// <param name="maxX"></param>
96 /// <param name="maxY"></param> 96 /// <param name="maxY"></param>
97 public override void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag) 97 public override void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY, uint flag)
98 { 98 {
99 // 99 //
100 // WARNING!!! COPY & PASTE FROM SUPERCLASS 100 // WARNING!!! COPY & PASTE FROM SUPERCLASS
101 // The only difference is at the very end 101 // The only difference is at the very end
102 // 102 //
103 103
104 m_log.Info("[HGMap]: Request map blocks " + minX + "-" + maxX + " " + minY + "-" + maxY); 104 m_log.Info("[HGMap]: Request map blocks " + minX + "-" + maxX + " " + minY + "-" + maxY);
105 105
106 //m_scene.ForEachScenePresence(delegate (ScenePresence sp) { 106 //m_scene.ForEachScenePresence(delegate (ScenePresence sp) {
107 // if (!sp.IsChildAgent && sp.UUID == remoteClient.AgentId) 107 // if (!sp.IsChildAgent && sp.UUID == remoteClient.AgentId)
108 // { 108 // {
109 // Console.WriteLine("XXX Root agent"); 109 // Console.WriteLine("XXX Root agent");
110 // DoRequestMapBlocks(remoteClient, minX, minY, maxX, maxY, flag); 110 // DoRequestMapBlocks(remoteClient, minX, minY, maxX, maxY, flag);
111 // } 111 // }
112 //}; 112 //};
113 113
114 List<MapBlockData> mapBlocks; 114 List<MapBlockData> mapBlocks;
115 if ((flag & 0x10000) != 0) // user clicked on the map a tile that isn't visible 115 if ((flag & 0x10000) != 0) // user clicked on the map a tile that isn't visible
116 { 116 {
117 List<MapBlockData> response = new List<MapBlockData>(); 117 List<MapBlockData> response = new List<MapBlockData>();
118 118
119 // this should return one mapblock at most. But make sure: Look whether the one we requested is in there 119 // this should return one mapblock at most. But make sure: Look whether the one we requested is in there
120 mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY); 120 mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
121 if (mapBlocks != null) 121 if (mapBlocks != null)
122 { 122 {
123 foreach (MapBlockData block in mapBlocks) 123 foreach (MapBlockData block in mapBlocks)
124 { 124 {
125 if (block.X == minX && block.Y == minY) 125 if (block.X == minX && block.Y == minY)
126 { 126 {
127 // found it => add it to response 127 // found it => add it to response
128 response.Add(block); 128 response.Add(block);
129 break; 129 break;
130 } 130 }
131 } 131 }
132 } 132 }
133 response = mapBlocks; 133 response = mapBlocks;
134 if (response.Count == 0) 134 if (response.Count == 0)
135 { 135 {
136 // response still empty => couldn't find the map-tile the user clicked on => tell the client 136 // response still empty => couldn't find the map-tile the user clicked on => tell the client
137 MapBlockData block = new MapBlockData(); 137 MapBlockData block = new MapBlockData();
138 block.X = (ushort)minX; 138 block.X = (ushort)minX;
139 block.Y = (ushort)minY; 139 block.Y = (ushort)minY;
140 block.Access = 254; // == not there 140 block.Access = 254; // == not there
141 response.Add(block); 141 response.Add(block);
142 } 142 }
143 remoteClient.SendMapBlock(response, 0); 143 remoteClient.SendMapBlock(response, 0);
144 } 144 }
145 else 145 else
146 { 146 {
147 // normal mapblock request. Use the provided values 147 // normal mapblock request. Use the provided values
148 mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4); 148 mapBlocks = m_scene.SceneGridService.RequestNeighbourMapBlocks(minX - 4, minY - 4, maxX + 4, maxY + 4);
149 149
150 // Different from super 150 // Different from super
151 FillInMap(mapBlocks, minX, minY, maxX, maxY); 151 FillInMap(mapBlocks, minX, minY, maxX, maxY);
152 // 152 //
153 153
154 remoteClient.SendMapBlock(mapBlocks, flag); 154 remoteClient.SendMapBlock(mapBlocks, flag);
155 } 155 }
156 } 156 }
157 157
158 158
159 private void FillInMap(List<MapBlockData> mapBlocks, int minX, int minY, int maxX, int maxY) 159 private void FillInMap(List<MapBlockData> mapBlocks, int minX, int minY, int maxX, int maxY)
160 { 160 {
161 for (int x = minX; x <= maxX; x++) 161 for (int x = minX; x <= maxX; x++)
162 for (int y = minY; y <= maxY; y++) 162 for (int y = minY; y <= maxY; y++)
163 { 163 {
164 MapBlockData mblock = mapBlocks.Find(delegate(MapBlockData mb) { return ((mb.X == x) && (mb.Y == y)); }); 164 MapBlockData mblock = mapBlocks.Find(delegate(MapBlockData mb) { return ((mb.X == x) && (mb.Y == y)); });
165 if (mblock == null) 165 if (mblock == null)
166 { 166 {
167 mblock = new MapBlockData(); 167 mblock = new MapBlockData();
168 mblock.X = (ushort)x; 168 mblock.X = (ushort)x;
169 mblock.Y = (ushort)y; 169 mblock.Y = (ushort)y;
170 mblock.Name = ""; 170 mblock.Name = "";
171 mblock.Access = 254; // not here??? 171 mblock.Access = 254; // not here???
172 mblock.MapImageId = UUID.Zero; 172 mblock.MapImageId = UUID.Zero;
173 mapBlocks.Add(mblock); 173 mapBlocks.Add(mblock);
174 } 174 }
175 } 175 }
176 } 176 }
177 } 177 }
178} 178}
diff --git a/OpenSim/Region/Environment/Scenes/EntityManager.cs b/OpenSim/Region/Environment/Scenes/EntityManager.cs
index be39878..eb29ead 100644
--- a/OpenSim/Region/Environment/Scenes/EntityManager.cs
+++ b/OpenSim/Region/Environment/Scenes/EntityManager.cs
@@ -1,182 +1,182 @@
1using System; 1using System;
2using System.Collections; 2using System.Collections;
3using System.Collections.Generic; 3using System.Collections.Generic;
4using OpenMetaverse; 4using OpenMetaverse;
5 5
6namespace OpenSim.Region.Environment.Scenes 6namespace OpenSim.Region.Environment.Scenes
7{ 7{
8 public class EntityManager : IEnumerable<EntityBase> 8 public class EntityManager : IEnumerable<EntityBase>
9 { 9 {
10 private readonly Dictionary<UUID,EntityBase> m_eb_uuid = new Dictionary<UUID, EntityBase>(); 10 private readonly Dictionary<UUID,EntityBase> m_eb_uuid = new Dictionary<UUID, EntityBase>();
11 private readonly Dictionary<uint, EntityBase> m_eb_localID = new Dictionary<uint, EntityBase>(); 11 private readonly Dictionary<uint, EntityBase> m_eb_localID = new Dictionary<uint, EntityBase>();
12 private readonly Object m_lock = new Object(); 12 private readonly Object m_lock = new Object();
13 13
14 [Obsolete("Use Add() instead.")] 14 [Obsolete("Use Add() instead.")]
15 public void Add(UUID id, EntityBase eb) 15 public void Add(UUID id, EntityBase eb)
16 { 16 {
17 Add(eb); 17 Add(eb);
18 } 18 }
19 19
20 public void Add(EntityBase entity) 20 public void Add(EntityBase entity)
21 { 21 {
22 lock(m_lock) 22 lock(m_lock)
23 { 23 {
24 m_eb_uuid.Add(entity.UUID, entity); 24 m_eb_uuid.Add(entity.UUID, entity);
25 m_eb_localID.Add(entity.LocalId, entity); 25 m_eb_localID.Add(entity.LocalId, entity);
26 } 26 }
27 } 27 }
28 28
29 public void InsertOrReplace(EntityBase entity) 29 public void InsertOrReplace(EntityBase entity)
30 { 30 {
31 lock(m_lock) 31 lock(m_lock)
32 { 32 {
33 m_eb_uuid[entity.UUID] = entity; 33 m_eb_uuid[entity.UUID] = entity;
34 m_eb_localID[entity.LocalId] = entity; 34 m_eb_localID[entity.LocalId] = entity;
35 } 35 }
36 } 36 }
37 37
38 public void Clear() 38 public void Clear()
39 { 39 {
40 lock (m_lock) 40 lock (m_lock)
41 { 41 {
42 m_eb_uuid.Clear(); 42 m_eb_uuid.Clear();
43 m_eb_localID.Clear(); 43 m_eb_localID.Clear();
44 } 44 }
45 } 45 }
46 46
47 public int Count 47 public int Count
48 { 48 {
49 get 49 get
50 { 50 {
51 lock (m_lock) 51 lock (m_lock)
52 { 52 {
53 return m_eb_uuid.Count; 53 return m_eb_uuid.Count;
54 } 54 }
55 } 55 }
56 } 56 }
57 57
58 public bool ContainsKey(UUID id) 58 public bool ContainsKey(UUID id)
59 { 59 {
60 lock(m_lock) 60 lock(m_lock)
61 { 61 {
62 return m_eb_uuid.ContainsKey(id); 62 return m_eb_uuid.ContainsKey(id);
63 } 63 }
64 } 64 }
65 65
66 public bool ContainsKey(uint localID) 66 public bool ContainsKey(uint localID)
67 { 67 {
68 lock (m_lock) 68 lock (m_lock)
69 { 69 {
70 return m_eb_localID.ContainsKey(localID); 70 return m_eb_localID.ContainsKey(localID);
71 } 71 }
72 } 72 }
73 73
74 public bool Remove(uint localID) 74 public bool Remove(uint localID)
75 { 75 {
76 lock(m_lock) 76 lock(m_lock)
77 { 77 {
78 bool a = m_eb_uuid.Remove(m_eb_localID[localID].UUID); 78 bool a = m_eb_uuid.Remove(m_eb_localID[localID].UUID);
79 bool b = m_eb_localID.Remove(localID); 79 bool b = m_eb_localID.Remove(localID);
80 80
81 return a && b; 81 return a && b;
82 } 82 }
83 } 83 }
84 84
85 public bool Remove(UUID id) 85 public bool Remove(UUID id)
86 { 86 {
87 lock(m_lock) 87 lock(m_lock)
88 { 88 {
89 bool a = m_eb_localID.Remove(m_eb_uuid[id].LocalId); 89 bool a = m_eb_localID.Remove(m_eb_uuid[id].LocalId);
90 bool b = m_eb_uuid.Remove(id); 90 bool b = m_eb_uuid.Remove(id);
91 91
92 return a && b; 92 return a && b;
93 } 93 }
94 } 94 }
95 95
96 public List<EntityBase> GetAllByType<T>() 96 public List<EntityBase> GetAllByType<T>()
97 { 97 {
98 List<EntityBase> tmp = new List<EntityBase>(); 98 List<EntityBase> tmp = new List<EntityBase>();
99 99
100 lock(m_lock) 100 lock(m_lock)
101 { 101 {
102 foreach (KeyValuePair<UUID, EntityBase> pair in m_eb_uuid) 102 foreach (KeyValuePair<UUID, EntityBase> pair in m_eb_uuid)
103 { 103 {
104 if(pair.Value is T) 104 if(pair.Value is T)
105 { 105 {
106 tmp.Add(pair.Value); 106 tmp.Add(pair.Value);
107 } 107 }
108 } 108 }
109 } 109 }
110 110
111 return tmp; 111 return tmp;
112 } 112 }
113 113
114 public List<EntityBase> GetEntities() 114 public List<EntityBase> GetEntities()
115 { 115 {
116 lock (m_lock) 116 lock (m_lock)
117 { 117 {
118 return new List<EntityBase>(m_eb_uuid.Values); 118 return new List<EntityBase>(m_eb_uuid.Values);
119 } 119 }
120 } 120 }
121 121
122 public EntityBase this[UUID id] 122 public EntityBase this[UUID id]
123 { 123 {
124 get 124 get
125 { 125 {
126 lock (m_lock) 126 lock (m_lock)
127 { 127 {
128 return m_eb_uuid[id]; 128 return m_eb_uuid[id];
129 } 129 }
130 } 130 }
131 set 131 set
132 { 132 {
133 InsertOrReplace(value); 133 InsertOrReplace(value);
134 } 134 }
135 } 135 }
136 136
137 public EntityBase this[uint localID] 137 public EntityBase this[uint localID]
138 { 138 {
139 get 139 get
140 { 140 {
141 lock (m_lock) 141 lock (m_lock)
142 { 142 {
143 return m_eb_localID[localID]; 143 return m_eb_localID[localID];
144 } 144 }
145 } 145 }
146 set 146 set
147 { 147 {
148 InsertOrReplace(value); 148 InsertOrReplace(value);
149 } 149 }
150 } 150 }
151 151
152 public bool TryGetValue(UUID key, out EntityBase obj) 152 public bool TryGetValue(UUID key, out EntityBase obj)
153 { 153 {
154 lock(m_lock) 154 lock(m_lock)
155 { 155 {
156 return m_eb_uuid.TryGetValue(key, out obj); 156 return m_eb_uuid.TryGetValue(key, out obj);
157 } 157 }
158 } 158 }
159 159
160 public bool TryGetValue(uint key, out EntityBase obj) 160 public bool TryGetValue(uint key, out EntityBase obj)
161 { 161 {
162 lock (m_lock) 162 lock (m_lock)
163 { 163 {
164 return m_eb_localID.TryGetValue(key, out obj); 164 return m_eb_localID.TryGetValue(key, out obj);
165 } 165 }
166 } 166 }
167 167
168 /// <summary> 168 /// <summary>
169 /// This could be optimised to work on the list 'live' rather than making a safe copy and iterating that. 169 /// This could be optimised to work on the list 'live' rather than making a safe copy and iterating that.
170 /// </summary> 170 /// </summary>
171 /// <returns></returns> 171 /// <returns></returns>
172 public IEnumerator<EntityBase> GetEnumerator() 172 public IEnumerator<EntityBase> GetEnumerator()
173 { 173 {
174 return GetEntities().GetEnumerator(); 174 return GetEntities().GetEnumerator();
175 } 175 }
176 176
177 IEnumerator IEnumerable.GetEnumerator() 177 IEnumerator IEnumerable.GetEnumerator()
178 { 178 {
179 return GetEnumerator(); 179 return GetEnumerator();
180 } 180 }
181 } 181 }
182} 182}
diff --git a/OpenSim/Region/Environment/Scenes/Hypergrid/HGAssetMapper.cs b/OpenSim/Region/Environment/Scenes/Hypergrid/HGAssetMapper.cs
index 1715ffe..889c77e 100644
--- a/OpenSim/Region/Environment/Scenes/Hypergrid/HGAssetMapper.cs
+++ b/OpenSim/Region/Environment/Scenes/Hypergrid/HGAssetMapper.cs
@@ -1,377 +1,377 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Reflection; 32using System.Reflection;
33using System.Threading; 33using System.Threading;
34 34
35using log4net; 35using log4net;
36using Nini.Config; 36using Nini.Config;
37using OpenMetaverse; 37using OpenMetaverse;
38 38
39using OpenSim.Framework; 39using OpenSim.Framework;
40using OpenSim.Framework.Communications; 40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Cache; 41using OpenSim.Framework.Communications.Cache;
42using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
43using OpenSim.Region.Environment; 43using OpenSim.Region.Environment;
44using OpenSim.Region.Environment.Scenes; 44using OpenSim.Region.Environment.Scenes;
45 45
46//using HyperGrid.Framework; 46//using HyperGrid.Framework;
47//using OpenSim.Region.Communications.Hypergrid; 47//using OpenSim.Region.Communications.Hypergrid;
48 48
49namespace OpenSim.Region.Environment.Scenes.Hypergrid 49namespace OpenSim.Region.Environment.Scenes.Hypergrid
50{ 50{
51 public class HGAssetMapper 51 public class HGAssetMapper
52 { 52 {
53 #region Fields 53 #region Fields
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55 55
56 // This maps between asset server URLs and asset server clients 56 // This maps between asset server URLs and asset server clients
57 private Dictionary<string, GridAssetClient> m_assetServers = new Dictionary<string, GridAssetClient>(); 57 private Dictionary<string, GridAssetClient> m_assetServers = new Dictionary<string, GridAssetClient>();
58 58
59 // This maps between asset UUIDs and asset servers 59 // This maps between asset UUIDs and asset servers
60 private Dictionary<UUID, GridAssetClient> m_assetMap = new Dictionary<UUID, GridAssetClient>(); 60 private Dictionary<UUID, GridAssetClient> m_assetMap = new Dictionary<UUID, GridAssetClient>();
61 61
62 private Scene m_scene; 62 private Scene m_scene;
63 #endregion 63 #endregion
64 64
65 #region Constructor 65 #region Constructor
66 66
67 public HGAssetMapper(Scene scene) 67 public HGAssetMapper(Scene scene)
68 { 68 {
69 m_scene = scene; 69 m_scene = scene;
70 } 70 }
71 71
72 #endregion 72 #endregion
73 73
74 #region Internal functions 74 #region Internal functions
75 75
76 private string UserAssetURL(UUID userID) 76 private string UserAssetURL(UUID userID)
77 { 77 {
78 CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID); 78 CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID);
79 if (uinfo != null) 79 if (uinfo != null)
80 return (uinfo.UserProfile.UserAssetURI == "") ? null : uinfo.UserProfile.UserAssetURI; 80 return (uinfo.UserProfile.UserAssetURI == "") ? null : uinfo.UserProfile.UserAssetURI;
81 return null; 81 return null;
82 } 82 }
83 83
84 private bool IsHomeUser(UUID userID) 84 private bool IsHomeUser(UUID userID)
85 { 85 {
86 CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID); 86 CachedUserInfo uinfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(userID);
87 87
88 if (uinfo != null) 88 if (uinfo != null)
89 { 89 {
90 //if ((uinfo.UserProfile.UserAssetURI == null) || (uinfo.UserProfile.UserAssetURI == "") || 90 //if ((uinfo.UserProfile.UserAssetURI == null) || (uinfo.UserProfile.UserAssetURI == "") ||
91 // uinfo.UserProfile.UserAssetURI.Equals(m_scene.CommsManager.NetworkServersInfo.AssetURL)) 91 // uinfo.UserProfile.UserAssetURI.Equals(m_scene.CommsManager.NetworkServersInfo.AssetURL))
92 if (HGNetworkServersInfo.Singleton.IsLocalUser(uinfo.UserProfile.UserAssetURI)) 92 if (HGNetworkServersInfo.Singleton.IsLocalUser(uinfo.UserProfile.UserAssetURI))
93 { 93 {
94 m_log.Debug("[HGScene]: Home user " + uinfo.UserProfile.FirstName + " " + uinfo.UserProfile.SurName); 94 m_log.Debug("[HGScene]: Home user " + uinfo.UserProfile.FirstName + " " + uinfo.UserProfile.SurName);
95 return true; 95 return true;
96 } 96 }
97 } 97 }
98 98
99 m_log.Debug("[HGScene]: Foreign user " + uinfo.UserProfile.FirstName + " " + uinfo.UserProfile.SurName); 99 m_log.Debug("[HGScene]: Foreign user " + uinfo.UserProfile.FirstName + " " + uinfo.UserProfile.SurName);
100 return false; 100 return false;
101 } 101 }
102 102
103 private bool IsInAssetMap(UUID uuid) 103 private bool IsInAssetMap(UUID uuid)
104 { 104 {
105 return m_assetMap.ContainsKey(uuid); 105 return m_assetMap.ContainsKey(uuid);
106 } 106 }
107 107
108 private bool FetchAsset(GridAssetClient asscli, UUID assetID, bool isTexture) 108 private bool FetchAsset(GridAssetClient asscli, UUID assetID, bool isTexture)
109 { 109 {
110 // I'm not going over 3 seconds since this will be blocking processing of all the other inbound 110 // I'm not going over 3 seconds since this will be blocking processing of all the other inbound
111 // packets from the client. 111 // packets from the client.
112 int pollPeriod = 200; 112 int pollPeriod = 200;
113 int maxPolls = 15; 113 int maxPolls = 15;
114 114
115 AssetBase asset; 115 AssetBase asset;
116 116
117 // Maybe it came late, and it's already here. Check first. 117 // Maybe it came late, and it's already here. Check first.
118 if (m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset)) 118 if (m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset))
119 { 119 {
120 m_log.Debug("[HGScene]: Asset already in asset cache. " + assetID); 120 m_log.Debug("[HGScene]: Asset already in asset cache. " + assetID);
121 return true; 121 return true;
122 } 122 }
123 123
124 124
125 asscli.RequestAsset(assetID, isTexture); 125 asscli.RequestAsset(assetID, isTexture);
126 126
127 do 127 do
128 { 128 {
129 Thread.Sleep(pollPeriod); 129 Thread.Sleep(pollPeriod);
130 130
131 if (m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset) && (asset != null)) 131 if (m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset) && (asset != null))
132 { 132 {
133 m_log.Debug("[HGScene]: Asset made it to asset cache. " + asset.Name + " " + assetID); 133 m_log.Debug("[HGScene]: Asset made it to asset cache. " + asset.Name + " " + assetID);
134 // I think I need to store it in the asset DB too. 134 // I think I need to store it in the asset DB too.
135 // For now, let me just do it for textures and scripts 135 // For now, let me just do it for textures and scripts
136 if (((AssetType)asset.Type == AssetType.Texture) || 136 if (((AssetType)asset.Type == AssetType.Texture) ||
137 ((AssetType)asset.Type == AssetType.LSLBytecode) || 137 ((AssetType)asset.Type == AssetType.LSLBytecode) ||
138 ((AssetType)asset.Type == AssetType.LSLText)) 138 ((AssetType)asset.Type == AssetType.LSLText))
139 { 139 {
140 AssetBase asset1 = new AssetBase(); 140 AssetBase asset1 = new AssetBase();
141 Copy(asset, asset1); 141 Copy(asset, asset1);
142 m_scene.AssetCache.AssetServer.StoreAsset(asset1); 142 m_scene.AssetCache.AssetServer.StoreAsset(asset1);
143 } 143 }
144 return true; 144 return true;
145 } 145 }
146 } while (--maxPolls > 0); 146 } while (--maxPolls > 0);
147 147
148 m_log.WarnFormat("[HGScene]: {0} {1} was not received before the retrieval timeout was reached", 148 m_log.WarnFormat("[HGScene]: {0} {1} was not received before the retrieval timeout was reached",
149 isTexture ? "texture" : "asset", assetID.ToString()); 149 isTexture ? "texture" : "asset", assetID.ToString());
150 150
151 return false; 151 return false;
152 } 152 }
153 153
154 private bool PostAsset(GridAssetClient asscli, UUID assetID) 154 private bool PostAsset(GridAssetClient asscli, UUID assetID)
155 { 155 {
156 AssetBase asset1; 156 AssetBase asset1;
157 m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset1); 157 m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset1);
158 158
159 if (asset1 != null) 159 if (asset1 != null)
160 { 160 {
161 // See long comment in AssetCache.AddAsset 161 // See long comment in AssetCache.AddAsset
162 if (!asset1.Temporary || asset1.Local) 162 if (!asset1.Temporary || asset1.Local)
163 { 163 {
164 // The asset cache returns instances of subclasses of AssetBase: 164 // The asset cache returns instances of subclasses of AssetBase:
165 // TextureImage or AssetInfo. So in passing them to the remote 165 // TextureImage or AssetInfo. So in passing them to the remote
166 // server we first need to convert this to instances of AssetBase, 166 // server we first need to convert this to instances of AssetBase,
167 // which is the serializable class for assets. 167 // which is the serializable class for assets.
168 AssetBase asset = new AssetBase(); 168 AssetBase asset = new AssetBase();
169 Copy(asset1, asset); 169 Copy(asset1, asset);
170 170
171 asscli.StoreAsset(asset); 171 asscli.StoreAsset(asset);
172 } 172 }
173 return true; 173 return true;
174 } 174 }
175 else 175 else
176 m_log.Warn("[HGScene]: Tried to post asset to remote server, but asset not in local cache."); 176 m_log.Warn("[HGScene]: Tried to post asset to remote server, but asset not in local cache.");
177 177
178 return false; 178 return false;
179 } 179 }
180 180
181 private void Copy(AssetBase from, AssetBase to) 181 private void Copy(AssetBase from, AssetBase to)
182 { 182 {
183 to.Data = from.Data; 183 to.Data = from.Data;
184 to.Description = from.Description; 184 to.Description = from.Description;
185 to.FullID = from.FullID; 185 to.FullID = from.FullID;
186 to.ID = from.ID; 186 to.ID = from.ID;
187 to.Local = from.Local; 187 to.Local = from.Local;
188 to.Name = from.Name; 188 to.Name = from.Name;
189 to.Temporary = from.Temporary; 189 to.Temporary = from.Temporary;
190 to.Type = from.Type; 190 to.Type = from.Type;
191 191
192 } 192 }
193 193
194 private void _guardedAdd(Dictionary<UUID, bool> lst, UUID obj, bool val) 194 private void _guardedAdd(Dictionary<UUID, bool> lst, UUID obj, bool val)
195 { 195 {
196 if (!lst.ContainsKey(obj)) 196 if (!lst.ContainsKey(obj))
197 lst.Add(obj, val); 197 lst.Add(obj, val);
198 } 198 }
199 199
200 private void SniffTextureUUIDs(Dictionary<UUID, bool> uuids, SceneObjectGroup sog) 200 private void SniffTextureUUIDs(Dictionary<UUID, bool> uuids, SceneObjectGroup sog)
201 { 201 {
202 try 202 try
203 { 203 {
204 _guardedAdd(uuids, sog.RootPart.Shape.Textures.DefaultTexture.TextureID, true); 204 _guardedAdd(uuids, sog.RootPart.Shape.Textures.DefaultTexture.TextureID, true);
205 } 205 }
206 catch (Exception) { } 206 catch (Exception) { }
207 207
208 foreach (Primitive.TextureEntryFace tface in sog.RootPart.Shape.Textures.FaceTextures) 208 foreach (Primitive.TextureEntryFace tface in sog.RootPart.Shape.Textures.FaceTextures)
209 { 209 {
210 try 210 try
211 { 211 {
212 _guardedAdd(uuids, tface.TextureID, true); 212 _guardedAdd(uuids, tface.TextureID, true);
213 } 213 }
214 catch (Exception) { } 214 catch (Exception) { }
215 } 215 }
216 216
217 foreach (SceneObjectPart sop in sog.Children.Values) 217 foreach (SceneObjectPart sop in sog.Children.Values)
218 { 218 {
219 try 219 try
220 { 220 {
221 _guardedAdd(uuids, sop.Shape.Textures.DefaultTexture.TextureID, true); 221 _guardedAdd(uuids, sop.Shape.Textures.DefaultTexture.TextureID, true);
222 } 222 }
223 catch (Exception) { } 223 catch (Exception) { }
224 foreach (Primitive.TextureEntryFace tface in sop.Shape.Textures.FaceTextures) 224 foreach (Primitive.TextureEntryFace tface in sop.Shape.Textures.FaceTextures)
225 { 225 {
226 try 226 try
227 { 227 {
228 _guardedAdd(uuids, tface.TextureID, true); 228 _guardedAdd(uuids, tface.TextureID, true);
229 } 229 }
230 catch (Exception) { } 230 catch (Exception) { }
231 } 231 }
232 } 232 }
233 } 233 }
234 234
235 private void SniffTaskInventoryUUIDs(Dictionary<UUID, bool> uuids, SceneObjectGroup sog) 235 private void SniffTaskInventoryUUIDs(Dictionary<UUID, bool> uuids, SceneObjectGroup sog)
236 { 236 {
237 TaskInventoryDictionary tinv = sog.RootPart.TaskInventory; 237 TaskInventoryDictionary tinv = sog.RootPart.TaskInventory;
238 238
239 foreach (TaskInventoryItem titem in tinv.Values) 239 foreach (TaskInventoryItem titem in tinv.Values)
240 { 240 {
241 uuids.Add(titem.AssetID, (InventoryType)titem.Type == InventoryType.Texture); 241 uuids.Add(titem.AssetID, (InventoryType)titem.Type == InventoryType.Texture);
242 } 242 }
243 } 243 }
244 244
245 private Dictionary<UUID, bool> SniffUUIDs(AssetBase asset) 245 private Dictionary<UUID, bool> SniffUUIDs(AssetBase asset)
246 { 246 {
247 Dictionary<UUID, bool> uuids = new Dictionary<UUID, bool>(); 247 Dictionary<UUID, bool> uuids = new Dictionary<UUID, bool>();
248 if ((asset != null) && ((AssetType)asset.Type == AssetType.Object)) 248 if ((asset != null) && ((AssetType)asset.Type == AssetType.Object))
249 { 249 {
250 string ass_str = Utils.BytesToString(asset.Data); 250 string ass_str = Utils.BytesToString(asset.Data);
251 SceneObjectGroup sog = new SceneObjectGroup(ass_str, true); 251 SceneObjectGroup sog = new SceneObjectGroup(ass_str, true);
252 252
253 SniffTextureUUIDs(uuids, sog); 253 SniffTextureUUIDs(uuids, sog);
254 254
255 // We need to sniff further... 255 // We need to sniff further...
256 SniffTaskInventoryUUIDs(uuids, sog); 256 SniffTaskInventoryUUIDs(uuids, sog);
257 257
258 } 258 }
259 259
260 return uuids; 260 return uuids;
261 } 261 }
262 262
263 private Dictionary<UUID, bool> SniffUUIDs(UUID assetID) 263 private Dictionary<UUID, bool> SniffUUIDs(UUID assetID)
264 { 264 {
265 //Dictionary<UUID, bool> uuids = new Dictionary<UUID, bool>(); 265 //Dictionary<UUID, bool> uuids = new Dictionary<UUID, bool>();
266 266
267 AssetBase asset; 267 AssetBase asset;
268 m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset); 268 m_scene.CommsManager.AssetCache.TryGetCachedAsset(assetID, out asset);
269 269
270 return SniffUUIDs(asset); 270 return SniffUUIDs(asset);
271 } 271 }
272 272
273 private void Dump(Dictionary<UUID, bool> lst) 273 private void Dump(Dictionary<UUID, bool> lst)
274 { 274 {
275 m_log.Debug("XXX -------- UUID DUMP ------- XXX"); 275 m_log.Debug("XXX -------- UUID DUMP ------- XXX");
276 foreach (KeyValuePair<UUID, bool> kvp in lst) 276 foreach (KeyValuePair<UUID, bool> kvp in lst)
277 m_log.Debug(" >> " + kvp.Key + " (texture? " + kvp.Value + ")"); 277 m_log.Debug(" >> " + kvp.Key + " (texture? " + kvp.Value + ")");
278 m_log.Debug("XXX -------- UUID DUMP ------- XXX"); 278 m_log.Debug("XXX -------- UUID DUMP ------- XXX");
279 } 279 }
280 280
281 #endregion 281 #endregion
282 282
283 283
284 #region Public interface 284 #region Public interface
285 285
286 public void Get(UUID itemID, UUID ownerID) 286 public void Get(UUID itemID, UUID ownerID)
287 { 287 {
288 if (!IsInAssetMap(itemID) && !IsHomeUser(ownerID)) 288 if (!IsInAssetMap(itemID) && !IsHomeUser(ownerID))
289 { 289 {
290 // Get the item from the remote asset server onto the local AssetCache 290 // Get the item from the remote asset server onto the local AssetCache
291 // and place an entry in m_assetMap 291 // and place an entry in m_assetMap
292 292
293 GridAssetClient asscli = null; 293 GridAssetClient asscli = null;
294 string userAssetURL = UserAssetURL(ownerID); 294 string userAssetURL = UserAssetURL(ownerID);
295 if (userAssetURL != null) 295 if (userAssetURL != null)
296 { 296 {
297 m_assetServers.TryGetValue(userAssetURL, out asscli); 297 m_assetServers.TryGetValue(userAssetURL, out asscli);
298 if (asscli == null) 298 if (asscli == null)
299 { 299 {
300 m_log.Debug("[HGScene]: Starting new GridAssetClient for " + userAssetURL); 300 m_log.Debug("[HGScene]: Starting new GridAssetClient for " + userAssetURL);
301 asscli = new GridAssetClient(userAssetURL); 301 asscli = new GridAssetClient(userAssetURL);
302 asscli.SetReceiver(m_scene.CommsManager.AssetCache); // Straight to the asset cache! 302 asscli.SetReceiver(m_scene.CommsManager.AssetCache); // Straight to the asset cache!
303 m_assetServers.Add(userAssetURL, asscli); 303 m_assetServers.Add(userAssetURL, asscli);
304 } 304 }
305 305
306 m_log.Debug("[HGScene]: Fetching object " + itemID + " to asset server " + userAssetURL); 306 m_log.Debug("[HGScene]: Fetching object " + itemID + " to asset server " + userAssetURL);
307 bool success = FetchAsset(asscli, itemID, false); // asscli.RequestAsset(item.ItemID, false); 307 bool success = FetchAsset(asscli, itemID, false); // asscli.RequestAsset(item.ItemID, false);
308 308
309 // OK, now fetch the inside. 309 // OK, now fetch the inside.
310 Dictionary<UUID, bool> ids = SniffUUIDs(itemID); 310 Dictionary<UUID, bool> ids = SniffUUIDs(itemID);
311 Dump(ids); 311 Dump(ids);
312 foreach (KeyValuePair<UUID, bool> kvp in ids) 312 foreach (KeyValuePair<UUID, bool> kvp in ids)
313 FetchAsset(asscli, kvp.Key, kvp.Value); 313 FetchAsset(asscli, kvp.Key, kvp.Value);
314 314
315 315
316 if (success) 316 if (success)
317 { 317 {
318 m_log.Debug("[HGScene]: Successfully fetched item from remote asset server " + userAssetURL); 318 m_log.Debug("[HGScene]: Successfully fetched item from remote asset server " + userAssetURL);
319 m_assetMap.Add(itemID, asscli); 319 m_assetMap.Add(itemID, asscli);
320 } 320 }
321 else 321 else
322 m_log.Warn("[HGScene]: Could not fetch asset from remote asset server " + userAssetURL); 322 m_log.Warn("[HGScene]: Could not fetch asset from remote asset server " + userAssetURL);
323 } 323 }
324 else 324 else
325 m_log.Warn("[HGScene]: Unable to locate foreign user's asset server"); 325 m_log.Warn("[HGScene]: Unable to locate foreign user's asset server");
326 } 326 }
327 } 327 }
328 328
329 public void Post(UUID itemID, UUID ownerID) 329 public void Post(UUID itemID, UUID ownerID)
330 { 330 {
331 if (!IsHomeUser(ownerID)) 331 if (!IsHomeUser(ownerID))
332 { 332 {
333 // Post the item from the local AssetCache ontp the remote asset server 333 // Post the item from the local AssetCache ontp the remote asset server
334 // and place an entry in m_assetMap 334 // and place an entry in m_assetMap
335 335
336 GridAssetClient asscli = null; 336 GridAssetClient asscli = null;
337 string userAssetURL = UserAssetURL(ownerID); 337 string userAssetURL = UserAssetURL(ownerID);
338 if (userAssetURL != null) 338 if (userAssetURL != null)
339 { 339 {
340 m_assetServers.TryGetValue(userAssetURL, out asscli); 340 m_assetServers.TryGetValue(userAssetURL, out asscli);
341 if (asscli == null) 341 if (asscli == null)
342 { 342 {
343 m_log.Debug("[HGScene]: Starting new GridAssetClient for " + userAssetURL); 343 m_log.Debug("[HGScene]: Starting new GridAssetClient for " + userAssetURL);
344 asscli = new GridAssetClient(userAssetURL); 344 asscli = new GridAssetClient(userAssetURL);
345 asscli.SetReceiver(m_scene.CommsManager.AssetCache); // Straight to the asset cache! 345 asscli.SetReceiver(m_scene.CommsManager.AssetCache); // Straight to the asset cache!
346 m_assetServers.Add(userAssetURL, asscli); 346 m_assetServers.Add(userAssetURL, asscli);
347 } 347 }
348 m_log.Debug("[HGScene]: Posting object " + itemID + " to asset server " + userAssetURL); 348 m_log.Debug("[HGScene]: Posting object " + itemID + " to asset server " + userAssetURL);
349 bool success = PostAsset(asscli, itemID); 349 bool success = PostAsset(asscli, itemID);
350 350
351 // Now the inside 351 // Now the inside
352 Dictionary<UUID, bool> ids = SniffUUIDs(itemID); 352 Dictionary<UUID, bool> ids = SniffUUIDs(itemID);
353 Dump(ids); 353 Dump(ids);
354 foreach (KeyValuePair<UUID, bool> kvp in ids) 354 foreach (KeyValuePair<UUID, bool> kvp in ids)
355 PostAsset(asscli, kvp.Key); 355 PostAsset(asscli, kvp.Key);
356 356
357 if (success) 357 if (success)
358 { 358 {
359 m_log.Debug("[HGScene]: Successfully posted item to remote asset server " + userAssetURL); 359 m_log.Debug("[HGScene]: Successfully posted item to remote asset server " + userAssetURL);
360 m_assetMap.Add(itemID, asscli); 360 m_assetMap.Add(itemID, asscli);
361 } 361 }
362 else 362 else
363 m_log.Warn("[HGScene]: Could not post asset to remote asset server " + userAssetURL); 363 m_log.Warn("[HGScene]: Could not post asset to remote asset server " + userAssetURL);
364 364
365 //if (!m_assetMap.ContainsKey(itemID)) 365 //if (!m_assetMap.ContainsKey(itemID))
366 // m_assetMap.Add(itemID, asscli); 366 // m_assetMap.Add(itemID, asscli);
367 } 367 }
368 else 368 else
369 m_log.Warn("[HGScene]: Unable to locate foreign user's asset server"); 369 m_log.Warn("[HGScene]: Unable to locate foreign user's asset server");
370 370
371 } 371 }
372 } 372 }
373 373
374 #endregion 374 #endregion
375 375
376 } 376 }
377} 377}
diff --git a/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.Inventory.cs
index af3c04f..92627d1 100644
--- a/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.Inventory.cs
@@ -1,152 +1,152 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections; 30using System.Collections;
31using System.Collections.Generic; 31using System.Collections.Generic;
32using System.Reflection; 32using System.Reflection;
33using System.Threading; 33using System.Threading;
34 34
35using log4net; 35using log4net;
36using Nini.Config; 36using Nini.Config;
37using OpenMetaverse; 37using OpenMetaverse;
38 38
39using OpenSim.Framework; 39using OpenSim.Framework;
40using OpenSim.Framework.Communications; 40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Cache; 41using OpenSim.Framework.Communications.Cache;
42using OpenSim.Framework.Servers; 42using OpenSim.Framework.Servers;
43using OpenSim.Region.Environment; 43using OpenSim.Region.Environment;
44using OpenSim.Region.Environment.Scenes; 44using OpenSim.Region.Environment.Scenes;
45 45
46namespace OpenSim.Region.Environment.Scenes.Hypergrid 46namespace OpenSim.Region.Environment.Scenes.Hypergrid
47{ 47{
48 public partial class HGScene : Scene 48 public partial class HGScene : Scene
49 { 49 {
50 #region Fields 50 #region Fields
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 52
53 private HGAssetMapper m_assMapper; 53 private HGAssetMapper m_assMapper;
54 54
55 #endregion 55 #endregion
56 56
57 #region Constructors 57 #region Constructors
58 58
59 public HGScene(RegionInfo regInfo, AgentCircuitManager authen, 59 public HGScene(RegionInfo regInfo, AgentCircuitManager authen,
60 CommunicationsManager commsMan, SceneCommunicationService sceneGridService, 60 CommunicationsManager commsMan, SceneCommunicationService sceneGridService,
61 AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, 61 AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer,
62 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, 62 ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim,
63 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion) 63 bool SeeIntoRegionFromNeighbor, IConfigSource config, string simulatorVersion)
64 : base(regInfo, authen, commsMan, sceneGridService, assetCach, storeManager, httpServer, moduleLoader, 64 : base(regInfo, authen, commsMan, sceneGridService, assetCach, storeManager, httpServer, moduleLoader,
65 dumpAssetsToFile, physicalPrim, SeeIntoRegionFromNeighbor, config, simulatorVersion) 65 dumpAssetsToFile, physicalPrim, SeeIntoRegionFromNeighbor, config, simulatorVersion)
66 { 66 {
67 m_log.Info("[HGScene]: Starting HGScene."); 67 m_log.Info("[HGScene]: Starting HGScene.");
68 m_assMapper = new HGAssetMapper(this); 68 m_assMapper = new HGAssetMapper(this);
69 69
70 EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem; 70 EventManager.OnNewInventoryItemUploadComplete += UploadInventoryItem;
71 } 71 }
72 72
73 #endregion 73 #endregion
74 74
75 #region Event handlers 75 #region Event handlers
76 76
77 public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel) 77 public void UploadInventoryItem(UUID avatarID, UUID assetID, string name, int userlevel)
78 { 78 {
79 CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(avatarID); 79 CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(avatarID);
80 if (userInfo != null) 80 if (userInfo != null)
81 { 81 {
82 m_assMapper.Post(assetID, avatarID); 82 m_assMapper.Post(assetID, avatarID);
83 } 83 }
84 } 84 }
85 85
86 #endregion 86 #endregion
87 87
88 #region Overrides of Scene.Inventory methods 88 #region Overrides of Scene.Inventory methods
89 89
90 /// 90 ///
91 /// CapsUpdateInventoryItemAsset 91 /// CapsUpdateInventoryItemAsset
92 /// 92 ///
93 public override UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data) 93 public override UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data)
94 { 94 {
95 UUID newAssetID = base.CapsUpdateInventoryItemAsset(remoteClient, itemID, data); 95 UUID newAssetID = base.CapsUpdateInventoryItemAsset(remoteClient, itemID, data);
96 96
97 UploadInventoryItem(remoteClient.AgentId, newAssetID, "", 0); 97 UploadInventoryItem(remoteClient.AgentId, newAssetID, "", 0);
98 98
99 return newAssetID; 99 return newAssetID;
100 } 100 }
101 101
102 /// 102 ///
103 /// DeleteToInventory 103 /// DeleteToInventory
104 /// 104 ///
105 public override UUID DeleteToInventory(int destination, UUID folderID, SceneObjectGroup objectGroup, IClientAPI remoteClient) 105 public override UUID DeleteToInventory(int destination, UUID folderID, SceneObjectGroup objectGroup, IClientAPI remoteClient)
106 { 106 {
107 UUID assetID = base.DeleteToInventory(destination, folderID, objectGroup, remoteClient); 107 UUID assetID = base.DeleteToInventory(destination, folderID, objectGroup, remoteClient);
108 108
109 if (!assetID.Equals(UUID.Zero)) 109 if (!assetID.Equals(UUID.Zero))
110 { 110 {
111 UploadInventoryItem(remoteClient.AgentId, assetID, "", 0); 111 UploadInventoryItem(remoteClient.AgentId, assetID, "", 0);
112 } 112 }
113 else 113 else
114 m_log.Debug("[HGScene]: Scene.Inventory did not create asset"); 114 m_log.Debug("[HGScene]: Scene.Inventory did not create asset");
115 115
116 return assetID; 116 return assetID;
117 } 117 }
118 118
119 /// 119 ///
120 /// RezObject 120 /// RezObject
121 /// 121 ///
122 public override SceneObjectGroup RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart, 122 public override SceneObjectGroup RezObject(IClientAPI remoteClient, UUID itemID, Vector3 RayEnd, Vector3 RayStart,
123 UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection, 123 UUID RayTargetID, byte BypassRayCast, bool RayEndIsIntersection,
124 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment) 124 bool RezSelected, bool RemoveItem, UUID fromTaskID, bool attachment)
125 { 125 {
126 CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); 126 CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
127 if (userInfo != null) 127 if (userInfo != null)
128 { 128 {
129 if (userInfo.RootFolder != null) 129 if (userInfo.RootFolder != null)
130 { 130 {
131 InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); 131 InventoryItemBase item = userInfo.RootFolder.FindItem(itemID);
132 132
133 if (item != null) 133 if (item != null)
134 { 134 {
135 m_assMapper.Get(item.AssetID, remoteClient.AgentId); 135 m_assMapper.Get(item.AssetID, remoteClient.AgentId);
136 136
137 } 137 }
138 } 138 }
139 } 139 }
140 140
141 // OK, we're done fetching. Pass it up to the default RezObject 141 // OK, we're done fetching. Pass it up to the default RezObject
142 return base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection, 142 return base.RezObject(remoteClient, itemID, RayEnd, RayStart, RayTargetID, BypassRayCast, RayEndIsIntersection,
143 RezSelected, RemoveItem, fromTaskID, attachment); 143 RezSelected, RemoveItem, fromTaskID, attachment);
144 144
145 } 145 }
146 146
147 147
148 #endregion 148 #endregion
149 149
150 } 150 }
151 151
152} 152}
diff --git a/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.cs b/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.cs
index a1a6173..da1d3a7 100644
--- a/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.cs
+++ b/OpenSim/Region/Environment/Scenes/Hypergrid/HGScene.cs
@@ -1,78 +1,78 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31 31
32using OpenMetaverse; 32using OpenMetaverse;
33 33
34using OpenSim.Framework; 34using OpenSim.Framework;
35 35
36using OpenSim.Framework.Communications.Cache; 36using OpenSim.Framework.Communications.Cache;
37using OpenSim.Region.Environment; 37using OpenSim.Region.Environment;
38using OpenSim.Region.Environment.Scenes; 38using OpenSim.Region.Environment.Scenes;
39using TPFlags = OpenSim.Framework.Constants.TeleportFlags; 39using TPFlags = OpenSim.Framework.Constants.TeleportFlags;
40 40
41namespace OpenSim.Region.Environment.Scenes.Hypergrid 41namespace OpenSim.Region.Environment.Scenes.Hypergrid
42{ 42{
43 public partial class HGScene : Scene 43 public partial class HGScene : Scene
44 { 44 {
45 /// <summary> 45 /// <summary>
46 /// Teleport an avatar to their home region 46 /// Teleport an avatar to their home region
47 /// </summary> 47 /// </summary>
48 /// <param name="agentId"></param> 48 /// <param name="agentId"></param>
49 /// <param name="client"></param> 49 /// <param name="client"></param>
50 public override void TeleportClientHome(UUID agentId, IClientAPI client) 50 public override void TeleportClientHome(UUID agentId, IClientAPI client)
51 { 51 {
52 m_log.Debug("[HGScene]: TeleportClientHome " + client.FirstName + " " + client.LastName); 52 m_log.Debug("[HGScene]: TeleportClientHome " + client.FirstName + " " + client.LastName);
53 53
54 CachedUserInfo uinfo = CommsManager.UserProfileCacheService.GetUserDetails(agentId); 54 CachedUserInfo uinfo = CommsManager.UserProfileCacheService.GetUserDetails(agentId);
55 UserProfileData UserProfile = uinfo.UserProfile; 55 UserProfileData UserProfile = uinfo.UserProfile;
56 56
57 if (UserProfile != null) 57 if (UserProfile != null)
58 { 58 {
59 RegionInfo regionInfo = CommsManager.GridService.RequestNeighbourInfo(UserProfile.HomeRegion); 59 RegionInfo regionInfo = CommsManager.GridService.RequestNeighbourInfo(UserProfile.HomeRegion);
60 //if (regionInfo != null) 60 //if (regionInfo != null)
61 //{ 61 //{
62 // UserProfile.HomeRegionID = regionInfo.RegionID; 62 // UserProfile.HomeRegionID = regionInfo.RegionID;
63 // //CommsManager.UserService.UpdateUserProfile(UserProfile); 63 // //CommsManager.UserService.UpdateUserProfile(UserProfile);
64 //} 64 //}
65 if (regionInfo == null) 65 if (regionInfo == null)
66 { 66 {
67 // can't find the Home region: Tell viewer and abort 67 // can't find the Home region: Tell viewer and abort
68 client.SendTeleportFailed("Your home-region could not be found."); 68 client.SendTeleportFailed("Your home-region could not be found.");
69 return; 69 return;
70 } 70 }
71 RequestTeleportLocation( 71 RequestTeleportLocation(
72 client, regionInfo.RegionHandle, UserProfile.HomeLocation, UserProfile.HomeLookAt, 72 client, regionInfo.RegionHandle, UserProfile.HomeLocation, UserProfile.HomeLookAt,
73 (uint)(TPFlags.SetLastToTarget | TPFlags.ViaHome)); 73 (uint)(TPFlags.SetLastToTarget | TPFlags.ViaHome));
74 } 74 }
75 } 75 }
76 76
77 } 77 }
78} 78}
diff --git a/OpenSim/Region/Environment/Scenes/Hypergrid/HGSceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/Hypergrid/HGSceneCommunicationService.cs
index 501584a..9eb331a 100644
--- a/OpenSim/Region/Environment/Scenes/Hypergrid/HGSceneCommunicationService.cs
+++ b/OpenSim/Region/Environment/Scenes/Hypergrid/HGSceneCommunicationService.cs
@@ -1,263 +1,263 @@
1/** 1/**
2 * Copyright (c) 2008, Contributors. All rights reserved. 2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders. 3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without modification, 5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met: 6 * are permitted provided that the following conditions are met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright notice, 8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer. 9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice, 10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation 11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution. 12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual 13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from 14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission. 15 * this software without specific prior written permission.
16 * 16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 21 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 22 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
25 * OF THE POSSIBILITY OF SUCH DAMAGE. 25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 * 26 *
27 */ 27 */
28 28
29using System; 29using System;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Reflection; 31using System.Reflection;
32using System.Threading; 32using System.Threading;
33 33
34using OpenMetaverse; 34using OpenMetaverse;
35 35
36using log4net; 36using log4net;
37using OpenSim.Framework; 37using OpenSim.Framework;
38using OpenSim.Framework.Communications; 38using OpenSim.Framework.Communications;
39using OpenSim.Framework.Communications.Cache; 39using OpenSim.Framework.Communications.Cache;
40using OpenSim.Region.Environment.Scenes; 40using OpenSim.Region.Environment.Scenes;
41using OpenSim.Region.Environment; 41using OpenSim.Region.Environment;
42using OpenSim.Region.Interfaces; 42using OpenSim.Region.Interfaces;
43using OSD = OpenMetaverse.StructuredData.OSD; 43using OSD = OpenMetaverse.StructuredData.OSD;
44 44
45namespace OpenSim.Region.Environment.Scenes.Hypergrid 45namespace OpenSim.Region.Environment.Scenes.Hypergrid
46{ 46{
47 public class HGSceneCommunicationService : SceneCommunicationService 47 public class HGSceneCommunicationService : SceneCommunicationService
48 { 48 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50 50
51 private IHyperlink m_hg; 51 private IHyperlink m_hg;
52 52
53 public HGSceneCommunicationService(CommunicationsManager commsMan, IHyperlink hg) : base(commsMan) 53 public HGSceneCommunicationService(CommunicationsManager commsMan, IHyperlink hg) : base(commsMan)
54 { 54 {
55 m_hg = hg; 55 m_hg = hg;
56 } 56 }
57 57
58 58
59 /// <summary> 59 /// <summary>
60 /// Try to teleport an agent to a new region. 60 /// Try to teleport an agent to a new region.
61 /// </summary> 61 /// </summary>
62 /// <param name="remoteClient"></param> 62 /// <param name="remoteClient"></param>
63 /// <param name="RegionHandle"></param> 63 /// <param name="RegionHandle"></param>
64 /// <param name="position"></param> 64 /// <param name="position"></param>
65 /// <param name="lookAt"></param> 65 /// <param name="lookAt"></param>
66 /// <param name="flags"></param> 66 /// <param name="flags"></param>
67 public override void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, Vector3 position, 67 public override void RequestTeleportToLocation(ScenePresence avatar, ulong regionHandle, Vector3 position,
68 Vector3 lookAt, uint teleportFlags) 68 Vector3 lookAt, uint teleportFlags)
69 { 69 {
70 if (!avatar.Scene.Permissions.CanTeleport(avatar.UUID)) 70 if (!avatar.Scene.Permissions.CanTeleport(avatar.UUID))
71 return; 71 return;
72 72
73 bool destRegionUp = false; 73 bool destRegionUp = false;
74 74
75 IEventQueue eq = avatar.Scene.RequestModuleInterface<IEventQueue>(); 75 IEventQueue eq = avatar.Scene.RequestModuleInterface<IEventQueue>();
76 76
77 if (regionHandle == m_regionInfo.RegionHandle) 77 if (regionHandle == m_regionInfo.RegionHandle)
78 { 78 {
79 // Teleport within the same region 79 // Teleport within the same region
80 if (position.X < 0 || position.X > Constants.RegionSize || position.Y < 0 || position.Y > Constants.RegionSize || position.Z < 0) 80 if (position.X < 0 || position.X > Constants.RegionSize || position.Y < 0 || position.Y > Constants.RegionSize || position.Z < 0)
81 { 81 {
82 Vector3 emergencyPos = new Vector3(128, 128, 128); 82 Vector3 emergencyPos = new Vector3(128, 128, 128);
83 83
84 m_log.WarnFormat( 84 m_log.WarnFormat(
85 "[HGSceneCommService]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", 85 "[HGSceneCommService]: RequestTeleportToLocation() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}",
86 position, avatar.Name, avatar.UUID, emergencyPos); 86 position, avatar.Name, avatar.UUID, emergencyPos);
87 position = emergencyPos; 87 position = emergencyPos;
88 } 88 }
89 // TODO: Get proper AVG Height 89 // TODO: Get proper AVG Height
90 float localAVHeight = 1.56f; 90 float localAVHeight = 1.56f;
91 float posZLimit = (float)avatar.Scene.GetLandHeight((int)position.X, (int)position.Y); 91 float posZLimit = (float)avatar.Scene.GetLandHeight((int)position.X, (int)position.Y);
92 float newPosZ = posZLimit + localAVHeight; 92 float newPosZ = posZLimit + localAVHeight;
93 if (posZLimit >= (position.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ))) 93 if (posZLimit >= (position.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ)))
94 { 94 {
95 position.Z = newPosZ; 95 position.Z = newPosZ;
96 } 96 }
97 97
98 // Only send this if the event queue is null 98 // Only send this if the event queue is null
99 if (eq == null) 99 if (eq == null)
100 avatar.ControllingClient.SendTeleportLocationStart(); 100 avatar.ControllingClient.SendTeleportLocationStart();
101 101
102 102
103 avatar.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags); 103 avatar.ControllingClient.SendLocalTeleport(position, lookAt, teleportFlags);
104 avatar.Teleport(position); 104 avatar.Teleport(position);
105 } 105 }
106 else 106 else
107 { 107 {
108 RegionInfo reg = RequestNeighbouringRegionInfo(regionHandle); 108 RegionInfo reg = RequestNeighbouringRegionInfo(regionHandle);
109 if (reg != null) 109 if (reg != null)
110 { 110 {
111 /// 111 ///
112 /// Hypergrid mod start 112 /// Hypergrid mod start
113 /// 113 ///
114 /// 114 ///
115 bool isHyperLink = m_hg.IsHyperlinkRegion(reg.RegionHandle); 115 bool isHyperLink = m_hg.IsHyperlinkRegion(reg.RegionHandle);
116 bool isHomeUser = true; 116 bool isHomeUser = true;
117 ulong realHandle = regionHandle; 117 ulong realHandle = regionHandle;
118 CachedUserInfo uinfo = m_commsProvider.UserProfileCacheService.GetUserDetails(avatar.UUID); 118 CachedUserInfo uinfo = m_commsProvider.UserProfileCacheService.GetUserDetails(avatar.UUID);
119 if (uinfo != null) 119 if (uinfo != null)
120 { 120 {
121 isHomeUser = HGNetworkServersInfo.Singleton.IsLocalUser(uinfo.UserProfile.UserAssetURI); 121 isHomeUser = HGNetworkServersInfo.Singleton.IsLocalUser(uinfo.UserProfile.UserAssetURI);
122 realHandle = m_hg.FindRegionHandle(regionHandle); 122 realHandle = m_hg.FindRegionHandle(regionHandle);
123 Console.WriteLine("XXX ---- home user? " + isHomeUser + " --- hyperlink? " + isHyperLink + " --- real handle: " + realHandle.ToString()); 123 Console.WriteLine("XXX ---- home user? " + isHomeUser + " --- hyperlink? " + isHyperLink + " --- real handle: " + realHandle.ToString());
124 } 124 }
125 /// 125 ///
126 /// Hypergrid mod stop 126 /// Hypergrid mod stop
127 /// 127 ///
128 /// 128 ///
129 129
130 if (eq == null) 130 if (eq == null)
131 avatar.ControllingClient.SendTeleportLocationStart(); 131 avatar.ControllingClient.SendTeleportLocationStart();
132 132
133 AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo(); 133 AgentCircuitData agent = avatar.ControllingClient.RequestClientInfo();
134 agent.BaseFolder = UUID.Zero; 134 agent.BaseFolder = UUID.Zero;
135 agent.InventoryFolder = UUID.Zero; 135 agent.InventoryFolder = UUID.Zero;
136 agent.startpos = position; 136 agent.startpos = position;
137 agent.child = true; 137 agent.child = true;
138 138
139 if (reg.RemotingAddress != "" && reg.RemotingPort != 0) 139 if (reg.RemotingAddress != "" && reg.RemotingPort != 0)
140 { 140 {
141 // region is remote. see if it is up 141 // region is remote. see if it is up
142 destRegionUp = m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort); 142 destRegionUp = m_commsProvider.InterRegion.CheckRegion(reg.RemotingAddress, reg.RemotingPort);
143 } 143 }
144 else 144 else
145 { 145 {
146 // assume local regions are always up 146 // assume local regions are always up
147 destRegionUp = true; 147 destRegionUp = true;
148 } 148 }
149 149
150 if (destRegionUp) 150 if (destRegionUp)
151 { 151 {
152 // Fixing a bug where teleporting while sitting results in the avatar ending up removed from 152 // Fixing a bug where teleporting while sitting results in the avatar ending up removed from
153 // both regions 153 // both regions
154 if (avatar.ParentID != (uint)0) 154 if (avatar.ParentID != (uint)0)
155 avatar.StandUp(); 155 avatar.StandUp();
156 if (!avatar.ValidateAttachments()) 156 if (!avatar.ValidateAttachments())
157 { 157 {
158 avatar.ControllingClient.SendTeleportFailed("Inconsistent attachment state"); 158 avatar.ControllingClient.SendTeleportFailed("Inconsistent attachment state");
159 return; 159 return;
160 } 160 }
161 161
162 // the avatar.Close below will clear the child region list. We need this below for (possibly) 162 // the avatar.Close below will clear the child region list. We need this below for (possibly)
163 // closing the child agents, so save it here (we need a copy as it is Clear()-ed). 163 // closing the child agents, so save it here (we need a copy as it is Clear()-ed).
164 List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList()); 164 List<ulong> childRegions = new List<ulong>(avatar.GetKnownRegionList());
165 // Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport 165 // Compared to ScenePresence.CrossToNewRegion(), there's no obvious code to handle a teleport
166 // failure at this point (unlike a border crossing failure). So perhaps this can never fail 166 // failure at this point (unlike a border crossing failure). So perhaps this can never fail
167 // once we reach here... 167 // once we reach here...
168 avatar.Scene.RemoveCapsHandler(avatar.UUID); 168 avatar.Scene.RemoveCapsHandler(avatar.UUID);
169 agent.child = false; 169 agent.child = false;
170 m_commsProvider.InterRegion.InformRegionOfChildAgent(reg.RegionHandle, agent); 170 m_commsProvider.InterRegion.InformRegionOfChildAgent(reg.RegionHandle, agent);
171 171
172 m_commsProvider.InterRegion.ExpectAvatarCrossing(reg.RegionHandle, avatar.ControllingClient.AgentId, 172 m_commsProvider.InterRegion.ExpectAvatarCrossing(reg.RegionHandle, avatar.ControllingClient.AgentId,
173 position, false); 173 position, false);
174 Thread.Sleep(2000); 174 Thread.Sleep(2000);
175 AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo(); 175 AgentCircuitData circuitdata = avatar.ControllingClient.RequestClientInfo();
176 176
177 // TODO Should construct this behind a method 177 // TODO Should construct this behind a method
178 string capsPath = 178 string capsPath =
179 "http://" + reg.ExternalHostName + ":" + reg.HttpPort 179 "http://" + reg.ExternalHostName + ":" + reg.HttpPort
180 + "/CAPS/" + circuitdata.CapsPath + "0000/"; 180 + "/CAPS/" + circuitdata.CapsPath + "0000/";
181 181
182 m_log.DebugFormat( 182 m_log.DebugFormat(
183 "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID); 183 "[CAPS]: Sending new CAPS seed url {0} to client {1}", capsPath, avatar.UUID);
184 184
185 185
186 /// 186 ///
187 /// Hypergrid mod: realHandle instead of reg.RegionHandle 187 /// Hypergrid mod: realHandle instead of reg.RegionHandle
188 /// 188 ///
189 /// 189 ///
190 if (eq != null) 190 if (eq != null)
191 { 191 {
192 OSD Item = EventQueueHelper.TeleportFinishEvent(realHandle, 13, reg.ExternalEndPoint, 192 OSD Item = EventQueueHelper.TeleportFinishEvent(realHandle, 13, reg.ExternalEndPoint,
193 4, teleportFlags, capsPath, avatar.UUID); 193 4, teleportFlags, capsPath, avatar.UUID);
194 eq.Enqueue(Item, avatar.UUID); 194 eq.Enqueue(Item, avatar.UUID);
195 } 195 }
196 else 196 else
197 { 197 {
198 avatar.ControllingClient.SendRegionTeleport(realHandle, 13, reg.ExternalEndPoint, 4, 198 avatar.ControllingClient.SendRegionTeleport(realHandle, 13, reg.ExternalEndPoint, 4,
199 teleportFlags, capsPath); 199 teleportFlags, capsPath);
200 } 200 }
201 /// 201 ///
202 /// Hypergrid mod stop 202 /// Hypergrid mod stop
203 /// 203 ///
204 204
205 avatar.MakeChildAgent(); 205 avatar.MakeChildAgent();
206 Thread.Sleep(7000); 206 Thread.Sleep(7000);
207 avatar.CrossAttachmentsIntoNewRegion(reg.RegionHandle, true); 207 avatar.CrossAttachmentsIntoNewRegion(reg.RegionHandle, true);
208 if (KiPrimitive != null) 208 if (KiPrimitive != null)
209 { 209 {
210 KiPrimitive(avatar.LocalId); 210 KiPrimitive(avatar.LocalId);
211 } 211 }
212 212
213 avatar.Close(); 213 avatar.Close();
214 214
215 uint newRegionX = (uint)(reg.RegionHandle >> 40); 215 uint newRegionX = (uint)(reg.RegionHandle >> 40);
216 uint newRegionY = (((uint)(reg.RegionHandle)) >> 8); 216 uint newRegionY = (((uint)(reg.RegionHandle)) >> 8);
217 uint oldRegionX = (uint)(m_regionInfo.RegionHandle >> 40); 217 uint oldRegionX = (uint)(m_regionInfo.RegionHandle >> 40);
218 uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8); 218 uint oldRegionY = (((uint)(m_regionInfo.RegionHandle)) >> 8);
219 /// 219 ///
220 /// Hypergrid mod: extra check for isHyperLink 220 /// Hypergrid mod: extra check for isHyperLink
221 /// 221 ///
222 if ((Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3) || isHyperLink) 222 if ((Util.fast_distance2d((int)(newRegionX - oldRegionX), (int)(newRegionY - oldRegionY)) > 3) || isHyperLink)
223 { 223 {
224 //SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList()); 224 //SendCloseChildAgentConnections(avatar.UUID, avatar.GetKnownRegionList());
225 SendCloseChildAgentConnections(avatar.UUID, childRegions); 225 SendCloseChildAgentConnections(avatar.UUID, childRegions);
226 CloseConnection(avatar.UUID); 226 CloseConnection(avatar.UUID);
227 } 227 }
228 // if (teleport success) // seems to be always success here 228 // if (teleport success) // seems to be always success here
229 // the user may change their profile information in other region, 229 // the user may change their profile information in other region,
230 // so the userinfo in UserProfileCache is not reliable any more, delete it 230 // so the userinfo in UserProfileCache is not reliable any more, delete it
231 if (avatar.Scene.NeedSceneCacheClear(avatar.UUID)) 231 if (avatar.Scene.NeedSceneCacheClear(avatar.UUID))
232 m_commsProvider.UserProfileCacheService.RemoveUser(avatar.UUID); 232 m_commsProvider.UserProfileCacheService.RemoveUser(avatar.UUID);
233 m_log.InfoFormat("[HGSceneCommService]: User {0} is going to another region, profile cache removed", avatar.UUID); 233 m_log.InfoFormat("[HGSceneCommService]: User {0} is going to another region, profile cache removed", avatar.UUID);
234 } 234 }
235 else 235 else
236 { 236 {
237 avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down"); 237 avatar.ControllingClient.SendTeleportFailed("Remote Region appears to be down");
238 } 238 }
239 } 239 }
240 else 240 else
241 { 241 {
242 // TP to a place that doesn't exist (anymore) 242 // TP to a place that doesn't exist (anymore)
243 // Inform the viewer about that 243 // Inform the viewer about that
244 avatar.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore"); 244 avatar.ControllingClient.SendTeleportFailed("The region you tried to teleport to doesn't exist anymore");
245 245
246 // and set the map-tile to '(Offline)' 246 // and set the map-tile to '(Offline)'
247 uint regX, regY; 247 uint regX, regY;
248 Utils.LongToUInts(regionHandle, out regX, out regY); 248 Utils.LongToUInts(regionHandle, out regX, out regY);
249 249
250 MapBlockData block = new MapBlockData(); 250 MapBlockData block = new MapBlockData();
251 block.X = (ushort)(regX / Constants.RegionSize); 251 block.X = (ushort)(regX / Constants.RegionSize);
252 block.Y = (ushort)(regY / Constants.RegionSize); 252 block.Y = (ushort)(regY / Constants.RegionSize);
253 block.Access = 254; // == not there 253 block.Access = 254; // == not there
254 254
255 List<MapBlockData> blocks = new List<MapBlockData>(); 255 List<MapBlockData> blocks = new List<MapBlockData>();
256 blocks.Add(block); 256 blocks.Add(block);
257 avatar.ControllingClient.SendMapBlock(blocks, 0); 257 avatar.ControllingClient.SendMapBlock(blocks, 0);
258 } 258 }
259 } 259 }
260 } 260 }
261 261
262 } 262 }
263} 263}