diff options
Diffstat (limited to 'pw_transfer/transfer.cc')
-rw-r--r-- | pw_transfer/transfer.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/pw_transfer/transfer.cc b/pw_transfer/transfer.cc index 722ed8217..eb04aeeb1 100644 --- a/pw_transfer/transfer.cc +++ b/pw_transfer/transfer.cc @@ -30,11 +30,23 @@ void TransferService::HandleChunk(ConstByteSpan message, } if (chunk->IsInitialChunk()) { - uint32_t session_id = - chunk->is_legacy() ? chunk->session_id() : GenerateNewSessionId(); uint32_t resource_id = chunk->is_legacy() ? chunk->session_id() : chunk->resource_id().value(); + uint32_t session_id; + if (chunk->is_legacy()) { + session_id = chunk->session_id(); + } else if (chunk->desired_session_id().has_value()) { + session_id = chunk->desired_session_id().value(); + } else { + // Non-legacy start chunks are required to use desired_session_id. + thread_.SendServerStatus(type, + chunk->session_id(), + chunk->protocol_version(), + Status::DataLoss()); + return; + } + thread_.StartServerTransfer(type, chunk->protocol_version(), session_id, |