identd: Rework lowestSocketId handling
[quassel.git] / src / core / identserver.cpp
index cb72a25..ea1295e 100644 (file)
@@ -120,7 +120,7 @@ void IdentServer::respond() {
         responseUnavailable(request);
     } else if (responseAvailable(request)) {
         // success
-    } else if (hasSocketsBelowId(transactionId)) {
+    } else if (lowestSocketId() < transactionId) {
         _requestQueue.emplace_back(request);
     } else {
         responseUnavailable(request);
@@ -128,23 +128,18 @@ void IdentServer::respond() {
 }
 
 bool IdentServer::responseAvailable(Request request) {
-    QString user;
-    bool success = true;
-    if (_connections.contains(request.localPort)) {
-        user = _connections[request.localPort];
-    } else {
-        success = false;
+    if (!_connections.contains(request.localPort)) {
+        return false;
     }
 
-    QString data;
-    if (success) {
-        data += request.query + " : USERID : Quassel : " + user + "\r\n";
+    QString user = _connections[request.localPort];
+    QString data = request.query + " : USERID : Quassel : " + user + "\r\n";
 
-        request.socket->write(data.toUtf8());
-        request.socket->flush();
-        request.socket->close();
-    }
-    return success;
+    request.socket->write(data.toUtf8());
+    request.socket->flush();
+    request.socket->close();
+
+    return true;
 }
 
 void IdentServer::responseUnavailable(Request request) {
@@ -187,10 +182,12 @@ qint64 IdentServer::addWaitingSocket() {
     return newSocketId;
 }
 
-bool IdentServer::hasSocketsBelowId(qint64 id) {
-    return std::any_of(_waiting.begin(), _waiting.end(), [=](qint64 socketId) {
-        return socketId <= id;
-    });
+qint64 IdentServer::lowestSocketId() {
+    if (_waiting.empty()) {
+        return std::numeric_limits<qint64>::max();
+    }
+
+    return _waiting.front();
 }
 
 void IdentServer::removeWaitingSocket(qint64 socketId) {
@@ -198,21 +195,15 @@ void IdentServer::removeWaitingSocket(qint64 socketId) {
 }
 
 void IdentServer::processWaiting(qint64 socketId) {
-    qint64 lowestSocketId = std::numeric_limits<qint64 >::max();
-    for (qint64 id : _waiting) {
-        if (id < lowestSocketId) {
-            lowestSocketId = id;
-        }
-    }
     removeWaitingSocket(socketId);
     _requestQueue.remove_if([=](Request request) {
-        if (request.transactionId < lowestSocketId) {
-            responseUnavailable(request);
+        if (socketId < request.transactionId && responseAvailable(request)) {
             return true;
-        } else if (request.transactionId > socketId) {
-            return responseAvailable(request);
-        } else {
+        } else if (lowestSocketId() < request.transactionId) {
             return false;
+        } else {
+            responseUnavailable(request);
+            return true;
         }
     });
 }