Logo
~Sockets~
~Examples~
~Contact~


ResolvSocket.h

Go to the documentation of this file.
00001 
00005 /*
00006 Copyright (C) 2004-2007  Anders Hedstrom
00007 
00008 This library is made available under the terms of the GNU GPL.
00009 
00010 If you would like to use this library in a closed-source application,
00011 a separate license agreement is available. For information about 
00012 the closed-source license agreement for the C++ sockets library,
00013 please visit http://www.alhem.net/Sockets/license.html and/or
00014 email license@alhem.net.
00015 
00016 This program is free software; you can redistribute it and/or
00017 modify it under the terms of the GNU General Public License
00018 as published by the Free Software Foundation; either version 2
00019 of the License, or (at your option) any later version.
00020 
00021 This program is distributed in the hope that it will be useful,
00022 but WITHOUT ANY WARRANTY; without even the implied warranty of
00023 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00024 GNU General Public License for more details.
00025 
00026 You should have received a copy of the GNU General Public License
00027 along with this program; if not, write to the Free Software
00028 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
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, /* type */
00048                         std::map<std::string, std::string> > cache_t; /* host, result */
00049         typedef std::map<std::string, /* type */
00050                         std::map<std::string, time_t> > timeout_t; /* host, time */
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) {} // copy constructor
00077         ResolvSocket& operator=(const ResolvSocket& ) { return *this; } // assignment operator
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
Page, code, and content Copyright (C) 2007 by Anders Hedström
Generated for C++ Sockets by  doxygen 1.4.4