Add an API for getting time update state. 20/261520/2 accepted/tizen/6.5/unified/20211028.100241 accepted/tizen/unified/20210726.135521 submit/tizen/20210723.060030 submit/tizen_6.5/20211028.162201 tizen_6.5.m2_release
authorJaehyun Kim <jeik01.kim@samsung.com>
Tue, 20 Jul 2021 10:33:45 +0000 (19:33 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Thu, 22 Jul 2021 12:37:36 +0000 (21:37 +0900)
Change-Id: I92ffec2e74921d2e25d1dc09aa112a3f764bd55a
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
include/common/network-cm-intf.h
include/internal/network-dbus-request.h
include/internal/network-internal.h
packaging/libnet-client.spec
src/network-cm-intf.c
src/network-dbus-request.c
src/network-profile-intf.c

index b13434c..40a9a75 100755 (executable)
@@ -20,6 +20,7 @@
 #ifndef __NETWORK_CM_INTF_H__
 #define __NETWORK_CM_INTF_H__
 
+#include <stdbool.h>
 #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.
  *
index c35fb01..af38bc4 100755 (executable)
@@ -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);
index 2aca3ea..3d14773 100755 (executable)
@@ -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);
index ddfc689..fe8fb6c 100755 (executable)
@@ -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
index fd10169..a0dbc66 100755 (executable)
@@ -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;
index 13133e9..8e1f4bf 100755 (executable)
@@ -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)
 {
index 7748670..6f5c21a 100755 (executable)
@@ -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);
        }