From 65dae86b13e437ba86a7dd129fb08d9eab065b01 Mon Sep 17 00:00:00 2001 From: Edmond Luo Date: Sat, 5 Dec 2020 02:10:32 +0800 Subject: [PATCH] add unix-abstract support in http util --- internal/transport/http_util.go | 7 ++++++- internal/transport/http_util_test.go | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/transport/http_util.go b/internal/transport/http_util.go index 7e41d1183f93..5558019d8dd5 100644 --- a/internal/transport/http_util.go +++ b/internal/transport/http_util.go @@ -603,9 +603,14 @@ func newFramer(conn net.Conn, writeBufferSize, readBufferSize int, maxHeaderList // parseDialTarget returns the network and address to pass to dialer. func parseDialTarget(target string) (string, string) { net := "tcp" + if strings.HasPrefix(target, "unix-abstract:") { + // handle unix-abstract:addr which will fail with url.Parse + // and need prepend "\x00" to the parsed address + return "unix", "\x00" + strings.SplitN(target, ":",2)[1] + } m1 := strings.Index(target, ":") m2 := strings.Index(target, ":/") - // handle unix:addr which will fail with url.Parse + // handle unix:addr which will fail with url.Parse if m1 >= 0 && m2 < 0 { if n := target[0:m1]; n == "unix" { return n, target[m1+1:] diff --git a/internal/transport/http_util_test.go b/internal/transport/http_util_test.go index 2205050acea0..5d7e9abdaf73 100644 --- a/internal/transport/http_util_test.go +++ b/internal/transport/http_util_test.go @@ -268,6 +268,10 @@ func (s) TestParseDialTarget(t *testing.T) { {"unix://domain", "unix", "domain"}, {"unix://etcd:0", "unix", "etcd:0"}, {"unix:///etcd:0", "unix", "/etcd:0"}, + {"unix-abstract:abc", "unix", "\x00abc"}, + {"unix-abstract:abc edf", "unix", "\x00abc edf"}, + {"unix-abstract:///abc", "unix", "\x00///abc"}, + {"unix-abstract:unix:abc", "unix", "\x00unix:abc"}, {"passthrough://unix://domain", "tcp", "passthrough://unix://domain"}, {"https://google.com:443", "tcp", "https://google.com:443"}, {"dns:///google.com", "tcp", "dns:///google.com"},