unsigned int wps_device_pwd_id;
unsigned int wps_cfg_methods;
gboolean is_wfd_device;
+ char *vsie;
} wfd_discovery_entry_s;
unsigned char client_ip_addr[IPADDR_LEN];
unsigned char go_ip_addr[IPADDR_LEN];
int rssi;
+ char *vsie;
} wfd_device_s;
typedef struct {
void is_discoverable_handler(GVariant *parameters, void *dest);
void is_listening_only_handler(GVariant *parameters, void *dest);
void get_peer_info_handler(GVariant *parameters, void *dest);
+void get_peer_vsie_handler(GVariant *parameters, void *dest);
void get_state_handler(GVariant *parameters, void *dest);
void create_group_handler(GVariant *parameters, void *dest);
void destroy_group_handler(GVariant *parameters, void *dest);
#define OEM_QUERY_ID_LEN 15
#define OEM_SERVICE_MAX_LEN 1024
#define OEM_CONFIG_METHOD_LEN 256
+#define OEM_VSIE_MAX_LEN 1024
/* Referring to Wi-Fi Peer-to-Peer Services Technical Specification v1.1
* The default P2Ps PIN is 12345670. Any device decided to be GO will use
int wps_mode;
wfd_oem_display_s display;
int rssi;
+ char *vsie;
} wfd_oem_device_s;
typedef struct {
int has_asp_services;
int has_asp2_services;
int rssi;
+ char *vsie;
} wfd_oem_dev_data_s;
typedef struct {
Name: wifi-direct-manager
Summary: Wi-Fi Direct manger
-Version: 1.2.266
+Version: 1.2.267
Release: 1
Group: Network & Connectivity/Wireless
License: Apache-2.0
{
GVariantIter *iter = NULL;
int length = 0;
- int res = 1;
if (!dst || !src || size == 0) {
WDP_LOGE("Invalid parameter");
}
g_variant_iter_free(iter);
- if (length < size) {
- WDP_LOGE("array is shorter than size");
- res = -1;
- }
-
- return res;
+ return length;
}
static int __ws_byte_to_txt(const unsigned char *src, char **dst, int src_len)
if (!ISZEROMACADDR(peer->go_dev_addr))
peer->dev_role = WFD_OEM_DEV_ROLE_GC;
+
+ } else if (g_strcmp0(key, "VSIE") == 0) {
+ int vsie_len;
+ unsigned char vsie[OEM_VSIE_MAX_LEN] = {0,};
+
+ vsie_len = __ws_unpack_ay(vsie, value, OEM_VSIE_MAX_LEN);
+ if (vsie_len > 0) {
+ __ws_byte_to_txt(vsie, (char **)&(peer->vsie), vsie_len);
+ WDP_LOGD("VSIE [%s]", peer->vsie);
+ }
+
} else {
WDP_LOGD("Unknown value");
}
if (!ISZEROMACADDR(go_dev_addr))
peer->dev_role = WFD_OEM_DEV_ROLE_GC;
+
} else if (g_strcmp0(key, "AdvertiseService") == 0) {
if (value != NULL && g_variant_get_size(value) != 0)
peer->has_asp_services = 1;
else
peer->has_asp_services = 0;
+
} else if (g_strcmp0(key, "AdvertiseASPService") == 0) {
if (value != NULL && g_variant_get_size(value) != 0)
peer->has_asp2_services = 1;
else
peer->has_asp2_services = 0;
+ } else if (g_strcmp0(key, "VSIE") == 0) {
+ int vsie_len;
+ unsigned char vsie[OEM_VSIE_MAX_LEN] = {0,};
+
+ vsie_len = __ws_unpack_ay(vsie, value, OEM_VSIE_MAX_LEN);
+ if (vsie_len > 0) {
+ __ws_byte_to_txt(vsie, (char **)&(peer->vsie), vsie_len);
+ WDP_LOGD("VSIE [%s]", peer->vsie);
+ }
+
} else {
WDP_LOGD("Unknown value");
}
__ws_get_peer_property, ws_dev);
if (res < 0) {
- WDP_LOGE("Failed to send command to wpa_supplicant");
- g_free(ws_dev);
- __WDP_LOG_FUNC_EXIT__;
- return -1;
+ WDP_LOGE("Failed to send command to wpa_supplicant");
+ g_free(ws_dev);
+ __WDP_LOG_FUNC_EXIT__;
+ return -1;
} else {
WDP_LOGD("succeeded to get peer info");
*peer = ws_dev;
"<arg type='i' name='error_code' direction='out'/>"
"<arg type='a{sv}' name='peer_details' direction='out'/>"
"</method>"
+ "<method name='GetPeerVsie'>"
+ "<arg type='s' name='peer_mac_addr' direction='in'/>"
+ "<arg type='i' name='error_code' direction='out'/>"
+ "<arg type='s' name='vsie' direction='out'/>"
+ "</method>"
"<method name='GetState'>"
"<arg type='i' name='error_code' direction='out'/>"
"<arg type='i' name='state' direction='out'/>"
if (manager->is_wifi_display_supported)
memcpy(&(peer->display), &(data->display), sizeof(wfd_display_s));
+ if (data->vsie) {
+ if (peer->vsie)
+ free(peer->vsie);
+ peer->vsie = g_strdup(data->vsie);
+ free(data->vsie);
+ data->vsie = NULL;
+ }
+ WDS_LOGD("Peer name: [%s], vsie: [%s]", peer->dev_name, peer->vsie);
+
#if !(__GNUC__ <= 4 && __GNUC_MINOR__ < 8)
wfd_util_get_current_time(&peer->time);
#else
{"IsDiscoverable", is_discoverable_handler},
{"IsListeningOnly", is_listening_only_handler},
{"GetPeerInfo", get_peer_info_handler},
+ {"GetPeerVsie", get_peer_vsie_handler},
{"GetState", get_state_handler},
{NULL, NULL},
};
peer_dev->time = time;
peer_dev->channel = oem_dev->channel;
- free(oem_dev);
+ if (oem_dev->vsie) {
+ if (peer_dev->vsie)
+ g_free(peer_dev->vsie);
+ peer_dev->vsie = g_strdup(oem_dev->vsie);
+ g_free(oem_dev->vsie);
+ }
+
+ g_free(oem_dev);
peer_info = (wfd_discovery_entry_s*) g_try_malloc0(sizeof(wfd_discovery_entry_s));
if (!(peer_info)) {
if (peer_dev->display.availability && peer_dev->display.port)
peer_info->is_wfd_device = 1;
+ if (peer_dev->vsie)
+ peer_info->vsie = g_strdup(peer_dev->vsie);
+
*peer = peer_info;
//LCOV_EXCL_STOP
__WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
wfd_manager_dbus_pack_ay(connected_peer->ip_addr, IPADDR_LEN));
}
+ g_variant_builder_add(builder_peer, "{sv}",
+ "Vsie",
+ g_variant_new_string(peer->vsie));
+
ret = WIFI_DIRECT_ERROR_NONE;
return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
g_variant_builder_unref(builder_peer);
+ g_free(peer->vsie);
g_free(peer);
wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
return;
}
+void get_peer_vsie_handler(GVariant *parameters, void *dest)
+{
+ __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
+ wfd_manager_s *manager = wfd_get_manager();
+ GVariant *return_parameters = NULL;
+ wfd_device_s *peer = NULL;
+ const char *mac_address = NULL;
+ unsigned char mac_addr[MACADDR_LEN] = {0, };
+ int ret;
+
+ WIFI_DIRECT_METHOD_RET_IF_NULL(manager);
+
+ g_variant_get(parameters, "(&s)", &mac_address);
+ macaddr_atoe(mac_address, mac_addr);
+
+ if (manager->state < WIFI_DIRECT_STATE_ACTIVATED)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_NOT_PERMITTED, dest);
+
+ peer = wfd_manager_get_peer_by_addr(manager, mac_addr);
+ if (!peer)
+ WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_INVALID_PARAMETER, dest);
+
+ ret = WIFI_DIRECT_ERROR_NONE;
+ return_parameters = g_variant_new("(is)", ret, peer->vsie ? peer->vsie : "");
+ wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
+
+ __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
+ return;
+}
+
void get_state_handler(GVariant *parameters, void *dest)
{
__WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE