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_ADDRESS_H
17#define MMS_ADDRESS_H
18
19#include <string>
20
21#include "mms_decode_buffer.h"
22#include "mms_encode_buffer.h"
23#include "mms_codec_type.h"
24
25namespace OHOS {
26namespace Telephony {
27class MmsAddress {
28public:
29    /**
30     * @brief Defines the type of mms address.
31     */
32    using MmsAddressType = enum {
33        /**
34         * Indicates the type of mms address is unknown.
35         */
36        ADDRESS_TYPE_UNKNOWN = 0,
37        /**
38         * Indicates the type of mms address is PLMN.
39         */
40        ADDRESS_TYPE_PLMN = 1,
41        /**
42         * Indicates the type of mms address is IPV4.
43         */
44        ADDRESS_TYPE_IPV4 = 2,
45        /**
46         * Indicates the type of mms address is IPV6.
47         */
48        ADDRESS_TYPE_IPV6 = 3,
49        /**
50         * Indicates the type of mms address is EMAIL.
51         */
52        ADDRESS_TYPE_EMAIL = 4,
53    };
54
55    /**
56     * @brief Get the Address String
57     * for example: +8610086/TYPE=PLMN
58     *
59     * @return returns the Mms Address String
60     */
61    std::string GetAddressString();
62
63    /**
64     * @brief Get the Address Charset
65     * for example: MmsCharSets::UTF_8
66     *
67     * @return returns the Address Character {@link MmsCharSets}.
68     */
69    MmsCharSets GetAddressCharset();
70
71    /**
72     * @brief Get the Address Type
73     * for example: MmsAddressType::ADDRESS_TYPE_PLMN
74     *
75     * @return returns the type of mms address {@link MmsAddressType}.
76     */
77    MmsAddressType GetAddressType();
78
79    /**
80     * @brief Set the Mms Address String
81     * for example: +8610086/TYPE=PLMN
82     *
83     * @param addressString the Mms Address String, for example: +8610086/TYPE=PLMN
84     * @param charset the Address Character {@link MmsCharSets}.
85     */
86    void SetMmsAddressString(const std::string addressString, MmsCharSets charset = MmsCharSets::UTF_8);
87
88    /**
89     * @brief Construct a new Mms Address
90     *
91     * @param addressString the Mms Address String, for example: +8610086/TYPE=PLMN
92     * @param charset the Address Character {@link MmsCharSets}.
93     */
94    MmsAddress(const std::string addressString, MmsCharSets charset = MmsCharSets::UTF_8);
95
96    /**
97     * @brief Construct a new Mms Address
98     */
99    MmsAddress();
100
101    /**
102     * @brief Destroy the Mms Address
103     */
104    ~MmsAddress();
105private:
106    void CheckAddressType();
107
108    std::string addressString_;
109    MmsCharSets charset_ = MmsCharSets::UTF_8;
110    MmsAddressType addressType_ = ADDRESS_TYPE_UNKNOWN;
111};
112} // namespace Telephony
113} // namespace OHOS
114#endif
115