aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs44
1 files changed, 39 insertions, 5 deletions
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 0a3e70b..cbe1af0 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -326,7 +326,7 @@ namespace OpenSim.Services.HypergridService
326 return false; 326 return false;
327 } 327 }
328 328
329 m_log.DebugFormat("[GATEKEEPER SERVICE]: User is OK"); 329 m_log.DebugFormat("[GATEKEEPER SERVICE]: User {0} is ok", aCircuit.Name);
330 330
331 bool isFirstLogin = false; 331 bool isFirstLogin = false;
332 // 332 //
@@ -345,7 +345,7 @@ namespace OpenSim.Services.HypergridService
345 aCircuit.firstname, aCircuit.lastname); 345 aCircuit.firstname, aCircuit.lastname);
346 return false; 346 return false;
347 } 347 }
348 m_log.DebugFormat("[GATEKEEPER SERVICE]: Login presence ok"); 348 m_log.DebugFormat("[GATEKEEPER SERVICE]: Login presence {0} is ok", aCircuit.Name);
349 349
350 // Also login foreigners with GridUser service 350 // Also login foreigners with GridUser service
351 if (m_GridUserService != null && account == null) 351 if (m_GridUserService != null && account == null)
@@ -376,7 +376,8 @@ namespace OpenSim.Services.HypergridService
376 reason = "Destination region not found"; 376 reason = "Destination region not found";
377 return false; 377 return false;
378 } 378 }
379 m_log.DebugFormat("[GATEKEEPER SERVICE]: destination ok: {0}", destination.RegionName); 379 m_log.DebugFormat(
380 "[GATEKEEPER SERVICE]: Destination {0} is ok for {1}", destination.RegionName, aCircuit.Name);
380 381
381 // 382 //
382 // Adjust the visible name 383 // Adjust the visible name
@@ -410,8 +411,41 @@ namespace OpenSim.Services.HypergridService
410 // Preserve our TeleportFlags we have gathered so-far 411 // Preserve our TeleportFlags we have gathered so-far
411 loginFlag |= (Constants.TeleportFlags) aCircuit.teleportFlags; 412 loginFlag |= (Constants.TeleportFlags) aCircuit.teleportFlags;
412 413
413 m_log.DebugFormat("[GATEKEEPER SERVICE]: launching agent {0}", loginFlag); 414 m_log.DebugFormat("[GATEKEEPER SERVICE]: Launching {0} {1}", aCircuit.Name, loginFlag);
414 return m_SimulationService.CreateAgent(destination, aCircuit, (uint)loginFlag, out reason); 415
416 bool success = m_SimulationService.CreateAgent(destination, aCircuit, (uint)loginFlag, out reason);
417
418 if (!success)
419 {
420 List<GridRegion> fallbackRegions = m_GridService.GetFallbackRegions(account.ScopeID, destination.RegionLocX, destination.RegionLocY);
421 if (fallbackRegions != null)
422 {
423 // Try the fallback regions
424 m_log.DebugFormat(
425 "[GATEKEEPER SERVICE]: Could not successfully log agent {0} into {1}. Trying fallback regions.",
426 aCircuit.Name, destination.RegionName);
427
428 foreach (GridRegion fallbackRegion in fallbackRegions)
429 {
430 m_log.DebugFormat(
431 "[GATEKEEPER SERVICE]: Trying fallback region {0} for {1}",
432 fallbackRegion.RegionName, aCircuit.Name);
433
434 success = m_SimulationService.CreateAgent(fallbackRegion, aCircuit, (uint)loginFlag, out reason);
435
436 if (success)
437 break;
438 }
439 }
440 else
441 {
442 m_log.DebugFormat(
443 "[GATEKEEPER SERVICE]: Could not successfully log agent {0} into {1} and no fallback regions to try.",
444 aCircuit.Name, destination.RegionName);
445 }
446 }
447
448 return success;
415 } 449 }
416 450
417 protected bool Authenticate(AgentCircuitData aCircuit) 451 protected bool Authenticate(AgentCircuitData aCircuit)