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" #include "util/str_util.h"
#define SOCKET_NAME "scrcpy" #define SOCKET_NAME "scrcpy"
#define SSH_SOCKET_NAME "/data/local/tmp/scrcpy"
#define SERVER_FILENAME "scrcpy-server" #define SERVER_FILENAME "scrcpy-server"
#define DEFAULT_SERVER_PATH PREFIX "/share/scrcpy/" SERVER_FILENAME #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->show_touches ? "true" : "false",
params->stay_awake ? "true" : "false", params->stay_awake ? "true" : "false",
params->codec_options ? params->codec_options : "-", params->codec_options ? params->codec_options : "-",
params->use_ssh ? "true" : "false",
}; };
#ifdef SERVER_DEBUGGER #ifdef SERVER_DEBUGGER
LOGI("Server debugger waiting for a client on device port " 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 int DEVICE_NAME_FIELD_LENGTH = 64;
private static final String SOCKET_NAME = "scrcpy"; private static final String SOCKET_NAME = "scrcpy";
private static final String SSH_SOCKET_NAME = "/data/local/tmp/scrcpy";
private final LocalSocket videoSocket; private final LocalSocket videoSocket;
private final FileDescriptor videoFd; private final FileDescriptor videoFd;
@ -41,11 +42,11 @@ public final class DesktopConnection implements Closeable {
return localSocket; 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 videoSocket;
LocalSocket controlSocket; LocalSocket controlSocket;
if (tunnelForward) { if (tunnelForward) {
LocalServerSocket localServerSocket = new LocalServerSocket(SOCKET_NAME); LocalServerSocket localServerSocket = new LocalServerSocket(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
try { try {
videoSocket = localServerSocket.accept(); videoSocket = localServerSocket.accept();
// send one byte so the client may read() to detect a connection error // 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(); localServerSocket.close();
} }
} else { } else {
videoSocket = connect(SOCKET_NAME); videoSocket = connect(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
try { try {
controlSocket = connect(SOCKET_NAME); controlSocket = connect(sshMode ? SSH_SOCKET_NAME : SOCKET_NAME);
} catch (IOException | RuntimeException e) { } catch (IOException | RuntimeException e) {
videoSocket.close(); videoSocket.close();
throw e; throw e;

View file

@ -16,6 +16,7 @@ public class Options {
private boolean showTouches; private boolean showTouches;
private boolean stayAwake; private boolean stayAwake;
private String codecOptions; private String codecOptions;
private boolean sshMode;
public Ln.Level getLogLevel() { public Ln.Level getLogLevel() {
return logLevel; return logLevel;
@ -120,4 +121,12 @@ public class Options {
public void setCodecOptions(String codecOptions) { public void setCodecOptions(String codecOptions) {
this.codecOptions = 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); CleanUp.configure(mustDisableShowTouchesOnCleanUp, restoreStayOn, true);
boolean tunnelForward = options.isTunnelForward(); 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); ScreenEncoder screenEncoder = new ScreenEncoder(options.getSendFrameMeta(), options.getBitRate(), options.getMaxFps(), codecOptions);
if (options.getControl()) { if (options.getControl()) {
@ -167,6 +168,9 @@ public final class Server {
String codecOptions = args[13]; String codecOptions = args[13];
options.setCodecOptions(codecOptions); options.setCodecOptions(codecOptions);
boolean sshMode = Boolean.parseBoolean(args[14]);
options.setSshMode(sshMode);
return options; return options;
} }