packetcoder

package module
v0.0.0-...-f70d311 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2018 License: MIT Imports: 5 Imported by: 0

README

PacketCoder

The main idea of this library is provide mechanism to create packets descriptions and generate packets based on these descriptions.

Installation

For getting PacketCoder run on your machine, you just:

go get github.com/SealNTibbers/packetcoder

How to use

When you use this library you should choose one of two ways to set scheme:

  1. Write scheme description manually
  packet := NewPacket()
	scheme := NewBitScheme("testPacket")
	scheme.AddBitField("head", 4)
	scheme.AddBitField("type", 8)
	scheme.AddStuffBits("fill", 4)
	scheme.AddBitField("crc", 8)
	packet.SetScheme(scheme)
  1. Fill scheme from JSON string with description of packet
  var sampleJSON = `{
		"name": "testPacket",
		"fields":
                [
					{"name": "head", "size": 4},
					{"name": "type", "size": 8},
					{"name": "fill", "size": 4},
					{"name": "crc", "size": 8}
				]
	}`
  var scheme *BitScheme
	scheme = ReadSchemeFromString(sampleJSON)
  packet.SetScheme(scheme)

To fill packet with data you can use:

    WriteValue64(fieldName string, value uint64) // for writing single data field
    WriteBytes(fieldName string, value []byte) // for writing array data field
    WriteStuff(fieldName string) // for writing stub

To read packet from data you can use:

    ReadValue64(fieldName string) // for reading single data field
    ReadBytesValue(fieldName string) // for reading array data field

Now, you can work with packet. If you want to encode packet into bytes buffer you can use:

  buf := bytes.NewBuffer(nil)
	packet.EncodeTo(buf)

for decoding:

  buf := bytes.NewBuffer([]byte{86, 144, 99, 86, 144, 140, 86, 144})
	_, err := packet.DecodeFrom(buf)

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ReadSchemesFromString

func ReadSchemesFromString(dataString string) map[string]*BitScheme

func ReverseBytes

func ReverseBytes(bytes []byte) []byte

Types

type BitScheme

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

func NewBitScheme

func NewBitScheme(name string) *BitScheme

func ReadSchemeFromString

func ReadSchemeFromString(dataString string) *BitScheme

func (*BitScheme) AddBitField

func (s *BitScheme) AddBitField(fieldName string, sizeInBits uint) *bitfield

func (*BitScheme) AddBitFieldLittleEndian

func (s *BitScheme) AddBitFieldLittleEndian(fieldName string, sizeInBits uint) *bitfield

func (*BitScheme) AddByteField

func (s *BitScheme) AddByteField(fieldName string, sizeInBytes uint) *bitfield

func (*BitScheme) AddByteFieldLittleEndian

func (s *BitScheme) AddByteFieldLittleEndian(fieldName string, sizeInBytes uint) *bitfield

func (*BitScheme) AddStuffBits

func (s *BitScheme) AddStuffBits(fieldName string, fieldSize uint)

func (*BitScheme) BitSize

func (s *BitScheme) BitSize() uint

func (*BitScheme) BitSizeOf

func (s *BitScheme) BitSizeOf(fieldName string) (uint, error)

func (*BitScheme) ByteSizeOf

func (s *BitScheme) ByteSizeOf(fieldName string) (uint, error)

func (*BitScheme) GetField

func (s *BitScheme) GetField(fieldName string) (*bitfield, error)

func (*BitScheme) GetFields

func (s *BitScheme) GetFields() map[string]*bitfield

func (*BitScheme) GetName

func (s *BitScheme) GetName() string

func (*BitScheme) OffsetOf

func (s *BitScheme) OffsetOf(fieldName string) (uint, error)

func (*BitScheme) SizeAndOffsetOf

func (s *BitScheme) SizeAndOffsetOf(fieldName string) (uint, uint, error)

type JSONField

type JSONField struct {
	Name         string
	Size         uint
	LittleEndian bool
}

type JSONPacket

type JSONPacket struct {
	Name   string
	Fields []JSONField
}

type Packet

type Packet struct {
	Scheme *BitScheme
	// contains filtered or unexported fields
}

func NewPacket

func NewPacket() *Packet

func NewPacketFor

func NewPacketFor(scheme *BitScheme) *Packet

func (*Packet) DecodeFrom

func (p *Packet) DecodeFrom(buffer *Buffer) (SmartPacket, error)

func (*Packet) EncodeTo

func (p *Packet) EncodeTo(buffer *Buffer) (SmartPacket, error)

func (*Packet) GetData

func (p *Packet) GetData() *Buffer

func (*Packet) GetName

func (p *Packet) GetName() string

func (*Packet) GetScheme

func (p *Packet) GetScheme() *BitScheme

func (*Packet) ProcessDecoded

func (p *Packet) ProcessDecoded(rawData []byte, packetQueue chan SmartPacket)

func (*Packet) ProcessPreEncode

func (p *Packet) ProcessPreEncode(rawData []byte) []byte

func (*Packet) ReadBytesValue

func (p *Packet) ReadBytesValue(fieldName string) ([]byte, error)

func (*Packet) ReadValue64

func (p *Packet) ReadValue64(fieldName string) (uint64, error)

func (*Packet) SetData

func (p *Packet) SetData(buffer *Buffer)

func (*Packet) SetScheme

func (p *Packet) SetScheme(scheme *BitScheme)

func (*Packet) WriteBytes

func (p *Packet) WriteBytes(fieldName string, value []byte) error

func (*Packet) WriteStuff

func (p *Packet) WriteStuff(fieldName string) error

func (*Packet) WriteValue64

func (p *Packet) WriteValue64(fieldName string, value uint64) error

type SmartPacket

type SmartPacket interface {
	SetScheme(*BitScheme)
	GetScheme() *BitScheme
	WriteValue64(fieldName string, value uint64) error
	WriteBytes(fieldName string, value []byte) error
	WriteStuff(fieldName string) error
	ReadValue64(fieldName string) (uint64, error)
	ReadBytesValue(fieldName string) ([]byte, error)
	GetData() *Buffer
	SetData(buffer *Buffer)
	EncodeTo(buffer *Buffer) (SmartPacket, error)
	DecodeFrom(buffer *Buffer) (SmartPacket, error)
	GetName() string

	ProcessDecoded(rawData []byte, packetQueue chan SmartPacket)
	ProcessPreEncode(rawData []byte) []byte
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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