@@ -43,6 +43,7 @@ const ParseXmlWrap::ParseNamesList& ParseSyncLayerImpl::parseExtraPropsNamesImpl
4343 static const ParseXmlWrap::ParseNamesList Names = {
4444 common::parseSeekFieldStr (),
4545 common::parseFromStr (),
46+ common::parseVerifyBeforeReadStr (),
4647 };
4748
4849 return Names;
@@ -62,6 +63,7 @@ bool ParseSyncLayerImpl::parseImpl()
6263 return
6364 parseUpdateSeekFieldInternal () &&
6465 parseUpdateEscFieldInternal () &&
66+ parseUpdateVerifyBeforeReadInternal () &&
6567 parseUpdateFromInternal ();
6668}
6769
@@ -89,17 +91,17 @@ bool ParseSyncLayerImpl::parseVerifyImpl(const ParseLayersList& layers)
8991 }
9092
9193 // After payload
92- if ((!m_seekField) && (parseFrom ().empty ())) {
93- return true ;
94- }
95-
9694 if (m_seekField && parseFrom ().empty ()) {
9795 parseLogError () << ParseXmlWrap::parseLogPrefix (parseGetNode ()) <<
9896 " The usage of \" " << common::parseFromStr () << " \" property is required when \" "
9997 << common::parseSeekFieldStr () << " \" property is set to true for <sync> after <payload>." ;
10098 return false ;
10199 }
102100
101+ if (parseFrom ().empty ()) {
102+ return true ;
103+ }
104+
103105 auto fromIdx = parseFindLayerIndex (layers, parseFrom ());
104106 if (layers.size () <= fromIdx) {
105107 parseReportUnexpectedPropertyValue (common::parseFromStr (), parseFrom ());
@@ -172,6 +174,41 @@ bool ParseSyncLayerImpl::parseUpdateEscFieldInternal()
172174 return true ;
173175}
174176
177+ bool ParseSyncLayerImpl::parseUpdateVerifyBeforeReadInternal ()
178+ {
179+ auto & prop = common::parseVerifyBeforeReadStr ();
180+ if (!parseValidateSinglePropInstance (prop)) {
181+ return false ;
182+ }
183+
184+ auto iter = parseProps ().find (prop);
185+ if (iter == parseProps ().end ()) {
186+ return true ;
187+ }
188+
189+ if (m_seekField) {
190+ parseLogError () << ParseXmlWrap::parseLogPrefix (parseGetNode ()) <<
191+ " The properties \" " << prop << " \" and \" " << common::parseSeekFieldStr () << " \" are mutually exclusive." ;
192+ return false ;
193+ }
194+
195+ if (!parseProtocol ().parseIsSyncSuffixLayerSupported ()) {
196+ parseLogWarning () << ParseXmlWrap::parseLogPrefix (parseGetNode ()) <<
197+ " Property \" " << prop << " \" of <sync> layer is not supported for selected dslVersion, ignoring..." ;
198+ m_from = nullptr ;
199+ return true ;
200+ }
201+
202+ bool ok = false ;
203+ m_verifyBeforeRead = common::parseStrToBool (iter->second , &ok);
204+ if (!ok) {
205+ parseReportUnexpectedPropertyValue (prop, iter->second );
206+ return false ;
207+ }
208+
209+ return true ;
210+ }
211+
175212bool ParseSyncLayerImpl::parseUpdateFromInternal ()
176213{
177214 auto & prop = common::parseFromStr ();
@@ -183,9 +220,10 @@ bool ParseSyncLayerImpl::parseUpdateFromInternal()
183220 return true ;
184221 }
185222
186- if (!m_seekField) {
223+ if (( !m_seekField) && (!m_verifyBeforeRead) ) {
187224 parseLogError () << ParseXmlWrap::parseLogPrefix (parseGetNode ()) <<
188- " The usage of \" " << prop << " \" is allowed only in conjunction with setting \" " << common::parseSeekFieldStr () << " \" to true." ;
225+ " The usage of \" " << prop << " \" is allowed only in conjunction with setting \" " <<
226+ common::parseSeekFieldStr () << " \" or \" " << common::parseVerifyBeforeReadStr () << " \" to true." ;
189227 return false ;
190228 }
191229
0 commit comments