#include <QObject>
#include <QIODevice>
#include <QAbstractSocket>
+#include <QHostAddress>
#include <QHash>
#include <QMultiHash>
#include <QList>
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;
void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool compressed) {
QAbstractSocket* sock = qobject_cast<QAbstractSocket*>(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;
}
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);
in >> blockSize;
}
+ if(blockSize > 1 << 22) {
+ qWarning() << qPrintable(tr("Client tried to send package larger than max package size!"));
+ QAbstractSocket* sock = qobject_cast<QAbstractSocket*>(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;
}
}
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));
}