Wifi plugin will be able to update the WFD IEs through that function and
will know if it has been successfully set or not by a callback.
---
 gsupplicant/gsupplicant.h |  6 +++++
 gsupplicant/supplicant.c  | 56 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+)

diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h
index e820381..c9aad8d 100644
--- a/gsupplicant/gsupplicant.h
+++ b/gsupplicant/gsupplicant.h
@@ -183,6 +183,8 @@ struct _GSupplicantP2PServiceParams {
        int query_length;
        unsigned char *response;
        int response_length;
+       unsigned char *wfd_ies;
+       int wfd_ies_length;
 };
 
 typedef struct _GSupplicantP2PServiceParams GSupplicantP2PServiceParams;
@@ -251,6 +253,10 @@ int 
g_supplicant_interface_p2p_add_service(GSupplicantInterface *interface,
 int g_supplicant_interface_p2p_del_service(GSupplicantInterface *interface,
                                GSupplicantP2PServiceParams 
*p2p_service_params);
 
+int g_supplicant_set_widi_ies(GSupplicantP2PServiceParams *p2p_service_params,
+                                       GSupplicantInterfaceCallback callback,
+                                       void *user_data);
+
 int g_supplicant_interface_connect(GSupplicantInterface *interface,
                                        GSupplicantSSID *ssid,
                                        GSupplicantInterfaceCallback callback,
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index b796524..e96d80b 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -4879,6 +4879,7 @@ static void interface_p2p_service_result(const char 
*error,
        g_free(data->service->query);
        g_free(data->service->response);
        g_free(data->service->service);
+       g_free(data->service->wfd_ies);
        g_free(data->service);
        dbus_free(data);
 }
@@ -5017,6 +5018,61 @@ int 
g_supplicant_interface_p2p_listen(GSupplicantInterface *interface,
                        NULL, &params, NULL);
 }
 
+static void widi_ies_params(DBusMessageIter *iter, void *user_data)
+{
+       struct p2p_service_data *data = user_data;
+       GSupplicantP2PServiceParams *service = data->service;
+       DBusMessageIter array;
+
+       SUPPLICANT_DBG("%p - %d", service->wfd_ies, service->wfd_ies_length);
+
+       dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+                                       DBUS_TYPE_BYTE_AS_STRING, &array);
+
+       if (service->wfd_ies && service->wfd_ies_length > 0) {
+               dbus_message_iter_append_fixed_array(&array, DBUS_TYPE_BYTE,
+                               &service->wfd_ies, service->wfd_ies_length);
+       }
+
+       dbus_message_iter_close_container(iter, &array);
+}
+
+int g_supplicant_set_widi_ies(GSupplicantP2PServiceParams *p2p_service_params,
+                                       GSupplicantInterfaceCallback callback,
+                                       void *user_data)
+{
+       struct p2p_service_data *data;
+       int ret;
+
+       SUPPLICANT_DBG("");
+
+       if (!system_available)
+               return -EFAULT;
+
+       data = dbus_malloc0(sizeof(*data));
+       data->service = p2p_service_params;
+       data->callback = callback;
+       data->user_data = user_data;
+
+       if (p2p_service_params->wfd_ies)
+               data->registration = true;
+
+       ret = supplicant_dbus_property_set(SUPPLICANT_PATH,
+                                       SUPPLICANT_INTERFACE, "WFDIEs",
+                                       DBUS_TYPE_ARRAY_AS_STRING
+                                       DBUS_TYPE_BYTE_AS_STRING,
+                                       widi_ies_params,
+                                       interface_p2p_service_result,
+                                       data, NULL);
+       if (ret < 0 && ret != -EINPROGRESS) {
+               dbus_free(data);
+               return ret;
+       }
+
+       return -EINPROGRESS;
+}
+
+
 static const char *g_supplicant_rule0 = "type=signal,"
                                        "path=" DBUS_PATH_DBUS ","
                                        "sender=" DBUS_SERVICE_DBUS ","
-- 
1.8.5.5

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to