summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/idevicedebugserverproxy.13
-rw-r--r--tools/idevicedebugserverproxy.c26
2 files changed, 20 insertions, 9 deletions
diff --git a/docs/idevicedebugserverproxy.1 b/docs/idevicedebugserverproxy.1
index 37502eb..248c694 100644
--- a/docs/idevicedebugserverproxy.1
+++ b/docs/idevicedebugserverproxy.1
@@ -3,7 +3,7 @@
idevicedebugserverproxy \- Remote debugging proxy.
.SH SYNOPSIS
.B idevicedebugserverproxy
-[OPTIONS] PORT
+[OPTIONS] [PORT]
.SH DESCRIPTION
@@ -35,6 +35,7 @@ prints version information.
.TP
.B PORT
The port under which the proxy should listen for connections from clients.
+If omitted, the next available port will be used and printed to stdout.
.SH AUTHORS
Martin Szulecki
diff --git a/tools/idevicedebugserverproxy.c b/tools/idevicedebugserverproxy.c
index b190f63..79c2d38 100644
--- a/tools/idevicedebugserverproxy.c
+++ b/tools/idevicedebugserverproxy.c
@@ -44,6 +44,10 @@
#include <libimobiledevice-glue/socket.h>
#include <libimobiledevice-glue/thread.h>
+#ifndef ETIMEDOUT
+#define ETIMEDOUT 138
+#endif
+
#define info(...) fprintf(stdout, __VA_ARGS__); fflush(stdout)
#define debug(...) if(debug_mode) fprintf(stdout, __VA_ARGS__)
@@ -76,9 +80,11 @@ static void print_usage(int argc, char **argv)
char *name = NULL;
name = strrchr(argv[0], '/');
- printf("Usage: %s [OPTIONS] <PORT>\n", (name ? name + 1: argv[0]));
+ printf("Usage: %s [OPTIONS] [PORT]\n", (name ? name + 1: argv[0]));
printf("\n");
printf("Proxy debugserver connection from device to a local socket at PORT.\n");
+ printf("If PORT is omitted, the next available port will be used and printed\n");
+ printf("to stdout.\n");
printf("\n");
printf("OPTIONS:\n");
printf(" -u, --udid UDID\ttarget specific device by UDID\n");
@@ -239,13 +245,6 @@ int main(int argc, char *argv[])
}
}
- /* a PORT is mandatory */
- if (!local_port) {
- fprintf(stderr, "Please specify a PORT.\n");
- print_usage(argc, argv);
- goto leave_cleanup;
- }
-
/* start services and connect to device */
ret = idevice_new_with_options(&device, udid, (use_network) ? IDEVICE_LOOKUP_NETWORK : IDEVICE_LOOKUP_USBMUX);
if (ret != IDEVICE_E_SUCCESS) {
@@ -266,6 +265,17 @@ int main(int argc, char *argv[])
goto leave_cleanup;
}
+ if (local_port == 0) {
+ /* The user asked for any available port. Report the actual port. */
+ uint16_t port;
+ if (0 > socket_get_socket_port(server_fd, &port)) {
+ fprintf(stderr, "Could not determine socket port\n");
+ result = EXIT_FAILURE;
+ goto leave_cleanup;
+ }
+ printf("Listening on port %d\n", port);
+ }
+
while (!quit_flag) {
debug("%s: Waiting for connection on local port %d\n", __func__, local_port);