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;
}
read( it, offset );
read( it, payloadLength );
}
-
+ bool isFollowupOf( const RecordHeader& head ) {
+ return head.command == command && head.flags == flags && head.sessid == sessid && head.command_count == command_count && head.totalLength == totalLength && head.offset + 1 == offset;
+ }
};
std::string parseCommand( RecordHeader& head, const std::string& input );