diff options
Diffstat (limited to 'src/idevice.c')
-rw-r--r-- | src/idevice.c | 76 |
1 files changed, 39 insertions, 37 deletions
diff --git a/src/idevice.c b/src/idevice.c index f64570b..adf47f4 100644 --- a/src/idevice.c +++ b/src/idevice.c | |||
@@ -473,7 +473,8 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connect(idevice_t device, uint16_t | |||
473 | new_connection->status = IDEVICE_E_SUCCESS; | 473 | new_connection->status = IDEVICE_E_SUCCESS; |
474 | *connection = new_connection; | 474 | *connection = new_connection; |
475 | return IDEVICE_E_SUCCESS; | 475 | return IDEVICE_E_SUCCESS; |
476 | } else if (device->conn_type == CONNECTION_NETWORK) { | 476 | } |
477 | if (device->conn_type == CONNECTION_NETWORK) { | ||
477 | struct sockaddr_storage saddr_storage; | 478 | struct sockaddr_storage saddr_storage; |
478 | struct sockaddr* saddr = (struct sockaddr*)&saddr_storage; | 479 | struct sockaddr* saddr = (struct sockaddr*)&saddr_storage; |
479 | 480 | ||
@@ -529,10 +530,9 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connect(idevice_t device, uint16_t | |||
529 | *connection = new_connection; | 530 | *connection = new_connection; |
530 | 531 | ||
531 | return IDEVICE_E_SUCCESS; | 532 | return IDEVICE_E_SUCCESS; |
532 | } else { | ||
533 | debug_info("Unknown connection type %d", device->conn_type); | ||
534 | } | 533 | } |
535 | 534 | ||
535 | debug_info("Unknown connection type %d", device->conn_type); | ||
536 | return IDEVICE_E_UNKNOWN_ERROR; | 536 | return IDEVICE_E_UNKNOWN_ERROR; |
537 | } | 537 | } |
538 | 538 | ||
@@ -583,7 +583,8 @@ static idevice_error_t internal_connection_send(idevice_connection_t connection, | |||
583 | return IDEVICE_E_UNKNOWN_ERROR; | 583 | return IDEVICE_E_UNKNOWN_ERROR; |
584 | } | 584 | } |
585 | return IDEVICE_E_SUCCESS; | 585 | return IDEVICE_E_SUCCESS; |
586 | } else if (connection->type == CONNECTION_NETWORK) { | 586 | } |
587 | if (connection->type == CONNECTION_NETWORK) { | ||
587 | int s = socket_send((int)(long)connection->data, (void*)data, len); | 588 | int s = socket_send((int)(long)connection->data, (void*)data, len); |
588 | if (s < 0) { | 589 | if (s < 0) { |
589 | *sent_bytes = 0; | 590 | *sent_bytes = 0; |
@@ -591,9 +592,9 @@ static idevice_error_t internal_connection_send(idevice_connection_t connection, | |||
591 | } | 592 | } |
592 | *sent_bytes = s; | 593 | *sent_bytes = s; |
593 | return IDEVICE_E_SUCCESS; | 594 | return IDEVICE_E_SUCCESS; |
594 | } else { | ||
595 | debug_info("Unknown connection type %d", connection->type); | ||
596 | } | 595 | } |
596 | |||
597 | debug_info("Unknown connection type %d", connection->type); | ||
597 | return IDEVICE_E_UNKNOWN_ERROR; | 598 | return IDEVICE_E_UNKNOWN_ERROR; |
598 | 599 | ||
599 | } | 600 | } |
@@ -638,27 +639,26 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_send(idevice_connection_ | |||
638 | } | 639 | } |
639 | *sent_bytes = sent; | 640 | *sent_bytes = sent; |
640 | return IDEVICE_E_SUCCESS; | 641 | return IDEVICE_E_SUCCESS; |
641 | } else { | 642 | } |
642 | uint32_t sent = 0; | 643 | uint32_t sent = 0; |
643 | while (sent < len) { | 644 | while (sent < len) { |
644 | uint32_t bytes = 0; | 645 | uint32_t bytes = 0; |
645 | int s = internal_connection_send(connection, data+sent, len-sent, &bytes); | 646 | int s = internal_connection_send(connection, data+sent, len-sent, &bytes); |
646 | if (s < 0) { | 647 | if (s < 0) { |
647 | break; | 648 | break; |
648 | } | ||
649 | sent += bytes; | ||
650 | } | ||
651 | debug_info("len %d, sent %d", len, sent); | ||
652 | if (sent < len) { | ||
653 | *sent_bytes = sent; | ||
654 | if (sent == 0) { | ||
655 | return IDEVICE_E_UNKNOWN_ERROR; | ||
656 | } | ||
657 | return IDEVICE_E_NOT_ENOUGH_DATA; | ||
658 | } | 649 | } |
650 | sent += bytes; | ||
651 | } | ||
652 | debug_info("internal_connection_send %d, sent %d", len, sent); | ||
653 | if (sent < len) { | ||
659 | *sent_bytes = sent; | 654 | *sent_bytes = sent; |
660 | return IDEVICE_E_SUCCESS; | 655 | if (sent == 0) { |
656 | return IDEVICE_E_UNKNOWN_ERROR; | ||
657 | } | ||
658 | return IDEVICE_E_NOT_ENOUGH_DATA; | ||
661 | } | 659 | } |
660 | *sent_bytes = sent; | ||
661 | return IDEVICE_E_SUCCESS; | ||
662 | } | 662 | } |
663 | 663 | ||
664 | static inline idevice_error_t socket_recv_to_idevice_error(int conn_error, uint32_t len, uint32_t received) | 664 | static inline idevice_error_t socket_recv_to_idevice_error(int conn_error, uint32_t len, uint32_t received) |
@@ -698,7 +698,8 @@ static idevice_error_t internal_connection_receive_timeout(idevice_connection_t | |||
698 | debug_info("ERROR: usbmuxd_recv_timeout returned %d (%s)", conn_error, strerror(-conn_error)); | 698 | debug_info("ERROR: usbmuxd_recv_timeout returned %d (%s)", conn_error, strerror(-conn_error)); |
699 | } | 699 | } |
700 | return error; | 700 | return error; |
701 | } else if (connection->type == CONNECTION_NETWORK) { | 701 | } |
702 | if (connection->type == CONNECTION_NETWORK) { | ||
702 | int res = socket_receive_timeout((int)(long)connection->data, data, len, 0, timeout); | 703 | int res = socket_receive_timeout((int)(long)connection->data, data, len, 0, timeout); |
703 | idevice_error_t error = socket_recv_to_idevice_error(res, 0, 0); | 704 | idevice_error_t error = socket_recv_to_idevice_error(res, 0, 0); |
704 | if (error == IDEVICE_E_SUCCESS) { | 705 | if (error == IDEVICE_E_SUCCESS) { |
@@ -707,9 +708,9 @@ static idevice_error_t internal_connection_receive_timeout(idevice_connection_t | |||
707 | debug_info("ERROR: socket_receive_timeout returned %d (%s)", res, strerror(-res)); | 708 | debug_info("ERROR: socket_receive_timeout returned %d (%s)", res, strerror(-res)); |
708 | } | 709 | } |
709 | return error; | 710 | return error; |
710 | } else { | ||
711 | debug_info("Unknown connection type %d", connection->type); | ||
712 | } | 711 | } |
712 | |||
713 | debug_info("Unknown connection type %d", connection->type); | ||
713 | return IDEVICE_E_UNKNOWN_ERROR; | 714 | return IDEVICE_E_UNKNOWN_ERROR; |
714 | } | 715 | } |
715 | 716 | ||
@@ -793,7 +794,8 @@ static idevice_error_t internal_connection_receive(idevice_connection_t connecti | |||
793 | return IDEVICE_E_UNKNOWN_ERROR; | 794 | return IDEVICE_E_UNKNOWN_ERROR; |
794 | } | 795 | } |
795 | return IDEVICE_E_SUCCESS; | 796 | return IDEVICE_E_SUCCESS; |
796 | } else if (connection->type == CONNECTION_NETWORK) { | 797 | } |
798 | if (connection->type == CONNECTION_NETWORK) { | ||
797 | int res = socket_receive((int)(long)connection->data, data, len); | 799 | int res = socket_receive((int)(long)connection->data, data, len); |
798 | if (res < 0) { | 800 | if (res < 0) { |
799 | debug_info("ERROR: socket_receive returned %d (%s)", res, strerror(-res)); | 801 | debug_info("ERROR: socket_receive returned %d (%s)", res, strerror(-res)); |
@@ -801,9 +803,9 @@ static idevice_error_t internal_connection_receive(idevice_connection_t connecti | |||
801 | } | 803 | } |
802 | *recv_bytes = (uint32_t)res; | 804 | *recv_bytes = (uint32_t)res; |
803 | return IDEVICE_E_SUCCESS; | 805 | return IDEVICE_E_SUCCESS; |
804 | } else { | ||
805 | debug_info("Unknown connection type %d", connection->type); | ||
806 | } | 806 | } |
807 | |||
808 | debug_info("Unknown connection type %d", connection->type); | ||
807 | return IDEVICE_E_UNKNOWN_ERROR; | 809 | return IDEVICE_E_UNKNOWN_ERROR; |
808 | } | 810 | } |
809 | 811 | ||
@@ -846,17 +848,17 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_get_fd(idevice_connectio | |||
846 | return IDEVICE_E_INVALID_ARG; | 848 | return IDEVICE_E_INVALID_ARG; |
847 | } | 849 | } |
848 | 850 | ||
849 | idevice_error_t result = IDEVICE_E_UNKNOWN_ERROR; | ||
850 | if (connection->type == CONNECTION_USBMUXD) { | 851 | if (connection->type == CONNECTION_USBMUXD) { |
851 | *fd = (int)(long)connection->data; | 852 | *fd = (int)(long)connection->data; |
852 | result = IDEVICE_E_SUCCESS; | 853 | return IDEVICE_E_SUCCESS; |
853 | } else if (connection->type == CONNECTION_NETWORK) { | 854 | } |
855 | if (connection->type == CONNECTION_NETWORK) { | ||
854 | *fd = (int)(long)connection->data; | 856 | *fd = (int)(long)connection->data; |
855 | result = IDEVICE_E_SUCCESS; | 857 | return IDEVICE_E_SUCCESS; |
856 | } else { | ||
857 | debug_info("Unknown connection type %d", connection->type); | ||
858 | } | 858 | } |
859 | return result; | 859 | |
860 | debug_info("Unknown connection type %d", connection->type); | ||
861 | return IDEVICE_E_UNKNOWN_ERROR; | ||
860 | } | 862 | } |
861 | 863 | ||
862 | LIBIMOBILEDEVICE_API idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle) | 864 | LIBIMOBILEDEVICE_API idevice_error_t idevice_get_handle(idevice_t device, uint32_t *handle) |