AWS IoT Device SDK C++ v2 1.45.1
AWS IoT Device SDK C++ v2
Loading...
Searching...
No Matches
MqttClient.h
Go to the documentation of this file.
1#pragma once
6#include <aws/crt/Config.h>
7#include <aws/crt/Exports.h>
11#include <aws/iot/MqttCommon.h>
12
13#if !BYO_CRYPTO
14
15namespace Aws
16{
17 namespace Iot
18 {
19 class MqttClient;
20
27 {
28 public:
29 static MqttClientConnectionConfig CreateInvalid(int lastError) noexcept;
30
42 const Crt::String &endpoint,
43 uint32_t port,
44 const Crt::Io::SocketOptions &socketOptions,
45 Crt::Io::TlsContext &&tlsContext,
46 bool enableMetrics = true,
48
69 const Crt::String &endpoint,
70 uint32_t port,
71 const Crt::Io::SocketOptions &socketOptions,
72 Crt::Io::TlsContext &&tlsContext,
75 bool enableMetrics = true,
77
81 explicit operator bool() const noexcept { return m_context ? true : false; }
82
86 int LastError() const noexcept { return m_lastError; }
87
88 private:
89 MqttClientConnectionConfig(int lastError) noexcept;
90
92 const Crt::String &endpoint,
93 uint32_t port,
94 const Crt::Io::SocketOptions &socketOptions,
95 Crt::Io::TlsContext &&tlsContext,
97 bool enableMetrics = true,
99
100 Crt::String m_endpoint;
101 uint32_t m_port;
102 Crt::Io::TlsContext m_context;
103 Crt::Io::SocketOptions m_socketOptions;
104 Crt::Mqtt::OnWebSocketHandshakeIntercept m_webSocketInterceptor;
105 Crt::String m_username;
106 Crt::String m_password;
108 bool m_enableMetricsCollection;
110 int m_lastError;
111
112 friend class MqttClient;
114 };
115
122 {
123 public:
125
135 const char *certPath,
136 const char *pkeyPath,
137 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
138
148 const Crt::ByteCursor &cert,
149 const Crt::ByteCursor &pkey,
150 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
151
161 const Crt::Io::TlsContextPkcs11Options &pkcs11Options,
162 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
163
174 const struct Pkcs12Options &options,
175 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
176
188 const char *windowsCertStorePath,
189 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
190
198 const WebsocketConfig &config,
199 Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
200
207
216
225
236
246
256
263
271 MqttClientConnectionConfigBuilder &WithTcpConnectTimeout(uint32_t connectTimeoutMs) noexcept;
272
281 MqttClientConnectionConfigBuilder &WithTcpKeepAliveTimeout(uint16_t keepAliveTimeoutSecs) noexcept;
282
292 MqttClientConnectionConfigBuilder &WithTcpKeepAliveInterval(uint16_t keepAliveIntervalSecs) noexcept;
293
303
311 MqttClientConnectionConfigBuilder &WithMinimumTlsVersion(aws_tls_versions minimumTlsVersion) noexcept;
312
323 MqttClientConnectionConfigBuilder &WithTlsCipherPreference(aws_tls_cipher_pref cipherPref) noexcept;
324
333 const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept;
334
344
353
362
383 const Crt::String &username,
384 const Crt::String &authorizerName,
385 const Crt::String &authorizerSignature,
386 const Crt::String &password) noexcept;
387
411 const Crt::String &username,
412 const Crt::String &authorizerName,
413 const Crt::String &authorizerSignature,
414 const Crt::String &password,
415 const Crt::String &tokenKeyName,
416 const Crt::String &tokenValue) noexcept;
417
426
435
442
446 explicit operator bool() const noexcept { return m_lastError == 0; }
447
451 int LastError() const noexcept { return m_lastError ? m_lastError : AWS_ERROR_UNKNOWN; }
452
453 private:
454 // Common setup shared by all valid constructors
456
457 // Helper function to add parameters to the username in the WithCustomAuthorizer function
459 Crt::String currentUsername,
460 Crt::String parameterValue,
461 Crt::String parameterPreText);
462
463 Crt::Allocator *m_allocator;
464 Crt::String m_endpoint;
465 uint32_t m_portOverride;
466 Crt::Io::SocketOptions m_socketOptions;
467 Crt::Io::TlsContextOptions m_contextOptions;
468 Crt::Optional<WebsocketConfig> m_websocketConfig;
470 bool m_enableMetricsCollection = true;
471 Crt::String m_sdkName;
472 Crt::String m_sdkVersion;
473 Crt::String m_username = "";
474 Crt::String m_password = "";
475 bool m_isUsingCustomAuthorizer = false;
476
477 int m_lastError;
478 };
479
486 {
487 public:
488 MqttClient(Crt::Io::ClientBootstrap &bootstrap, Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
489
496 MqttClient(Crt::Allocator *allocator = Crt::ApiAllocator()) noexcept;
497
503 std::shared_ptr<Crt::Mqtt::MqttConnection> NewConnection(const MqttClientConnectionConfig &config) noexcept;
504
508 int LastError() const noexcept { return m_client.LastError(); }
509
513 explicit operator bool() const noexcept { return m_client ? true : false; }
514
515 private:
516 Crt::Mqtt::MqttClient m_client;
517 int m_lastError;
518 };
519 } // namespace Iot
520} // namespace Aws
521
522#endif // !BYO_CRYPTO
Definition Bootstrap.h:35
Definition SocketOptions.h:70
Definition TlsOptions.h:390
Definition TlsOptions.h:38
Definition TlsOptions.h:242
Definition MqttClient.h:48
Definition Optional.h:19
MqttClientConnectionConfigBuilder & WithTcpKeepAlive() noexcept
Definition MqttClient.cpp:266
MqttClientConnectionConfigBuilder & WithTcpKeepAliveInterval(uint16_t keepAliveIntervalSecs) noexcept
Definition MqttClient.cpp:285
MqttClientConnectionConfigBuilder & WithUsername(const Crt::String &username) noexcept
Definition MqttClient.cpp:449
MqttClientConnectionConfigBuilder & WithHttpProxyOptions(const Crt::Http::HttpClientConnectionProxyOptions &proxyOptions) noexcept
Definition MqttClient.cpp:319
static MqttClientConnectionConfigBuilder NewDefaultBuilder() noexcept
Definition MqttClient.cpp:193
MqttClientConnectionConfigBuilder & WithTlsCipherPreference(aws_tls_cipher_pref cipherPref) noexcept
Definition MqttClient.cpp:309
MqttClientConnectionConfig Build() noexcept
Definition MqttClient.cpp:463
MqttClientConnectionConfigBuilder & WithSdkName(const Crt::String &sdkName)
Definition MqttClient.cpp:219
MqttClientConnectionConfigBuilder & WithPortOverride(uint32_t port) noexcept
Definition MqttClient.cpp:232
MqttClientConnectionConfigBuilder & WithCustomAuthorizer(const Crt::String &username, const Crt::String &authorizerName, const Crt::String &authorizerSignature, const Crt::String &password) noexcept
Definition MqttClient.cpp:351
MqttClientConnectionConfigBuilder & WithTcpConnectTimeout(uint32_t connectTimeoutMs) noexcept
Definition MqttClient.cpp:271
MqttClientConnectionConfigBuilder()
Definition MqttClient.cpp:73
MqttClientConnectionConfigBuilder & WithCertificateAuthority(const char *caPath) noexcept
Definition MqttClient.cpp:238
int LastError() const noexcept
Definition MqttClient.h:451
MqttClientConnectionConfigBuilder & WithTcpKeepAliveMaxProbes(uint16_t maxProbes) noexcept
Definition MqttClient.cpp:292
MqttClientConnectionConfigBuilder & WithEndpoint(const Crt::String &endpoint)
Definition MqttClient.cpp:201
MqttClientConnectionConfigBuilder & WithPassword(const Crt::String &password) noexcept
Definition MqttClient.cpp:456
MqttClientConnectionConfigBuilder & WithTcpKeepAliveTimeout(uint16_t keepAliveTimeoutSecs) noexcept
Definition MqttClient.cpp:278
MqttClientConnectionConfigBuilder & WithSdkVersion(const Crt::String &sdkVersion)
Definition MqttClient.cpp:225
MqttClientConnectionConfigBuilder & WithMetricsCollection(bool enabled)
Definition MqttClient.cpp:213
MqttClientConnectionConfigBuilder & WithMinimumTlsVersion(aws_tls_versions minimumTlsVersion) noexcept
Definition MqttClient.cpp:299
Definition MqttClient.h:27
static MqttClientConnectionConfig CreateInvalid(int lastError) noexcept
Definition MqttClient.cpp:27
friend class MqttClient
Definition MqttClient.h:112
friend class MqttClientConnectionConfigBuilder
Definition MqttClient.h:113
MqttClientConnectionConfig(const Crt::String &endpoint, uint32_t port, const Crt::Io::SocketOptions &socketOptions, Crt::Io::TlsContext &&tlsContext, bool enableMetrics=true, const Crt::Optional< Crt::Mqtt::AWSIoTMetrics > &sdkMetrics=Crt::Optional< Crt::Mqtt::AWSIoTMetrics >())
Definition MqttClient.cpp:32
int LastError() const noexcept
Definition MqttClient.h:86
Definition MqttClient.h:486
MqttClient(Crt::Io::ClientBootstrap &bootstrap, Crt::Allocator *allocator=Crt::ApiAllocator()) noexcept
Definition MqttClient.cpp:583
int LastError() const noexcept
Definition MqttClient.h:508
std::shared_ptr< Crt::Mqtt::MqttConnection > NewConnection(const MqttClientConnectionConfig &config) noexcept
Definition MqttClient.cpp:597
#define AWS_CRT_CPP_API
Definition Exports.h:36
std::function< void(std::shared_ptr< Http::HttpRequest > req, const OnWebSocketHandshakeInterceptComplete &onComplete)> OnWebSocketHandshakeIntercept
Definition MqttConnection.h:145
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
Definition Mqtt5Client.h:27
static Crt::String AddToUsernameParameter(Crt::String currentUsername, Crt::String parameterValue, Crt::String parameterPreText)
Definition Mqtt5Client.cpp:22
Definition Allocator.h:11
Definition MqttCommon.h:105
Definition MqttCommon.h:24