X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=20392081ba27ad066a603480b5c944f6e459767d;hp=612f21437e37e0a9811f0e0116e2f1dd9737a0f1;hb=c2a02924342a5d9a0ebbc1794e9f7df4ca13c50d;hpb=f9381834c2af8fe9e1fbadd8c6a5d6df1d0beceb diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 612f2143..20392081 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -606,23 +607,27 @@ void SignalProxy::synchronize(SyncableObject *obj) { if(proxyMode() == Server) { connect(obj, SIGNAL(objectRenamed(QString, QString)), this, SLOT(objectRenamed(QString, QString))); - setInitialized(obj); + obj->setInitialized(); + emit objectInitialized(obj); } else { - requestInit(obj); + if(obj->isInitialized()) + emit objectInitialized(obj); + else + requestInit(obj); } } -void SignalProxy::setInitialized(SyncableObject *obj) { - obj->setInitialized(); - emit objectInitialized(obj); -} +// void SignalProxy::setInitialized(SyncableObject *obj) { +// obj->setInitialized(); +// emit objectInitialized(obj); +// } -bool SignalProxy::isInitialized(SyncableObject *obj) const { - return obj->isInitialized(); -} +// bool SignalProxy::isInitialized(SyncableObject *obj) const { +// return obj->isInitialized(); +// } void SignalProxy::requestInit(SyncableObject *obj) { - if(proxyMode() == Server || isInitialized(obj)) + if(proxyMode() == Server || obj->isInitialized()) return; QVariantList params; @@ -907,7 +912,7 @@ void SignalProxy::dataAvailable() { void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool compressed) { QAbstractSocket* sock = qobject_cast(dev); if(!dev->isOpen() || (sock && sock->state()!=QAbstractSocket::ConnectedState)) { - qWarning("SignalProxy: Can't call on a closed device"); + qWarning("SignalProxy: Can't call write on a closed device"); return; } @@ -923,14 +928,11 @@ void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool c itemStream.setVersion(QDataStream::Qt_4_2); itemStream << item; - int rawSize = rawItem.size(); rawItem = qCompress(rawItem); out << rawItem; - qDebug() << "Sending compressed" << rawItem.size() << "Bytes. (was:" << rawSize << "Bytes)" << dev; } else { out << item; - qDebug() << "Sending uncompressed" << block.size() - sizeof(quint32); } out.device()->seek(0); @@ -948,21 +950,26 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian in >> blockSize; } + if(blockSize > 1 << 22) { + qWarning() << qPrintable(tr("Client tried to send package larger than max package size!")); + QAbstractSocket* sock = qobject_cast(dev); + qWarning() << qPrintable(tr("Disconnecting")) << (sock ? qPrintable(sock->peerAddress().toString()) : qPrintable(tr("local client"))); + dev->close(); + return false; + } + if(dev->bytesAvailable() < blockSize) return false; if(compressed) { QByteArray rawItem; in >> rawItem; - int rawSize = rawItem.size(); rawItem = qUncompress(rawItem); - qDebug() << "receiving compressed" << rawSize << "Bytes. (uncompressed:" << rawItem.size() << "Bytes)" << dev; QDataStream itemStream(&rawItem, QIODevice::ReadOnly); itemStream.setVersion(QDataStream::Qt_4_2); itemStream >> item; } else { - qDebug() << "receiving uncompressed" << blockSize << "Bytes" << dev; in >> item; } @@ -1018,10 +1025,11 @@ QVariantMap SignalProxy::initData(SyncableObject *obj) const { } void SignalProxy::setInitData(SyncableObject *obj, const QVariantMap &properties) { - if(isInitialized(obj)) + if(obj->isInitialized()) return; obj->fromVariantMap(properties); - setInitialized(obj); + obj->setInitialized(); + emit objectInitialized(obj); invokeSlot(obj, updatedRemotelyId(obj)); }