20#include <boost/shared_ptr.hpp>
213 virtual void sendUpdate(
const std::string& comment =
"");
363 return (io_service_);
568 bool forward_change_completed_;
571 bool reverse_change_completed_;
583 size_t next_server_pos_;
586 size_t update_attempts_;
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Callback for the DNSClient class.
Status
A status code of the DNSClient.
Thrown if the transaction encounters a general error.
NameChangeTransactionError(const char *file, size_t line, const char *what)
Embodies the "life-cycle" required to carry out a DDNS update.
static const int SELECTING_FWD_SERVER_ST
State in which forward DNS server selection is done.
void retryTransition(const int fail_to_state)
Determines the state and next event based on update attempts.
virtual void onModelFailure(const std::string &explanation)
Handler for fatal model execution errors.
virtual void operator()(DNSClient::Status status)
Serves as the DNSClient IO completion event handler.
static const unsigned int DNS_UPDATE_DEFAULT_TIMEOUT
Default time to assign to a single DNS update.
static const int PROCESS_TRANS_FAILED_ST
State which processes an unsuccessful transaction conclusion.
static const unsigned int MAX_UPDATE_TRIES_PER_SERVER
Maximum times to attempt a single update on a given server.
static const int READY_ST
State from which a transaction is started.
const D2UpdateMessagePtr & getDnsUpdateResponse() const
Fetches the most recent DNS update response packet.
static const int PROCESS_TRANS_OK_ST
State which processes successful transaction conclusion.
static const int UPDATE_OK_EVT
Issued when the attempted update successfully completed.
const DNSClientPtr & getDNSClient() const
Fetches the DNSClient instance.
virtual void verifyStates()
Validates the contents of the set of states.
void startTransaction()
Begins execution of the transaction.
virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain)
Creates a new DNS update request based on the given domain.
NameChangeTransaction(asiolink::IOServicePtr &io_service, dhcp_ddns::NameChangeRequestPtr &ncr, DdnsDomainPtr &forward_domain, DdnsDomainPtr &reverse_domain, D2CfgMgrPtr &cfg_mgr)
Constructor.
static const int UPDATE_FAILED_EVT
Issued when the attempted update fails to complete.
const D2UpdateMessagePtr & getDnsUpdateRequest() const
Fetches the current DNS update request packet.
const dns::RRType & getAddressRRType() const
Returns the DHCP data type for the lease address.
const dhcp_ddns::NameChangeRequestPtr & getNcr() const
Fetches the NameChangeRequest for this transaction.
void initServerSelection(const DdnsDomainPtr &domain)
Initializes server selection from the given DDNS domain.
static const int IO_COMPLETED_EVT
Issued when a DNS update packet exchange has completed.
static const int NCT_DERIVED_STATE_MIN
Value at which custom states in a derived class should begin.
static const int SELECT_SERVER_EVT
Issued when a server needs to be selected.
static const int SERVER_IO_ERROR_EVT
Issued when an update fails due to an IO error.
std::string getRequestId() const
Fetches the request id that identifies this transaction.
virtual void defineStates()
Adds states defined by NameChangeTransaction to the state set.
const TransactionKey & getTransactionKey() const
Fetches the unique key that identifies this transaction.
void setUpdateAttempts(const size_t value)
Sets the update attempt count to the given value.
void addLeaseAddressRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease address to the given RRset.
bool getForwardChangeCompleted() const
Returns whether the forward change has completed or not.
virtual void sendUpdate(const std::string &comment="")
Send the update request to the current server.
void setForwardChangeCompleted(const bool value)
Sets the forward change completion flag to the given value.
void addPtrRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease FQDN to the given RRset.
void setDnsUpdateResponse(D2UpdateMessagePtr &response)
Sets the update response packet to the given packet.
bool selectNextServer()
Selects the next server in the current server list.
void setNcrStatus(const dhcp_ddns::NameChangeStatus &status)
Sets the status of the transaction's NameChangeRequest.
DdnsDomainPtr & getForwardDomain()
Fetches the forward DdnsDomain.
bool selectTSIGKey()
Selects the TSIG key.
const asiolink::IOServicePtr & getIOService()
Fetches the IOService the transaction uses for IO processing.
virtual void verifyEvents()
Validates the contents of the set of events.
void addDhcidRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease client's DHCID to the given RRset.
void clearDnsUpdateRequest()
Destroys the current update request packet and resets update attempts count.
static const int SELECTING_REV_SERVER_ST
State in which reverse DNS server selection is done.
DNSClient::Status getDnsUpdateStatus() const
Fetches the most recent DNS update status.
void setDnsUpdateStatus(const DNSClient::Status &status)
Sets the update status to the given status value.
void setDnsUpdateRequest(D2UpdateMessagePtr &request)
Sets the update request packet to the given packet.
bool getReverseChangeCompleted() const
Returns whether the reverse change has completed or not.
static const int NO_MORE_SERVERS_EVT
Issued when there are no more servers from which to select.
dhcp_ddns::NameChangeStatus getNcrStatus() const
Fetches the NameChangeRequest status of the transaction.
static const int NCT_DERIVED_EVENT_MIN
Value at which custom events in a derived class should begin.
virtual void defineEvents()
Adds events defined by NameChangeTransaction to the event set.
void clearDnsUpdateResponse()
Destroys the current update response packet.
std::string responseString() const
Returns a string version of the current response status and rcode.
void setReverseChangeCompleted(const bool value)
Sets the reverse change completion flag to the given value.
size_t getUpdateAttempts() const
Fetches the update attempt count for the current update.
const DnsServerInfoPtr & getCurrentServer() const
Fetches the currently selected server.
static const int SERVER_SELECTED_EVT
Issued when a server has been selected.
DdnsDomainPtr & getReverseDomain()
Fetches the reverse DdnsDomain.
std::string transactionOutcomeString() const
Returns a string version of transaction outcome.
virtual ~NameChangeTransaction()
Destructor.
Container class for handling the DHCID value within a NameChangeRequest.
The RRType class encapsulates DNS resource record types.
Implements a finite state machine.
static const int SM_DERIVED_STATE_MIN
Value at which custom states in a derived class should begin.
static const int SM_DERIVED_EVENT_MIN
Value at which custom events in a derived class should begin.
boost::shared_ptr< IOService > IOServicePtr
Defines a smart pointer to an IOService instance.
boost::shared_ptr< D2UpdateMessage > D2UpdateMessagePtr
Pointer to the DNS Update Message.
boost::shared_ptr< DdnsDomain > DdnsDomainPtr
Defines a pointer for DdnsDomain instances.
boost::shared_ptr< D2CfgMgr > D2CfgMgrPtr
Defines a shared pointer to D2CfgMgr.
boost::shared_ptr< DnsServerInfo > DnsServerInfoPtr
Defines a pointer for DnsServerInfo instances.
boost::shared_ptr< NameChangeTransaction > NameChangeTransactionPtr
Defines a pointer to a NameChangeTransaction.
boost::shared_ptr< DNSClient > DNSClientPtr
boost::shared_ptr< DnsServerInfoStorage > DnsServerInfoStoragePtr
Defines a pointer to DnsServerInfo storage containers.
isc::dhcp_ddns::D2Dhcid TransactionKey
Defines the type used as the unique key for transactions.
boost::shared_ptr< D2TsigKey > D2TsigKeyPtr
Type of pointer to a D2 TSIG key.
NameChangeStatus
Defines the runtime processing status values for requests.
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.
Defines the logger used by the top-level component of kea-lfc.
This file provides the classes needed to embody, compose, and decompose DNS update requests that are ...
This file defines the class StateModel.