Skip to content

Commit

Permalink
add comments for TelegramBuffer::takeTelegramFrames
Browse files Browse the repository at this point in the history
  • Loading branch information
w0lek committed Apr 2, 2024
1 parent 0c42d0b commit df28932
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
11 changes: 8 additions & 3 deletions vpr/src/server/telegrambuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ void TelegramBuffer::append(const ByteArray& bytes)
m_rawBuffer.append(bytes);
}

bool TelegramBuffer::checkRawBuffer()
bool TelegramBuffer::checkTelegramHeaderPresence()
{
std::size_t signatureStartIndex = m_rawBuffer.findSequence(TelegramHeader::SIGNATURE, TelegramHeader::SIGNATURE_SIZE);
if (signatureStartIndex != std::size_t(-1)) {
if (signatureStartIndex != 0) {
// discard bytes preceding the header start position.
m_rawBuffer.erase(m_rawBuffer.begin(), m_rawBuffer.begin()+signatureStartIndex);
}
return true;
Expand All @@ -28,24 +29,28 @@ void TelegramBuffer::takeTelegramFrames(std::vector<comm::TelegramFramePtr>& res
bool mayContainFullTelegram = true;
while(mayContainFullTelegram) {
mayContainFullTelegram = false;
// attempt to extract telegram header
if (!m_headerOpt) {
if (checkRawBuffer()) {
if (checkTelegramHeaderPresence()) {
TelegramHeader header(m_rawBuffer);
if (header.isValid()) {
m_headerOpt = std::move(header);
}
}
}

// attempt to extract telegram frame based on the telegram header
if (m_headerOpt) {
const TelegramHeader& header = m_headerOpt.value();
std::size_t wholeTelegramSize = TelegramHeader::size() + header.bodyBytesNum();
if (m_rawBuffer.size() >= wholeTelegramSize) {
// checksum validation
ByteArray data(m_rawBuffer.begin() + TelegramHeader::size(), m_rawBuffer.begin() + wholeTelegramSize);
uint32_t actualCheckSum = data.calcCheckSum();
if (actualCheckSum == header.bodyCheckSum()) {
// construct telegram frame if checksum matches
TelegramFramePtr telegramFramePtr = std::make_shared<TelegramFrame>(TelegramFrame{header, std::move(data)});
data.clear();
data.clear(); // post std::move safety step
result.push_back(telegramFramePtr);
} else {
m_errors.push_back("wrong checkSums " + std::to_string(actualCheckSum) +" for " + header.info() + " , drop this chunk");
Expand Down
2 changes: 1 addition & 1 deletion vpr/src/server/telegrambuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class TelegramBuffer
std::vector<std::string> m_errors;
std::optional<TelegramHeader> m_headerOpt;

bool checkRawBuffer();
bool checkTelegramHeaderPresence();
};

} // namespace comm
Expand Down

0 comments on commit df28932

Please sign in to comment.