Giter Club home page Giter Club logo

ntex's Introduction

ntex

Framework for composable network services.

build status crates.io Documentation Version License codecov Chat on Discord

Build statuses

Platform Build Status
Linux build status
macOS build status
Windows build status

Usage

Starting ntex v0.5 async runtime must be selected as a feature. Available options are glommio, tokio or async-std.

[dependencies]
ntex = { version = "2", features = ["tokio"] }

Documentation & community resources

License

This project is licensed under

ntex's People

Contributors

adwhit avatar ava57r avatar daxpedda avatar doumanash avatar dowwie avatar fafhrd91 avatar fuchsnj avatar ignatenkobrain avatar jeizsm avatar jesskfullwood avatar johntitor avatar jrconlin avatar khvzak avatar killercup avatar kornelski avatar krircc avatar leon3s avatar memoryruins avatar messense avatar mitsuhiko avatar mockersf avatar msga-mmm avatar neoeinstein avatar neopallium avatar niklasf avatar radix avatar svenstaro avatar tazjin avatar wpbrown avatar zzau13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ntex's Issues

ntex 0.6.2 + ntex-mqtt 0.10.0 upgrade undefined reference to `ntex::server::builder::ServerBuilder::bind'

uname -a
Linux workstation 6.0.17-300.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jan 4 15:58:35 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
rustc --version
rustc 1.67.0 (fc594f156 2023-01-24)
= note: /usr/bin/ld: /home/andrey/PROJECTS/mqtt-proxy/target/debug/deps/mqtt_proxy-6d91ebff2fb423f9.4c3b5lnbp2a18qc9.rcgu.o: in function `mqtt_proxy::mqtt::server::run_internal::{{closure}}':
          /home/andrey/PROJECTS/ENAPTER/RUST/mqtt-proxy/src/mqtt/server.rs:407: undefined reference to ntex::server::builder::ServerBuilder::bind'
          /usr/bin/ld: /home/andrey/PROJECTS/mqtt-proxy/src/mqtt/server.rs:437: undefined reference to `ntex::server::builder::ServerBuilder::bind'
          /usr/bin/ld: /home/andrey/PROJECTS/mqtt-proxy/target/debug/deps/mqtt_proxy-6d91ebff2fb423f9: hidden symbol `_ZN4ntex6server7builder13ServerBuilder4bind17h5c41c6d84432f1d6E' isn't defined
          /usr/bin/ld: final link failed: bad value
          collect2: error: ld returned 1 exit status

Project Feedback

Hi, I'd like to thank you for this project. It is brilliant and I love its focus on speed.

I know you probably don't have a lot of free time but I just wanted to come here and say thank you for all the work you've done with this amazing project.

Stay safe

SQL Framework?

Hi, very glad to see this powerful framework. Any available SQL framework for glommio runtime?

Production readiness

Hello,

Sorry for barging in unsolicited but is this project production ready you think?

I ask because you mention it is a "Personal project" and I wonder if

  1. that is just to avoid the actix incident where a vocal minority believed they had a right to dictate the choices of a project they didn't contribute to.

OR

  1. this is not production ready.

Could you kindly answer?

EDIT: Never mind, I only just noticed you are Nikolay :). I guess I can go ahead and use this then :)

ntex::http::client::Client can't work

#[ntex::main]
async fn main() -> std::io::Result<()> {
let builder = SslConnector::builder(SslMethod::tls()).unwrap();
    let client = client::Client::build()
        .connector(client::Connector::default().openssl(builder.build()).timeout(Millis(1000 * 120)).finish())
        .finish();
    let mut payload =  client
            .get("https://www.google.com")
            .send()
            .await
            .unwrap();
    let body = payload.body()
            .limit(20_000_000)  // sets max allowable payload size
            .await
            .unwrap();
    println!("{}", String::from_utf8(body.to_vec()).unwrap());
}
...

at lint 7 has panicked.

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Connect(Disconnected(Some(Custom { kind: Other, error: "unexpected EOF" })))'

No Results in TechEmpower Benchmarks Since Your Updates There In March 2022

Hello,

I'm just a lurker, but I'm a friendly lurker. I had noticed no ntex results in the periodic benchmark at https://tfb-status.techempower.com/ for quite a while and I had wondered what might have happened. I thought this was odd, since your test code still exists in the TechEmpower/FrameworkBenchmarks repo master branch (as always). Tonight I happened to notice that the TechEmpower status page announced in a top banner that they had just concluded the run which began 2022-06-30, hash edd8ab2e-018b-4041-92ce-03e5317d35ea, that will be used for the official public "Round 21" results. I was alarmed to notice ntex still had no results in any of those standings either.

I dug a bit deeper and correlated the date of your dockerfile changes for each of the tests in that benchmark repo to the exact date when ntex results disappeared from the TechEmpower periodic runs. That's been 18 runs with no results since mid-March, including what appears to be the run which will get published to the world without any ntex results.

I decided to open an issue here rather than in the techempower benchmarks repo in the hopes that you might see this sooner and be able to troubleshoot what might have gone wrong with that commit back in March. Because if you fix it quickly, perhaps there may still be an opportunity to reach out to TechEmpower to request they make a fresh test run for the official "Round 21" results which could include ntex.

Can grpc be implemented?

My project is going to be converted from spring cloud to rust, does the ntex-rs framework have a microservice communication component that implements grpc?

support soml runtime

support smol runtime let ntex be first rust framework can support tokio/async-std ecosystem.

I find smol support task::local and Thread-local executor for !Send futures. so i think ntex can port to support smol runtime. async-std will support/use it

I think it will be some cool:

  • we can use std api more direct (fs, net, etc)
  • better work with futures library (like futures-io)
  • anyone can use ntex no need care runtime.

Regex in url

Hi there,

Im sorry if it's a noob question. But on actix you have the possibility to match all path using that kind of method

#[get("foo/{bar}/{tail:.*}")]

where it will match

foo/1/2/           -> Params {'bar': '1', 'tail': '2/'}
foo/abc/def/a/b/c  -> Params {'bar': 'abc', 'tail': 'def/a/b/c'}

And it's seems not working on ntex i wonder if it's intended or if it's a bug.
If it's intended do you have a workarround to match this use case ?

Thank you for your time!

Breaking change on State with new version 0.5.30

Hey there.
Im experiencing a problem where i was using State::new to initialize a variable because im using web::types::State<Pool>
in all my functions. But since the new version it's seems not working anymore and doesn't have equivalent.
Is it possible to programatically create a State<T> or you don't plan to reintroduce the feature ?
Kinda make me change a lot of code but it is how it is.

"A Tokio 1.x context was found, but timers are disabled. Call `enable_time` on the runtime builder to enable timers.

Updating to the most recent ntex versions, it looks like Tokio timer support is missing. As ntex handles the tokio runtime creation, I am not sure how to perform a call to Builder::enable_time.

thread 'main' panicked at 'A Tokio 1.x context was found, but timers are disabled. Call `enable_time` on the runtime builder to enable timers.', /usr/src/.cargo-container-home/registry/src/github.com-1ecc6299db9ec823/tokio-1.11.0/src/time/driver/handle.rs:55:18
stack backtrace:
   0: rust_begin_unwind
             at ./rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/std/src/panicking.rs:517:5
   1: core::panicking::panic_fmt
             at ./rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/core/src/panicking.rs:101:14
   2: core::option::expect_failed
             at ./rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/core/src/option.rs:1615:5
   3: tokio::time::interval::interval
   4: hyper::client::pool::PoolInner<T>::put
   5: <hyper::client::pool::Pooled<T> as core::ops::drop::Drop>::drop
   6: core::ptr::drop_in_place<hyper::client::pool::Pooled<hyper::client::client::PoolClient<reqwest::async_impl::body::ImplStream>>>
   7: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
   8: <hyper::client::client::ResponseFuture as core::future::future::Future>::poll
   9: <reqwest::async_impl::client::PendingRequest as core::future::future::Future>::poll
  10: <reqwest::async_impl::client::Pending as core::future::future::Future>::poll
  11: drogue_cloud_mqtt_endpoint::run::{{closure}}
  12: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
  13: tokio::macros::scoped_tls::ScopedKey<T>::set
  14: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
  15: tokio::macros::scoped_tls::ScopedKey<T>::set
  16: tokio::runtime::basic_scheduler::BasicScheduler<P>::block_on
  17: tokio::runtime::Runtime::block_on
  18: ntex_rt::tokio::block_on
  19: drogue_cloud_mqtt_endpoint::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Panic in Arbiter thread.

How to customize error for web::types::Json<T> deserialzation errrors?

If miss some fields or other errors,how can i custom the deserializer error?

#[driver(Deserialize)]  
pub struct ItemJson {  
  ....  
}  
pub fn index(item:web::types::Json<ItemJson>) ->Result<HttpResponse,Error> {  
   ....some code  
}  

Now, it will display like:

Json deserialize error: missing field .....

I want to response json format like:

{  
  success:false,  
  message:'Json deserialize error: missing field .....'  
}  

ntex::http::client::Client::post always return 400

Hi,

For some reason when sending a POST request to a server, the response is always 400 with the following text:

<html>
    <head><title>400 Bad Request</title></head>
    <body>
    <center><h1>400 Bad Request</h1></center>
    </body>
</html>

Consider this code:

[package]
name = "client"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
ntex = { version = "=0.5.20", features = ["tokio", "rustls"] }
serde = "*"
serde_json = "*"
#[derive(serde::Serialize)]
struct MyRequest {
    a_value: String,
}

