Skip to content

Commit 5246899

Browse files
Crt version updates, fixed api changes, added base64 hook (aws#6)
* Updates to match the new mqtt API. * Update aws-c-* lib versions. * More cmake fixes. * Addressed PR feedback, clang format updates.
1 parent 3481983 commit 5246899

File tree

13 files changed

+207
-113
lines changed

13 files changed

+207
-113
lines changed

CMakeLists.txt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ cmake_minimum_required(VERSION 3.1)
22

33
option(BUILD_DEPS "Builds aws common runtime dependencies as part of build, only do this if you don't want to control your dependency chain." OFF)
44

5+
if (UNIX AND NOT APPLE)
6+
include(GNUInstallDirs)
7+
elseif(NOT DEFINED CMAKE_INSTALL_LIBDIR)
8+
set(CMAKE_INSTALL_LIBDIR "lib")
9+
endif()
10+
511
if (BUILD_DEPS)
612
set(AWS_DEPS_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps)
713
if (DEFINED CMAKE_INSTALL_PREFIX)
@@ -10,6 +16,10 @@ if (BUILD_DEPS)
1016
set(AWS_DEPS_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/deps/install)
1117
endif()
1218

19+
if (NOT DEFINED CMAKE_PREFIX_PATH)
20+
set(CMAKE_PREFIX_PATH ${AWS_DEPS_INSTALL_DIR})
21+
endif()
22+
1323
list(APPEND CMAKE_MODULE_PATH "${AWS_DEPS_INSTALL_DIR}/lib/cmake")
1424

1525
file(MAKE_DIRECTORY ${AWS_DEPS_BUILD_DIR})
@@ -26,6 +36,7 @@ if (BUILD_DEPS)
2636
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
2737
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
2838
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
39+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
2940
-DGIT_EXECUTABLE=${GIT_EXECUTABLE}
3041
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
3142
${CMAKE_CURRENT_SOURCE_DIR}/aws-common-runtime
@@ -40,6 +51,7 @@ if (BUILD_DEPS)
4051
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
4152
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
4253
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
54+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
4355
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_CURRENT_BINARY_DIR}/bin
4456
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
4557
${CMAKE_CURRENT_SOURCE_DIR}/aws-common-runtime
@@ -68,7 +80,7 @@ else()
6880
#the following two lines are done in this branch intentionally, don't move it. project() does some magic that
6981
#we want happening exactly right now.
7082
project(aws-crt-cpp CXX)
71-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_INSTALL_PREFIX}/lib/cmake")
83+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR}/cmake")
7284
endif()
7385

7486

aws-common-runtime/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ set(AWS_DEPS_DOWNLOAD_DIR "${AWS_DEPS_BUILD_DIR}/downloads" CACHE PATH "Dependen
1717

1818
message("install dir ${AWS_DEPS_INSTALL_DIR}")
1919
set(AWS_C_COMMON_URL "https://github.com/awslabs/aws-c-common.git")
20-
set(AWS_C_COMMON_SHA "v0.2.1")
20+
set(AWS_C_COMMON_SHA "v0.3.0")
2121
include(BuildAwsCCommon)
2222

2323
if (UNIX AND NOT APPLE)
2424
set(S2N_URL "https://github.com/awslabs/s2n.git")
25-
set(s2N_SHA "9f15675bd65555a15947df3be40ae4c8fba0a07b")
25+
set(s2N_SHA "383586162b3ee60bbd75105fcfe583b14bf60d46")
2626
include(BuildS2N)
2727
endif()
2828

2929
set(AWS_C_IO_URL "https://github.com/awslabs/aws-c-io.git")
30-
set(AWS_C_IO_SHA "v0.1.1")
30+
set(AWS_C_IO_SHA "v0.2.0")
3131
include(BuildAwsCIO)
3232

3333
set(AWS_C_MQTT_URL "https://github.com/awslabs/aws-c-mqtt.git")
34-
set(AWS_C_MQTT_SHA "v0.1.1")
34+
set(AWS_C_MQTT_SHA "v0.2.0")
3535
include(BuildAwsCMqtt)
3636

3737
add_dependencies(AwsCMqtt AwsCIO)

aws-common-runtime/cmake/BuildAwsCCommon.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ if("${TARGET_ARCH}" STREQUAL ANDROID)
77
UPDATE_COMMAND ""
88
CMAKE_ARGS
99
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
10+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
1011
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
1112
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
1213
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -27,6 +28,7 @@ elseif(MSVC)
2728
UPDATE_COMMAND ""
2829
CMAKE_ARGS
2930
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
31+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3032
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
3133
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
3234
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -42,6 +44,7 @@ else()
4244
UPDATE_COMMAND ""
4345
CMAKE_ARGS
4446
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
47+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
4548
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
4649
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
4750
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}

