This commit is contained in:
Max Lv
2016-06-12 09:09:03 +08:00
parent a9b85a5216
commit 658703a1bd
6 changed files with 34 additions and 16 deletions
+19 -6
View File
@@ -104,6 +104,7 @@ static void close_and_free_remote(EV_P_ remote_t *remote);
static void free_server(server_t *server);
static void close_and_free_server(EV_P_ server_t *server);
static void server_resolve_cb(struct sockaddr *addr, void *data);
static void query_free_cb(void *data);
static size_t parse_header_len(const char atyp, const char *data, size_t offset);
@@ -625,7 +626,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
int offset = 0;
int need_query = 0;
char atyp = server->buf->array[offset++];
char host[256] = { 0 };
char host[257] = { 0 };
uint16_t port = 0;
struct addrinfo info;
struct sockaddr_storage storage;
@@ -816,9 +817,13 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
}
}
} else {
query_t *query = (query_t *)ss_malloc(sizeof(query_t));
query->server = server;
snprintf(query->hostname, 256, "%s", host);
server->stage = 4;
server->query = resolv_query(host, server_resolve_cb, NULL, server,
port);
server->query = resolv_query(host, server_resolve_cb,
query_free_cb, query, port);
ev_io_stop(EV_A_ & server_recv_ctx->io);
}
@@ -898,19 +903,27 @@ static void server_timeout_cb(EV_P_ ev_timer *watcher, int revents)
close_and_free_server(EV_A_ server);
}
static void query_free_cb(void *data)
{
if (data != NULL) {
ss_free(data);
}
}
static void server_resolve_cb(struct sockaddr *addr, void *data)
{
server_t *server = (server_t *)data;
query_t *query = (query_t *)data;
server_t *server = query->server;
struct ev_loop *loop = server->listen_ctx->loop;
server->query = NULL;
if (addr == NULL) {
LOGE("unable to resolve");
LOGE("unable to resolve %s", query->hostname);
close_and_free_server(EV_A_ server);
} else {
if (verbose) {
LOGI("udns resolved");
LOGI("successfully resolved %s", query->hostname);
}
struct addrinfo info;