• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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