Created
August 20, 2015 12:32
-
-
Save Vlad1mir-D/6100586b5fa041d577fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/bundle.cc b/bundle.cc | |
| index e7e3a51..70fdef2 100644 | |
| --- a/bundle.cc | |
| +++ b/bundle.cc | |
| @@ -11,6 +11,7 @@ | |
| #include "message.hh" | |
| #include "adler32.hh" | |
| #include "compression.hh" | |
| +#include "debug.hh" | |
| namespace Bundle { | |
| @@ -120,10 +121,12 @@ void Creator::write( Config const & config, std::string const & fileName, | |
| // Compress | |
| - sptr<Compression::EnDecoder> encoder = compression->createEncoder( | |
| +/* sptr<Compression::EnDecoder> encoder = compression->createEncoder( | |
| config ); | |
| - encoder->setInput( payload.data(), payload.size() ); | |
| + encoder->setInput( payload.data(), payload.size() );*/ | |
| + dPrintf( "payload.size(): %d\n", payload.size() ); | |
| + int offset = 0, prevOffset = 0; | |
| for ( ; ; ) | |
| { | |
| @@ -132,24 +135,37 @@ void Creator::write( Config const & config, std::string const & fileName, | |
| int size; | |
| if ( !os.Next( &data, &size ) ) | |
| { | |
| - encoder.reset(); | |
| +// encoder.reset(); | |
| throw exBundleWriteFailed(); | |
| } | |
| if ( !size ) | |
| continue; | |
| - encoder->setOutput( data, size ); | |
| +// encoder->setOutput( data, size ); | |
| + | |
| + prevOffset = offset; | |
| + memcpy( data, payload.data() + offset, size ); | |
| + offset += size; | |
| + dPrintf( "size: %d, offset: %d, prevOffset: %d\n", size, offset, prevOffset ); | |
| + dPrintf( "data:\n|%s|\n", data ); | |
| + if ( offset >= payload.size() ) | |
| + { | |
| + int left = payload.size() - prevOffset; | |
| + dPrintf( "payload.size(): %d, left: %d\n", payload.size(), left ); | |
| + os.BackUp( left ); | |
| + break; | |
| + } | |
| } | |
| - // Perform the compression | |
| +/* // Perform the compression | |
| if ( encoder->process( true ) ) | |
| { | |
| if ( encoder->getAvailableOutput() ) | |
| os.BackUp( encoder->getAvailableOutput() ); | |
| break; | |
| - } | |
| + }*/ | |
| } | |
| - encoder.reset(); | |
| +// encoder.reset(); | |
| os.writeAdler32(); | |
| } | |
| @@ -176,10 +192,12 @@ Reader::Reader( string const & fileName, EncryptionKey const & key, bool keepStr | |
| if ( keepStream ) | |
| return; | |
| - sptr<Compression::EnDecoder> decoder = Compression::CompressionMethod::findCompression( | |
| + /*sptr<Compression::EnDecoder> decoder = Compression::CompressionMethod::findCompression( | |
| header.compression_method() )->createDecoder(); | |
| - decoder->setOutput( &payload[ 0 ], payload.size() ); | |
| + decoder->setOutput( &payload[ 0 ], payload.size() );*/ | |
| + dPrintf( "payload.size(): %d\n", payload.size() ); | |
| + int offset = 0, prevOffset = 0, prevSize = 0; | |
| for ( ; ; ) | |
| { | |
| @@ -188,15 +206,29 @@ Reader::Reader( string const & fileName, EncryptionKey const & key, bool keepStr | |
| int size; | |
| if ( !is->Next( &data, &size ) ) | |
| { | |
| - decoder.reset(); | |
| +// decoder.reset(); | |
| throw exBundleReadFailed(); | |
| } | |
| if ( !size ) | |
| continue; | |
| - decoder->setInput( data, size ); | |
| +// decoder->setInput( data, size ); | |
| + | |
| + prevOffset = offset; | |
| + memcpy( &payload[ 0 ], data, size ); | |
| + offset += size; | |
| + dPrintf( "size: %d, prevSize: %d, offset: %d, prevOffset: %d\n", size, prevSize, offset, prevOffset ); | |
| + dPrintf( "data:\n|%s|\n", data ); | |
| + if ( offset >= payload.size() || ( size < prevSize && prevSize != 0 ) ) | |
| + { | |
| + int left = payload.size() - prevOffset; | |
| + dPrintf( "payload.size(): %d, left: %d\n", payload.size(), left ); | |
| + is->BackUp( size ); | |
| + break; | |
| + } | |
| + prevSize = size; | |
| } | |
| - if ( decoder->process( false ) ) | |
| +/* if ( decoder->process( false ) ) | |
| { | |
| if ( decoder->getAvailableInput() ) | |
| is->BackUp( decoder->getAvailableInput() ); | |
| @@ -208,10 +240,10 @@ Reader::Reader( string const & fileName, EncryptionKey const & key, bool keepStr | |
| // Apparently we have more data than we were expecting | |
| decoder.reset(); | |
| throw exTooMuchData(); | |
| - } | |
| + }*/ | |
| } | |
| - decoder.reset(); | |
| +// decoder.reset(); | |
| is->checkAdler32(); | |
| if ( is.get() ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment