Code cleanup
This commit is contained in:
73
mud.c
73
mud.c
@@ -203,6 +203,34 @@ void mud_unmapv4 (struct sockaddr *addr)
|
|||||||
memcpy(addr, &sin, sizeof(sin));
|
memcpy(addr, &sin, sizeof(sin));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int mud_addrinfo (struct sockaddr_storage *addr, const char *host, int port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in sin = {
|
||||||
|
.sin_family = AF_INET,
|
||||||
|
.sin_port = htons(port),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (inet_pton(AF_INET, host, &sin.sin_addr) == 1) {
|
||||||
|
memcpy(addr, &sin, sizeof(sin));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct sockaddr_in6 sin6 = {
|
||||||
|
.sin6_family = AF_INET6,
|
||||||
|
.sin6_port = htons(port),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (inet_pton(AF_INET6, host, &sin6.sin6_addr) == 1) {
|
||||||
|
memcpy(addr, &sin6, sizeof(sin6));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
errno = EINVAL;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
ssize_t mud_send_path (struct mud *mud, struct path *path, uint64_t now,
|
ssize_t mud_send_path (struct mud *mud, struct path *path, uint64_t now,
|
||||||
void *data, size_t size)
|
void *data, size_t size)
|
||||||
@@ -430,28 +458,14 @@ int mud_peer (struct mud *mud, const char *name, const char *host, int port)
|
|||||||
if (!index)
|
if (!index)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
struct sockaddr_in sin = {
|
struct sockaddr_storage addr;
|
||||||
.sin_family = AF_INET,
|
|
||||||
.sin_port = htons(port),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sockaddr_in6 sin6 = {
|
if (mud_addrinfo(&addr, host, port))
|
||||||
.sin6_family = AF_INET6,
|
|
||||||
.sin6_port = htons(port),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sockaddr *addr = (struct sockaddr *)&sin;
|
|
||||||
|
|
||||||
if ((inet_pton(AF_INET, host, &sin.sin_addr) <= 0) &&
|
|
||||||
(addr = (struct sockaddr *)&sin6,
|
|
||||||
inet_pton(AF_INET6, host, &sin6.sin6_addr) <= 0)) {
|
|
||||||
errno = EINVAL;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
mud_unmapv4(addr);
|
mud_unmapv4((struct sockaddr *)&addr);
|
||||||
|
|
||||||
struct path *path = mud_new_path(mud, index, addr);
|
struct path *path = mud_new_path(mud, index, (struct sockaddr *)&addr);
|
||||||
|
|
||||||
if (!path)
|
if (!path)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -542,31 +556,18 @@ int mud_setup_socket (int fd, int v4, int v6)
|
|||||||
static
|
static
|
||||||
int mud_create_socket (int port, int v4, int v6)
|
int mud_create_socket (int port, int v4, int v6)
|
||||||
{
|
{
|
||||||
struct sockaddr_in6 sin6 = {
|
struct sockaddr_storage addr;
|
||||||
.sin6_family = AF_INET6,
|
|
||||||
.sin6_port = htons(port),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sockaddr_in sin = {
|
if (mud_addrinfo(&addr, v6 ? "::" : "0.0.0.0", port))
|
||||||
.sin_family = AF_INET,
|
return -1;
|
||||||
.sin_port = htons(port),
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sockaddr *addr = (struct sockaddr *)&sin;
|
int fd = socket(addr.ss_family, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
size_t addrlen = sizeof(sin);
|
|
||||||
|
|
||||||
if (v6) {
|
|
||||||
addr = (struct sockaddr *)&sin6;
|
|
||||||
addrlen = sizeof(sin6);
|
|
||||||
}
|
|
||||||
|
|
||||||
int fd = socket(addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
|
|
||||||
|
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (mud_setup_socket(fd, v4, v6) ||
|
if (mud_setup_socket(fd, v4, v6) ||
|
||||||
bind(fd, addr, addrlen)) {
|
bind(fd, (struct sockaddr *)&addr, sizeof(addr))) {
|
||||||
int err = errno;
|
int err = errno;
|
||||||
close(fd);
|
close(fd);
|
||||||
errno = err;
|
errno = err;
|
||||||
|
|||||||
Reference in New Issue
Block a user