veilid/veilid-flutter/lib/default_config.dart

194 lines
5.3 KiB
Dart
Raw Normal View History

2023-07-23 21:49:10 -04:00
import 'dart:io';
2022-12-26 16:33:48 -05:00
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:path/path.dart' as p;
2023-07-26 14:20:17 -04:00
import 'package:path_provider/path_provider.dart';
2023-05-29 15:24:57 -04:00
import 'package:system_info2/system_info2.dart' as sysinfo;
2023-07-23 21:49:10 -04:00
import 'package:system_info_plus/system_info_plus.dart';
2023-07-26 14:20:17 -04:00
2022-12-26 16:33:48 -05:00
import 'veilid.dart';
2023-05-29 15:24:57 -04:00
const int megaByte = 1024 * 1024;
int getLocalSubkeyCacheSize() {
if (kIsWeb) {
return 128;
}
return 1024;
}
2023-07-23 21:49:10 -04:00
Future<int> getLocalMaxSubkeyCacheMemoryMb() async {
2023-05-29 15:24:57 -04:00
if (kIsWeb) {
return 256;
}
2023-07-23 21:49:10 -04:00
if (Platform.isIOS || Platform.isAndroid) {
return (await SystemInfoPlus.physicalMemory ?? 2048) ~/ 32;
}
2023-05-29 15:24:57 -04:00
return sysinfo.SysInfo.getTotalPhysicalMemory() ~/ 32 ~/ megaByte;
}
int getRemoteSubkeyCacheSize() {
if (kIsWeb) {
return 64;
}
return 128;
}
int getRemoteMaxRecords() {
if (kIsWeb) {
return 64;
}
return 128;
}
2023-07-23 21:49:10 -04:00
Future<int> getRemoteMaxSubkeyCacheMemoryMb() async {
2023-05-29 15:24:57 -04:00
if (kIsWeb) {
return 256;
}
2023-07-23 21:49:10 -04:00
if (Platform.isIOS || Platform.isAndroid) {
return (await SystemInfoPlus.physicalMemory ?? 2048) ~/ 32;
}
2023-05-29 15:24:57 -04:00
return sysinfo.SysInfo.getTotalPhysicalMemory() ~/ 32 ~/ megaByte;
}
int getRemoteMaxStorageSpaceMb() {
if (kIsWeb) {
return 128;
}
return 256;
}
2023-08-22 13:19:59 -04:00
Future<VeilidConfig> getDefaultVeilidConfig(String programName) async {
// ignore: do_not_use_environment
2023-08-22 14:40:31 -04:00
const bootstrap = String.fromEnvironment('BOOTSTRAP');
2023-08-22 13:19:59 -04:00
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,
clientAllowlistTimeoutMs: 300000,
2023-08-22 13:19:59 -04:00
reverseConnectionReceiptTimeMs: 5000,
holePunchReceiptTimeMs: 5000,
routingTable: VeilidConfigRoutingTable(
nodeId: [],
nodeIdSecret: [],
bootstrap: bootstrap.isNotEmpty
2023-08-22 14:40:31 -04:00
? bootstrap.split(',')
2023-08-22 13:19:59 -04:00
: (kIsWeb
? ['ws://bootstrap.veilid.net:5150/ws']
: ['bootstrap.veilid.net']),
limitOverAttached: 64,
limitFullyAttached: 32,
limitAttachedStrong: 16,
limitAttachedGood: 8,
limitAttachedWeak: 4,
2022-12-26 16:33:48 -05:00
),
2023-08-22 13:19:59 -04:00
rpc: const VeilidConfigRPC(
concurrency: 0,
queueSize: 1024,
maxTimestampBehindMs: 10000,
maxTimestampAheadMs: 10000,
timeoutMs: 5000,
maxRouteHopCount: 4,
defaultRouteHopCount: 1,
2022-12-26 16:33:48 -05:00
),
2023-08-22 13:19:59 -04:00
dht: VeilidConfigDHT(
maxFindNodeCount: 20,
2023-08-22 13:19:59 -04:00
resolveNodeTimeoutMs: 10000,
resolveNodeCount: 1,
resolveNodeFanout: 4,
getValueTimeoutMs: 10000,
getValueCount: 3,
getValueFanout: 4,
setValueTimeoutMs: 10000,
setValueCount: 5,
setValueFanout: 4,
2023-08-22 13:19:59 -04:00
minPeerCount: 20,
minPeerRefreshTimeMs: 60000,
validateDialInfoReceiptTimeMs: 2000,
localSubkeyCacheSize: getLocalSubkeyCacheSize(),
localMaxSubkeyCacheMemoryMb: await getLocalMaxSubkeyCacheMemoryMb(),
remoteSubkeyCacheSize: getRemoteSubkeyCacheSize(),
remoteMaxRecords: getRemoteMaxRecords(),
remoteMaxSubkeyCacheMemoryMb: await getRemoteMaxSubkeyCacheMemoryMb(),
2023-11-19 21:14:58 -05:00
remoteMaxStorageSpaceMb: getRemoteMaxStorageSpaceMb(),
publicWatchLimit: 32,
2023-11-25 18:59:43 -05:00
memberWatchLimit: 8,
maxWatchExpirationMs: 600000),
2023-08-22 13:19:59 -04:00
upnp: true,
detectAddressChanges: true,
restrictedNatRetries: 0,
tls: const VeilidConfigTLS(
certificatePath: '',
privateKeyPath: '',
2023-07-30 15:57:06 -04:00
connectionInitialTimeoutMs: 2000,
2023-08-22 13:19:59 -04:00
),
application: const VeilidConfigApplication(
https: VeilidConfigHTTPS(
enabled: false,
2023-07-30 15:57:06 -04:00
listenAddress: '',
2023-08-22 13:19:59 -04:00
path: '',
2023-07-30 15:57:06 -04:00
),
2023-08-22 13:19:59 -04:00
http: VeilidConfigHTTP(
enabled: false,
2023-07-30 15:57:06 -04:00
listenAddress: '',
2023-08-22 13:19:59 -04:00
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,
2023-09-14 14:21:54 -04:00
maxConnections: 32,
2023-08-22 13:19:59 -04:00
listenAddress: '',
path: 'ws',
),
wss: VeilidConfigWSS(
connect: true,
listen: false,
2023-09-14 14:21:54 -04:00
maxConnections: 32,
2023-08-22 13:19:59 -04:00
listenAddress: '',
path: 'ws',
2022-12-26 16:33:48 -05:00
),
),
2023-08-22 13:19:59 -04:00
),
);
}