Skip to content

Commit 9f542ef

Browse files
committed
v1 add support for crt
1 parent 5fe9585 commit 9f542ef

File tree

7 files changed

+761
-2
lines changed

7 files changed

+761
-2
lines changed

generated/src/aws-cpp-sdk-s3-crt/source/S3CrtClient.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,7 @@ void S3CrtClient::PutObjectAsync(const PutObjectRequest& request, const PutObjec
12171217
CoreErrors::ENDPOINT_RESOLUTION_FAILURE, "ENDPOINT_RESOLUTION_FAILURE", endpointResolutionOutcome.GetError().GetMessage(), false)), handlerContext);
12181218
return;
12191219
}
1220+
12201221
endpointResolutionOutcome.GetResult().AddPathSegments(request.GetKey());
12211222

12221223
request.SetServiceSpecificParameters(
@@ -1226,6 +1227,22 @@ void S3CrtClient::PutObjectAsync(const PutObjectRequest& request, const PutObjec
12261227
ServiceSpecificParameters serviceSpecificParameters{params};
12271228
return Aws::MakeShared<ServiceSpecificParameters>(ALLOCATION_TAG, serviceSpecificParameters);
12281229
}());
1230+
1231+
//changes
1232+
EndpointUpdateCallback endpointCallback = [&](Aws::Endpoint::AWSEndpoint& endpoint){
1233+
endpoint.AddPathSegments(request.GetKey());
1234+
};
1235+
1236+
auto endpointResolutionOutcome = ResolveEndpoint(
1237+
&request,
1238+
request.GetServiceRequestName(),
1239+
Aws::Http::HttpMethod method,
1240+
std::move(endpointCallback))
1241+
if (!endpointResolutionOutcome.IsSuccess()) {
1242+
handler(this, request, PutObjectOutcome(Aws::Client::AWSError<CoreErrors>(
1243+
CoreErrors::ENDPOINT_RESOLUTION_FAILURE, "ENDPOINT_RESOLUTION_FAILURE", endpointResolutionOutcome.GetError().GetMessage(), false)), handlerContext);
1244+
return;
1245+
}
12291246

12301247
// make aws_s3_meta_request with callbacks
12311248
CrtRequestCallbackUserData *userData = Aws::New<CrtRequestCallbackUserData>(ALLOCATION_TAG);

src/aws-cpp-sdk-core/include/smithy/client/AwsSmithyClient.h

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,49 @@ namespace client
212212
return AwsClientRequestSigning<AuthSchemesVariantT>::AdjustClockSkew(outcome, authSchemeOption, m_authSchemes);
213213
}
214214

215+
ResolveEndpointOutcome ResolveEndpoint(
216+
Aws::AmazonWebServiceRequest const * const request,
217+
const char* requestName,
218+
Aws::Http::HttpMethod method,
219+
EndpointUpdateCallback&& endpointCallback) const
220+
{
221+
std::shared_ptr<Aws::Utils::Threading::Executor> pExecutor = Aws::MakeShared<Aws::Utils::Threading::SameThreadExecutor>(AWS_SMITHY_CLIENT_LOG);
222+
assert(pExecutor);
223+
224+
ResolveEndpointOutcome outcome = ClientError(CoreErrors::INTERNAL_FAILURE, "", "Response handler was not called", false);
225+
ResponseHandlerFunc responseHandler = [&outcome](HttpResponseOutcome&& asyncOutcome)
226+
{
227+
outcome = std::move(asyncOutcome);
228+
}
229+
std::shared_ptr<AwsSmithyClientAsyncRequestContext> pRequestCtx =
230+
Aws::MakeShared<AwsSmithyClientAsyncRequestContext>(AWS_SMITHY_CLIENT_LOG);
231+
if (!pRequestCtx)
232+
{
233+
AWS_LOGSTREAM_ERROR(AWS_SMITHY_CLIENT_LOG, "Failed to allocate an AwsSmithyClientAsyncRequestContext under a shared ptr");
234+
auto outcome = HttpResponseOutcome(ClientError(CoreErrors::MEMORY_ALLOCATION, "", "Failed to allocate async request context", false/*retryable*/));
235+
pExecutor->Submit([outcome, responseHandler]() mutable
236+
{
237+
responseHandler(std::move(outcome));
238+
} );
239+
return;
240+
}
241+
242+
pExecutor->Submit([&]()
243+
{
244+
this->ResolveAuthEndpoint(
245+
pRequestCtx,
246+
request,
247+
requestName,
248+
method,
249+
std::move(responseHandler),
250+
std::move(endpointCallback),
251+
pExecutor
252+
)
253+
});
254+
pExecutor->WaitUntilStopped();
255+
return outcome;
256+
}
257+
215258
IdentityOutcome ResolveIdentity(const AwsSmithyClientAsyncRequestContext& ctx) const override {
216259
return AwsClientRequestSigning<AuthSchemesVariantT>::ResolveIdentity(ctx, m_authSchemes);
217260
}

