File indexing completed on 2024-06-23 04:03:33
0001 #include <QTimer> 0002 #include <QDebug> 0003 0004 #include "compressionhandler.h" 0005 #include "xmpp/zlib/zlibcompressor.h" 0006 #include "xmpp/zlib/zlibdecompressor.h" 0007 0008 CompressionHandler::CompressionHandler() 0009 : errorCode_(0) 0010 { 0011 outgoing_buffer_.open(QIODevice::ReadWrite); 0012 compressor_ = new ZLibCompressor(&outgoing_buffer_); 0013 0014 incoming_buffer_.open(QIODevice::ReadWrite); 0015 decompressor_ = new ZLibDecompressor(&incoming_buffer_); 0016 } 0017 0018 CompressionHandler::~CompressionHandler() 0019 { 0020 delete compressor_; 0021 delete decompressor_; 0022 } 0023 0024 void CompressionHandler::writeIncoming(const QByteArray& a) 0025 { 0026 //qDebug("CompressionHandler::writeIncoming"); 0027 //qDebug() << (QString("Incoming %1 bytes").arg(a.size()).toLatin1()); 0028 errorCode_ = decompressor_->write(a); 0029 if (!errorCode_) 0030 QTimer::singleShot(0, this, &CompressionHandler::readyRead); 0031 else 0032 QTimer::singleShot(0, this, &CompressionHandler::error); 0033 } 0034 0035 void CompressionHandler::write(const QByteArray& a) 0036 { 0037 //qDebug() << (QString("CompressionHandler::write(%1)").arg(a.size()).toLatin1()); 0038 errorCode_ = compressor_->write(a); 0039 if (!errorCode_) 0040 QTimer::singleShot(0, this, &CompressionHandler::readyReadOutgoing); 0041 else 0042 QTimer::singleShot(0, this, &CompressionHandler::error); 0043 } 0044 0045 QByteArray CompressionHandler::read() 0046 { 0047 //qDebug("CompressionHandler::read"); 0048 QByteArray b = incoming_buffer_.buffer(); 0049 incoming_buffer_.buffer().clear(); 0050 incoming_buffer_.reset(); 0051 return b; 0052 } 0053 0054 QByteArray CompressionHandler::readOutgoing(int* i) 0055 { 0056 //qDebug("CompressionHandler::readOutgoing"); 0057 //qDebug() << (QString("Outgoing %1 bytes").arg(outgoing_buffer_.size()).toLatin1()); 0058 QByteArray b = outgoing_buffer_.buffer(); 0059 outgoing_buffer_.buffer().clear(); 0060 outgoing_buffer_.reset(); 0061 *i = b.size(); 0062 return b; 0063 } 0064 0065 int CompressionHandler::errorCode() 0066 { 0067 return errorCode_; 0068 }