Skip to content

Commit 0953fd1

Browse files
committed
Release v0.4
2 parents deec71f + ef87d75 commit 0953fd1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+5349
-1493
lines changed

.appveyor.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ configuration:
1919
- Release
2020

2121
environment:
22-
COMMS_BRANCH: v5.2.2
23-
CC_MQTT5_BRANCH: v2.6
22+
COMMS_BRANCH: v5.2.3
23+
CC_MQTT5_BRANCH: v2.7
2424
matrix:
2525
- CPP_STD: 17
2626
- CPP_STD: 20
@@ -51,7 +51,7 @@ build_script:
5151
- cmake .. -DCMAKE_BUILD_TYPE=%CONFIGURATION% -G "%CMAKE_GENERATOR%" %PLATFORM_PARAM% -DBOOST_ROOT="%BOOST_DIR%" ^
5252
-DBoost_USE_STATIC_LIBS=ON -DCMAKE_CXX_STANDARD=%CPP_STD% -DCMAKE_INSTALL_PREFIX=install ^
5353
-DCMAKE_PREFIX_PATH="%COMMON_INSTALL_DIR%" -DCC_MQTT5_BUILD_UNIT_TESTS=ON -DCC_MQTT5_CLIENT_AFL_FUZZ=ON ^
54-
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES=%APPVEYOR_BUILD_FOLDER%/client/lib/script/BareMetalConfig.cmake
54+
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES=%APPVEYOR_BUILD_FOLDER%/client/lib/script/BareMetalTestConfig.cmake
5555
- cmake --build . --config %CONFIGURATION% --target install --parallel %NUMBER_OF_PROCESSORS%
5656

5757

.github/workflows/actions_build.yml

Lines changed: 124 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ name: Github Actions Build
33
on: [push]
44

55
env:
6-
COMMS_BRANCH: v5.2.2
7-
CC_MQTT5_BRANCH: v2.6
6+
COMMS_TAG: v5.2.3
7+
CC_MQTT5_TAG: v2.7
88

99
jobs:
1010
build_gcc_ubuntu_22_04:
@@ -19,7 +19,7 @@ jobs:
1919
- cc_ver: 12
2020
cpp: 20
2121
steps:
22-
- uses: actions/checkout@v2
22+
- uses: actions/checkout@v4
2323

2424
- name: Prepare Install
2525
run: sudo apt-get update --fix-missing
@@ -41,8 +41,8 @@ jobs:
4141
COMMON_INSTALL_DIR: ${{runner.workspace}}/build/install
4242
COMMON_BUILD_TYPE: ${{matrix.type}}
4343
COMMON_CXX_STANDARD: ${{matrix.cpp}}
44-
COMMS_TAG: ${{env.COMMS_BRANCH}}
45-
CC_MQTT5_TAG: ${{env.CC_MQTT5_BRANCH}}
44+
COMMS_TAG: ${{env.COMMS_TAG}}
45+
CC_MQTT5_TAG: ${{env.CC_MQTT5_TAG}}
4646

4747
- name: Configure CMake
4848
shell: bash
@@ -52,7 +52,7 @@ jobs:
5252
-DCMAKE_PREFIX_PATH=${{runner.workspace}}/build/install -DCMAKE_CXX_STANDARD=${{matrix.cpp}} \
5353
-DCC_MQTT5_WITH_DEFAULT_SANITIZERS=ON \
5454
-DCC_MQTT5_BUILD_UNIT_TESTS=ON -DCC_MQTT5_BUILD_INTEGRATION_TESTS=ON \
55-
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES=$GITHUB_WORKSPACE/client/lib/script/BareMetalConfig.cmake \
55+
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES="$GITHUB_WORKSPACE/client/lib/script/BareMetalTestConfig.cmake;$GITHUB_WORKSPACE/client/lib/script/Qos0TestConfig.cmake;$GITHUB_WORKSPACE/client/lib/script/Qos1TestConfig.cmake" \
5656
-DCC_MQTT5_CLIENT_AFL_FUZZ=ON
5757
env:
5858
CC: gcc-${{matrix.cc_ver}}
@@ -89,7 +89,7 @@ jobs:
8989

