00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021
#ifndef __POSLIB_RESOLVER_H 00022
#define __POSLIB_RESOLVER_H 00023
00024
#include "sysstl.h" 00025 00026
#include "socket.h" 00027
#include "dnsmessage.h" 00028
00045 #define Q_DFL 0 00046
00055 #define Q_NOTCP 1 00056
00057
class WaitAnswerData { 00058
public: 00059 WaitAnswerData(
u_int16 _r_id,
_addr& _from); 00060
u_int16 r_id; 00061
_addr from; 00062 }; 00063
00085 class pos_resolver { 00086
public: 00093
pos_resolver(); 00094 00100
virtual ~pos_resolver(); 00101
00110 int n_udp_tries; 00111
00120 int *
udp_tries; 00121
00132 int tcp_timeout; 00133 00156
virtual void query(
DnsMessage *q,
DnsMessage*& a,
_addr *server,
int flags = Q_DFL); 00157 00171
virtual void query(
DnsMessage *q,
DnsMessage*& a,
stl_slist(_addr) &servers,
int flags = Q_DFL); 00172 00181
virtual void sendmessage(
DnsMessage *msg, _addr *res,
int sockid = -1); 00182 00199
virtual bool waitanswer(
DnsMessage*& ans,
stl_slist(WaitAnswerData)& wait,
int timeout,
stl_slist(WaitAnswerData)::iterator& it,
int sockid = -1); 00200 00209
virtual int tcpconnect(_addr *res); 00210 00218
virtual void tcpdisconnect(
int sockid); 00219 00233
virtual void tcpquery(
DnsMessage *q,
DnsMessage*& a,
int sockid); 00234 00242
virtual void tcpsendmessage(
DnsMessage *msg,
int sockid); 00243 00254
virtual void tcpwaitanswer(
DnsMessage*& ans,
int sockid); 00255 }; 00256
00270 class pos_cliresolver :
public pos_resolver { 00271
public: 00277
pos_cliresolver(); 00278 00284
virtual ~pos_cliresolver(); 00285 00286
void query(
DnsMessage *q,
DnsMessage*& a,
_addr *server,
int flags =
Q_DFL); 00287
void query(
DnsMessage *q,
DnsMessage*& a,
stl_slist(
_addr) &servers,
int flags =
Q_DFL); 00296
void sendmessage(
DnsMessage *msg,
_addr *res,
int sockid = -1); 00313
bool waitanswer(
DnsMessage*& ans,
stl_slist(WaitAnswerData)& wait,
int timeout,
stl_slist(WaitAnswerData)::iterator& it,
int sockid = -1); 00314 00324
void stop(); 00325
private: 00326
void clrstop(); 00327
int sockid; 00328
bool quit_flag; 00329
bool is_tcp; 00330
#ifndef _WIN32 00331
int clipipes[2]; 00332
#endif 00333
}; 00334 00335
#endif