Use Client_find_by_session() instead of a few open-coded loops. master
authorTilman Sauerbeck <tilman@code-monkey.de>
Sun, 7 Jan 2018 17:56:18 +0000 (18:56 +0100)
committerTilman Sauerbeck <tilman@code-monkey.de>
Sun, 7 Jan 2018 17:56:18 +0000 (18:56 +0100)
This slightly changes the logic in a couple of places where we
previously only checked a client's session ID after we verified
that the client was authenticated. I don't think this change actually
matters though because session IDs are unique.

src/client.c
src/messagehandler.c

index b69da172cc51324bf87701bbe698d035fa321b55..8f5fb7316b3e365a6afdf5ee51581eadab9ef025 100644 (file)
@@ -1001,11 +1001,11 @@ int Client_voiceMsg(client_t *client, uint8_t *data, int len)
                        client_t *c = NULL;
                        buffer[0] = (uint8_t) (type | 2);
                        Log_debug("Whisper session %d", vt->sessions[i]);
-                       while (Client_iterate(&c) != NULL) {
-                               if (c->sessionId == vt->sessions[i]) {
-                                       Client_send_voice(client, c, buffer, pds->offset + 1, poslen);
-                                       break;
-                               }
+
+                       c = Client_find_by_session(vt->sessions[i]);
+
+                       if (c != NULL) {
+                               Client_send_voice(client, c, buffer, pds->offset + 1, poslen);
                        }
                }
        }
index 514949f7ba9f64fcd981c59d82b796680d309425..882409ae75e8d25503bec0c98c3a179d2af268e4 100644 (file)
@@ -438,10 +438,8 @@ void Mh_handle_message(client_t *client, message_t *msg)
                        break;
                }
                if (msg->payload.userState->has_session && msg->payload.userState->session != client->sessionId) {
-                       while (Client_iterate(&target) != NULL) {
-                               if (target->sessionId == msg->payload.userState->session)
-                                       break;
-                       }
+                       target = Client_find_by_session(msg->payload.userState->session);
+
                        if (target == NULL) {
                                Log_warn("Client with sessionID %d not found", msg->payload.userState->session);
                                break;
@@ -609,21 +607,15 @@ void Mh_handle_message(client_t *client, message_t *msg)
                        int i;
                        client_t *itr;
                        for (i = 0; i < msg->payload.textMessage->n_session; i++) {
-                               itr = NULL;
-                               while (Client_iterate(&itr) != NULL) {
-                                       if (!IS_AUTH(itr))
-                                               continue;
-                                       if (itr->sessionId == msg->payload.textMessage->session[i]) {
-                                               if (!itr->deaf && !itr->self_deaf) {
-                                                       Msg_inc_ref(msg);
-                                                       Client_send_message(itr, msg);
-                                                       Log_debug("Text message to session ID %d", itr->sessionId);
-                                               }
-                                               break;
-                                       }
-                               }
+                               itr = Client_find_by_session(msg->payload.textMessage->session[i]);
+
                                if (itr == NULL)
                                        Log_warn("TextMessage: Session ID %d not found", msg->payload.textMessage->session[i]);
+                               else if (IS_AUTH(itr) && !itr->deaf && !itr->self_deaf) {
+                                       Msg_inc_ref(msg);
+                                       Client_send_message(itr, msg);
+                                       Log_debug("Text message to session ID %d", itr->sessionId);
+                               }
                        } /* for */
                }
                break;
@@ -798,15 +790,15 @@ void Mh_handle_message(client_t *client, message_t *msg)
 
                if (!msg->payload.userStats->has_session)
                        sendPermissionDenied(client, "Not supported by uMurmur");
-               while (Client_iterate(&target) != NULL) {
-                       if (!IS_AUTH(target))
-                               continue;
-                       if (target->sessionId == msg->payload.userStats->session)
-                               break;
-               }
+
+               target = Client_find_by_session(msg->payload.userStats->session);
+
                if (!target) /* Not found */
                        break;
 
+               if (!IS_AUTH(target)) /* Not authenticated. */
+                       break;
+
                /*
                 * Differences from Murmur:
                 * o Ignoring certificates intentionally
@@ -905,10 +897,9 @@ void Mh_handle_message(client_t *client, message_t *msg)
                        sendPermissionDenied(client, "Permission denied");
                        break;
                }
-               while (Client_iterate(&target) != NULL) {
-                       if (target->sessionId == msg->payload.userRemove->session)
-                               break;
-               }
+
+               target = Client_find_by_session(msg->payload.userRemove->session);
+
                if (target == NULL) {
                        Log_warn("Client with sessionId %d not found", msg->payload.userRemove->session);
                        break;