9090

9191
steps:
92-
- uses: actions/checkout@v2
92+
- uses: actions/checkout@v4
9393

9494
- name: Prepare Install
9595
run: sudo apt-get update --fix-missing
@@ -111,8 +111,8 @@ jobs:
111111
COMMON_INSTALL_DIR: ${{runner.workspace}}/build/install
112112
COMMON_BUILD_TYPE: ${{matrix.type}}
113113
COMMON_CXX_STANDARD: ${{matrix.cpp}}
114-
COMMS_TAG: ${{env.COMMS_BRANCH}}
115-
CC_MQTT5_TAG: ${{env.CC_MQTT5_BRANCH}}
114+
COMMS_TAG: ${{env.COMMS_TAG}}
115+
CC_MQTT5_TAG: ${{env.CC_MQTT5_TAG}}
116116

117117
- name: Configure CMake
118118
shell: bash
@@ -122,7 +122,7 @@ jobs:
122122
-DCMAKE_PREFIX_PATH=${{runner.workspace}}/build/install -DCMAKE_CXX_STANDARD=${{matrix.cpp}} \
123123
-DCC_MQTT5_WITH_DEFAULT_SANITIZERS=ON \
124124
-DCC_MQTT5_BUILD_UNIT_TESTS=ON -DCC_MQTT5_BUILD_INTEGRATION_TESTS=ON \
125-
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES=$GITHUB_WORKSPACE/client/lib/script/BareMetalConfig.cmake \
125+
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES="$GITHUB_WORKSPACE/client/lib/script/BareMetalTestConfig.cmake;$GITHUB_WORKSPACE/client/lib/script/Qos0TestConfig.cmake;$GITHUB_WORKSPACE/client/lib/script/Qos1TestConfig.cmake" \
126126
-DCC_MQTT5_CLIENT_AFL_FUZZ=ON
127127
env:
128128
CC: clang-${{matrix.cc_ver}}
@@ -138,4 +138,117 @@ jobs:
138138
working-directory: ${{runner.workspace}}/build
139139
shell: bash
140140
run: ctest -V
141-
141+
142+
build_msvc_2019:
143+
runs-on: windows-2019
144+
strategy:
145+
fail-fast: false
146+
matrix:
147+
type: [Debug, Release, MinSizeRel]
148+
arch: [Win32, x64]
149+
cpp: [17]
150+
151+
steps:
152+
- uses: actions/checkout@v4
153+
154+
- name: Create Build Environment
155+
run: cmake -E make_directory ${{runner.workspace}}/build
156+
157+
- name: Install Boost
158+
shell: cmd
159+
run: |
160+
choco install boost-msvc-14.2
161+
162+
- name: Prepare externals
163+
shell: cmd
164+
run: |
165+
%GITHUB_WORKSPACE%\script\prepare_externals.bat
166+
env:
167+
BUILD_DIR: ${{runner.workspace}}/build
168+
PLATFORM: ${{matrix.arch}}
169+
EXTERNALS_DIR: ${{runner.workspace}}/externals
170+
COMMON_INSTALL_DIR: ${{runner.workspace}}/build/install
171+
COMMON_BUILD_TYPE: ${{matrix.type}}
172+
COMMON_CXX_STANDARD: ${{matrix.cpp}}
173+
COMMS_TAG: ${{env.COMMS_TAG}}
174+
CC_MQTT5_TAG: ${{env.CC_MQTT5_TAG}}
175+
176+
- name: Configure CMake
177+
shell: cmd
178+
working-directory: ${{runner.workspace}}/build
179+
run: |
180+
cmake %GITHUB_WORKSPACE% -A ${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.type}} -DCMAKE_INSTALL_PREFIX=install ^
181+
-DCMAKE_PREFIX_PATH=${{runner.workspace}}/build/install -DCMAKE_CXX_STANDARD=${{matrix.cpp}} -DBoost_USE_STATIC_LIBS=ON ^
182+
-DCC_MQTT5_BUILD_UNIT_TESTS=ON ^
183+
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES="%GITHUB_WORKSPACE%/client/lib/script/BareMetalTestConfig.cmake;%GITHUB_WORKSPACE%/client/lib/script/Qos0TestConfig.cmake;%GITHUB_WORKSPACE%/client/lib/script/Qos1TestConfig.cmake" ^
184+
-DCC_MQTT5_CLIENT_AFL_FUZZ=ON
185+
186+
- name: Build Target
187+
working-directory: ${{runner.workspace}}/build
188+
shell: cmd
189+
run: cmake --build . --config ${{matrix.type}} --target install
190+
env:
191+
VERBOSE: 1
192+
- name: Testing
193+
working-directory: ${{runner.workspace}}/build
194+
shell: cmd
195+
run: ctest -V
196+
197+
build_msvc_2022:
198+
runs-on: windows-2022
199+
strategy:
200+
fail-fast: false
201+
matrix:
202+
type: [Debug, Release, MinSizeRel]
203+
arch: [Win32, x64]
204+
cpp: [17, 20]
205+
206+
steps:
207+
- uses: actions/checkout@v4
208+
209+
- name: Create Build Environment
210+
run: cmake -E make_directory ${{runner.workspace}}/build
211+
212+
- name: Install Boost
213+
if: matrix.arch == 'x64'
214+
shell: cmd
215+
run: |
216+
choco install boost-msvc-14.3
217+
218+
- name: Prepare externals
219+
shell: cmd
220+
run: |
221+
%GITHUB_WORKSPACE%\script\prepare_externals.bat
222+
env:
223+
BUILD_DIR: ${{runner.workspace}}/build
224+
PLATFORM: ${{matrix.arch}}
225+
EXTERNALS_DIR: ${{runner.workspace}}/externals
226+
COMMON_INSTALL_DIR: ${{runner.workspace}}/build/install
227+
COMMON_BUILD_TYPE: ${{matrix.type}}
228+
COMMON_CXX_STANDARD: ${{matrix.cpp}}
229+
COMMS_TAG: ${{env.COMMS_TAG}}
230+
CC_MQTT5_TAG: ${{env.CC_MQTT5_TAG}}
231+
232+
- name: Configure CMake
233+
shell: cmd
234+
working-directory: ${{runner.workspace}}/build
235+
run: |
236+
cmake %GITHUB_WORKSPACE% -A ${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.type}} -DCMAKE_INSTALL_PREFIX=install ^
237+
-DCMAKE_PREFIX_PATH=${{runner.workspace}}/build/install -DCMAKE_CXX_STANDARD=${{matrix.cpp}} -DBoost_USE_STATIC_LIBS=ON ^
238+
-DCC_MQTT5_BUILD_UNIT_TESTS=ON ^
239+
-DCC_MQTT5_CUSTOM_CLIENT_CONFIG_FILES="%GITHUB_WORKSPACE%/client/lib/script/BareMetalTestConfig.cmake;%GITHUB_WORKSPACE%/client/lib/script/Qos0TestConfig.cmake;%GITHUB_WORKSPACE%/client/lib/script/Qos1TestConfig.cmake" ^
240+
-DCC_MQTT5_CLIENT_APPS=${{env.HAS_BOOST}} -DCC_MQTT5_CLIENT_AFL_FUZZ=${{env.HAS_BOOST}}
241+
env:
242+
HAS_BOOST: "${{ matrix.arch == 'x64' && 'ON' || 'OFF' }}"
243+
244+
- name: Build Target
245+
working-directory: ${{runner.workspace}}/build
246+
shell: cmd
247+
run: cmake --build . --config ${{matrix.type}} --target install
248+
env:
249+
VERBOSE: 1
250+
- name: Testing
251+
working-directory: ${{runner.workspace}}/build
252+
shell: cmd
253+
run: ctest -V
254+

