1 /* 2 * Copyright (C) 2021 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 MMS_BODY_PART_H 17 #define MMS_BODY_PART_H 18 19 #include "mms_attachment.h" 20 #include "mms_content_type.h" 21 #include "mms_body_part_header.h" 22 23 namespace OHOS { 24 namespace Telephony { 25 class MmsBodyPart { 26 public: 27 MmsBodyPart(); 28 MmsBodyPart(const MmsBodyPart &obj); 29 MmsBodyPart &operator=(const MmsBodyPart &srcBodyPart); 30 ~MmsBodyPart(); 31 void DumpMmsBodyPart(); 32 bool DecodePartHeader(MmsDecodeBuffer &decodeBuffer, uint32_t headerLen); 33 bool DecodePart(MmsDecodeBuffer &decodeBuffer); // main entry 34 bool DecodePartBody(MmsDecodeBuffer &decodeBuffer, uint32_t bodyLength); 35 bool EncodeMmsBodyPart(MmsEncodeBuffer &encodeBuffer); 36 bool SetAttachment(MmsAttachment &attachment); 37 38 public: 39 bool IsSmilFile(); 40 void SetSmilFile(bool isSmil); 41 bool SetContentType(std::string strContentType); 42 bool GetContentType(std::string &strContentType); 43 bool SetContentId(std::string contentId); 44 bool GetContentId(std::string &contentId); 45 bool SetContentLocation(std::string contentLocation); 46 bool GetContentLocation(std::string &contentLocation); 47 bool SetContentDisposition(std::string contentDisposition); 48 bool GetContentDisposition(std::string &contentDisposition); 49 50 void SetFileName(std::string fileName); 51 MmsContentType &GetContentType(); 52 MmsBodyPartHeader &GetPartHeader(); 53 std::string GetPartFileName(); 54 std::unique_ptr<char[]> ReadBodyPartBuffer(uint32_t &len); 55 56 private: 57 void AssignBodyPart(const MmsBodyPart &obj); 58 bool WriteBodyFromAttachmentBuffer(MmsAttachment &attachment); 59 bool WriteBodyFromFile(std::string path); 60 void DecodeSetFileName(); 61 62 bool isSmilFile_ = false; 63 std::string strFileName_ = ""; 64 uint32_t headerLen_ = 0; 65 uint32_t bodyLen_ = 0; 66 MmsContentType bodyPartContentType_; 67 MmsBodyPartHeader mmsBodyPartHeader_; 68 std::unique_ptr<char[]> pbodyPartBuffer_ = nullptr; 69 70 static constexpr uint32_t MAX_MMS_MSG_PART_LEN = 300 * 1024; 71 const std::string ENCODE_BINARY = "binary"; 72 const std::string ENCODE_BASE64 = "base64"; 73 const std::string ENCODE_QUOTED_PRINTABLE = "quoted-printable"; 74 }; 75 } // namespace Telephony 76 } // namespace OHOS 77 #endif 78