summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2021-10-11 01:25:13 +0300
committerGravatar Nikias Bassen2021-10-12 03:17:07 +0300
commitfa8bfb65c70edd4d2617fbbf970302beb9a4ced2 (patch)
tree08bf90044dcda6073368e7f62d3f629984e1bb90 /src
parentb3d35fbcf7a1ac669c2e80fbd58920941a5d4c0c (diff)
downloadlibimobiledevice-fa8bfb65c70edd4d2617fbbf970302beb9a4ced2.tar.gz
libimobiledevice-fa8bfb65c70edd4d2617fbbf970302beb9a4ced2.tar.bz2
idevice: Add IDEVICE_E_CONNREFUSED and have idevice_connect() return meaningful error codes
This allows clients to properly detect that a connection to the requested port failed because it is not open on the device, instead of just returning an "unknown error"
Diffstat (limited to 'src')
-rw-r--r--src/idevice.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/idevice.c b/src/idevice.c
index 6a03c5e..04189d6 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -447,7 +447,15 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connect(idevice_t device, uint16_t
447 if (device->conn_type == CONNECTION_USBMUXD) { 447 if (device->conn_type == CONNECTION_USBMUXD) {
448 int sfd = usbmuxd_connect(device->mux_id, port); 448 int sfd = usbmuxd_connect(device->mux_id, port);
449 if (sfd < 0) { 449 if (sfd < 0) {
450 debug_info("ERROR: Connecting to usbmuxd failed: %d (%s)", sfd, strerror(-sfd)); 450 debug_info("ERROR: Connecting to usbmux device failed: %d (%s)", sfd, strerror(-sfd));
451 switch (-sfd) {
452 case ECONNREFUSED:
453 return IDEVICE_E_CONNREFUSED;
454 case ENODEV:
455 return IDEVICE_E_NO_DEVICE;
456 default:
457 break;
458 }
451 return IDEVICE_E_UNKNOWN_ERROR; 459 return IDEVICE_E_UNKNOWN_ERROR;
452 } 460 }
453 idevice_connection_t new_connection = (idevice_connection_t)malloc(sizeof(struct idevice_connection_private)); 461 idevice_connection_t new_connection = (idevice_connection_t)malloc(sizeof(struct idevice_connection_private));
@@ -494,7 +502,14 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connect(idevice_t device, uint16_t
494 502
495 int sfd = socket_connect_addr(saddr, port); 503 int sfd = socket_connect_addr(saddr, port);
496 if (sfd < 0) { 504 if (sfd < 0) {
497 debug_info("ERROR: Connecting to network device failed: %d (%s)", errno, strerror(errno)); 505 int result = errno;
506 debug_info("ERROR: Connecting to network device failed: %d (%s)", result, strerror(result));
507 switch (result) {
508 case ECONNREFUSED:
509 return IDEVICE_E_CONNREFUSED;
510 default:
511 break;
512 }
498 return IDEVICE_E_NO_DEVICE; 513 return IDEVICE_E_NO_DEVICE;
499 } 514 }
500 515