src/aws-cpp-sdk-core/include/smithy/client/AwsSmithyClientBase.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,16 @@ namespace client
159159
return m_errorMarshaller;
160160
}
161161

162+
bool ResolveAuthEndpoint(
163+
std::shared_ptr<AwsSmithyClientAsyncRequestContext>& pRequestCtx,
164+
Aws::AmazonWebServiceRequest const * const request,
165+
const char* requestName,
166+
Aws::Http::HttpMethod method,
167+
ResponseHandlerFunc&& responseHandler,
168+
EndpointUpdateCallback&& endpointCallback,
169+
std::shared_ptr<Aws::Utils::Threading::Executor>& pExecutor
170+
) const;
171+
162172
/**
163173
* Initialize client configuration with their factory method, unless the user has explicitly set the
164174
* configuration, and it is to be shallow copied between different clients, in which case, delete the

src/aws-cpp-sdk-core/source/smithy/client/AwsSmithyClientBase.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,56 @@ AwsSmithyClientBase::BuildHttpRequest(const std::shared_ptr<AwsSmithyClientAsync
177177
return httpRequest;
178178
}
179179

180+
bool AwsSmithyClientBase::ResolveAuthEndpoint(
181+
std::shared_ptr<AwsSmithyClientAsyncRequestContext>& pRequestCtx,
182+
Aws::AmazonWebServiceRequest const * const request,
183+
const char* requestName,
184+
Aws::Http::HttpMethod method,
185+
ResponseHandlerFunc&& responseHandler,
186+
EndpointUpdateCallback&& endpointCallback,
187+
std::shared_ptr<Aws::Utils::Threading::Executor>& pExecutor
188+
) const
189+
{
190+
pRequestCtx->m_pRequest = request;
191+
if (requestName)
192+
pRequestCtx->m_requestName = requestName;
193+
else if (pRequestCtx->m_pRequest)
194+
pRequestCtx->m_requestName = pRequestCtx->m_pRequest->GetServiceRequestName();
195+
pRequestCtx->m_method = method;
196+
pRequestCtx->m_retryCount = 0;
197+
pRequestCtx->m_invocationId = Aws::Utils::UUID::PseudoRandomUUID();
198+
auto authSchemeOptionOutcome = this->SelectAuthSchemeOption(*pRequestCtx);
199+
if (!authSchemeOptionOutcome.IsSuccess())
200+
{
201+
pExecutor->Submit([authSchemeOptionOutcome, responseHandler]() mutable
202+
{
203+
responseHandler(std::move(authSchemeOptionOutcome));
204+
} );
205+
return false;
206+
}
207+
pRequestCtx->m_authSchemeOption = std::move(authSchemeOptionOutcome.GetResultWithOwnership());
208+
assert(pRequestCtx->m_authSchemeOption.schemeId);
209+
Aws::Endpoint::EndpointParameters epParams = request ? request->GetEndpointContextParams() : Aws::Endpoint::EndpointParameters();
210+
const auto authSchemeEpParams = pRequestCtx->m_authSchemeOption.endpointParameters();
211+
epParams.insert(epParams.end(), authSchemeEpParams.begin(), authSchemeEpParams.end());
212+
auto epResolutionOutcome = this->ResolveEndpoint(std::move(epParams), std::move(endpointCallback));
213+
if (!epResolutionOutcome.IsSuccess())
214+
{
215+
auto epOutcome = ResolveEndpointOutcome(Aws::Client::AWSError<Aws::Client::CoreErrors>{
216+
Aws::Client::CoreErrors::ENDPOINT_RESOLUTION_FAILURE,
217+
epResolutionOutcome.GetError().GetExceptionName(),
218+
epResolutionOutcome.GetError().GetMessage(),
219+
false});
220+
221+
pExecutor->Submit([epOutcome, responseHandler]() mutable
222+
{
223+
responseHandler(std::move(epOutcome));
224+
} );
225+
return false;
226+
}
227+
return true;
228+
}
229+
180230
void AwsSmithyClientBase::MakeRequestAsync(Aws::AmazonWebServiceRequest const* const request,
181231
const char* requestName,
182232
Aws::Http::HttpMethod method,

0 commit comments

Comments
 (0)