diff options
-rw-r--r-- | src/core.c | 11 | ||||
-rw-r--r-- | src/rest.c | 1 | ||||
-rw-r--r-- | src/rest.h | 2 |
3 files changed, 14 insertions, 0 deletions
@@ -186,14 +186,25 @@ static void og_agent_reset_state(struct og_client *cli) memset(cli->buf, 0, sizeof(cli->buf)); } +#define OG_AGENT_CMD_TIMEOUT 900 + static void og_agent_deliver_pending_cmd(struct og_client *cli) { + struct timeval now, elapsed; const struct og_cmd *cmd; cmd = og_cmd_find(inet_ntoa(cli->addr.sin_addr)); if (!cmd) return; + gettimeofday(&now, NULL); + timersub(&now, &cmd->tv, &elapsed); + if (elapsed.tv_sec >= OG_AGENT_CMD_TIMEOUT) { + og_dbi_update_action(cmd->id, false); + og_cmd_free(cmd); + return; + } + og_send_request(cmd->method, cmd->type, &cmd->params, cmd->json); cli->last_cmd_id = cmd->id; @@ -2323,6 +2323,7 @@ static void og_cmd_init(struct og_cmd *cmd, enum og_rest_method method, cmd->params.ips_array[0] = strdup(cmd->ip); cmd->params.ips_array_len = 1; cmd->json = root; + gettimeofday(&cmd->tv, NULL); } static int og_cmd_legacy_wol(const char *input, struct og_cmd *cmd) @@ -2,6 +2,7 @@ #define OG_REST_H #include <ev.h> +#include <sys/time.h> extern struct ev_loop *og_loop; @@ -89,6 +90,7 @@ struct og_cmd { enum og_rest_method method; struct og_msg_params params; json_t *json; + struct timeval tv; }; const struct og_cmd *og_cmd_find(const char *client_ip); |