Skip to content

Commit c5cb9a7

Browse files
author
alsm
committed
Calculate the size of template
Where there are multiple Flows in a DataFlowSet we need to know the size of the record and only read that many bytes from the buffer each time round the loop.
1 parent 98b11d7 commit c5cb9a7

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

netflow9/packet.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,14 @@ func (tr TemplateRecord) String() string {
298298
return fmt.Sprintf("id=%d fields=%d (%s)", tr.TemplateID, tr.FieldCount, tr.Fields)
299299
}
300300

301+
func (tr TemplateRecord) Size() int {
302+
var size int
303+
for _, f := range tr.Fields {
304+
size += int(f.Length)
305+
}
306+
return size
307+
}
308+
301309
func (tr *TemplateRecord) Unmarshal(r io.Reader) error {
302310
if err := read.Uint16(&tr.TemplateID, r); err != nil {
303311
return err
@@ -398,7 +406,7 @@ func (dfs *DataFlowSet) Unmarshal(r io.Reader, tr TemplateRecord, t *Translate)
398406
for buffer.Len() > 0 {
399407
var dr = DataRecord{}
400408
dr.TemplateID = tr.TemplateID
401-
if err := dr.Unmarshal(buffer, tr.Fields, t); err != nil {
409+
if err := dr.Unmarshal(bytes.NewBuffer(buffer.Next(tr.Size())), tr.Fields, t); err != nil {
402410
return err
403411
}
404412
dfs.Records = append(dfs.Records, dr)

0 commit comments

Comments
 (0)