@@ -190,7 +190,9 @@ func ParseMessageWithDataDictionary(
190190 return
191191 }
192192
193- prevTag := tagMsgType
193+ //prevTag := tagMsgType
194+ xmlDataLen := 0
195+ xmlDataMsg := false
194196
195197 msg .Header .add (msg .fields [fieldIndex : fieldIndex + 1 ])
196198 fieldIndex ++
@@ -199,8 +201,10 @@ func ParseMessageWithDataDictionary(
199201 foundBody := false
200202 for {
201203 parsedFieldBytes = & msg .fields [fieldIndex ]
202- if prevTag == tagXMLDataLen {
203- rawBytes , err = extractXMLDataField (parsedFieldBytes , rawBytes )
204+ if xmlDataLen > 0 {
205+ rawBytes , err = extractXMLDataField (parsedFieldBytes , rawBytes , xmlDataLen )
206+ xmlDataLen = 0
207+ xmlDataMsg = true
204208 } else {
205209 rawBytes , err = extractField (parsedFieldBytes , rawBytes )
206210 }
@@ -226,7 +230,10 @@ func ParseMessageWithDataDictionary(
226230 msg .bodyBytes = rawBytes
227231 }
228232
229- prevTag = parsedFieldBytes .tag
233+ //prevTag = parsedFieldBytes.tag
234+ if parsedFieldBytes .tag == tagXMLDataLen {
235+ xmlDataLen , _ = msg .Header .GetInt (tagXMLDataLen )
236+ }
230237 fieldIndex ++
231238 }
232239
@@ -247,7 +254,7 @@ func ParseMessageWithDataDictionary(
247254 bodyLength , err := msg .Header .GetInt (tagBodyLength )
248255 if err != nil {
249256 err = parseError {OrigError : err .Error ()}
250- } else if length != bodyLength {
257+ } else if length != bodyLength && ! xmlDataMsg {
251258 err = parseError {OrigError : fmt .Sprintf ("Incorrect Message Length, expected %d, got %d" , bodyLength , length )}
252259 }
253260
@@ -345,25 +352,14 @@ func extractSpecificField(field *TagValue, expectedTag Tag, buffer []byte) (remB
345352 return
346353}
347354
348- func extractXMLDataField (parsedFieldBytes * TagValue , buffer []byte ) (remBytes []byte , err error ) {
349- endIndex := bytes .IndexByte (buffer , '>' )
350- if endIndex == - 1 {
351- err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
352- remBytes = buffer
353- return
354- }
355-
356- endIndex = bytes .IndexByte (buffer [endIndex + 1 :], '>' )
355+ func extractXMLDataField (parsedFieldBytes * TagValue , buffer []byte , dataLen int ) (remBytes []byte , err error ) {
356+ endIndex := bytes .IndexByte (buffer , '=' )
357357 if endIndex == - 1 {
358358 err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
359359 remBytes = buffer
360360 return
361361 }
362-
363- tempEndIndex := bytes .IndexByte (buffer [endIndex :], '\001' )
364- endIndex += tempEndIndex
365- tempEndIndex = bytes .IndexByte (buffer [endIndex + 1 :], '\001' )
366- endIndex += tempEndIndex + 1
362+ endIndex += dataLen + 1
367363
368364 err = parsedFieldBytes .parse (buffer [:endIndex + 1 ])
369365 return buffer [(endIndex + 1 ):], err
0 commit comments