OCT 1. 修正INetworkManager接口对于重名多网卡处理问题
This commit is contained in:
parent
d2d647659a
commit
d5763b8c1f
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
@ -46,6 +46,9 @@
|
|||
this.menuControlService = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlSvrStart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlSvrStop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeartStart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeartStop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMainSet = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetModeShareNet = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetModeShareServer = new System.Windows.Forms.ToolStripMenuItem();
|
||||
|
@ -55,7 +58,6 @@
|
|||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.menuSetVPN = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetVPNPath = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetVPNCfgFiles = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuSetExitToTray = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMainHelp = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.statusMain = new System.Windows.Forms.StatusStrip();
|
||||
|
@ -66,13 +68,12 @@
|
|||
this.trapMenuShowMainWnd = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.trapMenuHideMain = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.trapMenuCfgFiles = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.trapMenuSysInterface = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.trapMenuExit = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeartStart = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlHeartStop = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlNetMode = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlNetModePrivate = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuControlNetModePublic = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.menuMain.SuspendLayout();
|
||||
this.trapMenuMain.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
@ -156,7 +157,8 @@
|
|||
this.menuControlSetCliParams,
|
||||
this.toolStripSeparator2,
|
||||
this.menuControlService,
|
||||
this.menuControlHeart});
|
||||
this.menuControlHeart,
|
||||
this.menuControlNetMode});
|
||||
this.menuControl.Name = "menuControl";
|
||||
this.menuControl.Size = new System.Drawing.Size(60, 21);
|
||||
this.menuControl.Text = "操作(&C)";
|
||||
|
@ -164,27 +166,27 @@
|
|||
// menuControlRefInterface
|
||||
//
|
||||
this.menuControlRefInterface.Name = "menuControlRefInterface";
|
||||
this.menuControlRefInterface.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlRefInterface.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlRefInterface.Text = "获取网络接口(&I)";
|
||||
this.menuControlRefInterface.Click += new System.EventHandler(this.menuControlRefInterface_Click);
|
||||
//
|
||||
// menuControlEnv
|
||||
//
|
||||
this.menuControlEnv.Name = "menuControlEnv";
|
||||
this.menuControlEnv.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlEnv.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlEnv.Text = "运行环境检测(&T)";
|
||||
//
|
||||
// menuControlSetCliParams
|
||||
//
|
||||
this.menuControlSetCliParams.Name = "menuControlSetCliParams";
|
||||
this.menuControlSetCliParams.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlSetCliParams.Text = "设置客户端参数";
|
||||
this.menuControlSetCliParams.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlSetCliParams.Text = "设置隧道参数(&N)";
|
||||
this.menuControlSetCliParams.Click += new System.EventHandler(this.menuControlSetCliParams_Click);
|
||||
//
|
||||
// toolStripSeparator2
|
||||
//
|
||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(177, 6);
|
||||
this.toolStripSeparator2.Size = new System.Drawing.Size(189, 6);
|
||||
//
|
||||
// menuControlService
|
||||
//
|
||||
|
@ -192,29 +194,52 @@
|
|||
this.menuControlSvrStart,
|
||||
this.menuControlSvrStop});
|
||||
this.menuControlService.Name = "menuControlService";
|
||||
this.menuControlService.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlService.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlService.Text = "隧道服务管理(&V)";
|
||||
//
|
||||
// menuControlSvrStart
|
||||
//
|
||||
this.menuControlSvrStart.Name = "menuControlSvrStart";
|
||||
this.menuControlSvrStart.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlSvrStart.Size = new System.Drawing.Size(124, 22);
|
||||
this.menuControlSvrStart.Text = "启动服务";
|
||||
this.menuControlSvrStart.Click += new System.EventHandler(this.menuControlSvrStart_Click);
|
||||
//
|
||||
// menuControlSvrStop
|
||||
//
|
||||
this.menuControlSvrStop.Name = "menuControlSvrStop";
|
||||
this.menuControlSvrStop.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlSvrStop.Size = new System.Drawing.Size(124, 22);
|
||||
this.menuControlSvrStop.Text = "停止服务";
|
||||
this.menuControlSvrStop.Click += new System.EventHandler(this.menuControlSvrStop_Click);
|
||||
//
|
||||
// menuControlHeart
|
||||
//
|
||||
this.menuControlHeart.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuControlHeartStart,
|
||||
this.menuControlHeartStop});
|
||||
this.menuControlHeart.Name = "menuControlHeart";
|
||||
this.menuControlHeart.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlHeart.Text = "心跳服务管理(&H)";
|
||||
//
|
||||
// menuControlHeartStart
|
||||
//
|
||||
this.menuControlHeartStart.Name = "menuControlHeartStart";
|
||||
this.menuControlHeartStart.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlHeartStart.Text = "启动心跳服务";
|
||||
this.menuControlHeartStart.Click += new System.EventHandler(this.menuControlHeartStart_Click);
|
||||
//
|
||||
// menuControlHeartStop
|
||||
//
|
||||
this.menuControlHeartStop.Name = "menuControlHeartStop";
|
||||
this.menuControlHeartStop.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlHeartStop.Text = "停止心跳服务";
|
||||
this.menuControlHeartStop.Click += new System.EventHandler(this.menuControlHeartStop_Click);
|
||||
//
|
||||
// menuMainSet
|
||||
//
|
||||
this.menuMainSet.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuSetMode,
|
||||
this.menuSetModeShareNet,
|
||||
this.menuSetModeShareServer,
|
||||
this.menuSetMode,
|
||||
this.toolStripSeparator1,
|
||||
this.menuSetVPN,
|
||||
this.menuSetExitToTray});
|
||||
|
@ -248,14 +273,14 @@
|
|||
this.menuSetModeClient.Checked = true;
|
||||
this.menuSetModeClient.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.menuSetModeClient.Name = "menuSetModeClient";
|
||||
this.menuSetModeClient.Size = new System.Drawing.Size(112, 22);
|
||||
this.menuSetModeClient.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuSetModeClient.Text = "客户端";
|
||||
this.menuSetModeClient.Click += new System.EventHandler(this.menuSetModeClient_Click);
|
||||
//
|
||||
// menuSetModeServer
|
||||
//
|
||||
this.menuSetModeServer.Name = "menuSetModeServer";
|
||||
this.menuSetModeServer.Size = new System.Drawing.Size(112, 22);
|
||||
this.menuSetModeServer.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuSetModeServer.Text = "服务端";
|
||||
this.menuSetModeServer.Click += new System.EventHandler(this.menuSetModeServer_Click);
|
||||
//
|
||||
|
@ -267,8 +292,7 @@
|
|||
// menuSetVPN
|
||||
//
|
||||
this.menuSetVPN.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuSetVPNPath,
|
||||
this.menuSetVPNCfgFiles});
|
||||
this.menuSetVPNPath});
|
||||
this.menuSetVPN.Name = "menuSetVPN";
|
||||
this.menuSetVPN.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuSetVPN.Text = "VPN";
|
||||
|
@ -276,16 +300,10 @@
|
|||
// menuSetVPNPath
|
||||
//
|
||||
this.menuSetVPNPath.Name = "menuSetVPNPath";
|
||||
this.menuSetVPNPath.Size = new System.Drawing.Size(153, 22);
|
||||
this.menuSetVPNPath.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuSetVPNPath.Text = "安装路径";
|
||||
this.menuSetVPNPath.Click += new System.EventHandler(this.menuSetVPNPath_Click);
|
||||
//
|
||||
// menuSetVPNCfgFiles
|
||||
//
|
||||
this.menuSetVPNCfgFiles.Name = "menuSetVPNCfgFiles";
|
||||
this.menuSetVPNCfgFiles.Size = new System.Drawing.Size(153, 22);
|
||||
this.menuSetVPNCfgFiles.Text = "VPN 配置文件";
|
||||
//
|
||||
// menuSetExitToTray
|
||||
//
|
||||
this.menuSetExitToTray.Checked = true;
|
||||
|
@ -336,79 +354,70 @@
|
|||
this.trapMenuShowMainWnd,
|
||||
this.trapMenuHideMain,
|
||||
this.toolStripSeparator5,
|
||||
this.trapMenuCfgFiles,
|
||||
this.trapMenuSysInterface,
|
||||
this.toolStripSeparator3,
|
||||
this.trapMenuExit});
|
||||
this.trapMenuMain.Name = "trapMenuMain";
|
||||
this.trapMenuMain.Size = new System.Drawing.Size(154, 126);
|
||||
this.trapMenuMain.Size = new System.Drawing.Size(181, 126);
|
||||
this.trapMenuMain.UseWaitCursor = true;
|
||||
//
|
||||
// trapMenuShowMainWnd
|
||||
//
|
||||
this.trapMenuShowMainWnd.Name = "trapMenuShowMainWnd";
|
||||
this.trapMenuShowMainWnd.Size = new System.Drawing.Size(153, 22);
|
||||
this.trapMenuShowMainWnd.Size = new System.Drawing.Size(180, 22);
|
||||
this.trapMenuShowMainWnd.Text = "显示主界面";
|
||||
this.trapMenuShowMainWnd.Click += new System.EventHandler(this.trapMenuShowMainWnd_Click);
|
||||
//
|
||||
// trapMenuHideMain
|
||||
//
|
||||
this.trapMenuHideMain.Name = "trapMenuHideMain";
|
||||
this.trapMenuHideMain.Size = new System.Drawing.Size(153, 22);
|
||||
this.trapMenuHideMain.Size = new System.Drawing.Size(180, 22);
|
||||
this.trapMenuHideMain.Text = "隐藏主界面";
|
||||
this.trapMenuHideMain.Click += new System.EventHandler(this.trapMenuHideMain_Click);
|
||||
//
|
||||
// toolStripSeparator5
|
||||
//
|
||||
this.toolStripSeparator5.Name = "toolStripSeparator5";
|
||||
this.toolStripSeparator5.Size = new System.Drawing.Size(150, 6);
|
||||
//
|
||||
// trapMenuCfgFiles
|
||||
//
|
||||
this.trapMenuCfgFiles.Name = "trapMenuCfgFiles";
|
||||
this.trapMenuCfgFiles.Size = new System.Drawing.Size(153, 22);
|
||||
this.trapMenuCfgFiles.Text = "VPN 配置文件";
|
||||
this.toolStripSeparator5.Size = new System.Drawing.Size(177, 6);
|
||||
//
|
||||
// trapMenuSysInterface
|
||||
//
|
||||
this.trapMenuSysInterface.Name = "trapMenuSysInterface";
|
||||
this.trapMenuSysInterface.Size = new System.Drawing.Size(153, 22);
|
||||
this.trapMenuSysInterface.Size = new System.Drawing.Size(180, 22);
|
||||
this.trapMenuSysInterface.Text = "共享网络";
|
||||
//
|
||||
// toolStripSeparator3
|
||||
//
|
||||
this.toolStripSeparator3.Name = "toolStripSeparator3";
|
||||
this.toolStripSeparator3.Size = new System.Drawing.Size(150, 6);
|
||||
this.toolStripSeparator3.Size = new System.Drawing.Size(177, 6);
|
||||
//
|
||||
// trapMenuExit
|
||||
//
|
||||
this.trapMenuExit.Name = "trapMenuExit";
|
||||
this.trapMenuExit.Size = new System.Drawing.Size(153, 22);
|
||||
this.trapMenuExit.Size = new System.Drawing.Size(180, 22);
|
||||
this.trapMenuExit.Text = "退出程序";
|
||||
this.trapMenuExit.Click += new System.EventHandler(this.trapMenuExit_Click);
|
||||
//
|
||||
// menuControlHeart
|
||||
// menuControlNetMode
|
||||
//
|
||||
this.menuControlHeart.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuControlHeartStart,
|
||||
this.menuControlHeartStop});
|
||||
this.menuControlHeart.Name = "menuControlHeart";
|
||||
this.menuControlHeart.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlHeart.Text = "心跳服务管理";
|
||||
this.menuControlNetMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.menuControlNetModePrivate,
|
||||
this.menuControlNetModePublic});
|
||||
this.menuControlNetMode.Name = "menuControlNetMode";
|
||||
this.menuControlNetMode.Size = new System.Drawing.Size(192, 22);
|
||||
this.menuControlNetMode.Text = "隧道网络模式设置(&M)";
|
||||
//
|
||||
// menuControlHeartStart
|
||||
// menuControlNetModePrivate
|
||||
//
|
||||
this.menuControlHeartStart.Name = "menuControlHeartStart";
|
||||
this.menuControlHeartStart.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlHeartStart.Text = "启动心跳服务";
|
||||
this.menuControlHeartStart.Click += new System.EventHandler(this.menuControlHeartStart_Click);
|
||||
this.menuControlNetModePrivate.Name = "menuControlNetModePrivate";
|
||||
this.menuControlNetModePrivate.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlNetModePrivate.Text = "专用网络 (Private)";
|
||||
//
|
||||
// menuControlHeartStop
|
||||
// menuControlNetModePublic
|
||||
//
|
||||
this.menuControlHeartStop.Name = "menuControlHeartStop";
|
||||
this.menuControlHeartStop.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlHeartStop.Text = "停止心跳服务";
|
||||
this.menuControlHeartStop.Click += new System.EventHandler(this.menuControlHeartStop_Click);
|
||||
this.menuControlNetModePublic.Name = "menuControlNetModePublic";
|
||||
this.menuControlNetModePublic.Size = new System.Drawing.Size(180, 22);
|
||||
this.menuControlNetModePublic.Text = "公共网络 (Public)";
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
|
@ -472,13 +481,14 @@
|
|||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator4;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
|
||||
private System.Windows.Forms.ToolStripMenuItem trapMenuSysInterface;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSetVPNCfgFiles;
|
||||
private System.Windows.Forms.ToolStripMenuItem trapMenuCfgFiles;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuSetModeShareServer;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlSetCliParams;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlHeart;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlHeartStart;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlHeartStop;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlNetMode;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlNetModePrivate;
|
||||
private System.Windows.Forms.ToolStripMenuItem menuControlNetModePublic;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ public partial class MainForm : Form
|
|||
var path = Environment.CurrentDirectory + "\\tunnelsdk_" +
|
||||
string.Format("{0:yyyyMMdd}", DateTime.Now) + ".log";
|
||||
NetTunnelLib.InitTunnelSDKLog(path, LogLevel.LOG_DEBUG);
|
||||
NetTunnelLib.TunnelSDKInitEnv(Environment.CurrentDirectory, "http://localhost:9276", menuSetModeServer.Checked);
|
||||
NetTunnelLib.TunnelSDKInitEnv(Environment.CurrentDirectory, "http://xajhuang.com:9276", menuSetModeServer.Checked);
|
||||
|
||||
GetCurrentNetCard();
|
||||
|
||||
|
@ -175,7 +175,7 @@ public partial class MainForm : Form
|
|||
{
|
||||
//test_uninstall_wg_server();
|
||||
|
||||
//test_get_network_info();
|
||||
test_get_network_info();
|
||||
//IntPtr pt = new IntPtr();
|
||||
//int size = 0;
|
||||
//var v = NetTunnelLib.GetUserConfigure2("admin", out pt, ref size);
|
||||
|
@ -318,24 +318,10 @@ public partial class MainForm : Form
|
|||
|
||||
GetCurrentWgCfgs(args.HashArgs["UserName"] as string);
|
||||
|
||||
WgCfgMenuItems wgMenu = new WgCfgMenuItems(_curFilePaths);
|
||||
WgCfgMenuItems wgPopMenu = new WgCfgMenuItems(_curFilePaths);
|
||||
ServerMenuItems svrMenu = new ServerMenuItems(_userConfig.vmList);
|
||||
|
||||
menuSetVPNCfgFiles.DropDownItems.Clear();
|
||||
trapMenuCfgFiles.DropDownItems.Clear();
|
||||
menuSetModeShareServer.DropDownItems.Clear();
|
||||
|
||||
foreach (var item in wgMenu.GetMenuItems())
|
||||
{
|
||||
menuSetVPNCfgFiles.DropDownItems.Add(item);
|
||||
}
|
||||
|
||||
foreach (var item in wgPopMenu.GetMenuItems())
|
||||
{
|
||||
trapMenuCfgFiles.DropDownItems.Add(item);
|
||||
}
|
||||
|
||||
foreach (var item in svrMenu.GetMenuItems())
|
||||
{
|
||||
menuSetModeShareServer.DropDownItems.Add(item);
|
||||
|
@ -370,6 +356,7 @@ public partial class MainForm : Form
|
|||
|
||||
private void menuControlSetCliParams_Click(object sender, EventArgs e)
|
||||
{
|
||||
int ret;
|
||||
var v = ServerMenuItems.GetSelectItemData();
|
||||
var c = NetCardMenuItems.GetSelectItemData();
|
||||
|
||||
|
@ -381,22 +368,39 @@ public partial class MainForm : Form
|
|||
MessageBox.Show("未选择需要连接的用户虚拟机");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
NetTunnelLib.ConnectServerControlService("http://" + v?.scgGateWay);
|
||||
}
|
||||
|
||||
if (c?.UUID.Length == 0)
|
||||
{
|
||||
MessageBox.Show("未选择需要共享的本地网络");
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
IPNetwork ipnetwork = IPNetwork.Parse(c?.IpAddr, c?.NetMask);
|
||||
//IPNetwork cliNetwork = IPNetwork.Parse(_userConfig.cliAddress);
|
||||
|
||||
//MessageBox.Show(ipnetwork.Value);
|
||||
|
||||
//NetTunnelLib.ConnectServerControlService("http://" + v?.scgGateWay);
|
||||
|
||||
ret = NetTunnelLib.RemoteCtrlSvrCfgUserTunnel(Int32.Parse(v?.vmId.ToString()), ipnetwork.Value);
|
||||
|
||||
//ret = NetTunnelLib.SetUserClientConfige(_userConfig.cliPublicKey, ipnetwork.Value,
|
||||
// cliNetwork.Network.ToString());
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
IPNetwork ipnetwork = IPNetwork.Parse(c?.IpAddr, c?.NetMask);
|
||||
IPNetwork cliNetwork = IPNetwork.Parse(_userConfig.cliAddress);
|
||||
NetTunnelLib.SetClientConfige(_userConfig.cliPublicKey, ipnetwork.Value, cliNetwork.Network.ToString());
|
||||
MessageBox.Show("SetTunnelConfigure Error: " + ret.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
//ret = NetTunnelLib.SetTunnelConfigure(_userConfig.cliPrivateKey, v?.svrPublicKey, v?.vmNetwork,
|
||||
// _userConfig.cliAddress, v?.scgGateWay);
|
||||
|
||||
//if (ret != 0)
|
||||
//{
|
||||
// MessageBox.Show("SetTunnelConfigure Error: " + ret.ToString());
|
||||
// return;
|
||||
//}
|
||||
}
|
||||
|
||||
private void menuControlSvrStart_Click(object sender, EventArgs e)
|
||||
|
@ -405,7 +409,16 @@ public partial class MainForm : Form
|
|||
|
||||
if (ret != 0)
|
||||
{
|
||||
MessageBox.Show("Error: " + ret.ToString());
|
||||
MessageBox.Show("RemoteWireGuardControl Error: " + ret.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
ret = NetTunnelLib.LocalWireGuardControl(true, true);
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
MessageBox.Show("LocalWireGuardControl Error: " + ret.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -415,16 +428,22 @@ public partial class MainForm : Form
|
|||
|
||||
if (ret != 0)
|
||||
{
|
||||
MessageBox.Show("Error: " + ret.ToString());
|
||||
MessageBox.Show("RemoteWireGuardControl Error: " + ret.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
ret = NetTunnelLib.LocalWireGuardControl(false);
|
||||
|
||||
if (ret != 0)
|
||||
{
|
||||
MessageBox.Show("LocalWireGuardControl Error: " + ret.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void menuControlHeartStart_Click(object sender, EventArgs e)
|
||||
{
|
||||
HeartCallBack cb = new HeartCallBack((string msg, uint tm) =>
|
||||
{
|
||||
Console.WriteLine(msg + tm.ToString());
|
||||
});
|
||||
HeartCallBack cb = new HeartCallBack((string msg, uint tm) => { Console.WriteLine(msg + tm.ToString()); });
|
||||
|
||||
var ret = NetTunnelLib.RemoteHeartControl(true, cb);
|
||||
|
||||
|
|
|
@ -96,7 +96,6 @@
|
|||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ServerMenuItems.cs" />
|
||||
<Compile Include="WgCfgMenuItems.cs" />
|
||||
<EmbeddedResource Include="LoginForm.resx">
|
||||
<DependentUpon>LoginForm.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
|
|
@ -47,6 +47,10 @@ public struct VirtualMathineConfig
|
|||
///< 用户服务端接入网关
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
||||
public string scgGateWay;
|
||||
|
||||
///< 用户服务端接入网关
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
||||
public string scgTunnelGw;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
|
@ -203,11 +207,17 @@ public class NetTunnelLib
|
|||
public static extern void ConnectServerControlService(String svrUrl);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int SetClientConfige(String cliPublicKey, String cliNetwork, String cliTunnelAddr);
|
||||
public static extern int RemoteCtrlSvrCfgUserTunnel(int vmid, String cliNetwork);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int SetTunnelConfigure(String cliPrivateKey, String svrPublicKey, String svrNetwork, String cliNetwork, String svrAddr);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int RemoteWireGuardControl(bool startOrStop);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int LocalWireGuardControl(bool startOrStop, bool checkPrivate = true);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int RemoteHeartControl(bool startOrStop, HeartCallBack cb);
|
||||
|
||||
|
|
|
@ -1,69 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace NetTunnelApp
|
||||
{
|
||||
internal class WgCfgMenuItems
|
||||
{
|
||||
private static string _selItems = "";
|
||||
|
||||
private List<ToolStripMenuItem> _menuItems = new List<ToolStripMenuItem>();
|
||||
|
||||
private static List<FilePath> _menuDataItems = new List<FilePath>();
|
||||
|
||||
public WgCfgMenuItems(List<FilePath> wgCfgArrays)
|
||||
{
|
||||
if (_menuItems.Count > 0)
|
||||
{
|
||||
_menuItems.Clear();
|
||||
}
|
||||
_menuDataItems.Clear();
|
||||
_menuDataItems.AddRange(wgCfgArrays);
|
||||
|
||||
foreach (var cfg in wgCfgArrays)
|
||||
{
|
||||
ToolStripMenuItem item = new ToolStripMenuItem();
|
||||
|
||||
item.Text = Path.GetFileName(cfg.CfgPath);
|
||||
item.Name = "filePath_" + cfg.CfgPath;
|
||||
item.Click += delegate(object sender, EventArgs e)
|
||||
{
|
||||
var control = (ToolStripMenuItem)sender;
|
||||
_selItems = control.Name;
|
||||
|
||||
foreach (var v in _menuItems)
|
||||
{
|
||||
v.Checked = (_selItems == v.Name);
|
||||
}
|
||||
};
|
||||
|
||||
item.Checked = cfg.curUsed > 0;
|
||||
_menuItems.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public List<ToolStripMenuItem> GetMenuItems()
|
||||
{
|
||||
return _menuItems;
|
||||
}
|
||||
|
||||
public static FilePath? GetSelectItemData()
|
||||
{
|
||||
foreach (var k in _menuDataItems)
|
||||
{
|
||||
if (_selItems == "filePath_" + k.CfgPath)
|
||||
{
|
||||
return k;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
#include "globalcfg.h"
|
||||
#include "httplib.h"
|
||||
#include "misc.h"
|
||||
#include "protocol.h"
|
||||
#include "usrerr.h"
|
||||
#include "user.h"
|
||||
|
@ -112,7 +111,7 @@ int CreateControlService(PUSER_SERVER_CONFIG pSvr) {
|
|||
ProtocolResponse<RspHeartParams> rsp;
|
||||
std::string json;
|
||||
|
||||
rsp.msgContent.errCode = ERR_SUCCESS;
|
||||
rsp.msgContent.errCode = ERR_SUCCESS;
|
||||
rsp.msgContent.errMessage = TEXT("OK");
|
||||
|
||||
if (aigc::JsonHelper::ObjectToJson(rsp, json)) {
|
||||
|
@ -174,8 +173,10 @@ int CreateControlService(PUSER_SERVER_CONFIG pSvr) {
|
|||
ProtocolRequest<ReqUserSetCliCfgParams> reqData;
|
||||
|
||||
if (aigc::JsonHelper::JsonToObject(reqData, req.body)) {
|
||||
int ret;
|
||||
bool isSvrStart = false;
|
||||
int ret;
|
||||
bool isSvrStart = false;
|
||||
ProtocolResponse<RspUserSetCliCfgParams> rsp;
|
||||
std::string json;
|
||||
|
||||
g_InterfaceMutex.lock();
|
||||
// Because of COM return CO_E_FIRST
|
||||
|
@ -232,14 +233,23 @@ int CreateControlService(PUSER_SERVER_CONFIG pSvr) {
|
|||
|
||||
// 设置路由表
|
||||
#endif
|
||||
// 返回成功
|
||||
HttpResponseError(res, ERR_SUCCESS, nullptr);
|
||||
// 返回当前隧道信息
|
||||
rsp.msgContent.errCode = ERR_SUCCESS;
|
||||
rsp.msgContent.errMessage = TEXT("OK");
|
||||
rsp.msgContent.svrNetwork = g_UserSvrCfg.svrAddress;
|
||||
|
||||
if (aigc::JsonHelper::ObjectToJson(rsp, json)) {
|
||||
res.set_content(json, TEXT("application/json"));
|
||||
} else {
|
||||
SPDLOG_ERROR(TEXT("ProtocolResponse<RspUserSetCliCfgParams> to json error"));
|
||||
HttpResponseError(res, ERR_JSON_CREATE, TEXT("ProtocolResponse<RspUserSetCliCfgParams> to json error"));
|
||||
}
|
||||
g_InterfaceMutex.unlock();
|
||||
}
|
||||
});
|
||||
|
||||
SPDLOG_DEBUG(TEXT("Start HTTP Service at {0}"), pSvr->svrListenPort);
|
||||
if (!g_httpServer.bind_to_port(TEXT("localhost"), pSvr->svrListenPort)) {
|
||||
if (!g_httpServer.bind_to_port(TEXT("0.0.0.0"), pSvr->svrListenPort)) {
|
||||
SPDLOG_ERROR(TEXT("Start HTTP Service at {0} error"), pSvr->svrListenPort);
|
||||
return -ERR_SOCKET_BIND_PORT;
|
||||
}
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
#include "tunnel.h"
|
||||
#include "usrerr.h"
|
||||
#include "globalcfg.h"
|
||||
#include "httplib.h"
|
||||
#include "misc.h"
|
||||
#include "network.h"
|
||||
#include "protocol.h"
|
||||
#include "user.h"
|
||||
|
||||
|
@ -13,16 +15,6 @@
|
|||
static HANDLE g_HeartTimerQueue = nullptr;
|
||||
static LPTUNNEL_HEART_ROUTINE g_lpHeartCb = nullptr;
|
||||
|
||||
/**
|
||||
* @brief 启动/停止 隧道控制服务心跳
|
||||
* @param isStart 启动/停止服务 TRUE 启动服务, FALSE 停止服务
|
||||
* @param lpHeartCbAddress 心跳服务回调函数 @see PTUNNEL_HEART_ROUTINE
|
||||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_CREATE_TIMER 创建定时器失败
|
||||
* - -ERR_DELETE_TIMER 删除定时器失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
int RemoteHeartControl(bool isStart, LPTUNNEL_HEART_ROUTINE lpHeartCbAddress) {
|
||||
if (isStart && lpHeartCbAddress == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("Input lpHeartCbAddress params nullptr"));
|
||||
|
@ -99,24 +91,192 @@ int RemoteWireGuardControl(bool isStart) {
|
|||
return ERR_SUCCESS;
|
||||
}
|
||||
|
||||
int SetClientConfige(const TCHAR *pCliPublicKey, const TCHAR *pCliNetwork, const TCHAR *pCliTunnelAddr) {
|
||||
int ret;
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> req;
|
||||
ProtocolResponse<ResponseStatus> rsp;
|
||||
int LocalWireGuardControl(bool isStart, bool setPrivateMode) {
|
||||
int ret;
|
||||
bool chkStatus = false;
|
||||
|
||||
req.msgContent.cliPublicKey = pCliPublicKey;
|
||||
req.msgContent.cliNetwork = pCliNetwork;
|
||||
req.msgContent.cliTunnelAddr = pCliTunnelAddr;
|
||||
// 判断先前是否启动过服务
|
||||
if ((ret = IsWireGuardServerRunning(GetGlobalCfgInfo()->userCfg.userName, &chkStatus)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Call IsWireGuardServerInstalled error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = ProtolPostMessage(SET_CLIENTCFG_PATH, &req, &rsp, false);
|
||||
if (chkStatus) {
|
||||
if ((ret = WireGuardUnInstallServerService(GetGlobalCfgInfo()->userCfg.userName)) != ERR_SUCCESS) {
|
||||
// 返回停止服务失败
|
||||
SPDLOG_ERROR(TEXT("Call WireGuardUnInstallServerService error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
if (isStart) {
|
||||
// 启动服务
|
||||
ret = WireGuardInstallDefaultServerService(true);
|
||||
if (ret != ERR_SUCCESS) {
|
||||
// 返回启动服务失败
|
||||
SPDLOG_ERROR(TEXT("Call WireGuardInstallDefaultServerService error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = GetNetConnectionNetworkCategory(GetGlobalCfgInfo()->userCfg.userName, &chkStatus)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Call GetNetConnectionNetworkCategory error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
#if 0
|
||||
// 检查网卡模式是否和设定值一致
|
||||
if (setPrivateMode != chkStatus) {
|
||||
if ((ret = SetNetConnectionNetworkCategory(GetGlobalCfgInfo()->userCfg.userName, setPrivateMode)) !=
|
||||
ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Call SetNetConnectionNetworkCategory error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
|
||||
int RemoteCtrlSvrCfgUserTunnel(int vmId, const TCHAR *pCliNetwork) {
|
||||
const PUSER_CONFIG pUser = &GetGlobalCfgInfo()->userCfg;
|
||||
const PUSER_CLIENT_CONFIG pUserCfg = &pUser->cliConfig;
|
||||
|
||||
for (int i = 0; i < pUserCfg->tolVM; i++) {
|
||||
if (pUserCfg->pVMConfig[i].vmId == vmId) {
|
||||
IP_INFO ipInfo = {};
|
||||
int ret;
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> req;
|
||||
ProtocolResponse<RspUserSetCliCfgParams> rsp;
|
||||
|
||||
req.msgContent.cliPublicKey = pUserCfg->cliPublicKey;
|
||||
req.msgContent.cliNetwork = pCliNetwork;
|
||||
GetIpV4InfoFromCIDR(pUserCfg->cliAddress, &ipInfo);
|
||||
req.msgContent.cliTunnelAddr = ipInfo.ip;
|
||||
|
||||
// 连接到服务端控制服务
|
||||
InitControlServer(pUserCfg->pVMConfig[i].scgGateWay);
|
||||
|
||||
// 发送本地配置参数到控制服务
|
||||
ret = ProtolPostMessage(SET_CLIENTCFG_PATH, &req, &rsp, false);
|
||||
|
||||
if (ret != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (rsp.msgContent.errCode != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Service Response error({0}): {1}"),
|
||||
rsp.msgContent.errCode,
|
||||
rsp.msgContent.errMessage);
|
||||
return rsp.msgContent.errCode;
|
||||
}
|
||||
|
||||
// 返回成功配置本地参数
|
||||
ret = SetTunnelConfigure(pUserCfg->cliPrivateKey,
|
||||
pUserCfg->pVMConfig[i].svrPublicKey,
|
||||
pUserCfg->pVMConfig[i].vmNetwork,
|
||||
pUserCfg->cliAddress,
|
||||
rsp.msgContent.svrNetwork.c_str(),
|
||||
pUserCfg->pVMConfig[i].scgTunnelGw);
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return -ERR_ITEM_UNEXISTS;
|
||||
}
|
||||
|
||||
int SetTunnelConfigure(const TCHAR *pCliPrivateKey,
|
||||
const TCHAR *pSvrPublicKey,
|
||||
const TCHAR *pSvrNetwork,
|
||||
const TCHAR *pCliNetwork,
|
||||
const TCHAR *pSvrTunnelAddr,
|
||||
const TCHAR *pSvrEndPoint) {
|
||||
int ret;
|
||||
bool isSvrStart = false;
|
||||
IP_INFO tunnelInfo = {};
|
||||
IP_INFO svrInfo = {};
|
||||
WGCLIENT_CONFIG cliCfg = {};
|
||||
|
||||
#pragma region
|
||||
|
||||
if (pCliPrivateKey == nullptr || lstrlen(pCliPrivateKey) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pCliPrivateKey error: {0}"), pCliPrivateKey);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pSvrPublicKey == nullptr || lstrlen(pSvrPublicKey) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pSvrPublicKey error: {0}"), pSvrPublicKey);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pSvrNetwork == nullptr || lstrlen(pSvrNetwork) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pSvrNetwork error: {0}"), pSvrNetwork);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pCliNetwork == nullptr || lstrlen(pCliNetwork) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pCliNetwork error: {0}"), pCliNetwork);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pSvrTunnelAddr == nullptr || lstrlen(pSvrTunnelAddr) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pSvrTunnelAddr error: {0}"), pSvrTunnelAddr);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pSvrEndPoint == nullptr || lstrlen(pSvrEndPoint) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pSvrEndPoint error: {0}"), pSvrEndPoint);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
#pragma endregion 参数检查
|
||||
|
||||
// 判断先前是否启动过服务
|
||||
if ((ret = IsWireGuardServerRunning(GetGlobalCfgInfo()->userCfg.userName, &isSvrStart)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("IsWireGuardServerInstalled error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// 停止先前隧道网络
|
||||
if (isSvrStart) {
|
||||
SPDLOG_DEBUG(TEXT("WireGuardUnInstallServerService: {0}"), GetGlobalCfgInfo()->userCfg.userName);
|
||||
if ((ret = WireGuardUnInstallServerService(GetGlobalCfgInfo()->userCfg.userName)) != ERR_SUCCESS) {
|
||||
// 返回停止服务失败
|
||||
SPDLOG_ERROR(TEXT("WireGuardUnInstallServerService error: {0}"), ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = GetIpV4InfoFromCIDR(pSvrTunnelAddr, &tunnelInfo);
|
||||
|
||||
if (ret != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (rsp.msgContent.errCode != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Service Response error({0}): {1}"), rsp.msgContent.errCode, rsp.msgContent.errMessage);
|
||||
return rsp.msgContent.errCode;
|
||||
ret = GetIpV4InfoFromCIDR(pSvrNetwork, &svrInfo);
|
||||
|
||||
if (ret != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
memset(&cliCfg, 0, sizeof(WGCLIENT_CONFIG));
|
||||
|
||||
StringCbCopy(cliCfg.Name, 64, GetGlobalCfgInfo()->userCfg.userName);
|
||||
StringCbCopy(cliCfg.PrivateKey, 64, pCliPrivateKey);
|
||||
StringCbCopy(cliCfg.Address, 32, pCliNetwork);
|
||||
StringCbCopy(cliCfg.SvrPubKey, 64, pSvrPublicKey);
|
||||
StringCbCopy(cliCfg.ServerURL, 256, pSvrEndPoint);
|
||||
StringCbPrintf(cliCfg.AllowNet,
|
||||
256,
|
||||
TEXT("%s/%d,%s/%d"),
|
||||
tunnelInfo.network,
|
||||
tunnelInfo.prefix,
|
||||
svrInfo.network,
|
||||
svrInfo.prefix);
|
||||
|
||||
ret = WireGuardCreateClientConfig(&cliCfg);
|
||||
|
||||
if (ret != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ERR_SUCCESS;
|
||||
|
@ -165,12 +325,10 @@ int GetUserServerConfigure(const TCHAR *pUserName, const TCHAR *pToken, PUSER_SE
|
|||
}
|
||||
|
||||
int GetUserClientConfigure(const TCHAR *pUserName, const TCHAR *pToken, PUSER_CLIENT_CONFIG *pCliCfg) {
|
||||
PVM_CFG pVm;
|
||||
PUSER_CONFIG pUser = &GetGlobalCfgInfo()->userCfg;
|
||||
PUSER_CLIENT_CONFIG pUserCfg = &pUser->cliConfig;
|
||||
TCHAR userPath[MAX_PATH];
|
||||
int ret;
|
||||
unsigned int memSize;
|
||||
|
||||
ProtocolRequest<ReqGetUserCfgParams> req;
|
||||
ProtocolResponse<RspUsrCliConfigParams> rsp;
|
||||
|
@ -209,30 +367,39 @@ int GetUserClientConfigure(const TCHAR *pUserName, const TCHAR *pToken, PUSER_CL
|
|||
return ret;
|
||||
}
|
||||
|
||||
memSize = sizeof(VM_CFG) * static_cast<UINT>(rsp.msgContent.vmConfig.size());
|
||||
pUserCfg->pVMConfig = static_cast<PVM_CFG>(CoTaskMemAlloc(memSize));
|
||||
if (pUserCfg->pVMConfig == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("Error allocating memory {0} bytes"), memSize);
|
||||
return -ERR_MALLOC_MEMORY;
|
||||
}
|
||||
|
||||
memset(pUserCfg->pVMConfig, 0, memSize);
|
||||
|
||||
pUserCfg->scgCtrlAppId = rsp.msgContent.scgCtrlAppId;
|
||||
pUserCfg->scgTunnelAppId = rsp.msgContent.scgTunnelAppId;
|
||||
StringCbCopy(pUserCfg->cliPrivateKey, 64, rsp.msgContent.cliPrivateKey.c_str());
|
||||
StringCbCopy(pUserCfg->cliPublicKey, 64, rsp.msgContent.cliPublicKey.c_str());
|
||||
StringCbCopy(pUserCfg->cliAddress, MAX_IP_LEN, rsp.msgContent.cliAddress.c_str());
|
||||
pUserCfg->tolVM = static_cast<int>(rsp.msgContent.vmConfig.size());
|
||||
|
||||
pVm = pUserCfg->pVMConfig;
|
||||
for (auto vm : rsp.msgContent.vmConfig) {
|
||||
pVm->vmId = vm.vmId;
|
||||
StringCbCopy(pVm->vmName, MAX_PATH, vm.vmName.c_str());
|
||||
StringCbCopy(pVm->svrPublicKey, 64, vm.svrPublicKey.c_str());
|
||||
StringCbCopy(pVm->vmNetwork, MAX_IP_LEN, vm.vmNetwork.c_str());
|
||||
StringCbCopy(pVm->scgGateWay, MAX_PATH, vm.scgGateway.c_str());
|
||||
pVm++;
|
||||
if (!rsp.msgContent.vmConfig.empty()) {
|
||||
PVM_CFG pVm;
|
||||
unsigned int memSize = sizeof(VM_CFG) * static_cast<UINT>(rsp.msgContent.vmConfig.size());
|
||||
pUserCfg->pVMConfig = static_cast<PVM_CFG>(CoTaskMemAlloc(memSize));
|
||||
if (pUserCfg->pVMConfig == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("Error allocating memory {0} bytes"), memSize);
|
||||
return -ERR_MALLOC_MEMORY;
|
||||
}
|
||||
|
||||
memset(pUserCfg->pVMConfig, 0, memSize);
|
||||
|
||||
pUserCfg->tolVM = static_cast<int>(rsp.msgContent.vmConfig.size());
|
||||
pVm = pUserCfg->pVMConfig;
|
||||
|
||||
for (auto vm : rsp.msgContent.vmConfig) {
|
||||
TCHAR tmpAddr[MAX_PATH];
|
||||
pVm->vmId = vm.vmId;
|
||||
StringCbCopy(pVm->vmName, MAX_PATH, vm.vmName.c_str());
|
||||
StringCbCopy(pVm->svrPublicKey, 64, vm.svrPublicKey.c_str());
|
||||
StringCbCopy(pVm->vmNetwork, MAX_IP_LEN, vm.vmNetwork.c_str());
|
||||
//StringCbCopy(pVm->scgGateWay, MAX_PATH, vm.scgGateway.c_str());
|
||||
StringCbPrintf(pVm->scgGateWay, MAX_PATH, TEXT("http://%s"), vm.scgGateway.c_str());
|
||||
StringCbCopy(tmpAddr, MAX_PATH, vm.scgGateway.c_str());
|
||||
httplib::Client cli(pVm->scgGateWay);
|
||||
StringCbPrintf(pVm->scgTunnelGw, MAX_PATH, TEXT("%s:%d"), cli.host().c_str(), cli.port() - 1);
|
||||
pVm++;
|
||||
}
|
||||
}
|
||||
|
||||
*pCliCfg = pUserCfg;
|
||||
|
|
|
@ -32,6 +32,7 @@ typedef struct {
|
|||
TCHAR svrPublicKey[64]; ///< 用户服务端公钥
|
||||
TCHAR vmNetwork[MAX_IP_LEN]; ///< 用户虚拟机网络地址
|
||||
TCHAR scgGateWay[MAX_PATH]; ///< 用户服务端接入网关
|
||||
TCHAR scgTunnelGw[MAX_PATH]; ///< 用户隧道接入网关
|
||||
} VM_CFG, *PVM_CFG;
|
||||
|
||||
/**
|
||||
|
@ -51,7 +52,7 @@ typedef struct {
|
|||
typedef struct {
|
||||
int svrListenPort; ///< 用户服务端监听端口
|
||||
TCHAR svrPrivateKey[64]; ///< 用户服务端公钥
|
||||
TCHAR svrAddress[MAX_IP_LEN]; ///< 用户服务端隧道IP地址
|
||||
TCHAR svrAddress[MAX_IP_LEN]; ///< 用户服务端隧道 IP 地址
|
||||
} USER_SERVER_CONFIG, *PUSER_SERVER_CONFIG;
|
||||
|
||||
/**
|
||||
|
|
|
@ -195,7 +195,7 @@ int FindFile(const TCHAR *pPath, PFILE_LIST pFileList, const bool exitWhenMatchO
|
|||
|
||||
memset(pFileList->pFilePath, 0, pathList.size() * sizeof(FILE_PATH));
|
||||
|
||||
for (size_t i = 0; i < pathList.size(); i++) {
|
||||
for (size_t i = 0; i < pathList.size(); i++) {
|
||||
StringCbCopy(pFileList->pFilePath[i].path, MAX_PATH, pathList.at(i));
|
||||
}
|
||||
|
||||
|
@ -284,6 +284,29 @@ int WideCharToTChar(const WCHAR *pWStr, TCHAR *pOutStr, int maxOutLen) {
|
|||
}
|
||||
|
||||
WideCharToMultiByte(CP_ACP, 0, pWStr, static_cast<int>(wcslen(pWStr)), pOutStr, len, nullptr, nullptr);
|
||||
pOutStr[len] = 0;
|
||||
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
int TCharToWideChar(const TCHAR *pTStr, WCHAR *pOutStr, int maxOutLen) {
|
||||
if constexpr (sizeof(TCHAR) == sizeof(WCHAR)) {
|
||||
if (lstrlen(pTStr) * sizeof(WCHAR) >= maxOutLen) {
|
||||
SPDLOG_ERROR(TEXT("Output buffer is to short: {0} need {1}"), maxOutLen, lstrlen(pTStr) * sizeof(WCHAR));
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
memcpy(pOutStr, pTStr, lstrlen(pTStr));
|
||||
} else {
|
||||
int len = MultiByteToWideChar(CP_ACP, 0, pTStr, lstrlen(pTStr), nullptr, 0);
|
||||
//int len = WideCharToMultiByte(CP_ACP, 0, pWStr, static_cast<int>(wcslen(pWStr)), nullptr, 0, nullptr, nullptr);
|
||||
|
||||
if (len >= maxOutLen) {
|
||||
SPDLOG_ERROR(TEXT("Output buffer is to short: {0} need {1}"), maxOutLen, len);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, pTStr, lstrlen(pTStr), pOutStr, len);
|
||||
pOutStr[len] = 0;
|
||||
|
||||
return ERR_SUCCESS;
|
||||
|
|
|
@ -20,14 +20,14 @@ typedef struct {
|
|||
* @brief IPv4 网络信息
|
||||
*/
|
||||
typedef struct {
|
||||
TCHAR *ip; ///< IP 地址
|
||||
TCHAR *network; ///< 网络地址
|
||||
TCHAR *broadcast; ///< 网络广播地址
|
||||
TCHAR *netmask; ///< 网络子网掩码
|
||||
TCHAR hosts[64]; ///< number of hosts in text
|
||||
unsigned int prefix; ///< 网络前缀
|
||||
TCHAR *hostmin; ///< 最小网络主机 IP
|
||||
TCHAR *hostmax; ///< 最大网络主机 IP
|
||||
TCHAR *ip; ///< IP 地址
|
||||
TCHAR *network; ///< 网络地址
|
||||
TCHAR *broadcast; ///< 网络广播地址
|
||||
TCHAR *netmask; ///< 网络子网掩码
|
||||
TCHAR hosts[64]; ///< number of hosts in text
|
||||
unsigned int prefix; ///< 网络前缀
|
||||
TCHAR *hostmin; ///< 最小网络主机 IP
|
||||
TCHAR *hostmax; ///< 最大网络主机 IP
|
||||
} IP_INFO, *PIP_INFO;
|
||||
|
||||
#ifdef __cplusplus // If used by C++ code,
|
||||
|
@ -67,7 +67,19 @@ int GetWindowsServiceStatus(const TCHAR *pSvrName, PDWORD pStatus);
|
|||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
int WideCharToTChar(const WCHAR *pWStr, TCHAR *pOutStr, int maxOutLen);
|
||||
int FindFile(const TCHAR *pPath, PFILE_LIST pFileList, const bool exitWhenMatchOne);
|
||||
|
||||
/**
|
||||
* @brief TCHAR 字符串 字符串转 Unicode 字符串
|
||||
* @param[in] pTStr 需要转换的 TCHAR 字符串
|
||||
* @param[out] pOutStr 转换后的 WCHAR 字符串
|
||||
* @param[in] maxOutLen pOutStr 最大字节数
|
||||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
int TCharToWideChar(const TCHAR *pTStr, WCHAR *pOutStr, int maxOutLen);
|
||||
|
||||
int FindFile(const TCHAR *pPath, PFILE_LIST pFileList, const bool exitWhenMatchOne);
|
||||
/**
|
||||
* @brief 计算 IPv4 网络信息
|
||||
* @param[in] pIpStr IPv4 地址
|
||||
|
@ -79,7 +91,7 @@ int FindFile(const TCHAR *pPath, PFILE_LIST pFileList, const bool exitWhenMat
|
|||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
int GetIpV4InfoFromNetmask(const TCHAR *pIpStr, const TCHAR *pNetmask, PIP_INFO pInfo);
|
||||
int GetIpV4InfoFromNetmask(const TCHAR *pIpStr, const TCHAR *pNetmask, PIP_INFO pInfo);
|
||||
/**
|
||||
* @brief 计算 IPv4 网络信息
|
||||
* @param[in] pIpStr IPv4 网络信息 '/' 分割,支持CIDR以及子网掩码 example: 192.168.1.32/24, 192.168.1.32/255.255.255.0
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <iostream>
|
||||
#include <ws2tcpip.h>
|
||||
#include <netlistmgr.h>
|
||||
#include <timeapi.h>
|
||||
|
||||
#include "globalcfg.h"
|
||||
#include "misc.h"
|
||||
|
@ -216,6 +217,114 @@ int GetInternetIfName(TCHAR ifName[MAX_NETCARD_NAME]) {
|
|||
return -ERR_ITEM_UNEXISTS;
|
||||
}
|
||||
|
||||
int GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID *pGuid) {
|
||||
int ret;
|
||||
|
||||
if (pInterfaceName == nullptr || lstrlen(pInterfaceName) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pInterfaceName params error: {0}"), pInterfaceName);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (lstrlen(g_NetAdapterInfo[0].NetCardUUID) == 0) {
|
||||
PNIC_CONTENT nic;
|
||||
int nItem;
|
||||
|
||||
if ((ret = GetAllNICInfo(&nic, &nItem)) != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &v : g_NetAdapterInfo) {
|
||||
if (StrCmp(pInterfaceName, v.NetCardName) == 0) {
|
||||
WCHAR strGuid[MAX_PATH];
|
||||
|
||||
if ((ret = TCharToWideChar(v.NetCardUUID, strGuid, MAX_PATH)) != ERR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (CLSIDFromString(strGuid, pGuid) != NOERROR) {
|
||||
return -ERR_MEMORY_STR;
|
||||
}
|
||||
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return -ERR_ITEM_UNEXISTS;
|
||||
}
|
||||
|
||||
int WaitNetAdapterConnected(const TCHAR *pInterfaceName, int timeOutOfMs) {
|
||||
INetworkListManager *pNLM;
|
||||
IEnumNetworkConnections *pEnumConns;
|
||||
INetwork *pINet;
|
||||
INetworkConnection *pIConn;
|
||||
HRESULT hr;
|
||||
GUID guid;
|
||||
const DWORD startTime = timeGetTime();
|
||||
|
||||
if (pInterfaceName == nullptr || lstrlen(pInterfaceName) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pInterfaceName params error: {0}"), pInterfaceName);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
hr = ::CoCreateInstance(CLSID_NetworkListManager,
|
||||
nullptr,
|
||||
CLSCTX_ALL,
|
||||
IID_INetworkListManager,
|
||||
reinterpret_cast<void **>(&pNLM));
|
||||
|
||||
if (hr != S_OK || pNLM == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("CoCreateInstance NetworkListManager failed: {0}."), hr);
|
||||
return -ERR_CREATE_COMMOBJECT;
|
||||
}
|
||||
|
||||
do {
|
||||
|
||||
hr = pNLM->GetNetworkConnections(&pEnumConns);
|
||||
|
||||
if (hr != S_OK || pEnumConns == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("NetworkListManager GetNetworks failed: {0}."), hr);
|
||||
continue;
|
||||
}
|
||||
|
||||
while (S_OK == pEnumConns->Next(1, &pIConn, nullptr)) {
|
||||
GUID adpterGuid;
|
||||
pIConn->GetAdapterId(&adpterGuid);
|
||||
|
||||
pIConn->GetNetwork(&pINet);
|
||||
|
||||
if (pINet) {
|
||||
BSTR sName = {};
|
||||
TCHAR ifName[MAX_PATH];
|
||||
|
||||
pINet->GetName(&sName);
|
||||
|
||||
if (WideCharToTChar(sName, ifName, MAX_PATH) != ERR_SUCCESS) {
|
||||
SysFreeString(sName);
|
||||
return -ERR_MEMORY_STR;
|
||||
}
|
||||
|
||||
SysFreeString(sName);
|
||||
|
||||
if (StrNCmp(pInterfaceName, ifName, lstrlen(pInterfaceName)) == 0) {
|
||||
if (GetInterfaceGUIDByName(pInterfaceName, &guid) != ERR_SUCCESS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (memcmp(&adpterGuid, &guid, sizeof(GUID)) == 0) {
|
||||
SPDLOG_DEBUG(TEXT("Interface {0} network connected."), pInterfaceName);
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Sleep(1000);
|
||||
} while (timeGetTime() - startTime <= static_cast<DWORD>(timeOutOfMs));
|
||||
|
||||
return -ERR_SYS_TIMEOUT;
|
||||
}
|
||||
|
||||
int GetAllNICInfo(PNIC_CONTENT *pInfo, int *pItemCounts) {
|
||||
PNIC_CONTENT pNic;
|
||||
PIP_ADAPTER_INFO pAdapterInfo;
|
||||
|
@ -425,10 +534,14 @@ int SetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, const bool isPr
|
|||
}
|
||||
|
||||
int GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivate) {
|
||||
INetworkListManager *pNLM;
|
||||
IEnumNetworks *pEnumNetworks;
|
||||
INetwork *pINet;
|
||||
HRESULT hr;
|
||||
INetworkListManager *pNLM;
|
||||
//IEnumNetworks *pEnumNetworks;
|
||||
IEnumNetworkConnections *pEnumConns;
|
||||
INetwork *pINet;
|
||||
INetworkConnection *pIConn;
|
||||
HRESULT hr;
|
||||
GUID guid;
|
||||
int ret;
|
||||
|
||||
if (pInterfaceName == nullptr || lstrlen(pInterfaceName) == 0) {
|
||||
SPDLOG_ERROR(TEXT("Input pInterfaceName params error: {0}"), pInterfaceName);
|
||||
|
@ -440,6 +553,11 @@ int GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivat
|
|||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if ((ret = GetInterfaceGUIDByName(pInterfaceName, &guid)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR(TEXT("Get NetCard [{0}] GUID error: {1}"), pInterfaceName, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
hr = ::CoCreateInstance(CLSID_NetworkListManager,
|
||||
nullptr,
|
||||
CLSCTX_ALL,
|
||||
|
@ -451,33 +569,112 @@ int GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivat
|
|||
return -ERR_CREATE_COMMOBJECT;
|
||||
}
|
||||
|
||||
#if 0
|
||||
hr = pNLM->GetNetworks(NLM_ENUM_NETWORK_ALL, &pEnumNetworks);
|
||||
|
||||
if (hr != S_OK || pEnumNetworks == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("NetworkListManager GetNetworks failed: {0}."), hr);
|
||||
return -ERR_CREATE_COMMOBJECT;
|
||||
}
|
||||
|
||||
|
||||
while (S_OK == pEnumNetworks->Next(1, &pINet, nullptr)) {
|
||||
BSTR sName = {};
|
||||
TCHAR ifName[MAX_PATH];
|
||||
BSTR sName = {};
|
||||
WCHAR wName[MAX_PATH];
|
||||
TCHAR ifName[MAX_PATH];
|
||||
TCHAR guidName[MAX_PATH];
|
||||
NLM_NETWORK_CATEGORY cat;
|
||||
GUID netGuid;
|
||||
|
||||
pINet->GetName(&sName);
|
||||
|
||||
if (WideCharToTChar(sName, ifName, MAX_PATH) != ERR_SUCCESS) {
|
||||
SysFreeString(sName);
|
||||
return -ERR_MEMORY_STR;
|
||||
}
|
||||
|
||||
SysFreeString(sName);
|
||||
pINet->GetCategory(&cat);
|
||||
pINet->GetNetworkId(&netGuid);
|
||||
|
||||
if (StrCmp(pInterfaceName, ifName) == 0) {
|
||||
NLM_NETWORK_CATEGORY cat;
|
||||
pINet->GetCategory(&cat);
|
||||
StringFromGUID2(netGuid, wName, MAX_PATH);
|
||||
|
||||
if (WideCharToTChar(wName, guidName, MAX_PATH) != ERR_SUCCESS) {
|
||||
return -ERR_MEMORY_STR;
|
||||
}
|
||||
|
||||
//SPDLOG_DEBUG(TEXT("[{3}]:{0} --> {1} --> {2}"), pInterfaceName, ifName, guidName, i++);
|
||||
|
||||
if (memcmp(&netGuid, &guid, sizeof(GUID)) == 0) {
|
||||
*pIsPrivate = (cat == NLM_NETWORK_CATEGORY_PRIVATE) ? true : false;
|
||||
SPDLOG_DEBUG(TEXT("**** {0} category {1}"), pInterfaceName, *pIsPrivate);
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
|
||||
//SPDLOG_DEBUG(TEXT("++ {0} --> {1}, connect {2}"), ifName, static_cast<int>(cat), static_cast<int>(conn));
|
||||
|
||||
if (StrNCmp(pInterfaceName, ifName, lstrlen(pInterfaceName)) == 0) {
|
||||
SPDLOG_DEBUG(TEXT("++ {0} --> {1} --> {2}"), pInterfaceName, ifName, guidName);
|
||||
/* pINet->GetNetworkConnections(&pEnumConns);
|
||||
|
||||
if (pEnumConns) {
|
||||
while (S_OK == pEnumConns->Next(1, &pIConn, nullptr)) {
|
||||
GUID adpterGuid, connGuid;
|
||||
WCHAR aGuid[MAX_PATH];
|
||||
WCHAR cGuid[MAX_PATH];
|
||||
TCHAR strAGuid[MAX_PATH];
|
||||
TCHAR strCGuid[MAX_PATH];
|
||||
|
||||
pIConn->GetAdapterId(&adpterGuid);
|
||||
pIConn->GetConnectionId(&connGuid);
|
||||
|
||||
StringFromGUID2(adpterGuid, aGuid, MAX_PATH);
|
||||
StringFromGUID2(connGuid, cGuid, MAX_PATH);
|
||||
|
||||
WideCharToTChar(aGuid, strAGuid, MAX_PATH);
|
||||
WideCharToTChar(cGuid, strCGuid, MAX_PATH);
|
||||
|
||||
SPDLOG_DEBUG(TEXT("--AdapterId: {0}, ConnectionId: {1}"), strAGuid, strCGuid);
|
||||
}
|
||||
SPDLOG_ERROR(TEXT("Exit ........"));
|
||||
} else {
|
||||
SPDLOG_ERROR(TEXT("----------------------------------------------------- empty"));
|
||||
}*/
|
||||
}
|
||||
/*if (StrCmp(TEXT("admin 3"), ifName) == 0) {
|
||||
BSTR dName = {};
|
||||
pINet->GetDescription(&dName);
|
||||
SPDLOG_DEBUG(TEXT("++ {0} --> {1} --> {2}"), pInterfaceName, ifName, guidName);
|
||||
}*/
|
||||
//if (StrCmp(pInterfaceName, ifName) == 0) {
|
||||
// //NLM_NETWORK_CATEGORY cat;
|
||||
// //pINet->GetCategory(&cat);
|
||||
|
||||
// *pIsPrivate = (cat == NLM_NETWORK_CATEGORY_PRIVATE) ? true : false;
|
||||
// return ERR_SUCCESS;
|
||||
//}
|
||||
}
|
||||
#endif
|
||||
|
||||
hr = pNLM->GetNetworkConnections(&pEnumConns);
|
||||
|
||||
if (hr != S_OK || pEnumConns == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("NetworkListManager GetNetworks failed: {0}."), hr);
|
||||
return -ERR_CREATE_COMMOBJECT;
|
||||
}
|
||||
|
||||
while (S_OK == pEnumConns->Next(1, &pIConn, nullptr)) {
|
||||
GUID adpterGuid;
|
||||
pIConn->GetNetwork(&pINet);
|
||||
pIConn->GetAdapterId(&adpterGuid);
|
||||
|
||||
if (pINet) {
|
||||
if (memcmp(&adpterGuid, &guid, sizeof(GUID)) == 0) {
|
||||
NLM_NETWORK_CATEGORY cat;
|
||||
pINet->GetCategory(&cat);
|
||||
*pIsPrivate = (cat == NLM_NETWORK_CATEGORY_PRIVATE) ? true : false;
|
||||
SPDLOG_DEBUG(TEXT("**** {0} category {1}"), pInterfaceName, *pIsPrivate);
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -ERR_ITEM_UNEXISTS;
|
||||
|
|
|
@ -36,7 +36,7 @@ extern "C" {
|
|||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
TUNNEL_API int __cdecl GetAllNICInfo(PNIC_CONTENT* pInfo, int *pItemCounts);
|
||||
TUNNEL_API int __cdecl GetAllNICInfo(PNIC_CONTENT *pInfo, int *pItemCounts);
|
||||
|
||||
/**
|
||||
* @brief 获取当前 Internet 网卡名
|
||||
|
@ -61,6 +61,21 @@ TUNNEL_API int __cdecl GetInternetIfName(TCHAR ifName[MAX_NETCARD_NAME]);
|
|||
*/
|
||||
TUNNEL_API int __cdecl GetInterfaceNameByGUID(const TCHAR *pGUID, TCHAR ifName[MAX_NETCARD_NAME]);
|
||||
|
||||
/**
|
||||
* @brief 根据网卡名获取网卡 GUID
|
||||
* @param[in] pInterfaceName 网卡名称
|
||||
* @param[out] pGuid 网卡 GUID
|
||||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_ITEM_UNEXISTS 网卡不存在
|
||||
* - -ERR_MEMORY_STR 字符串转 GUID 结构体失败
|
||||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
TUNNEL_API int __cdecl GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID *pGuid);
|
||||
|
||||
TUNNEL_API int __cdecl WaitNetAdapterConnected(const TCHAR *pInterfaceName, int timeOutOfMs);
|
||||
|
||||
/**
|
||||
* @brief 判断当前网络适配器是否拥有 Internet 连接
|
||||
* @param[in] ifIndex 网卡适配器索引
|
||||
|
@ -74,6 +89,22 @@ TUNNEL_API int __cdecl GetInterfaceNameByGUID(const TCHAR *pGUID, TCHAR ifName[M
|
|||
*/
|
||||
TUNNEL_API int __cdecl IsInternetConnectAdapter(int ifIndex, bool *pRet);
|
||||
|
||||
/**
|
||||
* @brief 获取网卡 NetworkCategory 是否设置为 Private 模式
|
||||
* @param[in] pInterfaceName 网卡名称
|
||||
* @param[out] pIsPrivate 网卡属性
|
||||
* - TRUE Private 模式
|
||||
* - FALSE Public 模式
|
||||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败
|
||||
* - -ERR_SYS_CALL 调用 COM 接口失败
|
||||
* - -ERR_ITEM_UNEXISTS 当前网络接口不存在不存在
|
||||
* - -ERR_MEMORY_STR 字符集转换失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
TUNNEL_API int __cdecl GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivate);
|
||||
|
||||
/**
|
||||
* @brief 启动/停止 Windows 网络共享服务
|
||||
* @param[in] pInterfaceName pInterfaceName 网卡名称
|
||||
|
@ -137,15 +168,6 @@ NETWORK_API int __cdecl SetNetConnectionNetworkCategory(const TCHAR *pInterfaceN
|
|||
*/
|
||||
NETWORK_API int __cdecl AddRouteTable(int ifIndex, const char *pIP, const char *pMask, const char *pGateway);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* @brief 获取Windows Hyper-V 虚拟机状态, 必须开启后才能开启NAT转发功能
|
||||
|
|
|
@ -7,13 +7,26 @@
|
|||
#include "httplib.h"
|
||||
#include "usrerr.h"
|
||||
|
||||
#include <strsafe.h>
|
||||
|
||||
#define HTTP_JSON_CONTENT TEXT("application/json")
|
||||
|
||||
static httplib::Client *g_httpCtx = nullptr;
|
||||
static httplib::Client *g_tunnelHttpCtx = nullptr;
|
||||
|
||||
int InitControlServer(const TCHAR *pUserSvrUrl) {
|
||||
const PUSER_CONFIG pUser = &GetGlobalCfgInfo()->userCfg;
|
||||
PUSER_SERVER_CONFIG pUserCfg = &pUser->svrConfig;
|
||||
|
||||
if (g_tunnelHttpCtx) {
|
||||
delete g_tunnelHttpCtx;
|
||||
g_tunnelHttpCtx = nullptr;
|
||||
}
|
||||
|
||||
g_tunnelHttpCtx = new httplib::Client(pUserSvrUrl);
|
||||
|
||||
SPDLOG_DEBUG(TEXT("Connect to Tunnel Control Service: {0}"), pUserSvrUrl);
|
||||
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -139,10 +152,10 @@ template int ProtolPostMessage(const TCHAR *pUrlPath
|
|||
ProtocolResponse<RspUsrCliConfigParams> *pRsp,
|
||||
bool platformServer);
|
||||
|
||||
template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> *pReq,
|
||||
ProtocolResponse<ResponseStatus> *pRsp,
|
||||
bool platformServer);
|
||||
template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> *pReq,
|
||||
ProtocolResponse<RspUserSetCliCfgParams> *pRsp,
|
||||
bool platformServer);
|
||||
|
||||
template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqStartTunnelParams> *pReq,
|
||||
|
|
|
@ -35,6 +35,12 @@ public:
|
|||
|
||||
class RspUserSevrCfgParams {
|
||||
public:
|
||||
RspUserSevrCfgParams() {
|
||||
this->svrAddress = TEXT("");
|
||||
this->svrListenPort = 0;
|
||||
this->svrPrivateKey = TEXT("");
|
||||
}
|
||||
|
||||
int svrListenPort;
|
||||
std::string svrPrivateKey;
|
||||
std::string svrAddress;
|
||||
|
@ -57,8 +63,24 @@ public:
|
|||
AIGC_JSON_HELPER(cliPublicKey, cliNetwork, cliTunnelAddr)
|
||||
};
|
||||
|
||||
class RspUserSetCliCfgParams : public ResponseStatus {
|
||||
public:
|
||||
std::string svrNetwork;
|
||||
|
||||
AIGC_JSON_HELPER(svrNetwork)
|
||||
AIGC_JSON_HELPER_BASE((ResponseStatus *)this)
|
||||
};
|
||||
|
||||
class VitrualMathineCfg {
|
||||
public:
|
||||
VitrualMathineCfg() {
|
||||
this->vmId = 0;
|
||||
this->vmName = TEXT("");
|
||||
this->scgGateway = TEXT("");
|
||||
this->vmNetwork = TEXT("");
|
||||
this->svrPublicKey = TEXT("");
|
||||
}
|
||||
|
||||
int vmId;
|
||||
std::string vmName;
|
||||
std::string svrPublicKey;
|
||||
|
@ -89,6 +111,22 @@ public:
|
|||
|
||||
int InitControlServer(const TCHAR *pUserSvrUrl);
|
||||
|
||||
/**
|
||||
* @brief 调用 RESTful POST 接口并获取服务端返回数据
|
||||
* @param[in] pUrlPath 服务端 URL 路径
|
||||
* @param[in] pReq 请求消息
|
||||
* @param[in] pRsp 返回消息
|
||||
* @param[in] platformServer 访问平台还是访问控制服务
|
||||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_SYSTEM_UNINITIALIZE 服务端URL未初始化
|
||||
* - -ERR_JSON_CREATE 创建 JSON 字符串失败
|
||||
* - -ERR_HTTP_POST_DATA 调用 POST 方法失败
|
||||
* - -ERR_HTTP_SERVER_RSP 服务端返回失败(非200)
|
||||
* - -ERR_READ_FILE 服务端返回空数据
|
||||
* - -ERR_JSON_DECODE 解析 JSON 数据失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
template<class T1, class T2>
|
||||
int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<T1> *pReq,
|
||||
|
@ -105,10 +143,10 @@ extern template int ProtolPostMessage(const TCHAR *p
|
|||
ProtocolResponse<RspUsrCliConfigParams> *pRsp,
|
||||
bool platformServer);
|
||||
|
||||
extern template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> *pReq,
|
||||
ProtocolResponse<ResponseStatus> *pRsp,
|
||||
bool platformServer);
|
||||
extern template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqUserSetCliCfgParams> *pReq,
|
||||
ProtocolResponse<RspUserSetCliCfgParams> *pRsp,
|
||||
bool platformServer);
|
||||
|
||||
extern template int ProtolPostMessage(const TCHAR *pUrlPath,
|
||||
ProtocolRequest<ReqStartTunnelParams> *pReq,
|
||||
|
|
|
@ -307,7 +307,8 @@ TUNNEL_API int __cdecl CalcFileHash(const HASH_TYPE type, const TCHAR *pPath, TC
|
|||
|
||||
//+++++++++++++++++++++++++++++++++++++++++Temp Interface
|
||||
|
||||
TUNNEL_API int __cdecl ProtoGetUserConfigure(const TCHAR *pUser, const TCHAR *pToken);
|
||||
//TUNNEL_API int __cdecl ProtoGetUserConfigure(const TCHAR *pUser, const TCHAR *pToken);
|
||||
//TUNNEL_API const TCHAR* __cdecl GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID* pGuid);
|
||||
//------------------------------------------End Temp Interface
|
||||
#if 0
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#define USERMANAGER_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
|
||||
#define HEART_PERIOD_MS (3000)
|
||||
typedef void (*PTUNNEL_HEART_ROUTINE)(const TCHAR *pMessage, unsigned int timeStampOfSeconds);
|
||||
typedef PTUNNEL_HEART_ROUTINE LPTUNNEL_HEART_ROUTINE;
|
||||
|
@ -20,7 +19,6 @@ typedef struct {
|
|||
TCHAR CfgPath[260]; ///< 配置文件路径
|
||||
} USER_CFGFILE, *PUSER_CFGFILE;
|
||||
|
||||
|
||||
#ifdef __cplusplus // If used by C++ code,
|
||||
extern "C" {
|
||||
// we need to export the C interface
|
||||
|
@ -52,23 +50,49 @@ USERMANAGER_API int __cdecl CreateControlService(PUSER_SERVER_CONFIG pSvr);
|
|||
USERMANAGER_API int __cdecl StopControlService();
|
||||
|
||||
/**
|
||||
* @brief 设置远程云电脑中的 WireGuard 隧道客户端相关配置
|
||||
* @param[in] pCliPublicKey 客户端公钥
|
||||
* @param[in] pCliNetwork 客户端共享网络
|
||||
* @param[in] pCliTunnelAddr 客户端隧道 IP 地址
|
||||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* @brief 连接远程控制服务配置隧道参数
|
||||
* @param[in] vmId 需要连接的虚拟机ID编号
|
||||
* @param[in] pCliNetwork 需要共享的本地网络地址
|
||||
* @return 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_SYSTEM_UNINITIALIZE 未初始化远程服务 URL 地址
|
||||
* - -ERR_CREATE_FILE 创建用户配置目录失败
|
||||
* - -ERR_HTTP_POST_DATA POST 数据到服务端失败
|
||||
* - -ERR_HTTP_SERVER_RSP HTTP 服务器返回错误
|
||||
* - -ERR_READ_FILE 服务端未返回正确的消息
|
||||
* - -ERR_JSON_DECODE JSON 字符串解码失败
|
||||
* - -ERR_SYSTEM_UNINITIALIZE 服务端参数未初始化
|
||||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - -ERR_OPEN_FILE 打开文件失败
|
||||
* - -ERR_MEMORY_STR 字符串处理失败
|
||||
* - -ERR_UN_SUPPORT 不支持的格式转换
|
||||
* - -ERR_JSON_CREATE 创建 JSON 字符串失败
|
||||
* - -ERR_HTTP_POST_DATA 调用 POST 方法失败
|
||||
* - -ERR_HTTP_SERVER_RSP 服务端返回失败(非200)
|
||||
* - -ERR_READ_FILE 服务端返回空数据
|
||||
* - -ERR_JSON_DECODE 解析 JSON 数据失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
USERMANAGER_API int __cdecl SetClientConfige(const TCHAR *pCliPublicKey,
|
||||
const TCHAR *pCliNetwork,
|
||||
const TCHAR *pCliTunnelAddr);
|
||||
USERMANAGER_API int __cdecl RemoteCtrlSvrCfgUserTunnel(int vmId, const TCHAR *pCliNetwork);
|
||||
|
||||
/**
|
||||
* @brief 设置本地 WireGuard 隧道配置
|
||||
* @param[in] pCliPrivateKey 隧道私钥
|
||||
* @param[in] pSvrPublicKey 隧道服务端公钥
|
||||
* @param[in] pSvrNetwork 可访问隧道服务的云电脑网络
|
||||
* @param[in] pCliNetwork 客户端共享网络地址
|
||||
* @param[in] pSvrTunnelAddr 服务端隧道网络
|
||||
* @param[in] pSvrEndPoint 隧道服务端接入地址
|
||||
* @return 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_SYSTEM_UNINITIALIZE 服务端参数未初始化
|
||||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - -ERR_OPEN_FILE 打开文件失败
|
||||
* - -ERR_MEMORY_STR 字符串处理失败
|
||||
* - -ERR_UN_SUPPORT 不支持的格式转换
|
||||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
USERMANAGER_API int __cdecl SetTunnelConfigure(const TCHAR *pCliPrivateKey,
|
||||
const TCHAR *pSvrPublicKey,
|
||||
const TCHAR *pSvrNetwork,
|
||||
const TCHAR *pCliNetwork,
|
||||
const TCHAR *pSvrTunnelAddr,
|
||||
const TCHAR *pSvrEndPoint);
|
||||
|
||||
/**
|
||||
* @brief 启动/停止 隧道控制服务心跳
|
||||
|
@ -97,6 +121,17 @@ USERMANAGER_API int __cdecl RemoteHeartControl(bool isStart, LPTUNNEL_HEART_ROUT
|
|||
*/
|
||||
USERMANAGER_API int __cdecl RemoteWireGuardControl(bool isStart);
|
||||
|
||||
/**
|
||||
* @brief 启动/停止 本地 WireGuard 隧道服务
|
||||
* @param[in] isStart 启动/停止服务 TRUE 启动服务, FALSE 停止服务
|
||||
* @param[in] setPrivateMode 是否设置网卡工作模式为 专用网络模式(Private)
|
||||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||||
* - -ERR_NET_CATEGORY_MODE 网卡工作模式错误
|
||||
* - ERR_SUCCESS 成功
|
||||
*/
|
||||
USERMANAGER_API int __cdecl LocalWireGuardControl(bool isStart, bool setPrivateMode);
|
||||
|
||||
/**
|
||||
* @brief 获取用户服务端配置信息
|
||||
* @param[in] pUserName 用户名
|
||||
|
|
|
@ -12,6 +12,7 @@ enum USER_ERRNO {
|
|||
ERR_ITEM_UNEXISTS, ///< 该内容不存在
|
||||
ERR_SYS_INIT, ///< 系统中断
|
||||
ERR_SYS_CALL, ///< 系统调用
|
||||
ERR_SYS_TIMEOUT, ///< 系统超时
|
||||
ERR_SYSTEM_UNINITIALIZE, ///< 系统未初始化
|
||||
ERR_CREATE_FILE, ///< 创建文件/目录失败
|
||||
ERR_OPEN_FILE, ///< 打开文件失败
|
||||
|
@ -40,6 +41,7 @@ enum USER_ERRNO {
|
|||
ERR_BCRYPT_HASHDATA, ///< 计算 Hash 数据失败
|
||||
ERR_BCRYPT_FINISHHASH, ///< 计算 Hash 结果失败
|
||||
ERR_NET_UNCONNECT = 100, ///< 网络未连接
|
||||
ERR_NET_CATEGORY_MODE, ///< 网络工作模式
|
||||
ERR_GET_IPFOWARDTBL = 200, ///< 获取系统 IP 转发表失败
|
||||
ERR_CREATE_COMMOBJECT = 300, ///< 创建 COM 对象失败
|
||||
ERR_JSON_CREATE = 400, ///< 创建 JSON 对象失败
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "network.h"
|
||||
|
||||
#pragma comment(lib, "Shlwapi.lib")
|
||||
#pragma comment(lib, "Winmm.lib")
|
||||
|
||||
#define WG_NIC_DISCRIPT TEXT("WireGuard Tunnel")
|
||||
|
||||
|
@ -40,8 +41,13 @@ int WireGuardInstallDefaultServerService(bool bInstall) {
|
|||
if (lstrlen(cfgVal) > 0) {
|
||||
if (PathFileExists(cfgVal)) {
|
||||
TCHAR cmdBuf[MAX_PATH];
|
||||
TCHAR svrName[MAX_PATH];
|
||||
int ret;
|
||||
|
||||
StringCbCopy(svrName, MAX_PATH, cfgVal);
|
||||
PathStripPath(svrName);
|
||||
PathRemoveExtension(svrName);
|
||||
|
||||
if (bInstall) {
|
||||
// 安装服务
|
||||
StringCbPrintf(cmdBuf,
|
||||
|
@ -51,11 +57,6 @@ int WireGuardInstallDefaultServerService(bool bInstall) {
|
|||
cfgVal);
|
||||
} else {
|
||||
// 卸载服务
|
||||
TCHAR svrName[MAX_PATH];
|
||||
|
||||
StringCbCopy(svrName, MAX_PATH, cfgVal);
|
||||
PathStripPath(svrName);
|
||||
PathRemoveExtension(svrName);
|
||||
|
||||
StringCbPrintf(cmdBuf,
|
||||
MAX_PATH,
|
||||
|
@ -71,7 +72,11 @@ int WireGuardInstallDefaultServerService(bool bInstall) {
|
|||
|
||||
SPDLOG_DEBUG(TEXT("Run command [{0}]"), cmdBuf);
|
||||
|
||||
return ERR_SUCCESS;
|
||||
if (bInstall) {
|
||||
ret = WaitNetAdapterConnected(svrName, 10 * 1000);
|
||||
}
|
||||
|
||||
return ret;
|
||||
} else {
|
||||
SPDLOG_ERROR(TEXT("WireGuard configure file [{0}] not found"), cfgVal);
|
||||
return -ERR_FILE_NOT_EXISTS;
|
||||
|
@ -279,7 +284,7 @@ int WireGuardCreateClientConfig(const PWGCLIENT_CONFIG pWgConfig) {
|
|||
StringCbPrintf(cfgPath,
|
||||
MAX_PATH,
|
||||
"%s\\%s\\%s.conf",
|
||||
GetGlobalCfgInfo()->workDirectory,
|
||||
GetGlobalCfgInfo()->configDirectory,
|
||||
GetGlobalCfgInfo()->userCfg.userName,
|
||||
pWgConfig->Name);
|
||||
|
||||
|
|
|
@ -12,7 +12,8 @@
|
|||
|
||||
const TCHAR *g_AppPath = TEXT("C:\\Users\\HuangXin\\Documents\\development\\visual_studio\\tunnel_windows\\x64\\Debug");
|
||||
const TCHAR *g_SvrUserName = TEXT("tunnel_svr");
|
||||
const TCHAR *g_PlatformURL = TEXT("http://localhost:9276");
|
||||
const TCHAR *g_PlatformURL = TEXT("http://xajhuang.com:9276");
|
||||
//const TCHAR *g_PlatformURL = TEXT("http://localhost:9276");
|
||||
|
||||
#if 0
|
||||
int service_test() {
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -5,8 +5,8 @@ c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsd
|
|||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\netshare.obj
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\netinterface.obj
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\cryptoexample.obj
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\nettunnelsdktestapp.ilk
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\x64\debug\nettunnelsdktestapp.exe
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\nettunnelsdktestapp.ilk
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\x64\debug\nettunnelsdktestapp.pdb
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\x64\debug\fmtd.dll
|
||||
c:\users\huangxin\documents\development\visual_studio\tunnel_windows\nettunnelsdktestapp\x64\debug\nettunne.9f44f41e.tlog\cl.command.1.tlog
|
||||
|
|
Binary file not shown.
|
@ -1,2 +1,7 @@
|
|||
NetTunnelSDKTestApp.cpp
|
||||
CryptoExample.cpp
|
||||
NetInterface.cpp
|
||||
NetShare.cpp
|
||||
NetTunnelSDKTestApp.cpp
|
||||
RouteTable.cpp
|
||||
正在生成代码...
|
||||
NetTunnelSDKTestApp.vcxproj -> C:\Users\HuangXin\Documents\development\visual_studio\tunnel_windows\x64\Debug\NetTunnelSDKTestApp.exe
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8,6 +8,8 @@
|
|||
#include "../NetTunnelSDK/user.h"
|
||||
#include "../NetTunnelSDK/protocol.h"
|
||||
|
||||
#include <strsafe.h>
|
||||
|
||||
using namespace Microsoft::VisualStudio::CppUnitTestFramework;
|
||||
|
||||
namespace TestNetTunnelSDK {
|
||||
|
@ -16,7 +18,7 @@ TEST_MODULE_INITIALIZE(ModuleInitialize) {
|
|||
"C:\\Users\\HuangXin\\Documents\\development\\visual_studio\\tunnel_windows\\NetTunnelApp\\bin\\Debug");
|
||||
|
||||
Logger::WriteMessage("In Module Initialize");
|
||||
Assert::AreEqual(0, TunnelSDKInitEnv(path, "http://localhost:9276", false));
|
||||
Assert::AreEqual(0, TunnelSDKInitEnv(path, "http://xajhuang.com:9276", false));
|
||||
|
||||
InitTunnelSDKLog(TEXT("C:\\Users\\HuangXin\\Documents\\development\\visual_studio\\tunnel_"
|
||||
"windows\\NetTunnelApp\\bin\\Debug\\utest.log"),
|
||||
|
@ -152,18 +154,40 @@ public:
|
|||
}
|
||||
|
||||
TEST_METHOD(TestUserLogin) {
|
||||
//Assert::AreEqual(RET_OK, GetUserClientConfigure(TEXT("admin"), TEXT("123455")));
|
||||
|
||||
PUSER_CLIENT_CONFIG pCfg;
|
||||
Assert::AreEqual(RET_OK, GetUserClientConfigure(TEXT("admin"), TEXT("123455"), &pCfg));
|
||||
}
|
||||
|
||||
TEST_METHOD(TestGetNetConnectionNetworkCategory) {
|
||||
bool chkStatus = false;
|
||||
Assert::AreEqual(RET_OK, GetNetConnectionNetworkCategory(TEXT("admin"), &chkStatus));
|
||||
}
|
||||
|
||||
TEST_METHOD(TestWaitNetAdapterConnected) {
|
||||
Assert::AreEqual(RET_OK, WaitNetAdapterConnected(TEXT("admin"), 10* 1000));
|
||||
}
|
||||
|
||||
TEST_METHOD(TestProtoGetUserConfigure) {
|
||||
Assert::AreEqual(RET_OK, ProtoGetUserConfigure("admin", "asfdsafdladf083asldf+="));
|
||||
//Assert::AreEqual(RET_OK, ProtoGetUserConfigure("admin", "asfdsafdladf083asldf+="));
|
||||
}
|
||||
|
||||
TEST_METHOD(TestSetClientConfige) {
|
||||
Assert::AreEqual(RET_OK,
|
||||
SetClientConfige("6BWnmkCJqJC5iNoCEZWTxwGNG7qwkxFoVgAk4DoIKCk=",
|
||||
"192.168.100.210/24", "10.10.10.1"));
|
||||
}
|
||||
TEST_METHOD(TestGetInterfaceGUIDByName) {
|
||||
GUID guid;
|
||||
;
|
||||
Assert::AreEqual(RET_OK, GetInterfaceGUIDByName(TEXT("admin"), &guid));
|
||||
Assert::AreNotEqual(0, static_cast<int>(guid.Data1));
|
||||
|
||||
//Assert::AreEqual(RET_OK, ProtoGetUserConfigure("admin", "asfdsafdladf083asldf+="));
|
||||
}
|
||||
|
||||
TEST_METHOD(TestClientProgress) {
|
||||
PUSER_CLIENT_CONFIG pCfg = nullptr;
|
||||
Assert::AreEqual(RET_OK, GetUserClientConfigure(TEXT("admin"), TEXT("1323245235"), &pCfg));
|
||||
Assert::IsNotNull(pCfg);
|
||||
|
||||
Assert::AreEqual(RET_OK, RemoteCtrlSvrCfgUserTunnel(2, TEXT("172.18.2.128/26")));
|
||||
|
||||
Assert::AreEqual(RET_OK, LocalWireGuardControl(true, true));
|
||||
}
|
||||
};
|
||||
}
|
|
@ -20,6 +20,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetTunnelSDKTestApp", "NetT
|
|||
{1584BAD4-DBEC-43D2-BC06-08C23F02489A} = {1584BAD4-DBEC-43D2-BC06-08C23F02489A}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstallTunnelSDK", "InstallTunnelSDK\InstallTunnelSDK.vdproj", "{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -78,6 +80,12 @@ Global
|
|||
{9F44F41E-FACF-472D-A382-A40D0A84DB2C}.Release|x64.Build.0 = Release|x64
|
||||
{9F44F41E-FACF-472D-A382-A40D0A84DB2C}.Release|x86.ActiveCfg = Release|Win32
|
||||
{9F44F41E-FACF-472D-A382-A40D0A84DB2C}.Release|x86.Build.0 = Release|Win32
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Debug|Any CPU.ActiveCfg = Debug
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Debug|x64.ActiveCfg = Debug
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Debug|x86.ActiveCfg = Debug
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Release|Any CPU.ActiveCfg = Release
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Release|x64.ActiveCfg = Release
|
||||
{FE91D4D0-29A6-4C58-874F-11F6AC1D50CD}.Release|x86.ActiveCfg = Release
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
Loading…
Reference in New Issue