00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00135 #ifndef EVENT2_DNS_H_INCLUDED_
00136 #define EVENT2_DNS_H_INCLUDED_
00137
00138 #include <event2/visibility.h>
00139
00140 #ifdef __cplusplus
00141 extern "C" {
00142 #endif
00143
00144
00145 #include <event2/util.h>
00146
00148 #define DNS_ERR_NONE 0
00149
00150 #define DNS_ERR_FORMAT 1
00151
00153 #define DNS_ERR_SERVERFAILED 2
00154
00155 #define DNS_ERR_NOTEXIST 3
00156
00157 #define DNS_ERR_NOTIMPL 4
00158
00160 #define DNS_ERR_REFUSED 5
00161
00162 #define DNS_ERR_TRUNCATED 65
00163
00164 #define DNS_ERR_UNKNOWN 66
00165
00166 #define DNS_ERR_TIMEOUT 67
00167
00168 #define DNS_ERR_SHUTDOWN 68
00169
00170 #define DNS_ERR_CANCEL 69
00171
00174 #define DNS_ERR_NODATA 70
00175
00176 #define DNS_IPv4_A 1
00177 #define DNS_PTR 2
00178 #define DNS_IPv6_AAAA 3
00179
00180 #define DNS_QUERY_NO_SEARCH 1
00181
00182 #define DNS_OPTION_SEARCH 1
00183 #define DNS_OPTION_NAMESERVERS 2
00184 #define DNS_OPTION_MISC 4
00185 #define DNS_OPTION_HOSTSFILE 8
00186 #define DNS_OPTIONS_ALL 15
00187
00188
00189 #define DNS_NO_SEARCH DNS_QUERY_NO_SEARCH
00190
00201 typedef void (*evdns_callback_type) (int result, char type, int count, int ttl, void *addresses, void *arg);
00202
00203 struct evdns_base;
00204 struct event_base;
00205
00207 #define EVDNS_BASE_INITIALIZE_NAMESERVERS 1
00208
00210 #define EVDNS_BASE_DISABLE_WHEN_INACTIVE 0x8000
00211
00225 EVENT2_EXPORT_SYMBOL
00226 struct evdns_base * evdns_base_new(struct event_base *event_base, int initialize_nameservers);
00227
00228
00241 EVENT2_EXPORT_SYMBOL
00242 void evdns_base_free(struct evdns_base *base, int fail_requests);
00243
00250 EVENT2_EXPORT_SYMBOL
00251 void evdns_base_clear_host_addresses(struct evdns_base *base);
00252
00259 EVENT2_EXPORT_SYMBOL
00260 const char *evdns_err_to_string(int err);
00261
00262
00274 EVENT2_EXPORT_SYMBOL
00275 int evdns_base_nameserver_add(struct evdns_base *base,
00276 unsigned long int address);
00277
00290 EVENT2_EXPORT_SYMBOL
00291 int evdns_base_count_nameservers(struct evdns_base *base);
00292
00302 EVENT2_EXPORT_SYMBOL
00303 int evdns_base_clear_nameservers_and_suspend(struct evdns_base *base);
00304
00305
00316 EVENT2_EXPORT_SYMBOL
00317 int evdns_base_resume(struct evdns_base *base);
00318
00336 EVENT2_EXPORT_SYMBOL
00337 int evdns_base_nameserver_ip_add(struct evdns_base *base,
00338 const char *ip_as_string);
00339
00343 EVENT2_EXPORT_SYMBOL
00344 int
00345 evdns_base_nameserver_sockaddr_add(struct evdns_base *base,
00346 const struct sockaddr *sa, ev_socklen_t len, unsigned flags);
00347
00348 struct evdns_request;
00349
00361 EVENT2_EXPORT_SYMBOL
00362 struct evdns_request *evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
00363
00375 EVENT2_EXPORT_SYMBOL
00376 struct evdns_request *evdns_base_resolve_ipv6(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
00377
00378 struct in_addr;
00379 struct in6_addr;
00380
00392 EVENT2_EXPORT_SYMBOL
00393 struct evdns_request *evdns_base_resolve_reverse(struct evdns_base *base, const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr);
00394
00395
00407 EVENT2_EXPORT_SYMBOL
00408 struct evdns_request *evdns_base_resolve_reverse_ipv6(struct evdns_base *base, const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr);
00409
00417 EVENT2_EXPORT_SYMBOL
00418 void evdns_cancel_request(struct evdns_base *base, struct evdns_request *req);
00419
00436 EVENT2_EXPORT_SYMBOL
00437 int evdns_base_set_option(struct evdns_base *base, const char *option, const char *val);
00438
00439
00462 EVENT2_EXPORT_SYMBOL
00463 int evdns_base_resolv_conf_parse(struct evdns_base *base, int flags, const char *const filename);
00464
00478 EVENT2_EXPORT_SYMBOL
00479 int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname);
00480
00491 #ifdef _WIN32
00492 EVENT2_EXPORT_SYMBOL
00493 int evdns_base_config_windows_nameservers(struct evdns_base *);
00494 #define EVDNS_BASE_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED
00495 #endif
00496
00497
00501 EVENT2_EXPORT_SYMBOL
00502 void evdns_base_search_clear(struct evdns_base *base);
00503
00504
00510 EVENT2_EXPORT_SYMBOL
00511 void evdns_base_search_add(struct evdns_base *base, const char *domain);
00512
00513
00522 EVENT2_EXPORT_SYMBOL
00523 void evdns_base_search_ndots_set(struct evdns_base *base, const int ndots);
00524
00531 typedef void (*evdns_debug_log_fn_type)(int is_warning, const char *msg);
00532
00533
00541 EVENT2_EXPORT_SYMBOL
00542 void evdns_set_log_fn(evdns_debug_log_fn_type fn);
00543
00554 EVENT2_EXPORT_SYMBOL
00555 void evdns_set_transaction_id_fn(ev_uint16_t (*fn)(void));
00556
00566 EVENT2_EXPORT_SYMBOL
00567 void evdns_set_random_bytes_fn(void (*fn)(char *, size_t));
00568
00569
00570
00571
00572
00573 struct evdns_server_request;
00574 struct evdns_server_question;
00575
00587 typedef void (*evdns_request_callback_fn_type)(struct evdns_server_request *, void *);
00588 #define EVDNS_ANSWER_SECTION 0
00589 #define EVDNS_AUTHORITY_SECTION 1
00590 #define EVDNS_ADDITIONAL_SECTION 2
00591
00592 #define EVDNS_TYPE_A 1
00593 #define EVDNS_TYPE_NS 2
00594 #define EVDNS_TYPE_CNAME 5
00595 #define EVDNS_TYPE_SOA 6
00596 #define EVDNS_TYPE_PTR 12
00597 #define EVDNS_TYPE_MX 15
00598 #define EVDNS_TYPE_TXT 16
00599 #define EVDNS_TYPE_AAAA 28
00600
00601 #define EVDNS_QTYPE_AXFR 252
00602 #define EVDNS_QTYPE_ALL 255
00603
00604 #define EVDNS_CLASS_INET 1
00605
00606
00607 #define EVDNS_FLAGS_AA 0x400
00608 #define EVDNS_FLAGS_RD 0x080
00609
00620 EVENT2_EXPORT_SYMBOL
00621 struct evdns_server_port *evdns_add_server_port_with_base(struct event_base *base, evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data);
00623 EVENT2_EXPORT_SYMBOL
00624 void evdns_close_server_port(struct evdns_server_port *port);
00625
00629 EVENT2_EXPORT_SYMBOL
00630 void evdns_server_request_set_flags(struct evdns_server_request *req, int flags);
00631
00632
00633
00634 EVENT2_EXPORT_SYMBOL
00635 int evdns_server_request_add_reply(struct evdns_server_request *req, int section, const char *name, int type, int dns_class, int ttl, int datalen, int is_name, const char *data);
00636 EVENT2_EXPORT_SYMBOL
00637 int evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl);
00638 EVENT2_EXPORT_SYMBOL
00639 int evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl);
00640 EVENT2_EXPORT_SYMBOL
00641 int evdns_server_request_add_ptr_reply(struct evdns_server_request *req, struct in_addr *in, const char *inaddr_name, const char *hostname, int ttl);
00642 EVENT2_EXPORT_SYMBOL
00643 int evdns_server_request_add_cname_reply(struct evdns_server_request *req, const char *name, const char *cname, int ttl);
00644
00648 EVENT2_EXPORT_SYMBOL
00649 int evdns_server_request_respond(struct evdns_server_request *req, int err);
00653 EVENT2_EXPORT_SYMBOL
00654 int evdns_server_request_drop(struct evdns_server_request *req);
00655 struct sockaddr;
00659 EVENT2_EXPORT_SYMBOL
00660 int evdns_server_request_get_requesting_addr(struct evdns_server_request *req, struct sockaddr *sa, int addr_len);
00661
00663 typedef void (*evdns_getaddrinfo_cb)(int result, struct evutil_addrinfo *res, void *arg);
00664
00665 struct evdns_base;
00666 struct evdns_getaddrinfo_request;
00684 EVENT2_EXPORT_SYMBOL
00685 struct evdns_getaddrinfo_request *evdns_getaddrinfo(
00686 struct evdns_base *dns_base,
00687 const char *nodename, const char *servname,
00688 const struct evutil_addrinfo *hints_in,
00689 evdns_getaddrinfo_cb cb, void *arg);
00690
00691
00692
00693
00694 EVENT2_EXPORT_SYMBOL
00695 void evdns_getaddrinfo_cancel(struct evdns_getaddrinfo_request *req);
00696
00709 EVENT2_EXPORT_SYMBOL
00710 int evdns_base_get_nameserver_addr(struct evdns_base *base, int idx,
00711 struct sockaddr *sa, ev_socklen_t len);
00712
00713 #ifdef __cplusplus
00714 }
00715 #endif
00716
00717 #endif