* $Id$
*/
+#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "cli.h"
#include "cli_priv.h"
+#include "cli_common.h"
#include "mgt.h"
#include "mgt_cli.h"
+#include "vsb.h"
#include "heritage.h"
struct parspec;
return;
}
*dst = u;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u [seconds]\n", *dst);
+ } else
+ cli_out(cli, "%u [seconds]\n", *dst);
}
/*--------------------------------------------------------------------*/
(void)par;
if (arg != NULL)
params->default_ttl = strtoul(arg, NULL, 0);
- if (cli == NULL)
- return;
- cli_out(cli, "%u [seconds]\n", params->default_ttl);
+ else
+ cli_out(cli, "%u [seconds]\n", params->default_ttl);
}
/*--------------------------------------------------------------------*/
return;
}
params->wthread_min = u;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u [threads]\n", params->wthread_min);
+ } else
+ cli_out(cli, "%u [threads]\n", params->wthread_min);
}
/*--------------------------------------------------------------------*/
}
params->wthread_max = u;
}
- if (cli == NULL)
- return;
if (params->wthread_max == UINT_MAX)
cli_out(cli, "unlimited\n");
else
return;
}
params->mem_workspace = u;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u [bytes]\n", params->mem_workspace);
+ } else
+ cli_out(cli, "%u [bytes]\n", params->mem_workspace);
}
/*--------------------------------------------------------------------*/
return;
}
params->auto_restart = u;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u {1 = yes, 0 = no}\n", params->auto_restart);
+ } else
+ cli_out(cli, "%u {1 = yes, 0 = no}\n", params->auto_restart);
}
/*--------------------------------------------------------------------*/
if (arg != NULL) {
u = strtoul(arg, NULL, 0);
params->fetch_chunksize = u * 1024;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u [kb]\n", params->fetch_chunksize * 1024);
+ } else
+ cli_out(cli, "%u [kb]\n", params->fetch_chunksize * 1024);
}
#ifdef HAVE_SENDFILE
if (arg != NULL) {
u = strtoul(arg, NULL, 0);
params->sendfile_threshold = u;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%u [bytes]\n", params->sendfile_threshold);
+ } else
+ cli_out(cli, "%u [bytes]\n", params->sendfile_threshold);
}
#endif /* HAVE_SENDFILE */
cli_result(cli, CLIS_PARAM);
return;
}
- }
- if (cli == NULL)
- return;
- cli_out(cli, params->vcl_trace ? "on\n" : "off\n");
+ } else
+ cli_out(cli, params->vcl_trace ? "on\n" : "off\n");
}
/*--------------------------------------------------------------------*/
cli_result(cli, CLIS_PARAM);
return;
}
+ if (p == NULL) {
+ p = strdup("http");
+ AN(p);
+ }
+ TCP_check(cli, a, p);
+ if (cli->result != CLIS_OK)
+ return;
free(params->listen_address);
free(params->listen_host);
free(params->listen_port);
params->listen_address = strdup(arg);
AN(params->listen_address);
params->listen_host = a;
- if (p == NULL) {
- p = strdup("http");
- AN(p);
- }
params->listen_port = p;
- }
- if (cli == NULL)
- return;
- cli_out(cli, "%s", params->listen_address);
+ } else
+ cli_out(cli, "%s\n", params->listen_address);
}
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
void
-mcf_param_set(struct cli *cli, char **av, void *priv)
+MCF_ParamSet(struct cli *cli, const char *param, const char *val)
{
struct parspec *pp;
- (void)priv;
for (pp = parspec; pp->name != NULL; pp++) {
- if (!strcmp(pp->name, av[2])) {
- cli_out(cli, "%-20s ", pp->name);
- pp->func(cli, pp, av[3]);
+ if (!strcmp(pp->name, param)) {
+ pp->func(cli, pp, val);
return;
}
}
- if (av[2] != NULL) {
- cli_result(cli, CLIS_PARAM);
- cli_out(cli, "Unknown paramter \"%s\".", av[2]);
- }
+ cli_result(cli, CLIS_PARAM);
+ cli_out(cli, "Unknown paramter \"%s\".", param);
+}
+
+
+/*--------------------------------------------------------------------*/
+
+void
+mcf_param_set(struct cli *cli, char **av, void *priv)
+{
+
+ (void)priv;
+ MCF_ParamSet(cli, av[2], av[3]);
}
/*--------------------------------------------------------------------*/
void
-MCF_ParamInit(void)
+MCF_ParamInit(struct cli *cli)
{
struct parspec *pp;
for (pp = parspec; pp->name != NULL; pp++)
- pp->func(NULL, pp, pp->def);
+ pp->func(cli, pp, pp->def);
}
#endif
#include "mgt.h"
+#include "cli.h"
+#include "cli_priv.h"
/*--------------------------------------------------------------------*/
return (0);
}
+/*--------------------------------------------------------------------*/
+
+void
+TCP_check(struct cli *cli, const char *addr, const char *port)
+{
+ struct addrinfo hints, *res;
+ int ret;
+
+ memset(&hints, 0, sizeof hints);
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_PASSIVE;
+ ret = getaddrinfo(addr, port, &hints, &res);
+ if (ret == 0) {
+ freeaddrinfo(res);
+ return;
+ }
+ cli_out(cli, "getaddrinfo(%s, %s): %s\n",
+ addr, port, gai_strerror(ret));
+ cli_result(cli, CLIS_PARAM);
+}
+
int
TCP_open(const char *addr, const char *port, int http)
{
}
+/*--------------------------------------------------------------------*/
+
+static void
+cli_check(struct cli *cli)
+{
+ if (cli->result == CLIS_OK) {
+ vsb_clear(cli->sb);
+ return;
+ }
+ vsb_finish(cli->sb);
+ fprintf(stderr, "Error:\n%s\n", vsb_data(cli->sb));
+ exit (2);
+}
+
/*--------------------------------------------------------------------*/
int
{
int o;
unsigned d_flag = 0;
- char *addr, *port;
const char *a_arg = NULL;
const char *b_arg = NULL;
const char *f_arg = NULL;
const char *s_arg = "file";
const char *T_arg = NULL;
struct params param;
+ struct cli cli[1];
setbuf(stdout, NULL);
setbuf(stderr, NULL);
+ memset(cli, 0, sizeof cli);
+ cli->sb = vsb_new(NULL, NULL, 0, VSB_AUTOEXTEND);
+ XXXAN(cli->sb);
+ cli->result = CLIS_OK;
+
heritage.socket = -1;
memset(¶m, 0, sizeof param);
params = ¶m;
mgt_vcc_init();
- MCF_ParamInit();
+ MCF_ParamInit(cli);
+ cli_check(cli);
while ((o = getopt(argc, argv, "a:b:df:h:s:t:T:Vw:")) != -1)
switch (o) {
setup_storage(s_arg);
setup_hash(h_flag);
- if (a_arg != NULL) {
- if (TCP_parse(a_arg, &addr, &port) != 0) {
- fprintf(stderr, "invalid listen address\n");
- exit (2);
- }
- free(params->listen_address);
- free(params->listen_host);
- free(params->listen_port);
- params->listen_address = strdup(a_arg);
- AN(params->listen_address);
- params->listen_host = addr;
- params->listen_port = port;
- }
+ if (a_arg != NULL)
+ MCF_ParamSet(cli, "listen_address", a_arg);
+ cli_check(cli);
VSL_MgtInit(SHMLOG_FILENAME, 8*1024*1024);