diff --git a/OpenGridServices/OpenGridServices.UserServer/UserManager.cs b/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
index fdda63bcef..eb987836f5 100644
--- a/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
+++ b/OpenGridServices/OpenGridServices.UserServer/UserManager.cs
@@ -276,6 +276,21 @@ namespace OpenGridServices.UserServer
return response;
}
+ ///
+ /// Creates an error response caused by target region being down
+ ///
+ /// An XMLRPC Response
+ private static XmlRpcResponse CreateDeadRegionResponse()
+ {
+ XmlRpcResponse response = new XmlRpcResponse();
+ Hashtable PresenceErrorRespData = new Hashtable();
+ PresenceErrorRespData["reason"] = "key";
+ PresenceErrorRespData["message"] = "The region you are attempting to log into is not responding. Please select another region and try again.";
+ PresenceErrorRespData["login"] = "false";
+ response.Value = PresenceErrorRespData;
+ return response;
+ }
+
///
/// Customises the login response and fills in missing values.
///
@@ -560,7 +575,15 @@ namespace OpenGridServices.UserServer
responseData["session_id"] = TheUser.currentAgent.sessionID.ToStringHyphenated();
responseData["login"] = "true";
- this.CustomiseResponse(ref responseData, ref TheUser);
+ try
+ {
+ this.CustomiseResponse(ref responseData, ref TheUser);
+ }
+ catch (Exception e)
+ {
+ return CreateDeadRegionResponse();
+ Console.WriteLine(e.ToString());
+ }
CommitAgent(ref TheUser);