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 #ifndef GSM_USER_DATA_PDU_H
17 #define GSM_USER_DATA_PDU_H
18 
19 #include "gsm_sms_param_codec.h"
20 
21 namespace OHOS {
22 namespace Telephony {
23 class GsmUserDataPdu : public std::enable_shared_from_this<GsmUserDataPdu> {
24 public:
25     GsmUserDataPdu() = default;
26     virtual ~GsmUserDataPdu() = default;
27     bool DecodeUserDataPdu(
28         SmsReadBuffer &buffer, bool bHeaderInd, DataCodingScheme CodingScheme, struct SmsUDPackage *pUserData);
29     bool DecodeUserDataPdu(SmsReadBuffer &buffer, bool bHeaderInd, DataCodingScheme CodingScheme,
30         struct SmsUDPackage *pUserData, struct SmsTpud *pTPUD);
31     bool DecodeHeader(SmsReadBuffer &buffer, struct SmsUDH &pHeader, uint16_t &headerLen);
32     void DebugDecodeHeader(const struct SmsUDH &pHeader);
33     bool EncodeUserDataPdu(SmsWriteBuffer &buffer, const struct SmsUDPackage *(&pUserData),
34         DataCodingScheme codingScheme, std::string &destAddr);
35     void EncodeHeader(SmsWriteBuffer &buffer, const struct SmsUDH header);
36     bool GetHeaderCnt(SmsReadBuffer &buffer, struct SmsUDPackage *pUserData, uint8_t &udhl, uint16_t i);
37     void ResetUserData(struct SmsUDPackage &userData);
38 
39 private:
40     bool DecodeHeaderPartData(SmsReadBuffer &buffer, struct SmsUDH &pHeader, uint8_t oneByte);
41     bool DecodeHeaderConcat8Bit(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
42     bool DecodeHeaderConcat16Bit(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
43     bool DecodeHeaderAppPort8Bit(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
44     bool DecodeHeaderAppPort16Bit(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
45     bool DecodeHeaderSpecialSms(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
46     bool DecodeHeaderReplyAddress(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
47     bool DecodeHeaderSingleShift(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
48     bool DecodeHeaderLockingShift(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
49     bool DecodeHeaderDefaultCase(SmsReadBuffer &buffer, struct SmsUDH &pHeader);
50     void EncodeHeaderAppPort8bit(SmsWriteBuffer &buffer, const struct SmsUDH header);
51     void EncodeHeaderAppPort16bit(SmsWriteBuffer &buffer, const struct SmsUDH header);
52     void EncodeHeaderReplyAddress(SmsWriteBuffer &buffer, const struct SmsUDH header);
53     void EncodeHeaderConcat(SmsWriteBuffer &buffer, const struct SmsUDH header);
54     void EncodeHeaderConcat8Bit(SmsWriteBuffer &buffer, const struct SmsUDH &header);
55     void EncodeHeaderConcat16Bit(SmsWriteBuffer &buffer, const struct SmsUDH &header);
56 };
57 } // namespace Telephony
58 } // namespace OHOS
59 #endif