Commit 1aa928fe authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Rewrite the mgt_acceptor code to use suckaddrs

parent b0234c6f
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
*/ */
struct vsm_sc; struct vsm_sc;
struct suckaddr;
struct listen_sock { struct listen_sock {
unsigned magic; unsigned magic;
...@@ -37,7 +38,7 @@ struct listen_sock { ...@@ -37,7 +38,7 @@ struct listen_sock {
VTAILQ_ENTRY(listen_sock) list; VTAILQ_ENTRY(listen_sock) list;
int sock; int sock;
char *name; char *name;
struct vss_addr *addr; struct suckaddr *addr;
}; };
VTAILQ_HEAD(listen_sock_head, listen_sock); VTAILQ_HEAD(listen_sock_head, listen_sock);
......
...@@ -31,6 +31,9 @@ ...@@ -31,6 +31,9 @@
#include "config.h" #include "config.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <fcntl.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -43,7 +46,9 @@ ...@@ -43,7 +46,9 @@
#include "common/params.h" #include "common/params.h"
#include "vav.h" #include "vav.h"
#include "vsa.h"
#include "vss.h" #include "vss.h"
#include "vtcp.h"
/*===================================================================== /*=====================================================================
* Open and close the accept sockets. * Open and close the accept sockets.
...@@ -63,7 +68,7 @@ MAC_open_sockets(void) ...@@ -63,7 +68,7 @@ MAC_open_sockets(void)
good++; good++;
continue; continue;
} }
ls->sock = VSS_bind(ls->addr); ls->sock = VTCP_bind(ls->addr, NULL);
if (ls->sock < 0) if (ls->sock < 0)
continue; continue;
...@@ -109,14 +114,32 @@ clean_listen_sock_head(struct listen_sock_head *lsh) ...@@ -109,14 +114,32 @@ clean_listen_sock_head(struct listen_sock_head *lsh)
} }
} }
static struct listen_sock_head lsh;
static int __match_proto__(vss_resolver_f)
tla_callback(void *priv, const struct suckaddr *sa)
{
struct listen_sock *ls;
ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
AN(ls);
ls->sock = -1;
ls->addr = VSA_Clone(sa);
AN(ls->addr);
ls->name = strdup(priv);
AN(ls->name);
VTAILQ_INSERT_TAIL(&lsh, ls, list);
return (0);
}
int int
tweak_listen_address(struct vsb *vsb, const struct parspec *par, tweak_listen_address(struct vsb *vsb, const struct parspec *par,
const char *arg) const char *arg)
{ {
char **av; char **av;
int i, retval = 0; int i, error;
struct listen_sock *ls; const char *err;
struct listen_sock_head lsh; struct listen_sock *ls;
(void)par; (void)par;
if (arg == NULL) { if (arg == NULL) {
...@@ -141,31 +164,16 @@ tweak_listen_address(struct vsb *vsb, const struct parspec *par, ...@@ -141,31 +164,16 @@ tweak_listen_address(struct vsb *vsb, const struct parspec *par,
} }
VTAILQ_INIT(&lsh); VTAILQ_INIT(&lsh);
for (i = 1; av[i] != NULL; i++) { for (i = 1; av[i] != NULL; i++) {
struct vss_addr **ta; error = VSS_resolver(av[i], "http", tla_callback, av[i], &err);
int j, n; if (err != NULL) {
n = VSS_resolve(av[i], "http", &ta);
if (n == 0) {
VSB_printf(vsb, "Invalid listen address "); VSB_printf(vsb, "Invalid listen address ");
VSB_quote(vsb, av[i], -1, 0); VSB_quote(vsb, av[i], -1, 0);
retval = -1; VSB_printf(vsb, ": %s", err);
break; VAV_Free(av);
} clean_listen_sock_head(&lsh);
for (j = 0; j < n; ++j) { return (-1);
ALLOC_OBJ(ls, LISTEN_SOCK_MAGIC);
AN(ls);
ls->sock = -1;
ls->addr = ta[j];
ls->name = strdup(av[i]);
AN(ls->name);
VTAILQ_INSERT_TAIL(&lsh, ls, list);
} }
free(ta); AZ(error);
}
VAV_Free(av);
if (retval) {
clean_listen_sock_head(&lsh);
return (-1);
} }
REPLACE(mgt_param.listen_address, arg); REPLACE(mgt_param.listen_address, arg);
......
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