aboutsummaryrefslogtreecommitdiff
path: root/pw_rpc/nanopb/nanopb_method.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pw_rpc/nanopb/nanopb_method.cc')
-rw-r--r--pw_rpc/nanopb/nanopb_method.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/pw_rpc/nanopb/nanopb_method.cc b/pw_rpc/nanopb/nanopb_method.cc
index bc96dc9f9..c86837df8 100644
--- a/pw_rpc/nanopb/nanopb_method.cc
+++ b/pw_rpc/nanopb/nanopb_method.cc
@@ -53,7 +53,7 @@ bool NanopbMethod::DecodeRequest(Channel& channel,
return true;
}
- PW_LOG_WARN("Failed to decode request payload from channel %u",
+ PW_LOG_WARN("Nanopb failed to decode request payload from channel %u",
unsigned(channel.id()));
channel.Send(Packet::ServerError(request, Status::DataLoss()));
return false;
@@ -73,13 +73,23 @@ void NanopbMethod::SendResponse(Channel& channel,
response.set_payload(payload_buffer.first(encoded.size()));
response.set_status(status);
- if (channel.Send(response_buffer, response).ok()) {
+ pw::Status send_status = channel.Send(response_buffer, response);
+ if (send_status.ok()) {
return;
}
- }
- PW_LOG_WARN("Failed to encode response packet for channel %u",
- unsigned(channel.id()));
+ PW_LOG_WARN("Failed to send response packet for channel %u, status %u",
+ unsigned(channel.id()),
+ send_status.code());
+
+ // Re-acquire the buffer to encode an error packet.
+ response_buffer = channel.AcquireBuffer();
+ } else {
+ PW_LOG_WARN(
+ "Nanopb failed to encode response packet for channel %u, status %u",
+ unsigned(channel.id()),
+ encoded.status().code());
+ }
channel.Send(response_buffer,
Packet::ServerError(request, Status::Internal()));
}