From f85b2d386c039f3e10876367db3cc83c907cbfb6 Mon Sep 17 00:00:00 2001 From: Jaehyun Kim Date: Tue, 20 Jul 2021 19:33:45 +0900 Subject: [PATCH] Add an API for getting time update state. Change-Id: I92ffec2e74921d2e25d1dc09aa112a3f764bd55a Signed-off-by: Jaehyun Kim --- include/common/network-cm-intf.h | 10 ++++++++++ include/internal/network-dbus-request.h | 1 + include/internal/network-internal.h | 2 ++ packaging/libnet-client.spec | 2 +- src/network-cm-intf.c | 15 ++++++++++++++ src/network-dbus-request.c | 35 +++++++++++++++++++++++++++++++++ src/network-profile-intf.c | 28 ++++++++++++++++++++++++++ 7 files changed, 92 insertions(+), 1 deletion(-) diff --git a/include/common/network-cm-intf.h b/include/common/network-cm-intf.h index b13434c..40a9a75 100755 --- a/include/common/network-cm-intf.h +++ b/include/common/network-cm-intf.h @@ -20,6 +20,7 @@ #ifndef __NETWORK_CM_INTF_H__ #define __NETWORK_CM_INTF_H__ +#include #include "network-pm-intf.h" #ifdef __cplusplus @@ -824,6 +825,15 @@ int net_get_metered_state(void *handle, int *state); /** * \brief This API is only for Connection CAPI. Don't use this. * + * \param[in] handle The network info handle. + * \param[out] state Indicating whether time is updated by NTP or not. + * + ******************************************************************************************/ +int net_get_clock_update_info(void *handle, bool *state); + +/** + * \brief This API is only for Connection CAPI. Don't use this. + * * \param[in] enable Enable EAP over Ethernet network. * \param[in] pofilename Profile name of ethernet. * diff --git a/include/internal/network-dbus-request.h b/include/internal/network-dbus-request.h index c35fb01..af38bc4 100755 --- a/include/internal/network-dbus-request.h +++ b/include/internal/network-dbus-request.h @@ -95,6 +95,7 @@ typedef struct { *****************************************************************************/ int _net_dbus_get_ethernet_cable_state(network_info_t *network_info, int *state); int _net_dbus_get_metered_state(network_info_t *network_info, int *state); +int _net_dbus_get_clock_updated(network_info_t *network_info, bool *state); int _net_dbus_get_preferred_ipv6_address(const char *profilename, char **address); int _net_dbus_set_agent_passphrase_and_connect(network_info_t *network_info, const char *passphrase, const char *profilename); diff --git a/include/internal/network-internal.h b/include/internal/network-internal.h index 2aca3ea..3d14773 100755 --- a/include/internal/network-internal.h +++ b/include/internal/network-internal.h @@ -56,6 +56,7 @@ extern "C" { #define CONNMAN_ERROR_INTERFACE CONNMAN_SERVICE ".Error" #define CONNMAN_AGENT_INTERFACE CONNMAN_SERVICE ".Agent" #define CONNMAN_MESH_INTERFACE CONNMAN_SERVICE ".Mesh" +#define CONNMAN_CLOCK_INTERFACE CONNMAN_SERVICE ".Clock" #define CONNMAN_MANAGER_PATH "/" #define CONNMAN_PATH "/net/connman" @@ -222,6 +223,7 @@ void _net_clear_request_table(network_info_t *network_info); int _net_extract_service_info(network_info_t *network_info, const char *ProfileName, GVariantIter *iter, net_profile_info_t *prof_info); +void _net_extract_clock_updated(GVariantIter *iter, bool *state); int _net_dbus_create_gdbus_call(network_info_t *network_info); void _net_dbus_close_gdbus_call(network_info_t *network_info); diff --git a/packaging/libnet-client.spec b/packaging/libnet-client.spec index ddfc689..fe8fb6c 100755 --- a/packaging/libnet-client.spec +++ b/packaging/libnet-client.spec @@ -1,6 +1,6 @@ Name: libnet-client Summary: Network Client library (Shared library) -Version: 1.2.6 +Version: 1.2.7 Release: 2 Group: System/Network License: Flora-1.1 diff --git a/src/network-cm-intf.c b/src/network-cm-intf.c index fd10169..a0dbc66 100755 --- a/src/network-cm-intf.c +++ b/src/network-cm-intf.c @@ -1206,6 +1206,21 @@ EXPORT_API int net_close_mesh_connection(void *handle, const char *profile_name) return NET_ERR_NONE; } +EXPORT_API int net_get_clock_update_info(void *handle, bool *state) +{ + __NETWORK_FUNC_ENTER__; + net_err_t Error = NET_ERR_NONE; + network_info_t *network_info = (network_info_t *)handle; + + Error = _net_dbus_get_clock_updated(network_info, state); + + if (Error != NET_ERR_NONE) + NETWORK_LOG(NETWORK_ERROR, "net_get_clock_update_info failed\n"); + + __NETWORK_FUNC_EXIT__; + return Error; +} + EXPORT_API void net_set_cs_tid(int tid, void *handle) { network_info_t *network_info = (network_info_t *)handle; diff --git a/src/network-dbus-request.c b/src/network-dbus-request.c index 13133e9..8e1f4bf 100755 --- a/src/network-dbus-request.c +++ b/src/network-dbus-request.c @@ -1174,6 +1174,41 @@ int _net_dbus_get_metered_state(network_info_t *network_info, int *state) return Error; } +int _net_dbus_get_clock_updated(network_info_t *network_info, bool *state) +{ + __NETWORK_FUNC_ENTER__; + + net_err_t Error = NET_ERR_NONE; + GVariant *message = NULL; + GVariantIter *clock = NULL; + + if (state == NULL) { + NETWORK_LOG(NETWORK_ERROR, "Invalid Parameter\n"); + __NETWORK_FUNC_EXIT__; + return NET_ERR_INVALID_PARAM; + } + + message = _net_invoke_dbus_method(network_info, CONNMAN_SERVICE, CONNMAN_MANAGER_PATH, + CONNMAN_CLOCK_INTERFACE, "GetProperties", NULL, &Error); + + /* LCOV_EXCL_START */ + if (message == NULL) { + NETWORK_LOG(NETWORK_ERROR, "Failed to get clock update information\n"); + __NETWORK_FUNC_EXIT__; + return Error; + } + /* LCOV_EXCL_STOP */ + + g_variant_get(message, "(a{sv})", &clock); + _net_extract_clock_updated(clock, state); + + g_variant_iter_free(clock); + g_variant_unref(message); + + __NETWORK_FUNC_EXIT__; + return Error; +} + /* LCOV_EXCL_START */ int _net_dbus_get_preferred_ipv6_address(const char *profilename, char **address) { diff --git a/src/network-profile-intf.c b/src/network-profile-intf.c index 7748670..6f5c21a 100755 --- a/src/network-profile-intf.c +++ b/src/network-profile-intf.c @@ -2048,6 +2048,33 @@ int _net_extract_service_info(network_info_t *network_info, return Error; } +void _net_extract_clock_updated(GVariantIter *iter, bool *state) +{ + __NETWORK_FUNC_ENTER__; + + gchar *key = NULL; + GVariant *value = NULL; + gboolean updated; + *state = false; + + while (g_variant_iter_loop(iter, "{sv}", &key, &value)) { + + if (g_strcmp0(key, "TimeUpdated") == 0) { + updated = g_variant_get_boolean(value); + + if (updated) + *state = true; + + g_variant_unref(value); + g_free(key); + break; + } + } + + __NETWORK_FUNC_EXIT__; +} + + static int __net_get_mesh_peers(network_info_t *network_info, const char *profile_name, net_profile_info_t *prof_info) { @@ -2100,6 +2127,7 @@ static int __net_get_profile_info(network_info_t *network_info, &Error); if (message == NULL) { NETWORK_LOG(NETWORK_LOW, "Failed to get profile, check for mesh peers"); + __NETWORK_FUNC_EXIT__; return __net_get_mesh_peers(network_info, profile_name, prof_info); } -- 2.7.4