mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-11 13:24:43 -04:00
implement evdns_cancel_request; test one of the new evdns_base functions
svn:r980
This commit is contained in:
parent
49f4c0ef88
commit
87be18daa1
15
evdns.c
15
evdns.c
@ -2401,6 +2401,21 @@ request_submit(struct evdns_request *const req) {
|
||||
}
|
||||
}
|
||||
|
||||
/* exported function */
|
||||
void
|
||||
evdns_cancel_request(struct evdns_base *base, struct evdns_request *req)
|
||||
{
|
||||
if (req->ns) {
|
||||
/* remove from inflight queue */
|
||||
evdns_request_remove(req, &REQ_HEAD(base, req->trans_id));
|
||||
--base->global_requests_inflight;
|
||||
} else {
|
||||
/* remove from global_waiting head */
|
||||
evdns_request_remove(req, &base->req_waiting_head);
|
||||
--base->global_requests_waiting;
|
||||
}
|
||||
}
|
||||
|
||||
/* exported function */
|
||||
struct evdns_request *
|
||||
evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags,
|
||||
|
@ -326,8 +326,8 @@ struct evdns_request;
|
||||
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
||||
@param callback a callback function to invoke when the request is completed
|
||||
@param ptr an argument to pass to the callback function
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
@see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6()
|
||||
@return an evdns_request object if successful, or NULL if an error occurred.
|
||||
@see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
||||
*/
|
||||
struct evdns_request *evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
|
||||
|
||||
@ -339,8 +339,8 @@ struct evdns_request *evdns_base_resolve_ipv4(struct evdns_base *base, const cha
|
||||
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
||||
@param callback a callback function to invoke when the request is completed
|
||||
@param ptr an argument to pass to the callback function
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
@see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6()
|
||||
@return an evdns_request object if successful, or NULL if an error occurred.
|
||||
@see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
||||
*/
|
||||
struct evdns_request *evdns_base_resolve_ipv6(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
|
||||
|
||||
@ -355,8 +355,8 @@ struct in6_addr;
|
||||
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
||||
@param callback a callback function to invoke when the request is completed
|
||||
@param ptr an argument to pass to the callback function
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
@see evdns_resolve_reverse_ipv6()
|
||||
@return an evdns_request object if successful, or NULL if an error occurred.
|
||||
@see evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
||||
*/
|
||||
struct evdns_request *evdns_base_resolve_reverse(struct evdns_base *base, struct in_addr *in, int flags, evdns_callback_type callback, void *ptr);
|
||||
|
||||
@ -369,11 +369,19 @@ struct evdns_request *evdns_base_resolve_reverse(struct evdns_base *base, struct
|
||||
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
||||
@param callback a callback function to invoke when the request is completed
|
||||
@param ptr an argument to pass to the callback function
|
||||
@return 0 if successful, or -1 if an error occurred
|
||||
@see evdns_resolve_reverse_ipv6()
|
||||
@return an evdns_request object if successful, or NULL if an error occurred.
|
||||
@see evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
||||
*/
|
||||
struct evdns_request *evdns_base_resolve_reverse_ipv6(struct evdns_base *base, struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr);
|
||||
|
||||
/**
|
||||
Cancels a pending DNS resolution request.
|
||||
|
||||
@param base the evdns_base that was used to make the request
|
||||
@param req the evdns_request that was returned by calling a resolve function
|
||||
@see evdns_base_resolve_ip4(), evdns_base_resolve_ipv6, evdns_base_resolve_reverse
|
||||
*/
|
||||
void evdns_cancel_request(struct evdns_base *base, struct evdns_request *req);
|
||||
|
||||
/**
|
||||
Set the value of a configuration option.
|
||||
|
@ -131,7 +131,10 @@ dns_gethostbyname_cb(int result, char type, int count, int ttl,
|
||||
dns_ok = type;
|
||||
|
||||
out:
|
||||
event_loopexit(NULL);
|
||||
if (arg == NULL)
|
||||
event_loopexit(NULL);
|
||||
else
|
||||
event_base_loopexit((struct event_base *)arg, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -186,6 +189,38 @@ dns_gethostbyaddr(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dns_resolve_reverse(void)
|
||||
{
|
||||
struct in_addr in;
|
||||
struct event_base *base = event_base_new();
|
||||
struct evdns_base *dns = evdns_base_new(base, 1/* init name servers */);
|
||||
struct evdns_request *req = NULL;
|
||||
|
||||
in.s_addr = htonl(0x7f000001ul); /* 127.0.0.1 */
|
||||
fprintf(stdout, "Simple reverse DNS resolve (base): ");
|
||||
dns_ok = 0;
|
||||
|
||||
req = evdns_base_resolve_reverse(
|
||||
dns, &in, 0, dns_gethostbyname_cb, base);
|
||||
if (req == NULL) {
|
||||
fprintf(stdout, "FAILED\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
event_base_dispatch(base);
|
||||
|
||||
if (dns_ok == DNS_PTR) {
|
||||
fprintf(stdout, "OK\n");
|
||||
} else {
|
||||
fprintf(stdout, "FAILED\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
evdns_base_free(dns, 0);
|
||||
event_base_free(base);
|
||||
}
|
||||
|
||||
static int n_server_responses = 0;
|
||||
|
||||
static void
|
||||
@ -376,5 +411,7 @@ dns_suite(void)
|
||||
dns_gethostbyname6();
|
||||
dns_gethostbyaddr();
|
||||
|
||||
dns_resolve_reverse();
|
||||
|
||||
evdns_shutdown(0);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user