Check client and server mismatch

Send client version as first parameter and check it at server start.

Signed-off-by: Yu-Chen Lin <npes87184@gmail.com>
Signed-off-by: Romain Vimont <rom@rom1v.com>
This commit is contained in:
Yu-Chen Lin 2019-11-10 20:23:58 +08:00 committed by Romain Vimont
parent aa0f77c898
commit b963a3b9d5
2 changed files with 19 additions and 8 deletions

View file

@ -131,6 +131,7 @@ execute_server(struct server *server, const struct server_params *params) {
#endif
"/", // unused
"com.genymobile.scrcpy.Server",
SCRCPY_VERSION,
max_size_string,
bit_rate_string,
server->tunnel_forward ? "true" : "false",

View file

@ -67,29 +67,39 @@ public final class Server {
@SuppressWarnings("checkstyle:MagicNumber")
private static Options createOptions(String... args) {
if (args.length != 6) {
throw new IllegalArgumentException("Expecting 6 parameters");
if (args.length < 1) {
throw new IllegalArgumentException("Missing client version");
}
String clientVersion = args[0];
if (!clientVersion.equals(BuildConfig.VERSION_NAME)) {
throw new IllegalArgumentException("The server version (" + clientVersion + ") does not match the client "
+ "(" + BuildConfig.VERSION_NAME + ")");
}
if (args.length != 7) {
throw new IllegalArgumentException("Expecting 7 parameters");
}
Options options = new Options();
int maxSize = Integer.parseInt(args[0]) & ~7; // multiple of 8
int maxSize = Integer.parseInt(args[1]) & ~7; // multiple of 8
options.setMaxSize(maxSize);
int bitRate = Integer.parseInt(args[1]);
int bitRate = Integer.parseInt(args[2]);
options.setBitRate(bitRate);
// use "adb forward" instead of "adb tunnel"? (so the server must listen)
boolean tunnelForward = Boolean.parseBoolean(args[2]);
boolean tunnelForward = Boolean.parseBoolean(args[3]);
options.setTunnelForward(tunnelForward);
Rect crop = parseCrop(args[3]);
Rect crop = parseCrop(args[4]);
options.setCrop(crop);
boolean sendFrameMeta = Boolean.parseBoolean(args[4]);
boolean sendFrameMeta = Boolean.parseBoolean(args[5]);
options.setSendFrameMeta(sendFrameMeta);
boolean control = Boolean.parseBoolean(args[5]);
boolean control = Boolean.parseBoolean(args[6]);
options.setControl(control);
return options;