Add new dbus method for setting NTP Server 63/294363/2
authorAnjali Nijhara <a.nijhara@samsung.com>
Fri, 16 Jun 2023 11:29:05 +0000 (16:59 +0530)
committerAnjali Nijhara <a.nijhara@samsung.com>
Wed, 21 Jun 2023 10:14:36 +0000 (15:44 +0530)
Change-Id: Ib6151577ba3c32b034dc03c8b76029f5b1c3fb82

CMakeLists.txt
include/netdbus.h
include/network-clock.h
interfaces/netconfig-iface-clock.xml [new file with mode: 0644]
resources/etc/dbus-1/system.d/net-config-robot.conf
resources/etc/dbus-1/system.d/net-config.conf
src/dbus/netdbus.c
src/main.c
src/network-clock.c

index 45a66fba753f5113a5d59f207ce5a3403c0b651a..43de6e938c348832d9efd09f89e8d7815db60546 100755 (executable)
@@ -130,7 +130,7 @@ ADD_CUSTOM_COMMAND(
                        --generate-c-code generated-code
                        --c-generate-object-manager
                        --generate-docbook generated-code-docs
-                       ${INTERFACES}/netconfig-iface-network-state.xml ${INTERFACES}/netconfig-iface-network-statistics.xml ${INTERFACES}/netconfig-iface-wifi.xml ${INTERFACES}/netconfig-iface-vpnsvc.xml ${INTERFACES}/netconfig-iface-mptcp.xml ${INTERFACES}/netconfig-iface-ethernet.xml
+                       ${INTERFACES}/netconfig-iface-network-state.xml ${INTERFACES}/netconfig-iface-network-statistics.xml ${INTERFACES}/netconfig-iface-wifi.xml ${INTERFACES}/netconfig-iface-vpnsvc.xml ${INTERFACES}/netconfig-iface-mptcp.xml ${INTERFACES}/netconfig-iface-ethernet.xml ${INTERFACES}/netconfig-iface-clock.xml
                        COMMENT "Generating GDBus .c/.h")
 
 ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS} ${CMAKE_SOURCE_DIR}/generated-code.c)
index ed2175bd1f5f5add42a5222f9b6a49b4a1f8fcf7..886f5bd217ccc2e22c9f0aab6e2213294d1cef32 100755 (executable)
@@ -68,6 +68,8 @@ extern "C" {
 #define NETCONFIG_MPTCP_INTERFACE      "net.netconfig.mptcp"
 #define NETCONFIG_ETHERNET_PATH                "/net/netconfig/ethernet"
 #define NETCONFIG_ETHERNET_INTERFACE   "net.netconfig.ethernet"
+#define NETCONFIG_CLOCK_PATH           "/net/netconfig/clock"
+#define NETCONFIG_CLOCK_INTERFACE      "net.netconfig.clock"
 
 #define CONTAINER_FILE "/run/systemd/container"
 #define DBUS_HOST_SYSTEM_BUS_ADDRESS "unix:path=/run/host/dbus/system_bus_socket"
@@ -88,6 +90,7 @@ GDBusObjectManagerServer      *netdbus_get_statistics_manager(void);
 GDBusObjectManagerServer       *netdbus_get_vpn_manager(void);
 GDBusObjectManagerServer       *netdbus_get_mptcp_manager(void);
 GDBusObjectManagerServer       *netdbus_get_ethernet_manager(void);
+GDBusObjectManagerServer        *netdbus_get_clock_manager(void);
 
 GDBusConnection                                *netdbus_get_connection(void);
 GCancellable                           *netdbus_get_cancellable(void);
index e1ef9855949878e55f9cce3fe82898f764dee07e..2f5e9a5e8bc1057e69b1b01ad6e23cb946c195ef 100755 (executable)
 extern "C" {
 #endif
 
+#include <glib.h>
+#include <gio/gio.h>
+#include <glib-object.h>
+
+void clock_object_create_and_init(void);
+void clock_object_deinit(void);
+Clock *get_clock_object(void);
+
 void netconfig_clock_init(void);
 void netconfig_clock_deinit(void);
 
diff --git a/interfaces/netconfig-iface-clock.xml b/interfaces/netconfig-iface-clock.xml
new file mode 100644 (file)
index 0000000..0f78bed
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/net/netconfig/clock">
+       <interface name="net.netconfig.clock">
+               <method name="SetNtpServer">
+                       <arg type="s" name="ntp_server" direction="in"/>
+               </method>
+       </interface>
+</node>
index da297ca48ea8aa9e098501ac220e479d84b87d02..81cba6cb11e878caff739b05583905e743c87404 100755 (executable)
 
                <allow send_destination="net.netconfig" send_interface="net.netconfig.ethernet" send_member="EnableEap" />
                <allow send_destination="net.netconfig" send_interface="net.netconfig.ethernet" send_member="SetEapConfig" />
+
+               <allow send_destination="net.netconfig" send_interface="net.netconfig.clock" send_member="SetNtpServer" />
        </policy>
 </busconfig>
index bb7b99c89f699d4f1f720892fc57781b058067d0..cbbf252208103b6317706fd96a1bafb090e10bb2 100755 (executable)
 
                <check send_destination="net.netconfig" send_interface="net.netconfig.ethernet" send_member="EnableEap" privilege="http://tizen.org/privilege/network.set" />
                <check send_destination="net.netconfig" send_interface="net.netconfig.ethernet" send_member="SetEapConfig" privilege="http://tizen.org/privilege/network.profile" />
+
+               <check send_destination="net.netconfig" send_interface="net.netconfig.clock" send_member="SetNtpServer" privilege="http://tizen.org/privilege/network.set" />
        </policy>
 </busconfig>
index 3136ddb794c3a01631255e72ab64caf0a0093632..6ca7316cd05e82e2199780270f8f121d0e1a671d 100755 (executable)
@@ -44,6 +44,8 @@ static GDBusObjectManagerServer *manager_server_statistics = NULL;
 static GDBusObjectManagerServer *manager_server_vpn = NULL;
 static GDBusObjectManagerServer *manager_server_mptcp = NULL;
 static GDBusObjectManagerServer *manager_server_ethernet = NULL;
+static GDBusObjectManagerServer *manager_server_clock = NULL;
+
 static guint owner_id = 0;
 static got_name_cb g_callback = NULL;
 
@@ -85,6 +87,11 @@ GDBusObjectManagerServer *netdbus_get_ethernet_manager(void)
        return manager_server_ethernet;
 }
 
+GDBusObjectManagerServer *netdbus_get_clock_manager(void)
+{
+       return manager_server_clock;
+}
+
 GDBusConnection *netdbus_get_connection(void)
 {
        return gconn_data.connection;
@@ -361,6 +368,12 @@ int setup_gdbus(got_name_cb cb)
                exit(1);
        }
 
+       manager_server_clock = g_dbus_object_manager_server_new(NETCONFIG_CLOCK_PATH);
+       if (manager_server_clock == NULL) {
+               ERR("Manager server for NETCONFIG_CLOCK_PATH not created.");
+               exit(1);
+       }
+
        owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, NETCONFIG_SERVICE,
                                                          G_BUS_NAME_OWNER_FLAGS_NONE,
                                                          _got_bus_cb, _got_name_cb, _lost_name_cb,
index f1832c74681307bb7bdd95eff2d37ab96663cc38..3fe3d3b41de03455db95d6c5f7cd80072ec6156b 100755 (executable)
@@ -70,6 +70,7 @@ void _got_name_cb(void)
        vpnsvc_create_and_init();
        mptcp_object_create_and_init();
        ethernet_object_create_and_init();
+       clock_object_create_and_init();
 
        register_gdbus_signal();
        connman_register_agent();
@@ -87,6 +88,7 @@ static void _objects_deinit(void)
        vpnsvc_destroy_deinit();
        mptcp_object_deinit();
        ethernet_object_deinit();
+       clock_object_deinit();
 }
 
 int main(int argc, char *argv[])
index 59551c40a1787c9f59293b3d5cccb453f0af4a83..127f8e7264ecce65a406072539131b3362a2b7b8 100755 (executable)
 #define NTP_SERVER     "pool.ntp.org"
 #define CONNMAN_GLOBAL_SETTING "/var/lib/connman/settings"
 
+static Clock *clock_object = NULL;
+
+Clock *get_clock_object(void)
+{
+       return clock_object;
+}
+
 static void __netconfig_clock_clear_timeserver(void)
 {
        GKeyFile *keyfile = NULL;
@@ -209,3 +216,59 @@ void netconfig_clock_deinit(void)
        vconf_ignore_key_changed(VCONFKEY_NETWORK_STATUS,
                        __network_changed_cb);
 }
+
+gboolean handle_set_ntp_server(Clock *object, GDBusMethodInvocation *invocation,
+                               const gchar *server)
+{
+       if(server == NULL) {
+               netconfig_error_dbus_method_return(invocation,
+                               NETCONFIG_ERROR_INTERNAL, "SetNtpServer Failed");
+               return TRUE;
+       }
+
+       __netconfig_clock_set_timeserver(server);
+
+       DBG("NTP Server:%s set successfully",server);
+
+       clock_complete_set_ntp_server(object, invocation);
+
+       return TRUE;
+}
+
+/*****************************
+ * Initializations Functions *
+ ****************************/
+void clock_object_create_and_init(void)
+{
+       DBG("Create clock object.");
+       GDBusInterfaceSkeleton *interface_clock = NULL;
+       GDBusConnection *connection = NULL;
+       GDBusObjectManagerServer *server = netdbus_get_clock_manager();
+       if (server == NULL)
+               return;
+
+       connection = netdbus_get_connection();
+       g_dbus_object_manager_server_set_connection(server, connection);
+
+       /* Interface */
+       clock_object = clock_skeleton_new();
+       interface_clock = G_DBUS_INTERFACE_SKELETON(clock_object);
+
+       /* Set NTP Server */
+       g_signal_connect(clock_object, "handle-set-ntp-server",
+                       G_CALLBACK(handle_set_ntp_server), NULL);
+
+       if (!g_dbus_interface_skeleton_export(interface_clock, connection,
+                       NETCONFIG_CLOCK_PATH, NULL)) {
+               ERR("Export NETCONFIG_CLOCK_PATH for clock failed");
+       }
+
+       return;
+}
+
+void clock_object_deinit(void)
+{
+       DBG("Deinit clock object.");
+
+       g_object_unref(clock_object);
+}