Ignore message segments when first segment doesn't start at 1

This commit is contained in:
Dan Paulat 2024-01-19 23:37:06 -06:00
parent dbda117284
commit 53717434a6

View file

@ -53,6 +53,7 @@ struct Level2MessageFactory::Context
size_t bufferedSize_;
util::vectorbuf messageBuffer_;
std::istream messageBufferStream_;
bool bufferingData_ {false};
};
std::shared_ptr<Level2MessageFactory::Context>
@ -103,8 +104,19 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is,
ctx->messageData_.resize(dataSize * totalSegments);
ctx->messageBufferStream_.clear();
ctx->bufferedSize_ = 0;
ctx->bufferingData_ = true;
}
else if (!ctx->bufferingData_)
{
// Segment number did not start at 1
logger_->trace("Ignoring Segment {}/{}, did not start at 1",
segment,
totalSegments);
info.messageValid = false;
}
if (ctx->bufferingData_)
{
if (ctx->messageData_.capacity() < ctx->bufferedSize_ + dataSize)
{
logger_->debug("Bad size estimate, increasing size");
@ -126,6 +138,7 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is,
info.messageValid = false;
ctx->messageData_.shrink_to_fit();
ctx->bufferedSize_ = 0;
ctx->bufferingData_ = false;
}
else if (segment == totalSegments)
{
@ -136,6 +149,7 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is,
messageStream = &ctx->messageBufferStream_;
}
}
}
if (messageStream != nullptr)
{
@ -145,6 +159,7 @@ Level2MessageInfo Level2MessageFactory::Create(std::istream& is,
ctx->messageData_.shrink_to_fit();
ctx->messageBufferStream_.clear();
ctx->bufferedSize_ = 0;
ctx->bufferingData_ = false;
}
}
else if (info.headerValid)