diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index a24abd3a49..a2e4221bfd 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -15,6 +15,7 @@ IceServer::IceServer(int argc, char* argv[]) : QCoreApplication(argc, argv), + _id(QUuid::createUuid()), _serverSocket() { // start the ice-server socket @@ -65,11 +66,22 @@ void IceServer::processDatagrams() { } // check if this node also included a UUID that they would like to connect to - QUuid connectRequestUUID; - hearbeatStream >> connectRequestUUID; + QUuid connectRequestID; + hearbeatStream >> connectRequestID; - if (!connectRequestUUID.isNull()) { - qDebug() << "Peer wants to connect to peer with ID" << uuidStringWithoutCurlyBraces(connectRequestUUID); + if (!connectRequestID.isNull()) { + qDebug() << "Peer wants to connect to peer with ID" << uuidStringWithoutCurlyBraces(connectRequestID); + + // check if we have that ID - if we do we can respond with their info, otherwise nothing we can do + SharedNetworkPeer matchingConectee = _activePeers.value(connectRequestID); + if (matchingConectee) { + QByteArray heartbeatResponse = byteArrayWithPopulatedHeader(PacketTypeIceServerHeartbeatResponse, _id); + QDataStream responseStream(&heartbeatResponse, QIODevice::Append); + + responseStream << matchingConectee; + + _serverSocket.writeDatagram(heartbeatResponse, sendingSockAddr.getAddress(), sendingSockAddr.getPort()); + } } } } diff --git a/ice-server/src/IceServer.h b/ice-server/src/IceServer.h index 3db9a6b2e2..a680bafbc3 100644 --- a/ice-server/src/IceServer.h +++ b/ice-server/src/IceServer.h @@ -24,6 +24,7 @@ public: private slots: void processDatagrams(); private: + QUuid _id; QHash _activePeers; QUdpSocket _serverSocket; }; diff --git a/libraries/networking/src/AccountManager.cpp b/libraries/networking/src/AccountManager.cpp index 595e4cbb60..7d924d02de 100644 --- a/libraries/networking/src/AccountManager.cpp +++ b/libraries/networking/src/AccountManager.cpp @@ -60,7 +60,7 @@ AccountManager::AccountManager() : _authURL(), _pendingCallbackMap(), _accountInfo(), - _shouldPersistToSettingsFile(false) + _shouldPersistToSettingsFile(true) { qRegisterMetaType("OAuthAccessToken"); qRegisterMetaTypeStreamOperators("OAuthAccessToken"); diff --git a/libraries/networking/src/NetworkPeer.cpp b/libraries/networking/src/NetworkPeer.cpp index 57a4a97331..2f94825fe5 100644 --- a/libraries/networking/src/NetworkPeer.cpp +++ b/libraries/networking/src/NetworkPeer.cpp @@ -65,6 +65,22 @@ void NetworkPeer::activateSymmetricSocket() { _activeSocket = &_symmetricSocket; } +QDataStream& operator<<(QDataStream& out, const NetworkPeer& peer) { + out << peer._uuid; + out << peer._publicSocket; + out << peer._localSocket; + + return out; +} + +QDataStream& operator>>(QDataStream& in, NetworkPeer& peer) { + in >> peer._uuid; + in >> peer._publicSocket; + in >> peer._localSocket; + + return in; +} + QDebug operator<<(QDebug debug, const NetworkPeer &peer) { debug << uuidStringWithoutCurlyBraces(peer.getUUID()) << "- public:" << peer.getPublicSocket() diff --git a/libraries/networking/src/NetworkPeer.h b/libraries/networking/src/NetworkPeer.h index da5850576b..052040933b 100644 --- a/libraries/networking/src/NetworkPeer.h +++ b/libraries/networking/src/NetworkPeer.h @@ -41,6 +41,8 @@ public: void activateLocalSocket(); void activateSymmetricSocket(); + friend QDataStream& operator<<(QDataStream& out, const NetworkPeer& peer); + friend QDataStream& operator>>(QDataStream& in, NetworkPeer& peer); protected: QUuid _uuid; diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 6d7670b077..a1b6011032 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -123,6 +123,10 @@ void NodeList::processNodeData(const HifiSockAddr& senderSockAddr, const QByteAr _domainHandler.parseDTLSRequirementPacket(packet); break; } + case PacketTypeIceServerHeartbeatResponse: { + + break; + } case PacketTypePing: { // send back a reply SharedNodePointer matchingNode = sendingNodeForPacket(packet); diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index aaab9c2928..dd1707521c 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -71,7 +71,8 @@ enum PacketType { PacketTypeParticleEditNack, PacketTypeEntityEditNack, // 48 PacketTypeSignedTransactionPayment, - PacketTypeIceServerHeartbeat + PacketTypeIceServerHeartbeat, + PacketTypeIceServerHeartbeatResponse }; typedef char PacketVersion; @@ -81,7 +82,8 @@ const QSet NON_VERIFIED_PACKETS = QSet() << PacketTypeDomainList << PacketTypeDomainListRequest << PacketTypeDomainOAuthRequest << PacketTypeCreateAssignment << PacketTypeRequestAssignment << PacketTypeStunResponse << PacketTypeNodeJsonStats << PacketTypeVoxelQuery << PacketTypeParticleQuery << PacketTypeEntityQuery - << PacketTypeOctreeDataNack << PacketTypeVoxelEditNack << PacketTypeParticleEditNack << PacketTypeEntityEditNack; + << PacketTypeOctreeDataNack << PacketTypeVoxelEditNack << PacketTypeParticleEditNack << PacketTypeEntityEditNack + << PacketTypeIceServerHeartbeat << PacketTypeIceServerHeartbeatResponse; const int NUM_BYTES_MD5_HASH = 16; const int NUM_STATIC_HEADER_BYTES = sizeof(PacketVersion) + NUM_BYTES_RFC4122_UUID;