summaryrefslogtreecommitdiffstats
path: root/tools/idevicedebugserverproxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/idevicedebugserverproxy.c')
-rw-r--r--tools/idevicedebugserverproxy.c26
1 files changed, 18 insertions, 8 deletions
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 @@
44#include <libimobiledevice-glue/socket.h> 44#include <libimobiledevice-glue/socket.h>
45#include <libimobiledevice-glue/thread.h> 45#include <libimobiledevice-glue/thread.h>
46 46
47#ifndef ETIMEDOUT
48#define ETIMEDOUT 138
49#endif
50
47#define info(...) fprintf(stdout, __VA_ARGS__); fflush(stdout) 51#define info(...) fprintf(stdout, __VA_ARGS__); fflush(stdout)
48#define debug(...) if(debug_mode) fprintf(stdout, __VA_ARGS__) 52#define debug(...) if(debug_mode) fprintf(stdout, __VA_ARGS__)
49 53
@@ -76,9 +80,11 @@ static void print_usage(int argc, char **argv)
76 char *name = NULL; 80 char *name = NULL;
77 81
78 name = strrchr(argv[0], '/'); 82 name = strrchr(argv[0], '/');
79 printf("Usage: %s [OPTIONS] <PORT>\n", (name ? name + 1: argv[0])); 83 printf("Usage: %s [OPTIONS] [PORT]\n", (name ? name + 1: argv[0]));
80 printf("\n"); 84 printf("\n");
81 printf("Proxy debugserver connection from device to a local socket at PORT.\n"); 85 printf("Proxy debugserver connection from device to a local socket at PORT.\n");
86 printf("If PORT is omitted, the next available port will be used and printed\n");
87 printf("to stdout.\n");
82 printf("\n"); 88 printf("\n");
83 printf("OPTIONS:\n"); 89 printf("OPTIONS:\n");
84 printf(" -u, --udid UDID\ttarget specific device by UDID\n"); 90 printf(" -u, --udid UDID\ttarget specific device by UDID\n");
@@ -239,13 +245,6 @@ int main(int argc, char *argv[])
239 } 245 }
240 } 246 }
241 247
242 /* a PORT is mandatory */
243 if (!local_port) {
244 fprintf(stderr, "Please specify a PORT.\n");
245 print_usage(argc, argv);
246 goto leave_cleanup;
247 }
248
249 /* start services and connect to device */ 248 /* start services and connect to device */
250 ret = idevice_new_with_options(&device, udid, (use_network) ? IDEVICE_LOOKUP_NETWORK : IDEVICE_LOOKUP_USBMUX); 249 ret = idevice_new_with_options(&device, udid, (use_network) ? IDEVICE_LOOKUP_NETWORK : IDEVICE_LOOKUP_USBMUX);
251 if (ret != IDEVICE_E_SUCCESS) { 250 if (ret != IDEVICE_E_SUCCESS) {
@@ -266,6 +265,17 @@ int main(int argc, char *argv[])
266 goto leave_cleanup; 265 goto leave_cleanup;
267 } 266 }
268 267
268 if (local_port == 0) {
269 /* The user asked for any available port. Report the actual port. */
270 uint16_t port;
271 if (0 > socket_get_socket_port(server_fd, &port)) {
272 fprintf(stderr, "Could not determine socket port\n");
273 result = EXIT_FAILURE;
274 goto leave_cleanup;
275 }
276 printf("Listening on port %d\n", port);
277 }
278
269 while (!quit_flag) { 279 while (!quit_flag) {
270 debug("%s: Waiting for connection on local port %d\n", __func__, local_port); 280 debug("%s: Waiting for connection on local port %d\n", __func__, local_port);
271 281