#[ntex::main]
async fn main() -> std::io::Result<()> {
    let client = ntex::http::client::ClientBuilder::default().finish();
    match client.post("https://httpbin.org/post")
        .send_json(&MyRequest {
            a_value: String::from("hola"),
        })
        .await {
        Ok(mut response) => {
            if response.status() != ntex::http::StatusCode::OK {
                println!("Error. Server responded with status code '{}' and error '{}'",
                         response.status(),
                         response.body()
                             .await
                             .unwrap()
                             .escape_ascii()
                             .to_string());
            }
            match response.body().await {
                Ok(bytes) => {
                    println!("{}", bytes.escape_ascii().to_string())
                },
                Err(error) => {
                    println!("Error: {}", error.to_string());
                }
            }
        }
        Err(error) => {
            println!("Error sending request: {}", error.to_string());
        }
    }
    Ok(())
}

With ntex version 0.5.20 this fails with a 400, however, with previous versions (like 0.5.19) it works as expected.

https://httpbin.org/post is an echo server, but it happens with other servers.

I'm on Windows 10 x64 with

~ $ cargo --version
cargo 1.61.0 (a028ae42f 2022-04-29)

Thanks!

nanorand makes it not compile on CentOS 7

CentOS7-not-compile
This is because that CentOS 7 lack of getrandom syscall, but the nanorand calls it directly.
nanorand-usage

I have to import nanorand handy in my project, and add the getrandom feature, to make it compiles:

nanorand = { version = "0", features = ["getrandom"] }

Websocket: second message got delayed if client sends two messages to server simultaneously.

when WebSocket's client sends two messages simultaneously, the second message would got delayed.
How to reproduce, use: examples/websocket/client
original code(line 55-58):

        // send text to server
        if futures::executor::block_on(tx2.send(ws::Message::Text(cmd))).is_err() {
            return;
        }

replace it with new demo code:

       // send text to server
        let cmdback=cmd.clone();
        if futures::executor::block_on(tx2.send(ws::Message::Text(cmd))).is_err() {
            return;
        }
        if cmdback=="test\n"{
            println!("We are going to send second one...");
            let cmd = format!("No more test!\n");
            if futures::executor::block_on(tx2.send(ws::Message::Text(cmd))).is_err() {
                return;
            }
        }

Expected Result:
If I enter "test", then it should print two lines: one is "test" and another one is "No more test!".

Actual result:
The line for "No more test!" would only be printed when the client receives a Ping from the server or you enter next.

demo
Server: b"demo\n"
test
We are going to send second one...
Server: b"test\n"
Got server ping: b""
Server: b"No more test!\n"
test
We are going to send second one...
Got server ping: b""
Server: b"test\n"
demo
Server: b"No more test!\n"
test
We are going to send second one...
demo

Not sure this issue is similar to issue 384: or not. The second message would be lost quietly in Actix but it's just got delayed here.

When I use the same code to talk with Tungstenite based echo server, the issue doesn't appear.

RandomState and ntex can't coexist


use std::collections::HashMap;
fn main() {

    let _s = ntex::server::build();

    let _m: HashMap<i32, i32, std::collections::hash_map::RandomState> = HashMap::default(); //build error
    //let _m: HashMap<i32, i32, ahash::RandomState> = HashMap::default();    //build OK

}


$ cargo build

  = note: /root/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-05b39ac0cb4c5688.rlib(std-05b39ac0cb4c5688.std.c9093c22-cgu.0.rcgu.o): In function `std::sys::unix::rand::imp::getrandom_fill_bytes::h809a29f15b1ec696':
          /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e//library/std/src/sys/unix/rand.rs:(.text._ZN3std3sys4unix4rand19hashmap_random_keys17h072171107a16a16dE+0x27): undefined reference to `getrandom'
          collect2: error: ld returned 1 exit status

  = help: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
  = note: use the `-l` flag to specify native libraries to link
  = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#cargorustc-link-libkindname)


Toolchains: 1.59-x86_64-unknown-linux-gnu, , 1.60-x86_64-unknown-linux-gnu, 1.61-x86_64-unknown-linux-gnu

ntex::time::sleep issue

My program:

use ntex::time::{sleep, Seconds};

            rt::spawn(async move {
                loop {
                    // do something
                    sleep(Seconds(5)).await;
                }
            });

While long running, it will panic, yield this message:
thread 'main' panicked at 'attempt to subtract with overflow', /Users/clia/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/ntex-0.4.8/src/time/wheel.rs:403:19

ntex 0.5.30 websocket can not connect

When websocket client connected, it will immediately drop the connection.

Steps to reproduce:

git clone https://github.com/ntex-rs/examples/
cd examples/websocket
cargo update
cargo run --bin server

Then open http://localhost:8080/index.html in browser, click 'connect' button.

The textarea will show:

Connecting...
Connected.
Disconnected.

The server log is:

[2022-12-01T02:07:40Z TRACE ntex::server::accept] Accepting connection: Tcp(TcpStream { addr: 127.0.0.1:8080, peer: 127.0.0.1:54937, fd: 77 }) bp: false
[2022-12-01T02:07:40Z TRACE ntex::server::accept] Sent to worker 0
[2022-12-01T02:07:40Z TRACE ntex::server::worker] Got socket for service: "ntex-web-service-127.0.0.1:8080"
[2022-12-01T02:07:40Z TRACE ntex::http::service] New http connection, peer address Some(127.0.0.1:54937)
[2022-12-01T02:07:40Z DEBUG ntex_io::io] start keep-alive timeout 5s
[2022-12-01T02:07:40Z TRACE ntex::http::h1::dispatcher] trying to read http message
[2022-12-01T02:07:40Z TRACE ntex_io::io] not enough data to decode next frame
[2022-12-01T02:07:40Z TRACE ntex_io::tasks] new 1131 bytes available, wakeup dispatcher
[2022-12-01T02:07:40Z TRACE ntex::http::h1::dispatcher] trying to read http message
[2022-12-01T02:07:40Z TRACE ntex::http::h1::dispatcher] http message is received: 
    Request HTTP/1.1 GET:/ws/
      headers:
        "sec-websocket-version": "13"
        "sec-websocket-extensions": "permessage-deflate; client_max_window_bits"
        "cache-control": "no-cache"
        "origin": "http://localhost:8080"
        "upgrade": "websocket"
        "accept-encoding": "gzip, deflate, br"
        "cookie": "csrftoken=TVnAk..."
        "host": "localhost:8080"
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
        "sec-websocket-key": "1QWR5UQa0VrqUZ6mA2pENw=="
        "connection": "Upgrade"
        "pragma": "no-cache"
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8"
     and payload Stream(PayloadDecoder { kind: Cell { value: Eof } })
[2022-12-01T02:07:40Z DEBUG ntex_io::io] unregister keep-alive timeout
[2022-12-01T02:07:40Z DEBUG ntex_io::io] unregister keep-alive timeout
[2022-12-01T02:07:40Z TRACE ntex::web::ws] Start ws handshake verification for "/ws/"
[2022-12-01T02:07:40Z TRACE ntex::web::ws] Ws handshake verification completed for "/ws/"
[2022-12-01T02:07:40Z TRACE ntex::http::h1::dispatcher] Handler service consumed io, exit
[2022-12-01T02:07:40Z INFO  ntex::web::middleware::logger] 127.0.0.1:54937 "GET /ws/ HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36" 0.002790
[2022-12-01T02:07:40Z TRACE ntex_tokio::io] flushed 194 bytes
[2022-12-01T02:07:40Z DEBUG ntex_io::io] start keep-alive timeout 30s
[2022-12-01T02:07:40Z TRACE ntex_io::io] waking up io read task
[2022-12-01T02:07:40Z TRACE ntex_io::io] not enough data to decode next frame
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] flushed 2 bytes
[2022-12-01T02:07:45Z TRACE ntex_io::tasks] new 6 bytes available, wakeup dispatcher
WS Frame: Pong(b"")
[2022-12-01T02:07:45Z TRACE ntex_io::io] waking up io read task
[2022-12-01T02:07:45Z TRACE ntex_io::io] not enough data to decode next frame
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] flushed 2 bytes
[2022-12-01T02:07:45Z TRACE ntex_io::tasks] new 6 bytes available, wakeup dispatcher
WS Frame: Close(None)
[2022-12-01T02:07:45Z TRACE ntex_io::io] waking up io read task
[2022-12-01T02:07:45Z TRACE ntex_io::io] not enough data to decode next frame
[2022-12-01T02:07:45Z TRACE ntex_io::io] initiate io shutdown DSP_STOP | KEEPALIVE
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] write task is instructed to shutdown
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] flushed 2 bytes
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] read task is instructed to shutdown
[2022-12-01T02:07:45Z TRACE ntex_io::dispatcher] dispatcher is instructed to stop
[2022-12-01T02:07:45Z DEBUG ntex_io::io] unregister keep-alive timeout
[2022-12-01T02:07:45Z TRACE ntex_tokio::io] write task is stopped
[2022-12-01T02:07:45Z DEBUG ntex_io::io] unregister keep-alive timeout
[2022-12-01T02:07:45Z TRACE ntex_io::dispatcher] service shutdown is completed, stop
[2022-12-01T02:07:45Z DEBUG ntex_io::io] unregister keep-alive timeout
[2022-12-01T02:07:45Z TRACE ntex_io::io] io is dropped, force stopping io streams IO_STOPPED | IO_STOPPING | IO_STOPPING_FILTERS | KEEPALIVE
[2022-12-01T02:07:45Z TRACE ntex_io::ioref] force close io stream object
[2022-12-01T02:07:45Z TRACE ntex::web::ws] Ws handler is terminated: Ok(())
Connection is dropped, stop heartbeat task

Incorrect use of `assume_init`

By coincidence, I noticed this code in your crate:

ntex/ntex-bytes/src/bytes.rs

Lines 2965 to 2966 in fb6c16f

#[allow(invalid_value, clippy::uninit_assumed_init)]
let mut inner: Inner = mem::MaybeUninit::uninit().assume_init();

