diff options
Diffstat (limited to 'src/preflight.c')
| -rw-r--r-- | src/preflight.c | 20 | 
1 files changed, 17 insertions, 3 deletions
| diff --git a/src/preflight.c b/src/preflight.c index 30a2217..97fdb8b 100644 --- a/src/preflight.c +++ b/src/preflight.c @@ -115,9 +115,10 @@ static void* preflight_worker_handle_device_add(void* userdata)  	idevice_t dev = (idevice_t)_dev; -	lockdownd_client_t lockdown; +	lockdownd_client_t lockdown = NULL;  	lockdownd_error_t lerr; +retry:  	lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd");  	if (lerr != LOCKDOWN_E_SUCCESS) {  		usbmuxd_log(LL_ERROR, "%s: ERROR: Could not connect to lockdownd on device %s, lockdown error %d", __func__, _dev->udid, lerr); @@ -149,10 +150,23 @@ static void* preflight_worker_handle_device_add(void* userdata)  	}  	usbmuxd_log(LL_INFO, "%s: StartSession failed on device %s, lockdown error %d", __func__, _dev->udid, lerr); -	if (lerr == LOCKDOWN_E_INVALID_HOST_ID) { +	switch (lerr) { +	case LOCKDOWN_E_INVALID_HOST_ID:  		usbmuxd_log(LL_INFO, "%s: Device %s is not paired with this host.", __func__, _dev->udid); -	} else { +		break; +	case LOCKDOWN_E_SSL_ERROR: +		usbmuxd_log(LL_ERROR, "%s: The stored pair record for device %s is invalid. Removing.", __func__, _dev->udid); +		if (userpref_remove_device_record(_dev->udid) == 0) { +			lockdownd_client_free(lockdown); +			lockdown = NULL; +			goto retry; +		} else { +			usbmuxd_log(LL_ERROR, "%s: Could not remove pair record for device %s\n", __func__, _dev->udid); +		} +		break; +	default:  		is_device_paired = 1; +		break;  	}  	plist_t value = NULL; | 
