diff --git a/Cargo.lock b/Cargo.lock index ebd2d157..b94cb7d3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -854,9 +854,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "libc", ] @@ -1533,9 +1533,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.5.0" +version = "5.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6943ae99c34386c84a470c499d3414f66502a41340aa895406e0d2e4a207b91d" +checksum = "edd72493923899c6f10c641bdbdeddc7183d6396641d99c1a0d1597f37f92e28" dependencies = [ "cfg-if 1.0.0", "hashbrown 0.14.0", @@ -2249,9 +2249,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes 1.4.0", "fnv", @@ -3757,12 +3757,12 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 1.9.3", + "indexmap 2.0.0", ] [[package]] @@ -4463,9 +4463,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.183" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +checksum = "be9b6f69f1dfd54c3b568ffa45c310d6973a5e5148fd40cf515acaf38cf5bc31" dependencies = [ "serde_derive", ] @@ -4491,9 +4491,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.183" +version = "1.0.185" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +checksum = "dc59dfdcbad1437773485e0367fea4b090a2e0a16d9ffc46af47764536a298ec" dependencies = [ "proc-macro2", "quote", @@ -4750,9 +4750,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] diff --git a/veilid-core/Cargo.toml b/veilid-core/Cargo.toml index c337170b..2303fb00 100644 --- a/veilid-core/Cargo.toml +++ b/veilid-core/Cargo.toml @@ -13,8 +13,24 @@ crate-type = ["cdylib", "staticlib", "rlib"] # Common features default = ["enable-crypto-vld0"] -rt-async-std = ["async-std", "async-std-resolver", "async_executors/async_std", "rtnetlink/smol_socket", "veilid-tools/rt-async-std"] -rt-tokio = ["tokio", "tokio-util", "tokio-stream", "trust-dns-resolver/tokio-runtime", "async_executors/tokio_tp", "async_executors/tokio_io", "async_executors/tokio_timer", "rtnetlink/tokio_socket", "veilid-tools/rt-tokio"] +rt-async-std = [ + "async-std", + "async-std-resolver", + "async_executors/async_std", + "rtnetlink/smol_socket", + "veilid-tools/rt-async-std", +] +rt-tokio = [ + "tokio", + "tokio-util", + "tokio-stream", + "trust-dns-resolver/tokio-runtime", + "async_executors/tokio_tp", + "async_executors/tokio_io", + "async_executors/tokio_timer", + "rtnetlink/tokio_socket", + "veilid-tools/rt-tokio", +] rt-wasm-bindgen = ["veilid-tools/rt-wasm-bindgen", "async_executors/bindgen"] # Crypto support features @@ -36,7 +52,7 @@ network-result-extra = ["veilid-tools/network-result-extra"] [dependencies] # Tools -veilid-tools = { path = "../veilid-tools", features = [ "tracing" ] } +veilid-tools = { path = "../veilid-tools", features = ["tracing"] } paste = "1.0.14" once_cell = "1.18.0" owning_ref = "0.4.1" @@ -57,7 +73,7 @@ eyre = "0.6.8" thiserror = "1.0.47" # Data structures -enumset = { version= "1.1.2", features = ["serde"] } +enumset = { version = "1.1.2", features = ["serde"] } keyvaluedb = { path = "../external/keyvaluedb/keyvaluedb" } range-set-blaze = "0.1.9" weak-table = "0.3.2" @@ -65,15 +81,31 @@ generic-array = "0.14.7" hashlink = { path = "../external/hashlink", features = ["serde_impl"] } # System -futures-util = { version = "0.3.28", default_features = false, features = ["alloc"] } +futures-util = { version = "0.3.28", default_features = false, features = [ + "alloc", +] } flume = { version = "0.11.0", features = ["async"] } parking_lot = "0.12.1" stop-token = { version = "0.7.0", default-features = false } # Crypto -ed25519-dalek = { version = "2.0.0", default_features = false, features = ["alloc", "rand_core", "digest"] } -x25519-dalek = { version = "2.0.0", default_features = false, features = ["alloc", "static_secrets"] } -curve25519-dalek = { version = "4.0.0", default_features = false, features = ["alloc"] } +ed25519-dalek = { version = "2.0.0", default_features = false, features = [ + "alloc", + "rand_core", + "digest", + "zeroize", +] } +x25519-dalek = { version = "2.0.0", default_features = false, features = [ + "alloc", + "static_secrets", + "zeroize", + "precomputed-tables", +] } +curve25519-dalek = { version = "4.0.0", default_features = false, features = [ + "alloc", + "zeroize", + "precomputed-tables", +] } blake3 = { version = "1.4.1" } chacha20poly1305 = "0.10.1" chacha20 = "0.9.1" @@ -82,17 +114,20 @@ argon2 = "0.5.1" # Network async-std-resolver = { version = "0.22.0", optional = true } trust-dns-resolver = { version = "0.22.0", optional = true } -enum-as-inner = "=0.5.1" # temporary fix for trust-dns-resolver v0.22.0 +enum-as-inner = "=0.5.1" # temporary fix for trust-dns-resolver v0.22.0 # Serialization capnp = { version = "0.17.2", default_features = false } -serde = { version = "1.0.183", features = ["derive" ] } +serde = { version = "1.0.183", features = ["derive"] } serde_json = { version = "1.0.105" } serde-big-array = "0.5.1" json = "0.12.4" data-encoding = { version = "2.4.0" } schemars = "0.8.12" -lz4_flex = { version = "0.11.1", default-features = false, features = ["safe-encode", "safe-decode"] } +lz4_flex = { version = "0.11.1", default-features = false, features = [ + "safe-encode", + "safe-decode", +] } # Dependencies for native builds only # Linux, Windows, Mac, iOS, Android @@ -106,12 +141,17 @@ libc = "0.2.147" nix = "0.26.2" # System -async-std = { version = "1.12.0", features = ["unstable"], optional = true} -tokio = { version = "1.32.0", features = ["full"], optional = true} -tokio-util = { version = "0.7.8", features = ["compat"], optional = true} -tokio-stream = { version = "0.1.14", features = ["net"], optional = true} +async-std = { version = "1.12.0", features = ["unstable"], optional = true } +tokio = { version = "1.32.0", features = ["full"], optional = true } +tokio-util = { version = "0.7.8", features = ["compat"], optional = true } +tokio-stream = { version = "0.1.14", features = ["net"], optional = true } async-io = { version = "1.13.0" } -futures-util = { version = "0.3.28", default-features = false, features = ["async-await", "sink", "std", "io"] } +futures-util = { version = "0.3.28", default-features = false, features = [ + "async-await", + "sink", + "std", + "io", +] } # Data structures keyring-manager = { path = "../external/keyring-manager" } @@ -119,7 +159,7 @@ keyvaluedb-sqlite = { path = "../external/keyvaluedb/keyvaluedb-sqlite" } # Network async-tungstenite = { version = "0.23.0", features = ["async-tls"] } -igd = { path = "../external/rust-igd" } +igd = { path = "../external/rust-igd" } async-tls = "0.12.0" webpki = "0.22.0" webpki-roots = "0.25.2" @@ -134,7 +174,10 @@ socket2 = { version = "0.5.3", features = ["all"] } getrandom = { version = "0.2.4", features = ["js"] } # System -async_executors = { version = "0.7.0", default-features = false, features = [ "bindgen", "timer" ]} +async_executors = { version = "0.7.0", default-features = false, features = [ + "bindgen", + "timer", +] } async-lock = "2.8.0" wasm-bindgen = "0.2.87" js-sys = "0.3.64" @@ -181,14 +224,17 @@ ifstructs = "0.1.1" # Dependencies for Linux or Android [target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies] -rtnetlink = { version = "=0.13.0", default-features = false} +rtnetlink = { version = "=0.13.0", default-features = false } netlink-sys = { version = "=0.8.5" } netlink-packet-route = { version = "=0.17.0" } # Dependencies for Windows [target.'cfg(target_os = "windows")'.dependencies] -winapi = { version = "0.3.9", features = [ "iptypes", "iphlpapi" ] } -windows = { version = "0.51.1", features = [ "Win32_NetworkManagement_Dns", "Win32_Foundation" ]} +winapi = { version = "0.3.9", features = ["iptypes", "iphlpapi"] } +windows = { version = "0.51.1", features = [ + "Win32_NetworkManagement_Dns", + "Win32_Foundation", +] } windows-permissions = "0.2.4" # Dependencies for iOS @@ -207,7 +253,7 @@ features = ["bundled"] serial_test = "2.0.0" [target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies] -simplelog = { version = "0.12.1", features=["test"] } +simplelog = { version = "0.12.1", features = ["test"] } [target.'cfg(target_arch = "wasm32")'.dev-dependencies] wasm-bindgen-test = "0.3.37" diff --git a/veilid-core/src/network_manager/wasm/mod.rs b/veilid-core/src/network_manager/wasm/mod.rs index feb9c0da..c9a0c445 100644 --- a/veilid-core/src/network_manager/wasm/mod.rs +++ b/veilid-core/src/network_manager/wasm/mod.rs @@ -348,8 +348,8 @@ impl Network { } // XXX: See issue #92 - let family_global = AddressTypeSet::all(); - let family_local = AddressTypeSet::all(); + let family_global = AddressTypeSet::from(AddressType::IPV4); + let family_local = AddressTypeSet::from(AddressType::IPV4); ProtocolConfig { outbound, diff --git a/veilid-flutter/example/reset_run.bat b/veilid-flutter/example/reset_run.bat index 3d53a241..c6bea309 100644 --- a/veilid-flutter/example/reset_run.bat +++ b/veilid-flutter/example/reset_run.bat @@ -1,2 +1,2 @@ @echo off -flutter run --dart-define=DELETE_TABLE_STORE=1 --dart-define=DELETE_PROTECTED_STORE=1 --dart-define=DELETE_BLOCK_STORE=1 +flutter run --dart-define=DELETE_TABLE_STORE=1 --dart-define=DELETE_PROTECTED_STORE=1 --dart-define=DELETE_BLOCK_STORE=1 %* diff --git a/veilid-flutter/example/reset_run.sh b/veilid-flutter/example/reset_run.sh index eb6fda85..7c9c0c73 100755 --- a/veilid-flutter/example/reset_run.sh +++ b/veilid-flutter/example/reset_run.sh @@ -1,2 +1,2 @@ #!/bin/bash -flutter run --dart-define=DELETE_TABLE_STORE=1 --dart-define=DELETE_PROTECTED_STORE=1 --dart-define=DELETE_BLOCK_STORE=1 +flutter run --dart-define=DELETE_TABLE_STORE=1 --dart-define=DELETE_PROTECTED_STORE=1 --dart-define=DELETE_BLOCK_STORE=1 $@ diff --git a/veilid-flutter/lib/default_config.dart b/veilid-flutter/lib/default_config.dart index 5ee45061..65b3dbeb 100644 --- a/veilid-flutter/lib/default_config.dart +++ b/veilid-flutter/lib/default_config.dart @@ -58,129 +58,133 @@ int getRemoteMaxStorageSpaceMb() { return 256; } -Future getDefaultVeilidConfig(String programName) async => - VeilidConfig( - programName: programName, - namespace: '', - capabilities: const VeilidConfigCapabilities(disable: []), - protectedStore: const VeilidConfigProtectedStore( - allowInsecureFallback: false, - alwaysUseInsecureStorage: false, - directory: '', - delete: false, - deviceEncryptionKeyPassword: '', +Future getDefaultVeilidConfig(String programName) async { + // ignore: do_not_use_environment + final bootstrap = const String.fromEnvironment('BOOTSTRAP').split(','); + return VeilidConfig( + programName: programName, + namespace: '', + capabilities: const VeilidConfigCapabilities(disable: []), + protectedStore: const VeilidConfigProtectedStore( + allowInsecureFallback: false, + alwaysUseInsecureStorage: false, + directory: '', + delete: false, + deviceEncryptionKeyPassword: '', + ), + tableStore: VeilidConfigTableStore( + directory: kIsWeb + ? '' + : p.join((await getApplicationSupportDirectory()).absolute.path, + 'table_store'), + delete: false, + ), + blockStore: VeilidConfigBlockStore( + directory: kIsWeb + ? '' + : p.join((await getApplicationSupportDirectory()).absolute.path, + 'block_store'), + delete: false, + ), + network: VeilidConfigNetwork( + connectionInitialTimeoutMs: 2000, + connectionInactivityTimeoutMs: 60000, + maxConnectionsPerIp4: 32, + maxConnectionsPerIp6Prefix: 32, + maxConnectionsPerIp6PrefixSize: 56, + maxConnectionFrequencyPerMin: 128, + clientWhitelistTimeoutMs: 300000, + reverseConnectionReceiptTimeMs: 5000, + holePunchReceiptTimeMs: 5000, + routingTable: VeilidConfigRoutingTable( + nodeId: [], + nodeIdSecret: [], + bootstrap: bootstrap.isNotEmpty + ? bootstrap + : (kIsWeb + ? ['ws://bootstrap.veilid.net:5150/ws'] + : ['bootstrap.veilid.net']), + limitOverAttached: 64, + limitFullyAttached: 32, + limitAttachedStrong: 16, + limitAttachedGood: 8, + limitAttachedWeak: 4, ), - tableStore: VeilidConfigTableStore( - directory: kIsWeb - ? '' - : p.join((await getApplicationSupportDirectory()).absolute.path, - 'table_store'), - delete: false, + rpc: const VeilidConfigRPC( + concurrency: 0, + queueSize: 1024, + maxTimestampBehindMs: 10000, + maxTimestampAheadMs: 10000, + timeoutMs: 5000, + maxRouteHopCount: 4, + defaultRouteHopCount: 1, ), - blockStore: VeilidConfigBlockStore( - directory: kIsWeb - ? '' - : p.join((await getApplicationSupportDirectory()).absolute.path, - 'block_store'), - delete: false, - ), - network: VeilidConfigNetwork( + dht: VeilidConfigDHT( + resolveNodeTimeoutMs: 10000, + resolveNodeCount: 1, + resolveNodeFanout: 4, + maxFindNodeCount: 20, + getValueTimeoutMs: 10000, + getValueCount: 3, + getValueFanout: 4, + setValueTimeoutMs: 10000, + setValueCount: 4, + setValueFanout: 6, + minPeerCount: 20, + minPeerRefreshTimeMs: 60000, + validateDialInfoReceiptTimeMs: 2000, + localSubkeyCacheSize: getLocalSubkeyCacheSize(), + localMaxSubkeyCacheMemoryMb: await getLocalMaxSubkeyCacheMemoryMb(), + remoteSubkeyCacheSize: getRemoteSubkeyCacheSize(), + remoteMaxRecords: getRemoteMaxRecords(), + remoteMaxSubkeyCacheMemoryMb: await getRemoteMaxSubkeyCacheMemoryMb(), + remoteMaxStorageSpaceMb: getRemoteMaxStorageSpaceMb()), + upnp: true, + detectAddressChanges: true, + restrictedNatRetries: 0, + tls: const VeilidConfigTLS( + certificatePath: '', + privateKeyPath: '', connectionInitialTimeoutMs: 2000, - connectionInactivityTimeoutMs: 60000, - maxConnectionsPerIp4: 32, - maxConnectionsPerIp6Prefix: 32, - maxConnectionsPerIp6PrefixSize: 56, - maxConnectionFrequencyPerMin: 128, - clientWhitelistTimeoutMs: 300000, - reverseConnectionReceiptTimeMs: 5000, - holePunchReceiptTimeMs: 5000, - routingTable: const VeilidConfigRoutingTable( - nodeId: [], - nodeIdSecret: [], - bootstrap: kIsWeb - ? ['ws://bootstrap.veilid.net:5150/ws'] - : ['bootstrap.veilid.net'], - limitOverAttached: 64, - limitFullyAttached: 32, - limitAttachedStrong: 16, - limitAttachedGood: 8, - limitAttachedWeak: 4, + ), + application: const VeilidConfigApplication( + https: VeilidConfigHTTPS( + enabled: false, + listenAddress: '', + path: '', + ), + http: VeilidConfigHTTP( + enabled: false, + listenAddress: '', + path: '', + )), + protocol: const VeilidConfigProtocol( + udp: VeilidConfigUDP( + enabled: !kIsWeb, + socketPoolSize: 0, + listenAddress: '', ), - rpc: const VeilidConfigRPC( - concurrency: 0, - queueSize: 1024, - maxTimestampBehindMs: 10000, - maxTimestampAheadMs: 10000, - timeoutMs: 5000, - maxRouteHopCount: 4, - defaultRouteHopCount: 1, + tcp: VeilidConfigTCP( + connect: !kIsWeb, + listen: !kIsWeb, + maxConnections: 32, + listenAddress: '', ), - dht: VeilidConfigDHT( - resolveNodeTimeoutMs: 10000, - resolveNodeCount: 1, - resolveNodeFanout: 4, - maxFindNodeCount: 20, - getValueTimeoutMs: 10000, - getValueCount: 3, - getValueFanout: 4, - setValueTimeoutMs: 10000, - setValueCount: 4, - setValueFanout: 6, - minPeerCount: 20, - minPeerRefreshTimeMs: 60000, - validateDialInfoReceiptTimeMs: 2000, - localSubkeyCacheSize: getLocalSubkeyCacheSize(), - localMaxSubkeyCacheMemoryMb: await getLocalMaxSubkeyCacheMemoryMb(), - remoteSubkeyCacheSize: getRemoteSubkeyCacheSize(), - remoteMaxRecords: getRemoteMaxRecords(), - remoteMaxSubkeyCacheMemoryMb: - await getRemoteMaxSubkeyCacheMemoryMb(), - remoteMaxStorageSpaceMb: getRemoteMaxStorageSpaceMb()), - upnp: true, - detectAddressChanges: true, - restrictedNatRetries: 0, - tls: const VeilidConfigTLS( - certificatePath: '', - privateKeyPath: '', - connectionInitialTimeoutMs: 2000, + ws: VeilidConfigWS( + connect: true, + listen: !kIsWeb, + maxConnections: 16, + listenAddress: '', + path: 'ws', ), - application: const VeilidConfigApplication( - https: VeilidConfigHTTPS( - enabled: false, - listenAddress: '', - path: '', - ), - http: VeilidConfigHTTP( - enabled: false, - listenAddress: '', - path: '', - )), - protocol: const VeilidConfigProtocol( - udp: VeilidConfigUDP( - enabled: !kIsWeb, - socketPoolSize: 0, - listenAddress: '', - ), - tcp: VeilidConfigTCP( - connect: !kIsWeb, - listen: !kIsWeb, - maxConnections: 32, - listenAddress: '', - ), - ws: VeilidConfigWS( - connect: true, - listen: !kIsWeb, - maxConnections: 16, - listenAddress: '', - path: 'ws', - ), - wss: VeilidConfigWSS( - connect: true, - listen: false, - maxConnections: 16, - listenAddress: '', - path: 'ws', - ), + wss: VeilidConfigWSS( + connect: true, + listen: false, + maxConnections: 16, + listenAddress: '', + path: 'ws', ), ), - ); + ), + ); +} diff --git a/veilid-wasm/wasm_build.sh b/veilid-wasm/wasm_build.sh index b450baeb..c38f8bff 100755 --- a/veilid-wasm/wasm_build.sh +++ b/veilid-wasm/wasm_build.sh @@ -34,7 +34,7 @@ else OUTPUTDIR=../target/wasm32-unknown-unknown/debug/pkg INPUTDIR=../target/wasm32-unknown-unknown/debug - RUSTFLAGS="-O -g" cargo build --target wasm32-unknown-unknown + RUSTFLAGS="-O -g $RUSTFLAGS" cargo build --target wasm32-unknown-unknown mkdir -p $OUTPUTDIR wasm-bindgen --out-dir $OUTPUTDIR --target web --keep-debug --debug $INPUTDIR/veilid_wasm.wasm ./wasm-sourcemap.py $OUTPUTDIR/veilid_wasm_bg.wasm -o $OUTPUTDIR/veilid_wasm_bg.wasm.map --dwarfdump $DWARFDUMP @@ -44,4 +44,4 @@ fi popd &> /dev/null # Print for use with scripts -echo SUCCESS:OUTPUTDIR=$(get_abs_filename $OUTPUTDIR) \ No newline at end of file +echo SUCCESS:OUTPUTDIR=$(get_abs_filename $OUTPUTDIR)