325 lines
11 KiB
C
325 lines
11 KiB
C
#pragma once
|
||
#include <Windows.h>
|
||
#include "common.h"
|
||
#include "usrerr.h"
|
||
|
||
#ifdef NETTUNNELSDK_EXPORTS
|
||
#define SCCSDK_API __declspec(dllexport)
|
||
#else
|
||
#define SCCSDK_API __declspec(dllimport)
|
||
#endif
|
||
|
||
typedef void (*PTUNNEL_HEART_ROUTINE)(const CHAR *pMessage, unsigned int timeStampOfSeconds);
|
||
typedef PTUNNEL_HEART_ROUTINE LPTUNNEL_HEART_ROUTINE;
|
||
|
||
/**
|
||
*
|
||
* @brief 本地计算机网卡信息
|
||
*/
|
||
typedef struct {
|
||
int InterfaceIndex; ///< 网卡索引
|
||
NET_CONNECT_STATUS netConnStatus; ///< 网卡状态 @see NET_CONNECT_STATUS
|
||
CHAR NetCardUUID[260]; ///< 网卡名称, Windows标识为 UUID
|
||
CHAR NetCardName[MAX_NETCARD_NAME]; ///< 网卡名称
|
||
CHAR NetCardDescription[132]; ///< 网卡描述
|
||
CHAR NetCardIpaddr[MAX_IP_LEN]; ///< 网卡 IP 地址
|
||
CHAR NetCardNetmask[MAX_IP_LEN]; ///< 网卡子网掩码
|
||
CHAR NetCardGateway[MAX_IP_LEN]; ///< 网卡网关
|
||
CHAR NetCardMacAddr[20]; ///< 网卡 MAC 地址
|
||
} NIC_CONTENT, *PNIC_CONTENT;
|
||
|
||
#ifdef __cplusplus // If used by C++ code,
|
||
extern "C" {
|
||
// we need to export the C interface
|
||
#endif
|
||
|
||
/**
|
||
* @brief 初始化 SDK 运行环境
|
||
* @param[in] pWorkDir 程序工作路径,如果不设置系统自动获取
|
||
* @param[in] pSvrUrl 管理平台 URL 地址 example: http://localhost:2313, https://localhost:2313
|
||
* @param[in] pLogFile 日志文件名称/完整路径
|
||
* @param[in] level 日志最低有效等级
|
||
* @param[in] isWorkServer SDK 工作模式
|
||
* - TRUE 服务端
|
||
* - FALSE 客户端
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_ITEM_EXISTS 未找到 WireGuard 程序
|
||
* - -ERR_SYS_CALL 获取配置本地配置文件存储目录失败
|
||
* - -ERR_CREATE_FILE 创建用户配置文件目录失败
|
||
* - -ERR_ITEM_UNEXISTS WireGuard 未安装
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl TunnelSDKInitEnv(const CHAR *pWorkDir,
|
||
const CHAR *pSvrUrl,
|
||
const CHAR *pLogFile,
|
||
LOG_LEVEL level,
|
||
bool isWorkServer);
|
||
|
||
/**
|
||
* @brief 清理 SDK 运行资源
|
||
*/
|
||
SCCSDK_API void __cdecl TunnelSDKUnInit();
|
||
|
||
/**
|
||
* @brief 打开/关闭 SDK 日志开关
|
||
* @param enLog 日志开关
|
||
* - TRUE 打开日志
|
||
* - FALSE 关闭日志
|
||
*/
|
||
SCCSDK_API void __cdecl TunnelLogEnable(bool enLog);
|
||
|
||
/**
|
||
* @brief 获取当前 WireGuard 服务隧道是否正则运行
|
||
* @param pTunnelName 隧道服务名
|
||
* @param pIsRunning pIsRunning WireGuard 服务隧道运行状态
|
||
* - TRUE 已经安装
|
||
* - FALSE 未安装
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_OPEN_SCM 打开服务管理器设备失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetWireGuardServiceStatus(const CHAR *pTunnelName, bool *pIsRunning);
|
||
|
||
/**
|
||
* @brief 判断当前网络服务工作模式 客户端/服务端
|
||
* @param[out] pIsWorkServer 工作模式
|
||
* - TRUE 服务端
|
||
* - FALSE 客户端
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetWireGuardWorkMode(bool *pIsWorkServer);
|
||
|
||
/**
|
||
* @brief 获取当前 WireGuard 服务隧道是否正则运行
|
||
* @param[in] pIfName WireGuard 隧道网络接口名称
|
||
* @param[out] pIsRunning WireGuard 服务隧道运行状态
|
||
* - TRUE 已经安装
|
||
* - FALSE 未安装
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl IsWireGuardServerRunning(const CHAR *pIfName, bool *pIsRunning);
|
||
|
||
/**
|
||
* @brief SCG 代理服务开关
|
||
* @param isEnable TRUE: 启动 SCG 代理, FALSE: 禁用 SCG 代理
|
||
* @param pSCGIpAddr SCG 代理 IP
|
||
* @param scgPort SCG 代理端口
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl EnableSCGProxy(bool isEnable, const CHAR *pSCGIpAddr, int scgPort);
|
||
|
||
/**
|
||
* @brief 获取当前 SCG 代理服务状态
|
||
* @return TRUE: SCG 代理启动, FALSE: SCG 代理禁用
|
||
*/
|
||
SCCSDK_API bool __cdecl UsedSCGProxy();
|
||
|
||
/**
|
||
* @brief 获取当前网络共享模式
|
||
* @return 当前网络共享模式 @see NET_SHARE_MODE
|
||
*/
|
||
SCCSDK_API NET_SHARE_MODE __cdecl GetCurrentNetShareMode();
|
||
|
||
/**
|
||
* @brief 设置获取当前网络共享模式
|
||
* @param shareMode 网络共享模式 @see NET_SHARE_MODE
|
||
*/
|
||
SCCSDK_API void __cdecl SetCurrentNetShareMode(NET_SHARE_MODE shareMode);
|
||
|
||
/**
|
||
* @brief 获取本机网卡信息
|
||
* @param[out] pInfo 网卡信息 @see NIC_CONTENT
|
||
* @param[out] pItemCounts 计算机当前操作系统中网卡总数 最大值 32
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_MALLOC_MEMORY 分配内存失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetAllNICInfo(PNIC_CONTENT *pInfo, int *pItemCounts);
|
||
|
||
/**
|
||
* @brief 设置网卡IP地址
|
||
* @param pInterfaceName 网卡接口名称
|
||
* @param pIpaddr 需要设置的 IP 地址
|
||
* @param pNetmask 需要设置的子网掩码地址
|
||
* @return 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_COM_INITIALIZE 初始化COM失败
|
||
* - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败
|
||
* - -ERR_WMI_CONN_SVR 连接到 WMI 失败
|
||
* - -ERR_WMI_SET_PROXY 设置 WMI 代理服务失败
|
||
* - -ERR_WMI_QUERY 执行 WMI SQL 查询失败
|
||
* - -ERR_WMI_EXEC_METHOD 执行 WMI 函数失败
|
||
* - -ERR_ITEM_UNEXISTS 网卡不存在
|
||
* - -ERR_MEMORY_STR 字符串转换失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl SetInterfaceIpAddressWMI(const CHAR *pInterfaceName,
|
||
const CHAR *pIpaddr,
|
||
const CHAR *pNetmask);
|
||
|
||
/**
|
||
* @brief 获取当前 Internet 网卡名
|
||
* @param[out] pIfIndex 网卡索引
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_ITEM_UNEXISTS 未找到具有 Internet 连接的网卡
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetInternetIfIndex(int *pIfIndex);
|
||
|
||
/**
|
||
* @brief 判断当前网络适配器是否拥有 Internet 连接
|
||
* @param[in] ifIndex 网卡适配器索引
|
||
* @param[in] pRet 连接属性
|
||
* - TRUE 网卡适配器具有 Internet 连接
|
||
* - FALSE 网卡适配器无 Internet 连接
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_GET_IPFOWARDTBL 获取防火墙信息失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl IsInternetConnectAdapter(int ifIndex, bool *pRet);
|
||
|
||
/**
|
||
* @brief 打开平台接口签名验证功能
|
||
* @param pClientId 客户端 ID
|
||
* @param pClientSecret 客户端秘钥
|
||
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl EnableVerifySignature(const CHAR *pClientId, const CHAR *pClientSecret);
|
||
|
||
/**
|
||
* @brief 关闭平台接口签名验证功能
|
||
*/
|
||
SCCSDK_API void __cdecl DisableVerifySignature();
|
||
|
||
/**
|
||
* @brief 云电脑服务端创建控制服务
|
||
* @param pSvr 服务端配置信息
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_CREATE_THREAD 创建线程失败
|
||
* - -ERR_SOCKET_BIND_PORT 绑定端口失败
|
||
* - -ERR_ITEM_EXISTS 服务线程状态异常
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl CreateControlService(PUSER_SERVER_CONFIG pSvr);
|
||
|
||
/**
|
||
* @brief 获取用户服务端配置信息
|
||
* @param[in] pUserName 用户名
|
||
* @param[in] pToken 用户访问令牌
|
||
* @param[out] pSvrCfg 服务端用户配置信息
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_MEMORY_STR 字符串处理
|
||
* - -ERR_CREATE_FILE 创建用户配置目录失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetUserServerConfigure(const CHAR *pUserName,
|
||
const CHAR *pToken,
|
||
PUSER_SERVER_CONFIG *pSvrCfg);
|
||
|
||
/**
|
||
* @brief 获取用户客户端配置信息
|
||
* @param[in] pUserName 用户名
|
||
* @param[in] pToken 用户访问令牌
|
||
* @param[out] pCliCfg 客户端用户配置信息
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -ERR_MEMORY_STR 字符串处理
|
||
* - -ERR_CREATE_FILE 创建用户配置目录失败
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl GetUserClientConfigure(const CHAR *pUserName,
|
||
const CHAR *pToken,
|
||
PUSER_CLIENT_CONFIG *pCliCfg);
|
||
|
||
/**
|
||
* @brief 停止云电脑服务端服务
|
||
* @return 0: 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERROR_TIMEOUT 等待超时
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl StopControlService();
|
||
|
||
/**
|
||
* @brief 连接远程控制服务配置隧道参数
|
||
* @param[in] vmId 需要连接的虚拟机ID编号
|
||
* @param[in] pCliNetwork 需要共享的本地网络地址
|
||
* @return 成功, 小于0 失败 @see USER_ERRNO
|
||
* - -ERR_INPUT_PARAMS 输入参数错误
|
||
* - -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 成功
|
||
*/
|
||
SCCSDK_API int __cdecl RemoteCtrlSvrCfgUserTunnel(int vmId, const CHAR *pCliNetwork);
|
||
|
||
/**
|
||
* @brief 启动/停止远程云电脑中的 WireGuard 隧道服务
|
||
* @param[in] isStart 启动/停止服务 TRUE 启动服务, FALSE 停止服务
|
||
* @return 0: 成功, 小于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_SUCCESS 成功
|
||
*/
|
||
SCCSDK_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_UN_SUPPORT 不支持的网络共享类型
|
||
* - ERR_SUCCESS 成功
|
||
*/
|
||
SCCSDK_API int __cdecl LocalWireGuardControl(bool isStart, bool setPrivateMode);
|
||
|
||
/**
|
||
* @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 成功
|
||
*/
|
||
SCCSDK_API int __cdecl RemoteHeartControl(bool isStart, LPTUNNEL_HEART_ROUTINE lpHeartCbAddress);
|
||
|
||
/**
|
||
* @brief 获取用户错误码字符串
|
||
* @param err 用户错误码
|
||
* @return 用户错误码对应的字符串, "UNKNOWN": 未知错误
|
||
*/
|
||
SCCSDK_API const CHAR* __cdecl GetSDKErrorMessage(USER_ERRNO err);
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|