diff options
author | Geoff Paul | 2012-01-12 01:33:17 +0100 |
---|---|---|
committer | Martin Szulecki | 2012-03-22 18:52:06 +0100 |
commit | b83f925e58d4e8b89d042c0f375045a94bb0b202 (patch) | |
tree | a49c2ddae99ba603bf168623cfb9b4e6d2572b0d | |
parent | af0765f2fdb266f3bc08e2adf639b24aec8dee4b (diff) | |
download | libimobiledevice-b83f925e58d4e8b89d042c0f375045a94bb0b202.tar.gz libimobiledevice-b83f925e58d4e8b89d042c0f375045a94bb0b202.tar.bz2 |
idevice: add error checking to internal_ssl_write()
Returning 0 bytes sent upon error causes an infinite loop
within the calling gnutls code. Returning -1 as an error
code allows gnutls to properly detect and recover.
-rw-r--r-- | src/idevice.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/idevice.c b/src/idevice.c index cad1431..af87e61 100644 --- a/src/idevice.c +++ b/src/idevice.c @@ -504,9 +504,13 @@ static ssize_t internal_ssl_read(gnutls_transport_ptr_t transport, char *buffer, static ssize_t internal_ssl_write(gnutls_transport_ptr_t transport, char *buffer, size_t length) { uint32_t bytes = 0; + idevice_error_t res; idevice_connection_t connection = (idevice_connection_t)transport; debug_info("pre-send length = %zi", length); - internal_connection_send(connection, buffer, length, &bytes); + if ((res = internal_connection_send(connection, buffer, length, &bytes)) != IDEVICE_E_SUCCESS) { + debug_info("ERROR: internal_connection_send returned %d", res); + return -1; + } debug_info("post-send sent %i bytes", bytes); return bytes; } |