aws-common-runtime/cmake/BuildAwsCIO.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ if("${TARGET_ARCH}" STREQUAL ANDROID)
77
UPDATE_COMMAND ""
88
CMAKE_ARGS
99
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
10+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
1011
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
1112
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
1213
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -27,6 +28,7 @@ elseif(MSVC)
2728
UPDATE_COMMAND ""
2829
CMAKE_ARGS
2930
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
31+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3032
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
3133
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
3234
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -42,6 +44,7 @@ else()
4244
UPDATE_COMMAND ""
4345
CMAKE_ARGS
4446
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
47+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
4548
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
4649
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
4750
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}

aws-common-runtime/cmake/BuildAwsCMqtt.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ if("${TARGET_ARCH}" STREQUAL ANDROID)
77
UPDATE_COMMAND ""
88
CMAKE_ARGS
99
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
10+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
1011
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
1112
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
1213
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -27,6 +28,7 @@ elseif(MSVC)
2728
UPDATE_COMMAND ""
2829
CMAKE_ARGS
2930
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
31+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3032
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
3133
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
3234
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -42,6 +44,7 @@ else()
4244
UPDATE_COMMAND ""
4345
CMAKE_ARGS
4446
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
47+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
4548
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
4649
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
4750
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}

aws-common-runtime/cmake/BuildS2N.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ if("${TARGET_ARCH}" STREQUAL ANDROID)
99
UPDATE_COMMAND ""
1010
CMAKE_ARGS
1111
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
12+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
1213
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
1314
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
1415
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
@@ -29,6 +30,7 @@ else()
2930
UPDATE_COMMAND ""
3031
CMAKE_ARGS
3132
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
33+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
3234
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
3335
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
3436
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}

format-check.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/bin/bash
1+
#!/usr/bin/env bash
22

33
if [[ -z $CLANG_FORMAT ]] ; then
44
CLANG_FORMAT=clang-format

include/aws/crt/StlAllocator.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,16 @@
1414
* permissions and limitations under the License.
1515
*/
1616

17-
#include <aws/crt/Types.h>
18-
1917
#include <assert.h>
2018
#include <memory>
2119

20+
#include <aws/common/common.h>
21+
2222
namespace Aws
2323
{
2424
namespace Crt
2525
{
26+
using Allocator = aws_allocator;
2627
extern Allocator *g_allocator;
2728

2829
template <typename T> class StlAllocator : public std::allocator<T>

include/aws/crt/Types.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
* permissions and limitations under the License.
1515
*/
1616
#include <aws/crt/Exports.h>
17-
1817
#include <aws/crt/Optional.h>
18+
#include <aws/crt/StlAllocator.h>
1919

2020
#include <aws/common/common.h>
2121
#include <aws/io/socket.h>
@@ -40,12 +40,6 @@ namespace Aws
4040
using ByteBuf = aws_byte_buf;
4141
using ByteCursor = aws_byte_cursor;
4242

43-
AWS_CRT_CPP_API Allocator *DefaultAllocator() noexcept;
44-
AWS_CRT_CPP_API ByteBuf ByteBufFromCString(const char *str) noexcept;
45-
AWS_CRT_CPP_API ByteBuf ByteBufFromArray(const uint8_t *array, size_t len) noexcept;
46-
AWS_CRT_CPP_API ByteBuf ByteBufNewCopy(Allocator *alloc, const uint8_t *array, size_t len);
47-
AWS_CRT_CPP_API void ByteBufDelete(ByteBuf &);
48-
4943
namespace Io
5044
{
5145
using SocketOptions = aws_socket_options;
@@ -68,5 +62,14 @@ namespace Aws
6862
using MultiMap = std::multimap<K, V, std::less<K>, StlAllocator<std::pair<const K, V>>>;
6963
template <typename T> using Vector = std::vector<T, StlAllocator<T>>;
7064

65+
AWS_CRT_CPP_API Allocator *DefaultAllocator() noexcept;
66+
AWS_CRT_CPP_API ByteBuf ByteBufFromCString(const char *str) noexcept;
67+
AWS_CRT_CPP_API ByteBuf ByteBufFromArray(const uint8_t *array, size_t len) noexcept;
68+
AWS_CRT_CPP_API ByteBuf ByteBufNewCopy(Allocator *alloc, const uint8_t *array, size_t len);
69+
AWS_CRT_CPP_API void ByteBufDelete(ByteBuf &);
70+
71+
AWS_CRT_CPP_API Vector<uint8_t> Base64Decode(const String &decode);
72+
AWS_CRT_CPP_API String Base64Encode(const Vector<uint8_t> &encode);
73+
7174
} // namespace Crt
7275
} // namespace Aws

include/aws/crt/mqtt/MqttClient.h

Lines changed: 40 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,21 @@ namespace Aws
4747
};
4848

4949
/**
50-
* Invoked Upon Connection failure.
50+
* Invoked Upon Connection loss.
5151
*/
52-
using OnConnectionFailedHandler = std::function<void(MqttConnection &connection, int error)>;
52+
using OnConnectionInteruptedHandler = std::function<void(MqttConnection &connection, int error)>;
5353

5454
/**
55-
* Invoked when a connack message is received.
55+
* Invoked Upon Connection resumed.
5656
*/
57-
using OnConnAckHandler =
58-
std::function<void(MqttConnection &connection, ReturnCode returnCode, bool sessionPresent)>;
57+
using OnConnectionResumedHandler =
58+
std::function<void(MqttConnection &connection, ReturnCode connectCode, bool sessionPresent)>;
59+
60+
/**
61+
* Invoked when a connack message is received, or an error occured.
62+
*/
63+
using OnConnectionCompletedHandler = std::function<
64+
void(MqttConnection &connection, int errorCode, ReturnCode returnCode, bool sessionPresent)>;
5965

6066
/**
6167
* Invoked when a suback message is received.
@@ -76,7 +82,7 @@ namespace Aws
7682
/**
7783
* Invoked when a disconnect message has been sent.
7884
*/
79-
using OnDisconnectHandler = std::function<bool(MqttConnection &connection, int error)>;
85+
using OnDisconnectHandler = std::function<void(MqttConnection &connection)>;
8086

8187
/**
8288
* Invoked upon receipt of a Publish message on a subscribed topic.
@@ -120,7 +126,7 @@ namespace Aws
120126
bool SetLogin(const char *userName, const char *password) noexcept;
121127

122128
/**
123-
* Initiates the connection, OnConnectionFailedHandler and/or OnConnAckHandler will
129+
* Initiates the connection, OnConnectionCompleted will
124130
* be invoked in an event-loop thread.
125131
*/
126132
bool Connect(const char *clientId, bool cleanSession, uint16_t keepAliveTime) noexcept;
@@ -147,7 +153,7 @@ namespace Aws
147153
* upon receipt of a suback message.
148154
*/
149155
uint16_t Subscribe(
150-
const Vector<std::pair<const char *, OnPublishReceivedHandler>> topicFilters,
156+
const Vector<std::pair<const char *, OnPublishReceivedHandler>> &topicFilters,
151157
QOS qos,
152158
OnMultiSubAckHandler &&onOpComplete) noexcept;
153159

@@ -173,11 +179,21 @@ namespace Aws
173179
*/
174180
void Ping();
175181

176-
OnConnectionFailedHandler OnConnectionFailed;
177-
OnConnAckHandler OnConnAck;
182+
OnConnectionInteruptedHandler OnConnectionInterupted;
183+
OnConnectionResumedHandler OnConnectionResumed;
184+
OnConnectionCompletedHandler OnConnectionCompleted;
178185
OnDisconnectHandler OnDisconnect;
179186

180187
private:
188+
aws_mqtt_client *m_owningClient;
189+
aws_mqtt_client_connection *m_underlyingConnection;
190+
std::atomic<ConnectionState> m_connectionState;
191+
ByteBuf m_hostNameBuf;
192+
uint16_t m_port;
193+
Io::TlsConnectionOptions m_tlsOptions;
194+
Io::SocketOptions m_socketOptions;
195+
bool m_useTls;
196+
181197
MqttConnection(
182198
aws_mqtt_client *client,
183199
const char *hostName,
@@ -190,17 +206,20 @@ namespace Aws
190206
uint16_t port,
191207
const Io::SocketOptions &socketOptions) noexcept;
192208

193-
aws_mqtt_client *m_owningClient;
194-
aws_mqtt_client_connection *m_underlyingConnection;
195-
std::atomic<ConnectionState> m_connectionState;
196-
197-
static void s_onConnectionFailed(aws_mqtt_client_connection *connection, int errorCode, void *userData);
198-
static void s_onConnAck(
199-
aws_mqtt_client_connection *connection,
200-
enum aws_mqtt_connect_return_code return_code,
201-
bool session_present,
202-
void *user_data);
203-
static bool s_onDisconnect(aws_mqtt_client_connection *connection, int errorCode, void *userData);
209+
static void s_onConnectionInterrupted(aws_mqtt_client_connection *, int errorCode, void *userData);
210+
static void s_onConnectionCompleted(
211+
aws_mqtt_client_connection *,
212+
int errorCode,
213+
enum aws_mqtt_connect_return_code returnCode,
214+
bool sessionPresent,
215+
void *userData);
216+
static void s_onConnectionResumed(
217+
aws_mqtt_client_connection *,
218+
ReturnCode returnCode,
219+
bool sessionPresent,
220+
void *userData);
221+
222+
static void s_onDisconnect(aws_mqtt_client_connection *connection, void *userData);
204223
static void s_onPublish(
205224
aws_mqtt_client_connection *connection,
206225
const aws_byte_cursor *topic,

0 commit comments

Comments
 (0)