summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/idevicesyslog.c99
1 files changed, 55 insertions, 44 deletions
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 <signal.h>
#include <stdlib.h>
#include <unistd.h>
+#include <getopt.h>
#ifdef WIN32
#include <windows.h>
@@ -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");
-}
-