Feature: connections add rule payload

This commit is contained in:
Dreamacro 2020-06-07 17:28:56 +08:00
parent fb628e9c62
commit 48cff50a4c

View File

@ -21,6 +21,7 @@ type trackerInfo struct {
Start time.Time `json:"start"` Start time.Time `json:"start"`
Chain C.Chain `json:"chains"` Chain C.Chain `json:"chains"`
Rule string `json:"rule"` Rule string `json:"rule"`
RulePayload string `json:"rulePayload"`
} }
type tcpTracker struct { type tcpTracker struct {
@ -56,10 +57,6 @@ func (tt *tcpTracker) Close() error {
func newTCPTracker(conn C.Conn, manager *Manager, metadata *C.Metadata, rule C.Rule) *tcpTracker { func newTCPTracker(conn C.Conn, manager *Manager, metadata *C.Metadata, rule C.Rule) *tcpTracker {
uuid, _ := uuid.NewV4() uuid, _ := uuid.NewV4()
ruleType := ""
if rule != nil {
ruleType = rule.RuleType().String()
}
t := &tcpTracker{ t := &tcpTracker{
Conn: conn, Conn: conn,
@ -69,10 +66,15 @@ func newTCPTracker(conn C.Conn, manager *Manager, metadata *C.Metadata, rule C.R
Start: time.Now(), Start: time.Now(),
Metadata: metadata, Metadata: metadata,
Chain: conn.Chains(), Chain: conn.Chains(),
Rule: ruleType, Rule: "",
}, },
} }
if rule != nil {
t.trackerInfo.Rule = rule.RuleType().String()
t.trackerInfo.RulePayload = rule.Payload()
}
manager.Join(t) manager.Join(t)
return t return t
} }
@ -118,10 +120,6 @@ func (ut *udpTracker) Close() error {
func newUDPTracker(conn C.PacketConn, manager *Manager, metadata *C.Metadata, rule C.Rule) *udpTracker { func newUDPTracker(conn C.PacketConn, manager *Manager, metadata *C.Metadata, rule C.Rule) *udpTracker {
uuid, _ := uuid.NewV4() uuid, _ := uuid.NewV4()
ruleType := ""
if rule != nil {
ruleType = rule.RuleType().String()
}
ut := &udpTracker{ ut := &udpTracker{
PacketConn: conn, PacketConn: conn,
@ -131,10 +129,15 @@ func newUDPTracker(conn C.PacketConn, manager *Manager, metadata *C.Metadata, ru
Start: time.Now(), Start: time.Now(),
Metadata: metadata, Metadata: metadata,
Chain: conn.Chains(), Chain: conn.Chains(),
Rule: ruleType, Rule: "",
}, },
} }
if rule != nil {
ut.trackerInfo.Rule = rule.RuleType().String()
ut.trackerInfo.RulePayload = rule.Payload()
}
manager.Join(ut) manager.Join(ut)
return ut return ut
} }