From 99f9e4e6952b5a6b8d675a0de3ce59f1c8f6ff5f Mon Sep 17 00:00:00 2001 From: hiddify Date: Sat, 10 Feb 2024 09:53:04 +0100 Subject: [PATCH] new: add url test delay to 65535 if node is unavailable --- experimental/libbox/command_urltest.go | 12 +++++++----- outbound/urltest.go | 24 +++++++++++++----------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/experimental/libbox/command_urltest.go b/experimental/libbox/command_urltest.go index 3563d8c6a3..8c76c53999 100644 --- a/experimental/libbox/command_urltest.go +++ b/experimental/libbox/command_urltest.go @@ -75,13 +75,15 @@ func (s *CommandServer) handleURLTest(conn net.Conn) error { b.Go(outboundTag, func() (any, error) { t, err := urltest.URLTest(serviceNow.ctx, "", outboundToTest) if err != nil { - historyStorage.DeleteURLTestHistory(outboundTag) + // historyStorage.DeleteURLTestHistory(outboundTag) + t = 65535 } else { - historyStorage.StoreURLTestHistory(outboundTag, &urltest.History{ - Time: time.Now(), - Delay: t, - }) } + historyStorage.StoreURLTestHistory(outboundTag, &urltest.History{ + Time: time.Now(), + Delay: t, + }) + return nil, nil }) } diff --git a/outbound/urltest.go b/outbound/urltest.go index af2e5b8604..083d47438e 100644 --- a/outbound/urltest.go +++ b/outbound/urltest.go @@ -294,7 +294,7 @@ func (g *URLTestGroup) Select(network string) (adapter.Outbound, bool) { continue } history := g.history.LoadURLTestHistory(RealTag(detour)) - if history == nil { + if history == nil || history.Delay == 65535 { continue } if minDelay == 0 || minDelay > history.Delay+g.tolerance || minDelay > history.Delay-g.tolerance && minTime.Before(history.Time) { @@ -375,19 +375,21 @@ func (g *URLTestGroup) urlTest(ctx context.Context, force bool) (map[string]uint defer cancel() t, err := urltest.URLTest(ctx, g.link, p) if err != nil { - g.logger.Debug("outbound ", tag, " unavailable: ", err) - g.history.DeleteURLTestHistory(realTag) + g.logger.Debug("outbound ", tag, " unavailable (65535 ms): ", err) + // g.history.DeleteURLTestHistory(realTag) + t = 65535 } else { g.logger.Debug("outbound ", tag, " available: ", t, "ms") - g.history.StoreURLTestHistory(realTag, &urltest.History{ - Time: time.Now(), - Delay: t, - }) - resultAccess.Lock() - result[tag] = t - g.performUpdateCheck() - resultAccess.Unlock() } + g.history.StoreURLTestHistory(realTag, &urltest.History{ + Time: time.Now(), + Delay: t, + }) + resultAccess.Lock() + result[tag] = t + resultAccess.Unlock() + g.performUpdateCheck() + return nil, nil }) }