1 /*
2  * Copyright (c) 2022-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 #include "wpa_callback_impl.h"
17 #include <securec.h>
18 #include <hdf_base.h>
19 #include <hdf_log.h>
20 #include <osal_mem.h>
21 
WpaCallbackDisconnected(struct IWpaCallback * self,const struct HdiWpaDisconnectParam * disconnectParam,const char * ifName)22 static int32_t WpaCallbackDisconnected(struct IWpaCallback *self,
23     const struct HdiWpaDisconnectParam *disconnectParam, const char *ifName)
24 {
25     (void)self;
26     if (disconnectParam == NULL || ifName == NULL) {
27         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
28         return HDF_ERR_INVALID_PARAM;
29     }
30     HDF_LOGE("WpaCallbackDisconnected: bssid=" MACSTR, MAC2STR(disconnectParam->bssid));
31     HDF_LOGE("WpaCallbackDisconnected: reasonCode=%{public}d, locallyGenerated=%{public}d",
32         disconnectParam->reasonCode, disconnectParam->reasonCode);
33     return HDF_SUCCESS;
34 }
35 
WpaCallbackOnConnected(struct IWpaCallback * self,const struct HdiWpaConnectParam * connectParam,const char * ifName)36 static int32_t WpaCallbackOnConnected(struct IWpaCallback *self,
37     const struct HdiWpaConnectParam *connectParam, const char *ifName)
38 {
39     (void)self;
40     if (connectParam == NULL || ifName == NULL) {
41         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
42         return HDF_ERR_INVALID_PARAM;
43     }
44     HDF_LOGE("WpaCallbackOnConnected: bssid=" MACSTR, MAC2STR(connectParam->bssid));
45     HDF_LOGE("WpaCallbackOnConnected: networkId=%{public}d", connectParam->networkId);
46     return HDF_SUCCESS;
47 }
48 
WpaCallbackBssidChanged(struct IWpaCallback * self,const struct HdiWpaBssidChangedParam * bssidChangedParam,const char * ifName)49 static int32_t WpaCallbackBssidChanged(struct IWpaCallback *self,
50     const struct HdiWpaBssidChangedParam *bssidChangedParam, const char *ifName)
51 {
52     (void)self;
53     if (bssidChangedParam == NULL || ifName == NULL) {
54         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
55         return HDF_ERR_INVALID_PARAM;
56     }
57     HDF_LOGE("WpaCallbackBssidChanged: bssid=" MACSTR, MAC2STR(bssidChangedParam->bssid));
58     HDF_LOGE("WpaCallbackBssidChanged: reason=%{public}s", bssidChangedParam->reason);
59     return HDF_SUCCESS;
60 }
61 
WpaCallbackStateChanged(struct IWpaCallback * self,const struct HdiWpaStateChangedParam * statechangedParam,const char * ifName)62 static int32_t WpaCallbackStateChanged(struct IWpaCallback *self,
63     const struct HdiWpaStateChangedParam *statechangedParam, const char *ifName)
64 {
65     (void)self;
66     if (statechangedParam == NULL || ifName == NULL) {
67         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
68         return HDF_ERR_INVALID_PARAM;
69     }
70     HDF_LOGE("WpaCallbackStateChanged: bssid=" MACSTR, MAC2STR(statechangedParam->bssid));
71     HDF_LOGE("WpaCallbackStateChanged: status=%{public}d,networkId=%{public}d,ssid=%{public}s",
72         statechangedParam->status, statechangedParam->networkId, statechangedParam->ssid);
73     return HDF_SUCCESS;
74 }
75 
WpaCallbackTempDisabled(struct IWpaCallback * self,const struct HdiWpaTempDisabledParam * tempDisabledParam,const char * ifName)76 static int32_t WpaCallbackTempDisabled(struct IWpaCallback *self,
77     const struct HdiWpaTempDisabledParam *tempDisabledParam, const char *ifName)
78 {
79     (void)self;
80     if (tempDisabledParam == NULL || ifName == NULL) {
81         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
82         return HDF_ERR_INVALID_PARAM;
83     }
84 
85     HDF_LOGE("WpaCallbackTempDisabled: networkid=%{public}d,ssid=%{public}s,authFailures=%{public}d, \
86         duration=%{public}d, reason=%{public}s", tempDisabledParam->networkId, tempDisabledParam->ssid,
87         tempDisabledParam->authFailures, tempDisabledParam->duration, tempDisabledParam->reason);
88     return HDF_SUCCESS;
89 }
90 
WpaCallbackAssociateReject(struct IWpaCallback * self,const struct HdiWpaAssociateRejectParam * associateRejectParam,const char * ifName)91 static int32_t WpaCallbackAssociateReject(struct IWpaCallback *self,
92     const struct HdiWpaAssociateRejectParam *associateRejectParam, const char *ifName)
93 {
94     (void)self;
95     if (associateRejectParam == NULL || ifName == NULL) {
96         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
97         return HDF_ERR_INVALID_PARAM;
98     }
99     HDF_LOGE("WpaCallbackAssociateReject: bssid=" MACSTR, MAC2STR(associateRejectParam->bssid));
100     HDF_LOGE("WpaCallbackAssociateReject: statusCode=%{public}d,timeOut=%{public}d",
101         associateRejectParam->statusCode, associateRejectParam->timeOut);
102     return HDF_SUCCESS;
103 }
104 
WpaCallbackWpsOverlap(struct IWpaCallback * self,const char * ifName)105 static int32_t WpaCallbackWpsOverlap(struct IWpaCallback *self, const char *ifName)
106 {
107     (void)self;
108     if (ifName == NULL) {
109         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
110         return HDF_ERR_INVALID_PARAM;
111     }
112 
113     HDF_LOGE("WpaCallbackWpsOverlap: input successfully");
114     return HDF_SUCCESS;
115 }
116 
WpaCallbackWpsTimeout(struct IWpaCallback * self,const char * ifName)117 static int32_t WpaCallbackWpsTimeout(struct IWpaCallback *self, const char *ifName)
118 {
119     (void)self;
120     if (ifName == NULL) {
121         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
122         return HDF_ERR_INVALID_PARAM;
123     }
124 
125     HDF_LOGE("WpaCallbackWpsTimeout: input successfully");
126     return HDF_SUCCESS;
127 }
128 
WpaCallbackAuthTimeout(struct IWpaCallback * self,const char * ifName)129 static int32_t WpaCallbackAuthTimeout(struct IWpaCallback *self, const char *ifName)
130 {
131     (void)self;
132     if (ifName == NULL) {
133         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
134         return HDF_ERR_INVALID_PARAM;
135     }
136 
137     HDF_LOGE("WpaCallbackAuthTimeout: input successfully");
138     return HDF_SUCCESS;
139 }
140 
WpaCallbackScanResult(struct IWpaCallback * self,const struct HdiWpaRecvScanResultParam * recvScanResultParamconst,const char * ifName)141 static int32_t WpaCallbackScanResult(struct IWpaCallback *self,
142     const struct HdiWpaRecvScanResultParam *recvScanResultParamconst, const char *ifName)
143 {
144     (void)self;
145     if (ifName == NULL || recvScanResultParamconst ==NULL) {
146         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
147         return HDF_ERR_INVALID_PARAM;
148     }
149 
150     HDF_LOGE("WpaCallbackScanResult: scanId=%{public}d", recvScanResultParamconst->scanId);
151     return HDF_SUCCESS;
152 }
153 
WpaCallbackAuthReject(struct IWpaCallback * self,const struct HdiWpaAuthRejectParam * authRejectParam,const char * ifName)154 static int32_t WpaCallbackAuthReject(struct IWpaCallback *self,
155     const struct HdiWpaAuthRejectParam *authRejectParam, const char *ifName)
156 {
157     (void)self;
158     if (ifName == NULL || authRejectParam == NULL) {
159         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
160         return HDF_ERR_INVALID_PARAM;
161     }
162     HDF_LOGI("WpaCallbackAuthReject: bssid=" MACSTR " statusCode=%{public}hd,authType=%{public}hd,authTransaction="
163               "%{public}hd", MAC2STR(authRejectParam->bssid), authRejectParam->statusCode, authRejectParam->authType,
164               authRejectParam->authTransaction);
165     return HDF_SUCCESS;
166 }
167 
WpaCallbackServiceGet(void)168 struct IWpaCallback *WpaCallbackServiceGet(void)
169 {
170     struct WpaCallbackService *service =
171         (struct WpaCallbackService *)OsalMemCalloc(sizeof(struct WpaCallbackService));
172     if (service == NULL) {
173         HDF_LOGE("%{public}s: malloc WpaCallbackService obj failed!", __func__);
174         return NULL;
175     }
176 
177     service->interface.OnEventDisconnected = WpaCallbackDisconnected;
178     service->interface.OnEventConnected = WpaCallbackOnConnected;
179     service->interface.OnEventBssidChanged = WpaCallbackBssidChanged;
180     service->interface.OnEventStateChanged = WpaCallbackStateChanged;
181     service->interface.OnEventTempDisabled = WpaCallbackTempDisabled;
182     service->interface.OnEventAssociateReject = WpaCallbackAssociateReject;
183     service->interface.OnEventWpsOverlap = WpaCallbackWpsOverlap;
184     service->interface.OnEventWpsTimeout = WpaCallbackWpsTimeout;
185     service->interface.OnEventAuthTimeout = WpaCallbackAuthTimeout;
186     service->interface.OnEventScanResult = WpaCallbackScanResult;
187     service->interface.OnEventAuthReject = WpaCallbackAuthReject;
188     return &service->interface;
189 }
190 
WpaCallbackServiceRelease(struct IWpaCallback * instance)191 void WpaCallbackServiceRelease(struct IWpaCallback *instance)
192 {
193     struct WpaCallbackService *service = (struct WpaCallbackService *)instance;
194     if (service == NULL) {
195         return;
196     }
197 
198     OsalMemFree(service);
199 }
200