44 lines
938 B
Go
44 lines
938 B
Go
// Copyright 2018 The agentx authors
|
|
// Licensed under the LGPLv3 with static-linking exception.
|
|
// See LICENCE file for details.
|
|
|
|
package pdu
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
)
|
|
|
|
// OctetString defines the pdu description packet.
|
|
type OctetString struct {
|
|
Text string
|
|
}
|
|
|
|
// MarshalBinary returns the pdu packet as a slice of bytes.
|
|
func (o *OctetString) MarshalBinary() ([]byte, error) {
|
|
buffer := &bytes.Buffer{}
|
|
|
|
binary.Write(buffer, binary.LittleEndian, uint32(len(o.Text)))
|
|
buffer.WriteString(o.Text)
|
|
|
|
for buffer.Len()%4 > 0 {
|
|
buffer.WriteByte(0x00)
|
|
}
|
|
|
|
return buffer.Bytes(), nil
|
|
}
|
|
|
|
// UnmarshalBinary sets the packet structure from the provided slice of bytes.
|
|
func (o *OctetString) UnmarshalBinary(data []byte) error {
|
|
buffer := bytes.NewBuffer(data)
|
|
|
|
length := uint32(0)
|
|
if err := binary.Read(buffer, binary.LittleEndian, &length); err != nil {
|
|
return err
|
|
}
|
|
|
|
o.Text = string(data[4 : 4+length])
|
|
|
|
return nil
|
|
}
|