Skip to content

Commit 64e6049

Browse files
Added time reasonability subscription settings
Fixes #1
1 parent be1fee0 commit 64e6049

File tree

7 files changed

+22
-11
lines changed

7 files changed

+22
-11
lines changed

src/lib/transport/DataSubscriber.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,6 +1255,7 @@ void DataSubscriber::Subscribe()
12551255
connectionStream << "throttled=" << m_subscriptionInfo.Throttled << ";";
12561256
connectionStream << "publishInterval=" << m_subscriptionInfo.PublishInterval << ";";
12571257
connectionStream << "includeTime=" << m_subscriptionInfo.IncludeTime << ";";
1258+
connectionStream << "enableTimeReasonabilityCheck=" << m_subscriptionInfo.EnableTimeReasonabilityCheck << ";";
12581259
connectionStream << "lagTime=" << m_subscriptionInfo.LagTime << ";";
12591260
connectionStream << "leadTime=" << m_subscriptionInfo.LeadTime << ";";
12601261
connectionStream << "useLocalClockAsRealTime=" << m_subscriptionInfo.UseLocalClockAsRealTime << ";";

src/lib/transport/PublisherInstance.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -492,7 +492,7 @@ SecurityMode PublisherInstance::GetSecurityMode() const
492492
return m_publisher->GetSecurityMode();
493493
}
494494

495-
void PublisherInstance::SetSecurityMode(SecurityMode securityMode) const
495+
void PublisherInstance::SetSecurityMode(const SecurityMode securityMode) const
496496
{
497497
m_publisher->SetSecurityMode(securityMode);
498498
}
@@ -502,7 +502,7 @@ int32_t PublisherInstance::GetMaximumAllowedConnections() const
502502
return m_publisher->GetMaximumAllowedConnections();
503503
}
504504

505-
void PublisherInstance::SetMaximumAllowedConnections(int32_t value) const
505+
void PublisherInstance::SetMaximumAllowedConnections(const int32_t value) const
506506
{
507507
m_publisher->SetMaximumAllowedConnections(value);
508508
}
@@ -512,7 +512,7 @@ bool PublisherInstance::IsMetadataRefreshAllowed() const
512512
return m_publisher->GetIsMetadataRefreshAllowed();
513513
}
514514

515-
void PublisherInstance::SetMetadataRefreshAllowed(bool allowed) const
515+
void PublisherInstance::SetMetadataRefreshAllowed(const bool allowed) const
516516
{
517517
m_publisher->SetIsMetadataRefreshAllowed(allowed);
518518
}
@@ -522,7 +522,7 @@ bool PublisherInstance::IsNaNValueFilterAllowed() const
522522
return m_publisher->GetIsNaNValueFilterAllowed();
523523
}
524524

525-
void PublisherInstance::SetNaNValueFilterAllowed(bool allowed) const
525+
void PublisherInstance::SetNaNValueFilterAllowed(const bool allowed) const
526526
{
527527
m_publisher->SetNaNValueFilterAllowed(allowed);
528528
}
@@ -532,7 +532,7 @@ bool PublisherInstance::IsNaNValueFilterForced() const
532532
return m_publisher->GetIsNaNValueFilterForced();
533533
}
534534

535-
void PublisherInstance::SetNaNValueFilterForced(bool forced) const
535+
void PublisherInstance::SetNaNValueFilterForced(const bool forced) const
536536
{
537537
m_publisher->SetIsNaNValueFilterForced(forced);
538538
}
@@ -542,7 +542,7 @@ bool PublisherInstance::GetSupportsTemporalSubscriptions() const
542542
return m_publisher->GetSupportsTemporalSubscriptions();
543543
}
544544

545-
void PublisherInstance::SetSupportsTemporalSubscriptions(bool value) const
545+
void PublisherInstance::SetSupportsTemporalSubscriptions(const bool value) const
546546
{
547547
m_publisher->SetSupportsTemporalSubscriptions(value);
548548
}
@@ -552,7 +552,7 @@ uint32_t PublisherInstance::GetCipherKeyRotationPeriod() const
552552
return m_publisher->GetCipherKeyRotationPeriod();
553553
}
554554

555-
void PublisherInstance::SetCipherKeyRotationPeriod(uint32_t period) const
555+
void PublisherInstance::SetCipherKeyRotationPeriod(const uint32_t period) const
556556
{
557557
m_publisher->SetCipherKeyRotationPeriod(period);
558558
}

src/lib/transport/SubscriberConnection.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ using namespace sttp::filterexpressions;
3939
using namespace sttp::transport;
4040

4141
static constexpr uint32_t MaxPacketSize = 32768U;
42-
static constexpr float64_t DefaultLagTime = 5.0;
42+
static constexpr float64_t DefaultLagTime = 10.0;
4343
static constexpr float64_t DefaultLeadTime = 5.0;
4444
static 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

src/lib/transport/SubscriberConnection.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ namespace sttp::transport
6464
bool m_usingPayloadCompression;
6565
bool m_includeTime;
6666
bool m_useLocalClockAsRealTime;
67+
bool m_enableTimeReasonabilityCheck;
6768
float64_t m_lagTime;
6869
float64_t m_leadTime;
6970
float64_t m_publishInterval;

src/lib/transport/SubscriptionInfo.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ SubscriptionInfo::SubscriptionInfo() :
3131
UdpDataChannel(false),
3232
DataChannelLocalPort(9500),
3333
IncludeTime(true),
34+
EnableTimeReasonabilityCheck(false),
3435
LagTime(10.0),
3536
LeadTime(5.0),
3637
UseLocalClockAsRealTime(false),

src/lib/transport/SubscriptionInfo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ namespace sttp::transport
4242

4343
// Compact measurement properties
4444
bool IncludeTime;
45+
bool EnableTimeReasonabilityCheck;
4546
float64_t LagTime;
4647
float64_t LeadTime;
4748
bool UseLocalClockAsRealTime;

src/sttp.cpp.sln.DotSettings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
<s:Boolean x:Key="/Default/UserDictionary/Words/=Iter/@EntryIndexedValue">True</s:Boolean>
88
<s:Boolean x:Key="/Default/UserDictionary/Words/=localport/@EntryIndexedValue">True</s:Boolean>
99
<s:Boolean x:Key="/Default/UserDictionary/Words/=phasors/@EntryIndexedValue">True</s:Boolean>
10+
<s:Boolean x:Key="/Default/UserDictionary/Words/=Reasonability/@EntryIndexedValue">True</s:Boolean>
1011
<s:Boolean x:Key="/Default/UserDictionary/Words/=sttp/@EntryIndexedValue">True</s:Boolean>
1112
<s:Boolean x:Key="/Default/UserDictionary/Words/=TSSC/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

0 commit comments

Comments
 (0)