2 * Copyright (c) 2017 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
23 #include "restriction.h"
25 static GMainLoop *g_pMainLoop = NULL;
26 static guint g_nTimeoutId = 0;
28 static gboolean CallbackTimeut(gpointer data)
31 g_main_loop_quit(g_pMainLoop);
36 static void RunMainLoop(void)
38 g_pMainLoop = g_main_loop_new(NULL, false);
39 g_nTimeoutId = g_timeout_add(GMAINTIMEOUT, CallbackTimeut, g_pMainLoop);
40 g_main_loop_run(g_pMainLoop);
42 g_source_remove(g_nTimeoutId);
46 static void QuitMainLoop(void)
49 g_main_loop_quit(g_pMainLoop);
52 static void AsyncReadyCallback(GObject *source_object,
53 GAsyncResult *res, gpointer user_data)
55 GLOGD("Succeeded to response async callback");
61 this->m_AppID[0] = '\0';
62 this->m_IfaceName[0] = '\0';
63 this->m_IfaceType = IFACE_ALL;
64 this->m_DataLimit = 0;
65 this->m_DataWarnLimit = 0;
66 this->m_RoamingType = ROAMING_DISABLED;
67 this->m_SubscriberID[0] = '\0';
74 Restriction::Restriction()
79 Restriction::~Restriction()
84 error_e Restriction::SetRule(const char *app_id, const char *iface_name,
85 const char *subscriber_id, iface_type_e iface_type,
86 int64_t data_limit, int64_t data_warn_limit,
87 roaming_type_e roaming_type)
89 if (app_id == NULL || strlen(app_id) == 0)
90 this->m_Rule.m_AppID[0] = '\0';
92 g_strlcpy(this->m_Rule.m_AppID, app_id, APP_ID_LEN);
94 if (iface_name == NULL || strlen(iface_name) == 0)
95 this->m_Rule.m_IfaceName[0] = '\0';
97 g_strlcpy(this->m_Rule.m_IfaceName, iface_name, IFNAME_LEN);
99 if (subscriber_id == NULL || strlen(subscriber_id) == 0)
100 this->m_Rule.m_SubscriberID[0] = '\0';
102 g_strlcpy(this->m_Rule.m_SubscriberID, subscriber_id, SUBSCRIBER_ID_LEN);
109 case IFACE_BLUETOOTH:
111 this->m_Rule.m_IfaceType = iface_type;
114 return ERROR_INVALID_PARAMETER;
117 switch(roaming_type) {
118 case ROAMING_UNKNOWN:
119 case ROAMING_ENABLED:
120 case ROAMING_DISABLED:
121 this->m_Rule.m_RoamingType = roaming_type;
124 return ERROR_INVALID_PARAMETER;
127 this->m_Rule.m_DataLimit = data_limit;
128 this->m_Rule.m_DataWarnLimit = data_warn_limit;
133 void Restriction::MakeRuleParams(GVariant **params)
135 GVariantBuilder *builder;
137 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
139 g_variant_builder_add(builder, "{sv}",
140 RESTRICTION_RULE_APP_ID,
141 g_variant_new_string(this->m_Rule.m_AppID));
143 g_variant_builder_add(builder, "{sv}",
144 RESTRICTION_RULE_IFNAME,
145 g_variant_new_string(this->m_Rule.m_IfaceName));
147 g_variant_builder_add(builder, "{sv}",
148 RESTRICTION_RULE_IFTYPE,
149 g_variant_new_uint16(this->m_Rule.m_IfaceType));
151 g_variant_builder_add(builder, "{sv}",
152 RESTRICTION_RULE_ROAMING,
153 g_variant_new_uint16(this->m_Rule.m_RoamingType));
155 g_variant_builder_add(builder, "{sv}",
156 RESTRICTION_RULE_SUBSCRIBER_ID,
157 g_variant_new_string(this->m_Rule.m_SubscriberID));
159 g_variant_builder_add(builder, "{sv}",
160 RESTRICTION_RULE_DATA_LIMIT,
161 g_variant_new_int64(this->m_Rule.m_DataLimit));
163 g_variant_builder_add(builder, "{sv}",
164 RESTRICTION_RULE_DATA_WARN_LIMIT,
165 g_variant_new_int64(this->m_Rule.m_DataWarnLimit));
167 *params = g_variant_new("(@a{sv})", g_variant_builder_end(builder));
168 g_variant_builder_unref(builder);
171 void Restriction::MakeGetParams(GVariant **params)
173 *params = g_variant_new("(s)", this->m_Rule.m_AppID);
176 void Restriction::MakeStatusParams(GVariant **params)
178 *params = g_variant_new("(si)",
179 this->m_Rule.m_AppID, this->m_Rule.m_IfaceType);
182 error_e Restriction::SetRstriction(void)
184 GVariant *message = NULL;
185 GVariant *params = NULL;
186 error_e error = ERROR_NONE;
189 MakeRuleParams(¶ms);
191 message = InvokeMethod(STC_MGR_SERVICE,
192 STC_MGR_RESTRICTION_PATH,
193 STC_MGR_RESTRICTION_INTERFACE,
194 STC_MGR_METHOD_RESTRICTION_SET,
198 if (message == NULL) {
199 GLOGD("Failed to invoke dbus method");
203 g_variant_get(message, "(i)", &result);
204 GLOGD("Succeeded to set restriction [%d]", result);
205 g_variant_unref(message);
210 error_e Restriction::ExcludeRstriction(void)
212 GVariant *message = NULL;
213 GVariant *params = NULL;
214 error_e error = ERROR_NONE;
217 MakeRuleParams(¶ms);
219 message = InvokeMethod(STC_MGR_SERVICE,
220 STC_MGR_RESTRICTION_PATH,
221 STC_MGR_RESTRICTION_INTERFACE,
222 STC_MGR_METHOD_RESTRICTION_EXCLUDE,
226 if (message == NULL) {
227 GLOGD("Failed to invoke dbus method");
231 g_variant_get(message, "(i)", &result);
232 GLOGD("Succeeded to exclude restriction [%d]", result);
233 g_variant_unref(message);
238 error_e Restriction::UnsetRstriction(void)
240 GVariant *message = NULL;
241 GVariant *params = NULL;
242 error_e error = ERROR_NONE;
245 MakeRuleParams(¶ms);
247 message = InvokeMethod(STC_MGR_SERVICE,
248 STC_MGR_RESTRICTION_PATH,
249 STC_MGR_RESTRICTION_INTERFACE,
250 STC_MGR_METHOD_RESTRICTION_UNSET,
254 if (message == NULL) {
255 GLOGD("Failed to invoke dbus method");
259 g_variant_get(message, "(i)", &result);
260 GLOGD("Succeeded to unset restriction [%d]", result);
261 g_variant_unref(message);
266 error_e Restriction::GetRstrictionStatus(restriction_status_e *status)
268 GVariant *message = NULL;
269 GVariant *params = NULL;
270 error_e error = ERROR_NONE;
273 MakeStatusParams(¶ms);
275 message = InvokeMethod(STC_MGR_SERVICE,
276 STC_MGR_RESTRICTION_PATH,
277 STC_MGR_RESTRICTION_INTERFACE,
278 STC_MGR_METHOD_RESTRICTION_GET_STATUS,
282 if (message == NULL) {
283 GLOGD("Failed to invoke dbus method");
287 g_variant_get(message, "(ii)", &result, status);
288 GLOGD("Succeeded to get restriction status [%d:%d]", result, *status);
289 g_variant_unref(message);
294 error_e Restriction::GetRstriction(void)
296 GVariant *params = NULL;
297 error_e error = ERROR_NONE;
299 MakeGetParams(¶ms);
301 error = InvokeMethodNonblock(STC_MGR_SERVICE,
302 STC_MGR_RESTRICTION_PATH,
303 STC_MGR_RESTRICTION_INTERFACE,
304 STC_MGR_METHOD_RESTRICTION_GET_PER_APP_ID,
310 if (error != ERROR_NONE) {
311 GLOGD("Failed to invoke dbus method nonblock");
315 GLOGD("Succeeded to get restriction per app ID");
321 error_e Restriction::GetAllRstriction(void)
323 error_e error = ERROR_NONE;
325 error = InvokeMethodNonblock(STC_MGR_SERVICE,
326 STC_MGR_RESTRICTION_PATH,
327 STC_MGR_RESTRICTION_INTERFACE,
328 STC_MGR_METHOD_RESTRICTION_GET_ALL,
334 if (error != ERROR_NONE) {
335 GLOGD("Failed to invoke dbus method nonblock");
339 GLOGD("Succeeded to get all restriction");