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
00041 #ifndef OW32_AsyncResolverQuery_h
00042 #define OW32_AsyncResolverQuery_h
00043
00044 #include <OW32/IoCompletion.h>
00045 #include <OW32/IoCompletionThreadPool.h>
00046 #include <OW32/auto_buf.h>
00047 #include <OW32/AsyncSocket.h>
00048
00049 #include <vector>
00050
00051 #include <OW32/AsyncResolverError.h>
00052
00053 namespace OW32
00054 {
00055
00056 class OW32_LIB_EXPORT CAsyncResolver;
00057
00058 #ifdef _MSC_VER
00059 #pragma warning(disable: 4251)
00060 #endif
00061
00066 class OW32_LIB_EXPORT CAsyncResolverQueryCallback
00067 {
00068 public:
00076 virtual void OnAnswer(AsyncResolverError status, unsigned char *abuf, size_t alen) = 0;
00077 };
00078
00082 class OW32_LIB_EXPORT CAsyncResolverCallback
00083 {
00084 public:
00093 virtual void OnAnswer(void *context, AsyncResolverError status, unsigned char *abuf, size_t alen) = 0;
00094 };
00095
00097 class OW32_LIB_EXPORT CAsyncResolverQuery :
00098 public CAsyncResolverQueryCallback,
00099 public CRefCounted
00100 {
00101 public:
00109 CAsyncResolverQuery(CAsyncResolver *pParent, CAsyncResolverCallback *pCallback, void *callbackContext = 0);
00110
00112 virtual void OnAnswer(AsyncResolverError status, unsigned char *abuf, size_t alen);
00113
00115 void query(const char *name, int dnsclass, int type);
00116
00118 const auto_byte_buf &getQuery() const { return m_query; }
00119
00121 int getId() const { return m_id; }
00122
00124 const bool getUsingTCP() const { return m_using_tcp; }
00125
00130 void setUsingTCP(bool using_tcp) { m_using_tcp = using_tcp; }
00131
00132 private:
00134 CAsyncResolverQuery(const CAsyncResolverQuery &);
00135 CAsyncResolverQuery& operator=(const CAsyncResolverQuery &);
00136
00138 AsyncResolverError mkquery(const char *name, int dnsclass, int type,
00139 unsigned short id, int rd);
00140
00141 protected:
00143 CAsyncResolver *m_pParent;
00145 auto_byte_buf m_query;
00147 int m_try;
00149 size_t m_server;
00151 int m_id;
00153 bool m_using_tcp;
00155 std::vector<bool> m_skip_server;
00157 AsyncResolverError m_error_status;
00159 CAsyncResolverCallback *m_pCallback;
00161 void *m_callbackContext;
00162
00167 friend class CAsyncResolver;
00168 };
00169
00170 #ifdef _MSC_VER
00171 #pragma warning(default: 4251)
00172 #endif
00173
00175 typedef CAutoRefCountedPtr<CAsyncResolverQuery> CAsyncResolverQueryPtr;
00176
00177 }
00178
00179 #endif // OW32_AsyncResolverQuery_h