summaryrefslogtreecommitdiff
path: root/chromium/third_party/nearby/src/connections/implementation/internal_payload.h
diff options
context:
space:
mode:
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.h106
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_