From 4f33520cba6a38171ed203a071158aa37ddcd325 Mon Sep 17 00:00:00 2001 From: Yat Ho Date: Wed, 12 Jun 2024 10:41:08 +0800 Subject: [PATCH] refactor: don't loop in `tr_handshake::can_read()` --- libtransmission/handshake.cc | 81 ++++++++++++------------------------ 1 file changed, 26 insertions(+), 55 deletions(-) diff --git a/libtransmission/handshake.cc b/libtransmission/handshake.cc index 69914b629..10850291b 100644 --- a/libtransmission/handshake.cc +++ b/libtransmission/handshake.cc @@ -563,63 +563,34 @@ ReadState tr_handshake::can_read(tr_peerIo* peer_io, void* vhandshake, size_t* p tr_logAddTraceHand(handshake, fmt::format("handling can_read; state is [{}]", handshake->state_string())); - ReadState ret = READ_NOW; - while (ret == READ_NOW) + switch (handshake->state()) { - switch (handshake->state()) - { - case State::AwaitingHandshake: - ret = handshake->read_handshake(peer_io); - break; - - case State::AwaitingPeerId: - ret = handshake->read_peer_id(peer_io); - break; - - case State::AwaitingYa: - ret = handshake->read_ya(peer_io); - break; - - case State::AwaitingPadA: - ret = handshake->read_pad_a(peer_io); - break; - - case State::AwaitingCryptoProvide: - ret = handshake->read_crypto_provide(peer_io); - break; - - case State::AwaitingPadC: - ret = handshake->read_pad_c(peer_io); - break; - - case State::AwaitingIa: - ret = handshake->read_ia(peer_io); - break; - - case State::AwaitingYb: - ret = handshake->read_yb(peer_io); - break; - - case State::AwaitingVc: - ret = handshake->read_vc(peer_io); - break; - - case State::AwaitingCryptoSelect: - ret = handshake->read_crypto_select(peer_io); - break; - - case State::AwaitingPadD: - ret = handshake->read_pad_d(peer_io); - break; - - default: - TR_ASSERT_MSG(false, fmt::format("unhandled handshake state {:d}", static_cast(handshake->state()))); - ret = READ_ERR; - break; - } + case State::AwaitingHandshake: + return handshake->read_handshake(peer_io); + case State::AwaitingPeerId: + return handshake->read_peer_id(peer_io); + case State::AwaitingYa: + return handshake->read_ya(peer_io); + case State::AwaitingPadA: + return handshake->read_pad_a(peer_io); + case State::AwaitingCryptoProvide: + return handshake->read_crypto_provide(peer_io); + case State::AwaitingPadC: + return handshake->read_pad_c(peer_io); + case State::AwaitingIa: + return handshake->read_ia(peer_io); + case State::AwaitingYb: + return handshake->read_yb(peer_io); + case State::AwaitingVc: + return handshake->read_vc(peer_io); + case State::AwaitingCryptoSelect: + return handshake->read_crypto_select(peer_io); + case State::AwaitingPadD: + return handshake->read_pad_d(peer_io); + default: + TR_ASSERT_MSG(false, fmt::format("unhandled handshake state {:d}", static_cast(handshake->state()))); + return READ_ERR; } - - return ret; } void tr_handshake::on_error(tr_peerIo* io, tr_error const& error, void* vhandshake)