Merge "Return errors to caller" into tizen_5.5
[platform/core/connectivity/stc-manager.git] / src / stc-manager-gdbus.c
old mode 100644 (file)
new mode 100755 (executable)
index 672909b..a5cb068
 #include "stc-statistics.h"
 #include "stc-restriction.h"
 #include "stc-firewall.h"
-#include "stc-default-connection.h"
+#include "stc-pcap.h"
 #include "stc-manager-util.h"
 #include "stc-manager-plugin-appstatus.h"
 #include "stc-manager-plugin-procfs.h"
+#include "stc-manager-plugin-monitor.h"
+#include "stc-manager-plugin-firewall.h"
 #include "helper-iptables.h"
 
 #define MANAGER_DBUS_ERROR_NAME "net.stc.manager.Error.Failed"
@@ -138,6 +140,12 @@ static gboolean __stc_manager_gdbus_restriction_init(stc_s *stc)
        g_signal_connect(restriction, "handle-unset",
                         G_CALLBACK(handle_restriction_unset), stc);
 
+       g_signal_connect(restriction, "handle-set-list",
+                        G_CALLBACK(handle_restriction_set_list), stc);
+
+       g_signal_connect(restriction, "handle-unset-list",
+                        G_CALLBACK(handle_restriction_unset_list), 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));
@@ -232,6 +240,53 @@ static gboolean __stc_manager_gdbus_firewall_init(stc_s *stc)
        return ret;
 }
 
