@@ -142,15 +142,8 @@ type Manager struct {
142142 mssClampEnabled bool
143143
144144 // Only one hook per protocol is supported. Outbound direction only.
145- udpHookOut atomic.Pointer [packetHook ]
146- tcpHookOut atomic.Pointer [packetHook ]
147- }
148-
149- // packetHook stores a registered hook for a specific IP:port.
150- type packetHook struct {
151- ip netip.Addr
152- port uint16
153- fn func ([]byte ) bool
145+ udpHookOut atomic.Pointer [common.PacketHook ]
146+ tcpHookOut atomic.Pointer [common.PacketHook ]
154147}
155148
156149// decoder for packages
@@ -912,21 +905,11 @@ func (m *Manager) trackInbound(d *decoder, srcIP, dstIP netip.Addr, ruleID []byt
912905}
913906
914907func (m * Manager ) udpHooksDrop (dport uint16 , dstIP netip.Addr , packetData []byte ) bool {
915- return hookMatches (m .udpHookOut .Load (), dstIP , dport , packetData )
908+ return common . HookMatches (m .udpHookOut .Load (), dstIP , dport , packetData )
916909}
917910
918911func (m * Manager ) tcpHooksDrop (dport uint16 , dstIP netip.Addr , packetData []byte ) bool {
919- return hookMatches (m .tcpHookOut .Load (), dstIP , dport , packetData )
920- }
921-
922- func hookMatches (h * packetHook , dstIP netip.Addr , dport uint16 , packetData []byte ) bool {
923- if h == nil {
924- return false
925- }
926- if h .ip == dstIP && h .port == dport {
927- return h .fn (packetData )
928- }
929- return false
912+ return common .HookMatches (m .tcpHookOut .Load (), dstIP , dport , packetData )
930913}
931914
932915// filterInbound implements filtering logic for incoming packets.
@@ -1337,28 +1320,12 @@ func (m *Manager) ruleMatches(rule *RouteRule, srcAddr, dstAddr netip.Addr, prot
13371320
13381321// SetUDPPacketHook sets the outbound UDP packet hook. Pass nil hook to remove.
13391322func (m * Manager ) SetUDPPacketHook (ip netip.Addr , dPort uint16 , hook func (packet []byte ) bool ) {
1340- if hook == nil {
1341- m .udpHookOut .Store (nil )
1342- return
1343- }
1344- m .udpHookOut .Store (& packetHook {
1345- ip : ip ,
1346- port : dPort ,
1347- fn : hook ,
1348- })
1323+ common .SetHook (& m .udpHookOut , ip , dPort , hook )
13491324}
13501325
13511326// SetTCPPacketHook sets the outbound TCP packet hook. Pass nil hook to remove.
13521327func (m * Manager ) SetTCPPacketHook (ip netip.Addr , dPort uint16 , hook func (packet []byte ) bool ) {
1353- if hook == nil {
1354- m .tcpHookOut .Store (nil )
1355- return
1356- }
1357- m .tcpHookOut .Store (& packetHook {
1358- ip : ip ,
1359- port : dPort ,
1360- fn : hook ,
1361- })
1328+ common .SetHook (& m .tcpHookOut , ip , dPort , hook )
13621329}
13631330
13641331// SetLogLevel sets the log level for the firewall manager
0 commit comments