1 /*
2  * Copyright (c) 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 #ifndef DISC_EVENT_CONVERTER_H
17 #define DISC_EVENT_CONVERTER_H
18 
19 #include "comm_log.h"
20 #include "softbus_event_converter.h"
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #define DISC_ASSIGNER(type, fieldName, field)                                                                 \
27     static inline bool DiscAssigner##fieldName(                                                               \
28         const char *eventName, HiSysEventParamType paramType, SoftbusEventForm *form, HiSysEventParam *param) \
29     {                                                                                                         \
30         if (Assigner##type(form->discExtra->field, &param) &&                                                 \
31             CopyString(param->name, eventName, MAX_LENGTH_OF_PARAM_NAME)) {                                   \
32             param->t = paramType;                                                                             \
33             return true;                                                                                      \
34         }                                                                                                     \
35         return false;                                                                                         \
36     }
37 
38 DISC_ASSIGNER(Errcode, Result, result)
39 DISC_ASSIGNER(Errcode, Errcode, errcode)
40 DISC_ASSIGNER(Int32, InitType, initType)
41 DISC_ASSIGNER(Int32, ServerType, serverType)
42 DISC_ASSIGNER(Int32, InterFuncType, interFuncType)
43 DISC_ASSIGNER(Int32, CapabilityBit, capabilityBit)
44 DISC_ASSIGNER(LongString, CapabilityData, capabilityData)
45 DISC_ASSIGNER(Int32, BleTurnState, bleTurnState)
46 DISC_ASSIGNER(Int32, IpLinkStatus, ipLinkStatus)
47 DISC_ASSIGNER(Int32, CoapChangeType, coapChangeType)
48 DISC_ASSIGNER(Int32, BroadcastType, broadcastType)
49 DISC_ASSIGNER(Int32, BroadcastFreq, broadcastFreq)
50 DISC_ASSIGNER(Int32, ScanType, scanType)
51 DISC_ASSIGNER(String, ScanCycle, scanCycle)
52 DISC_ASSIGNER(Int32, DiscType, discType)
53 DISC_ASSIGNER(Int32, DiscMode, discMode)
54 DISC_ASSIGNER(Int32, CostTime, costTime)
55 DISC_ASSIGNER(AnonymizeString, LocalNetworkId, localNetworkId)
56 DISC_ASSIGNER(AnonymizeString, PeerIp, peerIp)
57 DISC_ASSIGNER(AnonymizeString, PeerBrMac, peerBrMac)
58 DISC_ASSIGNER(AnonymizeString, PeerBleMac, peerBleMac)
59 DISC_ASSIGNER(AnonymizeString, PeerWifiMac, peerWifiMac)
60 DISC_ASSIGNER(String, PeerPort, peerPort)
61 DISC_ASSIGNER(AnonymizeString, PeerNetworkId, peerNetworkId)
62 DISC_ASSIGNER(String, PeerDeviceType, peerDeviceType)
63 DISC_ASSIGNER(String, CallerPkg, callerPkg)
64 
65 #define DISC_ASSIGNER_SIZE 26 // Size of g_discAssigners
66 static HiSysEventParamAssigner g_discAssigners[] = {
67     { "STAGE_RES",            HISYSEVENT_INT32,  DiscAssignerResult         },
68     { "ERROR_CODE",           HISYSEVENT_INT32,  DiscAssignerErrcode        },
69     { "INIT_TYPE",            HISYSEVENT_INT32,  DiscAssignerInitType       },
70     { "SERVER_TYPE",          HISYSEVENT_INT32,  DiscAssignerServerType     },
71     { "INTERFACE_FUNC_TYPE",  HISYSEVENT_INT32,  DiscAssignerInterFuncType  },
72     { "CAPABILITY_BIT",       HISYSEVENT_INT32,  DiscAssignerCapabilityBit  },
73     { "CAPABILITY_DATA",      HISYSEVENT_STRING, DiscAssignerCapabilityData },
74     { "BLE_TURN_STATE",       HISYSEVENT_INT32,  DiscAssignerBleTurnState   },
75     { "IP_LINK_STATUS",       HISYSEVENT_INT32,  DiscAssignerIpLinkStatus   },
76     { "COAP_CHANGE_TYPE",     HISYSEVENT_INT32,  DiscAssignerCoapChangeType },
77     { "BROADCAST_TYPE",       HISYSEVENT_INT32,  DiscAssignerBroadcastType  },
78     { "BROADCAST_FREQ",       HISYSEVENT_INT32,  DiscAssignerBroadcastFreq  },
79     { "SCAN_TYPE",            HISYSEVENT_INT32,  DiscAssignerScanType       },
80     { "SCAN_CYCLE",           HISYSEVENT_STRING, DiscAssignerScanCycle      },
81     { "DISC_TYPE",            HISYSEVENT_INT32,  DiscAssignerDiscType       },
82     { "DISC_MODE",            HISYSEVENT_INT32,  DiscAssignerDiscMode       },
83     { "FIRST_DISCOVERY_TIME", HISYSEVENT_INT32,  DiscAssignerCostTime       },
84     { "LOCAL_NET_ID",         HISYSEVENT_STRING, DiscAssignerLocalNetworkId },
85     { "PEER_IP",              HISYSEVENT_STRING, DiscAssignerPeerIp         },
86     { "PEER_BR_MAC",          HISYSEVENT_STRING, DiscAssignerPeerBrMac      },
87     { "PEER_BLE_MAC",         HISYSEVENT_STRING, DiscAssignerPeerBleMac     },
88     { "PEER_WIFI_MAC",        HISYSEVENT_STRING, DiscAssignerPeerWifiMac    },
89     { "PEER_PORT",            HISYSEVENT_INT32,  DiscAssignerPeerPort       },
90     { "PEER_NET_ID",          HISYSEVENT_STRING, DiscAssignerPeerNetworkId  },
91     { "PEER_DEV_TYPE",        HISYSEVENT_STRING, DiscAssignerPeerDeviceType },
92     { "HOST_PKG",             HISYSEVENT_STRING, DiscAssignerCallerPkg      },
93     // Modification Note: remember updating DISC_ASSIGNER_SIZE
94 };
95 
96 #define DISC_ALARM_ASSIGNER(type, fieldName, field)                                                           \
97     static inline bool DiscAssigner##fieldName(                                                               \
98         const char *eventName, HiSysEventParamType paramType, SoftbusEventForm *form, HiSysEventParam *param) \
99     {                                                                                                         \
100         if (Assigner##type(form->discAlarmExtra->field, &param) &&                                            \
101             CopyString(param->name, eventName, MAX_LENGTH_OF_PARAM_NAME)) {                                   \
102             param->t = paramType;                                                                             \
103             return true;                                                                                      \
104         }                                                                                                     \
105         return false;                                                                                         \
106     }
107 
108 DISC_ALARM_ASSIGNER(Errcode, AlarmResult, result)
109 DISC_ALARM_ASSIGNER(Errcode, AlarmErrcode, errcode)
110 DISC_ALARM_ASSIGNER(Int32, OriginalFreq, originalFreq)
111 DISC_ALARM_ASSIGNER(Int32, AbnormalFreq, abnormalFreq)
112 DISC_ALARM_ASSIGNER(Int32, Duration, duration)
113 
114 #define DISC_ALARM_ASSIGNER_SIZE 5 // Size of g_discAlarmAssigners
115 static const HiSysEventParamAssigner g_discAlarmAssigners[] = {
116     { "STAGE_RES",        HISYSEVENT_INT32,  DiscAssignerAlarmResult     },
117     { "ERROR_CODE",       HISYSEVENT_INT32,  DiscAssignerAlarmErrcode    },
118     { "ORIGINAL_FREQ",    HISYSEVENT_INT32,  DiscAssignerOriginalFreq    },
119     { "ABNORMAL_FREQ",    HISYSEVENT_INT32,  DiscAssignerAbnormalFreq    },
120     { "DURATION",         HISYSEVENT_INT32,  DiscAssignerDuration        },
121     // Modification Note: remember updating LNN_ALARM_ASSIGNER_SIZE
122 };
123 
ConvertDiscForm2Param(HiSysEventParam params[],size_t size,SoftbusEventForm * form)124 static inline size_t ConvertDiscForm2Param(HiSysEventParam params[], size_t size, SoftbusEventForm *form)
125 {
126     size_t validSize = 0;
127     COMM_CHECK_AND_RETURN_RET_LOGE(form != NULL && form->discExtra != NULL, validSize, COMM_DFX, "invalid param");
128     for (size_t i = 0; i < size; ++i) {
129         HiSysEventParamAssigner assigner = g_discAssigners[i];
130         if (assigner.Assign(assigner.name, assigner.type, form, &params[validSize])) {
131             ++validSize;
132         }
133     }
134     return validSize;
135 }
136 
ConvertDiscAlarmForm2Param(HiSysEventParam params[],size_t size,SoftbusEventForm * form)137 static inline size_t ConvertDiscAlarmForm2Param(HiSysEventParam params[], size_t size, SoftbusEventForm *form)
138 {
139     size_t validSize = 0;
140     COMM_CHECK_AND_RETURN_RET_LOGE(form != NULL && form->discAlarmExtra != NULL, validSize, COMM_DFX, "invalid param");
141     for (size_t i = 0; i < size; ++i) {
142         HiSysEventParamAssigner assigner = g_discAlarmAssigners[i];
143         if (assigner.Assign(assigner.name, assigner.type, form, &params[validSize])) {
144             ++validSize;
145         }
146     }
147     return validSize;
148 }
149 
150 #ifdef __cplusplus
151 }
152 #endif /* __cplusplus */
153 #endif // DISC_EVENT_CONVERTER_H
154