iodine 0.7.55 → 0.7.56
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 +4 -0
- data/ext/iodine/http.c +2 -1
- data/ext/iodine/http1.c +3 -90
- 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: e2f42cc055212f19560dc49734f4ab9b4e0be6382172d5b9e7eed59791b88381
|
|
4
|
+
data.tar.gz: 2addb1393f4689b6dd0ab826c43a7dc9b0942e42fdc1ced57b153a910ef6e621
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 26cad762bc6d533c7a1828550a371b7db6107fae7439d02176eb02b70bd8887c8a30f7b1c68b931b2088aee728c7e098bbdbf9eec1cefcac697d31ccaf8ebe09
|
|
7
|
+
data.tar.gz: 7582b83233ce7ef198cc9a1d561b738396b5fe6d0b1701ba3984ec164735b3d8ce3fe3973481772217f7d580ec8b070d0493550859abfe0cbe03a5b8c9b6a738
|
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.56 (2023-07-07)
|
|
10
|
+
|
|
11
|
+
**Support**: Adds teapot support (HTTP code 418). Credit to Aleksandar N. Kostadinov (@akostadinov) for issue #144 and PR #145.
|
|
12
|
+
|
|
9
13
|
#### Change log v.0.7.55 (2023-05-01)
|
|
10
14
|
|
|
11
15
|
**Fix**: Fixes `X-SENDFILE` support so it works will `POST` requests. Credit to @fgoepel for PR #141.
|
data/ext/iodine/http.c
CHANGED
|
@@ -2649,7 +2649,7 @@ static char invalid_cookie_value_char[256] = {
|
|
|
2649
2649
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
|
2650
2650
|
|
|
2651
2651
|
// clang-format off
|
|
2652
|
-
#define HTTP_SET_STATUS_STR(status, str) [status-100] = { .data = (char *)(str), .len = (sizeof(str) - 1) }
|
|
2652
|
+
#define HTTP_SET_STATUS_STR(status, str) [status-100] = { .data = (char *)(#status " " str), .len = (sizeof( #status " " str) - 1) }
|
|
2653
2653
|
// clang-format on
|
|
2654
2654
|
|
|
2655
2655
|
/** Returns the status as a C string struct */
|
|
@@ -2696,6 +2696,7 @@ fio_str_info_s http_status2str(uintptr_t status) {
|
|
|
2696
2696
|
HTTP_SET_STATUS_STR(415, "Unsupported Media Type"),
|
|
2697
2697
|
HTTP_SET_STATUS_STR(416, "Range Not Satisfiable"),
|
|
2698
2698
|
HTTP_SET_STATUS_STR(417, "Expectation Failed"),
|
|
2699
|
+
HTTP_SET_STATUS_STR(418, "I'm a teapot"),
|
|
2699
2700
|
HTTP_SET_STATUS_STR(421, "Misdirected Request"),
|
|
2700
2701
|
HTTP_SET_STATUS_STR(422, "Unprocessable Entity"),
|
|
2701
2702
|
HTTP_SET_STATUS_STR(423, "Locked"),
|
data/ext/iodine/http1.c
CHANGED
|
@@ -45,8 +45,6 @@ inline static void h1_reset(http1pr_s *p) { p->header_size = 0; }
|
|
|
45
45
|
#define http1_pr2handle(pr) (((http1pr_s *)(pr))->request)
|
|
46
46
|
#define handle2pr(h) ((http1pr_s *)h->private_data.flag)
|
|
47
47
|
|
|
48
|
-
static fio_str_info_s http1pr_status2str(uintptr_t status);
|
|
49
|
-
|
|
50
48
|
/* cleanup an HTTP/1.1 handler object */
|
|
51
49
|
static inline void http1_after_finish(http_s *h) {
|
|
52
50
|
http1pr_s *p = handle2pr(h);
|
|
@@ -112,8 +110,10 @@ static FIOBJ headers2str(http_s *h, uintptr_t padding) {
|
|
|
112
110
|
http1pr_s *p = handle2pr(h);
|
|
113
111
|
|
|
114
112
|
if (p->is_client == 0) {
|
|
115
|
-
fio_str_info_s t =
|
|
113
|
+
fio_str_info_s t = http_status2str(h->status);
|
|
114
|
+
fiobj_str_write(w.dest, "HTTP/1.1 ", 9);
|
|
116
115
|
fiobj_str_write(w.dest, t.data, t.len);
|
|
116
|
+
fiobj_str_write(w.dest, "\r\n", 2);
|
|
117
117
|
FIOBJ tmp = fiobj_hash_get2(h->private_data.out_headers, connection_hash);
|
|
118
118
|
if (tmp) {
|
|
119
119
|
t = fiobj_obj2cstr(tmp);
|
|
@@ -823,90 +823,3 @@ void http1_destroy(fio_protocol_s *pr) {
|
|
|
823
823
|
// *)p->p.uuid, (int)fio_uuid2fd(p->p.uuid), (void *)p);
|
|
824
824
|
fio_free(p); // occasional Windows crash bug
|
|
825
825
|
}
|
|
826
|
-
|
|
827
|
-
/* *****************************************************************************
|
|
828
|
-
Protocol Data
|
|
829
|
-
***************************************************************************** */
|
|
830
|
-
|
|
831
|
-
// clang-format off
|
|
832
|
-
#define HTTP_SET_STATUS_STR(status, str) [((status)-100)] = { .data = (char*)("HTTP/1.1 " #status " " str "\r\n"), .len = (sizeof("HTTP/1.1 " #status " " str "\r\n") - 1) }
|
|
833
|
-
// #undef HTTP_SET_STATUS_STR
|
|
834
|
-
// clang-format on
|
|
835
|
-
|
|
836
|
-
static fio_str_info_s http1pr_status2str(uintptr_t status) {
|
|
837
|
-
static fio_str_info_s status2str[] = {
|
|
838
|
-
HTTP_SET_STATUS_STR(100, "Continue"),
|
|
839
|
-
HTTP_SET_STATUS_STR(101, "Switching Protocols"),
|
|
840
|
-
HTTP_SET_STATUS_STR(102, "Processing"),
|
|
841
|
-
HTTP_SET_STATUS_STR(103, "Early Hints"),
|
|
842
|
-
HTTP_SET_STATUS_STR(200, "OK"),
|
|
843
|
-
HTTP_SET_STATUS_STR(201, "Created"),
|
|
844
|
-
HTTP_SET_STATUS_STR(202, "Accepted"),
|
|
845
|
-
HTTP_SET_STATUS_STR(203, "Non-Authoritative Information"),
|
|
846
|
-
HTTP_SET_STATUS_STR(204, "No Content"),
|
|
847
|
-
HTTP_SET_STATUS_STR(205, "Reset Content"),
|
|
848
|
-
HTTP_SET_STATUS_STR(206, "Partial Content"),
|
|
849
|
-
HTTP_SET_STATUS_STR(207, "Multi-Status"),
|
|
850
|
-
HTTP_SET_STATUS_STR(208, "Already Reported"),
|
|
851
|
-
HTTP_SET_STATUS_STR(226, "IM Used"),
|
|
852
|
-
HTTP_SET_STATUS_STR(300, "Multiple Choices"),
|
|
853
|
-
HTTP_SET_STATUS_STR(301, "Moved Permanently"),
|
|
854
|
-
HTTP_SET_STATUS_STR(302, "Found"),
|
|
855
|
-
HTTP_SET_STATUS_STR(303, "See Other"),
|
|
856
|
-
HTTP_SET_STATUS_STR(304, "Not Modified"),
|
|
857
|
-
HTTP_SET_STATUS_STR(305, "Use Proxy"),
|
|
858
|
-
HTTP_SET_STATUS_STR(306, "(Unused), "),
|
|
859
|
-
HTTP_SET_STATUS_STR(307, "Temporary Redirect"),
|
|
860
|
-
HTTP_SET_STATUS_STR(308, "Permanent Redirect"),
|
|
861
|
-
HTTP_SET_STATUS_STR(400, "Bad Request"),
|
|
862
|
-
HTTP_SET_STATUS_STR(403, "Forbidden"),
|
|
863
|
-
HTTP_SET_STATUS_STR(404, "Not Found"),
|
|
864
|
-
HTTP_SET_STATUS_STR(401, "Unauthorized"),
|
|
865
|
-
HTTP_SET_STATUS_STR(402, "Payment Required"),
|
|
866
|
-
HTTP_SET_STATUS_STR(405, "Method Not Allowed"),
|
|
867
|
-
HTTP_SET_STATUS_STR(406, "Not Acceptable"),
|
|
868
|
-
HTTP_SET_STATUS_STR(407, "Proxy Authentication Required"),
|
|
869
|
-
HTTP_SET_STATUS_STR(408, "Request Timeout"),
|
|
870
|
-
HTTP_SET_STATUS_STR(409, "Conflict"),
|
|
871
|
-
HTTP_SET_STATUS_STR(410, "Gone"),
|
|
872
|
-
HTTP_SET_STATUS_STR(411, "Length Required"),
|
|
873
|
-
HTTP_SET_STATUS_STR(412, "Precondition Failed"),
|
|
874
|
-
HTTP_SET_STATUS_STR(413, "Payload Too Large"),
|
|
875
|
-
HTTP_SET_STATUS_STR(414, "URI Too Long"),
|
|
876
|
-
HTTP_SET_STATUS_STR(415, "Unsupported Media Type"),
|
|
877
|
-
HTTP_SET_STATUS_STR(416, "Range Not Satisfiable"),
|
|
878
|
-
HTTP_SET_STATUS_STR(417, "Expectation Failed"),
|
|
879
|
-
HTTP_SET_STATUS_STR(421, "Misdirected Request"),
|
|
880
|
-
HTTP_SET_STATUS_STR(422, "Unprocessable Entity"),
|
|
881
|
-
HTTP_SET_STATUS_STR(423, "Locked"),
|
|
882
|
-
HTTP_SET_STATUS_STR(424, "Failed Dependency"),
|
|
883
|
-
HTTP_SET_STATUS_STR(425, "Unassigned"),
|
|
884
|
-
HTTP_SET_STATUS_STR(426, "Upgrade Required"),
|
|
885
|
-
HTTP_SET_STATUS_STR(427, "Unassigned"),
|
|
886
|
-
HTTP_SET_STATUS_STR(428, "Precondition Required"),
|
|
887
|
-
HTTP_SET_STATUS_STR(429, "Too Many Requests"),
|
|
888
|
-
HTTP_SET_STATUS_STR(430, "Unassigned"),
|
|
889
|
-
HTTP_SET_STATUS_STR(431, "Request Header Fields Too Large"),
|
|
890
|
-
HTTP_SET_STATUS_STR(500, "Internal Server Error"),
|
|
891
|
-
HTTP_SET_STATUS_STR(501, "Not Implemented"),
|
|
892
|
-
HTTP_SET_STATUS_STR(502, "Bad Gateway"),
|
|
893
|
-
HTTP_SET_STATUS_STR(503, "Service Unavailable"),
|
|
894
|
-
HTTP_SET_STATUS_STR(504, "Gateway Timeout"),
|
|
895
|
-
HTTP_SET_STATUS_STR(505, "HTTP Version Not Supported"),
|
|
896
|
-
HTTP_SET_STATUS_STR(506, "Variant Also Negotiates"),
|
|
897
|
-
HTTP_SET_STATUS_STR(507, "Insufficient Storage"),
|
|
898
|
-
HTTP_SET_STATUS_STR(508, "Loop Detected"),
|
|
899
|
-
HTTP_SET_STATUS_STR(509, "Unassigned"),
|
|
900
|
-
HTTP_SET_STATUS_STR(510, "Not Extended"),
|
|
901
|
-
HTTP_SET_STATUS_STR(511, "Network Authentication Required"),
|
|
902
|
-
};
|
|
903
|
-
fio_str_info_s ret = (fio_str_info_s){.len = 0, .data = NULL};
|
|
904
|
-
if (status >= 100 &&
|
|
905
|
-
(status - 100) < sizeof(status2str) / sizeof(status2str[0]))
|
|
906
|
-
ret = status2str[status - 100];
|
|
907
|
-
if (!ret.data) {
|
|
908
|
-
ret = status2str[400];
|
|
909
|
-
}
|
|
910
|
-
return ret;
|
|
911
|
-
}
|
|
912
|
-
#undef HTTP_SET_STATUS_STR
|
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.56
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Boaz Segev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-07-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -246,7 +246,7 @@ licenses:
|
|
|
246
246
|
metadata:
|
|
247
247
|
allowed_push_host: https://rubygems.org
|
|
248
248
|
post_install_message: |-
|
|
249
|
-
Thank you for installing Iodine 0.7.
|
|
249
|
+
Thank you for installing Iodine 0.7.56.
|
|
250
250
|
Remember: if iodine supports your business, it's only fair to give value back (code contributions / donations).
|
|
251
251
|
rdoc_options: []
|
|
252
252
|
require_paths:
|