From bb3878d78ee0e45ed554e6f15f004d19b724fc6b Mon Sep 17 00:00:00 2001 From: mkuba50 Date: Fri, 16 Nov 2018 17:59:48 +0100 Subject: [PATCH] Add optional WU response caching --- fetchupd.php | 52 +++++++++++++++++++++++++++++++++++++++++++------ get.php | 51 ++++++++++++++++++++++++++++++++++++++++++------ shared/main.php | 2 +- 3 files changed, 92 insertions(+), 13 deletions(-) diff --git a/fetchupd.php b/fetchupd.php index 4b1d5ba..f308d7e 100644 --- a/fetchupd.php +++ b/fetchupd.php @@ -19,7 +19,15 @@ require_once dirname(__FILE__).'/shared/main.php'; require_once dirname(__FILE__).'/shared/requests.php'; require_once dirname(__FILE__).'/listid.php'; -function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build = 'latest', $minor = '0', $sku = '48') { +function uupFetchUpd( + $arch = 'amd64', + $ring = 'WIF', + $flight = 'Active', + $build = 'latest', + $minor = '0', + $sku = '48', + $cacheRequests = 0 +) { uupApiPrintBrand(); $arch = strtolower($arch); @@ -80,12 +88,44 @@ function uupFetchUpd($arch = 'amd64', $ring = 'WIF', $flight = 'Active', $build $build = '10.0.'.$build.'.'.$minor; - consoleLogger('Fetching information from the server...'); - $postData = composeFetchUpdRequest(uupDevice(), uupEncryptedData(), $arch, $flight, $ring, $build, $sku); - $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx', $postData); + $cacheHash = hash('sha1', strtolower("api-fetch-$arch-$ring-$flight-$build-$minor-$sku")); + $cached = 0; - $out = html_entity_decode($out); - consoleLogger('Information has been successfully fetched.'); + if(file_exists('cache/'.$cacheHash.'.json.gz') && $cacheRequests == 1) { + $cache = @gzdecode(@file_get_contents('cache/'.$cacheHash.'.json.gz')); + $cache = json_decode($cache, 1); + + if(!empty($cache['content']) && ($cache['expires'] > time())) { + consoleLogger('Using cached response...'); + $out = $cache['content']; + $cached = 1; + } else { + $cached = 0; + } + + unset($cache); + } + + if(!$cached) { + consoleLogger('Fetching information from the server...'); + $postData = composeFetchUpdRequest(uupDevice(), uupEncryptedData(), $arch, $flight, $ring, $build, $sku); + $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx', $postData); + + $out = html_entity_decode($out); + consoleLogger('Information has been successfully fetched.'); + + if($cacheRequests == 1) { + $cache = array( + 'expires' => time()+90, + 'content' => $out, + ); + + if(!file_exists('cache')) mkdir('cache'); + @file_put_contents('cache/'.$cacheHash.'.json.gz', gzencode(json_encode($cache)."\n")); + + unset($cache); + } + } preg_match_all('/.*?<\/UpdateInfo>/', $out, $updateInfos); $updateInfo = preg_grep('/Install<\/Action>/', $updateInfos[0]); diff --git a/get.php b/get.php index cd43411..5c96e46 100644 --- a/get.php +++ b/get.php @@ -19,7 +19,12 @@ require_once dirname(__FILE__).'/shared/main.php'; require_once dirname(__FILE__).'/shared/requests.php'; require_once dirname(__FILE__).'/shared/packs.php'; -function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePack = 0, $desiredEdition = 0) { +function uupGetFiles( + $updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', + $usePack = 0, + $desiredEdition = 0, + $cacheRequests = 0 +) { uupApiPrintBrand(); $info = @file_get_contents('fileinfo/'.$updateId.'.json'); @@ -160,6 +165,9 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac } } + $cacheHash = hash('sha1', strtolower("api-get-$updateId")); + $cached = 0; + $rev = 1; if(preg_match('/_rev\./', $updateId)) { $rev = preg_replace('/.*_rev\./', '', $updateId); @@ -170,11 +178,42 @@ function uupGetFiles($updateId = 'c2a1d787-647b-486d-b264-f90f3782cdc6', $usePac $updateBuild = (isset($info['build'])) ? $info['build'] : 'UNKNOWN'; $updateName = (isset($info['title'])) ? $info['title'] : 'Unknown update: '.$updateId; - $fetchTime = time(); - consoleLogger('Fetching information from the server...'); - $postData = composeFileGetRequest($updateId, uupDevice(), $info, $rev); - $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured', $postData); - consoleLogger('Information has been successfully fetched.'); + if(file_exists('cache/'.$cacheHash.'.json.gz') && $cacheRequests == 1) { + $cache = @gzdecode(@file_get_contents('cache/'.$cacheHash.'.json.gz')); + $cache = json_decode($cache, 1); + + if(!empty($cache['content']) && ($cache['expires'] > time())) { + consoleLogger('Using cached response...'); + $out = $cache['content']; + $fetchTime = $cache['fetchTime']; + $cached = 1; + } else { + $cached = 0; + } + + unset($cache); + } + + if(!$cached) { + $fetchTime = time(); + consoleLogger('Fetching information from the server...'); + $postData = composeFileGetRequest($updateId, uupDevice(), $info, $rev); + $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured', $postData); + consoleLogger('Information has been successfully fetched.'); + + if($cacheRequests == 1) { + $cache = array( + 'expires' => time()+90, + 'content' => $out, + 'fetchTime' => $fetchTime, + ); + + if(!file_exists('cache')) mkdir('cache'); + @file_put_contents('cache/'.$cacheHash.'.json.gz', gzencode(json_encode($cache)."\n")); + + unset($cache); + } + } consoleLogger('Parsing information...'); $xmlOut = simplexml_load_string($out); diff --git a/shared/main.php b/shared/main.php index 5513638..20f9d93 100644 --- a/shared/main.php +++ b/shared/main.php @@ -16,7 +16,7 @@ limitations under the License. */ function uupApiVersion() { - return '1.15.13'; + return '1.16.0'; } require_once dirname(__FILE__).'/auths.php';