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