blob: 9e38919b7fb37038dd06e842c26611d3fcc25941 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
// Copyright (C) 2018-2022 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
#ifndef BASE_CONFIG_BACKEND_H
#define BASE_CONFIG_BACKEND_H
#include <database/database_connection.h>
#include <boost/shared_ptr.hpp>
#include <cstdint>
#include <set>
#include <string>
namespace isc {
namespace cb {
/// @brief Interface for Kea server specific configuration backend
/// implementations.
///
/// Each Kea server (e.g. DHCPv4 server) needs to implement its own
/// interface to store and fetch its configuration from the databases.
/// This is because each Kea server uses a different set of
/// configuration information. This is a base interface which should
/// be implemented (and extended) by respective Kea servers to provide
/// API to store and fetch configuration information from a database.
/// Such implementation is called configuration backend. Each
/// configuration backend facilitates a single database type, e.g. MySQL
/// database. In order to support multiple database types, i.e. MySQL,
/// PostgreSQL, each Kea server will have to implement 2 separate configuration
/// backends, one for each database type.
class BaseConfigBackend {
public:
/// @brief Virtual destructor.
virtual ~BaseConfigBackend() { }
/// @brief Returns backend type in the textual format.
///
/// @return Name of the storage for configurations, e.g. "mysql",
/// "postgresql" and so forth.
virtual std::string getType() const = 0;
/// @brief Returns backend host.
///
/// This is used by the @c BaseConfigBackendPool to select backend
/// when @c BackendSelector is specified.
///
/// @return host on which the database is located.
virtual std::string getHost() const = 0;
/// @brief Returns backend port number.
///
/// This is used by the @c BaseConfigBackendPool to select backend
/// when @c BackendSelector is specified.
///
/// @return Port number on which database service is available.
virtual uint16_t getPort() const = 0;
/// @brief Flag which indicates if the config backend has an unusable
/// connection.
///
/// @return true if there is at least one unusable connection, false
/// otherwise.
virtual bool isUnusable() {
return (false);
}
/// @brief Return backend parameters.
///
/// Returns the backend parameters.
///
/// @return Parameters of the backend.
virtual isc::db::DatabaseConnection::ParameterMap getParameters() const {
return (isc::db::DatabaseConnection::ParameterMap());
}
};
/// @brief Shared pointer to the @c BaseConfigBackend.
typedef boost::shared_ptr<BaseConfigBackend> BaseConfigBackendPtr;
} // end of namespace isc::cb
} // end of namespace isc
#endif // BASE_CONFIG_BACKEND_H
|