From 6f0412de0fee45aadad4ca38d8a149f57133c285 Mon Sep 17 00:00:00 2001 From: sagit Date: Sat, 7 Feb 2026 13:52:54 +0000 Subject: [PATCH] fix: align forward pause/resume service control with Java --- .../internal/http/handler/control_plane.go | 10 ++++++- .../http/handler/control_plane_test.go | 27 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 go-backend/internal/http/handler/control_plane_test.go diff --git a/go-backend/internal/http/handler/control_plane.go b/go-backend/internal/http/handler/control_plane.go index 345af65..2a91cb3 100644 --- a/go-backend/internal/http/handler/control_plane.go +++ b/go-backend/internal/http/handler/control_plane.go @@ -313,7 +313,7 @@ func (h *Handler) controlForwardServices(forward *forwardRecord, commandType str } base := buildForwardServiceBase(forward.ID, forward.UserID, userTunnelID) payload := map[string]interface{}{ - "services": []string{base, base + "_tcp", base + "_udp"}, + "services": buildForwardControlServiceNames(base, commandType), } seen := map[int64]struct{}{} for _, fp := range ports { @@ -852,6 +852,14 @@ func buildForwardServiceBase(forwardID, userID, userTunnelID int64) string { return fmt.Sprintf("%d_%d_%d", forwardID, userID, userTunnelID) } +func buildForwardControlServiceNames(base, commandType string) []string { + names := []string{base + "_tcp", base + "_udp"} + if strings.EqualFold(strings.TrimSpace(commandType), "DeleteService") { + return append([]string{base}, names...) + } + return names +} + func buildForwardServiceConfigs(baseName string, forward *forwardRecord, tunnel *tunnelRecord, node *nodeRecord, port int, limiter *int) []map[string]interface{} { protocols := []string{"tcp", "udp"} services := make([]map[string]interface{}, 0, 2) diff --git a/go-backend/internal/http/handler/control_plane_test.go b/go-backend/internal/http/handler/control_plane_test.go new file mode 100644 index 0000000..f34cb92 --- /dev/null +++ b/go-backend/internal/http/handler/control_plane_test.go @@ -0,0 +1,27 @@ +package handler + +import ( + "reflect" + "testing" +) + +func TestBuildForwardControlServiceNamesPauseResume(t *testing.T) { + base := "12_34_56" + want := []string{base + "_tcp", base + "_udp"} + + for _, command := range []string{"PauseService", "ResumeService"} { + got := buildForwardControlServiceNames(base, command) + if !reflect.DeepEqual(got, want) { + t.Fatalf("command %s expected %v, got %v", command, want, got) + } + } +} + +func TestBuildForwardControlServiceNamesDelete(t *testing.T) { + base := "12_34_56" + want := []string{base, base + "_tcp", base + "_udp"} + got := buildForwardControlServiceNames(base, " DeleteService ") + if !reflect.DeepEqual(got, want) { + t.Fatalf("expected %v, got %v", want, got) + } +}