Files
pangolin/client/lib/bridge/vpn_bridge_provider.dart
T
wangjia e4db3beba6
ci-pangolin / Lint — shellcheck (push) Has been cancelled
ci-pangolin / OpenAPI Sync Check (push) Has been cancelled
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (push) Has been cancelled
ci-pangolin / Flutter — analyze + test (push) Has been cancelled
Merge branch 'main' into feature/pangolin-ios
# Conflicts:
#	client/lib/bridge/vpn_bridge_provider.dart
#	docs/index.html
2026-06-23 10:05:20 +08:00

42 lines
1.5 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// vpn_bridge_provider.dart — VpnBridge 平台分派
//
// macOS / Linux / Windows → DesktopVpnBridge(真实子进程)
// Android / iOS → VpnNativeBridge(内嵌 libbox,走 pangolin/vpn 通道)
// 其他平台(Web / 测试)→ VpnBridgeMock
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'desktop_vpn_bridge.dart';
import 'vpn_bridge.dart';
import 'vpn_bridge_mock.dart';
// 通过 dart:io Platform 按平台选择实现。
// Web 平台须先检查 kIsWebdart:io 在 Web 上不可用)。
import 'dart:io' show Platform;
/// P1 方案B 开关:macOS 是否走原生 System Extension(VpnNativeBridge)而非 PoC 的
/// sudo 子进程(DesktopVpnBridge)。默认 false——待 PacketTunnel target/签名就绪、
/// 原生侧联调通过后置 true。见 docs/p1-macos-system-extension.md。
const bool kUseNativeVpnMacOS = true;
/// 全局单例 VpnBridge。Ref 生命周期内不变。
final vpnBridgeProvider = Provider<VpnBridge>((ref) {
if (!kIsWeb) {
if (Platform.isMacOS && kUseNativeVpnMacOS) {
return VpnNativeBridge();
}
if (Platform.isAndroid) {
return VpnNativeBridge();
}
// iOS:NEPacketTunnelProvider 内嵌 libbox(B1/C1 已打通)。走原生 MethodChannel
// (pangolin/vpn → AppDelegate → VpnManager),不再用 mock。
if (Platform.isIOS) {
return VpnNativeBridge();
}
if (Platform.isMacOS || Platform.isLinux || Platform.isWindows) {
return DesktopVpnBridge();
}
}
return VpnBridgeMock();
});