From cffeece08e538ad094dc44bc90b430b01481ef69 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 28 Mar 2016 10:51:15 -0700 Subject: [PATCH] use time since last packet as short-term status check --- ice-server/src/IceServer.cpp | 13 +++++++++++-- ice-server/src/IceServer.h | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index f9d244befa..86b400fe81 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -67,7 +67,9 @@ bool IceServer::packetVersionMatch(const udt::Packet& packet) { } void IceServer::processPacket(std::unique_ptr packet) { - + + _lastPacketTimestamp = QDateTime::currentMSecsSinceEpoch(); + auto nlPacket = NLPacket::fromBase(std::move(packet)); // make sure that this packet at least looks like something we can read @@ -303,7 +305,14 @@ bool IceServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url, b if (connection->requestOperation() == QNetworkAccessManager::GetOperation) { if (url.path() == "/status") { - connection->respond(HTTPConnection::StatusCode200, QByteArray::number(_activePeers.size())); + // figure out if we respond with 0 (we're good) or 1 (we think we're in trouble) + + const quint64 MAX_PACKET_GAP_MS_FOR_STUCK_SOCKET = 10 * 1000; + + int statusNumber = (QDateTime::currentMSecsSinceEpoch() - _lastPacketTimestamp > MAX_PACKET_GAP_MS_FOR_STUCK_SOCKET) + ? 1 : 0; + + connection->respond(HTTPConnection::StatusCode200, QByteArray::number(statusNumber)); } } return true; diff --git a/ice-server/src/IceServer.h b/ice-server/src/IceServer.h index ebf1a9ac52..6cc33fd8fc 100644 --- a/ice-server/src/IceServer.h +++ b/ice-server/src/IceServer.h @@ -57,6 +57,8 @@ private: using RSAUniquePtr = std::unique_ptr>; using DomainPublicKeyHash = std::unordered_map; DomainPublicKeyHash _domainPublicKeys; + + quint64 _lastPacketTimestamp; }; #endif // hifi_IceServer_h