mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-07 04:20:12 +02:00
63 lines
1.0 KiB
Go
63 lines
1.0 KiB
Go
package firewall
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
type tcpFlags struct {
|
|
mask []tcpFlag
|
|
comparison []tcpFlag
|
|
}
|
|
|
|
type tcpFlag uint8
|
|
|
|
const (
|
|
tcpFlagFIN tcpFlag = 1 << iota
|
|
tcpFlagSYN
|
|
tcpFlagRST
|
|
tcpFlagPSH
|
|
tcpFlagACK
|
|
tcpFlagURG
|
|
tcpFlagECE
|
|
tcpFlagCWR
|
|
)
|
|
|
|
func (f tcpFlag) String() string {
|
|
switch f {
|
|
case tcpFlagFIN:
|
|
return "FIN"
|
|
case tcpFlagSYN:
|
|
return "SYN"
|
|
case tcpFlagRST:
|
|
return "RST"
|
|
case tcpFlagPSH:
|
|
return "PSH"
|
|
case tcpFlagACK:
|
|
return "ACK"
|
|
case tcpFlagURG:
|
|
return "URG"
|
|
case tcpFlagECE:
|
|
return "ECE"
|
|
case tcpFlagCWR:
|
|
return "CWR"
|
|
default:
|
|
panic(fmt.Sprintf("%s: %d", errTCPFlagUnknown, f))
|
|
}
|
|
}
|
|
|
|
var errTCPFlagUnknown = errors.New("unknown TCP flag")
|
|
|
|
func parseTCPFlag(s string) (tcpFlag, error) {
|
|
allFlags := []tcpFlag{
|
|
tcpFlagFIN, tcpFlagSYN, tcpFlagRST, tcpFlagPSH,
|
|
tcpFlagACK, tcpFlagURG, tcpFlagECE, tcpFlagCWR,
|
|
}
|
|
for _, flag := range allFlags {
|
|
if s == fmt.Sprintf("%#02x", uint8(flag)) || s == flag.String() {
|
|
return flag, nil
|
|
}
|
|
}
|
|
return 0, fmt.Errorf("%w: %s", errTCPFlagUnknown, s)
|
|
}
|