client/afl_fuzz/AflFuzz.cpp.templ

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,8 @@ public:
160160

161161
if (!cc_mqtt5_##NAME##client_is_network_disconnected(m_client.get())) {
162162
infoLog() << "Insufficient data in buffer (" << dataLen << "), reporting network disconnected..." << std::endl;
163-
cc_mqtt5_##NAME##client_notify_network_disconnected(m_client.get(), true);
163+
cc_mqtt5_##NAME##client_notify_network_disconnected(m_client.get());
164+
brokerDisconnectReportCb(this, nullptr);
164165
continue;
165166
}
166167

@@ -192,7 +193,7 @@ public:
192193
if ((consumed == 0U) && noMoreRead) {
193194
if (!cc_mqtt5_##NAME##client_is_network_disconnected(m_client.get())) {
194195
infoLog() << "No data consumed and no more input, reporting network disconnected..." << std::endl;
195-
cc_mqtt5_##NAME##client_notify_network_disconnected(m_client.get(), true);
196+
cc_mqtt5_##NAME##client_notify_network_disconnected(m_client.get());
196197
continue;
197198
}
198199

@@ -277,12 +278,7 @@ private:
277278
m_state.m_disconnected = false;
278279
m_state.m_reauthRequired = !m_opts.authMethod().empty();
279280
m_state.m_publishCount = 0U;
280-
281-
auto ec = cc_mqtt5_##NAME##client_init(m_client.get());
282-
assert(ec == CC_Mqtt5ErrorCode_Success);
283-
if (ec != CC_Mqtt5ErrorCode_Success) {
284-
exit(-1);
285-
}
281+
m_state.m_connected = false;
286282
}
287283

