Signal handling changed to be able to go offline, online or online with webcheck ip.
[bpdyndnsd] / src / service.h
CommitLineData
b1be615b 1/** @file
3a89ac31 2 * @brief The abstract service class. This class represents all services.
b1be615b
BS
3 *
4 *
5 *
6 * @copyright Intra2net AG
7 * @license GPLv2
8*/
9
4545a371
BS
10#ifndef SERVICE_H
11#define SERVICE_H
12
88a594e8
BS
13#include "logger.h"
14
ca5d6889
BS
15#include <boost/archive/text_oarchive.hpp>
16#include <boost/archive/text_iarchive.hpp>
4545a371 17
88a594e8 18#include <boost/shared_ptr.hpp>
ca5d6889
BS
19#include <string>
20#include <list>
2bc1878a 21
3a89ac31 22
4248e8ca
TJ
23class Service
24{
92beaba3 25
2bc1878a 26private:
88a594e8 27
3a89ac31
BS
28 std::string Protocol;
29 std::string Hostname;
27baf279 30
3a89ac31
BS
31 std::string Login;
32 std::string Password;
33
025abebb 34 std::string ActualIP;
3a89ac31 35
3c0cd271
BS
36 int UpdateInterval;
37 int MaxUpdatesWithinInterval;
c3dea5dc 38 int DNSCacheTTL;
3c0cd271 39
62df5f33 40 std::list<time_t> LastUpdates;
2bc1878a
BS
41
42 friend class boost::serialization::access;
43 template<class Archive>
ca5d6889
BS
44 void serialize(Archive & ar, const unsigned int version)
45 {
46 // protocol and hostname are the unique identifier for each service.
47 ar & Protocol;
48 ar & Hostname;
49 // lastupdated and actual_ip must also be serialized, cause these are essential infos of each service.
50 ar & LastUpdates;
51 ar & ActualIP;
52 ar & UpdateInterval;
53 ar & MaxUpdatesWithinInterval;
54 ar & DNSCacheTTL;
55 }
2bc1878a 56
88a594e8 57 Logger::Ptr Log;
27baf279 58
4545a371 59public:
88a594e8
BS
60
61 typedef boost::shared_ptr<Service> Ptr;
62
4545a371
BS
63 Service();
64
4248e8ca 65 virtual ~Service();
4545a371 66
c3dea5dc
BS
67 virtual int perform_update(const std::string& ip) = 0;
68
62df5f33 69 void update(const std::string& ip, const time_t current_time);
c3dea5dc 70
62df5f33 71 bool update_allowed(const time_t current_time);
4545a371 72
3c0cd271 73 int get_update_interval()const;
e8d4a6f8 74 void set_update_interval(const int _update_interval);
6d64d311 75
3c0cd271 76 int get_max_updates_within_interval() const;
e8d4a6f8 77 void set_max_updates_within_interval(const int _max_updates_within_interval);
b38684ce 78
c3dea5dc
BS
79 int get_dns_cache_ttl() const;
80 void set_dns_cache_ttl(const int _dns_cache_ttl);
81
e8d4a6f8 82 void set_protocol(const std::string& _protocol);
b38684ce 83 std::string get_protocol() const;
3a89ac31 84
e8d4a6f8 85 void set_hostname(const std::string& _hostname);
b38684ce 86 std::string get_hostname() const;
3a89ac31 87
e8d4a6f8 88 void set_login(const std::string& _login);
b38684ce 89 std::string get_login() const;
3a89ac31 90
e8d4a6f8 91 void set_password(const std::string& _password);
b38684ce 92 std::string get_password() const;
3a89ac31 93
62df5f33 94 void set_last_updates(std::list<time_t> _last_updates);
c730deea 95 const std::list<time_t> get_last_updates() const;
2bc1878a 96
e8d4a6f8 97 void set_actual_ip(const std::string& _actual_ip);
b38684ce 98 std::string get_actual_ip() const;
27baf279 99
e8d4a6f8 100 void set_logger(const Logger::Ptr& _log);
b38684ce 101 Logger::Ptr get_logger() const;
27baf279 102
c3dea5dc 103 std::string get_service_name() const;
3c0cd271 104
e8d4a6f8
BS
105 bool operator== (const Service& other) const;
106 bool operator!= (const Service& other) const;
4545a371
BS
107};
108
109#endif