From c5029c706c0bbbde38b8fd14a4ac70712d4d3966 Mon Sep 17 00:00:00 2001 From: 9seconds Date: Tue, 3 Dec 2019 13:56:37 +0300 Subject: [PATCH] Cap max time in cloak mode --- faketls/cloak.go | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/faketls/cloak.go b/faketls/cloak.go index a6ea80f..c33d06f 100644 --- a/faketls/cloak.go +++ b/faketls/cloak.go @@ -9,7 +9,10 @@ import ( "github.com/9seconds/mtg/wrappers/rwc" ) -const cloakTimeout = 5 * time.Second +const ( + cloakLastActivityTimeout = 5 * time.Second + cloakMaxTimeout = 30 * time.Second +) func cloak(one, another io.ReadWriteCloser) { defer func() { @@ -41,17 +44,23 @@ func cloak(one, another io.ReadWriteCloser) { }() go func() { - timer := time.NewTimer(cloakTimeout) - defer timer.Stop() + lastActivityTimer := time.NewTimer(cloakLastActivityTimeout) + defer lastActivityTimer.Stop() + + maxTimer := time.NewTimer(cloakMaxTimeout) + defer maxTimer.Stop() for { select { case <-channelPing: - timer.Stop() - timer = time.NewTimer(cloakTimeout) + lastActivityTimer.Stop() + lastActivityTimer = time.NewTimer(cloakLastActivityTimeout) case <-ctx.Done(): return - case <-timer.C: + case <-lastActivityTimer.C: + cancel() + return + case <-maxTimer.C: cancel() return }