mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-01-11 05:04:35 +00:00
add init function to TorService so the compiled rust lib isn't loaded on instance creation but rather on init being called
This commit is contained in:
parent
95790faf52
commit
b278f691cc
3 changed files with 22 additions and 4 deletions
|
@ -174,6 +174,7 @@ void main() async {
|
||||||
// Some refactoring will need to be done here to make sure we don't make any
|
// Some refactoring will need to be done here to make sure we don't make any
|
||||||
// network calls before starting up tor
|
// network calls before starting up tor
|
||||||
if (Prefs.instance.useTor) {
|
if (Prefs.instance.useTor) {
|
||||||
|
TorService.sharedInstance.init();
|
||||||
await TorService.sharedInstance.start();
|
await TorService.sharedInstance.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,6 +66,9 @@ class _TorSettingsState extends ConsumerState<TorSettings> {
|
||||||
// Toggle the useTor preference.
|
// Toggle the useTor preference.
|
||||||
_prefs.useTor = true;
|
_prefs.useTor = true;
|
||||||
|
|
||||||
|
// Start the Tor service.
|
||||||
|
ref.read(pTorService).init();
|
||||||
|
|
||||||
// Start the Tor service.
|
// Start the Tor service.
|
||||||
ref.read(pTorService).start();
|
ref.read(pTorService).start();
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,7 +9,7 @@ import 'package:tor/tor.dart';
|
||||||
final pTorService = Provider((_) => TorService.sharedInstance);
|
final pTorService = Provider((_) => TorService.sharedInstance);
|
||||||
|
|
||||||
class TorService {
|
class TorService {
|
||||||
final _tor = Tor();
|
Tor? _tor;
|
||||||
|
|
||||||
/// Flag to indicate that a Tor circuit is thought to have been established.
|
/// Flag to indicate that a Tor circuit is thought to have been established.
|
||||||
bool _enabled = false;
|
bool _enabled = false;
|
||||||
|
@ -30,9 +30,15 @@ class TorService {
|
||||||
int port,
|
int port,
|
||||||
}) get proxyInfo => (
|
}) get proxyInfo => (
|
||||||
host: InternetAddress.loopbackIPv4,
|
host: InternetAddress.loopbackIPv4,
|
||||||
port: _tor.port,
|
port: _tor!.port,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/// Initialize the tor ffi lib instance if it hasn't already been set. Nothing
|
||||||
|
/// changes if _tor is already been set.
|
||||||
|
void init({Tor? mockableOverride}) {
|
||||||
|
_tor ??= mockableOverride ?? Tor();
|
||||||
|
}
|
||||||
|
|
||||||
/// Start the Tor service.
|
/// Start the Tor service.
|
||||||
///
|
///
|
||||||
/// This will start the Tor service and establish a Tor circuit.
|
/// This will start the Tor service and establish a Tor circuit.
|
||||||
|
@ -41,6 +47,10 @@ class TorService {
|
||||||
///
|
///
|
||||||
/// Returns a Future that completes when the Tor service has started.
|
/// Returns a Future that completes when the Tor service has started.
|
||||||
Future<void> start() async {
|
Future<void> start() async {
|
||||||
|
if (_tor == null) {
|
||||||
|
throw Exception("TorService.init has not been called!");
|
||||||
|
}
|
||||||
|
|
||||||
if (_enabled) {
|
if (_enabled) {
|
||||||
// already started so just return
|
// already started so just return
|
||||||
// could throw an exception here or something so the caller
|
// could throw an exception here or something so the caller
|
||||||
|
@ -58,7 +68,7 @@ class TorService {
|
||||||
"Tor connection status changed: connecting",
|
"Tor connection status changed: connecting",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
await _tor.start();
|
await _tor!.start();
|
||||||
// no exception or error so we can (probably?) assume tor
|
// no exception or error so we can (probably?) assume tor
|
||||||
// has started successfully
|
// has started successfully
|
||||||
_enabled = true;
|
_enabled = true;
|
||||||
|
@ -89,6 +99,10 @@ class TorService {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> stop() async {
|
Future<void> stop() async {
|
||||||
|
if (_tor == null) {
|
||||||
|
throw Exception("TorService.init has not been called!");
|
||||||
|
}
|
||||||
|
|
||||||
if (!_enabled) {
|
if (!_enabled) {
|
||||||
// already stopped so just return
|
// already stopped so just return
|
||||||
// could throw an exception here or something so the caller
|
// could throw an exception here or something so the caller
|
||||||
|
@ -99,7 +113,7 @@ class TorService {
|
||||||
|
|
||||||
// Stop the Tor service.
|
// Stop the Tor service.
|
||||||
try {
|
try {
|
||||||
await _tor.disable();
|
await _tor!.disable();
|
||||||
// no exception or error so we can (probably?) assume tor
|
// no exception or error so we can (probably?) assume tor
|
||||||
// has started successfully
|
// has started successfully
|
||||||
_enabled = false;
|
_enabled = false;
|
||||||
|
|
Loading…
Reference in a new issue