MqttCommon.cpp 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /**
  2. * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  3. * SPDX-License-Identifier: Apache-2.0.
  4. */
  5. #include <aws/iot/MqttClient.h>
  6. #include <aws/crt/Api.h>
  7. #include <aws/crt/auth/Credentials.h>
  8. #include <aws/crt/auth/Sigv4Signing.h>
  9. #include <aws/crt/http/HttpRequestResponse.h>
  10. #if !BYO_CRYPTO
  11. namespace Aws
  12. {
  13. namespace Iot
  14. {
  15. WebsocketConfig::WebsocketConfig(
  16. const Crt::String &signingRegion,
  17. Crt::Io::ClientBootstrap *bootstrap,
  18. Crt::Allocator *allocator) noexcept
  19. : SigningRegion(signingRegion), ServiceName("iotdevicegateway")
  20. {
  21. Crt::Auth::CredentialsProviderChainDefaultConfig config;
  22. config.Bootstrap = bootstrap;
  23. CredentialsProvider =
  24. Crt::Auth::CredentialsProvider::CreateCredentialsProviderChainDefault(config, allocator);
  25. Signer = Aws::Crt::MakeShared<Crt::Auth::Sigv4HttpRequestSigner>(allocator, allocator);
  26. auto credsProviderRef = CredentialsProvider;
  27. auto signingRegionCopy = SigningRegion;
  28. auto serviceNameCopy = ServiceName;
  29. CreateSigningConfigCb = [allocator, credsProviderRef, signingRegionCopy, serviceNameCopy]() {
  30. auto signerConfig = Aws::Crt::MakeShared<Crt::Auth::AwsSigningConfig>(allocator);
  31. signerConfig->SetRegion(signingRegionCopy);
  32. signerConfig->SetService(serviceNameCopy);
  33. signerConfig->SetSigningAlgorithm(Crt::Auth::SigningAlgorithm::SigV4);
  34. signerConfig->SetSignatureType(Crt::Auth::SignatureType::HttpRequestViaQueryParams);
  35. signerConfig->SetOmitSessionToken(true);
  36. signerConfig->SetCredentialsProvider(credsProviderRef);
  37. return signerConfig;
  38. };
  39. }
  40. WebsocketConfig::WebsocketConfig(const Crt::String &signingRegion, Crt::Allocator *allocator) noexcept
  41. : WebsocketConfig(signingRegion, Crt::ApiHandle::GetOrCreateStaticDefaultClientBootstrap(), allocator)
  42. {
  43. }
  44. WebsocketConfig::WebsocketConfig(
  45. const Crt::String &signingRegion,
  46. const std::shared_ptr<Crt::Auth::ICredentialsProvider> &credentialsProvider,
  47. Crt::Allocator *allocator) noexcept
  48. : CredentialsProvider(credentialsProvider),
  49. Signer(Aws::Crt::MakeShared<Crt::Auth::Sigv4HttpRequestSigner>(allocator, allocator)),
  50. SigningRegion(signingRegion), ServiceName("iotdevicegateway")
  51. {
  52. auto credsProviderRef = CredentialsProvider;
  53. auto signingRegionCopy = SigningRegion;
  54. auto serviceNameCopy = ServiceName;
  55. CreateSigningConfigCb = [allocator, credsProviderRef, signingRegionCopy, serviceNameCopy]() {
  56. auto signerConfig = Aws::Crt::MakeShared<Crt::Auth::AwsSigningConfig>(allocator);
  57. signerConfig->SetRegion(signingRegionCopy);
  58. signerConfig->SetService(serviceNameCopy);
  59. signerConfig->SetSigningAlgorithm(Crt::Auth::SigningAlgorithm::SigV4);
  60. signerConfig->SetSignatureType(Crt::Auth::SignatureType::HttpRequestViaQueryParams);
  61. signerConfig->SetOmitSessionToken(true);
  62. signerConfig->SetCredentialsProvider(credsProviderRef);
  63. return signerConfig;
  64. };
  65. }
  66. WebsocketConfig::WebsocketConfig(
  67. const std::shared_ptr<Crt::Auth::ICredentialsProvider> &credentialsProvider,
  68. const std::shared_ptr<Crt::Auth::IHttpRequestSigner> &signer,
  69. Iot::CreateSigningConfig createSigningConfig) noexcept
  70. : CredentialsProvider(credentialsProvider), Signer(signer),
  71. CreateSigningConfigCb(std::move(createSigningConfig)), ServiceName("iotdevicegateway")
  72. {
  73. }
  74. } // namespace Iot
  75. } // namespace Aws
  76. #endif // !BYO_CRYPTO