update quiche, boringssl

This commit is contained in:
Ezra Barrow 2023-08-23 12:18:42 -05:00
parent 0b814ea5c1
commit dfbcca3a91
No known key found for this signature in database
GPG Key ID: 5EF8BA3CE9180419
5 changed files with 167 additions and 110 deletions

195
Cargo.lock generated
View File

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "addr2line"
version = "0.20.0"
version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [
"gimli",
]
@ -43,9 +43,9 @@ dependencies = [
[[package]]
name = "anstyle"
version = "1.0.1"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
[[package]]
name = "anstyle-parse"
@ -77,9 +77,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.72"
version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
dependencies = [
"backtrace",
]
@ -106,9 +106,9 @@ dependencies = [
[[package]]
name = "backtrace"
version = "0.3.68"
version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [
"addr2line",
"cc",
@ -127,11 +127,11 @@ checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
[[package]]
name = "bindgen"
version = "0.60.1"
version = "0.66.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6"
checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"cexpr",
"clang-sys",
"lazy_static",
@ -142,6 +142,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
"syn",
]
[[package]]
@ -158,25 +159,27 @@ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "boring"
version = "2.1.0"
version = "3.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c713ad6d8d7a681a43870ac37b89efd2a08015ceb4b256d82707509c1f0b6bb"
checksum = "2f9aa560ebe73bcf696f83e70c0c3840e20506dfa4b0531eb3394f591489030f"
dependencies = [
"bitflags 1.3.2",
"boring-sys",
"foreign-types",
"lazy_static",
"libc",
"once_cell",
]
[[package]]
name = "boring-sys"
version = "2.1.0"
version = "3.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7663d3069437a5ccdb2b5f4f481c8b80446daea10fa8503844e89ac65fcdc363"
checksum = "7c911b5e71589a68226571982d3f67ef03034c6efddd1b5d7bbd02d54aeda579"
dependencies = [
"bindgen",
"cmake",
"fs_extra",
"fslock",
]
[[package]]
@ -193,9 +196,9 @@ checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
[[package]]
name = "cc"
version = "1.0.82"
version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
dependencies = [
"libc",
]
@ -228,9 +231,9 @@ dependencies = [
[[package]]
name = "clap"
version = "4.3.21"
version = "4.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
checksum = "fb690e81c7840c0d7aade59f242ea3b41b9bc27bcd5997890e7702ae4b32e487"
dependencies = [
"clap_builder",
"clap_derive",
@ -239,9 +242,9 @@ dependencies = [
[[package]]
name = "clap_builder"
version = "4.3.21"
version = "4.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
checksum = "5ed2e96bc16d8d740f6f48d663eddf4b8a0983e79210fd55479b7bcd0a69860e"
dependencies = [
"anstream",
"anstyle",
@ -336,9 +339,15 @@ dependencies = [
[[package]]
name = "deranged"
version = "0.3.7"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929"
checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
[[package]]
name = "either"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "equivalent"
@ -404,6 +413,22 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
[[package]]
name = "fs_extra"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
[[package]]
name = "fslock"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "futures-core"
version = "0.3.28"
@ -423,9 +448,9 @@ dependencies = [
[[package]]
name = "gimli"
version = "0.27.3"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "glob"
@ -447,9 +472,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
version = "0.3.1"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
[[package]]
name = "indenter"
@ -476,6 +501,15 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "intrusive-collections"
version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b694dc9f70c3bda874626d2aed13b780f137aab435f4e9814121955cf706122e"
dependencies = [
"memoffset",
]
[[package]]
name = "is-terminal"
version = "0.4.9"
@ -558,6 +592,15 @@ version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
@ -618,9 +661,9 @@ dependencies = [
[[package]]
name = "object"
version = "0.31.1"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
dependencies = [
"memchr",
]
@ -711,18 +754,20 @@ dependencies = [
[[package]]
name = "quiche"
version = "0.17.2"
version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d9e4fa8718d45fd25dd89c196e128d6c3527b5b1735db47eb4bdb9ba3e4cc1c"
checksum = "1442ef26c02f927e0fdf0fb590acf2cd2c5dbe202bdf1470ef6117f350d72783"
dependencies = [
"boring",
"cmake",
"either",
"foreign-types-shared",
"lazy_static",
"intrusive-collections",
"libc",
"libm",
"log",
"octets",
"once_cell",
"ring",
"slab",
"smallvec",
@ -748,9 +793,9 @@ dependencies = [
[[package]]
name = "quinn-proto"
version = "0.10.2"
version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8c8bb234e70c863204303507d841e7fa2295e95c822b2bb4ca8ebf57f17b1cb"
checksum = "b83c2a964b8b68e6c9c616f09b735b436a78843704fa6979a076073e622f69dc"
dependencies = [
"bytes",
"rand",
@ -766,9 +811,9 @@ dependencies = [
[[package]]
name = "quinn-udp"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6df19e284d93757a9fb91d63672f7741b129246a669db09d1c0063071debc0c0"
checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7"
dependencies = [
"bytes",
"libc",
@ -779,9 +824,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.32"
version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@ -941,9 +986,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
version = "0.101.3"
version = "0.101.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "261e9e0888cba427c3316e6322805653c9425240b6fd96cee7cb671ab70ab8d0"
checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"
dependencies = [
"ring",
"untrusted",
@ -999,18 +1044,18 @@ dependencies = [
[[package]]
name = "serde"
version = "1.0.183"
version = "1.0.185"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c"
checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.183"
version = "1.0.185"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816"
checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec"
dependencies = [
"proc-macro2",
"quote",
@ -1052,9 +1097,9 @@ dependencies = [
[[package]]
name = "slab"
version = "0.4.8"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
@ -1122,9 +1167,9 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "syn"
version = "2.0.28"
version = "2.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
dependencies = [
"proc-macro2",
"quote",
@ -1139,18 +1184,18 @@ checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
[[package]]
name = "thiserror"
version = "1.0.44"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.44"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
dependencies = [
"proc-macro2",
"quote",
@ -1169,9 +1214,9 @@ dependencies = [
[[package]]
name = "time"
version = "0.3.25"
version = "0.3.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea"
checksum = "0bb39ee79a6d8de55f48f2293a830e040392f1c5f16e336bdd1788cd0aadce07"
dependencies = [
"deranged",
"serde",
@ -1201,9 +1246,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.31.0"
version = "1.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40de3a2ba249dcb097e01be5e67a5ff53cf250397715a071a81543e8a832a920"
checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
dependencies = [
"backtrace",
"bytes",
@ -1457,9 +1502,9 @@ dependencies = [
[[package]]
name = "windows-targets"
version = "0.48.1"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
@ -1472,51 +1517,51 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.0"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "winnow"
version = "0.5.10"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5504cc7644f4b593cbc05c4a55bf9bd4e94b867c3c0bd440934174d50482427d"
checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97"
dependencies = [
"memchr",
]

View File

@ -11,7 +11,7 @@ backoff = { version = "0.4.0", features = ["tokio"] }
base64 = "0.21.2"
clap = { version = "4.3.21", features = ["derive"] }
color-eyre = "0.6.2"
quiche = { version = "0.17.2", features = ["boringssl-boring-crate"] }
quiche = { version = "0.18", features = ["boringssl-boring-crate"] }
daemonize = "0.5.0"
quinn = { version = "0.10.2", features = [] }
rcgen = "0.11.1"
@ -22,5 +22,5 @@ temp-dir = "0.1.11"
tokio = { version = "1.31.0", features = ["full"] }
tokio-tun = "0.9.0"
toml = "0.7.6"
boring = "^2.0.0"
boring = "^3.0.0"
time = "*"

View File

@ -117,10 +117,15 @@ fn create_server_cert(config: &Config) -> anyhow::Result<Certificate> {
params.distinguished_name = dn;
params.not_before = time::OffsetDateTime::now_utc();
params.not_after = time::OffsetDateTime::now_utc() + time::Duration::days(365);
params.subject_alt_names = vec![
SanType::DnsName(config.server_sni.to_owned()),
SanType::DnsName(config.client_sni.to_owned()),
];
if config.server_sni == config.client_sni {
params.subject_alt_names = vec![SanType::DnsName(config.server_sni.to_owned())];
} else {
eprintln!("WARNING: client and server have different server_name values, writing both to the server cert");
params.subject_alt_names = vec![
SanType::DnsName(config.server_sni.to_owned()),
SanType::DnsName(config.client_sni.to_owned()),
];
}
params.is_ca = IsCa::ExplicitNoCa;
params.extended_key_usages = vec![ExtendedKeyUsagePurpose::ServerAuth];
let cert = Certificate::from_params(params)?;

View File

@ -1,6 +1,6 @@
use anyhow::Context;
use boring::pkey::PKey;
use boring::ssl::{SslContext, SslMethod};
use boring::ssl::{SslContext, SslContextBuilder, SslMethod};
use boring::x509::store::X509StoreBuilder;
use boring::x509::X509;
use serde::{Deserialize, Serialize};
@ -156,7 +156,7 @@ impl TlsKeys {
let key = PKey::private_key_from_pem(&fs::read(key).context("failed to read tls key")?)?;
Ok(Self { ca, cert, key })
}
pub fn into_ssl_ctx(self) -> anyhow::Result<SslContext> {
pub fn into_ssl_ctx(self) -> anyhow::Result<SslContextBuilder> {
let mut ctx = SslContext::builder(SslMethod::tls())?;
ctx.set_servername_callback(|sslref, sslalert| {
let servername = sslref.servername(boring::ssl::NameType::HOST_NAME);
@ -174,7 +174,7 @@ impl TlsKeys {
ctx.set_certificate(&self.cert)?;
ctx.add_extra_chain_cert(self.ca)?;
ctx.set_private_key(&self.key)?;
Ok(ctx.build())
Ok(ctx)
}
}

View File

@ -105,7 +105,7 @@ use tokio::net::UdpSocket;
fn configure_server(tls: crate::config::TlsKeys) -> anyhow::Result<quiche::Config> {
let mut config =
quiche::Config::with_boring_ssl_ctx(quiche::PROTOCOL_VERSION, tls.into_ssl_ctx()?)?;
quiche::Config::with_boring_ssl_ctx_builder(quiche::PROTOCOL_VERSION, tls.into_ssl_ctx()?)?;
config.set_application_protos(&[b"sleepytunny"])?; //change this to h3 eventually
config.set_max_idle_timeout(5000);
config.set_max_recv_udp_payload_size(1350);
@ -123,7 +123,7 @@ fn configure_server(tls: crate::config::TlsKeys) -> anyhow::Result<quiche::Confi
}
fn configure_client(tls: crate::config::TlsKeys) -> anyhow::Result<quiche::Config> {
let mut config =
quiche::Config::with_boring_ssl_ctx(quiche::PROTOCOL_VERSION, tls.into_ssl_ctx()?)?;
quiche::Config::with_boring_ssl_ctx_builder(quiche::PROTOCOL_VERSION, tls.into_ssl_ctx()?)?;
config.set_application_protos(&[b"sleepytunny"])?; //change this to h3 eventually
config.set_max_idle_timeout(5000);
config.set_max_recv_udp_payload_size(1350);
@ -429,12 +429,12 @@ pub async fn client_loop(
app_config.client()?.endpoint()?,
&mut qconfig,
)?;
// tokio::time::sleep(Duration::from_millis(200)).await;
let (write, send_info) = conn
.send(&mut tx_buffer[..])
.context("initial send failed")?;
let written = socket.send_to(&tx_buffer[..write], send_info.to).await?;
eprintln!("wrote {written} bytes of {write} byte initiation");
// tokio::time::sleep(std::time::Duration::from_millis(200)).await;
let mut debug_established = false;
loop {
'read: loop {
@ -456,33 +456,35 @@ pub async fn client_loop(
conn.recv(&mut rx_buffer[..len], recv_info)
.context("recv failed")?;
}
if let Some(i) = conn.timeout_instant() {
if !i.elapsed().is_zero() {
conn.on_timeout();
}
}
if conn.is_closed() {
eprintln!("connection closed");
return Ok(());
}
if conn.is_established() && !debug_established {
debug_established = true;
eprintln!("connection established! debug info:");
eprintln!(" cert chain:");
let chain = conn.peer_cert_chain().context("no peer cert chain")?;
for (i, cert) in chain.into_iter().enumerate().rev() {
eprintln!(" cert {i}:");
let cert = X509::from_der(cert).context("failed to deserialize der")?;
let subject_name = cert
.subject_name()
.entries()
.map(|entry| entry.data().as_utf8().unwrap().to_string())
.collect::<Vec<_>>()
.join("///");
eprintln!(" subject name: {}", subject_name);
} else if conn.is_established() {
if !debug_established {
debug_established = true;
eprintln!("connection established! debug info:");
eprintln!(" cert chain:");
let chain = conn.peer_cert_chain().context("no peer cert chain")?;
for (i, cert) in chain.into_iter().enumerate().rev() {
eprintln!(" cert {i}:");
let cert = X509::from_der(cert).context("failed to deserialize der")?;
let subject_name = cert
.subject_name()
.entries()
.map(|entry| entry.data().as_utf8().unwrap().to_string())
.collect::<Vec<_>>()
.join("///");
for gen_name in cert
.subject_alt_names()
.map(IntoIterator::into_iter)
.into_iter()
.flatten()
{
eprintln!(" gen_name: {:?}", gen_name.dnsname());
}
eprintln!(" subject name: {}", subject_name);
}
}
}
if conn.is_established() {
f(&mut conn)?;
}
'write: loop {
@ -504,5 +506,10 @@ pub async fn client_loop(
.context("send_to failed")?;
eprintln!("sent {v} bytes of {write}");
}
if let Some(i) = conn.timeout_instant() {
if !i.elapsed().is_zero() {
conn.on_timeout();
}
}
}
}