Fix bugs in start/stop service discovery 12/249112/2 submit/tizen/20201208.051833
authorYu <jiung.yu@samsung.com>
Mon, 7 Dec 2020 07:38:44 +0000 (16:38 +0900)
committerYu <jiung.yu@samsung.com>
Tue, 8 Dec 2020 01:16:25 +0000 (10:16 +0900)
Description: Wrong parameter name was used to start
service discovery request.
Wrong data type was used to cancel service discovery
request
Change-Id: I37914cbb948c190f2f05fc7fb3e35b413bee0307
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
packaging/wifi-direct-manager.spec
plugin/wpasupplicant/ctrl_iface_dbus/wfd-plugin-wpasupplicant.c

index eaa939aed643d6cbdd777c0c38c05878d1be057f..0a3a1d94c67be3136371612abffcbb2d70cd885d 100644 (file)
@@ -6,7 +6,7 @@
 
 Name:          wifi-direct-manager
 Summary:       Wi-Fi Direct manger
-Version:       1.3.4
+Version:       1.3.5
 Release:       1
 Group:      Network & Connectivity/Wireless
 License:    Apache-2.0
index 03979908b17128129c7d7218cd2edd1913774679..84049a161767cc5065185e697f00e50efbd59007 100644 (file)
@@ -6231,22 +6231,22 @@ static wfd_oem_service_s* _remove_service_query(char * s_type, char *mac_str, ch
                return NULL;
        }
 
-       WDP_LOGD("query id :[0x%s]", query_id);
+       WDP_LOGD("query id :[%s]", query_id);
 
        return data;
 }
 
-void __add_service_query(GVariant *value, void *mac_addr)
+void __add_service_query(GVariant *value, void *user_data)
 {
        __WDP_LOG_FUNC_ENTER__;
        wfd_oem_service_s *service = NULL;
 
        long long unsigned ref = 0;
-       unsigned char *mac_address = (unsigned char *)mac_addr;
-       char mac_str[18] = {0, };
-
        int res = 0;
 
+       if (!user_data)
+               return;
+
        g_variant_get(value, "(t)", &ref);
 
        service = (wfd_oem_service_s*) g_try_malloc0(sizeof(wfd_oem_service_s));
@@ -6255,15 +6255,9 @@ void __add_service_query(GVariant *value, void *mac_addr)
                return;
        }
 
-       if (mac_address[0] == 0 && mac_address[1] == 0 && mac_address[2] == 0 &&
-                       mac_address[3] == 0 && mac_address[4] == 0 && mac_address[5] == 0) {
-               g_snprintf(mac_str, WS_MACSTR_LEN , "%s", SERV_BROADCAST_ADDRESS);
-       } else {
-               g_snprintf(mac_str, WS_MACSTR_LEN, MACSTR, MAC2STR(mac_address));
-       }
+       memcpy(service, user_data, sizeof(wfd_oem_service_s));
 
-       g_strlcpy(service->dev_addr, mac_str, OEM_MACSTR_LEN);
-       g_snprintf(service->query_id, OEM_QUERY_ID_LEN + 1, "0x%llx", ref);
+       g_snprintf(service->query_id, OEM_QUERY_ID_LEN + 1, "%llx", ref);
 
        res = _check_service_query_exists(service);
        if (res)
@@ -6283,6 +6277,7 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
        GDBusConnection *g_dbus = NULL;
        GVariantBuilder *builder = NULL;
        GVariant *value = NULL;
+       wfd_oem_service_s data = {0,};
        dbus_method_param_s params;
        static char peer_path[DBUS_OBJECT_PATH_MAX] = {'\0',};
        int i = 0;
@@ -6312,7 +6307,7 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
 
        builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
 
