I just learnt that uint8 and byte are the fucking same And that bytes.Buffer is the thing to use Idiot idiot idiot... Live and learn
120 lines
3.4 KiB
Go
120 lines
3.4 KiB
Go
package pdu
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/ascii85"
|
|
"encoding/binary"
|
|
)
|
|
|
|
type (
|
|
SUBMIT_SM struct {
|
|
header PDU_HEADER
|
|
service_type string
|
|
source_addr_ton byte
|
|
source_addr_npi byte
|
|
source_addr string
|
|
dest_addr_ton byte
|
|
dest_addr_npi byte
|
|
destination_addr string
|
|
esm_class byte
|
|
protocol_id byte
|
|
priority_flag byte
|
|
schedule_delivery_time string
|
|
validity_period string
|
|
registered_delivery byte
|
|
replace_if_present byte
|
|
data_coding byte
|
|
sm_default_msg_id byte
|
|
sm_length byte
|
|
short_message string
|
|
// user_message_reference uint16
|
|
// source_port uint16
|
|
// source_addr_subunit byte
|
|
// destination_port uint16
|
|
// dest_addr_subunit byte
|
|
// sar_msg_ref_num uint16
|
|
// sar_total_segments byte
|
|
// sar_segment_seqnum byte
|
|
// more_messages_to_send byte
|
|
// payload_type byte
|
|
// message_payload string
|
|
// privacy_indicator byte
|
|
// callback_num string
|
|
// callback_num_pres byte
|
|
// callback_num_atag string
|
|
// source_subaddress string
|
|
// dest_subaddress string
|
|
// user_response_code byte
|
|
// display_time byte
|
|
// sms_signal byte
|
|
// ms_validity byte
|
|
// ms_msg_wait_facilities byte
|
|
// number_of_messages byte
|
|
// alert_on_message_delivery byte
|
|
// language_indicator byte
|
|
// its_reply_type byte
|
|
// its_session_info byte
|
|
// ussd_service_op byte
|
|
}
|
|
SUBMIT_SM_RESP struct {
|
|
header PDU_HEADER
|
|
message_id string
|
|
}
|
|
SUBMIT_MULTI struct{}
|
|
SUBMIT_MULTI_RESP struct{}
|
|
)
|
|
|
|
func (p *SUBMIT_SM) Encode(buf *bytes.Buffer) error {
|
|
p.header.Encode(buf)
|
|
n := ascii85.Encode(buf.Bytes(), []byte(p.service_type))
|
|
buf.Truncate(n)
|
|
binary.Write(buf, binary.BigEndian, byte(len(p.service_type)))
|
|
|
|
// service_type string
|
|
// source_addr_ton byte
|
|
// source_addr_npi byte
|
|
// source_addr string
|
|
// dest_addr_ton byte
|
|
// dest_addr_npi byte
|
|
// destination_addr string
|
|
// esm_class byte
|
|
// protocol_id byte
|
|
// priority_flag byte
|
|
// schedule_delivery_time string
|
|
// validity_period string
|
|
// registered_delivery byte
|
|
// replace_if_present byte
|
|
// data_coding byte
|
|
// sm_default_msg_id byte
|
|
// sm_length byte
|
|
// short_message string
|
|
|
|
return nil
|
|
}
|
|
func (p *SUBMIT_SM) Decode(buf *bytes.Buffer) error {
|
|
return nil
|
|
}
|
|
func (p *SUBMIT_SM) Size() int {
|
|
var size int
|
|
size += p.header.Size()
|
|
size += len(p.service_type) * 1
|
|
size += 1 // source_addr_ton
|
|
size += 1 // source_addr_npi
|
|
size += len(p.source_addr) * 1
|
|
size += 1 // dest_addr_ton
|
|
size += 1 // dest_addr_npi
|
|
size += len(p.destination_addr) * 1
|
|
size += 1 // esm_class
|
|
size += 1 // protocol_id
|
|
size += 1 // priority_flag
|
|
size += len(p.schedule_delivery_time) * 1
|
|
size += len(p.validity_period) * 1
|
|
size += 1 // registered_delivery
|
|
size += 1 // replace_if_present
|
|
size += 1 // data_coding
|
|
size += 1 // sm_default_msg_id
|
|
size += 1 // sm_length
|
|
size += len(p.short_message) * 1
|
|
return size
|
|
}
|