From: Christian Herdtweck Date: Wed, 25 Mar 2015 13:09:24 +0000 (+0100) Subject: made PingRotate actually rotate through protocols, and not just stick with last protocol X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=a435b71b1fb6583cd518378538f2e480119d9325;p=pingcheck made PingRotate actually rotate through protocols, and not just stick with last protocol --- diff --git a/src/host/pingrotate.cpp b/src/host/pingrotate.cpp index 20dd11e..64b0587 100644 --- a/src/host/pingrotate.cpp +++ b/src/host/pingrotate.cpp @@ -21,6 +21,7 @@ #include "host/pingrotate.h" #include +#include #include "boost_assert_handler.h" #include "dns/dnsresolverfactory.h" @@ -64,7 +65,7 @@ PingRotate::PingRotate( Nameserver( nameserver ), ResolvedIpTtlThreshold( resolved_ip_ttl_threshold ), PingReplyTimeout( ping_reply_timeout ), - ProtocolList( protocol_list ), + ProtocolRotate( protocol_list.size() ), Ping(), PingDoneCallback() { @@ -74,6 +75,10 @@ PingRotate::PingRotate( BOOST_ASSERT( !nameserver.empty() ); BOOST_ASSERT( 0 < protocol_list.size() ); + // fill circular buffer with protocols + BOOST_FOREACH( const PingProtocol &prot, protocol_list ) + ProtocolRotate.push_back(prot); + init_ping_protocol(); } @@ -153,16 +158,13 @@ void PingRotate::update_ping_protocol() void PingRotate::get_next_ping_protocol() { - if ( 1 <= ProtocolList.size() ) - { - PingProtocol ping_protocol = ProtocolList.front(); + PingProtocol ping_protocol = ProtocolRotate.front(); + ProtocolRotate.pop_front(); + ProtocolRotate.push_back(ping_protocol); - ProtocolList.pop_front(); + Ping = PingerFactory::createPinger( ping_protocol, IoService, NetworkInterfaceName, PingReplyTimeout ); - Ping = PingerFactory::createPinger( ping_protocol, IoService, NetworkInterfaceName, PingReplyTimeout ); - - update_dns_resolver( ping_protocol ); - } + update_dns_resolver( ping_protocol ); } bool PingRotate::can_change_ping_protocol() const diff --git a/src/host/pingrotate.h b/src/host/pingrotate.h index e6e5367..f755f94 100644 --- a/src/host/pingrotate.h +++ b/src/host/pingrotate.h @@ -28,6 +28,7 @@ #include #include #include +#include #include "dns/dnsresolver.h" #include "host/pinger.h" @@ -37,6 +38,8 @@ // PingRotate //----------------------------------------------------------------------------- +typedef boost::circular_buffer CircularProtocolList; + /** * @brief This class is a wrapper to the Pingers, and serves to alternate * between protocols. @@ -101,7 +104,7 @@ private: /// timeout for ping reply const int PingReplyTimeout; /// The list of protocols to ping - PingProtocolList ProtocolList; + CircularProtocolList ProtocolRotate; /// Internal boost pinger object PingerItem Ping; /// The callback function