diff options
Diffstat (limited to 'pw_rpc/nanopb/nanopb_method.cc')
-rw-r--r-- | pw_rpc/nanopb/nanopb_method.cc | 20 |
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())); } |