From 4ba7c0e881d6073362b8e0ae45edc15cf2c4a277 Mon Sep 17 00:00:00 2001 From: Vinicius Fortuna Date: Tue, 4 Feb 2025 10:42:13 -0500 Subject: [PATCH] feat(client): support Shadowsocks prefix for UDP (#2360) --- client/go/outline/config/config_shadowsocks.go | 10 +++++----- go.mod | 2 +- go.sum | 8 ++------ 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/client/go/outline/config/config_shadowsocks.go b/client/go/outline/config/config_shadowsocks.go index 9c32bf5a7c2..2bd2acef035 100644 --- a/client/go/outline/config/config_shadowsocks.go +++ b/client/go/outline/config/config_shadowsocks.go @@ -71,6 +71,8 @@ func parseShadowsocksTransport(ctx context.Context, config ConfigNode, parseSE P if err != nil { return nil, fmt.Errorf("failed to create PacketListener: %w", err) } + // For the Shadowsocks transport, the prefix only applies to TCP. To use a prefix with UDP, one needs to + // specify it in the PacketListener config explicitly. This is to ensure backwards-compatibility. return &TransportPair{ &Dialer[transport.StreamConn]{ConnectionProviderInfo{ConnTypeTunneled, se.FirstHop}, sd.DialStream}, &PacketListener{ConnectionProviderInfo{ConnTypeTunneled, pe.FirstHop}, pl}, @@ -112,10 +114,6 @@ func parseShadowsocksPacketListener(ctx context.Context, config ConfigNode, pars if err != nil { return nil, err } - if params.SaltGenerator != nil { - return nil, fmt.Errorf("prefix is not yet supported for PacketDialers") - } - pe, err := parsePE(ctx, params.Endpoint) if err != nil { return nil, fmt.Errorf("failed to create PacketEndpoint: %w", err) @@ -124,7 +122,9 @@ func parseShadowsocksPacketListener(ctx context.Context, config ConfigNode, pars if err != nil { return nil, err } - // TODO: support UDP prefix. + if params.SaltGenerator != nil { + pl.SetSaltGenerator(params.SaltGenerator) + } return &PacketListener{ConnectionProviderInfo{ConnTypeTunneled, pe.FirstHop}, pl}, nil } diff --git a/go.mod b/go.mod index 79ffe69d1e1..e486175f7c5 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/Jigsaw-Code/outline-apps go 1.22.0 require ( - github.com/Jigsaw-Code/outline-sdk v0.0.18-0.20241106233708-faffebb12629 + github.com/Jigsaw-Code/outline-sdk v0.0.18 github.com/Jigsaw-Code/outline-sdk/x v0.0.0-20250131142109-b32720fa2c3e github.com/Wifx/gonetworkmanager/v2 v2.1.0 github.com/eycorsican/go-tun2socks v1.16.11 diff --git a/go.sum b/go.sum index 8ebf7ec65fc..14f55b3bc6b 100644 --- a/go.sum +++ b/go.sum @@ -59,10 +59,8 @@ cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Jigsaw-Code/outline-sdk v0.0.18-0.20241106233708-faffebb12629 h1:sHi1X4vwtNNBUDCbxynGXe7cM/inwTbavowHziaxlbk= -github.com/Jigsaw-Code/outline-sdk v0.0.18-0.20241106233708-faffebb12629/go.mod h1:CFDKyGZA4zatKE4vMLe8TyQpZCyINOeRFbMAmYHxodw= -github.com/Jigsaw-Code/outline-sdk/x v0.0.0-20250130191133-1f7340826841 h1:1tpY2KX6a9/1/uyN0riQVxQHqNthyAvzIhoWWmdYOBA= -github.com/Jigsaw-Code/outline-sdk/x v0.0.0-20250130191133-1f7340826841/go.mod h1:9iEpNbKBsNU3WJs2XzhlI2AOf6DH018bjWxOC38o1Zc= +github.com/Jigsaw-Code/outline-sdk v0.0.18 h1:xGzbag/jWGVQl5wGy0szr1jb+P8nVDFMcR2mWmgQnqc= +github.com/Jigsaw-Code/outline-sdk v0.0.18/go.mod h1:CFDKyGZA4zatKE4vMLe8TyQpZCyINOeRFbMAmYHxodw= github.com/Jigsaw-Code/outline-sdk/x v0.0.0-20250131142109-b32720fa2c3e h1:JN3TZFpi98BTw/CZuQWxovFsgqjQ79gGrbvZE1wFIIc= github.com/Jigsaw-Code/outline-sdk/x v0.0.0-20250131142109-b32720fa2c3e/go.mod h1:aFUEz6Z/eD0NS3c3fEIX+JO2D9aIrXCmWTb1zJFlItw= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= @@ -95,8 +93,6 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= -github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=