• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 #include "notification_constant.h"
17 #include "notification_content.h"
18 #include "notification_normal_content.h"
19 #include "refbase.h"
20 #include <fuzzer/FuzzedDataProvider.h>
21 #include <memory>
22 #include <new>
23 #include <string>
24 #include <vector>
25 #define private public
26 #define protected public
27 #include "advanced_notification_service.h"
28 #include "ans_manager_proxy.h"
29 #include "ans_manager_stub.h"
30 #include "ans_subscriber_stub.h"
31 #undef private
32 #undef protected
33 #include "ansmanagerstubannex_fuzzer.h"
34 #include "notification_request.h"
35 #include "ans_permission_def.h"
36 
37 constexpr uint8_t SLOT_TYPE_NUM = 5;
38 
39 namespace OHOS {
GetCurrentTime()40     inline int64_t GetCurrentTime()
41     {
42         auto now = std::chrono::system_clock::now();
43         auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
44         return duration.count();
45     }
46 
DoSomethingInterestingWithMyAPI(FuzzedDataProvider * fuzzData)47     bool DoSomethingInterestingWithMyAPI(FuzzedDataProvider *fuzzData)
48     {
49         std::string stringData = fuzzData->ConsumeRandomLengthString();
50         int32_t intData = fuzzData->ConsumeIntegral<int32_t>();
51         bool boolData = fuzzData->ConsumeBool();
52         Notification::AdvancedNotificationService ansManagerStub;
53         MessageParcel datas;
54         MessageParcel reply;
55         MessageOption flags;
56         // test HandleIsNeedSilentInDoNotDisturbMode function
57         ansManagerStub.HandleIsNeedSilentInDoNotDisturbMode(datas, reply);
58         // test HandleRegisterSwingCallback function
59         #ifdef NOTIFICATION_SMART_REMINDER_SUPPORTED
60         ansManagerStub.HandleRegisterSwingCallback(datas, reply);
61         #endif
62         ansManagerStub.OnRemoteRequest(0, datas, reply, flags);
63         ansManagerStub.OnRemoteRequest((int) Notification::NotificationInterfaceCode::PUBLISH_NOTIFICATION,
64             datas, reply, flags);
65         sptr<Notification::NotificationRequest> notification = new Notification::NotificationRequest();
66         notification->SetOwnerUid(fuzzData->ConsumeIntegral<int32_t>());
67         notification->SetCreatorUid(fuzzData->ConsumeIntegral<int32_t>());
68         notification->SetSlotType(Notification::NotificationConstant::SlotType::LIVE_VIEW);
69         auto content = std::make_shared<Notification::NotificationLiveViewContent>();
70         notification->SetContent(std::make_shared<Notification::NotificationContent>(content));
71 
72         sptr<Notification::NotificationBundleOption> bundleOption = new Notification::NotificationBundleOption();
73         bundleOption->SetBundleName(fuzzData->ConsumeRandomLengthString());
74         bundleOption->SetUid(fuzzData->ConsumeIntegral<int32_t>());
75 
76         sptr<Notification::NotificationButtonOption> buttonOption = new Notification::NotificationButtonOption();
77 
78         sptr<Notification::AnsSubscriberStub> subscriber = new Notification::AnsSubscriberStub();
79         sptr<Notification::NotificationSubscribeInfo> info = new Notification::NotificationSubscribeInfo();
80 
81         sptr<Notification::NotificationSlot> slot = new Notification::NotificationSlot();
82         std::vector<sptr<Notification::NotificationSlot>> slots {slot};
83 
84         uint8_t type = fuzzData->ConsumeIntegral<uint8_t>() % SLOT_TYPE_NUM;
85 
86         sptr<Notification::NotificationDoNotDisturbDate> distribuDate = new Notification::NotificationDoNotDisturbDate();
87 
88         datas.WriteString(stringData);
89         datas.WriteParcelable(notification);
90         ansManagerStub.HandlePublish(datas, reply);
91         datas.WriteParcelable(notification);
92         ansManagerStub.HandlePublishNotificationForIndirectProxy(datas, reply);
93         datas.WriteInt32(intData);
94         datas.WriteString(stringData);
95         datas.WriteInt32(intData);
96         ansManagerStub.HandleCancelAsBundle(datas, reply);
97         datas.WriteParcelable(bundleOption);
98         datas.WriteInt32(intData);
99         ansManagerStub.HandleCancelAsBundleOption(datas, reply);
100         datas.WriteInt32(intData);
101         ansManagerStub.HandleCancelAll(datas, reply);
102         datas.WriteInt32(intData);
103         datas.WriteString(stringData);
104         datas.WriteInt32(intData);
105         ansManagerStub.HandleCancel(datas, reply);
106         datas.WriteParcelable(bundleOption);
107         datas.WriteInt32(intData);
108         datas.WriteInt32(intData);
109         ansManagerStub.HandleCancelAsBundleAndUser(datas, reply);
110         datas.WriteInt32(type);
111         ansManagerStub.HandleAddSlotByType(datas, reply);
112         ansManagerStub.HandleAddSlots(datas, reply);
113         datas.WriteInt32(type);
114         ansManagerStub.HandleRemoveSlotByType(datas, reply);
115         ansManagerStub.HandleRemoveAllSlots(datas, reply);
116         ansManagerStub.HandleGetSlots(datas, reply);
117         datas.WriteInt32(type);
118         ansManagerStub.HandleGetSlotByType(datas, reply);
119         datas.WriteParcelable(bundleOption);
120         ansManagerStub.HandleGetSlotNumAsBundle(datas, reply);
121         datas.WriteParcelable(bundleOption);
122         datas.WriteInt32(intData);
123         ansManagerStub.HandleSetSlotFlagsAsBundle(datas, reply);
124         datas.WriteParcelable(bundleOption);
125         ansManagerStub.HandleGetSlotFlagsAsBundle(datas, reply);
126         datas.WriteInt32(intData);
127         ansManagerStub.HandleGetActiveNotifications(datas, reply);
128         ansManagerStub.HandleGetActiveNotificationNums(datas, reply);
129         ansManagerStub.HandleGetAllActiveNotifications(datas, reply);
130         std::vector<std::string> stringVector { stringData };
131         datas.WriteStringVector(stringVector);
132         ansManagerStub.HandleGetSpecialActiveNotifications(datas, reply);
133         datas.WriteParcelable(bundleOption);
134         datas.WriteInt32(intData);
135         datas.WriteString(stringData);
136         datas.WriteStringVector(stringVector);
137         ansManagerStub.HandleGetActiveNotificationByFilter(datas, reply);
138         datas.WriteString(stringData);
139         ansManagerStub.HandleCanPublishAsBundle(datas, reply);
140         datas.WriteParcelable(notification);
141         datas.WriteString(stringData);
142         ansManagerStub.HandlePublishAsBundle(datas, reply);
143         datas.WriteInt32(intData);
144         ansManagerStub.HandleSetNotificationBadgeNum(datas, reply);
145         ansManagerStub.HandleGetBundleImportance(datas, reply);
146         datas.WriteParcelable(distribuDate);
147         ansManagerStub.HandleSetDoNotDisturbDate(datas, reply);
148         ansManagerStub.HandleGetDoNotDisturbDate(datas, reply);
149         ansManagerStub.HandleDoesSupportDoNotDisturbMode(datas, reply);
150         datas.WriteInt32(intData);
151         ansManagerStub.HandleGetDoNotDisturbProfile(datas, reply);
152         datas.WriteParcelable(notification);
153         datas.WriteInt32(intData);
154         ansManagerStub.HandlePublishContinuousTaskNotification(datas, reply);
155         datas.WriteString(stringData);
156         datas.WriteInt32(intData);
157         ansManagerStub.HandleCancelContinuousTaskNotification(datas, reply);
158         ansManagerStub.HandleIsNotificationPolicyAccessGranted(datas, reply);
159         datas.WriteParcelable(bundleOption);
160         datas.WriteInt32(intData);
161         datas.WriteParcelable(buttonOption);
162         ansManagerStub.HandleTriggerLocalLiveView(datas, reply);
163         datas.WriteParcelable(bundleOption);
164         datas.WriteInt32(intData);
165         datas.WriteString(stringData);
166         datas.WriteInt32(intData);
167         ansManagerStub.HandleRemoveNotification(datas, reply);
168         ansManagerStub.HandleRemoveAllNotifications(datas, reply);
169         datas.WriteInt32(intData);
170         datas.WriteStringVector(stringVector);
171         datas.WriteInt32(intData);
172         ansManagerStub.HandleRemoveNotifications(datas, reply);
173         datas.WriteString(stringData);
174         datas.WriteInt32(intData);
175         ansManagerStub.HandleDelete(datas, reply);
176         datas.WriteParcelable(bundleOption);
177         ansManagerStub.HandleDeleteByBundle(datas, reply);
178         ansManagerStub.HandleDeleteAll(datas, reply);
179         datas.WriteParcelable(bundleOption);
180         datas.WriteInt32(intData);
181         ansManagerStub.HandleGetSlotByBundle(datas, reply);
182         ansManagerStub.HandleGetSlotsByBundle(datas, reply);
183         datas.WriteParcelable(bundleOption);
184         ansManagerStub.HandleUpdateSlots(datas, reply);
185         datas.WriteString(stringData);
186         datas.WriteRemoteObject(subscriber);
187         datas.WriteBool(boolData);
188         if (boolData) {
189             datas.WriteRemoteObject(subscriber);
190         }
191         ansManagerStub.HandleRequestEnableNotification(datas, reply);
192         datas.WriteString(stringData);
193         datas.WriteBool(boolData);
194         ansManagerStub.HandleSetNotificationsEnabledForBundle(datas, reply);
195         datas.WriteString(stringData);
196         datas.WriteBool(boolData);
197         ansManagerStub.HandleSetNotificationsEnabledForAllBundles(datas, reply);
198         datas.WriteString(stringData);
199         datas.WriteParcelable(bundleOption);
200         datas.WriteBool(boolData);
201         ansManagerStub.HandleSetNotificationsEnabledForSpecialBundle(datas, reply);
202         datas.WriteParcelable(bundleOption);
203         datas.WriteBool(boolData);
204         ansManagerStub.HandleSetShowBadgeEnabledForBundle(datas, reply);
205         datas.WriteParcelable(bundleOption);
206         ansManagerStub.HandleGetShowBadgeEnabledForBundle(datas, reply);
207         ansManagerStub.HandleGetShowBadgeEnabled(datas, reply);
208         datas.WriteRemoteObject(subscriber);
209         datas.WriteBool(boolData);
210         if (boolData) {
211             datas.WriteParcelable(info);
212         }
213         ansManagerStub.HandleSubscribe(datas, reply);
214         datas.WriteRemoteObject(subscriber);
215         ansManagerStub.HandleSubscribeSelf(datas, reply);
216         datas.WriteRemoteObject(subscriber);
217         datas.WriteBool(boolData);
218         if (boolData) {
219             datas.WriteParcelable(info);
220         }
221         datas.WriteBool(boolData);
222         ansManagerStub.HandleSubscribeLocalLiveView(datas, reply);
223         datas.WriteRemoteObject(subscriber);
224         datas.WriteBool(boolData);
225         if (boolData) {
226             datas.WriteParcelable(info);
227         }
228         ansManagerStub.HandleUnsubscribe(datas, reply);
229         ansManagerStub.HandleIsAllowedNotify(datas, reply);
230         ansManagerStub.HandleIsAllowedNotifySelf(datas, reply);
231         datas.WriteRemoteObject(subscriber);
232         ansManagerStub.HandleCanPopEnableNotificationDialog(datas, reply);
233         ansManagerStub.HandleRemoveEnableNotificationDialog(datas, reply);
234         datas.WriteParcelable(bundleOption);
235         ansManagerStub.HandleIsSpecialBundleAllowedNotify(datas, reply);
236         datas.WriteString(stringData);
237         datas.WriteInt32(intData);
238         ansManagerStub.HandleCancelGroup(datas, reply);
239         datas.WriteParcelable(bundleOption);
240         datas.WriteString(stringData);
241         ansManagerStub.HandleRemoveGroupByBundle(datas, reply);
242         ansManagerStub.HandleIsDistributedEnabled(datas, reply);
243         datas.WriteBool(boolData);
244         ansManagerStub.HandleEnableDistributed(datas, reply);
245         datas.WriteParcelable(bundleOption);
246         datas.WriteBool(boolData);
247         ansManagerStub.HandleEnableDistributedByBundle(datas, reply);
248         datas.WriteBool(boolData);
249         ansManagerStub.HandleEnableDistributedSelf(datas, reply);
250         datas.WriteParcelable(bundleOption);
251         ansManagerStub.HandleIsDistributedEnableByBundle(datas, reply);
252         ansManagerStub.HandleGetDeviceRemindType(datas, reply);
253         datas.WriteString(stringData);
254         datas.WriteString(stringData);
255         datas.WriteInt32(intData);
256         datas.WriteInt32(intData);
257         ansManagerStub.HandleShellDump(datas, reply);
258         datas.WriteString(stringData);
259         ansManagerStub.HandleIsSupportTemplate(datas, reply);
260         datas.WriteInt32(intData);
261         ansManagerStub.HandleIsSpecialUserAllowedNotifyByUser(datas, reply);
262         datas.WriteInt32(intData);
263         datas.WriteBool(boolData);
264         ansManagerStub.HandleSetNotificationsEnabledByUser(datas, reply);
265         datas.WriteInt32(intData);
266         ansManagerStub.HandleDeleteAllByUser(datas, reply);
267         datas.WriteInt32(intData);
268         datas.WriteParcelable(distribuDate);
269         ansManagerStub.HandleSetDoNotDisturbDateByUser(datas, reply);
270         datas.WriteInt32(intData);
271         ansManagerStub.HandleGetDoNotDisturbDateByUser(datas, reply);
272         datas.WriteParcelable(bundleOption);
273         datas.WriteInt32(type);
274         datas.WriteBool(boolData);
275         datas.WriteBool(boolData);
276         ansManagerStub.HandleSetEnabledForBundleSlot(datas, reply);
277         datas.WriteParcelable(bundleOption);
278         datas.WriteInt32(type);
279         ansManagerStub.HandleGetEnabledForBundleSlot(datas, reply);
280         datas.WriteInt32(type);
281         ansManagerStub.HandleGetEnabledForBundleSlotSelf(datas, reply);
282         datas.WriteInt32(intData);
283         datas.WriteBool(boolData);
284         ansManagerStub.HandleDistributedSetEnabledWithoutApp(datas, reply);
285         datas.WriteInt32(intData);
286         ansManagerStub.HandleDistributedGetEnabledWithoutApp(datas, reply);
287         datas.WriteInt32(intData);
288         datas.WriteInt32(intData);
289         ansManagerStub.HandleSetBadgeNumber(datas, reply);
290         datas.WriteParcelable(bundleOption);
291         datas.WriteInt32(intData);
292         ansManagerStub.HandleSetBadgeNumberByBundle(datas, reply);
293         ansManagerStub.HandleGetAllNotificationEnableStatus(datas, reply);
294         ansManagerStub.HandleRegisterPushCallback(datas, reply);
295         ansManagerStub.HandleUnregisterPushCallback(datas, reply);
296         ansManagerStub.HandleAddDoNotDisturbProfiles(datas, reply);
297         datas.WriteString(stringData);
298         datas.WriteBool(boolData);
299         ansManagerStub.HandleSetDistributedEnabledBySlot(datas, reply);
300         datas.WriteString(stringData);
301         ansManagerStub.HandleGetAllDistributedEnabledBundles(datas, reply);
302         datas.WriteInt32(intData);
303         ansManagerStub.HandleGetAllNotificationsBySlotType(datas, reply);
304         datas.WriteString(stringData);
305         ansManagerStub.HandleAllowUseReminder(datas, reply);
306         datas.WriteString(stringData);
307         datas.WriteInt32(intData);
308         datas.WriteInt32(intData);
309         ansManagerStub.HandleSetDeviceStatus(datas, reply);
310         datas.WriteParcelable(bundleOption);
311         datas.WriteString(stringData);
312         datas.WriteBool(boolData);
313         ansManagerStub.HandleSetDistributedEnabledByBundle(datas, reply);
314         ansManagerStub.HandleRemoveDoNotDisturbProfiles(datas, reply);
315         datas.WriteParcelable(bundleOption);
316         datas.WriteString(stringData);
317         ansManagerStub.HandleIsDistributedEnabledByBundle(datas, reply);
318         datas.WriteString(stringData);
319         datas.WriteBool(boolData);
320         ansManagerStub.HandleSetSmartReminderEnabled(datas, reply);
321         datas.WriteString(stringData);
322         ansManagerStub.HandleIsSmartReminderEnabled(datas, reply);
323         datas.WriteString(stringData);
324         datas.WriteString(stringData);
325         ansManagerStub.HandleSetAdditionConfig(datas, reply);
326         datas.WriteParcelable(bundleOption);
327         datas.WriteInt32(intData);
328         ansManagerStub.HandleCancelAsBundleWithAgent(datas, reply);
329         datas.WriteString(stringData);
330         datas.WriteInt32(intData);
331         ansManagerStub.HandleSetTargetDeviceStatus(datas, reply);
332         datas.WriteString(stringData);
333         ansManagerStub.HandleGetDeviceStatus(datas, reply);
334         sptr<Notification::NotificationRequest> notification2 = new Notification::NotificationRequest();
335         notification2->SetOwnerUid(fuzzData->ConsumeIntegral<int32_t>());
336         notification2->SetCreatorUid(fuzzData->ConsumeIntegral<int32_t>());
337         notification2->SetSlotType(Notification::NotificationConstant::SlotType::SOCIAL_COMMUNICATION);
338         auto content2 = std::make_shared<Notification::NotificationNormalContent>();
339         notification2->SetContent(std::make_shared<Notification::NotificationContent>(content2));
340         ansManagerStub.Publish(stringData, notification2);
341         int notificationId = fuzzData->ConsumeIntegral<int>();
342         ansManagerStub.Cancel(notificationId, stringData, "");
343         ansManagerStub.CancelAll("");
344         int32_t userId = fuzzData->ConsumeIntegral<int32_t>();
345         ansManagerStub.CancelAsBundle(notificationId, stringData, userId);
346         Notification::NotificationConstant::SlotType slotType = Notification::NotificationConstant::SlotType(type);
347         ansManagerStub.AddSlotByType(slotType);
348         ansManagerStub.AddSlots(slots);
349         ansManagerStub.RemoveSlotByType(slotType);
350         ansManagerStub.RemoveAllSlots();
351         ansManagerStub.GetSlotByType(slotType, slot);
352         ansManagerStub.GetSlots(slots);
353         uint64_t num = fuzzData->ConsumeIntegral<uint64_t>();
354         ansManagerStub.GetSlotNumAsBundle(bundleOption, num);
355         std::vector<sptr<Notification::NotificationRequest>> notifications;
356         ansManagerStub.GetActiveNotifications(notifications, "");
357         ansManagerStub.GetActiveNotificationNums(num);
358         std::vector<sptr<Notification::Notification>> notificationss;
359         ansManagerStub.GetAllActiveNotifications(notificationss);
360         std::vector<std::string> key;
361         ansManagerStub.GetSpecialActiveNotifications(key, notificationss);
362         bool canPublish = fuzzData->ConsumeBool();
363         ansManagerStub.CanPublishAsBundle(stringData, canPublish);
364         ansManagerStub.PublishAsBundle(notification, stringData);
365         ansManagerStub.SetNotificationBadgeNum(num);
366         int importance = fuzzData->ConsumeIntegral<int>();
367         ansManagerStub.GetBundleImportance(importance);
368         bool granted = fuzzData->ConsumeBool();
369         ansManagerStub.HasNotificationPolicyAccessPermission(granted);
370         int32_t removeReason = fuzzData->ConsumeIntegral<int32_t>();
371         ansManagerStub.RemoveNotification(bundleOption, notificationId, stringData, removeReason);
372         ansManagerStub.RemoveAllNotifications(bundleOption);
373         ansManagerStub.Delete(stringData, removeReason);
374         ansManagerStub.DeleteByBundle(bundleOption);
375         ansManagerStub.DeleteAll();
376         ansManagerStub.GetSlotsByBundle(bundleOption, slots);
377         ansManagerStub.UpdateSlots(bundleOption, slots);
378         sptr<Notification::AnsDialogCallback> dialogCallback = nullptr;
379         sptr<IRemoteObject> callerToken = nullptr;
380         ansManagerStub.RequestEnableNotification(stringData, dialogCallback, callerToken);
381         bool enabled = fuzzData->ConsumeBool();
382         ansManagerStub.SetNotificationsEnabledForBundle(stringData, enabled);
383         ansManagerStub.SetNotificationsEnabledForSpecialBundle(stringData, bundleOption, enabled);
384         ansManagerStub.SetShowBadgeEnabledForBundle(bundleOption, enabled);
385         ansManagerStub.GetShowBadgeEnabledForBundle(bundleOption, enabled);
386         ansManagerStub.GetShowBadgeEnabled(enabled);
387         bool allowed = fuzzData->ConsumeBool();
388         ansManagerStub.IsAllowedNotify(allowed);
389         ansManagerStub.IsSpecialBundleAllowedNotify(bundleOption, allowed);
390         ansManagerStub.CancelGroup(stringData, "");
391         ansManagerStub.RemoveGroupByBundle(bundleOption, stringData);
392         sptr<Notification::NotificationDoNotDisturbDate> date = new Notification::NotificationDoNotDisturbDate();
393         ansManagerStub.SetDoNotDisturbDate(date);
394         ansManagerStub.GetDoNotDisturbDate(date);
395         bool doesSupport = fuzzData->ConsumeBool();
396         ansManagerStub.DoesSupportDoNotDisturbMode(doesSupport);
397         ansManagerStub.IsDistributedEnabled(enabled);
398         ansManagerStub.EnableDistributedByBundle(bundleOption, enabled);
399         ansManagerStub.EnableDistributedSelf(enabled);
400         ansManagerStub.IsDistributedEnableByBundle(bundleOption, enabled);
401         Notification::NotificationConstant::RemindType remindType;
402         ansManagerStub.GetDeviceRemindType(remindType);
403         sptr<Notification::NotificationRequest> request = new Notification::NotificationRequest();
404         ansManagerStub.PublishContinuousTaskNotification(request);
405         ansManagerStub.CancelContinuousTaskNotification(stringData, notificationId);
406         bool support = fuzzData->ConsumeBool();
407         ansManagerStub.IsSupportTemplate(stringData, support);
408         ansManagerStub.IsSpecialUserAllowedNotify(userId, allowed);
409         int32_t deviceIds = fuzzData->ConsumeIntegral<int32_t>();
410         ansManagerStub.SetNotificationsEnabledByUser(deviceIds, enabled);
411         ansManagerStub.DeleteAllByUser(userId);
412         ansManagerStub.SetDoNotDisturbDate(date);
413         ansManagerStub.GetDoNotDisturbDate(date);
414         ansManagerStub.SetEnabledForBundleSlot(bundleOption, slotType, enabled, false);
415         ansManagerStub.GetEnabledForBundleSlot(bundleOption, slotType, enabled);
416         std::vector<std::string> dumpInfo;
417         ansManagerStub.ShellDump(stringData, stringData, userId, userId, dumpInfo);
418         ansManagerStub.SetSyncNotificationEnabledWithoutApp(userId, enabled);
419         ansManagerStub.GetSyncNotificationEnabledWithoutApp(userId, enabled);
420         return true;
421     }
422 }
423 
424 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)425 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
426 {
427     /* Run your code on data */
428     FuzzedDataProvider fdp(data, size);
429     std::vector<std::string> requestPermission = {
430         OHOS::Notification::OHOS_PERMISSION_NOTIFICATION_CONTROLLER,
431         OHOS::Notification::OHOS_PERMISSION_NOTIFICATION_AGENT_CONTROLLER,
432         OHOS::Notification::OHOS_PERMISSION_SET_UNREMOVABLE_NOTIFICATION
433     };
434     SystemHapTokenGet(requestPermission);
435     OHOS::DoSomethingInterestingWithMyAPI(&fdp);
436     return 0;
437 }
438