diff options
author | Kozlov Dmitry <dima@server> | 2010-11-11 14:35:47 +0300 |
---|---|---|
committer | Kozlov Dmitry <dima@server> | 2010-11-11 14:35:47 +0300 |
commit | 15339d1df496dc3f9225157e97b07f96fa9bdf0b (patch) | |
tree | a430e16d9cada376e50bfcadd810aca10e7da3a6 /accel-pptpd/cli/telnet.c | |
parent | dda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326 (diff) | |
download | accel-ppp-15339d1df496dc3f9225157e97b07f96fa9bdf0b.tar.gz accel-ppp-15339d1df496dc3f9225157e97b07f96fa9bdf0b.zip |
cli: simplified cli api
Diffstat (limited to 'accel-pptpd/cli/telnet.c')
-rw-r--r-- | accel-pptpd/cli/telnet.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/accel-pptpd/cli/telnet.c b/accel-pptpd/cli/telnet.c index c7b5f15c..97e85d0c 100644 --- a/accel-pptpd/cli/telnet.c +++ b/accel-pptpd/cli/telnet.c @@ -91,6 +91,9 @@ int telnet_send(struct client_t *cln, const void *_buf, int size) struct buffer_t *b; const uint8_t *buf = (const uint8_t *)_buf; + if (cln->disconnect) + return -1; + for (n = 0; n < size; n += k) { k = write(cln->hnd.fd, buf + n, size - n); if (k < 0) { @@ -105,13 +108,26 @@ int telnet_send(struct client_t *cln, const void *_buf, int size) } if (errno != EPIPE) log_error("cli: write: %s\n", strerror(errno)); - disconnect(cln); + //disconnect(cln); + cln->disconnect = 1; return -1; } } return 0; } +int telnet_sendv(struct client_t *cln, const char *fmt, va_list ap) +{ + int r = vsnprintf((char *)temp_buf, RECV_BUF_SIZE, fmt, ap); + + if (r >= RECV_BUF_SIZE) { + strcpy((char *)temp_buf + RECV_BUF_SIZE - 6, "...\r\n"); + r = RECV_BUF_SIZE; + } + + return telnet_send(cln, temp_buf, r); +} + static int send_banner(struct client_t *cln) { return telnet_send(cln, BANNER, sizeof(BANNER)); @@ -398,6 +414,10 @@ static int cln_read(struct triton_md_handler_t *h) if (telnet_input_char(cln, recv_buf[i])) return -1; } + if (cln->disconnect) { + disconnect(cln); + return 0; + } } return 0; |