pub const QGC_REVISION: &str = "QGroundControl v5.0.3-1265-gf1883f93a \
(f1883f93a5ba0b5e9c1ec88b3815b290e2608697, 2026-08-12)";Expand description
The QGroundControl revision whose reconnection policy this crate mirrors.
QGC is the closest analogue to how this crate is used – streaming RTCM corrections to a drone autopilot – and RTCM 10410.1, which would say what the protocol actually requires, is paywalled and unavailable to us. Matching one real implementation exactly is easier to defend, and to re-check, than inventing a policy of our own. Every citation below is against this revision:
src/GPS/NTRIP/NTRIPManager.h:159-161– the three constants mirrored here.src/GPS/NTRIP/NTRIPManager.cc:367-370–_reconnectBackoffMs(), the shift.src/GPS/NTRIP/NTRIPManager.cc:372-384–_scheduleReconnect(), which waits on the pre-increment attempt count, then increments and checks the ceiling.src/GPS/NTRIP/NTRIPManager.cc:82-91–isRetryable().src/GPS/NTRIP/NTRIPManager.cc:326– the one place we deliberately differ. QGC resets its attempt counter once the transport reportsConnected, which is the HTTP handshake completing rather than data arriving (NTRIPHttpTransport.cc:371). A caster that accepts the connection and then stays silent therefore puts QGC back atkMinReconnectMson every cycle, forever, which is the hammering RTCM’s guidance warns leads to a ban. We reset on data instead, so a silent caster climbs the same ladder as a refused one and eventually exhaustsMAX_CONNECT_ATTEMPTS. This looks like an artefact of where the reset sits in QGC’s state machine rather than a considered choice, so it is the one point where copying seemed worse than not.src/GPS/NTRIP/NTRIPHttpTransport.cc:388-392– 401 becomesAuthFailed.src/GPS/NTRIP/NTRIPHttpTransport.cc:406– every other status becomesHttpError, whichisRetryable()accepts.