1 /*
2 * WPA Supplicant - Interface to receive callbacks from the core supplicant
3 * Copyright (c) 2025, Google Inc. All rights reserved.
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9 #include "utils.h"
10 #include "usd_utils.h"
11
12 extern "C"
13 {
14 #include "callback_bridge.h"
15 }
16
17 using ::aidl::android::system::wifi::mainline_supplicant::UsdMessageInfo;
18
mainline_aidl_notify_usd_service_discovered(struct wpa_supplicant * wpa_s,enum nan_service_protocol_type srv_proto_type,int subscribe_id,int peer_publish_id,const u8 * peer_addr,bool fsd,const u8 * ssi,size_t ssi_len)19 void mainline_aidl_notify_usd_service_discovered(struct wpa_supplicant *wpa_s,
20 enum nan_service_protocol_type srv_proto_type,
21 int subscribe_id, int peer_publish_id, const u8 *peer_addr,
22 bool fsd, const u8 *ssi, size_t ssi_len) {
23 if (!wpa_s || !peer_addr)
24 return;
25
26 auto callback = getStaIfaceCallback(wpa_s->ifname);
27 if (!callback)
28 return;
29
30 wpa_printf(MSG_DEBUG, "Notifying USD service discovered");
31 auto serviceDiscoveryInfo = createUsdServiceDiscoveryInfo(
32 srv_proto_type, subscribe_id, peer_publish_id, peer_addr, fsd, ssi, ssi_len);
33 callback->onUsdServiceDiscovered(serviceDiscoveryInfo);
34 }
35
mainline_aidl_notify_usd_publish_replied(struct wpa_supplicant * wpa_s,enum nan_service_protocol_type srv_proto_type,int publish_id,int peer_subscribe_id,const u8 * peer_addr,const u8 * ssi,size_t ssi_len)36 void mainline_aidl_notify_usd_publish_replied(struct wpa_supplicant *wpa_s,
37 enum nan_service_protocol_type srv_proto_type,
38 int publish_id, int peer_subscribe_id,
39 const u8 *peer_addr, const u8 *ssi, size_t ssi_len) {
40 if (!wpa_s || !peer_addr)
41 return;
42
43 auto callback = getStaIfaceCallback(wpa_s->ifname);
44 if (!callback)
45 return;
46
47 wpa_printf(MSG_DEBUG, "Notifying USD publish replied");
48 auto serviceDiscoveryInfo = createUsdServiceDiscoveryInfo(
49 srv_proto_type, publish_id, peer_subscribe_id, peer_addr, false /* fsd */,
50 ssi, ssi_len);
51 callback->onUsdPublishReplied(serviceDiscoveryInfo);
52 }
53
mainline_aidl_notify_usd_message_received(struct wpa_supplicant * wpa_s,int id,int peer_instance_id,const u8 * peer_addr,const u8 * message,size_t message_len)54 void mainline_aidl_notify_usd_message_received(struct wpa_supplicant *wpa_s, int id,
55 int peer_instance_id, const u8 *peer_addr,
56 const u8 *message, size_t message_len) {
57 if (!wpa_s || !peer_addr)
58 return;
59
60 auto callback = getStaIfaceCallback(wpa_s->ifname);
61 if (!callback)
62 return;
63
64 UsdMessageInfo messageInfo;
65 messageInfo.ownId = id;
66 messageInfo.peerId = peer_instance_id;
67 messageInfo.peerMacAddress = macAddrBytesToArray(peer_addr);
68 messageInfo.message = message ? byteArrToVec(message, message_len) : std::vector<uint8_t>();
69
70 wpa_printf(MSG_DEBUG, "Notifying USD message received");
71 callback->onUsdMessageReceived(messageInfo);
72 }
73
mainline_aidl_notify_usd_publish_terminated(struct wpa_supplicant * wpa_s,int publish_id,enum nan_de_reason reason)74 void mainline_aidl_notify_usd_publish_terminated(struct wpa_supplicant *wpa_s,
75 int publish_id, enum nan_de_reason reason) {
76 if (!wpa_s)
77 return;
78
79 auto callback = getStaIfaceCallback(wpa_s->ifname);
80 if (!callback)
81 return;
82
83 wpa_printf(MSG_DEBUG, "Notifying USD publish terminated");
84 callback->onUsdPublishTerminated(
85 publish_id, convertInternalUsdTerminateReasonCodeToAidl(reason));
86 }
87
mainline_aidl_notify_usd_subscribe_terminated(struct wpa_supplicant * wpa_s,int subscribe_id,enum nan_de_reason reason)88 void mainline_aidl_notify_usd_subscribe_terminated(struct wpa_supplicant *wpa_s,
89 int subscribe_id, enum nan_de_reason reason) {
90 if (!wpa_s)
91 return;
92
93 auto callback = getStaIfaceCallback(wpa_s->ifname);
94 if (!callback)
95 return;
96
97 wpa_printf(MSG_DEBUG, "Notifying USD subscribe terminated");
98 callback->onUsdSubscribeTerminated(
99 subscribe_id, convertInternalUsdTerminateReasonCodeToAidl(reason));
100 }
101