diff --git a/Cargo.lock b/Cargo.lock index ab494019..0a9b5ac7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -67,27 +67,6 @@ dependencies = [ "atomic", ] -[[package]] -name = "alloc_counter" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8c3a0a472b3a556e269be64dc65a5c013ba85e940d089367eb8c88f3fdfda9" -dependencies = [ - "alloc_counter_macro", - "pin-utils", -] - -[[package]] -name = "alloc_counter_macro" -version = "0.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a52f81f9add01deacdc1fcb05ba09523a8faefdec6c3f69cb752b9fa9c22e5a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "android_log-sys" version = "0.2.0" @@ -481,18 +460,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "blake3" version = "1.3.1" @@ -601,18 +568,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426" -[[package]] -name = "bstr" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bugsalot" version = "0.2.2" @@ -625,12 +580,6 @@ version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" -[[package]] -name = "byte-slice-cast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87c5fdd0166095e1d463fc6cc01aa8ce547ad77a4e84d42eb6762b084e28067e" - [[package]] name = "byte-tools" version = "0.3.1" @@ -697,21 +646,6 @@ dependencies = [ "capnp", ] -[[package]] -name = "cast" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" -dependencies = [ - "rustc_version", -] - -[[package]] -name = "cast" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" - [[package]] name = "cc" version = "1.0.73" @@ -824,17 +758,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "bitflags", - "textwrap 0.11.0", - "unicode-width", -] - [[package]] name = "clap" version = "3.2.8" @@ -847,7 +770,7 @@ dependencies = [ "indexmap", "strsim", "termcolor", - "textwrap 0.15.0", + "textwrap", ] [[package]] @@ -986,42 +909,6 @@ dependencies = [ "libc", ] -[[package]] -name = "criterion" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f" -dependencies = [ - "atty", - "cast 0.3.0", - "clap 2.34.0", - "criterion-plot", - "csv", - "itertools", - "lazy_static", - "num-traits", - "oorandom", - "plotters", - "rayon", - "regex", - "serde", - "serde_cbor", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - -[[package]] -name = "criterion-plot" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" -dependencies = [ - "cast 0.2.7", - "itertools", -] - [[package]] name = "crossbeam-channel" version = "0.5.5" @@ -1032,31 +919,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" -dependencies = [ - "autocfg", - "cfg-if 1.0.0", - "crossbeam-utils", - "memoffset", - "once_cell", - "scopeguard", -] - [[package]] name = "crossbeam-utils" version = "0.8.10" @@ -1092,12 +954,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - [[package]] name = "crypto-common" version = "0.1.4" @@ -1118,28 +974,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "csv" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" -dependencies = [ - "bstr", - "csv-core", - "itoa 0.4.8", - "ryu", - "serde", -] - -[[package]] -name = "csv-core" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" -dependencies = [ - "memchr", -] - [[package]] name = "ctor" version = "0.1.22" @@ -1505,33 +1339,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "ethbloom" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11da94e443c60508eb62cf256243a64da87304c2802ac2528847f79d750007ef" -dependencies = [ - "crunchy", - "fixed-hash", - "impl-rlp", - "impl-serde", - "tiny-keccak", -] - -[[package]] -name = "ethereum-types" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2827b94c556145446fcce834ca86b7abf0c39a805883fe20e72c5bfdb5a0dc6" -dependencies = [ - "ethbloom", - "fixed-hash", - "impl-rlp", - "impl-serde", - "primitive-types", - "uint", -] - [[package]] name = "event-listener" version = "2.5.2" @@ -1607,18 +1414,6 @@ dependencies = [ "log", ] -[[package]] -name = "fixed-hash" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c" -dependencies = [ - "byteorder", - "rand 0.8.5", - "rustc-hex", - "static_assertions", -] - [[package]] name = "fixedbitset" version = "0.4.1" @@ -1682,12 +1477,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures" version = "0.3.21" @@ -2028,7 +1817,7 @@ checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes 1.1.0", "fnv", - "itoa 1.0.2", + "itoa", ] [[package]] @@ -2069,7 +1858,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.2", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -2117,44 +1906,6 @@ dependencies = [ "libc", ] -[[package]] -name = "impl-codec" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" -dependencies = [ - "parity-scale-codec", -] - -[[package]] -name = "impl-rlp" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" -dependencies = [ - "rlp", -] - -[[package]] -name = "impl-serde" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4551f042f3438e64dbd6226b20527fc84a6e1fe65688b58746a2f53623f25f5c" -dependencies = [ - "serde", -] - -[[package]] -name = "impl-trait-for-tuples" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "indenter" version = "0.3.3" @@ -2228,12 +1979,6 @@ dependencies = [ "either", ] -[[package]] -name = "itoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" - [[package]] name = "itoa" version = "1.0.2" @@ -2286,16 +2031,6 @@ dependencies = [ "serde", ] -[[package]] -name = "keccak-hash" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82bc5d5ca345b067619615f62ac6f93e7daa67eb82d080bc380ed480708ec9e3" -dependencies = [ - "primitive-types", - "tiny-keccak", -] - [[package]] name = "keychain-services" version = "0.0.2" @@ -2315,7 +2050,7 @@ dependencies = [ "backtrace", "byteorder", "cfg-if 1.0.0", - "clap 3.2.8", + "clap", "core-foundation 0.9.3", "core-foundation-sys 0.8.3", "directories", @@ -2362,27 +2097,6 @@ dependencies = [ "keyvaluedb", ] -[[package]] -name = "keyvaluedb-sqlite" -version = "0.1.0" -dependencies = [ - "alloc_counter", - "chrono", - "criterion", - "ctrlc", - "ethereum-types", - "hex", - "keccak-hash", - "keyvaluedb", - "keyvaluedb-shared-tests", - "log", - "parking_lot 0.12.1", - "rand 0.8.5", - "rusqlite", - "sysinfo", - "tempfile", -] - [[package]] name = "keyvaluedb-web" version = "0.1.0" @@ -2772,15 +2486,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - [[package]] name = "num" version = "0.4.0" @@ -2912,12 +2617,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" -[[package]] -name = "oorandom" -version = "11.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" - [[package]] name = "opaque-debug" version = "0.2.3" @@ -3012,32 +2711,6 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "decf7381921fea4dcb2549c5667eda59b3ec297ab7e2b5fc33eac69d2e7da87b" -[[package]] -name = "parity-scale-codec" -version = "3.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9182e4a71cae089267ab03e67c99368db7cd877baf50f931e5d6d4b71e195ac0" -dependencies = [ - "arrayvec", - "bitvec", - "byte-slice-cast", - "impl-trait-for-tuples", - "parity-scale-codec-derive", - "serde", -] - -[[package]] -name = "parity-scale-codec-derive" -version = "3.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9299338969a3d2f491d65f140b00ddec470858402f888af98e8642fb5e8965cd" -dependencies = [ - "proc-macro-crate 1.1.3", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "parking" version = "2.0.0" @@ -3237,34 +2910,6 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" -[[package]] -name = "plotters" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9428003b84df1496fb9d6eeee9c5f8145cb41ca375eb0dad204328888832811f" -dependencies = [ - "num-traits", - "plotters-backend", - "plotters-svg", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "plotters-backend" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" - -[[package]] -name = "plotters-svg" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0918736323d1baff32ee0eade54984f6f201ad7e97d5cfb5d6ab4a358529615" -dependencies = [ - "plotters-backend", -] - [[package]] name = "polling" version = "2.2.0" @@ -3295,19 +2940,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" -[[package]] -name = "primitive-types" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a" -dependencies = [ - "fixed-hash", - "impl-codec", - "impl-rlp", - "impl-serde", - "uint", -] - [[package]] name = "proc-macro-crate" version = "0.1.5" @@ -3434,12 +3066,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - [[package]] name = "rand" version = "0.7.3" @@ -3511,30 +3137,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rayon" -version = "1.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" -dependencies = [ - "autocfg", - "crossbeam-deque", - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" -dependencies = [ - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-utils", - "num_cpus", -] - [[package]] name = "redox_syscall" version = "0.2.13" @@ -3615,16 +3217,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "rlp" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "999508abb0ae792aabed2460c45b89106d97fe4adac593bdaef433c2605847b5" -dependencies = [ - "bytes 1.1.0", - "rustc-hex", -] - [[package]] name = "ron" version = "0.7.1" @@ -3728,12 +3320,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-hex" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" - [[package]] name = "rustc_version" version = "0.4.0" @@ -3932,7 +3518,7 @@ version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" dependencies = [ - "itoa 1.0.2", + "itoa", "ryu", "serde", ] @@ -4230,27 +3816,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "sysinfo" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b6e19da72a8d75be4d40e4dd4686afca31507f26c3ffdf6bd3073278d9de0a0" -dependencies = [ - "cfg-if 1.0.0", - "core-foundation-sys 0.8.3", - "libc", - "ntapi", - "once_cell", - "rayon", - "winapi", -] - -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tempfile" version = "3.3.0" @@ -4274,15 +3839,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - [[package]] name = "textwrap" version = "0.15.0" @@ -4335,7 +3891,7 @@ version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" dependencies = [ - "itoa 1.0.2", + "itoa", "libc", "num_threads", "time-macros", @@ -4347,25 +3903,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tinyvec" version = "1.6.0" @@ -4777,18 +4314,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" -[[package]] -name = "uint" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f03af7ccf01dd611cc450a0d10dbc9b745770d096473e2faf0ca6e2d66d1e0" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - [[package]] name = "unicode-bidi" version = "0.3.8" @@ -4901,7 +4426,7 @@ dependencies = [ "capnp-rpc", "capnpc", "cfg-if 1.0.0", - "clap 3.2.8", + "clap", "config", "crossbeam-channel", "cursive", @@ -4964,7 +4489,6 @@ dependencies = [ "js-sys", "json", "keyring-manager", - "keyvaluedb-sqlite", "keyvaluedb-web", "lazy_static", "libc", @@ -5058,7 +4582,7 @@ dependencies = [ "capnp-rpc", "capnpc", "cfg-if 1.0.0", - "clap 3.2.8", + "clap", "color-eyre", "config", "ctrlc", @@ -5528,15 +5052,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wyz" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b31594f29d27036c383b53b59ed3476874d518f0efb151b27a4c275141390e" -dependencies = [ - "tap", -] - [[package]] name = "x25519-dalek-ng" version = "1.1.1" diff --git a/veilid-core/Cargo.toml b/veilid-core/Cargo.toml index a3b2ae70..97a6128c 100644 --- a/veilid-core/Cargo.toml +++ b/veilid-core/Cargo.toml @@ -78,7 +78,7 @@ webpki-roots = "^0" rustls = "^0.19" rustls-pemfile = "^0.2" futures-util = { version = "^0", default-features = false, features = ["async-await", "sink", "std", "io"] } -keyvaluedb-sqlite = { path = "../external/keyvaluedb/keyvaluedb-sqlite" } +# keyvaluedb-sqlite = { path = "../external/keyvaluedb/keyvaluedb-sqlite" } data-encoding = { version = "^2" } serde = { version = "^1", features = ["derive" ] } serde_cbor = { version = "^0" } diff --git a/veilid-core/src/network_manager/wasm/mod.rs b/veilid-core/src/network_manager/wasm/mod.rs index 16b168f7..b96f9564 100644 --- a/veilid-core/src/network_manager/wasm/mod.rs +++ b/veilid-core/src/network_manager/wasm/mod.rs @@ -5,6 +5,7 @@ use crate::routing_table::*; use connection_manager::*; use protocol::ws::WebsocketProtocolHandler; pub use protocol::*; +use std::io; ///////////////////////////////////////////////////////////////// @@ -59,8 +60,8 @@ impl Network { ) -> EyreResult> { let data_len = data.len(); let timeout_ms = { - let c = self.config().get(); - c.network.connection_initial_timeout_ms; + let c = self.config.get(); + c.network.connection_initial_timeout_ms }; match dial_info.protocol_type() { @@ -71,18 +72,19 @@ impl Network { bail!("no support for TCP protocol") } ProtocolType::WS | ProtocolType::WSS => { - let pnc = WebsocketProtocolHandler::connect(None, &dial_info, timeout_ms) - .await - .wrap_err("connect failure")?; - pnc.send(data).await.wrap_err("send failure")?; + let pnc = + network_result_try!(WebsocketProtocolHandler::connect(&dial_info, timeout_ms) + .await + .wrap_err("connect failure")?); + network_result_try!(pnc.send(data).await.wrap_err("send failure")?); } }; // Network accounting self.network_manager() .stats_packet_sent(dial_info.to_ip_addr(), data_len as u64); - - Ok(()) + + Ok(NetworkResult::Value(())) } // Send data to a dial info, unbound, using a new connection from a random port @@ -90,7 +92,7 @@ impl Network { // This creates a short-lived connection in the case of connection-oriented protocols // for the purpose of sending this one message. // This bypasses the connection table as it is not a 'node to node' connection. - #[instrument(level="trace", err, skip(self, data), fields(data.len = data.len(), ret.len))] + #[instrument(level="trace", err, skip(self, data), fields(data.len = data.len()))] pub async fn send_recv_data_unbound_to_dial_info( &self, dial_info: DialInfo, @@ -99,8 +101,8 @@ impl Network { ) -> EyreResult>> { let data_len = data.len(); let connect_timeout_ms = { - let c = self.config().get(); - c.network.connection_initial_timeout_ms; + let c = self.config.get(); + c.network.connection_initial_timeout_ms }; match dial_info.protocol_type() { @@ -111,40 +113,29 @@ impl Network { bail!("no support for TCP protocol") } ProtocolType::WS | ProtocolType::WSS => { - let pnc = match dial_info.protocol_type() { + let pnc = network_result_try!(match dial_info.protocol_type() { ProtocolType::UDP => unreachable!(), ProtocolType::TCP => unreachable!(), ProtocolType::WS | ProtocolType::WSS => { - WebsocketProtocolHandler::connect(None, &dial_info, connect_timeout_ms) + WebsocketProtocolHandler::connect(&dial_info, connect_timeout_ms) .await .wrap_err("connect failure")? } - }; + }); - pnc.send(data).await.wrap_err("send failure")?; + network_result_try!(pnc.send(data).await.wrap_err("send failure")?); self.network_manager() .stats_packet_sent(dial_info.to_ip_addr(), data_len as u64); - let out = timeout(timeout_ms, pnc.recv()) + let out = network_result_try!(network_result_try!(timeout(timeout_ms, pnc.recv()) .await - .into_timeout_or() - .into_result() - .wrap_err("recv failure")?; + .into_network_result()) + .wrap_err("recv failure")?); - tracing::Span::current().record( - "ret.timeout_or", - &match out { - TimeoutOr::>::Value(ref v) => format!("Value(len={})", v.len()), - TimeoutOr::>::Timeout => "Timeout".to_owned(), - }, - ); + self.network_manager() + .stats_packet_rcvd(dial_info.to_ip_addr(), out.len() as u64); - if let TimeoutOr::Value(out) = &out { - self.network_manager() - .stats_packet_rcvd(dial_info.to_ip_addr(), out.len() as u64); - } - - Ok(out) + Ok(NetworkResult::Value(out)) } } } @@ -171,19 +162,27 @@ impl Network { // Try to send to the exact existing connection if one exists if let Some(conn) = self.connection_manager().get_connection(descriptor).await { // connection exists, send over it - conn.send_async(data).await?; + match conn.send_async(data).await { + ConnectionHandleSendResult::Sent => { + // Network accounting + self.network_manager().stats_packet_sent( + descriptor.remote().to_socket_addr().ip(), + data_len as u64, + ); - // Network accounting - self.network_manager() - .stats_packet_sent(descriptor.remote().to_socket_addr().ip(), data_len as u64); - - // Data was consumed - Ok(None) - } else { - // Connection or didn't exist - // Pass the data back out so we don't own it any more - Ok(Some(data)) + // Data was consumed + return Ok(None); + } + ConnectionHandleSendResult::NotSent(data) => { + // Couldn't send + // Pass the data back out so we don't own it any more + return Ok(Some(data)); + } + } } + // Connection didn't exist + // Pass the data back out so we don't own it any more + Ok(Some(data)) } #[instrument(level="trace", err, skip(self, data), fields(data.len = data.len()))] @@ -203,7 +202,7 @@ impl Network { // Handle connection-oriented protocols let conn = network_result_try!( self.connection_manager() - .get_or_create_connection(Some(local_addr), dial_info.clone()) + .get_or_create_connection(None, dial_info.clone()) .await? ); @@ -214,11 +213,11 @@ impl Network { ))); } let connection_descriptor = conn.connection_descriptor(); - + // Network accounting self.network_manager() .stats_packet_sent(dial_info.to_ip_addr(), data_len as u64); - + Ok(NetworkResult::value(connection_descriptor)) } @@ -228,8 +227,8 @@ impl Network { // get protocol config self.inner.lock().protocol_config = Some({ let c = self.config.get(); - let inbound = ProtocolSet::new(); - let mut outbound = ProtocolSet::new(); + let inbound = ProtocolTypeSet::new(); + let mut outbound = ProtocolTypeSet::new(); if c.network.protocol.ws.connect && c.capabilities.protocol_connect_ws { outbound.insert(ProtocolType::WS); @@ -239,10 +238,15 @@ impl Network { } // XXX: See issue #92 - let family_global = AddressSet::all(); - let family_local = AddressSet::all(); + let family_global = AddressTypeSet::all(); + let family_local = AddressTypeSet::all(); - ProtocolConfig { inbound, outbound, family_global, family_local } + ProtocolConfig { + inbound, + outbound, + family_global, + family_local, + } }); self.inner.lock().network_started = true; diff --git a/veilid-core/src/network_manager/wasm/protocol/mod.rs b/veilid-core/src/network_manager/wasm/protocol/mod.rs index 2c16ce2c..16edb5ee 100644 --- a/veilid-core/src/network_manager/wasm/protocol/mod.rs +++ b/veilid-core/src/network_manager/wasm/protocol/mod.rs @@ -15,8 +15,9 @@ pub enum ProtocolNetworkConnection { impl ProtocolNetworkConnection { pub async fn connect( - local_address: Option, + _local_address: Option, dial_info: &DialInfo, + timeout_ms: u32, ) -> io::Result> { match dial_info.protocol_type() { ProtocolType::UDP => { @@ -26,7 +27,7 @@ impl ProtocolNetworkConnection { panic!("TCP dial info is not supported on WASM targets"); } ProtocolType::WS | ProtocolType::WSS => { - ws::WebsocketProtocolHandler::connect(local_address, dial_info).await + ws::WebsocketProtocolHandler::connect(dial_info, timeout_ms).await } } } diff --git a/veilid-core/src/network_manager/wasm/protocol/wrtc.rs b/veilid-core/src/network_manager/wasm/protocol/wrtc.rs index e69de29b..8b137891 100644 --- a/veilid-core/src/network_manager/wasm/protocol/wrtc.rs +++ b/veilid-core/src/network_manager/wasm/protocol/wrtc.rs @@ -0,0 +1 @@ + diff --git a/veilid-core/src/network_manager/wasm/protocol/ws.rs b/veilid-core/src/network_manager/wasm/protocol/ws.rs index 977b97d5..39b529cf 100644 --- a/veilid-core/src/network_manager/wasm/protocol/ws.rs +++ b/veilid-core/src/network_manager/wasm/protocol/ws.rs @@ -1,8 +1,8 @@ use super::*; use futures_util::{SinkExt, StreamExt}; +use send_wrapper::*; use std::io; use ws_stream_wasm::*; -use send_wrapper::*; struct WebsocketNetworkConnectionInner { _ws_meta: WsMeta, @@ -45,33 +45,46 @@ impl WebsocketNetworkConnection { // self.inner.ws_meta.close().await.map_err(to_io).map(drop) // } - #[instrument(level = "trace", err, skip(self, message), fields(message.len = message.len()))] - pub async fn send(&self, message: Vec) -> io::Result<()> { + #[instrument(level = "trace", err, skip(self, message), fields(network_result, message.len = message.len()))] + pub async fn send(&self, message: Vec) -> io::Result> { if message.len() > MAX_MESSAGE_SIZE { bail_io_error_other!("sending too large WS message"); } - self.inner - .ws_stream - .clone() - .send(WsMessage::Binary(message)) - .await - .map_err(to_io) + let out = SendWrapper::new( + self.inner + .ws_stream + .clone() + .send(WsMessage::Binary(message)), + ) + .await + .map_err(to_io) + .into_network_result()?; + + tracing::Span::current().record("network_result", &tracing::field::display(&out)); + Ok(out) } - #[instrument(level = "trace", err, skip(self), fields(ret.len))] - pub async fn recv(&self) -> io::Result> { + #[instrument(level = "trace", err, skip(self), fields(network_result, ret.len))] + pub async fn recv(&self) -> io::Result>> { let out = match SendWrapper::new(self.inner.ws_stream.clone().next()).await { - Some(WsMessage::Binary(v)) => v, - Some(_) => { - bail_io_error_other!("Unexpected WS message type"); + Some(WsMessage::Binary(v)) => { + if v.len() > MAX_MESSAGE_SIZE { + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "too large ws message", + )); + } + NetworkResult::Value(v) } + Some(_) => NetworkResult::NoConnection(io::Error::new( + io::ErrorKind::ConnectionReset, + "Unexpected WS message type", + )), None => { bail_io_error_other!("WS stream closed"); } }; - if out.len() > MAX_MESSAGE_SIZE { - bail_io_error_other!("sending too large WS message") - } + tracing::Span::current().record("network_result", &tracing::field::display(&out)); Ok(out) } } @@ -84,13 +97,11 @@ pub struct WebsocketProtocolHandler {} impl WebsocketProtocolHandler { #[instrument(level = "trace", err)] pub async fn connect( - local_address: Option, dial_info: &DialInfo, - ) -> io::Result { - assert!(local_address.is_none()); - + timeout_ms: u32, + ) -> io::Result> { // Split dial info up - let (_tls, scheme) = match dial_info { + let (tls, scheme) = match dial_info { DialInfo::WS(_) => (false, "ws"), DialInfo::WSS(_) => (true, "wss"), _ => panic!("invalid dialinfo for WS/WSS protocol"), @@ -101,15 +112,23 @@ impl WebsocketProtocolHandler { bail_io_error_other!("invalid websocket url scheme"); } - let fut = spawn_local(WsMeta::connect(request, None)); - let (wsmeta, wsio) = fut.await.map_err(to_io)?; + let fut = SendWrapper::new(timeout(timeout_ms, async move { + WsMeta::connect(request, None).await.map_err(to_io) + })); + let (wsmeta, wsio) = network_result_try!(network_result_try!(fut + .await + .into_network_result()) + .into_network_result()?); // Make our connection descriptor - Ok(WebsocketNetworkConnection::new( + + let wnc = WebsocketNetworkConnection::new( ConnectionDescriptor::new_no_local(dial_info.to_peer_address()) .map_err(|e| io::Error::new(io::ErrorKind::AddrNotAvailable, e))?, wsmeta, wsio, - )) + ); + + Ok(NetworkResult::Value(ProtocolNetworkConnection::Ws(wnc))) } } diff --git a/veilid-core/src/xx/network_result.rs b/veilid-core/src/xx/network_result.rs index a924c180..579a2a80 100644 --- a/veilid-core/src/xx/network_result.rs +++ b/veilid-core/src/xx/network_result.rs @@ -39,6 +39,7 @@ impl IoNetworkResultExt for io::Result { }, #[cfg(not(feature = "io_error_more"))] Err(e) => { + #[cfg(not(target_arch = "wasm32"))] if let Some(os_err) = e.raw_os_error() { if os_err == libc::EHOSTUNREACH || os_err == libc::ENETUNREACH { return Ok(NetworkResult::NoConnection(e)); @@ -93,6 +94,7 @@ impl FoldedNetworkResultExt for io::Result> { }, #[cfg(not(feature = "io_error_more"))] Err(e) => { + #[cfg(not(target_arch = "wasm32"))] if let Some(os_err) = e.raw_os_error() { if os_err == libc::EHOSTUNREACH || os_err == libc::ENETUNREACH { return Ok(NetworkResult::NoConnection(e)); @@ -126,6 +128,7 @@ impl FoldedNetworkResultExt for io::Result> { }, #[cfg(not(feature = "io_error_more"))] Err(e) => { + #[cfg(not(target_arch = "wasm32"))] if let Some(os_err) = e.raw_os_error() { if os_err == libc::EHOSTUNREACH || os_err == libc::ENETUNREACH { return Ok(NetworkResult::NoConnection(e));