2023-06-15 01:35:37 +00:00
|
|
|
|
#pragma once
|
2023-08-03 09:13:03 +00:00
|
|
|
|
#include "sccsdk.h"
|
2023-06-15 01:35:37 +00:00
|
|
|
|
|
2023-07-25 01:02:16 +00:00
|
|
|
|
typedef enum {
|
2023-08-03 09:13:03 +00:00
|
|
|
|
CHK_SYSTEM_INIT,
|
|
|
|
|
CHK_WIREGUARD_CONFIG,
|
|
|
|
|
CHK_WIREGUARD_SERVICE,
|
|
|
|
|
CHK_WG_INTERFACE_PRIVATE,
|
|
|
|
|
CHK_MAX
|
|
|
|
|
} CHECK_FUNCTION;
|
2023-07-25 01:02:16 +00:00
|
|
|
|
|
2023-06-20 09:25:14 +00:00
|
|
|
|
typedef struct {
|
2023-07-10 08:36:19 +00:00
|
|
|
|
CHECK_FUNCTION chk;
|
|
|
|
|
bool result;
|
|
|
|
|
TCHAR errMsg[MAX_PATH];
|
|
|
|
|
} CHK_RESULT, *PCHK_RESULT;
|
2023-06-19 11:08:42 +00:00
|
|
|
|
|
2023-06-20 09:25:14 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief WireGuard 服务端配置信息
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
TCHAR Name[64]; ///< WireGuard 网卡名称
|
|
|
|
|
TCHAR Address[32]; ///< WireGuard 本地网络IP地址
|
|
|
|
|
TCHAR PrivateKey[64]; ///< WireGuard 本机私钥
|
|
|
|
|
int ListenPort; ///< WireGuard 服务端监听端口
|
|
|
|
|
|
|
|
|
|
// 根据系统设计,不支持多个客户端同时连接
|
|
|
|
|
TCHAR CliPubKey[64]; ///< WireGuard 客户端公钥
|
|
|
|
|
TCHAR AllowNet[256]; ///< WireGuard 允许对端访问本地网络的配置
|
|
|
|
|
} WGSERVER_CONFIG, *PWGSERVER_CONFIG;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief WireGuard 客户端配置信息
|
|
|
|
|
*/
|
|
|
|
|
typedef struct {
|
|
|
|
|
TCHAR Name[64]; ///< WireGuard 网卡名称
|
|
|
|
|
TCHAR PrivateKey[64]; ///< WireGuard 本机私钥
|
|
|
|
|
TCHAR Address[32]; ///< WireGuard 本地网络IP地址
|
|
|
|
|
|
|
|
|
|
// Peer Server
|
|
|
|
|
TCHAR SvrPubKey[64]; ///< WireGuard 服务端公钥
|
|
|
|
|
TCHAR AllowNet[256]; ///< WireGuard 允许对端访问本地网络的配置
|
|
|
|
|
TCHAR ServerURL[256]; ///< WireGuard 服务端IP地址和端口
|
|
|
|
|
} WGCLIENT_CONFIG, *PWGCLIENT_CONFIG;
|
2023-06-19 11:08:42 +00:00
|
|
|
|
|
2023-06-15 01:35:37 +00:00
|
|
|
|
#ifdef __cplusplus // If used by C++ code,
|
|
|
|
|
extern "C" {
|
|
|
|
|
// we need to export the C interface
|
|
|
|
|
#endif
|
2023-06-20 09:25:14 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 设置传输协议加密方式,默认 CRYPTO_NONE
|
|
|
|
|
* @param[in] type 协议加密类型 @see PROTO_CRYPTO_TYPE
|
|
|
|
|
* @param[in] pProKey 加密秘钥,CRYPTO_NONE, CRYPTO_BASE64 无效忽略
|
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int SetProtocolEncryptType(const PROTO_CRYPTO_TYPE type, const TCHAR *pProKey);
|
2023-06-20 09:25:14 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 创建 WireGuard 服务端配置文件
|
2023-06-27 02:02:02 +00:00
|
|
|
|
* @param[in] pWgConfig 配置文件相关配置项 @see WGSERVER_CONFIG
|
2023-06-20 09:25:14 +00:00
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_MALLOC_MEMORY 分配内存失败
|
|
|
|
|
* - -ERR_OPEN_FILE 打开文件失败
|
|
|
|
|
* - -ERR_MEMORY_STR 字符串处理失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int WireGuardCreateServerConfig(const PWGSERVER_CONFIG pWgConfig);
|
2023-06-20 09:25:14 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 创建 WireGuard 客户端配置文件
|
2023-06-27 02:02:02 +00:00
|
|
|
|
* @param[in] pWgConfig 配置文件相关配置项 @see WGCLIENT_CONFIG
|
2023-06-20 09:25:14 +00:00
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_MALLOC_MEMORY 分配内存失败
|
|
|
|
|
* - -ERR_OPEN_FILE 打开文件失败
|
|
|
|
|
* - -ERR_MEMORY_STR 字符串处理失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int WireGuardCreateClientConfig(const PWGCLIENT_CONFIG pWgConfig);
|
2023-06-20 09:25:14 +00:00
|
|
|
|
|
2023-07-31 06:07:11 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 通过 WireGuard 配置文件安装隧道服务
|
|
|
|
|
* @param pInterfaceName 隧道服务名
|
|
|
|
|
* @param pWGConfigFilePath 配置文件完整路径
|
|
|
|
|
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_ITEM_UNEXISTS 找不掉对应的服务
|
|
|
|
|
* - -ERR_OPEN_SCM 打开服务管理器设备失败
|
|
|
|
|
* - -ERR_OPEN_SERVICE 打开服务失败
|
|
|
|
|
* - -ERR_CREATE_SERVICE 创建服务失败
|
|
|
|
|
* - -ERR_CONFIG_SERVICE 配置服务失败
|
|
|
|
|
* - -ERR_START_SERVICE 停止服务失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int CreateWireGuardService(const TCHAR *pInterfaceName, const TCHAR *pWGConfigFilePath);
|
2023-07-31 06:07:11 +00:00
|
|
|
|
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int GetWireGuradTunnelInfo(const TCHAR *pTunnelName);
|
2023-07-31 06:07:11 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 移除 WireGuard 隧道服务
|
|
|
|
|
* @param pTunnelName 隧道服务名
|
|
|
|
|
* @param bIsWaitStop 是否等待隧道服务结束 TRUE: 等待服务结束, FALSE: 不等待直接结束
|
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_OPEN_SCM 打开服务管理器设备失败
|
|
|
|
|
* - -ERR_OPEN_SERVICE 打开服务失败
|
|
|
|
|
* - -ERR_STOP_SERVICE 停止服务失败
|
|
|
|
|
* - -ERR_DELETE_SERVICE 删除服务失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int RemoveGuardService(const TCHAR *pTunnelName, bool bIsWaitStop);
|
2023-07-31 06:07:11 +00:00
|
|
|
|
|
2023-06-20 10:23:31 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 安装/卸载 WireGuard 服务
|
|
|
|
|
* @param[in] bInstall TRUE 安装服务, FALSE 卸载服务
|
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int WireGuardInstallDefaultServerService(bool bInstall);
|
2023-07-14 09:29:02 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 通过 WireGuard 配置文件安装隧道服务
|
|
|
|
|
* @param[in] pTunnelCfgPath 配置文件完整路径
|
|
|
|
|
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_ITEM_UNEXISTS 配置文件不存在
|
|
|
|
|
* - -ERR_CALL_SHELL 调用 WireGuard 外部服务失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int WireGuardInstallServerService(const TCHAR *pTunnelCfgPath);
|
2023-07-14 09:29:02 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @brief 卸载 WireGuard 隧道服务
|
|
|
|
|
* @param[in] pTunnelName 隧道服务名
|
|
|
|
|
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_ITEM_UNEXISTS 配置文件不存在
|
|
|
|
|
* - -ERR_CALL_SHELL 调用 WireGuard 外部服务失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int WireGuardUnInstallServerService(const TCHAR *pTunnelName);
|
2023-06-21 10:04:16 +00:00
|
|
|
|
|
|
|
|
|
/**
|
2023-07-10 08:36:19 +00:00
|
|
|
|
* @brief 获取当前 WireGuard 服务是否安装
|
|
|
|
|
* @param[out] pIsInstalled WireGuard 服务安装状态
|
|
|
|
|
* - TRUE 已经安装
|
|
|
|
|
* - FALSE 未安装
|
|
|
|
|
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
2023-06-27 02:02:02 +00:00
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
2023-07-10 08:36:19 +00:00
|
|
|
|
* - -ERR_OPEN_SCM, 打开服务管理器设备
|
|
|
|
|
* - -ERR_OPEN_SERVICE, 打开服务失败
|
|
|
|
|
* - -ERR_GET_SERVICESSTATUS, 获取服务状态失败
|
2023-06-27 02:02:02 +00:00
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int IsWireGuardServerInstalled(bool *pIsInstalled);
|
2023-07-25 01:02:16 +00:00
|
|
|
|
|
2023-06-27 02:02:02 +00:00
|
|
|
|
/**
|
|
|
|
|
* @brief 计算文件 Hash
|
|
|
|
|
* @param[in] type Hash 类型 @see HASH_TYPE
|
|
|
|
|
* @param[in] pPath 需要计算 Hash 值的文件路径
|
|
|
|
|
* @param[out] outHash 计算结果
|
|
|
|
|
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
|
|
|
|
* - -ERR_INPUT_PARAMS 输入参数错误
|
|
|
|
|
* - -ERR_ITEM_UNEXISTS 文件不存在
|
|
|
|
|
* - -ERR_OPEN_FILE 打开文件失败
|
|
|
|
|
* - -ERR_BCRYPT_OPEN 创建加解密算法失败
|
|
|
|
|
* - -ERR_BCRYPT_GETPROPERTY 获取加解密算法属性失败
|
|
|
|
|
* - -ERR_BCRYPT_CREATEHASH 创建 Hash 算法失败
|
|
|
|
|
* - -ERR_BCRYPT_HASHDATA 计算 Hash 数据失败
|
|
|
|
|
* - -ERR_BCRYPT_FINISHHASH 计算 Hash 结果失败
|
|
|
|
|
* - ERR_SUCCESS 成功
|
|
|
|
|
*/
|
2023-08-03 09:13:03 +00:00
|
|
|
|
int CalcFileHash(const HASH_TYPE type, const TCHAR *pPath, TCHAR outHash[]);
|
2023-07-10 08:36:19 +00:00
|
|
|
|
|
2023-06-15 01:35:37 +00:00
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
2023-06-20 09:25:14 +00:00
|
|
|
|
#endif
|