Added firewall feature
[platform/core/connectivity/stc-manager.git] / src / stc-manager-gdbus.c
index 46a3d42..75b93b1 100755 (executable)
 #include "stc-manager.h"
 #include "stc-statistics.h"
 #include "stc-restriction.h"
+#include "stc-firewall.h"
 #include "stc-default-connection.h"
-#include "stc-manager-plugin.h"
-#include "stc-app-lifecycle.h"
+#include "stc-manager-plugin-appstatus.h"
+#include "stc-manager-plugin-procfs.h"
 #include "helper-iptables.h"
 
 static gboolean __stc_manager_gdbus_statistics_init(stc_s *stc)
@@ -130,6 +131,89 @@ static gboolean __stc_manager_gdbus_restriction_init(stc_s *stc)
        return ret;
 }
 
+static gboolean __stc_manager_gdbus_firewall_init(stc_s *stc)
+{
+       __STC_LOG_FUNC_ENTER__;
+       gboolean ret = TRUE;
+       gchar *s = NULL;
+
+       StcObjectSkeleton *object = NULL;
+       StcFirewall *firewall = NULL;
+       s = g_strdup_printf(STC_DBUS_SERVICE_FIREWALL_PATH);
+
+       /* Add interface to default object path */
+       object = stc_object_skeleton_new(s);
+       g_free(s);
+
+       firewall = stc_firewall_skeleton_new();
+       stc_object_skeleton_set_firewall(object, firewall);
+       g_object_unref(firewall);
+
+       /* Register for method callbacks as signal callbacks */
+
+       g_signal_connect(firewall, "handle-lock",
+                        G_CALLBACK(handle_firewall_lock),
+                        stc);
+
+       g_signal_connect(firewall, "handle-unlock",
+                        G_CALLBACK(handle_firewall_unlock),
+                        stc);
+
+       g_signal_connect(firewall, "handle-get-lock",
+                        G_CALLBACK(handle_firewall_get_lock),
+                        stc);
+
+       g_signal_connect(firewall, "handle-add-chain",
+                        G_CALLBACK(handle_firewall_add_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-remove-chain",
+                        G_CALLBACK(handle_firewall_remove_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-flush-chain",
+                        G_CALLBACK(handle_firewall_flush_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-get-all-chain",
+                        G_CALLBACK(handle_firewall_get_all_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-set-chain",
+                        G_CALLBACK(handle_firewall_set_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-unset-chain",
+                        G_CALLBACK(handle_firewall_unset_chain),
+                        stc);
+
+       g_signal_connect(firewall, "handle-add-rule",
+                        G_CALLBACK(handle_firewall_add_rule),
+                        stc);
+
+       g_signal_connect(firewall, "handle-remove-rule",
+                        G_CALLBACK(handle_firewall_remove_rule),
+                        stc);
+
+       g_signal_connect(firewall, "handle-update-rule",
+                        G_CALLBACK(handle_firewall_update_rule),
+                        stc);
+
+       g_signal_connect(firewall, "handle-get-all-rule",
+                        G_CALLBACK(handle_firewall_get_all_rule),
+                        stc);
+
+       /* Export the object (@manager takes its own reference to @object) */
+       g_dbus_object_manager_server_export(stc->obj_mgr,
+                                           G_DBUS_OBJECT_SKELETON(object));
+       g_object_unref(object);
+
+       stc->firewall_obj = (gpointer)firewall;
+
+       __STC_LOG_FUNC_EXIT__;
+       return ret;
+}
+
 static gboolean __stc_manager_gdbus_manager_init(stc_s *stc)
 {
        __STC_LOG_FUNC_ENTER__;
@@ -184,6 +268,11 @@ static void __stc_manager_gdbus_on_bus_acquired(GDBusConnection *connection,
                /* Deinitialize and quit manager */
        }
 
+       if (__stc_manager_gdbus_firewall_init(stc) == FALSE) {
+               STC_LOGE("Cannot signal connect to firewall"); //LCOV_EXCL_LINE
+               /* Deinitialize and quit manager */
+       }
+
        if (__stc_manager_gdbus_manager_init(stc) == FALSE) {
                STC_LOGE("Cannot signal connect to manager"); //LCOV_EXCL_LINE
                /* Deinitialize and quit manager */
@@ -194,8 +283,9 @@ static void __stc_manager_gdbus_on_bus_acquired(GDBusConnection *connection,
 
        iptables_init();
        stc_default_connection_monitor_init(stc);
-       stc_manager_plugin_register_state_changed_cb(stc,
-                       stc_manager_app_status_changed, NULL);
+
+       stc_plugin_appstatus_register_state_changed_cb(stc,
+                       stc_plugin_procfs_app_status_changed, NULL);
 
        __STC_LOG_FUNC_EXIT__;
 }
@@ -238,13 +328,14 @@ void stc_manager_gdbus_deinit(gpointer stc_data)
        __STC_LOG_FUNC_ENTER__;
        stc_s *stc = (stc_s *)stc_data;
 
-       stc_manager_plugin_deregister_state_changed_cb(stc);
+       stc_plugin_appstatus_deregister_state_changed_cb(stc);
        stc_default_connection_monitor_deinit(stc);
 
        g_bus_unown_name(stc->gdbus_owner_id);
 
        stc->statistics_obj = NULL;
        stc->restriction_obj = NULL;
+       stc->firewall_obj = NULL;
        stc->manager_obj = NULL;
        __STC_LOG_FUNC_EXIT__;
 }