123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package packet
- import (
- "github.com/google/gopacket"
- )
- var (
- serializeOpts = gopacket.SerializeOptions{
- FixLengths: true,
- ComputeChecksums: true,
- }
- )
- // RawPacket represents a raw packet or one encoded by Encoder
- type RawPacket struct {
- Data []byte
- }
- type Encoder struct {
- // buf is reusable because SerializeLayers calls the Clear method before each encoding
- buf gopacket.SerializeBuffer
- }
- func NewEncoder() *Encoder {
- return &Encoder{
- buf: gopacket.NewSerializeBuffer(),
- }
- }
- func (e *Encoder) Encode(packet Packet) (RawPacket, error) {
- encodedLayers, err := packet.EncodeLayers()
- if err != nil {
- return RawPacket{}, err
- }
- if err := gopacket.SerializeLayers(e.buf, serializeOpts, encodedLayers...); err != nil {
- return RawPacket{}, err
- }
- return RawPacket{
- Data: e.buf.Bytes(),
- }, nil
- }
|