version 1.17, 2016/01/19 15:59:12 |
version 1.18, 2016/10/16 17:55:14 |
|
|
server_client_push_stdout(c); |
server_client_push_stdout(c); |
} |
} |
|
|
|
/* Control error callback. */ |
|
static enum cmd_retval |
|
control_error(struct cmd_q *cmdq, void *data) |
|
{ |
|
struct client *c = cmdq->client; |
|
char *error = data; |
|
|
|
cmdq_guard(cmdq, "begin", 1); |
|
control_write(c, "parse error: %s", error); |
|
cmdq_guard(cmdq, "error", 1); |
|
|
|
free(error); |
|
return (CMD_RETURN_NORMAL); |
|
} |
|
|
/* Control input callback. Read lines and fire commands. */ |
/* Control input callback. Read lines and fire commands. */ |
void |
void |
control_callback(struct client *c, int closed, __unused void *data) |
control_callback(struct client *c, int closed, __unused void *data) |
|
|
char *line, *cause; |
char *line, *cause; |
struct cmd_list *cmdlist; |
struct cmd_list *cmdlist; |
struct cmd *cmd; |
struct cmd *cmd; |
|
struct cmd_q *cmdq; |
|
|
if (closed) |
if (closed) |
c->flags |= CLIENT_EXIT; |
c->flags |= CLIENT_EXIT; |
|
|
} |
} |
|
|
if (cmd_string_parse(line, &cmdlist, NULL, 0, &cause) != 0) { |
if (cmd_string_parse(line, &cmdlist, NULL, 0, &cause) != 0) { |
c->cmdq->time = time(NULL); |
cmdq = cmdq_get_callback(control_error, cause); |
c->cmdq->number++; |
cmdq_append(c, cmdq); |
|
|
cmdq_guard(c->cmdq, "begin", 1); |
|
control_write(c, "parse error: %s", cause); |
|
cmdq_guard(c->cmdq, "error", 1); |
|
|
|
free(cause); |
|
} else { |
} else { |
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) |
TAILQ_FOREACH(cmd, &cmdlist->list, qentry) |
cmd->flags |= CMD_CONTROL; |
cmd->flags |= CMD_CONTROL; |
cmdq_run(c->cmdq, cmdlist, NULL); |
cmdq = cmdq_get_command(cmdlist, NULL, NULL, 0); |
|
cmdq_append(c, cmdq); |
cmd_list_free(cmdlist); |
cmd_list_free(cmdlist); |
} |
} |
|
|