13#if defined(AZ_PLATFORM_POSIX)
27namespace Azure {
namespace Core {
namespace IO {
68 "The specified BodyStream doesn't support Rewind which is required to guarantee fault "
69 "tolerance when retrying any operation. Consider creating a MemoryBodyStream or "
70 "FileBodyStream, which are rewindable.");
91 return OnRead(buffer, count, context);
125 const uint8_t* m_data;
152 explicit MemoryBodyStream(
const uint8_t* data,
size_t length) : m_data(data), m_length(length)
157 int64_t
Length()
const override {
return this->m_length; }
163 namespace _internal {
168 class RandomAccessFileBodyStream final :
public BodyStream {
171#if defined(AZ_PLATFORM_POSIX)
172 int m_fileDescriptor;
173#elif defined(AZ_PLATFORM_WINDOWS)
176 int64_t m_baseOffset;
184#if defined(AZ_PLATFORM_POSIX)
199 RandomAccessFileBodyStream(
int fileDescriptor, int64_t offset, int64_t length)
200 : m_fileDescriptor(fileDescriptor), m_baseOffset(offset), m_length(length), m_offset(0)
202 AZURE_ASSERT(fileDescriptor >= 0 && offset >= 0 && length >= 0);
205 RandomAccessFileBodyStream() : m_fileDescriptor(0), m_baseOffset(0), m_length(0), m_offset(0)
209#elif defined(AZ_PLATFORM_WINDOWS)
224 RandomAccessFileBodyStream(
void* fileHandle, int64_t offset, int64_t length)
225 : m_filehandle(fileHandle), m_baseOffset(offset), m_length(length), m_offset(0)
230 RandomAccessFileBodyStream() : m_filehandle(NULL), m_baseOffset(0), m_length(0), m_offset(0)
236 void Rewind()
override { this->m_offset = 0; }
238 int64_t
Length()
const override {
return this->m_length; }
250#if defined(AZ_PLATFORM_WINDOWS)
252#elif defined(AZ_PLATFORM_POSIX)
253 int m_fileDescriptor;
256 std::unique_ptr<_internal::RandomAccessFileBodyStream> m_randomAccessFileBodyStream;
283 int64_t
Length()
const override;
293 int64_t m_bytesTransferred;
294 std::function<void(int64_t bytesTransferred)> m_callback;
312 std::function<
void(int64_t bytesTransferred)> callback);
317 int64_t
Length()
const override;
#define AZURE_ASSERT(exp)
Azure specific assert macro.
Definition azure_assert.hpp:51
#define AZURE_ASSERT_MSG(exp, msg)
Azure specific assert macro with message.
Definition azure_assert.hpp:53
A context is a node within a unidirectional tree that represents deadlines and key/value pairs.
Definition context.hpp:72
void ThrowIfCancelled() const
Throws if the context is cancelled.
Definition context.hpp:364
Used to read data to/from a service.
Definition body_stream.hpp:32
virtual int64_t Length() const =0
Get the length of the data.
virtual void Rewind()
Resets the stream back to the beginning (for retries).
Definition body_stream.hpp:64
virtual ~BodyStream()=default
Destructs BodyStream.
std::vector< uint8_t > ReadToEnd(Azure::Core::Context const &context=Azure::Core::Context())
Read Azure::Core::IO::BodyStream until the stream is read to end, allocating memory for the entirety ...
Definition body_stream.cpp:63
size_t Read(uint8_t *buffer, size_t count, Azure::Core::Context const &context=Azure::Core::Context())
Read portion of data into a buffer.
Definition body_stream.hpp:83
size_t ReadToCount(uint8_t *buffer, size_t count, Azure::Core::Context const &context=Azure::Core::Context())
Read Azure::Core::IO::BodyStream into a buffer until the buffer is filled, or until the stream is rea...
Definition body_stream.cpp:45
A concrete implementation of Azure::Core::IO::BodyStream used for reading data from a file.
Definition body_stream.hpp:247
int64_t Length() const override
Get the length of the data.
Definition body_stream.cpp:194
void Rewind() override
Rewind seeks the current stream to the start of the file.
Definition body_stream.cpp:192
~FileBodyStream()
Closes the file and cleans up any resources.
Definition body_stream.cpp:170
Azure::Core::IO::BodyStream providing data from an initialized memory buffer.
Definition body_stream.hpp:123
MemoryBodyStream(std::vector< uint8_t > const &buffer)
Construct using vector of bytes.
Definition body_stream.hpp:140
MemoryBodyStream(const uint8_t *data, size_t length)
Construct using buffer pointer and its size.
Definition body_stream.hpp:152
void Rewind() override
Rewind seeks the current stream to the start of the buffer.
Definition body_stream.hpp:160
int64_t Length() const override
Get the length of the data.
Definition body_stream.hpp:157
A concrete implementation of Azure::Core::IO::BodyStream that wraps another stream and reports progre...
Definition body_stream.hpp:290
int64_t Length() const override
Get the length of the data.
Definition body_stream.cpp:222
void Rewind() override
Rewind seeks the current stream to the beginning.
Definition body_stream.cpp:203
Context for canceling long running operations.
Compute the hash value for the input binary data, using SHA256, SHA384 and SHA512.
Definition azure_assert.hpp:57