58 ris::Frame::BufferIterator rBuff;
59 ris::Frame::BufferIterator wBuff;
67 ris::FramePtr newFrame = this->reqFrame(frame->getPayload(),
true);
75 if ((ret = BZ2_bzCompressInit(&strm, 1, 0, 30)) != BZ_OK)
80 rBuff = frame->beginBuffer();
81 strm.next_in =
reinterpret_cast<char*
>((*rBuff)->begin());
82 strm.avail_in = (*rBuff)->getPayload();
84 wBuff = newFrame->beginBuffer();
85 strm.next_out =
reinterpret_cast<char*
>((*wBuff)->begin());
86 strm.avail_out = (*wBuff)->getAvailable();
91 if ((ret = BZ2_bzCompress(&strm, (done) ? BZ_FINISH : BZ_RUN)) == BZ_SEQUENCE_ERROR)
95 if (strm.avail_in == 0 && (!done)) {
96 if (++rBuff != frame->endBuffer()) {
97 strm.next_in =
reinterpret_cast<char*
>((*rBuff)->begin());
98 strm.avail_in = (*rBuff)->getPayload();
105 if (strm.avail_out == 0) {
107 if ((wBuff + 1) == newFrame->endBuffer()) {
108 ris::FramePtr tmpFrame = this->reqFrame(frame->getPayload(),
true);
109 wBuff = newFrame->appendFrame(tmpFrame);
113 strm.next_out =
reinterpret_cast<char*
>((*wBuff)->begin());
114 strm.avail_out = (*wBuff)->getAvailable();
116 }
while (ret != BZ_STREAM_END);
119 newFrame->setPayload(strm.total_out_lo32);
120 newFrame->setError(frame->getError());
121 newFrame->setChannel(frame->getChannel());
122 newFrame->setFlags(frame->getFlags());
123 BZ2_bzCompressEnd(&strm);
125 this->sendFrame(newFrame);
133void ru::StreamZip::setup_python() {
136 bp::class_<ru::StreamZip, ru::StreamZipPtr, bp::bases<ris::Master, ris::Slave>, boost::noncopyable>(
"StreamZip",
139 bp::implicitly_convertible<ru::StreamZipPtr, ris::SlavePtr>();
140 bp::implicitly_convertible<ru::StreamZipPtr, ris::MasterPtr>();