소스 검색

try protobuf

Darien Raymond 9 년 전
부모
커밋
bbca180dba

+ 5 - 0
app/router/proto/config.proto

@@ -0,0 +1,5 @@
+syntax = "proto3";
+
+message Config {
+  
+}

+ 7 - 7
common/net/timed_io.go

@@ -11,15 +11,15 @@ var (
 )
 
 type TimeOutReader struct {
-	timeout    int
+	timeout    uint32
 	connection net.Conn
 	worker     io.Reader
 }
 
-func NewTimeOutReader(timeout int /* seconds */, connection net.Conn) *TimeOutReader {
+func NewTimeOutReader(timeout uint32 /* seconds */, connection net.Conn) *TimeOutReader {
 	reader := &TimeOutReader{
 		connection: connection,
-		timeout:    -100,
+		timeout:    0,
 	}
 	reader.SetTimeOut(timeout)
 	return reader
@@ -29,12 +29,12 @@ func (reader *TimeOutReader) Read(p []byte) (int, error) {
 	return reader.worker.Read(p)
 }
 
-func (reader *TimeOutReader) GetTimeOut() int {
+func (reader *TimeOutReader) GetTimeOut() uint32 {
 	return reader.timeout
 }
 
-func (reader *TimeOutReader) SetTimeOut(value int) {
-	if value == reader.timeout {
+func (reader *TimeOutReader) SetTimeOut(value uint32) {
+	if reader.worker != nil && value == reader.timeout {
 		return
 	}
 	reader.timeout = value
@@ -56,7 +56,7 @@ func (reader *TimeOutReader) Release() {
 }
 
 type timedReaderWorker struct {
-	timeout    int
+	timeout    uint32
 	connection net.Conn
 }
 

+ 3 - 3
common/net/timed_io_test.go

@@ -11,9 +11,9 @@ func TestTimeOutSettings(t *testing.T) {
 	assert := assert.On(t)
 
 	reader := NewTimeOutReader(8, nil)
-	assert.Int(reader.GetTimeOut()).Equals(8)
+	assert.Uint32(reader.GetTimeOut()).Equals(8)
 	reader.SetTimeOut(8) // no op
-	assert.Int(reader.GetTimeOut()).Equals(8)
+	assert.Uint32(reader.GetTimeOut()).Equals(8)
 	reader.SetTimeOut(9)
-	assert.Int(reader.GetTimeOut()).Equals(9)
+	assert.Uint32(reader.GetTimeOut()).Equals(9)
 }

+ 1 - 1
common/protocol/user.go

@@ -21,7 +21,7 @@ func NewUser(level UserLevel, email string) *User {
 }
 
 type UserSettings struct {
-	PayloadReadTimeout int
+	PayloadReadTimeout uint32
 }
 
 func GetUserSettings(level UserLevel) UserSettings {

+ 1 - 1
proxy/dokodemo/config.go

@@ -9,5 +9,5 @@ type Config struct {
 	Address        v2net.Address
 	Port           v2net.Port
 	Network        *v2net.NetworkList
-	Timeout        int
+	Timeout        uint32
 }

+ 1 - 1
proxy/dokodemo/config_json.go

@@ -15,7 +15,7 @@ func (this *Config) UnmarshalJSON(data []byte) error {
 		Host         *v2net.AddressJson `json:"address"`
 		PortValue    v2net.Port         `json:"port"`
 		NetworkList  *v2net.NetworkList `json:"network"`
-		TimeoutValue int                `json:"timeout"`
+		TimeoutValue uint32             `json:"timeout"`
 		Redirect     bool               `json:"followRedirect"`
 	}
 	rawConfig := new(DokodemoConfig)

+ 2 - 12
proxy/freedom/config.go

@@ -1,13 +1,3 @@
-package freedom
-
-type DomainStrategy int
+//go:generate protoc --go_out=. config.proto
 
-const (
-	DomainStrategyAsIs  = DomainStrategy(0)
-	DomainStrategyUseIP = DomainStrategy(1)
-)
-
-type Config struct {
-	DomainStrategy DomainStrategy
-	Timeout        uint32
-}
+package freedom

+ 82 - 0
proxy/freedom/config.pb.go

@@ -0,0 +1,82 @@
+// Code generated by protoc-gen-go.
+// source: config.proto
+// DO NOT EDIT!
+
+/*
+Package freedom is a generated protocol buffer package.
+
+It is generated from these files:
+	config.proto
+
+It has these top-level messages:
+	Config
+*/
+package freedom
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+type Config_DomainStrategy int32
+
+const (
+	Config_AS_IS  Config_DomainStrategy = 0
+	Config_USE_IP Config_DomainStrategy = 1
+)
+
+var Config_DomainStrategy_name = map[int32]string{
+	0: "AS_IS",
+	1: "USE_IP",
+}
+var Config_DomainStrategy_value = map[string]int32{
+	"AS_IS":  0,
+	"USE_IP": 1,
+}
+
+func (x Config_DomainStrategy) String() string {
+	return proto.EnumName(Config_DomainStrategy_name, int32(x))
+}
+func (Config_DomainStrategy) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} }
+
+type Config struct {
+	DomainStrategy Config_DomainStrategy `protobuf:"varint,1,opt,name=domainStrategy,enum=com.v2ray.core.proxy.freedom.Config_DomainStrategy" json:"domainStrategy,omitempty"`
+	Timeout        uint32                `protobuf:"varint,2,opt,name=timeout" json:"timeout,omitempty"`
+}
+
+func (m *Config) Reset()                    { *m = Config{} }
+func (m *Config) String() string            { return proto.CompactTextString(m) }
+func (*Config) ProtoMessage()               {}
+func (*Config) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+func init() {
+	proto.RegisterType((*Config)(nil), "com.v2ray.core.proxy.freedom.Config")
+	proto.RegisterEnum("com.v2ray.core.proxy.freedom.Config_DomainStrategy", Config_DomainStrategy_name, Config_DomainStrategy_value)
+}
+
+func init() { proto.RegisterFile("config.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 174 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0xce, 0xcf, 0x4b,
+	0xcb, 0x4c, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x49, 0xce, 0xcf, 0xd5, 0x2b, 0x33,
+	0x2a, 0x4a, 0xac, 0xd4, 0x4b, 0xce, 0x2f, 0x4a, 0x05, 0x89, 0x56, 0x54, 0xea, 0xa5, 0x15, 0xa5,
+	0xa6, 0xa6, 0xe4, 0xe7, 0x2a, 0xad, 0x60, 0xe4, 0x62, 0x73, 0x06, 0x2b, 0x17, 0x8a, 0xe6, 0xe2,
+	0x4b, 0xc9, 0xcf, 0x4d, 0xcc, 0xcc, 0x0b, 0x2e, 0x29, 0x4a, 0x2c, 0x49, 0x4d, 0xaf, 0x94, 0x60,
+	0x54, 0x60, 0xd4, 0xe0, 0x33, 0x32, 0xd6, 0xc3, 0x67, 0x82, 0x1e, 0x44, 0xb7, 0x9e, 0x0b, 0x8a,
+	0xd6, 0x20, 0x34, 0xa3, 0x84, 0x24, 0xb8, 0xd8, 0x4b, 0x32, 0x73, 0x53, 0xf3, 0x4b, 0x4b, 0x24,
+	0x98, 0x14, 0x18, 0x35, 0x78, 0x83, 0x60, 0x5c, 0x25, 0x75, 0x2e, 0x3e, 0x54, 0xbd, 0x42, 0x9c,
+	0x5c, 0xac, 0x8e, 0xc1, 0xf1, 0x9e, 0xc1, 0x02, 0x0c, 0x42, 0x5c, 0x5c, 0x6c, 0xa1, 0xc1, 0xae,
+	0xf1, 0x9e, 0x01, 0x02, 0x8c, 0x4e, 0x9c, 0x51, 0xec, 0x50, 0x3b, 0x93, 0xd8, 0xc0, 0x5e, 0x33,
+	0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x3c, 0x68, 0xdc, 0x2d, 0xea, 0x00, 0x00, 0x00,
+}

+ 13 - 0
proxy/freedom/config.proto

@@ -0,0 +1,13 @@
+syntax = "proto3";
+
+package com.v2ray.core.proxy.freedom;
+option go_package = "freedom";
+
+message Config {
+  enum DomainStrategy {
+    AS_IS = 0;
+    USE_IP = 1;
+  }
+  DomainStrategy domainStrategy = 1;
+  uint32 timeout = 2;
+}

+ 3 - 3
proxy/freedom/config_json.go

@@ -19,10 +19,10 @@ func (this *Config) UnmarshalJSON(data []byte) error {
 	if err := json.Unmarshal(data, jsonConfig); err != nil {
 		return errors.New("Freedom: Failed to parse config: " + err.Error())
 	}
-	this.DomainStrategy = DomainStrategyAsIs
+	this.DomainStrategy = Config_AS_IS
 	domainStrategy := strings.ToLower(jsonConfig.DomainStrategy)
-	if domainStrategy == "useip" {
-		this.DomainStrategy = DomainStrategyUseIP
+	if domainStrategy == "useip" || domainStrategy == "use_ip" {
+		this.DomainStrategy = Config_USE_IP
 	}
 	this.Timeout = jsonConfig.Timeout
 	return nil

+ 4 - 4
proxy/freedom/freedom.go

@@ -19,7 +19,7 @@ import (
 )
 
 type FreedomConnection struct {
-	domainStrategy DomainStrategy
+	domainStrategy Config_DomainStrategy
 	timeout        uint32
 	dns            dns.Server
 	meta           *proxy.OutboundHandlerMeta
@@ -32,7 +32,7 @@ func NewFreedomConnection(config *Config, space app.Space, meta *proxy.OutboundH
 		meta:           meta,
 	}
 	space.InitializeApplication(func() error {
-		if config.DomainStrategy == DomainStrategyUseIP {
+		if config.DomainStrategy == Config_USE_IP {
 			if !space.HasApp(dns.APP_ID) {
 				log.Error("Freedom: DNS server is not found in the space.")
 				return app.ErrMissingApplication
@@ -75,7 +75,7 @@ func (this *FreedomConnection) Dispatch(destination v2net.Destination, payload *
 	defer ray.OutboundOutput().Close()
 
 	var conn internet.Connection
-	if this.domainStrategy == DomainStrategyUseIP && destination.Address().Family().IsDomain() {
+	if this.domainStrategy == Config_USE_IP && destination.Address().Family().IsDomain() {
 		destination = this.ResolveIP(destination)
 	}
 	err := retry.Timed(5, 100).On(func() error {
@@ -116,7 +116,7 @@ func (this *FreedomConnection) Dispatch(destination v2net.Destination, payload *
 		timeout = 16
 	}
 	if timeout > 0 {
-		reader = v2net.NewTimeOutReader(int(timeout) /* seconds */, conn)
+		reader = v2net.NewTimeOutReader(timeout /* seconds */, conn)
 	}
 
 	v2reader := v2io.NewAdaptiveReader(reader)

+ 1 - 1
proxy/freedom/freedom_test.go

@@ -97,7 +97,7 @@ func TestIPResolution(t *testing.T) {
 	space.BindApp(dns.APP_ID, dnsServer)
 
 	freedom := NewFreedomConnection(
-		&Config{DomainStrategy: DomainStrategyUseIP},
+		&Config{DomainStrategy: Config_USE_IP},
 		space,
 		&proxy.OutboundHandlerMeta{
 			Address: v2net.AnyIP,

+ 2 - 9
proxy/http/config.go

@@ -1,10 +1,3 @@
-package http
-
-// Config for HTTP proxy server.
-type Config struct {
-	Timeout int
-}
+//go:generate protoc --go_out=. config.proto
 
-// ClientConfig for HTTP proxy client.
-type ClientConfig struct {
-}
+package http

+ 68 - 0
proxy/http/config.pb.go

@@ -0,0 +1,68 @@
+// Code generated by protoc-gen-go.
+// source: config.proto
+// DO NOT EDIT!
+
+/*
+Package http is a generated protocol buffer package.
+
+It is generated from these files:
+	config.proto
+
+It has these top-level messages:
+	ServerConfig
+	ClientConfig
+*/
+package http
+
+import proto "github.com/golang/protobuf/proto"
+import fmt "fmt"
+import math "math"
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+
+// Config for HTTP proxy server.
+type ServerConfig struct {
+	Timeout uint32 `protobuf:"varint,1,opt,name=timeout" json:"timeout,omitempty"`
+}
+
+func (m *ServerConfig) Reset()                    { *m = ServerConfig{} }
+func (m *ServerConfig) String() string            { return proto.CompactTextString(m) }
+func (*ServerConfig) ProtoMessage()               {}
+func (*ServerConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+
+// ClientConfig for HTTP proxy client.
+type ClientConfig struct {
+}
+
+func (m *ClientConfig) Reset()                    { *m = ClientConfig{} }
+func (m *ClientConfig) String() string            { return proto.CompactTextString(m) }
+func (*ClientConfig) ProtoMessage()               {}
+func (*ClientConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+
+func init() {
+	proto.RegisterType((*ServerConfig)(nil), "com.v2ray.core.proxy.http.ServerConfig")
+	proto.RegisterType((*ClientConfig)(nil), "com.v2ray.core.proxy.http.ClientConfig")
+}
+
+func init() { proto.RegisterFile("config.proto", fileDescriptor0) }
+
+var fileDescriptor0 = []byte{
+	// 119 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0xe2, 0x49, 0xce, 0xcf, 0x4b,
+	0xcb, 0x4c, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x92, 0x4c, 0xce, 0xcf, 0xd5, 0x2b, 0x33,
+	0x2a, 0x4a, 0xac, 0xd4, 0x4b, 0xce, 0x2f, 0x4a, 0x05, 0x89, 0x56, 0x54, 0xea, 0x65, 0x94, 0x94,
+	0x14, 0x28, 0x69, 0x70, 0xf1, 0x04, 0xa7, 0x16, 0x95, 0xa5, 0x16, 0x39, 0x83, 0x35, 0x08, 0x49,
+	0x70, 0xb1, 0x97, 0x64, 0xe6, 0xa6, 0xe6, 0x97, 0x96, 0x48, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x06,
+	0xc1, 0xb8, 0x4a, 0x7c, 0x5c, 0x3c, 0xce, 0x39, 0x99, 0xa9, 0x79, 0x25, 0x10, 0x95, 0x4e, 0x6c,
+	0x51, 0x2c, 0x20, 0x13, 0x92, 0xd8, 0xc0, 0x76, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xd6,
+	0xea, 0x59, 0xf8, 0x73, 0x00, 0x00, 0x00,
+}

+ 14 - 0
proxy/http/config.proto

@@ -0,0 +1,14 @@
+syntax = "proto3";
+
+package com.v2ray.core.proxy.http;
+option go_package = "http";
+
+// Config for HTTP proxy server.
+message ServerConfig {
+  uint32 timeout = 1;
+}
+
+// ClientConfig for HTTP proxy client.
+message ClientConfig {
+
+}

+ 3 - 3
proxy/http/config_json.go

@@ -10,9 +10,9 @@ import (
 )
 
 // UnmarshalJSON implements json.Unmarshaler
-func (this *Config) UnmarshalJSON(data []byte) error {
+func (this *ServerConfig) UnmarshalJSON(data []byte) error {
 	type JsonConfig struct {
-		Timeout int `json:"timeout"`
+		Timeout uint32 `json:"timeout"`
 	}
 	jsonConfig := new(JsonConfig)
 	if err := json.Unmarshal(data, jsonConfig); err != nil {
@@ -24,5 +24,5 @@ func (this *Config) UnmarshalJSON(data []byte) error {
 }
 
 func init() {
-	registry.RegisterInboundConfig("http", func() interface{} { return new(Config) })
+	registry.RegisterInboundConfig("http", func() interface{} { return new(ServerConfig) })
 }

+ 3 - 3
proxy/http/server.go

@@ -26,12 +26,12 @@ type Server struct {
 	sync.Mutex
 	accepting        bool
 	packetDispatcher dispatcher.PacketDispatcher
-	config           *Config
+	config           *ServerConfig
 	tcpListener      *internet.TCPHub
 	meta             *proxy.InboundHandlerMeta
 }
 
-func NewServer(config *Config, packetDispatcher dispatcher.PacketDispatcher, meta *proxy.InboundHandlerMeta) *Server {
+func NewServer(config *ServerConfig, packetDispatcher dispatcher.PacketDispatcher, meta *proxy.InboundHandlerMeta) *Server {
 	return &Server{
 		packetDispatcher: packetDispatcher,
 		config:           config,
@@ -273,7 +273,7 @@ func (this *ServerFactory) Create(space app.Space, rawConfig interface{}, meta *
 		return nil, common.ErrBadConfiguration
 	}
 	return NewServer(
-		rawConfig.(*Config),
+		rawConfig.(*ServerConfig),
 		space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher),
 		meta), nil
 }

+ 1 - 1
proxy/http/server_test.go

@@ -58,7 +58,7 @@ func TestNormalGetRequest(t *testing.T) {
 
 	port := v2net.Port(dice.Roll(20000) + 10000)
 	httpProxy := NewServer(
-		&Config{},
+		&ServerConfig{},
 		testPacketDispatcher,
 		&proxy.InboundHandlerMeta{
 			Address: v2net.LocalHostIP,

+ 1 - 1
proxy/socks/server_config.go

@@ -14,7 +14,7 @@ type Config struct {
 	Accounts   map[string]string
 	Address    v2net.Address
 	UDPEnabled bool
-	Timeout    int
+	Timeout    uint32
 }
 
 func (this *Config) HasAccount(username, password string) bool {

+ 1 - 1
proxy/socks/server_config_json.go

@@ -23,7 +23,7 @@ func (this *Config) UnmarshalJSON(data []byte) error {
 		Accounts   []*Account         `json:"accounts"`
 		UDP        bool               `json:"udp"`
 		Host       *v2net.AddressJson `json:"ip"`
-		Timeout    int                `json:"timeout"`
+		Timeout    uint32             `json:"timeout"`
 	}
 
 	rawConfig := new(SocksConfig)