iodine 0.8.2 → 0.8.3
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/CHANGELOG.md +12 -0
- data/ext/iodine/fio-stl.h +6101 -3276
- data/ext/iodine/fio-stl.md +5155 -3213
- data/ext/iodine/iodine.c +1 -0
- data/ext/iodine/iodine.h +9 -4
- data/ext/iodine/iodine_connection.h +20 -1
- data/ext/iodine/iodine_json.h +469 -160
- data/ext/iodine/iodine_params.h +1362 -0
- data/lib/iodine/documentation.rb +121 -0
- data/lib/iodine/version.rb +2 -1
- metadata +3 -2
data/ext/iodine/iodine.c
CHANGED
|
@@ -240,6 +240,7 @@ void Init_iodine(void) {
|
|
|
240
240
|
Init_Iodine_PubSub_Message();
|
|
241
241
|
Init_Iodine_TLS();
|
|
242
242
|
Init_Iodine_Connection();
|
|
243
|
+
Init_Iodine_Params();
|
|
243
244
|
/* make sure the Iodine.run / async methods are available pre-start */
|
|
244
245
|
fio_io_async_attach(&IODINE_THREAD_POOL, (uint32_t)fio_cli_get_i("-t"));
|
|
245
246
|
#ifdef SIGUSR1
|
data/ext/iodine/iodine.h
CHANGED
|
@@ -99,7 +99,7 @@ static ID IODINE_JOIN_ID;
|
|
|
99
99
|
static ID IODINE_TO_PATH_ID;
|
|
100
100
|
static ID IODINE_TO_S_ID;
|
|
101
101
|
static ID IODINE_TO_JSON_ID;
|
|
102
|
-
static ID IODINE_RACK_HIJACK_ID;
|
|
102
|
+
static ID IODINE_RACK_HIJACK_ID; /* rack_hijack */
|
|
103
103
|
static ID IODINE_ON_AUTHENTICATE_ID;
|
|
104
104
|
static ID IODINE_ON_AUTHENTICATE_SSE_ID;
|
|
105
105
|
static ID IODINE_ON_AUTHENTICATE_WEBSOCKET_ID;
|
|
@@ -135,6 +135,10 @@ static ID IODINE_DELETE_ID;
|
|
|
135
135
|
name = rb_intern(value); \
|
|
136
136
|
STORE.hold(RB_ID2SYM(name));
|
|
137
137
|
|
|
138
|
+
#define IODINE_CONST_IDSYM_STORE(name, value) \
|
|
139
|
+
name##_ID = rb_intern(value); \
|
|
140
|
+
STORE.hold((name##_SYM = RB_ID2SYM(name##_ID)));
|
|
141
|
+
|
|
138
142
|
static VALUE iodine_rb_IODINE;
|
|
139
143
|
static VALUE iodine_rb_IODINE_BASE;
|
|
140
144
|
static VALUE iodine_rb_IODINE_BASE_APP404;
|
|
@@ -150,9 +154,9 @@ static rb_encoding *IodineBinaryEncoding;
|
|
|
150
154
|
static VALUE IODINE_CONNECTION_ENV_TEMPLATE = Qnil;
|
|
151
155
|
static VALUE IODINE_CONNECTION_ENV_TEMPLATE_HTTPS = Qnil;
|
|
152
156
|
static VALUE IODINE_RACK_PROTOCOL_STR;
|
|
153
|
-
static VALUE IODINE_RACK_HIJACK_ID_SYM;
|
|
154
|
-
static VALUE IODINE_RACK_HIJACK_STR;
|
|
155
|
-
static VALUE IODINE_RACK_HIJACK_SYM;
|
|
157
|
+
static VALUE IODINE_RACK_HIJACK_ID_SYM; /* rack_hijack */
|
|
158
|
+
static VALUE IODINE_RACK_HIJACK_STR; /* rack.hijack */
|
|
159
|
+
static VALUE IODINE_RACK_HIJACK_SYM; /* rack.hijack */
|
|
156
160
|
static VALUE IODINE_RACK_UPGRADE_STR;
|
|
157
161
|
static VALUE IODINE_RACK_UPGRADE_Q_STR;
|
|
158
162
|
static VALUE IODINE_RACK_UPGRADE_WS_SYM;
|
|
@@ -252,6 +256,7 @@ static VALUE iodine_handler_method_injection__inner(VALUE self,
|
|
|
252
256
|
#include "iodine_tls.h"
|
|
253
257
|
/* layer 3 modules */
|
|
254
258
|
#include "iodine_connection.h"
|
|
259
|
+
#include "iodine_params.h"
|
|
255
260
|
|
|
256
261
|
/* layer 4 modules */
|
|
257
262
|
#include "iodine_core.h"
|
|
@@ -149,7 +149,11 @@ typedef enum {
|
|
|
149
149
|
IODINE_CONNECTION_STORE_opath, /**< Cached original path string */
|
|
150
150
|
IODINE_CONNECTION_STORE_query, /**< Cached query string */
|
|
151
151
|
IODINE_CONNECTION_STORE_version, /**< Cached HTTP version string */
|
|
152
|
-
IODINE_CONNECTION_STORE_tmp, /**<
|
|
152
|
+
IODINE_CONNECTION_STORE_tmp, /**< Active upload / temporary GC root */
|
|
153
|
+
IODINE_CONNECTION_STORE_params, /**< Memoized params Hash (iodine_params.h) */
|
|
154
|
+
IODINE_CONNECTION_STORE_params_stage, /**< Body parse staging Hash */
|
|
155
|
+
IODINE_CONNECTION_STORE_params_input, /**< Guarded JSON input copy */
|
|
156
|
+
IODINE_CONNECTION_STORE_params_exception, /**< Pending parser exception */
|
|
153
157
|
IODINE_CONNECTION_STORE_FINISH, /**< Sentinel value (array size) */
|
|
154
158
|
} iodine_connection_store_e;
|
|
155
159
|
|
|
@@ -164,6 +168,9 @@ typedef enum {
|
|
|
164
168
|
IODINE_CONNECTION_UPGRADE = (2 | 4), /**< Any upgrade (SSE or WS) */
|
|
165
169
|
IODINE_CONNECTION_CLOSED = 8, /**< Connection close scheduled */
|
|
166
170
|
IODINE_CONNECTION_CLIENT = 16, /**< This is a client connection */
|
|
171
|
+
IODINE_CONNECTION_PARAMS_QUERY = 32, /**< Query merged into params Hash */
|
|
172
|
+
IODINE_CONNECTION_PARAMS_BODY = 64, /**< Body merged into params Hash */
|
|
173
|
+
IODINE_CONNECTION_PARAMS_HAS_UPLOAD = 128, /**< Upload cleanup may be needed */
|
|
167
174
|
} iodine_connection_flags_e;
|
|
168
175
|
|
|
169
176
|
/**
|
|
@@ -181,9 +188,14 @@ typedef struct iodine_connection_s {
|
|
|
181
188
|
fio_http_s *http; /**< facil.io HTTP handle */
|
|
182
189
|
VALUE store[IODINE_CONNECTION_STORE_FINISH]; /**< Cached Ruby objects */
|
|
183
190
|
iodine_minimap_s map; /**< Header storage map */
|
|
191
|
+
struct iodine_upload_s *open_uploads; /**< Params cleanup list */
|
|
184
192
|
iodine_connection_flags_e flags; /**< Connection state flags */
|
|
193
|
+
size_t params_spent; /**< Params field budget spent (iodine_params.h) */
|
|
185
194
|
} iodine_connection_s;
|
|
186
195
|
|
|
196
|
+
/* Implemented in iodine_params.h (included after this header). */
|
|
197
|
+
static void iodine_params_on_connection_free(iodine_connection_s *c);
|
|
198
|
+
|
|
187
199
|
static size_t iodine_connection_data_size(const void *ptr_) {
|
|
188
200
|
iodine_connection_s *c = (iodine_connection_s *)ptr_;
|
|
189
201
|
return sizeof(*c) +
|
|
@@ -192,6 +204,7 @@ static size_t iodine_connection_data_size(const void *ptr_) {
|
|
|
192
204
|
|
|
193
205
|
static void iodine_connection_free(void *ptr_) {
|
|
194
206
|
iodine_connection_s *c = (iodine_connection_s *)ptr_;
|
|
207
|
+
iodine_params_on_connection_free(c);
|
|
195
208
|
fio_http_free(c->http);
|
|
196
209
|
iodine_hmap_destroy(&c->map.map);
|
|
197
210
|
FIO_LEAK_COUNTER_ON_FREE(iodine_connection);
|
|
@@ -252,6 +265,9 @@ static iodine_connection_s *iodine_connection_ptr(VALUE self) {
|
|
|
252
265
|
return c;
|
|
253
266
|
}
|
|
254
267
|
|
|
268
|
+
/* Defined in iodine_params.h (included after this header). */
|
|
269
|
+
static void iodine_params_on_finish(iodine_connection_s *c);
|
|
270
|
+
|
|
255
271
|
/** Creates (and allocates) a new Iodine::Connection object. */
|
|
256
272
|
static VALUE iodine_connection_create_from_io(fio_io_s *io) {
|
|
257
273
|
VALUE m = rb_obj_alloc(iodine_rb_IODINE_CONNECTION);
|
|
@@ -1927,6 +1943,7 @@ static void iodine_io_http_on_http(fio_http_s *h) {
|
|
|
1927
1943
|
IODINE_ON_FINISH_ID, \
|
|
1928
1944
|
1, \
|
|
1929
1945
|
&connection); \
|
|
1946
|
+
iodine_params_on_finish(c); \
|
|
1930
1947
|
fio_http_free(c->http); \
|
|
1931
1948
|
c->http = NULL; \
|
|
1932
1949
|
c->io = NULL; \
|
|
@@ -1965,6 +1982,7 @@ IODINE_CONNECTION_DEF_CB(on_close, IODINE_ON_CLOSE_ID, 1);
|
|
|
1965
1982
|
IODINE_ON_FINISH_ID, \
|
|
1966
1983
|
1, \
|
|
1967
1984
|
&connection); \
|
|
1985
|
+
iodine_params_on_finish(c); \
|
|
1968
1986
|
fio_http_free(c->http); \
|
|
1969
1987
|
c->http = NULL; \
|
|
1970
1988
|
c->io = NULL; \
|
|
@@ -2113,6 +2131,7 @@ static void iodine_io_http_on_finish(fio_http_s *h) {
|
|
|
2113
2131
|
}
|
|
2114
2132
|
fio_http_free(h);
|
|
2115
2133
|
}
|
|
2134
|
+
iodine_params_on_finish(c);
|
|
2116
2135
|
c->http = NULL;
|
|
2117
2136
|
c->io = NULL;
|
|
2118
2137
|
STORE.release(connection);
|