From b42ea6f54c76d81e58b152bcbee2fa1042a1716a Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Sun, 7 Jan 2018 18:56:18 +0100 Subject: [PATCH] Use Client_find_by_session() instead of a few open-coded loops. 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 | 10 +++++----- src/messagehandler.c | 45 ++++++++++++++++++-------------------------- 2 files changed, 23 insertions(+), 32 deletions(-) diff --git a/src/client.c b/src/client.c index b69da17..8f5fb73 100644 --- a/src/client.c +++ b/src/client.c @@ -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); } } } diff --git a/src/messagehandler.c b/src/messagehandler.c index 514949f..882409a 100644 --- a/src/messagehandler.c +++ b/src/messagehandler.c @@ -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; -- 2.30.2