itsi 0.2.21.rc2 → 0.2.22
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/.rubocop.yml +20 -0
- data/CHANGELOG.md +1 -1
- data/Cargo.lock +26 -12
- data/Cargo.toml +4 -0
- data/Dockerfile +2 -2
- data/Rakefile +4 -0
- data/crates/itsi_acme/src/caches/no.rs +1 -1
- data/crates/itsi_acme/src/caches/test.rs +3 -3
- data/crates/itsi_acme/src/config.rs +6 -6
- data/crates/itsi_acme/src/lib.rs +1 -1
- data/crates/itsi_error/src/lib.rs +32 -15
- data/crates/itsi_rb_helpers/src/heap_value.rs +2 -2
- data/crates/itsi_scheduler/Cargo.toml +1 -1
- data/crates/itsi_scheduler/src/itsi_scheduler.rs +1 -1
- data/crates/itsi_server/Cargo.toml +1 -1
- data/crates/itsi_server/src/ruby_types/itsi_body_proxy/big_bytes.rs +10 -3
- data/crates/itsi_server/src/ruby_types/itsi_body_proxy/mod.rs +10 -6
- data/crates/itsi_server/src/ruby_types/itsi_grpc_call.rs +7 -5
- data/crates/itsi_server/src/ruby_types/itsi_grpc_response_stream/mod.rs +2 -2
- data/crates/itsi_server/src/ruby_types/itsi_http_request.rs +10 -7
- data/crates/itsi_server/src/ruby_types/itsi_http_response.rs +13 -5
- data/crates/itsi_server/src/ruby_types/itsi_server/file_watcher.rs +6 -6
- data/crates/itsi_server/src/ruby_types/itsi_server/itsi_server_config.rs +15 -11
- data/crates/itsi_server/src/ruby_types/itsi_server.rs +2 -2
- data/crates/itsi_server/src/server/middleware_stack/middleware.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/compression.rs +1 -3
- data/crates/itsi_server/src/server/middleware_stack/middlewares/mod.rs +2 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/proxy.rs +2 -2
- data/crates/itsi_server/src/server/middleware_stack/middlewares/redirect.rs +1 -1
- data/crates/itsi_server/src/server/middleware_stack/middlewares/ruby_app.rs +17 -7
- data/crates/itsi_server/src/server/middleware_stack/mod.rs +12 -12
- data/crates/itsi_server/src/server/serve_strategy/cluster_mode.rs +4 -3
- data/crates/itsi_server/src/server/signal.rs +7 -5
- data/crates/itsi_server/src/services/password_hasher.rs +1 -1
- data/crates/itsi_server/src/services/static_file_server.rs +3 -4
- data/gems/scheduler/Cargo.lock +7 -19
- data/gems/scheduler/Cargo.toml +4 -0
- data/gems/scheduler/Gemfile +11 -0
- data/gems/scheduler/Rakefile +21 -6
- data/gems/scheduler/itsi-scheduler.gemspec +5 -1
- data/gems/scheduler/lib/itsi/scheduler/native_extension.rb +34 -0
- data/gems/scheduler/lib/itsi/scheduler/version.rb +1 -1
- data/gems/scheduler/lib/itsi/scheduler.rb +1 -1
- data/gems/scheduler/test/test_block_unblock.rb +1 -1
- data/gems/scheduler/vendor/rb-sys-build/.cargo-ok +1 -0
- data/gems/scheduler/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
- data/gems/scheduler/vendor/rb-sys-build/Cargo.lock +294 -0
- data/gems/scheduler/vendor/rb-sys-build/Cargo.toml +71 -0
- data/gems/scheduler/vendor/rb-sys-build/Cargo.toml.orig +32 -0
- data/gems/scheduler/vendor/rb-sys-build/LICENSE-APACHE +190 -0
- data/gems/scheduler/vendor/rb-sys-build/LICENSE-MIT +21 -0
- data/gems/scheduler/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
- data/gems/scheduler/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
- data/gems/scheduler/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
- data/gems/scheduler/vendor/rb-sys-build/src/bindings.rs +280 -0
- data/gems/scheduler/vendor/rb-sys-build/src/cc.rs +421 -0
- data/gems/scheduler/vendor/rb-sys-build/src/lib.rs +12 -0
- data/gems/scheduler/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
- data/gems/scheduler/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
- data/gems/scheduler/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
- data/gems/scheduler/vendor/rb-sys-build/src/rb_config.rs +906 -0
- data/gems/scheduler/vendor/rb-sys-build/src/utils.rs +53 -0
- data/gems/server/Cargo.lock +25 -11
- data/gems/server/Cargo.toml +4 -0
- data/gems/server/Gemfile +23 -0
- data/gems/server/Rakefile +39 -7
- data/gems/server/itsi-server.gemspec +5 -1
- data/gems/server/lib/itsi/server/native_extension.rb +34 -0
- data/gems/server/lib/itsi/server/version.rb +1 -1
- data/gems/server/lib/itsi/server.rb +10 -2
- data/gems/server/test/rack/test_rack_server.rb +14 -2
- data/gems/server/vendor/rb-sys-build/.cargo-ok +1 -0
- data/gems/server/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
- data/gems/server/vendor/rb-sys-build/Cargo.lock +294 -0
- data/gems/server/vendor/rb-sys-build/Cargo.toml +71 -0
- data/gems/server/vendor/rb-sys-build/Cargo.toml.orig +32 -0
- data/gems/server/vendor/rb-sys-build/LICENSE-APACHE +190 -0
- data/gems/server/vendor/rb-sys-build/LICENSE-MIT +21 -0
- data/gems/server/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
- data/gems/server/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
- data/gems/server/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
- data/gems/server/vendor/rb-sys-build/src/bindings.rs +280 -0
- data/gems/server/vendor/rb-sys-build/src/cc.rs +421 -0
- data/gems/server/vendor/rb-sys-build/src/lib.rs +12 -0
- data/gems/server/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
- data/gems/server/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
- data/gems/server/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
- data/gems/server/vendor/rb-sys-build/src/rb_config.rs +906 -0
- data/gems/server/vendor/rb-sys-build/src/utils.rs +53 -0
- data/lib/itsi/version.rb +1 -1
- data/script/ci/resolve_version.rb +32 -0
- data/script/ci/set_version.rb +53 -0
- data/script/ci/setup_cibuildgem_rake_compiler.sh +63 -0
- data/script/ci/smoke_scheduler.rb +24 -0
- data/script/ci/smoke_server.rb +38 -0
- data/vendor/rb-sys-build/.cargo-ok +1 -0
- data/vendor/rb-sys-build/.cargo_vcs_info.json +6 -0
- data/vendor/rb-sys-build/Cargo.lock +294 -0
- data/vendor/rb-sys-build/Cargo.toml +71 -0
- data/vendor/rb-sys-build/Cargo.toml.orig +32 -0
- data/vendor/rb-sys-build/LICENSE-APACHE +190 -0
- data/vendor/rb-sys-build/LICENSE-MIT +21 -0
- data/vendor/rb-sys-build/src/bindings/sanitizer.rs +185 -0
- data/vendor/rb-sys-build/src/bindings/stable_api.rs +247 -0
- data/vendor/rb-sys-build/src/bindings/wrapper.h +71 -0
- data/vendor/rb-sys-build/src/bindings.rs +280 -0
- data/vendor/rb-sys-build/src/cc.rs +421 -0
- data/vendor/rb-sys-build/src/lib.rs +12 -0
- data/vendor/rb-sys-build/src/rb_config/flags.rs +101 -0
- data/vendor/rb-sys-build/src/rb_config/library.rs +132 -0
- data/vendor/rb-sys-build/src/rb_config/search_path.rs +57 -0
- data/vendor/rb-sys-build/src/rb_config.rs +906 -0
- data/vendor/rb-sys-build/src/utils.rs +53 -0
- metadata +69 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 431fc2c382fd32204fb84de948bfa584a7ad420aff7bd38df80823aef47e6a6e
|
|
4
|
+
data.tar.gz: 2f65a4465d5dfe4230d47409426713632eed82de3269a0f54678c558523cf27c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e9e4b8395a97b8b81180aa83fb19c5bb1f0a15abb80846f29aa933051ac1ff1ac8e20a55244ab60f10eeb35e78ab3703c90073b5bc28da9c4b82b1c3e609224d
|
|
7
|
+
data.tar.gz: 9f5a32484e1e861e348dcfd3728479a0b8ea0ed11821f13256ffc64d6af1c8a17d5b2c53545e5b4b29eb5774421098f3d7a41d03b3094937230b8f4f37573f83
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 3.1
|
|
3
|
+
NewCops: enable
|
|
4
|
+
SuggestExtensions: false
|
|
5
|
+
Include:
|
|
6
|
+
- gems/server/lib/**/*.rb
|
|
7
|
+
- gems/scheduler/lib/**/*.rb
|
|
8
|
+
Exclude:
|
|
9
|
+
- examples/**/*
|
|
10
|
+
- gems/**/tmp/**/*
|
|
11
|
+
- target/**/*
|
|
12
|
+
- pkg/**/*
|
|
13
|
+
- vendor/**/*
|
|
14
|
+
- tmp/**/*
|
|
15
|
+
|
|
16
|
+
Style/StringLiterals:
|
|
17
|
+
EnforcedStyle: double_quotes
|
|
18
|
+
|
|
19
|
+
Style/StringLiteralsInInterpolation:
|
|
20
|
+
EnforcedStyle: double_quotes
|
data/CHANGELOG.md
CHANGED
data/Cargo.lock
CHANGED
|
@@ -270,7 +270,7 @@ version = "0.28.2"
|
|
|
270
270
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
271
271
|
checksum = "bfa9b6986f250236c27e5a204062434a773a13243d2ffc2955f37bdba4c5c6a1"
|
|
272
272
|
dependencies = [
|
|
273
|
-
"bindgen",
|
|
273
|
+
"bindgen 0.69.5",
|
|
274
274
|
"cc",
|
|
275
275
|
"cmake",
|
|
276
276
|
"dunce",
|
|
@@ -427,6 +427,24 @@ dependencies = [
|
|
|
427
427
|
"which",
|
|
428
428
|
]
|
|
429
429
|
|
|
430
|
+
[[package]]
|
|
431
|
+
name = "bindgen"
|
|
432
|
+
version = "0.72.1"
|
|
433
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
434
|
+
checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895"
|
|
435
|
+
dependencies = [
|
|
436
|
+
"bitflags 2.9.0",
|
|
437
|
+
"cexpr",
|
|
438
|
+
"clang-sys",
|
|
439
|
+
"itertools",
|
|
440
|
+
"proc-macro2",
|
|
441
|
+
"quote",
|
|
442
|
+
"regex",
|
|
443
|
+
"rustc-hash 2.1.1",
|
|
444
|
+
"shlex",
|
|
445
|
+
"syn 2.0.101",
|
|
446
|
+
]
|
|
447
|
+
|
|
430
448
|
[[package]]
|
|
431
449
|
name = "bitflags"
|
|
432
450
|
version = "1.3.2"
|
|
@@ -660,7 +678,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
660
678
|
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
|
|
661
679
|
dependencies = [
|
|
662
680
|
"lazy_static",
|
|
663
|
-
"windows-sys 0.
|
|
681
|
+
"windows-sys 0.48.0",
|
|
664
682
|
]
|
|
665
683
|
|
|
666
684
|
[[package]]
|
|
@@ -1644,7 +1662,7 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
|
|
|
1644
1662
|
|
|
1645
1663
|
[[package]]
|
|
1646
1664
|
name = "itsi-scheduler"
|
|
1647
|
-
version = "0.2.21
|
|
1665
|
+
version = "0.2.21"
|
|
1648
1666
|
dependencies = [
|
|
1649
1667
|
"bytes",
|
|
1650
1668
|
"derive_more",
|
|
@@ -1662,7 +1680,7 @@ dependencies = [
|
|
|
1662
1680
|
|
|
1663
1681
|
[[package]]
|
|
1664
1682
|
name = "itsi-server"
|
|
1665
|
-
version = "0.2.21
|
|
1683
|
+
version = "0.2.21"
|
|
1666
1684
|
dependencies = [
|
|
1667
1685
|
"argon2",
|
|
1668
1686
|
"async-channel",
|
|
@@ -1934,8 +1952,7 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
|
|
|
1934
1952
|
[[package]]
|
|
1935
1953
|
name = "magnus"
|
|
1936
1954
|
version = "0.8.2"
|
|
1937
|
-
source = "
|
|
1938
|
-
checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
|
|
1955
|
+
source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
|
|
1939
1956
|
dependencies = [
|
|
1940
1957
|
"bytes",
|
|
1941
1958
|
"magnus-macros",
|
|
@@ -1947,8 +1964,7 @@ dependencies = [
|
|
|
1947
1964
|
[[package]]
|
|
1948
1965
|
name = "magnus-macros"
|
|
1949
1966
|
version = "0.8.0"
|
|
1950
|
-
source = "
|
|
1951
|
-
checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
|
|
1967
|
+
source = "git+https://github.com/matsadler/magnus.git?rev=1ed232edb2b75a2eed9b1def34ad57e55c411a5c#1ed232edb2b75a2eed9b1def34ad57e55c411a5c"
|
|
1952
1968
|
dependencies = [
|
|
1953
1969
|
"proc-macro2",
|
|
1954
1970
|
"quote",
|
|
@@ -2591,10 +2607,8 @@ dependencies = [
|
|
|
2591
2607
|
[[package]]
|
|
2592
2608
|
name = "rb-sys-build"
|
|
2593
2609
|
version = "0.9.124"
|
|
2594
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2595
|
-
checksum = "568068db4102230882e6d4ae8de6632e224ca75fe5970f6e026a04e91ed635d3"
|
|
2596
2610
|
dependencies = [
|
|
2597
|
-
"bindgen",
|
|
2611
|
+
"bindgen 0.72.1",
|
|
2598
2612
|
"lazy_static",
|
|
2599
2613
|
"proc-macro2",
|
|
2600
2614
|
"quote",
|
|
@@ -3922,7 +3936,7 @@ version = "0.1.9"
|
|
|
3922
3936
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3923
3937
|
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
|
3924
3938
|
dependencies = [
|
|
3925
|
-
"windows-sys 0.
|
|
3939
|
+
"windows-sys 0.48.0",
|
|
3926
3940
|
]
|
|
3927
3941
|
|
|
3928
3942
|
[[package]]
|
data/Cargo.toml
CHANGED
|
@@ -12,6 +12,10 @@ members = [
|
|
|
12
12
|
]
|
|
13
13
|
resolver = "2"
|
|
14
14
|
|
|
15
|
+
[patch.crates-io]
|
|
16
|
+
magnus = { git = "https://github.com/matsadler/magnus.git", rev = "1ed232edb2b75a2eed9b1def34ad57e55c411a5c" }
|
|
17
|
+
rb-sys-build = { path = "vendor/rb-sys-build" }
|
|
18
|
+
|
|
15
19
|
|
|
16
20
|
[profile.release]
|
|
17
21
|
opt-level = 3
|
data/Dockerfile
CHANGED
|
@@ -3,7 +3,7 @@ FROM ruby:3.4
|
|
|
3
3
|
RUN apt-get update && apt-get install build-essential libclang-dev -y && apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
4
4
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
|
|
5
5
|
|
|
6
|
-
COPY pkg/itsi-server-0.2.21.
|
|
7
|
-
RUN gem install itsi-server-0.2.21.
|
|
6
|
+
COPY pkg/itsi-server-0.2.21.gem .
|
|
7
|
+
RUN gem install itsi-server-0.2.21.gem
|
|
8
8
|
|
|
9
9
|
CMD ["itsi", "serve"]
|
data/Rakefile
CHANGED
|
@@ -57,7 +57,9 @@ task :sync_crates do
|
|
|
57
57
|
require 'fileutils'
|
|
58
58
|
GEMS.each do |gem_info|
|
|
59
59
|
ext_dir = File.join(gem_info[:dir], 'ext')
|
|
60
|
+
vendor_dir = File.join(gem_info[:dir], 'vendor')
|
|
60
61
|
FileUtils.mkdir_p(ext_dir)
|
|
62
|
+
FileUtils.mkdir_p(vendor_dir)
|
|
61
63
|
|
|
62
64
|
Dir.chdir('crates') do
|
|
63
65
|
Dir['*'].each do |to_sync|
|
|
@@ -68,6 +70,8 @@ task :sync_crates do
|
|
|
68
70
|
system("cp ../Cargo.lock ../#{gem_info[:dir]}/Cargo.lock")
|
|
69
71
|
end
|
|
70
72
|
end
|
|
73
|
+
|
|
74
|
+
system("rsync -q -av vendor/rb-sys-build/ #{vendor_dir}/rb-sys-build --delete")
|
|
71
75
|
end
|
|
72
76
|
end
|
|
73
77
|
|
|
@@ -7,7 +7,7 @@ use std::sync::atomic::AtomicPtr;
|
|
|
7
7
|
|
|
8
8
|
/// No-op cache, which does nothing.
|
|
9
9
|
/// ```rust
|
|
10
|
-
/// # use
|
|
10
|
+
/// # use itsi_acme::caches::NoCache;
|
|
11
11
|
/// # type EC = std::io::Error;
|
|
12
12
|
/// # type EA = EC;
|
|
13
13
|
/// let no_cache = NoCache::<EC, EA>::new();
|
|
@@ -10,9 +10,9 @@ use std::sync::atomic::AtomicPtr;
|
|
|
10
10
|
use std::sync::Arc;
|
|
11
11
|
|
|
12
12
|
/// Test cache, which generates certificates for ACME incompatible test environments.
|
|
13
|
-
/// ```rust
|
|
14
|
-
/// # use
|
|
15
|
-
/// # use
|
|
13
|
+
/// ```rust,no_run
|
|
14
|
+
/// # use itsi_acme::AcmeConfig;
|
|
15
|
+
/// # use itsi_acme::caches::{DirCache, TestCache};
|
|
16
16
|
/// # let test_environment = true;
|
|
17
17
|
/// let mut config = AcmeConfig::new(["example.com"])
|
|
18
18
|
/// .cache(DirCache::new("./cache"));
|
|
@@ -31,9 +31,9 @@ impl AcmeConfig<Infallible, Infallible> {
|
|
|
31
31
|
/// error types will be `Infallible` since the cache cannot return an error. The methods to set
|
|
32
32
|
/// a cache will change the error types to match those returned by the supplied cache.
|
|
33
33
|
///
|
|
34
|
-
/// ```rust
|
|
35
|
-
/// # use
|
|
36
|
-
/// use
|
|
34
|
+
/// ```rust,no_run
|
|
35
|
+
/// # use itsi_acme::AcmeConfig;
|
|
36
|
+
/// use itsi_acme::caches::DirCache;
|
|
37
37
|
/// let config = AcmeConfig::new(["example.com"]).cache(DirCache::new("./rustls_acme_cache"));
|
|
38
38
|
/// ```
|
|
39
39
|
///
|
|
@@ -43,9 +43,9 @@ impl AcmeConfig<Infallible, Infallible> {
|
|
|
43
43
|
/// An uncached instance of [AcmeConfig] with particular type parameters can be created using
|
|
44
44
|
/// [NoCache].
|
|
45
45
|
///
|
|
46
|
-
/// ```rust
|
|
47
|
-
/// # use
|
|
48
|
-
/// use
|
|
46
|
+
/// ```rust,no_run
|
|
47
|
+
/// # use itsi_acme::AcmeConfig;
|
|
48
|
+
/// use itsi_acme::caches::NoCache;
|
|
49
49
|
/// # type EC = std::io::Error;
|
|
50
50
|
/// # type EA = EC;
|
|
51
51
|
/// let config: AcmeConfig<EC, EA> = AcmeConfig::new(["example.com"]).cache(NoCache::new());
|
data/crates/itsi_acme/src/lib.rs
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
//! ```rust,no_run
|
|
32
32
|
//! use tokio::io::AsyncWriteExt;
|
|
33
33
|
//! use futures::StreamExt;
|
|
34
|
-
//! use
|
|
34
|
+
//! use itsi_acme::{AcmeConfig, caches::DirCache};
|
|
35
35
|
//! use tokio_stream::wrappers::TcpListenerStream;
|
|
36
36
|
//!
|
|
37
37
|
//! #[tokio::main]
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
pub use anyhow::Context;
|
|
2
2
|
use magnus::Error as MagnusError;
|
|
3
|
-
use magnus::{
|
|
4
|
-
error::ErrorType,
|
|
5
|
-
exception::{self, arg_error, standard_error},
|
|
6
|
-
};
|
|
3
|
+
use magnus::{error::ErrorType, Ruby};
|
|
7
4
|
use thiserror::Error;
|
|
8
5
|
|
|
9
6
|
pub static CLIENT_CONNECTION_CLOSED: &str = "Client disconnected";
|
|
@@ -73,7 +70,10 @@ pub trait IntoMagnusError {
|
|
|
73
70
|
|
|
74
71
|
impl<T: std::error::Error> IntoMagnusError for T {
|
|
75
72
|
fn into_magnus_error(self) -> MagnusError {
|
|
76
|
-
MagnusError::new(
|
|
73
|
+
MagnusError::new(
|
|
74
|
+
Ruby::get().unwrap().exception_standard_error(),
|
|
75
|
+
self.to_string(),
|
|
76
|
+
)
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -92,17 +92,34 @@ impl From<String> for ItsiError {
|
|
|
92
92
|
impl From<ItsiError> for magnus::Error {
|
|
93
93
|
fn from(err: ItsiError) -> Self {
|
|
94
94
|
match err {
|
|
95
|
-
ItsiError::InvalidInput(msg) =>
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
ItsiError::
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
ItsiError::
|
|
102
|
-
magnus::Error::new(
|
|
95
|
+
ItsiError::InvalidInput(msg) => {
|
|
96
|
+
magnus::Error::new(Ruby::get().unwrap().exception_arg_error(), msg)
|
|
97
|
+
}
|
|
98
|
+
ItsiError::InternalServerError(msg) => {
|
|
99
|
+
magnus::Error::new(Ruby::get().unwrap().exception_standard_error(), msg)
|
|
100
|
+
}
|
|
101
|
+
ItsiError::InternalError(msg) => {
|
|
102
|
+
magnus::Error::new(Ruby::get().unwrap().exception_standard_error(), msg)
|
|
103
|
+
}
|
|
104
|
+
ItsiError::UnsupportedProtocol(msg) => {
|
|
105
|
+
magnus::Error::new(Ruby::get().unwrap().exception_arg_error(), msg)
|
|
106
|
+
}
|
|
107
|
+
ItsiError::ArgumentError(msg) => {
|
|
108
|
+
magnus::Error::new(Ruby::get().unwrap().exception_arg_error(), msg)
|
|
109
|
+
}
|
|
110
|
+
ItsiError::Jump(msg) => {
|
|
111
|
+
magnus::Error::new(Ruby::get().unwrap().exception_local_jump_error(), msg)
|
|
112
|
+
}
|
|
113
|
+
ItsiError::ClientConnectionClosed => magnus::Error::new(
|
|
114
|
+
Ruby::get().unwrap().exception_eof_error(),
|
|
115
|
+
CLIENT_CONNECTION_CLOSED,
|
|
116
|
+
),
|
|
117
|
+
ItsiError::Break => {
|
|
118
|
+
magnus::Error::new(Ruby::get().unwrap().exception_interrupt(), "Break")
|
|
119
|
+
}
|
|
120
|
+
ItsiError::Pass => {
|
|
121
|
+
magnus::Error::new(Ruby::get().unwrap().exception_interrupt(), "Pass")
|
|
103
122
|
}
|
|
104
|
-
ItsiError::Break => magnus::Error::new(exception::interrupt(), "Break"),
|
|
105
|
-
ItsiError::Pass => magnus::Error::new(exception::interrupt(), "Pass"),
|
|
106
123
|
ItsiError::Io(err) => err.into_magnus_error(),
|
|
107
124
|
ItsiError::Rcgen(err) => err.into_magnus_error(),
|
|
108
125
|
ItsiError::HttpParse(err) => err.into_magnus_error(),
|
|
@@ -66,7 +66,7 @@ where
|
|
|
66
66
|
T: ReprValue,
|
|
67
67
|
{
|
|
68
68
|
fn into_value_with(self, _: &Ruby) -> Value {
|
|
69
|
-
self.0.
|
|
69
|
+
self.0.into_value_with(&magnus::Ruby::get().unwrap())
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -116,7 +116,7 @@ impl Deref for HeapVal {
|
|
|
116
116
|
|
|
117
117
|
impl IntoValue for HeapVal {
|
|
118
118
|
fn into_value_with(self, _: &Ruby) -> Value {
|
|
119
|
-
self.0.
|
|
119
|
+
self.0.into_value_with(&magnus::Ruby::get().unwrap())
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
@@ -68,7 +68,7 @@ impl ItsiScheduler {
|
|
|
68
68
|
pub fn wake(&self) -> MagnusResult<()> {
|
|
69
69
|
self.waker.lock().wake().map_err(|_| {
|
|
70
70
|
magnus::Error::new(
|
|
71
|
-
magnus::
|
|
71
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
72
72
|
"Failed to wake the scheduler",
|
|
73
73
|
)
|
|
74
74
|
})?;
|
|
@@ -50,14 +50,21 @@ impl BigBytes {
|
|
|
50
50
|
if bytes.is_empty() {
|
|
51
51
|
None
|
|
52
52
|
} else {
|
|
53
|
-
Some(bytes.
|
|
53
|
+
Some(bytes.into_value_with(&magnus::Ruby::get().unwrap()))
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
BigBytes::OnDisk(path) => {
|
|
57
57
|
let ruby = Ruby::get().unwrap();
|
|
58
58
|
let rarray = ruby.ary_new();
|
|
59
|
-
rarray
|
|
60
|
-
|
|
59
|
+
rarray
|
|
60
|
+
.push(
|
|
61
|
+
path.path()
|
|
62
|
+
.to_str()
|
|
63
|
+
.unwrap()
|
|
64
|
+
.into_value_with(&magnus::Ruby::get().unwrap()),
|
|
65
|
+
)
|
|
66
|
+
.ok();
|
|
67
|
+
Some(rarray.into_value_with(&magnus::Ruby::get().unwrap()))
|
|
61
68
|
}
|
|
62
69
|
}
|
|
63
70
|
}
|
|
@@ -32,7 +32,9 @@ impl ItsiBody {
|
|
|
32
32
|
pub fn into_value(&self) -> Option<Value> {
|
|
33
33
|
match self {
|
|
34
34
|
ItsiBody::Buffered(bytes) => bytes.as_value(),
|
|
35
|
-
ItsiBody::Stream(proxy) =>
|
|
35
|
+
ItsiBody::Stream(proxy) => {
|
|
36
|
+
Some(proxy.clone().into_value_with(&magnus::Ruby::get().unwrap()))
|
|
37
|
+
}
|
|
36
38
|
ItsiBody::Empty => None,
|
|
37
39
|
}
|
|
38
40
|
}
|
|
@@ -54,7 +56,7 @@ impl ItsiBodyProxy {
|
|
|
54
56
|
if let Some(chunk) = block_on(stream.next()) {
|
|
55
57
|
let chunk = chunk.map_err(|err| {
|
|
56
58
|
magnus::Error::new(
|
|
57
|
-
magnus::
|
|
59
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
58
60
|
format!("Error reading body {:?}", err),
|
|
59
61
|
)
|
|
60
62
|
})?;
|
|
@@ -86,7 +88,7 @@ impl ItsiBodyProxy {
|
|
|
86
88
|
if let Some(chunk) = block_on(stream.next()) {
|
|
87
89
|
let chunk = chunk.map_err(|err| {
|
|
88
90
|
magnus::Error::new(
|
|
89
|
-
magnus::
|
|
91
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
90
92
|
format!("Error reading body {:?}", err),
|
|
91
93
|
)
|
|
92
94
|
})?;
|
|
@@ -97,7 +99,9 @@ impl ItsiBodyProxy {
|
|
|
97
99
|
break;
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
|
-
let output_string = buffer
|
|
102
|
+
let output_string = buffer
|
|
103
|
+
.take()
|
|
104
|
+
.unwrap_or(magnus::Ruby::get().unwrap().str_buf_new(buf.len()));
|
|
101
105
|
output_string.cat(buf.clone());
|
|
102
106
|
buf.clear();
|
|
103
107
|
Ok(Some(output_string))
|
|
@@ -111,7 +115,7 @@ impl ItsiBodyProxy {
|
|
|
111
115
|
while let Some(chunk) = block_on(stream.next()) {
|
|
112
116
|
let chunk = chunk.map_err(|err| {
|
|
113
117
|
magnus::Error::new(
|
|
114
|
-
magnus::
|
|
118
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
115
119
|
format!("Error reading body {:?}", err),
|
|
116
120
|
)
|
|
117
121
|
})?;
|
|
@@ -133,7 +137,7 @@ impl ItsiBodyProxy {
|
|
|
133
137
|
fn verify_open(&self) -> MagnusResult<()> {
|
|
134
138
|
if self.closed.load(atomic::Ordering::SeqCst) {
|
|
135
139
|
return Err(magnus::Error::new(
|
|
136
|
-
magnus::
|
|
140
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
137
141
|
"Body stream is closed",
|
|
138
142
|
));
|
|
139
143
|
}
|
|
@@ -64,7 +64,9 @@ impl ItsiGrpcCall {
|
|
|
64
64
|
let snake_case_method_name = METHOD_NAME_REGEX
|
|
65
65
|
.replace_all(method_name, "${1}_${2}")
|
|
66
66
|
.to_lowercase();
|
|
67
|
-
Ok(
|
|
67
|
+
Ok(magnus::Ruby::get()
|
|
68
|
+
.unwrap()
|
|
69
|
+
.to_symbol(snake_case_method_name))
|
|
68
70
|
}
|
|
69
71
|
|
|
70
72
|
pub fn stream(&self) -> MagnusResult<ItsiGrpcResponseStream> {
|
|
@@ -205,7 +207,7 @@ impl ItsiGrpcCall {
|
|
|
205
207
|
})
|
|
206
208
|
.map_err(|e: std::io::Error| {
|
|
207
209
|
Error::new(
|
|
208
|
-
magnus::
|
|
210
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
209
211
|
format!("deflate decompression failed: {}", e),
|
|
210
212
|
)
|
|
211
213
|
})?;
|
|
@@ -224,7 +226,7 @@ impl ItsiGrpcCall {
|
|
|
224
226
|
})
|
|
225
227
|
.map_err(|e: std::io::Error| {
|
|
226
228
|
Error::new(
|
|
227
|
-
magnus::
|
|
229
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
228
230
|
format!("gzip decompression failed: {}", e),
|
|
229
231
|
)
|
|
230
232
|
})?;
|
|
@@ -243,7 +245,7 @@ impl ItsiGrpcCall {
|
|
|
243
245
|
})
|
|
244
246
|
.map_err(|e| {
|
|
245
247
|
Error::new(
|
|
246
|
-
magnus::
|
|
248
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
247
249
|
format!("gzip compression failed: {e}"),
|
|
248
250
|
)
|
|
249
251
|
})?;
|
|
@@ -262,7 +264,7 @@ impl ItsiGrpcCall {
|
|
|
262
264
|
})
|
|
263
265
|
.map_err(|e| {
|
|
264
266
|
Error::new(
|
|
265
|
-
magnus::
|
|
267
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
266
268
|
format!("deflate compression failed: {e}"),
|
|
267
269
|
)
|
|
268
270
|
})?;
|
|
@@ -59,7 +59,7 @@ impl ItsiGrpcResponseStreamInner {
|
|
|
59
59
|
.blocking_send(ByteFrame::Data(bytes))
|
|
60
60
|
.map_err(|err| {
|
|
61
61
|
magnus::Error::new(
|
|
62
|
-
magnus::
|
|
62
|
+
magnus::Ruby::get().unwrap().exception_io_error(),
|
|
63
63
|
format!("Trying to write to closed stream: {:?}", err),
|
|
64
64
|
)
|
|
65
65
|
})?;
|
|
@@ -80,7 +80,7 @@ impl ItsiGrpcResponseStreamInner {
|
|
|
80
80
|
let trailer_tx = std::mem::replace(&mut self.trailer_tx, oneshot::channel().0);
|
|
81
81
|
trailer_tx.send(header_map).map_err(|err| {
|
|
82
82
|
magnus::Error::new(
|
|
83
|
-
magnus::
|
|
83
|
+
magnus::Ruby::get().unwrap().exception_standard_error(),
|
|
84
84
|
format!("Error sending trailers {:?}", err),
|
|
85
85
|
)
|
|
86
86
|
})?;
|
|
@@ -6,9 +6,9 @@ use itsi_error::CLIENT_CONNECTION_CLOSED;
|
|
|
6
6
|
use itsi_rb_helpers::{funcall_no_ret, print_rb_backtrace, HeapValue};
|
|
7
7
|
use itsi_tracing::debug;
|
|
8
8
|
use magnus::{
|
|
9
|
-
block::
|
|
9
|
+
block::Proc,
|
|
10
10
|
error::{ErrorType, Result as MagnusResult},
|
|
11
|
-
Error, IntoValue, RHash,
|
|
11
|
+
Error, IntoValue, RHash,
|
|
12
12
|
};
|
|
13
13
|
use magnus::{
|
|
14
14
|
value::{LazyId, ReprValue},
|
|
@@ -110,20 +110,20 @@ impl ItsiHttpRequest {
|
|
|
110
110
|
// when building against Ruby < 3.2...
|
|
111
111
|
#[cfg(not(ruby_gte_3_2))]
|
|
112
112
|
{
|
|
113
|
-
|
|
113
|
+
magnus::Ruby::get().unwrap().hash_new()
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
116
|
for (i, group_name) in re.capture_names().enumerate().skip(1) {
|
|
117
117
|
if let Some(name) = group_name {
|
|
118
118
|
if let Some(m) = caps.get(i) {
|
|
119
119
|
// Insert into the hash: key is the group name, value is the match.
|
|
120
|
-
params.aset(
|
|
120
|
+
params.aset(magnus::Ruby::get().unwrap().to_symbol(name), m.as_str())?;
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
Ok(params)
|
|
125
125
|
} else {
|
|
126
|
-
Ok(
|
|
126
|
+
Ok(magnus::Ruby::get().unwrap().hash_new())
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
|
|
@@ -201,7 +201,7 @@ impl ItsiHttpRequest {
|
|
|
201
201
|
}
|
|
202
202
|
},
|
|
203
203
|
Ok(_) => match receiver.await {
|
|
204
|
-
Ok(ResponseFrame::HttpResponse(response)) => Ok(response),
|
|
204
|
+
Ok(ResponseFrame::HttpResponse(response)) => Ok(*response),
|
|
205
205
|
Ok(ResponseFrame::HijackedResponse(response)) => {
|
|
206
206
|
match response.process_hijacked_response().await {
|
|
207
207
|
Ok(result) => Ok(result),
|
|
@@ -354,7 +354,10 @@ impl ItsiHttpRequest {
|
|
|
354
354
|
|
|
355
355
|
pub(crate) fn each_header(&self) -> MagnusResult<()> {
|
|
356
356
|
self.parts.headers.iter().for_each(|(hn, hv)| {
|
|
357
|
-
|
|
357
|
+
magnus::Ruby::get()
|
|
358
|
+
.unwrap()
|
|
359
|
+
.yield_values::<_, Value>((hn.as_str(), hv.to_str().unwrap_or("")))
|
|
360
|
+
.ok();
|
|
358
361
|
});
|
|
359
362
|
Ok(())
|
|
360
363
|
}
|
|
@@ -63,7 +63,7 @@ pub struct ResponseInner {
|
|
|
63
63
|
|
|
64
64
|
#[derive(Debug)]
|
|
65
65
|
pub enum ResponseFrame {
|
|
66
|
-
HttpResponse(HttpResponse),
|
|
66
|
+
HttpResponse(Box<HttpResponse>),
|
|
67
67
|
HijackedResponse(ItsiHttpResponse),
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -225,7 +225,9 @@ impl ItsiHttpResponse {
|
|
|
225
225
|
if let Some(mut response) = self.response.write().take() {
|
|
226
226
|
*response.status_mut() = StatusCode::INTERNAL_SERVER_ERROR;
|
|
227
227
|
if let Some(sender) = self.response_sender.write().take() {
|
|
228
|
-
sender
|
|
228
|
+
sender
|
|
229
|
+
.send(ResponseFrame::HttpResponse(Box::new(response)))
|
|
230
|
+
.ok();
|
|
229
231
|
}
|
|
230
232
|
}
|
|
231
233
|
}
|
|
@@ -235,7 +237,9 @@ impl ItsiHttpResponse {
|
|
|
235
237
|
if let Some(mut response) = self.response.write().take() {
|
|
236
238
|
*response.status_mut() = StatusCode::SERVICE_UNAVAILABLE;
|
|
237
239
|
if let Some(sender) = self.response_sender.write().take() {
|
|
238
|
-
sender
|
|
240
|
+
sender
|
|
241
|
+
.send(ResponseFrame::HttpResponse(Box::new(response)))
|
|
242
|
+
.ok();
|
|
239
243
|
}
|
|
240
244
|
}
|
|
241
245
|
}
|
|
@@ -253,7 +257,9 @@ impl ItsiHttpResponse {
|
|
|
253
257
|
*response.body_mut() = HttpBody::stream(buffered);
|
|
254
258
|
self.frame_writer.write().replace(writer);
|
|
255
259
|
if let Some(sender) = self.response_sender.write().take() {
|
|
256
|
-
sender
|
|
260
|
+
sender
|
|
261
|
+
.send(ResponseFrame::HttpResponse(Box::new(response)))
|
|
262
|
+
.ok();
|
|
257
263
|
}
|
|
258
264
|
} else {
|
|
259
265
|
info!("No response!");
|
|
@@ -280,7 +286,9 @@ impl ItsiHttpResponse {
|
|
|
280
286
|
*response.body_mut() = HttpBody::full(frame);
|
|
281
287
|
}
|
|
282
288
|
if let Some(sender) = self.response_sender.write().take() {
|
|
283
|
-
sender
|
|
289
|
+
sender
|
|
290
|
+
.send(ResponseFrame::HttpResponse(Box::new(response)))
|
|
291
|
+
.ok();
|
|
284
292
|
}
|
|
285
293
|
}
|
|
286
294
|
|