diff options
author | Diva Canto | 2010-08-19 18:55:30 -0700 |
---|---|---|
committer | Diva Canto | 2010-08-19 18:55:30 -0700 |
commit | 1955b797598d61548521c444ea8d3721fd5435ba (patch) | |
tree | f9c111e3e8a34e6ef56e1aeddea90a85dbe702f9 | |
parent | These files want to be committed. This time I'm doing it separately from othe... (diff) | |
download | opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.zip opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.gz opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.bz2 opensim-SC-1955b797598d61548521c444ea8d3721fd5435ba.tar.xz |
Partial rewrite of client IP verification. Not completely finished yet, and untested. Committing to move to my other computer.
8 files changed, 167 insertions, 47 deletions
diff --git a/OpenSim/Framework/Constants.cs b/OpenSim/Framework/Constants.cs index 5757061..1b1aaf2 100644 --- a/OpenSim/Framework/Constants.cs +++ b/OpenSim/Framework/Constants.cs | |||
@@ -83,7 +83,9 @@ namespace OpenSim.Framework | |||
83 | /// <summary>Finished, Sim Changed</summary> | 83 | /// <summary>Finished, Sim Changed</summary> |
84 | FinishedViaNewSim = 1 << 28, | 84 | FinishedViaNewSim = 1 << 28, |
85 | /// <summary>Finished, Same Sim</summary> | 85 | /// <summary>Finished, Same Sim</summary> |
86 | FinishedViaSameSim = 1 << 29 | 86 | FinishedViaSameSim = 1 << 29, |
87 | /// <summary>Agent coming into the grid from another grid</summary> | ||
88 | ViaHGLogin = 1 << 30 | ||
87 | } | 89 | } |
88 | 90 | ||
89 | } | 91 | } |
diff --git a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs index d261678..392927a 100644 --- a/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs +++ b/OpenSim/Server/Handlers/Simulation/AgentHandlers.cs | |||
@@ -178,6 +178,8 @@ namespace OpenSim.Server.Handlers.Simulation | |||
178 | 178 | ||
179 | resp["reason"] = OSD.FromString(reason); | 179 | resp["reason"] = OSD.FromString(reason); |
180 | resp["success"] = OSD.FromBoolean(result); | 180 | resp["success"] = OSD.FromBoolean(result); |
181 | // Let's also send out the IP address of the caller back to the caller (HG 1.5) | ||
182 | resp["your_ip"] = OSD.FromString(GetCallerIP(request)); | ||
181 | 183 | ||
182 | // TODO: add reason if not String.Empty? | 184 | // TODO: add reason if not String.Empty? |
183 | responsedata["int_response_code"] = HttpStatusCode.OK; | 185 | responsedata["int_response_code"] = HttpStatusCode.OK; |
@@ -352,6 +354,24 @@ namespace OpenSim.Server.Handlers.Simulation | |||
352 | { | 354 | { |
353 | m_SimulationService.ReleaseAgent(regionID, id, ""); | 355 | m_SimulationService.ReleaseAgent(regionID, id, ""); |
354 | } | 356 | } |
357 | |||
358 | private string GetCallerIP(Hashtable req) | ||
359 | { | ||
360 | if (req.ContainsKey("headers")) | ||
361 | { | ||
362 | try | ||
363 | { | ||
364 | Hashtable headers = (Hashtable)req["headers"]; | ||
365 | if (headers.ContainsKey("remote_addr") && headers["remote_addr"] != null) | ||
366 | return headers["remote_addr"].ToString(); | ||
367 | } | ||
368 | catch (Exception e) | ||
369 | { | ||
370 | m_log.WarnFormat("[AGENT HANDLER]: exception in GetCallerIP: {0}", e.Message); | ||
371 | } | ||
372 | } | ||
373 | return string.Empty; | ||
374 | } | ||
355 | } | 375 | } |
356 | 376 | ||
357 | } | 377 | } |
diff --git a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs index c426bba..291dd73 100644 --- a/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/GatekeeperServiceConnector.cs | |||
@@ -38,6 +38,7 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion; | |||
38 | 38 | ||
39 | using OpenMetaverse; | 39 | using OpenMetaverse; |
40 | using OpenMetaverse.Imaging; | 40 | using OpenMetaverse.Imaging; |
41 | using OpenMetaverse.StructuredData; | ||
41 | using Nwc.XmlRpc; | 42 | using Nwc.XmlRpc; |
42 | using log4net; | 43 | using log4net; |
43 | 44 | ||
@@ -268,5 +269,48 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
268 | return null; | 269 | return null; |
269 | } | 270 | } |
270 | 271 | ||
272 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string myipaddress, out string reason) | ||
273 | { | ||
274 | HttpWebRequest AgentCreateRequest = null; | ||
275 | myipaddress = String.Empty; | ||
276 | reason = String.Empty; | ||
277 | |||
278 | if (SendRequest(destination, aCircuit, flags, out reason, out AgentCreateRequest)) | ||
279 | { | ||
280 | string response = GetResponse(AgentCreateRequest, out reason); | ||
281 | bool success = true; | ||
282 | UnpackResponse(response, out success, out reason, out myipaddress); | ||
283 | return success; | ||
284 | } | ||
285 | |||
286 | return false; | ||
287 | } | ||
288 | |||
289 | protected void UnpackResponse(string response, out bool result, out string reason, out string ipaddress) | ||
290 | { | ||
291 | result = true; | ||
292 | reason = string.Empty; | ||
293 | ipaddress = string.Empty; | ||
294 | |||
295 | if (!String.IsNullOrEmpty(response)) | ||
296 | { | ||
297 | try | ||
298 | { | ||
299 | // we assume we got an OSDMap back | ||
300 | OSDMap r = Util.GetOSDMap(response); | ||
301 | result = r["success"].AsBoolean(); | ||
302 | reason = r["reason"].AsString(); | ||
303 | ipaddress = r["your_ip"].AsString(); | ||
304 | } | ||
305 | catch (NullReferenceException e) | ||
306 | { | ||
307 | m_log.InfoFormat("[GATEKEEPER SERVICE CONNECTOR]: exception on UnpackResponse of DoCreateChildAgentCall {0}", e.Message); | ||
308 | reason = "Internal error"; | ||
309 | result = false; | ||
310 | } | ||
311 | } | ||
312 | } | ||
313 | |||
314 | |||
271 | } | 315 | } |
272 | } | 316 | } |
diff --git a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs index 69dff3c..c1e5949 100644 --- a/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs +++ b/OpenSim/Services/Connectors/Hypergrid/UserAgentServiceConnector.cs | |||
@@ -73,6 +73,13 @@ namespace OpenSim.Services.Connectors.Hypergrid | |||
73 | { | 73 | { |
74 | } | 74 | } |
75 | 75 | ||
76 | public bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, IPEndPoint ipaddress, out string reason) | ||
77 | { | ||
78 | // not available over remote calls | ||
79 | reason = "Method not available over remote calls"; | ||
80 | return false; | ||
81 | } | ||
82 | |||
76 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) | 83 | public bool LoginAgentToGrid(AgentCircuitData aCircuit, GridRegion gatekeeper, GridRegion destination, out string reason) |
77 | { | 84 | { |
78 | reason = String.Empty; | 85 | reason = String.Empty; |
diff --git a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs index 6244565..2b96b96 100644 --- a/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Simulation/SimulationServiceConnector.cs | |||
@@ -77,8 +77,26 @@ namespace OpenSim.Services.Connectors.Simulation | |||
77 | 77 | ||
78 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) | 78 | public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason) |
79 | { | 79 | { |
80 | HttpWebRequest AgentCreateRequest = null; | ||
80 | reason = String.Empty; | 81 | reason = String.Empty; |
81 | 82 | ||
83 | if (SendRequest(destination, aCircuit, flags, out reason, out AgentCreateRequest)) | ||
84 | { | ||
85 | string response = GetResponse(AgentCreateRequest, out reason); | ||
86 | bool success = true; | ||
87 | UnpackResponse(response, out success, out reason); | ||
88 | return success; | ||
89 | } | ||
90 | |||
91 | return false; | ||
92 | } | ||
93 | |||
94 | |||
95 | protected bool SendRequest(GridRegion destination, AgentCircuitData aCircuit, uint flags, out string reason, out HttpWebRequest AgentCreateRequest) | ||
96 | { | ||
97 | reason = String.Empty; | ||
98 | AgentCreateRequest = null; | ||
99 | |||
82 | if (destination == null) | 100 | if (destination == null) |
83 | { | 101 | { |
84 | reason = "Destination is null"; | 102 | reason = "Destination is null"; |
@@ -101,7 +119,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
101 | 119 | ||
102 | //Console.WriteLine(" >>> DoCreateChildAgentCall <<< " + uri); | 120 | //Console.WriteLine(" >>> DoCreateChildAgentCall <<< " + uri); |
103 | 121 | ||
104 | HttpWebRequest AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri); | 122 | AgentCreateRequest = (HttpWebRequest)WebRequest.Create(uri); |
105 | AgentCreateRequest.Method = "POST"; | 123 | AgentCreateRequest.Method = "POST"; |
106 | AgentCreateRequest.ContentType = "application/json"; | 124 | AgentCreateRequest.ContentType = "application/json"; |
107 | AgentCreateRequest.Timeout = 10000; | 125 | AgentCreateRequest.Timeout = 10000; |
@@ -134,7 +152,7 @@ namespace OpenSim.Services.Connectors.Simulation | |||
134 | AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send | 152 | AgentCreateRequest.ContentLength = buffer.Length; //Count bytes to send |
135 | os = AgentCreateRequest.GetRequestStream(); | 153 | os = AgentCreateRequest.GetRequestStream(); |
136 | os.Write(buffer, 0, strBuffer.Length); //Send it | 154 | os.Write(buffer, 0, strBuffer.Length); //Send it |
137 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}", | 155 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: Posted CreateAgent request to remote sim {0}, region {1}, x={2} y={3}", |
138 | uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY); | 156 | uri, destination.RegionName, destination.RegionLocX, destination.RegionLocY); |
139 | } | 157 | } |
140 | //catch (WebException ex) | 158 | //catch (WebException ex) |
@@ -150,11 +168,18 @@ namespace OpenSim.Services.Connectors.Simulation | |||
150 | os.Close(); | 168 | os.Close(); |
151 | } | 169 | } |
152 | 170 | ||
171 | return true; | ||
172 | } | ||
173 | |||
174 | protected string GetResponse(HttpWebRequest AgentCreateRequest, out string reason) | ||
175 | { | ||
153 | // Let's wait for the response | 176 | // Let's wait for the response |
154 | //m_log.Info("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after DoCreateChildAgentCall"); | 177 | //m_log.Info("[REMOTE SIMULATION CONNECTOR]: Waiting for a reply after DoCreateChildAgentCall"); |
178 | reason = string.Empty; | ||
155 | 179 | ||
156 | WebResponse webResponse = null; | 180 | WebResponse webResponse = null; |
157 | StreamReader sr = null; | 181 | StreamReader sr = null; |
182 | string response = string.Empty; | ||
158 | try | 183 | try |
159 | { | 184 | { |
160 | webResponse = AgentCreateRequest.GetResponse(); | 185 | webResponse = AgentCreateRequest.GetResponse(); |
@@ -166,37 +191,15 @@ namespace OpenSim.Services.Connectors.Simulation | |||
166 | { | 191 | { |
167 | 192 | ||
168 | sr = new StreamReader(webResponse.GetResponseStream()); | 193 | sr = new StreamReader(webResponse.GetResponseStream()); |
169 | string response = sr.ReadToEnd().Trim(); | 194 | response = sr.ReadToEnd().Trim(); |
170 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response); | 195 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: DoCreateChildAgentCall reply was {0} ", response); |
171 | |||
172 | if (!String.IsNullOrEmpty(response)) | ||
173 | { | ||
174 | try | ||
175 | { | ||
176 | // we assume we got an OSDMap back | ||
177 | OSDMap r = Util.GetOSDMap(response); | ||
178 | bool success = r["success"].AsBoolean(); | ||
179 | reason = r["reason"].AsString(); | ||
180 | return success; | ||
181 | } | ||
182 | catch (NullReferenceException e) | ||
183 | { | ||
184 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message); | ||
185 | |||
186 | // check for old style response | ||
187 | if (response.ToLower().StartsWith("true")) | ||
188 | return true; | ||
189 | |||
190 | return false; | ||
191 | } | ||
192 | } | ||
193 | } | 196 | } |
194 | } | 197 | } |
195 | catch (WebException ex) | 198 | catch (WebException ex) |
196 | { | 199 | { |
197 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message); | 200 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", ex.Message); |
198 | reason = "Destination did not reply"; | 201 | reason = "Destination did not reply"; |
199 | return false; | 202 | return string.Empty; |
200 | } | 203 | } |
201 | finally | 204 | finally |
202 | { | 205 | { |
@@ -204,7 +207,33 @@ namespace OpenSim.Services.Connectors.Simulation | |||
204 | sr.Close(); | 207 | sr.Close(); |
205 | } | 208 | } |
206 | 209 | ||
207 | return true; | 210 | return response; |
211 | } | ||
212 | |||
213 | protected void UnpackResponse(string response, out bool result, out string reason) | ||
214 | { | ||
215 | result = true; | ||
216 | reason = string.Empty; | ||
217 | if (!String.IsNullOrEmpty(response)) | ||
218 | { | ||
219 | try | ||
220 | { | ||
221 | // we assume we got an OSDMap back | ||
222 | OSDMap r = Util.GetOSDMap(response); | ||
223 | result = r["success"].AsBoolean(); | ||
224 | reason = r["reason"].AsString(); | ||
225 | } | ||
226 | catch (NullReferenceException e) | ||
227 | { | ||
228 | m_log.InfoFormat("[REMOTE SIMULATION CONNECTOR]: exception on reply of DoCreateChildAgentCall {0}", e.Message); | ||
229 | |||
230 | // check for old style response | ||
231 | if (response.ToLower().StartsWith("true")) | ||
232 | result = true; | ||
233 | |||
234 | result = false; | ||
235 | } | ||
236 | } | ||
208 | } | 237 | } |
209 | 238 | ||
210 | protected virtual OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion destination, uint flags) | 239 | protected virtual OSDMap PackCreateAgentArguments(AgentCircuitData aCircuit, GridRegion destination, uint flags) |
diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index 181d7f2..6b14e21 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs | |||
@@ -131,10 +131,11 @@ namespace OpenSim.Services.HypergridService | |||
131 | return home; | 131 | return home; |
132 | } | 132 | } |
133 | 133 | ||
134 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason) | 134 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, IPEndPoint clientIP, out string reason) |
135 | { | 135 | { |
136 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} to grid {2}", | 136 | m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}", |
137 | agentCircuit.firstname, agentCircuit.lastname, gatekeeper.ExternalHostName +":"+ gatekeeper.HttpPort); | 137 | agentCircuit.firstname, agentCircuit.lastname, ((clientIP == null) ? "(stored IP)" : clientIP.ToString()), |
138 | gatekeeper.ExternalHostName +":"+ gatekeeper.HttpPort); | ||
138 | 139 | ||
139 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination | 140 | // Take the IP address + port of the gatekeeper (reg) plus the info of finalDestination |
140 | GridRegion region = new GridRegion(gatekeeper); | 141 | GridRegion region = new GridRegion(gatekeeper); |
@@ -149,11 +150,12 @@ namespace OpenSim.Services.HypergridService | |||
149 | 150 | ||
150 | //bool success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); | 151 | //bool success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); |
151 | bool success = false; | 152 | bool success = false; |
153 | string myExternalIP = string.Empty; | ||
152 | string gridName = "http://" + gatekeeper.ExternalHostName + ":" + gatekeeper.HttpPort; | 154 | string gridName = "http://" + gatekeeper.ExternalHostName + ":" + gatekeeper.HttpPort; |
153 | if (m_GridName == gridName) | 155 | if (m_GridName == gridName) |
154 | success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); | 156 | success = m_GatekeeperService.LoginAgent(agentCircuit, finalDestination, out reason); |
155 | else | 157 | else |
156 | success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out reason); | 158 | success = m_GatekeeperConnector.CreateAgent(region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, out myExternalIP, out reason); |
157 | 159 | ||
158 | if (!success) | 160 | if (!success) |
159 | { | 161 | { |
@@ -167,15 +169,25 @@ namespace OpenSim.Services.HypergridService | |||
167 | return false; | 169 | return false; |
168 | } | 170 | } |
169 | 171 | ||
172 | // else set the IP addresses associated with this client | ||
173 | if (clientIP != null) | ||
174 | m_TravelingAgents[agentCircuit.SessionID].ClientIPAddress = clientIP.ToString(); | ||
175 | m_TravelingAgents[agentCircuit.SessionID].MyIpAddress = myExternalIP; | ||
170 | return true; | 176 | return true; |
171 | } | 177 | } |
172 | 178 | ||
173 | public void SetClientToken(UUID sessionID, string token) | 179 | public bool LoginAgentToGrid(AgentCircuitData agentCircuit, GridRegion gatekeeper, GridRegion finalDestination, out string reason) |
180 | { | ||
181 | reason = string.Empty; | ||
182 | return LoginAgentToGrid(agentCircuit, gatekeeper, finalDestination, null, out reason); | ||
183 | } | ||
184 | |||
185 | private void SetClientIP(UUID sessionID, string ip) | ||
174 | { | 186 | { |
175 | if (m_TravelingAgents.ContainsKey(sessionID)) | 187 | if (m_TravelingAgents.ContainsKey(sessionID)) |
176 | { | 188 | { |
177 | m_log.DebugFormat("[USER AGENT SERVICE]: Setting token {0} for session {1}", token, sessionID); | 189 | m_log.DebugFormat("[USER AGENT SERVICE]: Setting IP {0} for session {1}", ip, sessionID); |
178 | m_TravelingAgents[sessionID].ClientToken = token; | 190 | m_TravelingAgents[sessionID].ClientIPAddress = ip; |
179 | } | 191 | } |
180 | } | 192 | } |
181 | 193 | ||
@@ -196,7 +208,7 @@ namespace OpenSim.Services.HypergridService | |||
196 | travel.GridExternalName = "http://" + region.ExternalHostName + ":" + region.HttpPort; | 208 | travel.GridExternalName = "http://" + region.ExternalHostName + ":" + region.HttpPort; |
197 | travel.ServiceToken = agentCircuit.ServiceSessionID; | 209 | travel.ServiceToken = agentCircuit.ServiceSessionID; |
198 | if (old != null) | 210 | if (old != null) |
199 | travel.ClientToken = old.ClientToken; | 211 | travel.ClientIPAddress = old.ClientIPAddress; |
200 | 212 | ||
201 | return old; | 213 | return old; |
202 | } | 214 | } |
@@ -233,15 +245,22 @@ namespace OpenSim.Services.HypergridService | |||
233 | return travel.GridExternalName == thisGridExternalName; | 245 | return travel.GridExternalName == thisGridExternalName; |
234 | } | 246 | } |
235 | 247 | ||
236 | public bool VerifyClient(UUID sessionID, string token) | 248 | public bool VerifyClient(UUID sessionID, string reportedIP) |
237 | { | 249 | { |
238 | if (m_BypassClientVerification) | 250 | if (m_BypassClientVerification) |
239 | return true; | 251 | return true; |
240 | 252 | ||
241 | m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with token {1}", sessionID, token); | 253 | m_log.DebugFormat("[USER AGENT SERVICE]: Verifying Client session {0} with reported IP {1}.", |
254 | sessionID, reportedIP); | ||
242 | 255 | ||
243 | if (m_TravelingAgents.ContainsKey(sessionID)) | 256 | if (m_TravelingAgents.ContainsKey(sessionID)) |
244 | return m_TravelingAgents[sessionID].ClientToken == token; | 257 | { |
258 | m_log.DebugFormat("[USER AGENT SERVICE]: Comparing with login IP {0} and MyIP {1}", | ||
259 | m_TravelingAgents[sessionID].ClientIPAddress, m_TravelingAgents[sessionID].MyIpAddress); | ||
260 | |||
261 | return m_TravelingAgents[sessionID].ClientIPAddress == reportedIP || | ||
262 | m_TravelingAgents[sessionID].MyIpAddress == reportedIP; // NATed | ||
263 | } | ||
245 | 264 | ||
246 | return false; | 265 | return false; |
247 | } | 266 | } |
@@ -266,7 +285,8 @@ namespace OpenSim.Services.HypergridService | |||
266 | public UUID UserID; | 285 | public UUID UserID; |
267 | public string GridExternalName = string.Empty; | 286 | public string GridExternalName = string.Empty; |
268 | public string ServiceToken = string.Empty; | 287 | public string ServiceToken = string.Empty; |
269 | public string ClientToken = string.Empty; | 288 | public string ClientIPAddress = string.Empty; // as seen from this user agent service |
289 | public string MyIpAddress = string.Empty; // the user agent service's external IP, as seen from the next gatekeeper | ||
270 | } | 290 | } |
271 | 291 | ||
272 | } | 292 | } |
diff --git a/OpenSim/Services/Interfaces/IGatekeeperService.cs b/OpenSim/Services/Interfaces/IGatekeeperService.cs index 2d397bc..aac8293 100644 --- a/OpenSim/Services/Interfaces/IGatekeeperService.cs +++ b/OpenSim/Services/Interfaces/IGatekeeperService.cs | |||
@@ -48,13 +48,15 @@ namespace OpenSim.Services.Interfaces | |||
48 | /// </summary> | 48 | /// </summary> |
49 | public interface IUserAgentService | 49 | public interface IUserAgentService |
50 | { | 50 | { |
51 | // called by login service only | ||
52 | bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, IPEndPoint clientIP, out string reason); | ||
53 | // called by simulators | ||
51 | bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, out string reason); | 54 | bool LoginAgentToGrid(AgentCircuitData agent, GridRegion gatekeeper, GridRegion finalDestination, out string reason); |
52 | void SetClientToken(UUID sessionID, string token); | ||
53 | void LogoutAgent(UUID userID, UUID sessionID); | 55 | void LogoutAgent(UUID userID, UUID sessionID); |
54 | GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt); | 56 | GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt); |
55 | 57 | ||
56 | bool AgentIsComingHome(UUID sessionID, string thisGridExternalName); | 58 | bool AgentIsComingHome(UUID sessionID, string thisGridExternalName); |
57 | bool VerifyAgent(UUID sessionID, string token); | 59 | bool VerifyAgent(UUID sessionID, string token); |
58 | bool VerifyClient(UUID sessionID, string token); | 60 | bool VerifyClient(UUID sessionID, string reportedIP); |
59 | } | 61 | } |
60 | } | 62 | } |
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 4b7cb5d..b740297 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs | |||
@@ -755,12 +755,8 @@ namespace OpenSim.Services.LLLoginService | |||
755 | private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason) | 755 | private bool LaunchAgentIndirectly(GridRegion gatekeeper, GridRegion destination, AgentCircuitData aCircuit, IPEndPoint clientIP, out string reason) |
756 | { | 756 | { |
757 | m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); | 757 | m_log.Debug("[LLOGIN SERVICE] Launching agent at " + destination.RegionName); |
758 | if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, out reason)) | 758 | if (m_UserAgentService.LoginAgentToGrid(aCircuit, gatekeeper, destination, clientIP, out reason)) |
759 | { | ||
760 | IPAddress addr = NetworkUtil.GetExternalIPOf(clientIP.Address); | ||
761 | m_UserAgentService.SetClientToken(aCircuit.SessionID, addr.ToString() /* clientIP.Address.ToString() */); | ||
762 | return true; | 759 | return true; |
763 | } | ||
764 | return false; | 760 | return false; |
765 | } | 761 | } |
766 | 762 | ||