1e5d0e473Sopenharmony_ci/*
2e5d0e473Sopenharmony_ci * Copyright (C) 2021 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_H
17e5d0e473Sopenharmony_ci#define SMS_SERVICE_H
18e5d0e473Sopenharmony_ci
19e5d0e473Sopenharmony_ci#include <memory>
20e5d0e473Sopenharmony_ci
21e5d0e473Sopenharmony_ci#include "sms_interface_stub.h"
22e5d0e473Sopenharmony_ci#include "sms_state_handler.h"
23e5d0e473Sopenharmony_ci#include "system_ability.h"
24e5d0e473Sopenharmony_ci#include "system_ability_definition.h"
25e5d0e473Sopenharmony_ci
26e5d0e473Sopenharmony_cinamespace OHOS {
27e5d0e473Sopenharmony_cinamespace Telephony {
28e5d0e473Sopenharmony_cienum ServiceRunningState { STATE_NOT_START, STATE_RUNNING };
29e5d0e473Sopenharmony_ci
30e5d0e473Sopenharmony_ciclass SmsService : public SystemAbility, public SmsInterfaceStub, public std::enable_shared_from_this<SmsService> {
31e5d0e473Sopenharmony_ci    DECLARE_DELAYED_SINGLETON(SmsService)
32e5d0e473Sopenharmony_ci    DECLARE_SYSTEM_ABILITY(SmsService) // necessary
33e5d0e473Sopenharmony_cipublic:
34e5d0e473Sopenharmony_ci    void OnStart() override;
35e5d0e473Sopenharmony_ci    void OnStop() override;
36e5d0e473Sopenharmony_ci    int32_t Dump(std::int32_t fd, const std::vector<std::u16string> &args) override;
37e5d0e473Sopenharmony_ci    std::string GetBindTime();
38e5d0e473Sopenharmony_ci    void InsertSessionAndDetail(int32_t slotId, const std::string &telephone, const std::string &text,
39e5d0e473Sopenharmony_ci        uint16_t &dataBaseId);
40e5d0e473Sopenharmony_ci
41e5d0e473Sopenharmony_ci    /**
42e5d0e473Sopenharmony_ci     * Sends a text Type SMS message.
43e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
44e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
45e5d0e473Sopenharmony_ci     * the device
46e5d0e473Sopenharmony_ci     * @param desAddr Indicates the destination address
47e5d0e473Sopenharmony_ci     * @param scAddr Indicates the sms center address
48e5d0e473Sopenharmony_ci     * @param text Indicates sms content
49e5d0e473Sopenharmony_ci     * @param sendCallback Indicates callback for send out
50e5d0e473Sopenharmony_ci     * @param deliverCallback Indicates callback for delivery to destination user
51e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send message success.
52e5d0e473Sopenharmony_ci     */
53e5d0e473Sopenharmony_ci    int32_t SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
54e5d0e473Sopenharmony_ci        const std::u16string text, const sptr<ISendShortMessageCallback> &sendCallback,
55e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliveryCallback, bool isMmsApp = true) override;
56e5d0e473Sopenharmony_ci
57e5d0e473Sopenharmony_ci    /**
58e5d0e473Sopenharmony_ci     * Sends a text Type SMS message withot save to database.
59e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
60e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
61e5d0e473Sopenharmony_ci     * the device
62e5d0e473Sopenharmony_ci     * @param desAddr Indicates the destination address
63e5d0e473Sopenharmony_ci     * @param scAddr Indicates the sms center address
64e5d0e473Sopenharmony_ci     * @param text Indicates sms content
65e5d0e473Sopenharmony_ci     * @param sendCallback Indicates callback for send out
66e5d0e473Sopenharmony_ci     * @param deliverCallback Indicates callback for delivery to destination user
67e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send message success.
68e5d0e473Sopenharmony_ci     */
69e5d0e473Sopenharmony_ci    int32_t SendMessageWithoutSave(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr,
70e5d0e473Sopenharmony_ci        const std::u16string text, const sptr<ISendShortMessageCallback> &sendCallback,
71e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliveryCallback) override;
72e5d0e473Sopenharmony_ci
73e5d0e473Sopenharmony_ci    /**
74e5d0e473Sopenharmony_ci     * Sends a data Type SMS message.
75e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
76e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
77e5d0e473Sopenharmony_ci     * the device
78e5d0e473Sopenharmony_ci     * @param desAddr Indicates the destination address
79e5d0e473Sopenharmony_ci     * @param scAddr Indicates the sms center address
80e5d0e473Sopenharmony_ci     * @param port Indicates the port of data sms
81e5d0e473Sopenharmony_ci     * @param data Indicates the array of data sms
82e5d0e473Sopenharmony_ci     * @param dataLen Indicates the array length of data sms
83e5d0e473Sopenharmony_ci     * @param sendCallback Indicates callback for send out
84e5d0e473Sopenharmony_ci     * @param deliverCallback Indicates callback for delivery to destination user
85e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send message success.
86e5d0e473Sopenharmony_ci     */
87e5d0e473Sopenharmony_ci    int32_t SendMessage(int32_t slotId, const std::u16string desAddr, const std::u16string scAddr, uint16_t port,
88e5d0e473Sopenharmony_ci        const uint8_t *data, uint16_t dataLen, const sptr<ISendShortMessageCallback> &sendCallback,
89e5d0e473Sopenharmony_ci        const sptr<IDeliveryShortMessageCallback> &deliveryCallback) override;
90e5d0e473Sopenharmony_ci
91e5d0e473Sopenharmony_ci    /**
92e5d0e473Sopenharmony_ci     * Sets the address for the Short Message Service Center (SMSC) based on a
93e5d0e473Sopenharmony_ci     * specified slot ID
94e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
95e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
96e5d0e473Sopenharmony_ci     * the device
97e5d0e473Sopenharmony_ci     * @param scAddr Indicates the sms center address
98e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if set smsc success
99e5d0e473Sopenharmony_ci     */
100e5d0e473Sopenharmony_ci    int32_t SetSmscAddr(int32_t slotId, const std::u16string &scAddr) override;
101e5d0e473Sopenharmony_ci
102e5d0e473Sopenharmony_ci    /**
103e5d0e473Sopenharmony_ci     * Obtains the SMSC address based on a specified slot ID.
104e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
105e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
106e5d0e473Sopenharmony_ci     * the device
107e5d0e473Sopenharmony_ci     * @param smscAddress [out]
108e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if get smsc success.
109e5d0e473Sopenharmony_ci     */
110e5d0e473Sopenharmony_ci    int32_t GetSmscAddr(int32_t slotId, std::u16string &smscAddress) override;
111e5d0e473Sopenharmony_ci
112e5d0e473Sopenharmony_ci    /**
113e5d0e473Sopenharmony_ci     * Add a sms to sim card.
114e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
115e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
116e5d0e473Sopenharmony_ci     * the device
117e5d0e473Sopenharmony_ci     * @param smsc Indicates the sms center address
118e5d0e473Sopenharmony_ci     * @param pdu Indicates the sms pdu data
119e5d0e473Sopenharmony_ci     * @param status Indicates the sms status, read or not
120e5d0e473Sopenharmony_ci     * @return Returns {@code true} if add sim success; returns {@code false}
121e5d0e473Sopenharmony_ci     */
122e5d0e473Sopenharmony_ci    int32_t AddSimMessage(
123e5d0e473Sopenharmony_ci        int32_t slotId, const std::u16string &smsc, const std::u16string &pdu, SimMessageStatus status) override;
124e5d0e473Sopenharmony_ci
125e5d0e473Sopenharmony_ci    /**
126e5d0e473Sopenharmony_ci     * Delete a sms in the sim card.
127e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
128e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
129e5d0e473Sopenharmony_ci     * the device
130e5d0e473Sopenharmony_ci     * @param msgIndex Indicates the sim sms index in sim card
131e5d0e473Sopenharmony_ci     * @return Returns {@code true} if delete sim success; returns {@code false}
132e5d0e473Sopenharmony_ci     */
133e5d0e473Sopenharmony_ci    int32_t DelSimMessage(int32_t slotId, uint32_t msgIndex) override;
134e5d0e473Sopenharmony_ci
135e5d0e473Sopenharmony_ci    /**
136e5d0e473Sopenharmony_ci     * Update a sms in the sim card.
137e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
138e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
139e5d0e473Sopenharmony_ci     * the device
140e5d0e473Sopenharmony_ci     * @param msgIndex Indicates the sim sms index in sim card
141e5d0e473Sopenharmony_ci     * @param newStatusIndicates the sms status, read or not
142e5d0e473Sopenharmony_ci     * @param pdu Indicates the sms pdu data
143e5d0e473Sopenharmony_ci     * @param smsc Indicates the sms center address
144e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if update sim success
145e5d0e473Sopenharmony_ci     */
146e5d0e473Sopenharmony_ci    int32_t UpdateSimMessage(int32_t slotId, uint32_t msgIndex, SimMessageStatus newStatus, const std::u16string &pdu,
147e5d0e473Sopenharmony_ci        const std::u16string &smsc) override;
148e5d0e473Sopenharmony_ci
149e5d0e473Sopenharmony_ci    /**
150e5d0e473Sopenharmony_ci     * Get sim card all the sms.
151e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
152e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
153e5d0e473Sopenharmony_ci     * the device
154e5d0e473Sopenharmony_ci     * @param message Indicates all SMS messages of sim card
155e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if get all sim messages success
156e5d0e473Sopenharmony_ci     */
157e5d0e473Sopenharmony_ci    int32_t GetAllSimMessages(int32_t slotId, std::vector<ShortMessage> &message) override;
158e5d0e473Sopenharmony_ci
159e5d0e473Sopenharmony_ci    /**
160e5d0e473Sopenharmony_ci     * Configure a cell broadcast in a certain band range.
161e5d0e473Sopenharmony_ci     * @param slotId [in]
162e5d0e473Sopenharmony_ci     * @param enable [in]
163e5d0e473Sopenharmony_ci     * @param fromMsgId [in]
164e5d0e473Sopenharmony_ci     * @param toMsgId [in]
165e5d0e473Sopenharmony_ci     * @param netType [in]
166e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if set CB config success
167e5d0e473Sopenharmony_ci     */
168e5d0e473Sopenharmony_ci    int32_t SetCBConfig(int32_t slotId, bool enable, uint32_t fromMsgId, uint32_t toMsgId, uint8_t netType) override;
169e5d0e473Sopenharmony_ci
170e5d0e473Sopenharmony_ci    /**
171e5d0e473Sopenharmony_ci     * enable or disable IMS SMS.
172e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
173e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
174e5d0e473Sopenharmony_ci     * the device
175e5d0e473Sopenharmony_ci     * @param enable Indicates enable or disable Ims sms
176e5d0e473Sopenharmony_ci     * ranging {@code 0} disable Ims sms {@code 1} enable Ims sms
177e5d0e473Sopenharmony_ci     * @return Returns {@code true} if enable or disable Ims Sms success; returns
178e5d0e473Sopenharmony_ci     * {@code false} otherwise
179e5d0e473Sopenharmony_ci     */
180e5d0e473Sopenharmony_ci    bool SetImsSmsConfig(int32_t slotId, int32_t enable) override;
181e5d0e473Sopenharmony_ci
182e5d0e473Sopenharmony_ci    /**
183e5d0e473Sopenharmony_ci     * Set the Default Sms Slot Id To SmsService
184e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
185e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
186e5d0e473Sopenharmony_ci     * the device
187e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if set default sms slot id success
188e5d0e473Sopenharmony_ci     */
189e5d0e473Sopenharmony_ci    int32_t SetDefaultSmsSlotId(int32_t slotId) override;
190e5d0e473Sopenharmony_ci
191e5d0e473Sopenharmony_ci    /**
192e5d0e473Sopenharmony_ci     * Get the Default Sms Slot Id From SmsService
193e5d0e473Sopenharmony_ci     * @return Returns default sms slot id
194e5d0e473Sopenharmony_ci     */
195e5d0e473Sopenharmony_ci    int32_t GetDefaultSmsSlotId() override;
196e5d0e473Sopenharmony_ci
197e5d0e473Sopenharmony_ci    /**
198e5d0e473Sopenharmony_ci     * @brief GetDefaultSmsSlotId
199e5d0e473Sopenharmony_ci     * Get the Default Sms Sim Id From SmsService
200e5d0e473Sopenharmony_ci     * @return int32_t
201e5d0e473Sopenharmony_ci     */
202e5d0e473Sopenharmony_ci    int32_t GetDefaultSmsSimId(int32_t &simId) override;
203e5d0e473Sopenharmony_ci
204e5d0e473Sopenharmony_ci    /**
205e5d0e473Sopenharmony_ci     * @brief SplitMessage
206e5d0e473Sopenharmony_ci     * calculate Sms Message Split Segment count
207e5d0e473Sopenharmony_ci     * @param Indicates input message
208e5d0e473Sopenharmony_ci     * @param splitMessage Indicates the split information
209e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if split message success
210e5d0e473Sopenharmony_ci     */
211e5d0e473Sopenharmony_ci    int32_t SplitMessage(const std::u16string &message, std::vector<std::u16string> &splitMessage) override;
212e5d0e473Sopenharmony_ci
213e5d0e473Sopenharmony_ci    /**
214e5d0e473Sopenharmony_ci     * calculate the Sms Message Segments Info
215e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
216e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
217e5d0e473Sopenharmony_ci     * the device
218e5d0e473Sopenharmony_ci     * @param message Indicates input message
219e5d0e473Sopenharmony_ci     * @param force7BitCode Indicates sms encode type, 7bit or not
220e5d0e473Sopenharmony_ci     * @param info Indicates output sms segment
221e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if get sms segments info
222e5d0e473Sopenharmony_ci     */
223e5d0e473Sopenharmony_ci    int32_t GetSmsSegmentsInfo(int32_t slotId, const std::u16string &message, bool force7BitCode,
224e5d0e473Sopenharmony_ci        ISmsServiceInterface::SmsSegmentsInfo &info) override;
225e5d0e473Sopenharmony_ci
226e5d0e473Sopenharmony_ci    /**
227e5d0e473Sopenharmony_ci     * Check Sms Is supported Ims newtwork
228e5d0e473Sopenharmony_ci     * Hide this for inner system use
229e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
230e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
231e5d0e473Sopenharmony_ci     * the device
232e5d0e473Sopenharmony_ci     * @param isSupported Whether ims SMS is supported
233e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if successful
234e5d0e473Sopenharmony_ci     */
235e5d0e473Sopenharmony_ci    int32_t IsImsSmsSupported(int32_t slotId, bool &isSupported) override;
236e5d0e473Sopenharmony_ci
237e5d0e473Sopenharmony_ci    /**
238e5d0e473Sopenharmony_ci     * Get the Ims Short Message Format 3gpp/3gpp2
239e5d0e473Sopenharmony_ci     * Hide this for inner system use
240e5d0e473Sopenharmony_ci     * @return int32_t
241e5d0e473Sopenharmony_ci     */
242e5d0e473Sopenharmony_ci    int32_t GetImsShortMessageFormat(std::u16string &format) override;
243e5d0e473Sopenharmony_ci
244e5d0e473Sopenharmony_ci    /**
245e5d0e473Sopenharmony_ci     * Check whether it is supported Sms Capability
246e5d0e473Sopenharmony_ci     * @return Returns {@code true} if support sms; returns {@code false}
247e5d0e473Sopenharmony_ci     */
248e5d0e473Sopenharmony_ci    bool HasSmsCapability() override;
249e5d0e473Sopenharmony_ci
250e5d0e473Sopenharmony_ci    /**
251e5d0e473Sopenharmony_ci     * @brief GetServiceRunningState
252e5d0e473Sopenharmony_ci     * Get service running state
253e5d0e473Sopenharmony_ci     * @return ServiceRunningState
254e5d0e473Sopenharmony_ci     */
255e5d0e473Sopenharmony_ci    int32_t GetServiceRunningState();
256e5d0e473Sopenharmony_ci
257e5d0e473Sopenharmony_ci    /**
258e5d0e473Sopenharmony_ci     * @brief GetSpendTime
259e5d0e473Sopenharmony_ci     * Get service start spend time
260e5d0e473Sopenharmony_ci     * @return Spend time
261e5d0e473Sopenharmony_ci     */
262e5d0e473Sopenharmony_ci    int64_t GetSpendTime();
263e5d0e473Sopenharmony_ci
264e5d0e473Sopenharmony_ci    /**
265e5d0e473Sopenharmony_ci     * @brief GetEndTime
266e5d0e473Sopenharmony_ci     * Get service start finish time
267e5d0e473Sopenharmony_ci     * @return Spend time
268e5d0e473Sopenharmony_ci     */
269e5d0e473Sopenharmony_ci    int64_t GetEndTime();
270e5d0e473Sopenharmony_ci
271e5d0e473Sopenharmony_ci    /**
272e5d0e473Sopenharmony_ci     * create a short message
273e5d0e473Sopenharmony_ci     * @param pdu Indicates pdu code,
274e5d0e473Sopenharmony_ci     * @param specification Indicates 3gpp or 3gpp2
275e5d0e473Sopenharmony_ci     * @param ShortMessage Indicates a short message object
276e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if CreateMessage success
277e5d0e473Sopenharmony_ci     */
278e5d0e473Sopenharmony_ci    int32_t CreateMessage(std::string pdu, std::string specification, ShortMessage &message) override;
279e5d0e473Sopenharmony_ci
280e5d0e473Sopenharmony_ci    /**
281e5d0e473Sopenharmony_ci     * mms base64 encode
282e5d0e473Sopenharmony_ci     * @param src Indicates source string,
283e5d0e473Sopenharmony_ci     * @param dest Indicates destination string
284e5d0e473Sopenharmony_ci     * @return Returns {@code true} if encode success; returns {@code false} otherwise
285e5d0e473Sopenharmony_ci     */
286e5d0e473Sopenharmony_ci    bool GetBase64Encode(std::string src, std::string &dest) override;
287e5d0e473Sopenharmony_ci
288e5d0e473Sopenharmony_ci    /**
289e5d0e473Sopenharmony_ci     * mms base64 decode
290e5d0e473Sopenharmony_ci     * @param src Indicates source string,
291e5d0e473Sopenharmony_ci     * @param dest Indicates destination string
292e5d0e473Sopenharmony_ci     * @return Returns {@code true} if decode success; returns {@code false} otherwise
293e5d0e473Sopenharmony_ci     */
294e5d0e473Sopenharmony_ci    bool GetBase64Decode(std::string src, std::string &dest) override;
295e5d0e473Sopenharmony_ci
296e5d0e473Sopenharmony_ci    /**
297e5d0e473Sopenharmony_ci     * Get Encode String
298e5d0e473Sopenharmony_ci     * @param encodeString Indicates output string,
299e5d0e473Sopenharmony_ci     * @param charset Indicates character set,
300e5d0e473Sopenharmony_ci     * @param valLength Indicates input string length,
301e5d0e473Sopenharmony_ci     * @param strEncodeString Indicates input string
302e5d0e473Sopenharmony_ci     * @return Returns {@code true} if decode success; returns {@code false} otherwise
303e5d0e473Sopenharmony_ci     */
304e5d0e473Sopenharmony_ci    bool GetEncodeStringFunc(
305e5d0e473Sopenharmony_ci        std::string &encodeString, uint32_t charset, uint32_t valLength, std::string strEncodeString) override;
306e5d0e473Sopenharmony_ci
307e5d0e473Sopenharmony_ci    /**
308e5d0e473Sopenharmony_ci     * Send a Mms.
309e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
310e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
311e5d0e473Sopenharmony_ci     * the device
312e5d0e473Sopenharmony_ci     * @param mmsc Indicates service center of mms
313e5d0e473Sopenharmony_ci     * @param data Indicates mms pdu byte array
314e5d0e473Sopenharmony_ci     * @param ua Indicates mms user agent
315e5d0e473Sopenharmony_ci     * @param uaprof Indicates mms user agent profile
316e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send mms success; returns {@code false} otherwise
317e5d0e473Sopenharmony_ci     */
318e5d0e473Sopenharmony_ci    int32_t SendMms(int32_t slotId, const std::u16string &mmsc, const std::u16string &data, const std::u16string &ua,
319e5d0e473Sopenharmony_ci        const std::u16string &uaprof, int64_t &time, bool isMmsApp = false) override;
320e5d0e473Sopenharmony_ci
321e5d0e473Sopenharmony_ci    /**
322e5d0e473Sopenharmony_ci     * Service after Send Mms.
323e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
324e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
325e5d0e473Sopenharmony_ci     * the device
326e5d0e473Sopenharmony_ci     * @param time Indicates tiemstamp of hap call NAPI function
327e5d0e473Sopenharmony_ci     * @param dataBaseId id of mms in sqlite
328e5d0e473Sopenharmony_ci     * @param sessionBucket  object of DataShareValuesBucket to upate sqlite
329e5d0e473Sopenharmony_ci     * @param sendStatus status of mms sent
330e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if send mms success; returns {@code false} otherwise
331e5d0e473Sopenharmony_ci     */
332e5d0e473Sopenharmony_ci    void ServiceAfterSendMmsComplete(int32_t slotId, int64_t &time, uint16_t &dataBaseId,
333e5d0e473Sopenharmony_ci        DataShare::DataShareValuesBucket &sessionBucket, std::string  &sendStatus);
334e5d0e473Sopenharmony_ci
335e5d0e473Sopenharmony_ci    /**
336e5d0e473Sopenharmony_ci     * Download a Mms.
337e5d0e473Sopenharmony_ci     * @param slotId Indicates the card slot index number,
338e5d0e473Sopenharmony_ci     * ranging from {@code 0} to the maximum card slot index number supported by
339e5d0e473Sopenharmony_ci     * the device
340e5d0e473Sopenharmony_ci     * @param mmsc Indicates service center of mms
341e5d0e473Sopenharmony_ci     * @param data Indicates mms pdu byte array
342e5d0e473Sopenharmony_ci     * @param ua Indicates mms user agent
343e5d0e473Sopenharmony_ci     * @param uaprof Indicates mms user agent profile
344e5d0e473Sopenharmony_ci     * @return Returns {@code 0} if download mms success; returns {@code false} otherwise
345e5d0e473Sopenharmony_ci     */
346e5d0e473Sopenharmony_ci    int32_t DownloadMms(int32_t slotId, const std::u16string &mmsc, std::u16string &data,
347e5d0e473Sopenharmony_ci        const std::u16string &ua, const std::u16string &uaprof) override;
348e5d0e473Sopenharmony_ci    int32_t OnRilAdapterHostDied(int32_t slotId);
349e5d0e473Sopenharmony_ci
350e5d0e473Sopenharmony_ciprivate:
351e5d0e473Sopenharmony_ci    bool Init();
352e5d0e473Sopenharmony_ci    void WaitCoreServiceToInit();
353e5d0e473Sopenharmony_ci    bool CheckSmsPermission(const sptr<ISendShortMessageCallback> &sendCallback);
354e5d0e473Sopenharmony_ci    bool ValidDestinationAddress(std::string desAddr);
355e5d0e473Sopenharmony_ci    void TrimSmscAddr(std::string &sca);
356e5d0e473Sopenharmony_ci    bool CheckSimMessageIndexValid(int32_t slotId, uint32_t msgIndex);
357e5d0e473Sopenharmony_ci    void InsertSmsMmsInfo(int32_t slotId, uint16_t sessionId, const std::string &number,
358e5d0e473Sopenharmony_ci        const std::string &text, uint16_t &dataBaseId);
359e5d0e473Sopenharmony_ci    bool InsertSession(bool isNewSession, uint16_t messageCount, const std::string &number, const std::string &text);
360e5d0e473Sopenharmony_ci    bool QuerySessionByTelephone(const std::string &telephone, uint16_t &sessionId, uint16_t &messageCount);
361e5d0e473Sopenharmony_ci    void UpdateSmsContact(const std::string &address);
362e5d0e473Sopenharmony_ci
363e5d0e473Sopenharmony_ciprivate:
364e5d0e473Sopenharmony_ci    int64_t bindTime_ = 0;
365e5d0e473Sopenharmony_ci    int64_t endTime_ = 0;
366e5d0e473Sopenharmony_ci    int64_t spendTime_ = 0;
367e5d0e473Sopenharmony_ci    bool registerToService_ = false;
368e5d0e473Sopenharmony_ci    static constexpr const char *SMS_MMS_INFO_MSG_STATE_SENDING = "1";
369e5d0e473Sopenharmony_ci    ServiceRunningState state_ = ServiceRunningState::STATE_NOT_START;
370e5d0e473Sopenharmony_ci    std::shared_ptr<SmsStateHandler> smsStateHandler_;
371e5d0e473Sopenharmony_ci    const std::string SMS_MMS_INFO = "datashare:///com.ohos.smsmmsability/sms_mms/sms_mms_info";
372e5d0e473Sopenharmony_ci    const std::string SMS_SESSION = "datashare:///com.ohos.smsmmsability/sms_mms/session";
373e5d0e473Sopenharmony_ci};
374e5d0e473Sopenharmony_ci} // namespace Telephony
375e5d0e473Sopenharmony_ci} // namespace OHOS
376e5d0e473Sopenharmony_ci#endif