#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;
}
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_2);
-
+ out << (quint32)0;
+
if(compressed) {
QByteArray rawItem;
QDataStream itemStream(&rawItem, QIODevice::WriteOnly);
rawItem = qCompress(rawItem);
- out << (quint32)rawItem.size() << rawItem;
+ out << rawItem;
} else {
- out << (quint32)0 << item;
- out.device()->seek(0);
- out << (quint32)(block.size() - sizeof(quint32));
+ out << item;
}
+ out.device()->seek(0);
+ out << (quint32)(block.size() - sizeof(quint32));
+
dev->write(block);
}
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;
QByteArray rawItem;
in >> rawItem;
rawItem = qUncompress(rawItem);
-
+
QDataStream itemStream(&rawItem, QIODevice::ReadOnly);
itemStream.setVersion(QDataStream::Qt_4_2);
itemStream >> 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));
}