-
Notifications
You must be signed in to change notification settings - Fork 38
/
tx_multipart_example.go
99 lines (89 loc) · 2.44 KB
/
tx_multipart_example.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package main
import (
"crypto/rand"
"fmt"
smpp "github.com/mergenchik/smpp34"
"math"
)
func main() {
// connect and bind
tx, err := smpp.NewTransmitter(
"localhost",
9000,
5,
smpp.Params{
"system_type": "CMT",
"system_id": "hugo",
"password": "ggoohu",
},
)
if err != nil {
fmt.Println("Connection Err:", err)
return
}
msg := "Very Long Message, 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890END"
sm_len := len(msg)
fmt.Println("Message Bytes count:", sm_len)
if sm_len > 140 {
sm_runes := []byte(msg)
rune_len := len(sm_runes)
send_params := smpp.Params{smpp.DATA_CODING: smpp.ENCODING_DEFAULT, smpp.ESM_CLASS: smpp.ESM_CLASS_GSMFEAT_UDHI}
total_parts := byte(int(math.Ceil(float64(rune_len) / 134)))
partNum := 1
uid := make([]byte, 1)
_, err := rand.Read(uid)
if err != nil {
// fmt.Println("QuerySM error:", err)
fmt.Println("Rand.Read error:", err)
return
}
for i := 0; i < rune_len; i += 134 {
start := i
end := i + 134
if end > rune_len {
end = rune_len
}
part := []byte{0x05, 0x00, 0x03, uid[0], total_parts, byte(partNum)}
part = append(part, []byte(sm_runes[start:end])...)
fmt.Println("Part:", part)
// Send SubmitSm
seq, err := tx.SubmitSmEncoded("test", "test2", part, &send_params)
// Pdu gen errors
if err != nil {
fmt.Println("SubmitSm err:", err)
}
// Should save this to match with message_id
fmt.Println("seq:", seq)
partNum++
}
} else {
send_params := smpp.Params{}
// Send SubmitSm
seq, err := tx.SubmitSm("test", "test2", msg, &send_params)
// Pdu gen errors
if err != nil {
fmt.Println("SubmitSm err:", err)
}
// Should save this to match with message_id
fmt.Println("seq:", seq)
}
for {
pdu, err := tx.Read() // This is blocking
if err != nil {
fmt.Println("Read Err:", err)
break
}
// EnquireLinks are auto handles
switch pdu.GetHeader().Id {
case smpp.SUBMIT_SM_RESP:
// message_id should match this with seq message
fmt.Println("MSG ID:", pdu.GetField("message_id").Value())
fmt.Printf("PDU Header: %v", pdu.GetHeader())
fmt.Println()
default:
// ignore all other PDUs or do what you link with them
fmt.Println("PDU ID:", pdu.GetHeader().Id)
}
}
fmt.Println("ending...")
}