You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB
Go

package responsecs
import (
"encoding/binary"
"unsafe"
)
const (
RC_SUCCESS = iota
RC_FAIL
)
const (
TTS_COMMAND = iota
REFER_COMMAND
BYE_COMMAND
BARGEIN_COMMAND
DTMF_COMMAND
)
type Response struct {
agentName string
telNo string
command uint32
resultCode uint32
payloadLen uint64
}
func NewResponse(agentname string, telno string, command int, rc int, payloadLength int) *Response {
r := Response{agentName: agentname, telNo: telno, command: uint32(command), resultCode: uint32(rc), payloadLen: uint64(payloadLength)}
return &r
}
func (r Response) GetData() []byte {
agentNameLen := 20
telNoLen := 50
commandLen := int(unsafe.Sizeof(r.command))
rcLen := int(unsafe.Sizeof(r.resultCode))
plLen := int(unsafe.Sizeof(r.payloadLen))
retBin := make([]byte, commandLen+rcLen+plLen+agentNameLen+telNoLen)
commandBin := make([]byte, commandLen)
binary.LittleEndian.PutUint32(commandBin, uint32(r.command))
rcBin := make([]byte, rcLen)
binary.LittleEndian.PutUint32(rcBin, uint32(r.resultCode))
plBin := make([]byte, plLen)
binary.LittleEndian.PutUint64(plBin, uint64(r.payloadLen))
agentNameBin := []byte(r.agentName)
telNoBin := []byte(r.telNo)
copy(retBin, commandBin)
copy(retBin[commandLen:], rcBin)
copy(retBin[commandLen+rcLen:], plBin)
copy(retBin[commandLen+rcLen+plLen:], agentNameBin)
copy(retBin[commandLen+rcLen+plLen+agentNameLen:], telNoBin)
return retBin
}