PortProxyGUI/PortProxyGUI - NET45/SetProxyForm.cs

125 lines
4.6 KiB
C#
Raw Normal View History

2020-05-29 03:32:44 +08:00
using PortProxyGUI._extern.NStandard;
using System;
2020-09-24 18:06:57 +08:00
using System.Linq;
2020-05-29 03:32:44 +08:00
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace PortProxyGUI
{
2020-12-09 21:19:58 +08:00
public partial class SetProxyForm : Form
2020-05-29 03:32:44 +08:00
{
public readonly PortProxyGUI PortProxyGUI;
2020-12-09 21:19:58 +08:00
private string AutoTypeString { get; }
2021-03-10 01:12:07 +08:00
private ListViewItem _updateLiveViewItem;
2020-05-29 03:32:44 +08:00
2020-12-09 21:19:58 +08:00
public SetProxyForm(PortProxyGUI portProxyGUI)
2020-05-29 03:32:44 +08:00
{
PortProxyGUI = portProxyGUI;
InitializeComponent();
2020-12-09 21:19:58 +08:00
AutoTypeString = comboBox_type.Text = comboBox_type.Items.OfType<string>().First();
2020-05-29 03:32:44 +08:00
}
2020-12-09 21:19:58 +08:00
public void UseNormalMode()
2020-05-29 03:32:44 +08:00
{
2020-12-09 21:19:58 +08:00
comboBox_type.Enabled = true;
textBox_listenOn.Enabled = true;
textBox_listenPort.Enabled = true;
comboBox_type.Text = AutoTypeString;
textBox_listenOn.Text = "*";
textBox_listenPort.Text = "";
textBox_connectTo.Text = "";
textBox_connectPort.Text = "";
}
2021-03-10 01:12:07 +08:00
public void UseUpdateMode(ListViewItem item, string type, string listenOn, string listenPort, string connectTo, string connectPort)
2020-12-09 21:19:58 +08:00
{
2021-03-10 01:12:07 +08:00
_updateLiveViewItem = item;
2020-12-09 21:19:58 +08:00
comboBox_type.Enabled = false;
textBox_listenOn.Enabled = false;
textBox_listenPort.Enabled = false;
comboBox_type.Text = type;
textBox_listenOn.Text = listenOn;
textBox_listenPort.Text = listenPort;
textBox_connectTo.Text = connectTo;
textBox_connectPort.Text = connectPort;
}
2020-09-24 18:06:57 +08:00
private bool IsIPv6(string ip)
{
2020-11-23 00:45:06 +08:00
return ip.IsMatch(new Regex(@"^[\dABCDEF]{2}(?::(?:[\dABCDEF]{2})){5}$"));
}
private string GetPassType(string listenOn, string connectTo)
{
var from = IsIPv6(listenOn) ? "v6" : "v4";
var to = IsIPv6(connectTo) ? "v6" : "v4";
return $"{from}to{to}";
2020-09-24 18:06:57 +08:00
}
2020-12-09 21:19:58 +08:00
private void button_submit_Click(object sender, EventArgs e)
2020-05-29 03:32:44 +08:00
{
2020-09-24 18:06:57 +08:00
var type = comboBox_type.Text.Trim();
var listenOn = textBox_listenOn.Text.Trim().ToLower();
var connectTo = textBox_connectTo.Text.Trim().ToLower();
var listenPort = textBox_listenPort.Text.Trim();
var connectPort = textBox_connectPort.Text.Trim();
2020-05-29 03:32:44 +08:00
if (!int.TryParse(listenPort, out var _listenPort) || _listenPort < 0 || _listenPort > 65535)
{
MessageBox.Show($"The listen port is invalid.", "Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
if (!int.TryParse(connectPort, out var _connectPort) || _connectPort < 0 || _connectPort > 65535)
{
MessageBox.Show($"The connect port is invalid.", "Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
2020-12-09 21:19:58 +08:00
if (type == AutoTypeString) type = GetPassType(listenOn, connectTo);
2020-11-23 00:45:06 +08:00
if (!new[] { "v4tov4", "v4tov6", "v6tov4", "v6tov6" }.Contains(type))
2020-05-29 03:32:44 +08:00
{
2020-11-23 00:45:06 +08:00
MessageBox.Show($"Unknow type for ({listenOn} -> {connectTo}).", "Fail", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
2020-09-24 18:06:57 +08:00
return;
2020-05-29 03:32:44 +08:00
}
2021-03-10 01:12:07 +08:00
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();
}
2020-12-09 21:19:58 +08:00
Close();
2020-05-29 03:32:44 +08:00
}
2020-12-09 21:19:58 +08:00
private void SetProxyForm_Load(object sender, EventArgs e)
2020-05-29 03:32:44 +08:00
{
2020-12-09 21:19:58 +08:00
Top = PortProxyGUI.Top + (PortProxyGUI.Height - Height) / 2;
Left = PortProxyGUI.Left + (PortProxyGUI.Width - Width) / 2;
2020-05-29 03:32:44 +08:00
}
2020-12-09 21:19:58 +08:00
private void SetProxyForm_FormClosing(object sender, FormClosingEventArgs e)
2020-05-29 03:32:44 +08:00
{
2020-12-09 21:19:58 +08:00
PortProxyGUI.SetProxyForm = null;
2020-05-29 03:32:44 +08:00
}
}
}