codec

package
v0.4.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2020 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	VanillaMaximumUncompressedSize = 2 * 1024 * 1024  // 2MiB
	HardMaximumUncompressedSize    = 16 * 1024 * 1024 // 16MiB
	UncompressedCap                = VanillaMaximumUncompressedSize
)

Variables

View Source
var ErrDecoderLeftBytes = errors.New("decoder dis not read all packet data")

Indicates a packet was known and successfully decoded by it's registered decoder, but the decoder has not read all of the packet's data.

This may happen in cases where

  • the decoder has a bug
  • the decoder does not handle the case for the new protocol version of the packet changed by Mojang/Minecraft
  • someone (server/client) has sent valid bytes in the beginning of the packet's data that the packet's decoder could successfully decode, but then the data contains even more bytes (the left bytes)

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.

func NewDecoder

func NewDecoder(
	r io.Reader,
	direction proto.Direction,
	sourceDetails func() []zap.Field,
) *Decoder

func (*Decoder) ReadPacket

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

ReadPacket blocks Decoder's mutex when the next packet's frame is known and stays blocked until the full packet from the underlying io.Reader is read.

This is to ensure the mutex is not locked while being blocked by the first Read call (e.g. underlying io.Reader is a net.Conn).

func (*Decoder) SetCompressionThreshold

func (d *Decoder) SetCompressionThreshold(threshold int)

func (*Decoder) SetProtocol

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

func (*Decoder) SetReader

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

func (*Decoder) SetState

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

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) *Encoder

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 added in v0.0.2

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

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

func (*Encoder) Write

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

Write encodes and writes the uncompressed and unencrypted payload (packed id + data).

func (*Encoder) WriteBuf

func (e *Encoder) WriteBuf(payload *bytes.Buffer) (n int, err error)

Write encodes payload (uncompressed and unencrypted) (containing packed id + data) and writes it to the underlying writer.

func (*Encoder) WritePacket

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

Jump to

Keyboard shortcuts

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