ffi-nats-core 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ffi-nats-core.gemspec +8 -0
- data/lib/ffi/nats/core/version.rb +1 -1
- data/vendor/cnats/CMakeLists.txt +137 -0
- data/vendor/cnats/adapters/libevent.h +220 -0
- data/vendor/cnats/adapters/libuv.h +472 -0
- data/vendor/cnats/examples/CMakeLists.txt +56 -0
- data/vendor/cnats/examples/asynctimeout.c +83 -0
- data/vendor/cnats/examples/examples.h +322 -0
- data/vendor/cnats/examples/libevent-pub.c +136 -0
- data/vendor/cnats/examples/libevent-sub.c +104 -0
- data/vendor/cnats/examples/libuv-pub.c +120 -0
- data/vendor/cnats/examples/libuv-sub.c +114 -0
- data/vendor/cnats/examples/publisher.c +62 -0
- data/vendor/cnats/examples/queuegroup.c +132 -0
- data/vendor/cnats/examples/replier.c +149 -0
- data/vendor/cnats/examples/requestor.c +75 -0
- data/vendor/cnats/examples/subscriber.c +133 -0
- data/vendor/cnats/src/CMakeLists.txt +31 -0
- data/vendor/cnats/src/asynccb.c +66 -0
- data/vendor/cnats/src/asynccb.h +42 -0
- data/vendor/cnats/src/buf.c +246 -0
- data/vendor/cnats/src/buf.h +116 -0
- data/vendor/cnats/src/comsock.c +474 -0
- data/vendor/cnats/src/comsock.h +81 -0
- data/vendor/cnats/src/conn.c +2725 -0
- data/vendor/cnats/src/conn.h +75 -0
- data/vendor/cnats/src/err.h +31 -0
- data/vendor/cnats/src/gc.h +27 -0
- data/vendor/cnats/src/hash.c +725 -0
- data/vendor/cnats/src/hash.h +141 -0
- data/vendor/cnats/src/include/n-unix.h +56 -0
- data/vendor/cnats/src/include/n-win.h +59 -0
- data/vendor/cnats/src/mem.h +20 -0
- data/vendor/cnats/src/msg.c +155 -0
- data/vendor/cnats/src/msg.h +43 -0
- data/vendor/cnats/src/nats.c +1734 -0
- data/vendor/cnats/src/nats.h +2024 -0
- data/vendor/cnats/src/natsp.h +518 -0
- data/vendor/cnats/src/natstime.c +79 -0
- data/vendor/cnats/src/natstime.h +27 -0
- data/vendor/cnats/src/nuid.c +265 -0
- data/vendor/cnats/src/nuid.h +21 -0
- data/vendor/cnats/src/opts.c +1030 -0
- data/vendor/cnats/src/opts.h +19 -0
- data/vendor/cnats/src/parser.c +869 -0
- data/vendor/cnats/src/parser.h +87 -0
- data/vendor/cnats/src/pub.c +293 -0
- data/vendor/cnats/src/srvpool.c +380 -0
- data/vendor/cnats/src/srvpool.h +71 -0
- data/vendor/cnats/src/stats.c +54 -0
- data/vendor/cnats/src/stats.h +21 -0
- data/vendor/cnats/src/status.c +60 -0
- data/vendor/cnats/src/status.h +95 -0
- data/vendor/cnats/src/sub.c +956 -0
- data/vendor/cnats/src/sub.h +34 -0
- data/vendor/cnats/src/timer.c +86 -0
- data/vendor/cnats/src/timer.h +57 -0
- data/vendor/cnats/src/unix/cond.c +103 -0
- data/vendor/cnats/src/unix/mutex.c +107 -0
- data/vendor/cnats/src/unix/sock.c +105 -0
- data/vendor/cnats/src/unix/thread.c +162 -0
- data/vendor/cnats/src/url.c +134 -0
- data/vendor/cnats/src/url.h +24 -0
- data/vendor/cnats/src/util.c +823 -0
- data/vendor/cnats/src/util.h +75 -0
- data/vendor/cnats/src/version.h +29 -0
- data/vendor/cnats/src/version.h.in +29 -0
- data/vendor/cnats/src/win/cond.c +86 -0
- data/vendor/cnats/src/win/mutex.c +54 -0
- data/vendor/cnats/src/win/sock.c +158 -0
- data/vendor/cnats/src/win/strings.c +108 -0
- data/vendor/cnats/src/win/thread.c +180 -0
- data/vendor/cnats/test/CMakeLists.txt +35 -0
- data/vendor/cnats/test/certs/ca.pem +38 -0
- data/vendor/cnats/test/certs/client-cert.pem +30 -0
- data/vendor/cnats/test/certs/client-key.pem +51 -0
- data/vendor/cnats/test/certs/server-cert.pem +31 -0
- data/vendor/cnats/test/certs/server-key.pem +51 -0
- data/vendor/cnats/test/dylib/CMakeLists.txt +10 -0
- data/vendor/cnats/test/dylib/nonats.c +13 -0
- data/vendor/cnats/test/list.txt +125 -0
- data/vendor/cnats/test/test.c +11655 -0
- data/vendor/cnats/test/tls.conf +15 -0
- data/vendor/cnats/test/tlsverify.conf +19 -0
- metadata +83 -1
@@ -0,0 +1,56 @@
|
|
1
|
+
# We need this directory to build the examples
|
2
|
+
include_directories(${PROJECT_SOURCE_DIR}/src)
|
3
|
+
include_directories(${PROJECT_SOURCE_DIR}/examples)
|
4
|
+
|
5
|
+
if(NATS_BUILD_LIBUV_EXAMPLE)
|
6
|
+
include_directories(${LIBUV_DIR}/include)
|
7
|
+
endif()
|
8
|
+
|
9
|
+
if(NATS_BUILD_LIBEVENT_EXAMPLE)
|
10
|
+
include_directories(${LIBEVENT_DIR}/include)
|
11
|
+
endif()
|
12
|
+
|
13
|
+
if(WIN32)
|
14
|
+
set(LIB_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
|
15
|
+
else()
|
16
|
+
set(LIB_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
|
17
|
+
endif()
|
18
|
+
|
19
|
+
# Get all the .c files in the examples directory
|
20
|
+
file(GLOB EXAMPLES_SOURCES RELATIVE ${PROJECT_SOURCE_DIR}/examples *.c)
|
21
|
+
|
22
|
+
add_definitions(-Dnats_IMPORTS)
|
23
|
+
|
24
|
+
# For each file...
|
25
|
+
foreach(examples_src ${EXAMPLES_SOURCES})
|
26
|
+
|
27
|
+
# Remove the suffix so that it becomes the executable name
|
28
|
+
string(REPLACE ".c" "" examplename ${examples_src})
|
29
|
+
set(exampleexe "nats-${examplename}")
|
30
|
+
|
31
|
+
set(buildExample OFF)
|
32
|
+
set(NATS_ASYNC_IO_LIB "")
|
33
|
+
|
34
|
+
if(examplename MATCHES "libuv")
|
35
|
+
if(NATS_BUILD_LIBUV_EXAMPLE)
|
36
|
+
set(buildExample ON)
|
37
|
+
set(NATS_ASYNC_IO_LIB ${LIBUV_DIR}/lib/libuv${LIB_SUFFIX})
|
38
|
+
endif()
|
39
|
+
elseif(examplename MATCHES "libevent")
|
40
|
+
if(NATS_BUILD_LIBEVENT_EXAMPLE)
|
41
|
+
set(buildExample ON)
|
42
|
+
set(NATS_ASYNC_IO_LIB ${LIBEVENT_DIR}/lib/libevent${LIB_SUFFIX})
|
43
|
+
endif()
|
44
|
+
else()
|
45
|
+
set(buildExample ON)
|
46
|
+
endif()
|
47
|
+
|
48
|
+
if(buildExample)
|
49
|
+
# Build the executable
|
50
|
+
add_executable(${exampleexe} ${PROJECT_SOURCE_DIR}/examples/${examples_src})
|
51
|
+
|
52
|
+
# Link dynamically
|
53
|
+
target_link_libraries(${exampleexe} nats ${NATS_EXTRA_LIB} ${NATS_ASYNC_IO_LIB})
|
54
|
+
endif()
|
55
|
+
|
56
|
+
endforeach()
|
@@ -0,0 +1,83 @@
|
|
1
|
+
// Copyright 2015-2016 Apcera Inc. All rights reserved.
|
2
|
+
|
3
|
+
#include "examples.h"
|
4
|
+
|
5
|
+
static const char *usage = ""\
|
6
|
+
"-gd use global message delivery thread pool\n" \
|
7
|
+
"-queue use a queue subscriber with this name\n" \
|
8
|
+
"-timeout <ms> timeout in milliseconds (default is 10sec)\n" \
|
9
|
+
"-count number of expected messages\n";
|
10
|
+
|
11
|
+
static volatile bool done = false;
|
12
|
+
|
13
|
+
static void
|
14
|
+
onMsg(natsConnection *nc, natsSubscription *sub, natsMsg *msg, void *closure)
|
15
|
+
{
|
16
|
+
// This callback will be invoked with a NULL message when the
|
17
|
+
// subscription times out.
|
18
|
+
if (print && (msg != NULL))
|
19
|
+
printf("Received msg: %s - %.*s\n",
|
20
|
+
natsMsg_GetSubject(msg),
|
21
|
+
natsMsg_GetDataLength(msg),
|
22
|
+
natsMsg_GetData(msg));
|
23
|
+
|
24
|
+
// We should be using a mutex to protect those variables since
|
25
|
+
// they are used from the subscription's delivery and the main
|
26
|
+
// threads. For demo purposes, this is fine.
|
27
|
+
if ((msg == NULL) || (++count == total))
|
28
|
+
{
|
29
|
+
printf("%s, destroying subscription\n",
|
30
|
+
(msg == NULL ? "Subscription timed-out" : "All messages received"));
|
31
|
+
|
32
|
+
natsSubscription_Destroy(sub);
|
33
|
+
done = true;
|
34
|
+
}
|
35
|
+
|
36
|
+
// It is safe to call natsMsg_Destroy() with a NULL message.
|
37
|
+
natsMsg_Destroy(msg);
|
38
|
+
}
|
39
|
+
|
40
|
+
int main(int argc, char **argv)
|
41
|
+
{
|
42
|
+
natsConnection *conn = NULL;
|
43
|
+
natsOptions *opts = NULL;
|
44
|
+
natsSubscription *sub = NULL;
|
45
|
+
natsStatus s;
|
46
|
+
|
47
|
+
opts = parseArgs(argc, argv, usage);
|
48
|
+
|
49
|
+
printf("Listening asynchronously on '%s' with a timeout of %d ms.\n",
|
50
|
+
subj, (int) timeout);
|
51
|
+
|
52
|
+
s = natsConnection_Connect(&conn, opts);
|
53
|
+
if (s == NATS_OK)
|
54
|
+
{
|
55
|
+
if (name != NULL)
|
56
|
+
s = natsConnection_QueueSubscribeTimeout(&sub, conn, subj, name,
|
57
|
+
timeout, onMsg, NULL);
|
58
|
+
else
|
59
|
+
s = natsConnection_SubscribeTimeout(&sub, conn, subj,
|
60
|
+
timeout, onMsg, NULL);
|
61
|
+
}
|
62
|
+
// Check every half a second for end of test.
|
63
|
+
while ((s == NATS_OK) && !done)
|
64
|
+
{
|
65
|
+
nats_Sleep(500);
|
66
|
+
}
|
67
|
+
|
68
|
+
if (s != NATS_OK)
|
69
|
+
{
|
70
|
+
printf("Error: %d - %s\n", s, natsStatus_GetText(s));
|
71
|
+
nats_PrintLastErrorStack(stderr);
|
72
|
+
}
|
73
|
+
|
74
|
+
// Destroy all our objects to avoid report of memory leak
|
75
|
+
// Do not destroy subscription since it is done in the callback
|
76
|
+
natsConnection_Destroy(conn);
|
77
|
+
natsOptions_Destroy(opts);
|
78
|
+
|
79
|
+
// To silence reports of memory still in used with valgrind
|
80
|
+
nats_Close();
|
81
|
+
|
82
|
+
return 0;
|
83
|
+
}
|
@@ -0,0 +1,322 @@
|
|
1
|
+
// Copyright 2015-2016 Apcera Inc. All rights reserved.
|
2
|
+
|
3
|
+
|
4
|
+
#ifndef EXAMPLES_H_
|
5
|
+
#define EXAMPLES_H_
|
6
|
+
|
7
|
+
#include <nats.h>
|
8
|
+
#include <stdio.h>
|
9
|
+
#include <string.h>
|
10
|
+
|
11
|
+
#ifdef _WIN32
|
12
|
+
#define strcasecmp _stricmp
|
13
|
+
#define strdup _strdup
|
14
|
+
#else
|
15
|
+
#ifndef NATS_LIBUV_INCLUDE
|
16
|
+
extern char *strdup(const char *s);
|
17
|
+
#endif
|
18
|
+
#include <strings.h>
|
19
|
+
#endif
|
20
|
+
|
21
|
+
#define STATS_IN 0x1
|
22
|
+
#define STATS_OUT 0x2
|
23
|
+
#define STATS_COUNT 0x4
|
24
|
+
|
25
|
+
#define MAX_SERVERS (10)
|
26
|
+
|
27
|
+
bool async = true;
|
28
|
+
const char *subj = "foo";
|
29
|
+
const char *txt = "hello";
|
30
|
+
const char *name = "worker";
|
31
|
+
int64_t total = 1000000;
|
32
|
+
|
33
|
+
volatile int64_t count = 0;
|
34
|
+
volatile int64_t dropped = 0;
|
35
|
+
int64_t start = 0;
|
36
|
+
volatile int64_t elapsed = 0;
|
37
|
+
bool print = false;
|
38
|
+
int64_t timeout = 10000; // 10 seconds.
|
39
|
+
|
40
|
+
natsOptions *opts = NULL;
|
41
|
+
|
42
|
+
const char *certFile = NULL;
|
43
|
+
const char *keyFile = NULL;
|
44
|
+
|
45
|
+
static natsStatus
|
46
|
+
printStats(int mode, natsConnection *conn, natsSubscription *sub,
|
47
|
+
natsStatistics *stats)
|
48
|
+
{
|
49
|
+
natsStatus s = NATS_OK;
|
50
|
+
uint64_t inMsgs, inBytes, outMsgs, outBytes, reconnected;
|
51
|
+
int pending = 0;
|
52
|
+
int64_t delivered, dropped = 0;
|
53
|
+
|
54
|
+
s = natsConnection_GetStats(conn, stats);
|
55
|
+
if (s == NATS_OK)
|
56
|
+
s = natsStatistics_GetCounts(stats, &inMsgs, &inBytes,
|
57
|
+
&outMsgs, &outBytes, &reconnected);
|
58
|
+
if ((s == NATS_OK) && (sub != NULL))
|
59
|
+
{
|
60
|
+
s = natsSubscription_GetStats(sub, &pending, NULL, NULL, NULL,
|
61
|
+
&delivered, &dropped);
|
62
|
+
|
63
|
+
// Since we use AutoUnsubscribe(), when the max has been reached,
|
64
|
+
// the subscription is automatically closed, so this call would
|
65
|
+
// return "Invalid Subscription". Ignore this error.
|
66
|
+
if (s == NATS_INVALID_SUBSCRIPTION)
|
67
|
+
{
|
68
|
+
s = NATS_OK;
|
69
|
+
pending = 0;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
if (s == NATS_OK)
|
74
|
+
{
|
75
|
+
if (mode & STATS_IN)
|
76
|
+
{
|
77
|
+
printf("In Msgs: %9" PRIu64 " - "\
|
78
|
+
"In Bytes: %9" PRIu64 " - ", inMsgs, inBytes);
|
79
|
+
}
|
80
|
+
if (mode & STATS_OUT)
|
81
|
+
{
|
82
|
+
printf("Out Msgs: %9" PRIu64 " - "\
|
83
|
+
"Out Bytes: %9" PRIu64 " - ", outMsgs, outBytes);
|
84
|
+
}
|
85
|
+
if (mode & STATS_COUNT)
|
86
|
+
{
|
87
|
+
printf("Delivered: %9" PRId64 " - ", delivered);
|
88
|
+
printf("Pending: %5d - ", pending);
|
89
|
+
printf("Dropped: %5" PRId64 " - ", dropped);
|
90
|
+
}
|
91
|
+
printf("Reconnected: %3" PRIu64 "\n", reconnected);
|
92
|
+
}
|
93
|
+
|
94
|
+
return s;
|
95
|
+
}
|
96
|
+
|
97
|
+
static void
|
98
|
+
printPerf(const char *txt, int64_t count, int64_t start, int64_t elapsed)
|
99
|
+
{
|
100
|
+
if ((start > 0) && (elapsed == 0))
|
101
|
+
elapsed = nats_Now() - start;
|
102
|
+
|
103
|
+
if (elapsed <= 0)
|
104
|
+
printf("\nNot enough messages or too fast to report performance!\n");
|
105
|
+
else
|
106
|
+
printf("\n%s %" PRId64 " messages in "\
|
107
|
+
"%" PRId64 " milliseconds (%d msgs/sec)\n",
|
108
|
+
txt, count, elapsed, (int)((count * 1000) / elapsed));
|
109
|
+
}
|
110
|
+
|
111
|
+
static void
|
112
|
+
printUsageAndExit(const char *progName, const char *usage)
|
113
|
+
{
|
114
|
+
printf("\nUsage: %s [options]\n\nThe options are:\n\n"\
|
115
|
+
"-h prints the usage\n" \
|
116
|
+
"-s server url(s) (list of comma separated nats urls)\n" \
|
117
|
+
"-tls use secure (SSL/TLS) connection\n" \
|
118
|
+
"-tlscacert trusted certificates file\n" \
|
119
|
+
"-tlscert client certificate (PEM format only)\n" \
|
120
|
+
"-tlskey client private key file (PEM format only)\n" \
|
121
|
+
"-tlsciphers ciphers suite\n"
|
122
|
+
"-tlshost server certificate's expected hostname\n" \
|
123
|
+
"-tlsskip skip server certificate verification\n" \
|
124
|
+
"-subj subject (default is 'foo')\n" \
|
125
|
+
"%s\n",
|
126
|
+
progName, usage);
|
127
|
+
|
128
|
+
natsOptions_Destroy(opts);
|
129
|
+
nats_Close();
|
130
|
+
|
131
|
+
exit(1);
|
132
|
+
}
|
133
|
+
|
134
|
+
static natsStatus
|
135
|
+
parseUrls(const char *urls, natsOptions *opts)
|
136
|
+
{
|
137
|
+
char *serverUrls[MAX_SERVERS];
|
138
|
+
int count = 0;
|
139
|
+
natsStatus s = NATS_OK;
|
140
|
+
char *urlsCopy = NULL;
|
141
|
+
char *commaPos = NULL;
|
142
|
+
char *ptr = NULL;
|
143
|
+
|
144
|
+
urlsCopy = strdup(urls);
|
145
|
+
if (urlsCopy == NULL)
|
146
|
+
return NATS_NO_MEMORY;
|
147
|
+
|
148
|
+
memset(serverUrls, 0, sizeof(serverUrls));
|
149
|
+
|
150
|
+
ptr = urlsCopy;
|
151
|
+
|
152
|
+
do
|
153
|
+
{
|
154
|
+
if (count == MAX_SERVERS)
|
155
|
+
{
|
156
|
+
s = NATS_INSUFFICIENT_BUFFER;
|
157
|
+
break;
|
158
|
+
}
|
159
|
+
|
160
|
+
serverUrls[count++] = ptr;
|
161
|
+
commaPos = strchr(ptr, ',');
|
162
|
+
if (commaPos != NULL)
|
163
|
+
{
|
164
|
+
ptr = (char*)(commaPos + 1);
|
165
|
+
*(commaPos) = '\0';
|
166
|
+
}
|
167
|
+
else
|
168
|
+
{
|
169
|
+
ptr = NULL;
|
170
|
+
}
|
171
|
+
} while (ptr != NULL);
|
172
|
+
|
173
|
+
if (s == NATS_OK)
|
174
|
+
s = natsOptions_SetServers(opts, (const char**) serverUrls, count);
|
175
|
+
|
176
|
+
free(urlsCopy);
|
177
|
+
|
178
|
+
return s;
|
179
|
+
}
|
180
|
+
|
181
|
+
static natsOptions*
|
182
|
+
parseArgs(int argc, char **argv, const char *usage)
|
183
|
+
{
|
184
|
+
natsStatus s = NATS_OK;
|
185
|
+
bool urlsSet = false;
|
186
|
+
int i;
|
187
|
+
|
188
|
+
if (natsOptions_Create(&opts) != NATS_OK)
|
189
|
+
s = NATS_NO_MEMORY;
|
190
|
+
|
191
|
+
for (i=1; (i<argc) && (s == NATS_OK); i++)
|
192
|
+
{
|
193
|
+
if ((strcasecmp(argv[i], "-h") == 0)
|
194
|
+
|| (strcasecmp(argv[i], "-help") == 0))
|
195
|
+
{
|
196
|
+
printUsageAndExit(argv[0], usage);
|
197
|
+
}
|
198
|
+
else if (strcasecmp(argv[i], "-s") == 0)
|
199
|
+
{
|
200
|
+
if (i + 1 == argc)
|
201
|
+
printUsageAndExit(argv[0], usage);
|
202
|
+
|
203
|
+
s = parseUrls(argv[++i], opts);
|
204
|
+
if (s == NATS_OK)
|
205
|
+
urlsSet = true;
|
206
|
+
}
|
207
|
+
else if (strcasecmp(argv[i], "-tls") == 0)
|
208
|
+
{
|
209
|
+
s = natsOptions_SetSecure(opts, true);
|
210
|
+
}
|
211
|
+
else if (strcasecmp(argv[i], "-tlscacert") == 0)
|
212
|
+
{
|
213
|
+
if (i + 1 == argc)
|
214
|
+
printUsageAndExit(argv[0], usage);
|
215
|
+
|
216
|
+
s = natsOptions_LoadCATrustedCertificates(opts, argv[++i]);
|
217
|
+
}
|
218
|
+
else if (strcasecmp(argv[i], "-tlscert") == 0)
|
219
|
+
{
|
220
|
+
if (i + 1 == argc)
|
221
|
+
printUsageAndExit(argv[0], usage);
|
222
|
+
|
223
|
+
certFile = argv[++i];
|
224
|
+
}
|
225
|
+
else if (strcasecmp(argv[i], "-tlskey") == 0)
|
226
|
+
{
|
227
|
+
if (i + 1 == argc)
|
228
|
+
printUsageAndExit(argv[0], usage);
|
229
|
+
|
230
|
+
keyFile = argv[++i];
|
231
|
+
}
|
232
|
+
else if (strcasecmp(argv[i], "-tlsciphers") == 0)
|
233
|
+
{
|
234
|
+
if (i + 1 == argc)
|
235
|
+
printUsageAndExit(argv[0], usage);
|
236
|
+
|
237
|
+
s = natsOptions_SetCiphers(opts, argv[++i]);
|
238
|
+
}
|
239
|
+
else if (strcasecmp(argv[i], "-tlshost") == 0)
|
240
|
+
{
|
241
|
+
if (i + 1 == argc)
|
242
|
+
printUsageAndExit(argv[0], usage);
|
243
|
+
|
244
|
+
s = natsOptions_SetExpectedHostname(opts, argv[++i]);
|
245
|
+
}
|
246
|
+
else if (strcasecmp(argv[i], "-tlsskip") == 0)
|
247
|
+
{
|
248
|
+
s = natsOptions_SkipServerVerification(opts, true);
|
249
|
+
}
|
250
|
+
else if (strcasecmp(argv[i], "-sync") == 0)
|
251
|
+
{
|
252
|
+
async = false;
|
253
|
+
}
|
254
|
+
else if (strcasecmp(argv[i], "-subj") == 0)
|
255
|
+
{
|
256
|
+
if (i + 1 == argc)
|
257
|
+
printUsageAndExit(argv[0], usage);
|
258
|
+
|
259
|
+
subj = argv[++i];
|
260
|
+
}
|
261
|
+
else if ((strcasecmp(argv[i], "-name") == 0) ||
|
262
|
+
(strcasecmp(argv[i], "-queue") == 0))
|
263
|
+
{
|
264
|
+
if (i + 1 == argc)
|
265
|
+
printUsageAndExit(argv[0], usage);
|
266
|
+
|
267
|
+
name = argv[++i];
|
268
|
+
}
|
269
|
+
else if (strcasecmp(argv[i], "-count") == 0)
|
270
|
+
{
|
271
|
+
if (i + 1 == argc)
|
272
|
+
printUsageAndExit(argv[0], usage);
|
273
|
+
|
274
|
+
total = atol(argv[++i]);
|
275
|
+
}
|
276
|
+
else if (strcasecmp(argv[i], "-txt") == 0)
|
277
|
+
{
|
278
|
+
if (i + 1 == argc)
|
279
|
+
printUsageAndExit(argv[0], usage);
|
280
|
+
|
281
|
+
txt = argv[++i];
|
282
|
+
}
|
283
|
+
else if (strcasecmp(argv[i], "-timeout") == 0)
|
284
|
+
{
|
285
|
+
if (i + 1 == argc)
|
286
|
+
printUsageAndExit(argv[0], usage);
|
287
|
+
|
288
|
+
timeout = atol(argv[++i]);
|
289
|
+
}
|
290
|
+
else if (strcasecmp(argv[i], "-gd") == 0)
|
291
|
+
{
|
292
|
+
s = natsOptions_UseGlobalMessageDelivery(opts, true);
|
293
|
+
}
|
294
|
+
else
|
295
|
+
{
|
296
|
+
printf("Unknown option: '%s'\n", argv[i]);
|
297
|
+
printUsageAndExit(argv[0], usage);
|
298
|
+
}
|
299
|
+
}
|
300
|
+
|
301
|
+
if ((s == NATS_OK) && ((certFile != NULL) || (keyFile != NULL)))
|
302
|
+
s = natsOptions_LoadCertificatesChain(opts, certFile, keyFile);
|
303
|
+
|
304
|
+
if ((s == NATS_OK) && !urlsSet)
|
305
|
+
s = parseUrls(NATS_DEFAULT_URL, opts);
|
306
|
+
|
307
|
+
if (s != NATS_OK)
|
308
|
+
{
|
309
|
+
printf("Error parsing arguments: %d - %s\n",
|
310
|
+
s, natsStatus_GetText(s));
|
311
|
+
|
312
|
+
nats_PrintLastErrorStack(stderr);
|
313
|
+
|
314
|
+
natsOptions_Destroy(opts);
|
315
|
+
nats_Close();
|
316
|
+
exit(1);
|
317
|
+
}
|
318
|
+
|
319
|
+
return opts;
|
320
|
+
}
|
321
|
+
|
322
|
+
#endif /* EXAMPLES_H_ */
|