diff --git a/data-server/src/DataServer.cpp b/data-server/src/DataServer.cpp index 9044e6cf6a..b174ea293c 100644 --- a/data-server/src/DataServer.cpp +++ b/data-server/src/DataServer.cpp @@ -24,7 +24,8 @@ const unsigned short REDIS_PORT = 6379; DataServer::DataServer(int argc, char* argv[]) : QCoreApplication(argc, argv), _socket(), - _redis(NULL) + _redis(NULL), + _uuid(QUuid::createUuid()) { _socket.bind(QHostAddress::Any, DATA_SERVER_LISTEN_PORT); @@ -59,7 +60,8 @@ void DataServer::readPendingDatagrams() { while (_socket.hasPendingDatagrams()) { receivedPacket.resize(_socket.pendingDatagramSize()); - _socket.readDatagram(receivedPacket.data(), _socket.pendingDatagramSize()); + _socket.readDatagram(receivedPacket.data(), _socket.pendingDatagramSize(), + senderSockAddr.getAddressPointer(), senderSockAddr.getPortPointer()); PacketType requestType = packetTypeForPacket(receivedPacket); @@ -119,11 +121,11 @@ void DataServer::readPendingDatagrams() { if (reply->type == REDIS_REPLY_STATUS && strcmp("OK", reply->str) == 0) { // if redis stored the value successfully reply back with a confirm // which is a reply packet with the sequence number - QByteArray replyPacket = byteArrayWithPopluatedHeader(PacketTypeDataServerConfirm); + QByteArray replyPacket = byteArrayWithPopluatedHeader(PacketTypeDataServerConfirm, _uuid); replyPacket.append(sequenceNumber); - _socket.writeDatagram(replyPacket, + qint64 size = _socket.writeDatagram(replyPacket, senderSockAddr.getAddress(), senderSockAddr.getPort()); } @@ -131,14 +133,17 @@ void DataServer::readPendingDatagrams() { } else { // setup a send packet with the returned data // leverage the packetData sent by overwriting and appending - QByteArray sendPacket = byteArrayWithPopluatedHeader(PacketTypeDataServerSend); + QByteArray sendPacket = byteArrayWithPopluatedHeader(PacketTypeDataServerSend, _uuid); + sendPacket.append(sequenceNumber); - if (!receivedPacket.mid(numReceivedHeaderBytes).startsWith("uuid")) { + if (!receivedPacket.mid(numReceivedHeaderBytes + sizeof(sequenceNumber)).startsWith("uuid")) { const char MULTI_KEY_VALUE_SEPARATOR = '|'; // pull the key that specifies the data the user is putting/getting, null terminate it - QString keyListString(receivedPacket.mid(numReceivedHeaderBytes)); + QString keyListString; + packetStream >> keyListString; + QStringList keyList = keyListString.split(MULTI_KEY_VALUE_SEPARATOR); foreach (const QString& dataKey, keyList) { diff --git a/data-server/src/DataServer.h b/data-server/src/DataServer.h index 097f6a6533..392387f4d8 100644 --- a/data-server/src/DataServer.h +++ b/data-server/src/DataServer.h @@ -10,6 +10,7 @@ #define __hifi__DataServer__ #include +#include #include #include @@ -22,6 +23,7 @@ public: private: QUdpSocket _socket; redisContext* _redis; + QUuid _uuid; private slots: void readPendingDatagrams(); }; diff --git a/libraries/shared/src/DataServerClient.cpp b/libraries/shared/src/DataServerClient.cpp index fd003aa3bb..7ca951ba29 100644 --- a/libraries/shared/src/DataServerClient.cpp +++ b/libraries/shared/src/DataServerClient.cpp @@ -21,7 +21,7 @@ quint8 DataServerClient::_sequenceNumber = 0; const char MULTI_KEY_VALUE_SEPARATOR = '|'; -const char DATA_SERVER_HOSTNAME[] = "data.highfidelity.io"; +const char DATA_SERVER_HOSTNAME[] = "localhost"; const unsigned short DATA_SERVER_PORT = 3282; const HifiSockAddr& DataServerClient::dataServerSockAddr() {