288284
void doConnect()
@@ -550,6 +546,7 @@ private:
550546

551547
m_state.m_disconnected = true;
552548
m_state.m_reinitRequired = true;
549+
m_state.m_connected = false;
553550

554551
CC_Mqtt5ErrorCode ec = CC_Mqtt5ErrorCode_ValuesLimit;
555552
auto handle = cc_mqtt5_##NAME##client_disconnect_prepare(m_client.get(), &ec);
@@ -574,7 +571,7 @@ private:
574571
if (ec != CC_Mqtt5ErrorCode_Success) {
575572
errorLog() << "Failed to send disconnect\n";
576573
return;
577-
}
574+
}
578575
}
579576

580577
bool createGeneratorIfNeeded()
@@ -639,11 +636,8 @@ private:
639636
auto& state = asThis(data)->m_state;
640637
state.m_disconnected = true;
641638
state.m_connected = false;
642-
643-
if (!cc_mqtt5_##NAME##client_is_network_disconnected(asThis(data)->m_client.get())) {
644-
state.m_reinitRequired = true;
645-
state.m_connectRequired = true;
646-
}
639+
state.m_reinitRequired = true;
640+
state.m_connectRequired = true;
647641
}
648642

649643
static void messageReceivedReportCb(void* data, const CC_Mqtt5MessageInfo* info)

client/app/common/AppClient.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,6 @@ bool AppClient::start(int argc, const char* argv[])
141141
return true;
142142
}
143143

144-
auto ec = ::cc_mqtt5_client_init(m_client.get());
145-
if (ec != CC_Mqtt5ErrorCode_Success) {
146-
logError() << "Failed to initialize client object." << std::endl;
147-
return false;
148-
}
149-
150144
if (!createSession()) {
151145
return false;
152146
}
@@ -170,9 +164,10 @@ std::string AppClient::toString(CC_Mqtt5ErrorCode val)
170164
"CC_Mqtt5ErrorCode_BufferOverflow",
171165
"CC_Mqtt5ErrorCode_NotSupported",
172166
"CC_Mqtt5ErrorCode_RetryLater",
173-
"CC_Mqtt5ErrorCode_Terminating",
167+
"CC_Mqtt5ErrorCode_Disconnecting",
174168
"CC_Mqtt5ErrorCode_NetworkDisconnected",
175169
"CC_Mqtt5ErrorCode_NotAuthenticated",
170+
"CC_Mqtt5ErrorCode_PreparationLocked",
176171
};
177172
static constexpr std::size_t MapSize = std::extent<decltype(Map)>::value;
178173
static_assert(MapSize == CC_Mqtt5ErrorCode_ValuesLimit);
@@ -755,10 +750,11 @@ bool AppClient::createSession()
755750
});
756751

