summaryrefslogtreecommitdiffstats
path: root/src/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core.c')
-rw-r--r--src/core.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/core.c b/src/core.c
index 6aa9b5c..9fe83bf 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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;