SSDP: Fix registered_cb bug 59/300159/1
authorSeonah Moon <seonah1.moon@samsung.com>
Tue, 17 Oct 2023 12:51:49 +0000 (21:51 +0900)
committerSeonah Moon <seonah1.moon@samsung.com>
Tue, 17 Oct 2023 12:54:46 +0000 (21:54 +0900)
Change-Id: I876b43ce3d2485f7dc7451545b4f30ba89df23d3

packaging/capi-network-nsd.spec
src/ssdp/ssdp.c
tests/utc-nsd-ssdp-register.c

index 622c14480b92bd583ecb242ca3a92b76ae9f2fc2..9bd56c8e9bb38f455cc47dc3e5563770f2d09888 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-network-nsd
 Summary:    A Network Service Discovery libraries in Native API
-Version:    0.2.0
+Version:    0.2.1
 Release:    1
 Group:      System/Network
 License:    Apache-2.0
index f6fadc1300d3b5650bc49b3451c919cd8ddbb0cc..478e2a2251ac489fbd76353fa2e68e2b396372f2 100644 (file)
@@ -441,6 +441,49 @@ __ssdp_res_unavailable_cb(GSSDPResourceBrowser *resource_browser,
        __SSDP_LOG_FUNC_EXIT__;
        return;
 }
+
+static gboolean
+__ssdp_registered_cb(gpointer data)
+{
+       __SSDP_LOG_FUNC_ENTER__;
+       SSDP_LOCK;
+       if (data == NULL) {
+               SSDP_UNLOCK;
+               __SSDP_LOG_FUNC_EXIT__;
+               return FALSE;
+       }
+
+       ssdp_service_s *service = __ssdp_find_local_service(g_ssdp_local_services,
+                               (ssdp_service_h)data);
+       if (service == NULL) {
+               SSDP_LOGE("service isn't exist.");
+               SSDP_UNLOCK;
+               __SSDP_LOG_FUNC_EXIT__;
+               return FALSE;
+       }
+
+       if (service->registered_cb == NULL) {
+               SSDP_LOGE("registered_cb is empty.");
+               SSDP_UNLOCK;
+               __SSDP_LOG_FUNC_EXIT__;
+               return FALSE;
+       }
+
+       service->origin = SSDP_SERVICE_STATE_REGISTERED;
+       service->registered_cb(SSDP_ERROR_NONE, service->service_handler, service->cb_user_data);
+
+       service->registered_cb = NULL;
+       service->cb_user_data = NULL;
+
+       SSDP_UNLOCK;
+       __SSDP_LOG_FUNC_EXIT__;
+       return FALSE;
+}
+
+static void __ssdp_invoke_registered_cb(ssdp_service_h local_service)
+{
+       g_idle_add(__ssdp_registered_cb, (void *)local_service);
+}
 //LCOV_EXCL_STOP
 
 EXPORT_API int ssdp_initialize()
@@ -946,9 +989,10 @@ EXPORT_API int ssdp_register_local_service(ssdp_service_h local_service,
 
        gssdp_resource_group_set_available(service->resource_group, TRUE);
        SSDP_LOGD("Now service is available [%u]", local_service);
-
        SSDP_LOGD("Resource group id is [%d]\n", service->resource_id);
 
+       __ssdp_invoke_registered_cb(local_service);
+
        SSDP_UNLOCK;
        __SSDP_LOG_FUNC_EXIT__;
        return status;
index fbd1f01d9df42c2b434bae3896705f8e8aaab494..0c5f88b597e5a05b78e2db34b04ad389104bb0b8 100644 (file)
@@ -28,6 +28,7 @@ static bool g_feature = true;
 
 static void __registered_cb(ssdp_error_e result, ssdp_service_h ssdp_service, void *user_data)
 {
+       g_main_loop_quit(g_loop);
        return;
 }
 
@@ -758,6 +759,8 @@ int utc_nsd_ssdp_register_local_service_p(void)
        ret = ssdp_register_local_service(serv_id, &__registered_cb, NULL);
        assert_eq(ret, SSDP_ERROR_NONE);
 
+       g_main_loop_run(g_loop);
+
        ssdp_deregister_local_service(serv_id);
        ssdp_destroy_local_service(serv_id);
 
@@ -873,6 +876,8 @@ int utc_nsd_ssdp_deregister_local_service_p(void)
        ret = ssdp_register_local_service(serv_id, &__registered_cb, NULL);
        assert_eq(ret, SSDP_ERROR_NONE);
 
+       g_main_loop_run(g_loop);
+
        ret = ssdp_deregister_local_service(serv_id);
        assert_eq(ret, SSDP_ERROR_NONE);
 
@@ -912,6 +917,8 @@ int utc_nsd_ssdp_deregister_local_service_n(void)
        ret = ssdp_register_local_service(serv_id, &__registered_cb, NULL);
        assert_eq(ret, SSDP_ERROR_NONE);
 
+       g_main_loop_run(g_loop);
+
        ret = ssdp_deregister_local_service(serv_id + 1);
        assert_eq(ret, SSDP_ERROR_SERVICE_NOT_FOUND);