@@ -9,12 +9,14 @@ import (
9
9
"strconv"
10
10
"strings"
11
11
"time"
12
+
13
+ "github.com/warthog618/sms/encoding/gsm7"
12
14
)
13
15
14
16
// DO NOT USE DIRECTLY
15
17
type (
16
18
zte8810ft struct {
17
- ip string
19
+ host string
18
20
basePath string
19
21
}
20
22
@@ -34,33 +36,32 @@ func init() {
34
36
registerDriver ("ZTE 8810FT" , newZTE8810FT )
35
37
}
36
38
37
- func newZTE8810FT (ip string ) BaseModem {
38
- return & zte8810ft {ip : ip , basePath : "/goform/goform_set_cmd_process" }
39
+ func newZTE8810FT (host string ) BaseModem {
40
+ return & zte8810ft {host : host , basePath : "/goform/goform_set_cmd_process" }
39
41
}
40
42
41
43
func (m * zte8810ft ) getBaseURL (path string ) * url.URL {
42
- return & url.URL {Scheme : "http" , Host : m .ip , Path : path }
44
+ return & url.URL {Scheme : "http" , Host : m .host , Path : path }
43
45
}
44
46
45
- func (m * zte8810ft ) getNewRequest (method string , url * url.URL ) * http.Request {
47
+ func (m * zte8810ft ) getNewRequest (method string , url * url.URL , headers http.Header ) * http.Request {
48
+ headers .Add ("Referer" , fmt .Sprintf ("http://%s/index.html" , m .host ))
49
+
46
50
return & http.Request {
47
51
Proto : "HTTP/1.1" ,
48
52
Method : method ,
49
53
URL : url ,
50
- Header : http.Header {
51
- "Referer" : {fmt .Sprintf ("http://%s/index.html" , m .ip )},
52
- "Content"
53
- },
54
+ Header : headers ,
54
55
}
55
56
}
56
57
57
- func (m * zte8810ft ) SetTargetIP (ip string ) error {
58
- m .ip = ip
58
+ func (m * zte8810ft ) SetHost (ip string ) error {
59
+ m .host = ip
59
60
return nil
60
61
}
61
62
62
- func (m * zte8810ft ) GetTargetIP () string {
63
- return m .ip
63
+ func (m * zte8810ft ) GetHost () string {
64
+ return m .host
64
65
}
65
66
66
67
func (m * zte8810ft ) GetModel () string {
@@ -74,7 +75,7 @@ func (m *zte8810ft) ConnectCell() error {
74
75
query := u .Query ()
75
76
query .Add ("goformId" , "CONNECT_NETWORK" )
76
77
u .RawQuery = query .Encode ()
77
- request := m .getNewRequest ("GET" , u )
78
+ request := m .getNewRequest ("GET" , u , http. Header {} )
78
79
79
80
resp , err := httpClient .Do (request )
80
81
@@ -112,7 +113,7 @@ func (m *zte8810ft) DisconnectCell() error {
112
113
query := u .Query ()
113
114
query .Add ("goformId" , "DISCONNECT_NETWORK" )
114
115
u .RawQuery = query .Encode ()
115
- request := m .getNewRequest ("GET" , u )
116
+ request := m .getNewRequest ("GET" , u , http. Header {} )
116
117
117
118
resp , err := httpClient .Do (request )
118
119
// Process errors
@@ -157,7 +158,7 @@ func (m *zte8810ft) GetCellConnStatus() (*LinkStatus, error) {
157
158
query .Add ("_" , strconv .FormatInt ((time .Now ().UnixMilli )(), 10 ))
158
159
u .RawQuery = query .Encode ()
159
160
160
- request := m .getNewRequest ("GET" , u )
161
+ request := m .getNewRequest ("GET" , u , http. Header {} )
161
162
162
163
resp , err := httpClient .Do (request )
163
164
@@ -201,12 +202,20 @@ func (m *zte8810ft) SendSMS(phone string, message string) error {
201
202
// GET /goform/goform_set_cmd_process?goformId=SEND_SMS
202
203
// Prepare everything to make a request
203
204
204
- // Encode message into GSM-7
205
- // encodedMsg, err := gsm7.Encode([]byte(message))
206
- // if err != nil {
207
- // return ActionError{"sms send", err}
208
- // }
205
+ // Encode message into GSM-7 as byte array
206
+ encodedMsg , err := gsm7 .Encode ([]byte (message ))
207
+ switch err {
208
+
209
+ }
210
+ if err != nil {
211
+ return ActionError {"sms send" , err }
212
+ }
209
213
214
+ // Format into proprietary two byte format: 1122 (0074)
215
+ formattedMsg := ""
216
+ for _ , hex := range encodedMsg {
217
+ formattedMsg += fmt .Sprintf ("00%X" , hex )
218
+ }
210
219
u := m .getBaseURL ("/goform/goform_set_cmd_process" )
211
220
212
221
// Build body
@@ -215,35 +224,23 @@ func (m *zte8810ft) SendSMS(phone string, message string) error {
215
224
query .Add ("ID" , "-1" )
216
225
query .Add ("encode_type" , "GSM7_default" )
217
226
query .Add ("Number" , phone )
218
- // query.Add("MessageBody", fmt.Sprintf("%X", encodedMsg))
219
- query .Add ("MessageBody" , "0074006500730074" )
227
+ query .Add ("MessageBody" , formattedMsg )
220
228
221
229
// Build send timestamp
222
- currTime := time .Now ()
223
- if _ , tz := currTime .Zone (); tz >= 0 {
224
- query .Add ("sms_time" , currTime .Format ("06;01;02;15;04;05;+" )+ strconv .Itoa (tz / 3600 ))
230
+ t := time .Now ()
231
+ if _ , tz := t .Zone (); tz >= 0 {
232
+ query .Add ("sms_time" , t .Format ("06;01;02;15;04;05;+" )+ strconv .Itoa (tz / 3600 ))
225
233
} else {
226
- query .Add ("sms_time" , currTime .Format ("06;01;02;15;04;05;" )+ strconv .Itoa (tz / 3600 ))
234
+ query .Add ("sms_time" , t .Format ("06;01;02;15;04;05;" )+ strconv .Itoa (tz / 3600 ))
227
235
}
228
236
229
- // data := map[string]string{
230
- // "goformId": "SEND_SMS",
231
- // "Number": phone,
232
- // "sms_time": time.Now().Format("02;01;06;15;04;05;-07"),
233
- // "MessageBody": string(encodedMsg),
234
- // "ID": "-1",
235
- // "encode_type": "GSM7_default",
236
- // }
237
-
238
- request := m .getNewRequest ("POST" , u )
237
+ request := m .getNewRequest ("POST" , u , http.Header {
238
+ "Content-Type" : {"application/x-www-form-urlencoded" , "charset=UTF-8" }})
239
239
240
240
// Some Go-level string manipulation
241
- fmt .Println (query .Encode ())
242
- // stringReader := strings.NewReader(query.Encode())
243
- stringReader := strings .NewReader ("goformId=SEND_SMS&Number=%2B79124446729&sms_time=24%3B07%3B28%3B19%3B01%3B24%3B%2B4&MessageBody=0074006500730074&ID=-1&encode_type=GSM7_default" )
241
+ stringReader := strings .NewReader (query .Encode ())
244
242
stringReadCloser := io .NopCloser (stringReader )
245
243
request .Body = stringReadCloser
246
-
247
244
248
245
resp , err := httpClient .Do (request )
249
246
0 commit comments