bool ZLPlainAsynchronousInputStream::processInputInternal(Handler &handler) { if (eof()) { handler.shutdown(); return true; } return handler.handleBuffer(myData, myDataLen); }
bool ZLGzipAsynchronousInputStream::processInputInternal(Handler &handler) { if (myEndOfStream) { return false; } if (eof()) { handler.shutdown(); myEndOfStream = true; return true; } while (myOffset < myDataLen && myStreamState) { if (!skipHeader(myData, myDataLen)) { return false; } } if (myOffset >= myDataLen) { myOffset -= myDataLen; return true; } myZStream->next_in = (Bytef*) myData + myOffset; myZStream->avail_in = myDataLen - myOffset; myOffset = 0; bool forcedCall = false; while (!myEndOfStream && (myZStream->avail_in > 0 || forcedCall)) { forcedCall = false; myZStream->avail_out = myOutBufferSize; myZStream->next_out = (Bytef*) myOutBuffer; int code = ::inflate(myZStream, Z_SYNC_FLUSH); if ((code != Z_OK) && (code != Z_STREAM_END)) { return false; } if (myOutBufferSize != myZStream->avail_out) { if (myZStream->avail_out == 0) { forcedCall = true; } if (!handler.handleBuffer(myOutBuffer, myOutBufferSize - myZStream->avail_out)) { return false; } if (code == Z_STREAM_END) { myEndOfStream = true; setEof(); handler.shutdown(); } } } return true; }