codec

package
v0.71.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 7, 2026 License: Apache-2.0 Imports: 20 Imported by: 3

Documentation

Index

Constants

View Source
const (
	VanillaMaximumUncompressedSize = 8 * 1024 * 1024   // 8MiB
	HardMaximumUncompressedSize    = 128 * 1024 * 1024 // 128MiB
	UncompressedCap                = VanillaMaximumUncompressedSize
	// ServerboundUncompressedCap is the maximum claimed decompressed size for a
	// serverbound packet. It is tighter than UncompressedCap because serverbound
	// data comes from the (untrusted) client, limiting how much memory a client
	// can force the proxy to allocate. Clientbound data keeps UncompressedCap.
	ServerboundUncompressedCap = 2 * 1024 * 1024 // 2MiB
	// MaximumFrameLength is the largest packet frame Gate accepts off the wire,
	// matching vanilla's Varint21FrameDecoder: its length prefix is a VarInt of at
	// most 21 bits, so a frame can announce up to 2^21-1 bytes.
	//
	// This bounds the frame as it arrives, before decompression, so it also caps
	// compressed frames. The decompressed size is capped separately and higher by
	// UncompressedCap / ServerboundUncompressedCap.
	//
	// Modded backends (Forge/NeoForge) legitimately send config-phase frames well
	// past 1MiB, e.g. registry sync and mod network queries, so a tighter-than-
	// vanilla cap here kills those connections. See
	// https://github.com/minekube/gate/issues/930.
	MaximumFrameLength = 1<<21 - 1 // 2097151
)

Variables

This section is empty.

Functions

func NewDecryptReader

func NewDecryptReader(r io.Reader, secret []byte) (reader io.Reader, err error)

func NewEncryptWriter

func NewEncryptWriter(w io.Writer, secret []byte) (wr io.Writer, err error)

Types

type Decoder

type Decoder struct {
	// contains filtered or unexported fields
}

Decoder is a synchronized packet decoder for the Minecraft Java edition.

func NewDecoder

func NewDecoder(r io.Reader, direction proto.Direction, log logr.Logger) *Decoder

func (*Decoder) Decode

func (d *Decoder) Decode() (ctx *proto.PacketContext, err error)

Decode reads the next packet from the underlying reader. It blocks other calls to Decode until return.

func (*Decoder) SetCompressionThreshold

func (d *Decoder) SetCompressionThreshold(threshold int)

func (*Decoder) SetProtocol

func (d *Decoder) SetProtocol(protocol proto.Protocol)

SetProtocol changes the decoder's protocol version. Safe to call concurrently with Decode.

func (*Decoder) SetReader

func (d *Decoder) SetReader(rd io.Reader)

func (*Decoder) SetState

func (d *Decoder) SetState(newState *state.Registry)

SetState changes the decoder's protocol state (e.g., Login → Play). This is safe to call while Decode is blocked on network I/O in another goroutine — the new state takes effect on the next packet decode.

type Encoder

type Encoder struct {
	// contains filtered or unexported fields
}

Encoder is a synchronized packet encoder.

func NewEncoder

func NewEncoder(w io.Writer, direction proto.Direction, log logr.Logger) *Encoder

func (*Encoder) Direction added in v0.35.0

func (e *Encoder) Direction() proto.Direction

Direction returns the encoder's direction.

func (*Encoder) SetCompression

func (e *Encoder) SetCompression(threshold, level int) (err error)

func (*Encoder) SetProtocol

func (e *Encoder) SetProtocol(protocol proto.Protocol)

func (*Encoder) SetState

func (e *Encoder) SetState(state *state.Registry)

func (*Encoder) SetWriter

func (e *Encoder) SetWriter(w io.Writer)

func (*Encoder) Sync

func (e *Encoder) Sync(fn func() error) error

Sync locks the encoder while running fn, making sure no write calls are run during this call.

func (*Encoder) Write

func (e *Encoder) Write(payload []byte) (n int, err error)

Write encodes payload and writes it to the underlying writer. The payload must not already be compressed nor encrypted and must start with the packet's id VarInt and then the packet's data.

func (*Encoder) WritePacket

func (e *Encoder) WritePacket(packet proto.Packet) (n int, err error)

type FrameTooLargeError added in v0.68.30

type FrameTooLargeError struct {
	Length int // the frame length the peer announced
	Max    int // the maximum length Gate accepts
}

FrameTooLargeError is returned when a peer announces a packet frame longer than MaximumFrameLength. It carries the announced length so callers can decide how loudly to report it: an oversized frame from an untrusted client is noise, while one from a backend server is operator-actionable.

func (*FrameTooLargeError) Error added in v0.68.30

func (e *FrameTooLargeError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL