2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 22:15:23 +00:00

[3221] Added use of dhcp_ddns::WatchSocket and additonal queue methods

Integrated use of WatchSocket to NameChangeSender and NameChangeUDPSender.
Added addtional methods for accessing sender's send queue.
Created include and source for common dhcp_ddns lib test components.
This commit is contained in:
Thomas Markwalder
2014-02-03 14:10:38 -05:00
parent 1ebd0b7870
commit 4b87d90465
9 changed files with 338 additions and 36 deletions

View File

@@ -23,7 +23,7 @@ namespace dhcp_ddns {
NameChangeProtocol stringToNcrProtocol(const std::string& protocol_str) {
if (boost::iequals(protocol_str, "UDP")) {
return (NCR_UDP);
}
}
if (boost::iequals(protocol_str, "TCP")) {
return (NCR_TCP);
@@ -162,10 +162,7 @@ NameChangeSender::NameChangeSender(RequestSendHandler& send_handler,
send_queue_max_(send_queue_max) {
// Queue size must be big enough to hold at least 1 entry.
if (send_queue_max == 0) {
isc_throw(NcrSenderError, "NameChangeSender constructor"
" queue size must be greater than zero");
}
setQueueMaxSize(send_queue_max);
}
void
@@ -318,5 +315,57 @@ NameChangeSender::clearSendQueue() {
send_queue_.clear();
}
void
NameChangeSender::setQueueMaxSize(const size_t new_max) {
if (new_max == 0) {
isc_throw(NcrSenderError, "NameChangeSender:"
" queue size must be greater than zero");
}
send_queue_max_ = new_max;
}
const NameChangeRequestPtr&
NameChangeSender::peekAt(const size_t index) const {
if (index >= getQueueSize()) {
isc_throw(NcrSenderError,
"NameChangeSender::peekAt peek beyond end of queue attempted"
<< " index: " << index << " queue size: " << getQueueSize());
}
return (send_queue_.at(index));
}
void
NameChangeSender::assumeQueue(NameChangeSender& sourceSender) {
if (sourceSender.amSending()) {
isc_throw(NcrSenderError, "Cannot assume queue:"
" source sender is actively sending");
}
if (amSending()) {
isc_throw(NcrSenderError, "Cannot assume queue:"
" target sender is actively sending");
}
if (getQueueMaxSize() < sourceSender.getQueueSize()) {
isc_throw(NcrSenderError, "Cannot assume queue:"
" source queue count exceeds target queue max");
}
if (send_queue_.size() != 0) {
isc_throw(NcrSenderError, "Cannot assume queue:"
" target queue is not empty");
}
send_queue_.swap(sourceSender.getSendQueue());
}
int
NameChangeSender::getSelectFd() {
isc_throw(NotImplemented, "NameChangeSender::getSelectFd is not supported");
}
} // namespace isc::dhcp_ddns
} // namespace isc