mirror of
https://github.com/yarrick/iodine.git
synced 2025-02-22 21:08:27 +00:00
Hold onto sockaddr length using new "socket" struct (less messy)
TODO: use same socket struct for all sockety things
This commit is contained in:
parent
1035840335
commit
5681caad55
@ -68,7 +68,7 @@ static int running;
|
||||
static const char *password;
|
||||
|
||||
/* Nameserver/domain info */
|
||||
static struct sockaddr_storage *nameserv_addrs;
|
||||
static struct socket *nameserv_addrs;
|
||||
static int nameserv_addrs_len;
|
||||
static int current_nameserver;
|
||||
static struct sockaddr_storage raw_serv;
|
||||
@ -207,7 +207,7 @@ client_get_conn()
|
||||
}
|
||||
|
||||
void
|
||||
client_set_nameservers(struct sockaddr_storage *addr, int addrslen)
|
||||
client_set_nameservers(struct socket *addr, int addrslen)
|
||||
{
|
||||
nameserv_addrs = addr;
|
||||
nameserv_addrs_len = addrslen;
|
||||
@ -552,8 +552,8 @@ send_query(int fd, uint8_t *hostname)
|
||||
|
||||
DEBUG(4, " Sendquery: id %5d name[0] '%c'", q.id, hostname[0]);
|
||||
|
||||
sendto(fd, packet, len, 0, (struct sockaddr*) &nameserv_addrs[current_nameserver],
|
||||
sizeof(struct sockaddr_storage));
|
||||
sendto(fd, packet, len, 0, (struct sockaddr*) &nameserv_addrs[current_nameserver].addr,
|
||||
nameserv_addrs[current_nameserver].length);
|
||||
|
||||
client_rotate_nameserver();
|
||||
|
||||
|
@ -37,7 +37,7 @@ enum connection client_get_conn();
|
||||
const char *client_get_raw_addr();
|
||||
|
||||
void client_rotate_nameserver();
|
||||
void client_set_nameservers(struct sockaddr_storage *, int);
|
||||
void client_set_nameservers(struct socket *, int);
|
||||
void client_set_topdomain(const char *cp);
|
||||
void client_set_password(const char *cp);
|
||||
int client_set_qtype(char *qtype);
|
||||
|
@ -121,6 +121,11 @@ struct query {
|
||||
struct timeval time_recv;
|
||||
};
|
||||
|
||||
struct socket {
|
||||
size_t length;
|
||||
struct sockaddr_storage addr;
|
||||
};
|
||||
|
||||
enum connection {
|
||||
CONN_RAW_UDP = 0,
|
||||
CONN_DNS_NULL,
|
||||
|
19
src/iodine.c
19
src/iodine.c
@ -181,7 +181,7 @@ main(int argc, char **argv)
|
||||
char **nameserv_hosts;
|
||||
int nameserv_hosts_len;
|
||||
struct sockaddr_storage nameservaddr;
|
||||
struct sockaddr_storage *nameserv_addrs;
|
||||
struct socket *nameserv_addrs;
|
||||
size_t nameserv_addrs_len;
|
||||
int nameservaddr_len;
|
||||
int nameserv_family;
|
||||
@ -374,15 +374,18 @@ main(int argc, char **argv)
|
||||
|
||||
// Preallocate memory with expected number of hosts
|
||||
nameserv_hosts = malloc(sizeof(char *) * nameserv_hosts_len);
|
||||
nameserv_addrs = malloc(sizeof(struct sockaddr_storage) * nameserv_hosts_len);
|
||||
nameserv_addrs = malloc(sizeof(struct socket) * nameserv_hosts_len);
|
||||
|
||||
if (argc == 0) {
|
||||
usage();
|
||||
/* NOT REACHED */
|
||||
} else if (argc == 1) {
|
||||
nameserv_hosts[0] = get_resolvconf_addr();
|
||||
} else if (argc > 1)
|
||||
for (int h = 0; h < nameserv_hosts_len; h++) nameserv_hosts[h] = strdup(argv[h + 1]);
|
||||
} else if (argc > 1) {
|
||||
for (int h = 0; h < nameserv_hosts_len; h++) {
|
||||
nameserv_hosts[h] = strdup(argv[h + 1]);
|
||||
}
|
||||
}
|
||||
topdomain = strdup(argv[0]);
|
||||
|
||||
for (int n = 0; n < nameserv_hosts_len; n++) {
|
||||
@ -395,7 +398,8 @@ main(int argc, char **argv)
|
||||
errx(1, "Cannot lookup nameserver '%s': %s ",
|
||||
nameserv_host, gai_strerror(nameservaddr_len));
|
||||
}
|
||||
memcpy(&nameserv_addrs[n], &nameservaddr, sizeof(struct sockaddr_storage));
|
||||
nameserv_addrs[n].length = nameservaddr_len;
|
||||
memcpy(&nameserv_addrs[n].addr, &nameservaddr, sizeof(struct sockaddr_storage));
|
||||
nameserv_addrs_len ++;
|
||||
nameserv_host = NULL;
|
||||
}
|
||||
@ -488,9 +492,10 @@ main(int argc, char **argv)
|
||||
signal(SIGTERM, sighandler);
|
||||
|
||||
fprintf(stderr, "Sending DNS queries for %s to ", topdomain);
|
||||
for (int a = 0; a < nameserv_addrs_len; a++)
|
||||
fprintf(stderr, "%s%s", format_addr(&nameserv_addrs[a], nameservaddr_len),
|
||||
for (int a = 0; a < nameserv_addrs_len; a++) {
|
||||
fprintf(stderr, "%s%s", format_addr(&nameserv_addrs[a].addr, nameserv_addrs[a].length),
|
||||
(a != nameserv_addrs_len-1) ? ", " : "");
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
if (client_handshake(dns_fd, raw_mode, autodetect_frag_size, max_downstream_frag_size)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user