Commit | Line | Data |
---|---|---|
91fcc471 TJ |
1 | /* |
2 | The software in this package is distributed under the GNU General | |
3 | Public License version 2 (with a special exception described below). | |
4 | ||
5 | A copy of GNU General Public License (GPL) is included in this distribution, | |
6 | in the file COPYING.GPL. | |
7 | ||
8 | As a special exception, if other files instantiate templates or use macros | |
9 | or inline functions from this file, or you compile this file and link it | |
10 | with other works to produce a work based on this file, this file | |
11 | does not by itself cause the resulting work to be covered | |
12 | by the GNU General Public License. | |
13 | ||
14 | However the source code for this file must still be made available | |
15 | in accordance with section (3) of the GNU General Public License. | |
16 | ||
17 | This exception does not invalidate any other reasons why a work based | |
18 | on 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 | ||
38 | class HostAddress | |
39 | { | |
40 | public: | |
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 | |
54 | private: | |
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 | ||
89 | typedef std::list<HostAddress> HostAddressList; | |
90 | ||
a9c88e1c | 91 | #endif // HOST_ADDRESS_H |