AWS IoT Device SDK C++ v2 1.44.1
AWS IoT Device SDK C++ v2
Loading...
Searching...
No Matches
Mqtt5Client.h
Go to the documentation of this file.
1#pragma once
6#include <aws/crt/Config.h>
7#include <aws/crt/Exports.h>
10#include <aws/iot/MqttCommon.h>
11
12#if !BYO_CRYPTO
13
14namespace Aws
15{
16 using namespace Crt::Mqtt5;
17
18 namespace Io
19 {
20 class ClientBootstrap;
21 class SocketOptions;
22 class TlsContextOptions;
23 class WebsocketConfig;
24 } // namespace Io
25
26 namespace Iot
27 {
28
33 {
34 public:
39 virtual ~Mqtt5CustomAuthConfig();
40
43
46
53
60
61 private:
68 Crt::Optional<Crt::String> m_authorizerName;
69
83
89
96 Crt::Optional<Crt::String> m_tokenKeyName;
97
104 Crt::Optional<Crt::String> m_tokenValue;
105
112 Crt::Optional<Crt::String> m_tokenSignature;
113
114 Crt::ByteBuf m_passwordStorage;
115 Crt::Allocator *m_allocator;
116 };
117
123 {
124 public:
136 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithMtlsFromPath(
137 const Crt::String &hostName,
138 const char *certPath,
139 const char *pkeyPath,
140 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
141
153 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithMtlsFromMemory(
154 const Crt::String &hostName,
155 const Crt::ByteCursor &cert,
156 const Crt::ByteCursor &pkey,
157 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
158
170 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithMtlsPkcs11(
171 const Crt::String &hostName,
172 const Crt::Io::TlsContextPkcs11Options &pkcs11Options,
173 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
174
186 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithMtlsPkcs12(
187 const Crt::String &hostName,
188 const struct Pkcs12Options &options,
189 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
190
204 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithWindowsCertStorePath(
205 const Crt::String &hostName,
206 const char *windowsCertStorePath,
207 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
208
218 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithWebsocket(
219 const Crt::String &hostName,
220 const WebsocketConfig &config,
221 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
222
232 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithCustomAuthorizer(
233 const Crt::String &hostName,
234 const Mqtt5CustomAuthConfig &customAuthConfig,
235 Crt::Allocator *allocator) noexcept;
236
247 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilderWithCustomAuthorizerWebsocket(
248 const Crt::String &hostName,
249 const Mqtt5CustomAuthConfig &customAuthConfig,
250 const WebsocketConfig &config,
251 Crt::Allocator *allocator) noexcept;
252
261
269 Mqtt5ClientBuilder &WithPort(uint32_t port) noexcept;
270
280
289 Mqtt5ClientBuilder &WithCertificateAuthority(const char *caPath) noexcept;
290
300
311 Mqtt5ClientBuilder &WithTlsCipherPreference(aws_tls_cipher_pref cipherPref) noexcept;
312
321
330 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
331
338
346 Mqtt5ClientBuilder &WithConnectOptions(std::shared_ptr<ConnectPacket> packetConnect) noexcept;
347
356
367 ClientExtendedValidationAndFlowControl clientExtendedValidationAndFlowControl) noexcept;
368
380 ClientOperationQueueBehaviorType offlineQueueBehavior) noexcept;
381
390 Mqtt5ClientBuilder &WithReconnectOptions(ReconnectOptions reconnectOptions) noexcept;
391
399
410 uint64_t minConnectedTimeToResetReconnectDelayMs) noexcept;
411
420 Mqtt5ClientBuilder &WithPingTimeoutMs(uint32_t pingTimeoutMs) noexcept;
421
430 Mqtt5ClientBuilder &WithConnackTimeoutMs(uint32_t connackTimeoutMs) noexcept;
431
440 Mqtt5ClientBuilder &WithAckTimeoutSec(uint32_t ackTimeoutSec) noexcept;
441
452 Mqtt5ClientBuilder &WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept;
453
462
471
477 std::shared_ptr<Mqtt5Client> Build() noexcept;
478
482 explicit operator bool() const noexcept { return m_lastError == 0; }
483
487 int LastError() const noexcept { return m_lastError ? m_lastError : AWS_ERROR_UNKNOWN; }
488
490 {
491 if (m_options)
492 {
493 delete m_options;
494 }
495 };
500
509
518
527
536
545
554
559 const Crt::String hostName,
560 const char *certPath,
561 const char *pkeyPath,
562 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
563
568 const Crt::String hostName,
569 const Crt::ByteCursor &cert,
570 const Crt::ByteCursor &pkey,
571 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
572
577 const Crt::String hostName,
578 const Crt::Io::TlsContextPkcs11Options &pkcs11Options,
579 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
580
585 const Crt::String hostName,
586 const struct Pkcs12Options &options,
587 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
588
593 const Crt::String hostName,
594 const char *windowsCertStorePath,
595 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
596
601 const Crt::String hostName,
602 const WebsocketConfig &config,
603 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
604
609 const Crt::String hostName,
610 const Mqtt5CustomAuthConfig &customAuthConfig,
611 Crt::Allocator *allocator) noexcept;
612
617 const Crt::String hostName,
618 const Mqtt5CustomAuthConfig &customAuthConfig,
619 const WebsocketConfig &config,
620 Crt::Allocator *allocator) noexcept;
621
622 private:
623 // Common setup shared by all valid constructors
624 Mqtt5ClientBuilder(Crt::Allocator *allocator) noexcept;
625 // Common setup shared by all valid constructors
626 Mqtt5ClientBuilder(int error, Crt::Allocator *allocator) noexcept;
627
628 /*
629 * Creates a new Mqtt5ClientBuilder instance with default values.
630 */
631 static std::shared_ptr<Mqtt5ClientBuilder> CreateMqtt5ClientBuilder(
632 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
633
634 Crt::Allocator *m_allocator;
635
639 uint32_t m_port;
640
645 Crt::Optional<Crt::Io::TlsContextOptions> m_tlsConnectionOptions;
646
650 Crt::Optional<Crt::Http::HttpClientConnectionProxyOptions> m_proxyOptions;
651
655 Crt::Optional<WebsocketConfig> m_websocketConfig;
656
660 Crt::Optional<Mqtt5CustomAuthConfig> m_customAuthConfig;
661
666 std::shared_ptr<ConnectPacket> m_connectOptions;
667
668 Crt::Mqtt5::Mqtt5ClientOptions *m_options;
669
670 /* Error */
671 int m_lastError;
672
674 bool m_enableMetricsCollection;
675 Crt::String m_sdkName = "IoTDeviceSDK/CPP";
676 Crt::String m_sdkVersion = AWS_CRT_CPP_VERSION;
677 };
678
679 } // namespace Iot
680} // namespace Aws
681
682#endif // !BYO_CRYPTO
Definition Bootstrap.h:35
Definition SocketOptions.h:48
Definition TlsOptions.h:217
Definition Mqtt5Packets.h:672
Definition Mqtt5Client.h:496
Definition Optional.h:19
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithCustomAuthorizerWebsocket(const Crt::String &hostName, const Mqtt5CustomAuthConfig &customAuthConfig, const WebsocketConfig &config, Crt::Allocator *allocator) noexcept
Definition Mqtt5Client.cpp:283
Mqtt5ClientBuilder & WithPort(uint32_t port) noexcept
Definition Mqtt5Client.cpp:313
Mqtt5ClientBuilder & operator=(const Mqtt5ClientBuilder &)=delete
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithWindowsCertStorePath(const Crt::String &hostName, const char *windowsCertStorePath, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:217
Mqtt5ClientBuilder & WithPublishReceivedCallback(OnPublishReceivedHandler callback) noexcept
Definition Mqtt5Client.cpp:486
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithMtlsFromPath(const Crt::String &hostName, const char *certPath, const char *pkeyPath, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:128
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithCustomAuthorizerWebsocket(const Crt::String hostName, const Mqtt5CustomAuthConfig &customAuthConfig, const WebsocketConfig &config, Crt::Allocator *allocator) noexcept
Definition Mqtt5Client.cpp:958
Mqtt5ClientBuilder & WithAckTimeoutSeconds(uint32_t ackTimeoutSec) noexcept
Definition Mqtt5Client.cpp:435
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithCustomAuthorizer(const Crt::String &hostName, const Mqtt5CustomAuthConfig &customAuthConfig, Crt::Allocator *allocator) noexcept
Definition Mqtt5Client.cpp:261
Mqtt5ClientBuilder & WithCustomAuthorizer(const Iot::Mqtt5CustomAuthConfig &config) noexcept
Definition Mqtt5Client.cpp:371
Mqtt5ClientBuilder & WithConnectOptions(std::shared_ptr< ConnectPacket > packetConnect) noexcept
Definition Mqtt5Client.cpp:377
Mqtt5ClientBuilder & WithHttpProxyOptions(const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept
Definition Mqtt5Client.cpp:364
Mqtt5ClientBuilder & WithHostName(Crt::String hostname)
Definition Mqtt5Client.cpp:307
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithMtlsPkcs11(const Crt::String &hostName, const Crt::Io::TlsContextPkcs11Options &pkcs11Options, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:173
Mqtt5ClientBuilder(const Mqtt5ClientBuilder &)=delete
Mqtt5ClientBuilder & WithConnackTimeoutMs(uint32_t connackTimeoutMs) noexcept
Definition Mqtt5Client.cpp:423
Mqtt5ClientBuilder & WithClientStoppedCallback(OnStoppedHandler callback) noexcept
Definition Mqtt5Client.cpp:473
Mqtt5ClientBuilder & WithCertificateAuthority(const char *caPath) noexcept
Definition Mqtt5Client.cpp:325
Mqtt5ClientBuilder & operator=(Mqtt5ClientBuilder &&)=delete
Mqtt5ClientBuilder(Mqtt5ClientBuilder &&)=delete
std::shared_ptr< Mqtt5Client > Build() noexcept
Definition Mqtt5Client.cpp:492
Mqtt5ClientBuilder & WithOfflineQueueBehavior(ClientOperationQueueBehaviorType offlineQueueBehavior) noexcept
Definition Mqtt5Client.cpp:397
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithWebsocket(const Crt::String hostName, const WebsocketConfig &config, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:912
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithMtlsPkcs11(const Crt::String hostName, const Crt::Io::TlsContextPkcs11Options &pkcs11Options, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:843
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithMtlsPkcs12(const Crt::String hostName, const struct Pkcs12Options &options, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:866
Mqtt5ClientBuilder & WithMinConnectedTimeToResetReconnectDelayMs(uint64_t minConnectedTimeToResetReconnectDelayMs) noexcept
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithWindowsCertStorePath(const Crt::String hostName, const char *windowsCertStorePath, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:889
Mqtt5ClientBuilder & WithClientAttemptingConnectCallback(OnAttemptingConnectHandler callback) noexcept
Definition Mqtt5Client.cpp:479
Mqtt5ClientBuilder & WithPingTimeoutMs(uint32_t pingTimeoutMs) noexcept
Definition Mqtt5Client.cpp:417
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithWebsocket(const Crt::String &hostName, const WebsocketConfig &config, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:239
Mqtt5ClientBuilder & WithAckTimeoutSec(uint32_t ackTimeoutSec) noexcept
Definition Mqtt5Client.cpp:429
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithMtlsFromPath(const Crt::String hostName, const char *certPath, const char *pkeyPath, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:796
Mqtt5ClientBuilder & WithClientConnectionFailureCallback(OnConnectionFailureHandler callback) noexcept
Definition Mqtt5Client.cpp:459
Mqtt5ClientBuilder & WithBootstrap(Crt::Io::ClientBootstrap *bootStrap) noexcept
Definition Mqtt5Client.cpp:319
~Mqtt5ClientBuilder()
Definition Mqtt5Client.h:489
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithMtlsPkcs12(const Crt::String &hostName, const struct Pkcs12Options &options, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:195
int LastError() const noexcept
Definition Mqtt5Client.h:487
Mqtt5ClientBuilder & WithClientExtendedValidationAndFlowControl(ClientExtendedValidationAndFlowControl clientExtendedValidationAndFlowControl) noexcept
Definition Mqtt5Client.cpp:390
Mqtt5ClientBuilder & WithSessionBehavior(ClientSessionBehaviorType sessionBehavior) noexcept
Definition Mqtt5Client.cpp:384
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithMtlsFromMemory(const Crt::String hostName, const Crt::ByteCursor &cert, const Crt::ByteCursor &pkey, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:820
Mqtt5ClientBuilder & WithSocketOptions(Crt::Io::SocketOptions socketOptions) noexcept
Definition Mqtt5Client.cpp:358
Mqtt5ClientBuilder & WithClientConnectionSuccessCallback(OnConnectionSuccessHandler callback) noexcept
Definition Mqtt5Client.cpp:452
Mqtt5ClientBuilder & WithSdkVersion(const Crt::String &sdkVersion)
Definition Mqtt5Client.cpp:446
static std::shared_ptr< Mqtt5ClientBuilder > CreateMqtt5ClientBuilderWithMtlsFromMemory(const Crt::String &hostName, const Crt::ByteCursor &cert, const Crt::ByteCursor &pkey, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:151
Mqtt5ClientBuilder & WithTlsCipherPreference(aws_tls_cipher_pref cipherPref) noexcept
Definition Mqtt5Client.cpp:349
static Mqtt5ClientBuilder * NewMqtt5ClientBuilderWithCustomAuthorizer(const Crt::String hostName, const Mqtt5CustomAuthConfig &customAuthConfig, Crt::Allocator *allocator) noexcept
Definition Mqtt5Client.cpp:935
Mqtt5ClientBuilder & WithReconnectOptions(ReconnectOptions reconnectOptions) noexcept
Definition Mqtt5Client.cpp:404
Mqtt5ClientBuilder & WithClientDisconnectionCallback(OnDisconnectionHandler callback) noexcept
Definition Mqtt5Client.cpp:466
Mqtt5ClientBuilder & WithTopicAliasingOptions(TopicAliasingOptions topicAliasingOptions) noexcept
Definition Mqtt5Client.cpp:410
Mqtt5ClientBuilder & WithSdkName(const Crt::String &sdkName)
Definition Mqtt5Client.cpp:440
Definition Mqtt5Client.h:33
const Crt::Optional< Crt::String > & GetTokenKeyName()
Definition Mqtt5Client.cpp:732
Mqtt5CustomAuthConfig & WithUsername(Crt::String username)
Definition Mqtt5Client.cpp:753
const Crt::Optional< Crt::String > & GetUsername()
Definition Mqtt5Client.cpp:722
Mqtt5CustomAuthConfig(Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition Mqtt5Client.cpp:636
Mqtt5CustomAuthConfig & operator=(Mqtt5CustomAuthConfig &&rhs)=delete
Mqtt5CustomAuthConfig & WithAuthorizerName(Crt::String authName)
Definition Mqtt5Client.cpp:747
const Crt::Optional< Crt::String > & GetTokenValue()
Definition Mqtt5Client.cpp:737
const Crt::Optional< Crt::String > & GetTokenSignature()
Definition Mqtt5Client.cpp:742
Mqtt5CustomAuthConfig(Mqtt5CustomAuthConfig &&rhs)=delete
Mqtt5CustomAuthConfig & WithTokenSignature(Crt::String tokenSignature)
Definition Mqtt5Client.cpp:780
const Crt::Optional< Crt::String > & GetAuthorizerName()
Definition Mqtt5Client.cpp:717
Mqtt5CustomAuthConfig & WithTokenKeyName(Crt::String tokenKeyName)
Definition Mqtt5Client.cpp:768
Mqtt5CustomAuthConfig & WithTokenValue(Crt::String tokenValue)
Definition Mqtt5Client.cpp:774
const Crt::Optional< Crt::ByteCursor > & GetPassword()
Definition Mqtt5Client.cpp:727
Mqtt5CustomAuthConfig & WithPassword(Crt::ByteCursor password)
Definition Mqtt5Client.cpp:759
Mqtt5CustomAuthConfig & operator=(const Mqtt5CustomAuthConfig &rhs)
Definition Mqtt5Client.cpp:681
#define AWS_CRT_CPP_API
Definition Exports.h:36
Definition HttpRequestResponse.h:24
aws_mqtt5_client_session_behavior_type ClientSessionBehaviorType
Definition Mqtt5Types.h:186
aws_mqtt5_extended_validation_and_flow_control_options ClientExtendedValidationAndFlowControl
Definition Mqtt5Types.h:200
std::function< void(const OnConnectionSuccessEventData &)> OnConnectionSuccessHandler
Definition Mqtt5Client.h:287
std::function< void(const OnConnectionFailureEventData &)> OnConnectionFailureHandler
Definition Mqtt5Client.h:292
std::function< void(const OnDisconnectionEventData &)> OnDisconnectionHandler
Definition Mqtt5Client.h:297
std::function< void(const OnAttemptingConnectEventData &)> OnAttemptingConnectHandler
Definition Mqtt5Client.h:303
aws_mqtt5_client_operation_queue_behavior_type ClientOperationQueueBehaviorType
Definition Mqtt5Types.h:223
std::function< void(const PublishReceivedEventData &)> OnPublishReceivedHandler
Definition Mqtt5Client.h:337
std::function< void(const OnStoppedEventData &)> OnStoppedHandler
Definition Mqtt5Client.h:309
Definition Allocator.h:13
aws_byte_cursor ByteCursor
Definition Types.h:31
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition Types.h:45
AWS_CRT_CPP_API Allocator * ApiAllocator() noexcept
Definition Allocator.cpp:24
aws_allocator Allocator
Definition Allocator.h:14
aws_byte_buf ByteBuf
Definition Types.h:30
Definition Mqtt5Client.h:19
Definition Mqtt5Client.h:27
Definition Allocator.h:11
Definition StringView.h:862
Definition Mqtt5Client.h:151
Definition Mqtt5Client.h:107
Definition MqttCommon.h:105
Definition MqttCommon.h:24