757752
m_session->setNetworkDisconnectedReportCb(
758-
[this](bool disconnected)
753+
[this]()
759754
{
760755
assert(m_client);
761-
::cc_mqtt5_client_notify_network_disconnected(m_client.get(), disconnected);
756+
::cc_mqtt5_client_notify_network_disconnected(m_client.get());
757+
brokerDisconnectedImpl(nullptr);
762758
}
763759
);
764760

client/app/common/ProgramOptions.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ void ProgramOptions::addSubscribe()
109109
("sub-topic,t", po::value<StringsList>(), "Subscribe topic filter. Can be used multiple times.")
110110
("sub-qos,q", po::value<UnsignedsList>(), "Subscribe max QoS: 0, 1, or 2. Defaults to 2. Can be used multiple times "
111111
"(for each topic filter correspondingly).")
112+
("sub-no-retained", "Disable reception of the retained messages")
112113
("sub-binary", "Force binary output of the received message data")
113114
("sub-id", po::value<unsigned>()->default_value(0), "\"Subscription Identifier\" property.")
114115
("sub-user-prop", po::value<StringsList>(), "Add \"User Property\" in \"key=value\" format to the SUBSCRIBE request.")
@@ -332,6 +333,11 @@ ProgramOptions::UnsignedsList ProgramOptions::subQoses() const
332333
return result;
333334
}
334335

336+
bool ProgramOptions::subNoRetained() const
337+
{
338+
return m_vm.count("sub-no-retained") > 0U;
339+
}
340+
335341
bool ProgramOptions::subBinary() const
336342
{
337343
return m_vm.count("sub-binary") > 0U;

client/app/common/ProgramOptions.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class ProgramOptions
8989
// Subscribe Options
9090
StringsList subTopics() const;
9191
UnsignedsList subQoses() const;
92+
bool subNoRetained() const;
9293
bool subBinary() const;
9394
unsigned subId() const;
9495
StringsList subUserProps() const;

client/app/common/Session.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,16 @@ unsigned Session::reportData(const std::uint8_t* buf, std::size_t bufLen)
5050
return m_dataReportCb(buf, bufLen);
5151
}
5252

53-
void Session::reportNetworkDisconnected(bool disconnected)
53+
void Session::reportNetworkDisconnected()
5454
{
55-
if (disconnected == m_networkDisconnected) {
55+
if (m_networkDisconnected) {
5656
return;
5757
}
58+
59+
m_networkDisconnected = true;
5860

5961
assert(m_networkDisconnectedReportCb);
60-
m_networkDisconnectedReportCb(disconnected);
62+
m_networkDisconnectedReportCb();
6163
}
6264

6365
} // namespace cc_mqtt5_client_app

client/app/common/Session.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Session
4343
m_dataReportCb = std::forward<TFunc>(func);
4444
}
4545

46-
using NetworkDisconnectedReportCb = std::function<void (bool)>;
46+
using NetworkDisconnectedReportCb = std::function<void ()>;
4747
template <typename TFunc>
4848
void setNetworkDisconnectedReportCb(TFunc&& func)
4949
{
@@ -67,7 +67,7 @@ class Session
6767
static std::ostream& logError();
6868

6969
unsigned reportData(const std::uint8_t* buf, std::size_t bufLen);
70-
void reportNetworkDisconnected(bool disconnected);
70+
void reportNetworkDisconnected();
7171

7272
virtual bool startImpl() = 0;
7373
virtual void sendDataImpl(const std::uint8_t* buf, std::size_t bufLen) = 0;

0 commit comments

Comments
 (0)