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:
@@ -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
|
||||
|
Reference in New Issue
Block a user