Rework encoding to use go binary
This commit is contained in:
41
pdu/pdu.go
41
pdu/pdu.go
@@ -1,10 +1,13 @@
|
|||||||
package pdu
|
package pdu
|
||||||
|
|
||||||
|
import "encoding/binary"
|
||||||
|
|
||||||
type (
|
type (
|
||||||
PDU interface {
|
PDU interface {
|
||||||
EncodeInto(*[]byte)
|
EncodeInto(*[]uint8)
|
||||||
Encode() []byte
|
Encode() []uint8
|
||||||
Decode([]byte)
|
Decode([]uint8)
|
||||||
|
Size() uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
PDU_HEADER struct {
|
PDU_HEADER struct {
|
||||||
@@ -19,24 +22,24 @@ type (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *PDU_HEADER) Encode() []byte {
|
func (p *PDU_HEADER) Encode() []uint8 {
|
||||||
buf := make([]byte, 16)
|
buf := make([]uint8, 16)
|
||||||
EncodeUint32(buf[0:4], p.command_length)
|
binary.BigEndian.PutUint32(buf[0:4], p.command_length)
|
||||||
EncodeUint32(buf[4:8], p.command_id)
|
binary.BigEndian.PutUint32(buf[4:8], p.command_id)
|
||||||
EncodeUint32(buf[8:12], p.command_status)
|
binary.BigEndian.PutUint32(buf[8:12], p.command_status)
|
||||||
EncodeUint32(buf[12:16], p.sequence_number)
|
binary.BigEndian.PutUint32(buf[12:16], p.sequence_number)
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
func (p *PDU_HEADER) EncodeInto(buf *[]byte) {
|
func (p *PDU_HEADER) EncodeInto(buf *[]uint8) {
|
||||||
bufVal := *buf
|
bufVal := *buf
|
||||||
EncodeUint32(bufVal[0:4], p.command_length)
|
binary.BigEndian.PutUint32(bufVal[0:4], p.command_length)
|
||||||
EncodeUint32(bufVal[4:8], p.command_id)
|
binary.BigEndian.PutUint32(bufVal[4:8], p.command_id)
|
||||||
EncodeUint32(bufVal[8:12], p.command_status)
|
binary.BigEndian.PutUint32(bufVal[8:12], p.command_status)
|
||||||
EncodeUint32(bufVal[12:16], p.sequence_number)
|
binary.BigEndian.PutUint32(bufVal[12:16], p.sequence_number)
|
||||||
}
|
}
|
||||||
func (p *PDU_HEADER) Decode(data []byte) {
|
func (p *PDU_HEADER) Decode(data []uint8) {
|
||||||
p.command_length = DecodeUint32(data[0:4])
|
p.command_length = binary.BigEndian.Uint32(data[0:4])
|
||||||
p.command_id = DecodeUint32(data[4:8])
|
p.command_id = binary.BigEndian.Uint32(data[4:8])
|
||||||
p.command_status = DecodeUint32(data[8:12])
|
p.command_status = binary.BigEndian.Uint32(data[8:12])
|
||||||
p.sequence_number = DecodeUint32(data[12:16])
|
p.sequence_number = binary.BigEndian.Uint32(data[12:16])
|
||||||
}
|
}
|
||||||
|
14
pdu/util.go
14
pdu/util.go
@@ -1,14 +0,0 @@
|
|||||||
package pdu
|
|
||||||
|
|
||||||
// EncodeUint32 encodes a uint32 into a byte slice in big-endian order
|
|
||||||
func EncodeUint32(b []byte, i uint32) {
|
|
||||||
b[0] = byte(i >> 24)
|
|
||||||
b[1] = byte(i >> 16)
|
|
||||||
b[2] = byte(i >> 8)
|
|
||||||
b[3] = byte(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecodeUint32 decodes a uint32 from a byte slice in big-endian order
|
|
||||||
func DecodeUint32(b []byte) uint32 {
|
|
||||||
return uint32(b[0])<<24 | uint32(b[1])<<16 | uint32(b[2])<<8 | uint32(b[3])
|
|
||||||
}
|
|
Reference in New Issue
Block a user