00001
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 #ifndef _SOCKETS_ResolvSocket_H
00031 #define _SOCKETS_ResolvSocket_H
00032 #include "sockets-config.h"
00033 #ifdef ENABLE_RESOLVER
00034 #include "TcpSocket.h"
00035 #include <map>
00036
00037 #ifdef SOCKETS_NAMESPACE
00038 namespace SOCKETS_NAMESPACE {
00039 #endif
00040
00041 class Mutex;
00042
00045 class ResolvSocket : public TcpSocket
00046 {
00047 typedef std::map<std::string,
00048 std::map<std::string, std::string> > cache_t;
00049 typedef std::map<std::string,
00050 std::map<std::string, time_t> > timeout_t;
00051
00052 public:
00053 ResolvSocket(ISocketHandler&);
00054 ResolvSocket(ISocketHandler&, Socket *parent, const std::string& host, port_t port, bool ipv6 = false);
00055 ResolvSocket(ISocketHandler&, Socket *parent, ipaddr_t);
00056 #ifdef ENABLE_IPV6
00057 ResolvSocket(ISocketHandler&, Socket *parent, in6_addr&);
00058 #endif
00059 ~ResolvSocket();
00060
00061 void OnAccept() { m_bServer = true; }
00062 void OnLine(const std::string& line);
00063 void OnDetached();
00064 void OnDelete();
00065
00066 void SetId(int x) { m_resolv_id = x; }
00067 int GetId() { return m_resolv_id; }
00068
00069 void OnConnect();
00070
00071 #ifdef ENABLE_IPV6
00072 void SetResolveIpv6(bool x = true) { m_resolve_ipv6 = x; }
00073 #endif
00074
00075 private:
00076 ResolvSocket(const ResolvSocket& s) : TcpSocket(s) {}
00077 ResolvSocket& operator=(const ResolvSocket& ) { return *this; }
00078
00079 std::string m_query;
00080 std::string m_data;
00081 bool m_bServer;
00082 Socket *m_parent;
00083 int m_resolv_id;
00084 std::string m_resolv_host;
00085 port_t m_resolv_port;
00086 ipaddr_t m_resolv_address;
00087 #ifdef ENABLE_IPV6
00088 bool m_resolve_ipv6;
00089 in6_addr m_resolv_address6;
00090 #endif
00091 static cache_t m_cache;
00092 static timeout_t m_cache_to;
00093 static Mutex m_cache_mutex;
00094 bool m_cached;
00095 };
00096
00097
00098
00099
00100 #ifdef SOCKETS_NAMESPACE
00101 }
00102 #endif
00103
00104 #endif // ENABLE_RESOLVER
00105 #endif // _SOCKETS_ResolvSocket_H