Implement dnssd_cancel_browse_service 26/281826/1
authorcheoleun moon <chleun.moon@samsung.com>
Thu, 22 Sep 2022 07:28:23 +0000 (16:28 +0900)
committercheoleun moon <chleun.moon@samsung.com>
Thu, 22 Sep 2022 07:28:27 +0000 (16:28 +0900)
Change-Id: I93c90e1acbf97e2d3c4ac6d6bd66a62c9c301322

src/dns-sd/dns-sd.c

index 7e01442788e5961a4863cb7b154ae0cce6f03a64..a393e7a5439c3eedc2661b3ab0645d9f2662236b 100644 (file)
@@ -1656,8 +1656,71 @@ EXPORT_API int dnssd_browse_service(const char *service_type, const char *interf
        return _dnssd_browse_service(service_type, interface, 0, browser, found_cb, user_data);
 }
 
+static int __get_valid_browsing_handle(dnssd_service_h dnssd_service, dnssd_handle_s **handle)
+{
+       dnssd_handle_s *local_handle;
+
+       CHECK_INITIALIZED();
+
+       local_handle = __dnssd_get_struct_from_handle(dnssd_service);
+       if (local_handle == NULL) {
+               DNSSD_LOGD("Service Handler not found");
+               __DNSSD_LOG_FUNC_EXIT__;
+               return DNSSD_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       if (local_handle->op_type != DNSSD_TYPE_BROWSE) {
+               DNSSD_LOGD("DNSSD service is not a local service");
+               __DNSSD_LOG_FUNC_EXIT__;
+               return DNSSD_ERROR_SERVICE_NOT_FOUND;
+       }
+
+       if (local_handle->sd_ref == NULL) {
+               DNSSD_LOGE("Invalid DNS SD Client");    //LCOV_EXCL_LINE
+               __DNSSD_LOG_FUNC_EXIT__;        //LCOV_EXCL_LINE
+               return DNSSD_ERROR_INVALID_PARAMETER;   //LCOV_EXCL_LINE
+       }
+
+       *handle = local_handle;
+
+       return DNSSD_ERROR_NONE;
+}
+
+void __destroy_browsing_handle(dnssd_handle_s *browsing_handle)
+{
+       if (browsing_handle->watch_id > 0)
+               g_source_remove(browsing_handle->watch_id);
+
+       DNSServiceRefDeallocate(browsing_handle->sd_ref);
+       browsing_handle->sd_ref = NULL;
+
+       dnssd_handle_list = g_slist_remove(dnssd_handle_list, browsing_handle);
+       g_free(browsing_handle->service_type);
+       g_free(browsing_handle);
+       DNSSD_LOGD("g_slist length [%d]", g_slist_length(dnssd_handle_list));
+
+       return;
+}
+
 EXPORT_API int dnssd_cancel_browse_service(dnssd_browser_h browser)
 {
+       __DNSSD_LOG_FUNC_ENTER__;
+       dnssd_handle_s *local_handle;
+       int res;
+
+       CHECK_FEATURE_SUPPORTED(NETWORK_SERVICE_DISCOVERY_FEATURE);
+       DNSSD_LOCK;
+
+       res = __get_valid_browsing_handle(browser, &local_handle);
+       if (res != DNSSD_ERROR_NONE) {
+               DNSSD_UNLOCK;
+               return res;
+       }
+
+       __destroy_browsing_handle(local_handle);
+
+       DNSSD_UNLOCK;
+       __DNSSD_LOG_FUNC_EXIT__;
        return DNSSD_ERROR_NONE;
 }
 
@@ -1711,36 +1774,6 @@ EXPORT_API int dnssd_cancel_resolve_service(dnssd_service_h service)
        return DNSSD_ERROR_NONE;
 }
 
-static int __get_valid_browsing_handle(dnssd_service_h dnssd_service, dnssd_handle_s **handle)
-{
-       dnssd_handle_s *local_handle;
-
-       CHECK_INITIALIZED();
-
-       local_handle = __dnssd_get_struct_from_handle(dnssd_service);
-       if (local_handle == NULL) {
-               DNSSD_LOGD("Service Handler not found");
-               __DNSSD_LOG_FUNC_EXIT__;
-               return DNSSD_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       if (local_handle->op_type != DNSSD_TYPE_BROWSE) {
-               DNSSD_LOGD("DNSSD service is not a local service");
-               __DNSSD_LOG_FUNC_EXIT__;
-               return DNSSD_ERROR_SERVICE_NOT_FOUND;
-       }
-
-       if (local_handle->sd_ref == NULL) {
-               DNSSD_LOGE("Invalid DNS SD Client");    //LCOV_EXCL_LINE
-               __DNSSD_LOG_FUNC_EXIT__;        //LCOV_EXCL_LINE
-               return DNSSD_ERROR_INVALID_PARAMETER;   //LCOV_EXCL_LINE
-       }
-
-       *handle = local_handle;
-
-       return DNSSD_ERROR_NONE;
-}
-
 static void __dnssd_remove_found_service(gpointer data, gpointer user_data)
 {
        __DNSSD_LOG_FUNC_ENTER__;
@@ -1808,22 +1841,6 @@ static void __remove_related_handles(dnssd_handle_s *browsing_handle)
        return;
 }
 
-void __destroy_browsing_handle(dnssd_handle_s *browsing_handle)
-{
-       if (browsing_handle->watch_id > 0)
-               g_source_remove(browsing_handle->watch_id);
-
-       DNSServiceRefDeallocate(browsing_handle->sd_ref);
-       browsing_handle->sd_ref = NULL;
-
-       dnssd_handle_list = g_slist_remove(dnssd_handle_list, browsing_handle);
-       g_free(browsing_handle->service_type);
-       g_free(browsing_handle);
-       DNSSD_LOGD("g_slist length [%d]", g_slist_length(dnssd_handle_list));
-
-       return;
-}
-
 EXPORT_API int dnssd_stop_browsing_service(dnssd_browser_h dnssd_service)
 {
        __DNSSD_LOG_FUNC_ENTER__;