Skip to content

Commit e5d08b8

Browse files
go 1.10
1 parent 788199c commit e5d08b8

1 file changed

Lines changed: 25 additions & 17 deletions

File tree

listener.go

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,30 @@ import (
77
"time"
88
)
99

10+
type rules []Rule
11+
12+
func (r rules) Swap(i, j int) {
13+
r[i], r[j] = r[j], r[i]
14+
}
15+
func (r rules) Len() int { return len(r) }
16+
func (r rules) Less(i, j int) bool {
17+
iOnes, iBits := r[i].Subnet.Mask.Size()
18+
jOnes, jBits := r[j].Subnet.Mask.Size()
19+
if iOnes != jOnes {
20+
return iOnes > jOnes
21+
}
22+
if iBits != jBits {
23+
return iBits > jBits
24+
}
25+
if r[i].Timeout != r[j].Timeout {
26+
if r[j].Timeout == 0 {
27+
return true
28+
}
29+
return r[i].Timeout < r[j].Timeout
30+
}
31+
return r[i].Timeout < r[j].Timeout
32+
}
33+
1034
// Listener wraps a net.Listener automatically wrapping new connections with PROXY protocol support.
1135
type Listener struct {
1236
net.Listener
@@ -100,23 +124,7 @@ func (l *Listener) Filter() []Rule {
100124
func (l *Listener) SetFilter(filter []Rule) {
101125
newFilter := make([]Rule, len(filter))
102126
copy(newFilter, filter)
103-
sort.Slice(newFilter, func(i, j int) bool {
104-
iOnes, iBits := newFilter[i].Subnet.Mask.Size()
105-
jOnes, jBits := newFilter[j].Subnet.Mask.Size()
106-
if iOnes != jOnes {
107-
return iOnes > jOnes
108-
}
109-
if iBits != jBits {
110-
return iBits > jBits
111-
}
112-
if newFilter[i].Timeout != newFilter[j].Timeout {
113-
if newFilter[j].Timeout == 0 {
114-
return true
115-
}
116-
return newFilter[i].Timeout < newFilter[j].Timeout
117-
}
118-
return newFilter[i].Timeout < newFilter[j].Timeout
119-
})
127+
sort.Sort(rules(newFilter))
120128
if len(newFilter) > 0 {
121129
// dedup
122130
last := newFilter[0]

0 commit comments

Comments
 (0)