'UNKNOWN_ARCH'); } if(!($ring == 'WIF' || $ring == 'WIS' || $ring == 'RP')) { return array('error' => 'UNKNOWN_RING'); } if(!($flight == 'Skip' || $flight == 'Active')) { return array('error' => 'UNKNOWN_FLIGHT'); } if($flight == 'Skip' && $ring != 'WIF') { return array('error' => 'UNKNOWN_COMBINATION'); } if($build < 15063 || $build > 65536) { return array('error' => 'ILLEGAL_BUILD'); } if($minor < 0 || $minor > 65536) { return array('error' => 'ILLEGAL_MINOR'); } if($flight == 'Active' && $ring == 'RP') $flight = 'Current'; $build = '10.0.'.$build.'.'.$minor; consoleLogger('Fetching information from the server...'); $postData = composeFetchUpdRequest(uupDevice(), uupEncryptedData(), $arch, $flight, $ring, $build); $out = sendWuPostRequest('https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx', $postData); $out = html_entity_decode($out); consoleLogger('Information was successfully fetched.'); consoleLogger('Checking build information...'); preg_match_all('/.*?<\/UpdateInfo>/', $out, $updateInfos); $updateInfo = preg_grep('/Install<\/Action>/', $updateInfos[0]); sort($updateInfo); if(empty($updateInfo[0])) { consoleLogger('An error has occurred'); return array('error' => 'NO_UPDATE_FOUND'); } $updateNumId = preg_replace('/|<\/ID>.*/i', '', $updateInfo[0]); $updates = preg_replace('//', "\n", $out); preg_match_all('/.*<\/Update>/', $updates, $updates); $updateMeta = preg_grep('/'.$updateNumId.'<\/ID>/', $updates[0]); sort($updateMeta); $updateFiles = preg_grep('/.*<\/Files>/', $updateMeta); sort($updateFiles); $updateTitle = preg_grep('/.*<\/Title>/', $updateMeta); sort($updateTitle); preg_match('/<Files>.*<\/Files>/', $updateFiles[0], $fileList); if(empty($fileList[0])) { consoleLogger('An error has occurred'); return array('error' => 'EMPTY_FILELIST'); } preg_match('/<FlightMetadata>.*?<Relationships>/', $out, $out2); preg_match('/Version\=".*?"/', $updateInfo[0], $foundBuild); $foundBuild = preg_replace('/Version="10\.0\.|"/', '', $foundBuild[0]); preg_match('/<Title>.*?<\/Title>/i', $updateTitle[0], $updateTitle); $updateTitle = preg_replace('/<Title>|<\/Title>/i', '', $updateTitle); sort($updateTitle); if(isset($updateTitle[0])) { $updateTitle = $updateTitle[0]; } else { $updateTitle = 'Windows 10 build '.$foundBuild; } preg_match('/UpdateID=".*?"/', $updateInfo[0], $updateId); $updateId = preg_replace('/UpdateID="|"$/', '', $updateId[0]); consoleLogger('Successfully checked build information.'); consoleLogger('BUILD: '.$updateTitle.' '.$arch); $fileWrite = 'NO_SAVE'; if(!file_exists('fileinfo/'.$updateId.'.json')) { consoleLogger('WARNING: This build is NOT in the database. It will be saved now.'); consoleLogger('Parsing information to write...'); if(!file_exists('fileinfo')) mkdir('fileinfo'); $fileList = preg_replace('/<Files>|<\/Files>/', '', $fileList[0]); preg_match_all('/<File .*?>/', $fileList, $fileList); $shaArray = array(); foreach($fileList[0] as $val) { preg_match('/Digest=".*?"/', $val, $sha1); $sha1 = preg_replace('/Digest="|"$/', '', $sha1[0]); $sha1 = bin2hex(base64_decode($sha1)); preg_match('/FileName=".*?"/', $val, $name); $name = preg_replace('/FileName="|"$/', '', $name[0]); preg_match('/Size=".*?"/', $val, $size); $size = preg_replace('/Size="|"$/', '', $size[0]); $temp = array( 'name' => $name, 'size' => $size, ); $shaArray = array_merge($shaArray, array($sha1 => $temp)); } unset($temp, $sha1, $name, $size); ksort($shaArray); $temp = array( 'title' => $updateTitle, 'ring' => $ring, 'flight' => $flight, 'arch' => $arch, 'build' => $foundBuild, 'checkBuild' => $build, 'files' => $shaArray, ); consoleLogger('Successfully parsed the information.'); consoleLogger('Writing new build information to the disk...'); $success = file_put_contents('fileinfo/'.$updateId.'.json', json_encode($temp)."\n"); if($success) { consoleLogger('Successfully written build information to the disk.'); $fileWrite = 'INFO_WRITTEN'; } else { consoleLogger('An error has occured while writing the information to the disk.'); } } else { consoleLogger('This build already exists in the database.'); } $ids = uupListIds(); if(!isset($ids['error'])) { $ids = $ids['builds']; $buildName = $foundBuild.' '.$updateTitle.' '.$arch; foreach($ids as $val) { $testName = $val['build'].' '.$val['title'].' '.$val['arch']; if($buildName == $testName && $val['uuid'] != $updateId) { unlink(realpath('fileinfo/'.$val['uuid'].'.json')); consoleLogger('Removed superseded update: '.$val['uuid']); } } } return array( 'apiVersion' => uupApiVersion(), 'updateId' => $updateId, 'updateTitle' => $updateTitle, 'foundBuild' => $foundBuild, 'arch' => $arch, 'fileWrite' => $fileWrite, ); } ?>