2016-02-23 10:46:40 -08:00
|
|
|
#include <netdb.h>
|
|
|
|
|
|
2016-03-01 19:43:11 -08:00
|
|
|
#include "asyncaddrinfo.h"
|
2016-02-23 10:46:40 -08:00
|
|
|
#include "peer.h"
|
|
|
|
|
|
|
|
|
|
#include "resolve.h"
|
|
|
|
|
|
2016-02-23 11:53:17 -08:00
|
|
|
void resolve_init() {
|
2016-03-01 19:43:11 -08:00
|
|
|
asyncaddrinfo_init(2);
|
2016-02-23 11:53:17 -08:00
|
|
|
}
|
2016-02-23 10:46:40 -08:00
|
|
|
|
2016-02-23 11:53:17 -08:00
|
|
|
void resolve_cleanup() {
|
2016-03-01 19:43:11 -08:00
|
|
|
asyncaddrinfo_cleanup();
|
2016-02-23 11:53:17 -08:00
|
|
|
}
|
2016-02-23 10:46:40 -08:00
|
|
|
|
2016-02-29 22:37:41 -08:00
|
|
|
void resolve(struct peer *peer, const char *node, const char *service, int flags) {
|
2016-03-01 19:43:11 -08:00
|
|
|
struct addrinfo hints = {
|
2016-03-10 11:09:58 -08:00
|
|
|
.ai_flags = AI_V4MAPPED | flags,
|
2016-03-01 19:43:11 -08:00
|
|
|
.ai_family = AF_UNSPEC,
|
|
|
|
|
.ai_socktype = SOCK_STREAM,
|
|
|
|
|
};
|
2016-02-29 22:37:41 -08:00
|
|
|
|
2016-03-01 19:43:11 -08:00
|
|
|
peer->fd = asyncaddrinfo_resolve(node, service, &hints);
|
2016-02-29 22:37:41 -08:00
|
|
|
peer_epoll_add(peer, EPOLLIN);
|
|
|
|
|
}
|
2016-02-23 11:53:17 -08:00
|
|
|
|
2016-02-29 22:37:41 -08:00
|
|
|
int resolve_result(struct peer *peer, struct addrinfo **addrs) {
|
2016-03-01 19:43:11 -08:00
|
|
|
int err = asyncaddrinfo_result(peer->fd, addrs);
|
2016-02-29 22:37:41 -08:00
|
|
|
peer->fd = -1;
|
|
|
|
|
return err;
|
2016-02-23 10:46:40 -08:00
|
|
|
}
|