4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Venkatesha Sarpangala <sarpangala.v@samsung.com>, Jayoun Lee <airjany@samsung.com>,
7 * Sewook Park <sewook7.park@samsung.com>, Jaeho Lee <jaeho81.lee@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
32 #if !GLIB_CHECK_VERSION (2, 31, 0)
33 #include <glib/gmacros.h>
36 #include"alarm-internal.h"
38 #define SIG_TIMER 0x32
40 #define MAX_GCONF_PATH_LEN 256
41 #define MAX_QUERY_LEN 4096
43 extern __alarm_server_context_t alarm_context;
44 extern sqlite3 *alarmmgr_db;
46 bool _save_alarms(__alarm_info_t *__alarm_info);
47 bool _update_alarms(__alarm_info_t *__alarm_info);
48 bool _delete_alarms(alarm_id_t alarm_id);
49 bool _load_alarms_from_registry(void);
51 bool _save_alarms(__alarm_info_t *__alarm_info)
53 char *error_message = NULL;
54 alarm_info_t *alarm_info =
55 (alarm_info_t *) &(__alarm_info->alarm_info);
56 alarm_date_t *start = &alarm_info->start;
57 alarm_mode_t *mode = &alarm_info->mode;
59 char *query = sqlite3_mprintf("insert into alarmmgr( alarm_id, start,\
60 end, pid, caller_pkgid, callee_pkgid, app_unique_name, app_service_name, app_service_name_mod, bundle, year,\
61 month, day, hour, min, sec, day_of_week, repeat,\
62 alarm_type, reserved_info, dst_service_name, dst_service_name_mod)\
63 values (%d,%d,%d,%d,%Q,%Q,%Q,%Q,%Q,%Q,%d,%d,%d,%d,%d,%d,%d,%d,\
65 __alarm_info->alarm_id,
66 (int)__alarm_info->start,
67 (int)__alarm_info->end,
69 (char *)g_quark_to_string(__alarm_info->quark_caller_pkgid),
70 (char *)g_quark_to_string(__alarm_info->quark_callee_pkgid),
71 (char *)g_quark_to_string(
72 __alarm_info->quark_app_unique_name),
73 (char *)g_quark_to_string(
74 __alarm_info->quark_app_service_name),
75 (char *)g_quark_to_string(
76 __alarm_info->quark_app_service_name_mod),
77 (char *)g_quark_to_string(
78 __alarm_info->quark_bundle),
85 mode->u_interval.day_of_week,
87 alarm_info->alarm_type,
88 alarm_info->reserved_info,
89 (char *)g_quark_to_string(
90 __alarm_info->quark_dst_service_name),
91 (char *)g_quark_to_string(
92 __alarm_info->quark_dst_service_name_mod));
94 if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
95 SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
104 bool _update_alarms(__alarm_info_t *__alarm_info)
106 char *error_message = NULL;
107 alarm_info_t *alarm_info =
108 (alarm_info_t *) &(__alarm_info->alarm_info);
109 alarm_date_t *start = &alarm_info->start;
110 alarm_mode_t *mode = &alarm_info->mode;
112 char *query = sqlite3_mprintf("update alarmmgr set start=%d, end=%d,\
113 pid=%d, caller_pkgid=%Q, callee_pkgid=%Q, app_unique_name=%Q, app_service_name=%Q, app_service_name_mod=%Q,\
114 bundle=%Q, year=%d, month=%d, day=%d, hour=%d, min=%d, sec=%d,\
115 day_of_week=%d, repeat=%d, alarm_type=%d,\
116 reserved_info=%d, dst_service_name=%Q, dst_service_name_mod=%Q\
118 (int)__alarm_info->start,
119 (int)__alarm_info->end,
121 (char *)g_quark_to_string(__alarm_info->quark_caller_pkgid),
122 (char *)g_quark_to_string(__alarm_info->quark_callee_pkgid),
123 (char *)g_quark_to_string(
124 __alarm_info->quark_app_unique_name),
125 (char *)g_quark_to_string(
126 __alarm_info->quark_app_service_name),
127 (char *)g_quark_to_string(
128 __alarm_info->quark_app_service_name_mod),
129 (char *)g_quark_to_string(
130 __alarm_info->quark_bundle),
137 mode->u_interval.day_of_week,
139 alarm_info->alarm_type,
140 alarm_info->reserved_info,
141 (char *)g_quark_to_string(
142 __alarm_info->quark_dst_service_name),
143 (char *)g_quark_to_string(
144 __alarm_info->quark_dst_service_name_mod),
145 __alarm_info->alarm_id);
147 if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
148 SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
157 bool _delete_alarms(alarm_id_t alarm_id)
159 char *error_message = NULL;
160 char *query = sqlite3_mprintf("delete from alarmmgr where alarm_id=%d", alarm_id);
162 if (SQLITE_OK != sqlite3_exec(alarmmgr_db, query, NULL, NULL, &error_message)) {
163 SECURE_LOGE("sqlite3_exec() is failed. query = %s, error message = %s", query, error_message);
172 bool _load_alarms_from_registry()
175 char query[MAX_QUERY_LEN] = {0,};
176 sqlite3_stmt *stmt = NULL;
177 const char *tail = NULL;
178 alarm_info_t *alarm_info = NULL;
179 __alarm_info_t *__alarm_info = NULL;
180 alarm_date_t *start = NULL;
181 alarm_mode_t *mode = NULL;
182 char caller_pkgid[MAX_PKG_ID_LEN] = {0,};
183 char callee_pkgid[MAX_PKG_ID_LEN] = {0,};
184 char app_unique_name[MAX_SERVICE_NAME_LEN] = {0,};
185 char app_service_name[MAX_SERVICE_NAME_LEN] = {0,};
186 char app_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
187 char dst_service_name[MAX_SERVICE_NAME_LEN] = {0,};
188 char dst_service_name_mod[MAX_SERVICE_NAME_LEN] = {0,};
189 char bundle[MAX_BUNDLE_NAME_LEN] = {0,};
191 snprintf(query, MAX_QUERY_LEN, "select * from alarmmgr");
193 if (SQLITE_OK != sqlite3_prepare(alarmmgr_db, query, strlen(query), &stmt, &tail)) {
194 ALARM_MGR_EXCEPTION_PRINT("sqlite3_prepare() is failed.");
198 for (i = 0; SQLITE_ROW == sqlite3_step(stmt); i++) {
199 __alarm_info = malloc(sizeof(__alarm_info_t));
201 if (G_UNLIKELY(__alarm_info == NULL)) {
202 ALARM_MGR_EXCEPTION_PRINT("Memory allocation failed.");
205 alarm_info = (alarm_info_t *) &(__alarm_info->alarm_info);
206 start = &alarm_info->start;
207 mode = &alarm_info->mode;
209 __alarm_info->alarm_id = sqlite3_column_int(stmt, 0);
210 __alarm_info->start = sqlite3_column_int(stmt, 1);
211 __alarm_info->end = sqlite3_column_int(stmt, 2);
212 __alarm_info->pid = sqlite3_column_int(stmt, 3);
214 strncpy(caller_pkgid, (const char *)sqlite3_column_text(stmt, 4),
216 strncpy(callee_pkgid, (const char *)sqlite3_column_text(stmt, 5),
218 strncpy(app_unique_name, (const char *)sqlite3_column_text(stmt, 6),
219 MAX_SERVICE_NAME_LEN - 1);
220 strncpy(app_service_name, (const char *)sqlite3_column_text(stmt, 7),
221 MAX_SERVICE_NAME_LEN - 1);
222 strncpy(app_service_name_mod, (const char *)sqlite3_column_text(stmt, 8),
223 MAX_SERVICE_NAME_LEN - 1);
224 strncpy(bundle, (const char *)sqlite3_column_text(stmt, 9),
225 MAX_BUNDLE_NAME_LEN - 1);
226 start->year = sqlite3_column_int(stmt, 10);
227 start->month = sqlite3_column_int(stmt, 11);
228 start->day = sqlite3_column_int(stmt, 12);
229 start->hour = sqlite3_column_int(stmt, 13);
230 start->min = sqlite3_column_int(stmt, 14);
231 start->sec = sqlite3_column_int(stmt, 15);
232 mode->u_interval.day_of_week = sqlite3_column_int(stmt, 16);
233 mode->repeat = sqlite3_column_int(stmt, 17);
234 alarm_info->alarm_type = sqlite3_column_int(stmt, 18);
235 alarm_info->reserved_info = sqlite3_column_int(stmt, 19);
236 strncpy(dst_service_name, (const char *)sqlite3_column_text(stmt, 20),
237 MAX_SERVICE_NAME_LEN - 1);
238 strncpy(dst_service_name_mod, (const char *)sqlite3_column_text(stmt, 21),
239 MAX_SERVICE_NAME_LEN - 1);
241 __alarm_info->quark_caller_pkgid = g_quark_from_string(caller_pkgid);
242 __alarm_info->quark_callee_pkgid = g_quark_from_string(callee_pkgid);
243 __alarm_info->quark_app_unique_name =
244 g_quark_from_string(app_unique_name);
245 __alarm_info->quark_app_service_name =
246 g_quark_from_string(app_service_name);
247 __alarm_info->quark_app_service_name_mod=
248 g_quark_from_string(app_service_name_mod);
249 __alarm_info->quark_dst_service_name =
250 g_quark_from_string(dst_service_name);
251 __alarm_info->quark_dst_service_name_mod=
252 g_quark_from_string(dst_service_name_mod);
253 __alarm_info->quark_bundle = g_quark_from_string(bundle);
255 _alarm_next_duetime(__alarm_info);
256 alarm_context.alarms = g_slist_append(alarm_context.alarms, __alarm_info);
261 if (SQLITE_OK != sqlite3_finalize(stmt)) {
262 ALARM_MGR_EXCEPTION_PRINT("sqlite3_finalize() is failed.");