From: cheoleun moon Date: Wed, 31 Aug 2022 08:54:10 +0000 (+0900) Subject: Add new dns-sd APIs X-Git-Tag: accepted/tizen/unified/20220922.062120~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=15bc6f96fc721a18ce2c1987d8d8e88e8c470f77;p=platform%2Fcore%2Fapi%2Fnsd.git Add new dns-sd APIs Change-Id: Ifba18e43e0122af496755b59cfad07aea355139d --- diff --git a/include/dns-sd-internal.h b/include/dns-sd-internal.h index aac2c90..929bba4 100644 --- a/include/dns-sd-internal.h +++ b/include/dns-sd-internal.h @@ -28,37 +28,6 @@ extern "C" { #define TIZEN_ERROR_DNSSD -0x01CA0000 #endif -/** - * @brief Gets the interface name of DNSSD local service - * @since_tizen 4.0 - * @privilevel public - * @privilege %http://tizen.org/privilege/internet - * @param[in] service The DNSSD service handle - * @param[in] interface The interface name - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of Memory - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - */ -int dnssd_service_set_interface(dnssd_service_h local_service, const char *interface); - -/** - * @brief Gets the interface name of DNSSD local/remote service. - * @since_tizen 6.5 - * @remarks You must release @a interface using g_free(). - * @privilevel public - * @privilege %http://tizen.org/privilege/internet - * @param[in] service The DNSSD service handle - * @param[out] interface The interface name - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of Memory - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - */ -int dnssd_service_get_interface(dnssd_service_h dnssd_service, char **interface); - /** * @brief Starts browsing the DNSSD remote service on a specific network interface. * @details found_cb would be called only if there are any services available of @@ -92,143 +61,6 @@ int dnssd_start_browsing_service_on_interface(const char *service_type, const ch dnssd_browser_h *dnssd_service, dnssd_found_cb found_cb, void *user_data); -/** - * @brief Browses the services which have @a service_type. - * @details @a found_cb will be called whenever a service appear or disapear from the network. - * Application will keep browsing until it calls dnssd_cancel_browse_service(). - * @since_tizen 6.5 - * @privlevel public - * @privilege %http://tizen.org/privilege/internet - * @remark dnssd_resolve_service() should be called in @a found_cb - * if you want to get a service data such as a target host name, a port, - * txt record and IP addresses. - * @param[in] service_type The DNSSD service type to browse. - * @param[out] browser The DNSSD browse service handle - * @param[in] found_cb The callback function to be called - * @param[in] user_data The user data passed to the callback function - * @return @c 0 on success, otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * @retval #DNSSD_ERROR_PERMISSION_DENIED Permission Denied - * see dnssd_cancel_browse_service() - */ -int dnssd_browse_service(const char *service_type, const char *interface, - dnssd_browser_h *browser, dnssd_found_cb found_cb, void *user_data); - -/** - * @brief Cancels browsing the services. - * @since_tizen 6.5 - * @param[in] browser The DNSSD browse service handle returned by dnssd_browse_service() - * @return @c 0 on success, otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * see dnssd_browse_service() - */ - -int dnssd_cancel_browse_service(dnssd_browser_h browser); - -/** - * @brief Called when the service is resolved. - * @since_tizen 6.5 - * @param[in] result The result of resolving. - * @param[in] service The resolved service. - * @param[in] user_data The user data passed from the request function - * @see dnssd_resolve_service() - */ -typedef void (*dnssd_resolved_cb) (dnssd_error_e result, - dnssd_service_h service, void *user_data); - -/** - * @brief Resolves a service browsed by dnssd_browse_service(). - * @details @a resolved_cb will be called whenever a service is resolved. - * You can get a target host name, a port, txt record and IP addresses - * from @a resolved_cb. If you have gotten the desired results, - * cancel resolving service using dnssd_cancel_resolve_service(). - * @since_tizen 6.5 - * @privlevel public - * @privilege %http://tizen.org/privilege/internet - * @param[in] service The DNSSD service handle - * @param[in] resolved_cb The callback function to be called - * @param[in] user_data The user data passed to the callback function - * @return @c 0 on success, otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * @retval #DNSSD_ERROR_PERMISSION_DENIED Permission Denied - * @see dnssd_browse_service() - * @see dnssd_cancel_resolve_service() - */ -int dnssd_resolve_service(dnssd_service_h service, - dnssd_resolved_cb resolved_cb, void *user_data); - -/** - * @brief Cancels resolving a service. - * @since_tizen 6.5 - * @privlevel public - * @privilege %http://tizen.org/privilege/internet - * @param[in] service The DNSSD service handle - * @return @c 0 on success, otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * @retval #DNSSD_ERROR_PERMISSION_DENIED Permission Denied - * @see dnssd_resolve_service() - */ -int dnssd_cancel_resolve_service(dnssd_service_h service); - - -/** - * @brief Creates a DNSSD remote service handle. - * @details @a dnssd_service is used for dnssd_resolve_service() only. - * @since_tizen 6.5 - * @remarks You must release @a dnssd_service using dnssd_destroy_remote_service(). - * @param[in] service_type The DNSSD service type. It is expressed as type - * followed by protocol, separated by a dot(e.g. "_ftp._tcp"). It - * must begin with an underscore, followed by 1-15 characters which - * may be letters, digits, or hyphens. The transport protocol must be - * "_tcp" or "_udp". New service types should be registered at - * http://www.dns-sd.org/ServiceTypes.html. - * @param[in] service_name The name of DNSSD remote service - * @param[in] interface The interface name - * @param[out] dnssd_service The DNSSD remote handle - * @return @c 0 on success, - * otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of memory - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * @see dnssd_destroy_remote_service() - * @pre This API needs dnssd_initialize() before use - */ -int dnssd_create_remote_service(const char *service_type, const char *service_name, const char *interfac, dnssd_service_h *dnssd_service); - -/** - * @brief Destroys the DNSSD remote service handle. - * @since_tizen 6.5 - * @remarks You must destroy only remote services created using dnssd_create_remote_service(). - * @param[in] dnssd_service The DNSSD remote service handle - * @return @c 0 on success, - * otherwise negative error value - * @retval #DNSSD_ERROR_NONE Successful - * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter - * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported - * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized - * @see dnssd_create_remote_service() - * @pre This API needs dnssd_create_remote_service() before use. - */ -int dnssd_destroy_remote_service(dnssd_service_h dnssd_service); - #ifdef __cplusplus } #endif diff --git a/include/dns-sd.h b/include/dns-sd.h index 9313edd..5650252 100644 --- a/include/dns-sd.h +++ b/include/dns-sd.h @@ -315,7 +315,6 @@ int dnssd_service_remove_txt_record(dnssd_service_h local_service, const char *k */ int dnssd_service_set_record(dnssd_service_h local_service, unsigned short type, unsigned short length, const void *data); - /** * @brief Unsets the DNS resource record. DNS resource record for the given type * must be set using dnssd_service_set_record(). @@ -336,6 +335,37 @@ int dnssd_service_set_record(dnssd_service_h local_service, unsigned short type, */ int dnssd_service_unset_record(dnssd_service_h local_service, unsigned short type); +/** + * @brief Sets the interface name of DNSSD local service. + * @detail The @a interface is the interface of network card that this service is provided (e.g. wlan0, eth0, etc.). + * @since_tizen 7.0 + * @param[in] local_service The DNSSD service handle + * @param[in] interface The interface name + * @return @c 0 on success, + * otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + */ +int dnssd_service_set_interface(dnssd_service_h local_service, const char *interface); + +/** + * @brief Gets the interface name of DNSSD local/remote service. + * @since_tizen 7.0 + * @remarks You must release @a interface using free(). + * @param[in] service The DNSSD service handle + * @param[out] interface The interface name + * @return @c 0 on success, + * otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of Memory + */ +int dnssd_service_get_interface(dnssd_service_h service, char **interface); + /** * @brief Registers the DNSSD local service for publishing. @@ -530,11 +560,154 @@ int dnssd_service_get_port(dnssd_service_h dnssd_service, int *port); */ int dnssd_service_get_all_txt_record(dnssd_service_h dnssd_service, unsigned short *length, void **value); +/** + * @brief Browses the services which have @a service_type. + * @details @a found_cb will be called whenever a service appear or disappear from the network. + * Application will keep browsing until it calls dnssd_cancel_browsing_service(). + * @since_tizen 7.0 + * @privlevel public + * @privilege %http://tizen.org/privilege/internet + * @remarks dnssd_resolve_service() should be called in @a found_cb + * if you want to get a service data such as a target host name, a port, + * txt record and IP addresses. + * @remarks The @a browser should be released using dnssd_cancel_browsing_service(). + * @param[in] service_type The DNSSD service type to browse. + * @param[in] interface The interface name + * @param[out] browser The DNSSD browse service handle + * @param[in] found_cb The callback function to be called + * @param[in] user_data The user data passed to the callback function + * @return @c 0 on success, otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_PERMISSION_DENIED Permission Denied + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_OPERATION_FAILED Operation failed + * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of Memory + * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_cancel_browsing_service() + */ +int dnssd_browse_service(const char *service_type, const char *interface, + dnssd_browser_h *browser, dnssd_found_cb found_cb, void *user_data); + +/** + * @brief Cancels browsing the services. + * @since_tizen 7.0 + * @param[in] browser The DNSSD browse service handle returned by dnssd_browse_service() + * @return @c 0 on success, otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_OPERATION_FAILED Operation failed + * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_browse_service() + */ + +int dnssd_cancel_browsing_service(dnssd_browser_h browser); + +/** + * @brief Called when the service is resolved. + * @details The following @a result can be received: \n + * #DNSSD_ERROR_NONE Successful \n + * #DNSSD_ERROR_OPERATION_FAILED Operation failed \n + * @since_tizen 7.0 + * @param[in] result The result of resolving. + * @param[in] remote_service The resolved service. + * @param[in] user_data The user data passed from the request function + * @see dnssd_resolve_service() + */ +typedef void (*dnssd_resolved_cb) (dnssd_error_e result, + dnssd_service_h remote_service, void *user_data); + +/** + * @brief Resolves a service browsed by dnssd_browse_service(). + * @details @a resolved_cb will be called when a service is resolved. + * You can get a target host name, a port, txt record and IP addresses + * from @a resolved_cb. If you have gotten the desired results, + * cancel resolving service using dnssd_cancel_resolving_service(). + * @since_tizen 7.0 + * @privlevel public + * @privilege %http://tizen.org/privilege/internet + * @param[in] remote_service The DNSSD service handle + * @param[in] resolved_cb The callback function to be called + * @param[in] user_data The user data passed to the callback function + * @return @c 0 on success, otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_PERMISSION_DENIED Permission Denied + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_OPERATION_FAILED Operation failed + * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_browse_service() + * @see dnssd_cancel_resolving_service() + */ +int dnssd_resolve_service(dnssd_service_h remote_service, + dnssd_resolved_cb resolved_cb, void *user_data); + +/** + * @brief Cancels resolving a service. + * @since_tizen 7.0 + * @param[in] remote_service The DNSSD service handle + * @return @c 0 on success, otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_OPERATION_FAILED Operation failed + * @retval #DNSSD_ERROR_SERVICE_NOT_RUNNING Service Not Running + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_resolve_service() + */ +int dnssd_cancel_resolving_service(dnssd_service_h remote_service); + +/** + * @brief Creates a DNSSD remote service handle. + * @details @a remote_service is used for dnssd_resolve_service() only. + * @since_tizen 7.0 + * @remarks You must release @a remote_service using dnssd_destroy_remote_service(). + * @param[in] service_type The DNSSD service type. It is expressed as type + * followed by protocol, separated by a dot(e.g. "_ftp._tcp"). It + * must begin with an underscore, followed by 1-15 characters which + * may be letters, digits, or hyphens. The transport protocol must be + * "_tcp" or "_udp". New service types should be registered at + * http://www.dns-sd.org/ServiceTypes.html. + * @param[in] service_name The name of DNSSD remote service + * @param[in] interface The interface name + * @param[out] remote_service The DNSSD remote handle + * @return @c 0 on success, + * otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_OUT_OF_MEMORY Out of memory + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_destroy_remote_service() + */ +int dnssd_create_remote_service(const char *service_type, const char *service_name, + const char *interface, dnssd_service_h *remote_service); + +/** + * @brief Destroys the DNSSD remote service handle. + * @since_tizen 7.0 + * @remarks You must destroy only remote services created using dnssd_create_remote_service(). + * @param[in] remote_service The DNSSD remote service handle + * @return @c 0 on success, + * otherwise negative error value + * @retval #DNSSD_ERROR_NONE Successful + * @retval #DNSSD_ERROR_NOT_SUPPORTED Not Supported + * @retval #DNSSD_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DNSSD_ERROR_NOT_INITIALIZED Not Initialized + * @see dnssd_create_remote_service() + */ +int dnssd_destroy_remote_service(dnssd_service_h remote_service); + /** * @} */ + #ifdef __cplusplus } #endif diff --git a/src/dns-sd/dns-sd.c b/src/dns-sd/dns-sd.c index 78befdb..ffad5ac 100644 --- a/src/dns-sd/dns-sd.c +++ b/src/dns-sd/dns-sd.c @@ -1225,8 +1225,7 @@ static void __dnssd_getaddrinfo_reply_cb(DNSServiceRef sd_ref, (flags & kDNSServiceFlagsAdd) ? "Available" : "Unavailable"); } - g_idle_add_full(G_PRIORITY_HIGH, __remove_service_getaddrinfo_socket, - local_handle, NULL); + __remove_service_getaddrinfo_socket(local_handle); DNSSD_UNLOCK; } @@ -1657,7 +1656,7 @@ 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); } -EXPORT_API int dnssd_cancel_browse_service(dnssd_browser_h browser) +EXPORT_API int dnssd_cancel_browsing_service(dnssd_browser_h browser) { return DNSSD_ERROR_NONE; } @@ -1707,7 +1706,7 @@ EXPORT_API int dnssd_resolve_service(dnssd_service_h service, return res; } -EXPORT_API int dnssd_cancel_resolve_service(dnssd_service_h service) +EXPORT_API int dnssd_cancel_resolving_service(dnssd_service_h service) { return DNSSD_ERROR_NONE; } diff --git a/tests/dns-sd-internal-test.c b/tests/dns-sd-internal-test.c index 5517aa2..5e812ac 100644 --- a/tests/dns-sd-internal-test.c +++ b/tests/dns-sd-internal-test.c @@ -252,14 +252,14 @@ int test_dnssd_browse_service() return 1; } -int test_dnssd_cancel_browse_service() +int test_dnssd_cancel_browsing_service() { dnssd_browser_h browser; int rv; printf("Enter Browse Service Handle:\n"); rv = scanf("%u", &browser); - rv = dnssd_cancel_browse_service(browser); + rv = dnssd_cancel_browsing_service(browser); if (rv != DNSSD_ERROR_NONE) { printf("Failed to stop browse dns service %s\n", dnssd_error_to_string(rv)); @@ -335,7 +335,7 @@ int test_thread(GIOChannel *source, GIOCondition condition, gpointer data) rv = test_dnssd_browse_service(); break; case '4': - rv = test_dnssd_cancel_browse_service(); + rv = test_dnssd_cancel_browsing_service(); break; case '5': rv = test_dnssd_resolve_service();