1/*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#include "sms_gsm_message_test.h"
17
18#include <iostream>
19
20#include "access_mms_token.h"
21#include "cdma_sms_message.h"
22#include "gsm_cb_codec.h"
23
24namespace OHOS {
25namespace Telephony {
26using namespace OHOS::Telephony;
27std::unique_ptr<ShortMessage> SmsGsmMessageTest::gsmMessage_ = nullptr;
28
29void SmsGsmMessageTest::ProcessInput(int inputCMD, bool &loopFlag) const
30{
31    std::cout << "inputCMD is:" << inputCMD << std::endl;
32    switch (inputCMD) {
33        case 0x00:
34            Test7BitSubmitSms();
35            break;
36        case 0x01:
37            TestUcs2SubmitSms();
38            break;
39        case 0x02:
40            Test7BitDeliverySms();
41            break;
42        case 0x03:
43            TestUcs2DeliverySms();
44            break;
45        case 0x04:
46            TestStatusReportSms();
47            break;
48        case 0x05:
49            TestMultiPageUcs2Sms();
50            break;
51        case 0x06:
52            TestWapPushSms();
53            break;
54        case 0x07:
55            TestDataSmsDeliverySms();
56            break;
57        case 0x08:
58            TestSmsc00DeliverySms();
59            break;
60        case 0x09:
61            TestMultiPage7bitSms();
62            break;
63        case 0x0a:
64            Test7BitOtherSubmitSms();
65            break;
66        case 0x0b:
67            Test7BitDeliverySms2();
68            break;
69        case 0x0c:
70            Test7BitDeliverySms3();
71            break;
72        case 0x0d:
73            Test7BitDeliverySms4();
74            break;
75        default:
76            loopFlag = false;
77            break;
78    }
79}
80
81void SmsGsmMessageTest::ProcessTest() const
82{
83    bool loopFlag = true;
84    while (loopFlag) {
85        std::cout << "\nusage:please input a cmd num:\n"
86                     "0:Test7BitSubmitSms\n"
87                     "1:TestUcs2SubmitSms\n"
88                     "2:Test7BitDeliverySms\r\n"
89                     "3:TestUcs2DeliverySms\r\n"
90                     "4:TestStatusReportSms\r\n"
91                     "5:TestMultiPageUcs2Sms\r\n"
92                     "6:TestWapPushSms\r\n"
93                     "7:TestDataSmsDeliverySms\r\n"
94                     "8:TestSmsc00DeliverySms\r\n"
95                     "9:TestMultiPage7bitSms\r\n"
96                     "10:Test7BitOtherSubmitSms\r\n"
97                     "11:Test7BitDeliverySms2\r\n"
98                     "12:Test7BitDeliverySms3\r\n"
99                     "13:Test7BitDeliverySms4\r\n"
100                     "Other key:exit \n\n";
101
102        int inputCMD = 0;
103        std::cin >> inputCMD;
104        while (std::cin.fail()) {
105            std::cin.clear();
106            std::cin.ignore();
107            std::cin >> inputCMD;
108        }
109        ProcessInput(inputCMD, loopFlag);
110    }
111}
112
113void SmsGsmMessageTest::Test7BitSubmitSms() const
114{
115    AccessMmsToken token;
116    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("21010B818176251308F4000002C130");
117    ShortMessage *message = new ShortMessage();
118    if (message == nullptr) {
119        std::cout << "message is nullptr!" << std::endl;
120        return;
121    }
122    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
123    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
124    if (gsmMessage_ == nullptr) {
125        std::cout << "Test7BitSubmitSms fail!!!" << std::endl;
126    } else {
127        std::cout << "Test7BitSubmitSms success!!!" << std::endl;
128    }
129}
130
131void SmsGsmMessageTest::TestUcs2SubmitSms() const
132{
133    AccessMmsToken token;
134    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("21020B818176251308F40008046D4B8BD5");
135    ShortMessage *message = new ShortMessage();
136    if (message == nullptr) {
137        std::cout << "message is nullptr!" << std::endl;
138        return;
139    }
140    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
141    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
142    if (gsmMessage_ == nullptr) {
143        std::cout << "TestUcs2SubmitSms fail!!!" << std::endl;
144    } else {
145        std::cout << "TestUcs2SubmitSms success!!!" << std::endl;
146    }
147}
148
149void SmsGsmMessageTest::Test7BitDeliverySms() const
150{
151    AccessMmsToken token;
152    std::vector<unsigned char> pdu =
153        StringUtils::HexToByteVector("0891683108200075F4240D91688129562983F600001240800102142302C130");
154    ShortMessage *message = new ShortMessage();
155    if (message == nullptr) {
156        std::cout << "message is nullptr!" << std::endl;
157        return;
158    }
159    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
160    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
161    if (gsmMessage_ == nullptr) {
162        std::cout << "Test7BitDeliverySms fail!!!" << std::endl;
163    } else {
164        std::cout << "Test7BitDeliverySms success!!!" << std::endl;
165    }
166}
167
168void SmsGsmMessageTest::TestUcs2DeliverySms() const
169{
170    AccessMmsToken token;
171    std::vector<unsigned char> pdu =
172        StringUtils::HexToByteVector("0891683110206005F0240DA1688176251308F4000832500381459323044F60597D");
173    ShortMessage *message = new ShortMessage();
174    if (message == nullptr) {
175        std::cout << "message is nullptr!" << std::endl;
176        return;
177    }
178    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
179    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
180    if (gsmMessage_ == nullptr) {
181        std::cout << "TestUcs2DeliverySms fail!!!" << std::endl;
182    } else {
183        std::cout << "TestUcs2DeliverySms success!!!" << std::endl;
184    }
185}
186
187void SmsGsmMessageTest::TestStatusReportSms() const
188{
189    AccessMmsToken token;
190    std::vector<unsigned char> pdu =
191        StringUtils::HexToByteVector("0891683110808805F006510B818176251308F4325013113382233250131143802300");
192
193    ShortMessage *message = new ShortMessage();
194    if (message == nullptr) {
195        std::cout << "message is nullptr!" << std::endl;
196        return;
197    }
198    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
199    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
200    if (gsmMessage_ == nullptr) {
201        std::cout << "TestStatusReportSms fail!!!" << std::endl;
202    } else {
203        std::cout << "TestStatusReportSms success!!!" << std::endl;
204    }
205}
206
207void SmsGsmMessageTest::TestMultiPageUcs2Sms() const
208{
209    AccessMmsToken token;
210    std::vector<unsigned char> pdu = StringUtils::HexToByteVector(
211        "0891683110205005F06005A00110F00008325052214182238C050003D3030200310030002E0063006E002F007100410053004B00380020"
212        "FF0C4EE5514D6B216708521D6263966476F851738D397528540E5F7154CD60A876846B635E384F7F752830024E2D56FD"
213        "8054901A0041005000507545723D65B04F539A8CFF0C70B951FB0020002000680074007400700073003A002F002F0075002E0031003000"
214        "3000310030002E");
215
216    ShortMessage *message = new ShortMessage();
217    if (message == nullptr) {
218        std::cout << "message is nullptr!" << std::endl;
219        return;
220    }
221    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
222    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
223    if (gsmMessage_ == nullptr) {
224        std::cout << "TestMultiPageUcs2Sms fail!!!" << std::endl;
225    } else {
226        std::cout << "TestMultiPageUcs2Sms success!!!" << std::endl;
227    }
228}
229
230void SmsGsmMessageTest::TestWapPushSms() const
231{
232    AccessMmsToken token;
233    std::vector<unsigned char> pdu = StringUtils::HexToByteVector(
234        "0891683110205005F0640BA10156455102F1000432109261715023880605040B8423F04C06246170706C69636174696F6E2F766E642E77"
235        "61702E6D6D732D6D65737361676500B487AF848C829850765030303031365A645430008D9089178031363630373532313930382F545950"
236        "453D504C4D4E008A808E040001298D"
237        "8805810303F47B83687474703A2F2F31302E3132332E31382E38303A3138302F76564F455F3000");
238
239    ShortMessage *message = new ShortMessage();
240    if (message == nullptr) {
241        std::cout << "message is nullptr!" << std::endl;
242        return;
243    }
244    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
245    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
246    if (gsmMessage_ == nullptr) {
247        std::cout << "TestWapPushSms fail!!!" << std::endl;
248    } else {
249        std::cout << "TestWapPushSms success!!!" << std::endl;
250    }
251}
252
253void SmsGsmMessageTest::TestDataSmsDeliverySms() const
254{
255    AccessMmsToken token;
256    std::vector<unsigned char> pdu = StringUtils::HexToByteVector(
257        "0891683110808805F0640D91686106571209F80000327030021205231306050400640000E8329BFD06DDDF723619");
258
259    ShortMessage *message = new ShortMessage();
260    if (message == nullptr) {
261        std::cout << "message is nullptr!" << std::endl;
262        return;
263    }
264    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
265    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
266    if (gsmMessage_ == nullptr) {
267        std::cout << "TestDataSmsDeliverySms fail!!!" << std::endl;
268    } else {
269        std::cout << "TestDataSmsDeliverySms success!!!" << std::endl;
270    }
271}
272
273void SmsGsmMessageTest::TestSmsc00DeliverySms() const
274{
275    AccessMmsToken token;
276    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("00240D91689141468496F600001270721142432302B319");
277
278    ShortMessage *message = new ShortMessage();
279    if (message == nullptr) {
280        std::cout << "message is nullptr!" << std::endl;
281        return;
282    }
283    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
284    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
285    if (gsmMessage_ == nullptr) {
286        std::cout << "TestSmsc00DeliverySms fail!!!" << std::endl;
287    } else {
288        std::cout << "TestSmsc00DeliverySms success!!!" << std::endl;
289    }
290}
291
292void SmsGsmMessageTest::TestMultiPage7bitSms() const
293{
294    AccessMmsToken token;
295    std::vector<unsigned char> pdu = StringUtils::HexToByteVector(
296        "0891683110206005F0640DA1688176251308F4000032806190051123A00500030F020162B1582C168BC562B1582C168BC562B2198D369B"
297        "CD68B5582C269BCD62B1582C168BC562B1582C168BC562B1582C168BC562B1582C168BC562B1582C168BC562B1582C168BC562B1582C16"
298        "8BC562B1582C168BC562B1582C168BC562B1582C168BC562B1582C168BC562B1582C168BC540B1582C168BC562B1582C168BC56231D98C"
299        "469BCD66");
300
301    ShortMessage *message = new ShortMessage();
302    if (message == nullptr) {
303        std::cout << "message is nullptr!" << std::endl;
304        return;
305    }
306    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
307    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
308    if (gsmMessage_ == nullptr) {
309        std::cout << "TestMultiPage7bitSms fail!!!" << std::endl;
310    } else {
311        std::cout << "TestMultiPage7bitSms success!!!" << std::endl;
312    }
313}
314
315void SmsGsmMessageTest::Test7BitOtherSubmitSms() const
316{
317    AccessMmsToken token;
318    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("00010005910110F0000003E17018");
319    ShortMessage *message = new ShortMessage();
320    if (message == nullptr) {
321        std::cout << "message is nullptr!" << std::endl;
322        return;
323    }
324    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
325    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
326    if (gsmMessage_ == nullptr) {
327        std::cout << "Test7BitOtherSubmitSms fail!!!" << std::endl;
328    } else {
329        std::cout << "Test7BitOtherSubmitSms success!!!" << std::endl;
330    }
331}
332
333void SmsGsmMessageTest::Test7BitDeliverySms2() const
334{
335    AccessMmsToken token;
336    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("07915892208800F0040ED0A3F19CDD7A52A100084"
337       "24011119582235C4F60768400630073006C00200041007000704E006B2160275BC678BC70BA00340038003700330032003730025"
338       "98267097591554FFF0C8ACB806F7D6100630073006C670D52D971B17DDA003200350031003200330031003200333002");
339    ShortMessage *message = new ShortMessage();
340    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
341    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
342    if (gsmMessage_ == nullptr) {
343        std::cout << "Test7BitDeliverySms2 fail!!!" << std::endl;
344    } else {
345        std::cout << "Test7BitDeliverySms2 success!!!" << std::endl;
346    }
347}
348
349void SmsGsmMessageTest::Test7BitDeliverySms3() const
350{
351    AccessMmsToken token;
352    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("07915892208800F00410D0A3F19CDD7A52A13400084"
353        "24011119582235C4F60768400630073006C00200041007000704E006B2160275BC678BC70BA003400380037003300320037300259"
354        "8267097591554FFF0C8ACB806F7D6100630073006C670D52D971B17DDA003200350031003200330031003200333002");
355    ShortMessage *message = new ShortMessage();
356    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
357    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
358    if (gsmMessage_ == nullptr) {
359        std::cout << "Test7BitDeliverySms3 fail!!!" << std::endl;
360    } else {
361        std::cout << "Test7BitDeliverySms3 success!!!" << std::endl;
362    }
363}
364
365void SmsGsmMessageTest::Test7BitDeliverySms4() const
366{
367    AccessMmsToken token;
368    std::vector<unsigned char> pdu = StringUtils::HexToByteVector("07915892208800F0040DD0A3F19CDD7A520100084"
369        "24011119582235C4F60768400630073006C00200041007000704E006B2160275BC678BC70BA0034003800370033003200373002"
370        "598267097591554FFF0C8ACB806F7D6100630073006C670D52D971B17DDA003200350031003200330031003200333002");
371    ShortMessage *message = new ShortMessage();
372    ShortMessage::CreateMessage(pdu, u"3gpp", *message);
373    gsmMessage_ = std::unique_ptr<ShortMessage>(message);
374    if (gsmMessage_ == nullptr) {
375        std::cout << "Test7BitDeliverySms4 fail!!!" << std::endl;
376    } else {
377        std::cout << "Test7BitDeliverySms4 success!!!" << std::endl;
378    }
379}
380} // namespace Telephony
381} // namespace OHOS