1/*
2 * Copyright (c) 2022 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#ifndef SEC_MESSENGER_INFO_H
17#define SEC_MESSENGER_INFO_H
18
19#include <stdint.h>
20#include <stdbool.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26#ifndef DEVICE_SECURITY_DEFINES_H
27#define DEVICE_ID_MAX_LEN 64
28typedef struct DeviceIdentify {
29    uint32_t length;
30    uint8_t identity[DEVICE_ID_MAX_LEN];
31} DeviceIdentify;
32#endif
33
34typedef int32_t (*DeviceMessageReceiver)(const DeviceIdentify *devId, const uint8_t *msg, uint32_t msgLen);
35
36typedef int32_t (*DeviceStatusReceiver)(const DeviceIdentify *devId, uint32_t status, int32_t level);
37
38typedef int32_t (*MessageSendResultNotifier)(const DeviceIdentify *devId, uint64_t transNo, uint32_t result);
39
40typedef int32_t (*DeviceProcessor)(const DeviceIdentify *devId, int32_t level, void *para);
41
42typedef struct MessengerConfig {
43    const char *pkgName;
44#ifdef L2_STANDARD
45    const char *primarySockName;
46    const char *secondarySockName;
47#else
48    const char *primarySessName;
49    const char *secondarySessName;
50#endif
51    DeviceMessageReceiver messageReceiver;
52    DeviceStatusReceiver statusReceiver;
53    MessageSendResultNotifier sendResultNotifier;
54    uint32_t threadCnt;
55} MessengerConfig;
56
57typedef struct StatisticInformation {
58    uint64_t firstOnlineTime;
59    uint64_t lastOnlineTime;
60    uint64_t firstOfflineTime;
61    uint64_t lastOfflineTime;
62    uint64_t lastSessOpenTime;
63    uint32_t lastSessOpenResult;
64    uint32_t lastSessOpenCost;
65    uint64_t lastSessCloseTime;
66    uint64_t lastMsgSendTime;
67    uint32_t lastMsgSendResult;
68    uint32_t lastMsgSendCost;
69    uint64_t lastMsgRecvTime;
70    uint64_t packetRx;
71    uint64_t packetTotalRx;
72    uint64_t packetTx;
73    uint64_t packetTotalTx;
74    uint64_t packetTxFailed;
75    uint64_t packetTotalTxFailed;
76} StatisticInformation;
77
78typedef struct Messenger Messenger;
79
80Messenger *CreateMessenger(const MessengerConfig *config);
81
82void DestroyMessenger(Messenger *messenger);
83
84bool IsMessengerReady(const Messenger *messenger);
85
86void SendMsgTo(const Messenger *messenger, uint64_t transNo, const DeviceIdentify *devId, const uint8_t *msg,
87    uint32_t msgLen);
88
89bool GetDeviceOnlineStatus(const Messenger *messenger, const DeviceIdentify *devId, int32_t *level);
90
91bool GetSelfDeviceIdentify(const Messenger *messenger, DeviceIdentify *devId, int32_t *level);
92
93void ForEachDeviceProcess(const Messenger *messenger, const DeviceProcessor processor, void *para);
94
95bool GetDeviceStatisticInfo(const Messenger *messenger, const DeviceIdentify *devId, StatisticInformation *info);
96
97#ifdef __cplusplus
98}
99#endif
100
101#endif // SEC_MESSENGER_INFO_H
102