7 #ifndef D2_CLIENT_MGR_H
8 #define D2_CLIENT_MGR_H
20 #include <boost/algorithm/string.hpp>
21 #include <boost/shared_ptr.hpp>
22 #include <boost/noncopyable.hpp>
155 void analyzeFqdn(
const bool client_s,
const bool client_n,
bool& server_s,
156 bool& server_n,
const DdnsParams& ddns_params)
const;
178 const bool trailing_dot =
true)
const;
195 std::string
qualifyName(
const std::string& partial_name,
197 const bool trailing_dot)
const;
286 void startSender(D2ClientErrorHandler error_handler,
304 void startSender(D2ClientErrorHandler error_handler);
436 boost::shared_ptr<asiolink::IOService> private_io_service_;
440 D2ClientErrorHandler client_error_handler_;
443 int registered_select_fd_;
449 bool server_s =
false;
450 bool server_n =
false;
451 analyzeFqdn(fqdn.getFlag(T::FLAG_S), fqdn.getFlag(T::FLAG_N),
452 server_s, server_n, ddns_params);
455 fqdn_resp.resetFlags();
458 fqdn_resp.setFlag(T::FLAG_S, server_s);
459 fqdn_resp.setFlag(T::FLAG_N, server_n);
462 fqdn_resp.setFlag(T::FLAG_O, (fqdn.getFlag(T::FLAG_S) != server_s));
468 bool& forward,
bool& reverse) {
469 forward = fqdn_resp.getFlag(T::FLAG_S);
470 reverse = !(fqdn_resp.getFlag(T::FLAG_N));
480 fqdn.getDomainName().empty()) {
481 fqdn_resp.setDomainName(
"", T::PARTIAL);
484 std::string client_name = fqdn.getDomainName();
496 std::vector<std::string> labels;
497 boost::algorithm::split(labels, raw_name, boost::is_any_of(
"."));
498 std::stringstream ss;
499 for (
auto label = labels.begin(); label != labels.end(); ++label ) {
500 if (label != labels.begin()) {
504 ss << sanitizer->scrub(*label);
507 client_name = ss.str();
511 if (fqdn.getDomainNameType() == T::PARTIAL) {
512 fqdn_resp.setDomainName(
qualifyName(client_name, ddns_params,
true), T::FULL);
515 fqdn_resp.setDomainName(client_name, T::FULL);
The Name class encapsulates DNS names.
Defines the D2ClientConfig class.
D2ClientConfig::ReplaceClientNameMode getReplaceClientNameMode() const
Returns how Kea should handle the domain-name supplied by the client.
This file defines abstract classes for exchanging NameChangeRequests.
void adjustDomainName(const T &fqdn, T &fqdn_resp, const DdnsParams &ddns_params)
Set server FQDN name based on configuration and a given FQDN.
~D2ClientMgr()
Destructor.
void startSender(D2ClientErrorHandler error_handler, isc::asiolink::IOService &io_service)
Enables sending NameChangeRequests to kea-dhcp-ddns.
Result
Defines the outcome of an asynchronous NCR send.
virtual void operator()(const dhcp_ddns::NameChangeSender::Result result, dhcp_ddns::NameChangeRequestPtr &ncr)
Function operator implementing the NCR sender callback.
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
void sendRequest(dhcp_ddns::NameChangeRequestPtr &ncr)
Send the given NameChangeRequests to kea-dhcp-ddns.
The IOService class is a wrapper for the ASIO io_service class.
std::string generateFqdn(const asiolink::IOAddress &address, const DdnsParams &ddns_params, const bool trailing_dot=true) const
Builds a FQDN based on the configuration and given IP address.
std::string toRawText(bool omit_final_dot=false) const
Convert the LabelSequence to a string without escape sequences.
const D2ClientConfigPtr & getD2ClientConfig() const
Fetches the DHCP-DDNS configuration pointer.
size_t getQueueMaxSize() const
Returns the maximum number of NCRs allowed in the queue.
const dhcp_ddns::NameChangeRequestPtr & peekAt(const size_t index) const
Returns the nth NCR queued for transmission.
boost::shared_ptr< D2ClientMgr > D2ClientMgrPtr
Defines a pointer for D2ClientMgr instances.
bool ddnsEnabled()
Convenience method for checking if DHCP-DDNS is enabled.
void clearQueue()
Removes all NCRs queued for transmission.
void invokeClientErrorHandler(const dhcp_ddns::NameChangeSender::Result result, dhcp_ddns::NameChangeRequestPtr &ncr)
Calls the client's error handler.
void analyzeFqdn(const bool client_s, const bool client_n, bool &server_s, bool &server_n, const DdnsParams &ddns_params) const
Determines server flags based on configuration and client flags.
isc::util::str::StringSanitizerPtr getHostnameSanitizer() const
Returns a regular expression string sanitizer.
boost::shared_ptr< NameChangeSender > NameChangeSenderPtr
Defines a smart pointer to an instance of a sender.
Convenience container for conveying DDNS behavioral parameters It is intended to be created per Packe...
Abstract class for defining application layer send callbacks.
Defines the logger used by the top-level component of kea-dhcp-ddns.
D2ClientMgr isolates Kea from the details of being a D2 client.
void getUpdateDirections(const T &fqdn_resp, bool &forward, bool &reverse)
Get directional update flags based on server FQDN flags.
ReplaceClientNameMode
Defines the client name replacement modes.
size_t getQueueSize() const
Returns the number of NCRs queued for transmission.
std::string qualifyName(const std::string &partial_name, const DdnsParams &ddns_params, const bool trailing_dot) const
Adds a qualifying suffix to a given domain name.
void suspendUpdates()
Suspends sending requests.
Abstract interface for sending NameChangeRequests.
boost::shared_ptr< StringSanitizer > StringSanitizerPtr
D2ClientMgr()
Constructor.
int getSelectFd()
Fetches the sender's select-fd.
std::function< void(const dhcp_ddns::NameChangeSender::Result result, dhcp_ddns::NameChangeRequestPtr &ncr)> D2ClientErrorHandler
Defines the type for D2 IO error handler.
bool amSending() const
Returns true if the sender is in send mode, false otherwise.
The IOAddress class represents an IP addresses (version agnostic)
int getRegisteredSelectFd()
Fetches the select-fd that is currently registered.
boost::shared_ptr< D2ClientConfig > D2ClientConfigPtr
Defines a pointer for D2ClientConfig instances.
void adjustFqdnFlags(const T &fqdn, T &fqdn_resp, const DdnsParams &ddns_params)
Set server FQDN flags based on configuration and a given FQDN.
void runReadyIO()
Processes sender IO events.
void setD2ClientConfig(D2ClientConfigPtr &new_config)
Updates the DHCP-DDNS client configuration to the given value.
void stopSender()
Disables sending NameChangeRequests to kea-dhcp-ddns.