diff options
author | Diva Canto | 2010-10-03 20:35:26 -0700 |
---|---|---|
committer | Diva Canto | 2010-10-03 20:35:26 -0700 |
commit | 934ae03d44716e7102d4548045a6aed891209603 (patch) | |
tree | 1f3f814e2f83797ccb5131bd9df0989bdaf19f3b /OpenSim/Server | |
parent | Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC-934ae03d44716e7102d4548045a6aed891209603.zip opensim-SC-934ae03d44716e7102d4548045a6aed891209603.tar.gz opensim-SC-934ae03d44716e7102d4548045a6aed891209603.tar.bz2 opensim-SC-934ae03d44716e7102d4548045a6aed891209603.tar.xz |
Made the Gatekeeper proxy-able.
Diffstat (limited to 'OpenSim/Server')
-rw-r--r-- | OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs | 3 | ||||
-rw-r--r-- | OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs | 6 | ||||
-rw-r--r-- | OpenSim/Server/Handlers/Simulation/AgentHandlers.cs | 22 |
3 files changed, 28 insertions, 3 deletions
diff --git a/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs index c951653..31eefb1 100644 --- a/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Hypergrid/AgentHandlers.cs | |||
@@ -54,9 +54,10 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
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 | private IGatekeeperService m_GatekeeperService; | 55 | private IGatekeeperService m_GatekeeperService; |
56 | 56 | ||
57 | public GatekeeperAgentHandler(IGatekeeperService gatekeeper) | 57 | public GatekeeperAgentHandler(IGatekeeperService gatekeeper, bool proxy) |
58 | { | 58 | { |
59 | m_GatekeeperService = gatekeeper; | 59 | m_GatekeeperService = gatekeeper; |
60 | m_Proxy = proxy; | ||
60 | } | 61 | } |
61 | 62 | ||
62 | protected override bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason) | 63 | protected override bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason) |
diff --git a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs index dcb2725..49de8b1 100644 --- a/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs +++ b/OpenSim/Server/Handlers/Hypergrid/GatekeeperServerConnector.cs | |||
@@ -51,6 +51,8 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
51 | get { return m_GatekeeperService; } | 51 | get { return m_GatekeeperService; } |
52 | } | 52 | } |
53 | 53 | ||
54 | bool m_Proxy = false; | ||
55 | |||
54 | public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, ISimulationService simService) : | 56 | public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server, ISimulationService simService) : |
55 | base(config, server, String.Empty) | 57 | base(config, server, String.Empty) |
56 | { | 58 | { |
@@ -65,11 +67,13 @@ namespace OpenSim.Server.Handlers.Hypergrid | |||
65 | if (m_GatekeeperService == null) | 67 | if (m_GatekeeperService == null) |
66 | throw new Exception("Gatekeeper server connector cannot proceed because of missing service"); | 68 | throw new Exception("Gatekeeper server connector cannot proceed because of missing service"); |
67 | 69 | ||
70 | m_Proxy = gridConfig.GetBoolean("HasProxy", false); | ||
71 | |||
68 | HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService); | 72 | HypergridHandlers hghandlers = new HypergridHandlers(m_GatekeeperService); |
69 | server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false); | 73 | server.AddXmlRPCHandler("link_region", hghandlers.LinkRegionRequest, false); |
70 | server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false); | 74 | server.AddXmlRPCHandler("get_region", hghandlers.GetRegion, false); |
71 | 75 | ||
72 | server.AddHTTPHandler("/foreignagent/", new GatekeeperAgentHandler(m_GatekeeperService).Handler); | 76 | server.AddHTTPHandler("/foreignagent/", new GatekeeperAgentHandler(m_GatekeeperService, m_Proxy).Handler); |
73 | } | 77 | } |
74 | 78 | ||
75 | public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server) | 79 | public GatekeeperServiceInConnector(IConfigSource config, IHttpServer server) |
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs index 2997430..1f7e502 100644 --- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs | |||
@@ -52,6 +52,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
52 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 52 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
53 | private ISimulationService m_SimulationService; | 53 | private ISimulationService m_SimulationService; |
54 | 54 | ||
55 | protected bool m_Proxy = false; | ||
56 | |||
55 | public AgentHandler() { } | 57 | public AgentHandler() { } |
56 | 58 | ||
57 | public AgentHandler(ISimulationService sim) | 59 | public AgentHandler(ISimulationService sim) |
@@ -179,13 +181,31 @@ namespace OpenSim.Server.Handlers.Simulation | |||
179 | resp["reason"] = OSD.FromString(reason); | 181 | resp["reason"] = OSD.FromString(reason); |
180 | resp["success"] = OSD.FromBoolean(result); | 182 | resp["success"] = OSD.FromBoolean(result); |
181 | // Let's also send out the IP address of the caller back to the caller (HG 1.5) | 183 | // Let's also send out the IP address of the caller back to the caller (HG 1.5) |
182 | resp["your_ip"] = OSD.FromString(Util.GetCallerIP(request)); | 184 | resp["your_ip"] = OSD.FromString(GetCallerIP(request)); |
183 | 185 | ||
184 | // TODO: add reason if not String.Empty? | 186 | // TODO: add reason if not String.Empty? |
185 | responsedata["int_response_code"] = HttpStatusCode.OK; | 187 | responsedata["int_response_code"] = HttpStatusCode.OK; |
186 | responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); | 188 | responsedata["str_response_string"] = OSDParser.SerializeJsonString(resp); |
187 | } | 189 | } |
188 | 190 | ||
191 | private string GetCallerIP(Hashtable request) | ||
192 | { | ||
193 | if (!m_Proxy) | ||
194 | return Util.GetCallerIP(request); | ||
195 | |||
196 | // We're behind a proxy | ||
197 | Hashtable headers = (Hashtable)request["headers"]; | ||
198 | if (headers.ContainsKey("X-Forwarded-For") && headers["X-Forwarded-For"] != null) | ||
199 | { | ||
200 | IPEndPoint ep = Util.GetClientIPFromXFF((string)headers["X-Forwarded-For"]); | ||
201 | if (ep != null) | ||
202 | return ep.Address.ToString(); | ||
203 | } | ||
204 | |||
205 | // Oops | ||
206 | return Util.GetCallerIP(request); | ||
207 | } | ||
208 | |||
189 | // subclasses can override this | 209 | // subclasses can override this |
190 | protected virtual bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason) | 210 | protected virtual bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out string reason) |
191 | { | 211 | { |