1038bad385
"adb reverse" currently does not work over tcpip (i.e. on a device connected by "adb connect"): <https://issuetracker.google.com/issues/37066218> To work around the problem, if the call to "adb reverse" fails, then fallback to "adb forward", and reverse the client/server roles. Keep the "adb reverse" mode as the default because it does not involve connection retries: when using "adb forward", the client must try to connect successively until the server listens. Due to the tunnel, every connect() will succeed, so the client must attempt to read() to detect a connection failure. For this purpose, when using the "adb forward" mode, the server initially writes a dummy byte, read by the client. Fixes <https://github.com/Genymobile/scrcpy/issues/5>.
45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
#ifndef SERVER_H
|
|
#define SERVER_H
|
|
|
|
#include "command.h"
|
|
#include "net.h"
|
|
|
|
struct server {
|
|
const char *serial;
|
|
process_t process;
|
|
socket_t server_socket; // only used if !tunnel_forward
|
|
socket_t device_socket;
|
|
Uint16 local_port;
|
|
SDL_bool tunnel_enabled;
|
|
SDL_bool tunnel_forward; // use "adb forward" instead of "adb reverse"
|
|
SDL_bool server_copied_to_device;
|
|
};
|
|
|
|
#define SERVER_INITIALIZER { \
|
|
.serial = NULL, \
|
|
.process = PROCESS_NONE, \
|
|
.server_socket = INVALID_SOCKET, \
|
|
.device_socket = INVALID_SOCKET, \
|
|
.local_port = 0, \
|
|
.tunnel_enabled = SDL_FALSE, \
|
|
.tunnel_forward = SDL_FALSE, \
|
|
.server_copied_to_device = SDL_FALSE, \
|
|
}
|
|
|
|
// init default values
|
|
void server_init(struct server *server);
|
|
|
|
// push, enable tunnel et start the server
|
|
SDL_bool server_start(struct server *server, const char *serial, Uint16 local_port,
|
|
Uint16 max_size, Uint32 bit_rate);
|
|
|
|
// block until the communication with the server is established
|
|
socket_t server_connect_to(struct server *server, Uint32 timeout_ms);
|
|
|
|
// disconnect and kill the server process
|
|
void server_stop(struct server *server);
|
|
|
|
// close and release sockets
|
|
void server_destroy(struct server *server);
|
|
|
|
#endif
|