1  /*
2   * Copyright (C) 2021-2022 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_HEADER_H
17  #define MMS_BODY_PART_HEADER_H
18  
19  #include "mms_content_type.h"
20  
21  namespace OHOS {
22  namespace Telephony {
23  enum class MmsHeaderParam {
24      P_CONTENT_LOCATION_V1 = 0x04,
25      P_CONTENT_LOCATION_V2 = 0x0E,
26      P_CONTENT_ID = 0x40,
27      P_CONTENT_DISPOSITION_V1 = 0x2E,
28      P_CONTENT_DISPOSITION_V2 = 0x45
29  };
30  
31  enum class MmsDispositonParam {
32      P_DISPOSITION_FROM_DATA = 0x80,
33      P_DISPOSITION_ATTACHMENT = 0x81,
34      P_DISPOSITION_INLINE = 0x82
35  };
36  
37  class MmsBodyPartHeader {
38  public:
39      MmsBodyPartHeader() = default;
40      ~MmsBodyPartHeader() = default;
41      MmsBodyPartHeader(const MmsBodyPartHeader &obj);
42      MmsBodyPartHeader &operator=(const MmsBodyPartHeader &srcHeader);
43      void DumpBodyPartHeader();
44      bool DecodeWellKnownHeader(MmsDecodeBuffer &decodeBuffer, uint32_t &headerLen);
45      bool DecodeApplicationHeader(MmsDecodeBuffer &decodeBuffer, uint32_t &headerLen);
46      bool DecodeContentLocation(MmsDecodeBuffer &decodeBuffer, uint32_t &Len);
47      bool DecodeContentId(MmsDecodeBuffer &decodeBuffer, uint32_t &Len);
48      bool DecodeContentDisposition(MmsDecodeBuffer &decodeBuffer, uint32_t &Len);
49      bool DecodeDispositionParameter(MmsDecodeBuffer &decodeBuffer, uint32_t dispLen, uint32_t beginPos);
50  
51      bool EncodeContentLocation(MmsEncodeBuffer &encodeBuffer);
52      bool EncodeContentId(MmsEncodeBuffer &encodeBuffer);
53      bool EncodeContentDisposition(MmsEncodeBuffer &encodeBuffer);
54      bool EncodeContentTransferEncoding(MmsEncodeBuffer &encodeBuffer);
55      bool EncodeMmsBodyPartHeader(MmsEncodeBuffer &encodeBuffer);
56  
57  public:
58      bool GetContentId(std::string &contentId);
59      bool GetContentLocation(std::string &contentLocation);
60      bool GetContentDisposition(std::string &contentDisposition);
61      bool GetContentTransferEncoding(std::string &contentTransferEncoding);
62  
63      bool SetContentId(std::string contentId);
64      bool SetContentLocation(std::string contentLocation);
65      bool SetContentDisposition(std::string contentDisposition);
66      bool SetContentTransferEncoding(std::string contentTransferEncoding);
67  
68  private:
69      const std::string DISPOSITION_FROM_DATA = "from-data";
70      const std::string DISPOSITION_ATTACHMENT = "attachment";
71      const std::string DISPOSITION_INLINE = "inline";
72  
73      std::string strContentTransferEncoding_ = "binary";
74      std::string strFileName_ = "";
75      std::string strDisposition_ = "";
76      std::string strContentID_ = "";
77      std::string strContentLocation_ = "";
78      std::map<std::string, std::string> textMap_;
79  };
80  } // namespace Telephony
81  } // namespace OHOS
82  #endif
83