Added ssh-mode argument to server.

This commit is contained in:
Vladimir Chebotarev 2020-09-06 16:10:16 +03:00
commit 83bbb75f39
4 changed files with 21 additions and 5 deletions

View file

@ -16,6 +16,7 @@
#include "util/str_util.h"
#define SOCKET_NAME "scrcpy"
#define SSH_SOCKET_NAME "/data/local/tmp/scrcpy"
#define SERVER_FILENAME "scrcpy-server"
#define DEFAULT_SERVER_PATH PREFIX "/share/scrcpy/" SERVER_FILENAME
@ -294,6 +295,7 @@ execute_server(struct server *server, const struct server_params *params) {
params->show_touches ? "true" : "false",
params->stay_awake ? "true" : "false",
params->codec_options ? params->codec_options : "-",
params->use_ssh ? "true" : "false",
};
#ifdef SERVER_DEBUGGER
LOGI("Server debugger waiting for a client on device port "

View file

@ -16,6 +16,7 @@ public final class DesktopConnection implements Closeable {
private static final int DEVICE_NAME_FIELD_LENGTH = 64;
private static final String SOCKET_NAME = "scrcpy";
private static final String SSH_SOCKET_NAME = "/data/local/tmp/scrcpy";
private final LocalSocket videoSocket;
private final FileDescriptor videoFd;
@ -41,11 +42,11 @@ public final class DesktopConnection implements Closeable {
return localSocket;
}
public static DesktopConnection open(Device device, boolean tunnelForward) throws IOException {
public static DesktopConnection open(Device device, boolean tunnelForward, boolean sshMode) throws IOException {
LocalSocket videoSocket;
LocalSocket controlSocket;
if (tunnelForward) {
LocalServerSocket localServerSocket = new LocalServerSocket(SOCKET_NAME);
LocalServerSocket localServerSocket = new LocalServerSocket(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
try {
videoSocket = localServerSocket.accept();
// send one byte so the client may read() to detect a connection error
@ -60,9 +61,9 @@ public final class DesktopConnection implements Closeable {
localServerSocket.close();
}
} else {
videoSocket = connect(SOCKET_NAME);
videoSocket = connect(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
try {
controlSocket = connect(SOCKET_NAME);
controlSocket = connect(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
} catch (IOException | RuntimeException e) {
videoSocket.close();
throw e;

View file

@ -16,6 +16,7 @@ public class Options {
private boolean showTouches;
private boolean stayAwake;
private String codecOptions;
private boolean sshMode;
public Ln.Level getLogLevel() {
return logLevel;
@ -120,4 +121,12 @@ public class Options {
public void setCodecOptions(String codecOptions) {
this.codecOptions = codecOptions;
}
public boolean isSshMode() {
return sshMode;
}
public void setSshMode(boolean sshMode) {
this.sshMode = sshMode;
}
}

View file

@ -52,8 +52,9 @@ public final class Server {
CleanUp.configure(mustDisableShowTouchesOnCleanUp, restoreStayOn, true);
boolean tunnelForward = options.isTunnelForward();
boolean sshMode = options.isSshMode();
try (DesktopConnection connection = DesktopConnection.open(device, tunnelForward)) {
try (DesktopConnection connection = DesktopConnection.open(device, tunnelForward, sshMode)) {
ScreenEncoder screenEncoder = new ScreenEncoder(options.getSendFrameMeta(), options.getBitRate(), options.getMaxFps(), codecOptions);
if (options.getControl()) {
@ -167,6 +168,9 @@ public final class Server {
String codecOptions = args[13];
options.setCodecOptions(codecOptions);
boolean sshMode = Boolean.parseBoolean(args[14]);
options.setSshMode(sshMode);
return options;
}