@@ -3,6 +3,7 @@ package finalmask
33import (
44 "context"
55 "net"
6+ "slices"
67
78 "github.com/xtls/xray-core/common/buf"
89 "github.com/xtls/xray-core/common/errors"
@@ -28,7 +29,7 @@ func NewUdpmaskManager(udpmasks []Udpmask) *UdpmaskManager {
2829func (m * UdpmaskManager ) WrapPacketConnClient (raw net.PacketConn ) (net.PacketConn , error ) {
2930 var sizes []int
3031 var conns []net.PacketConn
31- for i , mask := range m .udpmasks {
32+ for i , mask := range slices . Backward ( m .udpmasks ) {
3233 if _ , ok := mask .(headerConn ); ok {
3334 conn , err := mask .WrapPacketConnClient (nil , i , len (m .udpmasks )- 1 )
3435 if err != nil {
@@ -61,7 +62,7 @@ func (m *UdpmaskManager) WrapPacketConnClient(raw net.PacketConn) (net.PacketCon
6162func (m * UdpmaskManager ) WrapPacketConnServer (raw net.PacketConn ) (net.PacketConn , error ) {
6263 var sizes []int
6364 var conns []net.PacketConn
64- for i , mask := range m .udpmasks {
65+ for i , mask := range slices . Backward ( m .udpmasks ) {
6566 if _ , ok := mask .(headerConn ); ok {
6667 conn , err := mask .WrapPacketConnServer (nil , i , len (m .udpmasks )- 1 )
6768 if err != nil {
@@ -124,32 +125,32 @@ func (c *headerManagerConn) ReadFrom(p []byte) (n int, addr net.Addr, err error)
124125 if err != nil {
125126 return n , addr , err
126127 }
127- b = b [:n ]
128+ buf : = b [:n ]
128129
129130 sum := 0
130131 for _ , size := range c .sizes {
131132 sum += size
132133 }
133134
134135 if n < sum {
135- errors .LogError (context .Background (), "[mask] drop packet from " , addr , " with size " , len ( b ) )
136+ errors .LogError (context .Background (), "[mask] drop packet from " , addr , " with size " , n )
136137 continue
137138 }
138139
139140 for i := range c .conns {
140- n , _ , err = c .conns [i ].ReadFrom (b )
141+ n , _ , err = c .conns [i ].ReadFrom (buf )
141142 if err != nil {
142- errors .LogErrorInner (context .Background (), err , "[mask] drop packet from " , addr , " with size " , len ( b ) )
143+ errors .LogErrorInner (context .Background (), err , "[mask] drop packet from " , addr , " with size " , n )
143144 break
144145 }
145- b = b [c .sizes [i ] : n + c .sizes [i ]]
146+ buf = buf [c .sizes [i ] : n + c .sizes [i ]]
146147 }
147148
148149 if err != nil {
149150 continue
150151 }
151152
152- return copy (p , b ), addr , nil
153+ return copy (p , buf ), addr , nil
153154 }
154155}
155156
@@ -212,7 +213,7 @@ func NewTcpmaskManager(tcpmasks []Tcpmask) *TcpmaskManager {
212213
213214func (m * TcpmaskManager ) WrapConnClient (raw net.Conn ) (net.Conn , error ) {
214215 var err error
215- for _ , mask := range m .tcpmasks {
216+ for _ , mask := range slices . Backward ( m .tcpmasks ) {
216217 raw , err = mask .WrapConnClient (raw )
217218 if err != nil {
218219 return nil , err
@@ -223,7 +224,7 @@ func (m *TcpmaskManager) WrapConnClient(raw net.Conn) (net.Conn, error) {
223224
224225func (m * TcpmaskManager ) WrapConnServer (raw net.Conn ) (net.Conn , error ) {
225226 var err error
226- for _ , mask := range m .tcpmasks {
227+ for _ , mask := range slices . Backward ( m .tcpmasks ) {
227228 raw , err = mask .WrapConnServer (raw )
228229 if err != nil {
229230 return nil , err
0 commit comments