This violates the safety condition of assume_init: it is not correct to call assume_init until all the fields have actually been initialized. (That's also why lints warn strongly against doing that. This is the same level of "wrong" as C code that causes a signed integer overflow.) This can probably be fixed by keeping inner at type MaybeUninit<inner> and calling inner.assume_init() only at the very end, when the function returns.

Please come back

I have learned a lot with your code. I'm sure I have a lot to learn. I would not mind contributing financially, but surprise me again with your solutions. It's a desperate attempt, could you go back to open source?

ntex-h2 not compatible with latest Chrome browser

ntex-h2's impl is not compatible with latest Chrome browser and Opera.
It's ok on other browsers (Firefox, Safari) and curl.

The browser complains ERR_HTTP2_COMPRESSION_ERROR .

These are the full request trace log:

[2022-07-09T02:43:34Z TRACE ntex::server::accept] Accepting connection: Tcp(TcpStream { addr: 45.77.181.253:443, peer: 103.70.220.21:53441, fd: 18 }) bp: false
[2022-07-09T02:43:34Z TRACE ntex::server::accept] Sent to worker 0
[2022-07-09T02:43:34Z TRACE ntex::server::worker] Got socket for service: "ntex-web-service-0.0.0.0:443"
[2022-07-09T02:43:34Z TRACE ntex_io::tasks] new 1 bytes available, wakeup dispatcher
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] flushed 4408 bytes
[2022-07-09T02:43:34Z TRACE ntex_io::io] waking up io read task
[2022-07-09T02:43:34Z TRACE ntex_io::tasks] new 1 bytes available, wakeup dispatcher
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] flushed 218 bytes
[2022-07-09T02:43:34Z TRACE ntex::http::service] New http connection, peer address Some(103.70.220.21:53441)
[2022-07-09T02:43:34Z TRACE ntex_io::io] waking up io read task
[2022-07-09T02:43:34Z TRACE ntex_io::tasks] new 515 bytes available, wakeup dispatcher
[2022-07-09T02:43:34Z TRACE ntex_io::io] waking up io read task
[2022-07-09T02:43:34Z DEBUG ntex_h2::server::service] Preface has been received
[2022-07-09T02:43:34Z DEBUG ntex_h2::connection] Sending local settings Settings { flags: (0x0), enable_push: 0, max_concurrent_streams: 256 }
[2022-07-09T02:43:34Z TRACE ntex_h2::frame::settings] encoding SETTINGS; len=Settings { flags: (0x0), enable_push: 0, max_concurrent_streams: 256 }
[2022-07-09T02:43:34Z TRACE ntex_h2::frame::settings] encoding setting; val=EnablePush(0)
[2022-07-09T02:43:34Z TRACE ntex_h2::frame::settings] encoding setting; val=MaxConcurrentStreams(256)
[2022-07-09T02:43:34Z DEBUG ntex_h2::connection] Sending connection window update to 983041
[2022-07-09T02:43:34Z TRACE ntex_h2::frame::window_update] encoding WINDOW_UPDATE; id=StreamId(0), inc=983041
[2022-07-09T02:43:34Z TRACE ntex_h2::codec] decoding Settings frame, frame buf len 33
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Settings { flags: (0x0), header_table_size: 65536, max_concurrent_streams: 1000, initial_window_size: 6291456, max_header_list_size: 262144 })
[2022-07-09T02:43:34Z TRACE ntex_h2::connection] processing incoming settings: Settings {
        flags: (0x0),
        header_table_size: 65536,
        max_concurrent_streams: 1000,
        initial_window_size: 6291456,
        max_header_list_size: 262144,
    }
[2022-07-09T02:43:34Z TRACE ntex_h2::frame::settings] encoding SETTINGS; len=Settings { flags: (0x1: ACK) }
[2022-07-09T02:43:34Z TRACE ntex_h2::connection] Update remote initial window size to 6291456 from 65535
[2022-07-09T02:43:34Z TRACE ntex_h2::codec] decoding WindowUpdate frame, frame buf len 13
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(WindowUpdate { stream_id: StreamId(0), size_increment: 15663105 })
[2022-07-09T02:43:34Z TRACE ntex_h2::connection] processing incoming WindowUpdate {
        stream_id: StreamId(
            0,
        ),
        size_increment: 15663105,
    }
[2022-07-09T02:43:34Z TRACE ntex_h2::window] inc_window; sz=15663105; old=65535; new=15728640
[2022-07-09T02:43:34Z TRACE ntex_h2::codec] decoding Headers frame, frame buf len 445
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Headers { stream_id: StreamId(1), flags: (0x25: END_HEADERS | END_STREAM | PRIORITY), pseudo: PseudoHeaders { method: Some(GET), scheme: Some("https"), authority: Some("clia.tech"), path: Some("/"), protocol: None, status: None } })
[2022-07-09T02:43:34Z DEBUG ntex_h2::stream] processing HEADERS for StreamId(1):
    Headers {
        stream_id: StreamId(
            1,
        ),
        flags: (0x25: END_HEADERS | END_STREAM | PRIORITY),
        pseudo: PseudoHeaders {
            method: Some(
                GET,
            ),
            scheme: Some(
                "https",
            ),
            authority: Some(
                "clia.tech",
            ),
            path: Some(
                "/",
            ),
            protocol: None,
            status: None,
        },
    }
    recv_state:Idle, send_state: Idle
[2022-07-09T02:43:34Z TRACE ntex_h2::stream] StreamId(1) receive side is closed
[2022-07-09T02:43:34Z TRACE ntex::http::h2::service] StreamId(1) got request (eof: true): PseudoHeaders {
        method: Some(
            GET,
        ),
        scheme: Some(
            "https",
        ),
        authority: Some(
            "clia.tech",
        ),
        path: Some(
            "/",
        ),
        protocol: None,
        status: None,
    }
    headers: HeaderMap {
        inner: {
            "sec-ch-ua-platform": One(
                "\"macOS\"",
            ),
            "accept": One(
                "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            ),
            "sec-fetch-user": One(
                "?1",
            ),
            "accept-language": One(
                "zh-CN,zh;q=0.9",
            ),
            "user-agent": One(
                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
            ),
            "sec-fetch-mode": One(
                "navigate",
            ),
            "sec-fetch-site": One(
                "none",
            ),
            "accept-encoding": One(
                "gzip, deflate, br",
            ),
            "sec-ch-ua": One(
                "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
            ),
            "sec-ch-ua-mobile": One(
                "?0",
            ),
            "upgrade-insecure-requests": One(
                "1",
            ),
            "sec-fetch-dest": One(
                "document",
            ),
        },
    }
[2022-07-09T02:43:34Z DEBUG ntex::http::h2::service] Received service response: ResponseHead { version: HTTP/1.1, status: 200, headers: HeaderMap { inner: {"last-modified": One("Thu, 07 Jul 2022 09:15:35 GMT"), "accept-ranges": One("bytes"), "date": One("Sat, 09 Jul 2022 02:43:34 GMT"), "content-type": One("text/html"), "etag": One("\"8af:9af:62c6a437:13fef17c\""), "content-length": One("2479"), "content-disposition": One("inline; filename=\"index.html\"")} }, reason: None, io: None, extensions: RefCell { value: Extensions }, flags: (empty) } payload: Sized(2479)
[2022-07-09T02:43:34Z TRACE ntex_io::io] not enough data to decode next frame
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] flushed 258 bytes
[2022-07-09T02:43:34Z DEBUG ntex_h2::connection] start http client ping/pong task
[2022-07-09T02:43:34Z DEBUG ntex::http::h2::service] StreamId(1) sending data chunk 2479 bytes
[2022-07-09T02:43:34Z DEBUG ntex_h2::stream] StreamId(1) sending 2479 bytes, eof: false, send: Payload
[2022-07-09T02:43:34Z TRACE ntex_h2::window] dec_window; sz=2479; window=6291456
[2022-07-09T02:43:34Z DEBUG ntex::http::h2::service] StreamId(1) closing sending payload
[2022-07-09T02:43:34Z DEBUG ntex_h2::stream] StreamId(1) sending 0 bytes, eof: true, send: Payload
[2022-07-09T02:43:34Z TRACE ntex_h2::stream] StreamId(1) send side is closed with reason None
[2022-07-09T02:43:34Z TRACE ntex_h2::stream] StreamId(1) both sides are closed, dropping stream
[2022-07-09T02:43:34Z TRACE ntex_h2::window] dec_window; sz=0; window=6288977
[2022-07-09T02:43:34Z INFO  ntex::web::middleware::logger] 103.70.220.21:53441 "GET / HTTP/2.0" 200 2479 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" 0.002768
[2022-07-09T02:43:34Z TRACE ntex_io::io] not enough data to decode next frame
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] flushed 2539 bytes
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] tokio stream is disconnected
[2022-07-09T02:43:34Z TRACE ntex_io::tasks] new 107 bytes available, wakeup dispatcher
[2022-07-09T02:43:34Z TRACE ntex_h2::codec] decoding Settings frame, frame buf len 9
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Settings { flags: (0x1: ACK) })
[2022-07-09T02:43:34Z TRACE ntex_h2::connection] processing incoming settings: Settings {
        flags: (0x1: ACK),
    }
[2022-07-09T02:43:34Z TRACE ntex_h2::codec] decoding GoAway frame, frame buf len 98
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(GoAway { error_code: COMPRESSION_ERROR, last_stream_id: StreamId(0), data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING)." })
[2022-07-09T02:43:34Z TRACE ntex_h2::dispatcher] processing GoAway: GoAway {
        error_code: COMPRESSION_ERROR,
        last_stream_id: StreamId(
            0,
        ),
        data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING).",
    }
