diff --git a/OpenMetaverse/Login.cs b/OpenMetaverse/Login.cs index 0747d292..57c9b924 100644 --- a/OpenMetaverse/Login.cs +++ b/OpenMetaverse/Login.cs @@ -1420,7 +1420,7 @@ namespace OpenMetaverse // Start the request Thread requestThread = new Thread( - (ThreadStart)delegate() + delegate() { try { @@ -1478,9 +1478,16 @@ namespace OpenMetaverse uint regionY = 0; // Fetch the login response + if (response == null || !(response.Value is Hashtable)) + { + UpdateLoginStatus(LoginStatus.Failed, "Invalid or missing login response from the server"); + Logger.Log("Invalid or missing login response from the server", Helpers.LogLevel.Warning); + return; + } + try { - reply.Parse(response.Value as Hashtable); + reply.Parse((Hashtable)response.Value); if (context.LoginID != CurrentContext.Value.LoginID) { Logger.Log("Login response does not match login request. Only one login can be attempted at a time", @@ -1490,8 +1497,8 @@ namespace OpenMetaverse } catch (Exception e) { - UpdateLoginStatus(LoginStatus.Failed, "Error retrieving the login response from the server " + e.Message ); - Logger.Log("Login response failure: " + e.Message + " " + e.StackTrace, Helpers.LogLevel.Debug); + UpdateLoginStatus(LoginStatus.Failed, "Error retrieving the login response from the server: " + e.Message); + Logger.Log("Login response failure: " + e.Message + " " + e.StackTrace, Helpers.LogLevel.Warning); return; } diff --git a/OpenMetaverse/NetworkManager.cs b/OpenMetaverse/NetworkManager.cs index b6ec3f09..71bfa762 100644 --- a/OpenMetaverse/NetworkManager.cs +++ b/OpenMetaverse/NetworkManager.cs @@ -113,8 +113,6 @@ namespace OpenMetaverse { Simulator = simulator; Buffer = buffer; - ResendCount = 0; - TickCount = 0; } } diff --git a/OpenMetaverse/Simulator.cs b/OpenMetaverse/Simulator.cs index c98ed089..c120c18e 100644 --- a/OpenMetaverse/Simulator.cs +++ b/OpenMetaverse/Simulator.cs @@ -901,11 +901,10 @@ namespace OpenMetaverse // Send out ACKs if we have a lot of them if (pendingAckCount >= Client.Settings.MAX_PENDING_ACKS) - { SendAcks(); - } - if (packet.Header.Resent) ++Stats.ReceivedResends; + if (packet.Header.Resent) + Interlocked.Increment(ref Stats.ReceivedResends); } #endregion Reliable Handling @@ -916,7 +915,6 @@ namespace OpenMetaverse incomingPacket.Simulator = this; incomingPacket.Packet = packet; - // TODO: Prioritize the queue Network.PacketInbox.Enqueue(incomingPacket); #endregion Inbox Insertion diff --git a/Programs/GridProxy/GridProxy.cs b/Programs/GridProxy/GridProxy.cs index 6229d0cc..8c7e5aa7 100644 --- a/Programs/GridProxy/GridProxy.cs +++ b/Programs/GridProxy/GridProxy.cs @@ -1016,6 +1016,7 @@ namespace GridProxy // call the loginRequestDelegate if (loginRequestDelegate != null) + { try { loginRequestDelegate(request); @@ -1024,6 +1025,7 @@ namespace GridProxy { OpenMetaverse.Logger.Log("Exception in login request delegate" + e, Helpers.LogLevel.Error, e); } + } XmlRpcResponse response; try @@ -1038,7 +1040,30 @@ namespace GridProxy return; } - System.Collections.Hashtable responseData = (System.Collections.Hashtable)response.Value; + // call the loginResponseDelegate + if (loginResponseDelegate != null) + { + try + { + loginResponseDelegate(response); + } + catch (Exception e) + { + Log("exception in login response delegate: " + e.Message, true); + Log(e.StackTrace, true); + } + } + + System.Collections.Hashtable responseData; + try + { + responseData = (System.Collections.Hashtable)response.Value; + } + catch (Exception e) + { + OpenMetaverse.Logger.Log(e.Message, Helpers.LogLevel.Error); + return; + } // proxy any simulator address given in the XML-RPC response if (responseData.Contains("sim_ip") && responseData.Contains("sim_port")) @@ -1062,19 +1087,6 @@ namespace GridProxy responseData["seed_capability"] = loginURI + responseData["seed_capability"]; } - // call the loginResponseDelegate - if (loginResponseDelegate != null) - { - try - { - loginResponseDelegate(response); - } - catch (Exception e) - { - OpenMetaverse.Logger.Log("Error in login response delegate", Helpers.LogLevel.Error, e); - } - } - // forward the XML-RPC response to the client StreamWriter writer = new StreamWriter(netStream); writer.Write("HTTP/1.0 200 OK\r\n"); diff --git a/Programs/examples/TestClient/Program.cs b/Programs/examples/TestClient/Program.cs index 2052a1a7..8cc7ec95 100644 --- a/Programs/examples/TestClient/Program.cs +++ b/Programs/examples/TestClient/Program.cs @@ -16,7 +16,7 @@ namespace OpenMetaverse.TestClient private static void Usage() { Console.WriteLine("Usage: " + Environment.NewLine + - "TestClient.exe --first firstname --last lastname --pass password [--loginuri=\"uri\"] [--startpos \"sim/x/y/z\"] [--master \"master name\"] [--masterkey \"master uuid\"] [--gettextures] [--scriptfile \"filename\"]"); + "TestClient.exe [--first firstname --last lastname --pass password] [--file userlist.txt] [--loginuri=\"uri\"] [--startpos \"sim/x/y/z\"] [--master \"master name\"] [--masterkey \"master uuid\"] [--gettextures] [--scriptfile \"filename\"]"); } static void Main(string[] args)