ffi-nats-core 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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_ */