version 1.21, 2019/05/18 21:14:10 |
version 1.22, 2019/05/23 11:13:30 |
|
|
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; |
struct cmd_list *cmdlist; |
|
struct cmdq_item *item; |
struct cmdq_item *item; |
|
struct cmd_parse_result *pr; |
|
|
if (closed) |
if (closed) |
c->flags |= CLIENT_EXIT; |
c->flags |= CLIENT_EXIT; |
|
|
break; |
break; |
} |
} |
|
|
cmdlist = cmd_string_parse(line, NULL, 0, &cause); |
pr = cmd_parse_from_string(line, NULL); |
if (cmdlist == NULL) { |
switch (pr->status) { |
item = cmdq_get_callback(control_error, cause); |
case CMD_PARSE_EMPTY: |
|
break; |
|
case CMD_PARSE_ERROR: |
|
item = cmdq_get_callback(control_error, pr->error); |
cmdq_append(c, item); |
cmdq_append(c, item); |
} else { |
free(pr->error); |
item = cmdq_get_command(cmdlist, NULL, NULL, 0); |
break; |
|
case CMD_PARSE_SUCCESS: |
|
item = cmdq_get_command(pr->cmdlist, NULL, NULL, 0); |
item->shared->flags |= CMDQ_SHARED_CONTROL; |
item->shared->flags |= CMDQ_SHARED_CONTROL; |
cmdq_append(c, item); |
cmdq_append(c, item); |
cmd_list_free(cmdlist); |
cmd_list_free(pr->cmdlist); |
|
break; |
} |
} |
|
|
free(line); |
free(line); |