25 const char* D2ClientConfig::DFT_SERVER_IP =
"127.0.0.1";
26 const size_t D2ClientConfig::DFT_SERVER_PORT = 53001;
27 const char* D2ClientConfig::DFT_V4_SENDER_IP =
"0.0.0.0";
28 const char* D2ClientConfig::DFT_V6_SENDER_IP =
"::";
29 const size_t D2ClientConfig::DFT_SENDER_PORT = 0;
30 const size_t D2ClientConfig::DFT_MAX_QUEUE_SIZE = 1024;
31 const char* D2ClientConfig::DFT_NCR_PROTOCOL =
"UDP";
32 const char* D2ClientConfig::DFT_NCR_FORMAT =
"JSON";
33 const bool D2ClientConfig::DFT_OVERRIDE_NO_UPDATE =
false;
34 const bool D2ClientConfig::DFT_OVERRIDE_CLIENT_UPDATE =
false;
35 const char* D2ClientConfig::DFT_REPLACE_CLIENT_NAME_MODE =
"NEVER";
36 const char* D2ClientConfig::DFT_GENERATED_PREFIX =
"myhost";
37 const char* D2ClientConfig::DFT_HOSTNAME_CHAR_SET =
"";
38 const char* D2ClientConfig::DFT_HOSTNAME_CHAR_REPLACEMENT =
"";
40 D2ClientConfig::ReplaceClientNameMode
41 D2ClientConfig::stringToReplaceClientNameMode(
const std::string& mode_str) {
42 if (mode_str ==
"never") {
43 return (D2ClientConfig::RCM_NEVER);
46 if (mode_str ==
"always") {
47 return (D2ClientConfig::RCM_ALWAYS);
50 if (mode_str ==
"when-present") {
51 return (D2ClientConfig::RCM_WHEN_PRESENT);
54 if (mode_str ==
"when-not-present") {
55 return (D2ClientConfig::RCM_WHEN_NOT_PRESENT);
59 "Invalid ReplaceClientNameMode: " << mode_str);
65 case D2ClientConfig::RCM_NEVER:
67 case D2ClientConfig::RCM_ALWAYS:
69 case D2ClientConfig::RCM_WHEN_PRESENT:
70 return (
"when-present");
71 case D2ClientConfig::RCM_WHEN_NOT_PRESENT:
72 return (
"when-not-present");
77 std::ostringstream stream;
78 stream <<
"unknown(" << mode <<
")";
79 return (stream.str());
82 D2ClientConfig::D2ClientConfig(
const bool enable_updates,
84 const size_t server_port,
86 const size_t sender_port,
87 const size_t max_queue_size,
92 : enable_updates_(enable_updates),
93 server_ip_(server_ip),
94 server_port_(server_port),
95 sender_ip_(sender_ip),
96 sender_port_(sender_port),
97 max_queue_size_(max_queue_size),
98 ncr_protocol_(ncr_protocol),
99 ncr_format_(ncr_format) {
104 : enable_updates_(false),
106 server_port_(DFT_SERVER_PORT),
108 sender_port_(DFT_SENDER_PORT),
109 max_queue_size_(DFT_MAX_QUEUE_SIZE),
119 enable_updates_ = enable;
127 <<
" is not yet supported");
133 <<
" is not yet supported");
138 <<
"server-ip: " << server_ip_.
toText()
139 <<
" is: " << (server_ip_.
isV4() ?
"IPv4" :
"IPv6")
140 <<
" while sender-ip: " << sender_ip_.
toText()
141 <<
" is: " << (sender_ip_.
isV4() ?
"IPv4" :
"IPv6"));
144 if (server_ip_ == sender_ip_ && server_port_ == sender_port_) {
146 " share the exact same IP address/port: "
147 << server_ip_.
toText() <<
"/" << server_port_);
156 return ((enable_updates_ == other.enable_updates_) &&
157 (server_ip_ == other.server_ip_) &&
158 (server_port_ == other.server_port_) &&
159 (sender_ip_ == other.sender_ip_) &&
160 (sender_port_ == other.sender_port_) &&
161 (max_queue_size_ == other.max_queue_size_) &&
162 (ncr_protocol_ == other.ncr_protocol_) &&
163 (ncr_format_ == other.ncr_format_));
168 return (!(*
this == other));
173 std::ostringstream stream;
175 stream <<
"enable_updates: " << (enable_updates_ ?
"yes" :
"no");
176 if (enable_updates_) {
177 stream <<
", server-ip: " << server_ip_.
toText()
178 <<
", server-port: " << server_port_
179 <<
", sender-ip: " << sender_ip_.
toText()
180 <<
", sender-port: " << sender_port_
181 <<
", max-queue-size: " << max_queue_size_
187 return (stream.str());
196 result->set(
"enable-updates", Element::create(enable_updates_));
198 result->set(
"server-ip", Element::create(server_ip_.
toText()));
200 result->set(
"server-port", Element::create(static_cast<long long>(server_port_)));
202 result->set(
"sender-ip", Element::create(sender_ip_.
toText()));
204 result->set(
"sender-port", Element::create(static_cast<long long>(sender_port_)));
206 result->set(
"max-queue-size", Element::create(static_cast<long long>(max_queue_size_)));
Defines the D2ClientConfig class.
bool operator!=(const D2ClientConfig &other) const
Compares two D2ClientConfigs for inequality.
NameChangeProtocol stringToNcrProtocol(const std::string &protocol_str)
Function which converts text labels to NameChangeProtocol enums.
std::string toText() const
Generates a string representation of the class contents.
boost::shared_ptr< Element > ElementPtr
NameChangeFormat
Defines the list of data wire formats supported.
This file provides UDP socket based implementation for sending and receiving NameChangeRequests.
bool operator==(const D2ClientConfig &other) const
Compares two D2ClientConfigs for equality.
void contextToElement(data::ElementPtr map) const
Merge unparse a user_context object.
bool isV4() const
Convenience function to check for an IPv4 address.
D2ClientConfig()
Default constructor The default constructor creates an instance that has updates disabled.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
std::string ncrProtocolToString(NameChangeProtocol protocol)
Function which converts NameChangeProtocol enums to text labels.
virtual isc::data::ElementPtr toElement() const
Unparse a configuration object.
An exception that is thrown if an error occurs while configuring the D2 DHCP DDNS client...
Acts as a storage vault for D2 client configuration.
virtual ~D2ClientConfig()
Destructor.
virtual void validateContents()
Validates member values.
Defines the logger used by the top-level component of kea-dhcp-ddns.
ReplaceClientNameMode
Defines the client name replacement modes.
A wrapper interface for the ASIO library.
std::string ncrFormatToString(NameChangeFormat format)
Function which converts NameChangeFormat enums to text labels.
std::ostream & operator<<(std::ostream &os, const OpaqueDataTuple &tuple)
Inserts the OpaqueDataTuple as a string into stream.
std::string toText() const
Convert the address to a string.
NameChangeProtocol
Defines the list of socket protocols supported.
NameChangeFormat stringToNcrFormat(const std::string &fmt_str)
Function which converts labels to NameChangeFormat enum values.
The IOAddress class represents an IP addresses (version agnostic)
short getFamily() const
Returns the address family.
void enableUpdates(bool enable)
Sets enable-updates flag to the given value.