From: Seonah Moon Date: Tue, 17 Oct 2023 12:51:49 +0000 (+0900) Subject: SSDP: Fix registered_cb bug X-Git-Tag: accepted/tizen/8.0/unified/20231031.064238~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b97b3dde65d30972261aed2eea43cb8d88ad04ae;p=platform%2Fcore%2Fapi%2Fnsd.git SSDP: Fix registered_cb bug Change-Id: I876b43ce3d2485f7dc7451545b4f30ba89df23d3 --- diff --git a/packaging/capi-network-nsd.spec b/packaging/capi-network-nsd.spec index b3cbdce..0c4fb4d 100644 --- a/packaging/capi-network-nsd.spec +++ b/packaging/capi-network-nsd.spec @@ -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 diff --git a/src/ssdp/ssdp.c b/src/ssdp/ssdp.c index 93c38eb..27f565e 100644 --- a/src/ssdp/ssdp.c +++ b/src/ssdp/ssdp.c @@ -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; diff --git a/tests/utc-nsd-ssdp-register.c b/tests/utc-nsd-ssdp-register.c index fbd1f01..0c5f88b 100644 --- a/tests/utc-nsd-ssdp-register.c +++ b/tests/utc-nsd-ssdp-register.c @@ -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);