From 677481c79634c3c065fcb2bc3a6d8357d282c817 Mon Sep 17 00:00:00 2001 From: Vinay Narahari Date: Mon, 1 Jun 2026 10:42:15 -0400 Subject: [PATCH 1/2] Add aws-cpp-sdk-s3-transfer package scaffolding for Transfer Manager 2.0 --- cmake/sdks.cmake | 2 +- cmake/sdksCommon.cmake | 2 + src/aws-cpp-sdk-s3-transfer/CMakeLists.txt | 53 +++++++++++++++++++ .../include/aws/s3-transfer/DownloadRequest.h | 18 +++++++ .../aws/s3-transfer/DownloadResponse.h | 18 +++++++ .../aws/s3-transfer/ProgressListener.h | 18 +++++++ .../aws/s3-transfer/ProgressSnapshot.h | 18 +++++++ .../aws/s3-transfer/S3TransferManager.h | 18 +++++++ .../S3TransferManagerConfiguration.h | 18 +++++++ .../aws/s3-transfer/S3Transfer_EXPORTS.h | 28 ++++++++++ .../include/aws/s3-transfer/UploadRequest.h | 18 +++++++ .../include/aws/s3-transfer/UploadResponse.h | 18 +++++++ .../source/s3-transfer/S3TransferManager.cpp | 15 ++++++ 13 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 src/aws-cpp-sdk-s3-transfer/CMakeLists.txt create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManagerConfiguration.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3Transfer_EXPORTS.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h create mode 100644 src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp diff --git a/cmake/sdks.cmake b/cmake/sdks.cmake index 28c0db501f06..4182fcc0f661 100644 --- a/cmake/sdks.cmake +++ b/cmake/sdks.cmake @@ -2,7 +2,7 @@ include(sdksCommon) set(SDK_DEPENDENCY_BUILD_LIST "") -set(NON_GENERATED_CLIENT_LIST access-management text-to-speech core queues s3-encryption identity-management transfer) ## Manually generated code with a name mimicking client name +set(NON_GENERATED_CLIENT_LIST access-management text-to-speech core queues s3-encryption identity-management transfer s3-transfer) ## Manually generated code with a name mimicking client name if(REGENERATE_CLIENTS OR REGENERATE_DEFAULTS) message(STATUS "Checking for SDK generation requirements") diff --git a/cmake/sdksCommon.cmake b/cmake/sdksCommon.cmake index a0220c83188f..fc3bcc180234 100644 --- a/cmake/sdksCommon.cmake +++ b/cmake/sdksCommon.cmake @@ -80,6 +80,7 @@ list(APPEND HIGH_LEVEL_SDK_LIST "access-management") list(APPEND HIGH_LEVEL_SDK_LIST "identity-management") list(APPEND HIGH_LEVEL_SDK_LIST "queues") list(APPEND HIGH_LEVEL_SDK_LIST "transfer") +list(APPEND HIGH_LEVEL_SDK_LIST "s3-transfer") list(APPEND HIGH_LEVEL_SDK_LIST "s3-encryption") list(APPEND HIGH_LEVEL_SDK_LIST "text-to-speech") @@ -141,6 +142,7 @@ list(APPEND SDK_DEPENDENCY_LIST "queues:sqs,core") list(APPEND SDK_DEPENDENCY_LIST "s3-encryption:s3,kms,core") list(APPEND SDK_DEPENDENCY_LIST "text-to-speech:polly,core") list(APPEND SDK_DEPENDENCY_LIST "transfer:s3,core") +list(APPEND SDK_DEPENDENCY_LIST "s3-transfer:s3,core") set(TEST_DEPENDENCY_LIST "") list(APPEND TEST_DEPENDENCY_LIST "cognito-identity:access-management,iam,core") diff --git a/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt b/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt new file mode 100644 index 000000000000..b4c19b6d5b2a --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt @@ -0,0 +1,53 @@ +add_project(aws-cpp-sdk-s3-transfer + "High-level CRT-backed C++ SDK for file transfer to/from AWS S3" + aws-cpp-sdk-s3 + aws-cpp-sdk-core) + +file( GLOB S3_TRANSFER_HEADERS "include/aws/s3-transfer/*.h" ) + +file( GLOB S3_TRANSFER_SOURCE "source/s3-transfer/*.cpp" ) + +if(MSVC) + source_group("Header Files\\aws\\s3-transfer" FILES ${S3_TRANSFER_HEADERS}) + source_group("Source Files\\s3-transfer" FILES ${S3_TRANSFER_SOURCE}) +endif() + +file(GLOB ALL_S3_TRANSFER_HEADERS + ${S3_TRANSFER_HEADERS} +) + +file(GLOB ALL_S3_TRANSFER_SOURCE + ${S3_TRANSFER_SOURCE} +) + +file(GLOB ALL_S3_TRANSFER + ${ALL_S3_TRANSFER_HEADERS} + ${ALL_S3_TRANSFER_SOURCE} +) + +set(S3_TRANSFER_INCLUDES + "${CMAKE_CURRENT_SOURCE_DIR}/include/" +) + +include_directories(${S3_TRANSFER_INCLUDES}) + +if(USE_WINDOWS_DLL_SEMANTICS AND BUILD_SHARED_LIBS) + add_definitions("-DAWS_S3_TRANSFER_EXPORTS") +endif() + +add_library(${PROJECT_NAME} ${ALL_S3_TRANSFER}) +add_library(AWS::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) + +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $) +target_link_libraries(${PROJECT_NAME} PRIVATE ${PLATFORM_DEP_LIBS} ${PROJECT_LIBS}) + +set_compiler_flags(${PROJECT_NAME}) +set_compiler_warnings(${PROJECT_NAME}) + +setup_install() + +install (FILES ${ALL_S3_TRANSFER_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/s3-transfer) + +do_packaging() diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h new file mode 100644 index 000000000000..15d6e4e2bece --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API DownloadRequest { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h new file mode 100644 index 000000000000..7afd22a1b130 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API DownloadResponse { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h new file mode 100644 index 000000000000..827edfdd5b09 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API ProgressListener { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h new file mode 100644 index 000000000000..699c89d5a571 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API ProgressSnapshot { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h new file mode 100644 index 000000000000..27a5e703bea0 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API S3TransferManager { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManagerConfiguration.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManagerConfiguration.h new file mode 100644 index 000000000000..bb80deb4686e --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManagerConfiguration.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API S3TransferManagerConfiguration { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3Transfer_EXPORTS.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3Transfer_EXPORTS.h new file mode 100644 index 000000000000..fe7636bb9067 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3Transfer_EXPORTS.h @@ -0,0 +1,28 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once + +#ifdef _MSC_VER + //disable windows complaining about max template size. + #pragma warning (disable : 4503) +#endif + +#if defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32) + #ifdef _MSC_VER + #pragma warning(disable : 4251) + #endif // _MSC_VER + + #ifdef USE_IMPORT_EXPORT + #ifdef AWS_S3_TRANSFER_EXPORTS + #define AWS_S3_TRANSFER_API __declspec(dllexport) + #else + #define AWS_S3_TRANSFER_API __declspec(dllimport) + #endif // AWS_S3_TRANSFER_EXPORTS + #else // USE_IMPORT_EXPORT + #define AWS_S3_TRANSFER_API + #endif // USE_IMPORT_EXPORT +#else // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32) + #define AWS_S3_TRANSFER_API +#endif // defined (USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32) diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h new file mode 100644 index 000000000000..56bba8475ce3 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API UploadResponse { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h new file mode 100644 index 000000000000..56bba8475ce3 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h @@ -0,0 +1,18 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + + +namespace Aws { + namespace S3 { + namespace Transfer { + class AWS_S3_TRANSFER_API UploadResponse { + //need to fill in class defintion later + }; + } + } +} + diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp new file mode 100644 index 000000000000..992407a5caf3 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp @@ -0,0 +1,15 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +* SPDX-License-Identifier: Apache-2.0. +*/ + +#include + + +namespace Aws { + namespace S3{ + namespace Transfer { + + } + } +} From 3dd9f19dc8c39bbd20a60a954be7519660497bed Mon Sep 17 00:00:00 2001 From: Vinay Narahari Date: Wed, 10 Jun 2026 10:47:26 -0400 Subject: [PATCH 2/2] Add SEP-required public API types for Transfer Manager 2.0 --- src/aws-cpp-sdk-s3-transfer/CMakeLists.txt | 10 +- .../include/aws/s3-transfer/DownloadHandle.h | 44 +++++++++ .../s3-transfer/DownloadProgressListener.h | 48 ++++++++++ .../s3-transfer/DownloadProgressSnapshot.h | 47 ++++++++++ .../include/aws/s3-transfer/DownloadRequest.h | 94 +++++++++++++++++-- .../aws/s3-transfer/DownloadResponse.h | 41 ++++++-- .../aws/s3-transfer/ProgressListener.h | 18 ---- .../aws/s3-transfer/ProgressSnapshot.h | 18 ---- .../aws/s3-transfer/S3TransferManager.h | 57 +++++++++-- .../include/aws/s3-transfer/UploadHandle.h | 44 +++++++++ .../aws/s3-transfer/UploadProgressListener.h | 48 ++++++++++ .../aws/s3-transfer/UploadProgressSnapshot.h | 46 +++++++++ .../include/aws/s3-transfer/UploadRequest.h | 94 +++++++++++++++++-- .../include/aws/s3-transfer/UploadResponse.h | 41 ++++++-- .../source/s3-transfer/DownloadHandle.cpp | 23 +++++ .../source/s3-transfer/S3TransferManager.cpp | 32 +++++-- .../source/s3-transfer/UploadHandle.cpp | 23 +++++ .../s3-transfer/internal/CrtOperations.cpp | 5 + .../s3-transfer/internal/CrtOperations.h | 10 ++ 19 files changed, 654 insertions(+), 89 deletions(-) create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadHandle.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressListener.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressSnapshot.h delete mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h delete mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadHandle.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressListener.h create mode 100644 src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressSnapshot.h create mode 100644 src/aws-cpp-sdk-s3-transfer/source/s3-transfer/DownloadHandle.cpp create mode 100644 src/aws-cpp-sdk-s3-transfer/source/s3-transfer/UploadHandle.cpp create mode 100644 src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.cpp create mode 100644 src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.h diff --git a/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt b/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt index b4c19b6d5b2a..1dc3248f857e 100644 --- a/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt +++ b/src/aws-cpp-sdk-s3-transfer/CMakeLists.txt @@ -7,17 +7,24 @@ file( GLOB S3_TRANSFER_HEADERS "include/aws/s3-transfer/*.h" ) file( GLOB S3_TRANSFER_SOURCE "source/s3-transfer/*.cpp" ) +file( GLOB S3_TRANSFER_INTERNAL_HEADERS "include/aws/s3-transfer/internal/*.h" ) +file( GLOB S3_TRANSFER_INTERNAL_SOURCE "source/s3-transfer/internal/*.cpp" ) + if(MSVC) source_group("Header Files\\aws\\s3-transfer" FILES ${S3_TRANSFER_HEADERS}) source_group("Source Files\\s3-transfer" FILES ${S3_TRANSFER_SOURCE}) + source_group("Header Files\\aws\\s3-transfer\\internal" FILES ${S3_TRANSFER_INTERNAL_HEADERS}) + source_group("Source Files\\s3-transfer\\internal" FILES ${S3_TRANSFER_INTERNAL_SOURCE}) endif() file(GLOB ALL_S3_TRANSFER_HEADERS ${S3_TRANSFER_HEADERS} + ${S3_TRANSFER_INTERNAL_HEADERS} ) file(GLOB ALL_S3_TRANSFER_SOURCE ${S3_TRANSFER_SOURCE} + ${S3_TRANSFER_INTERNAL_SOURCE} ) file(GLOB ALL_S3_TRANSFER @@ -48,6 +55,7 @@ set_compiler_warnings(${PROJECT_NAME}) setup_install() -install (FILES ${ALL_S3_TRANSFER_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/s3-transfer) +install (FILES ${S3_TRANSFER_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/s3-transfer) +install (FILES ${S3_TRANSFER_INTERNAL_HEADERS} DESTINATION ${INCLUDE_DIRECTORY}/aws/s3-transfer/internal) do_packaging() diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadHandle.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadHandle.h new file mode 100644 index 000000000000..2ab3c3046f35 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadHandle.h @@ -0,0 +1,44 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include +#include +#include +#include + + +namespace Aws { +namespace S3 { +namespace Transfer { + +class DownloadHandleImpl; + +/** + * Returned from S3TransferManager::Download to represent a single in-flight download. The + * handle is freely copyable; all copies share the same underlying transfer state. + */ +class AWS_S3_TRANSFER_API DownloadHandle { +public: + ~DownloadHandle(); + + /** + * Returns a future that resolves once the transfer finishes, succeeds, or fails. + */ + std::shared_future CompletionFuture() const; + + /** + * Requests cancellation of the in-flight download. Returns immediately; the future + * returned by CompletionFuture will resolve with a failure once the cancel takes effect. + */ + void Cancel(); + +private: + std::shared_ptr m_impl; +}; + + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressListener.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressListener.h new file mode 100644 index 000000000000..5200d84a5ab8 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressListener.h @@ -0,0 +1,48 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + +namespace Aws { +namespace S3 { +namespace Transfer { + +class DownloadRequest; +class DownloadProgressSnapshot; + +/** + * Callback interface for receiving event-driven updates throughout the lifecycle of a download. + * Subclass and override the events of interest; default implementations are empty so unused + * callbacks can be ignored. Listeners may be registered on the request or on the manager. + */ +class AWS_S3_TRANSFER_API DownloadProgressListener { + public: + virtual ~DownloadProgressListener() = default; + + /** + * Invoked exactly once when the download begins, before any bytes have been transferred. + */ + virtual void OnTransferInitiated(const DownloadRequest&, const DownloadProgressSnapshot&) {} + + /** + * Invoked as bytes are received from S3. Called at least once for a successful transfer + * and may be called many times depending on object size and I/O buffer sizes. + */ + virtual void OnBytesTransferred(const DownloadRequest&, const DownloadProgressSnapshot&) {} + + /** + * Invoked exactly once when the download completes successfully. + */ + virtual void OnTransferComplete(const DownloadRequest&, const DownloadProgressSnapshot&) {} + + /** + * Invoked exactly once when the download fails or is cancelled. + */ + virtual void OnTransferFailed(const DownloadRequest&, const DownloadProgressSnapshot&) {} +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressSnapshot.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressSnapshot.h new file mode 100644 index 000000000000..6d3647b7062f --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadProgressSnapshot.h @@ -0,0 +1,47 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include +#include +#include +#include +#include + +namespace Aws { +namespace S3 { +namespace Transfer { + +/** + * Immutable snapshot of download progress passed to DownloadProgressListener callbacks. + * Captures bytes transferred, total bytes (known after the GetObject response is received), + * and the response once available. + */ +class AWS_S3_TRANSFER_API DownloadProgressSnapshot { + public: + DownloadProgressSnapshot(uint64_t transferredBytes, + uint64_t totalBytes, + std::shared_ptr response, + bool totalBytesHasBeenSet) + : m_transferredBytes(transferredBytes), + m_totalBytes(totalBytes), + m_response(std::move(response)), + m_totalBytesHasBeenSet(totalBytesHasBeenSet) {} + + inline uint64_t GetTransferredBytes() const { return m_transferredBytes; } + inline uint64_t GetTotalBytes() const { return m_totalBytes; } + inline bool TotalBytesHasBeenSet() const { return m_totalBytesHasBeenSet; } + inline const std::shared_ptr& GetResponse() const { return m_response; } + inline bool ResponseHasBeenSet() const { return m_response != nullptr; } + + private: + uint64_t m_transferredBytes = 0; + uint64_t m_totalBytes = 0; + std::shared_ptr m_response; + bool m_totalBytesHasBeenSet = false; +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h index 15d6e4e2bece..9b2f1b05e78e 100644 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadRequest.h @@ -1,18 +1,94 @@ /** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include - +#include +#include +#include +#include +#include +#include +#include namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API DownloadRequest { - //need to fill in class defintion later - }; - } +namespace S3 { +namespace Transfer { + +/** + * Request type for S3TransferManager::Download. Carries the inner S3 GetObjectRequest along + * with the local destination (file path or stream factory) and any request-level progress + * listeners. The transfer manager parallelizes large objects via ranged GETs internally. + */ +class AWS_S3_TRANSFER_API DownloadRequest { + public: + inline const Aws::S3::Model::GetObjectRequest& GetS3Request() const { return m_s3Request; } + inline bool S3RequestHasBeenSet() const { return m_s3RequestHasBeenSet; } + template + void SetS3Request(S3RequestT&& val) { + m_s3RequestHasBeenSet = true; + m_s3Request = std::forward(val); + } + template + DownloadRequest& WithS3Request(S3RequestT&& value) { + SetS3Request(std::forward(value)); + return *this; } -} + inline const Aws::String& GetDestinationFilePath() const { return m_destinationFilePath; } + inline bool DestinationFilePathHasBeenSet() const { return m_destinationFilePathHasBeenSet; } + template + void SetDestinationFilePath(DestinationFilePathT&& value) { + m_destinationFilePathHasBeenSet = true; + m_destinationFilePath = std::forward(value); + } + template + DownloadRequest& WithDestinationFilePath(DestinationFilePathT&& value) { + SetDestinationFilePath(std::forward(value)); + return *this; + } + + inline const Aws::IOStreamFactory& GetBody() const { return m_body; } + inline bool BodyHasBeenSet() const { return m_bodyHasBeenSet; } + inline void SetBody(const Aws::IOStreamFactory& val) { + m_bodyHasBeenSet = true; + m_body = val; + } + inline DownloadRequest& WithBody(const Aws::IOStreamFactory& val) { + SetBody(val); + return *this; + } + + inline const Aws::Vector>& GetTransferListeners() const { + return m_transferListeners; + } + inline bool TransferListenersHasBeenSet() const { return m_transferListenersHasBeenSet; } + inline void SetTransferListeners(const Aws::Vector>& val) { + m_transferListenersHasBeenSet = true; + m_transferListeners = val; + } + inline DownloadRequest& WithTransferListeners(const Aws::Vector>& val) { + SetTransferListeners(val); + return *this; + } + inline DownloadRequest& AddTransferListener(const std::shared_ptr& listener) { + m_transferListenersHasBeenSet = true; + m_transferListeners.push_back(listener); + return *this; + } + + private: + Aws::S3::Model::GetObjectRequest m_s3Request; + Aws::String m_destinationFilePath; + Aws::IOStreamFactory m_body; + Aws::Vector> m_transferListeners; + bool m_s3RequestHasBeenSet = false; + bool m_destinationFilePathHasBeenSet = false; + bool m_bodyHasBeenSet = false; + bool m_transferListenersHasBeenSet = false; +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h index 7afd22a1b130..0ed0423527a4 100644 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/DownloadResponse.h @@ -1,18 +1,41 @@ /** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include - +#include +#include namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API DownloadResponse { - //need to fill in class defintion later - }; - } +namespace S3 { +namespace Transfer { + +/** + * Response type returned via the DownloadHandle's future once the transfer completes. Wraps + * the underlying S3 GetObjectResult with whole-object content length and range, regardless + * of how many ranged GETs were issued internally. + */ +class AWS_S3_TRANSFER_API DownloadResponse { + public: + inline const Aws::S3::Model::GetObjectResult& GetS3Result() const { return m_s3Result; } + inline bool S3ResultHasBeenSet() const { return m_s3ResultHasBeenSet; } + template + void SetS3Result(GetObjectResultT&& getS3Result) { + m_s3ResultHasBeenSet = true; + m_s3Result = std::forward(getS3Result); } -} + template + DownloadResponse& WithS3Result(GetObjectResultT&& getS3Result) { + SetS3Result(std::forward(getS3Result)); + return *this; + } + + private: + Aws::S3::Model::GetObjectResult m_s3Result; + bool m_s3ResultHasBeenSet = false; +}; +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h deleted file mode 100644 index 827edfdd5b09..000000000000 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressListener.h +++ /dev/null @@ -1,18 +0,0 @@ -/** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ -#pragma once -#include - - -namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API ProgressListener { - //need to fill in class defintion later - }; - } - } -} - diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h deleted file mode 100644 index 699c89d5a571..000000000000 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/ProgressSnapshot.h +++ /dev/null @@ -1,18 +0,0 @@ -/** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ -#pragma once -#include - - -namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API ProgressSnapshot { - //need to fill in class defintion later - }; - } - } -} - diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h index 27a5e703bea0..404575fdbf77 100644 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/S3TransferManager.h @@ -4,15 +4,56 @@ */ #pragma once #include - - +#include +#include +#include +#include +#include +#include namespace Aws { namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API S3TransferManager { - //need to fill in class defintion later - }; - } + namespace Transfer { + class S3TransferManagerImpl; + + /** + * High-level S3 transfer client backed by the AWS Common Runtime. Performs single-file + * uploads and downloads, automatically using multipart transfers for objects larger than + * the configured threshold. Customers hold an instance via shared_ptr; the manager owns + * the underlying CRT client and is not copyable or movable. + */ + class AWS_S3_TRANSFER_API S3TransferManager { + public: + /** + * Initialize the S3TransferManager with the given configuration. The configuration + * is used to construct the underlying CRT client and is not retained after construction. + */ + explicit S3TransferManager(const S3TransferManagerConfiguration& config); + + ~S3TransferManager(); + + S3TransferManager(const S3TransferManager&) = delete; + S3TransferManager& operator=(const S3TransferManager&) = delete; + S3TransferManager(S3TransferManager&&) = delete; + S3TransferManager& operator=(S3TransferManager&&) = delete; + + /** + * Begin uploading the object described by request. Returns immediately with a handle + * that can be used to wait for completion or to cancel the in-flight transfer. + */ + UploadHandle Upload(const UploadRequest& request); + + /** + * Begin downloading the object described by request. Returns immediately with a handle + * that can be used to wait for completion or to cancel the in-flight transfer. + */ + DownloadHandle Download(const DownloadRequest& request); + + private: + Aws::UniquePtr m_impl; + }; + } } -} + } + + diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadHandle.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadHandle.h new file mode 100644 index 000000000000..842314542265 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadHandle.h @@ -0,0 +1,44 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include +#include +#include +#include + + +namespace Aws { +namespace S3 { +namespace Transfer { + +class UploadHandleImpl; + +/** + * Returned from S3TransferManager::Upload to represent a single in-flight upload. The + * handle is freely copyable; all copies share the same underlying transfer state. + */ +class AWS_S3_TRANSFER_API UploadHandle { +public: + ~UploadHandle(); + + /** + * Returns a future that resolves once the transfer finishes, succeeds, or fails. + */ + std::shared_future CompletionFuture() const; + + /** + * Requests cancellation of the in-flight upload. Returns immediately; the future + * returned by CompletionFuture will resolve with a failure once the cancel takes effect. + */ + void Cancel(); + +private: + std::shared_ptr m_impl; +}; + + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressListener.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressListener.h new file mode 100644 index 000000000000..d180877c3e73 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressListener.h @@ -0,0 +1,48 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include + +namespace Aws { +namespace S3 { +namespace Transfer { + +class UploadRequest; +class UploadProgressSnapshot; + +/** + * Callback interface for receiving event-driven updates throughout the lifecycle of an upload. + * Subclass and override the events of interest; default implementations are empty so unused + * callbacks can be ignored. Listeners may be registered on the request or on the manager. + */ +class AWS_S3_TRANSFER_API UploadProgressListener { + public: + virtual ~UploadProgressListener() = default; + + /** + * Invoked exactly once when the upload begins, before any bytes have been transferred. + */ + virtual void OnTransferInitiated(const UploadRequest&, const UploadProgressSnapshot&) {} + + /** + * Invoked as bytes are submitted to S3. Called at least once for a successful transfer + * and may be called many times depending on object size and I/O buffer sizes. + */ + virtual void OnBytesTransferred(const UploadRequest&, const UploadProgressSnapshot&) {} + + /** + * Invoked exactly once when the upload completes successfully. + */ + virtual void OnTransferComplete(const UploadRequest&, const UploadProgressSnapshot&) {} + + /** + * Invoked exactly once when the upload fails or is cancelled. + */ + virtual void OnTransferFailed(const UploadRequest&, const UploadProgressSnapshot&) {} +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressSnapshot.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressSnapshot.h new file mode 100644 index 000000000000..b7d63a90851f --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadProgressSnapshot.h @@ -0,0 +1,46 @@ +/** + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ +#pragma once +#include +#include +#include +#include +#include + +namespace Aws { +namespace S3 { +namespace Transfer { + +/** + * Immutable snapshot of upload progress passed to UploadProgressListener callbacks. Captures + * bytes transferred, total bytes (known up-front for uploads), and the response once available. + */ +class AWS_S3_TRANSFER_API UploadProgressSnapshot { + public: + UploadProgressSnapshot(uint64_t transferredBytes, + uint64_t totalBytes, + std::shared_ptr response, + bool totalBytesHasBeenSet) + : m_transferredBytes(transferredBytes), + m_totalBytes(totalBytes), + m_response(std::move(response)), + m_totalBytesHasBeenSet(totalBytesHasBeenSet) {} + + inline uint64_t GetTransferredBytes() const { return m_transferredBytes; } + inline uint64_t GetTotalBytes() const { return m_totalBytes; } + inline bool TotalBytesHasBeenSet() const { return m_totalBytesHasBeenSet; } + inline const std::shared_ptr& GetResponse() const { return m_response; } + inline bool ResponseHasBeenSet() const { return m_response != nullptr; } + + private: + uint64_t m_transferredBytes = 0; + uint64_t m_totalBytes = 0; + std::shared_ptr m_response; + bool m_totalBytesHasBeenSet = false; +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h index 56bba8475ce3..1bb93d8cb8e9 100644 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadRequest.h @@ -1,18 +1,94 @@ /** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include - +#include +#include +#include +#include +#include +#include namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API UploadResponse { - //need to fill in class defintion later - }; - } +namespace S3 { +namespace Transfer { + +/** + * Request type for S3TransferManager::Upload. Carries the inner S3 PutObjectRequest along + * with the local source (file path or stream) and any request-level progress listeners. + * The transfer manager chooses between a single PutObject and a multipart upload based on + * the configured threshold. + */ +class AWS_S3_TRANSFER_API UploadRequest { + public: + inline const Aws::S3::Model::PutObjectRequest& GetS3Request() const { return m_s3Request; } + inline bool S3RequestHasBeenSet() const { return m_s3RequestHasBeenSet; } + template + void SetS3Request(S3RequestT&& val) { + m_s3RequestHasBeenSet = true; + m_s3Request = std::forward(val); + } + template + UploadRequest& WithS3Request(S3RequestT&& value) { + SetS3Request(std::forward(value)); + return *this; } -} + inline const Aws::String& GetSourceFilePath() const { return m_sourceFilePath; } + inline bool SourceFilePathHasBeenSet() const { return m_sourceFilePathHasBeenSet; } + template + void SetSourceFilePath(SourceFilePathT&& value) { + m_sourceFilePathHasBeenSet = true; + m_sourceFilePath = std::forward(value); + } + template + UploadRequest& WithSourceFilePath(SourceFilePathT&& value) { + SetSourceFilePath(std::forward(value)); + return *this; + } + + inline const std::shared_ptr& GetBody() const { return m_body; } + inline bool BodyHasBeenSet() const { return m_bodyHasBeenSet; } + inline void SetBody(const std::shared_ptr& val) { + m_bodyHasBeenSet = true; + m_body = val; + } + inline UploadRequest& WithBody(const std::shared_ptr& val) { + SetBody(val); + return *this; + } + + inline const Aws::Vector>& GetTransferListeners() const { + return m_transferListeners; + } + inline bool TransferListenersHasBeenSet() const { return m_transferListenersHasBeenSet; } + inline void SetTransferListeners(const Aws::Vector>& val) { + m_transferListenersHasBeenSet = true; + m_transferListeners = val; + } + inline UploadRequest& WithTransferListeners(const Aws::Vector>& val) { + SetTransferListeners(val); + return *this; + } + inline UploadRequest& AddTransferListener(const std::shared_ptr& listener) { + m_transferListenersHasBeenSet = true; + m_transferListeners.push_back(listener); + return *this; + } + + private: + Aws::S3::Model::PutObjectRequest m_s3Request; + Aws::String m_sourceFilePath; + std::shared_ptr m_body; + Aws::Vector> m_transferListeners; + bool m_s3RequestHasBeenSet = false; + bool m_sourceFilePathHasBeenSet = false; + bool m_bodyHasBeenSet = false; + bool m_transferListenersHasBeenSet = false; +}; + +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h index 56bba8475ce3..110aa3f22800 100644 --- a/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h +++ b/src/aws-cpp-sdk-s3-transfer/include/aws/s3-transfer/UploadResponse.h @@ -1,18 +1,41 @@ /** -* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include - +#include +#include namespace Aws { - namespace S3 { - namespace Transfer { - class AWS_S3_TRANSFER_API UploadResponse { - //need to fill in class defintion later - }; - } +namespace S3 { +namespace Transfer { + +/** + * Response type returned via the UploadHandle's future once the transfer completes. Wraps + * the underlying S3 PutObjectResult, populated from either the single PutObject response + * or the CompleteMultipartUpload response depending on the path taken. + */ +class AWS_S3_TRANSFER_API UploadResponse { + public: + inline const Aws::S3::Model::PutObjectResult& GetS3Result() const { return m_s3Result; } + inline bool S3ResultHasBeenSet() const { return m_s3ResultHasBeenSet; } + template + void SetS3Result(S3ResultT&& s3Result) { + m_s3ResultHasBeenSet = true; + m_s3Result = std::forward(s3Result); } -} + template + UploadResponse& WithS3Result(S3ResultT&& s3Result) { + SetS3Result(std::forward(s3Result)); + return *this; + } + + private: + Aws::S3::Model::PutObjectResult m_s3Result; + bool m_s3ResultHasBeenSet = false; +}; +} +} +} diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/DownloadHandle.cpp b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/DownloadHandle.cpp new file mode 100644 index 000000000000..6810a6c878c1 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/DownloadHandle.cpp @@ -0,0 +1,23 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + #include + + namespace Aws { + namespace S3 { + namespace Transfer { + class DownloadHandleImpl { + + }; + DownloadHandle::~DownloadHandle() = default; + + std::shared_future DownloadHandle::CompletionFuture() const { + return {}; + } + void DownloadHandle::Cancel() { + + } + } + } + } diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp index 992407a5caf3..baf1d513aa5b 100644 --- a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/S3TransferManager.cpp @@ -1,15 +1,31 @@ /** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -* SPDX-License-Identifier: Apache-2.0. -*/ - + * SPDX-License-Identifier: Apache-2.0. + */ #include - +#include namespace Aws { - namespace S3{ - namespace Transfer { +namespace S3 { +namespace Transfer { +class S3TransferManagerImpl { + +}; +S3TransferManager::~S3TransferManager() = default; + +S3TransferManager::S3TransferManager(const S3TransferManagerConfiguration& ) : +m_impl(Aws::MakeUnique("S3TransferManager")) { + +} - } - } +UploadHandle S3TransferManager::Upload(const UploadRequest&) { + return UploadHandle(); +} + +DownloadHandle S3TransferManager::Download(const DownloadRequest&) { + return DownloadHandle(); +} + +} +} } diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/UploadHandle.cpp b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/UploadHandle.cpp new file mode 100644 index 000000000000..36dc39a0d5a6 --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/UploadHandle.cpp @@ -0,0 +1,23 @@ +/** +* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0. + */ + #include + + namespace Aws { + namespace S3 { + namespace Transfer { + class UploadHandleImpl { + + }; + UploadHandle::~UploadHandle() = default; + + std::shared_future UploadHandle::CompletionFuture() const { + return {}; + } + void UploadHandle::Cancel() { + + } + } + } + } diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.cpp b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.cpp new file mode 100644 index 000000000000..a20a8989f78d --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.cpp @@ -0,0 +1,5 @@ +// +// Created by Narahari, Vinay on 6/5/26. +// + +#include "CrtOperations.h" diff --git a/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.h b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.h new file mode 100644 index 000000000000..184e4d89777d --- /dev/null +++ b/src/aws-cpp-sdk-s3-transfer/source/s3-transfer/internal/CrtOperations.h @@ -0,0 +1,10 @@ +// +// Created by Narahari, Vinay on 6/5/26. +// + +#ifndef AWSSDK_CRTOPERATIONS_H +#define AWSSDK_CRTOPERATIONS_H + +class CrtOperations {}; + +#endif // AWSSDK_CRTOPERATIONS_H