Skip to content
This repository was archived by the owner on Jan 2, 2025. It is now read-only.

Commit ca06ec3

Browse files
authored
Make libndt.hpp easily SWIG-wrappable (#45)
* Start working on SWIG * WORK * MORE WORk * Further API changes * We don't need libndt.i for now * Repair appveyor build * Fix more windows build errors
1 parent f7898f5 commit ca06ec3

File tree

5 files changed

+136
-158
lines changed

5 files changed

+136
-158
lines changed

curlx.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -34,33 +34,33 @@ static size_t curl_callback(char *ptr, size_t size, size_t nmemb,
3434
namespace measurement_kit {
3535
namespace libndt {
3636

37-
#define EMIT_WARNING(client, statements) \
38-
do { \
39-
if (client->get_verbosity() >= verbosity::warning) { \
40-
std::stringstream ss; \
41-
ss << statements; \
42-
client->on_warning(ss.str()); \
43-
} \
37+
#define EMIT_WARNING(client, statements) \
38+
do { \
39+
if (client->get_verbosity() >= verbosity_warning) { \
40+
std::stringstream ss; \
41+
ss << statements; \
42+
client->on_warning(ss.str()); \
43+
} \
4444
} while (0)
4545

46-
#define EMIT_INFO(client, statements) \
46+
#define EMIT_INFO(client, statements) \
47+
do { \
48+
if (client->get_verbosity() >= verbosity_info) { \
49+
std::stringstream ss; \
50+
ss << statements; \
51+
client->on_info(ss.str()); \
52+
} \
53+
} while (0)
54+
55+
#define EMIT_DEBUG(client, statements) \
4756
do { \
48-
if (client->get_verbosity() >= verbosity::info) { \
57+
if (client->get_verbosity() >= verbosity_debug) { \
4958
std::stringstream ss; \
5059
ss << statements; \
51-
client->on_info(ss.str()); \
60+
client->on_debug(ss.str()); \
5261
} \
5362
} while (0)
5463

55-
#define EMIT_DEBUG(client, statements) \
56-
do { \
57-
if (client->get_verbosity() >= verbosity::debug) { \
58-
std::stringstream ss; \
59-
ss << statements; \
60-
client->on_debug(ss.str()); \
61-
} \
62-
} while (0)
63-
6464
void CurlDeleter::operator()(CURL *handle) noexcept {
6565
if (handle != nullptr) {
6666
curl_easy_cleanup(handle);
@@ -129,7 +129,7 @@ bool Curl::method_get(const std::string &url, long timeout,
129129

130130
bool Curl::init() noexcept {
131131
if (!!handle_) {
132-
return true; // make the method idempotent
132+
return true; // make the method idempotent
133133
}
134134
auto handle = this->easy_init();
135135
if (!handle) {

libndt-client.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static void usage() {
3232
int main(int, char **argv) {
3333
using namespace measurement_kit;
3434
libndt::Settings settings;
35-
settings.verbosity = libndt::verbosity::quiet;
35+
settings.verbosity = libndt::verbosity_quiet;
3636
settings.nettest_flags = 0; // you need to enable tests explicitly
3737

3838
{
@@ -42,19 +42,19 @@ int main(int, char **argv) {
4242
cmdline.parse(argv);
4343
for (auto &flag : cmdline.flags()) {
4444
if (flag == "download") {
45-
settings.nettest_flags |= libndt::nettest_flag::download;
45+
settings.nettest_flags |= libndt::nettest_flag_download;
4646
std::clog << "will run download" << std::endl;
4747
} else if (flag == "download-ext") {
48-
settings.nettest_flags |= libndt::nettest_flag::download_ext;
48+
settings.nettest_flags |= libndt::nettest_flag_download_ext;
4949
std::clog << "will run download-ext" << std::endl;
5050
} else if (flag == "json") {
51-
settings.protocol_flags = libndt::protocol_flag::json;
51+
settings.protocol_flags = libndt::protocol_flag_json;
5252
std::clog << "will use json" << std::endl;
5353
} else if (flag == "upload") {
54-
settings.nettest_flags |= libndt::nettest_flag::upload;
54+
settings.nettest_flags |= libndt::nettest_flag_upload;
5555
std::clog << "will run upload" << std::endl;
5656
} else if (flag == "verbose") {
57-
settings.verbosity = libndt::verbosity::debug;
57+
settings.verbosity = libndt::verbosity_debug;
5858
std::clog << "will be verbose" << std::endl;
5959
} else {
6060
std::clog << "fatal: unrecognized flag: " << flag << std::endl;

libndt.cpp

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -48,33 +48,33 @@ constexpr size_t msg_kickoff_size = sizeof(msg_kickoff) - 1;
4848

4949
// Private utils
5050

51-
#define EMIT_WARNING(statements) \
52-
do { \
53-
if (impl->settings.verbosity >= verbosity::warning) { \
54-
std::stringstream ss; \
55-
ss << statements; \
56-
on_warning(ss.str()); \
57-
} \
51+
#define EMIT_WARNING(statements) \
52+
do { \
53+
if (impl->settings.verbosity >= verbosity_warning) { \
54+
std::stringstream ss; \
55+
ss << statements; \
56+
on_warning(ss.str()); \
57+
} \
5858
} while (0)
5959

60-
#define EMIT_INFO(statements) \
60+
#define EMIT_INFO(statements) \
61+
do { \
62+
if (impl->settings.verbosity >= verbosity_info) { \
63+
std::stringstream ss; \
64+
ss << statements; \
65+
on_info(ss.str()); \
66+
} \
67+
} while (0)
68+
69+
#define EMIT_DEBUG(statements) \
6170
do { \
62-
if (impl->settings.verbosity >= verbosity::info) { \
71+
if (impl->settings.verbosity >= verbosity_debug) { \
6372
std::stringstream ss; \
6473
ss << statements; \
65-
on_info(ss.str()); \
74+
on_debug(ss.str()); \
6675
} \
6776
} while (0)
6877

69-
#define EMIT_DEBUG(statements) \
70-
do { \
71-
if (impl->settings.verbosity >= verbosity::debug) { \
72-
std::stringstream ss; \
73-
ss << statements; \
74-
on_debug(ss.str()); \
75-
} \
76-
} while (0)
77-
7878
#ifdef _WIN32
7979
#define OS_ERROR_IS_EINTR() (false)
8080
#define OS_SHUT_RDWR SD_BOTH
@@ -109,7 +109,7 @@ static void random_printable_fill(char *buffer, size_t length) noexcept {
109109
}
110110
}
111111

112-
static double compute_speed(uint64_t data, double elapsed) noexcept {
112+
static double compute_speed(double data, double elapsed) noexcept {
113113
return (elapsed > 0.0) ? ((data * 8.0) / 1000.0 / elapsed) : 0.0;
114114
}
115115

@@ -247,21 +247,19 @@ bool Client::run() noexcept {
247247
return true;
248248
}
249249

250-
void Client::on_warning(const std::string &msg) noexcept {
250+
void Client::on_warning(const std::string &msg) {
251251
std::clog << "[!] " << msg << std::endl;
252252
}
253253

254-
void Client::on_info(const std::string &msg) noexcept {
255-
std::clog << msg << std::endl;
256-
}
254+
void Client::on_info(const std::string &msg) { std::clog << msg << std::endl; }
257255

258-
void Client::on_debug(const std::string &msg) noexcept {
256+
void Client::on_debug(const std::string &msg) {
259257
std::clog << "[D] " << msg << std::endl;
260258
}
261259

262-
void Client::on_performance(uint8_t tid, uint8_t nflows,
263-
uint64_t measured_bytes, double measured_interval,
264-
double elapsed_time, double max_runtime) noexcept {
260+
void Client::on_performance(uint8_t tid, uint8_t nflows, double measured_bytes,
261+
double measured_interval, double elapsed_time,
262+
double max_runtime) {
265263
auto speed = compute_speed(measured_bytes, measured_interval);
266264
EMIT_INFO(" [" << std::fixed << std::setprecision(0) << std::setw(2)
267265
<< std::right << (elapsed_time * 100.0 / max_runtime) << "%]"
@@ -272,12 +270,11 @@ void Client::on_performance(uint8_t tid, uint8_t nflows,
272270
<< std::right << speed << " kbit/s");
273271
}
274272

275-
void Client::on_result(std::string scope, std::string name,
276-
std::string value) noexcept {
273+
void Client::on_result(std::string scope, std::string name, std::string value) {
277274
EMIT_INFO(" - [" << scope << "] " << name << ": " << value);
278275
}
279276

280-
void Client::on_server_busy(std::string msg) noexcept {
277+
void Client::on_server_busy(std::string msg) {
281278
EMIT_WARNING("server is busy: " << msg);
282279
}
283280

@@ -383,20 +380,20 @@ bool Client::recv_tests_ids() noexcept {
383380
bool Client::run_tests() noexcept {
384381
for (auto &tid : impl->granted_suite) {
385382
switch (tid) {
386-
case nettest_flag::upload:
383+
case nettest_flag_upload:
387384
EMIT_INFO("running upload test");
388385
if (!run_upload()) {
389386
return false;
390387
}
391388
break;
392-
case nettest_flag::meta:
389+
case nettest_flag_meta:
393390
EMIT_DEBUG("running meta test"); // don't annoy the user with this
394391
if (!run_meta()) {
395392
return false;
396393
}
397394
break;
398-
case nettest_flag::download:
399-
case nettest_flag::download_ext:
395+
case nettest_flag_download:
396+
case nettest_flag_download_ext:
400397
EMIT_INFO("running download test");
401398
if (!run_download()) {
402399
return false;
@@ -543,7 +540,8 @@ bool Client::run_download() noexcept {
543540
std::chrono::duration<double> measurement_interval = now - prev;
544541
std::chrono::duration<double> elapsed = now - begin;
545542
if (measurement_interval.count() > 0.25) {
546-
on_performance(nettest_flag::download, nflows, recent_data,
543+
on_performance(nettest_flag_download, nflows,
544+
static_cast<double>(recent_data),
547545
measurement_interval.count(), elapsed.count(),
548546
impl->settings.max_runtime);
549547
recent_data = 0;
@@ -559,7 +557,8 @@ bool Client::run_download() noexcept {
559557
}
560558
auto now = std::chrono::steady_clock::now();
561559
std::chrono::duration<double> elapsed = now - begin;
562-
client_side_speed = compute_speed(total_data, elapsed.count());
560+
client_side_speed = compute_speed( //
561+
static_cast<double>(total_data), elapsed.count());
563562
}
564563

565564
{
@@ -711,7 +710,8 @@ bool Client::run_upload() noexcept {
711710
std::chrono::duration<double> measurement_interval = now - prev;
712711
std::chrono::duration<double> elapsed = now - begin;
713712
if (measurement_interval.count() > 0.25) {
714-
on_performance(nettest_flag::upload, nflows, recent_data,
713+
on_performance(nettest_flag_upload, nflows,
714+
static_cast<double>(recent_data),
715715
measurement_interval.count(), elapsed.count(),
716716
impl->settings.max_runtime);
717717
recent_data = 0;
@@ -727,7 +727,8 @@ bool Client::run_upload() noexcept {
727727
}
728728
auto now = std::chrono::steady_clock::now();
729729
std::chrono::duration<double> elapsed = now - begin;
730-
client_side_speed = compute_speed(total_data, elapsed.count());
730+
client_side_speed = compute_speed( //
731+
static_cast<double>(total_data), elapsed.count());
731732
EMIT_DEBUG("run_upload: client computed speed: " << client_side_speed);
732733
}
733734

@@ -753,23 +754,22 @@ bool Client::msg_write_login(const std::string &version) noexcept {
753754
static_assert(sizeof(impl->settings.nettest_flags) == 1,
754755
"nettest_flags too large");
755756
uint8_t code = 0;
756-
impl->settings.nettest_flags |= nettest_flag::status | nettest_flag::meta;
757-
if ((impl->settings.nettest_flags & nettest_flag::middlebox)) {
758-
EMIT_WARNING("msg_write_login(): nettest_flag::middlebox: not implemented");
759-
impl->settings.nettest_flags &= ~nettest_flag::middlebox;
757+
impl->settings.nettest_flags |= nettest_flag_status | nettest_flag_meta;
758+
if ((impl->settings.nettest_flags & nettest_flag_middlebox)) {
759+
EMIT_WARNING("msg_write_login(): nettest_flag_middlebox: not implemented");
760+
impl->settings.nettest_flags &= ~nettest_flag_middlebox;
760761
}
761-
if ((impl->settings.nettest_flags & nettest_flag::simple_firewall)) {
762+
if ((impl->settings.nettest_flags & nettest_flag_simple_firewall)) {
762763
EMIT_WARNING(
763-
"msg_write_login(): nettest_flag::simple_firewall: not implemented");
764-
impl->settings.nettest_flags &= ~nettest_flag::simple_firewall;
764+
"msg_write_login(): nettest_flag_simple_firewall: not implemented");
765+
impl->settings.nettest_flags &= ~nettest_flag_simple_firewall;
765766
}
766-
if ((impl->settings.nettest_flags & nettest_flag::upload_ext)) {
767-
EMIT_WARNING(
768-
"msg_write_login(): nettest_flag::upload_ext: not implemented");
769-
impl->settings.nettest_flags &= ~nettest_flag::upload_ext;
767+
if ((impl->settings.nettest_flags & nettest_flag_upload_ext)) {
768+
EMIT_WARNING("msg_write_login(): nettest_flag_upload_ext: not implemented");
769+
impl->settings.nettest_flags &= ~nettest_flag_upload_ext;
770770
}
771771
std::string serio;
772-
if ((impl->settings.protocol_flags & protocol_flag::json) == 0) {
772+
if ((impl->settings.protocol_flags & protocol_flag_json) == 0) {
773773
serio = std::string{(char *)&impl->settings.nettest_flags,
774774
sizeof(impl->settings.nettest_flags)};
775775
code = msg_login;
@@ -787,7 +787,7 @@ bool Client::msg_write_login(const std::string &version) noexcept {
787787
}
788788
}
789789
assert(code != 0);
790-
if ((impl->settings.protocol_flags & protocol_flag::websockets) != 0) {
790+
if ((impl->settings.protocol_flags & protocol_flag_websockets) != 0) {
791791
EMIT_WARNING("msg_write_login: websockets not supported");
792792
return false;
793793
}
@@ -802,7 +802,7 @@ bool Client::msg_write_login(const std::string &version) noexcept {
802802
// a different implementation depending on the actual protocol.
803803
bool Client::msg_write(uint8_t code, std::string &&msg) noexcept {
804804
EMIT_DEBUG("msg_write: message to send: " << represent(msg));
805-
if ((impl->settings.protocol_flags & protocol_flag::json) != 0) {
805+
if ((impl->settings.protocol_flags & protocol_flag_json) != 0) {
806806
nlohmann::json json;
807807
json["msg"] = msg;
808808
try {
@@ -812,7 +812,7 @@ bool Client::msg_write(uint8_t code, std::string &&msg) noexcept {
812812
return false;
813813
}
814814
}
815-
if ((impl->settings.protocol_flags & protocol_flag::websockets) != 0) {
815+
if ((impl->settings.protocol_flags & protocol_flag_websockets) != 0) {
816816
EMIT_WARNING("msg_write: websockets not supported");
817817
return false;
818818
}
@@ -946,14 +946,14 @@ bool Client::msg_expect(uint8_t expected_code, std::string *s) noexcept {
946946
bool Client::msg_read(uint8_t *code, std::string *msg) noexcept {
947947
assert(code != nullptr && msg != nullptr);
948948
std::string s;
949-
if ((impl->settings.protocol_flags & protocol_flag::websockets) != 0) {
949+
if ((impl->settings.protocol_flags & protocol_flag_websockets) != 0) {
950950
EMIT_WARNING("msg_read: websockets not supported");
951951
return false;
952952
}
953953
if (!msg_read_legacy(code, &s)) {
954954
return false;
955955
}
956-
if ((impl->settings.protocol_flags & protocol_flag::json) == 0) {
956+
if ((impl->settings.protocol_flags & protocol_flag_json) == 0) {
957957
std::swap(s, *msg);
958958
} else {
959959
nlohmann::json json;
@@ -1516,7 +1516,7 @@ Err Client::netx_select(int numfd, fd_set *readset, fd_set *writeset,
15161516

15171517
// Dependencies (curl)
15181518

1519-
uint64_t Client::get_verbosity() const noexcept {
1519+
uint32_t Client::get_verbosity() const noexcept {
15201520
return impl->settings.verbosity;
15211521
}
15221522

0 commit comments

Comments
 (0)