From 4acae9de9ba7f2a12292f22cf7943aabe3106de0 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sun, 25 Sep 2016 14:52:04 +1000 Subject: [PATCH] Fix a bug that the callback will be invoked twice if http proxy request failed. (#751) --- shadowsocks-csharp/Proxy/HttpProxy.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/shadowsocks-csharp/Proxy/HttpProxy.cs b/shadowsocks-csharp/Proxy/HttpProxy.cs index f67f9db9..d314eb93 100644 --- a/shadowsocks-csharp/Proxy/HttpProxy.cs +++ b/shadowsocks-csharp/Proxy/HttpProxy.cs @@ -145,12 +145,15 @@ namespace Shadowsocks.Proxy private void OnFinish(byte[] lastBytes, int index, int length, object state) { - // TODO: save last bytes var st = (FakeAsyncResult)state; - if (!_established) + if (st.innerState.ex == null) { - st.innerState.ex = new Exception(I18N.GetString("Proxy request failed")); + if (!_established) + { + st.innerState.ex = new Exception(I18N.GetString("Proxy request failed")); + } + // TODO: save last bytes } st.innerState.Callback?.Invoke(st); } @@ -160,7 +163,6 @@ namespace Shadowsocks.Proxy var st = (FakeAsyncResult) state; st.innerState.ex = ex; - st.innerState.Callback?.Invoke(st); } private static readonly Regex HttpRespondHeaderRegex = new Regex(@"^(HTTP/1\.\d) (\d{3}) (.+)$");