Browse Source

fix a crash

tags/2.5
clowwindy 9 years ago
parent
commit
dafe33f7ed
4 changed files with 40 additions and 8 deletions
  1. +27
    -6
      shadowsocks-csharp/Controller/Service/TCPRelay.cs
  2. +1
    -1
      shadowsocks-csharp/Controller/Service/UDPRelay.cs
  3. +11
    -0
      shadowsocks-csharp/Controller/ShadowsocksController.cs
  4. +1
    -1
      shadowsocks-csharp/View/MenuViewController.cs

+ 27
- 6
shadowsocks-csharp/Controller/Service/TCPRelay.cs View File

@@ -82,7 +82,7 @@ namespace Shadowsocks.Controller
public void CreateRemote() public void CreateRemote()
{ {
Server server = controller.GetCurrentStrategy().GetAServer(IStrategyCallerType.TCP, (IPEndPoint)connection.RemoteEndPoint);
Server server = controller.GetAServer(IStrategyCallerType.TCP, (IPEndPoint)connection.RemoteEndPoint);
this.encryptor = EncryptorFactory.GetEncryptor(server.method, server.password); this.encryptor = EncryptorFactory.GetEncryptor(server.method, server.password);
this.server = server; this.server = server;
} }
@@ -373,7 +373,11 @@ namespace Shadowsocks.Controller
return; return;
} }
Server server = ((ServerTimer)sender).Server; Server server = ((ServerTimer)sender).Server;
controller.GetCurrentStrategy().SetFailure(server);
IStrategy strategy = controller.GetCurrentStrategy();
if (strategy != null)
{
strategy.SetFailure(server);
}
Console.WriteLine(String.Format("{0} timed out", server.FriendlyName())); Console.WriteLine(String.Format("{0} timed out", server.FriendlyName()));
remote.Close(); remote.Close();
RetryConnect(); RetryConnect();
@@ -417,7 +421,11 @@ namespace Shadowsocks.Controller
// remote.RemoteEndPoint.ToString()); // remote.RemoteEndPoint.ToString());
var latency = DateTime.Now - _startConnectTime; var latency = DateTime.Now - _startConnectTime;
controller.GetCurrentStrategy().UpdateLatency(server, latency);
IStrategy strategy = controller.GetCurrentStrategy();
if (strategy != null)
{
strategy.UpdateLatency(server, latency);
}
StartPipe(); StartPipe();
} }
@@ -428,7 +436,11 @@ namespace Shadowsocks.Controller
{ {
if (server != null) if (server != null)
{ {
controller.GetCurrentStrategy().SetFailure(server);
IStrategy strategy = controller.GetCurrentStrategy();
if (strategy != null)
{
strategy.SetFailure(server);
}
} }
Logging.LogUsefulException(e); Logging.LogUsefulException(e);
RetryConnect(); RetryConnect();
@@ -479,7 +491,11 @@ namespace Shadowsocks.Controller
} }
connection.BeginSend(remoteSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeConnectionSendCallback), null); connection.BeginSend(remoteSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeConnectionSendCallback), null);
controller.GetCurrentStrategy().UpdateLastRead(this.server);
IStrategy strategy = controller.GetCurrentStrategy();
if (strategy != null)
{
strategy.UpdateLastRead(this.server);
}
} }
else else
{ {
@@ -527,7 +543,12 @@ namespace Shadowsocks.Controller
} }
remote.BeginSend(connetionSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeRemoteSendCallback), null); remote.BeginSend(connetionSendBuffer, 0, bytesToSend, 0, new AsyncCallback(PipeRemoteSendCallback), null);
controller.GetCurrentStrategy().UpdateLastWrite(this.server);
IStrategy strategy = controller.GetCurrentStrategy();
if (strategy != null)
{
strategy.UpdateLastWrite(this.server);
}
} }
else else
{ {


+ 1
- 1
shadowsocks-csharp/Controller/Service/UDPRelay.cs View File

@@ -35,7 +35,7 @@ namespace Shadowsocks.Controller
UDPHandler handler = _cache.get(remoteEndPoint); UDPHandler handler = _cache.get(remoteEndPoint);
if (handler == null) if (handler == null)
{ {
handler = new UDPHandler(socket, _controller.GetCurrentStrategy().GetAServer(IStrategyCallerType.UDP, remoteEndPoint), remoteEndPoint);
handler = new UDPHandler(socket, _controller.GetAServer(IStrategyCallerType.UDP, remoteEndPoint), remoteEndPoint);
_cache.add(remoteEndPoint, handler); _cache.add(remoteEndPoint, handler);
} }
handler.Send(firstPacket, length); handler.Send(firstPacket, length);


+ 11
- 0
shadowsocks-csharp/Controller/ShadowsocksController.cs View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Net.Sockets; using System.Net.Sockets;
using Shadowsocks.Controller.Strategy; using Shadowsocks.Controller.Strategy;
using System.Net;
namespace Shadowsocks.Controller namespace Shadowsocks.Controller
{ {
@@ -101,6 +102,16 @@ namespace Shadowsocks.Controller
return null; return null;
} }
public Server GetAServer(IStrategyCallerType type, IPEndPoint localIPEndPoint)
{
IStrategy strategy = GetCurrentStrategy();
if (strategy != null)
{
return strategy.GetAServer(type, localIPEndPoint);
}
return GetCurrentServer();
}
public void SaveServers(List<Server> servers, int localPort) public void SaveServers(List<Server> servers, int localPort)
{ {
_config.configs = servers; _config.configs = servers;


+ 1
- 1
shadowsocks-csharp/View/MenuViewController.cs View File

@@ -125,7 +125,7 @@ namespace Shadowsocks.View
_notifyIcon.Icon = Icon.FromHandle(icon.GetHicon()); _notifyIcon.Icon = Icon.FromHandle(icon.GetHicon());
string serverInfo = null; string serverInfo = null;
if (config.strategy != null)
if (controller.GetCurrentStrategy() != null)
{ {
serverInfo = controller.GetCurrentStrategy().Name; serverInfo = controller.GetCurrentStrategy().Name;
} }


Loading…
Cancel
Save