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