diff --git a/infra/conf/hysteria.go b/infra/conf/hysteria.go index 6512d1050d5f..f690c363945e 100644 --- a/infra/conf/hysteria.go +++ b/infra/conf/hysteria.go @@ -1,19 +1,25 @@ package conf import ( + "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/protocol" "github.com/xtls/xray-core/proxy/hysteria" "google.golang.org/protobuf/proto" ) type HysteriaClientConfig struct { + Version int32 `json:"version"` Address *Address `json:"address"` Port uint16 `json:"port"` } func (c *HysteriaClientConfig) Build() (proto.Message, error) { - config := new(hysteria.ClientConfig) + if c.Version != 2 { + return nil, errors.New("version != 2") + } + config := &hysteria.ClientConfig{} + config.Version = c.Version config.Server = &protocol.ServerEndpoint{ Address: c.Address.Build(), Port: uint32(c.Port), diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 742c7df5a940..3b21e383094c 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -453,7 +453,7 @@ func (c *HysteriaConfig) Build() (proto.Message, error) { } config := &hysteria.Config{} - config.Version = int32(c.Version) + config.Version = c.Version config.Auth = c.Auth config.Up = up config.Down = down diff --git a/proxy/hysteria/config.pb.go b/proxy/hysteria/config.pb.go index d58022cc2d63..ef61eb29507b 100644 --- a/proxy/hysteria/config.pb.go +++ b/proxy/hysteria/config.pb.go @@ -24,7 +24,8 @@ const ( type ClientConfig struct { state protoimpl.MessageState `protogen:"open.v1"` - Server *protocol.ServerEndpoint `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` + Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + Server *protocol.ServerEndpoint `protobuf:"bytes,2,opt,name=server,proto3" json:"server,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -59,6 +60,13 @@ func (*ClientConfig) Descriptor() ([]byte, []int) { return file_proxy_hysteria_config_proto_rawDescGZIP(), []int{0} } +func (x *ClientConfig) GetVersion() int32 { + if x != nil { + return x.Version + } + return 0 +} + func (x *ClientConfig) GetServer() *protocol.ServerEndpoint { if x != nil { return x.Server @@ -70,9 +78,10 @@ var File_proxy_hysteria_config_proto protoreflect.FileDescriptor const file_proxy_hysteria_config_proto_rawDesc = "" + "\n" + - "\x1bproxy/hysteria/config.proto\x12\x13xray.proxy.hysteria\x1a!common/protocol/server_spec.proto\"L\n" + - "\fClientConfig\x12<\n" + - "\x06server\x18\x01 \x01(\v2$.xray.common.protocol.ServerEndpointR\x06serverB[\n" + + "\x1bproxy/hysteria/config.proto\x12\x13xray.proxy.hysteria\x1a!common/protocol/server_spec.proto\"f\n" + + "\fClientConfig\x12\x18\n" + + "\aversion\x18\x01 \x01(\x05R\aversion\x12<\n" + + "\x06server\x18\x02 \x01(\v2$.xray.common.protocol.ServerEndpointR\x06serverB[\n" + "\x17com.xray.proxy.hysteriaP\x01Z(github.com/xtls/xray-core/proxy/hysteria\xaa\x02\x13Xray.Proxy.Hysteriab\x06proto3" var ( diff --git a/proxy/hysteria/config.proto b/proxy/hysteria/config.proto index c54c0ead0cd0..2a71ac53733c 100644 --- a/proxy/hysteria/config.proto +++ b/proxy/hysteria/config.proto @@ -9,5 +9,6 @@ option java_multiple_files = true; import "common/protocol/server_spec.proto"; message ClientConfig { - xray.common.protocol.ServerEndpoint server = 1; + int32 version = 1; + xray.common.protocol.ServerEndpoint server = 2; } diff --git a/transport/internet/system_dialer.go b/transport/internet/system_dialer.go index 27f3c9a9274d..015675762eec 100644 --- a/transport/internet/system_dialer.go +++ b/transport/internet/system_dialer.go @@ -195,6 +195,14 @@ func (c *PacketConnWrapper) SetWriteDeadline(t time.Time) error { return c.Conn.SetWriteDeadline(t) } +func (c *PacketConnWrapper) SyscallConn() (syscall.RawConn, error) { + sc, ok := c.Conn.(syscall.Conn) + if !ok { + return nil, syscall.EINVAL + } + return sc.SyscallConn() +} + type SystemDialerAdapter interface { Dial(network string, address string) (net.Conn, error) }