czmq-ffi-gen 0.13.0-x86-mingw32 → 0.14.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +13 -0
- data/lib/czmq-ffi-gen/czmq/ffi.rb +224 -698
- data/lib/czmq-ffi-gen/czmq/ffi/zactor.rb +40 -7
- data/lib/czmq-ffi-gen/czmq/ffi/zargs.rb +259 -0
- data/lib/czmq-ffi-gen/czmq/ffi/zarmour.rb +3 -3
- data/lib/czmq-ffi-gen/czmq/ffi/zcert.rb +15 -6
- data/lib/czmq-ffi-gen/czmq/ffi/zcertstore.rb +25 -11
- data/lib/czmq-ffi-gen/czmq/ffi/zchunk.rb +18 -18
- data/lib/czmq-ffi-gen/czmq/ffi/zclock.rb +6 -6
- data/lib/czmq-ffi-gen/czmq/ffi/zconfig.rb +27 -17
- data/lib/czmq-ffi-gen/czmq/ffi/zdigest.rb +4 -4
- data/lib/czmq-ffi-gen/czmq/ffi/zdir.rb +36 -36
- data/lib/czmq-ffi-gen/czmq/ffi/zdir_patch.rb +1 -1
- data/lib/czmq-ffi-gen/czmq/ffi/zfile.rb +27 -19
- data/lib/czmq-ffi-gen/czmq/ffi/zframe.rb +22 -21
- data/lib/czmq-ffi-gen/czmq/ffi/zhash.rb +54 -54
- data/lib/czmq-ffi-gen/czmq/ffi/zhashx.rb +82 -80
- data/lib/czmq-ffi-gen/czmq/ffi/ziflist.rb +30 -0
- data/lib/czmq-ffi-gen/czmq/ffi/zlist.rb +30 -30
- data/lib/czmq-ffi-gen/czmq/ffi/zlistx.rb +44 -44
- data/lib/czmq-ffi-gen/czmq/ffi/zloop.rb +39 -39
- data/lib/czmq-ffi-gen/czmq/ffi/zmsg.rb +46 -46
- data/lib/czmq-ffi-gen/czmq/ffi/zpoller.rb +16 -16
- data/lib/czmq-ffi-gen/czmq/ffi/zproc.rb +237 -34
- data/lib/czmq-ffi-gen/czmq/ffi/zsock.rb +1201 -973
- data/lib/czmq-ffi-gen/czmq/ffi/zstr.rb +58 -19
- data/lib/czmq-ffi-gen/czmq/ffi/zsys.rb +836 -0
- data/lib/czmq-ffi-gen/czmq/ffi/ztimerset.rb +6 -6
- data/lib/czmq-ffi-gen/czmq/ffi/ztrie.rb +10 -10
- data/lib/czmq-ffi-gen/czmq/ffi/zuuid.rb +4 -4
- data/lib/czmq-ffi-gen/gem_version.rb +1 -1
- data/lib/czmq-ffi-gen/vendor.rb +9 -1
- data/vendor/local/bin/inproc_lat.exe +0 -0
- data/vendor/local/bin/inproc_thr.exe +0 -0
- data/vendor/local/bin/libczmq.dll +0 -0
- data/vendor/local/bin/libzmq.dll +0 -0
- data/vendor/local/bin/local_lat.exe +0 -0
- data/vendor/local/bin/local_thr.exe +0 -0
- data/vendor/local/bin/remote_lat.exe +0 -0
- data/vendor/local/bin/remote_thr.exe +0 -0
- data/vendor/local/bin/zmakecert.exe +0 -0
- data/vendor/local/include/czmq_library.h +18 -9
- data/vendor/local/include/czmq_prelude.h +104 -16
- data/vendor/local/include/zactor.h +25 -7
- data/vendor/local/include/zarmour.h +3 -3
- data/vendor/local/include/zcert.h +11 -6
- data/vendor/local/include/zcertstore.h +18 -9
- data/vendor/local/include/zchunk.h +18 -18
- data/vendor/local/include/zclock.h +6 -6
- data/vendor/local/include/zconfig.h +25 -16
- data/vendor/local/include/zdigest.h +4 -4
- data/vendor/local/include/zdir.h +36 -36
- data/vendor/local/include/zdir_patch.h +1 -1
- data/vendor/local/include/zfile.h +27 -19
- data/vendor/local/include/zframe.h +22 -21
- data/vendor/local/include/zgossip.h +5 -5
- data/vendor/local/include/zgossip_engine.inc +103 -22
- data/vendor/local/include/zgossip_msg.h +28 -30
- data/vendor/local/include/zhash.h +53 -53
- data/vendor/local/include/zhashx.h +75 -73
- data/vendor/local/include/ziflist.h +22 -1
- data/vendor/local/include/zlist.h +28 -28
- data/vendor/local/include/zlistx.h +41 -41
- data/vendor/local/include/zloop.h +36 -36
- data/vendor/local/include/zmsg.h +46 -46
- data/vendor/local/include/zpoller.h +16 -16
- data/vendor/local/include/zsock.h +414 -364
- data/vendor/local/include/zsock_option.inc +234 -1062
- data/vendor/local/include/zstr.h +44 -19
- data/vendor/local/include/zsys.h +63 -19
- data/vendor/local/include/zuuid.h +4 -4
- data/vendor/local/lib/libczmq.dll.a +0 -0
- data/vendor/local/lib/liblibzmq.dll.a +0 -0
- data/vendor/local/lib/pkgconfig/libczmq.pc +1 -1
- metadata +6 -3
@@ -39,7 +39,7 @@ CZMQ_EXPORT void
|
|
39
39
|
zdir_patch_destroy (zdir_patch_t **self_p);
|
40
40
|
|
41
41
|
// Create copy of a patch. If the patch is null, or memory was exhausted,
|
42
|
-
// returns null.
|
42
|
+
// returns null.
|
43
43
|
// Caller owns return value and must destroy it when done.
|
44
44
|
CZMQ_EXPORT zdir_patch_t *
|
45
45
|
zdir_patch_dup (zdir_patch_t *self);
|
@@ -27,7 +27,7 @@ extern "C" {
|
|
27
27
|
// links, which are files with the extension ".ln". A symbolic link is a
|
28
28
|
// text file containing one line, the filename of a target file. Reading
|
29
29
|
// data from the symbolic link actually reads from the target file. Path
|
30
|
-
// may be NULL, in which case it is not used.
|
30
|
+
// may be NULL, in which case it is not used.
|
31
31
|
CZMQ_EXPORT zfile_t *
|
32
32
|
zfile_new (const char *path, const char *name);
|
33
33
|
|
@@ -36,7 +36,7 @@ CZMQ_EXPORT void
|
|
36
36
|
zfile_destroy (zfile_t **self_p);
|
37
37
|
|
38
38
|
// Duplicate a file item, returns a newly constructed item. If the file
|
39
|
-
// is null, or memory was exhausted, returns null.
|
39
|
+
// is null, or memory was exhausted, returns null.
|
40
40
|
// Caller owns return value and must destroy it when done.
|
41
41
|
CZMQ_EXPORT zfile_t *
|
42
42
|
zfile_dup (zfile_t *self);
|
@@ -45,23 +45,23 @@ CZMQ_EXPORT zfile_t *
|
|
45
45
|
CZMQ_EXPORT const char *
|
46
46
|
zfile_filename (zfile_t *self, const char *path);
|
47
47
|
|
48
|
-
// Refresh file properties from disk; this is not done automatically
|
48
|
+
// Refresh file properties from disk; this is not done automatically
|
49
49
|
// on access methods, otherwise it is not possible to compare directory
|
50
|
-
// snapshots.
|
50
|
+
// snapshots.
|
51
51
|
CZMQ_EXPORT void
|
52
52
|
zfile_restat (zfile_t *self);
|
53
53
|
|
54
54
|
// Return when the file was last modified. If you want this to reflect the
|
55
|
-
// current situation, call zfile_restat before checking this property.
|
55
|
+
// current situation, call zfile_restat before checking this property.
|
56
56
|
CZMQ_EXPORT time_t
|
57
57
|
zfile_modified (zfile_t *self);
|
58
58
|
|
59
59
|
// Return the last-known size of the file. If you want this to reflect the
|
60
|
-
// current situation, call zfile_restat before checking this property.
|
60
|
+
// current situation, call zfile_restat before checking this property.
|
61
61
|
CZMQ_EXPORT off_t
|
62
62
|
zfile_cursize (zfile_t *self);
|
63
63
|
|
64
|
-
// Return true if the file is a directory. If you want this to reflect
|
64
|
+
// Return true if the file is a directory. If you want this to reflect
|
65
65
|
// any external changes, call zfile_restat before checking this property.
|
66
66
|
CZMQ_EXPORT bool
|
67
67
|
zfile_is_directory (zfile_t *self);
|
@@ -72,24 +72,24 @@ CZMQ_EXPORT bool
|
|
72
72
|
zfile_is_regular (zfile_t *self);
|
73
73
|
|
74
74
|
// Return true if the file is readable by this process. If you want this to
|
75
|
-
// reflect any external changes, call zfile_restat before checking this
|
76
|
-
// property.
|
75
|
+
// reflect any external changes, call zfile_restat before checking this
|
76
|
+
// property.
|
77
77
|
CZMQ_EXPORT bool
|
78
78
|
zfile_is_readable (zfile_t *self);
|
79
79
|
|
80
|
-
// Return true if the file is writeable by this process. If you want this
|
80
|
+
// Return true if the file is writeable by this process. If you want this
|
81
81
|
// to reflect any external changes, call zfile_restat before checking this
|
82
|
-
// property.
|
82
|
+
// property.
|
83
83
|
CZMQ_EXPORT bool
|
84
84
|
zfile_is_writeable (zfile_t *self);
|
85
85
|
|
86
86
|
// Check if file has stopped changing and can be safely processed.
|
87
|
-
// Updates the file statistics from disk at every call.
|
87
|
+
// Updates the file statistics from disk at every call.
|
88
88
|
CZMQ_EXPORT bool
|
89
89
|
zfile_is_stable (zfile_t *self);
|
90
90
|
|
91
91
|
// Return true if the file was changed on disk since the zfile_t object
|
92
|
-
// was created, or the last zfile_restat() call made on it.
|
92
|
+
// was created, or the last zfile_restat() call made on it.
|
93
93
|
CZMQ_EXPORT bool
|
94
94
|
zfile_has_changed (zfile_t *self);
|
95
95
|
|
@@ -97,19 +97,19 @@ CZMQ_EXPORT bool
|
|
97
97
|
CZMQ_EXPORT void
|
98
98
|
zfile_remove (zfile_t *self);
|
99
99
|
|
100
|
-
// Open file for reading
|
100
|
+
// Open file for reading
|
101
101
|
// Returns 0 if OK, -1 if not found or not accessible
|
102
102
|
CZMQ_EXPORT int
|
103
103
|
zfile_input (zfile_t *self);
|
104
104
|
|
105
|
-
// Open file for writing, creating directory if needed
|
105
|
+
// Open file for writing, creating directory if needed
|
106
106
|
// File is created if necessary; chunks can be written to file at any
|
107
|
-
// location. Returns 0 if OK, -1 if error.
|
107
|
+
// location. Returns 0 if OK, -1 if error.
|
108
108
|
CZMQ_EXPORT int
|
109
109
|
zfile_output (zfile_t *self);
|
110
110
|
|
111
111
|
// Read chunk from file at specified position. If this was the last chunk,
|
112
|
-
// sets the eof property. Returns a null chunk in case of error.
|
112
|
+
// sets the eof property. Returns a null chunk in case of error.
|
113
113
|
// Caller owns return value and must destroy it when done.
|
114
114
|
CZMQ_EXPORT zchunk_t *
|
115
115
|
zfile_read (zfile_t *self, size_t bytes, off_t offset);
|
@@ -119,12 +119,12 @@ CZMQ_EXPORT bool
|
|
119
119
|
zfile_eof (zfile_t *self);
|
120
120
|
|
121
121
|
// Write chunk to file at specified position
|
122
|
-
// Return 0 if OK, else -1
|
122
|
+
// Return 0 if OK, else -1
|
123
123
|
CZMQ_EXPORT int
|
124
124
|
zfile_write (zfile_t *self, zchunk_t *chunk, off_t offset);
|
125
125
|
|
126
126
|
// Read next line of text from file. Returns a pointer to the text line,
|
127
|
-
// or NULL if there was nothing more to read from the file.
|
127
|
+
// or NULL if there was nothing more to read from the file.
|
128
128
|
CZMQ_EXPORT const char *
|
129
129
|
zfile_readln (zfile_t *self);
|
130
130
|
|
@@ -144,6 +144,14 @@ CZMQ_EXPORT const char *
|
|
144
144
|
CZMQ_EXPORT void
|
145
145
|
zfile_test (bool verbose);
|
146
146
|
|
147
|
+
#ifdef CZMQ_BUILD_DRAFT_API
|
148
|
+
// *** Draft method, for development use, may change without warning ***
|
149
|
+
// Create new temporary file for writing via tmpfile. File is automaticaly
|
150
|
+
// deleted on destroy
|
151
|
+
CZMQ_EXPORT zfile_t *
|
152
|
+
zfile_tmp (void);
|
153
|
+
|
154
|
+
#endif // CZMQ_BUILD_DRAFT_API
|
147
155
|
// @end
|
148
156
|
|
149
157
|
|
@@ -25,13 +25,13 @@ extern "C" {
|
|
25
25
|
// is provided in stable builds.
|
26
26
|
// This class has draft methods, which may change over time. They are not
|
27
27
|
// in stable releases, by default. Use --enable-drafts to enable.
|
28
|
-
#define ZFRAME_MORE 1 //
|
29
|
-
#define ZFRAME_REUSE 2 //
|
30
|
-
#define ZFRAME_DONTWAIT 4 //
|
28
|
+
#define ZFRAME_MORE 1 //
|
29
|
+
#define ZFRAME_REUSE 2 //
|
30
|
+
#define ZFRAME_DONTWAIT 4 //
|
31
31
|
|
32
32
|
// Create a new frame. If size is not null, allocates the frame data
|
33
|
-
// to the specified size. If additionally, data is not null, copies
|
34
|
-
// size octets from the specified data into the frame body.
|
33
|
+
// to the specified size. If additionally, data is not null, copies
|
34
|
+
// size octets from the specified data into the frame body.
|
35
35
|
CZMQ_EXPORT zframe_t *
|
36
36
|
zframe_new (const void *data, size_t size);
|
37
37
|
|
@@ -43,9 +43,9 @@ CZMQ_EXPORT zframe_t *
|
|
43
43
|
CZMQ_EXPORT zframe_t *
|
44
44
|
zframe_from (const char *string);
|
45
45
|
|
46
|
-
// Receive frame from socket, returns zframe_t object or NULL if the recv
|
46
|
+
// Receive frame from socket, returns zframe_t object or NULL if the recv
|
47
47
|
// was interrupted. Does a blocking recv, if you want to not block then use
|
48
|
-
// zpoller or zloop.
|
48
|
+
// zpoller or zloop.
|
49
49
|
CZMQ_EXPORT zframe_t *
|
50
50
|
zframe_recv (void *source);
|
51
51
|
|
@@ -54,7 +54,7 @@ CZMQ_EXPORT void
|
|
54
54
|
zframe_destroy (zframe_t **self_p);
|
55
55
|
|
56
56
|
// Send a frame to a socket, destroy frame after sending.
|
57
|
-
// Return -1 on error, 0 on success.
|
57
|
+
// Return -1 on error, 0 on success.
|
58
58
|
CZMQ_EXPORT int
|
59
59
|
zframe_send (zframe_t **self_p, void *dest, int flags);
|
60
60
|
|
@@ -66,25 +66,26 @@ CZMQ_EXPORT size_t
|
|
66
66
|
CZMQ_EXPORT byte *
|
67
67
|
zframe_data (zframe_t *self);
|
68
68
|
|
69
|
-
// Return meta data property for frame
|
70
|
-
//
|
69
|
+
// Return meta data property for frame
|
70
|
+
// The caller shall not modify or free the returned value, which shall be
|
71
|
+
// owned by the message.
|
71
72
|
CZMQ_EXPORT const char *
|
72
73
|
zframe_meta (zframe_t *self, const char *property);
|
73
74
|
|
74
75
|
// Create a new frame that duplicates an existing frame. If frame is null,
|
75
|
-
// or memory was exhausted, returns null.
|
76
|
+
// or memory was exhausted, returns null.
|
76
77
|
// Caller owns return value and must destroy it when done.
|
77
78
|
CZMQ_EXPORT zframe_t *
|
78
79
|
zframe_dup (zframe_t *self);
|
79
80
|
|
80
81
|
// Return frame data encoded as printable hex string, useful for 0MQ UUIDs.
|
81
|
-
// Caller must free string when finished with it.
|
82
|
+
// Caller must free string when finished with it.
|
82
83
|
// Caller owns return value and must destroy it when done.
|
83
84
|
CZMQ_EXPORT char *
|
84
85
|
zframe_strhex (zframe_t *self);
|
85
86
|
|
86
87
|
// Return frame data copied into freshly allocated string
|
87
|
-
// Caller must free string when finished with it.
|
88
|
+
// Caller must free string when finished with it.
|
88
89
|
// Caller owns return value and must destroy it when done.
|
89
90
|
CZMQ_EXPORT char *
|
90
91
|
zframe_strdup (zframe_t *self);
|
@@ -94,17 +95,17 @@ CZMQ_EXPORT bool
|
|
94
95
|
zframe_streq (zframe_t *self, const char *string);
|
95
96
|
|
96
97
|
// Return frame MORE indicator (1 or 0), set when reading frame from socket
|
97
|
-
// or by the zframe_set_more() method
|
98
|
+
// or by the zframe_set_more() method
|
98
99
|
CZMQ_EXPORT int
|
99
100
|
zframe_more (zframe_t *self);
|
100
101
|
|
101
102
|
// Set frame MORE indicator (1 or 0). Note this is NOT used when sending
|
102
|
-
// frame to socket, you have to specify flag explicitly.
|
103
|
+
// frame to socket, you have to specify flag explicitly.
|
103
104
|
CZMQ_EXPORT void
|
104
105
|
zframe_set_more (zframe_t *self, int more);
|
105
106
|
|
106
107
|
// Return TRUE if two frames have identical size and data
|
107
|
-
// If either frame is NULL, equality is always false.
|
108
|
+
// If either frame is NULL, equality is always false.
|
108
109
|
CZMQ_EXPORT bool
|
109
110
|
zframe_eq (zframe_t *self, zframe_t *other);
|
110
111
|
|
@@ -112,7 +113,7 @@ CZMQ_EXPORT bool
|
|
112
113
|
CZMQ_EXPORT void
|
113
114
|
zframe_reset (zframe_t *self, const void *data, size_t size);
|
114
115
|
|
115
|
-
// Send message to zsys log sink (may be stdout, or system facility as
|
116
|
+
// Send message to zsys log sink (may be stdout, or system facility as
|
116
117
|
// configured by zsys_set_logstream). Prefix shows before frame, if not null.
|
117
118
|
CZMQ_EXPORT void
|
118
119
|
zframe_print (zframe_t *self, const char *prefix);
|
@@ -128,13 +129,13 @@ CZMQ_EXPORT void
|
|
128
129
|
#ifdef CZMQ_BUILD_DRAFT_API
|
129
130
|
// *** Draft method, for development use, may change without warning ***
|
130
131
|
// Return frame routing ID, if the frame came from a ZMQ_SERVER socket.
|
131
|
-
// Else returns zero.
|
132
|
+
// Else returns zero.
|
132
133
|
CZMQ_EXPORT uint32_t
|
133
134
|
zframe_routing_id (zframe_t *self);
|
134
135
|
|
135
136
|
// *** Draft method, for development use, may change without warning ***
|
136
137
|
// Set routing ID on frame. This is used if/when the frame is sent to a
|
137
|
-
// ZMQ_SERVER socket.
|
138
|
+
// ZMQ_SERVER socket.
|
138
139
|
CZMQ_EXPORT void
|
139
140
|
zframe_set_routing_id (zframe_t *self, uint32_t routing_id);
|
140
141
|
|
@@ -145,8 +146,8 @@ CZMQ_EXPORT const char *
|
|
145
146
|
|
146
147
|
// *** Draft method, for development use, may change without warning ***
|
147
148
|
// Set group on frame. This is used if/when the frame is sent to a
|
148
|
-
// ZMQ_RADIO socket.
|
149
|
-
// Return -1 on error, 0 on success.
|
149
|
+
// ZMQ_RADIO socket.
|
150
|
+
// Return -1 on error, 0 on success.
|
150
151
|
CZMQ_EXPORT int
|
151
152
|
zframe_set_group (zframe_t *self, const char *group);
|
152
153
|
|
@@ -10,13 +10,13 @@
|
|
10
10
|
* The XML model used for this code generation: zgossip.xml, or
|
11
11
|
* The code generation script that built this file: zproto_server_c
|
12
12
|
************************************************************************
|
13
|
-
Copyright (c) the Contributors as noted in the AUTHORS file.
|
14
|
-
This file is part of CZMQ, the high-level C binding for 0MQ:
|
15
|
-
http://czmq.zeromq.org.
|
16
|
-
|
13
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
14
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
15
|
+
http://czmq.zeromq.org.
|
16
|
+
|
17
17
|
This Source Code Form is subject to the terms of the Mozilla Public
|
18
18
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
19
|
-
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
19
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
20
20
|
=========================================================================
|
21
21
|
*/
|
22
22
|
|
@@ -10,16 +10,22 @@
|
|
10
10
|
* The XML model used for this code generation: zgossip.xml, or
|
11
11
|
* The code generation script that built this file: zproto_server_c
|
12
12
|
************************************************************************
|
13
|
-
Copyright (c) the Contributors as noted in the AUTHORS file.
|
14
|
-
This file is part of CZMQ, the high-level C binding for 0MQ:
|
15
|
-
http://czmq.zeromq.org.
|
16
|
-
|
13
|
+
Copyright (c) the Contributors as noted in the AUTHORS file.
|
14
|
+
This file is part of CZMQ, the high-level C binding for 0MQ:
|
15
|
+
http://czmq.zeromq.org.
|
16
|
+
|
17
17
|
This Source Code Form is subject to the terms of the Mozilla Public
|
18
18
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
19
|
-
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
19
|
+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
20
20
|
=========================================================================
|
21
21
|
*/
|
22
22
|
|
23
|
+
#ifdef NDEBUG
|
24
|
+
#undef NDEBUG
|
25
|
+
#endif
|
26
|
+
|
27
|
+
#define ZPROTO_UNUSED(object) (void)object
|
28
|
+
|
23
29
|
// ---------------------------------------------------------------------------
|
24
30
|
// State machine constants
|
25
31
|
|
@@ -113,10 +119,14 @@ static void
|
|
113
119
|
server_terminate (server_t *self);
|
114
120
|
static zmsg_t *
|
115
121
|
server_method (server_t *self, const char *method, zmsg_t *msg);
|
122
|
+
static void
|
123
|
+
server_configuration (server_t *self, zconfig_t *config);
|
116
124
|
static int
|
117
125
|
client_initialize (client_t *self);
|
118
126
|
static void
|
119
127
|
client_terminate (client_t *self);
|
128
|
+
static void
|
129
|
+
s_server_config_global (s_server_t *server);
|
120
130
|
static void
|
121
131
|
s_client_execute (s_client_t *client, event_t event);
|
122
132
|
static int
|
@@ -237,15 +247,29 @@ engine_handle_socket (server_t *server, void *sock, zloop_reader_fn handler)
|
|
237
247
|
}
|
238
248
|
|
239
249
|
// Register monitor function that will be called at regular intervals
|
240
|
-
// by the server engine
|
250
|
+
// by the server engine. Returns an identifier that can be used to cancel it.
|
241
251
|
|
242
|
-
static
|
252
|
+
static int
|
243
253
|
engine_set_monitor (server_t *server, size_t interval, zloop_timer_fn monitor)
|
244
254
|
{
|
245
255
|
if (server) {
|
246
256
|
s_server_t *self = (s_server_t *) server;
|
247
257
|
int rc = zloop_timer (self->loop, interval, 0, monitor, self);
|
248
258
|
assert (rc >= 0);
|
259
|
+
return rc;
|
260
|
+
}
|
261
|
+
|
262
|
+
return -1;
|
263
|
+
}
|
264
|
+
|
265
|
+
// Cancel the monitor function with the given identifier.
|
266
|
+
static void
|
267
|
+
engine_cancel_monitor (server_t *server, int identifier)
|
268
|
+
{
|
269
|
+
if (server) {
|
270
|
+
s_server_t *self = (s_server_t *) server;
|
271
|
+
int rc = zloop_timer_end (self->loop, identifier);
|
272
|
+
assert (rc >= 0);
|
249
273
|
}
|
250
274
|
}
|
251
275
|
|
@@ -257,7 +281,7 @@ engine_set_log_prefix (client_t *client, const char *string)
|
|
257
281
|
{
|
258
282
|
if (client) {
|
259
283
|
s_client_t *self = (s_client_t *) client;
|
260
|
-
snprintf (self->log_prefix, sizeof (self->log_prefix)
|
284
|
+
snprintf (self->log_prefix, sizeof (self->log_prefix),
|
261
285
|
"%6d:%-33s", self->unique_id, string);
|
262
286
|
}
|
263
287
|
}
|
@@ -272,6 +296,7 @@ engine_configure (server_t *server, const char *path, const char *value)
|
|
272
296
|
if (server) {
|
273
297
|
s_server_t *self = (s_server_t *) server;
|
274
298
|
zconfig_put (self->config, path, value);
|
299
|
+
s_server_config_global (self);
|
275
300
|
}
|
276
301
|
}
|
277
302
|
|
@@ -300,6 +325,7 @@ s_satisfy_pedantic_compilers (void)
|
|
300
325
|
engine_broadcast_event (NULL, NULL, NULL_event);
|
301
326
|
engine_handle_socket (NULL, 0, NULL);
|
302
327
|
engine_set_monitor (NULL, 0, NULL);
|
328
|
+
engine_cancel_monitor (NULL, 0);
|
303
329
|
engine_set_log_prefix (NULL, NULL);
|
304
330
|
engine_configure (NULL, NULL, NULL);
|
305
331
|
engine_verbose (NULL);
|
@@ -641,6 +667,8 @@ s_client_handle_ticket (zloop_t *loop, int timer_id, void *argument)
|
|
641
667
|
static int
|
642
668
|
s_client_handle_wakeup (zloop_t *loop, int timer_id, void *argument)
|
643
669
|
{
|
670
|
+
ZPROTO_UNUSED(loop);
|
671
|
+
ZPROTO_UNUSED(timer_id);
|
644
672
|
s_client_t *self = (s_client_t *) argument;
|
645
673
|
s_client_execute (self, self->wakeup_event);
|
646
674
|
return 0;
|
@@ -656,17 +684,17 @@ s_server_config_global (s_server_t *self)
|
|
656
684
|
//
|
657
685
|
// If we didn't already set verbose, check if the config tree wants it
|
658
686
|
if (!self->verbose
|
659
|
-
&& atoi (
|
687
|
+
&& atoi (zconfig_get (self->config, "server/verbose", "0")))
|
660
688
|
self->verbose = true;
|
661
689
|
|
662
690
|
// Default client timeout is 60 seconds
|
663
691
|
self->timeout = atoi (
|
664
|
-
|
692
|
+
zconfig_get (self->config, "server/timeout", "60000"));
|
665
693
|
zloop_set_ticket_delay (self->loop, self->timeout);
|
666
694
|
|
667
695
|
// Do we want to run server in the background?
|
668
696
|
int background = atoi (
|
669
|
-
|
697
|
+
zconfig_get (self->config, "server/background", "0"));
|
670
698
|
if (!background)
|
671
699
|
zsys_set_logstream (stdout);
|
672
700
|
}
|
@@ -740,15 +768,15 @@ s_server_config_service (s_server_t *self)
|
|
740
768
|
zsys_notice ("%s", zconfig_value (section));
|
741
769
|
else
|
742
770
|
if (streq (zconfig_name (section), "bind")) {
|
743
|
-
char *endpoint =
|
771
|
+
char *endpoint = zconfig_get (section, "endpoint", "?");
|
744
772
|
if (zsock_bind (self->router, "%s", endpoint) == -1)
|
745
773
|
zsys_warning ("could not bind to %s (%s)", endpoint, zmq_strerror (zmq_errno ()));
|
746
774
|
}
|
747
775
|
#if (ZMQ_VERSION_MAJOR >= 4)
|
748
776
|
else
|
749
777
|
if (streq (zconfig_name (section), "security")) {
|
750
|
-
char *mechanism =
|
751
|
-
char *domain =
|
778
|
+
char *mechanism = zconfig_get (section, "mechanism", "null");
|
779
|
+
char *domain = zconfig_get (section, "domain", NULL);
|
752
780
|
if (streq (mechanism, "null")) {
|
753
781
|
zsys_notice ("server is using NULL security");
|
754
782
|
if (domain)
|
@@ -759,6 +787,22 @@ s_server_config_service (s_server_t *self)
|
|
759
787
|
zsys_notice ("server is using PLAIN security");
|
760
788
|
zsock_set_plain_server (self->router, 1);
|
761
789
|
}
|
790
|
+
#ifdef CZMQ_BUILD_DRAFT_API
|
791
|
+
// TODO- zproto
|
792
|
+
// https://github.com/zeromq/zproto/blob/master/src/zproto_server_c.gsl#L883
|
793
|
+
else
|
794
|
+
if (streq (mechanism, "curve")) {
|
795
|
+
zsys_notice ("using CURVE security");
|
796
|
+
const char *keyfile = zconfig_get (section, "secret-key", NULL);
|
797
|
+
assert (keyfile);
|
798
|
+
|
799
|
+
zcert_t *server_cert = zcert_load(keyfile);
|
800
|
+
assert (server_cert);
|
801
|
+
|
802
|
+
zcert_apply (server_cert, self->router);
|
803
|
+
zsock_set_curve_server (self->router, 1);
|
804
|
+
}
|
805
|
+
#endif
|
762
806
|
else
|
763
807
|
zsys_warning ("mechanism=%s is not supported", mechanism);
|
764
808
|
}
|
@@ -773,6 +817,9 @@ s_server_config_service (s_server_t *self)
|
|
773
817
|
static int
|
774
818
|
s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
775
819
|
{
|
820
|
+
ZPROTO_UNUSED(loop);
|
821
|
+
ZPROTO_UNUSED(reader);
|
822
|
+
|
776
823
|
s_server_t *self = (s_server_t *) argument;
|
777
824
|
zmsg_t *msg = zmsg_recv (self->pipe);
|
778
825
|
if (!msg)
|
@@ -786,7 +833,7 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
786
833
|
else
|
787
834
|
if (streq (method, "$TERM")) {
|
788
835
|
// Shutdown the engine
|
789
|
-
|
836
|
+
zstr_free (&method);
|
790
837
|
zmsg_destroy (&msg);
|
791
838
|
return -1;
|
792
839
|
}
|
@@ -794,10 +841,30 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
794
841
|
if (streq (method, "BIND")) {
|
795
842
|
// Bind to a specified endpoint, which may use an ephemeral port
|
796
843
|
char *endpoint = zmsg_popstr (msg);
|
844
|
+
|
845
|
+
#ifdef CZMQ_BUILD_DRAFT_API
|
846
|
+
// TODO- expose self->router to application context ?
|
847
|
+
// Add secret|public|zap to gsl(?)
|
848
|
+
// move this block to custom server function when both keys are present
|
849
|
+
if (self->server.secret_key) {
|
850
|
+
zsock_set_zap_domain (self->router, self->server.zap_domain);
|
851
|
+
zcert_t *cert = zcert_new_from_txt(self->server.public_key, self->server.secret_key);
|
852
|
+
zcert_apply(cert, self->router);
|
853
|
+
zsock_set_curve_server (self->router, 1);
|
854
|
+
zcert_destroy(&cert);
|
855
|
+
}
|
856
|
+
// TODO- add this test in zproto_server_c.gsl
|
857
|
+
#ifndef ZMQ_CURVE
|
858
|
+
// zmq legacy
|
859
|
+
bool ZMQ_CURVE = false;
|
860
|
+
#endif
|
861
|
+
if (self->server.secret_key)
|
862
|
+
assert (zsock_mechanism (self->router) == ZMQ_CURVE);
|
863
|
+
#endif
|
797
864
|
self->port = zsock_bind (self->router, "%s", endpoint);
|
798
865
|
if (self->port == -1)
|
799
866
|
zsys_warning ("could not bind to %s", endpoint);
|
800
|
-
|
867
|
+
zstr_free (&endpoint);
|
801
868
|
}
|
802
869
|
else
|
803
870
|
if (streq (method, "PORT")) {
|
@@ -813,12 +880,13 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
813
880
|
if (self->config) {
|
814
881
|
s_server_config_service (self);
|
815
882
|
self->server.config = self->config;
|
883
|
+
server_configuration (&self->server, self->config);
|
816
884
|
}
|
817
885
|
else {
|
818
886
|
zsys_warning ("cannot load config file '%s'", filename);
|
819
887
|
self->config = zconfig_new ("root", NULL);
|
820
888
|
}
|
821
|
-
|
889
|
+
zstr_free (&filename);
|
822
890
|
}
|
823
891
|
else
|
824
892
|
if (streq (method, "SET")) {
|
@@ -830,15 +898,15 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
830
898
|
self->verbose = (atoi (value) == 1);
|
831
899
|
}
|
832
900
|
s_server_config_global (self);
|
833
|
-
|
834
|
-
|
901
|
+
zstr_free (&value);
|
902
|
+
zstr_free (&path);
|
835
903
|
}
|
836
904
|
else
|
837
905
|
if (streq (method, "SAVE")) {
|
838
906
|
char *filename = zmsg_popstr (msg);
|
839
907
|
if (zconfig_save (self->config, filename))
|
840
908
|
zsys_warning ("cannot save config file '%s'", filename);
|
841
|
-
|
909
|
+
zstr_free (&filename);
|
842
910
|
}
|
843
911
|
else {
|
844
912
|
// Execute custom method
|
@@ -846,7 +914,7 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
846
914
|
// If reply isn't null, send it to caller
|
847
915
|
zmsg_send (&reply, self->pipe);
|
848
916
|
}
|
849
|
-
|
917
|
+
zstr_free (&method);
|
850
918
|
zmsg_destroy (&msg);
|
851
919
|
return 0;
|
852
920
|
}
|
@@ -856,13 +924,18 @@ s_server_handle_pipe (zloop_t *loop, zsock_t *reader, void *argument)
|
|
856
924
|
static int
|
857
925
|
s_server_handle_protocol (zloop_t *loop, zsock_t *reader, void *argument)
|
858
926
|
{
|
927
|
+
ZPROTO_UNUSED(loop);
|
928
|
+
ZPROTO_UNUSED(reader);
|
929
|
+
|
859
930
|
s_server_t *self = (s_server_t *) argument;
|
860
931
|
// We process as many messages as we can, to reduce the overhead
|
861
932
|
// of polling and the reactor:
|
862
933
|
while (zsock_events (self->router) & ZMQ_POLLIN) {
|
863
|
-
|
934
|
+
int rc = zgossip_msg_recv (self->message, self->router);
|
935
|
+
if (rc == -1)
|
864
936
|
return -1; // Interrupted; exit zloop
|
865
937
|
|
938
|
+
|
866
939
|
// TODO: use binary hashing on routing_id
|
867
940
|
char *hashkey = zframe_strhex (zgossip_msg_routing_id (self->message));
|
868
941
|
s_client_t *client = (s_client_t *) zhash_lookup (self->clients, hashkey);
|
@@ -876,6 +949,10 @@ s_server_handle_protocol (zloop_t *loop, zsock_t *reader, void *argument)
|
|
876
949
|
if (client->ticket)
|
877
950
|
zloop_ticket_reset (self->loop, client->ticket);
|
878
951
|
|
952
|
+
if (rc == -2) {
|
953
|
+
continue; // Malformed, but malformed_event doesn't exist
|
954
|
+
// -> discard the message
|
955
|
+
}
|
879
956
|
// Pass to client state machine
|
880
957
|
s_client_execute (client, s_protocol_event (self->message));
|
881
958
|
}
|
@@ -887,11 +964,15 @@ s_server_handle_protocol (zloop_t *loop, zsock_t *reader, void *argument)
|
|
887
964
|
static int
|
888
965
|
s_watch_server_config (zloop_t *loop, int timer_id, void *argument)
|
889
966
|
{
|
967
|
+
ZPROTO_UNUSED(loop);
|
968
|
+
ZPROTO_UNUSED(timer_id);
|
969
|
+
|
890
970
|
s_server_t *self = (s_server_t *) argument;
|
891
971
|
if (zconfig_has_changed (self->config)
|
892
972
|
&& zconfig_reload (&self->config) == 0) {
|
893
973
|
s_server_config_service (self);
|
894
974
|
self->server.config = self->config;
|
975
|
+
server_configuration (&self->server, self->config);
|
895
976
|
zsys_notice ("reloaded configuration from %s",
|
896
977
|
zconfig_filename (self->config));
|
897
978
|
}
|