From 87527d58d18fa719dc7a5ce512369485d907cba4 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sun, 20 Jan 2019 11:09:10 -0600 Subject: Integrate into latest v4. --- .editorconfig | 37 +++++++ Http.wixext.sln | 61 +++++++++++ appveyor.cmd | 13 +++ appveyor.yml | 35 +++++++ nuget.config | 16 +++ src/Cpp.Build.props | 104 +++++++++++++++++++ src/Directory.Build.props | 26 +++++ src/Directory.Build.targets | 48 +++++++++ src/FindLocalWix.props | 8 ++ src/ca/httpca.vcxproj | 62 +++++++++++ src/ca/httpca.vcxproj.filters | 35 +++++++ src/ca/packages.config | 5 + src/ca/precomp.h | 1 - src/ca/wixhttpca.def | 2 +- src/ca/wixhttpca.vcxproj | 58 ----------- src/ca/wixhttpca.vcxproj.filters | 40 -------- .../WixToolsetTest.Http/HttpExtensionFixture.cs | 33 ++++++ .../TestData/UsingUrlReservation/Package.en-us.wxl | 11 ++ .../TestData/UsingUrlReservation/Package.wxs | 22 ++++ .../UsingUrlReservation/PackageComponents.wxs | 16 +++ .../TestData/UsingUrlReservation/example.txt | 1 + .../WixToolsetTest.Http/WixToolsetTest.Http.csproj | 38 +++++++ src/wixext/HttpCompiler.cs | 114 ++++++++++----------- src/wixext/HttpConstants.cs | 2 +- src/wixext/HttpDecompiler.cs | 4 +- src/wixext/HttpErrors.cs | 31 ++++++ src/wixext/HttpExtensionData.cs | 50 ++------- src/wixext/HttpExtensionFactory.cs | 18 ++++ .../HttpWindowsInstallerBackendBinderExtension.cs | 26 +++++ src/wixext/Tuples/HttpTupleDefinitions.cs | 43 ++++++++ src/wixext/Tuples/WixHttpUrlAceTuple.cs | 71 +++++++++++++ src/wixext/Tuples/WixHttpUrlReservationTuple.cs | 79 ++++++++++++++ src/wixext/WixHttpExtension.csproj | 48 --------- src/wixext/WixToolset.Http.wixext.csproj | 33 ++++++ src/wixext/WixToolset.Http.wixext.targets | 11 ++ src/wixext/messages.xml | 13 --- src/wixlib/HttpExtension.wixproj | 26 ----- src/wixlib/HttpExtension_Platform.wxi | 14 +-- src/wixlib/caSuffix.wxi | 28 +++++ src/wixlib/caerr.wxi | 96 +++++++++++++++++ src/wixlib/http.wixproj | 42 ++++++++ src/wixlib/packages.config | 5 + version.json | 11 ++ 43 files changed, 1138 insertions(+), 299 deletions(-) create mode 100644 .editorconfig create mode 100644 Http.wixext.sln create mode 100644 appveyor.cmd create mode 100644 appveyor.yml create mode 100644 nuget.config create mode 100644 src/Cpp.Build.props create mode 100644 src/Directory.Build.props create mode 100644 src/Directory.Build.targets create mode 100644 src/FindLocalWix.props create mode 100644 src/ca/httpca.vcxproj create mode 100644 src/ca/httpca.vcxproj.filters create mode 100644 src/ca/packages.config delete mode 100644 src/ca/wixhttpca.vcxproj delete mode 100644 src/ca/wixhttpca.vcxproj.filters create mode 100644 src/test/WixToolsetTest.Http/HttpExtensionFixture.cs create mode 100644 src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.en-us.wxl create mode 100644 src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.wxs create mode 100644 src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/PackageComponents.wxs create mode 100644 src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/example.txt create mode 100644 src/test/WixToolsetTest.Http/WixToolsetTest.Http.csproj create mode 100644 src/wixext/HttpErrors.cs create mode 100644 src/wixext/HttpExtensionFactory.cs create mode 100644 src/wixext/HttpWindowsInstallerBackendBinderExtension.cs create mode 100644 src/wixext/Tuples/HttpTupleDefinitions.cs create mode 100644 src/wixext/Tuples/WixHttpUrlAceTuple.cs create mode 100644 src/wixext/Tuples/WixHttpUrlReservationTuple.cs delete mode 100644 src/wixext/WixHttpExtension.csproj create mode 100644 src/wixext/WixToolset.Http.wixext.csproj create mode 100644 src/wixext/WixToolset.Http.wixext.targets delete mode 100644 src/wixext/messages.xml delete mode 100644 src/wixlib/HttpExtension.wixproj create mode 100644 src/wixlib/caSuffix.wxi create mode 100644 src/wixlib/caerr.wxi create mode 100644 src/wixlib/http.wixproj create mode 100644 src/wixlib/packages.config create mode 100644 version.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..1d72e683 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +# Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. +# +# Do NOT modify this file. Update the canonical version in Home\repo-template\src\.editorconfig +# then update all of the repos. + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.{cs,vb}] +dotnet_sort_system_directives_first = true + +[*.cs] +csharp_indent_case_contents = true : error +csharp_indent_switch_labels = true : error +csharp_new_line_before_open_brace = all +csharp_prefer_braces = true : error +csharp_style_expression_bodied_methods = when_on_single_line : suggestion +csharp_style_expression_bodied_constructors = when_on_single_line : suggestion +csharp_style_expression_bodied_operators = when_on_single_line : suggestion +csharp_style_expression_bodied_properties = when_on_single_line : suggestion +csharp_style_expression_bodied_indexers = when_on_single_line : suggestion +csharp_style_expression_bodied_accessors = when_on_single_line : suggestion +csharp_style_var_elsewhere = true : suggestion +csharp_style_var_for_built_in_types = true : suggestion +csharp_style_var_when_type_is_apparent = true : suggestion +dotnet_style_qualification_for_event = true : error +dotnet_style_qualification_for_field = true : error +dotnet_style_qualification_for_method = true : error +dotnet_style_qualification_for_property = true : error + +[*.targets] +indent_size = 2 diff --git a/Http.wixext.sln b/Http.wixext.sln new file mode 100644 index 00000000..1e17caf7 --- /dev/null +++ b/Http.wixext.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2016 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "httpca", "src\ca\httpca.vcxproj", "{90743805-C043-47C7-B5FF-8F5EE5C8A2DE}" +EndProject +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "http", "src\wixlib\http.wixproj", "{055C1517-4CED-4199-BCDE-A383E5C4EF78}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.Http.wixext", "src\wixext\WixToolset.Http.wixext.csproj", "{AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolsetTest.Http", "src\test\WixToolsetTest.Http\WixToolsetTest.Http.csproj", "{6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Debug|Any CPU.Build.0 = Debug|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Debug|x86.ActiveCfg = Debug|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Debug|x86.Build.0 = Debug|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Release|Any CPU.ActiveCfg = Release|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Release|Any CPU.Build.0 = Release|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Release|x86.ActiveCfg = Release|Win32 + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE}.Release|x86.Build.0 = Release|Win32 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Debug|Any CPU.ActiveCfg = Debug|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Debug|Any CPU.Build.0 = Debug|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Debug|x86.ActiveCfg = Debug|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Debug|x86.Build.0 = Debug|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Release|Any CPU.ActiveCfg = Release|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Release|Any CPU.Build.0 = Release|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Release|x86.ActiveCfg = Release|x86 + {055C1517-4CED-4199-BCDE-A383E5C4EF78}.Release|x86.Build.0 = Release|x86 + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Debug|x86.ActiveCfg = Debug|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Debug|x86.Build.0 = Debug|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Release|Any CPU.Build.0 = Release|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Release|x86.ActiveCfg = Release|Any CPU + {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F}.Release|x86.Build.0 = Release|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Debug|x86.ActiveCfg = Debug|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Debug|x86.Build.0 = Debug|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Release|Any CPU.Build.0 = Release|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Release|x86.ActiveCfg = Release|Any CPU + {6379EBAA-B5FE-4468-89A3-EF0B5D30B87E}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {570B1B57-B310-4493-A3A3-B40D7374EFC3} + EndGlobalSection +EndGlobal diff --git a/appveyor.cmd b/appveyor.cmd new file mode 100644 index 00000000..f9266a21 --- /dev/null +++ b/appveyor.cmd @@ -0,0 +1,13 @@ +@setlocal +@pushd %~dp0 + +nuget restore + +msbuild -p:Configuration=Release -t:Restore + +msbuild -p:Configuration=Release src\test\WixToolsetTest.Http\WixToolsetTest.Http.csproj + +msbuild -p:Configuration=Release -t:Pack src\wixext\WixToolset.Http.wixext.csproj + +@popd +@endlocal \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000..d55322da --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,35 @@ +# Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. +# +# Do NOT modify this file. Update the canonical version in Home\repo-template\src\appveyor.yml +# then update all of the repos. + +image: Visual Studio 2017 + +version: 0.0.0.{build} +configuration: Release + +environment: + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true + DOTNET_CLI_TELEMETRY_OPTOUT: 1 + NUGET_XMLDOC_MODE: skip + +build_script: + - appveyor.cmd + +pull_requests: + do_not_increment_build_number: true + +nuget: + disable_publish_on_pr: true + +skip_branch_with_pr: true +skip_tags: true + +artifacts: +- path: build\Release\**\*.nupkg + name: nuget + +notifications: +- provider: Slack + incoming_webhook: + secure: p5xuu+4x2JHfwGDMDe5KcG1k7gZxqYc4jWVwvyNZv5cvkubPD2waJs5yXMAXZNN7Z63/3PWHb7q4KoY/99AjauYa1nZ4c5qYqRPFRBKTHfA= diff --git a/nuget.config b/nuget.config new file mode 100644 index 00000000..aaee3228 --- /dev/null +++ b/nuget.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Cpp.Build.props b/src/Cpp.Build.props new file mode 100644 index 00000000..0e00132b --- /dev/null +++ b/src/Cpp.Build.props @@ -0,0 +1,104 @@ + + + + + + Win32 + $(BaseIntermediateOutputPath)$(Configuration)\$(Platform)\ + $(OutputPath)$(Platform)\ + + + + $([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0')) + + + + + $(DisableSpecificCompilerWarnings) + Level4 + $(ProjectDir)inc;$(MSBuildProjectDirectory);$(IntDir);$(SqlCESdkIncludePath);$(ProjectAdditionalIncludeDirectories);%(AdditionalIncludeDirectories) + WIN32;_WINDOWS;_WIN32_MSI=500;_WIN32_WINNT=0x0501;$(ArmPreprocessorDefinitions);$(UnicodePreprocessorDefinitions);_CRT_STDIO_LEGACY_WIDE_SPECIFIERS;_WINSOCK_DEPRECATED_NO_WARNINGS;%(PreprocessorDefinitions) + Use + precomp.h + StdCall + true + false + -YlprecompDefine + /Zc:threadSafeInit- %(AdditionalOptions) + true + + + $(ArmPreprocessorDefinitions);%(PreprocessorDefinitions) + $(ProjectAdditionalResourceIncludeDirectories);%(AdditionalIncludeDirectories) + + + $(OutDir);$(AdditionalMultiTargetLibraryPath);$(ProjectAdditionalLibraryDirectories);%(AdditionalLibraryDirectories) + + + $(ProjectSubSystem) + $(ProjectModuleDefinitionFile) + $(ResourceOnlyDll) + true + $(ProjectAdditionalLinkLibraries);advapi32.lib;comdlg32.lib;user32.lib;oleaut32.lib;gdi32.lib;shell32.lib;ole32.lib;version.lib;%(AdditionalDependencies) + $(OutDir);$(AdditionalMultiTargetLibraryPath);$(ArmLibraryDirectories);$(ProjectAdditionalLinkLibraryDirectories);%(AdditionalLibraryDirectories) + /IGNORE:4099 %(AdditionalOptions) + + + + + + NoExtensions + + + + + CDecl + + + + + OldStyle + true + true + + + + + Disabled + EnableFastChecks + _DEBUG;DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebug + + + + + + MultiThreadedDebugDll + + + + + MinSpace + NDEBUG;%(PreprocessorDefinitions) + true + true + MultiThreaded + + + true + true + + + + + + MultiThreadedDll + + + + + $(LinkKeyFile) + $(LinkDelaySign) + + + diff --git a/src/Directory.Build.props b/src/Directory.Build.props new file mode 100644 index 00000000..e853e22d --- /dev/null +++ b/src/Directory.Build.props @@ -0,0 +1,26 @@ + + + + + + Debug + false + + $(MSBuildProjectName) + $([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\build\)) + $(BaseOutputPath)obj\$(ProjectName)\ + $(BaseOutputPath)$(Configuration)\ + + WiX Toolset Team + WiX Toolset + Copyright (c) .NET Foundation and contributors. All rights reserved. + MS-RL + WiX Toolset + + + + + diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets new file mode 100644 index 00000000..dac7452a --- /dev/null +++ b/src/Directory.Build.targets @@ -0,0 +1,48 @@ + + + + + + + true + $(SolutionPath) + $(NCrunchOriginalSolutionPath) + + + + + + + $([System.IO.File]::ReadAllText($(TheSolutionPath))) + $([System.IO.Path]::GetDirectoryName( $(TheSolutionPath) )) + (?<="[PackageName]", ")(.*)(?=", ") + + + + + + %(Identity) + $(SolutionFileContent.Contains('\%(Identity).csproj')) + + + + + $(RegexPattern.Replace('[PackageName]','%(PackageName)') ) + $([System.Text.RegularExpressions.Regex]::Match('$(SolutionFileContent)', '%(Pattern)')) + + + + + + + + + + + diff --git a/src/FindLocalWix.props b/src/FindLocalWix.props new file mode 100644 index 00000000..a784e352 --- /dev/null +++ b/src/FindLocalWix.props @@ -0,0 +1,8 @@ + + + + + + $(MSBuildThisFileDirectory)..\..\Tools\build\Debug\net461\wix.targets + + diff --git a/src/ca/httpca.vcxproj b/src/ca/httpca.vcxproj new file mode 100644 index 00000000..0aa1da1f --- /dev/null +++ b/src/ca/httpca.vcxproj @@ -0,0 +1,62 @@ + + + + + + + + + + Debug + Win32 + + + Release + Win32 + + + + + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE} + DynamicLibrary + v141 + Unicode + httpca + wixhttpca.def + WiX Toolset Http CustomAction + + + + + + + crypt32.lib;httpapi.lib;msi.lib + + + + + Create + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + diff --git a/src/ca/httpca.vcxproj.filters b/src/ca/httpca.vcxproj.filters new file mode 100644 index 00000000..d2ab3287 --- /dev/null +++ b/src/ca/httpca.vcxproj.filters @@ -0,0 +1,35 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + Source Files + + + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/src/ca/packages.config b/src/ca/packages.config new file mode 100644 index 00000000..b87f9ab4 --- /dev/null +++ b/src/ca/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/ca/precomp.h b/src/ca/precomp.h index ec74006b..85aeb70e 100644 --- a/src/ca/precomp.h +++ b/src/ca/precomp.h @@ -13,5 +13,4 @@ #include "strutil.h" #include "aclutil.h" -#include "CustomMsiErrors.h" #include "cost.h" diff --git a/src/ca/wixhttpca.def b/src/ca/wixhttpca.def index 5368c946..f7e3e004 100644 --- a/src/ca/wixhttpca.def +++ b/src/ca/wixhttpca.def @@ -1,7 +1,7 @@ ; Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -LIBRARY "wixhttpca" +LIBRARY "httpca" EXPORTS SchedHttpUrlReservationsInstall diff --git a/src/ca/wixhttpca.vcxproj b/src/ca/wixhttpca.vcxproj deleted file mode 100644 index 89dbc79a..00000000 --- a/src/ca/wixhttpca.vcxproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - Debug - Win32 - - - Release - Win32 - - - - - Debug - ARM - - - Release - ARM - - - - - {90743805-C043-47C7-B5FF-8F5EE5C8A2DE} - DynamicLibrary - Unicode - wixhttpca - wixhttpca.def - - - - - - $(WixRoot)src\libs\dutil\inc;$(WixRoot)src\libs\wcautil - crypt32.lib;httpapi.lib;msi.lib;dutil.lib;wcautil.lib - - - - - - - - - - - - - - - - - - - diff --git a/src/ca/wixhttpca.vcxproj.filters b/src/ca/wixhttpca.vcxproj.filters deleted file mode 100644 index 354653c1..00000000 --- a/src/ca/wixhttpca.vcxproj.filters +++ /dev/null @@ -1,40 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - Source Files - - - - - Header Files - - - - - Resource Files - - - - - Source Files - - - \ No newline at end of file diff --git a/src/test/WixToolsetTest.Http/HttpExtensionFixture.cs b/src/test/WixToolsetTest.Http/HttpExtensionFixture.cs new file mode 100644 index 00000000..5658b657 --- /dev/null +++ b/src/test/WixToolsetTest.Http/HttpExtensionFixture.cs @@ -0,0 +1,33 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.Http +{ + using System.Linq; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using WixToolset.Http; + using Xunit; + + public class HttpExtensionFixture + { + [Fact] + public void CanBuildUsingMessageQueue() + { + var folder = TestData.Get(@"TestData\UsingUrlReservation"); + var build = new Builder(folder, typeof(HttpExtensionFactory), new[] { folder }); + + var results = build.BuildAndQuery(Build, "WixHttpUrlAce", "WixHttpUrlReservation"); + Assert.Equal(new[] + { + "WixHttpUrlAce:ace3u9zYtPm8dLIoYgB0bARb0dbB9w\turlt8sDcF469vDrZNldk0moxI25IGM\tNT SERVICE\\TestService\t268435456", + "WixHttpUrlReservation:urlt8sDcF469vDrZNldk0moxI25IGM\t0\t\thttp://+:80/vroot/\tfilF5_pLhBuF5b4N9XEo52g_hUM5Lo", + }, results.OrderBy(s => s).ToArray()); + } + + private static void Build(string[] args) + { + var result = WixRunner.Execute(args) + .AssertSuccess(); + } + } +} diff --git a/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.en-us.wxl b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.en-us.wxl new file mode 100644 index 00000000..38c12ac1 --- /dev/null +++ b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.en-us.wxl @@ -0,0 +1,11 @@ + + + + + + A newer version of [ProductName] is already installed. + MsiPackage + + diff --git a/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.wxs b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.wxs new file mode 100644 index 00000000..68ff98fd --- /dev/null +++ b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/Package.wxs @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/PackageComponents.wxs b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/PackageComponents.wxs new file mode 100644 index 00000000..780d598b --- /dev/null +++ b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/PackageComponents.wxs @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/example.txt b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/example.txt new file mode 100644 index 00000000..1b4ffe8a --- /dev/null +++ b/src/test/WixToolsetTest.Http/TestData/UsingUrlReservation/example.txt @@ -0,0 +1 @@ +This is example.txt. \ No newline at end of file diff --git a/src/test/WixToolsetTest.Http/WixToolsetTest.Http.csproj b/src/test/WixToolsetTest.Http/WixToolsetTest.Http.csproj new file mode 100644 index 00000000..9298ffbf --- /dev/null +++ b/src/test/WixToolsetTest.Http/WixToolsetTest.Http.csproj @@ -0,0 +1,38 @@ + + + + + + netcoreapp2.1 + false + + + + NU1701 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wixext/HttpCompiler.cs b/src/wixext/HttpCompiler.cs index c694ccde..094f5594 100644 --- a/src/wixext/HttpCompiler.cs +++ b/src/wixext/HttpCompiler.cs @@ -1,26 +1,20 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -namespace WixToolset.Extensions +namespace WixToolset.Http { using System; using System.Collections.Generic; - using System.Globalization; using System.Xml.Linq; using WixToolset.Data; using WixToolset.Extensibility; + using WixToolset.Http.Tuples; /// /// The compiler for the WiX Toolset Http Extension. /// - public sealed class HttpCompiler : CompilerExtension + public sealed class HttpCompiler : BaseCompilerExtension { - /// - /// Instantiate a new HttpCompiler. - /// - public HttpCompiler() - { - this.Namespace = "http://wixtoolset.org/schemas/v4/wxs/http"; - } + public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/http"; /// /// Processes an element for the Compiler. @@ -29,7 +23,7 @@ namespace WixToolset.Extensions /// Parent element of element to process. /// Element to process. /// Extra information about the context in which this element is being parsed. - public override void ParseElement(XElement parentElement, XElement element, IDictionary context) + public override void ParseElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary context) { switch (parentElement.Name.LocalName) { @@ -41,10 +35,10 @@ namespace WixToolset.Extensions switch (element.Name.LocalName) { case "UrlReservation": - this.ParseUrlReservationElement(element, serviceComponentId, serviceUser); + this.ParseUrlReservationElement(intermediate, section, element, serviceComponentId, serviceUser); break; default: - this.Core.UnexpectedElement(parentElement, element); + this.ParseHelper.UnexpectedElement(parentElement, element); break; } break; @@ -54,15 +48,15 @@ namespace WixToolset.Extensions switch (element.Name.LocalName) { case "UrlReservation": - this.ParseUrlReservationElement(element, componentId, null); + this.ParseUrlReservationElement(intermediate, section, element, componentId, null); break; default: - this.Core.UnexpectedElement(parentElement, element); + this.ParseHelper.UnexpectedElement(parentElement, element); break; } break; default: - this.Core.UnexpectedElement(parentElement, element); + this.ParseHelper.UnexpectedElement(parentElement, element); break; } } @@ -73,9 +67,9 @@ namespace WixToolset.Extensions /// The element to parse. /// Identifier of the component that owns this URL reservation. /// The security principal of the parent element (null if nested under Component). - private void ParseUrlReservationElement(XElement node, string componentId, string securityPrincipal) + private void ParseUrlReservationElement(Intermediate intermediate, IntermediateSection section, XElement node, string componentId, string securityPrincipal) { - SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); + SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node); Identifier id = null; int handleExisting = HttpConstants.heReplace; string handleExistingValue = null; @@ -90,10 +84,10 @@ namespace WixToolset.Extensions switch (attrib.Name.LocalName) { case "Id": - id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); + id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); break; case "HandleExisting": - handleExistingValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); + handleExistingValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); switch (handleExistingValue) { case "replace": @@ -106,31 +100,31 @@ namespace WixToolset.Extensions handleExisting = HttpConstants.heFail; break; default: - this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "HandleExisting", handleExistingValue, "replace", "ignore", "fail")); + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "HandleExisting", handleExistingValue, "replace", "ignore", "fail")); break; } break; case "Sddl": - sddl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); + sddl = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); break; case "Url": - url = this.Core.GetAttributeValue(sourceLineNumbers, attrib); + url = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); break; default: - this.Core.UnexpectedAttribute(node, attrib); + this.ParseHelper.UnexpectedAttribute(node, attrib); break; } } else { - this.Core.ParseExtensionAttribute(node, attrib); + this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib); } } // Need the element ID for child element processing, so generate now if not authored. if (null == id) { - id = this.Core.CreateIdentifier("url", componentId, securityPrincipal, url); + id = this.ParseHelper.CreateIdentifier("url", componentId, securityPrincipal, url); } // Parse UrlAce children. @@ -143,57 +137,56 @@ namespace WixToolset.Extensions case "UrlAce": if (null != sddl) { - this.Core.OnMessage(WixErrors.IllegalParentAttributeWhenNested(sourceLineNumbers, "UrlReservation", "Sddl", "UrlAce")); + this.Messaging.Write(ErrorMessages.IllegalParentAttributeWhenNested(sourceLineNumbers, "UrlReservation", "Sddl", "UrlAce")); } else { foundACE = true; - this.ParseUrlAceElement(child, id.Id, securityPrincipal); + this.ParseUrlAceElement(intermediate, section, child, id.Id, securityPrincipal); } break; default: - this.Core.UnexpectedElement(node, child); + this.ParseHelper.UnexpectedElement(node, child); break; } } else { - this.Core.ParseExtensionElement(node, child); + this.ParseHelper.ParseExtensionElement(this.Context.Extensions, intermediate, section, node, child); } } // Url is required. if (null == url) { - this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Url")); + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Url")); } // Security is required. if (null == sddl && !foundACE) { - this.Core.OnMessage(HttpErrors.NoSecuritySpecified(sourceLineNumbers)); + this.Messaging.Write(HttpErrors.NoSecuritySpecified(sourceLineNumbers)); } - if (!this.Core.EncounteredError) + if (!this.Messaging.EncounteredError) { - Row row = this.Core.CreateRow(sourceLineNumbers, "WixHttpUrlReservation"); - row[0] = id.Id; - row[1] = handleExisting; - row[2] = sddl; - row[3] = url; - row[4] = componentId; + var row = (WixHttpUrlReservationTuple)this.ParseHelper.CreateRow(section, sourceLineNumbers, "WixHttpUrlReservation", id); + row.HandleExisting = handleExisting; + row.Sddl = sddl; + row.Url = url; + row.Component_ = componentId; - if (this.Core.CurrentPlatform == Platform.ARM) + if (this.Context.Platform == Platform.ARM) { // Ensure ARM version of the CA is referenced. - this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsInstall_ARM"); - this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsUninstall_ARM"); + this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsInstall_ARM"); + this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsUninstall_ARM"); } else { // All other supported platforms use x86. - this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsInstall"); - this.Core.CreateSimpleReference(sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsUninstall"); + this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsInstall"); + this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, "CustomAction", "WixSchedHttpUrlReservationsUninstall"); } } } @@ -204,9 +197,9 @@ namespace WixToolset.Extensions /// The element to parse. /// The URL reservation ID. /// The default security principal. - private void ParseUrlAceElement(XElement node, string urlReservationId, string defaultSecurityPrincipal) + private void ParseUrlAceElement(Intermediate intermediate, IntermediateSection section, XElement node, string urlReservationId, string defaultSecurityPrincipal) { - SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); + SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node); Identifier id = null; string securityPrincipal = defaultSecurityPrincipal; int rights = HttpConstants.GENERIC_ALL; @@ -219,13 +212,13 @@ namespace WixToolset.Extensions switch (attrib.Name.LocalName) { case "Id": - id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); + id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); break; case "SecurityPrincipal": - securityPrincipal = this.Core.GetAttributeValue(sourceLineNumbers, attrib); + securityPrincipal = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); break; case "Rights": - rightsValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); + rightsValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); switch (rightsValue) { case "all": @@ -238,42 +231,41 @@ namespace WixToolset.Extensions rights = HttpConstants.GENERIC_EXECUTE; break; default: - this.Core.OnMessage(WixErrors.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Rights", rightsValue, "all", "delegate", "register")); + this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, "Rights", rightsValue, "all", "delegate", "register")); break; } break; default: - this.Core.UnexpectedAttribute(node, attrib); + this.ParseHelper.UnexpectedAttribute(node, attrib); break; } } else { - this.Core.ParseExtensionAttribute(node, attrib); + this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, node, attrib); } } // Generate Id now if not authored. if (null == id) { - id = this.Core.CreateIdentifier("ace", urlReservationId, securityPrincipal, rightsValue); + id = this.ParseHelper.CreateIdentifier("ace", urlReservationId, securityPrincipal, rightsValue); } - this.Core.ParseForExtensionElements(node); + this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, node); // SecurityPrincipal is required. if (null == securityPrincipal) { - this.Core.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SecurityPrincipal")); + this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "SecurityPrincipal")); } - if (!this.Core.EncounteredError) + if (!this.Messaging.EncounteredError) { - Row row = this.Core.CreateRow(sourceLineNumbers, "WixHttpUrlAce"); - row[0] = id.Id; - row[1] = urlReservationId; - row[2] = securityPrincipal; - row[3] = rights; + var row = (WixHttpUrlAceTuple)this.ParseHelper.CreateRow(section, sourceLineNumbers, "WixHttpUrlAce", id); + row.WixHttpUrlReservation_ = urlReservationId; + row.SecurityPrincipal = securityPrincipal; + row.Rights = rights; } } } diff --git a/src/wixext/HttpConstants.cs b/src/wixext/HttpConstants.cs index 7760d03f..1c96f278 100644 --- a/src/wixext/HttpConstants.cs +++ b/src/wixext/HttpConstants.cs @@ -1,6 +1,6 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -namespace WixToolset.Extensions +namespace WixToolset.Http { using System; diff --git a/src/wixext/HttpDecompiler.cs b/src/wixext/HttpDecompiler.cs index 043ee1e1..8991ec2f 100644 --- a/src/wixext/HttpDecompiler.cs +++ b/src/wixext/HttpDecompiler.cs @@ -1,7 +1,8 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -namespace WixToolset.Extensions +namespace WixToolset.Http { +#if TODO_CONSIDER_DECOMPILER using System; using System.Collections; using System.Diagnostics; @@ -132,4 +133,5 @@ namespace WixToolset.Extensions } } } +#endif } diff --git a/src/wixext/HttpErrors.cs b/src/wixext/HttpErrors.cs new file mode 100644 index 00000000..e87adf54 --- /dev/null +++ b/src/wixext/HttpErrors.cs @@ -0,0 +1,31 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using System; + using System.Resources; + using WixToolset.Data; + + public static class HttpErrors + { + public static Message NoSecuritySpecified(SourceLineNumber sourceLineNumbers) + { + return Message(sourceLineNumbers, Ids.NoSecuritySpecified, "The UrlReservation element doesn't identify the security for the reservation. You must either specify the Sddl attribute, or provide child UrlAce elements."); + } + + private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) + { + return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); + } + + private static Message Message(SourceLineNumber sourceLineNumber, Ids id, ResourceManager resourceManager, string resourceName, params object[] args) + { + return new Message(sourceLineNumber, MessageLevel.Error, (int)id, resourceManager, resourceName, args); + } + + public enum Ids + { + NoSecuritySpecified = 6701, + } + } +} diff --git a/src/wixext/HttpExtensionData.cs b/src/wixext/HttpExtensionData.cs index db79a6c1..2ae4a911 100644 --- a/src/wixext/HttpExtensionData.cs +++ b/src/wixext/HttpExtensionData.cs @@ -1,64 +1,30 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -namespace WixToolset.Extensions +namespace WixToolset.Http { - using System; - using System.Reflection; using WixToolset.Data; using WixToolset.Extensibility; /// /// The WiX Toolset Http Extension. /// - public sealed class HttpExtensionData : ExtensionData + public sealed class HttpExtensionData : BaseExtensionData { /// /// Gets the default culture. /// /// The default culture. - public override string DefaultCulture - { - get { return "en-us"; } - } - - /// - /// Gets the optional table definitions for this extension. - /// - /// The optional table definitions for this extension. - public override TableDefinitionCollection TableDefinitions - { - get - { - return HttpExtensionData.GetExtensionTableDefinitions(); - } - } - - /// - /// Gets the library associated with this extension. - /// - /// The table definitions to use while loading the library. - /// The loaded library. - public override Library GetLibrary(TableDefinitionCollection tableDefinitions) - { - return HttpExtensionData.GetExtensionLibrary(tableDefinitions); - } + public override string DefaultCulture => "en-US"; - /// - /// Internal mechanism to access the extension's table definitions. - /// - /// Extension's table definitions. - internal static TableDefinitionCollection GetExtensionTableDefinitions() + public override bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition) { - return ExtensionData.LoadTableDefinitionHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.tables.xml"); + tupleDefinition = HttpTupleDefinitions.ByName(name); + return tupleDefinition != null; } - /// - /// Internal mechanism to access the extension's library. - /// - /// Extension's library. - internal static Library GetExtensionLibrary(TableDefinitionCollection tableDefinitions) + public override Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions) { - return ExtensionData.LoadLibraryHelper(Assembly.GetExecutingAssembly(), "WixToolset.Extensions.Data.http.wixlib", tableDefinitions); + return Intermediate.Load(typeof(HttpExtensionData).Assembly, "WixToolset.Http.http.wixlib", tupleDefinitions); } } } diff --git a/src/wixext/HttpExtensionFactory.cs b/src/wixext/HttpExtensionFactory.cs new file mode 100644 index 00000000..fa23dac6 --- /dev/null +++ b/src/wixext/HttpExtensionFactory.cs @@ -0,0 +1,18 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using System; + using System.Collections.Generic; + using WixToolset.Extensibility; + + public class HttpExtensionFactory : BaseExtensionFactory + { + protected override IEnumerable ExtensionTypes => new[] + { + typeof(HttpCompiler), + typeof(HttpExtensionData), + typeof(HttpWindowsInstallerBackendBinderExtension), + }; + } +} diff --git a/src/wixext/HttpWindowsInstallerBackendBinderExtension.cs b/src/wixext/HttpWindowsInstallerBackendBinderExtension.cs new file mode 100644 index 00000000..598cb275 --- /dev/null +++ b/src/wixext/HttpWindowsInstallerBackendBinderExtension.cs @@ -0,0 +1,26 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using System.Linq; + using System.Xml; + using WixToolset.Data.WindowsInstaller; + using WixToolset.Extensibility; + + public class HttpWindowsInstallerBackendBinderExtension : BaseWindowsInstallerBackendBinderExtension + { + private static readonly TableDefinition[] Tables = LoadTables(); + + protected override TableDefinition[] TableDefinitionsForTuples => Tables; + + private static TableDefinition[] LoadTables() + { + using (var resourceStream = typeof(HttpWindowsInstallerBackendBinderExtension).Assembly.GetManifestResourceStream("WixToolset.Http.tables.xml")) + using (var reader = XmlReader.Create(resourceStream)) + { + var tables = TableDefinitionCollection.Load(reader); + return tables.ToArray(); + } + } + } +} diff --git a/src/wixext/Tuples/HttpTupleDefinitions.cs b/src/wixext/Tuples/HttpTupleDefinitions.cs new file mode 100644 index 00000000..11305d2a --- /dev/null +++ b/src/wixext/Tuples/HttpTupleDefinitions.cs @@ -0,0 +1,43 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using System; + using WixToolset.Data; + + public enum HttpTupleDefinitionType + { + WixHttpUrlAce, + WixHttpUrlReservation, + } + + public static partial class HttpTupleDefinitions + { + public static readonly Version Version = new Version("4.0.0"); + + public static IntermediateTupleDefinition ByName(string name) + { + if (!Enum.TryParse(name, out HttpTupleDefinitionType type)) + { + return null; + } + + return ByType(type); + } + + public static IntermediateTupleDefinition ByType(HttpTupleDefinitionType type) + { + switch (type) + { + case HttpTupleDefinitionType.WixHttpUrlAce: + return HttpTupleDefinitions.WixHttpUrlAce; + + case HttpTupleDefinitionType.WixHttpUrlReservation: + return HttpTupleDefinitions.WixHttpUrlReservation; + + default: + throw new ArgumentOutOfRangeException(nameof(type)); + } + } + } +} diff --git a/src/wixext/Tuples/WixHttpUrlAceTuple.cs b/src/wixext/Tuples/WixHttpUrlAceTuple.cs new file mode 100644 index 00000000..3e0006a0 --- /dev/null +++ b/src/wixext/Tuples/WixHttpUrlAceTuple.cs @@ -0,0 +1,71 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using WixToolset.Data; + using WixToolset.Http.Tuples; + + public static partial class HttpTupleDefinitions + { + public static readonly IntermediateTupleDefinition WixHttpUrlAce = new IntermediateTupleDefinition( + HttpTupleDefinitionType.WixHttpUrlAce.ToString(), + new[] + { + new IntermediateFieldDefinition(nameof(WixHttpUrlAceTupleFields.WixHttpUrlAce), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlAceTupleFields.WixHttpUrlReservation_), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlAceTupleFields.SecurityPrincipal), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlAceTupleFields.Rights), IntermediateFieldType.Number), + }, + typeof(WixHttpUrlAceTuple)); + } +} + +namespace WixToolset.Http.Tuples +{ + using WixToolset.Data; + + public enum WixHttpUrlAceTupleFields + { + WixHttpUrlAce, + WixHttpUrlReservation_, + SecurityPrincipal, + Rights, + } + + public class WixHttpUrlAceTuple : IntermediateTuple + { + public WixHttpUrlAceTuple() : base(HttpTupleDefinitions.WixHttpUrlAce, null, null) + { + } + + public WixHttpUrlAceTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(HttpTupleDefinitions.WixHttpUrlAce, sourceLineNumber, id) + { + } + + public IntermediateField this[WixHttpUrlAceTupleFields index] => this.Fields[(int)index]; + + public string WixHttpUrlAce + { + get => this.Fields[(int)WixHttpUrlAceTupleFields.WixHttpUrlAce].AsString(); + set => this.Set((int)WixHttpUrlAceTupleFields.WixHttpUrlAce, value); + } + + public string WixHttpUrlReservation_ + { + get => this.Fields[(int)WixHttpUrlAceTupleFields.WixHttpUrlReservation_].AsString(); + set => this.Set((int)WixHttpUrlAceTupleFields.WixHttpUrlReservation_, value); + } + + public string SecurityPrincipal + { + get => this.Fields[(int)WixHttpUrlAceTupleFields.SecurityPrincipal].AsString(); + set => this.Set((int)WixHttpUrlAceTupleFields.SecurityPrincipal, value); + } + + public int Rights + { + get => this.Fields[(int)WixHttpUrlAceTupleFields.Rights].AsNumber(); + set => this.Set((int)WixHttpUrlAceTupleFields.Rights, value); + } + } +} \ No newline at end of file diff --git a/src/wixext/Tuples/WixHttpUrlReservationTuple.cs b/src/wixext/Tuples/WixHttpUrlReservationTuple.cs new file mode 100644 index 00000000..7a251f3d --- /dev/null +++ b/src/wixext/Tuples/WixHttpUrlReservationTuple.cs @@ -0,0 +1,79 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Http +{ + using WixToolset.Data; + using WixToolset.Http.Tuples; + + public static partial class HttpTupleDefinitions + { + public static readonly IntermediateTupleDefinition WixHttpUrlReservation = new IntermediateTupleDefinition( + HttpTupleDefinitionType.WixHttpUrlReservation.ToString(), + new[] + { + new IntermediateFieldDefinition(nameof(WixHttpUrlReservationTupleFields.WixHttpUrlReservation), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlReservationTupleFields.HandleExisting), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixHttpUrlReservationTupleFields.Sddl), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlReservationTupleFields.Url), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixHttpUrlReservationTupleFields.Component_), IntermediateFieldType.String), + }, + typeof(WixHttpUrlReservationTuple)); + } +} + +namespace WixToolset.Http.Tuples +{ + using WixToolset.Data; + + public enum WixHttpUrlReservationTupleFields + { + WixHttpUrlReservation, + HandleExisting, + Sddl, + Url, + Component_, + } + + public class WixHttpUrlReservationTuple : IntermediateTuple + { + public WixHttpUrlReservationTuple() : base(HttpTupleDefinitions.WixHttpUrlReservation, null, null) + { + } + + public WixHttpUrlReservationTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(HttpTupleDefinitions.WixHttpUrlReservation, sourceLineNumber, id) + { + } + + public IntermediateField this[WixHttpUrlReservationTupleFields index] => this.Fields[(int)index]; + + public string WixHttpUrlReservation + { + get => this.Fields[(int)WixHttpUrlReservationTupleFields.WixHttpUrlReservation].AsString(); + set => this.Set((int)WixHttpUrlReservationTupleFields.WixHttpUrlReservation, value); + } + + public int HandleExisting + { + get => this.Fields[(int)WixHttpUrlReservationTupleFields.HandleExisting].AsNumber(); + set => this.Set((int)WixHttpUrlReservationTupleFields.HandleExisting, value); + } + + public string Sddl + { + get => this.Fields[(int)WixHttpUrlReservationTupleFields.Sddl].AsString(); + set => this.Set((int)WixHttpUrlReservationTupleFields.Sddl, value); + } + + public string Url + { + get => this.Fields[(int)WixHttpUrlReservationTupleFields.Url].AsString(); + set => this.Set((int)WixHttpUrlReservationTupleFields.Url, value); + } + + public string Component_ + { + get => this.Fields[(int)WixHttpUrlReservationTupleFields.Component_].AsString(); + set => this.Set((int)WixHttpUrlReservationTupleFields.Component_, value); + } + } +} \ No newline at end of file diff --git a/src/wixext/WixHttpExtension.csproj b/src/wixext/WixHttpExtension.csproj deleted file mode 100644 index 74af503f..00000000 --- a/src/wixext/WixHttpExtension.csproj +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - {AAFC3C7F-D818-4B1D-AF3F-A331EA917F3F} - WixHttpExtension - Library - WixToolset.Extensions - - - - - - - - - $(RootNamespace).Data.Messages.resources - - - $(RootNamespace).Data.tables.xml - - - $(RootNamespace).Xsd.http.xsd - PreserveNewest - - - WixToolset.Data.Serialize - WixToolset.Extensions.Serialize.Http - - - Data\http.wixlib - - - - - - - - - - - false - - - - diff --git a/src/wixext/WixToolset.Http.wixext.csproj b/src/wixext/WixToolset.Http.wixext.csproj new file mode 100644 index 00000000..c681e308 --- /dev/null +++ b/src/wixext/WixToolset.Http.wixext.csproj @@ -0,0 +1,33 @@ + + + + + + netstandard2.0 + WixToolset.Http + WiX Toolset Http Extension + WiX Toolset Http Extension + true + build + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wixext/WixToolset.Http.wixext.targets b/src/wixext/WixToolset.Http.wixext.targets new file mode 100644 index 00000000..254b0010 --- /dev/null +++ b/src/wixext/WixToolset.Http.wixext.targets @@ -0,0 +1,11 @@ + + + + + + $(MSBuildThisFileDirectory)..\tools\WixToolset.Http.wixext.dll + + + + + diff --git a/src/wixext/messages.xml b/src/wixext/messages.xml deleted file mode 100644 index 6dcdc366..00000000 --- a/src/wixext/messages.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - The UrlReservation element doesn't identify the security for the reservation. You must either specify the Sddl attribute, or provide child UrlAce elements. - - - - diff --git a/src/wixlib/HttpExtension.wixproj b/src/wixlib/HttpExtension.wixproj deleted file mode 100644 index 738579db..00000000 --- a/src/wixlib/HttpExtension.wixproj +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - {055C1517-4CED-4199-BCDE-A383E5C4EF78} - http - Library - true - true - en-us - - - - - - - - - - - - - - diff --git a/src/wixlib/HttpExtension_Platform.wxi b/src/wixlib/HttpExtension_Platform.wxi index 11c3aa2b..223b8e06 100644 --- a/src/wixlib/HttpExtension_Platform.wxi +++ b/src/wixlib/HttpExtension_Platform.wxi @@ -15,12 +15,12 @@ !(loc.WixExecHttpUrlReservationsUninstall) - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wixlib/caerr.wxi b/src/wixlib/caerr.wxi new file mode 100644 index 00000000..141942f2 --- /dev/null +++ b/src/wixlib/caerr.wxi @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wixlib/http.wixproj b/src/wixlib/http.wixproj new file mode 100644 index 00000000..ebd12321 --- /dev/null +++ b/src/wixlib/http.wixproj @@ -0,0 +1,42 @@ + + + + + + + {055C1517-4CED-4199-BCDE-A383E5C4EF78} + http + Library + true + true + en-us + + + + + + + + + + + + + httpca + {90743805-C043-47C7-B5FF-8F5EE5C8A2DE} + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + diff --git a/src/wixlib/packages.config b/src/wixlib/packages.config new file mode 100644 index 00000000..f3d424e1 --- /dev/null +++ b/src/wixlib/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/version.json b/version.json new file mode 100644 index 00000000..5f857771 --- /dev/null +++ b/version.json @@ -0,0 +1,11 @@ +{ + "version": "4.0", + "publicReleaseRefSpec": [ + "^refs/heads/master$" + ], + "cloudBuild": { + "buildNumber": { + "enabled": true + } + } +} -- cgit v1.2.3-55-g6feb