mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
Add InfoPacket and BandwidthUpdate structs for cross platform usage
This commit is contained in:
parent
688b2de26e
commit
dc033c3933
2 changed files with 112 additions and 0 deletions
35
network/packet/bandwidth.go
Normal file
35
network/packet/bandwidth.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
package packet
|
||||
|
||||
import "fmt"
|
||||
|
||||
// BandwidthUpdate holds an update to the seen bandwidth of a connection.
|
||||
type BandwidthUpdate struct {
|
||||
ConnID string
|
||||
RecvBytes uint64
|
||||
SentBytes uint64
|
||||
Method BandwidthUpdateMethod
|
||||
}
|
||||
|
||||
// BandwidthUpdateMethod defines how the bandwidth data of a bandwidth update should be interpreted.
|
||||
type BandwidthUpdateMethod uint8
|
||||
|
||||
// Bandwidth Update Methods.
|
||||
const (
|
||||
Absolute BandwidthUpdateMethod = iota
|
||||
Additive
|
||||
)
|
||||
|
||||
func (bu *BandwidthUpdate) String() string {
|
||||
return fmt.Sprintf("%s: %dB recv | %dB sent [%s]", bu.ConnID, bu.RecvBytes, bu.SentBytes, bu.Method)
|
||||
}
|
||||
|
||||
func (bum BandwidthUpdateMethod) String() string {
|
||||
switch bum {
|
||||
case Absolute:
|
||||
return "absolute"
|
||||
case Additive:
|
||||
return "additive"
|
||||
default:
|
||||
return "unknown"
|
||||
}
|
||||
}
|
77
network/packet/info_only.go
Normal file
77
network/packet/info_only.go
Normal file
|
@ -0,0 +1,77 @@
|
|||
package packet
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// InfoPacket does not represent an actual packet, but only holds metadata.
|
||||
// Implements the packet.Packet interface.
|
||||
type InfoPacket struct {
|
||||
Base
|
||||
}
|
||||
|
||||
// NewInfoPacket returns a new InfoPacket with the given info.
|
||||
func NewInfoPacket(info Info) *InfoPacket {
|
||||
return &InfoPacket{
|
||||
Base{
|
||||
info: info,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// InfoOnly returns whether the packet is informational only and does not
|
||||
// represent an actual packet.
|
||||
func (pkt *InfoPacket) InfoOnly() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// LoadPacketData does nothing on Linux, as data is always fully parsed.
|
||||
func (pkt *InfoPacket) LoadPacketData() error {
|
||||
return fmt.Errorf("%w: info-only packet", ErrFailedToLoadPayload)
|
||||
}
|
||||
|
||||
// ErrInfoOnlyPacket is returned for unsupported operations on an info-only packet.
|
||||
var ErrInfoOnlyPacket = errors.New("info-only packet")
|
||||
|
||||
// Accept does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) Accept() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// Block does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) Block() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// Drop does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) Drop() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// PermanentAccept does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) PermanentAccept() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// PermanentBlock does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) PermanentBlock() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// PermanentDrop does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) PermanentDrop() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// RerouteToNameserver does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) RerouteToNameserver() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
// RerouteToTunnel does nothing on an info-only packet.
|
||||
func (pkt *InfoPacket) RerouteToTunnel() error {
|
||||
return ErrInfoOnlyPacket
|
||||
}
|
||||
|
||||
var _ Packet = &InfoPacket{}
|
Loading…
Add table
Reference in a new issue