diff --git a/shared/main.php b/shared/main.php
index d640f0e..d4619d2 100644
--- a/shared/main.php
+++ b/shared/main.php
@@ -16,7 +16,7 @@ limitations under the License.
*/
function uupApiVersion() {
- return '1.8.2';
+ return '1.9.0';
}
function uupApiPrintBrand() {
diff --git a/shared/requests.php b/shared/requests.php
index 15e6da6..2d7dd41 100644
--- a/shared/requests.php
+++ b/shared/requests.php
@@ -15,6 +15,73 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
+// Composes DeviceAttributes parameter needed to fetch data
+function composeDeviceAttributes($flight, $ring, $build, $arch) {
+ $branch = branchFromBuild($build);
+
+ if($ring == 'RETAIL') {
+ $flightEnabled = 0;
+ } else {
+ $flightEnabled = 1;
+ }
+
+ $attrib = array(
+ 'App=WU',
+ 'AppVer='.$build,
+ 'AttrDataVer=30',
+ 'BranchReadinessLevel=CB',
+ 'CurrentBranch='.$branch,
+ 'DeviceFamily=Windows.Desktop',
+ 'FirmwareVersion=6.00',
+ 'FlightContent='.$flight,
+ 'FlightingBranchName=external',
+ 'FlightRing='.$ring,
+ 'Free=32to64',
+ 'GStatus_RS3=2',
+ 'InstallationType=Client',
+ 'InstallLanguage=en-US',
+ 'IsDeviceRetailDemo=0',
+ 'IsFlightingEnabled='.$flightEnabled,
+ 'OEMModel=Microsoft',
+ 'OEMName_Uncleaned=Microsoft',
+ 'OSArchitecture='.$arch,
+ 'OSSkuId=48',
+ 'OSUILocale=en-US',
+ 'OSVersion='.$build,
+ 'PonchAllow=1',
+ 'ProcessorIdentifier=Intel64 Family 6 Model 142 Stepping 9',
+ 'ProcessorManufacturer=GenuineIntel',
+ 'TelemetryLevel=1',
+ 'UpdateManagementGroup=2',
+ 'UpgEx_RS3=Green',
+ 'WuClientVer='.$build,
+ );
+
+ return 'E:'.implode('&', $attrib);
+}
+
+// Returns the most possible branch for selected build
+function branchFromBuild($build) {
+ $build = explode('.', $build);
+ $build = $build[2];
+
+ switch($build) {
+ case 15063:
+ $branch = 'rs2_release';
+ break;
+
+ case 16299:
+ $branch = 'rs3_release';
+ break;
+
+ default:
+ $branch = 'rs_prerelease';
+ break;
+ }
+
+ return $branch;
+}
+
// Composes POST data for gathering list of urls for download
function composeFileGetRequest($updateId, $device, $info, $rev = 1) {
$uuid = randStr(8).'-'.randStr(4).'-'.randStr(4).'-'.randStr(4).'-'.randStr(12);
@@ -25,15 +92,16 @@ function composeFileGetRequest($updateId, $device, $info, $rev = 1) {
$created = gmdate(DATE_W3C, $createdTime);
$expires = gmdate(DATE_W3C, $expiresTime);
- $flightEnabled = 1;
- $branch = 'rs_prerelease';
+ $branch = branchFromBuild($info['checkBuild']);
- if($info['ring'] == 'RETAIL') {
- $flightEnabled = 0;
- $branch = 'rs2_release';
- }
+ $deviceAttributes = composeDeviceAttributes(
+ $info['flight'],
+ $info['ring'],
+ $info['checkBuild'],
+ $info['arch']
+ );
- return 'http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2urn:uuid:'.$uuid.'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured'.$created.''.$expires.''.$device.''.$updateId.''.$rev.'FileUrlFileDecryptionE:BranchReadinessLevel=CB&GStatus_RS3=2&PonchAllow=1&CurrentBranch='.$branch.'&FlightContent='.$info['flight'].'&FlightingBranchName=external&FlightRing='.$info['ring'].'&AttrDataVer=29&InstallLanguage=en-US&OSUILocale=en-US&InstallationType=Client&FirmwareVersion=6.00&OSSkuId=48&App=WU&ProcessorManufacturer=GenuineIntel&AppVer='.$info['checkBuild'].'&UpgEx_RS3=Green&OSArchitecture=AMD64&UpdateManagementGroup=2&IsFlightingEnabled='.$flightEnabled.'&IsDeviceRetailDemo=0&TelemetryLevel=1&WuClientVer='.$info['checkBuild'].'&Free=32to64&OSVersion='.$info['checkBuild'].'&DeviceFamily=Windows.Desktop&';
+ return 'http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/GetExtendedUpdateInfo2urn:uuid:'.$uuid.'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx/secured'.$created.''.$expires.''.$device.''.$updateId.''.$rev.'FileUrlFileDecryption'.$deviceAttributes.'';
}
// Composes POST data for fetching the latest update information from Windows Update
@@ -46,14 +114,31 @@ function composeFetchUpdRequest($device, $encData, $arch, $flight, $ring, $build
$created = gmdate(DATE_W3C, $createdTime);
$expires = gmdate(DATE_W3C, $expiresTime);
- $flightEnabled = 1;
- $branch = 'rs_prerelease';
+ $branch = branchFromBuild($build);
- if($ring == 'RETAIL') {
- $flightEnabled = 0;
- $branch = 'rs2_release';
- }
+ $products = array(
+ 'Branch='.$branch,
+ 'PN=Client.OS.rs2.'.$arch,
+ 'PrimaryOSProduct=1',
+ 'V='.$build,
+ );
- return 'http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdatesurn:uuid:'.$uuid.'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx'.$created.''.$expires.''.$device.'2045-04-07T12:38:34Z'.$encData.'falsefalsetruetrueExtendedLocalizedPropertiesEulaen-USfalseE:BranchReadinessLevel=CB&GStatus_RS3=2&PonchAllow=1&CurrentBranch='.$branch.'&FlightContent='.$flight.'&FlightingBranchName=external&FlightRing='.$ring.'&AttrDataVer=29&InstallLanguage=en-US&OSUILocale=en-US&InstallationType=Client&FirmwareVersion=6.00&OSSkuId=48&App=WU&ProcessorManufacturer=GenuineIntel&AppVer='.$build.'&UpgEx_RS3=Green&OSArchitecture=AMD64&UpdateManagementGroup=2&IsFlightingEnabled='.$flightEnabled.'&IsDeviceRetailDemo=0&TelemetryLevel=1&WuClientVer='.$build.'&Free=32to64&OSVersion='.$build.'&DeviceFamily=Windows.DesktopE:Interactive=1&IsSeeker=1&Id=UpdateOrchestrator&PN=Client.OS.rs2.'.$arch.'&Branch='.$branch.'&PrimaryOSProduct=1&V='.$build.';';
+ $callerAttrib = array(
+ 'Id=UpdateOrchestrator',
+ 'Interactive=1',
+ 'IsSeeker=1',
+ );
+
+ $products = implode('&', $products);
+ $callerAttrib = 'E:'.implode('&', $callerAttrib);
+
+ $deviceAttributes = composeDeviceAttributes(
+ $flight,
+ $ring,
+ $build,
+ $arch
+ );
+
+ return 'http://www.microsoft.com/SoftwareDistribution/Server/ClientWebService/SyncUpdatesurn:uuid:'.$uuid.'https://fe3.delivery.mp.microsoft.com/ClientWebService/client.asmx'.$created.''.$expires.''.$device.'2045-04-07T12:38:34Z'.$encData.'falsefalsetruetrueExtendedLocalizedPropertiesEulaen-USfalse'.$deviceAttributes.''.$callerAttrib.''.$products.'';
}
?>