• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #define private public
17 #define protected public
18 
19 #include "cdma_sms_message.h"
20 #include "cdma_sms_transport_message.h"
21 #include "core_service_client.h"
22 #include "gtest/gtest.h"
23 #include "i_sms_service_interface.h"
24 #include "if_system_ability_manager.h"
25 #include "iservice_registry.h"
26 #include "radio_event.h"
27 #include "sms_mms_gtest.h"
28 #include "sms_mms_test_helper.h"
29 #include "sms_service.h"
30 #include "sms_service_manager_client.h"
31 #include "string_utils.h"
32 #include "telephony_log_wrapper.h"
33 
34 namespace OHOS {
35 namespace Telephony {
36 namespace {
37 sptr<ISmsServiceInterface> g_telephonyService = nullptr;
38 } // namespace
39 using namespace testing::ext;
40 
41 class CdmaSmsGtest : public testing::Test {
42 public:
43     static void SetUpTestCase();
44     static void TearDownTestCase();
45     void SetUp();
46     void TearDown();
47     static sptr<ISmsServiceInterface> GetProxy();
HasSimCard(int32_t slotId)48     static bool HasSimCard(int32_t slotId)
49     {
50         bool hasSimCard = false;
51         if (CoreServiceClient::GetInstance().GetProxy() == nullptr) {
52             return hasSimCard;
53         }
54         CoreServiceClient::GetInstance().HasSimCard(slotId, hasSimCard);
55         return hasSimCard;
56     }
57 };
58 
TearDownTestCase()59 void CdmaSmsGtest::TearDownTestCase() {}
60 
SetUp()61 void CdmaSmsGtest::SetUp() {}
62 
TearDown()63 void CdmaSmsGtest::TearDown() {}
64 
65 const int32_t DEFAULT_SIM_SLOT_ID_1 = 1;
66 const uint8_t HEX_CHAR_LEN = 2;
67 const uint8_t UNICODE_CHAR_LEN = 2;
68 const uint8_t VALUE_INDEX = 2;
69 
SetUpTestCase()70 void CdmaSmsGtest::SetUpTestCase()
71 {
72     TELEPHONY_LOGI("SetUpTestCase slotId%{public}d", DEFAULT_SIM_SLOT_ID_1);
73     g_telephonyService = GetProxy();
74     if (g_telephonyService == nullptr) {
75         return;
76     }
77     DelayedSingleton<SmsServiceManagerClient>::GetInstance()->ResetSmsServiceProxy();
78     DelayedSingleton<SmsServiceManagerClient>::GetInstance()->InitSmsServiceProxy();
79 }
80 
GetProxy()81 sptr<ISmsServiceInterface> CdmaSmsGtest::GetProxy()
82 {
83     auto systemAbilityMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
84     if (systemAbilityMgr == nullptr) {
85         return nullptr;
86     }
87     sptr<IRemoteObject> remote = systemAbilityMgr->CheckSystemAbility(TELEPHONY_SMS_MMS_SYS_ABILITY_ID);
88     if (remote) {
89         sptr<ISmsServiceInterface> smsService = iface_cast<ISmsServiceInterface>(remote);
90         return smsService;
91     }
92     return nullptr;
93 }
94 
95 #ifndef TEL_TEST_UNSUPPORT
96 /**
97  * @tc.number   Telephony_SmsMmsGtest_CdmaSmsMessage_0001
98  * @tc.name     Test CdmaSmsMessage
99  * @tc.desc     Function test
100  */
101 HWTEST_F(CdmaSmsGtest, CdmaSmsMessage_0001, Function | MediumTest | Level1)
102 {
103     TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsMessage_0001 -->");
104     CdmaSmsMessage cdmaSmsMessage;
105     std::string dest = "dest";
106     std::string sc = "sc";
107     std::string text = "text";
108     int32_t port = 10;
109     uint8_t *data;
110     uint32_t dataLen = 10;
111     std::string pdu = "01000B818176251308F4000007E8B0BCFD76E701";
112     bool bStatusReport = false;
113     DataCodingScheme codingScheme = DATA_CODING_7BIT;
114     cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, text, bStatusReport, codingScheme);
115     cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, port, data, dataLen, bStatusReport);
116     cdmaSmsMessage.GreateTransMsg();
117     cdmaSmsMessage.CovertEncodingType(codingScheme);
118     cdmaSmsMessage.CreateMessage(pdu);
119     cdmaSmsMessage.PduAnalysis(pdu);
120     CdmaP2PMsg p2pMsg;
121     cdmaSmsMessage.AnalysisP2pMsg(p2pMsg);
122     cdmaSmsMessage.AnalsisDeliverMwi(p2pMsg);
123     bool ret = cdmaSmsMessage.PduAnalysis("");
124     EXPECT_EQ(false, ret);
125 }
126 
127 /**
128  * @tc.number   Telephony_SmsMmsGtest_CdmaSmsReceiveHandler_0001
129  * @tc.name     Test CdmaSmsReceiveHandler
130  * @tc.desc     Function test
131  */
132 HWTEST_F(CdmaSmsGtest, CdmaSmsReceiveHandler_0001, Function | MediumTest | Level1)
133 {
134     TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsReceiveHandler_0001 -->");
135     int32_t retInt;
136     std::shared_ptr<SmsBaseMessage> retPtr;
137     std::string pdu = "01000B818176251308F4000007E8B0BCFD76E701";
138     std::shared_ptr<AppExecFwk::EventRunner> cdmaSmsReceiveRunner;
139     cdmaSmsReceiveRunner = AppExecFwk::EventRunner::Create("cdmaSmsReceiveHandler");
140     ASSERT_TRUE(cdmaSmsReceiveRunner != nullptr);
141     CdmaSmsReceiveHandler cdmaSmsReceiveHandler(cdmaSmsReceiveRunner, DEFAULT_SIM_SLOT_ID);
142     const std::shared_ptr<CdmaSmsMessage> smsCdmaMessage = CdmaSmsMessage::CreateMessage(pdu);
143     retInt = cdmaSmsReceiveHandler.HandleSmsByType(nullptr);
144     EXPECT_EQ(AckIncomeCause::SMS_ACK_UNKNOWN_ERROR, retInt);
145 }
146 
147 /**
148  * @tc.number   Telephony_CdmaSmsGtest_SmsPduBuffer_0001
149  * @tc.name     Test SmsPduBuffer
150  * @tc.desc     Function test
151  */
152 HWTEST_F(CdmaSmsGtest, SmsPduBuffer_0001, Function | MediumTest | Level1)
153 {
154     auto buffer = std::make_shared<SmsPduBuffer>();
155     EXPECT_TRUE(buffer->IsEmpty());
156     EXPECT_EQ(buffer->GetIndex(), 0);
157     EXPECT_FALSE(buffer->SetIndex(1));
158     EXPECT_EQ(buffer->MoveForward(), 0);
159     EXPECT_EQ(buffer->SkipBits(), 0);
160 
161     std::string pduHex = "00000210020000021002";
162     std::string pdu = StringUtils::HexToString(pduHex);
163     auto rBuffer = std::make_shared<SmsReadBuffer>(pdu);
164     EXPECT_FALSE(rBuffer->IsEmpty());
165     rBuffer->SetIndex(0);
166     uint8_t v = 0;
167     uint16_t v2 = 0;
168     EXPECT_TRUE(rBuffer->ReadByte(v));
169     EXPECT_TRUE(rBuffer->ReadWord(v2));
170     EXPECT_TRUE(rBuffer->ReadBits(v));
171 
172     auto wBuffer = std::make_shared<SmsWriteBuffer>();
173     EXPECT_FALSE(wBuffer->IsEmpty());
174     wBuffer->SetIndex(0);
175     v = 1;
176     v2 = 0x1234;
177     EXPECT_TRUE(wBuffer->WriteByte(v));
178     EXPECT_TRUE(wBuffer->WriteWord(v2));
179     EXPECT_TRUE(wBuffer->InsertByte(v, 1));
180     EXPECT_TRUE(wBuffer->WriteBits(v));
181 }
182 
183 /**
184  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0001
185  * @tc.name     Test CdmaSmsTransportMessage
186  * @tc.desc     Function test
187  */
188 HWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0001, Function | MediumTest | Level1)
189 {
190     TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsTransportMessage_0001 -->");
191     CdmaSmsMessage cdmaSmsMessage;
192     std::string dest = "dest";
193     std::string sc = "sc";
194     std::string text = "text";
195     bool bStatusReport = false;
196     DataCodingScheme codingScheme = DATA_CODING_7BIT;
197     std::unique_ptr<CdmaTransportMsg> transMsg =
198         cdmaSmsMessage.CreateSubmitTransMsg(dest, sc, text, bStatusReport, codingScheme);
199 
200     std::unique_ptr<CdmaSmsTransportMessage> transportMessage =
201         CdmaSmsTransportMessage::CreateTransportMessage(*transMsg.get());
202     SmsWriteBuffer pduBuffer;
203     EXPECT_NE(transportMessage, nullptr);
204     EXPECT_NE(transportMessage->IsEmpty(), true);
205     EXPECT_EQ(transportMessage->Encode(pduBuffer), true);
206     std::unique_ptr<std::vector<uint8_t>> pdu = pduBuffer.GetPduBuffer();
207     EXPECT_NE(pdu, nullptr);
208     EXPECT_GT(pdu->size(), static_cast<uint32_t>(0));
209 }
210 
211 /**
212  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0002
213  * @tc.name     Test CdmaSmsTransportMessage
214  * @tc.desc     Function test
215  */
216 HWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0002, Function | MediumTest | Level1)
217 {
218     TELEPHONY_LOGI("TelSMSMMSTest::CdmaSmsTransportMessage_0002 -->");
219     std::string pduHex = "0000021002040702C48D159E268406010408260003200640011910D61C58F265CD9F469D5AF66DDDBF871E5CFA75E"
220                          "DDFC79F400801000A0140";
221     std::string pdu = StringUtils::HexToString(pduHex);
222     SmsReadBuffer pduBuffer(pdu);
223     CdmaTransportMsg msg;
224     memset_s(&msg, sizeof(msg), 0, sizeof(msg));
225     std::unique_ptr<CdmaSmsTransportMessage> transportMessage =
226         CdmaSmsTransportMessage::CreateTransportMessage(msg, pduBuffer);
227     EXPECT_NE(transportMessage, nullptr);
228     EXPECT_NE(transportMessage->IsEmpty(), true);
229     EXPECT_EQ(transportMessage->Decode(pduBuffer), true);
230 }
231 
232 /**
233  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0003
234  * @tc.name     Test CdmaSmsTransportMessage
235  * @tc.desc     Function test
236  */
237 HWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0003, Function | MediumTest | Level1)
238 {
239     // BROADCAST DELIVER CMASDATA
240     uint8_t CMAS_TEST_BEARER_DATA[] = { 0x00, 0x03, 0x1C, 0x78, 0x00, 0x01, 0x59, 0x02, 0xB8, 0x00, 0x02, 0x10, 0xAA,
241         0x68, 0xD3, 0xCD, 0x06, 0x9E, 0x68, 0x30, 0xA0, 0xE9, 0x97, 0x9F, 0x44, 0x1B, 0xF3, 0x20, 0xE9, 0xA3, 0x2A,
242         0x08, 0x7B, 0xF6, 0xED, 0xCB, 0xCB, 0x1E, 0x9C, 0x3B, 0x10, 0x4D, 0xDF, 0x8B, 0x4E, 0xCC, 0xA8, 0x20, 0xEC,
243         0xCB, 0xCB, 0xA2, 0x0A, 0x7E, 0x79, 0xF4, 0xCB, 0xB5, 0x72, 0x0A, 0x9A, 0x34, 0xF3, 0x41, 0xA7, 0x9A, 0x0D,
244         0xFB, 0xB6, 0x79, 0x41, 0x85, 0x07, 0x4C, 0xBC, 0xFA, 0x2E, 0x00, 0x08, 0x20, 0x58, 0x38, 0x88, 0x80, 0x10,
245         0x54, 0x06, 0x38, 0x20, 0x60, 0x30, 0xA8, 0x81, 0x90, 0x20, 0x08 };
246 
247     std::stringstream ss;
248     ss.clear();
249     ss << static_cast<uint8_t>(CdmaTransportMsgType::BROADCAST);
250     ss << static_cast<uint8_t>(CdmaSmsParameterRecord::SERVICE_CATEGORY);
251     ss << static_cast<uint8_t>(0x02);
252     ss << static_cast<uint8_t>(static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST) >> 8);
253     ss << static_cast<uint8_t>(static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST) & 0xff);
254     ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA);
255     ss << static_cast<uint8_t>(sizeof(CMAS_TEST_BEARER_DATA));
256     for (uint8_t i = 0; i < sizeof(CMAS_TEST_BEARER_DATA); i++) {
257         ss << CMAS_TEST_BEARER_DATA[i];
258     }
259     SmsReadBuffer rBuffer(ss.str());
260     CdmaTransportMsg msg;
261     memset_s(&msg, sizeof(msg), 0, sizeof(msg));
262     std::unique_ptr<CdmaSmsTransportMessage> message = CdmaSmsTransportMessage::CreateTransportMessage(msg, rBuffer);
263     EXPECT_TRUE(message->Decode(rBuffer));
264     EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.msgId.msgId, 0xc780);
265     EXPECT_EQ(msg.data.broadcast.serviceCtg, static_cast<uint16_t>(SmsServiceCtg::CMAS_TEST));
266     EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.cmasData.dataLen, 74);
267     EXPECT_EQ(msg.data.broadcast.telesvcMsg.data.deliver.cmasData.urgency, SmsCmaeUrgency::EXPECTED);
268 }
269 
270 /**
271  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsTransportMessage_0004
272  * @tc.name     Test CdmaSmsTransportMessage
273  * @tc.desc     Function test
274  */
275 HWTEST_F(CdmaSmsGtest, CdmaSmsTransportMessage_0004, Function | MediumTest | Level1)
276 {
277     // BROADCAST DELIVER USERDATA(BCCBB)
278     std::string pduHex = "0101020004081300031008d00106102c2870e1420801c00c01c0";
279     std::string pdu = StringUtils::HexToString(pduHex);
280     SmsReadBuffer pduBuffer(pdu);
281     CdmaTransportMsg msg;
282     memset_s(&msg, sizeof(msg), 0, sizeof(msg));
283     std::unique_ptr<CdmaSmsTransportMessage> transportMessage =
284         CdmaSmsTransportMessage::CreateTransportMessage(msg, pduBuffer);
285     EXPECT_NE(transportMessage, nullptr);
286     EXPECT_FALSE(transportMessage->IsEmpty());
287     EXPECT_TRUE(transportMessage->Decode(pduBuffer));
288 }
289 
GetUserDataString(SmsTeleSvcUserData userData)290 string GetUserDataString(SmsTeleSvcUserData userData)
291 {
292     std::stringstream ssUserData;
293     if (userData.encodeType == SmsEncodingType::UNICODE) {
294         char unicodeChar[UNICODE_CHAR_LEN + 1];
295         unicodeChar[UNICODE_CHAR_LEN] = '\0';
296         for (uint8_t i = 0; i < userData.userData.length; i += UNICODE_CHAR_LEN) {
297             ssUserData << "\\u";
298             snprintf_s(unicodeChar, sizeof(unicodeChar), sizeof(unicodeChar) - 1, "%02x",
299                 static_cast<uint8_t>(userData.userData.data[i]));
300             ssUserData << unicodeChar;
301             snprintf_s(unicodeChar, sizeof(unicodeChar), sizeof(unicodeChar) - 1, "%02x",
302                 static_cast<uint8_t>(userData.userData.data[i + 1]));
303             ssUserData << unicodeChar;
304         }
305     } else {
306         for (uint8_t i = 0; i < userData.userData.length; i++) {
307             ssUserData << static_cast<uint8_t>(userData.userData.data[i]);
308         }
309     }
310     return ssUserData.str();
311 }
312 
CheckDeliverUserData(string pdu,string userData)313 void CheckDeliverUserData(string pdu, string userData)
314 {
315     std::stringstream ss;
316     ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA);
317     ss << static_cast<uint8_t>(pdu.size() / HEX_CHAR_LEN);
318     ss << StringUtils::HexToString(pdu);
319 
320     CdmaTeleserviceMsg v;
321     memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg));
322     SmsReadBuffer rBuffer(ss.str());
323     rBuffer.SetIndex(VALUE_INDEX);
324     auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer);
325     rBuffer.SetIndex(0);
326     EXPECT_TRUE(message->Decode(rBuffer));
327     EXPECT_STREQ(GetUserDataString(v.data.deliver.userData).c_str(), userData.c_str());
328 }
329 
CheckSubmitUserData(string pdu,string userData)330 void CheckSubmitUserData(string pdu, string userData)
331 {
332     std::stringstream ss;
333     ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA);
334     ss << static_cast<uint8_t>(pdu.size() / HEX_CHAR_LEN);
335     ss << StringUtils::HexToString(pdu);
336 
337     CdmaTeleserviceMsg v;
338     memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg));
339     SmsReadBuffer rBuffer(ss.str());
340     rBuffer.SetIndex(VALUE_INDEX);
341     auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer);
342     rBuffer.SetIndex(0);
343     EXPECT_TRUE(message->Decode(rBuffer));
344     EXPECT_STREQ(GetUserDataString(v.data.submit.userData).c_str(), userData.c_str());
345 
346     auto message1 = std::make_shared<CdmaSmsBearerData>(v);
347     SmsWriteBuffer wBuffer;
348     EXPECT_TRUE(message1->Encode(wBuffer));
349     auto buffer = wBuffer.GetPduBuffer();
350     EXPECT_GT(buffer->size(), 0);
351     std::stringstream ssEncode;
352     for (uint16_t i = 0; i < buffer->size(); i++) {
353         ssEncode << (*buffer)[i];
354     }
355 
356     CdmaTeleserviceMsg v2;
357     memset_s(&v2, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg));
358     SmsReadBuffer rBuffer2(ssEncode.str());
359     rBuffer2.SetIndex(VALUE_INDEX);
360     auto message2 = std::make_shared<CdmaSmsBearerData>(v2, rBuffer2);
361     rBuffer2.SetIndex(0);
362     EXPECT_TRUE(message2->Decode(rBuffer2));
363     EXPECT_STREQ(GetUserDataString(v2.data.submit.userData).c_str(), userData.c_str());
364 }
365 
366 /**
367  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsBearerData_0001
368  * @tc.name     Test CdmaSmsBearerData
369  * @tc.desc     Function test
370  */
371 HWTEST_F(CdmaSmsGtest, CdmaSmsBearerData_0001, Function | MediumTest | Level1)
372 {
373     // gsm 7bit
374     CheckDeliverUserData("00031040900112488ea794e074d69e1b7392c270326cde9e98", "Test standard SMS");
375     // ascii 7bit
376     CheckDeliverUserData("0003100160010610262d5ab500", "bjjj");
377     // ia5
378     CheckDeliverUserData("00031002100109184539b4d052ebb3d0", "SMS Rulz");
379     // unicode
380     CheckDeliverUserData("000310021001062012716B2C380801000A0140", "\\u4e2d\\u6587");
381 
382     // gsm 7bit
383     CheckSubmitUserData("00032006400112488ea794e074d69e1b7392c270326cde9e98", "Test standard SMS");
384     // ascii 7bit
385     CheckSubmitUserData("0003200640010610262d5ab500", "bjjj");
386     // ia5
387     CheckSubmitUserData("00032006400109184539b4d052ebb3d0", "SMS Rulz");
388     // unicode
389     CheckSubmitUserData("000320064001062012716B2C380801000A0140", "\\u4e2d\\u6587");
390 }
391 
392 /**
393  * @tc.number   Telephony_CdmaSmsGtest_CdmaSmsBearerData_0002
394  * @tc.name     Test CdmaSmsBearerData
395  * @tc.desc     Function test
396  */
397 HWTEST_F(CdmaSmsGtest, CdmaSmsBearerData_0002, Function | MediumTest | Level1)
398 {
399     std::string dataStr = "0003200010010410168d20020105030608120111015905019206069706180000000801c00901800a01e00b"
400                           "01030c01c00d01070e05039acc13880f018011020566";
401     std::stringstream ss;
402     ss.clear();
403     ss << static_cast<uint8_t>(CdmaSmsParameterRecord::BEARER_DATA);
404     ss << static_cast<uint8_t>(dataStr.size() / HEX_CHAR_LEN);
405     ss << StringUtils::HexToString(dataStr);
406 
407     CdmaTeleserviceMsg v;
408     memset_s(&v, sizeof(CdmaTeleserviceMsg), 0x00, sizeof(CdmaTeleserviceMsg));
409     SmsReadBuffer rBuffer(ss.str());
410     rBuffer.SetIndex(VALUE_INDEX);
411     auto message = std::make_shared<CdmaSmsBearerData>(v, rBuffer);
412     rBuffer.SetIndex(0);
413     EXPECT_TRUE(message->Decode(rBuffer));
414     EXPECT_EQ(v.type, TeleserviceMsgType::SUBMIT);
415     EXPECT_EQ(v.data.submit.msgId.msgId, 1);
416     EXPECT_EQ(v.data.submit.priority, SmsPriorityIndicator::EMERGENCY);
417     EXPECT_EQ(v.data.submit.privacy, SmsPrivacyIndicator::CONFIDENTIAL);
418     EXPECT_EQ(v.data.submit.callbackNumber.addrLen, 7);
419     char number[] = "3598271";
420     for (uint8_t i = 0; i < sizeof(number); i++) {
421         EXPECT_EQ(v.data.submit.callbackNumber.szData[i], number[i]);
422     }
423     EXPECT_EQ(v.data.submit.depositId, 1382);
424     EXPECT_EQ(v.data.submit.language, SmsLanguageType::HEBREW);
425     EXPECT_EQ(v.data.submit.alertPriority, SmsAlertPriority::HIGH);
426     EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.year, 97);
427     EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.month, 6);
428     EXPECT_EQ(v.data.submit.deferValPeriod.time.absTime.day, 18);
429 }
430 #endif // TEL_TEST_UNSUPPORT
431 } // namespace Telephony
432 } // namespace OHOS