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