[IPFIX] Fix parsing when using buffered (TCP) input #194
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When using a TCP input, packets' data are buffered before logstash
tries do decode them. Therefore, our decode() function will receive
chunks of "random" sizes, that might contain 2 PDUs, 3.4 PDUs, etc.
The current code parses only one PDU and discards the rest of the
payload. Therefore, we can easily miss a PDU, and the next call will
most likely parse the middle of a PDU, which will result in an error.
The file ipfix.dat used during CI is actually a good example : it
contains 3 IPFIX messages. But so far, the code is only considering
the first one, hence the 7 flows returned instead of the 13 that the
file contains.
This commit makes sure each call consumes all the PDUs available in
the payload, and the remaining data (beginning of another PDU) are
buffered to be reused in the next call.