Skip to content

Instantly share code, notes, and snippets.

@Vlad1mir-D
Created August 20, 2015 12:32
Show Gist options
  • Select an option

  • Save Vlad1mir-D/6100586b5fa041d577fc to your computer and use it in GitHub Desktop.

Select an option

Save Vlad1mir-D/6100586b5fa041d577fc to your computer and use it in GitHub Desktop.
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