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 TRANS_EVENT_CONVERTER_H
17 #define TRANS_EVENT_CONVERTER_H
18 
19 #include "softbus_event_converter.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #define TRANS_ASSIGNER(type, fieldName, field)                                                                \
26     static inline bool TransAssigner##fieldName(                                                              \
27         const char *eventName, HiSysEventParamType paramType, SoftbusEventForm *form, HiSysEventParam *param) \
28     {                                                                                                         \
29         if (Assigner##type(form->transExtra->field, &param) &&                                                \
30             CopyString(param->name, eventName, MAX_LENGTH_OF_PARAM_NAME)) {                                   \
31             param->t = paramType;                                                                             \
32             return true;                                                                                      \
33         }                                                                                                     \
34         return false;                                                                                         \
35     }
36 
37 TRANS_ASSIGNER(Errcode, Result, result)
38 TRANS_ASSIGNER(Errcode, Errcode, errcode)
39 TRANS_ASSIGNER(AnonymizeString, SocketName, socketName)
40 TRANS_ASSIGNER(Int32, DataType, dataType)
41 TRANS_ASSIGNER(Int32, ChannelType, channelType)
42 TRANS_ASSIGNER(Int32, LaneId, laneId)
43 TRANS_ASSIGNER(Int32, PreferLinkType, preferLinkType)
44 TRANS_ASSIGNER(Int32, LaneTransType, laneTransType)
45 TRANS_ASSIGNER(Int32, ChannelId, channelId)
46 TRANS_ASSIGNER(Int32, RequestId, requestId)
47 TRANS_ASSIGNER(Int32, ConnectionId, connectionId)
48 TRANS_ASSIGNER(Int32, LinkType, linkType)
49 TRANS_ASSIGNER(Int32, AuthId, authId)
50 TRANS_ASSIGNER(Int32, SocketFd, socketFd)
51 TRANS_ASSIGNER(Int32, CostTime, costTime)
52 TRANS_ASSIGNER(Int32, ChannelScore, channelScore)
53 TRANS_ASSIGNER(Int32, PeerChannelId, peerChannelId)
54 TRANS_ASSIGNER(Int32, BtFlow, btFlow)
55 TRANS_ASSIGNER(AnonymizeString, PeerNetworkId, peerNetworkId)
56 TRANS_ASSIGNER(AnonymizeString, PeerUdid, peerUdid)
57 TRANS_ASSIGNER(String, PeerDevVer, peerDevVer)
58 TRANS_ASSIGNER(AnonymizeString, LocalUdid, localUdid)
59 TRANS_ASSIGNER(String, CallerPkg, callerPkg)
60 TRANS_ASSIGNER(String, CalleePkg, calleePkg)
61 TRANS_ASSIGNER(String, FirstTokenName, firstTokenName)
62 TRANS_ASSIGNER(Uint32, FirstTokenId, firstTokenId)
63 TRANS_ASSIGNER(Int32,  FirstTokenType, firstTokenType)
64 TRANS_ASSIGNER(LongString,  TrafficStats, trafficStats)
65 TRANS_ASSIGNER(Int32,  OsType, osType)
66 TRANS_ASSIGNER(Int32,  DeviceState, deviceState)
67 TRANS_ASSIGNER(Int32,  BusinessId, businessId)
68 TRANS_ASSIGNER(Int32,  BusinessType, businessType)
69 
70 #define TRANS_ASSIGNER_SIZE 32 // Size of TRANS_ASSIGNERS
71 static const HiSysEventParamAssigner TRANS_ASSIGNERS[] = {
72     { "STAGE_RES",        HISYSEVENT_INT32,  TransAssignerResult        },
73     { "ERROR_CODE",       HISYSEVENT_INT32,  TransAssignerErrcode       },
74     { "SOCKET_NAME",      HISYSEVENT_STRING, TransAssignerSocketName    },
75     { "DATA_TYPE",        HISYSEVENT_INT32,  TransAssignerDataType      },
76     { "LOGIC_CHAN_TYPE",  HISYSEVENT_INT32,  TransAssignerChannelType   },
77     { "LANE_ID",          HISYSEVENT_INT32,  TransAssignerLaneId        },
78     { "PREFER_LINK_TYPE", HISYSEVENT_INT32,  TransAssignerPreferLinkType},
79     { "LANE_TRANS_TYPE",  HISYSEVENT_INT32,  TransAssignerLaneTransType },
80     { "CHAN_ID",          HISYSEVENT_INT32,  TransAssignerChannelId     },
81     { "REQ_ID",           HISYSEVENT_INT32,  TransAssignerRequestId     },
82     { "CONN_ID",          HISYSEVENT_INT32,  TransAssignerConnectionId  },
83     { "LINK_TYPE",        HISYSEVENT_INT32,  TransAssignerLinkType      },
84     { "AUTH_ID",          HISYSEVENT_INT32,  TransAssignerAuthId        },
85     { "SOCKET_FD",        HISYSEVENT_INT32,  TransAssignerSocketFd      },
86     { "COST_TIME",        HISYSEVENT_INT32,  TransAssignerCostTime      },
87     { "CHAN_SCORE",       HISYSEVENT_INT32,  TransAssignerChannelScore  },
88     { "PEER_CHAN_ID",     HISYSEVENT_INT32,  TransAssignerPeerChannelId },
89     { "BT_FLOW",          HISYSEVENT_INT32,  TransAssignerBtFlow        },
90     { "PEER_NET_ID",      HISYSEVENT_STRING, TransAssignerPeerNetworkId },
91     { "PEER_UDID",        HISYSEVENT_STRING, TransAssignerPeerUdid      },
92     { "PEER_DEV_VER",     HISYSEVENT_STRING, TransAssignerPeerDevVer    },
93     { "LOCAL_UDID",       HISYSEVENT_STRING, TransAssignerLocalUdid     },
94     { "HOST_PKG",         HISYSEVENT_STRING, TransAssignerCallerPkg     },
95     { "TO_CALL_PKG",      HISYSEVENT_STRING, TransAssignerCalleePkg     },
96     { "FIRST_TOKEN_NAME", HISYSEVENT_STRING, TransAssignerFirstTokenName},
97     { "FIRST_TOKEN_ID",   HISYSEVENT_UINT32, TransAssignerFirstTokenId  },
98     { "FIRST_TOKEN_TYPE", HISYSEVENT_INT32,  TransAssignerFirstTokenType},
99     { "TRAFFIC_STATS",    HISYSEVENT_STRING, TransAssignerTrafficStats  },
100     { "OS_TYPE",          HISYSEVENT_INT32,  TransAssignerOsType        },
101     { "DEVICE_STATE",     HISYSEVENT_INT32,  TransAssignerDeviceState   },
102     { "BUSINESS_ID",      HISYSEVENT_INT32,  TransAssignerBusinessId    },
103     { "BUSINESS_TYPE",    HISYSEVENT_INT32,  TransAssignerBusinessType  },
104     // Modification Note: remember updating TRANS_ASSIGNER_SIZE
105 };
106 
107 #define TRANS_ALARM_ASSIGNER(type, fieldName, field)                                                          \
108     static inline bool TransAssigner##fieldName(                                                              \
109         const char *eventName, HiSysEventParamType paramType, SoftbusEventForm *form, HiSysEventParam *param) \
110     {                                                                                                         \
111         if (Assigner##type(form->transAlarmExtra->field, &param) &&                                           \
112             CopyString(param->name, eventName, MAX_LENGTH_OF_PARAM_NAME)) {                                   \
113             param->t = paramType;                                                                             \
114             return true;                                                                                      \
115         }                                                                                                     \
116         return false;                                                                                         \
117     }
118 
119 TRANS_ALARM_ASSIGNER(Errcode, AlarmResult, result)
120 TRANS_ALARM_ASSIGNER(Errcode, AlarmReason, errcode)
121 TRANS_ALARM_ASSIGNER(Int32, CallerPid, callerPid)
122 TRANS_ALARM_ASSIGNER(Int32, AlarmLinkType, linkType)
123 TRANS_ALARM_ASSIGNER(Int32, MinBw, minBw)
124 TRANS_ALARM_ASSIGNER(Int32, MethodId, methodId)
125 TRANS_ALARM_ASSIGNER(Int32, Duration, duration)
126 TRANS_ALARM_ASSIGNER(Int32, CurFlow, curFlow)
127 TRANS_ALARM_ASSIGNER(Int32, LimitFlow, limitFlow)
128 TRANS_ALARM_ASSIGNER(Int32, LimitTime, limitTime)
129 TRANS_ALARM_ASSIGNER(Int32, OccupyRes, occupyRes)
130 TRANS_ALARM_ASSIGNER(Int32, SyncType, syncType)
131 TRANS_ALARM_ASSIGNER(Int32, SyncData, syncData)
132 TRANS_ALARM_ASSIGNER(Int32, RetryCount, retryCount)
133 TRANS_ALARM_ASSIGNER(Int32, RetryReason, retryReason)
134 TRANS_ALARM_ASSIGNER(String, ConflictName, conflictName)
135 TRANS_ALARM_ASSIGNER(String, ConflictedName, conflictedName)
136 TRANS_ALARM_ASSIGNER(String, OccupyedName, occupyedName)
137 TRANS_ALARM_ASSIGNER(String, PermissionName, permissionName)
138 TRANS_ALARM_ASSIGNER(AnonymizeString, AlarmSessionName, sessionName)
139 
140 #define TRANS_ALARM_ASSIGNER_SIZE 20 // Size of g_transAlarmAssigners
141 static const HiSysEventParamAssigner g_transAlarmAssigners[] = {
142     { "STAGE_RES",         HISYSEVENT_INT32,  TransAssignerAlarmResult            },
143     { "ERROR_CODE",        HISYSEVENT_INT32,  TransAssignerAlarmReason            },
144     { "CALLER_PID",        HISYSEVENT_INT32,  TransAssignerCallerPid              },
145     { "LINK_TYPE",         HISYSEVENT_INT32,  TransAssignerAlarmLinkType          },
146     { "MIN_BW",            HISYSEVENT_INT32,  TransAssignerMinBw                  },
147     { "METHOD_ID",         HISYSEVENT_INT32,  TransAssignerMethodId               },
148     { "DURATION",          HISYSEVENT_INT32,  TransAssignerDuration               },
149     { "CUR_FLOW",          HISYSEVENT_INT32,  TransAssignerCurFlow                },
150     { "LIMIT_FLOW",        HISYSEVENT_INT32,  TransAssignerLimitFlow              },
151     { "LIMIT_TIME",        HISYSEVENT_INT32,  TransAssignerLimitTime              },
152     { "OCCUPY_RES",        HISYSEVENT_INT32,  TransAssignerOccupyRes              },
153     { "SYNC_TYPE",         HISYSEVENT_INT32,  TransAssignerSyncType               },
154     { "SYNC_DATA",         HISYSEVENT_INT32,  TransAssignerSyncData               },
155     { "RETRY_COUNT",       HISYSEVENT_INT32,  TransAssignerRetryCount             },
156     { "RETRY_REASON",      HISYSEVENT_INT32,  TransAssignerRetryReason            },
157     { "CONFLICT_NAME",     HISYSEVENT_STRING, TransAssignerConflictName           },
158     { "CONFLECTED_NAME",   HISYSEVENT_STRING, TransAssignerConflictedName         },
159     { "OCCUPYED_NAME",     HISYSEVENT_STRING, TransAssignerOccupyedName           },
160     { "PERMISSION_NAME",   HISYSEVENT_STRING, TransAssignerPermissionName         },
161     { "SESSION_NAME",      HISYSEVENT_STRING,  TransAssignerAlarmSessionName      },
162     // Modification Note: remember updating TRANS_ALARM_ASSIGNER_SIZE
163 };
164 
ConvertTransForm2Param(HiSysEventParam params[],size_t size,SoftbusEventForm * form)165 static inline size_t ConvertTransForm2Param(HiSysEventParam params[], size_t size, SoftbusEventForm *form)
166 {
167     size_t validSize = 0;
168     if (form == NULL || form->transExtra == NULL) {
169         return validSize;
170     }
171     for (size_t i = 0; i < size; ++i) {
172         HiSysEventParamAssigner assigner = TRANS_ASSIGNERS[i];
173         if (assigner.Assign(assigner.name, assigner.type, form, &params[validSize])) {
174             ++validSize;
175         }
176     }
177     return validSize;
178 }
179 
ConvertTransAlarmForm2Param(HiSysEventParam params[],size_t size,SoftbusEventForm * form)180 static inline size_t ConvertTransAlarmForm2Param(HiSysEventParam params[], size_t size, SoftbusEventForm *form)
181 {
182     size_t validSize = 0;
183     if (form == NULL || form->transAlarmExtra == NULL) {
184         return validSize;
185     }
186     for (size_t i = 0; i < size; ++i) {
187         HiSysEventParamAssigner assigner = g_transAlarmAssigners[i];
188         if (assigner.Assign(assigner.name, assigner.type, form, &params[validSize])) {
189             ++validSize;
190         }
191     }
192     return validSize;
193 }
194 
195 #ifdef __cplusplus
196 }
197 #endif /* __cplusplus */
198 #endif // TRANS_EVENT_CONVERTER_H
199