From 7df9e9e43bb116ad963024f9fb1735a6b24b6806 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Wed, 18 Sep 2024 18:32:44 +0200 Subject: restore: Make wait for URLAsset on first chunk optional --- src/restore.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/restore.c b/src/restore.c index d3828f9..2b1ad3e 100644 --- a/src/restore.c +++ b/src/restore.c @@ -698,16 +698,22 @@ static int _restore_service_send(restore_service_client_t service, plist_t plist return -1; } -static int _restore_service_recv(restore_service_client_t service, plist_t *plist) +static int _restore_service_recv_timeout(restore_service_client_t service, plist_t *plist, unsigned int timeout) { + struct restored_client_private { + property_list_service_client_t parent; + char *udid; + char *label; + plist_t info; + }; if (!service) { return -1; } switch (service->type) { case SERVICE_TYPE_RESTORED: - return restored_receive((restored_client_t)service->client, plist); + return property_list_service_receive_plist_with_timeout(((struct restored_client_private*)service->client)->parent, plist, timeout); case SERVICE_TYPE_PLIST: - return property_list_service_receive_plist((property_list_service_client_t)service->client, plist); + return property_list_service_receive_plist_with_timeout((property_list_service_client_t)service->client, plist, timeout); default: break; } @@ -4090,8 +4096,12 @@ static int _restore_send_file_data(struct _restore_send_file_data_ctx* rctx, voi if (done == 0 && (memcmp(data, "AEA1", 4) == 0)) { info("Encountered First Chunk in AEA image\n"); plist_t message = NULL; - _restore_service_recv(rctx->service, &message); - restore_send_url_asset(rctx->client, message); + property_list_service_error_t err = _restore_service_recv_timeout(rctx->service, &message, 3000); + if (err == PROPERTY_LIST_SERVICE_E_RECEIVE_TIMEOUT) { + info("NOTE: No URLAsset requested, assuming it is not necessary."); + } else if (err == PROPERTY_LIST_SERVICE_E_SUCCESS) { + restore_send_url_asset(rctx->client, message); + } } if (total_size > 0x1000000) { -- cgit v1.1-32-gdbae