diff options
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 38 |
1 files changed, 13 insertions, 25 deletions
@@ -20,13 +20,6 @@ struct server_local { struct list_head list; }; -/* FIXME: This can be a plain sockaddr_in46 */ -struct server_remote { - struct sockaddr_in46 addr; - char addrstr[ADDRSTRLEN]; - struct list_head list; -}; - struct server_proxy { struct sockaddr_in46 client; char clientstr[ADDRSTRLEN]; @@ -67,7 +60,7 @@ void server_delete(struct cfg *cfg, struct server *scfg) { struct server_local *local, *ltmp; - struct server_remote *remote, *rtmp; + struct sockaddr_in46 *remote, *rtmp; fprintf(stderr, "Removing server cfg: %s\n", scfg->name); @@ -127,7 +120,8 @@ static void server_dump(struct server *scfg) { struct server_local *local; - struct server_remote *remote; + struct sockaddr_in46 *remote; + char abuf[ADDRSTRLEN]; fprintf(stderr, "Dumping server %s\n", scfg->name); switch (scfg->type) { @@ -148,7 +142,7 @@ server_dump(struct server *scfg) fprintf(stderr, " * %s\n", local->addrstr); fprintf(stderr, " * Remote ports:\n"); list_for_each_entry(remote, &scfg->remotes, list) - fprintf(stderr, " * %s\n", remote->addrstr); + fprintf(stderr, " * %s\n", server_print_addr(remote, abuf, sizeof(abuf))); } /* @@ -199,7 +193,8 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) struct server_local *local = container_of(task, struct server_local, task); struct server *scfg = container_of(task->parent, struct server, task); struct server_proxy *proxy; - struct server_remote *remote; + struct sockaddr_in46 *remote; + char abuf[ADDRSTRLEN]; int sfd; fprintf(stderr, "%s called: task 0x%p and res %i\n", __func__, task, res); @@ -231,10 +226,11 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) goto out; } - remote = list_first_entry(&scfg->remotes, struct server_remote, list); - fprintf(stderr, "%s: attempting proxy connection to %s (len %u)\n", scfg->name, remote->addrstr, remote->addr.addrlen); + remote = list_first_entry(&scfg->remotes, struct sockaddr_in46, list); + fprintf(stderr, "%s: attempting proxy connection to %s (len %u)\n", + scfg->name, server_print_addr(remote, abuf, sizeof(abuf)), remote->addrlen); - sfd = socket(remote->addr.storage.ss_family, SOCK_STREAM, 0); + sfd = socket(remote->storage.ss_family, SOCK_STREAM, 0); if (sfd < 0) { perror("socket"); uring_close(cfg, NULL, res, NULL); @@ -246,7 +242,7 @@ server_local_accept(struct cfg *cfg, struct uring_task *task, int res) uring_task_init(&proxy->task, "proxy", &scfg->task, server_proxy_free); uring_task_set_fd(&proxy->task, sfd); list_add(&proxy->list, &scfg->proxys); - uring_connect(cfg, &proxy->task, &remote->addr, server_proxy_connected); + uring_connect(cfg, &proxy->task, remote, server_proxy_connected); out: uring_accept(cfg, &local->task, &local->peer, server_local_accept); @@ -311,19 +307,10 @@ server_commit(struct cfg *cfg, struct server *scfg) bool server_add_remote(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *addr) { - struct server_remote *remote; - if (!scfg || !addr) return false; - remote = zmalloc(sizeof(*remote)); - if (!remote) - return false; - - remote->addr.storage = addr->storage; - remote->addr.addrlen = addr->addrlen; - server_print_addr(&remote->addr, remote->addrstr, sizeof(remote->addrstr)); - list_add(&remote->list, &scfg->remotes); + list_add(&addr->list, &scfg->remotes); return true; } @@ -345,6 +332,7 @@ server_add_local(struct cfg *cfg, struct server *scfg, struct sockaddr_in46 *add server_print_addr(&local->addr, local->addrstr, sizeof(local->addrstr)); fprintf(stderr, "Adding local: %s\n", local->addrstr); list_add(&local->list, &scfg->locals); + free(addr); return true; } |