std::stringstream ss;
ss << "Expected: " << expectedTotalLength << ", Got: " << input.size();
logger::error( ss.str() );
- throw "Error, invalid length";
+ throw std::length_error("Error, invalid length");
}
if( checksum != -1 || error || dlen < RECORD_HEADER_SIZE ) {
- throw "Error, invalid checksum";
+ throw std::runtime_error("Error, invalid checksum");
}
data.pop_back();
std::string all(head.totalLength, ' ');
auto target = all.begin();
size_t pos = 0;
+ RecordHeader head2;
while(true) {
pos += head.payloadLength;
target = std::copy ( payload.begin(), payload.end(), target);
break;
}
logger::note("chunk digested, reading next one");
- payload = parseCommand( head, io->readLine() );
+ payload = parseCommand( head2, io->readLine() );
+ if(!head2.isFollowupOf(head)){
+ throw std::runtime_error("Error, header of follow up chunk was malformed");
+ }
+ head = head2;
}
return all;
}