/** * 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 smithy { namespace client { static const char AWS_CLIENT_REQUEST_COMPRESSION_LOG_TAG[] = "RequestPayloadCompression"; class RequestPayloadCompression { public: static void AddCompressedContentBodyToRequest(const Aws::AmazonWebServiceRequest* pRequest, const std::shared_ptr& httpRequest, const Aws::Client::CompressionAlgorithm& compressionAlgorithm, const std::shared_ptr& httpClient) { if (Aws::Client::CompressionAlgorithm::NONE != compressionAlgorithm) { Aws::Client::RequestCompression rc; auto compressOutcome = rc.compress(pRequest->GetBody(), compressionAlgorithm); if (compressOutcome.IsSuccess()) { const Aws::String compressionAlgorithmId = Aws::Client::GetCompressionAlgorithmId( compressionAlgorithm); Utils::AppendHeaderValueToRequest(httpRequest, Aws::Http::CONTENT_ENCODING_HEADER, compressionAlgorithmId); Utils::AddContentBodyToRequest(httpRequest, compressOutcome.GetResult(), httpClient, pRequest->ShouldComputeContentMd5(), pRequest->IsStreaming() && pRequest->IsChunked() && httpClient-> SupportsChunkedTransferEncoding()); } else { AWS_LOGSTREAM_ERROR(AWS_CLIENT_REQUEST_COMPRESSION_LOG_TAG, "Failed to compress request, submitting uncompressed"); Utils::AddContentBodyToRequest(httpRequest, pRequest->GetBody(), httpClient, pRequest->ShouldComputeContentMd5(), pRequest->IsStreaming() && pRequest->IsChunked() && httpClient-> SupportsChunkedTransferEncoding()); } } } }; } }