Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" },
]
Expand Down
4 changes: 3 additions & 1 deletion src/node/node_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,

Expand Down
94 changes: 14 additions & 80 deletions src/node/rpc/forwarder.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,65 +299,6 @@ namespace ccf

switch (forwarded_msg)
{
case ForwardedMsg::forwarded_cmd_v1:
{
auto ctx =
recv_forwarded_command<ForwardedHeader_v1>(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<ForwardedHeader_v2>(from, data, size);

auto fwd_handler = get_forwarder_handler(ctx);
if (fwd_handler == nullptr)
{
return;
}

const auto forwarded_hdr_v2 =
serialized::peek<ForwardedHeader_v2>(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<ForwardedCommandHeader_v3>(
Expand Down Expand Up @@ -391,7 +332,6 @@ namespace ccf
}

case ForwardedMsg::forwarded_response_v3:
case ForwardedMsg::forwarded_response_v2:
{
const auto forwarded_hdr_v2 =
serialized::peek<ForwardedHeader_v2>(data, size);
Expand All @@ -414,27 +354,9 @@ namespace ccf
cmd_id);
return;
}
// Deliberate fall-through
}

case ForwardedMsg::forwarded_response_v1:
{
std::optional<ForwardedResponseResult> rep;
if (forwarded_msg == ForwardedMsg::forwarded_response_v3)
{
rep = recv_forwarded_response<ForwardedResponseHeader_v3>(
from, data, size);
}
else if (forwarded_msg == ForwardedMsg::forwarded_response_v2)
{
rep =
recv_forwarded_response<ForwardedHeader_v2>(from, data, size);
}
else
{
rep =
recv_forwarded_response<ForwardedHeader_v1>(from, data, size);
}
auto rep = recv_forwarded_response<ForwardedResponseHeader_v3>(
from, data, size);

if (!rep.has_value())
{
Expand All @@ -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:
{
Comment thread
achamayou marked this conversation as resolved.
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);
Expand Down