1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-27 06:10:26 +08:00

feat: impl. new protol design & new head

This commit is contained in:
源文雨
2025-03-12 22:20:02 +09:00
parent 60209117b7
commit f4fd9b1423
49 changed files with 1643 additions and 1137 deletions

View File

@@ -1,41 +1,37 @@
package head
import (
"encoding/binary"
"fmt"
)
type PacketFlags uint16
const (
hasmorebit FlagsProto = 0x20 << iota
nofragbit
topbit //TODO: 改为 trans 标记
)
func (pf PacketFlags) String() string {
return fmt.Sprintf("%04x", uint16(pf))
const (
impossiblebit = hasmorebit | nofragbit
flagsbit = topbit | impossiblebit
protobit = ^flagsbit
)
type FlagsProto uint8
func (pf FlagsProto) String() string {
return fmt.Sprintf("%02x", uint8(pf))
}
func (pf PacketFlags) IsValid() bool {
return pf&0x8000 == 0
func (pf FlagsProto) IsValid() bool {
return pf&topbit == 0 &&
pf&impossiblebit != impossiblebit &&
pf.Proto() < ProtoTop
}
func (pf PacketFlags) DontFrag() bool {
return pf&0x4000 == 0x4000
func (pf FlagsProto) HasMore() bool {
return pf&hasmorebit != 0
}
func (pf PacketFlags) NoFrag() bool {
return pf == 0x4000
}
func (pf PacketFlags) IsSingle() bool {
return pf == 0
}
func (pf PacketFlags) ZeroOffset() bool {
return pf&0x1fff == 0
}
func (pf PacketFlags) Offset() uint16 {
return uint16(pf << 3)
}
// Flags extract flags from raw data
func Flags(data []byte) PacketFlags {
return PacketFlags(binary.LittleEndian.Uint16(data[10:12]))
func (pf FlagsProto) NoFrag() bool {
return pf&nofragbit != 0
}