@@ -39,7 +39,7 @@ using namespace sttp::filterexpressions;
3939using namespace sttp ::transport;
4040
4141static constexpr uint32_t MaxPacketSize = 32768U ;
42- static constexpr float64_t DefaultLagTime = 5 .0 ;
42+ static constexpr float64_t DefaultLagTime = 10 .0 ;
4343static constexpr float64_t DefaultLeadTime = 5.0 ;
4444static constexpr float64_t DefaultPublishInterval = 1.0 ;
4545
@@ -59,6 +59,7 @@ SubscriberConnection::SubscriberConnection(DataPublisherPtr parent, IOContext& c
5959 m_usingPayloadCompression(false ),
6060 m_includeTime(true ),
6161 m_useLocalClockAsRealTime(false ),
62+ m_enableTimeReasonabilityCheck(false ),
6263 m_lagTime(DefaultLagTime),
6364 m_leadTime(DefaultLeadTime),
6465 m_publishInterval(DefaultPublishInterval),
@@ -677,7 +678,7 @@ void SubscriberConnection::PublishMeasurements(const vector<MeasurementPtr>& mea
677678 {
678679 const Guid signalID = measurement->SignalID ;
679680
680- if (TimestampIsReasonable (measurement->Timestamp , m_lagTime, m_leadTime) || GetIsTemporalSubscription ())
681+ if (!m_enableTimeReasonabilityCheck || TimestampIsReasonable (measurement->Timestamp , m_lagTime, m_leadTime) || GetIsTemporalSubscription ())
681682 {
682683 m_latestMeasurements.insert_or_assign (signalID, measurement);
683684 }
@@ -782,6 +783,11 @@ void SubscriberConnection::HandleSubscribe(uint8_t* data, uint32_t length)
782783 else
783784 m_useLocalClockAsRealTime = false ;
784785
786+ if (TryGetValue (settings, " enableTimeReasonabilityCheck" , setting))
787+ TryParseBoolean (setting, m_enableTimeReasonabilityCheck);
788+ else
789+ m_enableTimeReasonabilityCheck = true ;
790+
785791 if (TryGetValue (settings, " lagTime" , setting) && !setting.empty ())
786792 TryParseDouble (setting, m_lagTime, DefaultLagTime);
787793 else
@@ -1018,7 +1024,7 @@ void SubscriberConnection::HandleSubscribe(uint8_t* data, uint32_t length)
10181024 {
10191025 MeasurementPtr measurement = element.second ;
10201026
1021- if (!TimestampIsReasonable (measurement->Timestamp , m_lagTime, m_leadTime) && !GetIsTemporalSubscription ())
1027+ if (m_enableTimeReasonabilityCheck && !TimestampIsReasonable (measurement->Timestamp , m_lagTime, m_leadTime) && !GetIsTemporalSubscription ())
10221028 {
10231029 measurement->Value = NaN;
10241030 measurement->Flags |= MeasurementStateFlags::BadTime;
@@ -1489,7 +1495,7 @@ void SubscriberConnection::PublishCompactMeasurements(const std::vector<Measurem
14891495 count++; // -V127
14901496
14911497 // Track latest timestamp
1492- if (!m_useLocalClockAsRealTime && timestamp > m_latestTimestamp && (TimestampIsReasonable (timestamp, m_lagTime, m_leadTime) || GetIsTemporalSubscription ()))
1498+ if (!m_useLocalClockAsRealTime && timestamp > m_latestTimestamp && (!m_enableTimeReasonabilityCheck || TimestampIsReasonable (timestamp, m_lagTime, m_leadTime) || GetIsTemporalSubscription ()))
14931499 m_latestTimestamp = timestamp;
14941500 }
14951501
0 commit comments