@@ -578,7 +578,10 @@ HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<Aws::Http
578578 }
579579
580580 // Track credential provider usage for User-Agent features
581- TrackCredentialProviderUsage (request);
581+ auto credentialsProvider = GetCredentialsProvider ();
582+ if (credentialsProvider) {
583+ credentialsProvider->GetAWSCredentials (const_cast <Aws::AmazonWebServiceRequest&>(request));
584+ }
582585
583586 auto signer = GetSignerByName (signerName);
584587 auto signedRequest = TracingUtils::MakeCallWithTiming<bool >([&]() -> bool {
@@ -910,6 +913,7 @@ void AWSClient::BuildHttpRequest(const Aws::AmazonWebServiceRequest& request, co
910913 if (Aws::Client::CompressionAlgorithm::NONE != selectedCompressionAlgorithm) {
911914 Aws::Client::RequestCompression rc;
912915 auto compressOutcome = rc.compress (request.GetBody (), selectedCompressionAlgorithm);
916+
913917 if (compressOutcome.IsSuccess ()) {
914918 Aws::String compressionAlgorithmId = Aws::Client::GetCompressionAlgorithmId (selectedCompressionAlgorithm);
915919 AppendHeaderValueToRequest (httpRequest, CONTENT_ENCODING_HEADER, compressionAlgorithmId);
@@ -1031,63 +1035,37 @@ std::shared_ptr<Aws::Http::HttpResponse> AWSClient::MakeHttpRequest(std::shared_
10311035 return m_httpClient->MakeRequest (request, m_readRateLimiter.get (), m_writeRateLimiter.get ());
10321036}
10331037
1034- void AWSClient::AppendRecursionDetectionHeader (std::shared_ptr<Aws::Http::HttpRequest> ioRequest)
1035- {
1036- if (!ioRequest || ioRequest->HasHeader (Aws::Http::X_AMZN_TRACE_ID_HEADER)) {
1037- return ;
1038- }
1039- Aws::String awsLambdaFunctionName = Aws::Environment::GetEnv (AWS_LAMBDA_FUNCTION_NAME);
1040- if (awsLambdaFunctionName.empty ()) {
1041- return ;
1042- }
1043- Aws::String xAmznTraceIdVal = Aws::Environment::GetEnv (X_AMZN_TRACE_ID);
1044- if (xAmznTraceIdVal.empty ()) {
1045- return ;
1046- }
1038+ void AWSClient::AppendRecursionDetectionHeader (std::shared_ptr<Aws::Http::HttpRequest> ioRequest) {
1039+ if (!ioRequest || ioRequest->HasHeader (Aws::Http::X_AMZN_TRACE_ID_HEADER)) {
1040+ return ;
1041+ }
1042+ Aws::String awsLambdaFunctionName = Aws::Environment::GetEnv (AWS_LAMBDA_FUNCTION_NAME);
1043+ if (awsLambdaFunctionName.empty ()) {
1044+ return ;
1045+ }
1046+ Aws::String xAmznTraceIdVal = Aws::Environment::GetEnv (X_AMZN_TRACE_ID);
1047+ if (xAmznTraceIdVal.empty ()) {
1048+ return ;
1049+ }
10471050
1048- // Escape all non-printable ASCII characters by percent encoding
1049- Aws::OStringStream xAmznTraceIdValEncodedStr;
1050- for (const char ch : xAmznTraceIdVal)
1051+ // Escape all non-printable ASCII characters by percent encoding
1052+ Aws::OStringStream xAmznTraceIdValEncodedStr;
1053+ for (const char ch : xAmznTraceIdVal)
1054+ {
1055+ if (ch >= 0x20 && ch <= 0x7e ) // ascii chars [32-126] or [' ' to '~'] are not escaped
10511056 {
1052- if (ch >= 0x20 && ch <= 0x7e ) // ascii chars [32-126] or [' ' to '~'] are not escaped
1053- {
1054- xAmznTraceIdValEncodedStr << ch;
1055- }
1056- else
1057- {
1058- // A percent-encoded octet is encoded as a character triplet
1059- xAmznTraceIdValEncodedStr << ' %' // consisting of the percent character "%"
1060- << std::hex << std::setfill (' 0' ) << std::setw (2 ) << std::uppercase
1061- << (size_t ) ch // followed by the two hexadecimal digits representing that octet's numeric value
1062- << std::dec << std::setfill (' ' ) << std::setw (0 ) << std::nouppercase;
1063- }
1057+ xAmznTraceIdValEncodedStr << ch;
10641058 }
1065- xAmznTraceIdVal = xAmznTraceIdValEncodedStr.str ();
1066-
1067- ioRequest->SetHeaderValue (Aws::Http::X_AMZN_TRACE_ID_HEADER, xAmznTraceIdVal);
1068- }
1069-
1070- void AWSClient::TrackCredentialProviderUsage (const Aws::AmazonWebServiceRequest& request) const
1071- {
1072- auto credentialsProvider = GetCredentialsProvider ();
1073- if (!credentialsProvider)
1059+ else
10741060 {
1075- return ;
1061+ // A percent-encoded octet is encoded as a character triplet
1062+ xAmznTraceIdValEncodedStr << ' %' // consisting of the percent character "%"
1063+ << std::hex << std::setfill (' 0' ) << std::setw (2 ) << std::uppercase
1064+ << (size_t ) ch // followed by the two hexadecimal digits representing that octet's numeric value
1065+ << std::dec << std::setfill (' ' ) << std::setw (0 ) << std::nouppercase;
10761066 }
1067+ }
1068+ xAmznTraceIdVal = xAmznTraceIdValEncodedStr.str ();
10771069
1078- // Set up callback for credential tracking
1079- if (credentialsProvider) {
1080- credentialsProvider->SetCredentialTrackingCallback ([&request]() {
1081- request.AddUserAgentFeature (Aws::Client::UserAgentFeature::CREDENTIALS_ENV_VARS);
1082- AWS_LOGSTREAM_DEBUG (AWS_CLIENT_LOG_TAG, " Added CREDENTIALS_ENV_VARS to User-Agent" );
1083- });
1084- }
1085-
1086- // Trigger credential retrieval to enable tracking
1087- if (credentialsProvider) {
1088- credentialsProvider->GetAWSCredentials ();
1089-
1090- // Clear callback
1091- credentialsProvider->SetCredentialTrackingCallback (nullptr );
1092- }
1070+ ioRequest->SetHeaderValue (Aws::Http::X_AMZN_TRACE_ID_HEADER, xAmznTraceIdVal);
10931071}
0 commit comments