From 074f99b291c37402e8d66218d6e3ee2e79ff5bcd Mon Sep 17 00:00:00 2001 From: tudor Date: Wed, 10 Aug 2016 15:39:19 +0000 Subject: [PATCH] UltraScanInfo::findHost is now faster --- scan_engine.cc | 11 ++++------- scan_engine.h | 10 +--------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/scan_engine.cc b/scan_engine.cc index fcf4774da..638da1c5f 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -154,15 +154,12 @@ extern "C" int g_has_npcap_loopback; int HssPredicate::operator() (HostScanStats *lhs, HostScanStats *rhs) { - return 0 > sockaddr_storage_cmp(lhs->target->TargetSockAddr(), rhs->target->TargetSockAddr()); -} - -int SockAddrPredicate::operator() (HostScanStats *lhs, HostScanStats *rhs) { const struct sockaddr_storage *lss, *rss; lss = (lhs) ? lhs->target->TargetSockAddr() : ss; rss = (rhs) ? rhs->target->TargetSockAddr() : ss; return 0 > sockaddr_storage_cmp(lss, rss); } +struct sockaddr_storage *HssPredicate::ss = NULL; void UltraScanInfo::log_overall_rates(int logt) { log_write(logt, "Overall sending rates: %.2f packets / s", send_rate_meter.getOverallPacketRate(&now)); @@ -1139,17 +1136,17 @@ bool UltraScanInfo::sendOK(struct timeval *when) { HostScanStats *UltraScanInfo::findHost(struct sockaddr_storage *ss) { std::set::iterator hss; - SockAddrPredicate p(ss); + HssPredicate::ss = ss; HostScanStats *fakeHss = NULL; - hss = std::lower_bound(incompleteHosts.begin(), incompleteHosts.end(), fakeHss, p); + hss = incompleteHosts.find(fakeHss); if (hss != incompleteHosts.end()) { if (o.debugging > 2) log_write(LOG_STDOUT, "Found %s in incomplete hosts list.\n", (*hss)->target->targetipstr()); return *hss; } - hss = std::lower_bound(completedHosts.begin(), completedHosts.end(), fakeHss, p); + hss = completedHosts.find(fakeHss); if (hss != completedHosts.end()) { if (o.debugging > 2) log_write(LOG_STDOUT, "Found %s in completed hosts list.\n", (*hss)->target->targetipstr()); diff --git a/scan_engine.h b/scan_engine.h index a4da9d9e9..a7fbd91a3 100644 --- a/scan_engine.h +++ b/scan_engine.h @@ -654,15 +654,7 @@ struct ultra_scan_performance_vars : public scan_performance_vars { struct HssPredicate { public: int operator() (HostScanStats *lhs, HostScanStats *rhs); -}; - -struct SockAddrPredicate { -public: - SockAddrPredicate(struct sockaddr_storage *ss) { - this->ss = ss; - } - int operator() (HostScanStats *lhs, HostScanStats *rhs); - struct sockaddr_storage *ss; + static struct sockaddr_storage *ss; }; class UltraScanInfo {