mirror of https://github.com/XTLS/Xray-core
				
				
				
			grpc: add initial_windows_size option
							parent
							
								
									3057a7c999
								
							
						
					
					
						commit
						63da3a5481
					
				| 
						 | 
					@ -12,6 +12,7 @@ type GRPCConfig struct {
 | 
				
			||||||
	IdleTimeout         int32  `json:"idle_timeout"`
 | 
						IdleTimeout         int32  `json:"idle_timeout"`
 | 
				
			||||||
	HealthCheckTimeout  int32  `json:"health_check_timeout"`
 | 
						HealthCheckTimeout  int32  `json:"health_check_timeout"`
 | 
				
			||||||
	PermitWithoutStream bool   `json:"permit_without_stream"`
 | 
						PermitWithoutStream bool   `json:"permit_without_stream"`
 | 
				
			||||||
 | 
						InitialWindowsSize  int32  `json:"initial_windows_size"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (g *GRPCConfig) Build() (proto.Message, error) {
 | 
					func (g *GRPCConfig) Build() (proto.Message, error) {
 | 
				
			||||||
| 
						 | 
					@ -21,11 +22,17 @@ func (g *GRPCConfig) Build() (proto.Message, error) {
 | 
				
			||||||
	if g.HealthCheckTimeout <= 0 {
 | 
						if g.HealthCheckTimeout <= 0 {
 | 
				
			||||||
		g.HealthCheckTimeout = 0
 | 
							g.HealthCheckTimeout = 0
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if g.InitialWindowsSize < 0 {
 | 
				
			||||||
 | 
							// default window size of gRPC-go
 | 
				
			||||||
 | 
							g.InitialWindowsSize = 0
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &grpc.Config{
 | 
						return &grpc.Config{
 | 
				
			||||||
		ServiceName:         g.ServiceName,
 | 
							ServiceName:         g.ServiceName,
 | 
				
			||||||
		MultiMode:           g.MultiMode,
 | 
							MultiMode:           g.MultiMode,
 | 
				
			||||||
		IdleTimeout:         g.IdleTimeout,
 | 
							IdleTimeout:         g.IdleTimeout,
 | 
				
			||||||
		HealthCheckTimeout:  g.HealthCheckTimeout,
 | 
							HealthCheckTimeout:  g.HealthCheckTimeout,
 | 
				
			||||||
		PermitWithoutStream: g.PermitWithoutStream,
 | 
							PermitWithoutStream: g.PermitWithoutStream,
 | 
				
			||||||
 | 
							InitialWindowsSize:  g.InitialWindowsSize,
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,6 +31,7 @@ type Config struct {
 | 
				
			||||||
	IdleTimeout         int32  `protobuf:"varint,4,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
 | 
						IdleTimeout         int32  `protobuf:"varint,4,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"`
 | 
				
			||||||
	HealthCheckTimeout  int32  `protobuf:"varint,5,opt,name=health_check_timeout,json=healthCheckTimeout,proto3" json:"health_check_timeout,omitempty"`
 | 
						HealthCheckTimeout  int32  `protobuf:"varint,5,opt,name=health_check_timeout,json=healthCheckTimeout,proto3" json:"health_check_timeout,omitempty"`
 | 
				
			||||||
	PermitWithoutStream bool   `protobuf:"varint,6,opt,name=permit_without_stream,json=permitWithoutStream,proto3" json:"permit_without_stream,omitempty"`
 | 
						PermitWithoutStream bool   `protobuf:"varint,6,opt,name=permit_without_stream,json=permitWithoutStream,proto3" json:"permit_without_stream,omitempty"`
 | 
				
			||||||
 | 
						InitialWindowsSize  int32  `protobuf:"varint,7,opt,name=initial_windows_size,json=initialWindowsSize,proto3" json:"initial_windows_size,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (x *Config) Reset() {
 | 
					func (x *Config) Reset() {
 | 
				
			||||||
| 
						 | 
					@ -107,6 +108,13 @@ func (x *Config) GetPermitWithoutStream() bool {
 | 
				
			||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (x *Config) GetInitialWindowsSize() int32 {
 | 
				
			||||||
 | 
						if x != nil {
 | 
				
			||||||
 | 
							return x.InitialWindowsSize
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var File_transport_internet_grpc_config_proto protoreflect.FileDescriptor
 | 
					var File_transport_internet_grpc_config_proto protoreflect.FileDescriptor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var file_transport_internet_grpc_config_proto_rawDesc = []byte{
 | 
					var file_transport_internet_grpc_config_proto_rawDesc = []byte{
 | 
				
			||||||
| 
						 | 
					@ -114,7 +122,7 @@ var file_transport_internet_grpc_config_proto_rawDesc = []byte{
 | 
				
			||||||
	0x72, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
 | 
						0x72, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
 | 
				
			||||||
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61,
 | 
						0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61,
 | 
				
			||||||
	0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e,
 | 
						0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e,
 | 
				
			||||||
	0x67, 0x72, 0x70, 0x63, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xe7, 0x01,
 | 
						0x67, 0x72, 0x70, 0x63, 0x2e, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x99, 0x02,
 | 
				
			||||||
	0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74,
 | 
						0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74,
 | 
				
			||||||
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c,
 | 
						0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c,
 | 
				
			||||||
	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
 | 
						0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
 | 
				
			||||||
| 
						 | 
					@ -129,11 +137,14 @@ var file_transport_internet_grpc_config_proto_rawDesc = []byte{
 | 
				
			||||||
	0x6f, 0x75, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x5f, 0x77, 0x69,
 | 
						0x6f, 0x75, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x5f, 0x77, 0x69,
 | 
				
			||||||
	0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01,
 | 
						0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x06, 0x20, 0x01,
 | 
				
			||||||
	0x28, 0x08, 0x52, 0x13, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75,
 | 
						0x28, 0x08, 0x52, 0x13, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75,
 | 
				
			||||||
	0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74, 0x68, 0x75,
 | 
						0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x69, 0x74, 0x69,
 | 
				
			||||||
	0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61, 0x79, 0x2d,
 | 
						0x61, 0x6c, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
 | 
				
			||||||
	0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69,
 | 
						0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x57, 0x69,
 | 
				
			||||||
	0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72,
 | 
						0x6e, 0x64, 0x6f, 0x77, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x33, 0x5a, 0x31, 0x67, 0x69, 0x74,
 | 
				
			||||||
	0x6f, 0x74, 0x6f, 0x33,
 | 
						0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x78, 0x74, 0x6c, 0x73, 0x2f, 0x78, 0x72, 0x61,
 | 
				
			||||||
 | 
						0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74,
 | 
				
			||||||
 | 
						0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x62, 0x06,
 | 
				
			||||||
 | 
						0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,4 +10,5 @@ message Config {
 | 
				
			||||||
  int32 idle_timeout = 4;
 | 
					  int32 idle_timeout = 4;
 | 
				
			||||||
  int32 health_check_timeout = 5;
 | 
					  int32 health_check_timeout = 5;
 | 
				
			||||||
  bool permit_without_stream = 6;
 | 
					  bool permit_without_stream = 6;
 | 
				
			||||||
 | 
					  int32 initial_windows_size = 7;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,6 +135,10 @@ func getGrpcClient(ctx context.Context, dest net.Destination, streamSettings *in
 | 
				
			||||||
		}))
 | 
							}))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if grpcSettings.InitialWindowsSize > 0 {
 | 
				
			||||||
 | 
							dialOptions = append(dialOptions, grpc.WithInitialWindowSize(grpcSettings.InitialWindowsSize))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var grpcDestHost string
 | 
						var grpcDestHost string
 | 
				
			||||||
	if dest.Address.Family().IsDomain() {
 | 
						if dest.Address.Family().IsDomain() {
 | 
				
			||||||
		grpcDestHost = dest.Address.Domain()
 | 
							grpcDestHost = dest.Address.Domain()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue