@@ -23,7 +23,7 @@ type Message struct {
2323 bodyBytes []byte
2424
2525 //field bytes as they appear in the raw message
26- fields [] tagValue
26+ fields TagValues
2727}
2828
2929//Marshal marshals the message itself
@@ -61,7 +61,7 @@ func ParseMessage(rawMessage []byte) (Message, error) {
6161 fieldCount ++
6262 }
6363 }
64- msg .fields = make ([] tagValue , fieldCount )
64+ msg .fields = make (TagValues , fieldCount )
6565
6666 fieldIndex := 0
6767 var err error
@@ -71,23 +71,23 @@ func ParseMessage(rawMessage []byte) (Message, error) {
7171 return msg , err
7272 }
7373
74- msg .Header .tagLookup [msg .fields [fieldIndex ].Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
74+ msg .Header .tagLookup [msg .fields [fieldIndex ].tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
7575 fieldIndex ++
7676
7777 parsedFieldBytes := & msg .fields [fieldIndex ]
7878 if rawMessage , err = extractSpecificField (parsedFieldBytes , tagBodyLength , rawMessage ); err != nil {
7979 return msg , err
8080 }
8181
82- msg .Header .tagLookup [parsedFieldBytes .Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
82+ msg .Header .tagLookup [parsedFieldBytes .tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
8383 fieldIndex ++
8484
8585 parsedFieldBytes = & msg .fields [fieldIndex ]
8686 if rawMessage , err = extractSpecificField (parsedFieldBytes , tagMsgType , rawMessage ); err != nil {
8787 return msg , err
8888 }
8989
90- msg .Header .tagLookup [parsedFieldBytes .Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
90+ msg .Header .tagLookup [parsedFieldBytes .tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
9191 fieldIndex ++
9292
9393 trailerBytes := []byte {}
@@ -100,16 +100,16 @@ func ParseMessage(rawMessage []byte) (Message, error) {
100100 }
101101
102102 switch {
103- case parsedFieldBytes .Tag .IsHeader ():
104- msg .Header .tagLookup [parsedFieldBytes .Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
105- case parsedFieldBytes .Tag .IsTrailer ():
106- msg .Trailer .tagLookup [parsedFieldBytes .Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
103+ case parsedFieldBytes .tag .IsHeader ():
104+ msg .Header .tagLookup [parsedFieldBytes .tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
105+ case parsedFieldBytes .tag .IsTrailer ():
106+ msg .Trailer .tagLookup [parsedFieldBytes .tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
107107 default :
108108 foundBody = true
109109 trailerBytes = rawMessage
110- msg .Body .tagLookup [parsedFieldBytes .Tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
110+ msg .Body .tagLookup [parsedFieldBytes .tag ] = msg .fields [fieldIndex : fieldIndex + 1 ]
111111 }
112- if parsedFieldBytes .Tag == tagCheckSum {
112+ if parsedFieldBytes .tag == tagCheckSum {
113113 break
114114 }
115115
@@ -127,15 +127,18 @@ func ParseMessage(rawMessage []byte) (Message, error) {
127127
128128 length := 0
129129 for _ , field := range msg .fields {
130- switch field .Tag {
130+ switch field .tag {
131131 case tagBeginString , tagBodyLength , tagCheckSum : //tags do not contribute to length
132132 default :
133133 length += field .length ()
134134 }
135135 }
136136
137137 var bodyLength FIXInt
138- msg .Header .GetField (tagBodyLength , & bodyLength )
138+ if err := msg .Header .GetField (tagBodyLength , & bodyLength ); err != nil {
139+ return msg , parseError {OrigError : err .Error ()}
140+ }
141+
139142 if length != int (bodyLength ) {
140143 return msg , parseError {OrigError : fmt .Sprintf ("Incorrect Message Length, expected %d, got %d" , bodyLength , length )}
141144 }
@@ -181,20 +184,20 @@ func (m Message) reverseRoute() Message {
181184 return reverseMsg
182185}
183186
184- func extractSpecificField (field * tagValue , expectedTag Tag , buffer []byte ) (remBuffer []byte , err error ) {
187+ func extractSpecificField (field * TagValue , expectedTag Tag , buffer []byte ) (remBuffer []byte , err error ) {
185188 remBuffer , err = extractField (field , buffer )
186189 switch {
187190 case err != nil :
188191 return
189- case field .Tag != expectedTag :
190- err = parseError {OrigError : fmt .Sprintf ("extractSpecificField: Fields out of order, expected %d, got %d" , expectedTag , field .Tag )}
192+ case field .tag != expectedTag :
193+ err = parseError {OrigError : fmt .Sprintf ("extractSpecificField: Fields out of order, expected %d, got %d" , expectedTag , field .tag )}
191194 return
192195 }
193196
194197 return
195198}
196199
197- func extractField (parsedFieldBytes * tagValue , buffer []byte ) (remBytes []byte , err error ) {
200+ func extractField (parsedFieldBytes * TagValue , buffer []byte ) (remBytes []byte , err error ) {
198201 endIndex := bytes .IndexByte (buffer , '\001' )
199202 if endIndex == - 1 {
200203 err = parseError {OrigError : "extractField: No Trailing Delim in " + string (buffer )}
0 commit comments