@@ -205,14 +205,24 @@ func ParseMessageWithDataDictionary(
205205 return
206206 }
207207
208+ //prevTag := tagMsgType
209+ xmlDataLen := 0
210+ xmlDataMsg := false
211+
208212 msg .Header .add (msg .fields [fieldIndex : fieldIndex + 1 ])
209213 fieldIndex ++
210214
211215 trailerBytes := []byte {}
212216 foundBody := false
213217 for {
214218 parsedFieldBytes = & msg .fields [fieldIndex ]
215- rawBytes , err = extractField (parsedFieldBytes , rawBytes )
219+ if xmlDataLen > 0 {
220+ rawBytes , err = extractXMLDataField (parsedFieldBytes , rawBytes , xmlDataLen )
221+ xmlDataLen = 0
222+ xmlDataMsg = true
223+ } else {
224+ rawBytes , err = extractField (parsedFieldBytes , rawBytes )
225+ }
216226 if err != nil {
217227 return
218228 }
@@ -235,6 +245,10 @@ func ParseMessageWithDataDictionary(
235245 msg .bodyBytes = rawBytes
236246 }
237247
248+ //prevTag = parsedFieldBytes.tag
249+ if parsedFieldBytes .tag == tagXMLDataLen {
250+ xmlDataLen , _ = msg .Header .GetInt (tagXMLDataLen )
251+ }
238252 fieldIndex ++
239253 }
240254
@@ -255,7 +269,7 @@ func ParseMessageWithDataDictionary(
255269 bodyLength , err := msg .Header .GetInt (tagBodyLength )
256270 if err != nil {
257271 err = parseError {OrigError : err .Error ()}
258- } else if length != bodyLength {
272+ } else if length != bodyLength && ! xmlDataMsg {
259273 err = parseError {OrigError : fmt .Sprintf ("Incorrect Message Length, expected %d, got %d" , bodyLength , length )}
260274 }
261275
@@ -353,6 +367,19 @@ func extractSpecificField(field *TagValue, expectedTag Tag, buffer []byte) (remB
353367 return
354368}
355369
370+ func extractXMLDataField (parsedFieldBytes * TagValue , buffer []byte , dataLen int ) (remBytes []byte , err error ) {
371+ endIndex := bytes .IndexByte (buffer , '=' )
372+ if endIndex == - 1 {
373+ err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
374+ remBytes = buffer
375+ return
376+ }
377+ endIndex += dataLen + 1
378+
379+ err = parsedFieldBytes .parse (buffer [:endIndex + 1 ])
380+ return buffer [(endIndex + 1 ):], err
381+ }
382+
356383func extractField (parsedFieldBytes * TagValue , buffer []byte ) (remBytes []byte , err error ) {
357384 endIndex := bytes .IndexByte (buffer , '\001' )
358385 if endIndex == - 1 {
0 commit comments