Plumb down change of destination address

This commit is contained in:
Simon Walton 2019-06-27 15:52:39 -07:00
parent 50965f1916
commit 1265531f79
5 changed files with 23 additions and 0 deletions

View file

@ -114,6 +114,7 @@ SendQueue& Connection::getSendQueue() {
QObject::connect(_sendQueue.get(), &SendQueue::packetRetransmitted, this, &Connection::recordRetransmission);
QObject::connect(_sendQueue.get(), &SendQueue::queueInactive, this, &Connection::queueInactive);
QObject::connect(_sendQueue.get(), &SendQueue::timeout, this, &Connection::queueTimeout);
QObject::connect(this, &Connection::destinationAddressChange, _sendQueue.get(), &SendQueue::updateDestinationAddress);
// set defaults on the send queue from our congestion control object and estimatedTimeout()
@ -485,3 +486,10 @@ std::unique_ptr<Packet> PendingReceivedMessage::removeNextPacket() {
}
return std::unique_ptr<Packet>();
}
void Connection::setDestinationAddress(const HifiSockAddr& destination) {
if (_destination != destination) {
_destination = destination;
emit destinationAddressChange(destination);
}
}

View file

@ -76,10 +76,12 @@ public:
void recordSentUnreliablePackets(int wireSize, int payloadSize);
void recordReceivedUnreliablePackets(int wireSize, int payloadSize);
void setDestinationAddress(const HifiSockAddr& destination);
signals:
void packetSent();
void receiverHandshakeRequestComplete(const HifiSockAddr& sockAddr);
void destinationAddressChange(HifiSockAddr currentAddress);
private slots:
void recordSentPackets(int wireSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint);

View file

@ -557,3 +557,7 @@ void SendQueue::deactivate() {
bool SendQueue::isFlowWindowFull() const {
return seqlen(SequenceNumber { (uint32_t) _lastACKSequenceNumber }, _currentSequenceNumber) > _flowWindowSize;
}
void SendQueue::updateDestinationAddress(HifiSockAddr newAddress) {
_destination = newAddress;
}

View file

@ -75,6 +75,7 @@ public slots:
void ack(SequenceNumber ack);
void fastRetransmit(SequenceNumber ack);
void handshakeACK();
void updateDestinationAddress(HifiSockAddr newAddress);
signals:
void packetSent(int wireSize, int payloadSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint);

View file

@ -540,7 +540,15 @@ void Socket::handleStateChanged(QAbstractSocket::SocketState socketState) {
void Socket::handleRemoteAddressChange(HifiSockAddr previousAddress, HifiSockAddr currentAddress) {
Lock connectionsLock(_connectionsHashMutex);
_connectionsHash.erase(currentAddress);
const auto connectionIter = _connectionsHash.find(currentAddress);
if (connectionIter != _connectionsHash.end()) {
auto connection = std::move(connectionIter->second);
_connectionsHash.erase(connectionIter);
connection->setDestinationAddress(currentAddress);
_connectionsHash[currentAddress] = std::move(connection);
}
}
#if (PR_BUILD || DEV_BUILD)