Merge branch 'release-0.0.30' into test-git-push

This commit is contained in:
ziti-ci
2020-10-14 08:05:26 -04:00
30 changed files with 907 additions and 191 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

+12 -1
View File
@@ -58,6 +58,16 @@
<local:MenuItem HorizontalAlignment="Stretch" Icon="/Assets/Images/wrench.png" Width="Auto" Label="Tunnel Configuration" MouseUp="ShowConfig"></local:MenuItem>
<local:MenuItem HorizontalAlignment="Stretch" Icon="/Assets/Images/logs.png" Width="Auto" Label="Service Logs" MouseUp="ShowLogs"></local:MenuItem>
<local:MenuItem HorizontalAlignment="Stretch" Icon="/Assets/Images/logs.png" Width="Auto" Label="Application Logs" MouseUp="ShowUILogs"></local:MenuItem>
<local:MenuItem HorizontalAlignment="Stretch" Icon="/Assets/Images/advanced.png" Width="Auto" Label="Set Logging Level" MouseUp="SetLogLevel"></local:MenuItem>
</StackPanel>
<StackPanel Name="LogLevelItems" Visibility="Collapsed" Orientation="Vertical" HorizontalAlignment="Stretch">
<local:SubOptionItem x:Name="LogFatal" HorizontalAlignment="Stretch" Width="Auto" Label="Fatal" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogError" HorizontalAlignment="Stretch" Width="Auto" Label="Error" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogWarn" HorizontalAlignment="Stretch" Width="Auto" Label="Warn" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogInfo" HorizontalAlignment="Stretch" Width="Auto" Label="Info" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogDebug" HorizontalAlignment="Stretch" Width="Auto" Label="Debug" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogTrace" HorizontalAlignment="Stretch" Width="Auto" Label="Trace" MouseUp="SetLevel"></local:SubOptionItem>
<local:SubOptionItem x:Name="LogVerbose" HorizontalAlignment="Stretch" Width="Auto" Label="Verbose" MouseUp="SetLevel"></local:SubOptionItem>
</StackPanel>
<StackPanel Name="ConfigItems" Visibility="Collapsed" Orientation="Vertical" HorizontalAlignment="Stretch">
<local:MenuEditItem x:Name="ConfigIp" HorizontalAlignment="Stretch" Width="Auto" Label="IPv4 Address:"></local:MenuEditItem>
@@ -71,7 +81,8 @@
<StackPanel Name="AboutItemsArea" Orientation="Vertical" HorizontalAlignment="Stretch" Visibility="Collapsed">
<Label Name="VersionInfo" HorizontalAlignment="Center" FontSize="10" Height="50" Padding="0,30,0,0" Foreground="#638190" Margin="0,-20,0,0" FontFamily="pack://application:,,,/Assets/Fonts/#Open Sans"></Label>
</StackPanel>
<Label Name="MainItemsButton" Margin="0,30,0,0" Foreground="#F4044D" FontWeight="SemiBold" Content="Quit Ziti Desktop Edge" Cursor="Hand" MouseUp="CloseApp" FontFamily="pack://application:,,,/Assets/Fonts/#Open Sans" HorizontalAlignment="Center"></Label>
<Label Name="UpdateAvailable" Visibility="Collapsed" Margin="0,0,0,0" Foreground="#F4044D" FontWeight="Normal" Content="An Upgrade is available, click to download" Cursor="Hand" MouseUp="DoUpdate" FontFamily="pack://application:,,,/Assets/Fonts/#Open Sans" HorizontalAlignment="Center"></Label>
<Label Name="MainItemsButton" Margin="0,10,0,0" Foreground="#F4044D" FontWeight="SemiBold" Content="Quit Ziti Desktop Edge" Cursor="Hand" MouseUp="CloseApp" FontFamily="pack://application:,,,/Assets/Fonts/#Open Sans" HorizontalAlignment="Center"></Label>
</StackPanel>
</Grid>
</Grid>
+90 -4
View File
@@ -10,6 +10,9 @@ using System.Reflection;
using System.Web;
using System.Net.Mail;
using System.IO;
using System.Net;
using Newtonsoft.Json.Linq;
using System.Threading.Tasks;
namespace ZitiDesktopEdge
{
@@ -21,12 +24,18 @@ namespace ZitiDesktopEdge
public delegate void AttachementChanged(bool attached);
public event AttachementChanged OnAttachmentChange;
public delegate void LogLevelChanged(string level);
public event LogLevelChanged OnLogLevelChanged;
public string menuState = "Main";
public string licenseData = "it's open source.";
public string LogLevel = "";
private string _updateUrl = "https://api.github.com/repos/openziti/desktop-edge-win/releases/latest";
private string _downloadUrl = "";
public MainMenu() {
InitializeComponent();
LicensesItems.Text = licenseData;
CheckUpdates();
}
private void HideMenu(object sender, MouseButtonEventArgs e) {
@@ -39,6 +48,10 @@ namespace ZitiDesktopEdge
Application.Current.Shutdown();
}
private void DoUpdate(object sender, MouseButtonEventArgs e) {
System.Diagnostics.Process.Start(_downloadUrl);
}
private void ShowAbout(object sender, MouseButtonEventArgs e) {
menuState = "About";
UpdateState();
@@ -64,6 +77,39 @@ namespace ZitiDesktopEdge
menuState = "UILogs";
UpdateState();
}
private void SetLogLevel(object sender, MouseButtonEventArgs e) {
menuState = "LogLevel";
UpdateState();
}
private void CheckUpdates() {
HttpWebRequest httpWebRequest = WebRequest.CreateHttp(_updateUrl);
httpWebRequest.Method = "GET";
httpWebRequest.ContentType = "application/json";
httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36";
HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream());
string result = streamReader.ReadToEnd();
JObject json = JObject.Parse(result);
string currentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
string serverVersion = json.Property("tag_name").Value.ToString() + ".0";
Version installed = new Version(currentVersion);
Version published = new Version(serverVersion);
int compare = installed.CompareTo(published);
if (compare<0) {
UpdateAvailable.Content = "An Upgrade is available, click to download";
UpdateAvailable.Visibility = Visibility.Visible;
} else if (compare>0) {
UpdateAvailable.Content = "Your version is newer than the released version";
UpdateAvailable.Visibility = Visibility.Visible;
}
JArray assets = JArray.Parse(json.Property("assets").Value.ToString());
foreach (JObject asset in assets.Children<JObject>()) {
_downloadUrl = asset.Property("browser_download_url").Value.ToString();
break;
}
}
private void UpdateState() {
MainItems.Visibility = Visibility.Collapsed;
@@ -75,16 +121,23 @@ namespace ZitiDesktopEdge
LicensesItems.Visibility = Visibility.Collapsed;
LogsItems.Visibility = Visibility.Collapsed;
ConfigItems.Visibility = Visibility.Collapsed;
LogLevelItems.Visibility = Visibility.Collapsed;
if (menuState=="About") {
if (menuState == "About") {
MenuTitle.Content = "About";
AboutItemsArea.Visibility = Visibility.Visible;
AboutItems.Visibility = Visibility.Visible;
BackArrow.Visibility = Visibility.Visible;
// Service Version - Lose the snapshot
string version = File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "OpenZiti", "Service", "Version.txt"));
if (version.IndexOf("-") > 0) version = version.Split('-')[0];
string version = "";
try {
ServiceClient.TunnelStatus s = (ServiceClient.TunnelStatus)Application.Current.Properties["CurrentTunnelStatus"];
version = $"{s.ServiceVersion.Version}@{s.ServiceVersion.Revision}";
} catch (Exception e) {
#if DEBUG
Debug.WriteLine(e.ToString());
#endif
}
// Interface Version
VersionInfo.Content = "App: " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()+" Service: "+ version;
@@ -108,6 +161,12 @@ namespace ZitiDesktopEdge
LogsItems.Text = UILog.GetLogs();
LogsItems.Visibility = Visibility.Visible;
BackArrow.Visibility = Visibility.Visible;
} else if (menuState == "LogLevel") {
ResetLevels();
MenuTitle.Content = "Set Log Level";
LogLevelItems.Visibility = Visibility.Visible;
BackArrow.Visibility = Visibility.Visible;
} else if (menuState=="Config") {
MenuTitle.Content = "Tunnel Configuration";
ConfigItems.Visibility = Visibility.Visible;
@@ -215,5 +274,32 @@ namespace ZitiDesktopEdge
OnAttachmentChange(true);
}
}
private void ResetLevels() {
if (this.LogLevel == "") this.LogLevel = "error";
LogVerbose.IsSelected = false;
LogDebug.IsSelected = false;
LogInfo.IsSelected = false;
LogError.IsSelected = false;
LogFatal.IsSelected = false;
LogWarn.IsSelected = false;
LogTrace.IsSelected = false;
if (this.LogLevel == "verbose") LogVerbose.IsSelected = true;
else if (this.LogLevel == "debug") LogDebug.IsSelected = true;
else if (this.LogLevel == "info") LogInfo.IsSelected = true;
else if (this.LogLevel == "error") LogError.IsSelected = true;
else if (this.LogLevel == "fatal") LogFatal.IsSelected = true;
else if (this.LogLevel == "warn") LogWarn.IsSelected = true;
else if (this.LogLevel == "trace") LogTrace.IsSelected = true;
}
private void SetLevel(object sender, MouseButtonEventArgs e) {
SubOptionItem item = (SubOptionItem)sender;
this.LogLevel = item.Label.ToLower();
if (OnLogLevelChanged != null) {
OnLogLevelChanged(this.LogLevel);
}
ResetLevels();
}
}
}
+26 -12
View File
@@ -4,21 +4,11 @@ using System.Windows;
using System.Windows.Input;
using System.IO;
using ZitiDesktopEdge.Models;
using System.IO.Compression;
using ZitiDesktopEdge.ServiceClient;
using System.ServiceProcess;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Diagnostics;
using System.Security.Principal;
using System.Net;
using System.Windows.Controls;
using System.Threading.Tasks;
using System.Threading;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Interop;
namespace ZitiDesktopEdge {
@@ -75,7 +65,6 @@ namespace ZitiDesktopEdge {
LaunchOrInstall();
SetNotifyIcon("white");
InitializeComponent();
}
private void MainWindow_Activated(object sender, EventArgs e) {
@@ -140,6 +129,7 @@ namespace ZitiDesktopEdge {
Application.Current.Properties.Add("ServiceClient", serviceClient);
Application.Current.Properties.Add("Identities", new List<ZitiIdentity>());
MainMenu.OnAttachmentChange += AttachmentChanged;
MainMenu.OnLogLevelChanged += LogLevelChanged;
IdentityMenu.OnError += IdentityMenu_OnError;
try {
@@ -154,6 +144,10 @@ namespace ZitiDesktopEdge {
IdentityMenu.OnForgot += IdentityForgotten;
}
private void LogLevelChanged(string level) {
serviceClient.SetLogLevel(level);
}
private void IdentityMenu_OnError(string message) {
ShowError("Identity Error", message);
}
@@ -253,12 +247,14 @@ namespace ZitiDesktopEdge {
private void ServiceClient_OnTunnelStatusEvent(object sender, TunnelStatusEvent e) {
if (e == null) return; //just skip it for now...
Debug.WriteLine($"==== TunnelStatusEvent: ");
Application.Current.Properties.Add("CurrentTunnelStatus", e.Status);
e.Status.Dump(Console.Out);
this.Dispatcher.Invoke(() => {
if(e.ApiVersion != Client.EXPECTED_API_VERSION) {
SetCantDisplay("Version mismatch!", "The version of the Service is not compatible");
return;
}
this.MainMenu.LogLevel = e.Status.LogLevel;
InitializeTimer((int)e.Status.Duration);
LoadStatusFromService(e.Status);
LoadIdentities(false);
@@ -406,6 +402,7 @@ namespace ZitiDesktopEdge {
try {
Identity createdId = serviceClient.AddIdentity(System.IO.Path.GetFileName(jwtDialog.FileName), false, fileContent);
ServiceClient.Client client = (ServiceClient.Client)Application.Current.Properties["ServiceClient"];
client.IdentityOnOff(createdId.FingerPrint, true);
if (createdId != null) {
identities.Add(ZitiIdentity.FromClient(createdId));
@@ -546,5 +543,22 @@ namespace ZitiDesktopEdge {
private void Label_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
Placement();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
serviceClient.SetLogLevel(NextLevel());
}
int cur = 0;
LogLevelEnum[] levels = new LogLevelEnum[] { LogLevelEnum.FATAL, LogLevelEnum.ERROR, LogLevelEnum.WARN, LogLevelEnum.INFO, LogLevelEnum.DEBUG, LogLevelEnum.TRACE, LogLevelEnum.VERBOSE };
public LogLevelEnum NextLevel()
{
cur++;
if (cur > 6)
{
cur = 0;
}
return levels[cur];
}
}
}
+2 -2
View File
@@ -51,5 +51,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.2.7.0")]
[assembly: AssemblyFileVersion("1.2.7.0")]
+40
View File
@@ -24,8 +24,20 @@ using System.Windows.Documents;
/// </summary>
namespace ZitiDesktopEdge.ServiceClient
{
public enum LogLevelEnum
{
FATAL = 0,
ERROR = 1,
WARN = 2,
INFO = 3,
DEBUG = 4,
TRACE = 5,
VERBOSE = 6,
}
internal class Client
{
public const int EXPECTED_API_VERSION = 1;
public event EventHandler<TunnelStatusEvent> OnTunnelStatusEvent;
@@ -378,6 +390,34 @@ namespace ZitiDesktopEdge.ServiceClient
}
}
public void SetLogLevel(string level) {
try {
send(new SetLogLevelFunction(level));
SvcResponse resp = read<SvcResponse>(ipcReader);
return;
} catch (IOException ioe) {
//almost certainly a problem with the pipe - recreate the pipe...
//setupPipe();
throw ioe;
}
}
public void SetLogLevel(LogLevelEnum level)
{
try
{
send(new SetLogLevelFunction(Enum.GetName(level.GetType(), level)));
SvcResponse resp = read<SvcResponse>(ipcReader);
return;
}
catch (IOException ioe)
{
//almost certainly a problem with the pipe - recreate the pipe...
//setupPipe();
throw ioe;
}
}
public Identity IdentityOnOff(string fingerprint, bool onOff)
{
try
+64 -12
View File
@@ -73,6 +73,10 @@ namespace ZitiDesktopEdge.ServiceClient
public bool OnOff { get; set; }
public string Fingerprint { get; set; }
}
public class SetLogLevelPayload
{
public string Level { get; set; }
}
public class IdentityToggleFunction : ServiceFunction
{
@@ -88,6 +92,19 @@ namespace ZitiDesktopEdge.ServiceClient
public IdentityTogglePayload Payload { get; set; }
}
public class SetLogLevelFunction : ServiceFunction
{
public SetLogLevelFunction(string level)
{
this.Function = "SetLogLevel";
this.Payload = new SetLogLevelPayload()
{
Level = level
};
}
public SetLogLevelPayload Payload { get; set; }
}
public class FingerprintPayload
{
public string Fingerprint { get; set; }
@@ -148,6 +165,18 @@ namespace ZitiDesktopEdge.ServiceClient
public string DNS { get; set; }
}
class ServiceVersion
{
public string Version { get; set; }
public string Revision { get; set; }
public string BuildDate { get; set; }
public override string ToString()
{
return $"Version: {Version}, Revision: {Revision}, BuildDate: {BuildDate}";
}
}
class ZitiTunnelStatus : SvcResponse
{
public TunnelStatus Status { get; set; }
@@ -163,21 +192,44 @@ namespace ZitiDesktopEdge.ServiceClient
public IpInfo IpInfo { get; set; }
public string LogLevel { get; set; }
public ServiceVersion ServiceVersion { get; set; }
public void Dump(System.IO.TextWriter writer)
{
writer.WriteLine($"Tunnel Active: {Active}");
foreach (Identity id in Identities)
{
writer.WriteLine($" FingerPrint: {id.FingerPrint}");
writer.WriteLine($" Name: {id.Name}");
writer.WriteLine($" Active: {id.Active}");
writer.WriteLine($" Status: {id.Status}");
writer.WriteLine($" Services:");
foreach (Service s in id.Services)
{
writer.WriteLine($" Name: {s.Name} HostName: {s.InterceptHost} Port: {s.InterceptPort}");
try {
writer.WriteLine($"Tunnel Active: {Active}");
writer.WriteLine($" LogLevel : {LogLevel}");
writer.WriteLine($" EvaluatedLogLevel: {EvaluateLogLevel()}");
foreach (Identity id in Identities) {
writer.WriteLine($" FingerPrint: {id.FingerPrint}");
writer.WriteLine($" Name : {id.Name}");
writer.WriteLine($" Active : {id.Active}");
writer.WriteLine($" Status : {id.Status}");
writer.WriteLine($" Services:");
foreach (Service s in id.Services) {
writer.WriteLine($" Name: {s.Name} HostName: {s.InterceptHost} Port: {s.InterceptPort}");
}
writer.WriteLine("=============================================");
}
writer.WriteLine("=============================================");
} catch (Exception e) {
if (writer!=null) writer.WriteLine(e.ToString());
}
}
public LogLevelEnum EvaluateLogLevel()
{
try
{
LogLevelEnum l = (LogLevelEnum) Enum.Parse(typeof(LogLevelEnum), LogLevel.ToUpper());
return l;
}
catch
{
System.Diagnostics.Debug.WriteLine("Could not parse response LogLevel from sevice - guessing INFO? " + LogLevel);
return LogLevelEnum.INFO;
}
}
}
@@ -0,0 +1,48 @@
<UserControl x:Class="ZitiDesktopEdge.SubOptionItem"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ZitiDesktopEdge"
mc:Ignorable="d"
d:DesignHeight="50" HorizontalAlignment="Stretch" d:DesignWidth="375" Cursor="Hand">
<UserControl.Triggers>
<EventTrigger RoutedEvent="UserControl.MouseEnter" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BgFill" From="0" To="0.2" Duration="0:0:0.5"></DoubleAnimation>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BgFill" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BgFill" From="0" To="0.2" Duration="0:0:0.5"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="UserControl.MouseLeave" >
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BgFill" From=".2" To="0" Duration="0:0:0.5"></DoubleAnimation>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="BgFill" Storyboard.TargetProperty="Visibility">
<DiscreteObjectKeyFrame KeyTime="0:0:0.5" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BgFill" From=".2" To="0" Duration="0:0:0.5"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</UserControl.Triggers>
<Grid>
<Rectangle Name="BgFill" Fill="#7d8faf" Opacity="0"></Rectangle>
<StackPanel Orientation="Vertical">
<Grid Height="49">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Label Name="MainLabel" Grid.Column="0" Content="Main Menu" VerticalAlignment="Center" HorizontalAlignment="Left" FontSize="14" FontFamily="pack://application:,,,/Assets/Fonts/#Open Sans" Foreground="Black"></Label>
<Image x:Name="SelectedCheck" Grid.Column="1" Cursor="Hand" Source="/Assets/Images/Success.png" Width="20" Height="20" Margin="0,0,0,0" />
</Grid>
<Rectangle HorizontalAlignment="Stretch" Height="1" Fill="#7d8faf" Opacity="0.2"></Rectangle>
</StackPanel>
</Grid>
</UserControl>
@@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ZitiDesktopEdge {
/// <summary>
/// Interaction logic for MenuItem.xaml
/// </summary>
public partial class SubOptionItem : UserControl {
private string _label = "";
private bool _isSelected = false;
public string Label {
get {
return _label;
}
set {
this._label = value;
MainLabel.Content = this._label;
}
}
public bool IsSelected {
get {
return _isSelected;
}
set {
this._isSelected = value;
if (this._isSelected) SelectedCheck.Visibility = Visibility.Visible;
else SelectedCheck.Visibility = Visibility.Collapsed;
}
}
public SubOptionItem() {
InitializeComponent();
}
}
}
+11 -1
View File
@@ -34,7 +34,7 @@
<SuiteName>Ziti</SuiteName>
<AutorunEnabled>true</AutorunEnabled>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.2.1.%2a</ApplicationVersion>
<ApplicationVersion>1.2.7.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -147,6 +147,9 @@
<Compile Include="RegistrationScreen.xaml.cs">
<DependentUpon>RegistrationScreen.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ItemRenderers\SubOptionItem.xaml.cs">
<DependentUpon>SubOptionItem.xaml</DependentUpon>
</Compile>
<Compile Include="Views\ItemRenderers\SubMenuItem.xaml.cs">
<DependentUpon>SubMenuItem.xaml</DependentUpon>
</Compile>
@@ -201,6 +204,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Views\ItemRenderers\SubOptionItem.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Views\ItemRenderers\SubMenuItem.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -353,5 +360,8 @@
<ItemGroup>
<Resource Include="Assets\Images\No_Services.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Assets\Images\Success.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+361
View File
@@ -0,0 +1,361 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DOCUMENT Type="Advanced Installer" CreateVersion="17.4.1" version="17.5" Modules="professional" RootPath="." Language="en" Id="{7315FE7B-0418-4F38-8B12-6C0594276D30}">
<COMPONENT cid="caphyon.advinst.msicomp.MsiPropsComponent">
<ROW Property="AI_BITMAP_DISPLAY_MODE" Value="0"/>
<ROW Property="AI_BackgroundColor" Value="lightblue" MsiKey="AI_BackgroundColor"/>
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
<ROW Property="AI_FrameBtnsColor" Value="powderblue" MultiBuildValue="AnyCPU_Release:mediumorchid" MsiKey="AI_FrameBtnsColor"/>
<ROW Property="AI_FrameColor" Value="powderblue" MultiBuildValue="AnyCPU_Release:deepskyblue" MsiKey="AI_FrameColor"/>
<ROW Property="AI_ImagesColor" Value="powderblue" MsiKey="AI_ImagesColor"/>
<ROW Property="AI_PROPPATH_PERBUILD_App.config" Value="ZitiUpdateService\bin\Release\App.config"/>
<ROW Property="AI_PROPPATH_PERBUILD_ZitiDesktopEdge.exe" Value="DesktopEdge\bin\Release\ZitiDesktopEdge.exe"/>
<ROW Property="AI_PROPPATH_PERBUILD_ZitiDesktopEdge.exe.config" Value="DesktopEdge\bin\Release\ZitiDesktopEdge.exe.config"/>
<ROW Property="AI_PROPPATH_PERBUILD_ZitiUpdateService.exe" Value="ZitiUpdateService\bin\Release\ZitiUpdateService.exe"/>
<ROW Property="AI_PROPPATH_PERBUILD_ZitiUpdateService.exe.config" Value="ZitiUpdateService\bin\Release\ZitiUpdateService.exe.config"/>
<ROW Property="AI_ThemeStyle" Value="head" MsiKey="AI_ThemeStyle"/>
<ROW Property="ALLUSERS" Value="1"/>
<ROW Property="ARPCOMMENTS" Value="This installer database contains the logic and data required to install [|ProductName]." ValueLocId="*"/>
<ROW Property="ARPHELPTELEPHONE" Value="support@openziti.io"/>
<ROW Property="ARPNOREPAIR" MultiBuildValue="DefaultBuild:1#AnyCPU_Release:1"/>
<ROW Property="ARPPRODUCTICON" Value="ziti.exe" Type="8"/>
<ROW Property="ARPURLINFOABOUT" Value="https://ziti.dev"/>
<ROW Property="CTRLS" Value="2"/>
<ROW Property="Manufacturer" Value="NetFoundry, Inc."/>
<ROW Property="ProductCode" Value="1033:{F6DE6F87-82E2-4A8F-812D-1AB32DFDA816} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="Ziti Desktop Edge"/>
<ROW Property="ProductVersion" Value="1.2.9" Type="32"/>
<ROW Property="SecureCustomProperties" Value="OLDPRODUCTS;AI_NEWERPRODUCTFOUND;AI_SETUPEXEPATH;SETUPEXEDIR"/>
<ROW Property="UpgradeCode" Value="{CB7E173A-663D-4A23-BB22-D1E8D885C2F3}"/>
<ROW Property="WindowsType9X" MultiBuildValue="DefaultBuild:Windows 9x/ME#AnyCPU_Release:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsType9XDisplay" MultiBuildValue="DefaultBuild:Windows 9x/ME#AnyCPU_Release:Windows 9x/ME" ValueLocId="-"/>
<ROW Property="WindowsTypeNT" MultiBuildValue="DefaultBuild:Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40" MultiBuildValue="DefaultBuild:Windows NT 4.0#AnyCPU_Release:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT40Display" MultiBuildValue="DefaultBuild:Windows NT 4.0#AnyCPU_Release:Windows NT 4.0" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50" MultiBuildValue="DefaultBuild:Windows 2000#AnyCPU_Release:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT50Display" MultiBuildValue="DefaultBuild:Windows 2000#AnyCPU_Release:Windows 2000" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5X" MultiBuildValue="DefaultBuild:Windows XP/2003#AnyCPU_Release:Windows XP/2003" ValueLocId="-"/>
<ROW Property="WindowsTypeNT5XDisplay" MultiBuildValue="DefaultBuild:Windows XP/2003#AnyCPU_Release:Windows XP/2003" ValueLocId="-"/>
<ROW Property="WindowsTypeNTDisplay" MultiBuildValue="DefaultBuild:32-bit Windows versions" ValueLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiDirsComponent">
<ROW Directory="APPDIR" Directory_Parent="TARGETDIR" DefaultDir="APPDIR:." IsPseudoRoot="1"/>
<ROW Directory="DesktopFolder" Directory_Parent="TARGETDIR" DefaultDir="DESKTO~1|DesktopFolder" IsPseudoRoot="1"/>
<ROW Directory="SHORTCUTDIR" Directory_Parent="TARGETDIR" DefaultDir="SHORTC~1|SHORTCUTDIR" IsPseudoRoot="1"/>
<ROW Directory="TARGETDIR" DefaultDir="SourceDir"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCompsComponent">
<ROW Component="AI_ExePath" ComponentId="{F9B15650-F37D-424A-B159-B54B9F36EC2C}" Directory_="APPDIR" Attributes="260" KeyPath="AI_ExePath"/>
<ROW Component="APPDIR" ComponentId="{B3881A25-6890-4920-9F69-CACA0C9ABA63}" Directory_="APPDIR" Attributes="0"/>
<ROW Component="App.config" ComponentId="{27FAD46C-8379-4680-8506-4BCBA5A012E8}" Directory_="APPDIR" Attributes="0" KeyPath="App.config" Type="0"/>
<ROW Component="Microsoft.CSharp.dll" ComponentId="{540E8CA3-4E63-4463-8F75-60904D3984F8}" Directory_="APPDIR" Attributes="0" KeyPath="Microsoft.CSharp.dll"/>
<ROW Component="Newtonsoft.Json.dll" ComponentId="{DAFA5618-17B9-4103-A746-BF92FEE18CDF}" Directory_="APPDIR" Attributes="0" KeyPath="Newtonsoft.Json.dll"/>
<ROW Component="PresentationCore.dll" ComponentId="{15471205-60F3-4EA3-847E-D091DA990388}" Directory_="APPDIR" Attributes="0" KeyPath="PresentationCore.dll"/>
<ROW Component="PresentationFramework.dll" ComponentId="{EEFFC81D-B6D0-4CCD-BD10-8F53F4BFCFB4}" Directory_="APPDIR" Attributes="0" KeyPath="PresentationFramework.dll"/>
<ROW Component="ProductInformation" ComponentId="{4FC3A7CB-D334-466A-A919-E6A237EF4443}" Directory_="APPDIR" Attributes="260" KeyPath="Version"/>
<ROW Component="SHORTCUTDIR" ComponentId="{3A88A759-A3FE-443F-A6D9-0D97BA424B2E}" Directory_="SHORTCUTDIR" Attributes="0"/>
<ROW Component="System.Configuration.Install.dll" ComponentId="{68F557A9-3BD9-470A-86C3-0A21A6D86184}" Directory_="APPDIR" Attributes="0" KeyPath="System.Configuration.Install.dll"/>
<ROW Component="System.Configuration.dll" ComponentId="{4DB49255-2025-4611-927B-62EBEE55ED0B}" Directory_="APPDIR" Attributes="0" KeyPath="System.Configuration.dll"/>
<ROW Component="System.Core.dll" ComponentId="{6859AD42-0205-41C4-B2E8-A9F867941114}" Directory_="APPDIR" Attributes="0" KeyPath="System.Core.dll"/>
<ROW Component="System.Data.DataSetExtensions.dll" ComponentId="{6EF01850-BA53-45D4-98BD-8B8207FFCD1E}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.DataSetExtensions.dll"/>
<ROW Component="System.Data.dll" ComponentId="{A3C49BF5-381E-49BE-8002-20D06F50B5A3}" Directory_="APPDIR" Attributes="0" KeyPath="System.Data.dll"/>
<ROW Component="System.Drawing.dll" ComponentId="{83C97776-B0D4-41BC-83A8-419A48143B8A}" Directory_="APPDIR" Attributes="0" KeyPath="System.Drawing.dll"/>
<ROW Component="System.IO.Compression.FileSystem.dll" ComponentId="{4D32A321-7E4E-41F4-BB20-E5F21229977F}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Compression.FileSystem.dll"/>
<ROW Component="System.IO.Compression.dll" ComponentId="{DB86F772-E56A-4717-9882-4D5ED876F7B0}" Directory_="APPDIR" Attributes="0" KeyPath="System.IO.Compression.dll"/>
<ROW Component="System.Management.Automation.dll" ComponentId="{6163962D-31BF-4344-8F04-7D4D24287C58}" Directory_="APPDIR" Attributes="0" KeyPath="System.Management.Automation.dll"/>
<ROW Component="System.Management.Instrumentation.dll" ComponentId="{5A076034-ED4E-473B-BC20-CBABE41CAA02}" Directory_="APPDIR" Attributes="0" KeyPath="System.Management.Instrumentation.dll"/>
<ROW Component="System.Management.dll" ComponentId="{BC151D0A-EB48-48F4-A319-09AF40828B30}" Directory_="APPDIR" Attributes="0" KeyPath="System.Management.dll"/>
<ROW Component="System.Net.Http.dll" ComponentId="{8874D498-A1A1-4A4A-9CA2-56FBA1345317}" Directory_="APPDIR" Attributes="0" KeyPath="System.Net.Http.dll"/>
<ROW Component="System.Net.NetworkInformation.dll" ComponentId="{34177941-95FE-4890-9C4E-34425B259E66}" Directory_="APPDIR" Attributes="0" KeyPath="System.Net.NetworkInformation.dll"/>
<ROW Component="System.Net.dll" ComponentId="{4876BD50-CF74-4DDE-ACD9-9606AEA52E32}" Directory_="APPDIR" Attributes="0" KeyPath="System.Net.dll"/>
<ROW Component="System.ServiceProcess.dll" ComponentId="{01957F6B-B2FC-46AA-AFEE-0B097325F64B}" Directory_="APPDIR" Attributes="0" KeyPath="System.ServiceProcess.dll"/>
<ROW Component="System.Web.dll" ComponentId="{861576BD-AF1E-496B-B858-1D80FD3E2840}" Directory_="APPDIR" Attributes="0" KeyPath="System.Web.dll"/>
<ROW Component="System.Windows.Forms.dll" ComponentId="{6439AF2A-8CFF-4524-B8C5-66FACA6A9381}" Directory_="APPDIR" Attributes="0" KeyPath="System.Windows.Forms.dll"/>
<ROW Component="System.Xaml.dll" ComponentId="{7FF1DDA5-1219-4560-974C-B12C8E610815}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xaml.dll"/>
<ROW Component="System.Xml.Linq.dll" ComponentId="{5C65D438-2F70-4A3E-ACDD-44D687A91FB8}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.Linq.dll"/>
<ROW Component="System.Xml.dll" ComponentId="{D74AE161-A455-4A5B-838F-7E15C6D054C9}" Directory_="APPDIR" Attributes="0" KeyPath="System.Xml.dll"/>
<ROW Component="System.dll" ComponentId="{18476955-6672-44F1-8D7A-29C882238B85}" Directory_="APPDIR" Attributes="0" KeyPath="System.dll"/>
<ROW Component="WindowsBase.dll" ComponentId="{200C0EDA-429D-47F7-9FD9-64090E5CB3DA}" Directory_="APPDIR" Attributes="0" KeyPath="WindowsBase.dll"/>
<ROW Component="ZitiDesktopEdge.exe" ComponentId="{FDDCF14B-4FAF-469F-810E-0877A0DD5F3B}" Directory_="APPDIR" Attributes="0" KeyPath="ZitiDesktopEdge.exe"/>
<ROW Component="ZitiUpdateService.exe" ComponentId="{01B4F535-D4A3-44CD-BB2D-A3A905A095D6}" Directory_="APPDIR" Attributes="0" KeyPath="ZitiUpdateService.exe"/>
<ROW Component="libgcc_s_seh1.dll" ComponentId="{B97B6447-8941-4F04-AA22-50D34E0A0F1A}" Directory_="APPDIR" Attributes="256" KeyPath="libgcc_s_seh1.dll"/>
<ROW Component="libuv.dll" ComponentId="{70EA329D-3C8B-4A62-80F2-00126F1DBCEC}" Directory_="APPDIR" Attributes="256" KeyPath="libuv.dll"/>
<ROW Component="libwinpthread1.dll" ComponentId="{C9800E18-A335-44F5-8D85-9A4155EF9AB1}" Directory_="APPDIR" Attributes="256" KeyPath="libwinpthread1.dll"/>
<ROW Component="mscorlib.dll" ComponentId="{FFB3B870-8A8B-4FE1-BFC9-1780BCA20E0D}" Directory_="APPDIR" Attributes="0" KeyPath="mscorlib.dll"/>
<ROW Component="ziti.dll" ComponentId="{123E1532-3EB0-4B87-AA61-43F950DF7B6F}" Directory_="APPDIR" Attributes="256" KeyPath="ziti.dll"/>
<ROW Component="zititunnel.exe" ComponentId="{65D4F495-09EF-440F-82E5-46F5889305D5}" Directory_="APPDIR" Attributes="256" KeyPath="zititunnel.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatsComponent">
<ROW Feature="MainFeature" Title="MainFeature" Description="Description" Display="1" Level="1" Directory_="APPDIR" Attributes="0"/>
<ATTRIBUTE name="CurrentFeature" value="MainFeature"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFilesComponent">
<ROW File="PresentationFramework.dll" Component_="PresentationFramework.dll" FileName="PRESEN~1.DLL|PresentationFramework.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\PresentationFramework.dll" SelfReg="false"/>
<ROW File="ZitiDesktopEdge.exe" Component_="ZitiDesktopEdge.exe" FileName="ZITIDE~1.EXE|ZitiDesktopEdge.exe" Attributes="0" SourcePath="&lt;AI_APPPATH_PERBUILD_ZitiDesktopEdge.exe&gt;" SelfReg="false" DigSign="true"/>
<ROW File="App.config" Component_="App.config" FileName="APP~1.CON|App.config" Attributes="0" SourcePath="&lt;AI_APPPATH_PERBUILD_App.config&gt;" SelfReg="false"/>
<ROW File="System.Xml.Linq.dll" Component_="System.Xml.Linq.dll" FileName="SYSTEM~1.DLL|System.Xml.Linq.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xml.Linq.dll" SelfReg="false"/>
<ROW File="ZitiDesktopEdge.exe.config" Component_="App.config" FileName="ZITIDE~1.CON|ZitiDesktopEdge.exe.config" Attributes="0" SourcePath="&lt;AI_APPPATH_PERBUILD_ZitiDesktopEdge.exe.config&gt;" SelfReg="false"/>
<ROW File="Microsoft.CSharp.dll" Component_="Microsoft.CSharp.dll" FileName="MICROS~1.DLL|Microsoft.CSharp.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Microsoft.CSharp.dll" SelfReg="false"/>
<ROW File="System.Management.Automation.dll" Component_="System.Management.Automation.dll" FileName="SYSTEM~2.DLL|System.Management.Automation.dll" Attributes="0" SourcePath="packages\System.Management.Automation.dll.10.0.10586.0\lib\net40\System.Management.Automation.dll" SelfReg="false"/>
<ROW File="mscorlib.dll" Component_="mscorlib.dll" FileName="mscorlib.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll" SelfReg="false"/>
<ROW File="Newtonsoft.Json.dll" Component_="Newtonsoft.Json.dll" FileName="NEWTON~1.DLL|Newtonsoft.Json.dll" Attributes="0" SourcePath="packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll" SelfReg="false"/>
<ROW File="PresentationCore.dll" Component_="PresentationCore.dll" FileName="PRESEN~2.DLL|PresentationCore.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\PresentationCore.dll" SelfReg="false"/>
<ROW File="System.Core.dll" Component_="System.Core.dll" FileName="SYSTEM~3.DLL|System.Core.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Core.dll" SelfReg="false"/>
<ROW File="System.ServiceProcess.dll" Component_="System.ServiceProcess.dll" FileName="SYSTEM~4.DLL|System.ServiceProcess.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.ServiceProcess.dll" SelfReg="false"/>
<ROW File="System.Data.DataSetExtensions.dll" Component_="System.Data.DataSetExtensions.dll" FileName="SYSTEM~5.DLL|System.Data.DataSetExtensions.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Data.DataSetExtensions.dll" SelfReg="false"/>
<ROW File="System.Configuration.dll" Component_="System.Configuration.dll" FileName="SYSTEM~6.DLL|System.Configuration.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Configuration.dll" SelfReg="false"/>
<ROW File="System.Drawing.dll" Component_="System.Drawing.dll" FileName="SYSTEM~7.DLL|System.Drawing.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Drawing.dll" SelfReg="false"/>
<ROW File="System.Data.dll" Component_="System.Data.dll" FileName="SYSTEM~8.DLL|System.Data.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Data.dll" SelfReg="false"/>
<ROW File="System.dll" Component_="System.dll" FileName="System.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll" SelfReg="false"/>
<ROW File="System.IO.Compression.dll" Component_="System.IO.Compression.dll" FileName="SYSTEM~9.DLL|System.IO.Compression.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.IO.Compression.dll" SelfReg="false"/>
<ROW File="System.IO.Compression.FileSystem.dll" Component_="System.IO.Compression.FileSystem.dll" FileName="SYSTE~10.DLL|System.IO.Compression.FileSystem.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.IO.Compression.FileSystem.dll" SelfReg="false"/>
<ROW File="System.Management.dll" Component_="System.Management.dll" FileName="SYSTE~11.DLL|System.Management.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Management.dll" SelfReg="false"/>
<ROW File="System.Management.Instrumentation.dll" Component_="System.Management.Instrumentation.dll" FileName="SYSTE~12.DLL|System.Management.Instrumentation.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Management.Instrumentation.dll" SelfReg="false"/>
<ROW File="System.Net.dll" Component_="System.Net.dll" FileName="SYSTE~13.DLL|System.Net.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Net.dll" SelfReg="false"/>
<ROW File="System.Net.Http.dll" Component_="System.Net.Http.dll" FileName="SYSTE~14.DLL|System.Net.Http.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Net.Http.dll" SelfReg="false"/>
<ROW File="System.Net.NetworkInformation.dll" Component_="System.Net.NetworkInformation.dll" FileName="SYSTE~15.DLL|System.Net.NetworkInformation.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\Facades\System.Net.NetworkInformation.dll" SelfReg="false"/>
<ROW File="System.Xaml.dll" Component_="System.Xaml.dll" FileName="SYSTE~16.DLL|System.Xaml.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xaml.dll" SelfReg="false"/>
<ROW File="System.Web.dll" Component_="System.Web.dll" FileName="SYSTE~17.DLL|System.Web.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Web.dll" SelfReg="false"/>
<ROW File="System.Windows.Forms.dll" Component_="System.Windows.Forms.dll" FileName="SYSTE~18.DLL|System.Windows.Forms.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Windows.Forms.dll" SelfReg="false"/>
<ROW File="System.Xml.dll" Component_="System.Xml.dll" FileName="SYSTE~19.DLL|System.Xml.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Xml.dll" SelfReg="false"/>
<ROW File="WindowsBase.dll" Component_="WindowsBase.dll" FileName="WINDOW~1.DLL|WindowsBase.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\WindowsBase.dll" SelfReg="false"/>
<ROW File="ZitiUpdateService.exe" Component_="ZitiUpdateService.exe" FileName="ZITIUP~1.EXE|ZitiUpdateService.exe" Attributes="0" SourcePath="&lt;AI_APPPATH_PERBUILD_ZitiUpdateService.exe&gt;" SelfReg="false" DigSign="true"/>
<ROW File="ZitiUpdateService.exe.config" Component_="App.config" FileName="ZITIUP~1.CON|ZitiUpdateService.exe.config" Attributes="0" SourcePath="&lt;AI_APPPATH_PERBUILD_ZitiUpdateService.exe.config&gt;" SelfReg="false"/>
<ROW File="System.Configuration.Install.dll" Component_="System.Configuration.Install.dll" FileName="SYSTE~20.DLL|System.Configuration.Install.dll" Attributes="0" SourcePath="..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Configuration.Install.dll" SelfReg="false"/>
<ROW File="libgcc_s_seh1.dll" Component_="libgcc_s_seh1.dll" FileName="LIBGCC~1.DLL|libgcc_s_seh-1.dll" Attributes="0" SourcePath="service/libgcc_s_seh-1.dll" SelfReg="false"/>
<ROW File="libuv.dll" Component_="libuv.dll" FileName="libuv.dll" Attributes="0" SourcePath="service/libuv.dll" SelfReg="false"/>
<ROW File="libwinpthread1.dll" Component_="libwinpthread1.dll" FileName="LIBWIN~1.DLL|libwinpthread-1.dll" Attributes="0" SourcePath="service/libwinpthread-1.dll" SelfReg="false"/>
<ROW File="ziti.dll" Component_="ziti.dll" FileName="ziti.dll" Attributes="0" SourcePath="service/ziti.dll" SelfReg="false"/>
<ROW File="zititunnel.exe" Component_="zititunnel.exe" FileName="ZITI-T~1.EXE|ziti-tunnel.exe" Attributes="0" SourcePath="service/ziti-tunnel.exe" SelfReg="false" DigSign="true"/>
<ROW File="ziti.ico" Component_="App.config" FileName="ziti.ico" Attributes="0" SourcePath="ziti.ico" SelfReg="false"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.AppPathsComponent">
<ROW Name="AI_APPPATH_PERBUILD_App.config" Path="[|AI_PROPPATH_PERBUILD_App.config]" Type="2" Content="0"/>
<ROW Name="AI_APPPATH_PERBUILD_ZitiDesktopEdge.exe" Path="[|AI_PROPPATH_PERBUILD_ZitiDesktopEdge.exe]" Type="2" Content="0"/>
<ROW Name="AI_APPPATH_PERBUILD_ZitiDesktopEdge.exe.config" Path="[|AI_PROPPATH_PERBUILD_ZitiDesktopEdge.exe.config]" Type="2" Content="0"/>
<ROW Name="AI_APPPATH_PERBUILD_ZitiUpdateService.exe" Path="[|AI_PROPPATH_PERBUILD_ZitiUpdateService.exe]" Type="2" Content="0"/>
<ROW Name="AI_APPPATH_PERBUILD_ZitiUpdateService.exe.config" Path="[|AI_PROPPATH_PERBUILD_ZitiUpdateService.exe.config]" Type="2" Content="0"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BootstrOptComponent">
<ROW BootstrOptKey="GlobalOptions" DownloadFolder="[AppDataFolder][|Manufacturer]\[|ProductName]\prerequisites" Options="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.BuildComponent">
<ROW BuildKey="AnyCPU_Release" BuildName="AnyCPU_Release" BuildOrder="2" BuildType="1" PackageFolder="Output" PackageFileName="Ziti Desktop Edge Client-[|ProductVersion]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="ziti.ico" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Ziti Desktop Edge Client-[|ProductVersion]"/>
<ROW BuildKey="DefaultBuild" BuildName="DefaultBuild" BuildOrder="1" BuildType="1" PackageFolder="Output" PackageFileName="Ziti Desktop Edge Client-[|ProductVersion]" Languages="en" InstallationType="4" CabsLocation="1" PackageType="1" FilesInsideExe="true" ExeIconPath="ziti.ico" ExtractionFolder="[AppDataFolder][|Manufacturer]\[|ProductName] [|ProductVersion]\install" ExtUI="true" UseLargeSchema="true" ExeName="Ziti Desktop Edge Client-[|ProductVersion]" MsiPackageType="x64"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DictionaryComponent">
<ROW Path="&lt;AI_DICTS&gt;ui.ail"/>
<ROW Path="&lt;AI_DICTS&gt;ui_en.ail"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.DigCertStoreComponent">
<ROW DigitalCertificate="..\WinSign.p12" TimeStampUrl="http://timestamp.digicert.com" SignerDescription="[|ProductName]" SignOptions="7" SignTool="0" UseSha256="1" Password="7699ECA4D093C4035580B953B142A311C9FB727A"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.FragmentComponent">
<ROW Fragment="CommonUI.aip" Path="&lt;AI_FRAGS&gt;CommonUI.aip"/>
<ROW Fragment="FolderDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\FolderDlg.aip"/>
<ROW Fragment="MaintenanceTypeDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\MaintenanceTypeDlg.aip"/>
<ROW Fragment="MaintenanceWelcomeDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\MaintenanceWelcomeDlg.aip"/>
<ROW Fragment="PreparePrereqDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\PreparePrereqDlg.aip"/>
<ROW Fragment="PrerequisitesDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\PrerequisitesDlg.aip"/>
<ROW Fragment="ProgressPrereqDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\ProgressPrereqDlg.aip"/>
<ROW Fragment="SequenceDialogs.aip" Path="&lt;AI_THEMES&gt;azure\fragments\SequenceDialogs.aip"/>
<ROW Fragment="Sequences.aip" Path="&lt;AI_FRAGS&gt;Sequences.aip"/>
<ROW Fragment="StaticUIStrings.aip" Path="&lt;AI_FRAGS&gt;StaticUIStrings.aip"/>
<ROW Fragment="UI.aip" Path="&lt;AI_THEMES&gt;azure\fragments\UI.aip"/>
<ROW Fragment="Validation.aip" Path="&lt;AI_FRAGS&gt;Validation.aip"/>
<ROW Fragment="VerifyRemoveDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\VerifyRemoveDlg.aip"/>
<ROW Fragment="VerifyRepairDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\VerifyRepairDlg.aip"/>
<ROW Fragment="WelcomeDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\WelcomeDlg.aip"/>
<ROW Fragment="WelcomePrereqDlg.aip" Path="&lt;AI_THEMES&gt;azure\fragments\WelcomePrereqDlg.aip"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiActionTextComponent">
<ROW Action="AI_DeleteLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_DeleteRLzma" Description="Deleting files extracted from archive" DescriptionLocId="ActionText.Description.AI_DeleteLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractFiles" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
<ROW Action="AI_ExtractLzma" Description="Extracting files from archive" DescriptionLocId="ActionText.Description.AI_ExtractLzma" TemplateLocId="-"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiAppSearchComponent">
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_LM" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Property="AI_SETUPEXEPATH" Signature_="AI_EXE_PATH_CU" Builds="DefaultBuild;AnyCPU_Release"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiBinaryComponent">
<ROW Name="Prereq.dll" SourcePath="&lt;AI_CUSTACTS&gt;Prereq.dll"/>
<ROW Name="aicustact.dll" SourcePath="&lt;AI_CUSTACTS&gt;aicustact.dll"/>
<ROW Name="lzmaextractor.dll" SourcePath="&lt;AI_CUSTACTS&gt;lzmaextractor.dll"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlEventComponent">
<ROW Dialog_="WelcomeDlg" Control_="Next" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="FolderDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="FolderDlg" Control_="Back" Event="NewDialog" Argument="WelcomeDlg" Condition="AI_INSTALL" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_INSTALL" Ordering="197"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="FolderDlg" Condition="AI_INSTALL" Ordering="201"/>
<ROW Dialog_="MaintenanceWelcomeDlg" Control_="Next" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="99"/>
<ROW Dialog_="CustomizeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_MAINT" Ordering="101"/>
<ROW Dialog_="CustomizeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_MAINT" Ordering="198"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="202"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="ChangeButton" Event="NewDialog" Argument="CustomizeDlg" Condition="AI_MAINT" Ordering="501"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceWelcomeDlg" Condition="AI_MAINT" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RemoveButton" Event="NewDialog" Argument="VerifyRemoveDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="1"/>
<ROW Dialog_="MaintenanceTypeDlg" Control_="RepairButton" Event="NewDialog" Argument="VerifyRepairDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="601"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Back" Event="NewDialog" Argument="MaintenanceTypeDlg" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="1"/>
<ROW Dialog_="VerifyRepairDlg" Control_="Repair" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Repair&quot;" Ordering="399" Options="1"/>
<ROW Dialog_="VerifyRemoveDlg" Control_="Remove" Event="EndDialog" Argument="Return" Condition="AI_MAINT AND InstallMode=&quot;Remove&quot;" Ordering="299" Options="1"/>
<ROW Dialog_="PatchWelcomeDlg" Control_="Next" Event="NewDialog" Argument="VerifyReadyDlg" Condition="AI_PATCH" Ordering="201"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_PATCH" Ordering="199"/>
<ROW Dialog_="VerifyReadyDlg" Control_="Back" Event="NewDialog" Argument="PatchWelcomeDlg" Condition="AI_PATCH" Ordering="203"/>
<ROW Dialog_="ResumeDlg" Control_="Install" Event="EndDialog" Argument="Return" Condition="AI_RESUME" Ordering="299"/>
<ROW Dialog_="WelcomePrereqDlg" Control_="Next" Event="NewDialog" Argument="PrerequisitesDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
<ROW Dialog_="PrerequisitesDlg" Control_="Next" Event="EndDialog" Argument="Return" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
<ROW Dialog_="PrerequisitesDlg" Control_="Back" Event="NewDialog" Argument="WelcomePrereqDlg" Condition="AI_BOOTSTRAPPER" Ordering="1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCreateFolderComponent">
<ROW Directory_="APPDIR" Component_="APPDIR" ManualDelete="true"/>
<ROW Directory_="SHORTCUTDIR" Component_="SHORTCUTDIR" ManualDelete="false"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiCustActComponent">
<ROW Action="AI_AppSearchEx" Type="1" Source="Prereq.dll" Target="DoAppSearchEx"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH_ORIGINAL" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DATA_SETTER" Type="51" Source="CustomActionData" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DOWNGRADE" Type="19" Target="4010"/>
<ROW Action="AI_DeleteCadLzma" Type="51" Source="AI_DeleteLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteLzma" Type="1025" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DeleteRCadLzma" Type="51" Source="AI_DeleteRLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_DeleteRLzma" Type="1281" Source="lzmaextractor.dll" Target="DeleteLZMAFiles"/>
<ROW Action="AI_DpiContentScale" Type="1" Source="aicustact.dll" Target="DpiContentScale"/>
<ROW Action="AI_EnableDebugLog" Type="321" Source="aicustact.dll" Target="EnableDebugLog"/>
<ROW Action="AI_ExtractCadLzma" Type="51" Source="AI_ExtractLzma" Target="[AI_SETUPEXEPATH]"/>
<ROW Action="AI_ExtractFiles" Type="1" Source="Prereq.dll" Target="ExtractSourceFiles" AdditionalSeq="AI_DATA_SETTER"/>
<ROW Action="AI_ExtractLzma" Type="1025" Source="lzmaextractor.dll" Target="ExtractLZMAFiles"/>
<ROW Action="AI_FindExeLzma" Type="1" Source="lzmaextractor.dll" Target="FindEXE"/>
<ROW Action="AI_InstallModeCheck" Type="1" Source="aicustact.dll" Target="UpdateInstallMode" WithoutSeq="true"/>
<ROW Action="AI_LaunchApp" Type="1" Source="aicustact.dll" Target="[#ZitiDesktopEdge.exe]"/>
<ROW Action="AI_PREPARE_UPGRADE" Type="65" Source="aicustact.dll" Target="PrepareUpgrade"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Type="51" Source="AI_SETUPEXEPATH" Target="[AI_SETUPEXEPATH_ORIGINAL]"/>
<ROW Action="AI_RESTORE_LOCATION" Type="65" Source="aicustact.dll" Target="RestoreLocation"/>
<ROW Action="AI_ResolveKnownFolders" Type="1" Source="aicustact.dll" Target="AI_ResolveKnownFolders"/>
<ROW Action="AI_RunFinishActions" Type="1" Source="aicustact.dll" Target="RunFinishActions" WithoutSeq="true"/>
<ROW Action="AI_SHOW_LOG" Type="65" Source="aicustact.dll" Target="LaunchLogFile" WithoutSeq="true"/>
<ROW Action="AI_STORE_LOCATION" Type="51" Source="ARPINSTALLLOCATION" Target="[APPDIR]"/>
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFiles64Folder][Manufacturer]\[ProductName]#AnyCPU_Release:[ProgramFiles64Folder][Manufacturer]\[ProductName]"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiFeatCompsComponent">
<ROW Feature_="MainFeature" Component_="APPDIR"/>
<ROW Feature_="MainFeature" Component_="ProductInformation"/>
<ROW Feature_="MainFeature" Component_="PresentationFramework.dll"/>
<ROW Feature_="MainFeature" Component_="ZitiDesktopEdge.exe"/>
<ROW Feature_="MainFeature" Component_="App.config"/>
<ROW Feature_="MainFeature" Component_="System.Xml.Linq.dll"/>
<ROW Feature_="MainFeature" Component_="Microsoft.CSharp.dll"/>
<ROW Feature_="MainFeature" Component_="System.Management.Automation.dll"/>
<ROW Feature_="MainFeature" Component_="mscorlib.dll"/>
<ROW Feature_="MainFeature" Component_="Newtonsoft.Json.dll"/>
<ROW Feature_="MainFeature" Component_="PresentationCore.dll"/>
<ROW Feature_="MainFeature" Component_="System.Core.dll"/>
<ROW Feature_="MainFeature" Component_="System.ServiceProcess.dll"/>
<ROW Feature_="MainFeature" Component_="System.Data.DataSetExtensions.dll"/>
<ROW Feature_="MainFeature" Component_="System.Configuration.dll"/>
<ROW Feature_="MainFeature" Component_="System.Drawing.dll"/>
<ROW Feature_="MainFeature" Component_="System.Data.dll"/>
<ROW Feature_="MainFeature" Component_="System.dll"/>
<ROW Feature_="MainFeature" Component_="System.IO.Compression.dll"/>
<ROW Feature_="MainFeature" Component_="System.IO.Compression.FileSystem.dll"/>
<ROW Feature_="MainFeature" Component_="System.Management.dll"/>
<ROW Feature_="MainFeature" Component_="System.Management.Instrumentation.dll"/>
<ROW Feature_="MainFeature" Component_="System.Net.dll"/>
<ROW Feature_="MainFeature" Component_="System.Net.Http.dll"/>
<ROW Feature_="MainFeature" Component_="System.Net.NetworkInformation.dll"/>
<ROW Feature_="MainFeature" Component_="System.Xaml.dll"/>
<ROW Feature_="MainFeature" Component_="System.Web.dll"/>
<ROW Feature_="MainFeature" Component_="System.Windows.Forms.dll"/>
<ROW Feature_="MainFeature" Component_="System.Xml.dll"/>
<ROW Feature_="MainFeature" Component_="WindowsBase.dll"/>
<ROW Feature_="MainFeature" Component_="ZitiUpdateService.exe"/>
<ROW Feature_="MainFeature" Component_="System.Configuration.Install.dll"/>
<ROW Feature_="MainFeature" Component_="SHORTCUTDIR"/>
<ROW Feature_="MainFeature" Component_="AI_ExePath"/>
<ROW Feature_="MainFeature" Component_="libgcc_s_seh1.dll"/>
<ROW Feature_="MainFeature" Component_="libuv.dll"/>
<ROW Feature_="MainFeature" Component_="libwinpthread1.dll"/>
<ROW Feature_="MainFeature" Component_="ziti.dll"/>
<ROW Feature_="MainFeature" Component_="zititunnel.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
<ROW Name="ziti.exe" SourcePath="ziti.ico" Index="0"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstExSeqComponent">
<ROW Action="AI_DOWNGRADE" Condition="AI_NEWERPRODUCTFOUND AND (UILevel &lt;&gt; 5)" Sequence="210"/>
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_STORE_LOCATION" Condition="(Not Installed) OR REINSTALL" Sequence="1501"/>
<ROW Action="AI_PREPARE_UPGRADE" Condition="AI_UPGRADE=&quot;No&quot; AND (Not Installed)" Sequence="1397"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="52"/>
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="102" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_DeleteCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="199" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_DeleteRCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="198" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_ExtractCadLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="197" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_FindExeLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="196" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_ExtractLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1549" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_DeleteRLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="1548" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_DeleteLzma" Condition="SETUPEXEDIR=&quot;&quot; AND Installed AND (REMOVE&lt;&gt;&quot;ALL&quot;) AND (AI_INSTALL_MODE&lt;&gt;&quot;Remove&quot;) AND (NOT PATCH)" Sequence="6599" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_AppSearchEx" Sequence="101"/>
<ROW Action="AI_ExtractFiles" Sequence="1399" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Action="AI_DATA_SETTER" Sequence="1398"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiInstallUISequenceComponent">
<ROW Action="AI_RESTORE_LOCATION" Condition="APPDIR=&quot;&quot;" Sequence="749"/>
<ROW Action="AI_ResolveKnownFolders" Sequence="53"/>
<ROW Action="AI_DpiContentScale" Sequence="52"/>
<ROW Action="AI_EnableDebugLog" Sequence="51"/>
<ROW Action="AI_BACKUP_AI_SETUPEXEPATH" Sequence="99"/>
<ROW Action="AI_RESTORE_AI_SETUPEXEPATH" Condition="AI_SETUPEXEPATH_ORIGINAL" Sequence="102"/>
<ROW Action="AI_AppSearchEx" Sequence="101"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiLaunchConditionsComponent">
<ROW Condition="( Version9X OR VersionNT64 )" Description="[ProductName] cannot be installed on [WindowsTypeNTDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT" IsPredefined="true" Builds="DefaultBuild"/>
<ROW Condition="((VersionNT &lt;&gt; 501) AND (VersionNT &lt;&gt; 502))" Description="[ProductName] cannot be installed on [WindowsTypeNT5XDisplay]." DescriptionLocId="AI.LaunchCondition.NoNT5X" IsPredefined="true" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Condition="(VersionNT &lt;&gt; 400)" Description="[ProductName] cannot be installed on [WindowsTypeNT40Display]." DescriptionLocId="AI.LaunchCondition.NoNT40" IsPredefined="true" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Condition="(VersionNT &lt;&gt; 500)" Description="[ProductName] cannot be installed on [WindowsTypeNT50Display]." DescriptionLocId="AI.LaunchCondition.NoNT50" IsPredefined="true" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Condition="SETUPEXEDIR OR (REMOVE=&quot;ALL&quot;)" Description="This package can only be run from a bootstrapper." DescriptionLocId="AI.LaunchCondition.RequireBootstrapper" IsPredefined="true" Builds="DefaultBuild;AnyCPU_Release"/>
<ROW Condition="VersionNT" Description="[ProductName] cannot be installed on [WindowsType9XDisplay]." DescriptionLocId="AI.LaunchCondition.No9X" IsPredefined="true" Builds="DefaultBuild;AnyCPU_Release"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegLocatorComponent">
<ROW Signature_="AI_EXE_PATH_CU" Root="1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
<ROW Signature_="AI_EXE_PATH_LM" Root="2" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Type="2"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiRegsComponent">
<ROW Registry="AI_ExePath" Root="-1" Key="Software\Caphyon\Advanced Installer\LZMA\[ProductCode]\[ProductVersion]" Name="AI_ExePath" Value="[AI_SETUPEXEPATH]" Component_="AI_ExePath"/>
<ROW Registry="Path" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Path" Value="[APPDIR]" Component_="ProductInformation"/>
<ROW Registry="Version" Root="-1" Key="Software\[Manufacturer]\[ProductName]" Name="Version" Value="[ProductVersion]" Component_="ProductInformation"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServCtrlComponent">
<ROW ServiceControl="ZitiUpdateService.exe" Name="Ziti Desktop Monitor Service" Event="160" Wait="0" Component_="ZitiUpdateService.exe"/>
<ROW ServiceControl="zititunnel.exe" Name="ziti" Event="161" Wait="1" Component_="zititunnel.exe"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiServInstComponent">
<ROW ServiceInstall="ZitiUpdateService.exe" Name="Ziti Desktop Monitor Service" DisplayName="Ziti Desktop Monitor Service" ServiceType="16" StartType="2" ErrorControl="1" Component_="ZitiUpdateService.exe" Description="Monitor and update your Ziti Access Services"/>
<ROW ServiceInstall="zititunnel.exe" Name="ziti" DisplayName="Ziti Desktop Edge Service" ServiceType="16" StartType="2" ErrorControl="32769" Component_="zititunnel.exe" Description="Access your Ziti Secured Assets"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiShortsComponent">
<ROW Shortcut="ZitiDesktopEdge.exe" Directory_="SHORTCUTDIR" Name="ZITIDE~1|Ziti Desktop Edge" Component_="ZitiDesktopEdge.exe" Target="[#ZitiDesktopEdge.exe]" Description="Ziti Desktop Edge configuration interface" Hotkey="0" Icon_="ziti.exe" IconIndex="0" ShowCmd="1" WkDir="APPDIR"/>
<ROW Shortcut="ZitiDesktopEdge.exe_1" Directory_="DesktopFolder" Name="ZITIDE~1|Ziti Desktop Edge" Component_="ZitiDesktopEdge.exe" Target="[#ZitiDesktopEdge.exe]" Description="Ziti Desktop Edge configuration interface" Hotkey="0" Icon_="ziti.exe" IconIndex="0" ShowCmd="1" WkDir="APPDIR"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiThemeComponent">
<ATTRIBUTE name="UsedTheme" value="azure"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiUpgradeComponent">
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="0.0.1" VersionMax="[|ProductVersion]" Attributes="257" ActionProperty="OLDPRODUCTS"/>
<ROW UpgradeCode="[|UpgradeCode]" VersionMin="[|ProductVersion]" Attributes="2" ActionProperty="AI_NEWERPRODUCTFOUND"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.PreReqComponent">
<ROW PrereqKey="OpenZitiWintunInstal" DisplayName="OpenZitiWintunInstaller" VersionMin="1.0.0.0" SetupFileUrl="ZitiWintunInstaller/bin/Release/OpenZitiWintunInstaller.msi" Location="0" ExactSize="0" Operator="1" Options="ym" TargetName="OpenZiti\OpenZitiWintunInstaller.msi"/>
<ATTRIBUTE name="PrereqsOrder" value="OpenZitiWintunInstal"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
<ROW SearchKey="UpgradeCode" Prereq="OpenZitiWintunInstal" SearchType="4" SearchString="{1ABDBE15-0F36-4633-BA6F-8A32D8CF4838}" VerMin="1.0.0.0" Order="1" Property="PreReqSearch"/>
</COMPONENT>
</DOCUMENT>
+2 -32
View File
@@ -11,8 +11,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "ZitiWintunInstaller", "ZitiWintunInstaller\ZitiWintunInstaller.wixproj", "{1A5D850F-2E38-4524-8745-29A96FA62683}"
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "OpenZitiWintunInstaller", "OpenZitiWintunInstaller\OpenZitiWintunInstaller.wapproj", "{84DBA1A4-D8E9-4282-94FF-121809B48F1F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -28,47 +26,19 @@ Global
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|Any CPU.ActiveCfg = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|Any CPU.Build.0 = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|ARM.ActiveCfg = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|ARM64.ActiveCfg = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|x64.ActiveCfg = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|x86.ActiveCfg = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Debug|x86.Build.0 = Debug|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|Any CPU.ActiveCfg = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|Any CPU.Build.0 = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|ARM.ActiveCfg = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|ARM64.ActiveCfg = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|x64.ActiveCfg = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|x86.ActiveCfg = Release|x86
{1A5D850F-2E38-4524-8745-29A96FA62683}.Release|x86.Build.0 = Release|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM.ActiveCfg = Debug|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM.Build.0 = Debug|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM.Deploy.0 = Debug|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM64.ActiveCfg = Debug|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM64.Build.0 = Debug|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|ARM64.Deploy.0 = Debug|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x64.ActiveCfg = Debug|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x64.Build.0 = Debug|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x64.Deploy.0 = Debug|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x86.ActiveCfg = Debug|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x86.Build.0 = Debug|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Debug|x86.Deploy.0 = Debug|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|Any CPU.Build.0 = Release|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|Any CPU.Deploy.0 = Release|Any CPU
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM.ActiveCfg = Release|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM.Build.0 = Release|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM.Deploy.0 = Release|ARM
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM64.ActiveCfg = Release|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM64.Build.0 = Release|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|ARM64.Deploy.0 = Release|ARM64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x64.ActiveCfg = Release|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x64.Build.0 = Release|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x64.Deploy.0 = Release|x64
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x86.ActiveCfg = Release|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x86.Build.0 = Release|x86
{84DBA1A4-D8E9-4282-94FF-121809B48F1F}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+16 -4
View File
@@ -1,12 +1,24 @@
These release notes will catalog the changes in the Windows service.
For UI changes or installer changes see [release-notes.md]()
# Release 0.0.30
* What's New
* Continually improved logging
* changed ip from 169.254.0.0/16 to 100.64.0.0/10
* [#120](https://github.com/openziti/desktop-edge-win/issues/120) - Allow UI/client to get and set log level dynamically via ipc
* Bug fixes
* [#116](https://github.com/openziti/desktop-edge-win/issues/116) - Removes information from the config that wasn't needed in config.json
# Release 0.0.29
* What's New
* Continually improved logging
* Add support for 'verbose' logging along with error, warn, info, debug, trace
* Continually improved logging
* Add support for 'verbose' logging along with error, warn, info, debug, trace
* Bug fixes
@@ -17,8 +29,8 @@ For UI changes or installer changes see [release-notes.md]()
* What's New
* Continually improved logging
* Better DNS removal when services are no longer available or when an identity is removed
* Continually improved logging
* Better DNS removal when services are no longer available or when an identity is removed
* Bug fixes
+12
View File
@@ -1,6 +1,18 @@
These release notes will try to cover the changes made for the installer. For changes made
to the Windows service see [release-notes-service.md]()
# Release 1.2.6
* What's New
* 'About' updated to reflect actual service version
* Added ability to set the log level of the service dynamically through Advanced Setttings
*
* Bug fixes
* [#102](https://github.com/openziti/desktop-edge-win/pull/102) - DNS requests with "connection-specific local domain" would not resolve
# Release 1.0.4
* What's New
+1 -1
View File
@@ -34,7 +34,7 @@ echo changing to service folder: %SVC_ROOT_DIR%
cd %SVC_ROOT_DIR%
SET REPO_URL=https://github.com/openziti/ziti-tunneler-sdk-c.git
SET ZITI_TUNNEL_REPO_BRANCH=v0.6.8
SET ZITI_TUNNEL_REPO_BRANCH=v0.6.9
SET TUNNELER_SDK_DIR=%SVC_ROOT_DIR%deps\ziti-tunneler-sdk-c\
SET CGO_CFLAGS=-DNOGDI -I %TUNNELER_SDK_DIR%install\include
SET CGO_LDFLAGS=-L %TUNNELER_SDK_DIR%install\lib
+44 -34
View File
@@ -28,12 +28,12 @@ import (
)
var domains []string // get any connection-specific local domains
const MaxDnsRequests = 64
var reqch = make(chan dnsreq, MaxDnsRequests)
var proxiedRequests = make(chan *proxiedReq, MaxDnsRequests)
var respChan = make(chan []byte, MaxDnsRequests)
var reqch = make(chan dnsreq, 64)
var proxiedRequests = make(chan *proxiedReq, 64)
var respChan = make(chan []byte, 64)
func processDNSquery(packet []byte, p *net.UDPAddr, s *net.UDPConn) {
func processDNSquery(packet []byte, p *net.UDPAddr, s *net.UDPConn, ipVer int) {
q := &dns.Msg{}
if err := q.Unpack(packet); err != nil {
log.Errorf("ERROR", err)
@@ -101,14 +101,15 @@ func processDNSquery(packet []byte, p *net.UDPAddr, s *net.UDPConn) {
}
} else {
// log.Debug("proxying ", dns.Type(query.Qtype), query.Name, q.Id, " for ", p)
proxyDNS(q, p, s)
proxyDNS(q, p, s, ipVer)
}
}
type dnsreq struct {
q []byte
s *net.UDPConn
p *net.UDPAddr
q []byte
s *net.UDPConn
p *net.UDPAddr
ifId int
}
func RunDNSserver(dnsBind []net.IP, ready chan bool) {
@@ -124,7 +125,7 @@ func RunDNSserver(dnsBind []net.IP, ready chan bool) {
ready <- true
for req := range reqch {
processDNSquery(req.q, req.p, req.s)
processDNSquery(req.q, req.p, req.s, req.ifId)
}
}
@@ -136,8 +137,10 @@ func runListener(ip net.IP, port int, reqch chan dnsreq) {
Zone: "",
}
id := 6
network := "udp6"
if len(ip.To4()) == net.IPv4len {
id = 4
network = "udp4"
}
@@ -152,36 +155,39 @@ func runListener(ip net.IP, port int, reqch chan dnsreq) {
if err != nil {
if err == io.EOF || err == os.ErrClosed || strings.HasSuffix(err.Error(), "use of closed network connection") {
log.Warnf("DNS listener closing.")
server.Close()
_ = server.Close()
break
} else {
server.Close()
_ = server.Close()
panic(err)
}
}
reqch <- dnsreq{
q: b[:nb],
s: server,
p: peer,
q: b[:nb],
s: server,
p: peer,
ifId: id,
}
}
}
/*******************************************************************/
type proxiedReq struct {
req *dns.Msg
peer *net.UDPAddr
s *net.UDPConn
exp time.Time
req *dns.Msg
peer *net.UDPAddr
s *net.UDPConn
exp time.Time
ipVer int
}
func proxyDNS(req *dns.Msg, peer *net.UDPAddr, serv *net.UDPConn) {
func proxyDNS(req *dns.Msg, peer *net.UDPAddr, serv *net.UDPConn, ipVer int) {
proxiedRequests <- &proxiedReq{
req: req,
peer: peer,
s: serv,
exp: time.Now().Add(30 * time.Second),
req: req,
peer: peer,
s: serv,
exp: time.Now().Add(30 * time.Second),
ipVer: ipVer,
}
}
@@ -224,14 +230,14 @@ func runDNSproxy(dnsServers []string) {
}
for _, proxy := range dnsUpstreams {
go func() {
go func(p *net.UDPConn) {
resp := make([]byte, 1024) //make a buffer which is reused
for {
n, err := proxy.Read(resp)
n, err := p.Read(resp)
if err != nil {
// something is wrong with the DNS connection panic and let DNS recovery kick in
if err == io.EOF || err == os.ErrClosed || strings.HasSuffix(err.Error(), "use of closed network connection") {
log.Errorf("error receiving from ip: %v. error %v", proxy.RemoteAddr(), err)
log.Errorf("error receiving from ip: %v. error %v", p.RemoteAddr(), err)
return
} else {
log.Warnf("odd error: %v", err)
@@ -240,7 +246,7 @@ func runDNSproxy(dnsServers []string) {
respChan <- resp[:n]
}
}
}()
}(proxy)
}
reqs := make(map[uint32]*proxiedReq)
@@ -255,7 +261,7 @@ func runDNSproxy(dnsServers []string) {
if _, err := proxy.Write(b); err != nil {
//TODO: if this happens -does this mean the next dns server is not available?
proxy.Close() //first thing - close the proxy connection
_ = proxy.Close() //first thing - close the proxy connection
// when this hits - it never seems to recover. throw a panic which will get recovered
// via the defer specified above and try to recreate the connections. this is a heavy
@@ -266,7 +272,7 @@ func runDNSproxy(dnsServers []string) {
proxy.RemoteAddr(),
err)
} else {
log.Tracef("Proxied request sent to %v from %v", proxy.RemoteAddr(), proxy.LocalAddr())
log.Tracef("Proxied request sent to %v from ipv%d listener", proxy.RemoteAddr(), pr.ipVer)
}
}
@@ -277,11 +283,15 @@ func runDNSproxy(dnsServers []string) {
req, found := reqs[id]
if found {
delete(reqs, id)
log.Tracef("proxy resolved %v from %v", reply.Question[0].Name, req.s.RemoteAddr())
req.s.WriteMsgUDP(rep, nil, req.peer)
log.Tracef("proxy resolved request for %v id:%d", reply.Question[0].Name, reply.Id)
n, oobn, err := req.s.WriteMsgUDP(rep, nil, req.peer)
if err != nil {
log.Errorf("an error has occurred while trying to write a udp message. n:%d, oobn:%d, err:%v", n, oobn, err)
}
} else {
log.Tracef("matching request was not found for %s %s",
dns.Type(reply.Question[0].Qtype), reply.Question[0].Name)
// keep this log but leave commented out. When two listeners are enabled (ipv4/v6) this msg will
// just mean some other request was processed successfully and removed the entry from the map
//log.Tracef("matching request was not found for id:%d. %s %s", reply.Id, dns.Type(reply.Question[0].Qtype), reply.Question[0].Name)
}
}
case <-time.After(time.Minute):
+3 -4
View File
@@ -21,6 +21,8 @@ import "C"
import (
"encoding/binary"
"fmt"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/constants"
"net"
"strings"
"sync"
@@ -35,9 +37,6 @@ type DnsManager interface {
GetService(ip net.IP, port uint16) (*CZitiCtx, string, error)
}
const defaultCidr = "169.254.0.0"
const defaultMaskBits = 16
var initOnce = sync.Once{}
var DNS = &dnsImpl{}
@@ -80,7 +79,7 @@ func normalizeDnsName(dnsName string) string {
// assigned to a hostname an error will also be returned indicating why.
func (dns *dnsImpl) RegisterService(svcId string, dnsNameToReg string, port uint16, ctx *CZitiCtx, svcName string) (net.IP, error) {
log.Infof("adding DNS entry for service name %s@%s:%d", svcName, dnsNameToReg, port)
DnsInit(defaultCidr, defaultMaskBits)
DnsInit(constants.Ipv4ip, constants.Ipv4DefaultMask)
dnsName := normalizeDnsName(dnsNameToReg)
key := fmt.Sprint(dnsName, ':', port)
+12 -1
View File
@@ -178,9 +178,20 @@ func serviceCB(ziti_ctx C.ziti_context, service *C.ziti_service, status C.int, t
ZitiContext: ctx,
}
} else {
log.Warnf("could not find a service with id: %s, name: %s", service.id, service.name)
log.Warnf("could not remove service? service not found with id: %s, name: %s in context %d", service.id, service.name, &ctx)
}
} else if status == C.ZITI_OK {
//first thing's first - determine if the service is already in this runtime
//if it is that means this is 'probably' a config change. to make it easy
//just dereg/disconnect the service and then let the rest of this code execute
found, ok := ctx.Services.Load(svcId)
if ok && found != nil {
log.Infof("service with id: %s, name: %s exists. updating service.", service.id, service.name)
DNS.DeregisterService(ctx, name)
ctx.Services.Delete(svcId)
} else {
log.Debugf("service not found with id: %s, name: %s in context %d", svcId, name, &ctx)
}
if C.ZITI_CAN_BIND == ( service.perm_flags & C.ZITI_CAN_BIND ) {
var v1Config C.ziti_server_cfg_v1
+7
View File
@@ -0,0 +1,7 @@
package constants
const(
Ipv4ip = "100.64.0.0"
Ipv4MaxMask = 10
Ipv4DefaultMask = 24
)
+14 -7
View File
@@ -83,13 +83,20 @@ func (id *Identity) Path() string {
}
type TunnelStatus struct {
Active bool
Duration int64
Identities []*Identity
IpInfo *TunIpInfo `json:"IpInfo,omitempty"`
LogLevel string
TunIpv4 string
TunIpv4Mask int
Active bool
Duration int64
Identities []*Identity
IpInfo *TunIpInfo `json:"IpInfo,omitempty"`
LogLevel string
ServiceVersion ServiceVersion
TunIpv4 string
TunIpv4Mask int
}
type ServiceVersion struct {
Version string
Revision string
BuildDate string
}
type ZitiTunnelStatus struct {
+14 -9
View File
@@ -20,21 +20,26 @@ package main
import (
"fmt"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/dto"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/logging"
"golang.org/x/sys/windows/svc/debug"
"golang.org/x/sys/windows/svc/eventlog"
"os"
"strings"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/globals"
"golang.org/x/sys/windows/svc"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/service"
"golang.org/x/sys/windows/svc"
)
var log = globals.Logger()
var log = logging.Logger()
func main() {
l, _ := globals.ParseLevel("info")
globals.InitLogger(l)
service.Version = dto.ServiceVersion{
Version: Version,
Revision: Revision,
BuildDate: BuildDate,
}
logging.InitLogger("info")
//if len(os.Args) < 2 {
// // if no args supplied - expect to run as service
@@ -52,9 +57,9 @@ func main() {
var err error
if hasArgs {
globals.Elog = debug.New(service.SvcName)
logging.Elog = debug.New(service.SvcName)
} else {
globals.Elog, err = eventlog.Open(service.SvcName)
logging.Elog, err = eventlog.Open(service.SvcName)
if err != nil {
return
}
@@ -69,9 +74,9 @@ func main() {
usage("no command specified")
}
defer globals.Elog.Close()
defer logging.Elog.Close()
elog := globals.Elog
elog := logging.Elog
cmd := strings.ToLower(os.Args[1])
switch cmd {
+33 -19
View File
@@ -23,14 +23,16 @@ import (
"encoding/json"
"fmt"
"github.com/Microsoft/go-winio"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/constants"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/idutil"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/logging"
"github.com/openziti/foundation/identity/identity"
idcfg "github.com/openziti/sdk-golang/ziti/config"
"github.com/openziti/sdk-golang/ziti/enroll"
"github.com/openziti/desktop-edge-win/service/cziti"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/config"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/dto"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/globals"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/idutil"
"github.com/sirupsen/logrus"
"golang.org/x/sys/windows/svc"
"golang.zx2c4.com/wireguard/tun"
"io"
@@ -63,10 +65,11 @@ func SubMain(ops chan string, changes chan<- svc.Status) error {
rts.LoadConfig()
l := rts.state.LogLevel
logLevel, czitiLevel := globals.ParseLevel(l)
globals.InitLogger(logLevel)
_, czitiLevel := logging.ParseLevel(l)
_ = globals.Elog.Info(InformationEvent, SvcName+" starting. log file located at "+config.LogFile())
logging.InitLogger(l )
_ = logging.Elog.Info(InformationEvent, SvcName+" starting. log file located at "+config.LogFile())
// create a channel for notifying any connections that they are to be interrupted
interrupt = make(chan struct{}, 8)
@@ -99,7 +102,7 @@ func SubMain(ops chan string, changes chan<- svc.Status) error {
// notify the service is running
changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
_ = globals.Elog.Info(InformationEvent, SvcName+" status set to running")
_ = logging.Elog.Info(InformationEvent, SvcName+" status set to running")
log.Info(SvcName + " status set to running. starting cancel loop")
waitForStopRequest(ops)
@@ -244,12 +247,12 @@ func initialize(ipv4 string, ipv4mask int) error {
func setTunInfo(s *dto.TunnelStatus, ipv4 string, ipv4mask int) {
if strings.TrimSpace(ipv4) == "" {
log.Infof("ip not provided using default: %v", ipv4)
ipv4 = Ipv4ip
ipv4 = constants.Ipv4ip
rts.UpdateIpv4(ipv4)
}
if ipv4mask < 8 || ipv4mask > 24 {
log.Warnf("provided mask is invalid: %d. using default value: %d", ipv4mask, Ipv4mask)
ipv4mask = Ipv4mask
if ipv4mask < 8 || ipv4mask > constants.Ipv4MaxMask {
log.Warnf("provided mask is invalid: %d. using default value: %d", ipv4mask, constants.Ipv4DefaultMask)
ipv4mask = constants.Ipv4DefaultMask
rts.UpdateIpv4Mask(ipv4mask)
}
_, ipnet, err := net.ParseCIDR(fmt.Sprintf("%s/%d", ipv4, ipv4mask))
@@ -294,7 +297,7 @@ func accept(p net.Listener, serveFunction func(net.Conn), debug string) {
c, err := p.Accept()
if err != nil {
if err != winio.ErrPipeListenerClosed {
log.Errorf("unexpected error while accepting a connection. exiting loop. %v", err)
log.Errorf("%v unexpected error while accepting a connection. exiting loop. %v", debug, err)
}
return
}
@@ -331,7 +334,7 @@ func serveIpc(conn net.Conn) {
select {
case <-interrupt:
log.Info("request to interrupt read loop received")
conn.Close()
_ = conn.Close()
log.Info("read loop interrupted")
case <-done:
log.Debug("loop finished normally")
@@ -406,6 +409,8 @@ func serveIpc(conn net.Conn) {
onOff := cmd.Payload["OnOff"].(bool)
fingerprint := cmd.Payload["Fingerprint"].(string)
toggleIdentity(enc, fingerprint, onOff)
case "SetLogLevel":
setLogLevel(enc, cmd.Payload["Level"].(string))
case "Debug":
dbg()
respond(enc, dto.Response{
@@ -426,6 +431,15 @@ func serveIpc(conn net.Conn) {
}
}
func setLogLevel(out *json.Encoder, level string) {
goLevel, cLevel := logging.ParseLevel(level)
logrus.Infof("Setting logger levels to %s", goLevel)
logrus.SetLevel(goLevel)
cziti.SetLogLevel(cLevel)
rts.state.LogLevel = goLevel.String()
respond(out, dto.Response{Message: "log level set", Code: SUCCESS, Error: "", Payload: nil})
}
func serveLogs(conn net.Conn) {
log.Debug("accepted a logs connection, writing logs to pipe")
w := bufio.NewWriter(conn)
@@ -590,7 +604,7 @@ func toggleIdentity(out *json.Encoder, fingerprint string, onOff bool) {
if onOff {
connectIdentity(id)
} else {
disconnectIdentity(id)
_ = disconnectIdentity(id)
}
respond(out, dto.Response{Message: "identity toggled", Code: SUCCESS, Error: "", Payload: idutil.Clean(*id)})
@@ -836,7 +850,7 @@ func acceptServices() {
switch c.Operation {
case cziti.ADDED:
//add the service to the identity
svc := dto.Service{
s := dto.Service{
Name: c.Service.Name,
InterceptHost: c.Service.InterceptHost,
InterceptPort: c.Service.InterceptPort,
@@ -844,22 +858,22 @@ func acceptServices() {
AssignedIP: c.Service.AssignedIP,
OwnsIntercept: c.Service.OwnsIntercept,
}
id.Services = append(id.Services, &svc)
id.Services = append(id.Services, &s)
events.broadcast <- dto.ServiceEvent{
ActionEvent: SERVICE_ADDED,
Fingerprint: id.FingerPrint,
Service: svc,
Service: s,
}
log.Debug("dispatched added service change event")
case cziti.REMOVED:
for idx, svc := range id.Services {
if svc.Name == c.Service.Name {
for idx, s := range id.Services {
if s.Name == c.Service.Name {
id.Services = append(id.Services[:idx], id.Services[idx+1:]...)
events.broadcast <- dto.ServiceEvent{
ActionEvent: SERVICE_REMOVED,
Fingerprint: id.FingerPrint,
Service: *svc,
Service: *s,
}
log.Debug(" dispatched remove service change event")
}
+4 -6
View File
@@ -18,13 +18,13 @@
package service
import (
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/dto"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/logging"
"golang.org/x/sys/windows/svc"
"sync"
"time"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/dto"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/globals"
)
var Version dto.ServiceVersion
var pipeBase = `\\.\pipe\NetFoundry\tunneler\`
var activeIds = make(map[string]*dto.Identity)
@@ -39,7 +39,7 @@ var eventsConnections int
var Debug bool
var TunStarted time.Time
var log = globals.Logger()
var log = logging.Logger()
var events = newTopic()
@@ -87,8 +87,6 @@ const (
NF_GROUP_NAME = "NetFoundry Tunneler Users"
TunName = "ZitiTUN"
Ipv4ip = "169.254.1.1"
Ipv4mask = 24
Ipv4dns = "127.0.0.1" // use lo -- don't pass DNS queries through tunneler SDK
// IPv6 CIDR fe80:6e66:7a69:7469::/64
+12 -13
View File
@@ -21,12 +21,11 @@ package service
import (
"fmt"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/logging"
"golang.org/x/sys/windows/svc"
"golang.org/x/sys/windows/svc/debug"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/globals"
)
type zitiService struct{}
func (m *zitiService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) {
@@ -52,26 +51,26 @@ loop:
switch c.Cmd {
case svc.Interrogate:
changes <- c.CurrentStatus
_ = globals.Elog.Info(InterrogateEvent, "interrogate request received")
_ = logging.Elog.Info(InterrogateEvent, "interrogate request received")
changes <- c.CurrentStatus
case svc.Stop:
_ = globals.Elog.Info(StopEvent, "issuing stop")
_ = logging.Elog.Info(StopEvent, "issuing stop")
control <- "stop"
_ = globals.Elog.Info(StopEvent, "stop issued")
_ = logging.Elog.Info(StopEvent, "stop issued")
break loop
case svc.Shutdown:
_ = globals.Elog.Info(ShutdownEvent, "issuing shutdown")
_ = logging.Elog.Info(ShutdownEvent, "issuing shutdown")
control <- "stop"
_ = globals.Elog.Info(ShutdownEvent, "shutdown issued")
_ = logging.Elog.Info(ShutdownEvent, "shutdown issued")
break loop
case svc.Pause:
changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted}
_ = globals.Elog.Info(PauseEvent, "request to pause service received. todo - unimplemented")
_ = logging.Elog.Info(PauseEvent, "request to pause service received. todo - unimplemented")
case svc.Continue:
changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
_ = globals.Elog.Info(ContinueEvent, "request to continue service received. todo - unimplemented")
_ = logging.Elog.Info(ContinueEvent, "request to continue service received. todo - unimplemented")
default:
_ = globals.Elog.Error(1, fmt.Sprintf("unexpected control request #%d", c))
_ = logging.Elog.Error(1, fmt.Sprintf("unexpected control request #%d", c))
}
}
}
@@ -86,7 +85,7 @@ loop:
}
func RunService(isDebug bool) {
_ = globals.Elog.Info(InformationEvent, fmt.Sprintf("starting %s service", SvcStartName))
_ = logging.Elog.Info(InformationEvent, fmt.Sprintf("starting %s service", SvcStartName))
run := svc.Run
if isDebug {
log.Info("debug specified. using debug.run")
@@ -95,8 +94,8 @@ func RunService(isDebug bool) {
err := run(SvcStartName, &zitiService{})
if err != nil {
_ = globals.Elog.Error(ErrorEvent, fmt.Sprintf("%s service failed: %v", SvcStartName, err))
_ = logging.Elog.Error(ErrorEvent, fmt.Sprintf("%s service failed: %v", SvcStartName, err))
return
}
_ = globals.Elog.Info(StopEvent, fmt.Sprintf("%s service stopped", SvcStartName))
_ = logging.Elog.Info(StopEvent, fmt.Sprintf("%s service stopped", SvcStartName))
}
+15 -10
View File
@@ -23,8 +23,9 @@ import (
"fmt"
"github.com/openziti/desktop-edge-win/service/cziti"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/config"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/constants"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/dto"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/idutil"
"github.com/openziti/desktop-edge-win/service/ziti-tunnel/util/idutil"
"golang.org/x/sys/windows/registry"
"golang.zx2c4.com/wireguard/tun"
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
@@ -77,7 +78,7 @@ func (t *RuntimeState) SaveState() {
w := bufio.NewWriter(bufio.NewWriter(cfg))
enc := json.NewEncoder(w)
enc.SetIndent("", " ")
_ = enc.Encode(t.state)
_ = enc.Encode(t.ToStatus())
_ = w.Flush()
err = cfg.Close()
@@ -100,10 +101,14 @@ func (t *RuntimeState) ToStatus() dto.TunnelStatus {
}
clean := dto.TunnelStatus{
Active: t.state.Active,
Duration: uptime,
Identities: make([]*dto.Identity, idCount),
IpInfo: t.state.IpInfo,
Active: t.state.Active,
Duration: uptime,
Identities: make([]*dto.Identity, idCount),
IpInfo: t.state.IpInfo,
LogLevel: t.state.LogLevel,
ServiceVersion: Version,
TunIpv4: t.state.TunIpv4,
TunIpv4Mask: t.state.TunIpv4Mask,
}
for i, id := range t.state.Identities {
@@ -143,11 +148,11 @@ func (t *RuntimeState) CreateTun(ipv4 string, ipv4mask int) error {
if strings.TrimSpace(ipv4) == "" {
log.Infof("ip not provided using default: %v", ipv4)
ipv4 = Ipv4ip
ipv4 = constants.Ipv4ip
}
if ipv4mask < 8 || ipv4mask > 24 {
log.Warnf("provided mask is invalid: %d. using default value: %d", ipv4mask, Ipv4mask)
ipv4mask = Ipv4mask
if ipv4mask < 8 || ipv4mask > constants.Ipv4MaxMask {
log.Warnf("provided mask is invalid: %d. using default value: %d", ipv4mask, constants.Ipv4DefaultMask)
ipv4mask = constants.Ipv4DefaultMask
rts.UpdateIpv4Mask(ipv4mask)
}
ip, ipnet, err := net.ParseCIDR(fmt.Sprintf("%s/%d", ipv4, ipv4mask))
@@ -1,4 +1,4 @@
package ipchanges
package util
import (
"github.com/michaelquigley/pfxlog"
@@ -15,14 +15,14 @@
*
*/
package globals
package logging
import (
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
"github.com/michaelquigley/pfxlog"
"github.com/openziti/desktop-edge-win/service/cziti"
"github.com/sirupsen/logrus"
"golang.org/x/sys/windows/svc/debug"
"golang.org/x/sys/windows/svc/eventlog"
"io"
"os"
"strings"
@@ -43,8 +43,9 @@ func Logger() *logrus.Entry {
var loggerInitialized = false
func InitLogger(logLevel logrus.Level) {
logrus.SetLevel(logLevel)
func InitLogger(level string) {
l, _ := ParseLevel(level)
logrus.SetLevel(l)
rl, _ := rotatelogs.New(config.LogFile() + ".%Y%m%d%H%M.log",
rotatelogs.WithRotationTime(24 * time.Hour),
@@ -65,6 +66,12 @@ func InitLogger(logLevel logrus.Level) {
}
}
func SetLogLevel(goLevel logrus.Level, cLevel int) {
logrus.Infof("Setting logger levels to %s", goLevel)
logrus.SetLevel(goLevel)
cziti.SetLogLevel(cLevel)
}
func ParseLevel(lvl string) (logrus.Level, int) {
switch strings.ToLower(lvl) {
case "panic":
@@ -87,16 +94,4 @@ func ParseLevel(lvl string) (logrus.Level, int) {
logrus.Warnf("level not recognized: [%s]. Using Info", lvl)
return logrus.InfoLevel, 3
}
}
func InitEventLog(svcName string, interactive bool) {
var err error
if !interactive {
Elog = debug.New(svcName)
} else {
Elog, err = eventlog.Open(svcName)
if err != nil {
return
}
}
}
}
+1 -1
View File
@@ -1 +1 @@
0.0.29
0.0.30
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB