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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/ffi-nats-core.gemspec +8 -0
  3. data/lib/ffi/nats/core/version.rb +1 -1
  4. data/vendor/cnats/CMakeLists.txt +137 -0
  5. data/vendor/cnats/adapters/libevent.h +220 -0
  6. data/vendor/cnats/adapters/libuv.h +472 -0
  7. data/vendor/cnats/examples/CMakeLists.txt +56 -0
  8. data/vendor/cnats/examples/asynctimeout.c +83 -0
  9. data/vendor/cnats/examples/examples.h +322 -0
  10. data/vendor/cnats/examples/libevent-pub.c +136 -0
  11. data/vendor/cnats/examples/libevent-sub.c +104 -0
  12. data/vendor/cnats/examples/libuv-pub.c +120 -0
  13. data/vendor/cnats/examples/libuv-sub.c +114 -0
  14. data/vendor/cnats/examples/publisher.c +62 -0
  15. data/vendor/cnats/examples/queuegroup.c +132 -0
  16. data/vendor/cnats/examples/replier.c +149 -0
  17. data/vendor/cnats/examples/requestor.c +75 -0
  18. data/vendor/cnats/examples/subscriber.c +133 -0
  19. data/vendor/cnats/src/CMakeLists.txt +31 -0
  20. data/vendor/cnats/src/asynccb.c +66 -0
  21. data/vendor/cnats/src/asynccb.h +42 -0
  22. data/vendor/cnats/src/buf.c +246 -0
  23. data/vendor/cnats/src/buf.h +116 -0
  24. data/vendor/cnats/src/comsock.c +474 -0
  25. data/vendor/cnats/src/comsock.h +81 -0
  26. data/vendor/cnats/src/conn.c +2725 -0
  27. data/vendor/cnats/src/conn.h +75 -0
  28. data/vendor/cnats/src/err.h +31 -0
  29. data/vendor/cnats/src/gc.h +27 -0
  30. data/vendor/cnats/src/hash.c +725 -0
  31. data/vendor/cnats/src/hash.h +141 -0
  32. data/vendor/cnats/src/include/n-unix.h +56 -0
  33. data/vendor/cnats/src/include/n-win.h +59 -0
  34. data/vendor/cnats/src/mem.h +20 -0
  35. data/vendor/cnats/src/msg.c +155 -0
  36. data/vendor/cnats/src/msg.h +43 -0
  37. data/vendor/cnats/src/nats.c +1734 -0
  38. data/vendor/cnats/src/nats.h +2024 -0
  39. data/vendor/cnats/src/natsp.h +518 -0
  40. data/vendor/cnats/src/natstime.c +79 -0
  41. data/vendor/cnats/src/natstime.h +27 -0
  42. data/vendor/cnats/src/nuid.c +265 -0
  43. data/vendor/cnats/src/nuid.h +21 -0
  44. data/vendor/cnats/src/opts.c +1030 -0
  45. data/vendor/cnats/src/opts.h +19 -0
  46. data/vendor/cnats/src/parser.c +869 -0
  47. data/vendor/cnats/src/parser.h +87 -0
  48. data/vendor/cnats/src/pub.c +293 -0
  49. data/vendor/cnats/src/srvpool.c +380 -0
  50. data/vendor/cnats/src/srvpool.h +71 -0
  51. data/vendor/cnats/src/stats.c +54 -0
  52. data/vendor/cnats/src/stats.h +21 -0
  53. data/vendor/cnats/src/status.c +60 -0
  54. data/vendor/cnats/src/status.h +95 -0
  55. data/vendor/cnats/src/sub.c +956 -0
  56. data/vendor/cnats/src/sub.h +34 -0
  57. data/vendor/cnats/src/timer.c +86 -0
  58. data/vendor/cnats/src/timer.h +57 -0
  59. data/vendor/cnats/src/unix/cond.c +103 -0
  60. data/vendor/cnats/src/unix/mutex.c +107 -0
  61. data/vendor/cnats/src/unix/sock.c +105 -0
  62. data/vendor/cnats/src/unix/thread.c +162 -0
  63. data/vendor/cnats/src/url.c +134 -0
  64. data/vendor/cnats/src/url.h +24 -0
  65. data/vendor/cnats/src/util.c +823 -0
  66. data/vendor/cnats/src/util.h +75 -0
  67. data/vendor/cnats/src/version.h +29 -0
  68. data/vendor/cnats/src/version.h.in +29 -0
  69. data/vendor/cnats/src/win/cond.c +86 -0
  70. data/vendor/cnats/src/win/mutex.c +54 -0
  71. data/vendor/cnats/src/win/sock.c +158 -0
  72. data/vendor/cnats/src/win/strings.c +108 -0
  73. data/vendor/cnats/src/win/thread.c +180 -0
  74. data/vendor/cnats/test/CMakeLists.txt +35 -0
  75. data/vendor/cnats/test/certs/ca.pem +38 -0
  76. data/vendor/cnats/test/certs/client-cert.pem +30 -0
  77. data/vendor/cnats/test/certs/client-key.pem +51 -0
  78. data/vendor/cnats/test/certs/server-cert.pem +31 -0
  79. data/vendor/cnats/test/certs/server-key.pem +51 -0
  80. data/vendor/cnats/test/dylib/CMakeLists.txt +10 -0
  81. data/vendor/cnats/test/dylib/nonats.c +13 -0
  82. data/vendor/cnats/test/list.txt +125 -0
  83. data/vendor/cnats/test/test.c +11655 -0
  84. data/vendor/cnats/test/tls.conf +15 -0
  85. data/vendor/cnats/test/tlsverify.conf +19 -0
  86. metadata +83 -1
@@ -0,0 +1,141 @@
1
+ // Copyright 2015 Apcera Inc. All rights reserved.
2
+
3
+
4
+ #ifndef HASH_H_
5
+ #define HASH_H_
6
+
7
+ struct __natsHashEntry;
8
+
9
+ typedef struct __natsHashEntry
10
+ {
11
+ int64_t key;
12
+ void *data;
13
+ struct __natsHashEntry *next;
14
+
15
+ } natsHashEntry;
16
+
17
+ typedef struct __natsHash
18
+ {
19
+ natsHashEntry **bkts;
20
+ int numBkts;
21
+ int mask;
22
+ int used;
23
+ bool canResize;
24
+
25
+ } natsHash;
26
+
27
+ typedef struct __natsHashIter
28
+ {
29
+ natsHash *hash;
30
+ natsHashEntry *current;
31
+ natsHashEntry *next;
32
+ int currBkt;
33
+ bool started;
34
+
35
+ } natsHashIter;
36
+
37
+ typedef struct __natsStrHashEntry
38
+ {
39
+ uint32_t hk;
40
+ char *key;
41
+ bool freeKey;
42
+ void *data;
43
+ struct __natsStrHashEntry *next;
44
+
45
+ } natsStrHashEntry;
46
+
47
+ typedef struct __natsStrHash
48
+ {
49
+ natsStrHashEntry **bkts;
50
+ int numBkts;
51
+ int mask;
52
+ int used;
53
+ bool canResize;
54
+
55
+ } natsStrHash;
56
+
57
+ typedef struct __natsStrHashIter
58
+ {
59
+ natsStrHash *hash;
60
+ natsStrHashEntry *current;
61
+ natsStrHashEntry *next;
62
+ int currBkt;
63
+ bool started;
64
+
65
+ } natsStrHashIter;
66
+
67
+ #define natsHash_Count(h) ((h)->used)
68
+ #define natsStrHash_Count(h) ((h)->used)
69
+
70
+ //
71
+ // Hash with in64_t as the key
72
+ //
73
+ natsStatus
74
+ natsHash_Create(natsHash **newHash, int initialSize);
75
+
76
+ natsStatus
77
+ natsHash_Set(natsHash *hash, int64_t key, void *data, void **oldData);
78
+
79
+ void*
80
+ natsHash_Get(natsHash *hash, int64_t key);
81
+
82
+ void*
83
+ natsHash_Remove(natsHash *hash, int64_t key);
84
+
85
+ void
86
+ natsHash_Destroy(natsHash *hash);
87
+
88
+ //
89
+ // Iterator for Hash int64_t
90
+ //
91
+ void
92
+ natsHashIter_Init(natsHashIter *iter, natsHash *hash);
93
+
94
+ bool
95
+ natsHashIter_Next(natsHashIter *iter, int64_t *key, void **value);
96
+
97
+ natsStatus
98
+ natsHashIter_RemoveCurrent(natsHashIter *iter);
99
+
100
+ void
101
+ natsHashIter_Done(natsHashIter *iter);
102
+
103
+ //
104
+ // Hash with char* as the key
105
+ //
106
+ natsStatus
107
+ natsStrHash_Create(natsStrHash **newHash, int initialSize);
108
+
109
+ uint32_t
110
+ natsStrHash_Hash(const char *data, int dataLen);
111
+
112
+ natsStatus
113
+ natsStrHash_Set(natsStrHash *hash, char *key, bool copyKey,
114
+ void *data, void **oldData);
115
+
116
+ void*
117
+ natsStrHash_Get(natsStrHash *hash, char *key);
118
+
119
+ void*
120
+ natsStrHash_Remove(natsStrHash *hash, char *key);
121
+
122
+ void
123
+ natsStrHash_Destroy(natsStrHash *hash);
124
+
125
+ //
126
+ // Iterator for Hash char*
127
+ //
128
+ void
129
+ natsStrHashIter_Init(natsStrHashIter *iter, natsStrHash *hash);
130
+
131
+ bool
132
+ natsStrHashIter_Next(natsStrHashIter *iter, char **key, void **value);
133
+
134
+ natsStatus
135
+ natsStrHashIter_RemoveCurrent(natsStrHashIter *iter);
136
+
137
+ void
138
+ natsStrHashIter_Done(natsStrHashIter *iter);
139
+
140
+
141
+ #endif /* HASH_H_ */
@@ -0,0 +1,56 @@
1
+ // Copyright 2015 Apcera Inc. All rights reserved.
2
+
3
+ #ifndef N_UNIX_H_
4
+ #define N_UNIX_H_
5
+
6
+ #ifndef _GNU_SOURCE
7
+ #define _GNU_SOURCE
8
+ #endif
9
+
10
+ #include <stdint.h>
11
+ #include <stdbool.h>
12
+
13
+ #ifdef DARWIN
14
+ #define FD_SETSIZE (32768)
15
+ #else
16
+ #include <sys/types.h>
17
+ #undef __FD_SETSIZE
18
+ #define __FD_SETSIZE (32768)
19
+ #include <sys/select.h>
20
+ #endif
21
+
22
+ #include <sys/time.h>
23
+ #include <fcntl.h>
24
+ #include <netinet/tcp.h>
25
+ #include <netdb.h>
26
+ #include <pthread.h>
27
+ #include <unistd.h>
28
+ #include <signal.h>
29
+ #include <sys/wait.h>
30
+ #include <errno.h>
31
+ #include <string.h>
32
+
33
+ typedef pthread_t natsThread;
34
+ typedef pthread_key_t natsThreadLocal;
35
+ typedef pthread_mutex_t natsMutex;
36
+ typedef pthread_cond_t natsCondition;
37
+ typedef pthread_once_t natsInitOnceType;
38
+ typedef socklen_t natsSockLen;
39
+ typedef size_t natsRecvLen;
40
+
41
+ #define NATS_ONCE_STATIC_INIT PTHREAD_ONCE_INIT
42
+
43
+ #define NATS_SOCK_INVALID (-1)
44
+ #define NATS_SOCK_SHUTDOWN(s) (shutdown((s), SHUT_RDWR))
45
+ #define NATS_SOCK_CLOSE(s) (close((s)))
46
+ #define NATS_SOCK_CONNECT_IN_PROGRESS (EINPROGRESS)
47
+ #define NATS_SOCK_WOULD_BLOCK (EWOULDBLOCK)
48
+ #define NATS_SOCK_ERROR (-1)
49
+ #define NATS_SOCK_GET_ERROR (errno)
50
+
51
+ #define __NATS_FUNCTION__ __func__
52
+
53
+ #define nats_asprintf asprintf
54
+ #define nats_strcasestr strcasestr
55
+
56
+ #endif /* N_UNIX_H_ */
@@ -0,0 +1,59 @@
1
+ // Copyright 2015 Apcera Inc. All rights reserved.
2
+
3
+ #ifndef N_WIN_H_
4
+ #define N_WIN_H_
5
+
6
+ #include <winsock2.h>
7
+ #include <ws2tcpip.h>
8
+
9
+ #define WIN32_LEAN_AND_MEAN
10
+ #include <windows.h>
11
+ #undef WIN32_LEAN_AND_MEAN
12
+
13
+ #define _CRT_SECURE_NO_WARNINGS
14
+
15
+ #pragma comment(lib, "Ws2_32.lib")
16
+ #pragma warning(disable : 4996)
17
+
18
+ typedef struct __natsThread
19
+ {
20
+ HANDLE t;
21
+ DWORD id;
22
+
23
+ } natsThread;
24
+
25
+ typedef DWORD natsThreadLocal;
26
+
27
+ typedef CRITICAL_SECTION natsMutex;
28
+ typedef CONDITION_VARIABLE natsCondition;
29
+ typedef INIT_ONCE natsInitOnceType;
30
+ typedef int natsSockLen;
31
+ typedef int natsRecvLen;
32
+
33
+ #define NATS_ONCE_TYPE INIT_ONCE
34
+ #define NATS_ONCE_STATIC_INIT INIT_ONCE_STATIC_INIT
35
+
36
+ #define NATS_SOCK_INVALID (INVALID_SOCKET)
37
+ #define NATS_SOCK_CLOSE(s) closesocket((s))
38
+ #define NATS_SOCK_SHUTDOWN(s) shutdown((s), SD_BOTH)
39
+ #define NATS_SOCK_CONNECT_IN_PROGRESS (WSAEWOULDBLOCK)
40
+ #define NATS_SOCK_WOULD_BLOCK (WSAEWOULDBLOCK)
41
+ #define NATS_SOCK_ERROR (SOCKET_ERROR)
42
+ #define NATS_SOCK_GET_ERROR WSAGetLastError()
43
+
44
+ #define __NATS_FUNCTION__ __FUNCTION__
45
+
46
+ // Windows doesn't have those..
47
+ // snprintf support is introduced starting MSVC 14.0 (_MSC_VER 1900: Visual Studio 2015)
48
+ #if _MSC_VER < 1900
49
+ #define snprintf _snprintf
50
+ #endif
51
+ #define strcasecmp _stricmp
52
+
53
+ int
54
+ nats_asprintf(char **newStr, const char *fmt, ...);
55
+
56
+ char*
57
+ nats_strcasestr(const char *haystack, const char *needle);
58
+
59
+ #endif /* N_WIN_H_ */
@@ -0,0 +1,20 @@
1
+ // Copyright 2015 Apcera Inc. All rights reserved.
2
+
3
+ #ifndef MEM_H_
4
+ #define MEM_H_
5
+
6
+ #include <stdlib.h>
7
+
8
+ #define NATS_MALLOC(s) malloc((s))
9
+ #define NATS_CALLOC(c,s) calloc((c), (s))
10
+ #define NATS_REALLOC(p, s) realloc((p), (s))
11
+
12
+ #ifdef _WIN32
13
+ #define NATS_STRDUP(s) _strdup((s))
14
+ #else
15
+ #define NATS_STRDUP(s) strdup((s))
16
+ #endif
17
+ #define NATS_FREE(p) free((p))
18
+
19
+
20
+ #endif /* MEM_H_ */
@@ -0,0 +1,155 @@
1
+ // Copyright 2015-2016 Apcera Inc. All rights reserved.
2
+
3
+ #include "natsp.h"
4
+
5
+ // Do this after including natsp.h in order to have some of the
6
+ // GNU specific flag set first.
7
+ #include <string.h>
8
+
9
+ #include "mem.h"
10
+
11
+ void
12
+ natsMsg_free(void *object)
13
+ {
14
+ natsMsg *msg;
15
+
16
+ if (object == NULL)
17
+ return;
18
+
19
+ msg = (natsMsg*) object;
20
+
21
+ NATS_FREE(msg);
22
+ }
23
+
24
+ void
25
+ natsMsg_Destroy(natsMsg *msg)
26
+ {
27
+ if (msg == NULL)
28
+ return;
29
+
30
+ if (natsGC_collect((natsGCItem *) msg))
31
+ return;
32
+
33
+ natsMsg_free((void*) msg);
34
+ }
35
+
36
+ const char*
37
+ natsMsg_GetSubject(natsMsg *msg)
38
+ {
39
+ if (msg == NULL)
40
+ return NULL;
41
+
42
+ return (const char*) msg->subject;
43
+ }
44
+
45
+ const char*
46
+ natsMsg_GetReply(natsMsg *msg)
47
+ {
48
+ if (msg == NULL)
49
+ return NULL;
50
+
51
+ return (const char*) msg->reply;
52
+ }
53
+
54
+ const char*
55
+ natsMsg_GetData(natsMsg *msg)
56
+ {
57
+ if (msg == NULL)
58
+ return NULL;
59
+
60
+ return (const char*) msg->data;
61
+ }
62
+
63
+ int
64
+ natsMsg_GetDataLength(natsMsg *msg)
65
+ {
66
+ if (msg == NULL)
67
+ return 0;
68
+
69
+ return msg->dataLen;
70
+ }
71
+
72
+ natsStatus
73
+ natsMsg_create(natsMsg **newMsg,
74
+ const char *subject, int subjLen,
75
+ const char *reply, int replyLen,
76
+ const char *buf, int bufLen)
77
+ {
78
+ natsMsg *msg = NULL;
79
+ char *ptr = NULL;
80
+ int bufSize = 0;
81
+
82
+ bufSize = subjLen;
83
+ bufSize += 1;
84
+ bufSize += replyLen;
85
+ bufSize += 1;
86
+ bufSize += bufLen;
87
+ bufSize += 1;
88
+
89
+ msg = NATS_MALLOC(sizeof(natsMsg) + bufSize);
90
+ if (msg == NULL)
91
+ return nats_setDefaultError(NATS_NO_MEMORY);
92
+
93
+ // To be safe, we could 'memset' the message up to sizeof(natsMsg),
94
+ // but since we are explicitly initializing most of the fields, we save
95
+ // on that call, but we need to make sure what we initialize all fields!!!
96
+
97
+ // That being said, we memset the 'gc' structure to protect us in case
98
+ // some fields are later added to this 'external' structure and we forget
99
+ // about updating this initialization code.
100
+ memset(&(msg->gc), 0, sizeof(natsGCItem));
101
+
102
+ msg->sub = NULL;
103
+ msg->next = NULL;
104
+
105
+ ptr = (char*) (((char*) &(msg->next)) + sizeof(msg->next));
106
+
107
+ msg->subject = (const char*) ptr;
108
+ memcpy(ptr, subject, subjLen);
109
+ ptr += subjLen;
110
+ *(ptr++) = '\0';
111
+
112
+ msg->reply = (const char*) ptr;
113
+ if (replyLen > 0)
114
+ {
115
+ memcpy(ptr, reply, replyLen);
116
+ ptr += replyLen;
117
+ }
118
+ *(ptr++) = '\0';
119
+
120
+ msg->data = (const char*) ptr;
121
+ msg->dataLen = bufLen;
122
+ memcpy(ptr, buf, bufLen);
123
+ ptr += bufLen;
124
+ *(ptr) = '\0';
125
+
126
+ // Setting the callback will trigger garbage collection when
127
+ // natsMsg_Destroy() is invoked.
128
+ msg->gc.freeCb = natsMsg_free;
129
+
130
+ *newMsg = msg;
131
+
132
+ return NATS_OK;
133
+ }
134
+
135
+ natsStatus
136
+ natsMsg_Create(natsMsg **newMsg, const char *subj, const char *reply,
137
+ const char *data, int dataLen)
138
+ {
139
+ natsStatus s = NATS_OK;
140
+
141
+ if ((subj == NULL)
142
+ || (subj[0] == '\0')
143
+ || ((reply != NULL) && (reply[0] == '\0')))
144
+ {
145
+ return nats_setDefaultError(NATS_INVALID_ARG);
146
+ }
147
+
148
+ s = natsMsg_create(newMsg,
149
+ subj, (int) strlen(subj),
150
+ reply, (reply == NULL ? 0 : (int) strlen(reply)),
151
+ data, dataLen);
152
+
153
+ return NATS_UPDATE_ERR_STACK(s);
154
+ }
155
+
@@ -0,0 +1,43 @@
1
+ // Copyright 2015-2016 Apcera Inc. All rights reserved.
2
+
3
+ #ifndef MSG_H_
4
+ #define MSG_H_
5
+
6
+ #include "status.h"
7
+ #include "gc.h"
8
+
9
+ struct __natsMsg;
10
+
11
+ struct __natsMsg
12
+ {
13
+ natsGCItem gc;
14
+
15
+ // The message is allocated as a single memory block that contains
16
+ // this structure and enough space for the payload. The msg payload
17
+ // starts after the 'next' pointer.
18
+ const char *subject;
19
+ const char *reply;
20
+ const char *data;
21
+ int dataLen;
22
+
23
+ // subscription (needed when delivery done by connection)
24
+ struct __natsSubscription *sub;
25
+
26
+ // Must be last field!
27
+ struct __natsMsg *next;
28
+
29
+ // Nothing after this: the message payload goes there.
30
+
31
+ };
32
+
33
+ natsStatus
34
+ natsMsg_create(natsMsg **newMsg,
35
+ const char *subject, int subjLen,
36
+ const char *reply, int replyLen,
37
+ const char *buf, int bufLen);
38
+
39
+ // This needs to follow the nats_FreeObjectCb prototype (see gc.h)
40
+ void
41
+ natsMsg_free(void *object);
42
+
43
+ #endif /* MSG_H_ */