|
@@ -6,6 +6,41 @@ import (
|
|
|
"v2ray.com/core/common/net"
|
|
"v2ray.com/core/common/net"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+type CIDRList []*CIDR
|
|
|
|
|
+
|
|
|
|
|
+func (l *CIDRList) Len() int {
|
|
|
|
|
+ return len(*l)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (l *CIDRList) Less(i int, j int) bool {
|
|
|
|
|
+ ci := (*l)[i]
|
|
|
|
|
+ cj := (*l)[j]
|
|
|
|
|
+
|
|
|
|
|
+ if len(ci.Ip) < len(cj.Ip) {
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if len(ci.Ip) > len(cj.Ip) {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for k := 0; k < len(ci.Ip); k++ {
|
|
|
|
|
+ if ci.Ip[k] < cj.Ip[k] {
|
|
|
|
|
+ return true
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ci.Ip[k] > cj.Ip[k] {
|
|
|
|
|
+ return false
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return ci.Prefix < cj.Prefix
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (l *CIDRList) Swap(i int, j int) {
|
|
|
|
|
+ (*l)[i], (*l)[j] = (*l)[j], (*l)[i]
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
type Rule struct {
|
|
type Rule struct {
|
|
|
Tag string
|
|
Tag string
|
|
|
Condition Condition
|
|
Condition Condition
|