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 }