in src/extension-runners/firefox-android.js [456:524]
async adbDiscoveryAndForwardRDPUnixSocket() {
const {
adbUtils,
selectedAdbDevice,
selectedFirefoxApk,
params: { adbDiscoveryTimeout },
} = this;
const stdin = this.params.stdin || process.stdin;
const { unixSocketDiscoveryRetryInterval } = FirefoxAndroidExtensionRunner;
let { unixSocketDiscoveryMaxTime } = FirefoxAndroidExtensionRunner;
if (typeof adbDiscoveryTimeout === 'number') {
unixSocketDiscoveryMaxTime = adbDiscoveryTimeout;
}
const handleCtrlC = (str, key) => {
if (key.ctrl && key.name === 'c') {
adbUtils.setUserAbortDiscovery(true);
}
};
// TODO: use noInput property to decide if we should
// disable direct keypress handling.
if (isTTY(stdin)) {
readline.emitKeypressEvents(stdin);
setRawMode(stdin, true);
stdin.on('keypress', handleCtrlC);
}
try {
// Got a debugger socket file to connect.
this.selectedRDPSocketFile = await adbUtils.discoverRDPUnixSocket(
selectedAdbDevice,
selectedFirefoxApk,
{
maxDiscoveryTime: unixSocketDiscoveryMaxTime,
retryInterval: unixSocketDiscoveryRetryInterval,
},
);
} finally {
if (isTTY(stdin)) {
stdin.removeListener('keypress', handleCtrlC);
}
}
log.debug(`RDP Socket File selected: ${this.selectedRDPSocketFile}`);
const tcpPort = await findFreeTcpPort();
// Log the chosen tcp port at info level (useful to the user to be able
// to connect the Firefox DevTools to the Firefox for Android instance).
log.info(`You can connect to this Android device on TCP port ${tcpPort}`);
const forwardSocketSpec = this.selectedRDPSocketFile.startsWith('@')
? `localabstract:${this.selectedRDPSocketFile.substr(1)}`
: `localfilesystem:${this.selectedRDPSocketFile}`;
await adbUtils.setupForward(
selectedAdbDevice,
forwardSocketSpec,
`tcp:${tcpPort}`,
);
this.selectedTCPPort = tcpPort;
}