This commit is contained in:
John Smith 2022-03-03 20:45:39 -05:00
parent 7458d0d991
commit 98799b4d3a
20 changed files with 426 additions and 135 deletions

1
Cargo.lock generated
View File

@ -3954,6 +3954,7 @@ dependencies = [
"console_error_panic_hook",
"ffi-support",
"futures",
"jni",
"js-sys",
"lazy_static",
"log",

View File

@ -62,7 +62,7 @@ impl VeilidCoreContext {
if utils::android::ANDROID_GLOBALS.lock().is_none() {
error!("Android globals are not set up");
config.terminate().await;
return Err("Android globals are not set up".to_owned());
return Err(VeilidAPIError::Internal { message: "Android globals are not set up".to_owned() });
}
}
}

View File

@ -47,6 +47,9 @@ pub fn veilid_version() -> (u32, u32, u32) {
)
}
#[cfg(target_os = "android")]
pub use intf::utils::android::{veilid_core_setup_android, veilid_core_setup_android_no_log};
pub static DEFAULT_LOG_IGNORE_LIST: [&str; 8] = [
"async_std",
"async_io",

View File

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.4.32'
repositories {
google()
mavenCentral()

View File

@ -11,13 +11,13 @@ import io.flutter.plugin.common.MethodChannel.Result
/** VeilidPlugin */
class VeilidPlugin: FlutterPlugin, MethodCallHandler {
class object {
{
System.loadLibrary("veilid_flutter");
companion object {
init {
System.loadLibrary("veilid_flutter")
}
}
native fun init_android(ctx: Context)
external fun init_android(ctx: Context)
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
init_android(flutterPluginBinding.getApplicationContext())

View File

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.4.32'
repositories {
google()
mavenCentral()

View File

@ -0,0 +1,125 @@
import 'package:veilid/veilid.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
Future<VeilidConfig> getDefaultVeilidConfig() async {
return VeilidConfig(
programName: "Veilid Plugin Test",
namespace: "",
apiLogLevel: VeilidConfigLogLevel.trace,
capabilities: VeilidConfigCapabilities(
protocolUDP: !kIsWeb,
protocolConnectTCP: !kIsWeb,
protocolAcceptTCP: !kIsWeb,
protocolConnectWS: true,
protocolAcceptWS: !kIsWeb,
protocolConnectWSS: true,
protocolAcceptWSS: false,
),
protectedStore: VeilidConfigProtectedStore(
allowInsecureFallback: false,
alwaysUseInsecureStorage: false,
insecureFallbackDirectory: "",
delete: false,
),
tableStore: VeilidConfigTableStore(
directory: p.join((await getApplicationSupportDirectory()).absolute.path,
"table_store"),
delete: false,
),
blockStore: VeilidConfigBlockStore(
directory: p.join((await getApplicationSupportDirectory()).absolute.path,
"block_store"),
delete: false,
),
network: VeilidConfigNetwork(
maxConnections: 16,
connectionInitialTimeoutMs: 2000,
nodeId: "",
nodeIdSecret: "",
bootstrap: [],
rpc: VeilidConfigRPC(
concurrency: 0,
queueSize: 1024,
maxTimestampBehindMs: 10000,
maxTimestampAheadMs: 10000,
timeoutMs: 10000,
maxRouteHopCount: 7,
),
dht: VeilidConfigDHT(
resolveNodeTimeoutMs: null,
resolveNodeCount: 20,
resolveNodeFanout: 3,
maxFindNodeCount: 20,
getValueTimeoutMs: null,
getValueCount: 20,
getValueFanout: 3,
setValueTimeoutMs: null,
setValueCount: 20,
setValueFanout: 5,
minPeerCount: 20,
minPeerRefreshTimeMs: 2000,
validateDialInfoReceiptTimeMs: 5000,
),
upnp: true,
natpmp: true,
enableLocalPeerScope: false,
restrictedNatRetries: 3,
tls: VeilidConfigTLS(
certificatePath: "",
privateKeyPath: "",
connectionInitialTimeoutMs: 2000,
),
application: VeilidConfigApplication(
https: VeilidConfigHTTPS(
enabled: false,
listenAddress: "",
path: "",
url: null,
),
http: VeilidConfigHTTP(
enabled: false,
listenAddress: "",
path: "",
url: null,
)),
protocol: VeilidConfigProtocol(
udp: VeilidConfigUDP(
enabled: !kIsWeb,
socketPoolSize: 0,
listenAddress: "[::]:5150",
publicAddress: null,
),
tcp: VeilidConfigTCP(
connect: !kIsWeb,
listen: !kIsWeb,
maxConnections: 32,
listenAddress: "[::]:5150",
publicAddress: null,
),
ws: VeilidConfigWS(
connect: true,
listen: !kIsWeb,
maxConnections: 16,
listenAddress: "[::]:5150",
path: "ws",
url: null,
),
wss: VeilidConfigWSS(
connect: true,
listen: false,
maxConnections: 16,
listenAddress: "[::]:5150",
path: "ws",
url: null,
),
),
leases: VeilidConfigLeases(
maxServerSignalLeases: 256,
maxServerRelayLeases: 8,
maxClientSignalLeases: 2,
maxClientRelayLeases: 2,
)),
);
}

View File

@ -1,51 +1,54 @@
import 'dart:async';
import 'package:logger/logger.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:veilid/veilid.dart';
import 'package:logger_flutter_viewer/logger_flutter_viewer.dart';
import 'package:flutter_loggy/flutter_loggy.dart';
import 'package:loggy/loggy.dart';
// Logger
var stacklog = Logger(
printer: PrettyPrinter(
methodCount: 10,
errorMethodCount: 10,
printTime: true,
colors: true,
printEmojis: true),
output: ScreenOutput());
var log = Logger(
printer: PrettyPrinter(
methodCount: 0,
errorMethodCount: 1,
printTime: true,
colors: true,
printEmojis: true,
noBoxingByDefault: true,
),
output: ScreenOutput());
var barelog = Logger(
printer: PrettyPrinter(
methodCount: 0,
errorMethodCount: 0,
printTime: false,
colors: true,
printEmojis: true,
noBoxingByDefault: true,
),
output: ScreenOutput());
import 'config.dart';
class ScreenOutput extends LogOutput {
@override
void output(OutputEvent event) {
LogConsole.output(event);
}
// Loggy tools
const LogLevel traceLevel = LogLevel('trace', 1);
extension TraceLoggy on Loggy {
void trace(dynamic message, [Object? error, StackTrace? stackTrace]) =>
log(traceLevel, message, error, stackTrace);
}
LogOptions getLogOptions(LogLevel? level) {
return LogOptions(
level ?? LogLevel.all,
stackTraceLevel: LogLevel.error,
);
}
void setRootLogLevel(LogLevel? level) {
Loggy('').level = getLogOptions(level);
}
void initLoggy() {
Loggy.initLoggy(
logPrinter: StreamPrinter(
const PrettyDeveloperPrinter(),
),
logOptions: getLogOptions(null),
);
}
// Entrypoint
void main() {
runApp(const MyApp());
WidgetsFlutterBinding.ensureInitialized();
initLoggy();
runApp(MaterialApp(
title: 'Veilid Plugin Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: const MyApp()));
}
// Main App
@ -56,8 +59,9 @@ class MyApp extends StatefulWidget {
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
class _MyAppState extends State<MyApp> with UiLoggy {
String _veilidVersion = 'Unknown';
Stream<VeilidUpdate>? _updateStream;
@override
void initState() {
@ -75,10 +79,11 @@ class _MyAppState extends State<MyApp> {
} on PlatformException {
veilidVersion = 'Failed to get veilid version.';
}
log.e("Error test");
log.w("Warning test");
stacklog.i("Info test with stacklog");
barelog.d("debug bare-log test");
loggy.error("Error test");
loggy.warning("Warning test");
loggy.info("Info test");
loggy.debug("Debug test");
loggy.trace("Trace test");
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
@ -92,13 +97,70 @@ class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
final ButtonStyle buttonStyle =
ElevatedButton.styleFrom(textStyle: const TextStyle(fontSize: 20));
return Scaffold(
appBar: AppBar(
title: Text('Veilid Plugin Version $_veilidVersion'),
),
body: LogConsole(dark: Theme.of(context).brightness == Brightness.dark),
),
);
body: Column(children: [
Expanded(
child: Container(
color: ThemeData.dark().scaffoldBackgroundColor,
height: MediaQuery.of(context).size.height * 0.4,
child: LoggyStreamWidget(logLevel: loggy.level.logLevel),
)),
Container(
padding: const EdgeInsets.fromLTRB(8, 8, 8, 12),
child: Row(children: [
ElevatedButton(
style: buttonStyle,
onPressed: () async {
//var await Veilid.instance.startupVeilidCore(await getDefaultVeilidConfig())
// setState(() {
// };
},
child: const Text('Startup'),
),
ElevatedButton(
style: buttonStyle,
onPressed: () {},
child: const Text('Shutdown'),
),
])),
Row(children: [
Expanded(
child: TextField(
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: 'Debug Command'),
textInputAction: TextInputAction.send,
onSubmitted: (String v) async {
loggy.debug(await Veilid.instance.debug(v));
})),
DropdownButton<LogLevel>(
value: loggy.level.logLevel,
onChanged: (LogLevel? newLevel) {
setState(() {
setRootLogLevel(newLevel);
});
},
items: const [
DropdownMenuItem<LogLevel>(
value: LogLevel.error, child: Text("Error")),
DropdownMenuItem<LogLevel>(
value: LogLevel.warning, child: Text("Warning")),
DropdownMenuItem<LogLevel>(
value: LogLevel.info, child: Text("Info")),
DropdownMenuItem<LogLevel>(
value: LogLevel.debug, child: Text("Debug")),
DropdownMenuItem<LogLevel>(
value: traceLevel, child: Text("Trace")),
DropdownMenuItem<LogLevel>(
value: LogLevel.all, child: Text("All")),
])
]),
]));
}
}

View File

@ -5,8 +5,10 @@
import FlutterMacOS
import Foundation
import path_provider_macos
import veilid
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
VeilidPlugin.register(with: registry.registrar(forPlugin: "VeilidPlugin"))
}

View File

@ -71,6 +71,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
flutter:
dependency: "direct main"
description: flutter
@ -83,6 +90,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
flutter_loggy:
dependency: "direct main"
description:
name: flutter_loggy
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_test:
dependency: "direct dev"
description: flutter
@ -107,20 +121,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
logger:
loggy:
dependency: "direct main"
description:
name: logger
name: loggy
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
logger_flutter_viewer:
dependency: "direct main"
description:
name: logger_flutter_viewer
url: "https://pub.dartlang.org"
source: hosted
version: "0.8.0"
version: "2.0.1+1"
matcher:
dependency: transitive
description:
@ -149,6 +156,62 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.9"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.5"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.3"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
@ -156,27 +219,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
sensors_plus:
process:
dependency: transitive
description:
name: sensors_plus
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.1"
sensors_plus_platform_interface:
version: "4.2.4"
rxdart:
dependency: transitive
description:
name: sensors_plus_platform_interface
name: rxdart
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
sensors_plus_web:
dependency: transitive
description:
name: sensors_plus_web
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "0.27.3"
sky_engine:
dependency: transitive
description: flutter
@ -245,6 +301,20 @@ packages:
relative: true
source: path
version: "0.0.1"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.1"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
sdks:
dart: ">=2.15.1 <3.0.0"
flutter: ">=2.5.0"
flutter: ">=2.8.0"

View File

@ -33,8 +33,8 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
logger: ^1.1.0
logger_flutter_viewer: ^0.8.0
loggy: ^2.0.1+1
flutter_loggy: ^2.0.1
dev_dependencies:
flutter_test:

View File

@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:change_case/change_case.dart';
@ -996,6 +995,7 @@ abstract class Veilid {
Future<VeilidState> getVeilidState();
Future<void> changeApiLogLevel(VeilidConfigLogLevel logLevel);
Future<void> shutdownVeilidCore();
Future<String> debug(String command);
String veilidVersionString();
VeilidVersion veilidVersion();
}

View File

@ -38,6 +38,9 @@ typedef _GetVeilidStateDart = void Function(int);
// fn change_api_log_level(port: i64, log_level: FfiStr)
typedef _ChangeApiLogLevelC = Void Function(Int64, Pointer<Utf8>);
typedef _ChangeApiLogLevelDart = void Function(int, Pointer<Utf8>);
// fn debug(port: i64, log_level: FfiStr)
typedef _DebugC = Void Function(Int64, Pointer<Utf8>);
typedef _DebugDart = void Function(int, Pointer<Utf8>);
// fn shutdown_veilid_core(port: i64)
typedef _ShutdownVeilidCoreC = Void Function(Int64);
typedef _ShutdownVeilidCoreDart = void Function(int);
@ -73,8 +76,7 @@ const int messageStreamClose = 8;
Veilid getVeilid() => VeilidFFI(_dylib);
// Parse handle async returns
Future<T> processFuturePlain<T>(
T Function(Map<String, dynamic>)? jsonConstructor, Future<dynamic> future) {
Future<T> processFuturePlain<T>(Future<dynamic> future) {
return future.then((value) {
final list = value as List<dynamic>;
switch (list[0] as int) {
@ -235,6 +237,7 @@ class VeilidFFI implements Veilid {
final _GetVeilidStateDart _getVeilidState;
final _ChangeApiLogLevelDart _changeApiLogLevel;
final _ShutdownVeilidCoreDart _shutdownVeilidCore;
final _DebugDart _debug;
final _VeilidVersionStringDart _veilidVersionString;
final _VeilidVersionDart _veilidVersion;
@ -254,6 +257,7 @@ class VeilidFFI implements Veilid {
_shutdownVeilidCore =
dylib.lookupFunction<_ShutdownVeilidCoreC, _ShutdownVeilidCoreDart>(
'shutdown_veilid_core'),
_debug = dylib.lookupFunction<_DebugC, _DebugDart>('debug'),
_veilidVersionString = dylib.lookupFunction<_VeilidVersionStringC,
_VeilidVersionStringDart>('veilid_version_string'),
_veilidVersion =
@ -304,6 +308,15 @@ class VeilidFFI implements Veilid {
return processFutureVoid(recvPort.single);
}
@override
Future<String> debug(String command) async {
var nativeCommand = command.toNativeUtf8();
final recvPort = ReceivePort("debug");
final sendPort = recvPort.sendPort;
_debug(sendPort.nativePort, nativeCommand);
return processFuturePlain(recvPort.single);
}
@override
String veilidVersionString() {
final versionString = _veilidVersionString();

View File

@ -9,26 +9,37 @@ import 'dart:typed_data';
Veilid getVeilid() => VeilidJS();
class VeilidJS implements Veilid {
@override
Stream<VeilidUpdate> startupVeilidCore(VeilidConfig config) {
throw UnimplementedError();
}
@override
Future<VeilidState> getVeilidState() {
throw UnimplementedError();
}
@override
Future<void> changeApiLogLevel(VeilidConfigLogLevel logLevel) {
throw UnimplementedError();
}
@override
Future<void> shutdownVeilidCore() {
throw UnimplementedError();
}
@override
Future<String> debug(String command) {
throw UnimplementedError();
}
@override
String veilidVersionString() {
throw UnimplementedError();
}
@override
VeilidVersion veilidVersion() {
throw UnimplementedError();
}

View File

@ -14,10 +14,9 @@ FetchContent_Declare(
FetchContent_MakeAvailable(Corrosion)
corrosion_import_crate(MANIFEST_PATH ${CMAKE_SOURCE_DIR}/../../rust/Cargo.toml)
corrosion_import_crate(MANIFEST_PATH ${CMAKE_SOURCE_DIR}/../../rust/Cargo.toml CRATES veilid-flutter)
# Flutter-specific
set(CRATE_NAME "veilid-flutter")
target_link_libraries(${PLUGIN_NAME} PUBLIC ${CRATE_NAME})
# list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${CRATE_NAME}-shared>)

View File

@ -15,6 +15,8 @@ dependencies:
sdk: flutter
ffi: ^1.1.2
change_case: ^1.0.1
path_provider: ^2.0.9
path: ^1.8.0
dev_dependencies:
flutter_test:

View File

@ -34,6 +34,10 @@ wasm-logger = "^0"
wasm-bindgen-futures = "^0"
js-sys = "^0"
# Dependencies for Android builds only
[target.'cfg(target_os = "android")'.dependencies]
jni = "^0"
# Dev Dependencies for WASM builds only
[target.'cfg(target_arch = "wasm32")'.dev-dependencies]
wasm-bindgen-test = "^0"

View File

@ -21,5 +21,5 @@ pub extern "system" fn Java_com_veilid_veilid_VeilidPlugin_init_1android(
_class: JClass,
ctx: JObject,
) {
crate::intf::utils::android::veilid_core_setup_android_no_log(env, ctx);
veilid_core::veilid_core_setup_android_no_log(env, ctx);
}

View File

@ -1,4 +1,3 @@
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:veilid/veilid.dart';

View File

@ -48,16 +48,16 @@ core:
delete: false
network:
max_connections: 16
connection_initial_timeout: 2000000
connection_initial_timeout_ms: 2000
node_id: ''
node_id_secret: ''
bootstrap: []
rpc:
concurrency: 0
queue_size: 1024
max_timestamp_behind: 10000000
max_timestamp_ahead: 10000000
timeout: 10000000
max_timestamp_behind_ms: 10000
max_timestamp_ahead_ms: 10000
timeout_ms: 10000
max_route_hop_count: 7
dht:
resolve_node_timeout:
@ -71,8 +71,8 @@ core:
set_value_count: 20
set_value_fanout: 5
min_peer_count: 20
min_peer_refresh_time: 2000000
validate_dial_info_receipt_time: 5000000
min_peer_refresh_time_ms: 2000
validate_dial_info_receipt_time_ms: 5000
upnp: false
natpmp: false
enable_local_peer_scope: false
@ -80,7 +80,7 @@ core:
tls:
certificate_path: '/etc/veilid/server.crt'
private_key_path: '/etc/veilid/private/server.key'
connection_initial_timeout: 2000000
connection_initial_timeout_ms: 2000
application:
https:
enabled: false
@ -476,34 +476,34 @@ pub struct Protocol {
pub struct Tls {
pub certificate_path: PathBuf,
pub private_key_path: PathBuf,
pub connection_initial_timeout: u64,
pub connection_initial_timeout_ms: u32,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Rpc {
pub concurrency: u32,
pub queue_size: u32,
pub max_timestamp_behind: Option<u64>,
pub max_timestamp_ahead: Option<u64>,
pub timeout: u64,
pub max_timestamp_behind_ms: Option<u32>,
pub max_timestamp_ahead_ms: Option<u32>,
pub timeout_ms: u32,
pub max_route_hop_count: u8,
}
#[derive(Debug, Deserialize, Serialize)]
pub struct Dht {
pub resolve_node_timeout: Option<u64>,
pub resolve_node_timeout_ms: Option<u32>,
pub resolve_node_count: u32,
pub resolve_node_fanout: u32,
pub max_find_node_count: u32,
pub get_value_timeout: Option<u64>,
pub get_value_timeout_ms: Option<u32>,
pub get_value_count: u32,
pub get_value_fanout: u32,
pub set_value_timeout: Option<u64>,
pub set_value_timeout_ms: Option<u32>,
pub set_value_count: u32,
pub set_value_fanout: u32,
pub min_peer_count: u32,
pub min_peer_refresh_time: u64,
pub validate_dial_info_receipt_time: u64,
pub min_peer_refresh_time_ms: u32,
pub validate_dial_info_receipt_time_ms: u32,
}
#[derive(Debug, Deserialize, Serialize)]
@ -517,7 +517,7 @@ pub struct Leases {
#[derive(Debug, Deserialize, Serialize)]
pub struct Network {
pub max_connections: u32,
pub connection_initial_timeout: u64,
pub connection_initial_timeout_ms: u32,
pub node_id: veilid_core::DHTKey,
pub node_id_secret: veilid_core::DHTKeySecret,
pub bootstrap: Vec<ParsedNodeDialInfo>,
@ -796,8 +796,8 @@ impl Settings {
"block_store.delete" => Ok(Box::new(inner.core.block_store.delete)),
"network.max_connections" => Ok(Box::new(inner.core.network.max_connections)),
"network.connection_initial_timeout" => {
Ok(Box::new(inner.core.network.connection_initial_timeout))
"network.connection_initial_timeout_ms" => {
Ok(Box::new(inner.core.network.connection_initial_timeout_ms))
}
"network.node_id" => Ok(Box::new(inner.core.network.node_id)),
"network.node_id_secret" => Ok(Box::new(inner.core.network.node_id_secret)),
@ -813,18 +813,18 @@ impl Settings {
)),
"network.rpc.concurrency" => Ok(Box::new(inner.core.network.rpc.concurrency)),
"network.rpc.queue_size" => Ok(Box::new(inner.core.network.rpc.queue_size)),
"network.rpc.max_timestamp_behind" => {
Ok(Box::new(inner.core.network.rpc.max_timestamp_behind))
"network.rpc.max_timestamp_behind_ms" => {
Ok(Box::new(inner.core.network.rpc.max_timestamp_behind_ms))
}
"network.rpc.max_timestamp_ahead" => {
Ok(Box::new(inner.core.network.rpc.max_timestamp_ahead))
"network.rpc.max_timestamp_ahead_ms" => {
Ok(Box::new(inner.core.network.rpc.max_timestamp_ahead_ms))
}
"network.rpc.timeout" => Ok(Box::new(inner.core.network.rpc.timeout)),
"network.rpc.timeout_ms" => Ok(Box::new(inner.core.network.rpc.timeout_ms)),
"network.rpc.max_route_hop_count" => {
Ok(Box::new(inner.core.network.rpc.max_route_hop_count))
}
"network.dht.resolve_node_timeout" => {
Ok(Box::new(inner.core.network.dht.resolve_node_timeout))
"network.dht.resolve_node_timeout_ms" => {
Ok(Box::new(inner.core.network.dht.resolve_node_timeout_ms))
}
"network.dht.resolve_node_count" => {
Ok(Box::new(inner.core.network.dht.resolve_node_count))
@ -835,8 +835,8 @@ impl Settings {
"network.dht.max_find_node_count" => {
Ok(Box::new(inner.core.network.dht.max_find_node_count))
}
"network.dht.get_value_timeout" => {
Ok(Box::new(inner.core.network.dht.get_value_timeout))
"network.dht.get_value_timeout_ms" => {
Ok(Box::new(inner.core.network.dht.get_value_timeout_ms))
}
"network.dht.get_value_count" => {
Ok(Box::new(inner.core.network.dht.get_value_count))
@ -844,8 +844,8 @@ impl Settings {
"network.dht.get_value_fanout" => {
Ok(Box::new(inner.core.network.dht.get_value_fanout))
}
"network.dht.set_value_timeout" => {
Ok(Box::new(inner.core.network.dht.set_value_timeout))
"network.dht.set_value_timeout_ms" => {
Ok(Box::new(inner.core.network.dht.set_value_timeout_ms))
}
"network.dht.set_value_count" => {
Ok(Box::new(inner.core.network.dht.set_value_count))
@ -854,11 +854,11 @@ impl Settings {
Ok(Box::new(inner.core.network.dht.set_value_fanout))
}
"network.dht.min_peer_count" => Ok(Box::new(inner.core.network.dht.min_peer_count)),
"network.dht.min_peer_refresh_time" => {
Ok(Box::new(inner.core.network.dht.min_peer_refresh_time))
"network.dht.min_peer_refresh_time_ms" => {
Ok(Box::new(inner.core.network.dht.min_peer_refresh_time_ms))
}
"network.dht.validate_dial_info_receipt_time" => Ok(Box::new(
inner.core.network.dht.validate_dial_info_receipt_time,
"network.dht.validate_dial_info_receipt_time_ms" => Ok(Box::new(
inner.core.network.dht.validate_dial_info_receipt_time_ms,
)),
"network.upnp" => Ok(Box::new(inner.core.network.upnp)),
"network.natpmp" => Ok(Box::new(inner.core.network.natpmp)),
@ -886,9 +886,9 @@ impl Settings {
.to_string_lossy()
.to_string(),
)),
"network.tls.connection_initial_timeout" => {
Ok(Box::new(inner.core.network.tls.connection_initial_timeout))
}
"network.tls.connection_initial_timeout_ms" => Ok(Box::new(
inner.core.network.tls.connection_initial_timeout_ms,
)),
"network.application.https.enabled" => {
Ok(Box::new(inner.core.network.application.https.enabled))
}
@ -1139,7 +1139,7 @@ mod tests {
assert_eq!(s.core.protected_store.delete, false);
assert_eq!(s.core.network.max_connections, 16);
assert_eq!(s.core.network.connection_initial_timeout, 2_000_000u64);
assert_eq!(s.core.network.connection_initial_timeout_ms, 2_000u32);
assert_eq!(s.core.network.node_id, veilid_core::DHTKey::default());
assert_eq!(
s.core.network.node_id_secret,
@ -1150,26 +1150,26 @@ mod tests {
//
assert_eq!(s.core.network.rpc.concurrency, 0);
assert_eq!(s.core.network.rpc.queue_size, 1024);
assert_eq!(s.core.network.rpc.max_timestamp_behind, Some(10_000_000u64));
assert_eq!(s.core.network.rpc.max_timestamp_ahead, Some(10_000_000u64));
assert_eq!(s.core.network.rpc.timeout, 10000000);
assert_eq!(s.core.network.rpc.max_timestamp_behind_ms, Some(10_000u32));
assert_eq!(s.core.network.rpc.max_timestamp_ahead_ms, Some(10_000u32));
assert_eq!(s.core.network.rpc.timeout_ms, 10_000u32);
assert_eq!(s.core.network.rpc.max_route_hop_count, 7);
//
assert_eq!(s.core.network.dht.resolve_node_timeout, None);
assert_eq!(s.core.network.dht.resolve_node_timeout_ms, None);
assert_eq!(s.core.network.dht.resolve_node_count, 20u32);
assert_eq!(s.core.network.dht.resolve_node_fanout, 3u32);
assert_eq!(s.core.network.dht.max_find_node_count, 20u32);
assert_eq!(s.core.network.dht.get_value_timeout, None);
assert_eq!(s.core.network.dht.get_value_timeout_ms, None);
assert_eq!(s.core.network.dht.get_value_count, 20u32);
assert_eq!(s.core.network.dht.get_value_fanout, 3u32);
assert_eq!(s.core.network.dht.set_value_timeout, None);
assert_eq!(s.core.network.dht.set_value_timeout_ms, None);
assert_eq!(s.core.network.dht.set_value_count, 20u32);
assert_eq!(s.core.network.dht.set_value_fanout, 5u32);
assert_eq!(s.core.network.dht.min_peer_count, 20u32);
assert_eq!(s.core.network.dht.min_peer_refresh_time, 2000000u64);
assert_eq!(s.core.network.dht.min_peer_refresh_time_ms, 2_000u32);
assert_eq!(
s.core.network.dht.validate_dial_info_receipt_time,
5000000u64
s.core.network.dht.validate_dial_info_receipt_time_ms,
5_000u32
);
//
assert_eq!(s.core.network.upnp, false);
@ -1185,7 +1185,7 @@ mod tests {
s.core.network.tls.private_key_path,
std::path::PathBuf::from("/etc/veilid/private/server.key")
);
assert_eq!(s.core.network.tls.connection_initial_timeout, 2_000_000u64);
assert_eq!(s.core.network.tls.connection_initial_timeout_ms, 2_000u32);
//
assert_eq!(s.core.network.application.https.enabled, false);
assert_eq!(