iodine 0.7.47 → 0.7.48
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/iodine/websockets.c +18 -7
- data/lib/iodine/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1718fc25cba1ab9a96c643a16e34413067b30b6706659ca77becf907a92bafe6
|
4
|
+
data.tar.gz: 1b3fc0945e54e6eedf7e1fa27956cecfe46e80c8a43078f305343a9eb3497f50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 70945896acf5a4497254bd631bcc427bde4051813c65d44d43567c0283a40c61a1ecefa547985ee481981a21e4bcf4d3380076fbc5816eed2fdc06a487553e64
|
7
|
+
data.tar.gz: bfba77e38f598db62a893ad356ad40485a9dfc768355357bc8242227991ecf8c24354f2f30e52d3afcf1d8f1c62b0fec15c7a2baec309c5b29d6b042918ff259
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,10 @@ Please notice that this change log contains changes for upcoming releases as wel
|
|
6
6
|
|
7
7
|
## Changes:
|
8
8
|
|
9
|
+
#### Change log v.0.7.48 (2022-06-28)
|
10
|
+
|
11
|
+
**Fix**: Fixes an issue with `pong` WebSocket frames when a client sends a WebSocket `ping`. Credit to Lucas Kuan (@lucaskuan) for finding this issue and for PR #124.
|
12
|
+
|
9
13
|
#### Change log v.0.7.47 (2022-05-11)
|
10
14
|
|
11
15
|
**Fix**: Fixes an issue that causes `Rack::Lint` to complain about `SERVER_PORT` being an empty string. Credit to @adam12 (Adam Daniels) for PR #108 and issue #107.
|
data/ext/iodine/websockets.c
CHANGED
@@ -28,7 +28,8 @@ Feel free to copy, use and enjoy according to the license provided.
|
|
28
28
|
|
29
29
|
#include <websocket_parser.h>
|
30
30
|
|
31
|
-
#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) &&
|
31
|
+
#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) && \
|
32
|
+
!defined(__MINGW32__)
|
32
33
|
#include <endian.h>
|
33
34
|
#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) && \
|
34
35
|
__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
@@ -183,15 +184,19 @@ static void websocket_on_protocol_ping(void *ws_p, void *msg_, uint64_t len) {
|
|
183
184
|
fio_write2(ws->fd, .data.buffer = buff, .length = len);
|
184
185
|
} else {
|
185
186
|
if (((ws_s *)ws)->is_client) {
|
186
|
-
fio_write2(ws->fd, .data.buffer = "\
|
187
|
+
fio_write2(ws->fd, .data.buffer = "\x8a\x80mask", .length = 6,
|
187
188
|
.after.dealloc = FIO_DEALLOC_NOOP);
|
188
189
|
} else {
|
189
|
-
fio_write2(ws->fd, .data.buffer = "\
|
190
|
+
fio_write2(ws->fd, .data.buffer = "\x8a\x00", .length = 2,
|
190
191
|
.after.dealloc = FIO_DEALLOC_NOOP);
|
191
192
|
}
|
192
193
|
}
|
194
|
+
FIO_LOG_DEBUG("Received ping and sent pong for Websocket %p (%d)", ws_p,
|
195
|
+
(int)(((ws_s *)ws_p)->fd));
|
193
196
|
}
|
194
197
|
static void websocket_on_protocol_pong(void *ws_p, void *msg, uint64_t len) {
|
198
|
+
FIO_LOG_DEBUG("Received pong for Websocket %p (%d)", ws_p,
|
199
|
+
(int)(((ws_s *)ws_p)->fd));
|
195
200
|
(void)len;
|
196
201
|
(void)msg;
|
197
202
|
(void)ws_p;
|
@@ -220,6 +225,7 @@ static void ws_ping(intptr_t fd, fio_protocol_s *ws) {
|
|
220
225
|
fio_write2(fd, .data.buffer = "\x89\x00", .length = 2,
|
221
226
|
.after.dealloc = FIO_DEALLOC_NOOP);
|
222
227
|
}
|
228
|
+
FIO_LOG_DEBUG("Sent ping for Websocket %p (%d)", (void *)ws, (int)fd);
|
223
229
|
}
|
224
230
|
|
225
231
|
static void on_close(intptr_t uuid, fio_protocol_s *_ws) {
|
@@ -238,10 +244,10 @@ static uint8_t on_shutdown(intptr_t fd, fio_protocol_s *ws) {
|
|
238
244
|
if (ws && ((ws_s *)ws)->on_shutdown)
|
239
245
|
((ws_s *)ws)->on_shutdown((ws_s *)ws);
|
240
246
|
if (((ws_s *)ws)->is_client) {
|
241
|
-
fio_write2(fd, .data.buffer = "\
|
247
|
+
fio_write2(fd, .data.buffer = "\x88\x80MASK", .length = 6,
|
242
248
|
.after.dealloc = FIO_DEALLOC_NOOP);
|
243
249
|
} else {
|
244
|
-
fio_write2(fd, .data.buffer = "\
|
250
|
+
fio_write2(fd, .data.buffer = "\x88\x00", .length = 2,
|
245
251
|
.after.dealloc = FIO_DEALLOC_NOOP);
|
246
252
|
}
|
247
253
|
return 0;
|
@@ -728,8 +734,13 @@ int websocket_write(ws_s *ws, fio_str_info_s msg, uint8_t is_text) {
|
|
728
734
|
}
|
729
735
|
/** Closes a websocket connection. */
|
730
736
|
void websocket_close(ws_s *ws) {
|
731
|
-
|
732
|
-
|
737
|
+
if (ws->is_client) {
|
738
|
+
fio_write2(ws->fd, .data.buffer = "\x88\x80MASK", .length = 6,
|
739
|
+
.after.dealloc = FIO_DEALLOC_NOOP);
|
740
|
+
} else {
|
741
|
+
fio_write2(ws->fd, .data.buffer = "\x88\x00", .length = 2,
|
742
|
+
.after.dealloc = FIO_DEALLOC_NOOP);
|
743
|
+
}
|
733
744
|
fio_close(ws->fd);
|
734
745
|
return;
|
735
746
|
}
|
data/lib/iodine/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iodine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.48
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boaz Segev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -245,7 +245,7 @@ licenses:
|
|
245
245
|
metadata:
|
246
246
|
allowed_push_host: https://rubygems.org
|
247
247
|
post_install_message: |-
|
248
|
-
Thank you for installing Iodine 0.7.
|
248
|
+
Thank you for installing Iodine 0.7.48.
|
249
249
|
Remember: if iodine supports your business, it's only fair to give value back (code contributions / donations).
|
250
250
|
rdoc_options: []
|
251
251
|
require_paths:
|