make simple text messages encodable

master
Florian Thienel 3 years ago
parent cfc51f472f
commit 060fa23f4d

@ -360,7 +360,7 @@ func ParseSDSTransfer(bytes []byte) (SDSTransfer, error) {
} }
// NewTextMessageTransfer returns a new SDS-TRANSFER PDU for text messaging with the given parameters // NewTextMessageTransfer returns a new SDS-TRANSFER PDU for text messaging with the given parameters
func NewTextMessageTransfer(messageReference MessageReference, immediate bool, deliveryReport DeliveryReportRequest, text string) SDSTransfer { func NewTextMessageTransfer(messageReference MessageReference, immediate bool, deliveryReport DeliveryReportRequest, encoding TextEncoding, text string) SDSTransfer {
var protocol ProtocolIdentifier var protocol ProtocolIdentifier
if immediate { if immediate {
protocol = ImmediateTextMessaging protocol = ImmediateTextMessaging
@ -374,7 +374,7 @@ func NewTextMessageTransfer(messageReference MessageReference, immediate bool, d
DeliveryReportRequest: deliveryReport, DeliveryReportRequest: deliveryReport,
UserData: TextSDU{ UserData: TextSDU{
TextHeader: TextHeader{ TextHeader: TextHeader{
Encoding: ISO8859_1, Encoding: encoding,
}, },
Text: text, Text: text,
}, },
@ -750,6 +750,7 @@ type ExternalSubscriberNumberDigit byte // its only 4 bits per digit
/* Simple Text Messaging related types and functions */ /* Simple Text Messaging related types and functions */
// ParseSimpleTextMessage parses a simple text message PDU
func ParseSimpleTextMessage(bytes []byte) (SimpleTextMessage, error) { func ParseSimpleTextMessage(bytes []byte) (SimpleTextMessage, error) {
if len(bytes) < 2 { if len(bytes) < 2 {
return SimpleTextMessage{}, fmt.Errorf("simple text message PDU too short: %d", len(bytes)) return SimpleTextMessage{}, fmt.Errorf("simple text message PDU too short: %d", len(bytes))
@ -768,6 +769,22 @@ func ParseSimpleTextMessage(bytes []byte) (SimpleTextMessage, error) {
return result, nil return result, nil
} }
// NewSimpleTextMessage returns a new simple text message PDU according to the given parameters
func NewSimpleTextMessage(immediate bool, encoding TextEncoding, text string) SimpleTextMessage {
var protocol ProtocolIdentifier
if immediate {
protocol = ImmediateTextMessaging
} else {
protocol = TextMessaging
}
return SimpleTextMessage{
protocol: protocol,
Encoding: encoding,
Text: text,
}
}
// SimpleTextMessage represents the data of a simple text messaging PDU, according to [AI] 29.5.2.3 // SimpleTextMessage represents the data of a simple text messaging PDU, according to [AI] 29.5.2.3
type SimpleTextMessage struct { type SimpleTextMessage struct {
protocol ProtocolIdentifier protocol ProtocolIdentifier
@ -780,6 +797,16 @@ func (m SimpleTextMessage) Immediate() bool {
return m.protocol == SimpleImmediateTextMessaging return m.protocol == SimpleImmediateTextMessaging
} }
// Encode this simple text message
func (m SimpleTextMessage) Encode(bytes []byte, bits int) ([]byte, int) {
bytes, bits = m.protocol.Encode(bytes, bits)
bytes = append(bytes, byte(m.Encoding))
bits += 8
bytes, bits = AppendEncodedPayloadText(bytes, bits, m.Text, m.Encoding)
return bytes, bits
}
/* Text messaging related types and functions */ /* Text messaging related types and functions */
// ParseTextSDU parses the user data of a text message. // ParseTextSDU parses the user data of a text message.

@ -32,10 +32,10 @@ func TestParseMessage(t *testing.T) {
}, },
{ {
desc: "simple text message", desc: "simple text message",
header: "+CTSDSR: 12,1234567,0,2345678,0,224", header: "+CTSDSR: 12,1234567,0,2345678,0,104",
pdu: "0201746573746D657373616765", pdu: "0201746573746D657373616765",
expected: IncomingMessage{ expected: IncomingMessage{
Header: Header{AIService: SDSTLService, Source: "1234567", Destination: "2345678", PDUBits: 224}, Header: Header{AIService: SDSTLService, Source: "1234567", Destination: "2345678", PDUBits: 104},
Payload: SimpleTextMessage{ Payload: SimpleTextMessage{
protocol: SimpleTextMessaging, protocol: SimpleTextMessaging,
Encoding: ISO8859_1, Encoding: ISO8859_1,
@ -493,6 +493,18 @@ func TestEncode(t *testing.T) {
expectedBytes: []byte{0x82, 0x06, 0xC9, 0x81, 0x44, 0x5A, 0x8F, 0x74, 0x65, 0x73, 0x74, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65}, expectedBytes: []byte{0x82, 0x06, 0xC9, 0x81, 0x44, 0x5A, 0x8F, 0x74, 0x65, 0x73, 0x74, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65},
expectedBits: 144, expectedBits: 144,
}, },
{
desc: "simple text message",
values: []Encoder{
SimpleTextMessage{
protocol: SimpleTextMessaging,
Encoding: ISO8859_1,
Text: "testmessage",
},
},
expectedBytes: []byte{0x02, 0x01, 0x74, 0x65, 0x73, 0x74, 0x6D, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65},
expectedBits: 104,
},
} }
for _, tc := range tt { for _, tc := range tt {
t.Run(tc.desc, func(t *testing.T) { t.Run(tc.desc, func(t *testing.T) {

Loading…
Cancel
Save