mirror of
https://github.com/v2fly/v2ray-core.git
synced 2025-01-02 23:47:07 -05:00
comments
This commit is contained in:
parent
c73e899f54
commit
15cd999ed3
@ -153,6 +153,7 @@ func (m *GeoIPMatcher) match6(ip ipv6) bool {
|
||||
return normalize6(ip, m.prefix6[l]) == m.ip6[l]
|
||||
}
|
||||
|
||||
// Match returns true if the given ip is included by the GeoIP.
|
||||
func (m *GeoIPMatcher) Match(ip net.IP) bool {
|
||||
switch len(ip) {
|
||||
case 4:
|
||||
@ -167,11 +168,14 @@ func (m *GeoIPMatcher) Match(ip net.IP) bool {
|
||||
}
|
||||
}
|
||||
|
||||
type GlobalGeoIPContainer struct {
|
||||
// GeoIPMatcherContainer is a container for GeoIPMatchers. It keeps unique copies of GeoIPMatcher by country code.
|
||||
type GeoIPMatcherContainer struct {
|
||||
matchers []*GeoIPMatcher
|
||||
}
|
||||
|
||||
func (c *GlobalGeoIPContainer) Add(geoip *GeoIP) (*GeoIPMatcher, error) {
|
||||
// Add adds a new GeoIP set into the container.
|
||||
// If the country code of GeoIP is not empty, GeoIPMatcherContainer will try to find an existing one, instead of adding a new one.
|
||||
func (c *GeoIPMatcherContainer) Add(geoip *GeoIP) (*GeoIPMatcher, error) {
|
||||
if len(geoip.CountryCode) > 0 {
|
||||
for _, m := range c.matchers {
|
||||
if m.countryCode == geoip.CountryCode {
|
||||
@ -193,5 +197,5 @@ func (c *GlobalGeoIPContainer) Add(geoip *GeoIP) (*GeoIPMatcher, error) {
|
||||
}
|
||||
|
||||
var (
|
||||
globalGeoIPContainer GlobalGeoIPContainer
|
||||
globalGeoIPContainer GeoIPMatcherContainer
|
||||
)
|
||||
|
@ -6,12 +6,15 @@ import (
|
||||
"v2ray.com/core/common/net"
|
||||
)
|
||||
|
||||
// CIDRList is an alias of []*CIDR to provide sort.Interface.
|
||||
type CIDRList []*CIDR
|
||||
|
||||
// Len implements sort.Interface.
|
||||
func (l *CIDRList) Len() int {
|
||||
return len(*l)
|
||||
}
|
||||
|
||||
// Less implements sort.Interface.
|
||||
func (l *CIDRList) Less(i int, j int) bool {
|
||||
ci := (*l)[i]
|
||||
cj := (*l)[j]
|
||||
@ -37,6 +40,7 @@ func (l *CIDRList) Less(i int, j int) bool {
|
||||
return ci.Prefix < cj.Prefix
|
||||
}
|
||||
|
||||
// Swap implements sort.Interface.
|
||||
func (l *CIDRList) Swap(i int, j int) {
|
||||
(*l)[i], (*l)[j] = (*l)[j], (*l)[i]
|
||||
}
|
||||
|
@ -362,17 +362,25 @@ func (m *GeoSiteList) GetEntry() []*GeoSite {
|
||||
}
|
||||
|
||||
type RoutingRule struct {
|
||||
// Tag of outbound that this rule is pointing to.
|
||||
Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"`
|
||||
// List of domains for target domain matching.
|
||||
Domain []*Domain `protobuf:"bytes,2,rep,name=domain,proto3" json:"domain,omitempty"`
|
||||
// List of CIDRs for target IP address matching.
|
||||
// The list must be sorted beforehand.
|
||||
Cidr []*CIDR `protobuf:"bytes,3,rep,name=cidr,proto3" json:"cidr,omitempty"` // Deprecated: Do not use.
|
||||
// List of GeoIPs for target IP address matching. If this entry exists, the cidr above will have no effect.
|
||||
// GeoIP fields with the same country code are supposed to contain exactly same content. They will be merged during runtime.
|
||||
// For customized GeoIPs, please leave country code empty.
|
||||
// The CIDR list in the GeoIP must be sorted beforehand.
|
||||
Geoip []*GeoIP `protobuf:"bytes,10,rep,name=geoip,proto3" json:"geoip,omitempty"`
|
||||
PortRange *net.PortRange `protobuf:"bytes,4,opt,name=port_range,json=portRange,proto3" json:"port_range,omitempty"`
|
||||
NetworkList *net.NetworkList `protobuf:"bytes,5,opt,name=network_list,json=networkList,proto3" json:"network_list,omitempty"`
|
||||
// List of CIDRs for source IP address matching.
|
||||
// The list must be sorted beforehand.
|
||||
SourceCidr []*CIDR `protobuf:"bytes,6,rep,name=source_cidr,json=sourceCidr,proto3" json:"source_cidr,omitempty"` // Deprecated: Do not use.
|
||||
// List of GeoIPs for source IP address matching. If this entry exists, the source_cidr above will have no effect.
|
||||
// The CIDR list in the GeoIP must be sorted beforehand.
|
||||
SourceGeoip []*GeoIP `protobuf:"bytes,11,rep,name=source_geoip,json=sourceGeoip,proto3" json:"source_geoip,omitempty"`
|
||||
UserEmail []string `protobuf:"bytes,7,rep,name=user_email,json=userEmail,proto3" json:"user_email,omitempty"`
|
||||
InboundTag []string `protobuf:"bytes,8,rep,name=inbound_tag,json=inboundTag,proto3" json:"inbound_tag,omitempty"`
|
||||
|
@ -60,6 +60,8 @@ message GeoSiteList{
|
||||
message RoutingRule {
|
||||
// Tag of outbound that this rule is pointing to.
|
||||
string tag = 1;
|
||||
|
||||
// List of domains for target domain matching.
|
||||
repeated Domain domain = 2;
|
||||
|
||||
// List of CIDRs for target IP address matching.
|
||||
|
Loading…
Reference in New Issue
Block a user