From 7cb1bdf78ce8963da2923d6098645cb648e30259 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 24 Jun 2019 20:19:32 +0200 Subject: fdr: Handle new timeout error conditions (introduced in latest libimobiledevice) --- src/fdr.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'src/fdr.c') diff --git a/src/fdr.c b/src/fdr.c index d7dc8d1..68b9aed 100644 --- a/src/fdr.c +++ b/src/fdr.c @@ -143,14 +143,20 @@ int fdr_poll_and_handle_message(fdr_client_t fdr) } device_error = idevice_connection_receive_timeout(fdr->connection, (char *)&cmd, sizeof(cmd), &bytes, 20000); - if (device_error != IDEVICE_E_SUCCESS) { +#ifdef HAVE_IDEVICE_E_TIMEOUT + if (device_error == IDEVICE_E_TIMEOUT || (device_error == IDEVICE_E_SUCCESS && bytes != sizeof(cmd))) +#else + if (device_error == IDEVICE_ESUCCESS && bytes != sizeof(cmd)) +#endif + { + debug("FDR %p timeout waiting for command\n", fdr); + return 0; + } + else if (device_error != IDEVICE_E_SUCCESS) { if (fdr->connection) { error("ERROR: Unable to receive message from FDR %p (%d). %u/%d bytes\n", fdr, device_error, bytes, sizeof(cmd)); } return -1; - } else if (bytes != sizeof(cmd)) { - debug("FDR %p timeout waiting for command\n", fdr); - return 0; } if (cmd == FDR_SYNC_MSG) { @@ -540,12 +546,18 @@ static int fdr_handle_proxy_cmd(fdr_client_t fdr) while (1) { bytes = 0; device_error = idevice_connection_receive_timeout(fdr->connection, buf, sizeof(buf), &bytes, 100); - if (device_error != IDEVICE_E_SUCCESS) { +#ifdef HAVE_IDEVICE_E_TIMEOUT + if (device_error == IDEVICE_E_TIMEOUT || (device_error == IDEVICE_E_SUCCESS && !bytes)) +#else + if (device_error == IDEVICE_E_SUCCESS && !bytes) +#endif + { + //debug("WARNING: Timeout waiting for proxy payload. %p\n", fdr); + } + else if (device_error != IDEVICE_E_SUCCESS) { error("ERROR: FDR %p Unable to receive proxy payload (%d)\n", fdr, device_error); res = -1; break; - } else if (!bytes) { - //debug("WARNING: Timeout waiting for proxy payload. %p\n", fdr); } if (bytes) { debug("FDR %p got payload of %u bytes, now try to proxy it\n", fdr, bytes); -- cgit v1.1-32-gdbae