version 1.91, 2015/10/27 15:58:42 |
version 1.92, 2015/11/14 09:41:07 |
|
|
server_clear_identify(c); |
server_clear_identify(c); |
} |
} |
|
|
/* Push stdout to client if possible. */ |
|
void |
|
server_push_stdout(struct client *c) |
|
{ |
|
struct msg_stdout_data data; |
|
size_t size; |
|
|
|
size = EVBUFFER_LENGTH(c->stdout_data); |
|
if (size == 0) |
|
return; |
|
if (size > sizeof data.data) |
|
size = sizeof data.data; |
|
|
|
memcpy(data.data, EVBUFFER_DATA(c->stdout_data), size); |
|
data.size = size; |
|
|
|
if (proc_send(c->peer, MSG_STDOUT, -1, &data, sizeof data) == 0) |
|
evbuffer_drain(c->stdout_data, size); |
|
} |
|
|
|
/* Push stderr to client if possible. */ |
|
void |
|
server_push_stderr(struct client *c) |
|
{ |
|
struct msg_stderr_data data; |
|
size_t size; |
|
|
|
if (c->stderr_data == c->stdout_data) { |
|
server_push_stdout(c); |
|
return; |
|
} |
|
size = EVBUFFER_LENGTH(c->stderr_data); |
|
if (size == 0) |
|
return; |
|
if (size > sizeof data.data) |
|
size = sizeof data.data; |
|
|
|
memcpy(data.data, EVBUFFER_DATA(c->stderr_data), size); |
|
data.size = size; |
|
|
|
if (proc_send(c->peer, MSG_STDERR, -1, &data, sizeof data) == 0) |
|
evbuffer_drain(c->stderr_data, size); |
|
} |
|
|
|
/* Set stdin callback. */ |
/* Set stdin callback. */ |
int |
int |
server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, |
server_set_stdin_callback(struct client *c, void (*cb)(struct client *, int, |