diff --git a/domain-server/src/DomainServerSettingsManager.cpp b/domain-server/src/DomainServerSettingsManager.cpp index d192705a5c..0767ab958e 100644 --- a/domain-server/src/DomainServerSettingsManager.cpp +++ b/domain-server/src/DomainServerSettingsManager.cpp @@ -799,19 +799,24 @@ void DomainServerSettingsManager::processUsernameFromIDRequestPacket(QSharedPoin bool newPermissions = false; + QByteArray printableVerifiedUsername; + if (!verifiedUsername.isEmpty()) { - QByteArray printableVerifiedUsername = qPrintable(verifiedUsername); - // setup the packet - auto usernameFromIDRequestPacket = NLPacket::create(PacketType::UsernameFromIDRequest, NUM_BYTES_RFC4122_UUID + printableVerifiedUsername.length(), true); - - // write the node ID to the packet - usernameFromIDRequestPacket->write(nodeUUID.toRfc4122()); - // write the username to the packet - usernameFromIDRequestPacket->write(printableVerifiedUsername); - - auto nodeList = DependencyManager::get(); - nodeList->sendPacket(std::move(usernameFromIDRequestPacket), message->getSenderSockAddr()); + printableVerifiedUsername = qPrintable(verifiedUsername); + } else { + printableVerifiedUsername = qPrintable(""); } + // setup the packet + auto usernameFromIDReplyPacket = NLPacket::create(PacketType::UsernameFromIDReply, NUM_BYTES_RFC4122_UUID + printableVerifiedUsername.length(), true); + + // write the node ID to the packet + usernameFromIDReplyPacket->write(nodeUUID.toRfc4122()); + // write the username to the packet + usernameFromIDReplyPacket->write(printableVerifiedUsername); + + auto nodeList = DependencyManager::get(); + nodeList->sendPacket(std::move(usernameFromIDReplyPacket), message->getSenderSockAddr()); + qDebug() << "SENDING PACKET."; } else { qWarning() << "Node username request received for unknown node. Refusing to process."; diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp index 87fd420255..65c2b9a86f 100644 --- a/libraries/networking/src/NodeList.cpp +++ b/libraries/networking/src/NodeList.cpp @@ -128,7 +128,7 @@ NodeList::NodeList(char newOwnerType, int socketListenPort, int dtlsListenPort) packetReceiver.registerListener(PacketType::ICEPingReply, &_domainHandler, "processICEPingReplyPacket"); packetReceiver.registerListener(PacketType::DomainServerPathResponse, this, "processDomainServerPathResponse"); packetReceiver.registerListener(PacketType::DomainServerRemovedNode, this, "processDomainServerRemovedNode"); - packetReceiver.registerListener(PacketType::UsernameFromIDRequest, this, "processUsernameFromIDRequestPacket"); + packetReceiver.registerListener(PacketType::UsernameFromIDReply, this, "processUsernameFromIDReply"); } qint64 NodeList::sendStats(QJsonObject statsObject, HifiSockAddr destination) { @@ -922,12 +922,13 @@ void NodeList::requestUsernameFromSessionID(const QUuid& nodeID) { } } -void NodeList::processUsernameFromIDRequestPacket(QSharedPointer message) { +void NodeList::processUsernameFromIDReply(QSharedPointer message) { // read the UUID from the packet - // read the UUID from the packet, remove it if it exists QUuid nodeUUID = QUuid::fromRfc4122(message->readWithoutCopy(NUM_BYTES_RFC4122_UUID)); // read the username from the packet QString username = message->readString(); + qDebug() << "Got username" << username << "for node" << uuidStringWithoutCurlyBraces(nodeUUID); + emit usernameFromID(nodeUUID, username); } diff --git a/libraries/networking/src/NodeList.h b/libraries/networking/src/NodeList.h index 8f69f9dc7f..25091e8e3c 100644 --- a/libraries/networking/src/NodeList.h +++ b/libraries/networking/src/NodeList.h @@ -82,7 +82,7 @@ public: void kickNodeBySessionID(const QUuid& nodeID); void muteNodeBySessionID(const QUuid& nodeID); void requestUsernameFromSessionID(const QUuid& nodeID); - void processUsernameFromIDRequestPacket(QSharedPointer message); + void processUsernameFromIDReply(QSharedPointer message); public slots: void reset(); diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index 880c760e51..ee42398666 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -39,7 +39,7 @@ const QSet NON_SOURCED_PACKETS = QSet() << PacketType::ICEServerPeerInformation << PacketType::ICEServerQuery << PacketType::ICEServerHeartbeat << PacketType::ICEServerHeartbeatACK << PacketType::ICEPing << PacketType::ICEPingReply << PacketType::ICEServerHeartbeatDenied << PacketType::AssignmentClientStatus << PacketType::StopNode - << PacketType::DomainServerRemovedNode; + << PacketType::DomainServerRemovedNode << PacketType::UsernameFromIDReply; PacketVersion versionForPacketType(PacketType packetType) { switch (packetType) { diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index bf59b2aa1d..84ff9b673a 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -102,7 +102,9 @@ public: NodeMuteRequest, RadiusIgnoreRequest, UsernameFromIDRequest, - LAST_PACKET_TYPE = UsernameFromIDRequest + UsernameFromIDReply, + LAST_PACKET_TYPE = RadiusIgnoreRequest + //LAST_PACKET_TYPE = UsernameFromIDRequest }; }; diff --git a/scripts/system/pal.js b/scripts/system/pal.js index cdfc9bb15c..8f499d5e2f 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -118,11 +118,11 @@ function populateUserList() { var avatar = AvatarList.getAvatar(id); var avatarPalDatum = { displayName: avatar.displayName || ('anonymous ' + counter++), - userName: Users.canKick ? 'Obtaining username...' : '', + userName: (Users.canKick && id) ? 'Obtaining username...' : '', sessionId: id || '' }; - if (Users.canKick) { - Users.getUsernameFromID(id); + if (Users.canKick && id) { + Users.requestUsernameFromID(id); } data.push(avatarPalDatum); if (id) { // No overlay for ourself. @@ -134,7 +134,7 @@ function populateUserList() { } function usernameFromID(id, username) { - var data = { id: id, username: username }; + var data = { id: id, username: username + '\\' + id }; print('Username Data:', JSON.stringify(data)); pal.sendToQml({ method: 'updateUsername', params: data }); }