aboutsummaryrefslogtreecommitdiff
path: root/alarmd/alarmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'alarmd/alarmd.c')
-rw-r--r--alarmd/alarmd.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/alarmd/alarmd.c b/alarmd/alarmd.c
index 84ae195..b5106eb 100644
--- a/alarmd/alarmd.c
+++ b/alarmd/alarmd.c
@@ -24,7 +24,7 @@ struct alarm {
char *name;
bool is_raised;
pid_t owner;
-// time_t last_change;
+ time_t last_change;
};
static struct alarm *alarms;
@@ -56,8 +56,6 @@ int handle_register(int c_sock, pid_t owner)
}
uuid_generate(uuid);
- //uuid_unparse(uuid, uuid_str);
- //fprintf(stderr, "Registering alarm %s with uuid %s\n", buffer, uuid_str);
if (send(c_sock, uuid, sizeof(uuid_t), 0) != sizeof(uuid_t)) {
perror("send");
@@ -72,6 +70,7 @@ int handle_register(int c_sock, pid_t owner)
new_alarm->name = strdup((const char*)buffer);
memcpy(new_alarm->uuid, uuid, sizeof(new_alarm->uuid));
new_alarm->is_raised = 0;
+ time(&(new_alarm->last_change));
new_alarm->owner = owner;
alarmd_lock();
@@ -84,15 +83,11 @@ int handle_deregister(int c_sock)
{
uuid_t uuid;
struct alarm *target = NULL;
-// char uuid_str[37];
if (recv(c_sock, &uuid, sizeof(uuid_t), 0) < sizeof(uuid_t)) {
return 1;
}
-// uuid_unparse(uuid, uuid_str);
-// fprintf(stderr, "Deregistering alarm %s\n", uuid_str);
-
alarmd_lock();
HASH_FIND(hh, alarms, uuid, sizeof(uuid_t), target);
if (target != NULL) {
@@ -118,7 +113,10 @@ int handle_set_raised_generic(int c_sock, int shall_raise)
alarmd_lock();
HASH_FIND(hh, alarms, uuid, sizeof(uuid_t), target);
if (target != NULL) {
- target->is_raised = shall_raise;
+ if (target->is_raised != shall_raise) {
+ time(&(target->last_change));
+ target->is_raised = shall_raise;
+ }
}
alarmd_unlock();
return 0;
@@ -160,6 +158,9 @@ int handle_query(int c_sock)
if (send(c_sock, &(a->is_raised), sizeof(a->is_raised), 0) < sizeof(a->is_raised)) {
perror("send");
}
+ if (send(c_sock, &(a->last_change), sizeof(a->last_change), 0) < sizeof(a->last_change)) {
+ perror("send");
+ }
if (send(c_sock, &(a->owner), sizeof(a->owner), 0) < sizeof(a->owner)) {
perror("send");
}