v1.1.0
This commit is contained in:
parent
f0e08f50b0
commit
e57ec23521
|
@ -12,6 +12,8 @@
|
|||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<PublishUrl>publish\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
|
@ -43,7 +45,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;NET35</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
|
@ -69,8 +71,21 @@
|
|||
<TargetZone>LocalIntranet</TargetZone>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NStandard, Version=0.6.7.1, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NStandard.0.6.7.1\lib\net35\NStandard.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SQLib, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SQLib.0.8.6\lib\net35\SQLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SQLib.Sqlite, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SQLib.Sqlite.0.8.6\lib\net35\SQLib.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net20\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
|
@ -114,6 +129,7 @@
|
|||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PortProxyGUI.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
|
@ -128,7 +144,9 @@
|
|||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="app.config" />
|
||||
<None Include="app.manifest" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
|
@ -151,4 +169,11 @@
|
|||
</ItemGroup>
|
||||
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>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}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net20\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
|
@ -30,13 +30,17 @@
|
|||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||
this.listView1 = new System.Windows.Forms.ListView();
|
||||
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -44,27 +48,31 @@
|
|||
this.toolStripMenuItem_Refresh = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listView1
|
||||
// listViewProxies
|
||||
//
|
||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.columnHeader3,
|
||||
this.columnHeader4,
|
||||
this.columnHeader5});
|
||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listView1, "listView1");
|
||||
this.listView1.FullRowSelect = true;
|
||||
this.listView1.HideSelection = false;
|
||||
this.listView1.Name = "listView1";
|
||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
||||
this.listView1.View = System.Windows.Forms.View.Details;
|
||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
this.columnHeader5,
|
||||
this.columnHeader6});
|
||||
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||
this.listViewProxies.FullRowSelect = true;
|
||||
this.listViewProxies.HideSelection = false;
|
||||
this.listViewProxies.Name = "listViewProxies";
|
||||
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
|
@ -86,20 +94,42 @@
|
|||
//
|
||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||
//
|
||||
// columnHeader6
|
||||
//
|
||||
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripMenuItem_Enable,
|
||||
this.toolStripMenuItem_Disable,
|
||||
this.toolStripSeparator3,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_New,
|
||||
this.toolStripMenuItem_Modify,
|
||||
this.toolStripMenuItem_Delete,
|
||||
this.toolStripSeparator1,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_About});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1");
|
||||
this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick);
|
||||
//
|
||||
// toolStripMenuItem_Enable
|
||||
//
|
||||
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||
//
|
||||
// toolStripMenuItem_Disable
|
||||
//
|
||||
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||
//
|
||||
// toolStripMenuItem_New
|
||||
//
|
||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||
|
@ -135,13 +165,21 @@
|
|||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||
//
|
||||
// imageListProxies
|
||||
//
|
||||
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||
//
|
||||
// PortProxyGUI
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.listView1);
|
||||
this.Controls.Add(this.listViewProxies);
|
||||
this.Name = "PortProxyGUI";
|
||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
|
@ -149,20 +187,25 @@
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listView1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ListView listViewProxies;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ImageList imageListProxies;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.ListViewItem;
|
||||
|
||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
|||
{
|
||||
InitializeComponent();
|
||||
lvwColumnSorter = new ListViewColumnSorter();
|
||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
||||
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||
{
|
||||
RefreshProxyList();
|
||||
}
|
||||
|
||||
private void EnableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 1;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DisableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 0;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteSelectedProxies()
|
||||
{
|
||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
||||
}
|
||||
RefreshProxyList();
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
DisableSelectedProxies();
|
||||
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||
}
|
||||
|
||||
private void SetProxyForUpdate(SetProxyForm form)
|
||||
{
|
||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var connectTo = subItems[3].Text;
|
||||
var connectPort = subItems[4].Text;
|
||||
form.UseUpdateMode(type, listenOn, listenPort, connectTo, connectPort);
|
||||
}
|
||||
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||
}
|
||||
|
||||
public void RefreshProxyList()
|
||||
{
|
||||
var output = CmdRunner.Execute("netsh interface portproxy show all");
|
||||
var types = new[]
|
||||
{
|
||||
new ProxyType("ipv4", "ipv4"),
|
||||
new ProxyType("ipv4", "ipv6"),
|
||||
new ProxyType("ipv6", "ipv4"),
|
||||
new ProxyType("ipv6", "ipv6"),
|
||||
};
|
||||
|
||||
var proxies = types.SelectMany(type =>
|
||||
{
|
||||
var typeProxies = output
|
||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
||||
.Select(line =>
|
||||
{
|
||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
||||
return new PortProxy
|
||||
{
|
||||
Type = type.Type,
|
||||
ListenOn = parts[1].FirstOrDefault(),
|
||||
ListenPort = parts[2].FirstOrDefault(),
|
||||
ConnectTo = parts[3].FirstOrDefault(),
|
||||
ConnectPort = parts[4].FirstOrDefault(),
|
||||
};
|
||||
});
|
||||
return typeProxies ?? new PortProxy[0];
|
||||
});
|
||||
|
||||
listView1.Items.Clear();
|
||||
var proxies = CmdUtil.GetProxies();
|
||||
var rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var proxy in proxies)
|
||||
{
|
||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
||||
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||
proxy.Id = matchedRule?.Id;
|
||||
}
|
||||
|
||||
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||
|
||||
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||
|
||||
listViewProxies.Items.Clear();
|
||||
rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||
{
|
||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
||||
}));
|
||||
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||
});
|
||||
listViewProxies.Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ContextMenuStrip _sender)
|
||||
{
|
||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
if (selected is null || !selected.Enabled) return;
|
||||
|
||||
switch (selected.Text)
|
||||
switch (selected)
|
||||
{
|
||||
case string s when s == toolStripMenuItem_New.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForm.UseNormalMode();
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Modify.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForUpdate(SetProxyForm);
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||
RefreshProxyList();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_About.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||
if (AboutForm == null)
|
||||
{
|
||||
AboutForm = new About(this);
|
||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ListView _sender)
|
||||
{
|
||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
||||
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||
|
||||
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
|||
}
|
||||
|
||||
// Perform the sort with these new sort options.
|
||||
listView1.Sort();
|
||||
listViewProxies.Sort();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,124 +112,196 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="columnHeader1.Text" xml:space="preserve">
|
||||
<value>Type</value>
|
||||
<value />
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="columnHeader2.Text" xml:space="preserve">
|
||||
<value>Listen on</value>
|
||||
<value>Type</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
<value>64</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
<value>Listen on</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>181, 148</value>
|
||||
<value>155, 176</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<data name="listViewProxies.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
<data name="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
||||
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>182, 17</value>
|
||||
</metadata>
|
||||
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||
</value>
|
||||
</data>
|
||||
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>listView1.Name" xml:space="preserve">
|
||||
<value>listView1</value>
|
||||
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||
<value>listViewProxies</value>
|
||||
</data>
|
||||
<data name=">>listView1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>listView1.Parent" xml:space="preserve">
|
||||
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
||||
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||
<value>Enable (&E)</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||
<value>Disable (&I)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New (&N) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify (&M) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete (&D)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh (&F)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
@ -2402,78 +2474,108 @@
|
|||
<value>columnHeader1</value>
|
||||
</data>
|
||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||
<value>columnHeader2</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||
<value>columnHeader3</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||
<value>columnHeader4</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||
<value>columnHeader5</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||
<value>columnHeader6</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Enable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Disable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator3</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_New</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Modify</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Delete</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator1</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Refresh</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator2</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_About</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||
<value>imageListProxies</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PortProxyGUI</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,20 @@
|
|||
using System;
|
||||
using PortProxyGUI.Data;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace PortProxyGUI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
SqliteDbScope.Migrate();
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new PortProxyGUI());
|
||||
|
|
|
@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
|||
// 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.5.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.5.0")]
|
||||
[assembly: AssemblyVersion("1.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
|||
public partial class SetProxyForm : Form
|
||||
{
|
||||
public readonly PortProxyGUI PortProxyGUI;
|
||||
public bool UpdateMode { get; private set; }
|
||||
private string AutoTypeString { get; }
|
||||
private ListViewItem _updateLiveViewItem;
|
||||
|
||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||
{
|
||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = "";
|
||||
textBox_connectTo.Text = "";
|
||||
textBox_connectPort.Text = "";
|
||||
UpdateMode = false;
|
||||
}
|
||||
|
||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
_updateLiveViewItem = item;
|
||||
comboBox_type.Enabled = false;
|
||||
textBox_listenOn.Enabled = false;
|
||||
textBox_listenPort.Enabled = false;
|
||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = listenPort;
|
||||
textBox_connectTo.Text = connectTo;
|
||||
textBox_connectPort.Text = connectPort;
|
||||
UpdateMode = true;
|
||||
}
|
||||
|
||||
private void SetPortProxy(string type, string action, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}");
|
||||
Invoke((Action)(() => PortProxyGUI.RefreshProxyList()));
|
||||
}
|
||||
|
||||
private bool IsIPv4(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
||||
}
|
||||
private bool IsIPv6(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
|||
return;
|
||||
}
|
||||
|
||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
||||
if (_updateLiveViewItem != null)
|
||||
{
|
||||
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||
rule.ConnectTo = connectTo;
|
||||
rule.ConnectPort = _connectPort;
|
||||
Program.SqliteDbScope.Update(rule);
|
||||
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
|
||||
_updateLiveViewItem.ImageIndex = 1;
|
||||
var subItems = _updateLiveViewItem.SubItems;
|
||||
subItems[1].Text = type;
|
||||
subItems[2].Text = listenOn;
|
||||
subItems[3].Text = _listenPort.ToString();
|
||||
subItems[4].Text = connectTo;
|
||||
subItems[5].Text = _connectPort.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
PortProxyGUI.RefreshProxyList();
|
||||
}
|
||||
|
||||
Close();
|
||||
}
|
||||
|
||||
|
|
|
@ -112,13 +112,13 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>侦听地址</value>
|
||||
<value>监听地址</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
|
@ -291,18 +291,18 @@
|
|||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 95</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NStandard" version="0.6.7.1" targetFramework="net35" />
|
||||
<package id="SQLib" version="0.8.6" targetFramework="net35" />
|
||||
<package id="SQLib.Sqlite" version="0.8.6" targetFramework="net35" />
|
||||
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net35" />
|
||||
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net35" />
|
||||
</packages>
|
|
@ -28,6 +28,8 @@
|
|||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
|
@ -45,7 +47,7 @@
|
|||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;NET45</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
|
@ -72,8 +74,23 @@
|
|||
<TargetZone>LocalIntranet</TargetZone>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NStandard, Version=0.6.7.1, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\NStandard.0.6.7.1\lib\net45\NStandard.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SQLib, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SQLib.0.8.6\lib\net45\SQLib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="SQLib.Sqlite, Version=0.8.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\SQLib.Sqlite.0.8.6\lib\net45\SQLib.Sqlite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.SQLite, Version=1.0.113.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\lib\net45\System.Data.SQLite.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="System.Data" />
|
||||
|
@ -109,6 +126,9 @@
|
|||
<EmbeddedResource Include="About.zh-CN.resx">
|
||||
<DependentUpon>About.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="SetProxyForm.resx">
|
||||
<DependentUpon>SetProxyForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
@ -117,9 +137,7 @@
|
|||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PortProxyGUI.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PortProxyGUI.zh-CN.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
|
@ -133,6 +151,7 @@
|
|||
</Compile>
|
||||
<None Include="app.config" />
|
||||
<None Include="app.manifest" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
|
@ -155,4 +174,11 @@
|
|||
</ItemGroup>
|
||||
<Import Project="..\PortProxyGUI.Shared\PortProxyGUI.Shared.projitems" Label="Shared" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>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}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets" Condition="Exists('..\packages\Stub.System.Data.SQLite.Core.NetFramework.1.0.113.3\build\net45\Stub.System.Data.SQLite.Core.NetFramework.targets')" />
|
||||
</Project>
|
|
@ -30,13 +30,17 @@
|
|||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||
this.listView1 = new System.Windows.Forms.ListView();
|
||||
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -44,27 +48,31 @@
|
|||
this.toolStripMenuItem_Refresh = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listView1
|
||||
// listViewProxies
|
||||
//
|
||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.columnHeader3,
|
||||
this.columnHeader4,
|
||||
this.columnHeader5});
|
||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listView1, "listView1");
|
||||
this.listView1.FullRowSelect = true;
|
||||
this.listView1.HideSelection = false;
|
||||
this.listView1.Name = "listView1";
|
||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
||||
this.listView1.View = System.Windows.Forms.View.Details;
|
||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
this.columnHeader5,
|
||||
this.columnHeader6});
|
||||
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||
this.listViewProxies.FullRowSelect = true;
|
||||
this.listViewProxies.HideSelection = false;
|
||||
this.listViewProxies.Name = "listViewProxies";
|
||||
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
|
@ -86,20 +94,42 @@
|
|||
//
|
||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||
//
|
||||
// columnHeader6
|
||||
//
|
||||
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripMenuItem_Enable,
|
||||
this.toolStripMenuItem_Disable,
|
||||
this.toolStripSeparator3,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_New,
|
||||
this.toolStripMenuItem_Modify,
|
||||
this.toolStripMenuItem_Delete,
|
||||
this.toolStripSeparator1,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_About});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1");
|
||||
this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick);
|
||||
//
|
||||
// toolStripMenuItem_Enable
|
||||
//
|
||||
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||
//
|
||||
// toolStripMenuItem_Disable
|
||||
//
|
||||
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||
//
|
||||
// toolStripMenuItem_New
|
||||
//
|
||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||
|
@ -135,13 +165,21 @@
|
|||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||
//
|
||||
// imageListProxies
|
||||
//
|
||||
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||
//
|
||||
// PortProxyGUI
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.listView1);
|
||||
this.Controls.Add(this.listViewProxies);
|
||||
this.Name = "PortProxyGUI";
|
||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
|
@ -149,20 +187,25 @@
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listView1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ListView listViewProxies;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ImageList imageListProxies;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.ListViewItem;
|
||||
|
||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
|||
{
|
||||
InitializeComponent();
|
||||
lvwColumnSorter = new ListViewColumnSorter();
|
||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
||||
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||
{
|
||||
RefreshProxyList();
|
||||
}
|
||||
|
||||
private void EnableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 1;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DisableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 0;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteSelectedProxies()
|
||||
{
|
||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
||||
}
|
||||
RefreshProxyList();
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
DisableSelectedProxies();
|
||||
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||
}
|
||||
|
||||
private void SetProxyForUpdate(SetProxyForm form)
|
||||
{
|
||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var connectTo = subItems[3].Text;
|
||||
var connectPort = subItems[4].Text;
|
||||
form.UseUpdateMode(type, listenOn, listenPort, connectTo, connectPort);
|
||||
}
|
||||
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||
}
|
||||
|
||||
public void RefreshProxyList()
|
||||
{
|
||||
var output = CmdRunner.Execute("netsh interface portproxy show all");
|
||||
var types = new[]
|
||||
{
|
||||
new ProxyType("ipv4", "ipv4"),
|
||||
new ProxyType("ipv4", "ipv6"),
|
||||
new ProxyType("ipv6", "ipv4"),
|
||||
new ProxyType("ipv6", "ipv6"),
|
||||
};
|
||||
|
||||
var proxies = types.SelectMany(type =>
|
||||
{
|
||||
var typeProxies = output
|
||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
||||
.Select(line =>
|
||||
{
|
||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
||||
return new PortProxy
|
||||
{
|
||||
Type = type.Type,
|
||||
ListenOn = parts[1].FirstOrDefault(),
|
||||
ListenPort = parts[2].FirstOrDefault(),
|
||||
ConnectTo = parts[3].FirstOrDefault(),
|
||||
ConnectPort = parts[4].FirstOrDefault(),
|
||||
};
|
||||
});
|
||||
return typeProxies ?? new PortProxy[0];
|
||||
});
|
||||
|
||||
listView1.Items.Clear();
|
||||
var proxies = CmdUtil.GetProxies();
|
||||
var rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var proxy in proxies)
|
||||
{
|
||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
||||
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||
proxy.Id = matchedRule?.Id;
|
||||
}
|
||||
|
||||
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||
|
||||
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||
|
||||
listViewProxies.Items.Clear();
|
||||
rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||
{
|
||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
||||
}));
|
||||
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||
});
|
||||
listViewProxies.Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ContextMenuStrip _sender)
|
||||
{
|
||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
if (selected is null || !selected.Enabled) return;
|
||||
|
||||
switch (selected.Text)
|
||||
switch (selected)
|
||||
{
|
||||
case string s when s == toolStripMenuItem_New.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForm.UseNormalMode();
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Modify.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForUpdate(SetProxyForm);
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||
RefreshProxyList();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_About.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||
if (AboutForm == null)
|
||||
{
|
||||
AboutForm = new About(this);
|
||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ListView _sender)
|
||||
{
|
||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
||||
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||
|
||||
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
|||
}
|
||||
|
||||
// Perform the sort with these new sort options.
|
||||
listView1.Sort();
|
||||
listViewProxies.Sort();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,124 +112,196 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="columnHeader1.Text" xml:space="preserve">
|
||||
<value>Type</value>
|
||||
<value />
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="columnHeader2.Text" xml:space="preserve">
|
||||
<value>Listen on</value>
|
||||
<value>Type</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
<value>64</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
<value>Listen on</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>181, 148</value>
|
||||
<value>155, 176</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<data name="listViewProxies.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
<data name="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
||||
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>182, 17</value>
|
||||
</metadata>
|
||||
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||
</value>
|
||||
</data>
|
||||
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>listView1.Name" xml:space="preserve">
|
||||
<value>listView1</value>
|
||||
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||
<value>listViewProxies</value>
|
||||
</data>
|
||||
<data name=">>listView1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>listView1.Parent" xml:space="preserve">
|
||||
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
||||
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||
<value>Enable (&E)</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||
<value>Disable (&I)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New (&N) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify (&M) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete (&D)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh (&F)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
@ -2402,78 +2474,108 @@
|
|||
<value>columnHeader1</value>
|
||||
</data>
|
||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||
<value>columnHeader2</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||
<value>columnHeader3</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||
<value>columnHeader4</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||
<value>columnHeader5</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||
<value>columnHeader6</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Enable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Disable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator3</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_New</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Modify</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Delete</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator1</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Refresh</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator2</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_About</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||
<value>imageListProxies</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PortProxyGUI</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,16 +1,20 @@
|
|||
using System;
|
||||
using PortProxyGUI.Data;
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace PortProxyGUI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
SqliteDbScope.Migrate();
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new PortProxyGUI());
|
||||
|
|
|
@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
|||
// 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.5.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.5.0")]
|
||||
[assembly: AssemblyVersion("1.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
|||
public partial class SetProxyForm : Form
|
||||
{
|
||||
public readonly PortProxyGUI PortProxyGUI;
|
||||
public bool UpdateMode { get; private set; }
|
||||
private string AutoTypeString { get; }
|
||||
private ListViewItem _updateLiveViewItem;
|
||||
|
||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||
{
|
||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = "";
|
||||
textBox_connectTo.Text = "";
|
||||
textBox_connectPort.Text = "";
|
||||
UpdateMode = false;
|
||||
}
|
||||
|
||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
_updateLiveViewItem = item;
|
||||
comboBox_type.Enabled = false;
|
||||
textBox_listenOn.Enabled = false;
|
||||
textBox_listenPort.Enabled = false;
|
||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = listenPort;
|
||||
textBox_connectTo.Text = connectTo;
|
||||
textBox_connectPort.Text = connectPort;
|
||||
UpdateMode = true;
|
||||
}
|
||||
|
||||
private void SetPortProxy(string type, string action, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}");
|
||||
Invoke((Action)(() => PortProxyGUI.RefreshProxyList()));
|
||||
}
|
||||
|
||||
private bool IsIPv4(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
||||
}
|
||||
private bool IsIPv6(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
|||
return;
|
||||
}
|
||||
|
||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
||||
if (_updateLiveViewItem != null)
|
||||
{
|
||||
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||
rule.ConnectTo = connectTo;
|
||||
rule.ConnectPort = _connectPort;
|
||||
Program.SqliteDbScope.Update(rule);
|
||||
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
|
||||
_updateLiveViewItem.ImageIndex = 1;
|
||||
var subItems = _updateLiveViewItem.SubItems;
|
||||
subItems[1].Text = type;
|
||||
subItems[2].Text = listenOn;
|
||||
subItems[3].Text = _listenPort.ToString();
|
||||
subItems[4].Text = connectTo;
|
||||
subItems[5].Text = _connectPort.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
PortProxyGUI.RefreshProxyList();
|
||||
}
|
||||
|
||||
Close();
|
||||
}
|
||||
|
||||
|
|
|
@ -112,13 +112,13 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>侦听地址</value>
|
||||
<value>监听地址</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
|
@ -291,18 +291,18 @@
|
|||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 95</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
|
|
|
@ -1,3 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>
|
||||
<configSections>
|
||||
|
||||
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||
</startup>
|
||||
<entityFramework>
|
||||
<providers>
|
||||
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
|
||||
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
|
||||
</providers>
|
||||
</entityFramework>
|
||||
|
||||
</configuration>
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="NStandard" version="0.6.7.1" targetFramework="net45" />
|
||||
<package id="SQLib" version="0.8.6" targetFramework="net45" />
|
||||
<package id="SQLib.Sqlite" version="0.8.6" targetFramework="net45" />
|
||||
<package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net45" />
|
||||
<package id="System.Data.SQLite.Core" version="1.0.113.7" targetFramework="net45" />
|
||||
<package id="System.Runtime" version="4.3.1" targetFramework="net45" />
|
||||
</packages>
|
|
@ -0,0 +1,55 @@
|
|||
using PortProxyGUI._extern.NStandard;
|
||||
using PortProxyGUI.Data;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace PortProxyGUI
|
||||
{
|
||||
public static class CmdUtil
|
||||
{
|
||||
public static Rule[] GetProxies()
|
||||
{
|
||||
var output = CmdRunner.Execute("netsh interface portproxy show all");
|
||||
var types = new[]
|
||||
{
|
||||
new ProxyType("ipv4", "ipv4"),
|
||||
new ProxyType("ipv4", "ipv6"),
|
||||
new ProxyType("ipv6", "ipv4"),
|
||||
new ProxyType("ipv6", "ipv6"),
|
||||
};
|
||||
|
||||
var proxies = types.SelectMany(type =>
|
||||
{
|
||||
var typeProxies = output
|
||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
||||
.Select(line =>
|
||||
{
|
||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
||||
return new Rule
|
||||
{
|
||||
Type = type.Type,
|
||||
ListenOn = parts[1].First(),
|
||||
ListenPort = int.Parse(parts[2].First()),
|
||||
ConnectTo = parts[3].First(),
|
||||
ConnectPort = int.Parse(parts[4].First()),
|
||||
};
|
||||
});
|
||||
return typeProxies ?? new Rule[0];
|
||||
});
|
||||
return proxies.ToArray();
|
||||
}
|
||||
|
||||
public static void AddProxy(string action, string type, string listenOn, int listenPort, string connectTo, int connectPort)
|
||||
{
|
||||
CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}");
|
||||
}
|
||||
|
||||
public static void DeleteProxy(string type, string listenOn, int listenPort)
|
||||
{
|
||||
CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace PortProxyGUI.Data
|
||||
{
|
||||
public class ApplicationDbMigrationUtil
|
||||
{
|
||||
public ApplicationDbScope DbScope { get; private set; }
|
||||
|
||||
public ApplicationDbMigrationUtil(ApplicationDbScope context)
|
||||
{
|
||||
DbScope = context;
|
||||
EnsureHistoryTable();
|
||||
EnsureUpdateVersion();
|
||||
}
|
||||
|
||||
public void EnsureHistoryTable()
|
||||
{
|
||||
if (!DbScope.SqlQuery($"SELECT * FROM sqlite_master WHERE type = 'table' AND name = '__history';").Any())
|
||||
{
|
||||
DbScope.UnsafeSql(@"CREATE TABLE __history ( MigrationId text PRIMARY KEY, ProductVersion text);");
|
||||
DbScope.UnsafeSql($"INSERT INTO __history (MigrationId, ProductVersion) VALUES ('000000000000', '0.0');");
|
||||
}
|
||||
}
|
||||
|
||||
public void EnsureUpdateVersion()
|
||||
{
|
||||
var migration = GetLastMigration();
|
||||
var assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;
|
||||
if (new Version(migration.ProductVersion) > assemblyVersion)
|
||||
throw new InvalidOperationException("The current software version cannot use the configuration. Please download the latest version (https://github.com/zmjack/PortProxyGUI).");
|
||||
}
|
||||
|
||||
public Migration GetLastMigration()
|
||||
{
|
||||
return DbScope.SqlQuery<Migration>($"SELECT * FROM __history ORDER BY MigrationId DESC LIMIT 1;").First();
|
||||
}
|
||||
|
||||
public void MigrateToLast()
|
||||
{
|
||||
var migration = GetLastMigration();
|
||||
var migrationId = migration.MigrationId;
|
||||
var pendingMigrations = migrationId != "000000000000"
|
||||
? History.SkipWhile(pair => pair.Key.MigrationId != migrationId).Skip(1)
|
||||
: History;
|
||||
|
||||
foreach (var pendingMigration in pendingMigrations)
|
||||
{
|
||||
foreach (var sql in pendingMigration.Value)
|
||||
{
|
||||
DbScope.UnsafeSql(sql);
|
||||
}
|
||||
DbScope.Sql($"INSERT INTO __history (MigrationId, ProductVersion) VALUES ({pendingMigration.Key.MigrationId}, {pendingMigration.Key.ProductVersion});");
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<MigrationKey, string[]> History = new Dictionary<MigrationKey, string[]>
|
||||
{
|
||||
[new MigrationKey { MigrationId = "202103021542", ProductVersion = "1.1.0" }] = new[]
|
||||
{
|
||||
@"CREATE TABLE rules
|
||||
(
|
||||
Id text PRIMARY KEY,
|
||||
Type text,
|
||||
ListenOn text,
|
||||
ListenPort integer,
|
||||
ConnectTo text,
|
||||
ConnectPort integer
|
||||
);",
|
||||
"CREATE UNIQUE INDEX IX_Rules_Type_ListenOn_ListenPort ON Rules(Type, ListenOn, ListenPort);",
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,85 @@
|
|||
using SQLib.Sqlite;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace PortProxyGUI.Data
|
||||
{
|
||||
public class ApplicationDbScope : SqliteScope<ApplicationDbScope>
|
||||
{
|
||||
public static readonly string DbDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PortProxyGUI");
|
||||
public static readonly string DbFile = Path.Combine(DbDirectory, "config.db");
|
||||
private static readonly string ConnectionString = $"Data Source={DbFile}";
|
||||
|
||||
public static ApplicationDbScope UseDefault() => new ApplicationDbScope(ConnectionString);
|
||||
|
||||
public ApplicationDbScope(string connectionString) : base(connectionString)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
if (!Directory.Exists(DbDirectory)) Directory.CreateDirectory(DbDirectory);
|
||||
if (!File.Exists(DbFile))
|
||||
{
|
||||
#if NET35 || NET45
|
||||
System.Data.SQLite.SQLiteConnection.CreateFile(DbFile);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
public void Migrate() => new ApplicationDbMigrationUtil(this).MigrateToLast();
|
||||
|
||||
public IEnumerable<Rule> Rules => SqlQuery<Rule>($"SELECT * FROM Rules;");
|
||||
|
||||
public Rule GetRule(string type, string listenOn, int listenPort)
|
||||
{
|
||||
return SqlQuery<Rule>($"SELECT * FROM Rules WHERE Type={type} AND ListenOn={listenOn} AND ListenPort={listenPort} LIMIT 1;").FirstOrDefault();
|
||||
}
|
||||
|
||||
public void Add<T>(T obj) where T : class
|
||||
{
|
||||
var newid = Guid.NewGuid().ToString();
|
||||
switch (obj)
|
||||
{
|
||||
case Rule rule:
|
||||
Sql($"INSERT INTO Rules (Id, Type, ListenOn, ListenPort, ConnectTo, ConnectPort) VALUES ({newid}, {rule.Type}, {rule.ListenOn}, {rule.ListenPort}, {rule.ConnectTo}, {rule.ConnectPort});");
|
||||
break;
|
||||
}
|
||||
}
|
||||
public void AddRange<T>(IEnumerable<T> objs) where T : class
|
||||
{
|
||||
foreach (var obj in objs) Add(obj);
|
||||
}
|
||||
|
||||
public void Update<T>(T obj) where T : class
|
||||
{
|
||||
switch (obj)
|
||||
{
|
||||
case Rule rule:
|
||||
Sql($"UPDATE Rules SET Type={rule.Type}, ListenOn={rule.ListenOn}, ListenPort={rule.ListenPort}, ConnectTo={rule.ConnectTo}, ConnectPort={rule.ConnectPort} WHERE Id={rule.Id};");
|
||||
break;
|
||||
}
|
||||
}
|
||||
public void UpdateRange<T>(IEnumerable<T> objs) where T : class
|
||||
{
|
||||
foreach (var obj in objs) Update(obj);
|
||||
}
|
||||
|
||||
public void Remove<T>(T obj) where T : class
|
||||
{
|
||||
switch (obj)
|
||||
{
|
||||
case Rule rule:
|
||||
Sql($"DELETE FROM Rules WHERE Id={rule.Id};");
|
||||
break;
|
||||
}
|
||||
}
|
||||
public void RemoveRange<T>(IEnumerable<T> objs) where T : class
|
||||
{
|
||||
foreach (var obj in objs) Remove(obj);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
namespace PortProxyGUI.Data
|
||||
{
|
||||
public class Migration
|
||||
{
|
||||
public string MigrationId { get; set; }
|
||||
public string ProductVersion { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
namespace PortProxyGUI.Data
|
||||
{
|
||||
public struct MigrationKey
|
||||
{
|
||||
public string MigrationId { get; set; }
|
||||
public string ProductVersion { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
using System;
|
||||
|
||||
namespace PortProxyGUI.Data
|
||||
{
|
||||
public class Rule : IEquatable<Rule>
|
||||
{
|
||||
public string Id { get; set; }
|
||||
|
||||
public string Type { get; set; }
|
||||
public string ListenOn { get; set; }
|
||||
public int ListenPort { get; set; }
|
||||
public string ConnectTo { get; set; }
|
||||
public long ConnectPort { get; set; }
|
||||
|
||||
public bool Equals(Rule other)
|
||||
{
|
||||
return Id == other.Id
|
||||
&& Type == other.Type
|
||||
&& ListenOn == other.ListenOn
|
||||
&& ListenPort == other.ListenPort
|
||||
&& ConnectTo == other.ConnectTo
|
||||
&& ConnectPort == other.ConnectPort;
|
||||
}
|
||||
|
||||
public bool EqualsWithKeys(Rule other)
|
||||
{
|
||||
return Type == other.Type
|
||||
&& ListenOn == other.ListenOn
|
||||
&& ListenPort == other.ListenPort;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -6,12 +6,17 @@
|
|||
<SharedGUID>b38ef2b9-e38d-4d6d-bf0d-7c1934d6cfdc</SharedGUID>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Configuration">
|
||||
<Import_RootNamespace>PortProxyGUI.Shared</Import_RootNamespace>
|
||||
<Import_RootNamespace>PortProxyGUI</Import_RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="$(MSBuildThisFileDirectory)CmdRunner.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)CmdUtil.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Data\ApplicationDbScope.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Data\ApplicationDbMigrationUtil.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Data\Migration.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Data\MigrationKey.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)Data\Rule.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ListViewColumnSorter.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)PortProxy.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)ProxyType.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XString.cs" />
|
||||
<Compile Include="$(MSBuildThisFileDirectory)~extern\NStandard\XObject.cs" />
|
||||
|
|
|
@ -30,13 +30,17 @@
|
|||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortProxyGUI));
|
||||
this.listView1 = new System.Windows.Forms.ListView();
|
||||
this.listViewProxies = new System.Windows.Forms.ListView();
|
||||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader4 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader5 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.columnHeader6 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
|
||||
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
|
||||
this.toolStripMenuItem_Enable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Disable = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_New = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Modify = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripMenuItem_Delete = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -44,27 +48,31 @@
|
|||
this.toolStripMenuItem_Refresh = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.toolStripMenuItem_About = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.imageListProxies = new System.Windows.Forms.ImageList(this.components);
|
||||
this.contextMenuStrip1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// listView1
|
||||
// listViewProxies
|
||||
//
|
||||
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.listViewProxies.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.listViewProxies.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
|
||||
this.columnHeader1,
|
||||
this.columnHeader2,
|
||||
this.columnHeader3,
|
||||
this.columnHeader4,
|
||||
this.columnHeader5});
|
||||
this.listView1.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listView1, "listView1");
|
||||
this.listView1.FullRowSelect = true;
|
||||
this.listView1.HideSelection = false;
|
||||
this.listView1.Name = "listView1";
|
||||
this.listView1.UseCompatibleStateImageBehavior = false;
|
||||
this.listView1.View = System.Windows.Forms.View.Details;
|
||||
this.listView1.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listView1.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listView1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
this.columnHeader5,
|
||||
this.columnHeader6});
|
||||
this.listViewProxies.ContextMenuStrip = this.contextMenuStrip1;
|
||||
resources.ApplyResources(this.listViewProxies, "listViewProxies");
|
||||
this.listViewProxies.FullRowSelect = true;
|
||||
this.listViewProxies.HideSelection = false;
|
||||
this.listViewProxies.Name = "listViewProxies";
|
||||
this.listViewProxies.SmallImageList = this.imageListProxies;
|
||||
this.listViewProxies.UseCompatibleStateImageBehavior = false;
|
||||
this.listViewProxies.View = System.Windows.Forms.View.Details;
|
||||
this.listViewProxies.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listView1_ColumnClick);
|
||||
this.listViewProxies.DoubleClick += new System.EventHandler(this.listView1_DoubleClick);
|
||||
this.listViewProxies.MouseUp += new System.Windows.Forms.MouseEventHandler(this.listView1_MouseUp);
|
||||
//
|
||||
// columnHeader1
|
||||
//
|
||||
|
@ -86,20 +94,42 @@
|
|||
//
|
||||
resources.ApplyResources(this.columnHeader5, "columnHeader5");
|
||||
//
|
||||
// columnHeader6
|
||||
//
|
||||
resources.ApplyResources(this.columnHeader6, "columnHeader6");
|
||||
//
|
||||
// contextMenuStrip1
|
||||
//
|
||||
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.toolStripMenuItem_Enable,
|
||||
this.toolStripMenuItem_Disable,
|
||||
this.toolStripSeparator3,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_New,
|
||||
this.toolStripMenuItem_Modify,
|
||||
this.toolStripMenuItem_Delete,
|
||||
this.toolStripSeparator1,
|
||||
this.toolStripMenuItem_Refresh,
|
||||
this.toolStripSeparator2,
|
||||
this.toolStripMenuItem_About});
|
||||
this.contextMenuStrip1.Name = "contextMenuStrip1";
|
||||
resources.ApplyResources(this.contextMenuStrip1, "contextMenuStrip1");
|
||||
this.contextMenuStrip1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.contextMenuStrip1_MouseClick);
|
||||
//
|
||||
// toolStripMenuItem_Enable
|
||||
//
|
||||
this.toolStripMenuItem_Enable.Name = "toolStripMenuItem_Enable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Enable, "toolStripMenuItem_Enable");
|
||||
//
|
||||
// toolStripMenuItem_Disable
|
||||
//
|
||||
this.toolStripMenuItem_Disable.Name = "toolStripMenuItem_Disable";
|
||||
resources.ApplyResources(this.toolStripMenuItem_Disable, "toolStripMenuItem_Disable");
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3");
|
||||
//
|
||||
// toolStripMenuItem_New
|
||||
//
|
||||
this.toolStripMenuItem_New.Name = "toolStripMenuItem_New";
|
||||
|
@ -135,13 +165,21 @@
|
|||
this.toolStripMenuItem_About.Name = "toolStripMenuItem_About";
|
||||
resources.ApplyResources(this.toolStripMenuItem_About, "toolStripMenuItem_About");
|
||||
//
|
||||
// imageListProxies
|
||||
//
|
||||
this.imageListProxies.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListProxies.ImageStream")));
|
||||
this.imageListProxies.TransparentColor = System.Drawing.Color.Transparent;
|
||||
this.imageListProxies.Images.SetKeyName(0, "disable.png");
|
||||
this.imageListProxies.Images.SetKeyName(1, "enable.png");
|
||||
//
|
||||
// PortProxyGUI
|
||||
//
|
||||
resources.ApplyResources(this, "$this");
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.listView1);
|
||||
this.Controls.Add(this.listViewProxies);
|
||||
this.Name = "PortProxyGUI";
|
||||
this.Load += new System.EventHandler(this.PortProxyGUI_Load);
|
||||
this.Shown += new System.EventHandler(this.PortProxyGUI_Shown);
|
||||
this.contextMenuStrip1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
|
@ -149,20 +187,25 @@
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.ListView listView1;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ListView listViewProxies;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader2;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_New;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Delete;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader3;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Refresh;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader4;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_About;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader5;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader6;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Modify;
|
||||
private System.Windows.Forms.ColumnHeader columnHeader1;
|
||||
private System.Windows.Forms.ImageList imageListProxies;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Enable;
|
||||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem_Disable;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
using static System.Windows.Forms.ListViewItem;
|
||||
|
||||
|
@ -18,80 +17,81 @@ namespace PortProxyGUI
|
|||
{
|
||||
InitializeComponent();
|
||||
lvwColumnSorter = new ListViewColumnSorter();
|
||||
listView1.ListViewItemSorter = lvwColumnSorter;
|
||||
listViewProxies.ListViewItemSorter = lvwColumnSorter;
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void PortProxyGUI_Shown(object sender, EventArgs e)
|
||||
{
|
||||
RefreshProxyList();
|
||||
}
|
||||
|
||||
private void EnableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 1;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.AddProxy("add", subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text), subItems[4].Text, int.Parse(subItems[5].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DisableSelectedProxies()
|
||||
{
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
item.ImageIndex = 0;
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
CmdUtil.DeleteProxy(subItems[1].Text, subItems[2].Text, int.Parse(subItems[3].Text));
|
||||
}
|
||||
}
|
||||
|
||||
private void DeleteSelectedProxies()
|
||||
{
|
||||
var items = listView1.SelectedItems.OfType<ListViewItem>();
|
||||
foreach (var item in items)
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy delete {type} listenaddress={listenOn} listenport={listenPort}");
|
||||
}
|
||||
RefreshProxyList();
|
||||
var items = listViewProxies.SelectedItems.OfType<ListViewItem>();
|
||||
DisableSelectedProxies();
|
||||
Program.SqliteDbScope.RemoveRange(items.Select(x => new Data.Rule { Id = x.Tag.ToString() }));
|
||||
foreach (var item in items) listViewProxies.Items.Remove(item);
|
||||
}
|
||||
|
||||
private void SetProxyForUpdate(SetProxyForm form)
|
||||
{
|
||||
var item = listView1.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
{
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
var type = subItems[0].Text;
|
||||
var listenOn = subItems[1].Text;
|
||||
var listenPort = subItems[2].Text;
|
||||
var connectTo = subItems[3].Text;
|
||||
var connectPort = subItems[4].Text;
|
||||
form.UseUpdateMode(type, listenOn, listenPort, connectTo, connectPort);
|
||||
}
|
||||
var item = listViewProxies.SelectedItems.OfType<ListViewItem>().FirstOrDefault();
|
||||
var subItems = item.SubItems.OfType<ListViewSubItem>().ToArray();
|
||||
form.UseUpdateMode(item, subItems[1].Text, subItems[2].Text, subItems[3].Text, subItems[4].Text, subItems[5].Text);
|
||||
}
|
||||
|
||||
public void RefreshProxyList()
|
||||
{
|
||||
var output = CmdRunner.Execute("netsh interface portproxy show all");
|
||||
var types = new[]
|
||||
{
|
||||
new ProxyType("ipv4", "ipv4"),
|
||||
new ProxyType("ipv4", "ipv6"),
|
||||
new ProxyType("ipv6", "ipv4"),
|
||||
new ProxyType("ipv6", "ipv6"),
|
||||
};
|
||||
|
||||
var proxies = types.SelectMany(type =>
|
||||
{
|
||||
var typeProxies = output
|
||||
.Project(new Regex($@"{type.From}:[^\n]+?{type.To}:\r\n\r\n.+?\r\n--------------- ---------- --------------- ----------\r\n(.+?)\r\n\r\n", RegexOptions.Singleline))
|
||||
?.Split(new[] { Environment.NewLine }, StringSplitOptions.None)
|
||||
.Select(line =>
|
||||
{
|
||||
var parts = line.Resolve(new Regex(@"^([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)$"));
|
||||
return new PortProxy
|
||||
{
|
||||
Type = type.Type,
|
||||
ListenOn = parts[1].FirstOrDefault(),
|
||||
ListenPort = parts[2].FirstOrDefault(),
|
||||
ConnectTo = parts[3].FirstOrDefault(),
|
||||
ConnectPort = parts[4].FirstOrDefault(),
|
||||
};
|
||||
});
|
||||
return typeProxies ?? new PortProxy[0];
|
||||
});
|
||||
|
||||
listView1.Items.Clear();
|
||||
var proxies = CmdUtil.GetProxies();
|
||||
var rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var proxy in proxies)
|
||||
{
|
||||
listView1.Items.Add(new ListViewItem(proxy.Type).Then(vitem =>
|
||||
var matchedRule = rules.FirstOrDefault(r => r.EqualsWithKeys(proxy));
|
||||
proxy.Id = matchedRule?.Id;
|
||||
}
|
||||
|
||||
var pendingAdds = proxies.Where(x => x.Id == null);
|
||||
var pendingUpdates = proxies.Where(x => x.Id != null && !x.Equals(rules.First(r => r.Id == x.Id)));
|
||||
|
||||
Program.SqliteDbScope.AddRange(pendingAdds);
|
||||
Program.SqliteDbScope.UpdateRange(pendingUpdates);
|
||||
|
||||
listViewProxies.Items.Clear();
|
||||
rules = Program.SqliteDbScope.Rules;
|
||||
foreach (var rule in rules)
|
||||
{
|
||||
var imageIndex = proxies.Any(p => p.EqualsWithKeys(rule)) ? 1 : 0;
|
||||
var item = new ListViewItem { ImageIndex = imageIndex, Tag = rule.Id }.Then(vitem =>
|
||||
{
|
||||
vitem.SubItems.AddRange(new[] { proxy.ListenOn, proxy.ListenPort, proxy.ConnectTo, proxy.ConnectPort });
|
||||
}));
|
||||
vitem.SubItems.AddRange(new[] { rule.Type, rule.ListenOn, rule.ListenPort.ToString(), rule.ConnectTo, rule.ConnectPort.ToString() });
|
||||
});
|
||||
listViewProxies.Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -99,27 +99,33 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ContextMenuStrip _sender)
|
||||
{
|
||||
var selected = _sender.Items.OfType<ToolStripItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
var selected = _sender.Items.OfType<ToolStripMenuItem>().Where(x => x.Selected).FirstOrDefault();
|
||||
if (selected is null || !selected.Enabled) return;
|
||||
|
||||
switch (selected.Text)
|
||||
switch (selected)
|
||||
{
|
||||
case string s when s == toolStripMenuItem_New.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Enable: EnableSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Disable: DisableSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_New:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForm.UseNormalMode();
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Modify.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Modify:
|
||||
if (SetProxyForm == null) SetProxyForm = new SetProxyForm(this);
|
||||
SetProxyForUpdate(SetProxyForm);
|
||||
SetProxyForm.Show();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_Refresh.Text: RefreshProxyList(); break;
|
||||
case string s when s == toolStripMenuItem_Delete.Text: DeleteSelectedProxies(); break;
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Refresh:
|
||||
RefreshProxyList();
|
||||
break;
|
||||
|
||||
case string s when s == toolStripMenuItem_About.Text:
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_Delete: DeleteSelectedProxies(); break;
|
||||
|
||||
case ToolStripMenuItem item when item == toolStripMenuItem_About:
|
||||
if (AboutForm == null)
|
||||
{
|
||||
AboutForm = new About(this);
|
||||
|
@ -135,9 +141,11 @@ namespace PortProxyGUI
|
|||
{
|
||||
if (sender is ListView _sender)
|
||||
{
|
||||
var selectAny = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Delete.Enabled = selectAny;
|
||||
toolStripMenuItem_Modify.Enabled = selectAny;
|
||||
toolStripMenuItem_Enable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 0);
|
||||
toolStripMenuItem_Disable.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any(x => x.ImageIndex == 1);
|
||||
|
||||
toolStripMenuItem_Delete.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Any();
|
||||
toolStripMenuItem_Modify.Enabled = e.Button == MouseButtons.Right && _sender.SelectedItems.OfType<ListViewItem>().Count() == 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,7 +186,8 @@ namespace PortProxyGUI
|
|||
}
|
||||
|
||||
// Perform the sort with these new sort options.
|
||||
listView1.Sort();
|
||||
listViewProxies.Sort();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<PackageTags>portproxy TCP/IP redirector</PackageTags>
|
||||
<PackageLicenseFile>LICENSE.md</PackageLicenseFile>
|
||||
<Copyright>Copyright © nstandard.net 2020</Copyright>
|
||||
<Version>1.0.6-alpha1</Version>
|
||||
<Version>1.1.0</Version>
|
||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -35,6 +35,10 @@
|
|||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SQLib.Sqlite" Version="0.8.6" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="About.cs">
|
||||
<SubType>Form</SubType>
|
||||
|
@ -65,6 +69,7 @@
|
|||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="PortProxyGUI.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="PortProxyGUI.zh-CN.resx">
|
||||
<DependentUpon>PortProxyGUI.cs</DependentUpon>
|
||||
|
|
|
@ -112,124 +112,196 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="columnHeader1.Text" xml:space="preserve">
|
||||
<value>Type</value>
|
||||
<value />
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader1.Width" type="System.Int32, mscorlib">
|
||||
<value>24</value>
|
||||
</data>
|
||||
<data name="columnHeader2.Text" xml:space="preserve">
|
||||
<value>Listen on</value>
|
||||
<value>Type</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="columnHeader2.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
<value>64</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
<value>Listen on</value>
|
||||
</data>
|
||||
<data name="columnHeader3.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
<data name="columnHeader4.Text" xml:space="preserve">
|
||||
<value>Listen port</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<data name="columnHeader4.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="columnHeader5.Text" xml:space="preserve">
|
||||
<value>Connect to</value>
|
||||
</data>
|
||||
<data name="columnHeader5.Width" type="System.Int32, mscorlib">
|
||||
<value>140</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Text" xml:space="preserve">
|
||||
<value>Connect port</value>
|
||||
</data>
|
||||
<data name="columnHeader6.Width" type="System.Int32, mscorlib">
|
||||
<value>100</value>
|
||||
</data>
|
||||
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>177, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>180, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="contextMenuStrip1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>181, 148</value>
|
||||
<value>155, 176</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Name" xml:space="preserve">
|
||||
<value>contextMenuStrip1</value>
|
||||
</data>
|
||||
<data name=">>contextMenuStrip1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listView1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="listViewProxies.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
<data name="listView1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<data name="listViewProxies.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="listView1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<data name="listViewProxies.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
<data name="listView1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<data name="listViewProxies.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="listView1.TabIndex" type="System.Int32, mscorlib">
|
||||
<metadata name="imageListProxies.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>182, 17</value>
|
||||
</metadata>
|
||||
<data name="imageListProxies.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
|
||||
CAAAAk1TRnQBSQFMAgEBAgEAAUABAAFAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
|
||||
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
|
||||
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
|
||||
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
|
||||
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
|
||||
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
|
||||
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
|
||||
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
|
||||
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
|
||||
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
|
||||
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
|
||||
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
|
||||
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
|
||||
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
|
||||
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
|
||||
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
|
||||
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
|
||||
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
|
||||
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
|
||||
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
|
||||
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
|
||||
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
|
||||
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
|
||||
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
|
||||
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQACvQ0AAH/AZQKFwGU
|
||||
Af8CAAH/AboKlQG6Af8iAAGUDBcBlAIAAboMlQG6IgAOFwIADpUiAAQXARYB9AL/AfQBFgQXAgAOlSIA
|
||||
AxcBFgH/Ab0BFgGUAfQB/wEWAxcCAAWVArsHlSIAAxcB9AG9AhcBlAH/AvQDFwIABJUBugL/AcEGlSIA
|
||||
AxcB/wEWARcBlAH/ApQB/wMXAgADlQG6Af8BwQG6Af8BwQWVIgADFwH/ApQB/wGUARcBFgH/AxcCAAOV
|
||||
Af8BwQKVAboB/wHBBJUiAAMXAvQB/wGUAhcBvQH0AxcCAAiVAboB/wHBA5UiAAMXARYB/wH0AZQBFgG9
|
||||
Af8BFgMXAgAJlQG6Af8DlSIABBcBFgH0Av8B9AEWBBcB/wEADpUB/yEADhcB/wEADpUB/yEAAZQMFwGU
|
||||
AgABugyVAboiAAH/AZQKFwGUAf8CAAH/AboKlQG6Af80AAH/CPQkAAFCAU0BPgcAAT4DAAEoAwABQAMA
|
||||
ARADAAEBAQABAQUAAYAXAAP/AQAB4AEHAv8EAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGAAQEBgAEBBAABgAEBAYABAQQAAYABAQGAAQEEAAGA
|
||||
AQEBgAEBBAABgAEAAYAFAAGAAQABgAUAAYABAQGAAQEEAAGAAQEBgAEBBAAC/wHgAQ8EAAs=
|
||||
</value>
|
||||
</data>
|
||||
<data name="listViewProxies.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name=">>listView1.Name" xml:space="preserve">
|
||||
<value>listView1</value>
|
||||
<data name=">>listViewProxies.Name" xml:space="preserve">
|
||||
<value>listViewProxies</value>
|
||||
</data>
|
||||
<data name=">>listView1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<data name=">>listViewProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>listView1.Parent" xml:space="preserve">
|
||||
<data name=">>listViewProxies.Parent" xml:space="preserve">
|
||||
<value>$this</value>
|
||||
</data>
|
||||
<data name=">>listView1.ZOrder" xml:space="preserve">
|
||||
<data name=">>listViewProxies.ZOrder" xml:space="preserve">
|
||||
<value>1</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="toolStripMenuItem_Enable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Enable.Text" xml:space="preserve">
|
||||
<value>Enable (&E)</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Disable.Text" xml:space="preserve">
|
||||
<value>Disable (&I)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator3.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_New.Text" xml:space="preserve">
|
||||
<value>New (&N) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Modify.Text" xml:space="preserve">
|
||||
<value>Modify (&M) ...</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Delete.Text" xml:space="preserve">
|
||||
<value>Delete (&D)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_Refresh.Text" xml:space="preserve">
|
||||
<value>Refresh (&F)</value>
|
||||
</data>
|
||||
<data name="toolStripSeparator2.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>151, 6</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>154, 22</value>
|
||||
</data>
|
||||
<data name="toolStripMenuItem_About.Text" xml:space="preserve">
|
||||
<value>About</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>573, 262</value>
|
||||
<value>624, 361</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
|
@ -2402,78 +2474,108 @@
|
|||
<value>columnHeader1</value>
|
||||
</data>
|
||||
<data name=">>columnHeader1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Name" xml:space="preserve">
|
||||
<value>columnHeader2</value>
|
||||
</data>
|
||||
<data name=">>columnHeader2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Name" xml:space="preserve">
|
||||
<value>columnHeader3</value>
|
||||
</data>
|
||||
<data name=">>columnHeader3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Name" xml:space="preserve">
|
||||
<value>columnHeader4</value>
|
||||
</data>
|
||||
<data name=">>columnHeader4.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Name" xml:space="preserve">
|
||||
<value>columnHeader5</value>
|
||||
</data>
|
||||
<data name=">>columnHeader5.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Name" xml:space="preserve">
|
||||
<value>columnHeader6</value>
|
||||
</data>
|
||||
<data name=">>columnHeader6.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Enable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Enable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Disable</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Disable.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator3</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator3.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_New</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_New.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Modify</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Modify.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Delete</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Delete.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator1</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator1.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_Refresh</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_Refresh.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Name" xml:space="preserve">
|
||||
<value>toolStripSeparator2</value>
|
||||
</data>
|
||||
<data name=">>toolStripSeparator2.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Name" xml:space="preserve">
|
||||
<value>toolStripMenuItem_About</value>
|
||||
</data>
|
||||
<data name=">>toolStripMenuItem_About.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Name" xml:space="preserve">
|
||||
<value>imageListProxies</value>
|
||||
</data>
|
||||
<data name=">>imageListProxies.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<data name=">>$this.Name" xml:space="preserve">
|
||||
<value>PortProxyGUI</value>
|
||||
</data>
|
||||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
</root>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,18 +1,20 @@
|
|||
using PortProxyGUI.Data;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Threading;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace PortProxyGUI
|
||||
{
|
||||
static class Program
|
||||
{
|
||||
public static readonly ApplicationDbScope SqliteDbScope = ApplicationDbScope.UseDefault();
|
||||
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
SqliteDbScope.Migrate();
|
||||
Application.SetHighDpiMode(HighDpiMode.SystemAware);
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
|
|
|
@ -9,8 +9,8 @@ namespace PortProxyGUI
|
|||
public partial class SetProxyForm : Form
|
||||
{
|
||||
public readonly PortProxyGUI PortProxyGUI;
|
||||
public bool UpdateMode { get; private set; }
|
||||
private string AutoTypeString { get; }
|
||||
private ListViewItem _updateLiveViewItem;
|
||||
|
||||
public SetProxyForm(PortProxyGUI portProxyGUI)
|
||||
{
|
||||
|
@ -29,11 +29,11 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = "";
|
||||
textBox_connectTo.Text = "";
|
||||
textBox_connectPort.Text = "";
|
||||
UpdateMode = false;
|
||||
}
|
||||
|
||||
public void UseUpdateMode(string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
_updateLiveViewItem = item;
|
||||
comboBox_type.Enabled = false;
|
||||
textBox_listenOn.Enabled = false;
|
||||
textBox_listenPort.Enabled = false;
|
||||
|
@ -42,19 +42,8 @@ namespace PortProxyGUI
|
|||
textBox_listenPort.Text = listenPort;
|
||||
textBox_connectTo.Text = connectTo;
|
||||
textBox_connectPort.Text = connectPort;
|
||||
UpdateMode = true;
|
||||
}
|
||||
|
||||
private void SetPortProxy(string type, string action, string listenOn, string listenPort, string connectTo, string connectPort)
|
||||
{
|
||||
var output = CmdRunner.Execute($"netsh interface portproxy {action} {type} listenaddress={listenOn} listenport={listenPort} connectaddress={connectTo} connectport={connectPort}");
|
||||
Invoke((Action)(() => PortProxyGUI.RefreshProxyList()));
|
||||
}
|
||||
|
||||
private bool IsIPv4(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])(?:\.(?:\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])){3}$"));
|
||||
}
|
||||
private bool IsIPv6(string ip)
|
||||
{
|
||||
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
|
||||
|
@ -95,7 +84,28 @@ namespace PortProxyGUI
|
|||
return;
|
||||
}
|
||||
|
||||
SetPortProxy(type, UpdateMode ? "set" : "add", listenOn, listenPort, connectTo, connectPort);
|
||||
if (_updateLiveViewItem != null)
|
||||
{
|
||||
var rule = Program.SqliteDbScope.GetRule(type, listenOn, _listenPort);
|
||||
rule.ConnectTo = connectTo;
|
||||
rule.ConnectPort = _connectPort;
|
||||
Program.SqliteDbScope.Update(rule);
|
||||
CmdUtil.AddProxy("set", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
|
||||
_updateLiveViewItem.ImageIndex = 1;
|
||||
var subItems = _updateLiveViewItem.SubItems;
|
||||
subItems[1].Text = type;
|
||||
subItems[2].Text = listenOn;
|
||||
subItems[3].Text = _listenPort.ToString();
|
||||
subItems[4].Text = connectTo;
|
||||
subItems[5].Text = _connectPort.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
CmdUtil.AddProxy("add", type, listenOn, _listenPort, connectTo, _connectPort);
|
||||
PortProxyGUI.RefreshProxyList();
|
||||
}
|
||||
|
||||
Close();
|
||||
}
|
||||
|
||||
|
|
|
@ -112,13 +112,13 @@
|
|||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="label1.Text" xml:space="preserve">
|
||||
<value>侦听地址</value>
|
||||
<value>监听地址</value>
|
||||
</data>
|
||||
<data name=">>label1.Name" xml:space="preserve">
|
||||
<value>label1</value>
|
||||
|
@ -291,18 +291,18 @@
|
|||
<data name=">>$this.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</data>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||
<value>313, 95</value>
|
||||
</data>
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="$this.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
||||
<value>3, 2, 3, 2</value>
|
||||
</data>
|
||||
|
|
BIN
docs/ui.png
BIN
docs/ui.png
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 348 B |
Binary file not shown.
After Width: | Height: | Size: 290 B |
Loading…
Reference in New Issue