From f180d751f6cd5205131a0d95a1724e31fb77124e Mon Sep 17 00:00:00 2001 From: MrAlaskan <1922345259@qq.com> Date: Tue, 21 Jul 2026 15:12:28 +0800 Subject: [PATCH 1/2] fix: ignore server-side production trigger bits in transport class trigger parsing --- source/src/cip/cipconnectionobject.c | 5 +++++ source/tests/cip/cipconnectionobjecttest.cpp | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/source/src/cip/cipconnectionobject.c b/source/src/cip/cipconnectionobject.c index a970d7a47..b0c8ebdd8 100644 --- a/source/src/cip/cipconnectionobject.c +++ b/source/src/cip/cipconnectionobject.c @@ -354,6 +354,11 @@ ConnectionObjectGetTransportClassTriggerProductionTrigger( const CipConnectionObject *const connection_object) { const CipByte kTransportClassTriggerProductionTriggerMask = 0x70; + if(kConnectionObjectTransportClassTriggerDirectionServer == + ConnectionObjectGetTransportClassTriggerDirection(connection_object) ) { + return kConnectionObjectTransportClassTriggerProductionTriggerCyclic; + } + ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = kConnectionObjectTransportClassTriggerProductionTriggerInvalid; switch( (connection_object->transport_class_trigger) & diff --git a/source/tests/cip/cipconnectionobjecttest.cpp b/source/tests/cip/cipconnectionobjecttest.cpp index 340ba9100..251c3f44b 100644 --- a/source/tests/cip/cipconnectionobjecttest.cpp +++ b/source/tests/cip/cipconnectionobjecttest.cpp @@ -282,12 +282,21 @@ TEST(CipConnectionObject, CHECK_EQUAL( kConnectionObjectTransportClassTriggerProductionTriggerChangeOfState, production_trigger); + +TEST(CipConnectionObject, + TransportClassTriggerProductionTriggerIgnoredForServerDirection) { + CipConnectionObject connection_object = {0}; + connection_object.transport_class_trigger = 0x80 | (3 << 4); + ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = + ConnectionObjectGetTransportClassTriggerProductionTrigger( + &connection_object); + CHECK_EQUAL(kConnectionObjectTransportClassTriggerProductionTriggerCyclic, + production_trigger); +} } TEST(CipConnectionObject, TransportClassTriggerProductionTriggerApplicationObject) { - CipConnectionObject connection_object = {0}; - connection_object.transport_class_trigger = 2 << 4; ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = ConnectionObjectGetTransportClassTriggerProductionTrigger( &connection_object); From 29a9a7dec7329024ecfbd1b341c29f9ef42a4e14 Mon Sep 17 00:00:00 2001 From: MrAlaskan <1922345259@qq.com> Date: Tue, 21 Jul 2026 15:55:03 +0800 Subject: [PATCH 2/2] test: fix malformed CipConnectionObject transport trigger tests --- source/tests/cip/cipconnectionobjecttest.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/tests/cip/cipconnectionobjecttest.cpp b/source/tests/cip/cipconnectionobjecttest.cpp index 251c3f44b..d85626cef 100644 --- a/source/tests/cip/cipconnectionobjecttest.cpp +++ b/source/tests/cip/cipconnectionobjecttest.cpp @@ -282,6 +282,7 @@ TEST(CipConnectionObject, CHECK_EQUAL( kConnectionObjectTransportClassTriggerProductionTriggerChangeOfState, production_trigger); +} TEST(CipConnectionObject, TransportClassTriggerProductionTriggerIgnoredForServerDirection) { @@ -293,10 +294,11 @@ TEST(CipConnectionObject, CHECK_EQUAL(kConnectionObjectTransportClassTriggerProductionTriggerCyclic, production_trigger); } -} TEST(CipConnectionObject, TransportClassTriggerProductionTriggerApplicationObject) { + CipConnectionObject connection_object = {0}; + connection_object.transport_class_trigger = 2 << 4; ConnectionObjectTransportClassTriggerProductionTrigger production_trigger = ConnectionObjectGetTransportClassTriggerProductionTrigger( &connection_object);