-       if (mac_addr) {
+       if (mac_addr && !ISZEROMACADDR(mac_addr)) {
                g_snprintf(peer_path, DBUS_OBJECT_PATH_MAX, "%s/Peers/"
                                COMPACT_MACSTR, g_pd->iface_path, MAC2STR(mac_addr));
                WDP_LOGD("get peer path [%s]", peer_path);
@@ -6329,11 +6324,14 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
                        g_variant_builder_add(query, "y", service_all[i]);
                g_variant_builder_add(builder, "{sv}", "query", g_variant_new("ay", query));
                g_variant_builder_unref(query);
+               g_strlcpy(data.service_type, SERV_DISC_REQ_ALL, OEM_SERVICE_TYPE_LEN + 1);
 
-               } else if (service_type == WFD_OEM_SERVICE_TYPE_UPNP) {
+       } else if (service_type == WFD_OEM_SERVICE_TYPE_UPNP) {
 
                g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new_string("upnp"));
-               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_uint16(TRUE));
+               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_int32(10));
+               g_variant_builder_add(builder, "{sv}", "service", g_variant_new_string("ssdp:all"));
+               g_strlcpy(data.service_type, SERV_DISC_REQ_UPNP, OEM_SERVICE_TYPE_LEN + 1);
 
        } else if (service_type == WFD_OEM_SERVICE_TYPE_BONJOUR) {
 
@@ -6343,8 +6341,9 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
                query = g_variant_builder_new(G_VARIANT_TYPE("ay"));
                for (i = 0; i < SERVICE_QUERY_LEN; i++)
                        g_variant_builder_add(query, "y", service_bonjour[i]);
-               g_variant_builder_add(builder, "{sv}", "query", g_variant_new("ay", query));
+               g_variant_builder_add(builder, "{sv}", "tlv", g_variant_new("ay", query));
                g_variant_builder_unref(query);
+               g_strlcpy(data.service_type, SERV_DISC_REQ_BONJOUR, OEM_SERVICE_TYPE_LEN + 1);
        }
 
        value = g_variant_new("(a{sv})", builder);
@@ -6353,7 +6352,12 @@ int ws_start_service_discovery(unsigned char *mac_addr, int service_type)
        params.params = value;
        DEBUG_G_VARIANT("Params : ", params.params);
 
-       res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, __add_service_query, mac_addr);
+       if (ISZEROMACADDR(mac_addr))
+               snprintf(data.dev_addr, WS_MACSTR_LEN , "%s", SERV_BROADCAST_ADDRESS);
+       else
+               snprintf(data.dev_addr, WS_MACSTR_LEN, MACSTR, MAC2STR(mac_addr));
+
+       res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, __add_service_query, &data);
        if (res < 0)
                WDP_LOGE("Failed to send command to wpa_supplicant");
        else
@@ -6372,6 +6376,7 @@ int ws_cancel_service_discovery(unsigned char *mac_addr, int service_type)
        char query_id[OEM_QUERY_ID_LEN + 1] = {0, };
        char s_type[OEM_SERVICE_TYPE_LEN + 1] = {0, };
        char mac_str[18] = {0, };
+       long long unsigned id;
 
        int res = 0;
 
@@ -6394,8 +6399,7 @@ int ws_cancel_service_discovery(unsigned char *mac_addr, int service_type)
                return -1;
        }
 
-       if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 &&
-               mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) {
+       if (ISZEROMACADDR(mac_addr)) {
                snprintf(mac_str, WS_MACSTR_LEN , "%s", SERV_BROADCAST_ADDRESS);
        } else {
                snprintf(mac_str, WS_MACSTR_LEN, MACSTR, MAC2STR(mac_addr));
@@ -6428,8 +6432,8 @@ int ws_cancel_service_discovery(unsigned char *mac_addr, int service_type)
        memset(&params, 0x0, sizeof(dbus_method_param_s));
 
        dbus_set_method_param(&params, "ServiceDiscoveryCancelRequest", g_pd->iface_path, g_dbus);
-
-       params.params = g_variant_new("(t)", strtoul(query_id, NULL, 16));
+       id = (long long unsigned)strtoul(query_id, NULL, 16);
+       params.params = g_variant_new("(t)", id);
 
        res = dbus_method_call(&params, SUPPLICANT_P2PDEVICE, NULL, NULL);
        if (res < 0)
@@ -6487,7 +6491,7 @@ int ws_serv_add(wfd_oem_new_service_s *service)
 
        } else if (service->protocol == WFD_OEM_SERVICE_TYPE_UPNP) {
                g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new_string("upnp"));
-               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_uint16(TRUE));
+               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_int32(10));
                g_variant_builder_add(builder, "{sv}", "service", g_variant_new_string(service->data.upnp.service));
        }
 
@@ -6549,7 +6553,7 @@ int ws_serv_del(wfd_oem_new_service_s *service)
 
        } else if (service->protocol == WFD_OEM_SERVICE_TYPE_UPNP) {
                g_variant_builder_add(builder, "{sv}", "service_type", g_variant_new_string("upnp"));
-               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_uint16(TRUE));
+               g_variant_builder_add(builder, "{sv}", "version", g_variant_new_int32(10));
                g_variant_builder_add(builder, "{sv}", "service", g_variant_new_string(service->data.upnp.service));
        }