blob: 38f7ac06fe4b1fe471a80679998b653ed5b79912 (
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
|
// Copyright (C) 2018-2019 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/.
#include <config.h>
#include <cc/dhcp_config_error.h>
#include <process/config_ctl_parser.h>
#include <database/dbaccess_parser.h>
#include <cstdint>
#include <string>
using namespace isc;
using namespace isc::data;
namespace isc {
namespace process {
ConfigControlInfoPtr
ConfigControlParser::parse(const data::ConstElementPtr& config_control) {
ConfigControlInfoPtr ctl_info(new ConfigControlInfo());
try {
if (config_control->contains("config-databases")) {
auto elem = config_control->get("config-databases");
if (elem->getType() != Element::list) {
isc_throw (ConfigError, "config-databases must be a list ("
<< elem->getPosition() << ")");
}
const std::vector<data::ElementPtr>& db_list = elem->listValue();
for (auto db = db_list.cbegin(); db != db_list.end(); ++db) {
db::DbAccessParser parser;
std::string access_string;
parser.parse(access_string, *db);
/// @todo do we still need access_string for this at all?
/// can't we just use params directly and get rid of the
/// string now that DatabaseConnection::toElement(map) exists?
ctl_info->addConfigDatabase(access_string);
}
}
if (config_control->contains("config-fetch-wait-time")) {
auto config_fetch_wait_time = getInteger(config_control,
"config-fetch-wait-time",
0, 65535);
ctl_info->setConfigFetchWaitTime(static_cast<uint16_t>(config_fetch_wait_time));
}
} catch (const isc::ConfigError&) {
// Position was already added
throw;
} catch (const std::exception& ex) {
isc_throw(ConfigError, ex.what() << " ("
<< config_control->getPosition() << ")");
}
return (ctl_info);
}
} // end of namespace isc::process
} // end of namespace isc
|