OCT 1. 增加 WireGuard 服务安装接口
This commit is contained in:
parent
098d9c2c4e
commit
b13b13f4d4
|
@ -90,17 +90,31 @@ public partial class MainForm : Form
|
|||
Console.WriteLine("Create WireGuard Client Configure File: {0}", v);
|
||||
}
|
||||
|
||||
private void test_uninstall_wg_server()
|
||||
{
|
||||
var v = NetTunnelLib.WireGuardInstallServerService(false);
|
||||
Console.WriteLine("Uninstall Result: {0}", v);
|
||||
}
|
||||
|
||||
private void test_install_wg_server()
|
||||
{
|
||||
var v = NetTunnelLib.WireGuardInstallServerService(true);
|
||||
Console.WriteLine("Install Result: {0}", v);
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e)
|
||||
{
|
||||
var buffer = new StringBuilder(256 + 1);
|
||||
//var buffer = new StringBuilder(256 + 1);
|
||||
//NetTunnelLib.TunnelSDKInitEnv();
|
||||
var v = NetTunnelLib.FindWireguardExe(buffer, 256);
|
||||
MessageBox.Show(buffer.ToString() + "----" + v.ToString());
|
||||
//var v = NetTunnelLib.FindWireguardExe(buffer, 256);
|
||||
//MessageBox.Show(buffer.ToString() + "----" + v.ToString());
|
||||
|
||||
test_install_wg_server();
|
||||
}
|
||||
|
||||
private void button2_Click(object sender, EventArgs e)
|
||||
{
|
||||
test_create_wg_svr_cfg();
|
||||
test_create_wg_cli_cfg();
|
||||
|
||||
test_uninstall_wg_server();
|
||||
}
|
||||
}
|
|
@ -129,6 +129,9 @@ public class NetTunnelLib
|
|||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int WireGuardCreateClientConfig(WgCliConfig cfg);
|
||||
|
||||
[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int WireGuardInstallServerService(bool install);
|
||||
|
||||
//[DllImport("NetTunnelSDK.dll", CallingConvention = CallingConvention.Cdecl)]
|
||||
//public static extern int RunPipeCmd(String pszCmd, StringBuilder pszResultBuffer, int dwResultBufferSize);
|
||||
}
|
|
@ -18,7 +18,7 @@ void RemoveTailLineBreak(TCHAR *pInputStr, int strSize) {
|
|||
}
|
||||
}
|
||||
|
||||
int RunPipeCmd(TCHAR *pszCmd, TCHAR *pszResultBuffer, int dwResultBufferSize) {
|
||||
int RunCommand(TCHAR *pszCmd, TCHAR *pszResultBuffer, int dwResultBufferSize) {
|
||||
BOOL bRet;
|
||||
HANDLE hReadPipe = nullptr;
|
||||
HANDLE hWritePipe = nullptr;
|
||||
|
@ -26,6 +26,18 @@ int RunPipeCmd(TCHAR *pszCmd, TCHAR *pszResultBuffer, int dwResultBufferSize) {
|
|||
PROCESS_INFORMATION pi;
|
||||
SECURITY_ATTRIBUTES securityAttributes = {};
|
||||
|
||||
if (pszCmd == nullptr) {
|
||||
SPDLOG_ERROR(TEXT("Input params Error: [{0}]"), pszCmd);
|
||||
return -ERR_INPUT_PARAMS;
|
||||
}
|
||||
|
||||
if (pszResultBuffer && dwResultBufferSize > 0) {
|
||||
memset(pszResultBuffer, 0, dwResultBufferSize);
|
||||
} else {
|
||||
WinExec(pszCmd, SW_HIDE);
|
||||
return ERR_SUCCESS;
|
||||
}
|
||||
|
||||
memset(&si, 0, sizeof(STARTUPINFO));
|
||||
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
|
||||
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
extern "C" {
|
||||
// we need to export the C interface
|
||||
#endif
|
||||
|
||||
void RemoveTailLineBreak(TCHAR* pInputStr, int strSize);
|
||||
int RunPipeCmd(TCHAR* pszCmd, TCHAR* pszResultBuffer, int dwResultBufferSize);
|
||||
|
||||
void RemoveTailLineBreak(TCHAR *pInputStr, int strSize);
|
||||
int RunCommand(TCHAR *pszCmd, TCHAR *pszResultBuffer, int dwResultBufferSize);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -183,6 +183,13 @@ TUNNEL_API int __cdecl WireGuardCreateServerConfig(const PWGSERVER_CONFIG pWgCon
|
|||
*/
|
||||
TUNNEL_API int __cdecl WireGuardCreateClientConfig(const PWGCLIENT_CONFIG pWgConfig);
|
||||
|
||||
/**
|
||||
* @brief 安装/卸载 WireGuard 服务
|
||||
* @param[in] bInstall TRUE 安装服务, FALSE 卸载服务
|
||||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||||
*/
|
||||
TUNNEL_API int __cdecl WireGuardInstallServerService(bool bInstall);
|
||||
|
||||
/**
|
||||
* @brief 清理 SDK 运行资源
|
||||
*/
|
||||
|
|
|
@ -3,10 +3,13 @@
|
|||
#include "usrerr.h"
|
||||
#include <strsafe.h>
|
||||
#include <tchar.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
#include "globalcfg.h"
|
||||
#include "misc.h"
|
||||
|
||||
#pragma comment(lib, "Shlwapi.lib")
|
||||
|
||||
constexpr auto WINENVBUF_SIZE = (4096);
|
||||
|
||||
#define CFG_WIREGUARD_SECTION TEXT("WireGuard")
|
||||
|
@ -15,6 +18,64 @@ constexpr auto WINENVBUF_SIZE = (4096);
|
|||
#define CFG_WGSVR_PATH TEXT("ServerConfig")
|
||||
#define CFG_WG_PATH TEXT("WgExe")
|
||||
|
||||
int WireGuardInstallServerService(bool bInstall) {
|
||||
TCHAR cfgVal[MAX_PATH];
|
||||
TCHAR cmdBuf[MAX_PATH];
|
||||
|
||||
GetPrivateProfileString(CFG_WIREGUARD_SECTION,
|
||||
CFG_WGSVR_PATH,
|
||||
TEXT(""),
|
||||
cfgVal,
|
||||
MAX_PATH,
|
||||
GetGlobalCfgInfo()->cfgPath);
|
||||
|
||||
if (lstrlen(cfgVal) > 0) {
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
const HANDLE hFind = FindFirstFile(cfgVal, &FindFileData);
|
||||
|
||||
if (hFind != INVALID_HANDLE_VALUE) {
|
||||
int ret;
|
||||
|
||||
if (bInstall) {
|
||||
// 安装服务
|
||||
StringCbPrintf(cmdBuf,
|
||||
MAX_PATH,
|
||||
TEXT("\"%s\" /installtunnelservice \"%s\""),
|
||||
GetGlobalCfgInfo()->wireguardCfg.wireguardPath,
|
||||
cfgVal);
|
||||
} else {
|
||||
// 卸载服务
|
||||
TCHAR svrName[MAX_PATH];
|
||||
|
||||
StringCbCopy(svrName, MAX_PATH, cfgVal);
|
||||
PathStripPath(svrName);
|
||||
PathRemoveExtension(svrName);
|
||||
|
||||
StringCbPrintf(cmdBuf,
|
||||
MAX_PATH,
|
||||
TEXT("\"%s\" /uninstalltunnelservice %s"),
|
||||
GetGlobalCfgInfo()->wireguardCfg.wireguardPath,
|
||||
svrName);
|
||||
}
|
||||
|
||||
if ((ret = RunCommand(cmdBuf, nullptr, 0)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR("Run command [{0}] error: {1}", cmdBuf, ret);
|
||||
return -ERR_CALL_SHELL;
|
||||
}
|
||||
|
||||
SPDLOG_DEBUG("Run command [{0}]", cmdBuf);
|
||||
|
||||
return ERR_SUCCESS;
|
||||
} else {
|
||||
SPDLOG_ERROR("WireGuard configure file [{0}] not found", cfgVal);
|
||||
return -ERR_FILE_NOT_EXISTS;
|
||||
}
|
||||
} else {
|
||||
SPDLOG_ERROR("Configure [{0}] not found", CFG_WGSVR_PATH);
|
||||
return -ERR_ITEM_UNEXISTS;
|
||||
}
|
||||
}
|
||||
|
||||
int WireGuardCreateClientConfig(const PWGCLIENT_CONFIG pWgConfig) {
|
||||
const size_t bufSize = 4096 * sizeof(TCHAR);
|
||||
const TCHAR cfgFormat[] = TEXT(
|
||||
|
@ -255,7 +316,7 @@ int GenerateWireguardKeyPairs(TCHAR *pPubKey, int pubkeySize, TCHAR *pPrivKey, i
|
|||
|
||||
StringCbPrintf(cmdBuffer, MAX_PATH, TEXT("cmd.exe /C \"%s\" genkey"), pCfg->wireguardCfg.wgPath);
|
||||
|
||||
if ((ret = RunPipeCmd(cmdBuffer, cmdResult, MAX_PATH)) != ERR_SUCCESS) {
|
||||
if ((ret = RunCommand(cmdBuffer, cmdResult, MAX_PATH)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR("Run command [{0}] error: {1}", cmdBuffer, ret);
|
||||
return -ERR_CALL_SHELL;
|
||||
}
|
||||
|
@ -271,7 +332,7 @@ int GenerateWireguardKeyPairs(TCHAR *pPubKey, int pubkeySize, TCHAR *pPrivKey, i
|
|||
pCfg->wireguardCfg.wgPath);
|
||||
|
||||
memset(cmdResult, 0, MAX_PATH);
|
||||
if ((ret = RunPipeCmd(cmdBuffer, cmdResult, MAX_PATH)) != ERR_SUCCESS) {
|
||||
if ((ret = RunCommand(cmdBuffer, cmdResult, MAX_PATH)) != ERR_SUCCESS) {
|
||||
SPDLOG_ERROR("Run command [{0}] error: {1}", cmdBuffer, ret);
|
||||
return -ERR_CALL_SHELL;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace TestNetTunnelSDK
|
|||
TCHAR buf[1024];
|
||||
int ret = ERR_SUCCESS;
|
||||
|
||||
Assert::AreEqual(ret, RunPipeCmd(TEXT("cmd.exe /C dir E:\\"), buf, 1024));
|
||||
Assert::AreEqual(ret, RunCommand(TEXT("cmd.exe /C dir E:\\"), buf, 1024));
|
||||
Logger::WriteMessage("Return:");
|
||||
Logger::WriteMessage(buf);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue