@@ -7,30 +7,6 @@ import (
7
7
"time"
8
8
)
9
9
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
-
34
10
// Listener wraps a net.Listener automatically wrapping new connections with PROXY protocol support.
35
11
type Listener struct {
36
12
net.Listener
@@ -124,7 +100,23 @@ func (l *Listener) Filter() []Rule {
124
100
func (l * Listener ) SetFilter (filter []Rule ) {
125
101
newFilter := make ([]Rule , len (filter ))
126
102
copy (newFilter , filter )
127
- sort .Sort (rules (newFilter ))
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
+ })
128
120
if len (newFilter ) > 0 {
129
121
// dedup
130
122
last := newFilter [0 ]
0 commit comments