summaryrefslogtreecommitdiff
path: root/internal/packet/packet.go
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-27 12:52:22 +0200
committerKyren223 <Kyren223@proton.me>2024-11-27 12:52:22 +0200
commit6a34d7be01256df472015564a655d8253acd8724 (patch)
tree0956f3d776ef7963d569e77d7c68324f715b5693 /internal/packet/packet.go
parente415a13211316cb804752c18833a10057bc0994c (diff)
Refactored server infrastructure
Diffstat (limited to 'internal/packet/packet.go')
-rw-r--r--internal/packet/packet.go23
1 files changed, 16 insertions, 7 deletions
diff --git a/internal/packet/packet.go b/internal/packet/packet.go
index 8eb1a86..7476056 100644
--- a/internal/packet/packet.go
+++ b/internal/packet/packet.go
@@ -222,14 +222,14 @@ func (p Packet) DecodedPayload() (Payload, error) {
}
var (
- PacketUnsupportedVersion error = errors.New("packet error: unsupported version")
- PacketUnsupportedEncoding error = errors.New("packet error: unsupported encoding")
- PacketUnsupportedType error = errors.New("packet error: unsupported type")
+ ErrUnsupportedVersion error = errors.New("packet error: unsupported version")
+ ErrUnsupportedEncoding error = errors.New("packet error: unsupported encoding")
+ ErrUnsupportedType error = errors.New("packet error: unsupported type")
)
type PacketFramer struct {
- buffer []byte
Out chan Packet
+ buffer []byte
}
func NewFramer() PacketFramer {
@@ -239,13 +239,22 @@ func NewFramer() PacketFramer {
}
func (f *PacketFramer) Push(ctx context.Context, data []byte) error {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
f.buffer = append(f.buffer, data...)
for {
+ if ctx.Err() != nil {
+ return ctx.Err()
+ }
+
packet, err := f.parse()
if packet == nil || err != nil {
return err
}
+
select {
case f.Out <- *packet:
case <-ctx.Done():
@@ -260,17 +269,17 @@ func (f *PacketFramer) parse() (*Packet, error) {
}
if f.buffer[VERSION_OFFSET] != VERSION {
- return nil, PacketUnsupportedVersion
+ return nil, ErrUnsupportedVersion
}
encoding := Encoding(f.buffer[ENCODING_OFFSET] >> 6)
if !encoding.IsSupported() {
- return nil, PacketUnsupportedEncoding
+ return nil, ErrUnsupportedEncoding
}
packetType := PacketType(f.buffer[TYPE_OFFSET] & 63)
if !packetType.IsSupported() {
- return nil, PacketUnsupportedType
+ return nil, ErrUnsupportedType
}
length := binary.BigEndian.Uint16(f.buffer[LENGTH_OFFSET:])