Basically maintaining a simple list of byte arrays, provided by the wifi plugin in use. --- include/peer.h | 9 +++++++++ src/peer.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+)
diff --git a/include/peer.h b/include/peer.h index 5e1795f..b667003 100644 --- a/include/peer.h +++ b/include/peer.h @@ -42,6 +42,11 @@ enum connman_peer_wps_method { CONNMAN_PEER_WPS_PIN = 2, }; +enum connman_peer_service_type { + CONNMAN_PEER_SERVICE_UNKNOWN = 0, + CONNMAN_PEER_SERVICE_WIFI_DISPLAY = 1, +}; + struct connman_peer; struct connman_peer *connman_peer_create(const char *identifier); @@ -68,6 +73,10 @@ void connman_peer_set_as_master(struct connman_peer *peer, bool master); int connman_peer_set_state(struct connman_peer *peer, enum connman_peer_state new_state); int connman_peer_request_connection(struct connman_peer *peer); +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); 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 5f2a699..cf4f0e7 100644 --- a/src/peer.c +++ b/src/peer.c @@ -44,6 +44,12 @@ struct _peers_notify { GHashTable *remove; } *peers_notify; +struct _peer_service { + enum connman_peer_service_type type; + unsigned char *data; + int length; +}; + struct connman_peer { int refcount; struct connman_device *device; @@ -58,6 +64,7 @@ struct connman_peer { bool connection_master; struct connman_ippool *ip_pool; GDHCPServer *dhcp_server; + GSList *services; }; static void stop_dhcp_server(struct connman_peer *peer) @@ -188,6 +195,9 @@ static void peer_free(gpointer data) peer->device = NULL; } + if (peer->services) + connman_peer_reset_services(peer); + g_free(peer->identifier); g_free(peer->name); @@ -840,6 +850,43 @@ int connman_peer_request_connection(struct connman_peer *peer) NULL, NULL); } +static void peer_service_free(gpointer data) +{ + struct _peer_service *service = data; + + if (!service) + return; + + g_free(service->data); + g_free(service); +} + +void connman_peer_reset_services(struct connman_peer *peer) +{ + if (!peer) + return; + + g_slist_free_full(peer->services, peer_service_free); + peer->services = NULL; +} + +void connman_peer_add_service(struct connman_peer *peer, + enum connman_peer_service_type type, + const unsigned char *data, int data_length) +{ + struct _peer_service *service; + + if (!peer || !data || type == CONNMAN_PEER_SERVICE_UNKNOWN) + return; + + service = g_malloc0(sizeof(struct _peer_service)); + service->type = type; + service->data = g_memdup(data, data_length * sizeof(unsigned char)); + service->length = data_length; + + peer->services = g_slist_prepend(peer->services, service); +} + static void peer_up(struct connman_ipconfig *ipconfig, const char *ifname) { DBG("%s up", ifname); -- 1.8.5.5 _______________________________________________ connman mailing list connman@connman.net https://lists.connman.net/mailman/listinfo/connman