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 #include "p2p_callback_impl.h"
17 #include <securec.h>
18 #include <hdf_base.h>
19 #include <hdf_log.h>
20 #include <osal_mem.h>
21 
P2pCallbackDeviceFound(struct IWpaCallback * self,const struct HdiP2pDeviceInfoParam * deviceInfoParam,const char * ifName)22 static int32_t P2pCallbackDeviceFound(struct IWpaCallback *self,
23     const struct HdiP2pDeviceInfoParam *deviceInfoParam, const char *ifName)
24 {
25     (void)self;
26     if (deviceInfoParam == NULL || ifName == NULL) {
27         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
28         return HDF_ERR_INVALID_PARAM;
29     }
30     HDF_LOGE("%{public}s: srcAddress=" MACSTR, __func__, MAC2STR(deviceInfoParam->srcAddress));
31     return HDF_SUCCESS;
32 }
33 
P2pCallbackDeviceLost(struct IWpaCallback * self,const struct HdiP2pDeviceLostParam * deviceLostParam,const char * ifName)34 static int32_t P2pCallbackDeviceLost(struct IWpaCallback *self,
35     const struct HdiP2pDeviceLostParam *deviceLostParam, const char *ifName)
36 {
37     (void)self;
38     if (deviceLostParam == NULL || ifName == NULL) {
39         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
40         return HDF_ERR_INVALID_PARAM;
41     }
42     HDF_LOGE("%{public}s: p2pDeviceAddress=" MACSTR, __func__, MAC2STR(deviceLostParam->p2pDeviceAddress));
43     return HDF_SUCCESS;
44 }
45 
P2pCallbackGoNegotiationRequest(struct IWpaCallback * self,const struct HdiP2pGoNegotiationRequestParam * goNegotiationRequestParam,const char * ifName)46 static int32_t P2pCallbackGoNegotiationRequest(struct IWpaCallback *self,
47     const struct HdiP2pGoNegotiationRequestParam *goNegotiationRequestParam, const char *ifName)
48 {
49     (void)self;
50     if (goNegotiationRequestParam == NULL || ifName == NULL) {
51         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
52         return HDF_ERR_INVALID_PARAM;
53     }
54     HDF_LOGE("%{public}s: srcAddress=" MACSTR, __func__, MAC2STR(goNegotiationRequestParam->srcAddress));
55     return HDF_SUCCESS;
56 }
57 
P2pCallbackGoNegotiationCompleted(struct IWpaCallback * self,const struct HdiP2pGoNegotiationCompletedParam * goNegotiationCompletedParam,const char * ifName)58 static int32_t P2pCallbackGoNegotiationCompleted(struct IWpaCallback *self,
59     const struct HdiP2pGoNegotiationCompletedParam *goNegotiationCompletedParam, const char *ifName)
60 {
61     (void)self;
62     if (goNegotiationCompletedParam == NULL || ifName == NULL) {
63         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
64         return HDF_ERR_INVALID_PARAM;
65     }
66     HDF_LOGE("%{public}s: status=%{public}d", __func__, goNegotiationCompletedParam->status);
67     return HDF_SUCCESS;
68 }
69 
P2pCallbackInvitationReceived(struct IWpaCallback * self,const struct HdiP2pInvitationReceivedParam * invitationReceivedParam,const char * ifName)70 static int32_t P2pCallbackInvitationReceived(struct IWpaCallback *self,
71     const struct HdiP2pInvitationReceivedParam *invitationReceivedParam, const char *ifName)
72 {
73     (void)self;
74     if (invitationReceivedParam == NULL || ifName == NULL) {
75         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
76         return HDF_ERR_INVALID_PARAM;
77     }
78     HDF_LOGE("%{public}s: srcAddress=" MACSTR, __func__, MAC2STR(invitationReceivedParam->srcAddress));
79     return HDF_SUCCESS;
80 }
81 
P2pCallbackInvitationResult(struct IWpaCallback * self,const struct HdiP2pInvitationResultParam * invitationResultParam,const char * ifName)82 static int32_t P2pCallbackInvitationResult(struct IWpaCallback *self,
83     const struct HdiP2pInvitationResultParam *invitationResultParam, const char *ifName)
84 {
85     (void)self;
86     if (invitationResultParam == NULL || ifName == NULL) {
87         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
88         return HDF_ERR_INVALID_PARAM;
89     }
90     HDF_LOGE("%{public}s: bssid=" MACSTR, __func__, MAC2STR(invitationResultParam->bssid));
91     return HDF_SUCCESS;
92 }
93 
P2pCallbackGroupFormationSuccess(struct IWpaCallback * self,const char * ifName)94 static int32_t P2pCallbackGroupFormationSuccess(struct IWpaCallback *self, const char *ifName)
95 {
96     (void)self;
97     if (ifName == NULL) {
98         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
99         return HDF_ERR_INVALID_PARAM;
100     }
101     HDF_LOGE("%{public}s: GroupFormationSuccess", __func__);
102     return HDF_SUCCESS;
103 }
104 
P2pCallbackGroupFormationFailure(struct IWpaCallback * self,const char * reason,const char * ifName)105 static int32_t P2pCallbackGroupFormationFailure(struct IWpaCallback *self,
106     const char *reason, const char *ifName)
107 {
108     (void)self;
109     if (reason == NULL || ifName == NULL) {
110         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
111         return HDF_ERR_INVALID_PARAM;
112     }
113 
114     HDF_LOGE("%{public}s: reason=%{public}s", __func__, reason);
115     return HDF_SUCCESS;
116 }
117 
P2pCallbackGroupStarted(struct IWpaCallback * self,const struct HdiP2pGroupStartedParam * groupStartedParam,const char * ifName)118 static int32_t P2pCallbackGroupStarted(struct IWpaCallback *self,
119     const struct HdiP2pGroupStartedParam *groupStartedParam, const char *ifName)
120 {
121     (void)self;
122     if (groupStartedParam == NULL || ifName == NULL) {
123         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
124         return HDF_ERR_INVALID_PARAM;
125     }
126     HDF_LOGE("%{public}s: goDeviceAddress=" MACSTR, __func__, MAC2STR(groupStartedParam->goDeviceAddress));
127     return HDF_SUCCESS;
128 }
129 
P2pCallbackGroupRemoved(struct IWpaCallback * self,const struct HdiP2pGroupRemovedParam * groupRemovedParam,const char * ifName)130 static int32_t P2pCallbackGroupRemoved(struct IWpaCallback *self,
131     const struct HdiP2pGroupRemovedParam *groupRemovedParam, const char *ifName)
132 {
133     (void)self;
134     if (groupRemovedParam == NULL || ifName == NULL) {
135         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
136         return HDF_ERR_INVALID_PARAM;
137     }
138     HDF_LOGE("%{public}s: isGo=%{public}d groupIfName=%{public}s", __func__, groupRemovedParam->isGo,
139         groupRemovedParam->groupIfName);
140     return HDF_SUCCESS;
141 }
142 
P2pCallbackProvisionDiscoveryCompleted(struct IWpaCallback * self,const struct HdiP2pProvisionDiscoveryCompletedParam * param,const char * ifName)143 static int32_t P2pCallbackProvisionDiscoveryCompleted(struct IWpaCallback *self,
144     const struct HdiP2pProvisionDiscoveryCompletedParam *param, const char *ifName)
145 {
146     (void)self;
147     if (param == NULL || ifName == NULL) {
148         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
149         return HDF_ERR_INVALID_PARAM;
150     }
151     HDF_LOGE("%{public}s: p2pDeviceAddress=" MACSTR, __func__, MAC2STR(param->p2pDeviceAddress));
152     return HDF_SUCCESS;
153 }
154 
P2pCallbackFindStopped(struct IWpaCallback * self,const char * ifName)155 static int32_t P2pCallbackFindStopped(struct IWpaCallback *self, const char *ifName)
156 {
157     (void)self;
158     if (ifName == NULL) {
159         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
160         return HDF_ERR_INVALID_PARAM;
161     }
162     HDF_LOGE("%{public}s: FindStopped", __func__);
163     return HDF_SUCCESS;
164 }
165 
P2pCallbackServDiscReq(struct IWpaCallback * self,const struct HdiP2pServDiscReqInfoParam * servDiscReqInfoParam,const char * ifName)166 static int32_t P2pCallbackServDiscReq(struct IWpaCallback *self,
167     const struct HdiP2pServDiscReqInfoParam *servDiscReqInfoParam, const char *ifName)
168 {
169     (void)self;
170     if (servDiscReqInfoParam == NULL || ifName == NULL) {
171         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
172         return HDF_ERR_INVALID_PARAM;
173     }
174     HDF_LOGE("%{public}s: mac=" MACSTR, __func__, MAC2STR(servDiscReqInfoParam->mac));
175     return HDF_SUCCESS;
176 }
177 
P2pCallbackServDiscResp(struct IWpaCallback * self,const struct HdiP2pServDiscRespParam * param,const char * ifName)178 static int32_t P2pCallbackServDiscResp(struct IWpaCallback *self,
179     const struct HdiP2pServDiscRespParam *param, const char *ifName)
180 {
181     (void)self;
182     if (param == NULL || ifName == NULL) {
183         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
184         return HDF_ERR_INVALID_PARAM;
185     }
186     HDF_LOGE("%{public}s: srcAddress=" MACSTR, __func__, MAC2STR(param->srcAddress));
187     return HDF_SUCCESS;
188 }
189 
P2pCallbackStaConnectState(struct IWpaCallback * self,const struct HdiP2pStaConnectStateParam * param,const char * ifName)190 static int32_t P2pCallbackStaConnectState(struct IWpaCallback *self,
191     const struct HdiP2pStaConnectStateParam *param, const char *ifName)
192 {
193     (void)self;
194     if (param == NULL || ifName == NULL) {
195         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
196         return HDF_ERR_INVALID_PARAM;
197     }
198     HDF_LOGE("%{public}s: srcAddress=" MACSTR "p2pDeviceAddress=" MACSTR, __func__, MAC2STR(param->srcAddress),
199         MAC2STR(param->p2pDeviceAddress));
200     return HDF_SUCCESS;
201 }
202 
P2pCallbackIfaceCreated(struct IWpaCallback * self,const struct HdiP2pIfaceCreatedParam * param,const char * ifName)203 static int32_t P2pCallbackIfaceCreated(struct IWpaCallback *self,
204     const struct HdiP2pIfaceCreatedParam *param, const char *ifName)
205 {
206     (void)self;
207     if (param == NULL || ifName == NULL) {
208         HDF_LOGE("%{public}s: input parameter invalid!", __func__);
209         return HDF_ERR_INVALID_PARAM;
210     }
211     HDF_LOGE("%{public}s: isGo=%{public}d", __func__, param->isGo);
212     return HDF_SUCCESS;
213 }
214 
P2pCallbackServiceGet(void)215 struct IWpaCallback *P2pCallbackServiceGet(void)
216 {
217     struct P2pCallbackService *service =
218         (struct P2pCallbackService *)OsalMemCalloc(sizeof(struct P2pCallbackService));
219     if (service == NULL) {
220         HDF_LOGE("%{public}s: malloc P2pCallbackService obj failed!", __func__);
221         return NULL;
222     }
223 
224     service->interface.OnEventDeviceFound = P2pCallbackDeviceFound;
225     service->interface.OnEventDeviceLost = P2pCallbackDeviceLost;
226     service->interface.OnEventGoNegotiationRequest = P2pCallbackGoNegotiationRequest;
227     service->interface.OnEventGoNegotiationCompleted = P2pCallbackGoNegotiationCompleted;
228     service->interface.OnEventInvitationReceived = P2pCallbackInvitationReceived;
229     service->interface.OnEventInvitationResult = P2pCallbackInvitationResult;
230     service->interface.OnEventGroupFormationSuccess = P2pCallbackGroupFormationSuccess;
231     service->interface.OnEventGroupFormationFailure = P2pCallbackGroupFormationFailure;
232     service->interface.OnEventGroupStarted = P2pCallbackGroupStarted;
233     service->interface.OnEventGroupRemoved = P2pCallbackGroupRemoved;
234     service->interface.OnEventProvisionDiscoveryCompleted = P2pCallbackProvisionDiscoveryCompleted;
235     service->interface.OnEventFindStopped = P2pCallbackFindStopped;
236     service->interface.OnEventServDiscReq = P2pCallbackServDiscReq;
237     service->interface.OnEventServDiscResp = P2pCallbackServDiscResp;
238     service->interface.OnEventStaConnectState = P2pCallbackStaConnectState;
239     service->interface.OnEventIfaceCreated = P2pCallbackIfaceCreated;
240     return &service->interface;
241 }
242 
P2pCallbackServiceRelease(struct IWpaCallback * instance)243 void P2pCallbackServiceRelease(struct IWpaCallback *instance)
244 {
245     struct P2pCallbackService *service = (struct P2pCallbackService *)instance;
246     if (service == NULL) {
247         return;
248     }
249 
250     OsalMemFree(service);
251 }
252