• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Copyright (C) 2014 Samsung Electronics Co., Ltd. All rights reserved
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef CDMA_SMS_PDU_CODEC_H
18 #define CDMA_SMS_PDU_CODEC_H
19 
20 #include <vector>
21 
22 #include "cdma_sms_types.h"
23 
24 namespace OHOS {
25 namespace Telephony {
26 class CdmaSmsPduCodec {
27 public:
28     CdmaSmsPduCodec() = default;
29     virtual ~CdmaSmsPduCodec() = default;
30 
31     static bool CheckInvalidPDU(const std::vector<unsigned char> &pduStr);
32     static int EncodeMsg(const struct SmsTransMsg &transMsg, unsigned char *pduStr, size_t pduStrLen);
33     static int DecodeMsg(const unsigned char *pduStr, int pduLen, struct SmsTransMsg &transMsg);
34 
35 private:
36     static int EncodeP2PMsg(const struct SmsTransP2PMsg &p2pMsg, unsigned char *pduStr);
37     static int EncodeAckMsg(const struct SmsTransAckMsg &ackMsg, unsigned char *pduStr);
38     static int EncodeCBMsg(const struct SmsTransBroadCastMsg &cbMsg, unsigned char *pduStr);
39 
40     static int EncodeTelesvcMsg(const struct SmsTeleSvcMsg &svcMsg, unsigned char *pduStr);
41 
42     static int EncodeTelesvcCancelMsg(const struct SmsTeleSvcCancel &cancelMsg, unsigned char *pduStr);
43     static int EncodeTelesvcSubmitMsg(const struct SmsTeleSvcSubmit &sbMsg, unsigned char *pduStr);
44     static int EncodeTelesvcDeliverReportMsg(const struct SmsTeleSvcDeliverReport &dRMsg, unsigned char *pduStr);
45     static int EncodeAddress(const struct SmsTransAddr &address, unsigned char *pduStr);
46     static int EncodeSubAddress(const struct SmsTransSubAddr &address, unsigned char *pduStr);
47 
48     static int DecodeP2PMsg(const unsigned char *pduStr, int pduLen, struct SmsTransP2PMsg &p2pMsg);
49     static int DecodeCBMsg(const unsigned char *pduStr, int pduLen, struct SmsTransBroadCastMsg &cbMsg);
50     static int DecodeAckMsg(const unsigned char *pduStr, int pduLen, struct SmsTransAckMsg &ackMsg);
51 
52     static void DecodeP2PTelesvcMsg(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcMsg &svcMsg);
53     static void DecodeP2PDeliveryAckMsg(
54         const unsigned char *pduStr, int pduLen, struct SmsTeleSvcDeliverAck &delAckMsg);
55     static void DecodeP2PSubmitReportMsg(
56         const unsigned char *pduStr, int pduLen, struct SmsTeleSvcDeliverReport &subReport);
57     static void DecodeP2PUserAckMsg(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcUserAck &userAck);
58     static void DecodeP2PReadAckMsg(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcReadAck &readAck);
59     static void DecodeP2PDeliverMsg(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcDeliver &delMsg);
60     static void DecodeP2PSubmitMsg(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcSubmit &subMsg);
61     static void DecodeCBBearerData(
62         const unsigned char *pduStr, int pduLen, struct SmsTeleSvcMsg &telesvc, bool isCMAS);
63 
64     static int Encode7BitASCIIData(const struct SmsUserData &userData, unsigned char *dest, int &remainBits);
65     static int Encode7BitGSMData(const struct SmsUserData &userData, unsigned char *dest, int &remainBits);
66     static int EncodeUCS2Data(const struct SmsUserData &userData, unsigned char *dest, int &remainBits);
67 
68     static void DecodeUserData(
69         unsigned char *pduStr, int pduLen, struct SmsTeleSvcUserData &userData, bool headerInd);
70     static void Decode7BitHeader(
71         const unsigned char *pduStr, unsigned char udhlBytes, struct SmsUserData &userData);
72     static void DecodeCMASData(unsigned char *pduStr, int pduLen, struct SmsTeleSvcCmasData &cmasData);
73     static int DecodeCMASType0Data(unsigned char *pduStr, int pduLen, struct SmsTeleSvcCmasData &cmasData);
74 
75     static int DecodeTeleId(const unsigned char *pduStr, int pduLen, unsigned short &teleSvcId);
76     static int DecodeSvcCtg(const unsigned char *pduStr, int pduLen, unsigned short &transSvcCtg);
77     static int DecodeAddress(const unsigned char *pduStr, int pduLen, struct SmsTransAddr &transAddr);
78     static int DecodeSubAddress(const unsigned char *pduStr, int pduLen, struct SmsTransSubAddr &subAddr);
79 
80     static int DecodeMsgId(const unsigned char *pduStr, int pduLen, struct SmsTransMsgId &smgId);
81     static void DecodeCallBackNum(const unsigned char *pduStr, int pduLen, struct SmsTeleSvcAddr &svcAddr);
82     static int DecodeAbsTime(const unsigned char *pduStr, struct SmsTimeAbs &timeAbs);
83     static enum SmsMessageType FindMsgType(const std::vector<unsigned char> &pduStr);
84     static enum SmsEncodingType FindMsgEncodeType(const unsigned char value);
85     static void DecodeP2PDeliverVmnAck(
86         const unsigned char *pduStr, int pduLen, struct SmsEnhancedVmnAck &enhancedVmnAck);
87     static void DecodeP2PEnhancedVmn(const unsigned char *pduStr, int pduLen, struct SmsEnhancedVmn &enhancedVmn);
88 
89     static unsigned char ConvertToBCD(const unsigned char val);
90     static unsigned char DecodeDigitModeNumberType(const unsigned char val, bool isNumber);
91     static unsigned char DecodeDigitModeNumberPlan(const unsigned char val);
92 
93     static int EncodeCbNumber(const SmsTeleSvcAddr &cbNumber, std::vector<unsigned char> &pdustr);
94     static int EncodeAbsTime(const SmsTimeAbs &absTime, std::vector<unsigned char> &pdustr);
95     static int EncodeMsgId(const SmsTransMsgId &msgId, const SmsMessageType &type, unsigned char *pduStr);
96     static int EncodeBearerUserData(const struct SmsTeleSvcUserData &userData, unsigned char *pduStr);
97     static void ShiftNBitForDecode(unsigned char *src, unsigned int nBytes, unsigned int nShiftBit);
98     static void ShiftRNBit(unsigned char *src, unsigned int nBytes, unsigned int nShiftBit);
99     static void ShiftNBit(unsigned char *src, unsigned int nBytes, unsigned int nShiftBit);
100 };
101 } // namespace Telephony
102 } // namespace OHOS
103 #endif