aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-11-25 15:19:00 +0000
committerJustin Clarke Casey2008-11-25 15:19:00 +0000
commite187972377c19bdd85093677c4c54034e4f9196e (patch)
treecc1bb5f003628b018b823eafc9ee0a67f98df31c /OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
parent* Adding some virtual hooks and making some privaets protected for great just... (diff)
downloadopensim-SC_OLD-e187972377c19bdd85093677c4c54034e4f9196e.zip
opensim-SC_OLD-e187972377c19bdd85093677c4c54034e4f9196e.tar.gz
opensim-SC_OLD-e187972377c19bdd85093677c4c54034e4f9196e.tar.bz2
opensim-SC_OLD-e187972377c19bdd85093677c4c54034e4f9196e.tar.xz
* Apply http://opensimulator.org/mantis/view.php?id=2640
* This is Diva's hypergrid patch, as perviously discussed on the opensim-dev mailing list * Applied some minor prebuild.xml jiggling to resolve a dependency issue * Thanks Diva!
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs')
-rw-r--r--OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs199
1 files changed, 199 insertions, 0 deletions
diff --git a/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
new file mode 100644
index 0000000..cfcda42
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/Hypergrid/HGStandaloneAssetService.cs
@@ -0,0 +1,199 @@
1/**
2 * Copyright (c) 2008, Contributors. All rights reserved.
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * * Neither the name of the Organizations nor the names of Individual
14 * Contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
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
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,
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
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
25 * OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */
28
29using System;
30using System.Collections.Generic;
31using System.Net;
32using System.Reflection;
33
34using log4net;
35using Nini.Config;
36
37using OpenMetaverse;
38
39using OpenSim.Framework;
40using OpenSim.Framework.Communications;
41using OpenSim.Framework.Communications.Cache;
42using OpenSim.Framework.Servers;
43using OpenSim.Region.Environment.Interfaces;
44using OpenSim.Region.Environment.Scenes;
45using OpenSim.Grid.AssetServer;
46
47namespace OpenSim.Region.Environment.Modules.Hypergrid
48{
49 public class HGStandaloneAssetService : IRegionModule
50 {
51 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
52 private static bool initialized = false;
53 private static bool enabled = false;
54
55 Scene m_scene;
56 AssetService m_assetService;
57
58 #region IRegionModule interface
59
60 public void Initialise(Scene scene, IConfigSource config)
61 {
62 if (!initialized)
63 {
64 initialized = true;
65 m_scene = scene;
66
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);
69 }
70 }
71
72 public void PostInitialise()
73 {
74 if (enabled)
75 {
76 m_log.Info("[HGStandaloneAssetService]: Starting...");
77
78 m_assetService = new AssetService(m_scene);
79 }
80 }
81
82 public void Close()
83 {
84 }
85
86 public string Name
87 {
88 get { return "HGStandaloneAssetService"; }
89 }
90
91 public bool IsSharedModule
92 {
93 get { return true; }
94 }
95
96 #endregion
97
98 }
99
100 public class AssetService
101 {
102 private IUserService m_userService;
103 private bool m_doLookup = false;
104
105 public bool DoLookup
106 {
107 get { return m_doLookup; }
108 set { m_doLookup = value; }
109 }
110 private static readonly ILog m_log
111 = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
112
113 public AssetService(Scene m_scene)
114 {
115 AddHttpHandlers(m_scene);
116 m_userService = m_scene.CommsManager.UserService;
117 }
118
119 protected void AddHttpHandlers(Scene m_scene)
120 {
121 IAssetProviderPlugin m_assetProvider = ((AssetServerBase)m_scene.AssetCache.AssetServer).AssetProviderPlugin;
122
123 m_scene.AddStreamHandler(new GetAssetStreamHandler(m_assetProvider));
124 m_scene.AddStreamHandler(new PostAssetStreamHandler(m_assetProvider));
125
126 }
127
128
129 ///// <summary>
130 ///// Check that the source of an inventory request is one that we trust.
131 ///// </summary>
132 ///// <param name="peer"></param>
133 ///// <returns></returns>
134 //public bool CheckTrustSource(IPEndPoint peer)
135 //{
136 // if (m_doLookup)
137 // {
138 // m_log.InfoFormat("[GRID AGENT INVENTORY]: Checking trusted source {0}", peer);
139 // UriBuilder ub = new UriBuilder(m_userserver_url);
140 // IPAddress[] uaddrs = Dns.GetHostAddresses(ub.Host);
141 // foreach (IPAddress uaddr in uaddrs)
142 // {
143 // if (uaddr.Equals(peer.Address))
144 // {
145 // return true;
146 // }
147 // }
148
149 // m_log.WarnFormat(
150 // "[GRID AGENT INVENTORY]: Rejecting request since source {0} was not in the list of trusted sources",
151 // peer);
152
153 // return false;
154 // }
155 // else
156 // {
157 // return true;
158 // }
159 //}
160
161 /// <summary>
162 /// Check that the source of an inventory request for a particular agent is a current session belonging to
163 /// that agent.
164 /// </summary>
165 /// <param name="session_id"></param>
166 /// <param name="avatar_id"></param>
167 /// <returns></returns>
168 public bool CheckAuthSession(string session_id, string avatar_id)
169 {
170 if (m_doLookup)
171 {
172 m_log.InfoFormat("[HGStandaloneInvService]: checking authed session {0} {1}", session_id, avatar_id);
173 UUID userID = UUID.Zero;
174 UUID sessionID = UUID.Zero;
175 UUID.TryParse(avatar_id, out userID);
176 UUID.TryParse(session_id, out sessionID);
177 if (userID.Equals(UUID.Zero) || sessionID.Equals(UUID.Zero))
178 {
179 m_log.Info("[HGStandaloneInvService]: Invalid user or session id " + avatar_id + "; " + session_id);
180 return false;
181 }
182 UserProfileData userProfile = m_userService.GetUserProfile(userID);
183 if (userProfile != null && userProfile.CurrentAgent != null &&
184 userProfile.CurrentAgent.SessionID == sessionID)
185 {
186 m_log.Info("[HGStandaloneInvService]: user is logged in and session is valid. Authorizing access.");
187 return true;
188 }
189
190 m_log.Warn("[HGStandaloneInvService]: unknown user or session_id, request rejected");
191 return false;
192 }
193 else
194 {
195 return true;
196 }
197 }
198 }
199}