Add to set/unset restriction list 97/200097/2 accepted/tizen/unified/20190312.113050 submit/tizen/20190311.084912
authorhyunuktak <hyunuk.tak@samsung.com>
Tue, 19 Feb 2019 06:22:47 +0000 (15:22 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Mon, 25 Feb 2019 07:09:58 +0000 (07:09 +0000)
Change-Id: I87e0278ccfac1aa10ae112494f66e75e2ef07a41
Signed-off-by: hyunuktak <hyunuk.tak@samsung.com>
include/stc-restriction.h
interfaces/stcmanager-iface-restriction.xml
src/stc-manager-gdbus.c
src/stc-restriction.c

index fe25ea2..1ee0255 100755 (executable)
@@ -52,6 +52,16 @@ gboolean handle_restriction_unset(StcRestriction *object,
                                   GVariant *parameters,
                                   void *user_data);
 
+gboolean handle_restriction_set_list(StcRestriction *object,
+                               GDBusMethodInvocation *invocation,
+                               GVariant *parameters,
+                               void *user_data);
+
+gboolean handle_restriction_unset_list(StcRestriction *object,
+                                  GDBusMethodInvocation *invocation,
+                                  GVariant *parameters,
+                                  void *user_data);
+
 gboolean handle_restriction_get(StcRestriction *object,
                                GDBusMethodInvocation *invocation,
                                const gchar *app_id,
index 1fbfc3f..b8c89e0 100644 (file)
                        <arg type='i' name='error_code' direction='out'/>
                </method>
 
+               <method name='SetList'>
+                       <arg type='aa{sv}' name='parameters' direction='in'/>
+                       <arg type='i' name='error_code' direction='out'/>
+               </method>
+
+               <method name='UnsetList'>
+                       <arg type='aa{sv}' name='parameters' direction='in'/>
+                       <arg type='i' name='error_code' direction='out'/>
+               </method>
+
                <method name='Stop'>
                        <arg type='i' name='error_code' direction='out'/>
                </method>
index 61a81b4..7990287 100755 (executable)
@@ -140,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));
index 42bf9bc..d49eb42 100755 (executable)
@@ -344,6 +344,105 @@ gboolean handle_restriction_unset(StcRestriction *object,
        return TRUE;
 }
 
+gboolean handle_restriction_set_list(StcRestriction *object,
+                               GDBusMethodInvocation *invocation,
+                               GVariant *parameters,
+                               void *user_data)
+{
+       __STC_LOG_FUNC_ENTER__;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       stc_error_e ret = STC_ERROR_NONE;
+
+       g_variant_get(parameters, "aa{sv}", &iter);
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               table_restrictions_info rule;
+
+               memset(&rule, 0, sizeof(table_restrictions_info));
+               __initialize_rstn_rule(&rule);
+
+               stc_manager_gdbus_dict_foreach(iter_row,
+                       __stc_extract_restriction_rule, &rule);
+
+               if (__validate_rstn_rule(&rule)) {
+                       ret = table_restrictions_update(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+
+                       ret = stc_plugin_monitor_add_rstn(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+               }
+
+               g_variant_iter_free(iter_row);
+       }
+       g_variant_iter_free(iter);
+
+       STC_DBUS_REPLY_ERROR_NONE(invocation);
+       __STC_LOG_FUNC_EXIT__;
+       return TRUE;
+}
+
+gboolean handle_restriction_unset_list(StcRestriction *object,
+                                  GDBusMethodInvocation *invocation,
+                                  GVariant *parameters,
+                                  void *user_data)
+{
+       __STC_LOG_FUNC_ENTER__;
+       GVariantIter *iter = NULL;
+       GVariantIter *iter_row = NULL;
+       stc_error_e ret = STC_ERROR_NONE;
+
+       g_variant_get(parameters, "aa{sv}", &iter);
+       while (g_variant_iter_next(iter, "a{sv}", &iter_row)) {
+               table_restrictions_info rule;
+
+               memset(&rule, 0, sizeof(table_restrictions_info));
+               __initialize_rstn_rule(&rule);
+
+               stc_manager_gdbus_dict_foreach(iter_row,
+                       __stc_extract_restriction_rule, &rule);
+
+               if (__validate_rstn_rule(&rule)) {
+                       ret = table_restrictions_delete(rule.app_id, rule.iftype,
+                                               rule.ifname, rule.subscriber_id, rule.roaming);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+
+                       ret = stc_plugin_monitor_remove_rstn(&rule);
+                       if (ret != STC_ERROR_NONE) {
+                               STC_RESTRICTION_DBUS_REPLY_ERROR(invocation, ret); //LCOV_EXCL_LINE
+                               g_variant_iter_free(iter_row);
+                               g_variant_iter_free(iter);
+                               __STC_LOG_FUNC_EXIT__; //LCOV_EXCL_LINE
+                               return TRUE;
+                       }
+               }
+
+               g_variant_iter_free(iter_row);
+       }
+       g_variant_iter_free(iter);
+
+       STC_DBUS_REPLY_ERROR_NONE(invocation);
+       __STC_LOG_FUNC_EXIT__;
+       return TRUE;
+}
+
 gboolean handle_restriction_get(StcRestriction *object,
                                GDBusMethodInvocation *invocation,
                                const gchar *app_id,