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()
231 : m_filehandle(nullptr), m_baseOffset(0), m_length(0), m_offset(0)
237 void Rewind()
override { this->m_offset = 0; }
239 int64_t
Length()
const override {
return this->m_length; }
251#if defined(AZ_PLATFORM_WINDOWS)
253#elif defined(AZ_PLATFORM_POSIX)
254 int m_fileDescriptor;
257 std::unique_ptr<_internal::RandomAccessFileBodyStream> m_randomAccessFileBodyStream;
294 int64_t m_bytesTransferred;
295 std::function<void(int64_t bytesTransferred)> m_callback;
313 std::function<
void(int64_t bytesTransferred)> callback);
#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 ...
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...
A concrete implementation of Azure::Core::IO::BodyStream used for reading data from a file.
Definition body_stream.hpp:248
int64_t Length() const override
Get the length of the data.
FileBodyStream(const std::string &filename)
Constructs FileBodyStream from a file name.
~FileBodyStream() override
Closes the file and cleans up any resources.
void Rewind() override
Rewind seeks the current stream to the start of the file.
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:291
ProgressBodyStream(BodyStream &bodyStream, std::function< void(int64_t bytesTransferred)> callback)
Constructs ProgressBodyStream from a BodyStream.
int64_t Length() const override
Get the length of the data.
void Rewind() override
Rewind seeks the current stream to the beginning.
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