Files
smpp-tester/pdu/pdu.go
2024-07-22 22:15:51 +02:00

55 lines
1.3 KiB
Go

package pdu
import "encoding/binary"
type (
PDU interface {
EncodeInto(*[]uint8)
Encode() []uint8
Decode([]uint8)
Size() uint32
}
PDU_HEADER struct {
command_length uint32
command_id uint32
command_status uint32
sequence_number uint32
}
GENERIC_NACK struct {
PDU_HEADER
}
)
func (p *PDU_HEADER) Encode() []uint8 {
buf := make([]uint8, 16)
binary.BigEndian.PutUint32(buf[0:4], p.command_length)
binary.BigEndian.PutUint32(buf[4:8], p.command_id)
binary.BigEndian.PutUint32(buf[8:12], p.command_status)
binary.BigEndian.PutUint32(buf[12:16], p.sequence_number)
return buf
}
func (p *PDU_HEADER) EncodeInto(buf *[]uint8) {
bufVal := *buf
binary.BigEndian.PutUint32(bufVal[0:4], p.command_length)
binary.BigEndian.PutUint32(bufVal[4:8], p.command_id)
binary.BigEndian.PutUint32(bufVal[8:12], p.command_status)
binary.BigEndian.PutUint32(bufVal[12:16], p.sequence_number)
}
func (p *PDU_HEADER) Decode(data []uint8) {
if len(data) >= 4 {
p.command_length = binary.BigEndian.Uint32(data[0:4])
}
if len(data) >= 8 {
p.command_id = binary.BigEndian.Uint32(data[4:8])
}
if len(data) >= 12 {
p.command_status = binary.BigEndian.Uint32(data[8:12])
}
if len(data) >= 16 {
p.sequence_number = binary.BigEndian.Uint32(data[12:16])
}
}