MCPcopy Create free account
hub / github.com/Edgio/vflow / Decode

Method Decode

netflow/v9/decoder.go:380–411  ·  view source on GitHub ↗

Decode decodes the flow records

(mem MemCache)

Source from the content-addressed store, hash-verified

378
379// Decode decodes the flow records
380func (d *Decoder) Decode(mem MemCache) (*Message, error) {
381 var msg = new(Message)
382
383 // IPFIX Message Header decoding
384 if err := msg.Header.unmarshal(d.reader); err != nil {
385 return nil, err
386 }
387 // IPFIX Message Header validation
388 if err := msg.Header.validate(); err != nil {
389 return nil, err
390 }
391
392 // Add source IP address as Agent ID
393 msg.AgentID = d.raddr.String()
394
395 // In case there are multiple non-fatal errors, collect them and report all of them.
396 // The rest of the received sets will still be interpreted, until a fatal error is encountered.
397 // A non-fatal error is for example an illegal data record or unknown template id.
398 var decodeErrors []error
399 for d.reader.Len() > 4 {
400 if err := d.decodeSet(mem, msg); err != nil {
401 switch err.(type) {
402 case nonfatalError:
403 decodeErrors = append(decodeErrors, err)
404 default:
405 return nil, err
406 }
407 }
408 }
409
410 return msg, combineErrors(decodeErrors...)
411}
412
413func (d *Decoder) decodeSet(mem MemCache, msg *Message) error {
414 startCount := d.reader.ReadCount()

Callers 1

TestDecodeNoDataFunction · 0.95

Calls 6

decodeSetMethod · 0.95
StringMethod · 0.80
LenMethod · 0.80
combineErrorsFunction · 0.70
unmarshalMethod · 0.45
validateMethod · 0.45

Tested by 1

TestDecodeNoDataFunction · 0.76