NetTunnelWindows/NetTunnelSDK/sdk/sccsdk.h

325 lines
11 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 <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