Kea 2.7.5
check_exists_remove.cc
Go to the documentation of this file.
1// Copyright (C) 2023-2024 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6//
7#include <config.h>
8
10#include <d2srv/d2_cfg_mgr.h>
11#include <d2srv/d2_log.h>
12
13#include <functional>
14
15namespace isc {
16namespace d2 {
17
18
19// CheckExistsRemoveTransaction states
23
24// CheckExistsRemoveTransaction events
25// Currently CheckExistsRemoveTransaction does not define any events.
26
30 DdnsDomainPtr& forward_domain,
31 DdnsDomainPtr& reverse_domain,
32 D2CfgMgrPtr& cfg_mgr)
33 : NameChangeTransaction(io_service, ncr, forward_domain, reverse_domain,
34 cfg_mgr) {
35 if (ncr->getChangeType() != isc::dhcp_ddns::CHG_REMOVE) {
37 "CheckExistsRemoveTransaction, request type must be CHG_REMOVE");
38 }
39}
40
43
44void
46 // Call superclass impl first.
48
49 // Define CheckExistsRemoveTransaction events.
50 // Currently CheckExistsRemoveTransaction does not define any events.
51 // defineEvent(TBD_EVENT, "TBD_EVT");
52}
53
54void
56 // Call superclass implementation first to verify its events. These are
57 // events common to all transactions, and they must be defined.
58 // SELECT_SERVER_EVT
59 // SERVER_SELECTED_EVT
60 // SERVER_IO_ERROR_EVT
61 // NO_MORE_SERVERS_EVT
62 // IO_COMPLETED_EVT
63 // UPDATE_OK_EVT
64 // UPDATE_FAILED_EVT
66
67 // Verify CheckExistsRemoveTransaction events by attempting to fetch them.
68 // Currently CheckExistsRemoveTransaction does not define any events.
69 // getEvent(TBD_EVENT);
70}
71
72void
74 // Call superclass impl first.
76
77 // Define CheckExistsRemoveTransaction states.
78 defineState(READY_ST, "READY_ST",
80
81 defineState(SELECTING_FWD_SERVER_ST, "SELECTING_FWD_SERVER_ST",
83 this));
84
85 defineState(SELECTING_REV_SERVER_ST, "SELECTING_REV_SERVER_ST",
87 this));
88
89 defineState(REMOVING_FWD_ADDRS_ST, "REMOVING_FWD_ADDRS_ST",
91 this));
92
93 defineState(REMOVING_FWD_RRS_ST, "REMOVING_FWD_RRS_ST",
95 this));
96
97 defineState(REMOVING_REV_PTRS_ST, "REMOVING_REV_PTRS_ST",
99 this));
100
101 defineState(PROCESS_TRANS_OK_ST, "PROCESS_TRANS_OK_ST",
103 this));
104
105 defineState(PROCESS_TRANS_FAILED_ST, "PROCESS_TRANS_FAILED_ST",
107 this));
108}
109
110void
112 // Call superclass implementation first to verify its states. These are
113 // states common to all transactions, and they must be defined.
114 // READY_ST
115 // SELECTING_FWD_SERVER_ST
116 // SELECTING_REV_SERVER_ST
117 // PROCESS_TRANS_OK_ST
118 // PROCESS_TRANS_FAILED_ST
120
121 // Verify CheckExistsRemoveTransaction states by attempting to fetch them.
125}
126
127void
129 switch(getNextEvent()) {
130 case START_EVT:
131 if (getForwardDomain()) {
132 // Request includes a forward change, do that first.
134 } else {
135 // Reverse change only, transition accordingly.
137 }
138
139 break;
140 default:
141 // Event is invalid.
143 "Wrong event for context: " << getContextStr());
144 }
145}
146
147void
149 switch(getNextEvent()) {
151 // First time through for this transaction, so initialize server
152 // selection.
154 break;
156 // We failed to communicate with current server. Attempt to select
157 // another one below.
158 break;
159 default:
160 // Event is invalid.
162 "Wrong event for context: " << getContextStr());
163 }
164
165 // Select the next server from the list of forward servers.
166 if (selectNextServer()) {
167 // We have a server to try.
169 } else {
170 // Server list is exhausted, so fail the transaction.
172 }
173}
174
175void
177 if (doOnEntry()) {
178 // Clear the update attempts count on initial transition.
180 }
181
182 switch(getNextEvent()) {
184 try {
187 } catch (const std::exception& ex) {
188 // While unlikely, the build might fail if we have invalid
189 // data. Should that be the case, we need to fail the
190 // transaction.
193 .arg(getRequestId())
194 .arg(getNcr()->toText())
195 .arg(ex.what());
197 break;
198 }
199
200 // Call sendUpdate() to initiate the async send. Note it also sets
201 // next event to NOP_EVT.
202 sendUpdate("Forward A/AAAA Remove");
203 break;
204
205 case IO_COMPLETED_EVT: {
206 switch (getDnsUpdateStatus()) {
207 case DNSClient::SUCCESS: {
208 // We successfully received a response packet from the server.
209 // The RCODE will be based on a value-dependent RRset search,
210 // see RFC 2136 section 3.2.3/3.2.4.
211 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
212 if ((rcode == dns::Rcode::NOERROR()) ||
213 (rcode == dns::Rcode::NXRRSET())) {
214 // We were able to remove it or it wasn't there, now we
215 // need to remove any other RRs for this FQDN.
217 } else {
218 // Per RFC4703 any other value means cease.
219 // If we get not authorized should we try the next server in
220 // the list? @todo This needs some discussion perhaps.
222 .arg(getRequestId())
223 .arg(getCurrentServer()->toText())
224 .arg(getNcr()->getFqdn())
225 .arg(rcode.getCode());
227 }
228
229 break;
230 }
231
233 // No response from the server, log it and set up
234 // to select the next server for a retry.
236 .arg(getRequestId())
237 .arg(getNcr()->getFqdn())
238 .arg(getCurrentServer()->toText());
239
241 break;
242
243 case DNSClient::OTHER:
244 // We couldn't send to the current server, log it and set up
245 // to select the next server for a retry.
247 .arg(getRequestId())
248 .arg(getNcr()->getFqdn())
249 .arg(getCurrentServer()->toText());
250
252 break;
253
255 // A response was received but was corrupt. Retry it like an IO
256 // error.
258 .arg(getRequestId())
259 .arg(getCurrentServer()->toText())
260 .arg(getNcr()->getFqdn());
261
263 break;
264
265 default:
266 // Any other value and we will fail this transaction, something
267 // bigger is wrong.
270 .arg(getRequestId())
271 .arg(getDnsUpdateStatus())
272 .arg(getNcr()->getFqdn())
273 .arg(getCurrentServer()->toText());
274
276 break;
277 } // end switch on dns_status
278
279 break;
280 } // end case IO_COMPLETE_EVT
281
282 default:
283 // Event is invalid.
285 "Wrong event for context: " << getContextStr());
286 }
287}
288
289
290void
292 if (doOnEntry()) {
293 // Clear the update attempts count on initial transition.
295 }
296
297 switch(getNextEvent()) {
298 case UPDATE_OK_EVT:
300 try {
303 } catch (const std::exception& ex) {
304 // While unlikely, the build might fail if we have invalid
305 // data. Should that be the case, we need to fail the
306 // transaction.
309 .arg(getRequestId())
310 .arg(getNcr()->toText())
311 .arg(ex.what());
313 break;
314 }
315
316 // Call sendUpdate() to initiate the async send. Note it also sets
317 // next event to NOP_EVT.
318 sendUpdate("Forward RR Remove");
319 break;
320
321 case IO_COMPLETED_EVT: {
322 switch (getDnsUpdateStatus()) {
323 case DNSClient::SUCCESS: {
324 // We successfully received a response packet from the server.
325 // The RCODE will be based on a value-dependent RRset search,
326 // see RFC 2136 section 3.2.3/3.2.4.
327 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
328 if ((rcode == dns::Rcode::NOERROR()) ||
329 (rcode == dns::Rcode::NXRRSET())) {
330 // We were able to remove them or they were not there (
331 // Rcode of NXRRSET means there are no matching RRsets).
332 // In either case, we consider it success and mark it as done.
334
335 // If request calls for reverse update then do that next,
336 // otherwise we can process ok.
337 if (getReverseDomain()) {
339 } else {
341 }
342 } else {
343 // Per RFC4703 any other value means cease.
344 // If we get not authorized should try the next server in
345 // the list? @todo This needs some discussion perhaps.
347 .arg(getRequestId())
348 .arg(getCurrentServer()->toText())
349 .arg(getNcr()->getFqdn())
350 .arg(rcode.getCode());
352 }
353
354 break;
355 }
356
358 // No response from the server, log it and set up
359 // to select the next server for a retry.
361 .arg(getRequestId())
362 .arg(getNcr()->getFqdn())
363 .arg(getCurrentServer()->toText());
364
365 // @note If we exhaust the IO retries for the current server
366 // due to IO failures, we will abort the remaining updates.
367 // The rational is that we are only in this state, if the remove
368 // of the forward address RR succeeded (removingFwdAddrsHandler)
369 // on the current server. Therefore we should not attempt another
370 // removal on a different server. This is perhaps a point
371 // for discussion.
372 // @todo Should we go ahead with the reverse remove?
374 break;
375
376 case DNSClient::OTHER:
377 // We couldn't send to the current server, log it and set up
378 // to select the next server for a retry.
380 .arg(getRequestId())
381 .arg(getNcr()->getFqdn())
382 .arg(getCurrentServer()->toText());
383
384 // @note same commentary as in TIMEOUT above case.
386 break;
387
389 // A response was received but was corrupt. Retry it like an IO
390 // error.
392 .arg(getRequestId())
393 .arg(getCurrentServer()->toText())
394 .arg(getNcr()->getFqdn());
395
396 // If we are out of retries on this server abandon the transaction.
397 // (Same logic as the case for TIMEOUT above).
399 break;
400
401 default:
402 // Any other value and we will fail this transaction, something
403 // bigger is wrong.
406 .arg(getRequestId())
407 .arg(getDnsUpdateStatus())
408 .arg(getNcr()->getFqdn())
409 .arg(getCurrentServer()->toText());
410
412 break;
413 } // end switch on dns_status
414
415 break;
416 } // end case IO_COMPLETE_EVT
417
418 default:
419 // Event is invalid.
421 "Wrong event for context: " << getContextStr());
422 }
423}
424
425
426void
428 switch(getNextEvent()) {
430 // First time through for this transaction, so initialize server
431 // selection.
433 break;
435 // We failed to communicate with current server. Attempt to select
436 // another one below.
437 break;
438 default:
439 // Event is invalid.
441 "Wrong event for context: " << getContextStr());
442 }
443
444 // Select the next server from the list of forward servers.
445 if (selectNextServer()) {
446 // We have a server to try.
448 }
449 else {
450 // Server list is exhausted, so fail the transaction.
452 }
453}
454
455
456void
458 if (doOnEntry()) {
459 // Clear the update attempts count on initial transition.
461 }
462
463 switch(getNextEvent()) {
465 try {
468 } catch (const std::exception& ex) {
469 // While unlikely, the build might fail if we have invalid
470 // data. Should that be the case, we need to fail the
471 // transaction.
473 .arg(getRequestId())
474 .arg(getNcr()->toText())
475 .arg(ex.what());
477 break;
478 }
479
480 // Call sendUpdate() to initiate the async send. Note it also sets
481 // next event to NOP_EVT.
482 sendUpdate("Reverse Remove");
483 break;
484
485 case IO_COMPLETED_EVT: {
486 switch (getDnsUpdateStatus()) {
487 case DNSClient::SUCCESS: {
488 // We successfully received a response packet from the server.
489 // The RCODE will be based on a value-dependent RRset search,
490 // see RFC 2136 section 3.2.3/3.2.4.
491 const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
492 if ((rcode == dns::Rcode::NOERROR()) ||
493 (rcode == dns::Rcode::NXRRSET())) {
494 // We were able to remove the reverse mapping or they were
495 // not there (Rcode of NXRRSET means there are no matching
496 // RRsets). In either case, mark it as done.
499 } else {
500 // Per RFC4703 any other value means cease.
501 // If we get not authorized should try the next server in
502 // the list? @todo This needs some discussion perhaps.
504 .arg(getRequestId())
505 .arg(getCurrentServer()->toText())
506 .arg(getNcr()->getFqdn())
507 .arg(rcode.getCode());
509 }
510
511 break;
512 }
513
515 // No response from the server, log it and set up
516 // to select the next server for a retry.
518 .arg(getRequestId())
519 .arg(getNcr()->getFqdn())
520 .arg(getCurrentServer()->toText());
521
522 // If we are out of retries on this server, we go back and start
523 // all over on a new server.
525 break;
526
527 case DNSClient::OTHER:
528 // We couldn't send to the current server, log it and set up
529 // to select the next server for a retry.
531 .arg(getRequestId())
532 .arg(getNcr()->getFqdn())
533 .arg(getCurrentServer()->toText());
534
535 // If we are out of retries on this server, we go back and start
536 // all over on a new server.
538 break;
539
541 // A response was received but was corrupt. Retry it like an IO
542 // error.
544 .arg(getRequestId())
545 .arg(getCurrentServer()->toText())
546 .arg(getNcr()->getFqdn());
547
548 // If we are out of retries on this server, we go back and start
549 // all over on a new server.
551 break;
552
553 default:
554 // Any other value and we will fail this transaction, something
555 // bigger is wrong.
558 .arg(getRequestId())
559 .arg(getDnsUpdateStatus())
560 .arg(getNcr()->getFqdn())
561 .arg(getCurrentServer()->toText());
562
564 break;
565 } // end switch on dns_status
566
567 break;
568 } // end case IO_COMPLETE_EVT
569
570 default:
571 // Event is invalid.
573 "Wrong event for context: " << getContextStr());
574 }
575}
576
577
578void
580 switch(getNextEvent()) {
581 case UPDATE_OK_EVT:
583 .arg(getRequestId())
584 .arg(getNcr()->toText());
586 endModel();
587 break;
588 default:
589 // Event is invalid.
591 "Wrong event for context: " << getContextStr());
592 }
593}
594
595void
597 switch(getNextEvent()) {
603 .arg(getRequestId())
605 endModel();
606 break;
607 default:
608 // Event is invalid.
610 "Wrong event for context: " << getContextStr());
611 }
612}
613
614void
616 // Construct an empty request.
618
619 // Content on this request is based on RFC 4703, section 5.5, paragraph 4.
620 // Construct dns::Name from NCR fqdn.
621 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
622 // First build the Prerequisite Section
623
624 // Create an DHCID exists prerequisite RR and add it to the
625 // pre-requisite section
626 // Based on RFC 2136, section 2.4.1
627 dns::RRsetPtr prereq(new dns::RRset(fqdn, dns::RRClass::ANY(),
629 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
630
631 // Next build the Update Section
632
633 // Create the FQDN/IP 'delete' RR and add it to the update section.
634 // Add the RR to update section.
635 // Based on RFC 2136 section 2.5.4
638 addLeaseAddressRdata(update);
639 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
640
641 // Set the transaction's update request to the new request.
642 setDnsUpdateRequest(request);
643}
644
645void
647 // Construct an empty request.
649
650 // Construct dns::Name from NCR fqdn.
651 dns::Name fqdn(dns::Name(getNcr()->getFqdn()));
652
653 // First build the Prerequisite Section.
654
655 // Create an assertion that there are no A RRs for the FQDN.
656 // Add it to the pre-reqs.
657 // Based on RFC 2136, section 2.4.3.
660 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
661
662 // Create an assertion that there are no AAAA RRs for the FQDN.
663 // Add it to the pre-reqs.
664 // Based on RFC 2136, section 2.4.3.
665 prereq.reset(new dns::RRset(fqdn, dns::RRClass::NONE(),
667 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
668
669 // Next build the Update Section.
670
671 // Create the 'delete' of all DHCID RRs for FQDN.
672 // Add the RR to update section.
673 // Based on RFC 2136, section 2.5.2.
674 dns::RRsetPtr update(new dns::RRset(fqdn, dns::RRClass::ANY(),
676 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
677
678 // Set the transaction's update request to the new request.
679 setDnsUpdateRequest(request);
680}
681
682void
684 // Construct an empty request.
686
687 // Create the reverse IP address "FQDN".
688 std::string rev_addr = D2CfgMgr::reverseIpAddress(getNcr()->getIpAddress());
689 dns::Name rev_ip(rev_addr);
690
691 // Content on this request is based on RFC 4703, section 5.5, paragraph 2.
692 // First build the Prerequisite Section.
693 // (Note that per RFC 4703, section 5.4, there is no need to validate
694 // DHCID RR for PTR entries.)
695
696 // Create an assertion that the PTRDNAME in the PTR record matches the
697 // client's FQDN for the address that was released.
698 // Based on RFC 2136, section 3.2.3
699 dns::RRsetPtr prereq(new dns::RRset(rev_ip, dns::RRClass::IN(),
701 addPtrRdata(prereq);
702 request->addRRset(D2UpdateMessage::SECTION_PREREQUISITE, prereq);
703
704 // Now, build the Update section.
705
706 // Create a delete of any RRs for the FQDN and add it to update section.
707 // Based on RFC 2136, section 3.4.2.3
708 dns::RRsetPtr update(new dns::RRset(rev_ip, dns::RRClass::ANY(),
710 request->addRRset(D2UpdateMessage::SECTION_UPDATE, update);
711
712 // Set the transaction's update request to the new request.
713 setDnsUpdateRequest(request);
714}
715
716} // namespace isc::d2
717} // namespace isc
This file defines the class CheckExistsRemoveTransaction.
Thrown if the CheckExistsRemoveTransaction encounters a general error.
void buildRemoveRevPtrsRequest()
Builds a DNS request to remove a reverse DNS entry for a FQDN.
virtual void defineEvents()
Adds events defined by CheckExistsRemoveTransaction to the event set.
void processRemoveFailedHandler()
State handler for PROCESS_TRANS_FAILED_ST.
CheckExistsRemoveTransaction(asiolink::IOServicePtr &io_service, dhcp_ddns::NameChangeRequestPtr &ncr, DdnsDomainPtr &forward_domain, DdnsDomainPtr &reverse_domain, D2CfgMgrPtr &cfg_mgr)
Event sent when replace attempt to fails with address not in use.
void removingFwdRRsHandler()
State handler for REMOVING_FWD_RRS_ST.
void buildRemoveFwdAddressRequest()
Builds a DNS request to remove a forward DNS address for a FQDN.
virtual void verifyStates()
Validates the contents of the set of states.
void processRemoveOkHandler()
State handler for PROCESS_TRANS_OK_ST.
static const int REMOVING_REV_PTRS_ST
State that attempts to remove reverse PTR records.
void readyHandler()
State handler for READY_ST.
virtual void verifyEvents()
Validates the contents of the set of events.
static const int REMOVING_FWD_ADDRS_ST
State that attempts to remove specific forward address record.
void buildRemoveFwdRRsRequest()
Builds a DNS request to remove all forward DNS RRs for a FQDN.
void selectingRevServerHandler()
State handler for SELECTING_REV_SERVER_ST.
void selectingFwdServerHandler()
State handler for SELECTING_FWD_SERVER_ST.
void removingFwdAddrsHandler()
State handler for REMOVING_FWD_ADDRS_ST.
virtual void defineStates()
Adds states defined by CheckExistsRemoveTransaction to the state set.
void removingRevPtrsHandler()
State handler for REMOVING_REV_PTRS_ST.
static const int REMOVING_FWD_RRS_ST
State that attempts to remove any other forward RRs for the DHCID.
static std::string reverseIpAddress(const std::string &address)
Generate a reverse order string for the given IP address.
@ TIMEOUT
No response, timeout.
Definition dns_client.h:60
@ OTHER
Other, unclassified error.
Definition dns_client.h:63
@ INVALID_RESPONSE
Response received but invalid.
Definition dns_client.h:62
@ SUCCESS
Response received and is ok.
Definition dns_client.h:59
Embodies the "life-cycle" required to carry out a DDNS update.
Definition nc_trans.h:77
static const int SELECTING_FWD_SERVER_ST
State in which forward DNS server selection is done.
Definition nc_trans.h:91
void retryTransition(const int fail_to_state)
Determines the state and next event based on update attempts.
Definition nc_trans.cc:287
static const int PROCESS_TRANS_FAILED_ST
State which processes an unsuccessful transaction conclusion.
Definition nc_trans.h:105
static const int READY_ST
State from which a transaction is started.
Definition nc_trans.h:83
const D2UpdateMessagePtr & getDnsUpdateResponse() const
Fetches the most recent DNS update response packet.
Definition nc_trans.cc:554
static const int PROCESS_TRANS_OK_ST
State which processes successful transaction conclusion.
Definition nc_trans.h:102
static const int UPDATE_OK_EVT
Issued when the attempted update successfully completed.
Definition nc_trans.h:135
virtual void verifyStates()
Validates the contents of the set of states.
Definition nc_trans.cc:266
virtual D2UpdateMessagePtr prepNewRequest(DdnsDomainPtr domain)
Creates a new DNS update request based on the given domain.
Definition nc_trans.cc:344
static const int UPDATE_FAILED_EVT
Issued when the attempted update fails to complete.
Definition nc_trans.h:141
const dns::RRType & getAddressRRType() const
Returns the DHCP data type for the lease address.
Definition nc_trans.cc:574
const dhcp_ddns::NameChangeRequestPtr & getNcr() const
Fetches the NameChangeRequest for this transaction.
Definition nc_trans.cc:426
void initServerSelection(const DdnsDomainPtr &domain)
Initializes server selection from the given DDNS domain.
Definition nc_trans.cc:456
static const int IO_COMPLETED_EVT
Issued when a DNS update packet exchange has completed.
Definition nc_trans.h:130
static const int SELECT_SERVER_EVT
Issued when a server needs to be selected.
Definition nc_trans.h:113
static const int SERVER_IO_ERROR_EVT
Issued when an update fails due to an IO error.
Definition nc_trans.h:119
std::string getRequestId() const
Fetches the request id that identifies this transaction.
Definition nc_trans.cc:436
virtual void defineStates()
Adds states defined by NameChangeTransaction to the state set.
Definition nc_trans.cc:258
void addLeaseAddressRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease address to the given RRset.
Definition nc_trans.cc:367
virtual void sendUpdate(const std::string &comment="")
Send the update request to the current server.
Definition nc_trans.cc:193
void setForwardChangeCompleted(const bool value)
Sets the forward change completion flag to the given value.
Definition nc_trans.cc:329
void addPtrRdata(dns::RRsetPtr &rrset)
Adds an RData for the lease FQDN to the given RRset.
Definition nc_trans.cc:409
bool selectNextServer()
Selects the next server in the current server list.
Definition nc_trans.cc:468
void setNcrStatus(const dhcp_ddns::NameChangeStatus &status)
Sets the status of the transaction's NameChangeRequest.
Definition nc_trans.cc:539
DdnsDomainPtr & getForwardDomain()
Fetches the forward DdnsDomain.
Definition nc_trans.cc:446
virtual void verifyEvents()
Validates the contents of the set of events.
Definition nc_trans.cc:243
void clearDnsUpdateRequest()
Destroys the current update request packet.
Definition nc_trans.cc:304
void clearUpdateAttempts()
Resets the update attempts count.
Definition nc_trans.cc:309
static const int SELECTING_REV_SERVER_ST
State in which reverse DNS server selection is done.
Definition nc_trans.h:99
DNSClient::Status getDnsUpdateStatus() const
Fetches the most recent DNS update status.
Definition nc_trans.cc:549
void setDnsUpdateRequest(D2UpdateMessagePtr &request)
Sets the update request packet to the given packet.
Definition nc_trans.cc:299
static const int NO_MORE_SERVERS_EVT
Issued when there are no more servers from which to select.
Definition nc_trans.h:125
virtual void defineEvents()
Adds events defined by NameChangeTransaction to the event set.
Definition nc_trans.cc:228
void setReverseChangeCompleted(const bool value)
Sets the reverse change completion flag to the given value.
Definition nc_trans.cc:334
const DnsServerInfoPtr & getCurrentServer() const
Fetches the currently selected server.
Definition nc_trans.cc:534
static const int SERVER_SELECTED_EVT
Issued when a server has been selected.
Definition nc_trans.h:116
DdnsDomainPtr & getReverseDomain()
Fetches the reverse DdnsDomain.
Definition nc_trans.cc:451
std::string transactionOutcomeString() const
Returns a string version of transaction outcome.
Definition nc_trans.cc:171
The Name class encapsulates DNS names.
Definition name.h:219
static const RRClass & ANY()
Definition rrclass.h:298
static const RRClass & NONE()
Definition rrclass.h:316
static const RRClass & IN()
Definition rrclass.h:304
The RRTTL class encapsulates TTLs used in DNS resource records.
Definition rrttl.h:51
static const RRType & ANY()
Definition rrtype.h:345
static const RRType & AAAA()
Definition rrtype.h:315
static const RRType & PTR()
Definition rrtype.h:303
static const RRType & DHCID()
Definition rrtype.h:327
static const RRType & A()
Definition rrtype.h:279
The RRset class is a concrete derived class of BasicRRset which contains a pointer to an additional R...
Definition rrset.h:844
DNS Response Codes (RCODEs) class.
Definition rcode.h:40
static const Rcode & NOERROR()
A constant object for the NOERROR Rcode (see Rcode::NOERROR_CODE).
Definition rcode.h:228
static const Rcode & NXRRSET()
A constant object for the NXRRSET Rcode (see Rcode::NXRRSET_CODE).
Definition rcode.h:276
void endModel()
Conducts a normal transition to the end of the model.
void defineState(unsigned int value, const std::string &label, StateHandler handler, const StatePausing &state_pausing=STATE_PAUSE_NEVER)
Adds an state value and associated label to the set of states.
unsigned int getNextEvent() const
Fetches the model's next event.
void transition(unsigned int state, unsigned int event)
Sets up the model to transition into given state with a given event.
bool doOnEntry()
Checks if on entry flag is true.
static const int START_EVT
Event issued to start the model execution.
const StatePtr getStateInternal(unsigned int value)
Fetches the state referred to by value.
std::string getContextStr() const
Convenience method which returns a string rendition of the current state and next event.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
#define LOG_ERROR(LOGGER, MESSAGE)
Macro to conveniently test error output and log it.
Definition macros.h:32
#define LOG_INFO(LOGGER, MESSAGE)
Macro to conveniently test info output and log it.
Definition macros.h:20
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_IO_ERROR
Definition d2_messages.h:29
boost::shared_ptr< D2UpdateMessage > D2UpdateMessagePtr
Pointer to the DNS Update Message.
boost::shared_ptr< DdnsDomain > DdnsDomainPtr
Defines a pointer for DdnsDomain instances.
Definition d2_config.h:624
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_TIMEOUT
Definition d2_messages.h:38
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_RESP_CORRUPT
Definition d2_messages.h:74
boost::shared_ptr< D2CfgMgr > D2CfgMgrPtr
Defines a shared pointer to D2CfgMgr.
Definition d2_cfg_mgr.h:367
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_RESP_CORRUPT
Definition d2_messages.h:37
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_REJECTED
Definition d2_messages.h:30
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_RESP_CORRUPT
Definition d2_messages.h:31
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_REJECTED
Definition d2_messages.h:36
const isc::log::MessageID DHCP_DDNS_REMOVE_SUCCEEDED
Definition d2_messages.h:68
isc::log::Logger d2_to_dns_logger("d2-to-dns")
Definition d2_log.h:20
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_BUILD_FAILURE
Definition d2_messages.h:34
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BUILD_FAILURE
Definition d2_messages.h:28
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_TIMEOUT
Definition d2_messages.h:75
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:33
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_IO_ERROR
Definition d2_messages.h:72
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:70
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_BUILD_FAILURE
Definition d2_messages.h:71
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_TIMEOUT
Definition d2_messages.h:32
const isc::log::MessageID DHCP_DDNS_REMOVE_FAILED
Definition d2_messages.h:67
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS
Definition d2_messages.h:27
const isc::log::MessageID DHCP_DDNS_FORWARD_REMOVE_RRS_IO_ERROR
Definition d2_messages.h:35
const isc::log::MessageID DHCP_DDNS_REVERSE_REMOVE_REJECTED
Definition d2_messages.h:73
boost::shared_ptr< NameChangeRequest > NameChangeRequestPtr
Defines a pointer to a NameChangeRequest.
Definition ncr_msg.h:241
boost::shared_ptr< AbstractRRset > RRsetPtr
A pointer-like type pointing to an RRset object.
Definition rrset.h:50
Defines the logger used by the top-level component of kea-lfc.