OCT 1. 修正INetworkManager接口对于重名多网卡处理问题

This commit is contained in:
黄昕 2023-07-17 18:55:01 +08:00
parent d2d647659a
commit d5763b8c1f
40 changed files with 2255 additions and 285 deletions

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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>

View File

@ -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);

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
/**

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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转发功能

View File

@ -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,

View File

@ -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,

View File

@ -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
/**

View File

@ -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

View File

@ -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 对象失败

View File

@ -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);

View File

@ -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() {

View File

@ -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

View File

@ -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

View File

@ -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));
}
};
}

View File

@ -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