summaryrefslogtreecommitdiffstats
path: root/src/idevice.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/idevice.c')
-rw-r--r--src/idevice.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/idevice.c b/src/idevice.c
index 071d7b9..ecc0418 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -615,7 +615,11 @@ static inline idevice_error_t socket_recv_to_idevice_error(int conn_error, uint3
615 if (conn_error < 0) { 615 if (conn_error < 0) {
616 switch (conn_error) { 616 switch (conn_error) {
617 case -EAGAIN: 617 case -EAGAIN:
618 debug_info("ERROR: received partial data %d/%d (%s)", received, len, strerror(-conn_error)); 618 if (len) {
619 debug_info("ERROR: received partial data %d/%d (%s)", received, len, strerror(-conn_error));
620 } else {
621 debug_info("ERROR: received partial data (%s)", strerror(-conn_error));
622 }
619 return IDEVICE_E_NOT_ENOUGH_DATA; 623 return IDEVICE_E_NOT_ENOUGH_DATA;
620 case -ETIMEDOUT: 624 case -ETIMEDOUT:
621 return IDEVICE_E_TIMEOUT; 625 return IDEVICE_E_TIMEOUT;
@@ -623,7 +627,6 @@ static inline idevice_error_t socket_recv_to_idevice_error(int conn_error, uint3
623 return IDEVICE_E_UNKNOWN_ERROR; 627 return IDEVICE_E_UNKNOWN_ERROR;
624 } 628 }
625 } 629 }
626
627 return IDEVICE_E_SUCCESS; 630 return IDEVICE_E_SUCCESS;
628} 631}
629 632
@@ -640,20 +643,19 @@ static idevice_error_t internal_connection_receive_timeout(idevice_connection_t
640 if (connection->type == CONNECTION_USBMUXD) { 643 if (connection->type == CONNECTION_USBMUXD) {
641 int conn_error = usbmuxd_recv_timeout((int)(long)connection->data, data, len, recv_bytes, timeout); 644 int conn_error = usbmuxd_recv_timeout((int)(long)connection->data, data, len, recv_bytes, timeout);
642 idevice_error_t error = socket_recv_to_idevice_error(conn_error, len, *recv_bytes); 645 idevice_error_t error = socket_recv_to_idevice_error(conn_error, len, *recv_bytes);
643
644 if (error == IDEVICE_E_UNKNOWN_ERROR) { 646 if (error == IDEVICE_E_UNKNOWN_ERROR) {
645 debug_info("ERROR: usbmuxd_recv_timeout returned %d (%s)", conn_error, strerror(-conn_error)); 647 debug_info("ERROR: usbmuxd_recv_timeout returned %d (%s)", conn_error, strerror(-conn_error));
646 } 648 }
647
648 return error; 649 return error;
649 } else if (connection->type == CONNECTION_NETWORK) { 650 } else if (connection->type == CONNECTION_NETWORK) {
650 int res = socket_receive_timeout((int)(long)connection->data, data, len, 0, timeout); 651 int res = socket_receive_timeout((int)(long)connection->data, data, len, 0, timeout);
651 if (res < 0) { 652 idevice_error_t error = socket_recv_to_idevice_error(res, 0, 0);
652 debug_info("ERROR: socket_receive_timeout failed: %d (%s)", res, strerror(-res)); 653 if (error == IDEVICE_E_SUCCESS) {
653 return (res == -EAGAIN ? IDEVICE_E_NOT_ENOUGH_DATA : IDEVICE_E_UNKNOWN_ERROR); 654 *recv_bytes = (uint32_t)res;
655 } else if (error == IDEVICE_E_UNKNOWN_ERROR) {
656 debug_info("ERROR: socket_receive_timeout returned %d (%s)", res, strerror(-res));
654 } 657 }
655 *recv_bytes = (uint32_t)res; 658 return error;
656 return IDEVICE_E_SUCCESS;
657 } else { 659 } else {
658 debug_info("Unknown connection type %d", connection->type); 660 debug_info("Unknown connection type %d", connection->type);
659 } 661 }