gRPC: Use PathEscape encoded service name

This commit is contained in:
hmol233 2021-06-27 16:41:19 +08:00
parent d45298a10d
commit 3dc9fba20d
No known key found for this signature in database
GPG key ID: D617A9DAB0C992D5
4 changed files with 10 additions and 4 deletions

View file

@ -1,6 +1,8 @@
package grpc package grpc
import ( import (
"net/url"
"github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common"
"github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet"
) )
@ -12,3 +14,7 @@ func init() {
return new(Config) return new(Config)
})) }))
} }
func (c *Config) getNormalizedName() string {
return url.PathEscape(c.ServiceName)
}

View file

@ -57,14 +57,14 @@ func dialgRPC(ctx context.Context, dest net.Destination, streamSettings *interne
client := encoding.NewGRPCServiceClient(conn) client := encoding.NewGRPCServiceClient(conn)
if grpcSettings.MultiMode { if grpcSettings.MultiMode {
newError("using gRPC multi mode").AtDebug().WriteToLog() newError("using gRPC multi mode").AtDebug().WriteToLog()
grpcService, err := client.(encoding.GRPCServiceClientX).TunMultiCustomName(ctx, grpcSettings.ServiceName) grpcService, err := client.(encoding.GRPCServiceClientX).TunMultiCustomName(ctx, grpcSettings.getNormalizedName())
if err != nil { if err != nil {
return nil, newError("Cannot dial gRPC").Base(err) return nil, newError("Cannot dial gRPC").Base(err)
} }
return encoding.NewMultiHunkConn(grpcService, nil), nil return encoding.NewMultiHunkConn(grpcService, nil), nil
} }
grpcService, err := client.(encoding.GRPCServiceClientX).TunCustomName(ctx, grpcSettings.ServiceName) grpcService, err := client.(encoding.GRPCServiceClientX).TunCustomName(ctx, grpcSettings.getNormalizedName())
if err != nil { if err != nil {
return nil, newError("Cannot dial gRPC").Base(err) return nil, newError("Cannot dial gRPC").Base(err)
} }

View file

@ -39,7 +39,7 @@ func (c *gRPCServiceClient) TunCustomName(ctx context.Context, name string, opts
} }
func (c *gRPCServiceClient) TunMultiCustomName(ctx context.Context, name string, opts ...grpc.CallOption) (GRPCService_TunMultiClient, error) { func (c *gRPCServiceClient) TunMultiCustomName(ctx context.Context, name string, opts ...grpc.CallOption) (GRPCService_TunMultiClient, error) {
stream, err := c.cc.NewStream(ctx, &ServerDesc(name).Streams[0], "/"+name+"/TunMulti", opts...) stream, err := c.cc.NewStream(ctx, &ServerDesc(name).Streams[1], "/"+name+"/TunMulti", opts...)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -114,7 +114,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, settings *i
} }
} }
encoding.RegisterGRPCServiceServerX(s, listener, grpcSettings.ServiceName) encoding.RegisterGRPCServiceServerX(s, listener, grpcSettings.getNormalizedName())
if err = s.Serve(streamListener); err != nil { if err = s.Serve(streamListener); err != nil {
newError("Listener for gRPC ended").Base(err).WriteToLog() newError("Listener for gRPC ended").Base(err).WriteToLog()