OCT 1. 增加SQLite3数据库支持
This commit is contained in:
parent
2229b9d5fc
commit
241e24c0e3
|
@ -72,7 +72,7 @@ BreakConstructorInitializersBeforeComma: false
|
|||
BreakConstructorInitializers: BeforeColon
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
ColumnLimit: 140
|
||||
CommentPragmas: '^ IWYU pragma:'
|
||||
CompactNamespaces: true
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
|
@ -135,7 +135,7 @@ ObjCSpaceBeforeProtocolList: true
|
|||
PenaltyBreakAssignment: 1000
|
||||
PenaltyBreakBeforeFirstCallParameter: 1
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakFirstLessLess: 140
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
|
|
|
@ -131,9 +131,21 @@ ENDIF ()
|
|||
|
||||
IF (USED_SQLITE)
|
||||
MESSAGE("Select Option USED_SQLITE")
|
||||
LIST(APPEND COMMON_DEFINE "-DSQLITE_ON")
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_MYSQL)
|
||||
MESSAGE("Select Option USED_MYSQL")
|
||||
LIST(APPEND COMMON_DEFINE "-DUSED_MYSQL")
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_REDIS)
|
||||
MESSAGE("Select Option USED_REDIS")
|
||||
LIST(APPEND COMMON_DEFINE "-DUSED_REDIS")
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_SQLITE_CRYPTO)
|
||||
LIST(APPEND COMMON_DEFINE "-DSQLITE_CRYPTO_ON")
|
||||
MESSAGE("Select Option USED_SQLITE_CRYPTO")
|
||||
ENDIF ()
|
||||
|
||||
|
|
|
@ -40,8 +40,8 @@ application:
|
|||
mysql_passwd = "AES@5/BQyUIfVxgV9BZAz/D3Rg=="; # mysql 数据库密码
|
||||
mysql_database = "test"; # mysql 数据库名称
|
||||
|
||||
sqlite_dbname = "vcpe.db"; # sqlite3 数据库文件名
|
||||
sqlite_passwd = "test123"; # sqlite3 数据库密码
|
||||
sqlite_dbname = "/home/hx/vcpe.db"; # sqlite3 数据库文件名
|
||||
sqlite_passwd = ""; # sqlite3 数据库密码
|
||||
};
|
||||
|
||||
# MQ 相关配置
|
||||
|
|
|
@ -40,22 +40,13 @@ IF (USED_HTTP_SVR)
|
|||
AUX_SOURCE_DIRECTORY(mongoose C_SRC)
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_REDIS)
|
||||
ADD_DEFINITIONS(-DUSED_REDIS)
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_SQLITE)
|
||||
ADD_DEFINITIONS(-DSQLITE_ON)
|
||||
LIST(APPEND C_SRC database/database.c)
|
||||
IF (SQLITE_CRYPTO_ON)
|
||||
ADD_DEFINITIONS(-DSQLITE_CRYPTO_ON)
|
||||
AUX_SOURCE_DIRECTORY(database/sqlite3 C_SRC)
|
||||
ENDIF ()
|
||||
ENDIF ()
|
||||
|
||||
IF (USED_MYSQL)
|
||||
ADD_DEFINITIONS(-DUSED_MYSQL)
|
||||
ENDIF ()
|
||||
|
||||
SET(CMAKE_C_STANDARD 99)
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(misc/zvector.c PROPERTIES COMPILE_FLAGS "-Wall -Wextra -flto")
|
||||
|
@ -71,7 +62,11 @@ IF (USED_SQLITE_CRYPTO)
|
|||
-DSQLITE_HAVE_ZLIB=1 -DSQLITE_TEMP_STORE=2")
|
||||
ENDIF ()
|
||||
|
||||
ADD_DEFINITIONS(${COMMON_DEFINE} -DMG_ARCH=MG_ARCH_UNIX -DMG_ENABLE_OPENSSL=1)
|
||||
ADD_DEFINITIONS(${COMMON_DEFINE})
|
||||
|
||||
IF (USED_HTTP_SVR)
|
||||
ADD_DEFINITIONS(-DMG_ARCH=MG_ARCH_UNIX -DMG_ENABLE_OPENSSL=1)
|
||||
ENDIF ()
|
||||
|
||||
ADD_LIBRARY(${LIB_PROJECT_TARGET} ${C_SRC} ${C_HEADS})
|
||||
|
||||
|
|
|
@ -8,10 +8,9 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
int db_redis_init(void);
|
||||
int db_mysql_init(void);
|
||||
void *get_mysql_handle();
|
||||
void db_mysql_uninit();
|
||||
int db_sqlite3_init();
|
||||
void db_sqlite3_uninit();
|
||||
int db_sqlite3_sql_exec(const char *pSqlCmd, void *pCallback, void *pData, char **pErr);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -9,66 +9,68 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#define DEF_ERR_CODE(ERR_CODE) \
|
||||
ERR_CODE(ERR_SUCCESS, 0, "成功") \
|
||||
ERR_CODE(ERR_INPUT_PARAMS, 1, "输入参数错误") \
|
||||
ERR_CODE(ERR_UN_SUPPORT, 2, "不支持的操作") \
|
||||
ERR_CODE(ERR_CALL_SHELL, 3, "调用Shell命令失败") \
|
||||
ERR_CODE(ERR_ITEM_EXISTS, 4, "该内容已经存在") \
|
||||
ERR_CODE(ERR_ITEM_UNEXISTS, 5, "该内容不存在") \
|
||||
ERR_CODE(ERR_SYS_INIT, 6, "系统中断") \
|
||||
ERR_CODE(ERR_SYS_CALL, 7, "系统调用") \
|
||||
ERR_CODE(ERR_OPEN_FILE, 8, "打开文件失败") \
|
||||
ERR_CODE(ERR_READ_FILE, 9, "读取文件失败") \
|
||||
ERR_CODE(ERR_FILE_NOT_EXISTS, 10, "文件不存在") \
|
||||
ERR_CODE(ERR_FILE_LOCKED, 11, "文件被锁定") \
|
||||
ERR_CODE(ERR_GET_FILE_SIZE, 12, "获取文件大小失败") \
|
||||
ERR_CODE(ERR_COPY_FILE, 13, "复制文件失败") \
|
||||
ERR_CODE(ERR_MALLOC_MEMORY, 14, "分配内存失败") \
|
||||
ERR_CODE(ERR_MMAP_MEMORY, 15, "共享内存失败") \
|
||||
ERR_CODE(ERR_EVP_KEY_SIZE, 16, "秘钥大小不正确") \
|
||||
ERR_CODE(ERR_UNSUP_EVP_TYPE, 17, "不支持的加解密算法") \
|
||||
ERR_CODE(ERR_EVP_INIT_KEY, 18, "初始化秘钥失败") \
|
||||
ERR_CODE(ERR_EVP_UPDATE, 19, "加解密数据失败") \
|
||||
ERR_CODE(ERR_EVP_FINALE, 20, "错误的加解密结果") \
|
||||
ERR_CODE(ERR_EVP_CREATE_CTX, 21, "初始化加解密失败") \
|
||||
ERR_CODE(ERR_AES_KEYGEN, 22, "AES秘钥失败") \
|
||||
ERR_CODE(ERR_EVP_ENCRYPTION, 23, "加密失败") \
|
||||
ERR_CODE(ERR_EVP_DECRYPTION, 24, "解密失败") \
|
||||
ERR_CODE(ERR_CONFIG_INIT, 25, "配置文件初始化失败") \
|
||||
ERR_CODE(ERR_UNCOMPATIBILITY_TYPE, 26, "未兼容的类型") \
|
||||
ERR_CODE(ERR_STRING_TO_NUMBER, 27, "字符串转数字失败") \
|
||||
ERR_CODE(ERR_UNKNOWN_CFG_ID, 28, "未识别的配置项") \
|
||||
ERR_CODE(ERR_ZLOG_INIT, 29, "日志系统初始化失败") \
|
||||
ERR_CODE(ERR_SYS_GET_CPU_INFO, 30, "获取CPU信息失败") \
|
||||
ERR_CODE(ERR_SYS_NOT_FOUND_CPU, 31, "找不到CPU信息") \
|
||||
ERR_CODE(ERR_SYS_DISK_GET_INFO, 32, "获取磁盘空间占用信息失败") \
|
||||
ERR_CODE(ERR_SYS_IPMI_UNSUP, 33, "服务器IPMI接口不支持") \
|
||||
ERR_CODE(ERR_SYS_SENSOR_GET_INFO, 34, "获取传感器信息失败") \
|
||||
ERR_CODE(ERR_DB_CONNECT, 35, "数据库连接失败") \
|
||||
ERR_CODE(ERR_MQ_CREATE_MQ, 36, "创建消息队列失败") \
|
||||
ERR_CODE(ERR_MQ_CREATE_REP, 37, "创建REP消息队列失败") \
|
||||
ERR_CODE(ERR_MQ_BIND_SOCKET, 38, "消息队列BIND Socket失败") \
|
||||
ERR_CODE(ERR_MQ_CONN_SERVER, 39, "消息队列连接服务器失败") \
|
||||
ERR_CODE(ERR_MQ_SEND_MSG, 40, "消息队列发送消息失败") \
|
||||
ERR_CODE(ERR_JSON_CREAT_OBJ, 41, "创建JSON对象失败") \
|
||||
ERR_CODE(ERR_JSON_PARSE_OBJ, 42, "解析JSON对象失败") \
|
||||
ERR_CODE(ERR_JSON_VALID_SCH, 43, "JSON数据验证失败") \
|
||||
ERR_CODE(ERR_CREATE_NETIF, 44, "创建网络接口失败") \
|
||||
ERR_CODE(ERR_CREATE_PPPOE_NETIF, 45, "创建PPPoE网络接口失败") \
|
||||
ERR_CODE(ERR_CREATE_PPP_SESSION, 46, "创建PPP连接失败") \
|
||||
ERR_CODE(ERR_MISC_GET_IPADDR, 47, "获取网卡IP地址失败") \
|
||||
ERR_CODE(ERR_MISC_GET_NETMASK, 48, "获取网卡子网掩码失败") \
|
||||
ERR_CODE(ERR_MISC_GET_GATEWAY, 49, "获取网卡网关地址失败") \
|
||||
ERR_CODE(ERR_MISC_GET_MACADDR, 50, "获取网卡MAC地址失败") \
|
||||
ERR_CODE(ERR_MENU_EXIT, 51, "菜单执行完后自动退出") \
|
||||
ERR_CODE(ERR_HTTP_UNSUP_METHOD, 52, "不支持的 HTTP 请求方法") \
|
||||
ERR_CODE(ERR_HTTP_UNSUP_PAGE, 53, "找不到 HTTP 服务") \
|
||||
ERR_CODE(ERR_PROTO_DECODE, 54, "HTTP 协议解析失败") \
|
||||
ERR_CODE(ERR_MSG_CONTENT, 55, "msgContent内容不正确") \
|
||||
ERR_CODE(ERR_SOCK_CREATE, 56, "创建套接字失败") \
|
||||
ERR_CODE(ERR_SOCK_SETOPT, 57, "设置套接字参数失败")
|
||||
ERR_CODE(ERR_SUCCESS, "成功") \
|
||||
ERR_CODE(ERR_INPUT_PARAMS, "输入参数错误") \
|
||||
ERR_CODE(ERR_UN_SUPPORT, "不支持的操作") \
|
||||
ERR_CODE(ERR_CALL_SHELL, "调用Shell命令失败") \
|
||||
ERR_CODE(ERR_ITEM_EXISTS, "该内容已经存在") \
|
||||
ERR_CODE(ERR_ITEM_UNEXISTS, "该内容不存在") \
|
||||
ERR_CODE(ERR_SYS_INIT, "系统中断") \
|
||||
ERR_CODE(ERR_SYS_CALL, "系统调用") \
|
||||
ERR_CODE(ERR_OPEN_FILE, "打开文件失败") \
|
||||
ERR_CODE(ERR_READ_FILE, "读取文件失败") \
|
||||
ERR_CODE(ERR_FILE_NOT_EXISTS, "文件不存在") \
|
||||
ERR_CODE(ERR_FILE_LOCKED, "文件被锁定") \
|
||||
ERR_CODE(ERR_GET_FILE_SIZE, "获取文件大小失败") \
|
||||
ERR_CODE(ERR_COPY_FILE, "复制文件失败") \
|
||||
ERR_CODE(ERR_MALLOC_MEMORY, "分配内存失败") \
|
||||
ERR_CODE(ERR_MMAP_MEMORY, "共享内存失败") \
|
||||
ERR_CODE(ERR_EVP_KEY_SIZE, "秘钥大小不正确") \
|
||||
ERR_CODE(ERR_UNSUP_EVP_TYPE, "不支持的加解密算法") \
|
||||
ERR_CODE(ERR_EVP_INIT_KEY, "初始化秘钥失败") \
|
||||
ERR_CODE(ERR_EVP_UPDATE, "加解密数据失败") \
|
||||
ERR_CODE(ERR_EVP_FINALE, "错误的加解密结果") \
|
||||
ERR_CODE(ERR_EVP_CREATE_CTX, "初始化加解密失败") \
|
||||
ERR_CODE(ERR_AES_KEYGEN, "AES秘钥失败") \
|
||||
ERR_CODE(ERR_EVP_ENCRYPTION, "加密失败") \
|
||||
ERR_CODE(ERR_EVP_DECRYPTION, "解密失败") \
|
||||
ERR_CODE(ERR_CONFIG_INIT, "配置文件初始化失败") \
|
||||
ERR_CODE(ERR_UNCOMPATIBILITY_TYPE, "未兼容的类型") \
|
||||
ERR_CODE(ERR_STRING_TO_NUMBER, "字符串转数字失败") \
|
||||
ERR_CODE(ERR_UNKNOWN_CFG_ID, "未识别的配置项") \
|
||||
ERR_CODE(ERR_ZLOG_INIT, "日志系统初始化失败") \
|
||||
ERR_CODE(ERR_SYS_GET_CPU_INFO, "获取CPU信息失败") \
|
||||
ERR_CODE(ERR_SYS_NOT_FOUND_CPU, "找不到CPU信息") \
|
||||
ERR_CODE(ERR_SYS_DISK_GET_INFO, "获取磁盘空间占用信息失败") \
|
||||
ERR_CODE(ERR_SYS_IPMI_UNSUP, "服务器IPMI接口不支持") \
|
||||
ERR_CODE(ERR_SYS_SENSOR_GET_INFO, "获取传感器信息失败") \
|
||||
ERR_CODE(ERR_DB_UNINIT, "数据库未连接") \
|
||||
ERR_CODE(ERR_DB_CONNECT, "数据库连接失败") \
|
||||
ERR_CODE(ERR_DB_SQL_EXEC, "数据库SQL命令执行失败") \
|
||||
ERR_CODE(ERR_MQ_CREATE_MQ, "创建消息队列失败") \
|
||||
ERR_CODE(ERR_MQ_CREATE_REP, "创建REP消息队列失败") \
|
||||
ERR_CODE(ERR_MQ_BIND_SOCKET, "消息队列BIND Socket失败") \
|
||||
ERR_CODE(ERR_MQ_CONN_SERVER, "消息队列连接服务器失败") \
|
||||
ERR_CODE(ERR_MQ_SEND_MSG, "消息队列发送消息失败") \
|
||||
ERR_CODE(ERR_JSON_CREAT_OBJ, "创建JSON对象失败") \
|
||||
ERR_CODE(ERR_JSON_PARSE_OBJ, "解析JSON对象失败") \
|
||||
ERR_CODE(ERR_JSON_VALID_SCH, "JSON数据验证失败") \
|
||||
ERR_CODE(ERR_CREATE_NETIF, "创建网络接口失败") \
|
||||
ERR_CODE(ERR_CREATE_PPPOE_NETIF, "创建PPPoE网络接口失败") \
|
||||
ERR_CODE(ERR_CREATE_PPP_SESSION, "创建PPP连接失败") \
|
||||
ERR_CODE(ERR_MISC_GET_IPADDR, "获取网卡IP地址失败") \
|
||||
ERR_CODE(ERR_MISC_GET_NETMASK, "获取网卡子网掩码失败") \
|
||||
ERR_CODE(ERR_MISC_GET_GATEWAY, "获取网卡网关地址失败") \
|
||||
ERR_CODE(ERR_MISC_GET_MACADDR, "获取网卡MAC地址失败") \
|
||||
ERR_CODE(ERR_MENU_EXIT, "菜单执行完后自动退出") \
|
||||
ERR_CODE(ERR_HTTP_UNSUP_METHOD, "不支持的 HTTP 请求方法") \
|
||||
ERR_CODE(ERR_HTTP_UNSUP_PAGE, "找不到 HTTP 服务") \
|
||||
ERR_CODE(ERR_PROTO_DECODE, "HTTP 协议解析失败") \
|
||||
ERR_CODE(ERR_MSG_CONTENT, "msgContent内容不正确") \
|
||||
ERR_CODE(ERR_SOCK_CREATE, "创建套接字失败") \
|
||||
ERR_CODE(ERR_SOCK_SETOPT, "设置套接字参数失败")
|
||||
|
||||
#define GENERATE_ENUM(ENUM, no, x) ENUM,
|
||||
#define GENERATE_ENUM(ENUM, x) ENUM,
|
||||
|
||||
typedef enum {
|
||||
DEF_ERR_CODE(GENERATE_ENUM)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <zlog.h>
|
||||
|
||||
enum {
|
||||
|
@ -30,6 +31,7 @@ typedef enum {
|
|||
ZLOG_MOD(ZLOG_MOD_MISC, ZLOG_LEVEL_DEBUG, "MISC") \
|
||||
ZLOG_MOD(ZLOG_MOD_WATCH, ZLOG_LEVEL_DEBUG, "WATCH") \
|
||||
ZLOG_MOD(ZLOG_MOD_CONFIG, ZLOG_LEVEL_DEBUG, "CONFIG") \
|
||||
ZLOG_MOD(ZLOG_MOD_DB, ZLOG_LEVEL_DEBUG, "DB") \
|
||||
ZLOG_MOD(ZLOG_MOD_NET, ZLOG_LEVEL_DEBUG, "NET") \
|
||||
ZLOG_MOD(ZLOG_MOD_CRYPTO, ZLOG_LEVEL_DEBUG, "CRYPTO") \
|
||||
ZLOG_MOD(ZLOG_MOD_MQ, ZLOG_LEVEL_DEBUG, "MQ") \
|
||||
|
@ -88,8 +90,11 @@ typedef enum {
|
|||
} while (0)
|
||||
|
||||
zlog_category_t *zlog_get_mod_cat(ZLOG_MOD_NAME logMod);
|
||||
|
||||
int zlog_verify_level(int level, ZLOG_MOD_NAME logMod);
|
||||
|
||||
const char *zlog_vni_tag_get();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
#include "lib_config.h"
|
||||
#include "prj_config.h"
|
||||
#include "zlog_module.h"
|
||||
#ifdef SQLITE_ON
|
||||
#include "database.h"
|
||||
#endif
|
||||
#ifdef ZEROMQ_ON
|
||||
#include "msg_queue.h"
|
||||
#endif
|
||||
|
@ -137,6 +140,10 @@ int user_init(const char *pAppCfgFile, const char *pCfgDirectory, const char *pK
|
|||
if (cfg_get_hardware_watch_enable()) {
|
||||
init_hardware();
|
||||
}
|
||||
#ifdef SQLITE_ON
|
||||
db_sqlite3_init();
|
||||
#endif
|
||||
|
||||
#ifdef ZEROMQ_ON
|
||||
if ((ret = mq_init()) != ERR_SUCCESS) {
|
||||
LOG_MOD(error, ZLOG_MOD_INIT, "Message queue init error: %d\n", ret);
|
||||
|
@ -157,6 +164,9 @@ int user_init(const char *pAppCfgFile, const char *pCfgDirectory, const char *pK
|
|||
void user_uninit() {
|
||||
if (g_isInited) {
|
||||
task_manager_exit();
|
||||
#ifdef SQLITE_ON
|
||||
db_sqlite3_uninit();
|
||||
#endif
|
||||
#ifdef HTTPSERVER_ON
|
||||
http_svr_uinit();
|
||||
#endif
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "common.h"
|
||||
|
||||
#define MAX_DESC_LENGTH (256)
|
||||
#define GENERATE_STRING(STRING, no, desc) {#STRING, desc},
|
||||
#define GENERATE_STRING(STRING, desc) {#STRING, desc},
|
||||
|
||||
static const char *g_enumStrVal[][MAX_DESC_LENGTH] = {
|
||||
DEF_ERR_CODE(GENERATE_STRING) {"ERR_UNKNOWN", "未知错误"},
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "network/vlan.h"
|
||||
#include "dhcp_options.h"
|
||||
#include "config.h"
|
||||
#include "ip_pool.h"
|
||||
#include "user_mgr.h"
|
||||
|
||||
#define PKG_MMAP_BLOCKSIZ (1 << 22)
|
||||
|
@ -444,6 +443,7 @@ int dhcpd_init() {
|
|||
|
||||
dhcp_user_mgr_init();
|
||||
dhcp_option_cfg_init();
|
||||
dhcp_lease_init();
|
||||
|
||||
uv_udp_init(get_task_manager(), &uvRaw);
|
||||
uv_udp_open(&uvRaw, sock);
|
||||
|
|
|
@ -24,6 +24,7 @@ typedef struct {
|
|||
U32 express;
|
||||
} LEASE_CACHE, *PLEASE_CACHE;
|
||||
|
||||
int dhcp_lease_init();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3,6 +3,41 @@
|
|||
//
|
||||
|
||||
#include "lease.h"
|
||||
#include "user_errno.h"
|
||||
#include "zlog_module.h"
|
||||
#include "database.h"
|
||||
|
||||
#define LEASE_DB_NAME ("lease")
|
||||
|
||||
static PMAC_FILTER g_allowTbl = NULL;
|
||||
static PMAC_FILTER g_blackListTbl = NULL;
|
||||
|
||||
#define CREATE_LEASE_TABLE(name) \
|
||||
"CREATE TABLE IF NOT EXISTS " #name \
|
||||
" ( id INTEGER PRIMARY KEY AUTOINCREMENT," \
|
||||
" uid INTEGER NOT NULL," \
|
||||
" mac CHAR(20) NOT NULL," \
|
||||
" ip INTEGER NOT NULL," \
|
||||
" lease INTEGER NOT NULL," \
|
||||
" create INTEGER NOT NULL," \
|
||||
" netmask INTEGER," \
|
||||
" gateway INTEGER," \
|
||||
" dns1 INTEGER," \
|
||||
" dns2 INTEGER," \
|
||||
" server INTEGER NOT NULL," \
|
||||
" hostname CHAR(64) DEFAULT '' NOT NULL," \
|
||||
" keyType INTEGER NOT NULL" \
|
||||
");" \
|
||||
"CREATE INDEX IF NOT EXISTS " #name "_index ON " #name " (uid, mac);"
|
||||
|
||||
int dhcp_lease_init() {
|
||||
int rc = 0;
|
||||
|
||||
rc = db_sqlite3_sql_exec(CREATE_LEASE_TABLE(lease), NULL, NULL, NULL);
|
||||
|
||||
if (rc != ERR_SUCCESS) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
return ERR_SUCCESS;
|
||||
}
|
Loading…
Reference in New Issue