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