@@ -74,28 +74,50 @@ func NewShell(url string) *Shell {
74
74
}
75
75
76
76
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
-
92
77
var sh Shell
78
+
93
79
sh .url = url
94
80
sh .httpcli = * client
95
81
// We don't support redirects.
96
82
sh .httpcli .CheckRedirect = func (_ * gohttp.Request , _ []* gohttp.Request ) error {
97
83
return fmt .Errorf ("unexpected redirect" )
98
84
}
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
+
99
121
return & sh
100
122
}
101
123
0 commit comments