gsupplicant notifies the wifi plugin relevantly when such information has changed, thus it's only a matter for the wifi plugin to update the peer accordingly. --- plugins/wifi.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
diff --git a/plugins/wifi.c b/plugins/wifi.c index 7b19673..63f5828 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -2607,6 +2607,23 @@ static void network_changed(GSupplicantNetwork *network, const char *property) } } +static void apply_peer_services(GSupplicantPeer *peer, + struct connman_peer *connman_peer) +{ + const unsigned char *data; + int length; + + DBG(""); + + connman_peer_reset_services(connman_peer); + + data = g_supplicant_peer_get_widi_ies(peer, &length); + if (data) { + connman_peer_add_service(connman_peer, + CONNMAN_PEER_SERVICE_WIFI_DISPLAY, data, length); + } +} + static void peer_found(GSupplicantPeer *peer) { GSupplicantInterface *iface = g_supplicant_peer_get_interface(peer); @@ -2627,6 +2644,7 @@ static void peer_found(GSupplicantPeer *peer) connman_peer = connman_peer_create(identifier); connman_peer_set_name(connman_peer, name); connman_peer_set_device(connman_peer, wifi->device); + apply_peer_services(peer, connman_peer); ret = connman_peer_register(connman_peer); if (ret < 0 && ret != -EALREADY) @@ -2678,6 +2696,8 @@ static void peer_changed(GSupplicantPeer *peer, GSupplicantPeerState state) switch (state) { case G_SUPPLICANT_PEER_SERVICES_CHANGED: + apply_peer_services(peer, connman_peer); + connman_peer_services_changed(connman_peer); return; case G_SUPPLICANT_PEER_GROUP_CHANGED: if (!g_supplicant_peer_is_in_a_group(peer)) -- 1.8.5.5 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman