6 #include <boost/asio.hpp>
7 #include <boost/function.hpp>
8 #include <boost/thread/mutex.hpp>
10 #include <ail/types.hpp>
11 #include <ail/memory.hpp>
32 bool is_ip
, is_unknown
;
38 typedef std::vector
<dns_question
> question_vector
;
39 typedef std::vector
<dns_answer
> answer_vector
;
41 struct dns_lookup_result
49 question_vector questions
;
52 authoritative_nameservers
,
56 typedef boost::function
<void (dns_lookup_result
& result
)> dns_lookup_handler_type
;
60 ushort transaction_id
;
62 dns_lookup_handler_type lookup_handler
;
65 bool operator==(dns_request
const & other
) const;
71 dns_client(boost::asio::io_service
& io_service
, std::string
const & server
, ushort port
);
73 void lookup(std::string
const & name
, dns_lookup_handler_type lookup_handler
);
79 boost::asio::io_service
& io_service
;
81 boost::asio::ip::udp::resolver resolver
;
82 boost::asio::ip::udp::socket socket
;
85 boost::asio::ip::udp::endpoint endpoint
;
91 typedef std::vector
<dns_request
> request_vector
;
93 request_vector pending_requests
;
95 void resolve_event(boost::system::error_code
const & error
, boost::asio::ip::udp::resolver::iterator endpoint_iterator
, dns_request
& request
);
96 void receive_event(boost::system::error_code
const & error
, std::size_t bytes_received
, char * receive_buffer
);
97 void send_event(boost::system::error_code
const & error
, std::size_t bytes_received
, dns_request
& request
);
99 void global_error(std::string
const & message
);
100 void error_occured(dns_request
& request
, std::string
const & message
);
103 void send_dns_request(dns_request
& request
);
104 void erase_request(dns_request
& request
);
105 bool get_request(ushort transaction_id
, request_vector::iterator
& output
);
107 dns_question
read_question(bit_reader
& reader
);
108 dns_answer
read_answer(bit_reader
& reader
);
109 std::string
read_name(bit_reader
& reader
);
110 void continue_processing(char * receive_buffer
);