1*61c4878aSAndroid Build Coastguard Worker // Copyright 2022 The Pigweed Authors 2*61c4878aSAndroid Build Coastguard Worker // 3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of 5*61c4878aSAndroid Build Coastguard Worker // the License at 6*61c4878aSAndroid Build Coastguard Worker // 7*61c4878aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0 8*61c4878aSAndroid Build Coastguard Worker // 9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under 13*61c4878aSAndroid Build Coastguard Worker // the License. 14*61c4878aSAndroid Build Coastguard Worker 15*61c4878aSAndroid Build Coastguard Worker #define PW_LOG_MODULE_NAME "TRN" 16*61c4878aSAndroid Build Coastguard Worker #define PW_LOG_LEVEL PW_TRANSFER_CONFIG_LOG_LEVEL 17*61c4878aSAndroid Build Coastguard Worker 18*61c4878aSAndroid Build Coastguard Worker #include "pw_transfer/internal/server_context.h" 19*61c4878aSAndroid Build Coastguard Worker 20*61c4878aSAndroid Build Coastguard Worker #include "pw_assert/check.h" 21*61c4878aSAndroid Build Coastguard Worker #include "pw_log/log.h" 22*61c4878aSAndroid Build Coastguard Worker #include "pw_status/try.h" 23*61c4878aSAndroid Build Coastguard Worker #include "pw_transfer/internal/chunk.h" 24*61c4878aSAndroid Build Coastguard Worker #include "pw_transfer/internal/config.h" 25*61c4878aSAndroid Build Coastguard Worker #include "pw_transfer/transfer.pwpb.h" 26*61c4878aSAndroid Build Coastguard Worker #include "pw_varint/varint.h" 27*61c4878aSAndroid Build Coastguard Worker 28*61c4878aSAndroid Build Coastguard Worker namespace pw::transfer::internal { 29*61c4878aSAndroid Build Coastguard Worker FinalCleanup(const Status status)30*61c4878aSAndroid Build Coastguard WorkerStatus ServerContext::FinalCleanup(const Status status) { 31*61c4878aSAndroid Build Coastguard Worker PW_DCHECK(active()); 32*61c4878aSAndroid Build Coastguard Worker 33*61c4878aSAndroid Build Coastguard Worker // If no handler is set, then the Prepare call failed. Nothing to do. 34*61c4878aSAndroid Build Coastguard Worker if (handler_ == nullptr) { 35*61c4878aSAndroid Build Coastguard Worker return OkStatus(); 36*61c4878aSAndroid Build Coastguard Worker } 37*61c4878aSAndroid Build Coastguard Worker 38*61c4878aSAndroid Build Coastguard Worker Handler& handler = *handler_; 39*61c4878aSAndroid Build Coastguard Worker handler_ = nullptr; 40*61c4878aSAndroid Build Coastguard Worker 41*61c4878aSAndroid Build Coastguard Worker if (type() == TransferType::kTransmit) { 42*61c4878aSAndroid Build Coastguard Worker handler.FinalizeRead(status); 43*61c4878aSAndroid Build Coastguard Worker return OkStatus(); 44*61c4878aSAndroid Build Coastguard Worker } 45*61c4878aSAndroid Build Coastguard Worker 46*61c4878aSAndroid Build Coastguard Worker if (Status finalized = handler.FinalizeWrite(status); !finalized.ok()) { 47*61c4878aSAndroid Build Coastguard Worker PW_LOG_ERROR( 48*61c4878aSAndroid Build Coastguard Worker "FinalizeWrite() for transfer %u failed with status %u; aborting with " 49*61c4878aSAndroid Build Coastguard Worker "DATA_LOSS", 50*61c4878aSAndroid Build Coastguard Worker static_cast<unsigned>(handler.id()), 51*61c4878aSAndroid Build Coastguard Worker static_cast<int>(finalized.code())); 52*61c4878aSAndroid Build Coastguard Worker return Status::DataLoss(); 53*61c4878aSAndroid Build Coastguard Worker } 54*61c4878aSAndroid Build Coastguard Worker 55*61c4878aSAndroid Build Coastguard Worker return OkStatus(); 56*61c4878aSAndroid Build Coastguard Worker } 57*61c4878aSAndroid Build Coastguard Worker SeekReader(uint32_t offset)58*61c4878aSAndroid Build Coastguard WorkerStatus ServerContext::SeekReader(uint32_t offset) { 59*61c4878aSAndroid Build Coastguard Worker return reader().Seek(offset); 60*61c4878aSAndroid Build Coastguard Worker } 61*61c4878aSAndroid Build Coastguard Worker 62*61c4878aSAndroid Build Coastguard Worker } // namespace pw::transfer::internal 63