diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/Makefile b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8a96a88c4e7e7ae926fa7e58de3155bb2c266a46 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/Makefile @@ -0,0 +1,7 @@ +OPENSSL_INSTALL=tmp/.local/openssl + +build_with_pkg_config: + cd cquiche_s_timer && PKG_CONFIG_PATH=${OPENSSL_INSTALL}/lib64/pkgconfig LD_LIBRARY_PATH=${OPENSSL_INSTALL}/lib64 cargo run + +ld_trace_loaded_objects: + LD_TRACE_LOADED_OBJECTS=1 ./your_executable diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/README.md b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1476030f59005cebfb3365201e56b7cfb60f5889 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/README.md @@ -0,0 +1,38 @@ +- need to add functionality to use choose the group for the key exchange with openssl and cquiche +- in line 1492 of ssl.h the function gets renamed `# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s))` + +add to Context +``` +// #[cfg(feature = "openssl")] + // pub fn set_groups(&mut self, groups: &str) -> Result<()> { + // let cstr = ffi::CString::new(groups).map_err(|_| Error::TlsFail)?; + // map_result(unsafe { + // SSL_CTX_set1_groups_list(self.as_mut_ptr(), cstr.as_ptr()) + // }) + // } + pub fn set_groups(&mut self, groups: &str) -> Result<()> { + let cstr = ffi::CString::new(groups).map_err(|_| Error::TlsFail)?; + map_result(unsafe { + SSL_CTX_ctrl(self.as_mut_ptr(), 92, 0,cstr.as_ptr()) + }) + } + + + +// ........ and to extern functions +// fn SSL_CTX_set1_groups_list( + // ctx: *mut SSL_CTX, groups: *const c_char, + // ) -> c_int; + fn SSL_CTX_ctrl(ctx: *mut SSL_CTX, cmd: c_int, larg: i64, parg: *const c_char) -> c_int; +``` + +add to Config, call to context +``` + /// Sets groups for TLS key exchange. + /// Own patch implementation + // #[cfg(feature = "openssl")] + pub fn set_groups(&mut self, groups: &str) -> Result<()> { + self.tls_ctx.set_groups(groups) + } +``` diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/.gitignore b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2f7896d1d1365eafb0da03d9fe456fac81408487 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.lock b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..fec377e31dfe9dcf5a3c184945ccfdb6e0904f34 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.lock @@ -0,0 +1,943 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cmake" +version = "0.1.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c682c223677e0e5b6b7f63a64b9351844c3f1b1678a68b7ee617e30fb082620e" +dependencies = [ + "cc", +] + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "cquiche_s_timer" +version = "0.1.0" +dependencies = [ + "env_logger", + "log", + "mio", + "quiche", + "ring", + "url", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "intrusive-collections" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "189d0897e4cbe8c75efedf3502c18c887b05046e59d28404d4d8e46cbc4d1e86" +dependencies = [ + "memoffset", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "libc" +version = "0.2.166" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "log", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "octets" +version = "0.3.0" + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qlog" +version = "0.13.0" +dependencies = [ + "serde", + "serde_derive", + "serde_json", + "serde_with", + "smallvec", +] + +[[package]] +name = "quiche" +version = "0.22.0" +dependencies = [ + "cmake", + "either", + "intrusive-collections", + "libc", + "libm", + "log", + "octets", + "once_cell", + "pkg-config", + "qlog", + "ring", + "slab", + "smallvec", + "winapi", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +dependencies = [ + "serde", + "serde_derive", + "serde_with_macros", +] + +[[package]] +name = "serde_with_macros" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.toml b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..65494c687eadcad875504eed460ab38208cfc428 --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "cquiche_s_timer" +version = "0.1.0" +edition = "2021" + +[dependencies] +quiche = { path = "../tmp/quiche/quiche", features = ["openssl", "qlog"] } +mio = { version = "1.0", features = ["net", "os-poll"] } +log = "0.4" +url = "2.5" +ring = "0.17" +env_logger = "0.11" diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/src/main.rs b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/src/main.rs new file mode 100644 index 0000000000000000000000000000000000000000..3409efed7318416e484d445600afceaa4e73895e --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/cquiche_s_timer/src/main.rs @@ -0,0 +1,365 @@ +// Copyright (C) 2019, Cloudflare, Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[macro_use] +extern crate log; + +use quiche::h3::NameValue; + +use ring::rand::*; + +// const MAX_DATAGRAM_SIZE: usize = 1350; +const MAX_DATAGRAM_SIZE: usize = 1200; + +// PKG_CONFIG_PATH=${OPENSSL_INSTALL}/lib64/pkgconfig LD_LIBRARY_PATH=${OPENSSL_INSTALL}/lib64 cargo run -- https://localhost:8443/ + +fn main() { + env_logger::builder() + .filter_level(log::LevelFilter::Trace) + .init(); + + let mut buf = [0; 65535]; + let mut out = [0; MAX_DATAGRAM_SIZE]; + + let mut args = std::env::args(); + + let cmd = &args.next().unwrap(); + + if args.len() != 1 { + println!("Usage: {cmd} URL"); + println!("\nSee tools/apps/ for more complete implementations."); + return; + } + + let url = url::Url::parse(&args.next().unwrap()).unwrap(); + + // Setup the event loop. + let mut poll = mio::Poll::new().unwrap(); + let mut events = mio::Events::with_capacity(1024); + + // Resolve server address. + let peer_addr = url.socket_addrs(|| None).unwrap()[0]; + + // Bind to INADDR_ANY or IN6ADDR_ANY depending on the IP family of the + // server address. This is needed on macOS and BSD variants that don't + // support binding to IN6ADDR_ANY for both v4 and v6. + let bind_addr = match peer_addr { + std::net::SocketAddr::V4(_) => "0.0.0.0:0", + std::net::SocketAddr::V6(_) => "[::]:0", + }; + + // Create the UDP socket backing the QUIC connection, and register it with + // the event loop. + let mut socket = mio::net::UdpSocket::bind(bind_addr.parse().unwrap()).unwrap(); + poll.registry() + .register(&mut socket, mio::Token(0), mio::Interest::READABLE) + .unwrap(); + + let mut config = quiche::Config::new(quiche::PROTOCOL_VERSION).unwrap(); + config.set_groups("mlkem512").unwrap(); + config + .set_application_protos(quiche::h3::APPLICATION_PROTOCOL) + .unwrap(); + config.verify_peer(true); + config + .load_verify_locations_from_file("../../tmp/.local/nginx/conf/CA.crt") + .unwrap(); + // config.log_keys(); + // config.discover_pmtu(true); + config.set_cc_algorithm(quiche::CongestionControlAlgorithm::CUBIC); + // config.set_cc_algorithm(quiche::CongestionControlAlgorithm::RENO); + // config.set_cc_algorithm(quiche::CongestionControlAlgorithm::BBR); + // config.set_cc_algorithm(quiche::CongestionControlAlgorithm::BBR2); + + // TODO disable pacing? + // TODO read about every option and evaluate if default is good and comparable to openssl's impl + + config.set_max_idle_timeout(30000); + config.set_max_recv_udp_payload_size(MAX_DATAGRAM_SIZE); + config.set_max_send_udp_payload_size(MAX_DATAGRAM_SIZE); + config.set_initial_max_data(10_000_000); + config.set_initial_max_stream_data_bidi_local(1_000_000); + config.set_initial_max_stream_data_bidi_remote(1_000_000); + config.set_initial_max_stream_data_uni(1_000_000); + config.set_initial_max_streams_bidi(100); + config.set_initial_max_streams_uni(100); + // config.set_disable_active_migration(true); + + // Generate a random source connection ID for the connection. + let mut scid = [0; quiche::MAX_CONN_ID_LEN]; + SystemRandom::new().fill(&mut scid[..]).unwrap(); + + let scid = quiche::ConnectionId::from_ref(&scid); + + // Get local address. + let local_addr = socket.local_addr().unwrap(); + + // Create a QUIC connection and initiate handshake. + let mut conn = + quiche::connect(url.domain(), &scid, local_addr, peer_addr, &mut config).unwrap(); + // if handling of QLOGDIR env variable is wanted, then code should be written for it, there is no default + // see cquiche/tmp/quiche/apps/src/bin/quiche-client.rs or adjacent files for an example to copy + // title and description are just fields in the qlog file, they can be anything + let writer = Box::new(std::fs::File::create("qlog.sqlog").unwrap()); + conn.set_qlog_with_level( + writer, + "qtitle".to_string(), + "qdescription".to_string(), + quiche::QlogLevel::Extra, + ); + + info!( + "connecting to {:} from {:} with scid {}", + peer_addr, + socket.local_addr().unwrap(), + hex_dump(&scid) + ); + + let (write, send_info) = conn.send(&mut out).expect("initial send failed"); + + while let Err(e) = socket.send_to(&out[..write], send_info.to) { + if e.kind() == std::io::ErrorKind::WouldBlock { + debug!("send() would block"); + continue; + } + + panic!("send() failed: {:?}", e); + } + + debug!("written {}", write); + + let h3_config = quiche::h3::Config::new().unwrap(); + + // Prepare request. + let mut path = String::from(url.path()); + + if let Some(query) = url.query() { + path.push('?'); + path.push_str(query); + } + + let req = vec![ + quiche::h3::Header::new(b":method", b"GET"), + quiche::h3::Header::new(b":scheme", url.scheme().as_bytes()), + quiche::h3::Header::new(b":authority", url.host_str().unwrap().as_bytes()), + quiche::h3::Header::new(b":path", path.as_bytes()), + quiche::h3::Header::new(b"user-agent", b"quiche"), + ]; + + let req_start = std::time::Instant::now(); + + let mut req_sent = false; + + println!("here"); + + let mut http3_conn = None; + loop { + poll.poll(&mut events, conn.timeout()).unwrap(); + + // Read incoming UDP packets from the socket and feed them to quiche, + // until there are no more packets to read. + 'read: loop { + // If the event loop reported no events, it means that the timeout + // has expired, so handle it without attempting to read packets. We + // will then proceed with the send loop. + if events.is_empty() { + debug!("timed out"); + + conn.on_timeout(); + + break 'read; + } + + let (len, from) = match socket.recv_from(&mut buf) { + Ok(v) => v, + + Err(e) => { + // There are no more UDP packets to read, so end the read + // loop. + if e.kind() == std::io::ErrorKind::WouldBlock { + debug!("recv() would block"); + break 'read; + } + + panic!("recv() failed: {:?}", e); + } + }; + + debug!("got {} bytes", len); + + let recv_info = quiche::RecvInfo { + to: local_addr, + from, + }; + + // Process potentially coalesced packets. + let read = match conn.recv(&mut buf[..len], recv_info) { + Ok(v) => v, + + Err(e) => { + error!("recv failed: {:?}", e); + continue 'read; + } + }; + + debug!("processed {} bytes", read); + } + + debug!("done reading"); + + if conn.is_closed() { + info!("connection closed, {:?}", conn.stats()); + break; + } + + // Create a new HTTP/3 connection once the QUIC connection is established. + if conn.is_established() && http3_conn.is_none() { + http3_conn = Some( + quiche::h3::Connection::with_transport(&mut conn, &h3_config) + .expect("Unable to create HTTP/3 connection, check the server's uni stream limit and window size"), + ); + } + + // Send HTTP requests once the QUIC connection is established, and until + // all requests have been sent. + if let Some(h3_conn) = &mut http3_conn { + if !req_sent { + info!("sending HTTP request {:?}", req); + + h3_conn.send_request(&mut conn, &req, true).unwrap(); + + req_sent = true; + } + } + + if let Some(http3_conn) = &mut http3_conn { + // Process HTTP/3 events. + loop { + match http3_conn.poll(&mut conn) { + Ok((stream_id, quiche::h3::Event::Headers { list, .. })) => { + info!( + "got response headers {:?} on stream id {}", + hdrs_to_strings(&list), + stream_id + ); + } + + Ok((stream_id, quiche::h3::Event::Data)) => { + while let Ok(read) = http3_conn.recv_body(&mut conn, stream_id, &mut buf) { + debug!( + "got {} bytes of response data on stream {}", + read, stream_id + ); + + print!("{}", unsafe { std::str::from_utf8_unchecked(&buf[..read]) }); + } + } + + Ok((_stream_id, quiche::h3::Event::Finished)) => { + info!("response received in {:?}, closing...", req_start.elapsed()); + + conn.close(true, 0x100, b"kthxbye").unwrap(); + } + + Ok((_stream_id, quiche::h3::Event::Reset(e))) => { + error!("request was reset by peer with {}, closing...", e); + + conn.close(true, 0x100, b"kthxbye").unwrap(); + } + + Ok((_, quiche::h3::Event::PriorityUpdate)) => unreachable!(), + + Ok((goaway_id, quiche::h3::Event::GoAway)) => { + info!("GOAWAY id={}", goaway_id); + } + + Err(quiche::h3::Error::Done) => { + break; + } + + Err(e) => { + error!("HTTP/3 processing failed: {:?}", e); + + break; + } + } + } + } + + // Generate outgoing QUIC packets and send them on the UDP socket, until + // quiche reports that there are no more packets to be sent. + loop { + let (write, send_info) = match conn.send(&mut out) { + Ok(v) => v, + + Err(quiche::Error::Done) => { + debug!("done writing"); + break; + } + + Err(e) => { + error!("send failed: {:?}", e); + + conn.close(false, 0x1, b"fail").ok(); + break; + } + }; + + if let Err(e) = socket.send_to(&out[..write], send_info.to) { + if e.kind() == std::io::ErrorKind::WouldBlock { + debug!("send() would block"); + break; + } + + panic!("send() failed: {:?}", e); + } + + debug!("written {}", write); + } + + if conn.is_closed() { + info!("connection closed, {:?}", conn.stats()); + break; + } + } +} + +fn hex_dump(buf: &[u8]) -> String { + let vec: Vec<String> = buf.iter().map(|b| format!("{b:02x}")).collect(); + + vec.join("") +} + +pub fn hdrs_to_strings(hdrs: &[quiche::h3::Header]) -> Vec<(String, String)> { + hdrs.iter() + .map(|h| { + let name = String::from_utf8_lossy(h.name()).to_string(); + let value = String::from_utf8_lossy(h.value()).to_string(); + + (name, value) + }) + .collect() +} diff --git a/pq-tls-benchmark-framework/emulation-exp/code/cquiche/install.sh b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/install.sh new file mode 100755 index 0000000000000000000000000000000000000000..1739f5da0b4dbad73dcb2f19e6724e70fd10237a --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/cquiche/install.sh @@ -0,0 +1,151 @@ +#!/bin/bash +set -ex + +# Make sure to have a recent version of openssl installed by default. For example by having an up to date os version. + +sudo apt update +sudo apt install -y git \ + build-essential \ + autoconf \ + automake \ + libtool \ + ninja-build \ + libssl-dev \ + libpcre3-dev \ + wget + +NGINX_VERSION=1.26.1 +CMAKE_VERSION=3.30 +CMAKE_BUILD=0 + +mkdir -p tmp +cd tmp +ROOT=$(pwd) +INSTALL_DIR=${ROOT}/.local +OPENSSL_INSTALL=${ROOT}/.local/openssl + +# Fetch all the files we need +wget https://cmake.org/files/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.${CMAKE_BUILD}-linux-x86_64.sh +# git clone --no-checkout --single-branch --branch openssl-3.4 https://github.com/openssl/openssl.git +# (cd openssl && git switch --detach tags/openssl-3.4.0) +git clone --no-checkout --single-branch --branch openssl-3.3.0+quic https://github.com/quictls/openssl.git quictls/openssl +(cd quictls/openssl && git switch --detach openssl-3.3.0+quic) +git clone --recursive https://github.com/cloudflare/quiche +git clone --no-checkout --single-branch --branch 0.10.1-release https://github.com/open-quantum-safe/liboqs.git +(cd liboqs && git switch --detach tags/0.10.1) +git clone --no-checkout --single-branch --branch main https://github.com/open-quantum-safe/oqs-provider.git +(cd oqs-provider && git switch --detach tags/0.6.1) +wget nginx.org/download/nginx-${NGINX_VERSION}.tar.gz && tar -zxvf nginx-${NGINX_VERSION}.tar.gz + +# Install the latest CMake +mkdir -p ${INSTALL_DIR}/cmake +sh cmake-${CMAKE_VERSION}.${CMAKE_BUILD}-linux-x86_64.sh --skip-license --prefix=${INSTALL_DIR}/cmake + + +# # Patch openssl to have a large CRYPTO_RECV_BUF +# patch ${ROOT}/openssl/ssl/quic/quic_channel.c < ${ROOT}/../patches/openssl/quic_channel.c.patch + +# Build OpenSSL so 'libcrypto.so' is avaiable for the build of liboqs. With Ubuntu 22.04 not longer needed. +( + cd quictls/openssl + # adds a runtime path to the executable, so it can find the libcrypto.so + LDFLAGS="-Wl,-rpath -Wl,${OPENSSL_INSTALL}/lib64" ./Configure --prefix=${OPENSSL_INSTALL} --openssldir=${OPENSSL_INSTALL}/ssl + # Commented out are the commands from https://github.com/open-quantum-safe/oqs-provider/blob/main/scripts/fullbuild.sh + # export OSSL_PREFIX=`pwd`/.local + # LDFLAGS="-Wl,-rpath -Wl,${OSSL_PREFIX}/lib64" ./config --prefix=$OSSL_PREFIX + + make && make install_sw install_ssldirs + + # NOTE maybe create a softlink if issue arises, something like + # ln -s lib64 lib +) + +# build liboqs +( + cd liboqs + # It needs the libcrypto library, either in .a or .so format, in 'openssl' it is .so and in 'openssl-source' it is .a + # -- Found OpenSSL: /absolute-path-to/tmp/openssl/lib64/libcrypto.so (found suitable version "3.0.2", minimum required is "1.1.1") + # NOTE here the enabled algorithms could be specified + ${INSTALL_DIR}/cmake/bin/cmake -GNinja -DOPENSSL_ROOT_DIR=${OPENSSL_INSTALL} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}/liboqs -S . -B build + cd build + ninja && ninja install +) + +( + cd oqs-provider + liboqs_DIR=${INSTALL_DIR}/liboqs ${INSTALL_DIR}/cmake/bin/cmake -DOPENSSL_ROOT_DIR=${OPENSSL_INSTALL} -S . -B build && ${INSTALL_DIR}/cmake/bin/cmake --build build + # next command does not work, but is not needed maybe cuz we just copy the library??? + # maybe use --install-prefix for next command + # cmake --install build --prefix ${ROOT}/oqs-provider/install + cp build/lib/oqsprovider.so ${OPENSSL_INSTALL}/lib64/ossl-modules/ + # can also be installed to system + # sudo cp /home/bebbo/own/master/benchmarking-pqc-in-quic/pq-tls-benchmark-framework/emulation-exp/code/tmp/oqs-provider/build/lib/oqsprovider.so /lib/x86_64-linux-gnu/ossl-modules +) + +sed -i "s/default = default_sect/default = default_sect\noqsprovider = oqsprovider_sect/g" ${OPENSSL_INSTALL}/ssl/openssl.cnf +sed -i "s/\[default_sect\]/\[default_sect\]\nactivate = 1\n\[oqsprovider_sect\]\nactivate = 1\n/g" ${OPENSSL_INSTALL}/ssl/openssl.cnf + +${OPENSSL_INSTALL}/bin/openssl version -d + +if [[ $(${OPENSSL_INSTALL}/bin/openssl version -d) != *"${OPENSSL_INSTALL}/ssl"* ]]; then + echo "The output of 'openssl version -d' does not include the string ${OPENSSL_INSTALL}/ssl" + exit 1 +fi +if [[ $(${OPENSSL_INSTALL}/bin/openssl list -providers) != *"OpenSSL OQS Provider"* ]]; then + echo "The output of 'openssl list -providers' does not include the string 'OpenSSL OQS Provider'" + exit 1 +fi +echo "Openssl seems to be installed correctly" + + +# build cquiche +( + cd quiche + # give cargo the context of the custom openssl (the pkgconfig file), so that it can find the correct libs + PKG_CONFIG_PATH=${OPENSSL_INSTALL}/lib64/pkgconfig cargo build --features=openssl + + # how to find out if openssl is used or boringssl? +) + + + + + +# # for nginx build +# # export OPENSSL_CONF=${OPENSSL_INSTALL}/ssl/openssl.cnf + +# # apply patches to nginx source +# patch ${ROOT}/nginx-${NGINX_VERSION}/src/event/quic/ngx_event_quic_openssl_compat.c < ${ROOT}/../patches/nginx-${NGINX_VERSION}-patches/ngx_event_quic_openssl_compat.c.diff + +# # build nginx with dynamically linked custom openssl +# # NOTE it may be that the first time nginx is built it is not linked correctly to the custom openssl, but just do it again, it should work +# ( +# cd nginx-${NGINX_VERSION} +# # NOTE why --without-http_gzip_module +# # -rpath with --enable-new-dtags makes it use RUNPATH which is evaluated after LD_LIBRARY_PATH (which is evaluated after RPATH) +# # export LD_LIBRARY_PATH=${OPENSSL_INSTALL}/lib64:${LD_LIBRARY_PATH} +# ./configure --prefix=${INSTALL_DIR}/nginx \ +# --with-debug \ +# --with-http_v2_module \ +# --with-http_v3_module \ +# --without-http_gzip_module \ +# --with-http_ssl_module \ +# --with-ld-opt="-Wl,--enable-new-dtags,-rpath,${OPENSSL_INSTALL}/lib64" +# # The --with-openssl builds openssl again, but we just want to link against it +# # --with-openssl=${ROOT}/openssl \ +# # --with-cc-opt="-I ${OPENSSL_INSTALL}/include/openssl" \ +# # --with-ld-opt="-L ${OPENSSL_INSTALL}/lib64" +# # sed -i 's/libcrypto.a/libcrypto.a -loqs/g' objs/Makefile; +# # NOTE why change this? +# # sed -i 's/EVP_MD_CTX_create/EVP_MD_CTX_new/g; s/EVP_MD_CTX_destroy/EVP_MD_CTX_free/g' src/event/ngx_event_openssl.c +# make && make install +# ) + +# # NOTE check with nginx -V and ldd if the openssl is linked correctly +# # it should show the path to the custom openssl +# # This only shows the correct path (if RUNPATH is not used), if the LD_LIBRARY_PATH env var is set correctly +# ${INSTALL_DIR}/nginx/sbin/nginx -V +# ldd ${INSTALL_DIR}/nginx/sbin/nginx +# readelf -d ${INSTALL_DIR}/nginx/sbin/nginx | grep 'R.*PATH' + +# echo "You should see that nginx is linked against the custom openssl in tmp/.local/openssl" diff --git a/pq-tls-benchmark-framework/emulation-exp/code/install-prereqs-ubuntu.sh b/pq-tls-benchmark-framework/emulation-exp/code/install-prereqs-ubuntu.sh index a9bd2c3a73c90d3c6a2714cc4da7d34cc68550aa..8518d28abfc481536e59e0ecaa283518afd5a17e 100755 --- a/pq-tls-benchmark-framework/emulation-exp/code/install-prereqs-ubuntu.sh +++ b/pq-tls-benchmark-framework/emulation-exp/code/install-prereqs-ubuntu.sh @@ -28,6 +28,7 @@ OPENSSL_INSTALL=${ROOT}/.local/openssl wget https://cmake.org/files/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.${CMAKE_BUILD}-linux-x86_64.sh git clone --no-checkout --single-branch --branch openssl-3.4 https://github.com/openssl/openssl.git (cd openssl && git switch --detach tags/openssl-3.4.0) +# 0.11 was released, maybe switch to it when running experiment again git clone --no-checkout --single-branch --branch 0.10.1-release https://github.com/open-quantum-safe/liboqs.git (cd liboqs && git switch --detach tags/0.10.1) git clone --no-checkout --single-branch --branch main https://github.com/open-quantum-safe/oqs-provider.git diff --git a/pq-tls-benchmark-framework/emulation-exp/code/kex/saved/qlogdir/cquiche-to-cloudflare.sqlog b/pq-tls-benchmark-framework/emulation-exp/code/kex/saved/qlogdir/cquiche-to-cloudflare.sqlog new file mode 100644 index 0000000000000000000000000000000000000000..2b6e0f8daee852b4c3cace46fd99685404a8ac1a --- /dev/null +++ b/pq-tls-benchmark-framework/emulation-exp/code/kex/saved/qlogdir/cquiche-to-cloudflare.sqlog @@ -0,0 +1,331 @@ +{"qlog_version":"0.3","qlog_format":"JSON-SEQ","title":"quiche-client qlog","description":"quiche-client qlog id=f41c3b3c475579ffd6815d17fb251d744636eb7c","trace":{"vantage_point":{"type":"client"},"title":"quiche-client qlog","description":"quiche-client qlog id=f41c3b3c475579ffd6815d17fb251d744636eb7c","configuration":{"time_offset":0.0}}} +{"time":0.0,"name":"transport:parameters_set","data":{"owner":"local","tls_cipher":"None","disable_active_migration":true,"max_idle_timeout":30000,"max_udp_payload_size":1350,"ack_delay_exponent":3,"max_ack_delay":25,"active_connection_id_limit":2,"initial_max_data":10000000,"initial_max_stream_data_bidi_local":1000000,"initial_max_stream_data_bidi_remote":1000000,"initial_max_stream_data_uni":1000000,"initial_max_streams_bidi":100,"initial_max_streams_uni":100}} +{"time":0.63993,"name":"transport:packet_sent","data":{"header":{"packet_type":"initial","packet_number":0,"version":"babababa","scil":20,"dcil":16,"scid":"f41c3b3c475579ffd6815d17fb251d744636eb7c","dcid":"a465da977354f374ee9d8e0e9f347d83"},"raw":{"length":342,"payload_length":279},"send_at_time":0.63993,"frames":[{"frame_type":"crypto","offset":0,"length":275}]}} +{"time":0.63993,"name":"recovery:metrics_updated","data":{"smoothed_rtt":333.0,"rtt_variance":166.5,"congestion_window":13500,"bytes_in_flight":342,"ssthresh":18446744073709551615}} +{"time":11.508484,"name":"transport:packet_sent","data":{"header":{"packet_type":"initial","packet_number":1,"version":"1","scil":20,"dcil":16,"scid":"f41c3b3c475579ffd6815d17fb251d744636eb7c","dcid":"a465da977354f374ee9d8e0e9f347d83"},"raw":{"length":342,"payload_length":279},"send_at_time":11.508484,"frames":[{"frame_type":"crypto","offset":0,"length":275}]}} +{"time":20.744444,"name":"transport:packet_received","data":{"header":{"packet_type":"initial","packet_number":0,"version":"1","scil":20,"dcil":20,"scid":"011072922b86cf9fe213d2925986ccb4e95933c3","dcid":"f41c3b3c475579ffd6815d17fb251d744636eb7c"},"raw":{"length":1200,"payload_length":23},"frames":[{"frame_type":"ack","ack_delay":0.077,"acked_ranges":[[1,1]]}]}} +{"time":20.744444,"name":"recovery:metrics_updated","data":{"min_rtt":9.235962,"smoothed_rtt":9.235962,"latest_rtt":9.235962,"rtt_variance":4.617981,"bytes_in_flight":0}} +{"time":23.604282,"name":"transport:packet_received","data":{"header":{"packet_type":"initial","packet_number":1,"version":"1","scil":20,"dcil":20,"scid":"011072922b86cf9fe213d2925986ccb4e95933c3","dcid":"f41c3b3c475579ffd6815d17fb251d744636eb7c"},"raw":{"length":1200,"payload_length":111},"frames":[{"frame_type":"crypto","offset":0,"length":90}]}} +{"time":24.085104,"name":"transport:packet_received","data":{"header":{"packet_type":"handshake","packet_number":0,"version":"1","scil":20,"dcil":20,"scid":"011072922b86cf9fe213d2925986ccb4e95933c3","dcid":"f41c3b3c475579ffd6815d17fb251d744636eb7c"},"raw":{"length":1200,"payload_length":1151},"frames":[{"frame_type":"crypto","offset":0,"length":1130}]}} +{"time":24.172758,"name":"transport:packet_received","data":{"header":{"packet_type":"handshake","packet_number":1,"version":"1","scil":20,"dcil":20,"scid":"011072922b86cf9fe213d2925986ccb4e95933c3","dcid":"f41c3b3c475579ffd6815d17fb251d744636eb7c"},"raw":{"length":1200,"payload_length":1151},"frames":[{"frame_type":"crypto","offset":1130,"length":1129}]}} +{"time":24.227276,"name":"transport:packet_received","data":{"header":{"packet_type":"handshake","packet_number":2,"version":"1","scil":20,"dcil":20,"scid":"011072922b86cf9fe213d2925986ccb4e95933c3","dcid":"f41c3b3c475579ffd6815d17fb251d744636eb7c"},"raw":{"length":587,"payload_length":538},"frames":[{"frame_type":"crypto","offset":2259,"length":516}]}} +{"time":24.227276,"name":"transport:parameters_set","data":{"owner":"remote","tls_cipher":"Some(AES128_GCM)","original_destination_connection_id":"a465da977354f374ee9d8e0e9f347d83","disable_active_migration":true,"max_idle_timeout":180000,"max_udp_payload_size":65527,"ack_delay_exponent":3,"max_ack_delay":25,"active_connection_id_limit":2,"initial_max_data":10485760,"initial_max_stream_data_bidi_local":0,"initial_max_stream_data_bidi_remote":1048576,"initial_max_stream_data_uni":1048576,"initial_max_streams_bidi":100,"initial_max_streams_uni":3}} +{"time":26.033268,"name":"transport:data_moved","data":{"stream_id":2,"offset":0,"length":1,"from":"application","to":"transport"}} +{"time":26.042479,"name":"http:stream_type_set","data":{"owner":"local","stream_id":2,"stream_type":"control"}} +{"time":26.065237,"name":"transport:data_moved","data":{"stream_id":2,"offset":1,"length":18,"from":"application","to":"transport"}} +{"time":26.071907,"name":"http:frame_created","data":{"stream_id":2,"length":18,"frame":{"frame_type":"settings","settings":[{"name":"4567422754446220793","value":783772694281039955}]}}} +{"time":26.087364,"name":"transport:data_moved","data":{"stream_id":6,"offset":0,"length":1,"from":"application","to":"transport"}} +{"time":26.092655,"name":"http:stream_type_set","data":{"owner":"local","stream_id":6,"stream_type":"qpack_encode"}} +{"time":26.10123,"name":"transport:data_moved","data":{"stream_id":10,"offset":0,"length":1,"from":"application","to":"transport"}} +{"time":26.106417,"name":"http:stream_type_set","data":{"owner":"local","stream_id":10,"stream_type":"qpack_decode"}} +{"time":26.133835,"name":"transport:data_moved","data":{"stream_id":0,"offset":0,"length":0,"from":"application","to":"transport"}} +{"time":26.164324,"name":"transport:data_moved","data":{"stream_id":0,"offset":0,"length":8,"from":"application","to":"transport"}} +{"time":26.171522,"name":"transport:data_moved","data":{"stream_id":0,"offset":8,"length":1,"from":"application","to":"transport"}} +{"time":26.17671,"name":"http:frame_created","data":{"stream_id":0,"length":0,"frame":{"frame_type":"reserved","length":0}}} +{"time":26.182955,"name":"transport:data_moved","data":{"stream_id":0,"offset":9,"length":8,"from":"application","to":"transport"}} +{"time":26.189096,"name":"transport:data_moved","data":{"stream_id":0,"offset":17,"length":1,"from":"application","to":"transport"}} +{"time":26.195553,"name":"transport:data_moved","data":{"stream_id":0,"offset":18,"length":18,"from":"application","to":"transport"}} +{"time":26.200739,"name":"http:frame_created","data":{"stream_id":0,"length":18,"frame":{"frame_type":"reserved","length":18}}} +{"time":26.218311,"name":"transport:data_moved","data":{"stream_id":0,"offset":36,"length":2,"from":"application","to":"transport"}} +{"time":26.2253,"name":"transport:data_moved","data":{"stream_id":0,"offset":38,"length":29,"from":"application","to":"transport"}} +{"time":26.233664,"name":"http:frame_created","data":{"stream_id":0,"length":29,"frame":{"frame_type":"headers","headers":[{"name":":method","value":"GET"},{"name":":scheme","value":"https"},{"name":":authority","value":"cloudflare-quic.com"},{"name":":path","value":"/"},{"name":"user-agent","value":"quiche"}]}}} +{"time":26.621222,"name":"transport:packet_sent","data":{"header":{"packet_type":"initial","packet_number":2,"version":"1","scil":20,"dcil":20,"scid":"f41c3b3c475579ffd6815d17fb251d744636eb7c","dcid":"011072922b86cf9fe213d2925986ccb4e95933c3"},"raw":{"length":73,"payload_length":6},"send_at_time":26.621222,"frames":[{"frame_type":"ack","ack_delay":0.38,"acked_ranges":[[0,1]]}]}} +{"time":26.621222,"name":"recovery:metrics_updated","data":{"pacing_rate":1827097}} +{"time":26.621222,"name":"transport:packet_sent","data":{"header":{"packet_type":"handshake","packet_number":0,"version":"1","scil":20,"dcil":20,"scid":"f41c3b3c475579ffd6815d17fb251d744636eb7c","dcid":"011072922b86cf9fe213d2925986ccb4e95933c3"},"raw":{"length":112,"payload_length":46},"send_at_time":26.621222,"frames":[{"frame_type":"ack","ack_delay":0.31,"acked_ranges":[[0,2]]},{"frame_type":"crypto","offset":0,"length":36}]}} +{"time":26.621222,"name":"recovery:metrics_updated","data":{"bytes_in_flight":112}} +{"time":26.621222,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":0},"raw":{"length":1165,"payload_length":1127},"send_at_time":26.621222,"frames":[{"frame_type":"new_connection_id","sequence_number":1,"retire_prior_to":0,"connection_id_length":20,"connection_id":"6dfa11b0189418291c45a61832eb753bdfc31689","stateless_reset_token":"bd50f4c5e2b2cf07f2f5128fa695bbca"},{"frame_type":"stream","stream_id":2,"offset":0,"length":19},{"frame_type":"padding","payload_length":1063}]}} +{"time":26.621222,"name":"recovery:metrics_updated","data":{"bytes_in_flight":1277}} +{"time":26.958813,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":1},"raw":{"length":44,"payload_length":6},"send_at_time":26.958813,"frames":[{"frame_type":"stream","stream_id":6,"offset":0,"length":1}]}} +{"time":26.958813,"name":"recovery:metrics_updated","data":{"bytes_in_flight":1321}} +{"time":27.00825,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":2},"raw":{"length":44,"payload_length":6},"send_at_time":27.00825,"frames":[{"frame_type":"stream","stream_id":10,"offset":0,"length":1}]}} +{"time":27.00825,"name":"recovery:metrics_updated","data":{"bytes_in_flight":1365}} +{"time":27.050913,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":3},"raw":{"length":110,"payload_length":72},"send_at_time":27.050913,"frames":[{"frame_type":"stream","stream_id":0,"offset":0,"length":67,"fin":true}]}} +{"time":27.050913,"name":"recovery:metrics_updated","data":{"bytes_in_flight":1475}} +{"time":34.932804,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":0},"raw":{"length":553,"payload_length":532},"frames":[{"frame_type":"ack","ack_delay":0.003,"acked_ranges":[[0,0]]},{"frame_type":"handshake_done"},{"frame_type":"crypto","offset":0,"length":476},{"frame_type":"stream","stream_id":3,"offset":0,"length":24}]}} +{"time":34.932804,"name":"recovery:metrics_updated","data":{"min_rtt":8.250283,"smoothed_rtt":9.112751,"latest_rtt":8.250283,"rtt_variance":3.709904,"bytes_in_flight":198}} +{"time":34.932804,"name":"transport:data_moved","data":{"stream_id":2,"offset":0,"length":19,"from":"transport","to":"dropped"}} +{"time":35.138065,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":1},"raw":{"length":44,"payload_length":23},"frames":[{"frame_type":"stream","stream_id":7,"offset":0,"length":1}]}} +{"time":35.172157,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":2},"raw":{"length":44,"payload_length":23},"frames":[{"frame_type":"stream","stream_id":11,"offset":0,"length":1}]}} +{"time":35.201904,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":3},"raw":{"length":69,"payload_length":48},"frames":[{"frame_type":"stream","stream_id":15,"offset":0,"length":26,"fin":true}]}} +{"time":35.249752,"name":"transport:data_moved","data":{"stream_id":3,"offset":0,"length":1,"from":"transport","to":"application"}} +{"time":35.260334,"name":"http:stream_type_set","data":{"owner":"remote","stream_id":3,"stream_type":"control"}} +{"time":35.26976,"name":"transport:data_moved","data":{"stream_id":3,"offset":1,"length":1,"from":"transport","to":"application"}} +{"time":35.27664,"name":"transport:data_moved","data":{"stream_id":3,"offset":2,"length":1,"from":"transport","to":"application"}} +{"time":35.28617,"name":"transport:data_moved","data":{"stream_id":3,"offset":3,"length":21,"from":"transport","to":"application"}} +{"time":35.29527,"name":"http:frame_parsed","data":{"stream_id":3,"length":21,"frame":{"frame_type":"settings","settings":[{"name":"MAX_FIELD_SECTION_SIZE","value":65536},{"name":"589187371800189250","value":3723906607772715975}]}}} +{"time":35.31168,"name":"transport:data_moved","data":{"stream_id":7,"offset":0,"length":1,"from":"transport","to":"application"}} +{"time":35.317394,"name":"http:stream_type_set","data":{"owner":"remote","stream_id":7,"stream_type":"qpack_encode"}} +{"time":35.326397,"name":"transport:data_moved","data":{"stream_id":11,"offset":0,"length":1,"from":"transport","to":"application"}} +{"time":35.35752,"name":"http:stream_type_set","data":{"owner":"remote","stream_id":11,"stream_type":"qpack_decode"}} +{"time":35.368206,"name":"transport:data_moved","data":{"stream_id":15,"offset":0,"length":1,"from":"transport","to":"application"}} +{"time":35.37562,"name":"transport:data_moved","data":{"stream_id":15,"offset":1,"length":7,"from":"transport","to":"application"}} +{"time":35.380806,"name":"http:stream_type_set","data":{"owner":"remote","stream_id":15,"stream_type":"unknown","stream_type_value":54030994836414578}} +{"time":35.396263,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":4},"raw":{"length":43,"payload_length":5},"send_at_time":35.396263,"frames":[{"frame_type":"ack","ack_delay":0.025,"acked_ranges":[[0,3]]}]}} +{"time":35.396263,"name":"recovery:metrics_updated","data":{"pacing_rate":1851800}} +{"time":35.47206,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":4},"raw":{"length":43,"payload_length":22},"frames":[{"frame_type":"ack","ack_delay":0.061,"acked_ranges":[[0,3]]}]}} +{"time":35.47206,"name":"recovery:metrics_updated","data":{"min_rtt":7.802106,"smoothed_rtt":8.94892,"latest_rtt":7.802106,"rtt_variance":3.110089,"bytes_in_flight":0}} +{"time":35.47206,"name":"transport:data_moved","data":{"stream_id":6,"offset":0,"length":1,"from":"transport","to":"dropped"}} +{"time":35.47206,"name":"transport:data_moved","data":{"stream_id":10,"offset":0,"length":1,"from":"transport","to":"dropped"}} +{"time":35.47206,"name":"transport:data_moved","data":{"stream_id":0,"offset":0,"length":67,"from":"transport","to":"dropped"}} +{"time":45.61959,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":5},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":0,"length":1157}]}} +{"time":45.69295,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":6},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":1157,"length":1156}]}} +{"time":45.734554,"name":"transport:data_moved","data":{"stream_id":0,"offset":0,"length":1,"from":"transport","to":"application"}} +{"time":45.745457,"name":"transport:data_moved","data":{"stream_id":0,"offset":1,"length":7,"from":"transport","to":"application"}} +{"time":45.751705,"name":"transport:data_moved","data":{"stream_id":0,"offset":8,"length":1,"from":"transport","to":"application"}} +{"time":45.758904,"name":"http:frame_parsed","data":{"stream_id":0,"length":0,"frame":{"frame_type":"unknown","frame_type_value":312126358648722770,"raw":{"payload_length":0}}}} +{"time":45.768433,"name":"transport:data_moved","data":{"stream_id":0,"offset":9,"length":1,"from":"transport","to":"application"}} +{"time":45.774254,"name":"transport:data_moved","data":{"stream_id":0,"offset":10,"length":7,"from":"transport","to":"application"}} +{"time":45.779762,"name":"transport:data_moved","data":{"stream_id":0,"offset":17,"length":1,"from":"transport","to":"application"}} +{"time":45.787273,"name":"transport:data_moved","data":{"stream_id":0,"offset":18,"length":18,"from":"transport","to":"application"}} +{"time":45.792675,"name":"http:frame_parsed","data":{"stream_id":0,"length":18,"frame":{"frame_type":"unknown","frame_type_value":4449031773939001426,"raw":{"payload_length":18}}}} +{"time":45.799343,"name":"transport:data_moved","data":{"stream_id":0,"offset":36,"length":1,"from":"transport","to":"application"}} +{"time":45.805058,"name":"transport:data_moved","data":{"stream_id":0,"offset":37,"length":1,"from":"transport","to":"application"}} +{"time":45.810352,"name":"transport:data_moved","data":{"stream_id":0,"offset":38,"length":1,"from":"transport","to":"application"}} +{"time":45.816917,"name":"transport:data_moved","data":{"stream_id":0,"offset":39,"length":95,"from":"transport","to":"application"}} +{"time":46.10306,"name":"http:frame_parsed","data":{"stream_id":0,"length":95,"frame":{"frame_type":"headers","headers":[{"name":":status","value":"200"},{"name":"date","value":"Tue, 26 Nov 2024 16:20:50 GMT"},{"name":"content-type","value":"text/html"},{"name":"content-length","value":"125959"},{"name":"server","value":"cloudflare"},{"name":"cf-ray","value":"8e8b35494c3ed2f3-FRA"},{"name":"alt-svc","value":"h3=\":443\"; ma=86400"}]}}} +{"time":46.185417,"name":"transport:data_moved","data":{"stream_id":0,"offset":134,"length":1,"from":"transport","to":"application"}} +{"time":46.196217,"name":"transport:data_moved","data":{"stream_id":0,"offset":135,"length":1,"from":"transport","to":"application"}} +{"time":46.202145,"name":"transport:data_moved","data":{"stream_id":0,"offset":136,"length":1,"from":"transport","to":"application"}} +{"time":46.20744,"name":"http:frame_parsed","data":{"stream_id":0,"length":11861,"frame":{"frame_type":"data"}}} +{"time":46.21771,"name":"transport:data_moved","data":{"stream_id":0,"offset":137,"length":2176,"from":"transport","to":"application"}} +{"time":46.284824,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":5},"raw":{"length":44,"payload_length":6},"send_at_time":46.284824,"frames":[{"frame_type":"ack","ack_delay":0.075,"acked_ranges":[[0,6]]}]}} +{"time":46.284824,"name":"recovery:metrics_updated","data":{"pacing_rate":1885702}} +{"time":46.36951,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":7},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":2313,"length":1156}]}} +{"time":46.406986,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":8},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":3469,"length":1156}]}} +{"time":46.43356,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":9},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":4625,"length":1156}]}} +{"time":46.45875,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":10},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":5781,"length":1156}]}} +{"time":46.48406,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":11},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":6937,"length":1156}]}} +{"time":46.509354,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":12},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":8093,"length":1156}]}} +{"time":46.53402,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":13},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":9249,"length":1156}]}} +{"time":46.55837,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":14},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":10405,"length":1156}]}} +{"time":46.599445,"name":"transport:data_moved","data":{"stream_id":0,"offset":2313,"length":9248,"from":"transport","to":"application"}} +{"time":46.738968,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":6},"raw":{"length":43,"payload_length":5},"send_at_time":46.738968,"frames":[{"frame_type":"ack","ack_delay":0.023,"acked_ranges":[[0,14]]}]}} +{"time":53.756397,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":15},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":11561,"length":1156}]}} +{"time":53.867554,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":16},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":12717,"length":1156}]}} +{"time":53.89603,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":17},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":13873,"length":1156}]}} +{"time":53.92228,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":18},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":15029,"length":1156}]}} +{"time":53.965366,"name":"transport:data_moved","data":{"stream_id":0,"offset":11561,"length":437,"from":"transport","to":"application"}} +{"time":53.977962,"name":"transport:data_moved","data":{"stream_id":0,"offset":11998,"length":1,"from":"transport","to":"application"}} +{"time":53.985374,"name":"transport:data_moved","data":{"stream_id":0,"offset":11999,"length":1,"from":"transport","to":"application"}} +{"time":53.991302,"name":"transport:data_moved","data":{"stream_id":0,"offset":12000,"length":1,"from":"transport","to":"application"}} +{"time":53.996807,"name":"http:frame_parsed","data":{"stream_id":0,"length":4795,"frame":{"frame_type":"data"}}} +{"time":54.008766,"name":"transport:data_moved","data":{"stream_id":0,"offset":12001,"length":4184,"from":"transport","to":"application"}} +{"time":54.083824,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":7},"raw":{"length":43,"payload_length":5},"send_at_time":54.083824,"frames":[{"frame_type":"ack","ack_delay":0.021,"acked_ranges":[[0,18]]}]}} +{"time":54.40088,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":19},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":16185,"length":1156}]}} +{"time":54.46175,"name":"transport:data_moved","data":{"stream_id":0,"offset":16185,"length":611,"from":"transport","to":"application"}} +{"time":54.494568,"name":"transport:data_moved","data":{"stream_id":0,"offset":16796,"length":1,"from":"transport","to":"application"}} +{"time":54.50219,"name":"transport:data_moved","data":{"stream_id":0,"offset":16797,"length":1,"from":"transport","to":"application"}} +{"time":54.50801,"name":"transport:data_moved","data":{"stream_id":0,"offset":16798,"length":1,"from":"transport","to":"application"}} +{"time":54.513306,"name":"http:frame_parsed","data":{"stream_id":0,"length":15832,"frame":{"frame_type":"data"}}} +{"time":54.52251,"name":"transport:data_moved","data":{"stream_id":0,"offset":16799,"length":542,"from":"transport","to":"application"}} +{"time":54.574387,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":8},"raw":{"length":43,"payload_length":5},"send_at_time":54.574387,"frames":[{"frame_type":"ack","ack_delay":0.022,"acked_ranges":[[0,19]]}]}} +{"time":54.662888,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":20},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":17341,"length":1154}]}} +{"time":54.702904,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":21},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":18495,"length":1154}]}} +{"time":54.76324,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":22},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":19649,"length":1154}]}} +{"time":54.80569,"name":"transport:data_moved","data":{"stream_id":0,"offset":17341,"length":3462,"from":"transport","to":"application"}} +{"time":54.865925,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":9},"raw":{"length":43,"payload_length":5},"send_at_time":54.865925,"frames":[{"frame_type":"ack","ack_delay":0.013,"acked_ranges":[[0,22]]}]}} +{"time":54.928066,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":23},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":20803,"length":1154}]}} +{"time":55.008736,"name":"transport:data_moved","data":{"stream_id":0,"offset":20803,"length":1154,"from":"transport","to":"application"}} +{"time":55.126877,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":10},"raw":{"length":43,"payload_length":5},"send_at_time":55.126877,"frames":[{"frame_type":"ack","ack_delay":0.025,"acked_ranges":[[0,23]]}]}} +{"time":55.207752,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":24},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":21957,"length":1154}]}} +{"time":55.28376,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":26},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":24265,"length":1154}]}} +{"time":55.338917,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":25},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":23111,"length":1154}]}} +{"time":55.50057,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":27},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":25419,"length":1154}]}} +{"time":55.543335,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":28},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":26573,"length":1154}]}} +{"time":55.571705,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":29},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":27727,"length":1154}]}} +{"time":55.63342,"name":"transport:data_moved","data":{"stream_id":0,"offset":21957,"length":6924,"from":"transport","to":"application"}} +{"time":56.01653,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":11},"raw":{"length":43,"payload_length":5},"send_at_time":56.01653,"frames":[{"frame_type":"ack","ack_delay":0.058,"acked_ranges":[[0,29]]}]}} +{"time":56.131603,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":30},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":28881,"length":1154}]}} +{"time":56.17945,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":31},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":30035,"length":1154}]}} +{"time":56.20814,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":32},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":31189,"length":1154}]}} +{"time":56.234715,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":33},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":32343,"length":1154}]}} +{"time":56.27494,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":34},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":33497,"length":1154}]}} +{"time":56.32554,"name":"transport:data_moved","data":{"stream_id":0,"offset":28881,"length":3750,"from":"transport","to":"application"}} +{"time":56.336765,"name":"transport:data_moved","data":{"stream_id":0,"offset":32631,"length":1,"from":"transport","to":"application"}} +{"time":56.343643,"name":"transport:data_moved","data":{"stream_id":0,"offset":32632,"length":1,"from":"transport","to":"application"}} +{"time":56.34957,"name":"transport:data_moved","data":{"stream_id":0,"offset":32633,"length":1,"from":"transport","to":"application"}} +{"time":56.354973,"name":"http:frame_parsed","data":{"stream_id":0,"length":3360,"frame":{"frame_type":"data"}}} +{"time":56.36429,"name":"transport:data_moved","data":{"stream_id":0,"offset":32634,"length":2017,"from":"transport","to":"application"}} +{"time":56.447914,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":12},"raw":{"length":43,"payload_length":5},"send_at_time":56.447914,"frames":[{"frame_type":"ack","ack_delay":0.022,"acked_ranges":[[0,34]]}]}} +{"time":61.600605,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":35},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":34651,"length":1154}]}} +{"time":61.724884,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":36},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":35805,"length":1154}]}} +{"time":61.75506,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":37},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":36959,"length":1154}]}} +{"time":61.781944,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":38},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":38113,"length":1154}]}} +{"time":61.831066,"name":"transport:data_moved","data":{"stream_id":0,"offset":34651,"length":1343,"from":"transport","to":"application"}} +{"time":61.84419,"name":"transport:data_moved","data":{"stream_id":0,"offset":35994,"length":1,"from":"transport","to":"application"}} +{"time":61.851597,"name":"transport:data_moved","data":{"stream_id":0,"offset":35995,"length":1,"from":"transport","to":"application"}} +{"time":61.85753,"name":"transport:data_moved","data":{"stream_id":0,"offset":35996,"length":1,"from":"transport","to":"application"}} +{"time":61.86303,"name":"http:frame_parsed","data":{"stream_id":0,"length":9595,"frame":{"frame_type":"data"}}} +{"time":61.873512,"name":"transport:data_moved","data":{"stream_id":0,"offset":35997,"length":3270,"from":"transport","to":"application"}} +{"time":61.966778,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":13},"raw":{"length":43,"payload_length":5},"send_at_time":61.966778,"frames":[{"frame_type":"ack","ack_delay":0.024,"acked_ranges":[[0,38]]}]}} +{"time":62.061626,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":39},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":39267,"length":1154}]}} +{"time":62.100372,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":40},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":40421,"length":1154}]}} +{"time":62.12768,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":41},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":41575,"length":1154}]}} +{"time":62.16516,"name":"transport:data_moved","data":{"stream_id":0,"offset":39267,"length":3462,"from":"transport","to":"application"}} +{"time":62.265728,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":14},"raw":{"length":43,"payload_length":5},"send_at_time":62.265728,"frames":[{"frame_type":"ack","ack_delay":0.018,"acked_ranges":[[0,41]]}]}} +{"time":62.33337,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":42},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":42729,"length":1154}]}} +{"time":62.371273,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":43},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":43883,"length":1154}]}} +{"time":62.40959,"name":"transport:data_moved","data":{"stream_id":0,"offset":42729,"length":2308,"from":"transport","to":"application"}} +{"time":62.490368,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":15},"raw":{"length":43,"payload_length":5},"send_at_time":62.490368,"frames":[{"frame_type":"ack","ack_delay":0.015,"acked_ranges":[[0,43]]}]}} +{"time":62.6138,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":44},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":45037,"length":1154}]}} +{"time":62.65551,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":45},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":46191,"length":1154}]}} +{"time":62.691822,"name":"transport:data_moved","data":{"stream_id":0,"offset":45037,"length":555,"from":"transport","to":"application"}} +{"time":62.702194,"name":"transport:data_moved","data":{"stream_id":0,"offset":45592,"length":1,"from":"transport","to":"application"}} +{"time":62.708965,"name":"transport:data_moved","data":{"stream_id":0,"offset":45593,"length":1,"from":"transport","to":"application"}} +{"time":62.715218,"name":"transport:data_moved","data":{"stream_id":0,"offset":45594,"length":1,"from":"transport","to":"application"}} +{"time":62.721245,"name":"http:frame_parsed","data":{"stream_id":0,"length":2395,"frame":{"frame_type":"data"}}} +{"time":62.73236,"name":"transport:data_moved","data":{"stream_id":0,"offset":45595,"length":1750,"from":"transport","to":"application"}} +{"time":62.79514,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":16},"raw":{"length":43,"payload_length":5},"send_at_time":62.79514,"frames":[{"frame_type":"ack","ack_delay":0.018,"acked_ranges":[[0,45]]}]}} +{"time":62.8612,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":46},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":47345,"length":1154}]}} +{"time":62.898994,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":47},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":48499,"length":1154}]}} +{"time":62.933186,"name":"transport:data_moved","data":{"stream_id":0,"offset":47345,"length":645,"from":"transport","to":"application"}} +{"time":62.943027,"name":"transport:data_moved","data":{"stream_id":0,"offset":47990,"length":1,"from":"transport","to":"application"}} +{"time":62.95065,"name":"transport:data_moved","data":{"stream_id":0,"offset":47991,"length":1,"from":"transport","to":"application"}} +{"time":62.956474,"name":"transport:data_moved","data":{"stream_id":0,"offset":47992,"length":1,"from":"transport","to":"application"}} +{"time":62.96166,"name":"http:frame_parsed","data":{"stream_id":0,"length":7195,"frame":{"frame_type":"data"}}} +{"time":62.97023,"name":"transport:data_moved","data":{"stream_id":0,"offset":47993,"length":1660,"from":"transport","to":"application"}} +{"time":63.049732,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":17},"raw":{"length":43,"payload_length":5},"send_at_time":63.049732,"frames":[{"frame_type":"ack","ack_delay":0.019,"acked_ranges":[[0,47]]}]}} +{"time":63.17603,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":48},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":49653,"length":1154}]}} +{"time":63.26093,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":49},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":50807,"length":1154}]}} +{"time":63.320004,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":50},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":51961,"length":1154}]}} +{"time":63.37759,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":51},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":53115,"length":1154}]}} +{"time":63.407654,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":52},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":54269,"length":1154}]}} +{"time":63.4591,"name":"transport:data_moved","data":{"stream_id":0,"offset":49653,"length":5535,"from":"transport","to":"application"}} +{"time":63.471912,"name":"transport:data_moved","data":{"stream_id":0,"offset":55188,"length":1,"from":"transport","to":"application"}} +{"time":63.479847,"name":"transport:data_moved","data":{"stream_id":0,"offset":55189,"length":1,"from":"transport","to":"application"}} +{"time":63.48588,"name":"transport:data_moved","data":{"stream_id":0,"offset":55190,"length":1,"from":"transport","to":"application"}} +{"time":63.491493,"name":"http:frame_parsed","data":{"stream_id":0,"length":9597,"frame":{"frame_type":"data"}}} +{"time":63.50092,"name":"transport:data_moved","data":{"stream_id":0,"offset":55191,"length":232,"from":"transport","to":"application"}} +{"time":63.757732,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":18},"raw":{"length":43,"payload_length":5},"send_at_time":63.757732,"frames":[{"frame_type":"ack","ack_delay":0.045,"acked_ranges":[[0,52]]}]}} +{"time":63.87598,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":53},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":55423,"length":1154}]}} +{"time":63.922665,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":54},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":56577,"length":1154}]}} +{"time":63.9738,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":55},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":57731,"length":1154}]}} +{"time":64.00725,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":56},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":58885,"length":1154}]}} +{"time":64.07849,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":57},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":60039,"length":1154}]}} +{"time":64.12645,"name":"transport:data_moved","data":{"stream_id":0,"offset":55423,"length":5770,"from":"transport","to":"application"}} +{"time":64.307686,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":19},"raw":{"length":43,"payload_length":5},"send_at_time":64.307686,"frames":[{"frame_type":"ack","ack_delay":0.029,"acked_ranges":[[0,57]]}]}} +{"time":64.3965,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":58},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":61193,"length":1154}]}} +{"time":64.45674,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":59},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":62347,"length":1154}]}} +{"time":64.51157,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":60},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":63501,"length":1154}]}} +{"time":64.54534,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":61},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":64655,"length":1154}]}} +{"time":64.58239,"name":"transport:data_moved","data":{"stream_id":0,"offset":61193,"length":3595,"from":"transport","to":"application"}} +{"time":64.615524,"name":"transport:data_moved","data":{"stream_id":0,"offset":64788,"length":1,"from":"transport","to":"application"}} +{"time":64.624626,"name":"transport:data_moved","data":{"stream_id":0,"offset":64789,"length":1,"from":"transport","to":"application"}} +{"time":64.69206,"name":"transport:data_moved","data":{"stream_id":0,"offset":64790,"length":1,"from":"transport","to":"application"}} +{"time":64.71917,"name":"http:frame_parsed","data":{"stream_id":0,"length":626,"frame":{"frame_type":"data"}}} +{"time":64.72985,"name":"transport:data_moved","data":{"stream_id":0,"offset":64791,"length":626,"from":"transport","to":"application"}} +{"time":64.73674,"name":"transport:data_moved","data":{"stream_id":0,"offset":65417,"length":1,"from":"transport","to":"application"}} +{"time":64.74288,"name":"transport:data_moved","data":{"stream_id":0,"offset":65418,"length":1,"from":"transport","to":"application"}} +{"time":64.74838,"name":"transport:data_moved","data":{"stream_id":0,"offset":65419,"length":1,"from":"transport","to":"application"}} +{"time":64.75325,"name":"http:frame_parsed","data":{"stream_id":0,"length":13766,"frame":{"frame_type":"data"}}} +{"time":64.76024,"name":"transport:data_moved","data":{"stream_id":0,"offset":65420,"length":389,"from":"transport","to":"application"}} +{"time":64.844604,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":20},"raw":{"length":43,"payload_length":5},"send_at_time":64.844604,"frames":[{"frame_type":"ack","ack_delay":0.038,"acked_ranges":[[0,61]]}]}} +{"time":64.910774,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":62},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":65809,"length":1154}]}} +{"time":64.98446,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":63},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":66963,"length":1154}]}} +{"time":65.03632,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":64},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":68117,"length":1154}]}} +{"time":65.07454,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":65},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":69271,"length":1154}]}} +{"time":65.10217,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":66},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":70425,"length":1154}]}} +{"time":65.14462,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":67},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":71579,"length":1154}]}} +{"time":65.19449,"name":"transport:data_moved","data":{"stream_id":0,"offset":65809,"length":6924,"from":"transport","to":"application"}} +{"time":65.31866,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":21},"raw":{"length":45,"payload_length":7},"send_at_time":65.31866,"frames":[{"frame_type":"ack","ack_delay":0.022,"acked_ranges":[[0,67]]}]}} +{"time":65.39943,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":68},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":72733,"length":1154}]}} +{"time":65.43638,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":69},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":73887,"length":1154}]}} +{"time":65.486664,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":70},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":75041,"length":1154}]}} +{"time":65.54721,"name":"transport:data_moved","data":{"stream_id":0,"offset":72733,"length":3462,"from":"transport","to":"application"}} +{"time":65.64027,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":22},"raw":{"length":45,"payload_length":7},"send_at_time":65.64027,"frames":[{"frame_type":"ack","ack_delay":0.02,"acked_ranges":[[0,70]]}]}} +{"time":65.719345,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":71},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":76195,"length":1154}]}} +{"time":65.7565,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":72},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":77349,"length":1154}]}} +{"time":65.80488,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":73},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":78503,"length":1154}]}} +{"time":65.86903,"name":"transport:data_moved","data":{"stream_id":0,"offset":76195,"length":2991,"from":"transport","to":"application"}} +{"time":65.88216,"name":"transport:data_moved","data":{"stream_id":0,"offset":79186,"length":1,"from":"transport","to":"application"}} +{"time":65.889145,"name":"transport:data_moved","data":{"stream_id":0,"offset":79187,"length":1,"from":"transport","to":"application"}} +{"time":65.894966,"name":"transport:data_moved","data":{"stream_id":0,"offset":79188,"length":1,"from":"transport","to":"application"}} +{"time":65.900154,"name":"http:frame_parsed","data":{"stream_id":0,"length":11995,"frame":{"frame_type":"data"}}} +{"time":65.90756,"name":"transport:data_moved","data":{"stream_id":0,"offset":79189,"length":468,"from":"transport","to":"application"}} +{"time":65.96611,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":23},"raw":{"length":45,"payload_length":7},"send_at_time":65.96611,"frames":[{"frame_type":"ack","ack_delay":0.021,"acked_ranges":[[0,73]]}]}} +{"time":66.025276,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":74},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":79657,"length":1154}]}} +{"time":66.06975,"name":"transport:data_moved","data":{"stream_id":0,"offset":79657,"length":1154,"from":"transport","to":"application"}} +{"time":66.124466,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":24},"raw":{"length":45,"payload_length":7},"send_at_time":66.124466,"frames":[{"frame_type":"ack","ack_delay":0.013,"acked_ranges":[[0,74]]}]}} +{"time":69.73963,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":75},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":80811,"length":1154}]}} +{"time":69.868256,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":76},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":81965,"length":1154}]}} +{"time":69.90043,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":77},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":83119,"length":1154}]}} +{"time":69.928276,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":78},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":84273,"length":1154}]}} +{"time":69.98565,"name":"transport:data_moved","data":{"stream_id":0,"offset":80811,"length":4616,"from":"transport","to":"application"}} +{"time":70.13513,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":25},"raw":{"length":45,"payload_length":7},"send_at_time":70.13513,"frames":[{"frame_type":"ack","ack_delay":0.028,"acked_ranges":[[0,78]]}]}} +{"time":70.67396,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":79},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":85427,"length":1154}]}} +{"time":71.14398,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":80},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":86581,"length":1154}]}} +{"time":71.1839,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":81},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":87735,"length":1154}]}} +{"time":71.212265,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":82},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":88889,"length":1154}]}} +{"time":71.239365,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":83},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":90043,"length":1154}]}} +{"time":71.26658,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":84},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":91197,"length":1154}]}} +{"time":71.29335,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":85},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":92351,"length":1154}]}} +{"time":71.34734,"name":"transport:data_moved","data":{"stream_id":0,"offset":85427,"length":5757,"from":"transport","to":"application"}} +{"time":71.3611,"name":"transport:data_moved","data":{"stream_id":0,"offset":91184,"length":1,"from":"transport","to":"application"}} +{"time":71.36895,"name":"transport:data_moved","data":{"stream_id":0,"offset":91185,"length":1,"from":"transport","to":"application"}} +{"time":71.37486,"name":"transport:data_moved","data":{"stream_id":0,"offset":91186,"length":1,"from":"transport","to":"application"}} +{"time":71.38111,"name":"http:frame_parsed","data":{"stream_id":0,"length":7007,"frame":{"frame_type":"data"}}} +{"time":71.39138,"name":"transport:data_moved","data":{"stream_id":0,"offset":91187,"length":2318,"from":"transport","to":"application"}} +{"time":71.60036,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":26},"raw":{"length":45,"payload_length":7},"send_at_time":71.60036,"frames":[{"frame_type":"ack","ack_delay":0.042,"acked_ranges":[[0,85]]}]}} +{"time":71.722946,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":86},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":93505,"length":1154}]}} +{"time":71.78868,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":87},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":94659,"length":1154}]}} +{"time":71.845,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":88},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":95813,"length":1154}]}} +{"time":71.90883,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":89},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":96967,"length":1154}]}} +{"time":71.96409,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":90},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":98121,"length":1154}]}} +{"time":72.0257,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":91},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":99275,"length":1154}]}} +{"time":72.08244,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":92},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":100429,"length":1154}]}} +{"time":72.116844,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":93},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":101583,"length":1154}]}} +{"time":72.14596,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":94},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":102737,"length":1154}]}} +{"time":72.19794,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":95},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":103891,"length":1154}]}} +{"time":72.22896,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":96},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":105045,"length":1154}]}} +{"time":72.256485,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":97},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":106199,"length":1154}]}} +{"time":72.315025,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":98},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":107353,"length":1154}]}} +{"time":72.34551,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":99},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":108507,"length":1154}]}} +{"time":72.39537,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":100},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":109661,"length":1154}]}} +{"time":72.4375,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":101},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":110815,"length":1154}]}} +{"time":72.50917,"name":"transport:data_moved","data":{"stream_id":0,"offset":93505,"length":4689,"from":"transport","to":"application"}} +{"time":72.526115,"name":"transport:data_moved","data":{"stream_id":0,"offset":98194,"length":1,"from":"transport","to":"application"}} +{"time":72.53362,"name":"transport:data_moved","data":{"stream_id":0,"offset":98195,"length":1,"from":"transport","to":"application"}} +{"time":72.54019,"name":"transport:data_moved","data":{"stream_id":0,"offset":98196,"length":1,"from":"transport","to":"application"}} +{"time":72.5459,"name":"http:frame_parsed","data":{"stream_id":0,"length":2585,"frame":{"frame_type":"data"}}} +{"time":72.56771,"name":"transport:data_moved","data":{"stream_id":0,"offset":98197,"length":2585,"from":"transport","to":"application"}} +{"time":72.5748,"name":"transport:data_moved","data":{"stream_id":0,"offset":100782,"length":1,"from":"transport","to":"application"}} +{"time":72.58105,"name":"transport:data_moved","data":{"stream_id":0,"offset":100783,"length":1,"from":"transport","to":"application"}} +{"time":72.60762,"name":"transport:data_moved","data":{"stream_id":0,"offset":100784,"length":1,"from":"transport","to":"application"}} +{"time":72.61598,"name":"http:frame_parsed","data":{"stream_id":0,"length":7195,"frame":{"frame_type":"data"}}} +{"time":72.62849,"name":"transport:data_moved","data":{"stream_id":0,"offset":100785,"length":7195,"from":"transport","to":"application"}} +{"time":72.63557,"name":"transport:data_moved","data":{"stream_id":0,"offset":107980,"length":1,"from":"transport","to":"application"}} +{"time":72.6416,"name":"transport:data_moved","data":{"stream_id":0,"offset":107981,"length":1,"from":"transport","to":"application"}} +{"time":72.6471,"name":"transport:data_moved","data":{"stream_id":0,"offset":107982,"length":1,"from":"transport","to":"application"}} +{"time":72.65198,"name":"http:frame_parsed","data":{"stream_id":0,"length":11995,"frame":{"frame_type":"data"}}} +{"time":72.89641,"name":"transport:data_moved","data":{"stream_id":0,"offset":107983,"length":3986,"from":"transport","to":"application"}} +{"time":74.87357,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":27},"raw":{"length":46,"payload_length":8},"send_at_time":74.87357,"frames":[{"frame_type":"ack","ack_delay":0.308,"acked_ranges":[[0,101]]}]}} +{"time":75.028984,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":102},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":111969,"length":1154}]}} +{"time":75.087105,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":103},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":113123,"length":1154}]}} +{"time":75.11568,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":104},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":114277,"length":1154}]}} +{"time":75.142365,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":105},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":115431,"length":1154}]}} +{"time":75.16893,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":106},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":116585,"length":1154}]}} +{"time":75.19614,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":107},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":117739,"length":1154}]}} +{"time":75.22261,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":108},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":118893,"length":1154}]}} +{"time":75.28178,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":109},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":120047,"length":1154}]}} +{"time":75.3147,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":110},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":121201,"length":1154}]}} +{"time":75.34191,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":111},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":122355,"length":1154}]}} +{"time":75.36795,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":112},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":123509,"length":1154}]}} +{"time":75.39378,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":113},"raw":{"length":1200,"payload_length":1179},"frames":[{"frame_type":"stream","stream_id":0,"offset":124663,"length":1154}]}} +{"time":75.4248,"name":"transport:packet_received","data":{"header":{"packet_type":"1RTT","packet_number":114},"raw":{"length":375,"payload_length":354},"frames":[{"frame_type":"stream","stream_id":0,"offset":125817,"length":329,"fin":true}]}} +{"time":75.49011,"name":"transport:data_moved","data":{"stream_id":0,"offset":111969,"length":8009,"from":"transport","to":"application"}} +{"time":75.50546,"name":"transport:data_moved","data":{"stream_id":0,"offset":119978,"length":1,"from":"transport","to":"application"}} +{"time":75.513405,"name":"transport:data_moved","data":{"stream_id":0,"offset":119979,"length":1,"from":"transport","to":"application"}} +{"time":75.51944,"name":"transport:data_moved","data":{"stream_id":0,"offset":119980,"length":1,"from":"transport","to":"application"}} +{"time":75.52494,"name":"http:frame_parsed","data":{"stream_id":0,"length":4797,"frame":{"frame_type":"data"}}} +{"time":75.53606,"name":"transport:data_moved","data":{"stream_id":0,"offset":119981,"length":4797,"from":"transport","to":"application"}} +{"time":75.54283,"name":"transport:data_moved","data":{"stream_id":0,"offset":124778,"length":1,"from":"transport","to":"application"}} +{"time":75.54876,"name":"transport:data_moved","data":{"stream_id":0,"offset":124779,"length":1,"from":"transport","to":"application"}} +{"time":75.55427,"name":"transport:data_moved","data":{"stream_id":0,"offset":124780,"length":1,"from":"transport","to":"application"}} +{"time":75.55924,"name":"http:frame_parsed","data":{"stream_id":0,"length":1363,"frame":{"frame_type":"data"}}} +{"time":75.56559,"name":"transport:data_moved","data":{"stream_id":0,"offset":124781,"length":1363,"from":"transport","to":"application"}} +{"time":75.57174,"name":"transport:data_moved","data":{"stream_id":0,"offset":126144,"length":1,"from":"transport","to":"application"}} +{"time":75.5857,"name":"transport:data_moved","data":{"stream_id":0,"offset":126145,"length":1,"from":"transport","to":"application"}} +{"time":75.59163,"name":"http:frame_parsed","data":{"stream_id":0,"length":0,"frame":{"frame_type":"data"}}} +{"time":75.81649,"name":"transport:packet_sent","data":{"header":{"packet_type":"1RTT","packet_number":28},"raw":{"length":49,"payload_length":11},"send_at_time":75.81649,"frames":[{"frame_type":"connection_close","error_space":"application_error","error_code":256,"reason":"kthxbye"}]}} +{"time":75.81649,"name":"recovery:metrics_updated","data":{"bytes_in_flight":49}} +{"time":141.49516,"name":"connectivity:connection_closed","data":{"owner":"local","application_code":256,"reason":"kthxbye","trigger":"error"}}