• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-2025 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 <algorithm>
17 #include <cstdlib>
18 #include <cstring>
19 #include <exception>
20 #include <new>
21 
22 #include "array_wrapper.h"
23 #include "bool_wrapper.h"
24 #include "common_event_constant.h"
25 #include "common_event_manager.h"
26 #include "double_wrapper.h"
27 #include "event_log_wrapper.h"
28 #include "int_wrapper.h"
29 #include "long_wrapper.h"
30 #include "oh_commonevent.h"
31 #include "oh_commonevent_parameters_parse.h"
32 #include "oh_commonevent_wrapper.h"
33 #include "securec.h"
34 #include "string_wrapper.h"
35 #include "want_params_wrapper.h"
36 #include "zchar_wrapper.h"
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
OH_CommonEvent_CreateSubscribeInfo(const char * events[],int32_t eventsNum)42 CommonEvent_SubscribeInfo* OH_CommonEvent_CreateSubscribeInfo(const char* events[], int32_t eventsNum)
43 {
44     if (eventsNum == 0) {
45         EVENT_LOGE("Events is empty");
46         return nullptr;
47     }
48     CommonEvent_SubscribeInfo* subscribeInfo = new (std::nothrow) CommonEvent_SubscribeInfo();
49     if (subscribeInfo == nullptr) {
50         EVENT_LOGE("Failed to create subscribeInfo");
51         return nullptr;
52     }
53     for (int i = 0; i < eventsNum; i++) {
54         if (events[i] != nullptr) {
55             subscribeInfo->events.emplace_back(events[i]);
56         }
57     }
58     return subscribeInfo;
59 }
60 
OH_CommonEvent_SetPublisherPermission(CommonEvent_SubscribeInfo * info,const char * permission)61 CommonEvent_ErrCode OH_CommonEvent_SetPublisherPermission(CommonEvent_SubscribeInfo* info, const char* permission)
62 {
63     if (info == nullptr) {
64         EVENT_LOGE("Invalid para");
65         return COMMONEVENT_ERR_INVALID_PARAMETER;
66     }
67     info->permission = permission == nullptr? std::string(): permission;
68     return COMMONEVENT_ERR_OK;
69 }
70 
OH_CommonEvent_SetPublisherBundleName(CommonEvent_SubscribeInfo * info,const char * bundleName)71 CommonEvent_ErrCode OH_CommonEvent_SetPublisherBundleName(CommonEvent_SubscribeInfo* info, const char* bundleName)
72 {
73     if (info == nullptr) {
74         EVENT_LOGE("Invalid para");
75         return COMMONEVENT_ERR_INVALID_PARAMETER;
76     }
77     info->bundleName = bundleName == nullptr? std::string(): bundleName;
78     return COMMONEVENT_ERR_OK;
79 }
80 
OH_CommonEvent_DestroySubscribeInfo(CommonEvent_SubscribeInfo * info)81 void OH_CommonEvent_DestroySubscribeInfo(CommonEvent_SubscribeInfo* info)
82 {
83     if (info != nullptr) {
84         delete info;
85     }
86 }
87 
OH_CommonEvent_CreateSubscriber(const CommonEvent_SubscribeInfo * info,CommonEvent_ReceiveCallback callback)88 CommonEvent_Subscriber* OH_CommonEvent_CreateSubscriber(const CommonEvent_SubscribeInfo* info,
89     CommonEvent_ReceiveCallback callback)
90 {
91     return SubscriberManager::GetInstance()->CreateSubscriber(info, callback);
92 }
93 
OH_CommonEvent_DestroySubscriber(CommonEvent_Subscriber * subscriber)94 void OH_CommonEvent_DestroySubscriber(CommonEvent_Subscriber* subscriber)
95 {
96     SubscriberManager::GetInstance()->DestroySubscriber(subscriber);
97 }
98 
OH_CommonEvent_Subscribe(const CommonEvent_Subscriber * subscriber)99 CommonEvent_ErrCode OH_CommonEvent_Subscribe(const CommonEvent_Subscriber* subscriber)
100 {
101     return SubscriberManager::GetInstance()->Subscribe(subscriber);
102 }
103 
OH_CommonEvent_UnSubscribe(const CommonEvent_Subscriber * subscriber)104 CommonEvent_ErrCode OH_CommonEvent_UnSubscribe(const CommonEvent_Subscriber* subscriber)
105 {
106     return SubscriberManager::GetInstance()->UnSubscribe(subscriber);
107 }
108 
OH_CommonEvent_GetEventFromRcvData(const CommonEvent_RcvData * rcvData)109 const char* OH_CommonEvent_GetEventFromRcvData(const CommonEvent_RcvData* rcvData)
110 {
111     return rcvData == nullptr ? nullptr : rcvData->event.c_str();
112 }
113 
OH_CommonEvent_GetCodeFromRcvData(const CommonEvent_RcvData * rcvData)114 int32_t OH_CommonEvent_GetCodeFromRcvData(const CommonEvent_RcvData* rcvData)
115 {
116     return rcvData == nullptr ? 0 : rcvData->code;
117 }
118 
OH_CommonEvent_GetDataStrFromRcvData(const CommonEvent_RcvData * rcvData)119 const char* OH_CommonEvent_GetDataStrFromRcvData(const CommonEvent_RcvData* rcvData)
120 {
121     return rcvData == nullptr ? nullptr : rcvData->data.c_str();
122 }
123 
OH_CommonEvent_GetBundleNameFromRcvData(const CommonEvent_RcvData * rcvData)124 const char* OH_CommonEvent_GetBundleNameFromRcvData(const CommonEvent_RcvData* rcvData)
125 {
126     return rcvData == nullptr ? nullptr : rcvData->bundleName.c_str();
127 }
128 
OH_CommonEvent_GetParametersFromRcvData(const CommonEvent_RcvData * rcvData)129 const CommonEvent_Parameters* OH_CommonEvent_GetParametersFromRcvData(const CommonEvent_RcvData* rcvData)
130 {
131     return rcvData == nullptr ? nullptr : rcvData->parameters;
132 }
133 
OH_CommonEvent_CreatePublishInfo(bool ordered)134 CommonEvent_PublishInfo* OH_CommonEvent_CreatePublishInfo(bool ordered)
135 {
136     CommonEvent_PublishInfo* publishInfo = new (std::nothrow) CommonEvent_PublishInfo();
137     if (publishInfo == nullptr) {
138         EVENT_LOGE("Failed to create PublishInfo");
139         return nullptr;
140     }
141     publishInfo->ordered = ordered;
142     return publishInfo;
143 }
144 
OH_CommonEvent_DestroyPublishInfo(CommonEvent_PublishInfo * info)145 void OH_CommonEvent_DestroyPublishInfo(CommonEvent_PublishInfo* info)
146 {
147     if (info != nullptr) {
148         delete info;
149     }
150 }
151 
OH_CommonEvent_SetPublishInfoBundleName(CommonEvent_PublishInfo * info,const char * bundleName)152 CommonEvent_ErrCode OH_CommonEvent_SetPublishInfoBundleName(CommonEvent_PublishInfo* info, const char* bundleName)
153 {
154     if (info == nullptr) {
155         EVENT_LOGE("Invalid info");
156         return COMMONEVENT_ERR_INVALID_PARAMETER;
157     }
158     info->bundleName = bundleName == nullptr ? std::string() : bundleName;
159     return COMMONEVENT_ERR_OK;
160 }
161 
OH_CommonEvent_SetPublishInfoPermissions(CommonEvent_PublishInfo * info,const char * permissions[],int32_t num)162 CommonEvent_ErrCode OH_CommonEvent_SetPublishInfoPermissions(
163     CommonEvent_PublishInfo* info, const char* permissions[], int32_t num)
164 {
165     if (info == nullptr) {
166         EVENT_LOGE("Invalid info");
167         return COMMONEVENT_ERR_INVALID_PARAMETER;
168     }
169 
170     info->subscriberPermissions.clear();
171     for (int32_t i = 0; i < num; ++i) {
172         if (permissions[i] != nullptr) {
173             info->subscriberPermissions.emplace_back(permissions[i]);
174         }
175     }
176 
177     return COMMONEVENT_ERR_OK;
178 }
179 
OH_CommonEvent_SetPublishInfoCode(CommonEvent_PublishInfo * info,int32_t code)180 CommonEvent_ErrCode OH_CommonEvent_SetPublishInfoCode(CommonEvent_PublishInfo* info, int32_t code)
181 {
182     if (info == nullptr) {
183         EVENT_LOGE("Invalid info");
184         return COMMONEVENT_ERR_INVALID_PARAMETER;
185     }
186 
187     info->code = code;
188     return COMMONEVENT_ERR_OK;
189 }
190 
OH_CommonEvent_SetPublishInfoData(CommonEvent_PublishInfo * info,const char * data,size_t length)191 CommonEvent_ErrCode OH_CommonEvent_SetPublishInfoData(
192     CommonEvent_PublishInfo* info, const char* data, size_t length)
193 {
194     if (info == nullptr) {
195         EVENT_LOGE("Invalid info");
196         return COMMONEVENT_ERR_INVALID_PARAMETER;
197     }
198     if (data == nullptr) {
199         info->data.clear();
200     } else {
201         info->data = std::string(data, std::min(std::strlen(data), length));
202     }
203     return COMMONEVENT_ERR_OK;
204 }
205 
OH_CommonEvent_SetPublishInfoParameters(CommonEvent_PublishInfo * info,CommonEvent_Parameters * param)206 CommonEvent_ErrCode OH_CommonEvent_SetPublishInfoParameters(
207     CommonEvent_PublishInfo* info, CommonEvent_Parameters* param)
208 {
209     if (info == nullptr) {
210         EVENT_LOGE("Invalid info");
211         return COMMONEVENT_ERR_INVALID_PARAMETER;
212     }
213 
214     info->parameters = reinterpret_cast<CArrParameters*>(param);
215     return COMMONEVENT_ERR_OK;
216 }
217 
OH_CommonEvent_CreateParameters()218 CommonEvent_Parameters* OH_CommonEvent_CreateParameters()
219 {
220     auto obj = new (std::nothrow) CArrParameters();
221     return obj;
222 }
223 
OH_CommonEvent_DestroyParameters(CommonEvent_Parameters * param)224 void OH_CommonEvent_DestroyParameters(CommonEvent_Parameters* param)
225 {
226     auto parameters = reinterpret_cast<CArrParameters*>(param);
227     if (parameters != nullptr) {
228         for (void* ptr : parameters->allocatedPointers) {
229             if (ptr == nullptr) {
230                 continue;
231             }
232             free(ptr);
233         }
234         parameters->allocatedPointers.clear();
235         delete parameters;
236         parameters = nullptr;
237     }
238 }
239 
OH_CommonEvent_HasKeyInParameters(const CommonEvent_Parameters * para,const char * key)240 bool OH_CommonEvent_HasKeyInParameters(const CommonEvent_Parameters* para, const char* key)
241 {
242     if (para == nullptr || key == nullptr) {
243         EVENT_LOGE("Invalid para");
244         return false;
245     }
246     auto parameters = reinterpret_cast<const CArrParameters*>(para);
247     if (parameters == nullptr) {
248         EVENT_LOGE("Invalid para");
249         return false;
250     }
251     return parameters->wantParams.HasParam(key);
252 }
253 
OH_CommonEvent_GetIntFromParameters(const CommonEvent_Parameters * para,const char * key,const int defaultValue)254 int OH_CommonEvent_GetIntFromParameters(const CommonEvent_Parameters* para, const char* key, const int defaultValue)
255 {
256     if (para == nullptr || key == nullptr) {
257         EVENT_LOGE("Invalid para");
258         return defaultValue;
259     }
260     auto parameters = reinterpret_cast<const CArrParameters*>(para);
261     if (parameters == nullptr) {
262         EVENT_LOGE("Invalid para");
263         return defaultValue;
264     }
265     return OHOS::EventFwk::GetDataFromParams<OHOS::AAFwk::IInteger, OHOS::AAFwk::Integer, int>(
266         *parameters, key, defaultValue);
267 }
268 
OH_CommonEvent_SetIntToParameters(CommonEvent_Parameters * param,const char * key,int value)269 CommonEvent_ErrCode OH_CommonEvent_SetIntToParameters(CommonEvent_Parameters* param, const char* key, int value)
270 {
271     if (param == nullptr || key == nullptr) {
272         EVENT_LOGE("Invalid param");
273         return COMMONEVENT_ERR_INVALID_PARAMETER;
274     }
275 
276     auto parameters = reinterpret_cast<CArrParameters*>(param);
277     if (parameters == nullptr) {
278         EVENT_LOGE("Invalid param");
279         return COMMONEVENT_ERR_INVALID_PARAMETER;
280     }
281     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::Integer, int>(*parameters, key, value);
282 }
283 
OH_CommonEvent_GetIntArrayFromParameters(const CommonEvent_Parameters * para,const char * key,int ** array)284 int OH_CommonEvent_GetIntArrayFromParameters(const CommonEvent_Parameters* para, const char* key, int** array)
285 {
286     if (para == nullptr || key == nullptr || array == nullptr) {
287         EVENT_LOGE("Invalid para");
288         return 0;
289     }
290     auto parameters = reinterpret_cast<const CArrParameters*>(para);
291     if (parameters == nullptr) {
292         EVENT_LOGE("Invalid para");
293         return 0;
294     }
295     return OHOS::EventFwk::GetDataArrayFromParams<OHOS::AAFwk::IInteger, OHOS::AAFwk::Integer, int>(
296         *parameters, key, array);
297 }
298 
OH_CommonEvent_SetIntArrayToParameters(CommonEvent_Parameters * param,const char * key,const int * value,size_t num)299 CommonEvent_ErrCode OH_CommonEvent_SetIntArrayToParameters(
300     CommonEvent_Parameters* param, const char* key, const int* value, size_t num)
301 {
302     if (param == nullptr || key == nullptr || (value == nullptr && num > 0)) {
303         EVENT_LOGE("Invalid param");
304         return COMMONEVENT_ERR_INVALID_PARAMETER;
305     }
306 
307     auto parameters = reinterpret_cast<CArrParameters*>(param);
308     if (parameters == nullptr) {
309         EVENT_LOGE("Invalid param");
310         return COMMONEVENT_ERR_INVALID_PARAMETER;
311     }
312     return OHOS::EventFwk::SetDataArrayToParams<OHOS::AAFwk::Integer, int>(
313         *parameters, key, value, num, OHOS::AAFwk::g_IID_IInteger);
314 }
315 
OH_CommonEvent_GetLongFromParameters(const CommonEvent_Parameters * para,const char * key,const long defaultValue)316 long OH_CommonEvent_GetLongFromParameters(const CommonEvent_Parameters* para, const char* key,
317     const long defaultValue)
318 {
319     if (para == nullptr || key == nullptr) {
320         EVENT_LOGE("Invalid para");
321         return defaultValue;
322     }
323     auto parameters = reinterpret_cast<const CArrParameters*>(para);
324     if (parameters == nullptr) {
325         EVENT_LOGE("Invalid para");
326         return defaultValue;
327     }
328     return OHOS::EventFwk::GetDataFromParams<OHOS::AAFwk::ILong, OHOS::AAFwk::Long, long>(
329         *parameters, key, defaultValue);
330 }
331 
OH_CommonEvent_SetLongToParameters(CommonEvent_Parameters * param,const char * key,long value)332 CommonEvent_ErrCode OH_CommonEvent_SetLongToParameters(CommonEvent_Parameters* param, const char* key, long value)
333 {
334     if (param == nullptr || key == nullptr) {
335         EVENT_LOGE("Invalid param");
336         return COMMONEVENT_ERR_INVALID_PARAMETER;
337     }
338 
339     auto parameters = reinterpret_cast<CArrParameters*>(param);
340     if (parameters == nullptr) {
341         EVENT_LOGE("Invalid param");
342         return COMMONEVENT_ERR_INVALID_PARAMETER;
343     }
344     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::Long, long>(*parameters, key, value);
345 }
346 
OH_CommonEvent_GetLongArrayFromParameters(const CommonEvent_Parameters * para,const char * key,long ** array)347 int32_t OH_CommonEvent_GetLongArrayFromParameters(const CommonEvent_Parameters* para, const char* key, long** array)
348 {
349     if (para == nullptr || key == nullptr || array == nullptr) {
350         EVENT_LOGE("Invalid para");
351         return 0;
352     }
353     auto parameters = reinterpret_cast<const CArrParameters*>(para);
354     if (parameters == nullptr) {
355         EVENT_LOGE("Invalid para");
356         return 0;
357     }
358     return OHOS::EventFwk::GetDataArrayFromParams<OHOS::AAFwk::ILong, OHOS::AAFwk::Long, long>(
359         *parameters, key, array);
360 }
361 
OH_CommonEvent_SetLongArrayToParameters(CommonEvent_Parameters * param,const char * key,const long * value,size_t num)362 CommonEvent_ErrCode OH_CommonEvent_SetLongArrayToParameters(CommonEvent_Parameters* param, const char* key,
363     const long* value, size_t num)
364 {
365     if (param == nullptr || key == nullptr || (value == nullptr && num > 0)) {
366         EVENT_LOGE("Invalid param");
367         return COMMONEVENT_ERR_INVALID_PARAMETER;
368     }
369 
370     auto parameters = reinterpret_cast<CArrParameters*>(param);
371     if (parameters == nullptr) {
372         EVENT_LOGE("Invalid param");
373         return COMMONEVENT_ERR_INVALID_PARAMETER;
374     }
375     return OHOS::EventFwk::SetDataArrayToParams<OHOS::AAFwk::Long, long>(
376         *parameters, key, value, num, OHOS::AAFwk::g_IID_ILong);
377 }
378 
OH_CommonEvent_GetBoolFromParameters(const CommonEvent_Parameters * para,const char * key,const bool defaultValue)379 bool OH_CommonEvent_GetBoolFromParameters(const CommonEvent_Parameters* para, const char* key,
380     const bool defaultValue)
381 {
382     if (para == nullptr || key == nullptr) {
383         EVENT_LOGE("Invalid para");
384         return defaultValue;
385     }
386     auto parameters = reinterpret_cast<const CArrParameters*>(para);
387     if (parameters == nullptr) {
388         EVENT_LOGE("Invalid para");
389         return defaultValue;
390     }
391     return OHOS::EventFwk::GetDataFromParams<OHOS::AAFwk::IBoolean, OHOS::AAFwk::Boolean, bool>(
392         *parameters, key, defaultValue);
393 }
394 
OH_CommonEvent_SetBoolToParameters(CommonEvent_Parameters * param,const char * key,bool value)395 CommonEvent_ErrCode OH_CommonEvent_SetBoolToParameters(CommonEvent_Parameters* param, const char* key, bool value)
396 {
397     if (param == nullptr || key == nullptr) {
398         EVENT_LOGE("Invalid param");
399         return COMMONEVENT_ERR_INVALID_PARAMETER;
400     }
401 
402     auto parameters = reinterpret_cast<CArrParameters*>(param);
403     if (parameters == nullptr) {
404         EVENT_LOGE("Invalid param");
405         return COMMONEVENT_ERR_INVALID_PARAMETER;
406     }
407     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::Boolean, bool>(*parameters, key, value);
408 }
409 
OH_CommonEvent_GetBoolArrayFromParameters(const CommonEvent_Parameters * para,const char * key,bool ** array)410 int32_t OH_CommonEvent_GetBoolArrayFromParameters(const CommonEvent_Parameters* para, const char* key, bool** array)
411 {
412     if (para == nullptr || key == nullptr || array == nullptr) {
413         EVENT_LOGE("Invalid para");
414         return 0;
415     }
416     auto parameters = reinterpret_cast<const CArrParameters*>(para);
417     if (parameters == nullptr) {
418         EVENT_LOGE("Invalid para");
419         return 0;
420     }
421     return OHOS::EventFwk::GetDataArrayFromParams<OHOS::AAFwk::IBoolean, OHOS::AAFwk::Boolean, bool>(
422         *parameters, key, array);
423 }
424 
OH_CommonEvent_SetBoolArrayToParameters(CommonEvent_Parameters * param,const char * key,const bool * value,size_t num)425 CommonEvent_ErrCode OH_CommonEvent_SetBoolArrayToParameters(
426     CommonEvent_Parameters* param, const char* key, const bool* value, size_t num)
427 {
428     if (param == nullptr || key == nullptr || (value == nullptr && num > 0)) {
429         EVENT_LOGE("Invalid param");
430         return COMMONEVENT_ERR_INVALID_PARAMETER;
431     }
432 
433     auto parameters = reinterpret_cast<CArrParameters*>(param);
434     if (parameters == nullptr) {
435         EVENT_LOGE("Invalid param");
436         return COMMONEVENT_ERR_INVALID_PARAMETER;
437     }
438     return OHOS::EventFwk::SetDataArrayToParams<OHOS::AAFwk::Boolean, bool>(
439         *parameters, key, value, num, OHOS::AAFwk::g_IID_IBoolean);
440 }
441 
OH_CommonEvent_GetCharFromParameters(const CommonEvent_Parameters * para,const char * key,const char defaultValue)442 char OH_CommonEvent_GetCharFromParameters(const CommonEvent_Parameters* para, const char* key,
443     const char defaultValue)
444 {
445     if (para == nullptr || key == nullptr) {
446         EVENT_LOGE("Invalid para");
447         return defaultValue;
448     }
449     auto parameters = reinterpret_cast<const CArrParameters*>(para);
450     if (parameters == nullptr) {
451         EVENT_LOGE("Invalid para");
452         return defaultValue;
453     }
454     return OHOS::EventFwk::GetDataFromParams<OHOS::AAFwk::IChar, OHOS::AAFwk::Char, char>(
455         *parameters, key, defaultValue);
456 }
457 
OH_CommonEvent_SetCharToParameters(CommonEvent_Parameters * param,const char * key,char value)458 CommonEvent_ErrCode OH_CommonEvent_SetCharToParameters(CommonEvent_Parameters* param, const char* key, char value)
459 {
460     if (param == nullptr || key == nullptr) {
461         EVENT_LOGE("Invalid param");
462         return COMMONEVENT_ERR_INVALID_PARAMETER;
463     }
464 
465     auto parameters = reinterpret_cast<CArrParameters*>(param);
466     if (parameters == nullptr) {
467         EVENT_LOGE("Invalid param");
468         return COMMONEVENT_ERR_INVALID_PARAMETER;
469     }
470     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::Char, char>(*parameters, key, value);
471 }
472 
OH_CommonEvent_GetCharArrayFromParameters(const CommonEvent_Parameters * para,const char * key,char ** array)473 int32_t OH_CommonEvent_GetCharArrayFromParameters(const CommonEvent_Parameters* para, const char* key, char** array)
474 {
475     if (para == nullptr || key == nullptr || array == nullptr) {
476         EVENT_LOGE("Invalid para");
477         return 0;
478     }
479     auto parameters = reinterpret_cast<const CArrParameters*>(para);
480     if (parameters == nullptr) {
481         EVENT_LOGE("Invalid para");
482         return 0;
483     }
484     return OHOS::EventFwk::GetStringFromParams(*parameters, key, array);
485 }
486 
OH_CommonEvent_SetCharArrayToParameters(CommonEvent_Parameters * param,const char * key,const char * value,size_t num)487 CommonEvent_ErrCode OH_CommonEvent_SetCharArrayToParameters(
488     CommonEvent_Parameters* param, const char* key, const char* value, size_t num)
489 {
490     if (param == nullptr || key == nullptr || value == nullptr) {
491         EVENT_LOGE("Invalid param");
492         return COMMONEVENT_ERR_INVALID_PARAMETER;
493     }
494 
495     auto parameters = reinterpret_cast<CArrParameters*>(param);
496     if (parameters == nullptr) {
497         EVENT_LOGE("Invalid param");
498         return COMMONEVENT_ERR_INVALID_PARAMETER;
499     }
500     const std::string str(value, std::min(std::strlen(value), num));
501     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::String, std::string>(*parameters, key, str);
502 }
503 
OH_CommonEvent_GetDoubleFromParameters(const CommonEvent_Parameters * para,const char * key,const double defaultValue)504 double OH_CommonEvent_GetDoubleFromParameters(const CommonEvent_Parameters* para, const char* key,
505     const double defaultValue)
506 {
507     if (para == nullptr || key == nullptr) {
508         EVENT_LOGE("Invalid para");
509         return defaultValue;
510     }
511     auto parameters = reinterpret_cast<const CArrParameters*>(para);
512     if (parameters == nullptr) {
513         EVENT_LOGE("Invalid para");
514         return defaultValue;
515     }
516     return OHOS::EventFwk::GetDataFromParams<OHOS::AAFwk::IDouble, OHOS::AAFwk::Double, double>(
517         *parameters, key, defaultValue);
518 }
519 
OH_CommonEvent_SetDoubleToParameters(CommonEvent_Parameters * param,const char * key,double value)520 CommonEvent_ErrCode OH_CommonEvent_SetDoubleToParameters(
521     CommonEvent_Parameters* param, const char* key, double value)
522 {
523     if (param == nullptr || key == nullptr) {
524         EVENT_LOGE("Invalid param");
525         return COMMONEVENT_ERR_INVALID_PARAMETER;
526     }
527 
528     auto parameters = reinterpret_cast<CArrParameters*>(param);
529     if (parameters == nullptr) {
530         EVENT_LOGE("Invalid param");
531         return COMMONEVENT_ERR_INVALID_PARAMETER;
532     }
533     return OHOS::EventFwk::SetDataToParams<OHOS::AAFwk::Double, double>(*parameters, key, value);
534 }
535 
OH_CommonEvent_GetDoubleArrayFromParameters(const CommonEvent_Parameters * para,const char * key,double ** array)536 int32_t OH_CommonEvent_GetDoubleArrayFromParameters(const CommonEvent_Parameters* para, const char* key,
537     double** array)
538 {
539     if (para == nullptr || key == nullptr || array == nullptr) {
540         EVENT_LOGE("Invalid para");
541         return 0;
542     }
543     auto parameters = reinterpret_cast<const CArrParameters*>(para);
544     if (parameters == nullptr) {
545         EVENT_LOGE("Invalid para");
546         return 0;
547     }
548     return OHOS::EventFwk::GetDataArrayFromParams<OHOS::AAFwk::IDouble, OHOS::AAFwk::Double, double>(
549         *parameters, key, array);
550 }
551 
OH_CommonEvent_SetDoubleArrayToParameters(CommonEvent_Parameters * param,const char * key,const double * value,size_t num)552 CommonEvent_ErrCode OH_CommonEvent_SetDoubleArrayToParameters(
553     CommonEvent_Parameters* param, const char* key, const double* value, size_t num)
554 {
555     if (param == nullptr || key == nullptr || (value == nullptr && num > 0)) {
556         EVENT_LOGE("Invalid param");
557         return COMMONEVENT_ERR_INVALID_PARAMETER;
558     }
559 
560     auto parameters = reinterpret_cast<CArrParameters*>(param);
561     if (parameters == nullptr) {
562         EVENT_LOGE("Invalid param");
563         return COMMONEVENT_ERR_INVALID_PARAMETER;
564     }
565     return OHOS::EventFwk::SetDataArrayToParams<OHOS::AAFwk::Double, double>(
566         *parameters, key, value, num, OHOS::AAFwk::g_IID_IDouble);
567 }
568 
OH_CommonEvent_Publish(const char * event)569 CommonEvent_ErrCode OH_CommonEvent_Publish(const char* event)
570 {
571     if (event == nullptr) {
572         EVENT_LOGE("Invalid event");
573         return COMMONEVENT_ERR_INVALID_PARAMETER;
574     }
575 
576     OHOS::AAFwk::Want want;
577     want.SetAction(event);
578     OHOS::EventFwk::CommonEventData data;
579     OHOS::EventFwk::CommonEventPublishInfo publishInfo;
580     data.SetWant(want);
581 
582     auto ret = OHOS::EventFwk::CommonEventManager::NewPublishCommonEvent(data, publishInfo);
583     return static_cast<CommonEvent_ErrCode>(ret);
584 }
585 
OH_CommonEvent_PublishWithInfo(const char * event,const CommonEvent_PublishInfo * info)586 CommonEvent_ErrCode OH_CommonEvent_PublishWithInfo(const char* event, const CommonEvent_PublishInfo* info)
587 {
588     if (event == nullptr) {
589         EVENT_LOGE("Invalid event");
590         return COMMONEVENT_ERR_INVALID_PARAMETER;
591     }
592     if (info == nullptr) {
593         EVENT_LOGE("Invalid info");
594         return COMMONEVENT_ERR_INVALID_PARAMETER;
595     }
596 
597     OHOS::AAFwk::Want want;
598     want.SetAction(event);
599     OHOS::EventFwk::CommonEventData data;
600     OHOS::EventFwk::CommonEventPublishInfo publishInfo;
601     if (info->parameters != nullptr) {
602         want.SetParams(info->parameters->wantParams);
603     }
604     data.SetCode(info->code);
605     data.SetData(info->data);
606     publishInfo.SetSubscriberPermissions(info->subscriberPermissions);
607     publishInfo.SetOrdered(info->ordered);
608     publishInfo.SetBundleName(info->bundleName);
609     data.SetWant(want);
610 
611     auto ret = OHOS::EventFwk::CommonEventManager::NewPublishCommonEvent(data, publishInfo);
612     return static_cast<CommonEvent_ErrCode>(ret);
613 }
614 
OH_CommonEvent_IsOrderedCommonEvent(const CommonEvent_Subscriber * subscriber)615 bool OH_CommonEvent_IsOrderedCommonEvent(const CommonEvent_Subscriber* subscriber)
616 {
617     if (subscriber == nullptr) {
618         EVENT_LOGE("Invalid subscriber");
619         return false;
620     }
621     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
622     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
623     return (item == nullptr || item->result == nullptr) ? observer->IsOrderedCommonEvent()
624                                                         : item->result->IsOrderedCommonEvent();
625 }
626 
OH_CommonEvent_FinishCommonEvent(CommonEvent_Subscriber * subscriber)627 bool OH_CommonEvent_FinishCommonEvent(CommonEvent_Subscriber* subscriber)
628 {
629     if (subscriber == nullptr) {
630         EVENT_LOGE("Invalid subscriber");
631         return false;
632     }
633     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
634     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
635     return (item == nullptr || item->result == nullptr) ? false : item->result->FinishCommonEvent();
636 }
637 
OH_CommonEvent_GetAbortCommonEvent(const CommonEvent_Subscriber * subscriber)638 bool OH_CommonEvent_GetAbortCommonEvent(const CommonEvent_Subscriber* subscriber)
639 {
640     if (subscriber == nullptr) {
641         EVENT_LOGE("Invalid subscriber");
642         return false;
643     }
644     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
645     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
646     return (item == nullptr || item->result == nullptr) ? false : item->result->GetAbortCommonEvent();
647 }
648 
OH_CommonEvent_AbortCommonEvent(CommonEvent_Subscriber * subscriber)649 bool OH_CommonEvent_AbortCommonEvent(CommonEvent_Subscriber* subscriber)
650 {
651     if (subscriber == nullptr) {
652         EVENT_LOGE("Invalid subscriber");
653         return false;
654     }
655     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
656     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
657     return (item == nullptr || item->result == nullptr) ? false : item->result->AbortCommonEvent();
658 }
659 
OH_CommonEvent_ClearAbortCommonEvent(CommonEvent_Subscriber * subscriber)660 bool OH_CommonEvent_ClearAbortCommonEvent(CommonEvent_Subscriber* subscriber)
661 {
662     if (subscriber == nullptr) {
663         EVENT_LOGE("Invalid subscriber");
664         return false;
665     }
666     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
667     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
668     return (item == nullptr || item->result == nullptr) ? false : item->result->ClearAbortCommonEvent();
669 }
670 
OH_CommonEvent_GetCodeFromSubscriber(const CommonEvent_Subscriber * subscriber)671 int32_t OH_CommonEvent_GetCodeFromSubscriber(const CommonEvent_Subscriber* subscriber)
672 {
673     if (subscriber == nullptr) {
674         EVENT_LOGE("Invalid subscriber");
675         return 0;
676     }
677     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
678     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
679     return (item == nullptr || item->result == nullptr) ? 0 : item->result->GetCode();
680 }
681 
OH_CommonEvent_SetCodeToSubscriber(CommonEvent_Subscriber * subscriber,int32_t code)682 bool OH_CommonEvent_SetCodeToSubscriber(CommonEvent_Subscriber* subscriber, int32_t code)
683 {
684     if (subscriber == nullptr) {
685         EVENT_LOGE("Invalid subscriber");
686         return false;
687     }
688     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
689     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
690     return (item == nullptr || item->result == nullptr) ? false : item->result->SetCode(code);
691 }
692 
OH_CommonEvent_GetDataFromSubscriber(const CommonEvent_Subscriber * subscriber)693 const char* OH_CommonEvent_GetDataFromSubscriber(const CommonEvent_Subscriber* subscriber)
694 {
695     if (subscriber == nullptr) {
696         EVENT_LOGE("Invalid subscriber");
697         return nullptr;
698     }
699     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
700     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
701     if (item == nullptr || item->result == nullptr) {
702         return nullptr;
703     }
704     item->data = item->result->GetData();
705     return item->data.c_str();
706 }
707 
OH_CommonEvent_SetDataToSubscriber(CommonEvent_Subscriber * subscriber,const char * data,size_t length)708 bool OH_CommonEvent_SetDataToSubscriber(CommonEvent_Subscriber* subscriber, const char* data, size_t length)
709 {
710     if (subscriber == nullptr || data == nullptr) {
711         EVENT_LOGE("Invalid subscriber or data");
712         return false;
713     }
714     auto observer = *(reinterpret_cast<const std::shared_ptr<SubscriberObserver>*>(subscriber));
715     auto item = SubscriberManager::GetInstance()->GetAsyncResult(observer.get());
716     if (item == nullptr || item->result == nullptr) {
717         return false;
718     }
719     const std::string strData(data, std::min(std::strlen(data), length));
720     if (item->result->SetData(strData)) {
721         return true;
722     }
723     return false;
724 }
725 #ifdef __cplusplus
726 }
727 #endif