virtual void ping(
const boost::asio::ip::address &ip,
const uint16_t destination_port,
- boost::function<void(PingStatus)> ping_done_callback
+ boost::function<void(PingStatus,long)> ping_done_callback
) = 0;
virtual void stop_pinging() = 0;
// skip the ping and directly call ping_done_handler
HostAnalyzer.set_resolved_ip_count(1); // must have been 0 --> failed
// ping would create failed assumption (nPings > nIPs)
- ping_done_handler(PingStatus_FailureNoIP);
+ ping_done_handler(PingStatus_FailureNoIP, 0);
HostAnalyzer.set_resolved_ip_count(0); // set back
}
else
* statistics, ping interval and elapsed time;
* schedules a call to ping, thereby closing the loop
*/
-void PingScheduler::ping_done_handler( const PingStatus &result )
+void PingScheduler::ping_done_handler( const PingStatus &result,
+ const long ping_duration_us )
{
PingStatus edited_result = result;
if (result == PingStatus_SuccessReply && ContinueOnOutdatedIps)
// post-processing
// can call update_ping_interval only after update_ping_statistics!
- ptime now = microsec_clock::universal_time();
- HostAnalyzer.update_ping_statistics( edited_result,
- (now - TimeSentLastPing).total_microseconds());
+ HostAnalyzer.update_ping_statistics( edited_result, ping_duration_us );
// prepare next ping only after all pingers are done
if (NPingersDone == NPingers)
//
void ping(const boost::system::error_code &error);
- void ping_done_handler(const PingStatus &result);
+ void ping_done_handler(const PingStatus &result,
+ const long ping_duration_us);
void update_ping_interval();
void init_ping_protocol();
void IcmpPinger::ping(
const address &destination_ip,
const uint16_t /*destination_port*/, // the ICMP protocol does not use ports
- function<void(PingStatus)> ping_done_callback
+ function<void(PingStatus,long)> ping_done_callback
)
{
PingDoneCallback = ping_done_callback;
}
// Call ping-done handler
- PingDoneCallback( PingerStatus );
+ PingDoneCallback( PingerStatus,
+ (microsec_clock::universal_time()
+ - TimeSent).total_microseconds() );
}
virtual void ping(
const boost::asio::ip::address &destination_ip,
const uint16_t destination_port,
- boost::function<void(PingStatus)> ping_done_callback
+ boost::function<void(PingStatus,long)> ping_done_callback
);
virtual void stop_pinging();
/// The status of the pinger
PingStatus PingerStatus;
/// Callback to notify when the ping is done (got reply/timeout)
- boost::function< void(PingStatus) > PingDoneCallback;
+ boost::function< void(PingStatus,long) > PingDoneCallback;
/// prefix to logging output lines
std::string LogPrefix;
};
void TcpPinger::ping(
const address &destination_ip,
const uint16_t destination_port,
- function<void(PingStatus)> ping_done_callback
+ function<void(PingStatus,long)> ping_done_callback
)
{
BOOST_ASSERT( ( 0 < destination_port ) && ( destination_port < numeric_limits<uint16_t>::max() ) );
}
// Call ping-done handler
- PingDoneCallback( PingerStatus );
+ PingDoneCallback( PingerStatus,
+ (microsec_clock::universal_time() - TimeSent).total_microseconds() );
}
void TcpPinger::start_receive()
virtual void ping(
const boost::asio::ip::address &destination_ip,
const uint16_t destination_port,
- boost::function<void(PingStatus)> ping_done_callback
+ boost::function<void(PingStatus,long)> ping_done_callback
);
virtual void stop_pinging();
/// The status of the pinger
PingStatus PingerStatus;
/// Callback to notify when the ping is done (got reply/timeout)
- boost::function< void(PingStatus) > PingDoneCallback;
+ boost::function< void(PingStatus,long) > PingDoneCallback;
};
#endif // TCP_PINGER_H