From 24d089a8e6cf3d06b3243dae72167be5d634f107 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 28 May 2021 14:09:14 +0800 Subject: [PATCH] Redial if no response longer than 1 min --- Eap/EapAuth.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Eap/EapAuth.cs b/Eap/EapAuth.cs index c7f2345..e81f095 100644 --- a/Eap/EapAuth.cs +++ b/Eap/EapAuth.cs @@ -22,6 +22,7 @@ public sealed class EapAuth : IDisposable private readonly ReadOnlyMemory paddedPassword; private readonly LibPcapLiveDevice device; private readonly EapOptions options; + private DateTime lastRequest; private bool disposed = false; private bool hasLogOff = false; @@ -149,20 +150,11 @@ private void EapWorker(EapWorkerState state) Console.WriteLine("Got EAP Failure."); switch (state) { - case { Succeeded: false, FailureCount: < 2 }: + case { Succeeded: false, FailureCount: < 3 }: state.FailureCount++; SendStartRequest(); break; - case { Succeeded: false }: - ThreadPool.UnsafeQueueUserWorkItem(EapWorker, new EapWorkerState(), false); - break; - case { Succeeded: true, FailureCount: 0 }: - state.LastId--; - state.FailureCount++; - SendIdResponse(state.LastId); - break; - case { Succeeded: true, FailureCount: < 10 }: - if (state.FailureCount % 2 == 0) state.LastId++; + case { Succeeded: true, FailureCount: < 3 }: state.FailureCount++; SendIdResponse(state.LastId); break; @@ -208,6 +200,8 @@ private void EapWorker(EapWorkerState state) default: break; } + + lastRequest = DateTime.Now; break; case EapCode.LoginMessage when id == 5 && buffer.Length >= 12: Console.WriteLine("Got Message: " + Encoding.Default.GetString(buffer[12..])); @@ -222,6 +216,12 @@ private void EapWorker(EapWorkerState state) } } } + + if (DateTime.Now - lastRequest > TimeSpan.FromMinutes(1)) + { + ThreadPool.UnsafeQueueUserWorkItem(EapWorker, new EapWorkerState(), false); + return; + } } } }