aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt3
-rw-r--r--src/core/CMakeLists.txt1
-rw-r--r--src/core/args_test.c (renamed from src/supplemental/util/options_test.c)71
-rw-r--r--src/nng.c2
-rw-r--r--src/sp/protocol/pipeline0/pull_test.c4
-rw-r--r--src/sp/protocol/pubsub0/sub_test.c4
-rw-r--r--src/supplemental/CMakeLists.txt1
-rw-r--r--src/supplemental/util/CMakeLists.txt13
-rw-r--r--src/supplemental/util/options.c127
-rw-r--r--src/tools/nngcat/nngcat.c164
-rw-r--r--src/tools/perf/perf.c26
11 files changed, 138 insertions, 278 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b49048fa..1bdd4b7a 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,5 +1,5 @@
#
-# Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
+# Copyright 2025 Staysail Systems, Inc. <info@staysail.tech>
# Copyright 2018 Capitar IT Group BV <info@capitar.com>
#
# This software is supplied under the terms of the MIT License, a
@@ -9,6 +9,7 @@
#
nng_sources(nng.c nng_legacy.c)
+nng_headers(nng/args.h)
nng_headers(nng/nng.h)
target_include_directories(nng PRIVATE ${PROJECT_SOURCE_DIR}/src)
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 9f5b4a95..a247ed89 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -81,6 +81,7 @@ nng_sources(
)
nng_test(aio_test)
+nng_test(args_test)
nng_test(buf_size_test)
nng_test(errors_test)
nng_test(id_test)
diff --git a/src/supplemental/util/options_test.c b/src/core/args_test.c
index 036f2940..5139fece 100644
--- a/src/supplemental/util/options_test.c
+++ b/src/core/args_test.c
@@ -8,12 +8,11 @@
// found online at https://opensource.org/licenses/MIT.
//
-#include "nng/nng.h"
+#include <nng/args.h>
+#include <nng/nng.h>
#include <nuts.h>
-#include <nng/supplemental/util/options.h>
-
-static nng_optspec case1[] = {
+static nng_arg_spec case1[] = {
// clang-format off
{ "flag", 'f', 1, false },
{ "longflag", 0, 2, false },
@@ -37,15 +36,15 @@ test_simple_options(void)
av[2] = "-v";
av[3] = "123";
av[4] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(v == 1);
NUTS_NULL(a);
NUTS_TRUE(opti == 2);
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 4);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 4);
NUTS_MATCH(av[opti], "456");
}
@@ -64,15 +63,15 @@ test_long_options(void)
av[2] = "--value";
av[3] = "123";
av[4] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(v == 1);
NUTS_NULL(a);
NUTS_TRUE(opti == 2);
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 4);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 4);
NUTS_MATCH(av[opti], "456");
}
@@ -89,11 +88,11 @@ test_attached_short(void)
av[0] = "program";
av[1] = "-v123";
av[2] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 2);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 2);
NUTS_MATCH(av[opti], "456");
}
@@ -110,11 +109,11 @@ test_attached_long_equals(void)
av[0] = "program";
av[1] = "--value=123";
av[2] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 2);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 2);
NUTS_MATCH(av[opti], "456");
}
@@ -131,11 +130,11 @@ test_attached_long_colon(void)
av[0] = "program";
av[1] = "--value:123";
av[2] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 2);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 2);
NUTS_MATCH(av[opti], "456");
}
@@ -152,7 +151,7 @@ test_negative_bad_short(void)
av[0] = "program";
av[1] = "-Z";
av[2] = "456";
- NUTS_FAIL(nng_opts_parse(ac, av, case1, &v, &a, &opti), NNG_EINVAL);
+ NUTS_FAIL(nng_args_parse(ac, av, case1, &v, &a, &opti), NNG_ARG_INVAL);
NUTS_TRUE(opti == 1);
}
@@ -168,7 +167,7 @@ test_negative_bad_long(void)
av[0] = "program";
av[1] = "--something";
av[2] = "456";
- NUTS_FAIL(nng_opts_parse(ac, av, case1, &v, &a, &opti), NNG_EINVAL);
+ NUTS_FAIL(nng_args_parse(ac, av, case1, &v, &a, &opti), NNG_ARG_INVAL);
NUTS_TRUE(opti == 1);
}
@@ -186,10 +185,10 @@ test_option_separator_flag(void)
av[2] = "-";
av[3] = "-v";
av[4] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(v == 1);
NUTS_TRUE(opti == 2);
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 3);
}
@@ -203,7 +202,7 @@ test_no_options(void)
char *a = NULL;
av[0] = "program";
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
}
void
@@ -217,7 +216,7 @@ test_arg_only(void)
av[0] = "program";
av[1] = "123";
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 1);
}
@@ -237,25 +236,25 @@ test_mixed_long_short(void)
av[4] = "-b";
av[5] = "-vxyz";
av[6] = "456";
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 2);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "123");
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 3);
NUTS_TRUE(v == 1);
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 4);
NUTS_TRUE(v == 2);
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 5);
NUTS_TRUE(v == 4);
- NUTS_PASS(nng_opts_parse(ac, av, case1, &v, &a, &opti));
+ NUTS_PASS(nng_args_parse(ac, av, case1, &v, &a, &opti));
NUTS_TRUE(opti == 6);
NUTS_TRUE(v == 3);
NUTS_MATCH(a, "xyz");
NUTS_MATCH(av[opti], "456");
- NUTS_TRUE(nng_opts_parse(ac, av, case1, &v, &a, &opti) == -1);
+ NUTS_TRUE(nng_args_parse(ac, av, case1, &v, &a, &opti) == -1);
NUTS_TRUE(opti == 6);
}
@@ -268,7 +267,7 @@ test_ambiguous(void)
int v;
char *a = NULL;
- nng_optspec spec[] = {
+ nng_arg_spec spec[] = {
{ "flag", 'f', 1, false },
{ "fluid", 0, 2, false },
{ NULL, 0, 0, false },
@@ -276,7 +275,7 @@ test_ambiguous(void)
av[0] = "program";
av[1] = "--fl";
- NUTS_FAIL(nng_opts_parse(ac, av, spec, &v, &a, &opti), NNG_EAMBIGUOUS);
+ NUTS_FAIL(nng_args_parse(ac, av, spec, &v, &a, &opti), NNG_ARG_AMBIG);
}
void
@@ -288,18 +287,20 @@ test_missing_arg(void)
int v;
char *a = NULL;
- nng_optspec spec[] = {
+ nng_arg_spec spec[] = {
{ "flag", 'f', 1, true },
{ NULL, 0, 0, false },
};
av[0] = "program";
av[1] = "--fl";
- NUTS_FAIL(nng_opts_parse(ac, av, spec, &v, &a, &opti), NNG_ENOARG);
+ NUTS_FAIL(
+ nng_args_parse(ac, av, spec, &v, &a, &opti), NNG_ARG_MISSING);
av[0] = "program";
av[1] = "-f";
opti = 1;
- NUTS_FAIL(nng_opts_parse(ac, av, spec, &v, &a, &opti), NNG_ENOARG);
+ NUTS_FAIL(
+ nng_args_parse(ac, av, spec, &v, &a, &opti), NNG_ARG_MISSING);
}
void
@@ -311,7 +312,7 @@ test_no_clustering(void)
int v;
char *a = NULL;
- nng_optspec spec[] = {
+ nng_arg_spec spec[] = {
{ "flag", 'f', 1, false },
{ "verbose", 'v', 2, false },
{ NULL, 0, 0, false },
@@ -319,7 +320,7 @@ test_no_clustering(void)
av[0] = "program";
av[1] = "-fv";
- NUTS_FAIL(nng_opts_parse(ac, av, spec, &v, &a, &opti), NNG_EINVAL);
+ NUTS_FAIL(nng_args_parse(ac, av, spec, &v, &a, &opti), NNG_ARG_INVAL);
}
NUTS_TESTS = {
diff --git a/src/nng.c b/src/nng.c
index 345f47d9..002f29f8 100644
--- a/src/nng.c
+++ b/src/nng.c
@@ -1266,8 +1266,6 @@ static const struct {
{ NNG_EWRITEONLY, "Write only resource" },
{ NNG_ECRYPTO, "Cryptographic error" },
{ NNG_EPEERAUTH, "Peer could not be authenticated" },
- { NNG_ENOARG, "Option requires argument" },
- { NNG_EAMBIGUOUS, "Ambiguous option" },
{ NNG_EBADTYPE, "Incorrect type" },
{ NNG_ECONNSHUT, "Connection shutdown" },
{ NNG_ESTOPPED, "Operation stopped"},
diff --git a/src/sp/protocol/pipeline0/pull_test.c b/src/sp/protocol/pipeline0/pull_test.c
index 8ed9cc0e..32134082 100644
--- a/src/sp/protocol/pipeline0/pull_test.c
+++ b/src/sp/protocol/pipeline0/pull_test.c
@@ -243,10 +243,10 @@ test_pull_recv_abort(void)
nng_aio_set_timeout(aio, 1000);
nng_socket_recv(s, aio);
- nng_aio_abort(aio, NNG_EAMBIGUOUS);
+ nng_aio_abort(aio, NNG_ESTATE);
nng_aio_wait(aio);
- NUTS_FAIL(nng_aio_result(aio), NNG_EAMBIGUOUS);
+ NUTS_FAIL(nng_aio_result(aio), NNG_ESTATE);
NUTS_CLOSE(s);
nng_aio_free(aio);
}
diff --git a/src/sp/protocol/pubsub0/sub_test.c b/src/sp/protocol/pubsub0/sub_test.c
index 13fc07bf..7f4e4480 100644
--- a/src/sp/protocol/pubsub0/sub_test.c
+++ b/src/sp/protocol/pubsub0/sub_test.c
@@ -301,10 +301,10 @@ test_sub_ctx_recv_abort(void)
nng_aio_set_timeout(aio, 1000);
nng_ctx_recv(ctx, aio);
- nng_aio_abort(aio, NNG_EAMBIGUOUS);
+ nng_aio_abort(aio, NNG_EINTERNAL);
nng_aio_wait(aio);
- NUTS_FAIL(nng_aio_result(aio), NNG_EAMBIGUOUS);
+ NUTS_FAIL(nng_aio_result(aio), NNG_EINTERNAL);
NUTS_CLOSE(sub);
nng_aio_free(aio);
}
diff --git a/src/supplemental/CMakeLists.txt b/src/supplemental/CMakeLists.txt
index 9a54beea..fe808c8d 100644
--- a/src/supplemental/CMakeLists.txt
+++ b/src/supplemental/CMakeLists.txt
@@ -11,5 +11,4 @@ nng_directory(supplemental)
add_subdirectory(http)
add_subdirectory(tls)
-add_subdirectory(util)
add_subdirectory(websocket)
diff --git a/src/supplemental/util/CMakeLists.txt b/src/supplemental/util/CMakeLists.txt
deleted file mode 100644
index d7541363..00000000
--- a/src/supplemental/util/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# Copyright 2025 Staysail Systems, Inc. <info@staysail.tech>
-#
-# This software is supplied under the terms of the MIT License, a
-# copy of which should be located in the distribution where this
-# file was obtained (LICENSE.txt). A copy of the license may also be
-# found online at https://opensource.org/licenses/MIT.
-#
-
-nng_sources(options.c)
-nng_headers(
- nng/supplemental/util/options.h)
-nng_test(options_test)
diff --git a/src/supplemental/util/options.c b/src/supplemental/util/options.c
deleted file mode 100644
index 961e0bb2..00000000
--- a/src/supplemental/util/options.c
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
-// Copyright 2018 Capitar IT Group BV <info@capitar.com>
-//
-// This software is supplied under the terms of the MIT License, a
-// copy of which should be located in the distribution where this
-// file was obtained (LICENSE.txt). A copy of the license may also be
-// found online at https://opensource.org/licenses/MIT.
-//
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <nng/nng.h>
-#include <nng/supplemental/util/options.h>
-
-#include "core/nng_impl.h"
-
-// Call with optidx set to 1 to start parsing.
-int
-nng_opts_parse(int argc, char *const *argv, const nng_optspec *opts, int *val,
- char **optarg, int *optidx)
-{
- const nng_optspec *opt;
- int matches;
- bool shortopt;
- size_t l;
- char * arg;
- int i;
-
- if ((i = *optidx) >= argc) {
- return (-1);
- }
- arg = argv[*optidx];
-
- if (arg[0] != '-') {
- return (-1);
- }
- if (arg[1] == '\0') {
- *optidx = i + 1;
- return (-1);
- }
-
- if ((arg[0] == '-') && (arg[1] == '-')) {
- arg += 2;
- shortopt = false;
- for (l = 0; arg[l] != '\0'; l++) {
- if ((arg[l] == '=') || (arg[l] == ':')) {
- break;
- }
- }
- } else {
- arg++;
- shortopt = true;
- l = 1;
- }
-
- matches = 0;
- opt = NULL;
-
- for (int x = 0; opts[x].o_val != 0; x++) {
-
- if (shortopt) {
- if (arg[0] == opts[x].o_short) {
- matches = 1;
- opt = &opts[x];
- break;
- }
- continue;
- }
-
- if ((opts[x].o_name == NULL) ||
- (strncmp(arg, opts[x].o_name, l) != 0)) {
- continue;
- }
- matches++;
- opt = &opts[x];
-
- if (strlen(opts[x].o_name) == l) {
- // Perfect match.
- matches = 1;
- break;
- }
- }
-
- switch (matches) {
- case 1:
- // Exact match
- break;
- case 0:
- // No such option
- return (NNG_EINVAL);
- break;
- default:
- // Ambiguous (not match)
- return (NNG_EAMBIGUOUS);
- break;
- }
-
- if (!opt->o_arg) {
- // No option clustering for short options yet.
- if (arg[l] != '\0') {
- return (NNG_EINVAL);
- }
- *val = opt->o_val;
- *optidx = i + 1;
- return (0);
- }
-
- if (arg[l] != '\0') {
- if (shortopt) {
- *optarg = arg + l;
- } else {
- *optarg = arg + l + 1;
- }
- } else {
- i++;
- if (i >= argc) {
- return (NNG_ENOARG);
- }
- *optarg = argv[i];
- }
- *optidx = ++i;
- *val = opt->o_val;
-
- return (0);
-}
diff --git a/src/tools/nngcat/nngcat.c b/src/tools/nngcat/nngcat.c
index dc998cf3..26b7c639 100644
--- a/src/tools/nngcat/nngcat.c
+++ b/src/tools/nngcat/nngcat.c
@@ -1,5 +1,5 @@
//
-// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2025 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2020 Lager Data, Inc. <support@lagerdata.com>
//
@@ -17,8 +17,8 @@
#include <stdlib.h>
#include <string.h>
+#include <nng/args.h>
#include <nng/nng.h>
-#include <nng/supplemental/util/options.h>
// Globals. We need this to avoid passing around everything.
int format = 0;
@@ -91,105 +91,105 @@ enum options {
OPT_RECVMAXSZ,
};
-static nng_optspec opts[] = {
- { .o_name = "help", .o_short = 'h', .o_val = OPT_HELP },
- { .o_name = "verbose", .o_short = 'v', .o_val = OPT_VERBOSE },
- { .o_name = "silent", .o_short = 'q', .o_val = OPT_SILENT },
- { .o_name = "req0", .o_val = OPT_REQ0 },
- { .o_name = "rep0", .o_val = OPT_REP0 },
- { .o_name = "push0", .o_val = OPT_PUSH0 },
- { .o_name = "pull0", .o_val = OPT_PULL0 },
- { .o_name = "pub0", .o_val = OPT_PUB0 },
- { .o_name = "sub", .o_val = OPT_SUB0 }, // explicit for alias
- { .o_name = "sub0", .o_val = OPT_SUB0 },
- { .o_name = "surveyor0", .o_val = OPT_SURVEY0 },
- { .o_name = "respondent0", .o_val = OPT_RESPOND0 },
- { .o_name = "pair", .o_val = OPT_PAIR },
- { .o_name = "pair0", .o_val = OPT_PAIR0 },
- { .o_name = "pair1", .o_val = OPT_PAIR1 },
- { .o_name = "bus0", .o_val = OPT_BUS0 },
- { .o_name = "dial", .o_val = OPT_DIAL, .o_arg = true },
- { .o_name = "listen", .o_val = OPT_LISTEN, .o_arg = true },
- { .o_name = "data", .o_short = 'D', .o_val = OPT_DATA, .o_arg = true },
- { .o_name = "file", .o_short = 'F', .o_val = OPT_FILE, .o_arg = true },
- { .o_name = "subscribe", .o_val = OPT_SUBSCRIBE, .o_arg = true },
- { .o_name = "format", .o_val = OPT_FORMAT, .o_arg = true },
- { .o_name = "ascii", .o_short = 'A', .o_val = OPT_ASCII },
- { .o_name = "quoted", .o_short = 'Q', .o_val = OPT_QUOTED },
- { .o_name = "raw", .o_val = OPT_RAW },
- { .o_name = "hex", .o_val = OPT_HEX },
- { .o_name = "compat", .o_val = OPT_COMPAT },
- { .o_name = "async", .o_val = OPT_ASYNC },
- { .o_name = "msgpack", .o_val = OPT_MSGPACK },
+static nng_arg_spec opts[] = {
+ { .a_name = "help", .a_short = 'h', .a_val = OPT_HELP },
+ { .a_name = "verbose", .a_short = 'v', .a_val = OPT_VERBOSE },
+ { .a_name = "silent", .a_short = 'q', .a_val = OPT_SILENT },
+ { .a_name = "req0", .a_val = OPT_REQ0 },
+ { .a_name = "rep0", .a_val = OPT_REP0 },
+ { .a_name = "push0", .a_val = OPT_PUSH0 },
+ { .a_name = "pull0", .a_val = OPT_PULL0 },
+ { .a_name = "pub0", .a_val = OPT_PUB0 },
+ { .a_name = "sub", .a_val = OPT_SUB0 }, // explicit for alias
+ { .a_name = "sub0", .a_val = OPT_SUB0 },
+ { .a_name = "surveyor0", .a_val = OPT_SURVEY0 },
+ { .a_name = "respondent0", .a_val = OPT_RESPOND0 },
+ { .a_name = "pair", .a_val = OPT_PAIR },
+ { .a_name = "pair0", .a_val = OPT_PAIR0 },
+ { .a_name = "pair1", .a_val = OPT_PAIR1 },
+ { .a_name = "bus0", .a_val = OPT_BUS0 },
+ { .a_name = "dial", .a_val = OPT_DIAL, .a_arg = true },
+ { .a_name = "listen", .a_val = OPT_LISTEN, .a_arg = true },
+ { .a_name = "data", .a_short = 'D', .a_val = OPT_DATA, .a_arg = true },
+ { .a_name = "file", .a_short = 'F', .a_val = OPT_FILE, .a_arg = true },
+ { .a_name = "subscribe", .a_val = OPT_SUBSCRIBE, .a_arg = true },
+ { .a_name = "format", .a_val = OPT_FORMAT, .a_arg = true },
+ { .a_name = "ascii", .a_short = 'A', .a_val = OPT_ASCII },
+ { .a_name = "quoted", .a_short = 'Q', .a_val = OPT_QUOTED },
+ { .a_name = "raw", .a_val = OPT_RAW },
+ { .a_name = "hex", .a_val = OPT_HEX },
+ { .a_name = "compat", .a_val = OPT_COMPAT },
+ { .a_name = "async", .a_val = OPT_ASYNC },
+ { .a_name = "msgpack", .a_val = OPT_MSGPACK },
{
- .o_name = "recv-maxsz",
- .o_short = 'Z',
- .o_val = OPT_RECVMAXSZ,
- .o_arg = true,
+ .a_name = "recv-maxsz",
+ .a_short = 'Z',
+ .a_val = OPT_RECVMAXSZ,
+ .a_arg = true,
},
{
- .o_name = "count",
- .o_short = 'C',
- .o_val = OPT_COUNT,
- .o_arg = true,
+ .a_name = "count",
+ .a_short = 'C',
+ .a_val = OPT_COUNT,
+ .a_arg = true,
},
{
- .o_name = "delay",
- .o_short = 'd',
- .o_val = OPT_DELAY,
- .o_arg = true,
+ .a_name = "delay",
+ .a_short = 'd',
+ .a_val = OPT_DELAY,
+ .a_arg = true,
},
{
- .o_name = "interval",
- .o_short = 'i',
- .o_val = OPT_INTERVAL,
- .o_arg = true,
+ .a_name = "interval",
+ .a_short = 'i',
+ .a_val = OPT_INTERVAL,
+ .a_arg = true,
},
- { .o_name = "recv-timeout", .o_val = OPT_RCV_TIMEO, .o_arg = true },
- { .o_name = "send-timeout", .o_val = OPT_SND_TIMEO, .o_arg = true },
- { .o_name = "socket-name", .o_val = OPT_SOCK_NAME, .o_arg = true },
+ { .a_name = "recv-timeout", .a_val = OPT_RCV_TIMEO, .a_arg = true },
+ { .a_name = "send-timeout", .a_val = OPT_SND_TIMEO, .a_arg = true },
+ { .a_name = "socket-name", .a_val = OPT_SOCK_NAME, .a_arg = true },
// Legacy compatibility with nanocat.
- { .o_name = "bind", .o_val = OPT_LISTEN, .o_arg = true },
- { .o_name = "connect", .o_val = OPT_DIAL, .o_arg = true },
+ { .a_name = "bind", .a_val = OPT_LISTEN, .a_arg = true },
+ { .a_name = "connect", .a_val = OPT_DIAL, .a_arg = true },
{
- .o_name = "bind-ipc",
- .o_short = 'X',
- .o_val = OPT_LISTEN_IPC,
- .o_arg = true,
+ .a_name = "bind-ipc",
+ .a_short = 'X',
+ .a_val = OPT_LISTEN_IPC,
+ .a_arg = true,
},
{
- .o_name = "connect-ipc",
- .o_short = 'x',
- .o_val = OPT_DIAL_IPC,
- .o_arg = true,
+ .a_name = "connect-ipc",
+ .a_short = 'x',
+ .a_val = OPT_DIAL_IPC,
+ .a_arg = true,
},
{
- .o_name = "bind-local",
- .o_short = 'L',
- .o_val = OPT_LISTEN_LOCAL,
- .o_arg = true,
+ .a_name = "bind-local",
+ .a_short = 'L',
+ .a_val = OPT_LISTEN_LOCAL,
+ .a_arg = true,
},
{
- .o_name = "connect-local",
- .o_short = 'l',
- .o_val = OPT_DIAL_LOCAL,
- .o_arg = true,
+ .a_name = "connect-local",
+ .a_short = 'l',
+ .a_val = OPT_DIAL_LOCAL,
+ .a_arg = true,
},
- { .o_name = "insecure", .o_short = 'k', .o_val = OPT_INSECURE },
- { .o_name = "cacert", .o_val = OPT_CACERT, .o_arg = true },
- { .o_name = "key", .o_val = OPT_KEYFILE, .o_arg = true },
+ { .a_name = "insecure", .a_short = 'k', .a_val = OPT_INSECURE },
+ { .a_name = "cacert", .a_val = OPT_CACERT, .a_arg = true },
+ { .a_name = "key", .a_val = OPT_KEYFILE, .a_arg = true },
{
- .o_name = "cert",
- .o_short = 'E',
- .o_val = OPT_CERTFILE,
- .o_arg = true,
+ .a_name = "cert",
+ .a_short = 'E',
+ .a_val = OPT_CERTFILE,
+ .a_arg = true,
},
- { .o_name = "version", .o_short = 'V', .o_val = OPT_VERSION },
+ { .a_name = "version", .a_short = 'V', .a_val = OPT_VERSION },
// Sentinel.
- { .o_name = NULL, .o_val = 0 },
+ { .a_name = NULL, .a_val = 0 },
};
static void
@@ -705,7 +705,7 @@ main(int ac, char **av)
nng_init(NULL);
atexit(nng_fini);
- while ((rv = nng_opts_parse(ac, av, opts, &val, &arg, &idx)) == 0) {
+ while ((rv = nng_args_parse(ac, av, opts, &val, &arg, &idx)) == 0) {
switch (val) {
case OPT_HELP:
help();
@@ -860,13 +860,13 @@ main(int ac, char **av)
}
}
switch (rv) {
- case NNG_EINVAL:
+ case NNG_ARG_INVAL:
fatal("Option %s is invalid.", av[idx]);
break;
- case NNG_EAMBIGUOUS:
+ case NNG_ARG_AMBIG:
fatal("Option %s is ambiguous (specify in full).", av[idx]);
break;
- case NNG_ENOARG:
+ case NNG_ARG_MISSING:
fatal("Option %s requires argument.", av[idx]);
break;
default:
diff --git a/src/tools/perf/perf.c b/src/tools/perf/perf.c
index 5ce99c04..e83c89ff 100644
--- a/src/tools/perf/perf.c
+++ b/src/tools/perf/perf.c
@@ -1,5 +1,5 @@
//
-// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2025 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
//
// This software is supplied under the terms of the MIT License, a
@@ -15,8 +15,8 @@
#include <stdlib.h>
#include <string.h>
+#include <nng/args.h>
#include <nng/nng.h>
-#include <nng/supplemental/util/options.h>
static void die(const char *, ...);
static int
@@ -80,15 +80,15 @@ enum options {
};
// These are not universally supported by the variants yet.
-static nng_optspec opts[] = {
- { .o_name = "pair1", .o_val = OPT_PAIR1 },
- { .o_name = "pair0", .o_val = OPT_PAIR0 },
- { .o_name = "reqrep0", .o_val = OPT_REQREP0 },
- { .o_name = "bus0", .o_val = OPT_BUS0 },
- { .o_name = "pubsub0", .o_val = OPT_PUBSUB0 },
- { .o_name = "pipeline0", .o_val = OPT_PIPELINE0 },
- { .o_name = "url", .o_val = OPT_URL, .o_arg = true },
- { .o_name = NULL, .o_val = 0 },
+static nng_arg_spec opts[] = {
+ { .a_name = "pair1", .a_val = OPT_PAIR1 },
+ { .a_name = "pair0", .a_val = OPT_PAIR0 },
+ { .a_name = "reqrep0", .a_val = OPT_REQREP0 },
+ { .a_name = "bus0", .a_val = OPT_BUS0 },
+ { .a_name = "pubsub0", .a_val = OPT_PUBSUB0 },
+ { .a_name = "pipeline0", .a_val = OPT_PIPELINE0 },
+ { .a_name = "url", .a_val = OPT_URL, .a_arg = true },
+ { .a_name = NULL, .a_val = 0 },
};
static void latency_client(const char *, size_t, int);
@@ -319,7 +319,7 @@ do_inproc_lat(int argc, char **argv)
addr = "inproc://latency_test";
optidx = 0;
- while ((rv = nng_opts_parse(argc, argv, opts, &val, &arg, &optidx)) ==
+ while ((rv = nng_args_parse(argc, argv, opts, &val, &arg, &optidx)) ==
0) {
switch (val) {
case OPT_REQREP0:
@@ -381,7 +381,7 @@ do_inproc_thr(int argc, char **argv)
char *addr = "inproc://throughput-test";
optidx = 0;
- while ((rv = nng_opts_parse(argc, argv, opts, &val, &arg, &optidx)) ==
+ while ((rv = nng_args_parse(argc, argv, opts, &val, &arg, &optidx)) ==
0) {
switch (val) {
#if 0