1e5d0e473Sopenharmony_ci/*
2e5d0e473Sopenharmony_ci * Copyright (C) 2021-2023 Huawei Device Co., Ltd.
3e5d0e473Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4e5d0e473Sopenharmony_ci * you may not use this file except in compliance with the License.
5e5d0e473Sopenharmony_ci * You may obtain a copy of the License at
6e5d0e473Sopenharmony_ci *
7e5d0e473Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8e5d0e473Sopenharmony_ci *
9e5d0e473Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10e5d0e473Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11e5d0e473Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12e5d0e473Sopenharmony_ci * See the License for the specific language governing permissions and
13e5d0e473Sopenharmony_ci * limitations under the License.
14e5d0e473Sopenharmony_ci */
15e5d0e473Sopenharmony_ci
16e5d0e473Sopenharmony_ci#ifndef SMS_SERVICE_INTERFACE_H
17e5d0e473Sopenharmony_ci#define SMS_SERVICE_INTERFACE_H
18e5d0e473Sopenharmony_ci
19e5d0e473Sopenharmony_ci#include "i_delivery_short_message_callback.h"
20e5d0e473Sopenharmony_ci#include "i_send_short_message_callback.h"
21e5d0e473Sopenharmony_ci#include "iremote_broker.h"
22e5d0e473Sopenharmony_ci#include "short_message.h"
23e5d0e473Sopenharmony_ci
24e5d0e473Sopenharmony_cinamespace OHOS {
25e5d0e473Sopenharmony_cinamespace Telephony {
26e5d0e473Sopenharmony_ciclass ISmsServiceInterface : public IRemoteBroker {
27e5d0e473Sopenharmony_cipublic:
28e5d0e473Sopenharmony_ci    /**
29e5d0e473Sopenharmony_ci     * @brief SimMessageStatus
30e5d0e473Sopenharmony_ci     * from 3GPP TS 27.005 V4.1.0 (2001-09) section 3 Parameter Definitions
31e5d0e473Sopenharmony_ci     */
32e5d0e473Sopenharmony_ci    using SimMessageStatus = enum {
33e5d0e473Sopenharmony_ci        /**
34e5d0e473Sopenharmony_ci         * REC UNREAD received unread message.
35e5d0e473Sopenharmony_ci         */
36e5d0e473Sopenharmony_ci        SIM_MESSAGE_STATUS_UNREAD = 0,
37e5d0e473Sopenharmony_ci
38e5d0e473Sopenharmony_ci        /**
39e5d0e473Sopenharmony_ci         * REC READ received read message.
40e5d0e473Sopenharmony_ci         */
41e5d0e473Sopenharmony_ci        SIM_MESSAGE_STATUS_READ = 1,
42e5d0e473Sopenharmony_ci
43e5d0e473Sopenharmony_ci        /**
44e5d0e473Sopenharmony_ci         * "STO UNSENT" stored unsent message (only applicable to SMs).
45e5d0e473Sopenharmony_ci         */
46e5d0e473Sopenharmony_ci        SIM_MESSAGE_STATUS_UNSENT = 2,
47e5d0e473Sopenharmony_ci
48e5d0e473Sopenharmony_ci        /**
49e5d0e473Sopenharmony_ci         * "STO SENT" stored sent message (only applicable to SMs).
50e5d0e473Sopenharmony_ci         */
51e5d0e473Sopenharmony_ci        SIM_MESSAGE_STATUS_SENT = 3,
52e5d0e473Sopenharmony_ci    };
53e5d0e473Sopenharmony_ci
54e5d0e473Sopenharmony_ci    /**
55e5d0e473Sopenharmony_ci     * @brief Indicates the encoding scheme of Sms.
56e5d0e473Sopenharmony_ci     * from  3GPP TS 23.038 [9] DCS
57e5d0e473Sopenharmony_ci     */
58e5d0e473Sopenharmony_ci    enum class SmsEncodingScheme {
59e5d0e473Sopenharmony_ci        /**
60e5d0e473Sopenharmony_ci         * Indicates an unknown encoding scheme.
61e5d0e473Sopenharmony_ci         */
62e5d0e473Sopenharmony_ci        SMS_ENCODING_UNKNOWN = 0,
63e5d0e473Sopenharmony_ci
64e5d0e473Sopenharmony_ci        /**
65e5d0e473Sopenharmony_ci         * Indicates that the encoding scheme is 7-digit.
66e5d0e473Sopenharmony_ci         */
67e5d0e473Sopenharmony_ci        SMS_ENCODING_7BIT,
68e5d0e473Sopenharmony_ci
69e5d0e473Sopenharmony_ci        /**
70e5d0e473Sopenharmony_ci         * Indicates that the encoding scheme is 8-digit.
71e5d0e473Sopenharmony_ci         */
72e5d0e473Sopenharmony_ci        SMS_ENCODING_8BIT,
73e5d0e473Sopenharmony_ci
74e5d0e473Sopenharmony_ci        /**
75e5d0e473Sopenharmony_ci         * Indicates that the encoding schemes is 16-digit.
76e5d0e473Sopenharmony_ci         */
77e5d0e473Sopenharmony_ci        SMS_ENCODING_16BIT,
78e5d0e473Sopenharmony_ci    };
79e5d0e473Sopenharmony_ci
80e5d0e473Sopenharmony_ci    /**
81e5d0e473Sopenharmony_ci     * @brief Indicates the SMS message segment information.
82e5d0e473Sopenharmony_ci     */
83e5d0e473Sopenharmony_ci    struct SmsSegmentsInfo {
84e5d0e473Sopenharmony_ci        /**
85e5d0e473Sopenharmony_ci         * Indicates the split count for the SMS message segment information.
86e5d0e473Sopenharmony_ci         */
87e5d0e473Sopenharmony_ci        int32_t msgSegCount = 0;
88e5d0e473Sopenharmony_ci        /**
89e5d0e473Sopenharmony_ci         * Indicates the encoding count for the SMS message segment information.
90e5d0e473Sopenharmony_ci         */
91e5d0e473Sopenharmony_ci        int32_t msgEncodingCount = 0;
92e5d0e473Sopenharmony_ci        /**
93e5d0e473Sopenharmony_ci         * Indicates the remaining encoding count for the SMS message segment information.
94e5d0e473Sopenharmony_ci         */
95e5d0e473Sopenharmony_ci        int32_t msgRemainCount = 0;
96e5d0e473Sopenharmony_ci
97e5d0e473Sopenharmony_ci        /**
98e5d0e473Sopenharmony_ci         * Defines the encoding scheme of sms segment.
99e5d0e473Sopenharmony_ci         */
100e5d0e473Sopenharmony_ci        enum class SmsSegmentCodeScheme {
101e5d0e473Sopenharmony_ci            /**
102e5d0e473Sopenharmony_ci             * Indicates an unknown encoding scheme.
103e5d0e473Sopenharmony_ci             */
104e5d0e473Sopenharmony_ci            SMS_ENCODING_UNKNOWN = 0,
105e5d0e473Sopenharmony_ci            /**
106e5d0e473Sopenharmony_ci             * Indicates that the encoding scheme is 7-digit.
107e5d0e473Sopenharmony_ci             */
108e5d0e473Sopenharmony_ci            SMS_ENCODING_7BIT,
109e5d0e473Sopenharmony_ci            /**
110e5d0e473Sopenharmony_ci             * Indicates that the encoding scheme is 8-digit.
111e5d0e473Sopenharmony_ci             */
112e5d0e473Sopenharmony_ci            SMS_ENCODING_8BIT,
113e5d0e473Sopenharmony_ci            /**
114e5d0e473Sopenharmony_ci             * Indicates that the encoding scheme is 16-digit.
115e5d0e473Sopenharmony_ci             */
116e5d0e473Sopenharmony_ci            SMS_ENCODING_16BIT,
117e5d0e473Sopenharmony_ci        } msgCodeScheme = SmsSegmentCodeScheme::SMS_ENCODING_UNKNOWN;
118e5d0e473Sopenharmony_ci    };
119e5d0e473Sopenharmony_ci
120e5d0e473Sopenharmony_ci    virtual ~ISmsServiceInterface() = default;
121e5d0e473Sopenharmony_ci
122e5d0e473Sopenharmony_ci    /**
123e5d0e473Sopenharmony_ci     * @brief Sends a text type SMS message.
124e5d0e473Sopenharmony_ci     *
125e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
126e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
127e5d0e473Sopenharmony_ci     * @param desAddr [in], indicates the destination address.
128e5d0e473Sopenharmony_ci     * @param scAddr [in], indicates the sms center address.
129e5d0e473Sopenharmony_ci     * @param text [in], indicates sms content.
130e5d0e473Sopenharmony_ci     * @param sendCallback [in], indicates callback for send out.
131e5d0e473Sopenharmony_ci     * @param deliverCallback [in], indicates callback for delivery to destination user.
132e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
133e5d0e473Sopenharmony_ci     */
134e5d0e473Sopenharmony_ci    virtual int32_t SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
135e5d0e473Sopenharmony_ci        const std::u16string text, const sptr<ISendShortMessageCallback> &sendCallback,
136e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliverCallback, bool isMmsApp = true) = 0;
137e5d0e473Sopenharmony_ci
138e5d0e473Sopenharmony_ci    /**
139e5d0e473Sopenharmony_ci     * @brief Sends a text type SMS message without saving to database.
140e5d0e473Sopenharmony_ci     *
141e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
142e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
143e5d0e473Sopenharmony_ci     * @param desAddr [in], indicates the destination address.
144e5d0e473Sopenharmony_ci     * @param scAddr [in], indicates the sms center address.
145e5d0e473Sopenharmony_ci     * @param text [in], indicates sms content.
146e5d0e473Sopenharmony_ci     * @param sendCallback [in], indicates callback for send out.
147e5d0e473Sopenharmony_ci     * @param deliverCallback [in], indicates callback for delivery to destination user.
148e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
149e5d0e473Sopenharmony_ci     */
150e5d0e473Sopenharmony_ci    virtual int32_t SendMessageWithoutSave(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
151e5d0e473Sopenharmony_ci        const std::u16string text, const sptr<ISendShortMessageCallback> &sendCallback,
152e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliverCallback) = 0;
153e5d0e473Sopenharmony_ci
154e5d0e473Sopenharmony_ci    /**
155e5d0e473Sopenharmony_ci     * @brief Sends a data type SMS message.
156e5d0e473Sopenharmony_ci     *
157e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
158e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
159e5d0e473Sopenharmony_ci     * @param desAddr [in], indicates the destination address.
160e5d0e473Sopenharmony_ci     * @param scAddr [in], indicates the sms center address.
161e5d0e473Sopenharmony_ci     * @param port [in], indicates the port of data sms.
162e5d0e473Sopenharmony_ci     * @param data [in], indicates the array of data sms.
163e5d0e473Sopenharmony_ci     * @param dataLen [in], indicates the array length of data sms.
164e5d0e473Sopenharmony_ci     * @param sendCallback [in], indicates callback for send out.
165e5d0e473Sopenharmony_ci     * @param deliverCallback [in], indicates callback for delivery to destination user.
166e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
167e5d0e473Sopenharmony_ci     */
168e5d0e473Sopenharmony_ci    virtual int32_t SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
169e5d0e473Sopenharmony_ci        uint16_t port, const uint8_t *data, uint16_t dataLen, const sptr<ISendShortMessageCallback> &sendCallback,
170e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliverCallback) = 0;
171e5d0e473Sopenharmony_ci
172e5d0e473Sopenharmony_ci    /**
173e5d0e473Sopenharmony_ci     * @brief Sets the address for the Short Message Service Center (SMSC) based on a specified slot ID.
174e5d0e473Sopenharmony_ci     *
175e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
176e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
177e5d0e473Sopenharmony_ci     * @param scAddr [in], indicates the sms center address.
178e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
179e5d0e473Sopenharmony_ci     */
180e5d0e473Sopenharmony_ci    virtual int32_t SetSmscAddr(int32_t slotId, const std::u16string &scAddr) = 0;
181e5d0e473Sopenharmony_ci
182e5d0e473Sopenharmony_ci    /**
183e5d0e473Sopenharmony_ci     * @brief Obtains the SMSC address based on a specified slot ID.
184e5d0e473Sopenharmony_ci     *
185e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
186e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
187e5d0e473Sopenharmony_ci     * @param smscAddress [out]
188e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
189e5d0e473Sopenharmony_ci     */
190e5d0e473Sopenharmony_ci    virtual int32_t GetSmscAddr(int32_t slotId, std::u16string &smscAddress) = 0;
191e5d0e473Sopenharmony_ci
192e5d0e473Sopenharmony_ci    /**
193e5d0e473Sopenharmony_ci     * @brief Add a sms to sim card.
194e5d0e473Sopenharmony_ci     *
195e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
196e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
197e5d0e473Sopenharmony_ci     * @param smsc [in], indicates the short message service center.
198e5d0e473Sopenharmony_ci     * @param pdu [in], indicates the protocol data unit of message.
199e5d0e473Sopenharmony_ci     * @param status [in], indicates the status of sim message.
200e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
201e5d0e473Sopenharmony_ci     */
202e5d0e473Sopenharmony_ci    virtual int32_t AddSimMessage(
203e5d0e473Sopenharmony_ci        int32_t slotId, const std::u16string &smsc, const std::u16string &pdu, SimMessageStatus status) = 0;
204e5d0e473Sopenharmony_ci
205e5d0e473Sopenharmony_ci    /**
206e5d0e473Sopenharmony_ci     * @brief Delete a sms in the sim card.
207e5d0e473Sopenharmony_ci     *
208e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
209e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
210e5d0e473Sopenharmony_ci     * @param msgIndex [in], indicates the message index.
211e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
212e5d0e473Sopenharmony_ci     */
213e5d0e473Sopenharmony_ci    virtual int32_t DelSimMessage(int32_t slotId, uint32_t msgIndex) = 0;
214e5d0e473Sopenharmony_ci
215e5d0e473Sopenharmony_ci    /**
216e5d0e473Sopenharmony_ci     * @brief Update a sms in the sim card.
217e5d0e473Sopenharmony_ci     *
218e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
219e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
220e5d0e473Sopenharmony_ci     * @param msgIndex [in], indicates the message index.
221e5d0e473Sopenharmony_ci     * @param newStatus [in], indicates the new status of the sim message.
222e5d0e473Sopenharmony_ci     * @param pdu [in], indicates the protocol data unit of message.
223e5d0e473Sopenharmony_ci     * @param smsc [in], indicates the short message service center.
224e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
225e5d0e473Sopenharmony_ci     */
226e5d0e473Sopenharmony_ci    virtual int32_t UpdateSimMessage(int32_t slotId, uint32_t msgIndex, SimMessageStatus newStatus,
227e5d0e473Sopenharmony_ci        const std::u16string &pdu, const std::u16string &smsc) = 0;
228e5d0e473Sopenharmony_ci
229e5d0e473Sopenharmony_ci    /**
230e5d0e473Sopenharmony_ci     * @brief Get sim card all the sms.
231e5d0e473Sopenharmony_ci     *
232e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
233e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
234e5d0e473Sopenharmony_ci     * @param message [out], indicates all SMS messages of sim card.
235e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
236e5d0e473Sopenharmony_ci     */
237e5d0e473Sopenharmony_ci    virtual int32_t GetAllSimMessages(int32_t slotId, std::vector<ShortMessage> &message) = 0;
238e5d0e473Sopenharmony_ci
239e5d0e473Sopenharmony_ci    /**
240e5d0e473Sopenharmony_ci     * @brief Configure a cell broadcast in a certain band range.
241e5d0e473Sopenharmony_ci     *
242e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
243e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
244e5d0e473Sopenharmony_ci     * @param enable [in], indicates whether to enable cell broadcast.
245e5d0e473Sopenharmony_ci     * @param fromMsgId [in], indicates the start message ID.
246e5d0e473Sopenharmony_ci     * @param toMsgId [in], indicates the end message ID.
247e5d0e473Sopenharmony_ci     * @param netType [in], indicates the network type.
248e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
249e5d0e473Sopenharmony_ci     */
250e5d0e473Sopenharmony_ci    virtual int32_t SetCBConfig(int32_t slotId, bool enable, uint32_t fromMsgId, uint32_t toMsgId, uint8_t netType) = 0;
251e5d0e473Sopenharmony_ci
252e5d0e473Sopenharmony_ci    /**
253e5d0e473Sopenharmony_ci     * @brief Enable or disable IMS SMS.
254e5d0e473Sopenharmony_ci     *
255e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
256e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
257e5d0e473Sopenharmony_ci     * @param enable Indicates enable or disable Ims sms
258e5d0e473Sopenharmony_ci     * ranging {@code 0} disable Ims sms {@code 1} enable Ims sms
259e5d0e473Sopenharmony_ci     * @return Returns {@code true} if enable or disable Ims Sms success; returns {@code false} otherwise.
260e5d0e473Sopenharmony_ci     */
261e5d0e473Sopenharmony_ci    virtual bool SetImsSmsConfig(int32_t slotId, int32_t enable) = 0;
262e5d0e473Sopenharmony_ci
263e5d0e473Sopenharmony_ci    /**
264e5d0e473Sopenharmony_ci     * @brief Set the Default Sms Slot Id To SmsService
265e5d0e473Sopenharmony_ci     *
266e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
267e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
268e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
269e5d0e473Sopenharmony_ci     */
270e5d0e473Sopenharmony_ci    virtual int32_t SetDefaultSmsSlotId(int32_t slotId) = 0;
271e5d0e473Sopenharmony_ci
272e5d0e473Sopenharmony_ci    /**
273e5d0e473Sopenharmony_ci     * @brief Get the Default Sms Slot Id From SmsService
274e5d0e473Sopenharmony_ci     *
275e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
276e5d0e473Sopenharmony_ci     */
277e5d0e473Sopenharmony_ci    virtual int32_t GetDefaultSmsSlotId() = 0;
278e5d0e473Sopenharmony_ci
279e5d0e473Sopenharmony_ci    /**
280e5d0e473Sopenharmony_ci     * @brief Get the Default Sms Sim Id From SmsService
281e5d0e473Sopenharmony_ci     *
282e5d0e473Sopenharmony_ci     * @param simId [out], indicates the sms sim index number.
283e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
284e5d0e473Sopenharmony_ci     */
285e5d0e473Sopenharmony_ci    virtual int32_t GetDefaultSmsSimId(int32_t &simId) = 0;
286e5d0e473Sopenharmony_ci
287e5d0e473Sopenharmony_ci    /**
288e5d0e473Sopenharmony_ci     * @brief Calculate Sms Message Split Segment count
289e5d0e473Sopenharmony_ci     *
290e5d0e473Sopenharmony_ci     * @param message [in], indicates input message.
291e5d0e473Sopenharmony_ci     * @param splitMessage [out], indicates the split information.
292e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
293e5d0e473Sopenharmony_ci     */
294e5d0e473Sopenharmony_ci    virtual int32_t SplitMessage(const std::u16string &message, std::vector<std::u16string> &splitMessage) = 0;
295e5d0e473Sopenharmony_ci
296e5d0e473Sopenharmony_ci    /**
297e5d0e473Sopenharmony_ci     * @brief Calculate the Sms Message Segments Info
298e5d0e473Sopenharmony_ci     *
299e5d0e473Sopenharmony_ci     * @param slotId [in], indicates the card slot index number,
300e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device.
301e5d0e473Sopenharmony_ci     * @param message [in], indicates input message.
302e5d0e473Sopenharmony_ci     * @param force7BitCode [in], indicates sms encode type, 7bit or not.
303e5d0e473Sopenharmony_ci     * @param info [out], indicates output sms segment.
304e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if get sms segments info.
305e5d0e473Sopenharmony_ci     */
306e5d0e473Sopenharmony_ci    virtual int32_t GetSmsSegmentsInfo(
307e5d0e473Sopenharmony_ci        int32_t slotId, const std::u16string &message, bool force7BitCode, SmsSegmentsInfo &info) = 0;
308e5d0e473Sopenharmony_ci
309e5d0e473Sopenharmony_ci    /**
310e5d0e473Sopenharmony_ci     * @brief Check Sms Is supported Ims newtwork
311e5d0e473Sopenharmony_ci     *
312e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number, ranging from {@code 0} to the maximum card slot index number
313e5d0e473Sopenharmony_ci     * supported by the device.
314e5d0e473Sopenharmony_ci     * @param isSupported Whether ims SMS is supported.
315e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
316e5d0e473Sopenharmony_ci     */
317e5d0e473Sopenharmony_ci    virtual int32_t IsImsSmsSupported(int32_t slotId, bool &isSupported) = 0;
318e5d0e473Sopenharmony_ci
319e5d0e473Sopenharmony_ci    /**
320e5d0e473Sopenharmony_ci     * @brief Get the Ims Short Message Format 3gpp/3gpp2
321e5d0e473Sopenharmony_ci     *
322e5d0e473Sopenharmony_ci     * @param format Ims short message format
323e5d0e473Sopenharmony_ci     * @return int32_t, returns {@code 0} if success.
324e5d0e473Sopenharmony_ci     */
325e5d0e473Sopenharmony_ci    virtual int32_t GetImsShortMessageFormat(std::u16string &format) = 0;
326e5d0e473Sopenharmony_ci
327e5d0e473Sopenharmony_ci    /**
328e5d0e473Sopenharmony_ci     * @brief Check whether it is supported Sms Capability
329e5d0e473Sopenharmony_ci     *
330e5d0e473Sopenharmony_ci     * @return true
331e5d0e473Sopenharmony_ci     * @return false
332e5d0e473Sopenharmony_ci     */
333e5d0e473Sopenharmony_ci    virtual bool HasSmsCapability() = 0;
334e5d0e473Sopenharmony_ci
335e5d0e473Sopenharmony_ci    /**
336e5d0e473Sopenharmony_ci     * @brief Create a short message
337e5d0e473Sopenharmony_ci     *
338e5d0e473Sopenharmony_ci     * @param pdu Indicates pdu code,
339e5d0e473Sopenharmony_ci     * @param specification Indicates 3gpp or 3gpp2
340e5d0e473Sopenharmony_ci     * @param message Indicates a short message object
341e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if CreateMessage success
342e5d0e473Sopenharmony_ci     */
343e5d0e473Sopenharmony_ci    virtual int32_t CreateMessage(std::string pdu, std::string specification, ShortMessage &message) = 0;
344e5d0e473Sopenharmony_ci
345e5d0e473Sopenharmony_ci    /**
346e5d0e473Sopenharmony_ci     * @brief Mms base64 encode
347e5d0e473Sopenharmony_ci     *
348e5d0e473Sopenharmony_ci     * @param src Indicates source string,
349e5d0e473Sopenharmony_ci     * @param dest Indicates destination string
350e5d0e473Sopenharmony_ci     * @return Returns {@code true} if encode success; returns {@code false} otherwise
351e5d0e473Sopenharmony_ci     */
352e5d0e473Sopenharmony_ci    virtual bool GetBase64Encode(std::string src, std::string &dest) = 0;
353e5d0e473Sopenharmony_ci
354e5d0e473Sopenharmony_ci    /**
355e5d0e473Sopenharmony_ci     * @brief Mms base64 decode
356e5d0e473Sopenharmony_ci     *
357e5d0e473Sopenharmony_ci     * @param src Indicates source string,
358e5d0e473Sopenharmony_ci     * @param dest Indicates destination string
359e5d0e473Sopenharmony_ci     * @return Returns {@code true} if decode success; returns {@code false} otherwise
360e5d0e473Sopenharmony_ci     */
361e5d0e473Sopenharmony_ci    virtual bool GetBase64Decode(std::string src, std::string &dest) = 0;
362e5d0e473Sopenharmony_ci
363e5d0e473Sopenharmony_ci    /**
364e5d0e473Sopenharmony_ci     * @brief Get Encode String
365e5d0e473Sopenharmony_ci     *
366e5d0e473Sopenharmony_ci     * @param encodeString Indicates output string,
367e5d0e473Sopenharmony_ci     * @param charset Indicates character set,
368e5d0e473Sopenharmony_ci     * @param valLength Indicates input string length,
369e5d0e473Sopenharmony_ci     * @param strEncodeString Indicates input string
370e5d0e473Sopenharmony_ci     * @return Returns {@code true} if decode success; returns {@code false} otherwise
371e5d0e473Sopenharmony_ci     */
372e5d0e473Sopenharmony_ci    virtual bool GetEncodeStringFunc(
373e5d0e473Sopenharmony_ci        std::string &encodeString, uint32_t charset, uint32_t valLength, std::string strEncodeString) = 0;
374e5d0e473Sopenharmony_ci
375e5d0e473Sopenharmony_ci    /**
376e5d0e473Sopenharmony_ci     * Send a mms
377e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
378e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device
379e5d0e473Sopenharmony_ci     * @param mmsc Indicates service center of mms
380e5d0e473Sopenharmony_ci     * @param data Indicates file path of mms pdu
381e5d0e473Sopenharmony_ci     * @param ua Indicates mms user agent
382e5d0e473Sopenharmony_ci     * @param uaprof Indicates mms user agent profile
383e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send mms success
384e5d0e473Sopenharmony_ci     */
385e5d0e473Sopenharmony_ci    virtual int32_t SendMms(int32_t slotId, const std::u16string &mmsc, const std::u16string &data,
386e5d0e473Sopenharmony_ci        const std::u16string &ua, const std::u16string &uaprof, int64_t &time, bool isMmsApp = false) = 0;
387e5d0e473Sopenharmony_ci
388e5d0e473Sopenharmony_ci    /**
389e5d0e473Sopenharmony_ci     * Download a mms
390e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
391e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by the device
392e5d0e473Sopenharmony_ci     * @param mmsc Indicates service center of mms
393e5d0e473Sopenharmony_ci     * @param data Indicates file path of mms pdu
394e5d0e473Sopenharmony_ci     * @param ua Indicates mms user agent
395e5d0e473Sopenharmony_ci     * @param uaprof Indicates mms user agent profile
396e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if download mms success
397e5d0e473Sopenharmony_ci     */
398e5d0e473Sopenharmony_ci    virtual int32_t DownloadMms(int32_t slotId, const std::u16string &mmsc, std::u16string &data,
399e5d0e473Sopenharmony_ci        const std::u16string &ua, const std::u16string &uaprof) = 0;
400e5d0e473Sopenharmony_ci
401e5d0e473Sopenharmony_cipublic:
402e5d0e473Sopenharmony_ci    DECLARE_INTERFACE_DESCRIPTOR(u"OHOS.Telephony.ISmsServiceInterface");
403e5d0e473Sopenharmony_ci};
404e5d0e473Sopenharmony_ci} // namespace Telephony
405e5d0e473Sopenharmony_ci} // namespace OHOS
406e5d0e473Sopenharmony_ci#endif
407