From 9a91c0149bb7785ec598214b2a19ee6303d9a0fd Mon Sep 17 00:00:00 2001 From: Nova Date: Thu, 3 Apr 2025 02:23:31 +0330 Subject: [PATCH] fix wireguard in chain --- src/configs/ConfigBuilder.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/configs/ConfigBuilder.cpp b/src/configs/ConfigBuilder.cpp index 3abe728..baa70d4 100644 --- a/src/configs/ConfigBuilder.cpp +++ b/src/configs/ConfigBuilder.cpp @@ -276,6 +276,7 @@ namespace NekoGui { QString chainTag = "c-" + Int2String(chainId); QString chainTagOut; int index = 0; + bool lastWasEndpoint = false; for (const auto &ent: ents) { auto tagOut = chainTag + "-" + Int2String(ent->id) + "-" + Int2String(index); @@ -287,10 +288,10 @@ namespace NekoGui { if (index > 0) { // chain rules: past - auto replaced = status->outbounds.last().toObject(); + auto replaced = (lastWasEndpoint ? status->endpoints : status->outbounds).last().toObject(); replaced["detour"] = tagOut; - status->outbounds.removeLast(); - status->outbounds += replaced; + (lastWasEndpoint ? status->endpoints : status->outbounds).removeLast(); + (lastWasEndpoint ? status->endpoints : status->outbounds) += replaced; } else { // index == 0 means last profile in chain / not chain chainTagOut = tagOut; @@ -321,9 +322,11 @@ namespace NekoGui { if (ent->type == "wireguard") { status->endpoints += outbound; + lastWasEndpoint = true; } else { status->outbounds += outbound; + lastWasEndpoint = false; } index++; }