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 d84b065..5dddd4e 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
[email protected]
https://lists.connman.net/mailman/listinfo/connman