NetTunnelWindows/NetTunnelSDK/include/tunnel.h

200 lines
7.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "sccsdk.h"
typedef enum {
CHK_SYSTEM_INIT,
CHK_WIREGUARD_CONFIG,
CHK_WIREGUARD_SERVICE,
CHK_WG_INTERFACE_PRIVATE,
CHK_MAX
} CHECK_FUNCTION;
typedef struct {
CHECK_FUNCTION chk;
bool result;
TCHAR errMsg[MAX_PATH];
} CHK_RESULT, *PCHK_RESULT;
/**
* @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;
#ifdef __cplusplus // If used by C++ code,
extern "C" {
// we need to export the C interface
#endif
/**
* @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 成功
*/
int SetProtocolEncryptType(const PROTO_CRYPTO_TYPE type, const TCHAR *pProKey);
/**
* @brief 创建 WireGuard 服务端配置文件
* @param[in] pWgConfig 配置文件相关配置项 @see WGSERVER_CONFIG
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_MALLOC_MEMORY 分配内存失败
* - -ERR_OPEN_FILE 打开文件失败
* - -ERR_MEMORY_STR 字符串处理失败
* - ERR_SUCCESS 成功
*/
int WireGuardCreateServerConfig(const PWGSERVER_CONFIG pWgConfig);
/**
* @brief 创建 WireGuard 客户端配置文件
* @param[in] pWgConfig 配置文件相关配置项 @see WGCLIENT_CONFIG
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_MALLOC_MEMORY 分配内存失败
* - -ERR_OPEN_FILE 打开文件失败
* - -ERR_MEMORY_STR 字符串处理失败
* - ERR_SUCCESS 成功
*/
int WireGuardCreateClientConfig(const PWGCLIENT_CONFIG pWgConfig);
/**
* @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 成功
*/
int CreateWireGuardService(const TCHAR *pInterfaceName, const TCHAR *pWGConfigFilePath);
int GetWireGuradTunnelInfo(const TCHAR *pTunnelName);
/**
* @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 成功
*/
int RemoveGuardService(const TCHAR *pTunnelName, bool bIsWaitStop);
/**
* @brief 安装/卸载 WireGuard 服务
* @param[in] bInstall TRUE 安装服务, FALSE 卸载服务
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
*/
int WireGuardInstallDefaultServerService(bool bInstall);
/**
* @brief 通过 WireGuard 配置文件安装隧道服务
* @param[in] pTunnelCfgPath 配置文件完整路径
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_ITEM_UNEXISTS 配置文件不存在
* - -ERR_CALL_SHELL 调用 WireGuard 外部服务失败
* - ERR_SUCCESS 成功
*/
int WireGuardInstallServerService(const TCHAR *pTunnelCfgPath);
/**
* @brief 卸载 WireGuard 隧道服务
* @param[in] pTunnelName 隧道服务名
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_ITEM_UNEXISTS 配置文件不存在
* - -ERR_CALL_SHELL 调用 WireGuard 外部服务失败
* - ERR_SUCCESS 成功
*/
int WireGuardUnInstallServerService(const TCHAR *pTunnelName);
/**
* @brief 获取当前 WireGuard 服务是否安装
* @param[out] pIsInstalled WireGuard 服务安装状态
* - TRUE 已经安装
* - FALSE 未安装
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_OPEN_SCM, 打开服务管理器设备
* - -ERR_OPEN_SERVICE, 打开服务失败
* - -ERR_GET_SERVICESSTATUS, 获取服务状态失败
* - ERR_SUCCESS 成功
*/
int IsWireGuardServerInstalled(bool *pIsInstalled);
/**
* @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 成功
*/
int CalcFileHash(HASH_TYPE type, const TCHAR *pPath, TCHAR outHash[]);
/**
* @brief 计算 HMAC HASH 值
* @param[in] type Hash 类型 @see HASH_TYPE
* @param[in] pHashData 需要计算 Hash 值的数据
* @param[in] inSize 需要计算 Hash 值的数据大小(字节数)
* @param[in] pKey HMAC Hash 秘钥
* @param[in] keySize HMAC Hash 秘钥大小(字节数)
* @param[out] outHash 计算结果
* @param[in] outBase64 是否以 BASE64 字符串输出
* @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 成功
*/
int CalcHmacHash(HASH_TYPE type, PUCHAR pHashData, int inSize, PUCHAR pKey, int keySize, TCHAR outHash[], bool outBase64);
#ifdef __cplusplus
}
#endif