|
@@ -2,6 +2,7 @@ package grpc
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"context"
|
|
"context"
|
|
|
|
|
+ "reflect"
|
|
|
"sync"
|
|
"sync"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
@@ -168,12 +169,6 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in
|
|
|
dialOptions = append(dialOptions, grpc.WithInitialWindowSize(grpcSettings.InitialWindowsSize))
|
|
dialOptions = append(dialOptions, grpc.WithInitialWindowSize(grpcSettings.InitialWindowsSize))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- userAgent := grpcSettings.UserAgent
|
|
|
|
|
- if userAgent == "" {
|
|
|
|
|
- userAgent = utils.ChromeUA
|
|
|
|
|
- }
|
|
|
|
|
- dialOptions = append(dialOptions, grpc.WithUserAgent(userAgent))
|
|
|
|
|
-
|
|
|
|
|
var grpcDestHost string
|
|
var grpcDestHost string
|
|
|
if dest.Address.Family().IsDomain() {
|
|
if dest.Address.Family().IsDomain() {
|
|
|
grpcDestHost = dest.Address.Domain()
|
|
grpcDestHost = dest.Address.Domain()
|
|
@@ -181,10 +176,26 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in
|
|
|
grpcDestHost = dest.Address.IP().String()
|
|
grpcDestHost = dest.Address.IP().String()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- conn, err := grpc.Dial(
|
|
|
|
|
- net.JoinHostPort(grpcDestHost, dest.Port.String()),
|
|
|
|
|
|
|
+ conn, err := grpc.NewClient(
|
|
|
|
|
+ "passthrough:///"+net.JoinHostPort(grpcDestHost, dest.Port.String()),
|
|
|
dialOptions...,
|
|
dialOptions...,
|
|
|
)
|
|
)
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ userAgent := grpcSettings.UserAgent
|
|
|
|
|
+ if userAgent == "" {
|
|
|
|
|
+ userAgent = utils.ChromeUA
|
|
|
|
|
+ }
|
|
|
|
|
+ setUserAgent(conn, userAgent)
|
|
|
|
|
+ conn.Connect()
|
|
|
|
|
+ }
|
|
|
globalDialerMap[dialerConf{dest, streamSettings}] = conn
|
|
globalDialerMap[dialerConf{dest, streamSettings}] = conn
|
|
|
return conn, err
|
|
return conn, err
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// setUserAgent overrides the user-agent on a ClientConn to remove the
|
|
|
|
|
+// "grpc-go/version" suffix that grpc.WithUserAgent unconditionally appends.
|
|
|
|
|
+func setUserAgent(conn *grpc.ClientConn, ua string) {
|
|
|
|
|
+ if f := reflect.ValueOf(conn).Elem().FieldByName("dopts").FieldByName("copts").FieldByName("UserAgent"); f.IsValid() {
|
|
|
|
|
+ *(*string)(f.Addr().UnsafePointer()) = ua
|
|
|
|
|
+ }
|
|
|
|
|
+}
|