#endif /*__WAKEUP_USING_RTC__*/
-static bool __alarm_add_to_list(__alarm_info_t *__alarm_info,
- alarm_id_t *alarm_id);
+static bool __alarm_add_to_list(__alarm_info_t *__alarm_info);
+static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *alarm_id);
static bool __alarm_update_in_list(int pid, alarm_id_t alarm_id,
__alarm_info_t *__alarm_info,
int *error_code);
static void __clean_registry();
static bool __alarm_manager_reset();
static void __on_system_time_changed(keynode_t *node, void *data);
+static void __on_system_time_external_changed(keynode_t *node, void *data);
static void __initialize_timer();
static void __initialize_alarm_list();
-static void __initialize_scheduled_alarm_lsit();
+static void __initialize_scheduled_alarm_list();
static void __hibernation_leave_callback();
static bool __initialize_noti();
#ifdef __WAKEUP_USING_RTC__
const char *rtc = default_rtc;
+ const char *rtc0 = power_rtc;
int fd = 0;
struct rtc_time rtc_tm;
struct rtc_wkalrm rtc_wk;
fd = open(rtc, O_RDONLY);
if (fd == -1) {
- ALARM_MGR_EXCEPTION_PRINT("RTC open failed.\n");
- return;
+ fd = open(rtc0, O_RDONLY);
+ if (fd == -1) {
+ ALARM_MGR_EXCEPTION_PRINT("RTC open failed.\n");
+ return;
+ }
}
/* Read the RTC time/date */
}
ALARM_MGR_LOG_PRINT("\n\nCurrent RTC date/time is %d-%d-%d, "
- "%02d:%02d:%02d.\n", rtc_tm.tm_mday, rtc_tm.tm_mon + 1,
- rtc_tm.tm_year + 1900, rtc_tm.tm_hour, rtc_tm.tm_min,
+ "%02d:%02d:%02d.\n", rtc_tm.tm_mday, rtc_tm.tm_mon + 1,
+ rtc_tm.tm_year + 1900, rtc_tm.tm_hour, rtc_tm.tm_min,
rtc_tm.tm_sec);
ALARM_MGR_LOG_PRINT("alarm_context.c_due_time is %d\n", \
alarm_context.c_due_time);
if (alarm_context.c_due_time != -1) {
- time_t due_time = alarm_context.c_due_time - 1;
+ time_t due_time = alarm_context.c_due_time;
gmtime_r(&due_time, &due_tm);
rtc_tm.tm_mday = due_tm.tm_mday;
rtc_wk.pending = 0;
ALARM_MGR_LOG_PRINT("\n\nSetted RTC Alarm date/time is "
- "%d-%d-%d, %02d:%02d:%02d.\n", rtc_tm.tm_mday,
- rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
+ "%d-%d-%d, %02d:%02d:%02d.\n", rtc_tm.tm_mday,
+ rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
retval = ioctl(fd, RTC_WKALM_SET, &rtc_wk);
int fd1 = 0;
int retval0 = 0;
int retval1 = 0;
- struct rtc_time rtc_tm;
+ struct rtc_time rtc_tm = { 0, };
const char *rtc0 = power_rtc;
const char *rtc1 = default_rtc;
- struct tm *_tm;
- struct tm time_r;
+ struct tm time_r = { 0, };
fd0 = open(rtc0, O_RDONLY);
fd1 = open(rtc1, O_RDONLY);
if (fd1 == -1) {
ALARM_MGR_LOG_PRINT("error to open /dev/rtc1.");
- perror("\t");
+// perror("\t");
}
memset(&rtc_tm, 0, sizeof(struct rtc_time));
- _tm = gmtime_r(&_time, &time_r);
+ (void) gmtime_r(&_time, &time_r);
/* Write the RTC time/date 2008:05:21 19:20:00 */
rtc_tm.tm_year = time_r.tm_year;
rtc_tm.tm_hour = time_r.tm_hour;
rtc_tm.tm_min = time_r.tm_min;
- rtc_tm.tm_sec = 0;
-
+ rtc_tm.tm_sec = time_r.tm_sec;
+
retval0 = ioctl(fd0, RTC_SET_TIME, &rtc_tm);
if (retval0 == -1) {
- close(fd0);
+ if (fd0 != -1)
+ close(fd0);
ALARM_MGR_LOG_PRINT("error to ioctl fd0.");
perror("\t");
}
- close(fd0);
+ if (fd0 != -1)
+ close(fd0);
- retval1 = ioctl(fd1, RTC_SET_TIME, &rtc_tm);
+ if (fd1 != -1) {
+ retval1 = ioctl(fd1, RTC_SET_TIME, &rtc_tm);
- if (retval1 == -1) {
+ if (retval1 == -1) {
+ if (fd1 != -1)
+ close(fd1);
+ ALARM_MGR_LOG_PRINT("error to ioctl fd1.");
+ perror("\t");
+ }
close(fd1);
- ALARM_MGR_LOG_PRINT("error to ioctl fd1.");
- perror("\t");
}
- close(fd1);
-
return 1;
}
return true;
}
-static bool __alarm_add_to_list(__alarm_info_t *__alarm_info,
- alarm_id_t *alarm_id)
+static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *alarm_id)
{
-
bool unique_id = false;
- alarm_info_t *alarm_info = &__alarm_info->alarm_info;
__alarm_info_t *entry = NULL;
GSList *iter = NULL;
unique_id = false;
}
}
-
}
+ *alarm_id = __alarm_info->alarm_id;
+
+ return;
+}
+
+static bool __alarm_add_to_list(__alarm_info_t *__alarm_info)
+{
+
+ alarm_info_t *alarm_info = &__alarm_info->alarm_info;
+ __alarm_info_t *entry = NULL;
+
+ GSList *iter = NULL;
+
/* list alarms */
ALARM_MGR_LOG_PRINT("[alarm-server]: before add\n");
for (iter = alarm_context.alarms; iter != NULL;
iter = g_slist_next(iter)) {
entry = iter->data;
- /*ALARM_MGR_LOG_PRINT("[alarm-server]: alarm_id(%d)\n",
+ /*ALARM_MGR_LOG_PRINT("[alarm-server]: alarm_id(%d)\n",
entry->alarm_id); */
}
_save_alarms(__alarm_info);
}
- *alarm_id = __alarm_info->alarm_id;
-
return true;
}
alarm_tm.tm_mon = start->month - 1;
alarm_tm.tm_mday = start->day;
- alarm_tm.tm_hour = 0;
- alarm_tm.tm_min = 0;
- alarm_tm.tm_sec = 0;
+ alarm_tm.tm_hour = start->hour;
+ alarm_tm.tm_min = start->min;
+ alarm_tm.tm_sec = start->sec;
__alarm_info->start = mktime(&alarm_tm);
} else {
alarm_tm.tm_mon = end->month - 1;
alarm_tm.tm_mday = end->day;
- alarm_tm.tm_hour = 23;
- alarm_tm.tm_min = 59;
- alarm_tm.tm_sec = 59;
+ alarm_tm.tm_hour = end->hour;
+ alarm_tm.tm_min = end->min;
+ alarm_tm.tm_sec = end->sec;
__alarm_info->end = mktime(&alarm_tm);
} else {
GConfValue *value1 = NULL;
GConfValue *value2 = NULL;
GConfClient* gConfClient = NULL;
- GError* err = NULL;
-
+ GError* err = NULL;
+
gConfClient = gconf_client_get_default();
if(gConfClient) {
- value1 = gconf_client_get(gConfClient, SETTINGS_CLOCKTIMEZONE,
+ value1 = gconf_client_get(gConfClient, SETTINGS_CLOCKTIMEZONE,
&err);
if (err) {
ALARM_MGR_LOG_PRINT("__on_system_time_changed:
}
*gmt_idx = gconf_value_get_int(value1);
ALARM_MGR_LOG_PRINT("gconf return gmt_idx =%d\n ", *gmt_idx);
-
- value2 = gconf_client_get(gConfClient,
+
+ value2 = gconf_client_get(gConfClient,
SETTINGS_DAYLIGHTSTATUS, &err);
if (err) {
ALARM_MGR_LOG_PRINT("__on_system_time_changed:
g_error_free(err);
err = NULL;
}
-
+
*dst = gconf_value_get_int(value2);
ALARM_MGR_LOG_PRINT("gconf return dst =%d\n ", *dst);
-
+
if(gConfClient != NULL) {
g_object_unref(gConfClient);
gConfClient = NULL;
}
else
ALARM_MGR_LOG_PRINT("check the gconf setting failed!!!!! \n ");
-
+
if(value1) {
gconf_value_free(value1);
value1 = NULL;
__alarm_info_t *entry = NULL;
struct tm *p_time = NULL ;
struct tm due_time_result ;
- struct tm fixed_time ;
+ struct tm fixed_time = { 0, };
for (iter = alarm_context.alarms; iter != NULL;
iter = g_slist_next(iter)) {
entry->due_time += diff_time;
- alarm_date_t *start = &alarm_info->start; /**< start
+ alarm_date_t *start = &alarm_info->start; /**< start
time of the alarm */
alarm_date_t *end = &alarm_info->end;;
/**< end time of the alarm */
end->month = p_time->tm_mon + 1;
end->day = p_time->tm_mday;
-
+
memset(&fixed_time, 0, sizeof(fixed_time));
fixed_time.tm_year = p_time->tm_year;
fixed_time.tm_mon = p_time->tm_mon;
ALARM_MGR_LOG_PRINT("alarm[%d] with duetime(%u) at "
"current(%u)\n", entry->alarm_id, due_time, current_time);
- if (due_time == 0) { /* 0 means this alarm has been
+ if (due_time == 0) { /* 0 means this alarm has been
disabled */
continue;
}
int fd = 0;
int ret = 0;
int i = 0;
+ bundle *b;
+ char caller_appid[512];
+ bundle_raw *b_data = NULL;
+ int datalen = 0;
__alarm_info_t *__alarm_info = NULL;
if (__alarm_info == NULL) {
ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid=%d, malloc "
"failed. it seems to be OOM\n", pid);
- *error_code = -1; /* -1 means that system
+ *error_code = -1; /* -1 means that system
failed internally. */
return false;
}
snprintf(proc_file, 512, "/proc/%d/cmdline", pid);
fd = open(proc_file, O_RDONLY);
- if (fd > 0) {
+ if (fd < 0) { /* failure */
+ ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
+ "killed, so we failed to get proc file(%s) and do not create "
+ "alarm_info\n", pid, proc_file);
+ *error_code = -1; /*-1 means that system failed
+ internally.*/
+ free(__alarm_info);
+ return false;
+ } else {
ret = read(fd, process_name, 512);
close(fd);
if (ret <=0)
}
__alarm_info->quark_app_unique_name =
g_quark_from_string(app_name);
- } else { /* failure */
- ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
- "killed, so we failed to get proc file(%s) and do not create "
- "alarm_info\n", pid, proc_file);
- *error_code = -1; /*-1 means that system failed
- internally.*/
- free(__alarm_info);
- return false;
}
- __alarm_info->quark_bundle=g_quark_from_string(bundle_data);
+ b = bundle_decode((bundle_raw *)bundle_data, strlen(bundle_data));
+ ret = aul_app_get_appid_bypid(pid, caller_appid, 512);
+ if(ret == 0) {
+ bundle_add(b, "__ALARM_MGR_CALLER_APPID", caller_appid);
+ }
+ bundle_encode(b, &b_data, &datalen);
+
+ __alarm_info->quark_bundle=g_quark_from_string(b_data);
__alarm_info->quark_app_service_name = g_quark_from_string("null");
__alarm_info->quark_dst_service_name = g_quark_from_string("null");
__alarm_info->quark_app_service_name_mod = g_quark_from_string("null");
__alarm_info->quark_dst_service_name_mod = g_quark_from_string("null");
+ bundle_free(b);
+ if (b_data) {
+ free(b_data);
+ b_data = NULL;
+ }
+
__alarm_set_start_and_end_time(alarm_info, __alarm_info);
memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t));
+ __alarm_generate_alarm_id(__alarm_info, alarm_id);
time(¤t_time);
}
due_time = _alarm_next_duetime(__alarm_info);
- if (__alarm_add_to_list(__alarm_info, alarm_id) == false) {
+ if (__alarm_add_to_list(__alarm_info) == false) {
free(__alarm_info);
*error_code = -1;
return false;
if (__alarm_info == NULL) {
ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid=%d, malloc "
"failed. it seems to be OOM\n", pid);
- *error_code = -1; /* -1 means that system
+ *error_code = -1; /* -1 means that system
failed internally. */
return false;
}
int ret;
int i = 0;
fd = open(proc_file, O_RDONLY);
- if (fd > 0) {
+ if (fd < 0) { /* failure */
+ __alarm_info->quark_app_unique_name =
+ g_quark_from_string("unknown");
+ ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
+ "killed, so we failed to get proc file(%s) and do not create "
+ "alarm_info\n", pid, proc_file);
+ *error_code = -1; /*-1 means that system failed
+ internally.*/
+ free(__alarm_info);
+ return false;
+ } else {
ret = read(fd, process_name, 512);
+ if (ret < 0 ) {
+ *error_code = -1; /*-1 means that system failed
+ internally.*/
+ free(__alarm_info);
+ close(fd);
+ return false;
+ }
close(fd);
while (process_name[i] != '\0') {
if (process_name[i] == ' ') {
}
__alarm_info->quark_app_unique_name =
g_quark_from_string(app_name);
- } else { /* failure */
-
- __alarm_info->quark_app_unique_name =
- g_quark_from_string("unknown");
- ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
- "killed, so we failed to get proc file(%s) and do not create "
- "alarm_info\n", pid, proc_file);
- *error_code = -1; /*-1 means that system failed
- internally.*/
- free(__alarm_info);
- return false;
}
__alarm_info->quark_app_service_name =
__alarm_set_start_and_end_time(alarm_info, __alarm_info);
memcpy(&(__alarm_info->alarm_info), alarm_info, sizeof(alarm_info_t));
+ __alarm_generate_alarm_id(__alarm_info, alarm_id);
time(¤t_time);
}
due_time = _alarm_next_duetime(__alarm_info);
- if (__alarm_add_to_list(__alarm_info, alarm_id) == false) {
+ if (__alarm_add_to_list(__alarm_info) == false) {
free(__alarm_info);
return false;
}
/*alarm boot */
if (enable_power_on_alarm) {
/* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in a
- * platform with app-server.because __alarm_power_on(..) fuction don't
+ * platform with app-server.because __alarm_power_on(..) fuction don't
* use first parameter internally, we set this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
if (__alarm_info == NULL) {
ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid=%d, "
"malloc failed. it seems to be OOM\n", pid);
- *error_code = -1; /*-1 means that system failed
+ *error_code = -1; /*-1 means that system failed
internally.*/
return false;
}
"(%d) does not exist. so this value is invalid id.", alarm_id);
return false;
}
- /* ALARM_MGR_LOG_PRINT("[alarm-server]:request_pid=%d, alarm_id=%d,
- * app_unique_name=%s, app_service_name=%s, dst_service_name=%s,
+ /* ALARM_MGR_LOG_PRINT("[alarm-server]:request_pid=%d, alarm_id=%d,
+ * app_unique_name=%s, app_service_name=%s, dst_service_name=%s,
* c_due_time=%d", pid, alarm_id, g_quark_to_string
* (__alarm_info->quark_app_unique_name), g_quark_to_string
* (__alarm_info->quark_app_service_name), g_quark_to_string
#ifdef __ALARM_BOOT
/*alarm boot */
if (enable_power_on_alarm) {
- /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in
+ /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in
* a platform with app-server.because __alarm_power_on(..) fuction don't
* use first parameter internally, we set this value to 0(zero)
*/
return true;
}else if (difftime(due_time, current_time)< 0){
ALARM_MGR_EXCEPTION_PRINT("[alarm-server]: Expired Due Time.[Due time=%d, Current Time=%d]!!!Do not add to schedule list\n", due_time, current_time);
+ free(__alarm_info);
return true;
} else {
char due_time_r[100] = { 0 };
#ifdef __ALARM_BOOT
/*alarm boot */
if (enable_power_on_alarm) {
- /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID)
- * in a platform with app-server.because __alarm_power_on(..) fuction
+ /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID)
+ * in a platform with app-server.because __alarm_power_on(..) fuction
* don't use first parameter internally, we set this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
}
#endif
+ free(__alarm_info);
return true;
}
#ifdef __ALARM_BOOT
/*alarm boot */
if (enable_power_on_alarm) {
- /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in a
- * platform with app-server.because __alarm_power_on(..) fuction don't
+ /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in a
+ * platform with app-server.because __alarm_power_on(..) fuction don't
* use first parameter internally, we set this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
#ifdef __ALARM_BOOT
time_t min_time = 0;
time_t current_time = 0;
- struct tm *temp_info;
struct rtc_time rtc_tm = { 0, };
- struct tm min_time_r;
+ struct tm min_time_r = { 0, };
int fd = 0;
int retval;
if (min_time <= current_time)
min_time = current_time + 5;
- temp_info = gmtime_r(&min_time, &min_time_r);
+ gmtime_r(&min_time, &min_time_r);
ALARM_MGR_LOG_PRINT("__alarm_power_on : %d %d %d %d "
"%d\n", \
/*set_info.time_zone = 0; */
/*set_info.u_interval.day_of_week = 0; */
- /*ALARM_MGR_LOG_PRINT("####__alarm_power_on : %d %d
+ /*ALARM_MGR_LOG_PRINT("####__alarm_power_on : %d %d
%d %d %d\n",set_info.year,set_info.month,set_info.day,
set_info.hour,set_info.minute); */
ALARM_MGR_LOG_PRINT("\n\nSetted RTC Alarm date/time is "
"%d-%d-%d, %02d:%02d:%02d.\n",
rtc_tm.tm_mday, rtc_tm.tm_mon + 1,
- rtc_tm.tm_year + 1900, rtc_tm.tm_hour,
+ rtc_tm.tm_year + 1900, rtc_tm.tm_hour,
rtc_tm.tm_min, rtc_tm.tm_sec);
retval = ioctl(fd, RTC_ALM_SET, &rtc_tm);
dbus_message_set_no_reply(message, TRUE);
/* if(service_name[0]==':') */
- /* we don't need auto activation in a case that
+ /* we don't need auto activation in a case that
destination_app_service_name starts with a charactor like (:) */
dbus_message_set_auto_start(message, FALSE);
dbus_message_iter_init_append(message, &iter);
- if (!dbus_message_iter_append_basic
+ if (!dbus_message_iter_append_basic
(&iter, DBUS_TYPE_INT32, &alarm_id)) {
dbus_message_unref(message);
ALARM_MGR_EXCEPTION_PRINT("[alarm server] "
char alarm_id_val[32]={0,};
int b_len = 0;
bundle *b = NULL;
+ char *appid = NULL;
ALARM_MGR_LOG_PRINT("[alarm-server]: Enter \n");
"current_time(%d), interval(%d)\n", alarm_context.c_due_time,
current_time, interval);
- if (alarm_context.c_due_time > current_time) {
- ALARM_MGR_LOG_PRINT("[alarm-server]: False Alarm\n");
+ if (alarm_context.c_due_time > current_time + 1) {
+ ALARM_MGR_EXCEPTION_PRINT("[alarm-server]: False Alarm. due time is (%d) seconds future\n",
+ alarm_context.c_due_time - current_time);
+ goto done;
+ }
+ // 10 seconds is maximum permitted delay from timer expire to this function
+ if (alarm_context.c_due_time + 10 < current_time) {
+ ALARM_MGR_EXCEPTION_PRINT("[alarm-server]: False Alarm. due time is (%d) seconds past\n",
+ current_time - alarm_context.c_due_time);
goto done;
}
}
else
{
- if ( appsvc_run_service(b, 0, NULL, NULL) < 0)
+ appid = appsvc_get_appid(b);
+ if( (__alarm_info->alarm_info.alarm_type & ALARM_TYPE_NOLAUNCH) && !aul_app_is_running(appid))
{
- ALARM_MGR_EXCEPTION_PRINT("Unable to run app svc\n");
+ ALARM_MGR_EXCEPTION_PRINT("This alarm is ignored\n");
}
else
{
- ALARM_MGR_LOG_PRINT("Successfuly ran app svc\n");
+ if ( appsvc_run_service(b, 0, NULL, NULL) < 0)
+ {
+ ALARM_MGR_EXCEPTION_PRINT("Unable to run app svc\n");
+ }
+ else
+ {
+ ALARM_MGR_LOG_PRINT("Successfuly ran app svc\n");
+ }
}
}
bundle_free(b);
"null, so we send expired alarm to %s(%u)\n",\
g_quark_to_string(
__alarm_info->quark_app_service_name),
- __alarm_info->quark_app_service_name);
+ __alarm_info->quark_app_service_name);
destination_app_service_name = g_quark_to_string(
__alarm_info->quark_app_service_name_mod);
} else {
ALARM_MGR_LOG_PRINT("[alarm-server]:destination "
":%s(%u)\n",
g_quark_to_string(
- __alarm_info->quark_dst_service_name),
+ __alarm_info->quark_dst_service_name),
__alarm_info->quark_dst_service_name);
destination_app_service_name = g_quark_to_string(
__alarm_info->quark_dst_service_name_mod);
}
#ifdef __ALARM_BOOT
- /* orginally this code had if(__alarm_info->app_id==21) in a
+ /* orginally this code had if(__alarm_info->app_id==21) in a
platform with app-server. */
- /*if(__alarm_info->quark_dst_service_name ==
+ /*if(__alarm_info->quark_dst_service_name ==
g_quark_from_string (WAKEUP_ALARM_APP_ID)) */
if (strcmp
(g_quark_to_string(__alarm_info->quark_dst_service_name),
}
#endif
- /*
- * we should consider a situation that
+ /*
+ * we should consider a situation that
* destination_app_service_name is owner_name like (:xxxx) and
* application's pid which registered this alarm was killed.In that case,
* we don't need to send the expire event because the process was killed.
ALARM_MGR_LOG_PRINT("[alarm-server]: "
"destination_app_service_name :%s, app_pid=%d\n",
destination_app_service_name, app_pid);
- /* the following is a code that checks the above situation.
+ /* the following is a code that checks the above situation.
please verify this code. */
if (dbus_bus_name_has_owner(
char appid[MAX_SERVICE_NAME_LEN] = { 0, };
char alarm_id_str[32] = { 0, };
+ if (__alarm_info->alarm_info.alarm_type & ALARM_TYPE_WITHCB) {
+ __alarm_remove_from_list(__alarm_info->pid, alarm_id, NULL);
+ goto done;
+ }
+
expire_info = malloc(sizeof(__expired_alarm_t));
if (G_UNLIKELY(NULL == expire_info)){
ALARM_MGR_ASSERT_PRINT("[alarm-server]:Malloc failed!Can't notify alarm expiry info\n");
goto done;
}
+ memset(expire_info, '\0', MAX_SERVICE_NAME_LEN);
strncpy(expire_info->service_name,
destination_app_service_name,
- MAX_SERVICE_NAME_LEN);
+ MAX_SERVICE_NAME_LEN-1);
expire_info->alarm_id = alarm_id;
g_expired_alarm_list =
g_slist_append(g_expired_alarm_list, expire_info);
if (strncmp
(g_quark_to_string(__alarm_info->quark_dst_service_name),
"null",4) == 0) {
- strncpy(appid,g_quark_to_string(__alarm_info->quark_app_service_name),strlen(g_quark_to_string(__alarm_info->quark_app_service_name))-6);
+ strncpy(appid,g_quark_to_string(__alarm_info->quark_app_service_name)+6,strlen(g_quark_to_string(__alarm_info->quark_app_service_name))-6);
}
else
{
- strncpy(appid,g_quark_to_string(__alarm_info->quark_dst_service_name),strlen(g_quark_to_string(__alarm_info->quark_dst_service_name))-6);
+ strncpy(appid,g_quark_to_string(__alarm_info->quark_dst_service_name)+6,strlen(g_quark_to_string(__alarm_info->quark_dst_service_name))-6);
}
snprintf(alarm_id_str, 31, "%d", alarm_id);
}
ALARM_MGR_LOG_PRINT("after __alarm_send_noti_to_application\n");
-/* if( !(__alarm_info->alarm_info.alarm_type
+/* if( !(__alarm_info->alarm_info.alarm_type
& ALARM_TYPE_VOLATILE) ) {
- __alarm_remove_from_list(__alarm_info->pid,
+ __alarm_remove_from_list(__alarm_info->pid,
alarm_id, NULL);
}
else */
#ifdef __ALARM_BOOT
/*alarm boot */
if (enable_power_on_alarm) {
- /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID)
- *in a platform with app-server.because __alarm_power_on(..) fuction
+ /* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID)
+ *in a platform with app-server.because __alarm_power_on(..) fuction
*don't use first parameter internally, we set this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
tzset();
- ALARM_MGR_ASSERT_PRINT("diff_time is %f\n", diff_time);
+ ALARM_MGR_EXCEPTION_PRINT("New time is %s, diff_time is %f\n", ctime(&_time), diff_time);
ALARM_MGR_LOG_PRINT("[alarm-server] System time has been changed\n");
ALARM_MGR_LOG_PRINT("1.alarm_context.c_due_time is %d\n",
_set_time(_time);
- vconf_set_dbl(VCONFKEY_SYSTEM_TIMEDIFF, diff_time);
vconf_set_int(VCONFKEY_SYSTEM_TIME_CHANGED,(int)diff_time);
__alarm_update_due_time_of_all_items_in_list(diff_time);
if (enable_power_on_alarm) {
/* orginally first arg's value was 21(app_id, WAKEUP_ALARM_
APP_ID) in a platform with app-server. because _alarm_power_
-on(..) fuction don't use first parameter internally, we set
+on(..) fuction don't use first parameter internally, we set
+this value to 0(zero)
+*/
+ __alarm_power_on(0, enable_power_on_alarm, NULL);
+ }
+#endif
+ return;
+}
+
+static void __on_system_time_external_changed(keynode_t *node, void *data)
+{
+ double diff_time;
+ time_t cur_time = 0;
+
+ _alarm_disable_timer(alarm_context);
+
+ if (node) {
+ diff_time = vconf_keynode_get_dbl(node);
+ } else {
+ vconf_get_dbl(VCONFKEY_SYSTEM_TIMECHANGE_EXTERNAL, &diff_time);
+ }
+
+ tzset();
+ time(&cur_time);
+
+ ALARM_MGR_EXCEPTION_PRINT("diff_time is %f, New time is %s\n", diff_time, ctime(&cur_time));
+
+ ALARM_MGR_LOG_PRINT("[alarm-server] System time has been changed externally\n");
+ ALARM_MGR_LOG_PRINT("1.alarm_context.c_due_time is %d\n",
+ alarm_context.c_due_time);
+
+ // set rtc time only because the linux time is set externally
+ _set_rtc_time(cur_time);
+
+ vconf_set_int(VCONFKEY_SYSTEM_TIME_CHANGED,(int)diff_time);
+
+ __alarm_update_due_time_of_all_items_in_list(diff_time);
+
+ ALARM_MGR_LOG_PRINT("2.alarm_context.c_due_time is %d\n",
+ alarm_context.c_due_time);
+ _clear_scheduled_alarm_list();
+ _alarm_schedule();
+ __rtc_set();
+#ifdef __ALARM_BOOT
+ /*alarm boot */
+ if (enable_power_on_alarm) {
+/* orginally first arg's value was 21(app_id, WAKEUP_ALARM_
+APP_ID) in a platform with app-server. because _alarm_power_
+on(..) fuction don't use first parameter internally, we set
+this value to 0(zero)
+*/
+ __alarm_power_on(0, enable_power_on_alarm, NULL);
+ }
+#endif
+ return;
+}
+
+static void __on_time_zone_changed(keynode_t *node, void *data)
+{
+ double diff_time = 0;
+
+ _alarm_disable_timer(alarm_context);
+
+ tzset();
+
+ ALARM_MGR_LOG_PRINT("[alarm-server] time zone has been changed\n");
+ ALARM_MGR_LOG_PRINT("1.alarm_context.c_due_time is %d\n", alarm_context.c_due_time);
+
+ __alarm_update_due_time_of_all_items_in_list(diff_time);
+
+ ALARM_MGR_LOG_PRINT("2.alarm_context.c_due_time is %d\n", alarm_context.c_due_time);
+ _clear_scheduled_alarm_list();
+ _alarm_schedule();
+ __rtc_set();
+#ifdef __ALARM_BOOT
+ /*alarm boot */
+ if (enable_power_on_alarm) {
+/* orginally first arg's value was 21(app_id, WAKEUP_ALARM_
+APP_ID) in a platform with app-server. because _alarm_power_
+on(..) fuction don't use first parameter internally, we set
this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
return;
}
+
gboolean alarm_manager_alarm_set_rtc_time(void *pObject, int pid,
int year, int mon, int day,
int hour, int min, int sec, char *e_cookie,
gsize size;
int retval = 0;
gboolean result = true;
- gid_t call_gid;
const char *rtc = power_rtc;
int fd = 0;
return true;
}
- call_gid = security_server_get_gid("alarm");
-
- ALARM_MGR_LOG_PRINT("call_gid : %d\n", call_gid);
-
- retval = security_server_check_privilege((const char *)cookie, call_gid);
+ retval = security_server_check_privilege_by_cookie((const char *)cookie, "alarm-manager::alarm", "w");
if (retval < 0) {
if (retval == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
ALARM_MGR_EXCEPTION_PRINT(
- "%s", "access has been denied\n");
+ "%s", "Write access has been denied by smack\n");
}
+#ifdef __ALLOW_NO_PRIVILEGE
ALARM_MGR_EXCEPTION_PRINT("Error has occurred in security_server_check_privilege()\n");
if (return_code)
*return_code = ERR_ALARM_NO_PERMISSION;
+#endif
}
- else {
+#ifdef __ALLOW_NO_PRIVILEGE
+ else
+#endif
+ {
/*extract day of the week, day in the year &
daylight saving time from system*/
guchar *cookie = NULL;
gsize size;
int retval = 0;
- gid_t call_gid;
gboolean result = true;
alarm_info.start.year = start_year;
ALARM_MGR_EXCEPTION_PRINT("Unable to decode cookie!!!\n");
return false;
}
-
- call_gid = security_server_get_gid("alarm");
- ALARM_MGR_LOG_PRINT("call_gid : %d\n", call_gid);
-
- retval = security_server_check_privilege((const char *)cookie, call_gid);
+ retval = security_server_check_privilege_by_cookie((const char *)cookie, "alarm-manager::alarm", "w");
if (retval < 0) {
if (retval == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
ALARM_MGR_EXCEPTION_PRINT(
- "%s", "access has been denied\n");
+ "%s", "Write access has been denied by smack\n");
}
+#ifdef __ALLOW_NO_PRIVILEGE
ALARM_MGR_EXCEPTION_PRINT("Error has occurred in security_server_check_privilege()\n");
*return_code = -1;
result = false;
+#endif
}
- else {
+#ifdef __ALLOW_NO_PRIVILEGE
+ else
+#endif
+ {
result = __alarm_create_appsvc(&alarm_info, alarm_id, pid,
bundle_data, return_code);
if (false == result)
guchar *cookie;
gsize size;
int retval;
- gid_t call_gid;
alarm_info.start.year = start_year;
alarm_info.start.month = start_month;
*return_code = 0;
cookie = g_base64_decode(e_cookie, &size);
- call_gid = security_server_get_gid("alarm");
- ALARM_MGR_LOG_PRINT("call_gid : %d\n", call_gid);
-
- retval = security_server_check_privilege((const char *)cookie, call_gid);
+ retval = security_server_check_privilege_by_cookie((const char *)cookie, "alarm-manager::alarm", "w");
if (retval < 0) {
if (retval == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
ALARM_MGR_EXCEPTION_PRINT(
- "%s", "access has been denied\n");
+ "%s", "Write access has been denied by smack\n");
}
+#ifdef __ALLOW_NO_PRIVILEGE
ALARM_MGR_EXCEPTION_PRINT("%s", "Error has occurred\n");
*return_code = -1;
+#endif
}
-
- else {
+#ifdef __ALLOW_NO_PRIVILEGE
+ else
+#endif
+ {
/* return valule and return_code should be checked */
__alarm_create(&alarm_info, alarm_id, pid, app_service_name,app_service_name_mod,
reserved_service_name, reserved_service_name_mod, return_code);
guchar *cookie;
gsize size;
int retval;
- gid_t call_gid;
cookie = g_base64_decode(e_cookie, &size);
- call_gid = security_server_get_gid("alarm");
- ALARM_MGR_LOG_PRINT("call_gid : %d\n", call_gid);
-
- retval = security_server_check_privilege((const char *)cookie, call_gid);
+ retval = security_server_check_privilege_by_cookie((const char *)cookie, "alarm-manager::alarm", "w");
if (retval < 0) {
if (retval == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
- ALARM_MGR_EXCEPTION_PRINT("%s",
- "access has been denied\n");
+ ALARM_MGR_EXCEPTION_PRINT(
+ "%s", "Write access has been denied by smack\n");
}
+#ifdef __ALLOW_NO_PRIVILEGE
ALARM_MGR_EXCEPTION_PRINT("%s", "Error has occurred\n");
*return_code = -1;
+#endif
}
-
- else {
+#ifdef __ALLOW_NO_PRIVILEGE
+ else
+#endif
+ {
__alarm_delete(pid, alarm_id, return_code);
}
int *return_code)
{
GSList *gs_iter = NULL;
- GQuark quark_app_unique_name; /* the fullpath of pid(pid) is
+ GQuark quark_app_unique_name; /* the fullpath of pid(pid) is
converted to quark value. */
char proc_file[256] = { 0 };
char process_name[512] = { 0 };
int ret;
int i = 0;
fd = open(proc_file, O_RDONLY);
- if (fd > 0) {
+ if (fd < 0) { /* failure */
+ quark_app_unique_name = g_quark_from_string("unknown");
+ memcpy(app_name, "unknown", strlen("unknown") + 1);
+
+ ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
+ "killed, so we failed to get proc file(%s) \n",
+ pid, proc_file);
+ *return_code = -1; /* -1 means that system
+ failed internally. */
+ return true;
+ } else {
ret = read(fd, process_name, 512);
+ if (ret <0 ) {
+ *return_code = -1; /* -1 means that system
+ failed internally. */
+ close(fd);
+ return false;
+ }
close(fd);
while (process_name[i] != '\0') {
if (process_name[i] == ' ') {
word = strtok_r(NULL, "/", &proc_name_ptr);
}
quark_app_unique_name = g_quark_from_string(app_name);
- } else { /* failure */
-
- quark_app_unique_name = g_quark_from_string("unknown");
- memcpy(app_name, "unknown", strlen("unknown") + 1);
-
- ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
- "killed, so we failed to get proc file(%s) \n",
- pid, proc_file);
- *return_code = -1; /* -1 means that system
- failed internally. */
- return true;
}
ALARM_MGR_LOG_PRINT("called for app(pid:%d, name=%s)\n",
snprintf(proc_file, 256, "/proc/%d/cmdline", pid);
fd = open(proc_file, O_RDONLY);
- if (fd > 0) {
+ if (fd < 0) { /* failure */
+ quark_app_unique_name = g_quark_from_string("unknown");
+ memcpy(app_name, "unknown", strlen("unknown") + 1);
+
+ ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
+ "killed, so we failed to get proc file(%s)\n", pid, proc_file);
+ *return_code = -1;
+ /* -1 means that system failed internally. */
+ return true;
+ } else {
ret = read(fd, process_name, 512);
+ if (ret <0 ) {
+ *return_code = -1;
+ /* -1 means that system failed internally. */
+ close(fd);
+ return true;
+ }
close(fd);
while (process_name[i] != '\0') {
if (process_name[i] == ' ') {
word = strtok_r(NULL, "/", &proc_name_ptr);
}
quark_app_unique_name = g_quark_from_string(app_name);
- } else { /* failure */
-
- quark_app_unique_name = g_quark_from_string("unknown");
- memcpy(app_name, "unknown", strlen("unknown") + 1);
-
- ALARM_MGR_EXCEPTION_PRINT("Caution!! app_pid(%d) seems to be "
- "killed, so we failed to get proc file(%s)\n", pid, proc_file);
- *return_code = -1;
- /* -1 means that system failed internally. */
- return true;
}
ALARM_MGR_LOG_PRINT("called for app(pid:%d, name=%s)\n",
guchar *cookie = NULL;
gsize size;
int retval = 0;
- gid_t call_gid;
ALARM_MGR_LOG_PRINT("called for pid(%d) and alarm_id(%d)\n", pid,
alarm_id);
ALARM_MGR_EXCEPTION_PRINT("Unable to decode cookie!!!\n");
return true;
}
- call_gid = security_server_get_gid("alarm");
-
- ALARM_MGR_LOG_PRINT("call_gid : %d\n", call_gid);
- retval = security_server_check_privilege((const char *)cookie, call_gid);
+ retval = security_server_check_privilege_by_cookie((const char *)cookie, "alarm-manager::alarm", "r");
if (retval < 0) {
if (retval == SECURITY_SERVER_API_ERROR_ACCESS_DENIED) {
ALARM_MGR_EXCEPTION_PRINT(
- "%s", "access has been denied\n");
+ "%s", "Read access has been denied by smack\n");
}
+#ifdef __ALLOW_NO_PRIVILEGE
ALARM_MGR_EXCEPTION_PRINT("%s", "Error has occurred\n");
if (return_code)
g_free(cookie);
return true;
+#endif
}
if (return_code)
return true;
}
+gboolean alarm_manager_alarm_get_next_duetime(void *pObject, int pid,
+ alarm_id_t alarm_id, time_t* duetime,
+ int *return_code)
+{
+ ALARM_MGR_LOG_PRINT("called for pid(%d) and alarm_id(%d)\n", pid,
+ alarm_id);
+
+ GSList *gs_iter = NULL;
+ __alarm_info_t *entry = NULL;
+ __alarm_info_t *find_item = NULL;
+
+ *return_code = 0;
+
+ for (gs_iter = alarm_context.alarms; gs_iter != NULL;
+ gs_iter = g_slist_next(gs_iter)) {
+ entry = gs_iter->data;
+ if (entry->alarm_id == alarm_id) {
+ find_item = entry;
+ break;
+ }
+ }
+
+ if (find_item == NULL)
+ {
+ ALARM_MGR_EXCEPTION_PRINT("alarm id(%d) was not found\n",
+ alarm_id);
+ *return_code = ERR_ALARM_INVALID_ID;
+ } else {
+ ALARM_MGR_LOG_PRINT("alarm was found\n");
+ *duetime = _alarm_next_duetime(find_item);
+ *return_code = 0;
+ }
+ return true;
+}
+
#include "alarm-skeleton.h"
typedef struct AlarmManagerObject AlarmManagerObject;
/*alarm boot */
if (enable_power_on_alarm) {
/* orginally first arg's value was 21(app_id, WAKEUP_ALARM_APP_ID) in a
- * platform with app-server. because __alarm_power_on(..) fuction don't
+ * platform with app-server. because __alarm_power_on(..) fuction don't
* use first parameter internally, we set this value to 0(zero)
*/
__alarm_power_on(0, enable_power_on_alarm, NULL);
#endif
}
-static void __initialize_scheduled_alarm_lsit()
+static void __initialize_scheduled_alarm_list()
{
_init_scheduled_alarm_list();
}
static void __hibernation_leave_callback()
{
- __initialize_scheduled_alarm_lsit();
+ __initialize_scheduled_alarm_list();
__alarm_clean_list();
static bool __initialize_noti()
{
-
+ int ret = -1;
int fd = heynoti_init();
if (fd < 0) {
ALARM_MGR_EXCEPTION_PRINT("fail to heynoti_init\n");
}
heynoti_subscribe(fd, "HIBERNATION_LEAVE", __hibernation_leave_callback,
NULL);
- heynoti_attach_handler(fd);
+ ret = heynoti_attach_handler(fd);
+ if(ret<0) {
+ ALARM_MGR_EXCEPTION_PRINT("heynoti_attach_handler fail");
+ }
if (vconf_notify_key_changed
(VCONFKEY_SYSTEM_TIMECHANGE, __on_system_time_changed, NULL) < 0) {
}
/*system state change noti ó¸® */
+ if (vconf_notify_key_changed
+ (VCONFKEY_SETAPPL_TIMEZONE_ID, __on_time_zone_changed, NULL) < 0) {
+ ALARM_MGR_LOG_PRINT(
+ "Failed to add callback for time zone changing event\n");
+ }
+
+ if (vconf_notify_key_changed
+ (VCONFKEY_SYSTEM_TIMECHANGE_EXTERNAL, __on_system_time_external_changed, NULL) < 0) {
+ ALARM_MGR_LOG_PRINT(
+ "Failed to add callback for time external changing event\n");
+ }
+
return true;
}
if (entry->data) {
expire_info = (__expired_alarm_t *) entry->data;
+ ALARM_MGR_LOG_PRINT("service_name(%s), service(%s)", expire_info->service_name, service);
+
if (strcmp(expire_info->service_name, service)
== 0) {
ALARM_MGR_EXCEPTION_PRINT(
sqlite3_exec(alarmmgr_db, QUERY_CREATE_TABLE_ALARMMGR, NULL, NULL,\
&error_message)) {
ALARM_MGR_EXCEPTION_PRINT("Don't execute query = %s, "
- "error message = %s\n", QUERY_CREATE_TABLE_ALARMMGR,
+ "error message = %s\n", QUERY_CREATE_TABLE_ALARMMGR,
error_message);
return false;
}
return;
}
retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
+ if (retval == -1) {
+ ALARM_MGR_EXCEPTION_PRINT("RTC_RD_TIME ioctl failed");
+ close(fd);
+ return;
+ }
close(fd);
fd2 = open(default_rtc, O_RDWR);
- if (fd2 < 0) {
- ALARM_MGR_EXCEPTION_PRINT("cannot open /dev/rtc1\n");
- return;
+ if (fd2 >= 0) {
+ retval = ioctl(fd2, RTC_SET_TIME, &rtc_tm);
+ if (retval == -1) {
+ ALARM_MGR_EXCEPTION_PRINT("RTC_SET_TIME ioctl failed");
+ close(fd2);
+ return;
+ }
+ close(fd2);
+// ALARM_MGR_EXCEPTION_PRINT("cannot open /dev/rtc1\n");
+// return;
+ } else {
+ fd = open(power_rtc, O_RDWR);
+ if (fd < 0) {
+ ALARM_MGR_EXCEPTION_PRINT("cannot open /dev/rtc0\n");
+ return;
+ }
+ retval = ioctl(fd, RTC_SET_TIME, &rtc_tm);
+ if (retval == -1) {
+ ALARM_MGR_EXCEPTION_PRINT("RTC_SET_TIME ioctl failed");
+ close(fd);
+ return;
+ }
+ close(fd);
}
- retval = ioctl(fd2, RTC_SET_TIME, &rtc_tm);
- close(fd2);
__initialize_timer();
- if (__initialize_dbus() == false) { /* because dbus's initialize
+ if (__initialize_dbus() == false) { /* because dbus's initialize
failed, we cannot continue any more. */
ALARM_MGR_EXCEPTION_PRINT("because __initialize_dbus failed, "
"alarm-server cannot be runned.\n");
exit(1);
}
- __initialize_scheduled_alarm_lsit();
+ __initialize_scheduled_alarm_list();
__initialize_db();
__initialize_alarm_list();
__initialize_noti();