[2022-07-09T02:43:34Z TRACE ntex_h2::connection] processing go away with reason: COMPRESSION_ERROR, data: b"Framer error: 23 (HP"
[2022-07-09T02:43:34Z TRACE ntex::http::h2::service] Control message: GoAway(GoAway(GoAway { error_code: COMPRESSION_ERROR, last_stream_id: StreamId(0), data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING)." }))
[2022-07-09T02:43:34Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Disconnect(None)
[2022-07-09T02:43:34Z TRACE ntex::http::h2::service] Control message: PeerGone(PeerGone(None))
[2022-07-09T02:43:34Z TRACE ntex::http::h2::service] Control message: Terminated(Terminated { is_error: false })
[2022-07-09T02:43:34Z TRACE ntex_io::dispatcher] service shutdown is completed, stop
[2022-07-09T02:43:34Z TRACE ntex_io::io] io is dropped, force stopping io streams IO_STOPPED | IO_STOPPING | IO_STOPPING_FILTERS | RD_READY | DSP_STOP | KEEPALIVE
[2022-07-09T02:43:34Z TRACE ntex_io::ioref] force close io stream object
[2022-07-09T02:43:34Z TRACE ntex_tokio::io] write task is instructed to terminate
[2022-07-09T02:43:35Z TRACE ntex::server::accept] Accepting connection: Tcp(TcpStream { addr: 45.77.181.253:443, peer: 103.70.220.21:53450, fd: 18 }) bp: false
[2022-07-09T02:43:35Z TRACE ntex::server::accept] Sent to worker 0
[2022-07-09T02:43:35Z TRACE ntex::server::worker] Got socket for service: "ntex-web-service-0.0.0.0:443"
[2022-07-09T02:43:35Z TRACE ntex_io::tasks] new 1 bytes available, wakeup dispatcher
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] flushed 142 bytes
[2022-07-09T02:43:35Z TRACE ntex_io::io] waking up io read task
[2022-07-09T02:43:35Z TRACE ntex_io::tasks] new 525 bytes available, wakeup dispatcher
[2022-07-09T02:43:35Z TRACE ntex::http::service] New http connection, peer address Some(103.70.220.21:53450)
[2022-07-09T02:43:35Z DEBUG ntex_h2::server::service] Preface has been received
[2022-07-09T02:43:35Z DEBUG ntex_h2::connection] Sending local settings Settings { flags: (0x0), enable_push: 0, max_concurrent_streams: 256 }
[2022-07-09T02:43:35Z TRACE ntex_h2::frame::settings] encoding SETTINGS; len=Settings { flags: (0x0), enable_push: 0, max_concurrent_streams: 256 }
[2022-07-09T02:43:35Z TRACE ntex_h2::frame::settings] encoding setting; val=EnablePush(0)
[2022-07-09T02:43:35Z TRACE ntex_h2::frame::settings] encoding setting; val=MaxConcurrentStreams(256)
[2022-07-09T02:43:35Z DEBUG ntex_h2::connection] Sending connection window update to 983041
[2022-07-09T02:43:35Z TRACE ntex_h2::frame::window_update] encoding WINDOW_UPDATE; id=StreamId(0), inc=983041
[2022-07-09T02:43:35Z TRACE ntex_h2::codec] decoding Settings frame, frame buf len 33
[2022-07-09T02:43:35Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Settings { flags: (0x0), header_table_size: 65536, max_concurrent_streams: 1000, initial_window_size: 6291456, max_header_list_size: 262144 })
[2022-07-09T02:43:35Z TRACE ntex_h2::connection] processing incoming settings: Settings {
        flags: (0x0),
        header_table_size: 65536,
        max_concurrent_streams: 1000,
        initial_window_size: 6291456,
        max_header_list_size: 262144,
    }
[2022-07-09T02:43:35Z TRACE ntex_h2::frame::settings] encoding SETTINGS; len=Settings { flags: (0x1: ACK) }
[2022-07-09T02:43:35Z TRACE ntex_h2::connection] Update remote initial window size to 6291456 from 65535
[2022-07-09T02:43:35Z TRACE ntex_h2::codec] decoding WindowUpdate frame, frame buf len 13
[2022-07-09T02:43:35Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(WindowUpdate { stream_id: StreamId(0), size_increment: 15663105 })
[2022-07-09T02:43:35Z TRACE ntex_h2::connection] processing incoming WindowUpdate {
        stream_id: StreamId(
            0,
        ),
        size_increment: 15663105,
    }
[2022-07-09T02:43:35Z TRACE ntex_h2::window] inc_window; sz=15663105; old=65535; new=15728640
[2022-07-09T02:43:35Z TRACE ntex_h2::codec] decoding Headers frame, frame buf len 454
[2022-07-09T02:43:35Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Headers { stream_id: StreamId(1), flags: (0x25: END_HEADERS | END_STREAM | PRIORITY), pseudo: PseudoHeaders { method: Some(GET), scheme: Some("https"), authority: Some("clia.tech"), path: Some("/"), protocol: None, status: None } })
[2022-07-09T02:43:35Z DEBUG ntex_h2::stream] processing HEADERS for StreamId(1):
    Headers {
        stream_id: StreamId(
            1,
        ),
        flags: (0x25: END_HEADERS | END_STREAM | PRIORITY),
        pseudo: PseudoHeaders {
            method: Some(
                GET,
            ),
            scheme: Some(
                "https",
            ),
            authority: Some(
                "clia.tech",
            ),
            path: Some(
                "/",
            ),
            protocol: None,
            status: None,
        },
    }
    recv_state:Idle, send_state: Idle
[2022-07-09T02:43:35Z TRACE ntex_h2::stream] StreamId(1) receive side is closed
[2022-07-09T02:43:35Z TRACE ntex::http::h2::service] StreamId(1) got request (eof: true): PseudoHeaders {
        method: Some(
            GET,
        ),
        scheme: Some(
            "https",
        ),
        authority: Some(
            "clia.tech",
        ),
        path: Some(
            "/",
        ),
        protocol: None,
        status: None,
    }
    headers: HeaderMap {
        inner: {
            "sec-ch-ua-platform": One(
                "\"macOS\"",
            ),
            "accept": One(
                "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            ),
            "sec-fetch-user": One(
                "?1",
            ),
            "accept-language": One(
                "zh-CN,zh;q=0.9",
            ),
            "user-agent": One(
                "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
            ),
            "cache-control": One(
                "max-age=0",
            ),
            "sec-fetch-mode": One(
                "navigate",
            ),
            "sec-fetch-site": One(
                "none",
            ),
            "accept-encoding": One(
                "gzip, deflate, br",
            ),
            "sec-ch-ua": One(
                "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"",
            ),
            "sec-ch-ua-mobile": One(
                "?0",
            ),
            "upgrade-insecure-requests": One(
                "1",
            ),
            "sec-fetch-dest": One(
                "document",
            ),
        },
    }
[2022-07-09T02:43:35Z DEBUG ntex::http::h2::service] Received service response: ResponseHead { version: HTTP/1.1, status: 200, headers: HeaderMap { inner: {"content-type": One("text/html"), "date": One("Sat, 09 Jul 2022 02:43:35 GMT"), "last-modified": One("Thu, 07 Jul 2022 09:15:35 GMT"), "etag": One("\"8af:9af:62c6a437:13fef17c\""), "accept-ranges": One("bytes"), "content-length": One("2479"), "content-disposition": One("inline; filename=\"index.html\"")} }, reason: None, io: None, extensions: RefCell { value: Extensions }, flags: (empty) } payload: Sized(2479)
[2022-07-09T02:43:35Z DEBUG ntex::http::h2::service] StreamId(1) sending data chunk 2479 bytes
[2022-07-09T02:43:35Z DEBUG ntex_h2::stream] StreamId(1) sending 2479 bytes, eof: false, send: Payload
[2022-07-09T02:43:35Z TRACE ntex_h2::window] dec_window; sz=2479; window=6291456
[2022-07-09T02:43:35Z DEBUG ntex::http::h2::service] StreamId(1) closing sending payload
[2022-07-09T02:43:35Z DEBUG ntex_h2::stream] StreamId(1) sending 0 bytes, eof: true, send: Payload
[2022-07-09T02:43:35Z TRACE ntex_h2::stream] StreamId(1) send side is closed with reason None
[2022-07-09T02:43:35Z TRACE ntex_h2::stream] StreamId(1) both sides are closed, dropping stream
[2022-07-09T02:43:35Z TRACE ntex_h2::window] dec_window; sz=0; window=6288977
[2022-07-09T02:43:35Z INFO  ntex::web::middleware::logger] 103.70.220.21:53450 "GET / HTTP/2.0" 200 2479 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" 0.001815
[2022-07-09T02:43:35Z TRACE ntex_io::io] waking up io read task
[2022-07-09T02:43:35Z TRACE ntex_io::io] not enough data to decode next frame
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] flushed 2797 bytes
[2022-07-09T02:43:35Z DEBUG ntex_h2::connection] start http client ping/pong task
[2022-07-09T02:43:35Z TRACE ntex_io::tasks] new 107 bytes available, wakeup dispatcher
[2022-07-09T02:43:35Z TRACE ntex_h2::codec] decoding Settings frame, frame buf len 9
[2022-07-09T02:43:35Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(Settings { flags: (0x1: ACK) })
[2022-07-09T02:43:35Z TRACE ntex_h2::connection] processing incoming settings: Settings {
        flags: (0x1: ACK),
    }
[2022-07-09T02:43:35Z TRACE ntex_h2::codec] decoding GoAway frame, frame buf len 98
[2022-07-09T02:43:35Z DEBUG ntex_h2::dispatcher] Handle h2 message: DispatchItem::Item(GoAway { error_code: COMPRESSION_ERROR, last_stream_id: StreamId(0), data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING)." })
[2022-07-09T02:43:35Z TRACE ntex_h2::dispatcher] processing GoAway: GoAway {
        error_code: COMPRESSION_ERROR,
        last_stream_id: StreamId(
            0,
        ),
        data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING).",
    }
[2022-07-09T02:43:35Z TRACE ntex_h2::connection] processing go away with reason: COMPRESSION_ERROR, data: b"Framer error: 23 (HP"
[2022-07-09T02:43:35Z TRACE ntex::http::h2::service] Control message: GoAway(GoAway(GoAway { error_code: COMPRESSION_ERROR, last_stream_id: StreamId(0), data: b"Framer error: 23 (HPACK_DYNAMIC_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING)." }))
[2022-07-09T02:43:35Z TRACE ntex_io::io] initiate io shutdown RD_READY | DSP_STOP | KEEPALIVE
[2022-07-09T02:43:35Z TRACE ntex_io::dispatcher] dispatcher is instructed to stop
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] initiate timeout delay for Millis(5000)
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] flushed 23 bytes
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] tokio stream is disconnected
[2022-07-09T02:43:35Z TRACE ntex_tokio::io] write task is instructed to terminate
[2022-07-09T02:43:35Z TRACE ntex::http::h2::service] Control message: Terminated(Terminated { is_error: false })
[2022-07-09T02:43:35Z TRACE ntex_io::dispatcher] service shutdown is completed, stop
[2022-07-09T02:43:35Z TRACE ntex_io::io] io is dropped, force stopping io streams IO_STOPPED | IO_STOPPING | IO_STOPPING_FILTERS | IO_FILTERS_TIMEOUT | RD_READY | KEEPALIVE
[2022-07-09T02:43:35Z TRACE ntex_io::ioref] force close io stream object

The cargo tree outputs:

distr v0.1.0 (/root/distr)
โ”œโ”€โ”€ acme-micro v0.12.0
โ”‚   โ”œโ”€โ”€ anyhow v1.0.58
โ”‚   โ”œโ”€โ”€ base64 v0.13.0
โ”‚   โ”œโ”€โ”€ lazy_static v1.4.0
โ”‚   โ”œโ”€โ”€ log v0.4.17
โ”‚   โ”‚   โ””โ”€โ”€ cfg-if v1.0.0
โ”‚   โ”œโ”€โ”€ openssl v0.10.40
โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”œโ”€โ”€ foreign-types v0.3.2
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ foreign-types-shared v0.1.1
โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”œโ”€โ”€ once_cell v1.13.0
โ”‚   โ”‚   โ”œโ”€โ”€ openssl-macros v0.1.0 (proc-macro)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ proc-macro2 v1.0.40
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ unicode-ident v1.0.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ quote v1.0.20
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ syn v1.0.98
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ unicode-ident v1.0.1
โ”‚   โ”‚   โ””โ”€โ”€ openssl-sys v0.9.74
โ”‚   โ”‚       โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”‚       [build-dependencies]
โ”‚   โ”‚       โ”œโ”€โ”€ autocfg v1.1.0
โ”‚   โ”‚       โ”œโ”€โ”€ cc v1.0.73
โ”‚   โ”‚       โ””โ”€โ”€ pkg-config v0.3.25
โ”‚   โ”œโ”€โ”€ serde v1.0.138
โ”‚   โ”‚   โ””โ”€โ”€ serde_derive v1.0.138 (proc-macro)
โ”‚   โ”‚       โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚       โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚       โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”œโ”€โ”€ serde_json v1.0.82
โ”‚   โ”‚   โ”œโ”€โ”€ itoa v1.0.2
โ”‚   โ”‚   โ”œโ”€โ”€ ryu v1.0.10
โ”‚   โ”‚   โ””โ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”œโ”€โ”€ time v0.1.44
โ”‚   โ”‚   โ””โ”€โ”€ libc v0.2.126
โ”‚   โ””โ”€โ”€ ureq v1.5.5
โ”‚       โ”œโ”€โ”€ base64 v0.13.0
โ”‚       โ”œโ”€โ”€ chunked_transfer v1.4.0
โ”‚       โ”œโ”€โ”€ cookie v0.14.4
โ”‚       โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚       โ”‚   โ””โ”€โ”€ time v0.2.27
โ”‚       โ”‚       โ”œโ”€โ”€ const_fn v0.4.9 (proc-macro)
โ”‚       โ”‚       โ”œโ”€โ”€ libc v0.2.126
โ”‚       โ”‚       โ”œโ”€โ”€ standback v0.2.17
โ”‚       โ”‚       โ”‚   [build-dependencies]
โ”‚       โ”‚       โ”‚   โ””โ”€โ”€ version_check v0.9.4
โ”‚       โ”‚       โ””โ”€โ”€ time-macros v0.1.1
โ”‚       โ”‚           โ”œโ”€โ”€ proc-macro-hack v0.5.19 (proc-macro)
โ”‚       โ”‚           โ””โ”€โ”€ time-macros-impl v0.1.2 (proc-macro)
โ”‚       โ”‚               โ”œโ”€โ”€ proc-macro-hack v0.5.19 (proc-macro)
โ”‚       โ”‚               โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚       โ”‚               โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚       โ”‚               โ”œโ”€โ”€ standback v0.2.17
โ”‚       โ”‚               โ”‚   [build-dependencies]
โ”‚       โ”‚               โ”‚   โ””โ”€โ”€ version_check v0.9.4
โ”‚       โ”‚               โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚       โ”‚       [build-dependencies]
โ”‚       โ”‚       โ””โ”€โ”€ version_check v0.9.4
โ”‚       โ”‚   [build-dependencies]
โ”‚       โ”‚   โ””โ”€โ”€ version_check v0.9.4
โ”‚       โ”œโ”€โ”€ cookie_store v0.12.0
โ”‚       โ”‚   โ”œโ”€โ”€ cookie v0.14.4 (*)
โ”‚       โ”‚   โ”œโ”€โ”€ idna v0.2.3
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ matches v0.1.9
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ unicode-bidi v0.3.8
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ unicode-normalization v0.1.21
โ”‚       โ”‚   โ”‚       โ””โ”€โ”€ tinyvec v1.6.0
โ”‚       โ”‚   โ”‚           โ””โ”€โ”€ tinyvec_macros v0.1.0
โ”‚       โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚       โ”‚   โ”œโ”€โ”€ publicsuffix v1.5.6
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ idna v0.2.3 (*)
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ url v2.2.2
โ”‚       โ”‚   โ”‚       โ”œโ”€โ”€ form_urlencoded v1.0.1
โ”‚       โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ matches v0.1.9
โ”‚       โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ percent-encoding v2.1.0
โ”‚       โ”‚   โ”‚       โ”œโ”€โ”€ idna v0.2.3 (*)
โ”‚       โ”‚   โ”‚       โ”œโ”€โ”€ matches v0.1.9
โ”‚       โ”‚   โ”‚       โ””โ”€โ”€ percent-encoding v2.1.0
โ”‚       โ”‚   โ”œโ”€โ”€ serde v1.0.138 (*)
โ”‚       โ”‚   โ”œโ”€โ”€ serde_json v1.0.82 (*)
โ”‚       โ”‚   โ”œโ”€โ”€ time v0.2.27 (*)
โ”‚       โ”‚   โ””โ”€โ”€ url v2.2.2 (*)
โ”‚       โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚       โ”œโ”€โ”€ once_cell v1.13.0
โ”‚       โ”œโ”€โ”€ qstring v0.7.2
โ”‚       โ”‚   โ””โ”€โ”€ percent-encoding v2.1.0
โ”‚       โ”œโ”€โ”€ rustls v0.19.1
โ”‚       โ”‚   โ”œโ”€โ”€ base64 v0.13.0
โ”‚       โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚       โ”‚   โ”œโ”€โ”€ ring v0.16.20
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ once_cell v1.13.0
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ spin v0.5.2
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ untrusted v0.7.1
โ”‚       โ”‚   โ”‚   [build-dependencies]
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ cc v1.0.73
โ”‚       โ”‚   โ”œโ”€โ”€ sct v0.6.1
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ ring v0.16.20 (*)
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ untrusted v0.7.1
โ”‚       โ”‚   โ””โ”€โ”€ webpki v0.21.4
โ”‚       โ”‚       โ”œโ”€โ”€ ring v0.16.20 (*)
โ”‚       โ”‚       โ””โ”€โ”€ untrusted v0.7.1
โ”‚       โ”œโ”€โ”€ url v2.2.2 (*)
โ”‚       โ”œโ”€โ”€ webpki v0.21.4 (*)
โ”‚       โ””โ”€โ”€ webpki-roots v0.21.1
โ”‚           โ””โ”€โ”€ webpki v0.21.4 (*)
โ”œโ”€โ”€ clia-ntex-files-mod v0.1.0
โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”œโ”€โ”€ derive_more v0.99.17 (proc-macro)
โ”‚   โ”‚   โ”œโ”€โ”€ convert_case v0.4.0
โ”‚   โ”‚   โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ””โ”€โ”€ rustc_version v0.4.0
โ”‚   โ”‚       โ””โ”€โ”€ semver v1.0.12
โ”‚   โ”œโ”€โ”€ futures v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ futures-channel v0.3.21
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ futures-sink v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ futures-executor v0.3.21
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-task v0.3.21
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ futures-util v0.3.21
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-channel v0.3.21 (*)
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-io v0.3.21
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-macro v0.3.21 (proc-macro)
โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-sink v0.3.21
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ futures-task v0.3.21
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ pin-utils v0.1.0
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ slab v0.4.6
โ”‚   โ”‚   โ”œโ”€โ”€ futures-io v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ futures-sink v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ futures-task v0.3.21
โ”‚   โ”‚   โ””โ”€โ”€ futures-util v0.3.21 (*)
โ”‚   โ”œโ”€โ”€ hyperx v1.4.0
โ”‚   โ”‚   โ”œโ”€โ”€ base64 v0.13.0
โ”‚   โ”‚   โ”œโ”€โ”€ bytes v1.1.0
โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.8
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v1.1.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fnv v1.0.7
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ itoa v1.0.2
โ”‚   โ”‚   โ”œโ”€โ”€ httpdate v1.0.2
โ”‚   โ”‚   โ”œโ”€โ”€ language-tags v0.3.2
โ”‚   โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚   โ”‚   โ””โ”€โ”€ unicase v2.6.0
โ”‚   โ”‚       [build-dependencies]
โ”‚   โ”‚       โ””โ”€โ”€ version_check v0.9.4
โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”œโ”€โ”€ mime_guess v2.0.4
โ”‚   โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”‚   โ””โ”€โ”€ unicase v2.6.0 (*)
โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ””โ”€โ”€ unicase v2.6.0 (*)
โ”‚   โ”œโ”€โ”€ ntex v0.5.20
โ”‚   โ”‚   โ”œโ”€โ”€ async-channel v1.6.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ concurrent-queue v1.2.2
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ cache-padded v1.2.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ event-listener v2.5.2
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”œโ”€โ”€ async-oneshot v0.5.0
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ futures-micro v0.5.0
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”œโ”€โ”€ base64 v0.13.0
โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”œโ”€โ”€ cookie v0.16.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ aes-gcm v0.9.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ aead v0.4.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ generic-array v0.14.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ typenum v1.15.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       [build-dependencies]
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ version_check v0.9.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ aes v0.7.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cipher v0.3.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ generic-array v0.14.5 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cpufeatures v0.2.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ opaque-debug v0.3.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cipher v0.3.0 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ctr v0.8.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ cipher v0.3.0 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ghash v0.4.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ opaque-debug v0.3.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ polyval v0.5.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ cpufeatures v0.2.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ opaque-debug v0.3.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ universal-hash v0.4.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ generic-array v0.14.5 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ subtle v2.4.1
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ subtle v2.4.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ base64 v0.13.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ hkdf v0.12.3
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ hmac v0.12.1
โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ digest v0.10.3
โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ block-buffer v0.10.2
โ”‚   โ”‚   โ”‚   โ”‚           โ”‚   โ””โ”€โ”€ generic-array v0.14.5 (*)
โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ crypto-common v0.1.4
โ”‚   โ”‚   โ”‚   โ”‚           โ”‚   โ”œโ”€โ”€ generic-array v0.14.5 (*)
โ”‚   โ”‚   โ”‚   โ”‚           โ”‚   โ””โ”€โ”€ typenum v1.15.0
โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ subtle v2.4.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ hmac v0.12.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ rand v0.8.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ rand_chacha v0.3.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ppv-lite86 v0.2.16
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ rand_core v0.6.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ getrandom v0.2.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ rand_core v0.6.3 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ sha2 v0.10.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cpufeatures v0.2.2
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ digest v0.10.3 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ subtle v2.4.1
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ time v0.3.11
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ itoa v1.0.2
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ num_threads v0.1.6
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ time-macros v0.2.4 (proc-macro)
โ”‚   โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ version_check v0.9.4
โ”‚   โ”‚   โ”œโ”€โ”€ encoding_rs v0.8.31
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.8 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ httparse v1.7.1
โ”‚   โ”‚   โ”œโ”€โ”€ httpdate v1.0.2
โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ mime v0.3.16
โ”‚   โ”‚   โ”œโ”€โ”€ nanorand v0.6.1
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bytes v1.1.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-codec v0.6.2
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-connect v0.1.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-http v0.1.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fxhash v0.2.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ byteorder v1.4.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-io v0.1.8
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-codec v0.6.2 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-sink v0.3.21
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-timer v3.0.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fxhash v0.2.1 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-rt v0.4.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ async-channel v1.6.1 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ async-oneshot v0.5.0 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ futures-core v0.3.21
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ tokio v1.19.2
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ bytes v1.1.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ mio v0.8.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ num_cpus v1.13.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ once_cell v1.13.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ parking_lot v0.12.1
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ lock_api v0.4.7
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ scopeguard v1.1.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ autocfg v1.1.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ parking_lot_core v0.9.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚       โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚       โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚       โ””โ”€โ”€ smallvec v1.9.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ signal-hook-registry v1.4.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ socket2 v0.4.4
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ tokio-macros v1.8.0 (proc-macro)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ slab v0.4.6
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-rt v0.4.5 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-tls v0.1.5
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-io v0.1.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ openssl v0.10.40 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ rustls v0.20.6
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ ring v0.16.20 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ sct v0.7.0
โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ”œโ”€โ”€ ring v0.16.20 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ untrusted v0.7.1
โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ webpki v0.22.0
โ”‚   โ”‚   โ”‚   โ”‚           โ”œโ”€โ”€ ring v0.16.20 (*)
โ”‚   โ”‚   โ”‚   โ”‚           โ””โ”€โ”€ untrusted v0.7.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-tokio v0.1.3
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-io v0.1.8 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17 (*)
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ tokio v1.19.2 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ openssl v0.10.40 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ rustls v0.20.6 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ thiserror v1.0.31
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ thiserror-impl v1.0.31 (proc-macro)
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ webpki-roots v0.22.3
โ”‚   โ”‚   โ”‚       โ””โ”€โ”€ webpki v0.22.0 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-h2 v0.1.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ bitflags v1.3.2
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ fxhash v0.2.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-codec v0.6.2 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-connect v0.1.0 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-http v0.1.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-io v0.1.8 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-rt v0.4.5 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ thiserror v1.0.31 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-http v0.1.1 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-io v0.1.8 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-macros v0.1.3 (proc-macro)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-router v0.5.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ http v0.2.8 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ntex-bytes v0.1.15 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ regex v1.6.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ aho-corasick v0.7.18
โ”‚   โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ regex-syntax v0.6.27
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-rt v0.4.5 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-service v0.3.1 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-tls v0.1.5 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-tokio v0.1.3 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ ntex-util v0.1.17 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ num_cpus v1.13.1 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ openssl v0.10.40 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚   โ”‚   โ”œโ”€โ”€ pin-project-lite v0.2.9
โ”‚   โ”‚   โ”œโ”€โ”€ polling v2.2.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ log v0.4.17 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ regex v1.6.0 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ rustls v0.20.6 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ serde_json v1.0.82 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ serde_urlencoded v0.7.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ form_urlencoded v1.0.1 (*)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ itoa v1.0.2
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ryu v1.0.10
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ sha-1 v0.10.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cpufeatures v0.2.2
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ digest v0.10.3 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ socket2 v0.4.4 (*)
โ”‚   โ”‚   โ”œโ”€โ”€ thiserror v1.0.31 (*)
โ”‚   โ”‚   โ””โ”€โ”€ webpki-roots v0.22.3 (*)
โ”‚   โ”œโ”€โ”€ percent-encoding v2.1.0
โ”‚   โ””โ”€โ”€ v_htmlescape v0.14.1
โ”‚       โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚       โ””โ”€โ”€ v_escape v0.18.0
โ”‚           โ”œโ”€โ”€ buf-min v0.6.1
โ”‚           โ””โ”€โ”€ v_escape_derive v0.9.1 (proc-macro)
โ”‚               โ””โ”€โ”€ syn v1.0.98 (*)
โ”œโ”€โ”€ clia-ntex-session v0.1.0
โ”‚   โ”œโ”€โ”€ cookie v0.16.0 (*)
โ”‚   โ”œโ”€โ”€ derive_more v0.99.17 (proc-macro) (*)
โ”‚   โ”œโ”€โ”€ futures v0.3.21 (*)
โ”‚   โ”œโ”€โ”€ ntex v0.5.20 (*)
โ”‚   โ”œโ”€โ”€ serde v1.0.138 (*)
โ”‚   โ”œโ”€โ”€ serde_json v1.0.82 (*)
โ”‚   โ””โ”€โ”€ time v0.3.11 (*)
โ”œโ”€โ”€ env_logger v0.9.0
โ”‚   โ”œโ”€โ”€ atty v0.2.14
โ”‚   โ”‚   โ””โ”€โ”€ libc v0.2.126
โ”‚   โ”œโ”€โ”€ humantime v2.1.0
โ”‚   โ”œโ”€โ”€ log v0.4.17 (*)
โ”‚   โ”œโ”€โ”€ regex v1.6.0 (*)
โ”‚   โ””โ”€โ”€ termcolor v1.1.3
โ”œโ”€โ”€ futures v0.3.21 (*)
โ”œโ”€โ”€ nginx-config v0.13.2
โ”‚   โ”œโ”€โ”€ combine v3.8.1
โ”‚   โ”‚   โ”œโ”€โ”€ ascii v0.9.3
โ”‚   โ”‚   โ”œโ”€โ”€ byteorder v1.4.3
โ”‚   โ”‚   โ”œโ”€โ”€ either v1.7.0
โ”‚   โ”‚   โ”œโ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ””โ”€โ”€ unreachable v1.0.0
โ”‚   โ”‚       โ””โ”€โ”€ void v1.0.2
โ”‚   โ”œโ”€โ”€ failure v0.1.8
โ”‚   โ”‚   โ”œโ”€โ”€ backtrace v0.3.65
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ addr2line v0.17.0
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ gimli v0.26.1
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ cfg-if v1.0.0
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ libc v0.2.126
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ miniz_oxide v0.5.3
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ adler v1.0.2
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ object v0.28.4
โ”‚   โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ memchr v2.5.0
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ rustc-demangle v0.1.21
โ”‚   โ”‚   โ”‚   [build-dependencies]
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ cc v1.0.73
โ”‚   โ”‚   โ””โ”€โ”€ failure_derive v0.1.8 (proc-macro)
โ”‚   โ”‚       โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚       โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚       โ”œโ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚       โ””โ”€โ”€ synstructure v0.12.6
โ”‚   โ”‚           โ”œโ”€โ”€ proc-macro2 v1.0.40 (*)
โ”‚   โ”‚           โ”œโ”€โ”€ quote v1.0.20 (*)
โ”‚   โ”‚           โ”œโ”€โ”€ syn v1.0.98 (*)
โ”‚   โ”‚           โ””โ”€โ”€ unicode-xid v0.2.3
โ”‚   โ”œโ”€โ”€ matches v0.1.9
โ”‚   โ””โ”€โ”€ strsim v0.7.0
โ”œโ”€โ”€ ntex v0.5.20 (*)
โ”œโ”€โ”€ openssl v0.10.40 (*)
โ”œโ”€โ”€ rustls v0.20.6 (*)
โ”œโ”€โ”€ rustls-pemfile v0.3.0
โ”‚   โ””โ”€โ”€ base64 v0.13.0
โ”œโ”€โ”€ serde v1.0.138 (*)
โ””โ”€โ”€ tokio v1.19.2 (*)

ntex vs actix

After going through the code, ntex appears to be more HTTP server-oriented while actix appears to be more suited for networking.

Is my assumption.

PS: thankyou for such great frameworks.

web support static_file

hi, I try to writer a web app, I find ntex::web doesn't support static_file, i think that it's basic functions for webapp dev.
thanks.

grpc

hi how to use grpc in ntex?

publish to crates.io

I can't use this ntex framework, because it's department Library also doesn't publish to crates.io

Unable to connect to the service through ntex-tls when openssl version is 1.0.2u

hi, when i connect to the google just only through openssl version 1.0.2u, it success, but when i try connnet service through ntex-tls,program error:

[2022-12-07 14:57:56.725][main] TRACE [ntex_connect::resolve:37] DNS resolver: resolving host "google.com"
[2022-12-07 14:57:56.730][main] TRACE [ntex_connect::resolve:57] DNS resolver: host "google.com" resolved to [172.217.24.78:443, [2404:6800:4005:80
f::200e]:443]
[2022-12-07 14:57:56.730][main] TRACE [ntex_connect::service:163] TCP connector - connecting to "google.com" port:443
[2022-12-07 14:57:56.730][main] TRACE [mio::poll:532] registering event source with poller: token=Token(0), interests=READABLE | WRITABLE
[2022-12-07 14:57:56.742][main] TRACE [ntex_connect::service:210] TCP connector - successfully connected to connecting to "google.com" - Some(172.2
17.24.78:443)
[2022-12-07 14:57:56.742][main] TRACE [ntex_connect::openssl:56] SSL Handshake start for: "google.com"
[2022-12-07 14:57:56.742][main] TRACE [ntex_tokio::io:347] flushed 517 bytes
[2022-12-07 14:57:56.830][main] TRACE [ntex_io::tasks:57] new 1 bytes available, wakeup dispatcher
[2022-12-07 14:57:56.830][main] TRACE [ntex_io::io:531] waking up io read task
[2022-12-07 14:57:56.833][main] TRACE [ntex_io::tasks:57] new 1 bytes available, wakeup dispatcher
[2022-12-07 14:57:56.981][main] TRACE [ntex_connect::openssl:70] SSL Handshake error: Error { code: ErrorCode(1), cause: Some(Ssl(ErrorStack([Error
 { code: 336085247, library: "SSL routines", function: "ssl3_connect", reason: "unknown state", file: "s3_clnt.c", line: 646 }]))) }
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Io(Custom { kind: Other, error: "error:140840FF:SSL routines:ssl3_connect:u
nknown state:s3_clnt.c:646:" })', src/bin/ntex-connector.rs:21:44

here is my code and the compile env(docker image).

ntex::connect::rustls::Connector hangs after handshake

When connecting to Azure Service Bus using ntex-amqp and using ntex::connect::rustls::Connector
it hangs after TLS handshake.

This happens because TlsClientFilter::create is calling complete_io when is_handshaking() is false
https://github.com/ntex-rs/ntex/blob/master/ntex-tls/src/rustls/client.rs#L202

Which results in complete_io always returning Err(Custom { kind: WouldBlock, error: "" }).

One way to fix this is to check session.is_handshaking() before calling complete_io.
For example:

if(!session.is_handshaking())
{
(Ok((0,0)), session.wants_read())
}
else
{
(session.complete_io(&mut wrp), session.wants_read())
}

After making this change I was able to connect to Azure Service Bus.

Mask TODO

// TODO: copy_nonoverlapping here compiles to call memcpy. While it is not so

https://rust.godbolt.org/z/Yd77E5

Would this be better?

use std::ptr::copy_nonoverlapping;

pub struct ShortSlice<'a>(&'a mut [u8]);

#[allow(clippy::needless_pass_by_value)]
pub fn xor_short(buf: ShortSlice<'_>, mask: u64) {
    // Unsafe: we know that a `ShortSlice` fits in a u64
    unsafe {
        let (ptr, len) = (buf.0.as_mut_ptr(), buf.0.len());
        let mut b: u64 = 0;
        #[allow(trivial_casts)]
        copy_nonoverlapping(ptr, &mut b as *mut _ as *mut u8, len);
        b ^= mask;
        #[allow(trivial_casts)]
        copy_nonoverlapping(&b as *const _ as *const u8, ptr, len);
    }
}

pub fn xor_short_new(buf: ShortSlice<'_>, mut mask: u64) {
    for i in buf.0.iter_mut() {
        *i ^= mask as u8;
        mask >>= 8;
    }
}

pub fn xor_short_unsafe(buf: ShortSlice<'_>, mask: u64) {
    // This may have flipped other bits, not sure if this is
    unsafe {
        let i = buf.0.as_mut_ptr().cast::<u64>();
        *i ^= mask;
    }
}
example::xor_short:
        push    r15
        push    r14
        push    r13
        push    r12
        push    rbx
        sub     rsp, 16
        mov     r14, rdx
        mov     r15, rsi
        mov     rbx, rdi
        mov     qword ptr [rsp + 8], 0
        lea     r12, [rsp + 8]
        mov     r13, qword ptr [rip + memcpy@GOTPCREL]
        mov     rdi, r12
        mov     rsi, rbx
        mov     rdx, r15
        call    r13
        xor     qword ptr [rsp + 8], r14
        mov     rdi, rbx
        mov     rsi, r12
        mov     rdx, r15
        call    r13
        add     rsp, 16
        pop     rbx
        pop     r12
        pop     r13
        pop     r14
        pop     r15
        ret

example::xor_short_new:
        test    rsi, rsi
        je      .LBB1_6
        lea     r8, [rsi - 1]
        mov     rcx, rsi
        mov     rax, rdi
        and     rcx, 3
        je      .LBB1_3
.LBB1_2:
        xor     byte ptr [rax], dl
        add     rax, 1
        shr     rdx, 8
        add     rcx, -1
        jne     .LBB1_2
.LBB1_3:
        cmp     r8, 3
        jb      .LBB1_6
        add     rdi, rsi
.LBB1_5:
        xor     byte ptr [rax], dl
        mov     rcx, rdx
        shr     rcx, 8
        xor     byte ptr [rax + 1], cl
        mov     rcx, rdx
        shr     rcx, 16
        xor     byte ptr [rax + 2], cl
        mov     rcx, rdx
        shr     rcx, 24
        xor     byte ptr [rax + 3], cl
        shr     rdx, 32
        add     rax, 4
        cmp     rax, rdi
        jne     .LBB1_5
.LBB1_6:
        ret

example::xor_short_unsafe:
        xor     qword ptr [rdi], rdx
        ret

[glommio] does it work?

Hello,
does using glommio instead of tokio currently work?

I've tried to use it, but it throws an exception in the ntex::main macro.
Can't remember exactly right now, but something with Incorrect Source Type.

Do I miss anything to get it to work with glommio or should it be a drop-in replacement for tokio?
There is no example or test where glommio would be used with ntex. Only the README points to it...

The confuse thing I want consult you.

hi @fafhrd91 , i 'm sorry to open this issure, but I don't know where to find you and get response.

current I use actix-web, it's cool, I want to create a async pg connect pool for it. then i find your work, you remove 'send, arc, mutex' and it wiil can't be used in Multithread right? so is it also whether need a Multithread connect pool ? I know like nodejs use redis no need Multithread connect pool .

can you Point me? whether there is new way?

cannot find function `block_on` in the crate root

Hi,

I'm still having some issues when trying to compile the example app shown on the documentation: https://docs.rs/ntex/latest/ntex/web/index.html

use ntex::web;

async fn index(info: web::types::Path<(String, u32)>) -> String {
    format!("Hello {}! id:{}", info.0, info.1)
}

#[ntex::main]
async fn main() -> std::io::Result<()> {
    web::server(|| web::App::new().service(
        web::resource("/{name}/{id}/index.html").to(index))
    )
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

Cargo.toml:

[dependencies]
ntex = { version = "*", features = ["async-std"] }

And these are the errors I'm getting:

error[E0425]: cannot find function `block_on` in the crate root
  --> xxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src\arbiter.rs:96:24
   |
96 |                 crate::block_on(async move {
   |                        ^^^^^^^^ not found in the crate root
   |
help: consider importing one of these items
   |
1  | use async_std::task::block_on;
   |
1  | use crate::asyncstd::block_on;

error[E0425]: cannot find function `spawn` in the crate root
  --> xxxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src\arbiter.rs:98:28
   |
98 |                     crate::spawn(ArbiterController {
   |                            ^^^^^ not found in the crate root
   |
help: consider importing one of these items
   |
1  | use async_std::task::spawn;
   |
1  | use crate::arbiter::thread::spawn;
   |
1  | use crate::asyncstd::spawn;
   |
1  | use std::thread::spawn;
error[E0425]: cannot find function `block_on` in the crate root
   --> xxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src\builder.rs:162:12
    |
162 |     crate::block_on(Box::pin(async move {
    |            ^^^^^^^^ not found in the crate root
    |
help: consider importing one of these items
    |
1   | use async_std::task::block_on;
    |
1   | use crate::asyncstd::block_on;
    |
error[E0425]: cannot find function `spawn` in the crate root
   --> xxxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src\builder.rs:163:16
    |
163 |         crate::spawn(arb);
    |                ^^^^^ not found in the crate root
    |
help: consider importing one of these items
    |
1   | use async_std::task::spawn;
    |
1   | use crate::asyncstd::spawn;
    |
1   | use std::thread::spawn;
    |

Rust version on Windows 10 x64

~ $ rustc --version
rustc 1.61.0 (fe5b13d68 2022-05-18)

Thanks!

could not find `glommio` in the crate root

Hi,

I'm having some issues when trying to compile the example app shown on the documentation: https://docs.rs/ntex/latest/ntex/web/index.html

use ntex::web;

async fn index(info: web::types::Path<(String, u32)>) -> String {
    format!("Hello {}! id:{}", info.0, info.1)
}

#[ntex::main]
async fn main() -> std::io::Result<()> {
    web::server(|| web::App::new().service(
        web::resource("/{name}/{id}/index.html").to(index))
    )
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

And this is the error I'm getting:

error[E0432]: unresolved imports `self::glommio`, `crate::System`
   --> xxxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src/lib.rs:254:15
    |
254 | pub use self::glommio::*;
    |               ^^^^^^^ could not find `glommio` in the crate root
    |
   ::: xxxxx\rustup\.cargo\registry\src\github.com-1ecc6299db9ec823\ntex-rt-0.4.4\src\builder.rs:7:5
    |
7   | use crate::System;
    |     ^^^^^^^^^^^^^

Rust version on Windows 10 x64

~ $ rustc --version
rustc 1.58.0 (02072b482 2022-01-11)

Thanks!

[glommio] does it work?

no it doesn't... ;-)

# Cargo.toml
[package]
name = "glommio-test"
version = "0.1.0"
edition = "2021"
publish = false

[dependencies]
ntex = { version = "0.5.27", features = ["glommio", "rustls", "url"] }
// src/main.rs

#[ntex::main]
async fn main() -> Result<(), std::io::Error> {
    Ok(())
}
$ RUST_BACKTRACE=full cargo r

    Finished dev [unoptimized + debuginfo] target(s) in 0.32s
     Running `target/debug/glommio-test`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Custom { kind: InvalidData, error: "Incorrect source type!" }', /home/makolb/.cargo/registry/src/github.com-1ecc6299db9ec823/glommio-0.7.0/src/executor/mod.rs:1520:14
stack backtrace:
   0:     0x55ee728ead0d - std::backtrace_rs::backtrace::libunwind::trace::h9135f25bc195152c
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55ee728ead0d - std::backtrace_rs::backtrace::trace_unsynchronized::h015ee85be510df51
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55ee728ead0d - std::sys_common::backtrace::_print_fmt::h5fad03caa9652a2c
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:66:5
   3:     0x55ee728ead0d - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h2b42ca28d244e5c7
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:45:22
   4:     0x55ee7290682c - core::fmt::write::h401e827d053130ed
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/fmt/mod.rs:1198:17
   5:     0x55ee728e8781 - std::io::Write::write_fmt::hffec93268f5cde32
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/io/mod.rs:1672:15
   6:     0x55ee728ec4d5 - std::sys_common::backtrace::_print::h180c4c706ee1d3fb
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:48:5
   7:     0x55ee728ec4d5 - std::sys_common::backtrace::print::hd0c35d18765761c9
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:35:9
   8:     0x55ee728ec4d5 - std::panicking::default_hook::{{closure}}::h1f023310983bc730
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:295:22
   9:     0x55ee728ec1f1 - std::panicking::default_hook::h188fec3334afd5be
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:314:9
  10:     0x55ee728eca66 - std::panicking::rust_panic_with_hook::hf26e9d4f97b40096
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:698:17
  11:     0x55ee728ec957 - std::panicking::begin_panic_handler::{{closure}}::hfab912107608087a
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:588:13
  12:     0x55ee728eb204 - std::sys_common::backtrace::__rust_end_short_backtrace::h434b685ce8d9965b
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:138:18
  13:     0x55ee728ec689 - rust_begin_unwind
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:584:5
  14:     0x55ee72652cd3 - core::panicking::panic_fmt::ha6dc7f2ab2479463
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/panicking.rs:142:14
  15:     0x55ee72652d63 - core::result::unwrap_failed::h42ad8e915aa0a906
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/result.rs:1814:5
  16:     0x55ee726b1e55 - core::result::Result<T,E>::unwrap::h07369350e655fa1e
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/result.rs:1107:23
  17:     0x55ee726f5a7d - <glommio::executor::LocalExecutor as core::default::Default>::default::h5b96318f94c9a781
                               at /home/makolb/.cargo/registry/src/github.com-1ecc6299db9ec823/glommio-0.7.0/src/executor/mod.rs:1518:9
  18:     0x55ee726547da - ntex_rt::glommio::block_on::he2613a9674b3c807
                               at /home/makolb/.cargo/registry/src/github.com-1ecc6299db9ec823/ntex-rt-0.4.6/src/lib.rs:23:18
  19:     0x55ee72659cb5 - ntex_rt::builder::block_on::hda206907e10982bd
                               at /home/makolb/.cargo/registry/src/github.com-1ecc6299db9ec823/ntex-rt-0.4.6/src/builder.rs:162:5
  20:     0x55ee72659724 - ntex_rt::builder::SystemRunner::block_on::h2de721a0c7320a17
                               at /home/makolb/.cargo/registry/src/github.com-1ecc6299db9ec823/ntex-rt-0.4.6/src/builder.rs:133:15
  21:     0x55ee7265d28e - glommio_test::main::ha7fb3ac792306e61
                               at /home/makolb/temp/glommio-test/src/main.rs:1:1
  22:     0x55ee7265e29b - core::ops::function::FnOnce::call_once::hd73b4527a59a9047
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:248:5
  23:     0x55ee72655ade - std::sys_common::backtrace::__rust_begin_short_backtrace::h2f9ab552ffb86684
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/sys_common/backtrace.rs:122:18
  24:     0x55ee72655b91 - std::rt::lang_start::{{closure}}::ha06663868ed023c4
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:145:18
  25:     0x55ee728e47de - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::hcdfee62722e5e4b8
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/core/src/ops/function.rs:280:13
  26:     0x55ee728e47de - std::panicking::try::do_call::h84ca51609826746f
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:492:40
  27:     0x55ee728e47de - std::panicking::try::hd58075e533b8e0cb
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:456:19
  28:     0x55ee728e47de - std::panic::catch_unwind::h1ebac24d83cb6ce2
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panic.rs:137:14
  29:     0x55ee728e47de - std::rt::lang_start_internal::{{closure}}::h0145388a1edd1640
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:128:48
  30:     0x55ee728e47de - std::panicking::try::do_call::h7630182e534a0a32
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:492:40
  31:     0x55ee728e47de - std::panicking::try::h05b6544f0c6331dc
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panicking.rs:456:19
  32:     0x55ee728e47de - std::panic::catch_unwind::h77b2ba8fd3309f34
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/panic.rs:137:14
  33:     0x55ee728e47de - std::rt::lang_start_internal::h6612c8a7a6861b8b
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:128:20
  34:     0x55ee72655b60 - std::rt::lang_start::h0c93b7ca8bb95fb2
                               at /rustc/a55dd71d5fb0ec5a6a3a9e8c27b2127ba491ce52/library/std/src/rt.rs:144:17
  35:     0x55ee7265d2ec - main
  36:     0x7f3f60a4329d - __libc_start_main
  37:     0x55ee72652f6a - _start
                               at /home/abuild/rpmbuild/BUILD/glibc-2.31/csu/../sysdeps/x86_64/start.S:120
  38:                0x0 - <unknown>
Panic in Arbiter thread.
$ cargo version -v
cargo 1.64.0 (387270bc7 2022-09-16)
release: 1.64.0
commit-hash: 387270bc7f446d17869c7f208207c73231d6a252
commit-date: 2022-09-16
host: x86_64-unknown-linux-gnu
libgit2: 1.4.2 (sys:0.14.2 vendored)
libcurl: 7.83.1-DEV (sys:0.4.55+curl-7.83.1 vendored ssl:OpenSSL/1.1.1q)
os: openSUSE 15.4 [64-bit]

ntex http client adds `content-length: 0` to GET/HEAD/... requests

Hello! First of all, thanks for the great project.

I noticed that ntex http client adds content-length: 0 to HTTP/1.1 requests to methods that does not define semantics for request bodies (GET/HEAD/DELETE/TRACE/CONNECT).

According the RFC7230:

A user agent SHOULD NOT send a Content-Length header field when the request message does not contain
a payload body and the method semantics do not anticipate such a body.

Technically this behavior is valid but not recommented and not all websites respects that.
Is this an expected behavior or a bug (probably inherited from the actix http client)?

For example, https://cr.yp.to/ website does not respect such get requests.

    let client = Client::new();
    let mut response = client
        .get("https://cr.yp.to/")
        .send()
        .await?;

    println!("Response: {:?}", response);
    let body = response.body().await.unwrap();
    let body = String::from_utf8_lossy(&body);
    println!("{}", body);

It prints

ClientResponse HTTP/1.1 501 Not Implemented
  headers:
    "connection": "close"
    "content-type": "text/html"
    "server": "publicfile"
    "date": "Thu, 26 Aug 2021 13:52:31 GMT"
    "content-length": "52"

<html><body>I do not accept messages</body></html>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.