finished self-implementation of DNS resolver recursion; will now remove all that!
[pingcheck] / src / dns / hostaddress.h
CommitLineData
91fcc471
TJ
1/*
2The software in this package is distributed under the GNU General
3Public License version 2 (with a special exception described below).
4
5A copy of GNU General Public License (GPL) is included in this distribution,
6in the file COPYING.GPL.
7
8As a special exception, if other files instantiate templates or use macros
9or inline functions from this file, or you compile this file and link it
10with other works to produce a work based on this file, this file
11does not by itself cause the resulting work to be covered
12by the GNU General Public License.
13
14However the source code for this file must still be made available
15in accordance with section (3) of the GNU General Public License.
16
17This exception does not invalidate any other reasons why a work based
18on this file might be covered by the GNU General Public License.
19*/
a9c88e1c
GMF
20#ifndef HOST_ADDRESS_H
21#define HOST_ADDRESS_H
e5567551 22
b0a693a0
GMF
23#include <stdint.h>
24
3bb5b5c0 25#include <list>
496d74d7
GMF
26
27#include <boost/asio.hpp>
946356e1 28#include <boost/serialization/access.hpp>
c5b4902d
CH
29#include <boost/serialization/nvp.hpp>
30#include <boost/serialization/split_member.hpp>
9c55ecd3 31
101be5ce
GMF
32#include "dns/timetolive.h"
33
e5567551
GMF
34//-----------------------------------------------------------------------------
35// HostAddress
36//-----------------------------------------------------------------------------
37
38class HostAddress
39{
40public:
41 HostAddress();
101be5ce 42 HostAddress(
496d74d7 43 const boost::asio::ip::address &ip,
b0a693a0 44 uint32_t ttl
101be5ce 45 );
a86e8ddc 46 ~HostAddress();
e5567551 47
496d74d7
GMF
48 boost::asio::ip::address get_ip() const;
49 void set_ip( const boost::asio::ip::address &ip );
e5567551 50
101be5ce
GMF
51 TimeToLive get_ttl() const;
52 void set_ttl( const TimeToLive &ttl );
e5567551
GMF
53
54private:
d3e8a9f9 55 /// IP address of the host
496d74d7 56 boost::asio::ip::address Ip;
d3e8a9f9 57 /// time-to-live of the host IP
101be5ce 58 TimeToLive Ttl;
e5567551 59
c5b4902d
CH
60 /// serialization: needs to be implemented here or will not compile
61 // since there is no serialize in ip::address nor ptime,
62 // need to save in other formats here
946356e1
CH
63 friend class boost::serialization::access;
64 template<class Archive>
c5b4902d
CH
65 void save(Archive & ar, const unsigned int version) const
66 {
67 std::string ip = Ip.to_string();
c5b4902d 68 ar & BOOST_SERIALIZATION_NVP(ip);
dbe986b9 69 ar & BOOST_SERIALIZATION_NVP(Ttl);
c5b4902d
CH
70 }
71
72 template<class Archive>
73 void load(Archive & ar, const unsigned int version)
74 {
75 std::string ip;
c5b4902d 76 ar & BOOST_SERIALIZATION_NVP(ip);
dbe986b9 77 ar & BOOST_SERIALIZATION_NVP(Ttl);
c5b4902d 78 Ip = boost::asio::ip::address::from_string(ip);
dbe986b9 79
c5b4902d
CH
80 }
81
82 BOOST_SERIALIZATION_SPLIT_MEMBER()
e5567551
GMF
83};
84
3bb5b5c0
GMF
85//-----------------------------------------------------------------------------
86// HostAddressList
87//-----------------------------------------------------------------------------
88
89typedef std::list<HostAddress> HostAddressList;
90
a9c88e1c 91#endif // HOST_ADDRESS_H