1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-10 09:50:43 +00:00

rename IP to CIDR in router

This commit is contained in:
Darien Raymond 2016-10-18 16:42:22 +02:00
parent 2af4b16913
commit e13c97d162
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
18 changed files with 169 additions and 127 deletions

View File

@ -31,8 +31,11 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type Config struct { type Config struct {
NameServers []*v2ray_core_common_net2.Endpoint `protobuf:"bytes,1,rep,name=NameServers" json:"NameServers,omitempty"` // Nameservers used by this DNS. Only traditional UDP servers are support at the moment.
Hosts map[string]*v2ray_core_common_net.IPOrDomain `protobuf:"bytes,2,rep,name=Hosts" json:"Hosts,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // A special value 'localhost' as a domain address can be set to use DNS on local system.
NameServers []*v2ray_core_common_net2.Endpoint `protobuf:"bytes,1,rep,name=NameServers" json:"NameServers,omitempty"`
// Static hosts. Domain to IP.
Hosts map[string]*v2ray_core_common_net.IPOrDomain `protobuf:"bytes,2,rep,name=Hosts" json:"Hosts,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
} }
func (m *Config) Reset() { *m = Config{} } func (m *Config) Reset() { *m = Config{} }

View File

@ -35,19 +35,18 @@ func (this *RoutingRule) BuildCondition() (Condition, error) {
conds.Add(anyCond) conds.Add(anyCond)
} }
if len(this.Ip) > 0 { if len(this.Cidr) > 0 {
ipv4Net := make(map[uint32]byte) ipv4Net := v2net.NewIPNet()
ipv6Cond := NewAnyCondition() ipv6Cond := NewAnyCondition()
hasIpv6 := false hasIpv6 := false
for _, ip := range this.Ip { for _, ip := range this.Cidr {
switch len(ip.Ip) { switch len(ip.Ip) {
case net.IPv4len: case net.IPv4len:
k := (uint32(ip.Ip[0]) << 24) + (uint32(ip.Ip[1]) << 16) + (uint32(ip.Ip[2]) << 8) + uint32(ip.Ip[3]) ipv4Net.AddIP(ip.Ip, byte(ip.Prefix))
ipv4Net[k] = byte(32 - ip.UnmatchingBits)
case net.IPv6len: case net.IPv6len:
hasIpv6 = true hasIpv6 = true
matcher, err := NewCIDRMatcher(ip.Ip, uint32(32)-ip.UnmatchingBits) matcher, err := NewCIDRMatcher(ip.Ip, ip.Prefix)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -57,13 +56,13 @@ func (this *RoutingRule) BuildCondition() (Condition, error) {
} }
} }
if len(ipv4Net) > 0 && hasIpv6 { if !ipv4Net.IsEmpty() && hasIpv6 {
cond := NewAnyCondition() cond := NewAnyCondition()
cond.Add(NewIPv4Matcher(v2net.NewIPNetInitialValue(ipv4Net))) cond.Add(NewIPv4Matcher(ipv4Net))
cond.Add(ipv6Cond) cond.Add(ipv6Cond)
conds.Add(cond) conds.Add(cond)
} else if len(ipv4Net) > 0 { } else if !ipv4Net.IsEmpty() {
conds.Add(NewIPv4Matcher(v2net.NewIPNetInitialValue(ipv4Net))) conds.Add(NewIPv4Matcher(ipv4Net))
} else if hasIpv6 { } else if hasIpv6 {
conds.Add(ipv6Cond) conds.Add(ipv6Cond)
} }

View File

@ -10,7 +10,7 @@ It is generated from these files:
It has these top-level messages: It has these top-level messages:
Domain Domain
IP CIDR
RoutingRule RoutingRule
Config Config
*/ */
@ -60,8 +60,11 @@ func (Domain_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []
type Config_DomainStrategy int32 type Config_DomainStrategy int32
const ( const (
Config_AsIs Config_DomainStrategy = 0 // Use domain as is.
Config_UseIp Config_DomainStrategy = 1 Config_AsIs Config_DomainStrategy = 0
// Always resolve IP for domains.
Config_UseIp Config_DomainStrategy = 1
// Resolve to IP if the domain doesn't match any rules.
Config_IpIfNonMatch Config_DomainStrategy = 2 Config_IpIfNonMatch Config_DomainStrategy = 2
) )
@ -94,25 +97,23 @@ func (m *Domain) String() string { return proto.CompactTextString(m)
func (*Domain) ProtoMessage() {} func (*Domain) ProtoMessage() {}
func (*Domain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (*Domain) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
// IP for routing decision. // IP for routing decision, in CIDR form.
type IP struct { type CIDR struct {
// IP address, should be either 4 or 16 bytes. // IP address, should be either 4 or 16 bytes.
Ip []byte `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` Ip []byte `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"`
// Number of right-most bits in IP matching that is allowed. // Number of leading ones in the network mask.
// Single IP address like 127.0.0.1 should use unmatching_bits = 0. Prefix uint32 `protobuf:"varint,2,opt,name=prefix" json:"prefix,omitempty"`
// CIDR 10.0.0.0/8 should use unmatching_bits = 32-8 = 24.
UnmatchingBits uint32 `protobuf:"varint,2,opt,name=unmatching_bits,json=unmatchingBits" json:"unmatching_bits,omitempty"`
} }
func (m *IP) Reset() { *m = IP{} } func (m *CIDR) Reset() { *m = CIDR{} }
func (m *IP) String() string { return proto.CompactTextString(m) } func (m *CIDR) String() string { return proto.CompactTextString(m) }
func (*IP) ProtoMessage() {} func (*CIDR) ProtoMessage() {}
func (*IP) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } func (*CIDR) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
type RoutingRule struct { type RoutingRule struct {
Tag string `protobuf:"bytes,1,opt,name=tag" json:"tag,omitempty"` Tag string `protobuf:"bytes,1,opt,name=tag" json:"tag,omitempty"`
Domain []*Domain `protobuf:"bytes,2,rep,name=domain" json:"domain,omitempty"` Domain []*Domain `protobuf:"bytes,2,rep,name=domain" json:"domain,omitempty"`
Ip []*IP `protobuf:"bytes,3,rep,name=ip" json:"ip,omitempty"` Cidr []*CIDR `protobuf:"bytes,3,rep,name=cidr" json:"cidr,omitempty"`
PortRange *v2ray_core_common_net.PortRange `protobuf:"bytes,4,opt,name=port_range,json=portRange" json:"port_range,omitempty"` PortRange *v2ray_core_common_net.PortRange `protobuf:"bytes,4,opt,name=port_range,json=portRange" json:"port_range,omitempty"`
NetworkList *v2ray_core_common_net1.NetworkList `protobuf:"bytes,5,opt,name=network_list,json=networkList" json:"network_list,omitempty"` NetworkList *v2ray_core_common_net1.NetworkList `protobuf:"bytes,5,opt,name=network_list,json=networkList" json:"network_list,omitempty"`
} }
@ -129,9 +130,9 @@ func (m *RoutingRule) GetDomain() []*Domain {
return nil return nil
} }
func (m *RoutingRule) GetIp() []*IP { func (m *RoutingRule) GetCidr() []*CIDR {
if m != nil { if m != nil {
return m.Ip return m.Cidr
} }
return nil return nil
} }
@ -169,7 +170,7 @@ func (m *Config) GetRule() []*RoutingRule {
func init() { func init() {
proto.RegisterType((*Domain)(nil), "v2ray.core.app.router.Domain") proto.RegisterType((*Domain)(nil), "v2ray.core.app.router.Domain")
proto.RegisterType((*IP)(nil), "v2ray.core.app.router.IP") proto.RegisterType((*CIDR)(nil), "v2ray.core.app.router.CIDR")
proto.RegisterType((*RoutingRule)(nil), "v2ray.core.app.router.RoutingRule") proto.RegisterType((*RoutingRule)(nil), "v2ray.core.app.router.RoutingRule")
proto.RegisterType((*Config)(nil), "v2ray.core.app.router.Config") proto.RegisterType((*Config)(nil), "v2ray.core.app.router.Config")
proto.RegisterEnum("v2ray.core.app.router.Domain_Type", Domain_Type_name, Domain_Type_value) proto.RegisterEnum("v2ray.core.app.router.Domain_Type", Domain_Type_name, Domain_Type_value)
@ -179,34 +180,34 @@ func init() {
func init() { proto.RegisterFile("v2ray.com/core/app/router/config.proto", fileDescriptor0) } func init() { proto.RegisterFile("v2ray.com/core/app/router/config.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 462 bytes of a gzipped FileDescriptorProto // 458 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x92, 0x5f, 0x6b, 0xd5, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x8e, 0xd3, 0x30,
0x18, 0xc6, 0x6d, 0x77, 0x4e, 0xf1, 0xbc, 0x3d, 0x76, 0x25, 0x28, 0x74, 0x43, 0xa1, 0x14, 0x71, 0x10, 0x86, 0x49, 0x9a, 0x46, 0x74, 0x52, 0x4a, 0x64, 0x01, 0x0a, 0x0b, 0x48, 0x51, 0x84, 0xa0,
0x47, 0x90, 0x54, 0x8e, 0xa8, 0x57, 0x22, 0x1e, 0xf5, 0xa2, 0xa0, 0xa3, 0x44, 0x77, 0xe3, 0xcd, 0x07, 0xe4, 0xa0, 0x22, 0xe0, 0x88, 0xd8, 0x5d, 0x0e, 0x91, 0x60, 0x55, 0x19, 0xf6, 0xc2, 0xa5,
0x21, 0xeb, 0xb2, 0x1a, 0x6c, 0x93, 0x90, 0xa6, 0xd3, 0xf3, 0x11, 0xfc, 0x76, 0x7e, 0x24, 0x69, 0x32, 0xa9, 0x1b, 0x2c, 0x12, 0xdb, 0x72, 0x9c, 0x65, 0xfb, 0x14, 0xbc, 0x1a, 0x8f, 0x84, 0x62,
0xd2, 0xb1, 0x4d, 0x56, 0xef, 0xf2, 0x86, 0xdf, 0xf3, 0xfe, 0x7d, 0xe0, 0xc9, 0xc5, 0x5a, 0xd3, 0x67, 0xc5, 0x2e, 0x6a, 0xb8, 0xcd, 0x58, 0xdf, 0x3f, 0x33, 0x9e, 0xf9, 0xe1, 0xd9, 0xc5, 0x4a,
0x1d, 0xae, 0x64, 0x9b, 0x57, 0x52, 0xb3, 0x9c, 0x2a, 0x95, 0x6b, 0xd9, 0x1b, 0xa6, 0xf3, 0x4a, 0xd3, 0x3d, 0x2e, 0x65, 0x93, 0x97, 0x52, 0xb3, 0x9c, 0x2a, 0x95, 0x6b, 0xd9, 0x19, 0xa6, 0xf3,
0x8a, 0x73, 0x5e, 0x63, 0xa5, 0xa5, 0x91, 0xe8, 0xc1, 0x25, 0xa7, 0x19, 0xa6, 0x4a, 0x61, 0xc7, 0x52, 0x8a, 0x1d, 0xaf, 0xb0, 0xd2, 0xd2, 0x48, 0x74, 0xff, 0x8a, 0xd3, 0x0c, 0x53, 0xa5, 0xb0,
0x1c, 0x3e, 0xfe, 0x47, 0x5e, 0xc9, 0xb6, 0x95, 0x22, 0x17, 0xcc, 0xe4, 0x4a, 0x6a, 0xe3, 0xc4, 0x63, 0x8e, 0x9e, 0xfe, 0x23, 0x2f, 0x65, 0xd3, 0x48, 0x91, 0x0b, 0x66, 0x72, 0x25, 0xb5, 0x71,
0x87, 0x47, 0xd3, 0x94, 0x60, 0xe6, 0xa7, 0xd4, 0x3f, 0x1c, 0x98, 0x19, 0x08, 0x3e, 0xc8, 0x96, 0xe2, 0xa3, 0xe7, 0xe3, 0x94, 0x60, 0xe6, 0xa7, 0xd4, 0x3f, 0x1c, 0x98, 0x19, 0x08, 0x4f, 0x65,
0x72, 0x81, 0x5e, 0xc1, 0xcc, 0xec, 0x14, 0x4b, 0xbc, 0xd4, 0x5b, 0x45, 0xeb, 0x0c, 0xdf, 0x5a, 0x43, 0xb9, 0x40, 0x6f, 0x20, 0x30, 0x7b, 0xc5, 0x12, 0x2f, 0xf5, 0x96, 0x8b, 0x55, 0x86, 0x0f,
0x1e, 0x3b, 0x18, 0x7f, 0xdd, 0x29, 0x46, 0x2c, 0x8f, 0xee, 0xc3, 0xfc, 0x82, 0x36, 0x3d, 0x4b, 0xb6, 0xc7, 0x0e, 0xc6, 0x5f, 0xf6, 0x8a, 0x11, 0xcb, 0xa3, 0x7b, 0x30, 0xbd, 0xa0, 0x75, 0xc7,
0xfc, 0xd4, 0x5b, 0x2d, 0x88, 0x0b, 0xb2, 0x87, 0x30, 0x1b, 0x18, 0xb4, 0x80, 0x79, 0xd9, 0x50, 0x12, 0x3f, 0xf5, 0x96, 0x33, 0xe2, 0x92, 0xec, 0x31, 0x04, 0x3d, 0x83, 0x66, 0x30, 0x5d, 0xd7,
0x2e, 0xe2, 0x3b, 0xc3, 0x93, 0xb0, 0x9a, 0xfd, 0x8a, 0xbd, 0xec, 0x0d, 0xf8, 0x45, 0x89, 0x22, 0x94, 0x8b, 0xf8, 0x56, 0x1f, 0x12, 0x56, 0xb1, 0xcb, 0xd8, 0xcb, 0x30, 0x04, 0x27, 0xc5, 0x29,
0xf0, 0xb9, 0xb2, 0xf5, 0x96, 0xc4, 0xe7, 0x0a, 0x1d, 0xc1, 0x7e, 0x2f, 0x5a, 0x6a, 0xaa, 0xef, 0x41, 0x0b, 0xf0, 0xb9, 0xb2, 0x1d, 0xe7, 0xc4, 0xe7, 0x0a, 0x3d, 0x80, 0x50, 0x69, 0xb6, 0xe3,
0x5c, 0xd4, 0xdb, 0x53, 0x6e, 0x3a, 0x9b, 0xf3, 0x1e, 0x89, 0xae, 0xbe, 0x37, 0xdc, 0x74, 0xd9, 0x97, 0xb6, 0xd8, 0x1d, 0x32, 0x64, 0xd9, 0x2f, 0x1f, 0x22, 0x22, 0x3b, 0xc3, 0x45, 0x45, 0xba,
0x6f, 0x1f, 0x42, 0x22, 0x7b, 0xc3, 0x45, 0x4d, 0xfa, 0x86, 0xa1, 0x18, 0xf6, 0x0c, 0xad, 0x6d, 0x9a, 0xa1, 0x18, 0x26, 0x86, 0x56, 0x56, 0x38, 0x23, 0x7d, 0x88, 0x5e, 0x43, 0xb8, 0xb5, 0xa3,
0xa6, 0x05, 0x19, 0x9e, 0xe8, 0x25, 0x04, 0x67, 0xb6, 0xd3, 0xc4, 0x4f, 0xf7, 0x56, 0xe1, 0xfa, 0x25, 0x7e, 0x3a, 0x59, 0x46, 0xab, 0x27, 0xff, 0x9d, 0x9f, 0x0c, 0x30, 0xca, 0x21, 0x28, 0xf9,
0xd1, 0x7f, 0xc7, 0x21, 0x23, 0x8c, 0x9e, 0xda, 0x8e, 0xf6, 0xac, 0xe4, 0x60, 0x42, 0x52, 0x94, 0x56, 0x27, 0x13, 0x2b, 0x7a, 0x34, 0x22, 0xea, 0x67, 0x25, 0x16, 0x44, 0xef, 0x00, 0xfa, 0x35,
0xb6, 0xd9, 0xb7, 0x00, 0xc3, 0xbe, 0xb7, 0x9a, 0x8a, 0x9a, 0x25, 0xb3, 0xd4, 0x5b, 0x85, 0xeb, 0x6f, 0x34, 0x15, 0x15, 0x4b, 0x82, 0xd4, 0x5b, 0x46, 0xab, 0xf4, 0xba, 0xcc, 0x6d, 0x1a, 0x0b,
0xf4, 0xba, 0xc4, 0xad, 0x1c, 0x0b, 0x66, 0x70, 0x29, 0xb5, 0x21, 0x03, 0x47, 0x16, 0xea, 0xf2, 0x66, 0xf0, 0x5a, 0x6a, 0x43, 0x7a, 0x8e, 0xcc, 0xd4, 0x55, 0x88, 0x3e, 0xc0, 0x7c, 0xb8, 0xc0,
0x89, 0x3e, 0xc2, 0x72, 0x3c, 0xc5, 0xb6, 0xe1, 0x9d, 0x49, 0xe6, 0x36, 0x45, 0x36, 0x91, 0xe2, 0xa6, 0xe6, 0xad, 0x49, 0xa6, 0xb6, 0x44, 0x36, 0x52, 0xe2, 0xcc, 0xa1, 0x1f, 0x79, 0x6b, 0x48,
0xd8, 0xa1, 0x9f, 0x78, 0x67, 0x48, 0x28, 0xae, 0x82, 0xec, 0x8f, 0x07, 0xc1, 0x7b, 0xeb, 0x1b, 0x24, 0xfe, 0x26, 0xd9, 0x6f, 0x0f, 0xc2, 0x13, 0x6b, 0x17, 0x74, 0x0e, 0x77, 0xdd, 0x6f, 0x36,
0x74, 0x02, 0xfb, 0x6e, 0x8e, 0x6d, 0x67, 0x34, 0x35, 0xac, 0xde, 0x8d, 0xc7, 0x7c, 0x36, 0x31, 0xad, 0xd1, 0xd4, 0xb0, 0x6a, 0x3f, 0xdc, 0xf0, 0xc5, 0xd8, 0x77, 0x9c, 0xcd, 0xdc, 0x2a, 0x3e,
0x8a, 0xd3, 0x8d, 0x4b, 0xf8, 0x32, 0x6a, 0x48, 0x74, 0x76, 0x23, 0x1e, 0x8c, 0xa1, 0xfb, 0x86, 0x0f, 0x1a, 0xb2, 0xd8, 0xde, 0xc8, 0x7b, 0x3f, 0xe8, 0xae, 0x66, 0xc3, 0x3e, 0xc7, 0xfc, 0x70,
0x8d, 0x9b, 0x9c, 0x32, 0xc6, 0xb5, 0x7b, 0x10, 0xcb, 0x67, 0xaf, 0x21, 0xba, 0x99, 0x19, 0xdd, 0xed, 0x2a, 0xc4, 0xf2, 0xd9, 0x5b, 0x58, 0xdc, 0xac, 0x8c, 0x6e, 0x43, 0xf0, 0xbe, 0x2d, 0x5a,
0x85, 0xd9, 0xbb, 0xae, 0xe8, 0x9c, 0x17, 0x4e, 0x3a, 0x56, 0xa8, 0xd8, 0x43, 0x31, 0x2c, 0x0b, 0x67, 0x81, 0xf3, 0x96, 0x15, 0x2a, 0xf6, 0x50, 0x0c, 0xf3, 0x42, 0x15, 0xbb, 0x33, 0x29, 0x3e,
0x55, 0x9c, 0x1f, 0x4b, 0xf1, 0x79, 0xb8, 0x71, 0xec, 0x6f, 0x9e, 0xc3, 0x41, 0x25, 0xdb, 0xdb, 0x51, 0x53, 0x7e, 0x8f, 0xfd, 0xe3, 0x97, 0xf0, 0xb0, 0x94, 0xcd, 0xe1, 0x3e, 0xc7, 0x91, 0x1b,
0xeb, 0x6c, 0x42, 0xd7, 0x74, 0x39, 0xb8, 0xf7, 0x5b, 0xe0, 0x3e, 0x4f, 0x03, 0x6b, 0xe6, 0x17, 0x7a, 0xdd, 0x9b, 0xf6, 0x6b, 0xe8, 0x1e, 0xbf, 0x85, 0xd6, 0xc3, 0xaf, 0xfe, 0x04, 0x00, 0x00,
0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x93, 0xed, 0x34, 0x36, 0x5c, 0x03, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x28, 0xf6, 0x96, 0x53, 0x03, 0x00, 0x00,
} }

View File

@ -25,21 +25,19 @@ message Domain {
string value = 2; string value = 2;
} }
// IP for routing decision. // IP for routing decision, in CIDR form.
message IP { message CIDR {
// IP address, should be either 4 or 16 bytes. // IP address, should be either 4 or 16 bytes.
bytes ip = 1; bytes ip = 1;
// Number of right-most bits in IP matching that is allowed. // Number of leading ones in the network mask.
// Single IP address like 127.0.0.1 should use unmatching_bits = 0. uint32 prefix = 2;
// CIDR 10.0.0.0/8 should use unmatching_bits = 32-8 = 24.
uint32 unmatching_bits = 2;
} }
message RoutingRule { message RoutingRule {
string tag = 1; string tag = 1;
repeated Domain domain = 2; repeated Domain domain = 2;
repeated IP ip = 3; repeated CIDR cidr = 3;
v2ray.core.common.net.PortRange port_range = 4; v2ray.core.common.net.PortRange port_range = 4;
v2ray.core.common.net.NetworkList network_list = 5; v2ray.core.common.net.NetworkList network_list = 5;
} }

View File

@ -28,8 +28,11 @@ var _ = math.Inf
// proto package needs to be updated. // proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
// Serialized proto message along with its type name.
type TypedSettings struct { type TypedSettings struct {
Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"` // The name of the message type, retrieved from protobuf API.
Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
// Serialized proto message.
Settings []byte `protobuf:"bytes,2,opt,name=settings,proto3" json:"settings,omitempty"` Settings []byte `protobuf:"bytes,2,opt,name=settings,proto3" json:"settings,omitempty"`
} }

View File

@ -13,12 +13,8 @@ type IPNet struct {
} }
func NewIPNet() *IPNet { func NewIPNet() *IPNet {
return NewIPNetInitialValue(make(map[uint32]byte, 1024))
}
func NewIPNetInitialValue(data map[uint32]byte) *IPNet {
return &IPNet{ return &IPNet{
cache: data, cache: make(map[uint32]byte, 1024),
} }
} }
@ -45,11 +41,15 @@ func (this *IPNet) Add(ipNet *net.IPNet) {
// For now, we don't support IPv6 // For now, we don't support IPv6
return return
} }
value := ipToUint32(ipv4)
mask := ipMaskToByte(ipNet.Mask) mask := ipMaskToByte(ipNet.Mask)
existing, found := this.cache[value] this.AddIP(ipv4, mask)
}
func (this *IPNet) AddIP(ip []byte, mask byte) {
k := ipToUint32(ip)
existing, found := this.cache[k]
if !found || existing > mask { if !found || existing > mask {
this.cache[value] = mask this.cache[k] = mask
} }
} }
@ -80,12 +80,8 @@ func (this *IPNet) Contains(ip net.IP) bool {
return false return false
} }
func (this *IPNet) Serialize() []uint32 { func (this *IPNet) IsEmpty() bool {
content := make([]uint32, 0, 2*len(this.cache)) return len(this.cache) == 0
for key, value := range this.cache {
content = append(content, uint32(key), uint32(value))
}
return content
} }
func init() { func init() {

View File

@ -16,8 +16,10 @@ var _ = math.Inf
type Network int32 type Network int32
const ( const (
Network_Unknown Network = 0 Network_Unknown Network = 0
Network_RawTCP Network = 1 // Native TCP provided by system.
Network_RawTCP Network = 1
// V2Ray specific TCP.
Network_TCP Network = 2 Network_TCP Network = 2
Network_UDP Network = 3 Network_UDP Network = 3
Network_KCP Network = 4 Network_KCP Network = 4

View File

@ -15,8 +15,9 @@ var _ = fmt.Errorf
var _ = math.Inf var _ = math.Inf
type User struct { type User struct {
Level uint32 `protobuf:"varint,1,opt,name=level" json:"level,omitempty"` Level uint32 `protobuf:"varint,1,opt,name=level" json:"level,omitempty"`
Email string `protobuf:"bytes,2,opt,name=email" json:"email,omitempty"` Email string `protobuf:"bytes,2,opt,name=email" json:"email,omitempty"`
// Protocol specific account information.
Account *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,3,opt,name=account" json:"account,omitempty"` Account *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,3,opt,name=account" json:"account,omitempty"`
} }

View File

@ -39,6 +39,7 @@ var _ = math.Inf
// proto package needs to be updated. // proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
// Configuration serialization format.
type ConfigFormat int32 type ConfigFormat int32
const ( const (
@ -108,8 +109,10 @@ func (*AllocationStrategyRefresh) Descriptor() ([]byte, []int) { return fileDesc
type AllocationStrategy struct { type AllocationStrategy struct {
Type AllocationStrategy_Type `protobuf:"varint,1,opt,name=type,enum=v2ray.core.AllocationStrategy_Type" json:"type,omitempty"` Type AllocationStrategy_Type `protobuf:"varint,1,opt,name=type,enum=v2ray.core.AllocationStrategy_Type" json:"type,omitempty"`
// Number of handlers (ports) running in parallel. // Number of handlers (ports) running in parallel.
// Default value is 3 if unset.
Concurrency *AllocationStrategyConcurrency `protobuf:"bytes,2,opt,name=concurrency" json:"concurrency,omitempty"` Concurrency *AllocationStrategyConcurrency `protobuf:"bytes,2,opt,name=concurrency" json:"concurrency,omitempty"`
// Number of minutes before a handler is regenerated. // Number of minutes before a handler is regenerated.
// Default value is 5 if unset.
Refresh *AllocationStrategyRefresh `protobuf:"bytes,3,opt,name=refresh" json:"refresh,omitempty"` Refresh *AllocationStrategyRefresh `protobuf:"bytes,3,opt,name=refresh" json:"refresh,omitempty"`
} }
@ -134,9 +137,13 @@ func (m *AllocationStrategy) GetRefresh() *AllocationStrategyRefresh {
// Config for an inbound connection handler. // Config for an inbound connection handler.
type InboundConnectionConfig struct { type InboundConnectionConfig struct {
Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"` // Protocol specific settings. Must be one of the supported protocols.
PortRange *v2ray_core_common_net.PortRange `protobuf:"bytes,2,opt,name=port_range,json=portRange" json:"port_range,omitempty"` Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"`
ListenOn *v2ray_core_common_net1.IPOrDomain `protobuf:"bytes,3,opt,name=listen_on,json=listenOn" json:"listen_on,omitempty"` // Range of port number to run on. Both inclusive.
PortRange *v2ray_core_common_net.PortRange `protobuf:"bytes,2,opt,name=port_range,json=portRange" json:"port_range,omitempty"`
// IP address to listen on. 0.0.0.0 if unset.
ListenOn *v2ray_core_common_net1.IPOrDomain `protobuf:"bytes,3,opt,name=listen_on,json=listenOn" json:"listen_on,omitempty"`
// Tag of this handler.
Tag string `protobuf:"bytes,4,opt,name=tag" json:"tag,omitempty"` Tag string `protobuf:"bytes,4,opt,name=tag" json:"tag,omitempty"`
AllocationStrategy *AllocationStrategy `protobuf:"bytes,5,opt,name=allocation_strategy,json=allocationStrategy" json:"allocation_strategy,omitempty"` AllocationStrategy *AllocationStrategy `protobuf:"bytes,5,opt,name=allocation_strategy,json=allocationStrategy" json:"allocation_strategy,omitempty"`
StreamSettings *v2ray_core_transport_internet.StreamConfig `protobuf:"bytes,6,opt,name=stream_settings,json=streamSettings" json:"stream_settings,omitempty"` StreamSettings *v2ray_core_transport_internet.StreamConfig `protobuf:"bytes,6,opt,name=stream_settings,json=streamSettings" json:"stream_settings,omitempty"`
@ -183,8 +190,10 @@ func (m *InboundConnectionConfig) GetStreamSettings() *v2ray_core_transport_inte
return nil return nil
} }
// Config for an outbound connection handler.
type OutboundConnectionConfig struct { type OutboundConnectionConfig struct {
Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"` Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"`
// IP address to send data through. 0.0.0.0 if unset.
SendThrough *v2ray_core_common_net1.IPOrDomain `protobuf:"bytes,2,opt,name=send_through,json=sendThrough" json:"send_through,omitempty"` SendThrough *v2ray_core_common_net1.IPOrDomain `protobuf:"bytes,2,opt,name=send_through,json=sendThrough" json:"send_through,omitempty"`
StreamSettings *v2ray_core_transport_internet.StreamConfig `protobuf:"bytes,3,opt,name=stream_settings,json=streamSettings" json:"stream_settings,omitempty"` StreamSettings *v2ray_core_transport_internet.StreamConfig `protobuf:"bytes,3,opt,name=stream_settings,json=streamSettings" json:"stream_settings,omitempty"`
Tag string `protobuf:"bytes,4,opt,name=tag" json:"tag,omitempty"` Tag string `protobuf:"bytes,4,opt,name=tag" json:"tag,omitempty"`
@ -217,9 +226,12 @@ func (m *OutboundConnectionConfig) GetStreamSettings() *v2ray_core_transport_int
} }
type Config struct { type Config struct {
Inbound []*InboundConnectionConfig `protobuf:"bytes,1,rep,name=inbound" json:"inbound,omitempty"` // Inbound handler configurations. Must have at least one item.
Outbound []*OutboundConnectionConfig `protobuf:"bytes,2,rep,name=outbound" json:"outbound,omitempty"` Inbound []*InboundConnectionConfig `protobuf:"bytes,1,rep,name=inbound" json:"inbound,omitempty"`
Log *v2ray_core_common_log.Config `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"` // Outbound handler configurations. Must have at least one item. The first item is used as default for routing.
Outbound []*OutboundConnectionConfig `protobuf:"bytes,2,rep,name=outbound" json:"outbound,omitempty"`
Log *v2ray_core_common_log.Config `protobuf:"bytes,3,opt,name=log" json:"log,omitempty"`
// App configuration. Must be one in the app directory.
App []*v2ray_core_common_loader.TypedSettings `protobuf:"bytes,4,rep,name=app" json:"app,omitempty"` App []*v2ray_core_common_loader.TypedSettings `protobuf:"bytes,4,rep,name=app" json:"app,omitempty"`
Transport *v2ray_core_transport.Config `protobuf:"bytes,5,opt,name=transport" json:"transport,omitempty"` Transport *v2ray_core_transport.Config `protobuf:"bytes,5,opt,name=transport" json:"transport,omitempty"`
} }

View File

@ -50,7 +50,7 @@ type RouterRule struct {
OutboundTag string `json:"outboundTag"` OutboundTag string `json:"outboundTag"`
} }
func parseIP(s string) *router.IP { func parseIP(s string) *router.CIDR {
var addr, mask string var addr, mask string
i := strings.Index(s, "/") i := strings.Index(s, "/")
if i < 0 { if i < 0 {
@ -74,9 +74,9 @@ func parseIP(s string) *router.IP {
log.Warning("Router: invalid network mask: ", bits) log.Warning("Router: invalid network mask: ", bits)
return nil return nil
} }
return &router.IP{ return &router.CIDR{
Ip: []byte(ip.IP()), Ip: []byte(ip.IP()),
UnmatchingBits: 32 - bits, Prefix: bits,
} }
case v2net.AddressFamilyIPv6: case v2net.AddressFamilyIPv6:
bits := uint32(128) bits := uint32(128)
@ -91,9 +91,9 @@ func parseIP(s string) *router.IP {
log.Warning("Router: invalid network mask: ", bits) log.Warning("Router: invalid network mask: ", bits)
return nil return nil
} }
return &router.IP{ return &router.CIDR{
Ip: []byte(ip.IP()), Ip: []byte(ip.IP()),
UnmatchingBits: 128 - bits, Prefix: bits,
} }
default: default:
log.Warning("Router: unsupported address: ", s) log.Warning("Router: unsupported address: ", s)
@ -136,7 +136,7 @@ func parseFieldRule(msg json.RawMessage) (*router.RoutingRule, error) {
for _, ip := range *rawFieldRule.IP { for _, ip := range *rawFieldRule.IP {
ipRule := parseIP(ip) ipRule := parseIP(ip)
if ipRule != nil { if ipRule != nil {
rule.Ip = append(rule.Ip, ipRule) rule.Cidr = append(rule.Cidr, ipRule)
} }
} }
} }
@ -200,8 +200,8 @@ func parseChinaIPRule(data []byte) (*router.RoutingRule, error) {
return nil, err return nil, err
} }
return &router.RoutingRule{ return &router.RoutingRule{
Tag: rawRule.OutboundTag, Tag: rawRule.OutboundTag,
Ip: chinaIPs.Ips, Cidr: chinaIPs.Ips,
}, nil }, nil
} }

View File

@ -30,7 +30,7 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type CountryIPRange struct { type CountryIPRange struct {
Ips []*v2ray_core_app_router.IP `protobuf:"bytes,1,rep,name=ips" json:"ips,omitempty"` Ips []*v2ray_core_app_router.CIDR `protobuf:"bytes,1,rep,name=ips" json:"ips,omitempty"`
} }
func (m *CountryIPRange) Reset() { *m = CountryIPRange{} } func (m *CountryIPRange) Reset() { *m = CountryIPRange{} }
@ -38,7 +38,7 @@ func (m *CountryIPRange) String() string { return proto.CompactTextSt
func (*CountryIPRange) ProtoMessage() {} func (*CountryIPRange) ProtoMessage() {}
func (*CountryIPRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (*CountryIPRange) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (m *CountryIPRange) GetIps() []*v2ray_core_app_router.IP { func (m *CountryIPRange) GetIps() []*v2ray_core_app_router.CIDR {
if m != nil { if m != nil {
return m.Ips return m.Ips
} }
@ -52,15 +52,15 @@ func init() {
func init() { proto.RegisterFile("v2ray.com/core/tools/geoip/geoip.proto", fileDescriptor0) } func init() { proto.RegisterFile("v2ray.com/core/tools/geoip/geoip.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 153 bytes of a gzipped FileDescriptorProto // 155 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x52, 0x2b, 0x33, 0x2a, 0x4a, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x52, 0x2b, 0x33, 0x2a, 0x4a,
0xac, 0xd4, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x2f, 0x4a, 0xd5, 0x2f, 0xc9, 0xcf, 0xcf, 0x29, 0xac, 0xd4, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x2f, 0x4a, 0xd5, 0x2f, 0xc9, 0xcf, 0xcf, 0x29,
0xd6, 0x4f, 0x4f, 0xcd, 0xcf, 0x2c, 0x80, 0x90, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x62, 0xd6, 0x4f, 0x4f, 0xcd, 0xcf, 0x2c, 0x80, 0x90, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0x62,
0x30, 0x75, 0x45, 0xa9, 0x7a, 0x60, 0x35, 0x7a, 0x60, 0x59, 0x29, 0x74, 0xfd, 0x89, 0x05, 0x05, 0x30, 0x75, 0x45, 0xa9, 0x7a, 0x60, 0x35, 0x7a, 0x60, 0x59, 0x29, 0x74, 0xfd, 0x89, 0x05, 0x05,
0xfa, 0x45, 0xf9, 0xa5, 0x25, 0xa9, 0x45, 0xfa, 0xc9, 0xf9, 0x79, 0x69, 0x99, 0xe9, 0x10, 0xfd, 0xfa, 0x45, 0xf9, 0xa5, 0x25, 0xa9, 0x45, 0xfa, 0xc9, 0xf9, 0x79, 0x69, 0x99, 0xe9, 0x10, 0xfd,
0x4a, 0xb6, 0x5c, 0x7c, 0xce, 0xf9, 0xa5, 0x79, 0x25, 0x45, 0x95, 0x9e, 0x01, 0x41, 0x89, 0x79, 0x4a, 0xf6, 0x5c, 0x7c, 0xce, 0xf9, 0xa5, 0x79, 0x25, 0x45, 0x95, 0x9e, 0x01, 0x41, 0x89, 0x79,
0xe9, 0xa9, 0x42, 0xda, 0x5c, 0xcc, 0x99, 0x05, 0xc5, 0x12, 0x8c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, 0xe9, 0xa9, 0x42, 0xba, 0x5c, 0xcc, 0x99, 0x05, 0xc5, 0x12, 0x8c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46,
0x92, 0x7a, 0x48, 0xe6, 0x27, 0x16, 0x14, 0xe8, 0x41, 0xcc, 0xd0, 0xf3, 0x0c, 0x08, 0x02, 0xa9, 0xd2, 0x7a, 0x48, 0xe6, 0x27, 0x16, 0x14, 0xe8, 0x41, 0xcc, 0xd0, 0x73, 0xf6, 0x74, 0x09, 0x0a,
0x72, 0x62, 0x8f, 0x62, 0x05, 0xdb, 0x97, 0xc4, 0x06, 0x36, 0xce, 0x18, 0x10, 0x00, 0x00, 0xff, 0x02, 0xa9, 0x73, 0x62, 0x8f, 0x62, 0x05, 0xdb, 0x98, 0xc4, 0x06, 0x36, 0xd0, 0x18, 0x10, 0x00,
0xff, 0x60, 0x87, 0xf6, 0x5e, 0xb8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x02, 0xe8, 0xc0, 0xba, 0x00, 0x00, 0x00,
} }

View File

@ -6,5 +6,5 @@ option go_package = "geoip";
import "v2ray.com/core/app/router/config.proto"; import "v2ray.com/core/app/router/config.proto";
message CountryIPRange { message CountryIPRange {
repeated v2ray.core.app.router.IP ips = 1; repeated v2ray.core.app.router.CIDR ips = 1;
} }

File diff suppressed because one or more lines are too long

View File

@ -35,7 +35,7 @@ func main() {
scanner := bufio.NewScanner(resp.Body) scanner := bufio.NewScanner(resp.Body)
ips := &geoip.CountryIPRange{ ips := &geoip.CountryIPRange{
Ips: make([]*router.IP, 0, 8192), Ips: make([]*router.CIDR, 0, 8192),
} }
for scanner.Scan() { for scanner.Scan() {
line := scanner.Text() line := scanner.Text()
@ -57,9 +57,9 @@ func main() {
if len(ipBytes) == 0 { if len(ipBytes) == 0 {
panic("Invalid IP " + ip) panic("Invalid IP " + ip)
} }
ips.Ips = append(ips.Ips, &router.IP{ ips.Ips = append(ips.Ips, &router.CIDR{
Ip: []byte(ipBytes)[12:16], Ip: []byte(ipBytes)[12:16],
UnmatchingBits: mask, Prefix: 32 - mask,
}) })
} }

View File

@ -29,6 +29,7 @@ var _ = math.Inf
// proto package needs to be updated. // proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
// Global transport settings. This affects all type of connections that go through V2Ray.
type Config struct { type Config struct {
NetworkSettings []*v2ray_core_transport_internet.NetworkSettings `protobuf:"bytes,1,rep,name=network_settings,json=networkSettings" json:"network_settings,omitempty"` NetworkSettings []*v2ray_core_transport_internet.NetworkSettings `protobuf:"bytes,1,rep,name=network_settings,json=networkSettings" json:"network_settings,omitempty"`
} }

View File

@ -2,6 +2,16 @@
// source: v2ray.com/core/transport/internet/config.proto // source: v2ray.com/core/transport/internet/config.proto
// DO NOT EDIT! // DO NOT EDIT!
/*
Package internet is a generated protocol buffer package.
It is generated from these files:
v2ray.com/core/transport/internet/config.proto
It has these top-level messages:
NetworkSettings
StreamConfig
*/
package internet package internet
import proto "github.com/golang/protobuf/proto" import proto "github.com/golang/protobuf/proto"
@ -15,15 +25,23 @@ var _ = proto.Marshal
var _ = fmt.Errorf var _ = fmt.Errorf
var _ = math.Inf 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 NetworkSettings struct { type NetworkSettings struct {
Network v2ray_core_common_net.Network `protobuf:"varint,1,opt,name=network,enum=v2ray.core.common.net.Network" json:"network,omitempty"` // Type of network that this settings supports.
Network v2ray_core_common_net.Network `protobuf:"varint,1,opt,name=network,enum=v2ray.core.common.net.Network" json:"network,omitempty"`
// Specific settings.
Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"` Settings *v2ray_core_common_loader.TypedSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"`
} }
func (m *NetworkSettings) Reset() { *m = NetworkSettings{} } func (m *NetworkSettings) Reset() { *m = NetworkSettings{} }
func (m *NetworkSettings) String() string { return proto.CompactTextString(m) } func (m *NetworkSettings) String() string { return proto.CompactTextString(m) }
func (*NetworkSettings) ProtoMessage() {} func (*NetworkSettings) ProtoMessage() {}
func (*NetworkSettings) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } func (*NetworkSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (m *NetworkSettings) GetSettings() *v2ray_core_common_loader.TypedSettings { func (m *NetworkSettings) GetSettings() *v2ray_core_common_loader.TypedSettings {
if m != nil { if m != nil {
@ -33,8 +51,10 @@ func (m *NetworkSettings) GetSettings() *v2ray_core_common_loader.TypedSettings
} }
type StreamConfig struct { type StreamConfig struct {
Network v2ray_core_common_net.Network `protobuf:"varint,1,opt,name=network,enum=v2ray.core.common.net.Network" json:"network,omitempty"` // Effective network.
NetworkSettings []*NetworkSettings `protobuf:"bytes,2,rep,name=network_settings,json=networkSettings" json:"network_settings,omitempty"` Network v2ray_core_common_net.Network `protobuf:"varint,1,opt,name=network,enum=v2ray.core.common.net.Network" json:"network,omitempty"`
NetworkSettings []*NetworkSettings `protobuf:"bytes,2,rep,name=network_settings,json=networkSettings" json:"network_settings,omitempty"`
// Type of security. Must be a message name of the settings proto.
SecurityType string `protobuf:"bytes,3,opt,name=security_type,json=securityType" json:"security_type,omitempty"` SecurityType string `protobuf:"bytes,3,opt,name=security_type,json=securityType" json:"security_type,omitempty"`
SecuritySettings []*v2ray_core_common_loader.TypedSettings `protobuf:"bytes,4,rep,name=security_settings,json=securitySettings" json:"security_settings,omitempty"` SecuritySettings []*v2ray_core_common_loader.TypedSettings `protobuf:"bytes,4,rep,name=security_settings,json=securitySettings" json:"security_settings,omitempty"`
} }
@ -42,7 +62,7 @@ type StreamConfig struct {
func (m *StreamConfig) Reset() { *m = StreamConfig{} } func (m *StreamConfig) Reset() { *m = StreamConfig{} }
func (m *StreamConfig) String() string { return proto.CompactTextString(m) } func (m *StreamConfig) String() string { return proto.CompactTextString(m) }
func (*StreamConfig) ProtoMessage() {} func (*StreamConfig) ProtoMessage() {}
func (*StreamConfig) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } func (*StreamConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
func (m *StreamConfig) GetNetworkSettings() []*NetworkSettings { func (m *StreamConfig) GetNetworkSettings() []*NetworkSettings {
if m != nil { if m != nil {
@ -63,9 +83,9 @@ func init() {
proto.RegisterType((*StreamConfig)(nil), "v2ray.core.transport.internet.StreamConfig") proto.RegisterType((*StreamConfig)(nil), "v2ray.core.transport.internet.StreamConfig")
} }
func init() { proto.RegisterFile("v2ray.com/core/transport/internet/config.proto", fileDescriptor1) } func init() { proto.RegisterFile("v2ray.com/core/transport/internet/config.proto", fileDescriptor0) }
var fileDescriptor1 = []byte{ var fileDescriptor0 = []byte{
// 296 bytes of a gzipped FileDescriptorProto // 296 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0x4f, 0x4b, 0xc3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x91, 0x4f, 0x4b, 0xc3, 0x40,
0x10, 0xc5, 0x49, 0x2b, 0x5a, 0xb7, 0xd5, 0xd6, 0x9c, 0x82, 0xa0, 0xc4, 0x7a, 0x68, 0x2e, 0xce, 0x10, 0xc5, 0x49, 0x2b, 0x5a, 0xb7, 0xd5, 0xd6, 0x9c, 0x82, 0xa0, 0xc4, 0x7a, 0x68, 0x2e, 0xce,

View File

@ -30,8 +30,10 @@ var _ = math.Inf
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
type Certificate struct { type Certificate struct {
// TLS certificate in x509 format.
Certificate []byte `protobuf:"bytes,1,opt,name=Certificate,proto3" json:"Certificate,omitempty"` Certificate []byte `protobuf:"bytes,1,opt,name=Certificate,proto3" json:"Certificate,omitempty"`
Key []byte `protobuf:"bytes,2,opt,name=Key,proto3" json:"Key,omitempty"` // TLS key in x509 format.
Key []byte `protobuf:"bytes,2,opt,name=Key,proto3" json:"Key,omitempty"`
} }
func (m *Certificate) Reset() { *m = Certificate{} } func (m *Certificate) Reset() { *m = Certificate{} }
@ -40,8 +42,10 @@ func (*Certificate) ProtoMessage() {}
func (*Certificate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (*Certificate) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
type Config struct { type Config struct {
AllowInsecure bool `protobuf:"varint,1,opt,name=allow_insecure,json=allowInsecure" json:"allow_insecure,omitempty"` // Whether or not to allow self-signed certificates.
Certificate []*Certificate `protobuf:"bytes,2,rep,name=certificate" json:"certificate,omitempty"` AllowInsecure bool `protobuf:"varint,1,opt,name=allow_insecure,json=allowInsecure" json:"allow_insecure,omitempty"`
// List of certificates to be served on server.
Certificate []*Certificate `protobuf:"bytes,2,rep,name=certificate" json:"certificate,omitempty"`
} }
func (m *Config) Reset() { *m = Config{} } func (m *Config) Reset() { *m = Config{} }

View File

@ -39,8 +39,10 @@ func (*ConnectionReuse) ProtoMessage() {}
func (*ConnectionReuse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } func (*ConnectionReuse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
type Config struct { type Config struct {
// Whether or not to reuse WebSocket connections.
ConnectionReuse *ConnectionReuse `protobuf:"bytes,1,opt,name=connection_reuse,json=connectionReuse" json:"connection_reuse,omitempty"` ConnectionReuse *ConnectionReuse `protobuf:"bytes,1,opt,name=connection_reuse,json=connectionReuse" json:"connection_reuse,omitempty"`
Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` // URL path to the WebSocket service. Empty value means root(/).
Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"`
} }
func (m *Config) Reset() { *m = Config{} } func (m *Config) Reset() { *m = Config{} }