Rework Communication+Link to Connection

This commit is contained in:
Daniel
2020-04-07 17:30:33 +02:00
parent eec0c37101
commit 38f57a8954
21 changed files with 862 additions and 1741 deletions

View File

@@ -12,12 +12,12 @@ const (
DO_NOTHING uint8 = iota
BLOCK_PACKET
DROP_PACKET
BLOCK_LINK
DROP_LINK
BLOCK_CONN
DROP_CONN
STOP_INSPECTING
)
type inspectorFn func(packet.Packet, *network.Link) uint8
type inspectorFn func(*network.Connection, packet.Packet) uint8
var (
inspectors []inspectorFn
@@ -38,20 +38,20 @@ func RegisterInspector(name string, inspector inspectorFn, inspectVerdict networ
}
// RunInspectors runs all the applicable inspectors on the given packet.
func RunInspectors(pkt packet.Packet, link *network.Link) (network.Verdict, bool) {
func RunInspectors(conn *network.Connection, pkt packet.Packet) (network.Verdict, bool) {
// inspectorsLock.Lock()
// defer inspectorsLock.Unlock()
activeInspectors := link.GetActiveInspectors()
activeInspectors := conn.GetActiveInspectors()
if activeInspectors == nil {
activeInspectors = make([]bool, len(inspectors))
link.SetActiveInspectors(activeInspectors)
conn.SetActiveInspectors(activeInspectors)
}
inspectorData := link.GetInspectorData()
inspectorData := conn.GetInspectorData()
if inspectorData == nil {
inspectorData = make(map[uint8]interface{})
link.SetInspectorData(inspectorData)
conn.SetInspectorData(inspectorData)
}
continueInspection := false
@@ -62,12 +62,12 @@ func RunInspectors(pkt packet.Packet, link *network.Link) (network.Verdict, bool
if skip {
continue
}
if link.Verdict > inspectVerdicts[key] {
if conn.Verdict > inspectVerdicts[key] {
activeInspectors[key] = true
continue
}
action := inspectors[key](pkt, link) // Actually run inspector
action := inspectors[key](conn, pkt) // Actually run inspector
switch action {
case DO_NOTHING:
if verdict < network.VerdictAccept {
@@ -82,16 +82,14 @@ func RunInspectors(pkt packet.Packet, link *network.Link) (network.Verdict, bool
case DROP_PACKET:
verdict = network.VerdictDrop
continueInspection = true
case BLOCK_LINK:
link.UpdateVerdict(network.VerdictBlock)
case BLOCK_CONN:
conn.SetVerdict(network.VerdictBlock)
verdict = conn.Verdict
activeInspectors[key] = true
if verdict < network.VerdictBlock {
verdict = network.VerdictBlock
}
case DROP_LINK:
link.UpdateVerdict(network.VerdictDrop)
case DROP_CONN:
conn.SetVerdict(network.VerdictDrop)
verdict = conn.Verdict
activeInspectors[key] = true
verdict = network.VerdictDrop
case STOP_INSPECTING:
activeInspectors[key] = true
}