diff options
Diffstat (limited to 'chromium/third_party/nearby/src/connections/implementation/internal_payload.h')
-rw-r--r-- | chromium/third_party/nearby/src/connections/implementation/internal_payload.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/chromium/third_party/nearby/src/connections/implementation/internal_payload.h b/chromium/third_party/nearby/src/connections/implementation/internal_payload.h new file mode 100644 index 00000000000..694e853fb60 --- /dev/null +++ b/chromium/third_party/nearby/src/connections/implementation/internal_payload.h @@ -0,0 +1,106 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef CORE_INTERNAL_INTERNAL_PAYLOAD_H_ +#define CORE_INTERNAL_INTERNAL_PAYLOAD_H_ + +#include <cstdint> + +#include "connections/payload.h" +#include "internal/platform/byte_array.h" +#include "internal/platform/exception.h" + +namespace location { +namespace nearby { +namespace connections { + +// Defines the operations layered atop a Payload, for use inside the +// OfflineServiceController. +// +// <p>There will be an extension of this abstract base class per type of +// Payload. +class InternalPayload { + public: + static constexpr int kIndeterminateSize = -1; + + explicit InternalPayload(Payload payload); + virtual ~InternalPayload() = default; + + Payload ReleasePayload(); + + Payload::Id GetId() const; + + // Returns the PayloadType of the Payload to which this object is bound. + // + // <p>Note that this is supposed to return the type from the OfflineFrame + // proto rather than what is already available via + // Payload::getType(). + // + // @return The PayloadType. + virtual PayloadTransferFrame::PayloadHeader::PayloadType GetType() const = 0; + + // Deduces the total size of the Payload to which this object is bound. + // + // @return The total size, or -1 if it cannot be deduced (for example, when + // dealing with streaming data). + virtual std::int64_t GetTotalSize() const = 0; + + // Breaks off the next chunk from the Payload to which this object is bound. + // + // <p>Used when we have a complete Payload that we want to break into smaller + // byte blobs for sending across a hard boundary (like the other side of + // a Binder, or another device altogether). + // + // @param chunk_size The preferred size of the next chunk. Depending on + // payload type, the provided size may be ignored. + // @return The next chunk from the Payload, or null if we've reached the end. + virtual ByteArray DetachNextChunk(int chunk_size) = 0; + + // Adds the next chunk that comprises the Payload to which this object is + // bound. + // + // <p>Used when we are trying to reconstruct a Payload that lives on the + // other side of a hard boundary (like the other side of a Binder, or another + // device altogether), one byte blob at a time. + // + // @param chunk The next chunk; this being null signals that this is the last + // chunk, which will typically be used as a trigger to perform whatever state + // cleanup may be required by the concrete implementation. + virtual Exception AttachNextChunk(const ByteArray& chunk) = 0; + + // Skips current stream pointer to the offset. + // + // Used when this is a resume outgoing transfer, so we want to skip + // some data until the offset position. + // + // @return the offset really skipped + virtual ExceptionOr<size_t> SkipToOffset(size_t offset) = 0; + + // Cleans up any resources used by this Payload. Called when we're stopping + // early, e.g. after being cancelled or having no more recipients left. + virtual void Close() {} + + protected: + Payload payload_; + // We're caching the payload ID here because the backing payload will be + // released to another owner during the lifetime of an incoming + // InternalPayload. + Payload::Id payload_id_; +}; + +} // namespace connections +} // namespace nearby +} // namespace location + +#endif // CORE_INTERNAL_INTERNAL_PAYLOAD_H_ |