The peer P2P services are provided through an array of byte arrays. Each of those represent a P2P service at its bare level. --- include/peer.h | 1 + src/peer.c | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/include/peer.h b/include/peer.h index b667003..e98e442 100644 --- a/include/peer.h +++ b/include/peer.h @@ -77,6 +77,7 @@ void connman_peer_reset_services(struct connman_peer *peer); void connman_peer_add_service(struct connman_peer *peer, enum connman_peer_service_type type, const unsigned char *data, int data_length); +void connman_peer_services_changed(struct connman_peer *peer); int connman_peer_register(struct connman_peer *peer); void connman_peer_unregister(struct connman_peer *peer); diff --git a/src/peer.c b/src/peer.c index cf4f0e7..5d0f19f 100644 --- a/src/peer.c +++ b/src/peer.c @@ -288,6 +288,31 @@ static void append_ipv4(DBusMessageIter *iter, void *user_data) __connman_ipconfig_append_ipv4(peer->ipconfig, iter); } +static void append_peer_services(DBusMessageIter *iter, void *user_data) +{ + struct connman_peer *peer = user_data; + DBusMessageIter dict; + GSList *list; + + for (list = peer->services; list; list = list->next) { + struct _peer_service *service = list->data; + + connman_dbus_dict_open(iter, &dict); + + switch (service->type) { + case CONNMAN_PEER_SERVICE_UNKNOWN: + /* Should never happen */ + break; + case CONNMAN_PEER_SERVICE_WIFI_DISPLAY: + connman_dbus_property_append_fixed_array(&dict, + "WiFiDisplayIEs", DBUS_TYPE_BYTE, + &service->data, service->length); + break; + } + connman_dbus_dict_close(iter, &dict); + } +} + static void append_properties(DBusMessageIter *iter, struct connman_peer *peer) { const char *state = state2string(peer->state); @@ -300,7 +325,9 @@ static void append_properties(DBusMessageIter *iter, struct connman_peer *peer) connman_dbus_dict_append_basic(&dict, "Name", DBUS_TYPE_STRING, &peer->name); connman_dbus_dict_append_dict(&dict, "IPv4", append_ipv4, peer); - + connman_dbus_dict_append_array(&dict, "Services", + DBUS_TYPE_DICT_ENTRY, + append_peer_services, peer); connman_dbus_dict_close(iter, &dict); } @@ -870,6 +897,16 @@ void connman_peer_reset_services(struct connman_peer *peer) peer->services = NULL; } +void connman_peer_services_changed(struct connman_peer *peer) +{ + if (!peer || !peer->registered || !allow_property_changed(peer)) + return; + + connman_dbus_property_changed_array(peer->path, + CONNMAN_PEER_INTERFACE, "Services", + DBUS_TYPE_DICT_ENTRY, append_peer_services, peer); +} + void connman_peer_add_service(struct connman_peer *peer, enum connman_peer_service_type type, const unsigned char *data, int data_length) -- 1.8.5.5 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman