Skip to content

Commit 39dada6

Browse files
authored
Integrate aws-c-auth; logging; misc tweaks (aws#41)
* Integrate aws-c-auth; logging; misc tweaks
1 parent 63ae7f1 commit 39dada6

File tree

8 files changed

+173
-18
lines changed

8 files changed

+173
-18
lines changed

CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ file(GLOB AWS_CRT_HEADERS
102102
"include/aws/crt/*.h"
103103
)
104104

105+
file(GLOB AWS_CRT_AUTH_HEADERS
106+
"include/aws/crt/auth/*.h"
107+
)
108+
105109
file(GLOB AWS_CRT_CRYPTO_HEADERS
106110
"include/aws/crt/crypto/*.h"
107111
)
@@ -128,6 +132,7 @@ file(GLOB AWS_CRT_EXTERNAL_HEADERS
128132

129133
file(GLOB AWS_CRT_CPP_HEADERS
130134
${AWS_CRT_HEADERS}
135+
${AWS_CRT_AUTH_HEADERS}
131136
${AWS_CRT_CRYPTO_HEADERS}
132137
${AWS_CRT_IO_HEADERS}
133138
${AWS_CRT_IOT_HEADERS}
@@ -140,6 +145,10 @@ file(GLOB AWS_CRT_SRC
140145
"source/*.cpp"
141146
)
142147

148+
file(GLOB AWS_CRT_AUTH_SRC
149+
"source/auth/*.cpp"
150+
)
151+
143152
file(GLOB AWS_CRT_CRYPTO_SRC
144153
"source/crypto/*.cpp"
145154
)
@@ -166,6 +175,7 @@ file(GLOB AWS_CRT_EXTERNAL_CRC
166175

167176
file(GLOB AWS_CRT_CPP_SRC
168177
${AWS_CRT_SRC}
178+
${AWS_CRT_AUTH_SRC}
169179
${AWS_CRT_CRYPTO_SRC}
170180
${AWS_CRT_IO_SRC}
171181
${AWS_CRT_IOT_SRC}
@@ -177,6 +187,7 @@ file(GLOB AWS_CRT_CPP_SRC
177187
if (WIN32)
178188
if (MSVC)
179189
source_group("Header Files\\aws\\crt" FILES ${AWS_CRT_HEADERS})
190+
source_group("Header Files\\aws\\crt\\auth" FILES ${AWS_CRT_AUTH_HEADERS})
180191
source_group("Header Files\\aws\\crt\\crypto" FILES ${AWS_CRT_CRYPTO_HEADERS})
181192
source_group("Header Files\\aws\\crt\\io" FILES ${AWS_CRT_IO_HEADERS})
182193
source_group("Header Files\\aws\\iot" FILES ${AWS_CRT_IOT_HEADERS})
@@ -185,6 +196,7 @@ if (WIN32)
185196
source_group("Header Files\\aws\\crt\\external" FILES ${AWS_CRT_EXTERNAL_HEADERS})
186197

187198
source_group("Source Files" FILES ${AWS_CRT_SRC})
199+
source_group("Source Files\\auth" FILES ${AWS_CRT_AUTH_SRC})
188200
source_group("Source Files\\crypto" FILES ${AWS_CRT_CRYPTO_SRC})
189201
source_group("Source Files\\io" FILES ${AWS_CRT_IO_SRC})
190202
source_group("Source Files\\iot" FILES ${AWS_CRT_IOT_SRC})
@@ -224,9 +236,11 @@ target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
224236
find_package(aws-c-http REQUIRED)
225237
find_package(aws-c-mqtt REQUIRED)
226238
find_package(aws-c-cal REQUIRED)
227-
target_link_libraries(${CMAKE_PROJECT_NAME} AWS::aws-c-cal AWS::aws-c-http AWS::aws-c-mqtt)
239+
find_package(aws-c-auth REQUIRED)
240+
target_link_libraries(${CMAKE_PROJECT_NAME} AWS::aws-c-auth AWS::aws-c-cal AWS::aws-c-http AWS::aws-c-mqtt)
228241

229242
install(FILES ${AWS_CRT_HEADERS} DESTINATION "include/aws/crt" COMPONENT Development)
243+
install(FILES ${AWS_CRT_AUTH_HEADERS} DESTINATION "include/aws/crt/auth" COMPONENT Development)
230244
install(FILES ${AWS_CRT_CRYPTO_HEADERS} DESTINATION "include/aws/crt/crypto" COMPONENT Development)
231245
install(FILES ${AWS_CRT_IO_HEADERS} DESTINATION "include/aws/crt/io" COMPONENT Development)
232246
install(FILES ${AWS_CRT_IOT_HEADERS} DESTINATION "include/aws/iot" COMPONENT Development)

aws-common-runtime/CMakeLists.txt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ 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.3.15")
20+
set(AWS_C_COMMON_SHA "v0.4.1")
2121
include(BuildAwsCCommon)
2222

2323
if (UNIX AND NOT APPLE)
@@ -27,29 +27,34 @@ if (UNIX AND NOT APPLE)
2727
endif()
2828

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

3333
set(AWS_C_COMPRESSION_URL "https://github.com/awslabs/aws-c-compression.git")
34-
set(AWS_C_COMPRESSION_SHA "v0.2.1")
34+
set(AWS_C_COMPRESSION_SHA "v0.2.2")
3535
include(BuildAwsCCompression)
3636

3737
set(AWS_C_HTTP_URL "https://github.com/awslabs/aws-c-http.git")
38-
set(AWS_C_HTTP_SHA "v0.2.18")
38+
set(AWS_C_HTTP_SHA "v0.3.1")
3939
include(BuildAwsCHttp)
4040

4141
set(AWS_C_MQTT_URL "https://github.com/awslabs/aws-c-mqtt.git")
42-
set(AWS_C_MQTT_SHA "v0.3.11")
42+
set(AWS_C_MQTT_SHA "v0.4.1")
4343
include(BuildAwsCMqtt)
4444

4545
set(AWS_C_CAL_URL "https://github.com/awslabs/aws-c-cal.git")
4646
set(AWS_C_CAL_SHA "v0.1.5")
4747
include(BuildAwsCCal)
4848

49+
set(AWS_C_AUTH_URL "https://github.com/awslabs/aws-c-auth.git")
50+
set(AWS_C_AUTH_SHA "v0.1.1")
51+
include(BuildAwsCAuth)
52+
4953
add_dependencies(AwsCCompression AwsCCommon)
5054
add_dependencies(AwsCMqtt AwsCHttp)
5155
add_dependencies(AwsCHttp AwsCIO AwsCCompression)
5256
add_dependencies(AwsCCal AwsCCommon)
57+
add_dependencies(AwsCAuth AwsCHttp AwsCCal)
5358

5459
if (UNIX AND NOT APPLE)
5560
add_dependencies(AwsCIO S2N AwsCCommon)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
if("${TARGET_ARCH}" STREQUAL ANDROID)
2+
ExternalProject_Add(AwsCAuth
3+
PREFIX ${AWS_DEPS_BUILD_DIR}
4+
GIT_REPOSITORY ${AWS_C_AUTH_URL}
5+
GIT_TAG ${AWS_C_AUTH_SHA}
6+
BUILD_IN_SOURCE 0
7+
UPDATE_COMMAND ""
8+
CMAKE_ARGS
9+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
10+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
11+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
12+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
13+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
14+
-DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL}
15+
-DANDROID_ABI=${ANDROID_ABI}
16+
-DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME}
17+
-DANDROID_STANDALONE_TOOLCHAIN=${ANDROID_STANDALONE_TOOLCHAIN}
18+
-DANDROID_STL=${ANDROID_STL}
19+
-DENABLE_HW_OPTIMIZATION=OFF
20+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
21+
)
22+
elseif(MSVC)
23+
ExternalProject_Add(AwsCAuth
24+
PREFIX ${AWS_DEPS_BUILD_DIR}
25+
GIT_REPOSITORY ${AWS_C_AUTH_URL}
26+
GIT_TAG ${AWS_C_AUTH_SHA}
27+
BUILD_IN_SOURCE 0
28+
UPDATE_COMMAND ""
29+
CMAKE_ARGS
30+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
31+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
32+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
33+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
34+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
35+
-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
36+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
37+
)
38+
else()
39+
ExternalProject_Add(AwsCAuth
40+
PREFIX ${AWS_DEPS_BUILD_DIR}
41+
GIT_REPOSITORY ${AWS_C_AUTH_URL}
42+
GIT_TAG ${AWS_C_AUTH_SHA}
43+
BUILD_IN_SOURCE 0
44+
UPDATE_COMMAND ""
45+
CMAKE_ARGS
46+
-DCMAKE_INSTALL_PREFIX=${AWS_DEPS_INSTALL_DIR}
47+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
48+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
49+
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS}
50+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
51+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
52+
)
53+
endif()

cmake/aws-crt-cpp-config.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ include(CMakeFindDependencyMacro)
33
find_dependency(aws-c-http)
44
find_dependency(aws-c-mqtt)
55
find_dependency(aws-c-cal)
6+
find_dependency(aws-c-auth)
67

78
include(${CMAKE_CURRENT_LIST_DIR}/@CMAKE_PROJECT_NAME@-targets.cmake)

include/aws/crt/Api.h

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,25 @@
1919
#include <aws/crt/io/TlsOptions.h>
2020
#include <aws/crt/mqtt/MqttClient.h>
2121

22+
#include <aws/common/logging.h>
23+
2224
namespace Aws
2325
{
2426
namespace Crt
2527
{
28+
enum class LogLevel
29+
{
30+
None = AWS_LL_NONE,
31+
Fatal = AWS_LL_FATAL,
32+
Error = AWS_LL_ERROR,
33+
Warn = AWS_LL_WARN,
34+
Info = AWS_LL_INFO,
35+
Debug = AWS_LL_DEBUG,
36+
Trace = AWS_LL_TRACE,
37+
38+
Count
39+
};
40+
2641
class AWS_CRT_CPP_API ApiHandle
2742
{
2843
public:
@@ -33,9 +48,16 @@ namespace Aws
3348
ApiHandle(ApiHandle &&) = delete;
3449
ApiHandle &operator=(const ApiHandle &) = delete;
3550
ApiHandle &operator=(ApiHandle &&) = delete;
51+
52+
void InitializeLogging(LogLevel level, const char *filename);
53+
void InitializeLogging(LogLevel level, FILE *fp);
54+
55+
private:
56+
void InitializeLoggingCommon(struct aws_logger_standard_options &options);
57+
58+
aws_logger logger;
3659
};
3760

38-
AWS_CRT_CPP_API void LoadErrorStrings() noexcept;
3961
AWS_CRT_CPP_API const char *ErrorDebugString(int error) noexcept;
4062
AWS_CRT_CPP_API int LastError() noexcept;
4163
} // namespace Crt

include/aws/crt/Types.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,15 @@ namespace Aws
9393
return new (t) T(std::forward<Args>(args)...);
9494
}
9595

96+
template <typename T, typename... Args> std::shared_ptr<T> MakeShared(Allocator *allocator, Args &&... args)
97+
{
98+
T *t = reinterpret_cast<T *>(aws_mem_acquire(allocator, sizeof(T)));
99+
if (!t)
100+
return nullptr;
101+
new (t) T(std::forward<Args>(args)...);
102+
103+
return std::shared_ptr<T>(t, [allocator](T *obj) { Delete(obj, allocator); });
104+
}
105+
96106
} // namespace Crt
97107
} // namespace Aws

samples/mqtt_pub_sub/main.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,6 @@ int main(int argc, char *argv[])
6262
{
6363

6464
/************************ Setup the Lib ****************************/
65-
/*
66-
* These make debug output via ErrorDebugString() work.
67-
*/
68-
LoadErrorStrings();
69-
7065
/*
7166
* Do the global initialization for the API.
7267
*/

source/Api.cpp

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <aws/crt/external/cJSON.h>
1818
#include <aws/crt/io/TlsOptions.h>
1919

20+
#include <aws/auth/auth.h>
2021
#include <aws/http/http.h>
2122

2223
namespace Aws
@@ -36,6 +37,13 @@ namespace Aws
3637
Io::InitTlsStaticState(allocator);
3738
aws_http_library_init(allocator);
3839
aws_mqtt_library_init(allocator);
40+
aws_auth_library_init(allocator);
41+
42+
aws_load_error_strings();
43+
aws_io_load_error_strings();
44+
45+
aws_common_load_log_subject_strings();
46+
aws_io_load_log_subject_strings();
3947

4048
cJSON_Hooks hooks;
4149
hooks.malloc_fn = s_cJSONAlloc;
@@ -46,21 +54,68 @@ namespace Aws
4654
static void s_cleanUpApi()
4755
{
4856
g_allocator = nullptr;
57+
aws_auth_library_clean_up();
4958
aws_mqtt_library_clean_up();
5059
aws_http_library_clean_up();
5160
Io::CleanUpTlsStaticState();
5261
}
5362

54-
ApiHandle::ApiHandle(Allocator *allocator) noexcept { s_initApi(allocator); }
63+
ApiHandle::ApiHandle(Allocator *allocator) noexcept : logger() { s_initApi(allocator); }
5564

56-
ApiHandle::ApiHandle() noexcept { s_initApi(DefaultAllocator()); }
65+
ApiHandle::ApiHandle() noexcept : logger() { s_initApi(DefaultAllocator()); }
5766

58-
ApiHandle::~ApiHandle() { s_cleanUpApi(); }
67+
ApiHandle::~ApiHandle()
68+
{
69+
s_cleanUpApi();
5970

60-
void LoadErrorStrings() noexcept
71+
if (aws_logger_get() == &logger)
72+
{
73+
aws_logger_set(NULL);
74+
aws_logger_clean_up(&logger);
75+
}
76+
}
77+
78+
void ApiHandle::InitializeLogging(Aws::Crt::LogLevel level, const char *filename)
6179
{
62-
aws_load_error_strings();
63-
aws_io_load_error_strings();
80+
struct aws_logger_standard_options options;
81+
AWS_ZERO_STRUCT(options);
82+
83+
options.level = (enum aws_log_level)level;
84+
options.filename = filename;
85+
86+
InitializeLoggingCommon(options);
87+
}
88+
89+
void ApiHandle::InitializeLogging(Aws::Crt::LogLevel level, FILE *fp)
90+
{
91+
struct aws_logger_standard_options options;
92+
AWS_ZERO_STRUCT(options);
93+
94+
options.level = (enum aws_log_level)level;
95+
options.file = fp;
96+
97+
InitializeLoggingCommon(options);
98+
}
99+
100+
void ApiHandle::InitializeLoggingCommon(struct aws_logger_standard_options &options)
101+
{
102+
if (aws_logger_get() == &logger)
103+
{
104+
aws_logger_set(NULL);
105+
aws_logger_clean_up(&logger);
106+
if (options.level == AWS_LL_NONE)
107+
{
108+
AWS_ZERO_STRUCT(logger);
109+
return;
110+
}
111+
}
112+
113+
if (aws_logger_init_standard(&logger, g_allocator, &options))
114+
{
115+
return;
116+
}
117+
118+
aws_logger_set(&logger);
64119
}
65120

66121
const char *ErrorDebugString(int error) noexcept { return aws_error_debug_str(error); }

0 commit comments

Comments
 (0)