-
-/*
-int main( int argc, char* argv[] ) {
- OpensslBIOWrapper *bio = new OpensslBIOWrapper(BIO_new_fd(0, 0));
- std::string data = "halloPayload";
- RecordHeader head;
- head.command = 0x7;
- head.flags = 1;
- head.sessid = 13;
- head.command_count = 0xA0B;
- head.totalLength = 9;
- sendCommand( head, data, std::shared_ptr<OpensslBIO>(bio) );
- head.command = 0x8;
-
- try {
- std::string c = parseCommand( head, ":0700010D0000000B0A0900000000000C0068616C6C6F5061796C6F6164E6\n" );
-
- std::cout << "res: " << std::endl;
- std::cout << head.payloadLength << std::endl;
- std::cout << c << std::endl;
- } catch( char const* c ) {
- std::cout << "err: " << c << std::endl;
+std::string parseCommandChunked( RecordHeader& head, std::shared_ptr<OpensslBIOWrapper> io){
+ logger::note("reading");
+ std::string payload = parseCommand( head, io->readLine() );
+ 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);
+ if(pos >= head.totalLength) {
+ break;
+ }
+ logger::note("chunk digested, reading next one");
+ payload = parseCommand( head2, io->readLine() );
+ if(!head2.isFollowupOf(head)){
+ throw std::runtime_error("Error, header of follow up chunk was malformed");
+ }
+ head = head2;