+static gboolean __stc_manager_gdbus_pcap_init(stc_s *stc)
+{
+       __STC_LOG_FUNC_ENTER__;
+       gboolean ret = TRUE;
+       gchar *s = NULL;
+
+       StcObjectSkeleton *object = NULL;
+       StcPcap *pcap = NULL;
+       s = g_strdup_printf(STC_DBUS_SERVICE_PCAP_PATH);
+
+       /* Add interface to default object path */
+       object = stc_object_skeleton_new(s);
+       g_free(s);
+
+       pcap = stc_pcap_skeleton_new();
+       stc_object_skeleton_set_pcap(object, pcap);
+       g_object_unref(pcap);
+
+       /* Register for method callbacks as signal callbacks */
+
+       g_signal_connect(pcap, "handle-start",
+                        G_CALLBACK(handle_pcap_start),
+                        stc);
+
+       g_signal_connect(pcap, "handle-stop",
+                        G_CALLBACK(handle_pcap_stop),
+                        stc);
+
+       g_signal_connect(pcap, "handle-get-all",
+                        G_CALLBACK(handle_pcap_get_all),
+                        stc);
+
+       g_signal_connect(pcap, "handle-find-all-devs",
+                        G_CALLBACK(handle_pcap_find_all_devs),
+                        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->pcap_obj = (gpointer)pcap;
+
+       __STC_LOG_FUNC_EXIT__;
+       return ret;
+}
+
 static gboolean __stc_manager_gdbus_manager_init(stc_s *stc)
 {
        __STC_LOG_FUNC_ENTER__;
@@ -297,6 +352,11 @@ static void __stc_manager_gdbus_on_bus_acquired(GDBusConnection *connection,
                /* Deinitialize and quit manager */
        }
 
+       if (__stc_manager_gdbus_pcap_init(stc) == FALSE) {
+               STC_LOGE("Cannot signal connect to pcap"); //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 */
@@ -306,7 +366,8 @@ static void __stc_manager_gdbus_on_bus_acquired(GDBusConnection *connection,
                                                    stc->connection);
 
        iptables_init();
-       stc_default_connection_monitor_init(stc);
+       stc_plugin_firewall_update();
+       stc_plugin_monitor_init_connection(stc);
 
        stc_plugin_appstatus_register_state_changed_cb(stc,
                        stc_plugin_procfs_app_status_changed, NULL);
@@ -353,18 +414,19 @@ void stc_manager_gdbus_deinit(gpointer stc_data)
        stc_s *stc = (stc_s *)stc_data;
 
        stc_plugin_appstatus_deregister_state_changed_cb(stc);
-       stc_default_connection_monitor_deinit(stc);
+       stc_plugin_monitor_deinit_connection(stc);
 
        g_bus_unown_name(stc->gdbus_owner_id);
 
        stc->statistics_obj = NULL;
        stc->restriction_obj = NULL;
        stc->firewall_obj = NULL;
+       stc->pcap_obj = NULL;
        stc->manager_obj = NULL;
        __STC_LOG_FUNC_EXIT__;
 }
 
-GVariant *stc_manager_gdbus_call_sync(GDBusConnection *connection,
+API GVariant *stc_manager_gdbus_call_sync(GDBusConnection *connection,
                                      const char *dest, const char *path,
                                      const char *interface_name,
                                      const char *method, GVariant *params)
@@ -404,7 +466,35 @@ GVariant *stc_manager_gdbus_call_sync(GDBusConnection *connection,
        return reply;
 }
 
-guint stc_manager_gdbus_subscribe_signal(GDBusConnection *connection,
+API int stc_manager_gdbus_call_async(GDBusConnection *connection,
+                                     const char *dest, const char *path,
+                                     const char *interface_name,
+                                     const char *method, GVariant *params,
+                                     GAsyncReadyCallback notify_func,
+                                     void *user_data)
+{
+       if (connection == NULL) {
+               STC_LOGE("Failed to get GDBusconnection"); //LCOV_EXCL_LINE
+               return STC_ERROR_INVALID_PARAMETER; //LCOV_EXCL_LINE
+       }
+
+       g_dbus_connection_call(connection,
+                           dest,
+                           path,
+                           interface_name,
+                           method,
+                           params,
+                           NULL,
+                           G_DBUS_CALL_FLAGS_NONE,
+                           (5 * 1000),  /* 5 seconds timeout */
+                           NULL,
+                           (GAsyncReadyCallback)notify_func,
+                           (gpointer)user_data);
+
+       return STC_ERROR_NONE;
+}
+
+API guint stc_manager_gdbus_subscribe_signal(GDBusConnection *connection,
                                         const gchar *sender,
                                         const gchar *interface_name,
                                         const gchar *member,
@@ -432,7 +522,7 @@ guint stc_manager_gdbus_subscribe_signal(GDBusConnection *connection,
                                                  user_data_free_func);
 }
 
-void stc_manager_gdbus_unsubscribe_signal(GDBusConnection *connection,
+API void stc_manager_gdbus_unsubscribe_signal(GDBusConnection *connection,
                                          guint subscription_id)
 {
        if (connection == NULL) {
@@ -443,7 +533,7 @@ void stc_manager_gdbus_unsubscribe_signal(GDBusConnection *connection,
        g_dbus_connection_signal_unsubscribe(connection, subscription_id);
 }
 
-void stc_manager_gdbus_dict_foreach(GVariantIter *iter, dbus_dict_cb cb,
+API void stc_manager_gdbus_dict_foreach(GVariantIter *iter, dbus_dict_cb cb,
                                    void *user_data)
 {
        __STC_LOG_FUNC_ENTER__;
@@ -458,14 +548,14 @@ void stc_manager_gdbus_dict_foreach(GVariantIter *iter, dbus_dict_cb cb,
 
        while (g_variant_iter_loop(iter, "{sv}", &key, &value)) {
                /* DEBUG_GDBUS_KEY_VALUE(key, value); */
-               if (key && cb)
+               if (key)
                        cb(key, value, user_data);
        }
 
        __STC_LOG_FUNC_EXIT__;
 }
 
-gboolean stc_manager_dbus_emit_signal(GDBusConnection *connection,
+API gboolean stc_manager_dbus_emit_signal(GDBusConnection *connection,
                                      const gchar *object_path,
                                      const gchar *interface_name,
                                      const gchar *signal_name,
@@ -506,6 +596,8 @@ gboolean handle_manager_stop(StcManager *object,
        __STC_LOG_FUNC_ENTER__;
        GVariant *return_parameters = NULL;
 
+       stc_set_keep_alive(TRUE);
+
        STC_LOGI("stc manager stop");
 
        return_parameters = g_variant_new("(i)", STC_ERROR_NONE);
@@ -531,6 +623,8 @@ gboolean handle_manager_commit_iptables(StcManager *object,
        char *err_str = NULL;
        char cmd[STC_CMD_SIZE] = { 0, };
 
+       stc_set_keep_alive(TRUE);
+
        if (option == NULL) {
                STC_MANAGER_DBUS_REPLY_ERROR(invocation,
                                                 STC_ERROR_INVALID_PARAMETER);
@@ -564,6 +658,8 @@ gboolean handle_manager_commit_ip6tables(StcManager *object,
        char *err_str = NULL;
        char cmd[STC_CMD_SIZE] = { 0, };
 
+       stc_set_keep_alive(TRUE);
+
        if (option == NULL) {
                STC_MANAGER_DBUS_REPLY_ERROR(invocation,
                                                 STC_ERROR_INVALID_PARAMETER);