From 11f70f400d8f54721ec05c1adfd11915e6c2a905 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 20 Mar 2014 22:55:01 +0000 Subject: added state for heartbeats diff --git a/datatypes.h b/datatypes.h index ab714fc..3a72adc 100644 --- a/datatypes.h +++ b/datatypes.h @@ -26,6 +26,10 @@ #include #include +typedef uint8_t bool; +#define FALSE 0 +#define TRUE 1 + typedef uint8_t u_int8_t; typedef uint16_t u_int16_t; typedef uint32_t u_int32_t; diff --git a/switchctl.c b/switchctl.c index 2025776..4896f15 100644 --- a/switchctl.c +++ b/switchctl.c @@ -37,11 +37,12 @@ #include "daemon.h" #include "utils.h" - struct state_struct { switchctl_mode_t mode_; switchctl_channel_t channel_master_; switchctl_channel_t channel_standby_; + bool hb_state_master_; + bool hb_state_standby_; }; typedef struct state_struct state_t; @@ -224,6 +225,10 @@ int process_cmd_request(const char* cmd, cmd_id_t cmd_id, const char* param, int send_response(fd, buf[1]); snprintf(buf[1], 30, "Standby Channel: %s", state_.channel_standby_ == CHAN_MAIN ? "Main" : "Music"); send_response(fd, buf[1]); + snprintf(buf[1], 30, "Master Heartbeat: %s", state_.hb_state_master_ ? "present" : "timeout"); + send_response(fd, buf[1]); + snprintf(buf[1], 30, "Standby Heartbeat: %s", state_.hb_state_standby_ ? "present" : "timeout"); + send_response(fd, buf[1]); client_t* client; int listener_cnt = 0; for(client = client_lst; client; client = client->next) @@ -484,14 +489,14 @@ void process_cmd_heartbeat(const char* param, int fd, client_t* client_lst) if(param) { client_t* client = client_find(client_lst, fd); if(client) { - if(client->type == HB_MASTER || client->type == HB_STANDBY) { - log_printf(WARNING, "ignoring heartbeat updates for now!"); - send_response(fd, "EEE: heartbeat: ignoring heartbeat updates for now!"); - // TODO: add support for this - } - else { - log_printf(ERROR, "unable to update heartbeat status: wrong client type"); - send_response(fd, "EEE: heartbeat: wrong client type"); + switch(client->type) { + case HB_MASTER: state_.hb_state_master_ = (param[0] == '1') ? TRUE : FALSE; break; + case HB_STANDBY: state_.hb_state_standby_ = (param[0] == '1') ? TRUE : FALSE; break; + default: { + log_printf(ERROR, "unable to update heartbeat status: wrong client type"); + send_response(fd, "EEE: heartbeat: wrong client type"); + break; + } } } else { @@ -992,6 +997,8 @@ int main(int argc, char* argv[]) state_.mode_ = opt.mode_; state_.channel_master_ = opt.channel_master_; state_.channel_standby_ = opt.channel_standby_; + state_.hb_state_master_ = FALSE; + state_.hb_state_standby_ = FALSE; int switch_fd = 0; for(;;) { -- cgit v0.10.2