summaryrefslogtreecommitdiff
path: root/accel-pptpd/cli/telnet.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-11-11 14:35:47 +0300
committerKozlov Dmitry <dima@server>2010-11-11 14:35:47 +0300
commit15339d1df496dc3f9225157e97b07f96fa9bdf0b (patch)
treea430e16d9cada376e50bfcadd810aca10e7da3a6 /accel-pptpd/cli/telnet.c
parentdda81cb1d1ba0229aa4c9a90a6f2b2012a4e9326 (diff)
downloadaccel-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.c22
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;