diff options
Diffstat (limited to 'pw_transfer/chunk.cc')
-rw-r--r-- | pw_transfer/chunk.cc | 22 |
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; |