aboutsummaryrefslogtreecommitdiff
path: root/pw_transfer/chunk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pw_transfer/chunk.cc')
-rw-r--r--pw_transfer/chunk.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/pw_transfer/chunk.cc b/pw_transfer/chunk.cc
index 86c4a35fb..7066e251e 100644
--- a/pw_transfer/chunk.cc
+++ b/pw_transfer/chunk.cc
@@ -22,6 +22,28 @@ namespace pw::transfer::internal {
namespace ProtoChunk = transfer::Chunk;
+Result<uint32_t> ExtractTransferId(ConstByteSpan message) {
+ protobuf::Decoder decoder(message);
+
+ while (decoder.Next().ok()) {
+ ProtoChunk::Fields field =
+ static_cast<ProtoChunk::Fields>(decoder.FieldNumber());
+
+ switch (field) {
+ case ProtoChunk::Fields::TRANSFER_ID: {
+ uint32_t transfer_id;
+ PW_TRY(decoder.ReadUint32(&transfer_id));
+ return transfer_id;
+ }
+
+ default:
+ continue;
+ }
+ }
+
+ return Status::DataLoss();
+}
+
Status DecodeChunk(ConstByteSpan message, Chunk& chunk) {
protobuf::Decoder decoder(message);
Status status;