blob: c74b6d6e98940bfd05ca5064b1732693ce781daf [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:process/process.dart';
import '../base/io.dart';
import '../base/logger.dart';
import '../base/process.dart';
enum IOSDeviceConnectionInterface {
none,
usb,
network,
}
/// Wraps iproxy command line tool port forwarding.
///
/// See https://github.com/libimobiledevice/libusbmuxd.
class IProxy {
IProxy({
required String iproxyPath,
required Logger logger,
required ProcessManager processManager,
required MapEntry<String, String> dyLdLibEntry,
}) : _dyLdLibEntry = dyLdLibEntry,
_processUtils = ProcessUtils(processManager: processManager, logger: logger),
_logger = logger,
_iproxyPath = iproxyPath;
/// Create a [IProxy] for testing.
///
/// This specifies the path to iproxy as 'iproxy` and the dyLdLibEntry as
/// 'DYLD_LIBRARY_PATH: /path/to/libs'.
factory IProxy.test({
required Logger logger,
required ProcessManager processManager,
}) {
return IProxy(
iproxyPath: 'iproxy',
logger: logger,
processManager: processManager,
dyLdLibEntry: const MapEntry<String, String>(
'DYLD_LIBRARY_PATH', '/path/to/libs',
),
);
}
final String _iproxyPath;
final ProcessUtils _processUtils;
final Logger _logger;
final MapEntry<String, String> _dyLdLibEntry;
Future<Process> forward(int devicePort, int hostPort, String deviceId) {
// Usage: iproxy LOCAL_PORT:DEVICE_PORT --udid UDID
return _processUtils.start(
<String>[
_iproxyPath,
'$hostPort:$devicePort',
'--udid',
deviceId,
if (_logger.isVerbose)
'--debug',
],
environment: Map<String, String>.fromEntries(
<MapEntry<String, String>>[_dyLdLibEntry],
),
);
}
}