Skip to content
This repository was archived by the owner on Feb 7, 2024. It is now read-only.

Commit 89ab090

Browse files
committed
fix(shell): Clone (or create) transport if needed in case of Unix Socket
1 parent 89dc426 commit 89ab090

File tree

1 file changed

+37
-15
lines changed

1 file changed

+37
-15
lines changed

shell.go

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,50 @@ func NewShell(url string) *Shell {
7474
}
7575

7676
func NewShellWithClient(url string, client *gohttp.Client) *Shell {
77-
if maddr, err := ma.NewMultiaddr(url); err == nil {
78-
if network, host, err := manet.DialArgs(maddr); err == nil {
79-
if network == "unix" {
80-
url = network
81-
if tpt, ok := client.Transport.(*gohttp.Transport); ok && tpt != nil && tpt.DialContext == nil {
82-
tpt.DialContext = func(_ context.Context, _, _ string) (net.Conn, error) {
83-
return net.Dial("unix", host)
84-
}
85-
}
86-
} else {
87-
url = host
88-
}
89-
}
90-
}
91-
9277
var sh Shell
78+
9379
sh.url = url
9480
sh.httpcli = *client
9581
// We don't support redirects.
9682
sh.httpcli.CheckRedirect = func(_ *gohttp.Request, _ []*gohttp.Request) error {
9783
return fmt.Errorf("unexpected redirect")
9884
}
85+
86+
maddr, err := ma.NewMultiaddr(url)
87+
if err != nil {
88+
return &sh
89+
}
90+
91+
network, host, err := manet.DialArgs(maddr)
92+
if err != nil {
93+
return &sh
94+
}
95+
96+
if network == "unix" {
97+
sh.url = network
98+
99+
var tptCopy *gohttp.Transport
100+
if tpt, ok := sh.httpcli.Transport.(*gohttp.Transport); ok && tpt.DialContext == nil {
101+
tptCopy = tpt.Clone()
102+
} else if sh.httpcli.Transport == nil {
103+
tptCopy = &gohttp.Transport{
104+
Proxy: gohttp.ProxyFromEnvironment,
105+
DisableKeepAlives: true,
106+
}
107+
} else {
108+
// custom Transport or custom Dialer, we are done here
109+
return &sh
110+
}
111+
112+
tptCopy.DialContext = func(_ context.Context, _, _ string) (net.Conn, error) {
113+
return net.Dial("unix", host)
114+
}
115+
116+
sh.httpcli.Transport = tptCopy
117+
} else {
118+
sh.url = host
119+
}
120+
99121
return &sh
100122
}
101123

0 commit comments

Comments
 (0)