Commit 60417404 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Use our nice library routines instead of home-rolling.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@4587 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 3cc31234
......@@ -37,48 +37,11 @@ SVNID("$Id$")
#include <unistd.h>
#include <string.h>
#include "cli.h"
#include "cli_common.h"
#include "libvarnish.h"
#include "vss.h"
#define STATUS_OK 200
static void
parse_reply(int sock, long *status, long *answerlen, char **answer)
{
int n;
char buf[13];
char *p, *pp;
n = read(sock, buf, 13);
if (n != 13) {
fprintf(stderr, "An error occured in receiving status.\n");
exit(1);
}
if (!(p = strchr(buf, ' '))) {
fprintf(stderr,
"An error occured in parsing of status code.\n");
exit(1);
}
*p = '\0';
*status = strtol(buf, &p, 10);
pp = p+1;
if (!(p = strchr(pp, '\n'))) {
fprintf(stderr, "An error occured "
"in parsing of number of bytes returned.\n");
exit(1);
}
*p = '\0';
*answerlen = strtol(pp, &p, 10);
*answer = malloc(*answerlen+1);
n = read(sock, *answer, *answerlen);
read(sock, buf, 1); /* Read the trailing \n */
if (n != *answerlen) {
fprintf(stderr, "An error occured in receiving answer.\n");
exit(1);
}
}
/*
* This function establishes a connection to the specified ip and port and
* sends a command to varnishd. If varnishd returns an OK status, the result
......@@ -92,7 +55,7 @@ telnet_mgt(const char *T_arg, int argc, char *argv[])
char *addr, *port;
int i, n;
int sock;
long status, bytes;
unsigned status;
char *answer = NULL;
XXXAZ(VSS_parse(T_arg, &addr, &port));
......@@ -112,22 +75,21 @@ telnet_mgt(const char *T_arg, int argc, char *argv[])
}
free(ta);
write(sock, "ping\n", 5);
parse_reply(sock, &status, &bytes, &answer);
if (status != 200) {
fprintf(stderr, "No pong received from server\n");
exit(1);
cli_readres(sock, &status, &answer, 2000);
if (status == CLIS_AUTH) {
fprintf(stderr, "Authentication required\n");
exit(1);
}
if (status != CLIS_OK) {
fprintf(stderr, "No pong received from server\n");
exit(1);
}
if (strstr(answer, "PONG") == NULL) {
/* The first one was probably just the banner,
see if there are more replies.*/
free(answer);
parse_reply(sock, &status, &bytes, &answer);
if (status != 200 || strstr(answer, "PONG") == NULL) {
fprintf(stderr, "No pong received from server\n");
exit(1);
}
write(sock, "ping\n", 5);
cli_readres(sock, &status, &answer, 2000);
if (status != CLIS_OK || strstr(answer, "PONG") == NULL) {
fprintf(stderr, "No pong received from server\n");
exit(1);
}
free(answer);
......@@ -138,16 +100,15 @@ telnet_mgt(const char *T_arg, int argc, char *argv[])
}
write(sock, "\n", 1);
parse_reply(sock, &status, &bytes, &answer);
cli_readres(sock, &status, &answer, 2000);
answer[bytes] = '\0';
close(sock);
if (status == STATUS_OK) {
if (status == CLIS_OK) {
printf("%s\n", answer);
exit(0);
}
fprintf(stderr, "Command failed with error code %ld\n", status);
fprintf(stderr, "Command failed with error code %u\n", status);
exit(1);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment