diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cb0d78ce26..3775f2f8b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [7.0.18] + +[7.0.18]: https://github.com/microsoft/CCF/releases/tag/ccf-7.0.18 + +### Removed + +- Nodes no longer accept forwarded RPC requests and responses in the legacy v1 and v2 wire formats. All supported releases have emitted the v3 format since 4.0, so mixed-version networks are unaffected (#8426). + ## [7.0.17] [7.0.17]: https://github.com/microsoft/CCF/releases/tag/ccf-7.0.17 diff --git a/python/pyproject.toml b/python/pyproject.toml index 31ebba671f9..9c5b2e3da28 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "ccf" -version = "7.0.17" +version = "7.0.18" authors = [ { name="CCF Team", email="CCF-Sec@microsoft.com" }, ] diff --git a/src/node/node_types.h b/src/node/node_types.h index 7f8c713f3a7..207c63488fd 100644 --- a/src/node/node_types.h +++ b/src/node/node_types.h @@ -38,11 +38,13 @@ namespace ccf // Types of frontend messages enum ForwardedMsg : Node2NodeMsg { + // No longer accepted on receive: all supported peers emit at least v3. forwarded_cmd_v1 = 0, forwarded_response_v1, // Includes a command_id, so that forwarded requests and responses can be - // precisely correlated. Supported since 2.0.8, emitted since 3.0.0 + // precisely correlated. Supported since 2.0.8, emitted since 3.0.0. + // No longer accepted on receive: all supported peers emit at least v3. forwarded_cmd_v2, forwarded_response_v2, diff --git a/src/node/rpc/forwarder.h b/src/node/rpc/forwarder.h index 69f27675c21..f1072459996 100644 --- a/src/node/rpc/forwarder.h +++ b/src/node/rpc/forwarder.h @@ -299,65 +299,6 @@ namespace ccf switch (forwarded_msg) { - case ForwardedMsg::forwarded_cmd_v1: - { - auto ctx = - recv_forwarded_command(from, data, size); - - auto fwd_handler = get_forwarder_handler(ctx); - if (fwd_handler == nullptr) - { - return; - } - - // frame_format is deliberately unset, the forwarder ignores it - // and expects the same format they forwarded. - ForwardedHeader_v1 response_header{ - ForwardedMsg::forwarded_response_v1}; - - LOG_DEBUG_FMT("Sending forwarded response to {}", from); - fwd_handler->process_forwarded(ctx); - - send_forwarded_response( - ctx->get_session_context()->client_session_id, - from, - response_header, - ctx->serialise_response()); - break; - } - - case ForwardedMsg::forwarded_cmd_v2: - { - auto ctx = - recv_forwarded_command(from, data, size); - - auto fwd_handler = get_forwarder_handler(ctx); - if (fwd_handler == nullptr) - { - return; - } - - const auto forwarded_hdr_v2 = - serialized::peek(data, size); - const auto cmd_id = forwarded_hdr_v2.id; - - fwd_handler->process_forwarded(ctx); - - // frame_format is deliberately unset, the forwarder ignores it - // and expects the same format they forwarded. - ForwardedHeader_v2 response_header{ - {ForwardedMsg::forwarded_response_v2, {}}, cmd_id}; - - LOG_DEBUG_FMT("Sending forwarded response to {}", from); - - send_forwarded_response( - ctx->get_session_context()->client_session_id, - from, - response_header, - ctx->serialise_response()); - break; - } - case ForwardedMsg::forwarded_cmd_v3: { auto ctx = recv_forwarded_command( @@ -391,7 +332,6 @@ namespace ccf } case ForwardedMsg::forwarded_response_v3: - case ForwardedMsg::forwarded_response_v2: { const auto forwarded_hdr_v2 = serialized::peek(data, size); @@ -414,27 +354,9 @@ namespace ccf cmd_id); return; } - // Deliberate fall-through - } - case ForwardedMsg::forwarded_response_v1: - { - std::optional rep; - if (forwarded_msg == ForwardedMsg::forwarded_response_v3) - { - rep = recv_forwarded_response( - from, data, size); - } - else if (forwarded_msg == ForwardedMsg::forwarded_response_v2) - { - rep = - recv_forwarded_response(from, data, size); - } - else - { - rep = - recv_forwarded_response(from, data, size); - } + auto rep = recv_forwarded_response( + from, data, size); if (!rep.has_value()) { @@ -459,6 +381,18 @@ namespace ccf break; } + case ForwardedMsg::forwarded_cmd_v1: + case ForwardedMsg::forwarded_response_v1: + case ForwardedMsg::forwarded_cmd_v2: + case ForwardedMsg::forwarded_response_v2: + { + LOG_FAIL_FMT( + "Forwarded msg type {} is no longer supported on receive, " + "dropping message", + (size_t)forwarded_msg); + break; + } + default: { LOG_FAIL_FMT("Unknown frontend msg type: {}", forwarded_msg);