From e6d4512f4d4777e5023302b14dd130b3bccc917b Mon Sep 17 00:00:00 2001 From: david Date: Thu, 14 Aug 2008 15:35:29 +0000 Subject: [PATCH] Revert to the previous method of calculating completion percentage. Just counting the ratio of finished to total ports fails against filtered ports, which are not marked completed until the very end. --- scan_engine.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/scan_engine.cc b/scan_engine.cc index 2315c5fda..16c24ebd4 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -1359,13 +1359,25 @@ HostScanStats *UltraScanInfo::nextIncompleteHost() { is done. */ double UltraScanInfo::getCompletionFraction() { list::iterator hostI; + HostScanStats *host; + int maxtries; + double thishostpercdone; double total; /* Add 1 for each completed host. */ total= gstats->numtargets - numIncompleteHosts(); /* For incomplete hosts add the fraction of finished to total ports. */ - for(hostI = incompleteHosts.begin(); hostI != incompleteHosts.end(); hostI++) - total += (double) (*hostI)->ports_finished / gstats->numprobes; + for(hostI = incompleteHosts.begin(); hostI != incompleteHosts.end(); hostI++) { + host = *hostI; + maxtries = host->allowedTryno(NULL, NULL) + 1; + // This is inexact (maxtries - 1) because numprobes_sent includes + // at least one try of ports_finished. + thishostpercdone = host->ports_finished * (maxtries - 1) + host->numprobes_sent; + thishostpercdone /= maxtries * gstats->numprobes; + if (thishostpercdone >= 0.9999) + thishostpercdone = 0.9999; + total += thishostpercdone; + } return total / gstats->numtargets; }