From 7dbc17f2c763a7b18bc1a867f39918c26bb5e9e5 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Fri, 8 Nov 2019 00:56:13 +0100 Subject: tools: Allow idevicesyslog to connect to network devices --- tools/idevicesyslog.c | 99 ++++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 44 deletions(-) (limited to 'tools') diff --git a/tools/idevicesyslog.c b/tools/idevicesyslog.c index 76de128..5521736 100644 --- a/tools/idevicesyslog.c +++ b/tools/idevicesyslog.c @@ -2,6 +2,7 @@ * idevicesyslog.c * Relay the syslog of a device to stdout * + * Copyright (c) 2010-2019 Nikias Bassen, All Rights Reserved. * Copyright (c) 2009 Martin Szulecki All Rights Reserved. * * This library is free software; you can redistribute it and/or @@ -29,6 +30,7 @@ #include #include #include +#include #ifdef WIN32 #include @@ -40,13 +42,13 @@ static int quit_flag = 0; -void print_usage(int argc, char **argv); - static char* udid = NULL; static idevice_t device = NULL; static syslog_relay_client_t syslog = NULL; +enum idevice_options lookup_opts = IDEVICE_LOOKUP_USBMUX | IDEVICE_LOOKUP_NETWORK; + static void syslog_callback(char c, void *user_data) { putchar(c); @@ -57,7 +59,7 @@ static void syslog_callback(char c, void *user_data) static int start_logging(void) { - idevice_error_t ret = idevice_new(&device, udid); + idevice_error_t ret = idevice_new_with_options(&device, udid, lookup_opts); if (ret != IDEVICE_E_SUCCESS) { fprintf(stderr, "Device with udid %s not found!?\n", udid); return -1; @@ -166,9 +168,31 @@ static void clean_exit(int sig) quit_flag++; } +static void print_usage(int argc, char **argv, int is_error) +{ + char *name = NULL; + name = strrchr(argv[0], '/'); + fprintf(is_error ? stderr : stdout, "Usage: %s [OPTIONS]\n", (name ? name + 1: argv[0])); + fprintf(is_error ? stderr : stdout, + "Relay syslog of a connected device.\n\n" \ + " -u, --udid UDID target specific device by UDID\n" \ + " -n, --network connect to network device even if available via USB\n" \ + " -h, --help prints usage information\n" \ + " -d, --debug enable communication debugging\n" \ + "\n" \ + "Homepage: <" PACKAGE_URL ">\n" + ); +} + int main(int argc, char *argv[]) { - int i; + int c = 0; + const struct option longopts[] = { + { "debug", no_argument, NULL, 'd' }, + { "help", no_argument, NULL, 'h' }, + { "udid", required_argument, NULL, 'u' }, + { NULL, 0, NULL, 0} + }; signal(SIGINT, clean_exit); signal(SIGTERM, clean_exit); @@ -177,35 +201,39 @@ int main(int argc, char *argv[]) signal(SIGPIPE, SIG_IGN); #endif - /* parse cmdline args */ - for (i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-d") || !strcmp(argv[i], "--debug")) { + while ((c = getopt_long(argc, argv, "dhu:n", longopts, NULL)) != -1) { + switch (c) { + case 'd': idevice_set_debug_level(1); - continue; - } - else if (!strcmp(argv[i], "-u") || !strcmp(argv[i], "--udid")) { - i++; - if (!argv[i] || !*argv[i]) { - print_usage(argc, argv); - return 0; + break; + case 'u': + if (!*optarg) { + fprintf(stderr, "ERROR: UDID must not be empty!\n"); + print_usage(argc, argv, 1); + return 2; } - udid = strdup(argv[i]); - continue; - } - else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) { - print_usage(argc, argv); - return 0; - } - else { - print_usage(argc, argv); + free(udid); + udid = strdup(optarg); + break; + case 'n': + lookup_opts |= IDEVICE_LOOKUP_PREFER_NETWORK; + break; + case 'h': + print_usage(argc, argv, 0); return 0; + default: + print_usage(argc, argv, 1); + return 2; } } + argc -= optind; + argv += optind; + int num = 0; - char **devices = NULL; - idevice_get_device_list(&devices, &num); - idevice_device_list_free(devices); + idevice_info_t *devices = NULL; + idevice_get_device_list_extended(&devices, &num); + idevice_device_list_extended_free(devices); if (num == 0) { if (!udid) { fprintf(stderr, "No device found. Plug in a device or pass UDID with -u to wait for device to be available.\n"); @@ -223,24 +251,7 @@ int main(int argc, char *argv[]) idevice_event_unsubscribe(); stop_logging(); - if (udid) { - free(udid); - } + free(udid); return 0; } - -void print_usage(int argc, char **argv) -{ - char *name = NULL; - - name = strrchr(argv[0], '/'); - printf("Usage: %s [OPTIONS]\n", (name ? name + 1: argv[0])); - printf("Relay syslog of a connected device.\n\n"); - printf(" -d, --debug\t\tenable communication debugging\n"); - printf(" -u, --udid UDID\ttarget specific device by UDID\n"); - printf(" -h, --help\t\tprints usage information\n"); - printf("\n"); - printf("Homepage: <" PACKAGE_URL ">\n"); -} - -- cgit v1.1-32-gdbae