From 83bbb75f39f9fe3d426405daf9d588c0e87752d3 Mon Sep 17 00:00:00 2001 From: Vladimir Chebotarev Date: Sun, 6 Sep 2020 16:10:16 +0300 Subject: [PATCH] Added `ssh-mode` argument to server. --- app/src/server.c | 2 ++ .../java/com/genymobile/scrcpy/DesktopConnection.java | 9 +++++---- server/src/main/java/com/genymobile/scrcpy/Options.java | 9 +++++++++ server/src/main/java/com/genymobile/scrcpy/Server.java | 6 +++++- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/server.c b/app/src/server.c index 9d5c1569..463e75e4 100644 --- a/app/src/server.c +++ b/app/src/server.c @@ -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 " diff --git a/server/src/main/java/com/genymobile/scrcpy/DesktopConnection.java b/server/src/main/java/com/genymobile/scrcpy/DesktopConnection.java index 0ec43040..1c4538f7 100644 --- a/server/src/main/java/com/genymobile/scrcpy/DesktopConnection.java +++ b/server/src/main/java/com/genymobile/scrcpy/DesktopConnection.java @@ -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; diff --git a/server/src/main/java/com/genymobile/scrcpy/Options.java b/server/src/main/java/com/genymobile/scrcpy/Options.java index 06312a37..e9bbfe5d 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Options.java +++ b/server/src/main/java/com/genymobile/scrcpy/Options.java @@ -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; + } } diff --git a/server/src/main/java/com/genymobile/scrcpy/Server.java b/server/src/main/java/com/genymobile/scrcpy/Server.java index d257e319..68bda920 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Server.java +++ b/server/src/main/java/com/genymobile/scrcpy/Server.java @@ -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; }