commit e388c5a8ebedc407bc6157fcaa1a2a04bcd80408 Author: lzq Date: Fri Jun 13 19:05:41 2025 +0800 1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4be46c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.iml +.idea/ +.vs/ +build/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..1abbc36 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,78 @@ +cmake_minimum_required(VERSION 3.31) +project(deviceAccessLayer) + +set(CMAKE_CXX_STANDARD 20) + +set(PACKAGE_DIRS + ${CMAKE_CURRENT_LIST_DIR}/lib/openssl + ${CMAKE_CURRENT_LIST_DIR}/lib/HCNetSDK +) +foreach (PACKAGE_DIR ${PACKAGE_DIRS}) + list(APPEND CMAKE_PREFIX_PATH ${PACKAGE_DIR}) +endforeach () + +find_package(openssl CONFIG REQUIRED) +find_package(nlohmann_json CONFIG REQUIRED) +find_package(spdlog CONFIG REQUIRED) +find_package(mqtt_cpp_iface CONFIG REQUIRED) +find_package(HCNet CONFIG REQUIRED) +find_package(ICU REQUIRED COMPONENTS uc) +find_path(CPP_HTTPLIB_INCLUDE_DIRS "httplib.h") # 使用时要先于 windows.h 包含 +find_path(CPPCODEC_INCLUDE_DIRS "cppcodec/base32_crockford.hpp") +set(SOURCE_DIRS + src/common + src/vidicon + src/report_svr + src/barrier + src/sound_column + src/http + src/mqtt + src/oss + src/serial_port + src/platform_scale + src +) +set(INCLUDE_DIRS + src + ${CPP_HTTPLIB_INCLUDE_DIRS} + ${CPPCODEC_INCLUDE_DIRS} +) +list(REMOVE_DUPLICATES INCLUDE_DIRS) + +set(LINK_DIRS + src +) +set(LIBRARIES + openssl::libssl + openssl::libcrypto + mqtt_cpp_iface::mqtt_cpp_iface + nlohmann_json::nlohmann_json + spdlog::spdlog + HCNet::HCNetSDK + HCNet::HCCore + ICU::uc +) + + +set(SOURCES "") +foreach (SOURCE_DIR ${SOURCE_DIRS}) + file(GLOB_RECURSE SOURCE_FILE "${SOURCE_DIR}/*.cpp" "${SOURCE_DIR}/*.c") + list(APPEND SOURCES ${SOURCE_FILE}) +endforeach () +add_compile_options("/utf-8" "/bigobj") + +file(COPY ${CMAKE_CURRENT_LIST_DIR}/config/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/config/) + +add_executable(${PROJECT_NAME} main.cpp ${SOURCES}) +target_include_directories(${PROJECT_NAME} PRIVATE ${INCLUDE_DIRS}) + +target_link_directories(${PROJECT_NAME} PRIVATE ${LINK_DIRS}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBRARIES}) + +target_compile_definitions(${PROJECT_NAME} PUBLIC + UNICODE # 启用 windows 的宽字符 API + NOMINMAX # 防止 windows 库与标准库中的 min、max 冲突 + SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO # 启用日志宏 + CPPHTTPLIB_OPENSSL_SUPPORT # httplib 支持 openssl + MQTT_STD_VARIANT +) diff --git a/config/config.json b/config/config.json new file mode 100644 index 0000000..3c398b5 --- /dev/null +++ b/config/config.json @@ -0,0 +1,115 @@ +{ + "httpSvr": { + "port": 11000 + }, + "oss": { + "endpoint": "oss-cn-shanghai.aliyuncs.com", + "bucketName": "tq-cdn", + "ak": "LTAI5t9ppUx8fkEnPwnNwmnx", + "sk": "uxrwL01P1Nw6M3YRFWoMIluY4swKwC" + }, + "mqtts": [ + { + "sn": "local", + "name": "本地", + "server": "127.0.0.1", + "port": 1883, + "clientId": "local", + "username": "dcs", + "password": "123456", + "subscribes": [ + { + "topic": "stop", + "qos": 0 + } + ] + }, + { + "sn": "remote", + "name": "远程", + "server": "127.0.0.1", + "port": 1883, + "clientId": "yztq", + "username": "dcs", + "password": "123456", + "subscribes": [ + { + "topic": "yztq/1/barrier", + "qos": 0 + }, + { + "topic": "yztq/1/voice", + "qos": 0 + } + ] + } + ], + "reportSvr": { + "server": "http://127.0.0.1:8080", + "passUrl": "/api/site/report-car-pass?debug=1", + "reportUrl": "/api/site/report-v2?debug=1" + }, + "barriers": [ + { + "name": "进前置", + "sn": "b11ceeb5-af42d80f", + "io": 0, + "platformScale": "1", + "soundColumn": "1", + "vidicon": "1" + }, + { + "name": "进", + "sn": "25ec7559-74125e77", + "io": 0, + "platformScale": "1", + "soundColumn": "1", + "vidicon": "1" + }, + { + "name": "出前置", + "sn": "351b2406-6fae5ab5", + "io": 0, + "platformScale": "1", + "soundColumn": "1", + "vidicon": "1" + }, + { + "name": "出", + "sn": "34fc9ce5-8b091060", + "io": 0, + "platformScale": "1", + "soundColumn": "1", + "vidicon": "1" + } + ], + "platformScales": [ + { + "sn": "1", + "name": "地磅", + "port": "COM2", + "baudRate": 1200, + "byteSize": 8, + "parity": 0, + "stopBits": 0 + } + ], + "soundColumns": [ + { + "sn": "1", + "name": "音柱", + "server": "http://localhost:8080", + "path": "/v1/speech" + } + ], + "vidicons": [ + { + "sn": "1", + "name": "摄像头", + "ip": "192.168.2.64", + "port": 8000, + "username": "admin", + "passwd": "Zsy8899." + } + ] +} \ No newline at end of file diff --git a/lib/HCNetSDK/HCNetConfig.cmake b/lib/HCNetSDK/HCNetConfig.cmake new file mode 100644 index 0000000..762d7a0 --- /dev/null +++ b/lib/HCNetSDK/HCNetConfig.cmake @@ -0,0 +1,27 @@ +# 设置库的根目录 +set(HCNet_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "HCNetSDK 根目录") + +# 设置头文件目录 +set(HCNet_INCLUDE_DIRS ${HCNet_ROOT_DIR}/include) + +# 创建导入目标 +add_library(HCNet::HCNetSDK SHARED IMPORTED) +set_target_properties(HCNet::HCNetSDK PROPERTIES + IMPORTED_LOCATION ${HCNet_ROOT_DIR}/bin/HCNetSDK.dll + IMPORTED_LOCATION_DEBUG ${HCNet_ROOT_DIR}/bin/HCNetSDK.dll + IMPORTED_IMPLIB ${HCNet_ROOT_DIR}/bin/HCNetSDK.lib + IMPORTED_IMPLIB_DEBUG ${HCNet_ROOT_DIR}/bin/HCNetSDK.lib + INTERFACE_INCLUDE_DIRECTORIES ${HCNet_INCLUDE_DIRS} +) +add_library(HCNet::HCCore SHARED IMPORTED) +set_target_properties(HCNet::HCCore PROPERTIES + IMPORTED_LOCATION ${HCNet_ROOT_DIR}/bin/HCCore.dll + IMPORTED_LOCATION_DEBUG ${HCNet_ROOT_DIR}/bin/HCCore.dll + IMPORTED_IMPLIB ${HCNet_ROOT_DIR}/bin/HCCore.lib + IMPORTED_IMPLIB_DEBUG ${HCNet_ROOT_DIR}/bin/HCCore.lib + INTERFACE_INCLUDE_DIRECTORIES ${HCNet_INCLUDE_DIRS} +) + +file(COPY ${HCNet_ROOT_DIR}/bin/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + +set(HCNet_FOUND TRUE) diff --git a/lib/HCNetSDK/bin/AudioRender.dll b/lib/HCNetSDK/bin/AudioRender.dll new file mode 100644 index 0000000..4935684 Binary files /dev/null and b/lib/HCNetSDK/bin/AudioRender.dll differ diff --git a/lib/HCNetSDK/bin/GdiPlus.dll b/lib/HCNetSDK/bin/GdiPlus.dll new file mode 100644 index 0000000..b759ed6 Binary files /dev/null and b/lib/HCNetSDK/bin/GdiPlus.dll differ diff --git a/lib/HCNetSDK/bin/GdiPlus.lib b/lib/HCNetSDK/bin/GdiPlus.lib new file mode 100644 index 0000000..6fb1bb6 Binary files /dev/null and b/lib/HCNetSDK/bin/GdiPlus.lib differ diff --git a/lib/HCNetSDK/bin/HCCore.dll b/lib/HCNetSDK/bin/HCCore.dll new file mode 100644 index 0000000..48f8411 Binary files /dev/null and b/lib/HCNetSDK/bin/HCCore.dll differ diff --git a/lib/HCNetSDK/bin/HCCore.lib b/lib/HCNetSDK/bin/HCCore.lib new file mode 100644 index 0000000..495c74a Binary files /dev/null and b/lib/HCNetSDK/bin/HCCore.lib differ diff --git a/lib/HCNetSDK/bin/HCNetSDK.dll b/lib/HCNetSDK/bin/HCNetSDK.dll new file mode 100644 index 0000000..2ed412e Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDK.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDK.lib b/lib/HCNetSDK/bin/HCNetSDK.lib new file mode 100644 index 0000000..ff8e9e2 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDK.lib differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/AnalyzeData.dll b/lib/HCNetSDK/bin/HCNetSDKCom/AnalyzeData.dll new file mode 100644 index 0000000..2317b39 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/AnalyzeData.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/AudioIntercom.dll b/lib/HCNetSDK/bin/HCNetSDKCom/AudioIntercom.dll new file mode 100644 index 0000000..071a5e2 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/AudioIntercom.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/AudioRender.dll b/lib/HCNetSDK/bin/HCNetSDKCom/AudioRender.dll new file mode 100644 index 0000000..4935684 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/AudioRender.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.dll new file mode 100644 index 0000000..bdb8406 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.lib b/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.lib new file mode 100644 index 0000000..0aa0d4c Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCAlarm.lib differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCCoreDevCfg.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCCoreDevCfg.dll new file mode 100644 index 0000000..7cd924e Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCCoreDevCfg.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCDisplay.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCDisplay.dll new file mode 100644 index 0000000..f0a2b7c Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCDisplay.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.dll new file mode 100644 index 0000000..3719694 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.lib b/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.lib new file mode 100644 index 0000000..7091c25 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCGeneralCfgMgr.lib differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCIndustry.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCIndustry.dll new file mode 100644 index 0000000..9af77a1 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCIndustry.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCPlayBack.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCPlayBack.dll new file mode 100644 index 0000000..8d8e8a7 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCPlayBack.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.dll new file mode 100644 index 0000000..005656d Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.lib b/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.lib new file mode 100644 index 0000000..18d4d63 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCPreview.lib differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/HCVoiceTalk.dll b/lib/HCNetSDK/bin/HCNetSDKCom/HCVoiceTalk.dll new file mode 100644 index 0000000..eb04a1e Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/HCVoiceTalk.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/OpenAL32.dll b/lib/HCNetSDK/bin/HCNetSDKCom/OpenAL32.dll new file mode 100644 index 0000000..4b35df4 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/OpenAL32.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/StreamTransClient.dll b/lib/HCNetSDK/bin/HCNetSDKCom/StreamTransClient.dll new file mode 100644 index 0000000..a69e9bf Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/StreamTransClient.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/SystemTransform.dll b/lib/HCNetSDK/bin/HCNetSDKCom/SystemTransform.dll new file mode 100644 index 0000000..f704e49 Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/SystemTransform.dll differ diff --git a/lib/HCNetSDK/bin/HCNetSDKCom/libiconv2.dll b/lib/HCNetSDK/bin/HCNetSDKCom/libiconv2.dll new file mode 100644 index 0000000..978e2fa Binary files /dev/null and b/lib/HCNetSDK/bin/HCNetSDKCom/libiconv2.dll differ diff --git a/lib/HCNetSDK/bin/HXVA.dll b/lib/HCNetSDK/bin/HXVA.dll new file mode 100644 index 0000000..b7ebfcc Binary files /dev/null and b/lib/HCNetSDK/bin/HXVA.dll differ diff --git a/lib/HCNetSDK/bin/HmMerge.dll b/lib/HCNetSDK/bin/HmMerge.dll new file mode 100644 index 0000000..d46a6ac Binary files /dev/null and b/lib/HCNetSDK/bin/HmMerge.dll differ diff --git a/lib/HCNetSDK/bin/LocalSensorAdd.dat b/lib/HCNetSDK/bin/LocalSensorAdd.dat new file mode 100644 index 0000000..e69de29 diff --git a/lib/HCNetSDK/bin/LocalXml.zip b/lib/HCNetSDK/bin/LocalXml.zip new file mode 100644 index 0000000..3620e68 Binary files /dev/null and b/lib/HCNetSDK/bin/LocalXml.zip differ diff --git a/lib/HCNetSDK/bin/MP_Render.dll b/lib/HCNetSDK/bin/MP_Render.dll new file mode 100644 index 0000000..e5cde63 Binary files /dev/null and b/lib/HCNetSDK/bin/MP_Render.dll differ diff --git a/lib/HCNetSDK/bin/NPQos.dll b/lib/HCNetSDK/bin/NPQos.dll new file mode 100644 index 0000000..c709f56 Binary files /dev/null and b/lib/HCNetSDK/bin/NPQos.dll differ diff --git a/lib/HCNetSDK/bin/OpenAL32.dll b/lib/HCNetSDK/bin/OpenAL32.dll new file mode 100644 index 0000000..4b35df4 Binary files /dev/null and b/lib/HCNetSDK/bin/OpenAL32.dll differ diff --git a/lib/HCNetSDK/bin/PlayCtrl.dll b/lib/HCNetSDK/bin/PlayCtrl.dll new file mode 100644 index 0000000..2a5eb97 Binary files /dev/null and b/lib/HCNetSDK/bin/PlayCtrl.dll differ diff --git a/lib/HCNetSDK/bin/PlayCtrl.lib b/lib/HCNetSDK/bin/PlayCtrl.lib new file mode 100644 index 0000000..ddcf2f4 Binary files /dev/null and b/lib/HCNetSDK/bin/PlayCtrl.lib differ diff --git a/lib/HCNetSDK/bin/SuperRender.dll b/lib/HCNetSDK/bin/SuperRender.dll new file mode 100644 index 0000000..b00c0c2 Binary files /dev/null and b/lib/HCNetSDK/bin/SuperRender.dll differ diff --git a/lib/HCNetSDK/bin/YUVProcess.dll b/lib/HCNetSDK/bin/YUVProcess.dll new file mode 100644 index 0000000..d86ec3f Binary files /dev/null and b/lib/HCNetSDK/bin/YUVProcess.dll differ diff --git a/lib/HCNetSDK/bin/hlog.dll b/lib/HCNetSDK/bin/hlog.dll new file mode 100644 index 0000000..fe2298a Binary files /dev/null and b/lib/HCNetSDK/bin/hlog.dll differ diff --git a/lib/HCNetSDK/bin/hpr.dll b/lib/HCNetSDK/bin/hpr.dll new file mode 100644 index 0000000..eef0d55 Binary files /dev/null and b/lib/HCNetSDK/bin/hpr.dll differ diff --git a/lib/HCNetSDK/bin/libmmd.dll b/lib/HCNetSDK/bin/libmmd.dll new file mode 100644 index 0000000..8becb5e Binary files /dev/null and b/lib/HCNetSDK/bin/libmmd.dll differ diff --git a/lib/HCNetSDK/bin/zlib1.dll b/lib/HCNetSDK/bin/zlib1.dll new file mode 100644 index 0000000..9c37a84 Binary files /dev/null and b/lib/HCNetSDK/bin/zlib1.dll differ diff --git a/lib/HCNetSDK/include/DataType.h b/lib/HCNetSDK/include/DataType.h new file mode 100644 index 0000000..225ee32 --- /dev/null +++ b/lib/HCNetSDK/include/DataType.h @@ -0,0 +1,111 @@ +#ifndef DATA_TYPE_H +#define DATA_TYPE_H +#define FRAME_HEAD_MAGIC 0x03211546 +#define SYSTEM_SYNC_ID 2 + +#ifdef __LINUX__ +typedef unsigned char UCHAR; +typedef unsigned char* PBYTE; +typedef char* LPTSTR; +typedef unsigned short USHORT; +typedef int HANDLE; +typedef unsigned long ULONG; +typedef unsigned long DWORD; +#endif //#ifdef __LINUX__ + +typedef struct tagFrameInfo{ + ULONG SyncId; /* 00000000000000000000000000010b */ + ULONG Magic; + USHORT FrameType; /* I frames , P frames or BBP frames Audio frames or dsp status etc */ + ULONG Length; /*lenth include this header */ + ULONG FrameNumber; /* serial number of this frame */ + UCHAR Breakable; /* indicate if stream breakable, you could restart new file(with PktSysHeader) if true */ + /*ULONG Ack;*/ + ULONG PTS; /* system clock when this frames is processed */ +}TMFRAME_HEADER, *PTMFRAME_HEADER; + +typedef enum { + StandardNone = 0x80000000, + StandardNTSC = 0x00000001, + StandardPAL = 0x00000002, + StandardSECAM = 0x00000004, +} VideoStandard_t; + + +typedef enum { + PktError = 0, + PktIFrames = 0x0001, + PktPFrames = 0x0002, + PktBBPFrames = 0x0004, + PktAudioFrames = 0x0008, + PktMotionDetection = 0x00010, + PktDspStatus = 0x00020, + PktOrigImage = 0x00040, + PktSysHeader = 0x00080, + PktBPFrames = 0x00100, + PktSFrames = 0x00200, + PktSubIFrames = 0x00400, + PktSubPFrames = 0x00800, + PktSubBBPFrames = 0x01000, + PktSubSysHeader = 0x02000 +}FrameType_t; + +typedef struct tagVersion{ + ULONG DspVersion, DspBuildNum; + ULONG DriverVersion, DriverBuildNum; + ULONG SDKVersion, SDKBuildNum; +}VERSION_INFO, *PVERSION_INFO; + +typedef enum { + ENC_CIF_FORMAT = 0, + ENC_QCIF_FORMAT = 1, + ENC_2CIF_FORMAT = 2, + ENC_4CIF_FORMAT = 3, + ENC_QQCIF_FORMAT = 4, + ENC_CIFQCIF_FORMAT =5, + ENC_CIFQQCIF_FORMAT =6, + ENC_DCIF_FORMAT =7, + ENC_VGA_FORMAT=8 +}PictureFormat_t; + +typedef struct tagMotionData{ + PictureFormat_t PicFormat; + ULONG HorizeBlocks; + ULONG VerticalBlocks; + ULONG BlockSize; +}MOTION_DATA_HEADER, *PMOTION_DATA_HEADER; + + +#define _OSD_BASE 0x9000 /*base address of special character*/ +#define _OSD_YEAR4 (_OSD_BASE+0) /*show year time by length of 4 , for example: 2005*/ +#define _OSD_YEAR2 (_OSD_BASE+1) /*show year time by length of 2, for example: 05 */ +#define _OSD_MONTH3 (_OSD_BASE+2) /*show month time in English, for example: Jan*/ +#define _OSD_MONTH2 (_OSD_BASE+3) /*show month time by two Arabic numerals, for example: 07*/ +#define _OSD_DAY (_OSD_BASE+4) /*show day time by two Arabic numerals, for example: 31*/ +#define _OSD_WEEK3 (_OSD_BASE+5) /*show week time in English: MONблSUN*/ +#define _OSD_CWEEK1 (_OSD_BASE+6) /*show week time in Chinese GB code*/ +#define _OSD_HOUR24 (_OSD_BASE+7) /*show 24 hours clock: 00бл23 */ +#define _OSD_HOUR12 (_OSD_BASE+8) /*show 12 hours clock: 00бл12*/ +#define _OSD_MINUTE (_OSD_BASE+9) /*show minute time by length of 2: 00бл59*/ +#define _OSD_SECOND (_OSD_BASE+10) /*show second time by length of 2: 00бл59*/ +#define _OSD_MILISECOND (_OSD_BASE+11) /*show millisecond time by length of 3: 000~999*/ +#define _OSD_APM (_OSD_BASE+14) /*show a.m. or p.m. by length of 2 bit, AM or PM*/ + +//For new added APIs to set OSD: SetEncoderOsdDisplayMode, SetDecoderOsdDisplayMode and SetDisplayOsdDisplayMode in v6.0 SDK, we use new basic address of special character. +#define _OSD_BASE_EX 0x90000 /*base address of special character*/ +#define _OSD_YEAR4_EX (_OSD_BASE_EX+0) /*the same as _OSD_YEAR4*/ +#define _OSD_YEAR2_EX (_OSD_BASE_EX+1) /*the same as _OSD_YEAR2*/ +#define _OSD_MONTH3_EX (_OSD_BASE_EX+2) /*the same as _OSD_MONTH3*/ +#define _OSD_MONTH2_EX (_OSD_BASE_EX+3) /*the same as _OSD_MONTH2*/ +#define _OSD_DAY_EX (_OSD_BASE_EX+4) /*the same as _OSD_DAY*/ +#define _OSD_WEEK3_EX (_OSD_BASE_EX+5) /*the same as _OSD_WEEK3*/ +#define _OSD_CWEEK1_EX (_OSD_BASE_EX+6) /*the same as _OSD_CWEEK1*/ +#define _OSD_HOUR24_EX (_OSD_BASE_EX+7) /*the same as _OSD_HOUR24*/ +#define _OSD_HOUR12_EX (_OSD_BASE_EX+8) /*the same as _OSD_HOUR12*/ +#define _OSD_MINUTE_EX (_OSD_BASE_EX+9) /*the same as _OSD_MINUTE*/ +#define _OSD_SECOND_EX (_OSD_BASE_EX+10) /*the same as _OSD_SECOND*/ +#define _OSD_MILISECOND_EX (_OSD_BASE_EX+11) /*the same as _OSD_MILISECOND*/ +#define _OSD_APM_EX (_OSD_BASE_EX+14) /*the same as _OSD_APM*/ + + +#endif diff --git a/lib/HCNetSDK/include/DecodeCardSdk.h b/lib/HCNetSDK/include/DecodeCardSdk.h new file mode 100644 index 0000000..d6dad7f --- /dev/null +++ b/lib/HCNetSDK/include/DecodeCardSdk.h @@ -0,0 +1,451 @@ +/////////////////////////////////////////////////////////////////////////// +// DS-40xxHC/HF BOARD SYSTEM SDK // +/////////////////////////////////////////////////////////////////////////// + +#ifndef DECODECARD_SDK_H +#define DECODECARD_SDK_H + +#include "datatype.h" + +#define DLLEXPORT_API extern "C" __declspec(dllexport) +#define ERR_WAIT_TIMEOUT 0xc0000001 +#define ERR_INVALID_HANDLE 0xc0000002 +#define ERR_INVALID_ARGUMENT 0xc0000003 +#define ERR_DDRAW_CREATE_FAILED 0xc0000004 +#define ERR_DDRAW_CAPS_FAULT 0xc0000005 +#define ERR_SET_COOPERATIVELEVEL_FAILED 0xc0000006 +#define ERR_PRIMARY_SURFACE_CREATE_FAILED 0xc0000007 +#define ERR_GET_OVERLAY_ADDRESS_FAILED 0xc0000008 +#define ERR_OVERLAY_SURFACE_CREATE_FAILED 0xc0000009 +#define ERR_OVERLAY_UPDATE_FAILED 0xc000000a +#define ERR_TMMAN_FAILURE 0xc000000b +#define ERR_CHANNELMAGIC_MISMATCH 0xc000000c +#define ERR_CALLBACK_REGISTERED 0xc000000d +#define ERR_QUEUE_OVERFLOW 0xc000000e +#define ERR_STREAM_THREAD_FAILURE 0xc000000f +#define ERR_THREAD_STOP_ERROR 0xc0000010 +#define ERR_NOT_SUPPORT 0xc0000011 +#define ERR_OUTOF_MEMORY 0xc0000012 +#define ERR_DSP_BUSY 0xc0000013 +#define ERR_DATA_ERROR 0xc0000014 +#define ERR_KERNEL 0xc0000016 +#define ERR_OFFSCREEN_CREATE_FAILED 0xc0000017 +#define ERR_MULTICLOCK_FAILURE 0xc0000018 +#define ERR_INVALID_DEVICE 0xc0000019 +#define ERR_INVALID_DRIVER 0xc000001a +//error code for MD card +#define HWERR_SUCCESS 0 +#define HWERR_ALLOCATE_MEMORY 0xc1000001 +#define HWERR_INVALID_HANDLE 0xc1000002 +#define HWERR_DDRAW_CREATE_FAILED 0xc1000003 +#define HWERR_DDRAW_CAPS_FAULT 0xc1000004 +#define HWERR_SET_COOPERATIVELEVEL_FAILED 0xc1000005 +#define HWERR_PRIMARY_SURFACE_CREATE_FAILED 0xc1000006 +#define HWERR_OVERLAY_CREATE_FAILED 0xc1000007 +#define HWERR_GET_OVERLAY_ADDRESS_FAILED 0xc1000008 +#define HWERR_OVERLAY_UPDATE_FAILED 0xc1000009 +#define HWERR_SURFACE_NULL 0xc100000a +#define HWERR_FILEHEADER_UNKNOWN 0xc100000b +#define HWERR_CREATE_FILE_FAILED 0xc100000c +#define HWERR_FILE_SIZE_ZERO 0xc100000d +#define HWERR_FILE_SIZE_INVALID 0xc100000d +#define HWERR_CREATE_OBJ_FAILED 0xc100000e +#define HWERR_CHANNELMAGIC_MISMATCH 0xc100000f +#define HWERR_PARA_OVER 0xc1000010 +#define HWERR_ORDER 0xc1000011 +#define HWERR_COMMAND 0xc1000012 +#define HWERR_UNSUPPORTED 0xc1000013 +#define HWERR_DSPOPEN 0xc1000014 +#define HWERR_DSPLOAD 0xc1000015 +#define HWERR_ALLOCATE_DSPMEMORY 0xc1000016 +#define HWERR_DSPCHECHER 0xc1000017 +#define HWERR_IMGFILE_UNKNOWN 0xc1000018 +#define HWERR_INVALID_FILE 0xc1000019 +//standart +#define HW_PAL 2 +#define HW_NTSC 1 +//jump direction +#define HW_JUMP_FORWARD 309 +#define HW_JUMP_BACKWARD 310 + + +typedef enum tagTypeVideoFormat +{ + vdfRGB8A_233 = 0x00000001, + vdfRGB8R_332 = 0x00000002, + vdfRGB15Alpha = 0x00000004, + vdfRGB16 = 0x00000008, + vdfRGB24 = 0x00000010, + vdfRGB24Alpha = 0x00000020, + + vdfYUV420Planar = 0x00000040, + vdfYUV422Planar = 0x00000080, + vdfYUV411Planar = 0x00000100, + vdfYUV420Interspersed = 0x00000200, + vdfYUV422Interspersed = 0x00000400, + vdfYUV411Interspersed = 0x00000800, + vdfYUV422Sequence = 0x00001000, /* U0, Y0, V0, Y1: For VO overlay */ + vdfYUV422SequenceAlpha = 0x00002000, + /* U0, Y0, V0, Y1: For VO overlay, with low bit for alpha blending */ + vdfMono = 0x00004000, /* 8 bit monochrome */ + + vdfYUV444Planar = 0x00008000, +}TypeVideoFormat; + + +typedef enum _BitrateControlType_t +{ + brCBR = 0, + brVBR = 1, +}BitrateControlType_t; + +typedef enum _BOARD_TYPE_DS +{ + DS400XM =0, + DS400XH =1, + DS4004HC =2, + DS4008HC =3, + DS4016HC =4, + DS4001HF =5, + DS4004HF =6, + DS4002MD =7, + DS4004MD =8, //4004MD + DS4016HCS =9, //4016HCS + DS4002HT =10, //4002HT + DS4004HT =11, //4004HT + DS4008HT =12, //4008HT + DS4004HC_PLUS =13, //4004HC+ + DS4008HC_PLUS =14, //4008HC+ + DS4016HC_PLUS =15, //4016HC+ + DS4008HF =16, //4008HF + DS4008MD =17, //4008MD + DS4008HS =18, //4008HS + DS4016HS =19, //4016HS + INVALID_BOARD_TYPE =0xffffffff, +}BOARD_TYPE_DS; + +#define STREAM_TYPE_VIDEO 1 +#define STREAM_TYPE_AUDIO 2 +#define STREAM_TYPE_AVSYNC 3 +#define DRAWFUN(x) void (CALLBACK* x)(long nPort,HDC hDc,LONG nUser) + + +typedef void (*LOGRECORD_CALLBACK)(char *str, void *context); +typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context); +typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,void *DataBuf,DWORD Length,int FrameType,void *context); + +typedef struct tagChannelCapability{ + UCHAR bAudioPreview; + UCHAR bAlarmIO; + UCHAR bWatchDog; +}CHANNEL_CAPABILITY, *PCHANNEL_CAPABILITY; + +typedef struct tagFramsStatistics{ + ULONG VideoFrames; + ULONG AudioFrames; + ULONG FramesLost; + ULONG QueueOverflow; + ULONG CurBps; +}FRAMES_STATISTICS, *PFRAMES_STATISTICS; + +DLLEXPORT_API int __stdcall InitDSPs(); +DLLEXPORT_API int __stdcall DeInitDSPs(); +DLLEXPORT_API HANDLE __stdcall ChannelOpen(int ChannelNum); +DLLEXPORT_API int __stdcall ChannelClose(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall GetTotalChannels(); +DLLEXPORT_API int __stdcall GetTotalDSPs(); +DLLEXPORT_API int __stdcall StartVideoPreview(HANDLE hChannelHandle,HWND WndHandle, RECT *rect, BOOLEAN bOverlay, int VideoFormat, int FrameRate); +DLLEXPORT_API int __stdcall StopVideoPreview(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall SetVideoPara(HANDLE hChannelHandle, int Brightness, int Contrast, int Saturation, int Hue); +DLLEXPORT_API int __stdcall GetVideoPara(HANDLE hChannelHandle, VideoStandard_t *VideoStandard, int *Brightness, int *Contrast, int *Saturation, int *Hue); +DLLEXPORT_API int __stdcall GetVideoSignal(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo); +DLLEXPORT_API int __stdcall GetCapability(HANDLE hChannelHandle, CHANNEL_CAPABILITY *Capability); +DLLEXPORT_API int __stdcall GetLastErrorNum(HANDLE hChannelHandle, ULONG *DspError, ULONG *SdkError); +DLLEXPORT_API int __stdcall SetStreamType(HANDLE hChannelHandle, USHORT Type); +DLLEXPORT_API int __stdcall GetStreamType(HANDLE hChannelHandle, USHORT *StreamType); +DLLEXPORT_API int __stdcall GetFramesStatistics(HANDLE hChannelHandle, PFRAMES_STATISTICS framesStatistics); +DLLEXPORT_API int __stdcall StartMotionDetection(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall GetBoardInfo(HANDLE hChannelHandle, ULONG *BoardType, UCHAR *SerialNo); +DLLEXPORT_API int __stdcall StopMotionDetection(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf, ULONG *Size); +DLLEXPORT_API int __stdcall RegisterLogRecordCallback(LOGRECORD_CALLBACK LogRecordFunc, void *Context); +DLLEXPORT_API int __stdcall SetAudioPreview(HANDLE hChannelHandle, BOOL bEnable); +DLLEXPORT_API int __stdcall ReadStreamData(HANDLE hChannelHandle, void *DataBuf, DWORD *Length, int *FrameType); +DLLEXPORT_API int __stdcall RegisterMessageNotifyHandle(HWND hWnd, UINT MessageId); +DLLEXPORT_API int __stdcall StartVideoCapture(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall StopVideoCapture(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall SetIBPMode(HANDLE hChannelHandle, int KeyFrameIntervals, int BFrames, int PFrames, int FrameRate); +DLLEXPORT_API int __stdcall SetDefaultQuant(HANDLE hChannelHandle, int IQuantVal, int PQuantVal, int BQuantVal); +DLLEXPORT_API int __stdcall SetOsd(HANDLE hChannelHandle, BOOL Enable); + +DLLEXPORT_API int __stdcall SetLogo(HANDLE hChannelHandle, int x, int y, int w, int h, unsigned char *yuv); +DLLEXPORT_API int __stdcall StopLogo(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall SetupMotionDetection(HANDLE hChannelHandle, RECT *RectList, int iAreas); +DLLEXPORT_API int __stdcall MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold, int *iResult); +DLLEXPORT_API int __stdcall LoadYUVFromBmpFile(char *FileName, unsigned char *yuv, int BufLen, int *Width, int *Height); +DLLEXPORT_API int __stdcall SaveYUVToBmpFile(char *FileName, unsigned char *yuv, int Width, int Height); +DLLEXPORT_API int __stdcall CaptureIFrame(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall RegisterStreamReadCallback(STREAM_READ_CALLBACK StreamReadCallback, void *Context); +DLLEXPORT_API int __stdcall AdjustMotionDetectPrecision(HANDLE hChannelHandle, + int iGrade, int iFastMotionDetectFps, + int iSlowMotionDetectFps); +DLLEXPORT_API int __stdcall SetupBitrateControl(HANDLE hChannelHandle, ULONG MaxBps); +DLLEXPORT_API int __stdcall SetOverlayColorKey(COLORREF DestColorKey); +DLLEXPORT_API int __stdcall SetOsdDisplayMode(HANDLE hChannelHandle, int Brightness, BOOL Translucent, int parameter, USHORT *Format1, USHORT *Format2); +DLLEXPORT_API int __stdcall SetLogoDisplayMode(HANDLE hChannelHandle, COLORREF ColorKey, BOOL Translucent, int TwinkleInterval); +DLLEXPORT_API int __stdcall SetEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); +DLLEXPORT_API int __stdcall SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard); +DLLEXPORT_API int __stdcall RestoreOverlay(); +DLLEXPORT_API int __stdcall ResetDSP(int DspNumber); +DLLEXPORT_API int __stdcall GetSoundLevel(HANDLE hChannelHandle); + + +DLLEXPORT_API int __stdcall SetBitrateControlMode(HANDLE hChannelHandle, BitrateControlType_t brc); +DLLEXPORT_API int __stdcall SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold); + +DLLEXPORT_API int __stdcall SetupSubChannel(HANDLE hChannelHandle, int iSubChannel); +DLLEXPORT_API int __stdcall GetSubChannelStreamType(void *DataBuf, int FrameType); +//add for HC/HF +DLLEXPORT_API int __stdcall RegisterStreamDirectReadCallback(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context); +DLLEXPORT_API int __stdcall RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun),LONG nUser); +DLLEXPORT_API int __stdcall SetupMask(HANDLE hChannelHandle, RECT *rectList, int iAreas); +DLLEXPORT_API int __stdcall StopMask(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall SetSubEncoderPictureFormat(HANDLE hChannelHandle, PictureFormat_t PictureFormat); +DLLEXPORT_API int __stdcall StartSubVideoCapture(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall StopSubVideoCapture(HANDLE hChannelHandle); +DLLEXPORT_API int __stdcall SetupDateTime(HANDLE hChannelHandle, SYSTEMTIME *now); +/* + 以下为1.7版本新增的功能。 + 以后可能会根据用户的反馈进行修改和完善。 +*/ +//原始图像流设置 +typedef void (*IMAGE_STREAM_CALLBACK)(UINT channelNumber,void *context ); +DLLEXPORT_API int __stdcall SetImageStream(HANDLE hChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); +DLLEXPORT_API int __stdcall RegisterImageStreamCallback(IMAGE_STREAM_CALLBACK,void *context); +/* + 设置视频输入位置: + (x,y)为系统所处理图像的左上角在摄像机输入的原始图像中的坐标。 + x必须为2的整数倍。 + (x,y)坐标的参数范围和摄像机的型号有关,如果指定的值和摄像机的输入不匹配, + 可能会导致图像静止或水平、垂直方向滚动。 +*/ +DLLEXPORT_API int __stdcall SetInputVideoPosition(HANDLE hChannel,UINT x,UINT y); +DLLEXPORT_API int __stdcall StopRegisterDrawFun(DWORD nport); + +/* + 3.0 +*/ +#define SERIAL_NUMBER_LENGTH 12 //板卡序列号长度 +typedef struct tagDS_BOARD_DETAIL +{ + BOARD_TYPE_DS type; //板卡类型 + BYTE sn[16]; //序列号 + UINT dspCount; //板卡包含的DSP个数 + UINT firstDspIndex; //板卡上第一个DSP的索引 + UINT encodeChannelCount; //板卡包含的编码通道个数 + UINT firstEncodeChannelIndex; //板卡上第一个编码通道的索引 + UINT decodeChannelCount; //板卡包含的解码通道个数 + UINT firstDecodeChannelIndex; //板卡上第一个解码通道的索引 + UINT displayChannelCount; //板卡包含的视频输出通道个数 + UINT firstDisplayChannelIndex; //板卡上第一个视频输出通道的索引 + UINT reserved1; + UINT reserved2; + UINT reserved3; + UINT reserved4; +}DS_BOARD_DETAIL; +typedef struct tagDSP_DETAIL +{ + UINT encodeChannelCount; //板卡包含的编码通道个数 + UINT firstEncodeChannelIndex; //板卡上第一个编码通道的索引 + UINT decodeChannelCount; //板卡包含的解码通道个数 + UINT firstDecodeChannelIndex; //板卡上第一个解码通道的索引 + UINT displayChannelCount; //板卡包含的视频输出通道个数 + UINT firstDisplayChannelIndex; //板卡上第一个视频输出通道的索引 + UINT reserved1; + UINT reserved2; + UINT reserved3; + UINT reserved4; +}DSP_DETAIL; +DLLEXPORT_API unsigned int __stdcall GetBoardCount(); +DLLEXPORT_API int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail); +DLLEXPORT_API unsigned int __stdcall GetDspCount(); +DLLEXPORT_API int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail); +DLLEXPORT_API unsigned int __stdcall GetEncodeChannelCount(); +DLLEXPORT_API unsigned int __stdcall GetDecodeChannelCount(); +DLLEXPORT_API unsigned int __stdcall GetDisplayChannelCount(); +DLLEXPORT_API int __stdcall SetDefaultVideoStandard(VideoStandard_t VideoStandard); +DLLEXPORT_API int __stdcall SetVideoDetectPrecision(HANDLE hChannel,unsigned int value); +DLLEXPORT_API int __stdcall SetSubStreamType(HANDLE hChannelHandle, USHORT Type); +DLLEXPORT_API int __stdcall GetSubStreamType(HANDLE hChannelHandle, USHORT *StreamType); + +#define MAX_DISPLAY_REGION 16 +typedef struct tagREGION_PARAM +{ + UINT left; + UINT top; + UINT width; + UINT height; + COLORREF color; + UINT param; +}REGION_PARAM; +DLLEXPORT_API int __stdcall SetDisplayStandard(UINT nDisplayChannel,VideoStandard_t VideoStandard); +DLLEXPORT_API int __stdcall SetDisplayRegion(UINT nDisplayChannel,UINT nRegionCount,REGION_PARAM *pParam,UINT nReserved); +DLLEXPORT_API int __stdcall ClearDisplayRegion(UINT nDisplayChannel,UINT nRegionFlag); +DLLEXPORT_API int __stdcall SetDisplayRegionPosition(UINT nDisplayChannel,UINT nRegion,UINT nLeft,UINT nTop); +DLLEXPORT_API int __stdcall FillDisplayRegion(UINT nDisplayChannel,UINT nRegion,unsigned char *pImage); +DLLEXPORT_API int __stdcall SetEncoderVideoExtOutput(UINT nEncodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); +DLLEXPORT_API int __stdcall SetDecoderVideoExtOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); +DLLEXPORT_API int __stdcall SetDecoderVideoOutput(UINT nDecodeChannel,UINT nPort,BOOL bOpen,UINT nDisplayChannel,UINT nDisplayRegion,UINT nReserved); +DLLEXPORT_API int __stdcall SetDecoderAudioOutput(UINT nDecodeChannel,BOOL bOpen,UINT nOutputChannel); +//3.1 +DLLEXPORT_API int __stdcall SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level); +DLLEXPORT_API int __stdcall SetPreviewOverlayMode(BOOL bTrue); + +//DECODE functions for DS4002MD +#if defined( _WINDLL) + #define PLAYER_API extern "C"__declspec(dllexport) +#else + #define PLAYER_API extern "C" __declspec(dllimport) +#endif +typedef struct tagDISPLAY_PARA +{ + long bToScreen; + long bToVideoOut; + long nLeft; + long nTop; + long nWidth; + long nHeight; + long nReserved; +}DISPLAY_PARA,*PDISPLAY_PARA; +//Version info +typedef struct tagVERSION{ + ULONG DspVersion, DspBuildNum; + ULONG DriverVersion, DriverBuildNum; + ULONG SDKVersion, SDKBuildNum; +}HW_VERSION, *PHW_VERSION; + +//init part +PLAYER_API int __stdcall HW_InitDirectDraw(HWND hParent,COLORREF colorKey); +PLAYER_API int __stdcall HW_ReleaseDirectDraw(); +PLAYER_API int __stdcall HW_InitDecDevice(long *pDeviceTotal); +PLAYER_API int __stdcall HW_ReleaseDecDevice(); +PLAYER_API int __stdcall HW_ChannelOpen(long nChannelNum,HANDLE* phChannel); +PLAYER_API int __stdcall HW_ChannelClose(HANDLE hChannel); +//open part + +PLAYER_API int __stdcall HW_OpenStream(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); +DLLEXPORT_API int __stdcall HW_ResetStream(HANDLE hChannel); +PLAYER_API int __stdcall HW_CloseStream(HANDLE hChannel); +PLAYER_API int __stdcall HW_InputData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); +PLAYER_API int __stdcall HW_OpenFile(HANDLE hChannel,LPTSTR sFileName); +PLAYER_API int __stdcall HW_CloseFile(HANDLE hChannel); + +//play part +PLAYER_API int __stdcall HW_SetDisplayPara(HANDLE hChannel,DISPLAY_PARA *pPara); +PLAYER_API int __stdcall HW_Play(HANDLE hChannel); +PLAYER_API int __stdcall HW_Stop(HANDLE hChannel); +PLAYER_API int __stdcall HW_Pause(HANDLE hChannel,ULONG bPause); + +//sound part +PLAYER_API int __stdcall HW_PlaySound(HANDLE hChannel); +PLAYER_API int __stdcall HW_StopSound(HANDLE hChannel); +PLAYER_API int __stdcall HW_SetVolume(HANDLE hChannel,ULONG nVolume); +//overlay part +PLAYER_API int __stdcall HW_RefreshSurface(); +PLAYER_API int __stdcall HW_RestoreSurface(); +PLAYER_API int __stdcall HW_ClearSurface(); +PLAYER_API int __stdcall HW_ZoomOverlay(RECT* pSrcClientRect, RECT* pDecScreenRect); +//cut file +PLAYER_API int __stdcall HW_StartCapFile(HANDLE hChannel,LPTSTR sFileName); +PLAYER_API int __stdcall HW_StopCapFile(HANDLE hChannel); +//capture picture +PLAYER_API int __stdcall HW_GetYV12Image(HANDLE hChannel, PBYTE pBuffer, ULONG nSize); +PLAYER_API int __stdcall HW_GetPictureSize(HANDLE hChannel,ULONG* pWidth, ULONG* pHeight); +PLAYER_API int __stdcall HW_ConvertToBmpFile(BYTE * pBuf,ULONG nSize,ULONG nWidth,ULONG nHeight,char *sFileName,ULONG nReserved); +//setting and getting part +PLAYER_API int __stdcall HW_Jump(HANDLE hChannel,ULONG nDirection); +PLAYER_API int __stdcall HW_SetJumpInterval(HANDLE hChannel,ULONG nSecond); +PLAYER_API int __stdcall HW_GetSpeed(HANDLE hChannel,long *pSpeed); +PLAYER_API int __stdcall HW_SetSpeed(HANDLE hChannel,long nSpeed); +PLAYER_API int __stdcall HW_SetPlayPos(HANDLE hChannel,ULONG nPos); +PLAYER_API int __stdcall HW_GetPlayPos(HANDLE hChannel,ULONG* pPos); +PLAYER_API int __stdcall HW_GetVersion(PHW_VERSION pVersion); +PLAYER_API int __stdcall HW_GetCurrentFrameRate(HANDLE hChannel,ULONG* pFrameRate); +PLAYER_API int __stdcall HW_GetCurrentFrameNum(HANDLE hChannel,ULONG* pFrameNum); +PLAYER_API int __stdcall HW_GetFileTotalFrames(HANDLE hChannel,ULONG* pTotalFrames); +PLAYER_API int __stdcall HW_GetFileTime(HANDLE hChannel, ULONG* pFileTime); +PLAYER_API int __stdcall HW_GetCurrentFrameTime(HANDLE hChannel,ULONG* pFrameTime); +PLAYER_API int __stdcall HW_GetPlayedFrames(HANDLE hChannel,ULONG *pDecVFrames); +PLAYER_API int __stdcall HW_GetDeviceSerialNo(HANDLE hChannel,ULONG *pDeviceSerialNo); +PLAYER_API int __stdcall HW_SetFileEndMsg(HANDLE hChannel,HWND hWnd,UINT nMsg); +PLAYER_API int __stdcall HW_SetStreamOpenMode(HANDLE hChannel,ULONG nMode); +PLAYER_API int __stdcall HW_GetStreamOpenMode(HANDLE hChannel,ULONG *pMode); +PLAYER_API int __stdcall HW_SetVideoOutStandard(HANDLE hChannel,ULONG nStandard); +PLAYER_API int __stdcall HW_SetDspDeadlockMsg(HWND hWnd,UINT nMsg); +PLAYER_API int __stdcall HW_GetChannelNum(long nDspNum,long *pChannelNum,ULONG nNumsToGet,ULONG * pNumsGotten); +PLAYER_API int __stdcall HW_ResetDsp(long nDspNum); +PLAYER_API int __stdcall HW_SetAudioPreview(HANDLE hChannel, BOOL bEnable); +////////////////////////////////////////////// + +PLAYER_API int __stdcall HW_OpenStreamEx(HANDLE hChannel,PBYTE pFileHeadBuf,DWORD nSize); +PLAYER_API int __stdcall HW_CloseStreamEx(HANDLE hChannel); +PLAYER_API int __stdcall HW_InputVideoData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); +PLAYER_API int __stdcall HW_InputAudioData(HANDLE hChannel,PBYTE pBuf,DWORD nSize); + +//4.0 +PLAYER_API int __stdcall SetOsdDisplayModeEx(HANDLE hChannelHandle,int color,BOOL Translucent,int param,int nLineCount,USHORT **Format); +typedef void (*MOTION_DETECTION_CALLBACK)(ULONG channelNumber,BOOL bMotionDetected,void *context); +PLAYER_API int __stdcall SetupMotionDetectionEx(HANDLE hChannelHandle,int iGrade,int iFastMotionDetectFps, + int iSlowMotionDetectFps,UINT delay,RECT *RectList, int iAreas, + MOTION_DETECTION_CALLBACK MotionDetectionCallback,int reserved); +PLAYER_API int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf,ULONG *Size,UINT nQuality); +//WatchDog +PLAYER_API int __stdcall SetWatchDog(UINT boardNumber,BOOL bEnable); +//4.1 +typedef void (*FILE_REF_DONE_CALLBACK)(UINT nChannel,UINT nSize); +PLAYER_API int __stdcall HW_SetFileRef(HANDLE hChannel,BOOL bEnable,FILE_REF_DONE_CALLBACK FileRefDoneCallback); +PLAYER_API int __stdcall HW_LocateByAbsoluteTime(HANDLE hChannel,SYSTEMTIME time); +PLAYER_API int __stdcall HW_LocateByFrameNumber(HANDLE hChannel,UINT frmNum); +PLAYER_API int __stdcall HW_GetCurrentAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pTime); +PLAYER_API int __stdcall HW_GetFileAbsoluteTime(HANDLE hChannel,SYSTEMTIME *pStartTime,SYSTEMTIME *pEndTime); +//4.2 +DLLEXPORT_API int __stdcall HW_ImportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); +DLLEXPORT_API int __stdcall HW_ExportFileRef(HANDLE hChannel,char *pBuffer,UINT nSize); +DLLEXPORT_API int __stdcall SetDisplayVideoCapture(UINT nDisplayChannel,BOOL bStart,UINT fps,UINT width,UINT height,unsigned char *imageBuffer); +DLLEXPORT_API int __stdcall RegisterDisplayVideoCaptureCallback(IMAGE_STREAM_CALLBACK DisplayVideoCaptureCallback,void *context); +DLLEXPORT_API int __stdcall SetDisplayVideoBrightness(UINT chan,int Brightness); +DLLEXPORT_API int __stdcall SetChannelStreamCRC(HANDLE hChannel,BOOL bEnable); +DLLEXPORT_API int __stdcall SetSubChannelStreamCRC(HANDLE hChannel,BOOL bEnable); +DLLEXPORT_API int __stdcall HW_SetDecoderPostProcess(HANDLE hChannel,UINT param); +// +typedef void (*DECODER_VIDEO_CAPTURE_CALLBACK)(UINT nChannelNumber,void *DataBuf,UINT width,UINT height,UINT nFrameNum,UINT nFrameTime,SYSTEMTIME *pFrameAbsoluteTime,void *context); +DLLEXPORT_API int __stdcall RegisterDecoderVideoCaptureCallback(DECODER_VIDEO_CAPTURE_CALLBACK DecoderVideoCaptureCallback,void *context); +DLLEXPORT_API int __stdcall HW_SetDecoderVideoCapture(HANDLE hChannel,BOOL bStart,UINT param); +DLLEXPORT_API int __stdcall HW_InputDataByFrame(HANDLE hChannel,PBYTE pBuf,DWORD nSize); +/* +人脸抓拍接口:仅供测试、评估,以后可能会做修改。 +*/ +typedef struct +{ + short x,y,width,height; +}FACE_AREA_DEMO; +typedef struct +{ + FACE_AREA_DEMO faceArea; + FACE_AREA_DEMO leftEyeArea; + FACE_AREA_DEMO rightEyeArea; + FACE_AREA_DEMO leftPupilArea; + FACE_AREA_DEMO rightPupilArea; + FACE_AREA_DEMO noseArea; + FACE_AREA_DEMO mouthArea; +}FACE_INFO_DEMO; +typedef void (*FACE_DETECTION_DEMO_CALLBACK)(UINT nChannel,UINT nFaceCount,FACE_INFO_DEMO *pFaceInfo, + char *pData,UINT nDataSize,UINT nImageWidth,UINT nImageHeight); + +DLLEXPORT_API int __stdcall SetFaceDetectionDemo(HANDLE hChannelHandle,BOOL bEnable, + UINT nFrameInterval,FACE_DETECTION_DEMO_CALLBACK pFunc, + BOOL bCompress,UINT nCompressQuality,BOOL bLocateEyePos); + +#endif + diff --git a/lib/HCNetSDK/include/HCNetSDK.h b/lib/HCNetSDK/include/HCNetSDK.h new file mode 100644 index 0000000..8a9406a --- /dev/null +++ b/lib/HCNetSDK/include/HCNetSDK.h @@ -0,0 +1,52612 @@ +#ifndef _HC_NET_SDK_H_ +#define _HC_NET_SDK_H_ + +#ifndef _WINDOWS_ + #if (defined(_WIN32) || defined(_WIN64)) + #include + #include + #endif +#endif + +#if defined(_WIN64) + #define OS_WINDOWS64 1 +#endif + +#if defined(__LP64__) + #define OS_POSIX64 1 +#endif + +#ifndef __PLAYRECT_defined + #define __PLAYRECT_defined + typedef struct __PLAYRECT + { + int x; + int y; + int uWidth; + int uHeight; + }PLAYRECT; +#endif + +#if (defined(_WIN32)) //windows + #define NET_DVR_API extern "C" __declspec(dllimport) + typedef unsigned __int64 UINT64; + typedef signed __int64 INT64; +#elif defined(__linux__) || defined(__APPLE__) //linux + #define BOOL int + typedef unsigned int DWORD; + typedef unsigned short WORD; + typedef unsigned short USHORT; + typedef short SHORT; + typedef int LONG; + typedef unsigned char BYTE; + typedef unsigned int UINT; + typedef void* LPVOID; + typedef void* HANDLE; + typedef unsigned int* LPDWORD; + typedef unsigned long long UINT64; + typedef signed long long INT64; + + #ifndef TRUE + #define TRUE 1 + #endif + #ifndef FALSE + #define FALSE 0 + #endif + #ifndef NULL + #define NULL 0 + #endif + + #define __stdcall + #define CALLBACK + + #define NET_DVR_API extern "C" + typedef unsigned int COLORKEY; + typedef unsigned int COLORREF; + + #ifndef __HWND_defined + #define __HWND_defined + #if defined(__APPLE__) || defined(ANDROID) + typedef void* HWND; + #elif defined(__linux__) + typedef unsigned int HWND; + #else + typedef void* HWND; + #endif + #endif + + #ifndef __HDC_defined + #define __HDC_defined + #if defined(__linux__) + typedef struct __DC + { + void* surface; //SDL Surface + HWND hWnd; //HDC window handle + }DC; + typedef DC* HDC; + #else + typedef void* HDC; + #endif + #endif + + typedef struct tagInitInfo + { + int uWidth; + int uHeight; + }INITINFO; +#endif + +//宏定义 +#define MAX_NAMELEN 16 //DVR本地登陆名 +#define MAX_RIGHT 32 //设备支持的权限(1-12表示本地权限,13-32表示远程权限) +#define NAME_LEN 32 //用户名长度 +#define MIN_PASSWD_LEN 8 //最小密码长度 +#define PASSWD_LEN 16 //密码长度 +#define STREAM_PASSWD_LEN 12 //码流加密密钥最大长度 +#define MAX_PASSWD_LEN_EX 64 //密码长度64位 +#define GUID_LEN 16 //GUID长度 +#define DEV_TYPE_NAME_LEN 24 //设备类型名称长度 +#define SERIALNO_LEN 48 //序列号长度 +#define MACADDR_LEN 6 //mac地址长度 +#define MAC_ADDRESS_NUM 48 //Mac地址长度 +#define MAX_SENCE_NUM 16 //场景数 +#define RULE_REGION_MAX 128 //最大区域 +#define MAX_ETHERNET 2 //设备可配以太网络 +#define MAX_NETWORK_CARD 4 //设备可配最大网卡数目 +#define MAX_NETWORK_CARD_EX 12 //设备可配最大网卡数目扩展 +#define PATHNAME_LEN 128 //路径长度 +#define MAX_PRESET_V13 16 //预置点 +#define MAX_TEST_COMMAND_NUM 32 //产线测试保留字段长度 +#define MAX_NUMBER_LEN 32 //号码最大长度 +#define MAX_NAME_LEN 128 //设备名称最大长度 +#define MAX_INDEX_LED 8 //LED索引最大值 2013-11-19 +#define MAX_CUSTOM_DIR 64 //自定义目录最大长度 +#define URL_LEN_V40 256 //最大URL长度 +#define CLOUD_NAME_LEN 48 //云存储服务器用户名长度 +#define CLOUD_PASSWD_LEN 48 //云存储服务器密码长度 +#define MAX_SENSORNAME_LEN 64 //传感器名称长度 +#define MAX_SENSORCHAN_LEN 32 //传感器通道长度 +#define MAX_DESCRIPTION_LEN 32 //传感器描述长度 +#define MAX_DEVNAME_LEN_EX 64 //设备名称长度扩展 +#define NET_SDK_MAX_FILE_PATH 256 //文件路径长度 +#define MAX_TMEVOICE_LEN 64 //TME语音播报内容长度 +#define ISO_8601_LEN 32 //ISO_8601时间长度 +#define MODULE_INFO_LEN 32 //模块信息长度 +#define VERSION_INFO_LEN 32 //版本信息长度 + +#define MAX_NUM_INPUT_BOARD 512 //输入板最大个数 +#define MAX_SHIPSDETE_REGION_NUM 8 // 船只检测区域列表最大数目 + +#define MAX_RES_NUM_ONE_VS_INPUT_CHAN 8 //一个虚拟屏输入通道支持的分辨率的最大数量 +#define MAX_VS_INPUT_CHAN_NUM 16 //虚拟屏输入通道最大数量 + +#define NET_SDK_MAX_FDID_LEN 256//人脸库ID最大长度 +#define NET_SDK_MAX_PICID_LEN 256 //人脸ID最大长度 +#define NET_SDK_FDPIC_CUSTOM_INFO_LEN 96 //人脸库图片自定义信息长度 +#define NET_DVR_MAX_FACE_ANALYSIS_NUM 32 //最大支持单张图片识别出的人脸区域个数 +#define NET_DVR_MAX_FACE_SEARCH_NUM 5 //最大支持搜索人脸区域个数 +#define NET_SDK_SECRETKEY_LEN 128 //配置文件密钥长度 +#define NET_SDK_CUSTOM_LEN 512 //自定义信息最大长度 +#define NET_SDK_CHECK_CODE_LEN 128//校验码长度 +#define RELATIVE_CHANNEL_LEN 2//报警关联的通道号的数量 +#define NET_SDK_MAX_CALLEDTARGET_NAME 32 //呗呼叫目标的用户名 +#define NET_SDK_MAX_HBDID_LEN 256 /*256 人体库ID最大长度*/ +//小间距LED控制器 +#define MAX_LEN_TEXT_CONTENT 128 //字符内容长度 +#define MAX_NUM_INPUT_SOURCE_TEXT 32 //信号源可叠加的文本数量 +#define MAX_NUM_OUTPUT_CHANNEL 512 //LED区域包含的输出口个数 + +//子窗口解码OSD +#define MAX_LEN_OSD_CONTENT 256 //OSD信息最大长度 +#define MAX_NUM_OSD_ONE_SUBWND 8 //单个子窗口支持的最大OSD数量 +#define MAX_NUM_SPLIT_WND 64 //单个窗口支持的最大分屏窗口数量(即子窗口数量) +#define MAX_NUM_OSD 8 + +//2013-11-19 +#define MAX_DEVNAME_LEN 32 //设备名称最大长度 +#define MAX_LED_INFO 256 //屏幕字体显示信息最大长度 +#define MAX_TIME_LEN 32 //时间最大长度 +#define MAX_CARD_LEN 24 //卡号最大长度 +#define MAX_OPERATORNAME_LEN 32 //操作人员名称最大长度 + +#define THERMOMETRY_ALARMRULE_NUM 40 //热成像报警规则数 +#define MAX_THERMOMETRY_REGION_NUM 40 //热度图检测区域最大支持数 +#define MAX_THERMOMETRY_DIFFCOMPARISON_NUM 40 //热成像温差报警规则数 +#define MAX_SHIPS_NUM 20 //船只检测最大船只数 +#define MAX_SHIPIMAGE_NUM 6 //船只最大抓图数 +#define KEY_WORD_NUM 3 //关键字个数 +#define KEY_WORD_LEN 128 //关键字长度 +//异步登录回调状态宏定义 +#define ASYN_LOGIN_SUCC 1 //异步登录成功 +#define ASYN_LOGIN_FAILED 0 //异步登录失败 + +#define NET_SDK_MAX_VERIFICATION_CODE_LEN 32 //萤石云验证码长度 +#define NET_SDK_MAX_OPERATE_CODE_LEN 64 //萤石云操作码长度 +#define MAX_TIMESEGMENT_V30 8 //9000设备最大时间段数 +#define MAX_TIMESEGMENT 4 //8000设备最大时间段数 +#define MAX_ICR_NUM 8 //抓拍机红外滤光片预置点数2013-07-09 +#define MAX_VEHICLEFLOW_INFO 24 //车流量信息最大个数 +#define MAX_SHELTERNUM 4 //8000设备最大遮挡区域数 +#define MAX_DAYS 7 //每周天数 +#define PHONENUMBER_LEN 32 //pppoe拨号号码最大长度 +#define MAX_ACCESSORY_CARD 256 //配件板信息最大长度 +#define MAX_DISKNUM_V30 33 //9000设备最大硬盘数/* 最多33个硬盘(包括16个内置SATA硬盘、1个eSATA硬盘和16个NFS盘) */ +#define NET_SDK_MAX_NET_USER_NUM 64 //网络用户 + +#define NET_SDK_DISK_LOCATION_LEN 16 //硬盘位置长度 +#define NET_SDK_SUPPLIER_NAME_LEN 32 //供应商名称长度 +#define NET_SDK_DISK_MODEL_LEN 64 //硬盘型号长度 +#define NET_SDK_MAX_DISK_VOLUME 33 //最大硬盘卷个数 +#define NET_SDK_DISK_VOLUME_LEN 36 //硬盘卷名称长度 + +#define MAX_DISKNUM 16 //8000设备最大硬盘数 +#define MAX_DISKNUM_V10 8 //1.2版本之前版本 +#define CARD_READER_DESCRIPTION 32 //读卡器描述 +#define MAX_FACE_NUM 2 //最大人脸数 + +#define MAX_WINDOW_V30 32 //9000设备本地显示最大播放窗口数 +#define MAX_WINDOW_V40 64 //Netra 2.3.1扩展 +#define MAX_WINDOW 16 //8000设备最大硬盘数 +#define MAX_VGA_V30 4 //9000设备最大可接VGA数 +#define MAX_VGA 1 //8000设备最大可接VGA数 + +#define MAX_USERNUM_V30 32 //9000设备最大用户数 +#define MAX_USERNUM 16 //8000设备最大用户数 +#define MAX_EXCEPTIONNUM_V30 32 //9000设备最大异常处理数 +#define MAX_EXCEPTIONNUM 16 //8000设备最大异常处理数 +#define MAX_LINK 6 //8000设备单通道最大视频流连接数 +#define MAX_ITC_EXCEPTIONOUT 32 //抓拍机最大报警输出 +#define MAX_SCREEN_DISPLAY_LEN 512 //屏幕显示字符长度 + +#define MAX_DECPOOLNUM 4 //单路解码器每个解码通道最大可循环解码数 +#define MAX_DECNUM 4 //单路解码器的最大解码通道数(实际只有一个,其他三个保留) +#define MAX_TRANSPARENTNUM 2 //单路解码器可配置最大透明通道数 +#define MAX_CYCLE_CHAN 16 //单路解码器最大轮巡通道数 +#define MAX_CYCLE_CHAN_V30 64 //最大轮巡通道数(扩展) +#define MAX_DIRNAME_LENGTH 80 //最大目录长度 +#define MAX_WINDOWS 16 //最大窗口数 + + +#define MAX_STRINGNUM_V30 8 //9000设备最大OSD字符行数数 +#define MAX_STRINGNUM 4 //8000设备最大OSD字符行数数 +#define MAX_STRINGNUM_EX 8 //8000定制扩展 +#define MAX_AUXOUT_V30 16 //9000设备最大辅助输出数 +#define MAX_AUXOUT 4 //8000设备最大辅助输出数 +#define MAX_HD_GROUP 16 //9000设备最大硬盘组数 +#define MAX_HD_GROUP_V40 32 //设备最大硬盘组数 +#define MAX_NFS_DISK 8 //8000设备最大NFS硬盘数 +#define NET_SDK_VERSION_LIST_LEN 64 //算法库版本最大值 +#define IW_ESSID_MAX_SIZE 32 //WIFI的SSID号长度 +#define IW_ENCODING_TOKEN_MAX 32 //WIFI密锁最大字节数 +#define MAX_SERIAL_NUM 64 //最多支持的透明通道路数 +#define MAX_DDNS_NUMS 10 //9000设备最大可配ddns数 +#define MAX_DOMAIN_NAME 64 /* 最大域名长度 */ +#define MAX_EMAIL_ADDR_LEN 48 //最大email地址长度 +#define MAX_EMAIL_PWD_LEN 32 //最大email密码长度 +#define MAX_SLAVECAMERA_NUM 8 //从摄像机个数 +#define MAX_CALIB_NUM 6 //标定点的个数 +#define MAX_CALIB_NUM_EX 20 //扩展标定点的个数 +#define MAX_LEDDISPLAYINFO_LEN 1024 //最大LED屏显示长度 +#define MAX_PEOPLE_DETECTION_NUM 8 //最大人员检测区域数 +#define MAXPROGRESS 100 //回放时的最大百分率 +#define MAX_SERIALNUM 2 //8000设备支持的串口数 1-232, 2-485 +#define CARDNUM_LEN 20 //卡号长度 +#define PATIENTID_LEN 64 +#define CARDNUM_LEN_OUT 32 //外部结构体卡号长度 +#define MAX_VIDEOOUT_V30 4 //9000设备的视频输出数 +#define MAX_VIDEOOUT 2 //8000设备的视频输出数 + +#define MAX_PRESET_V30 256 /* 9000设备支持的云台预置点数 */ +#define MAX_TRACK_V30 256 /* 9000设备支持的云台数 */ +#define MAX_CRUISE_V30 256 /* 9000设备支持的云台巡航数 */ +#define MAX_PRESET 128 /* 8000设备支持的云台预置点数 */ +#define MAX_TRACK 128 /* 8000设备支持的云台数 */ +#define MAX_CRUISE 128 /* 8000设备支持的云台巡航数 */ + +#define MAX_PRESET_V40 300 /* 云台支持的最大预置点数 */ +#define MAX_CRUISE_POINT_NUM 128 /* 最大支持的巡航点的个数 */ +#define MAX_CRUISEPOINT_NUM_V50 256 //最大支持的巡航点的个数扩展 + +#define CRUISE_MAX_PRESET_NUMS 32 /* 一条巡航最多的巡航点 */ +#define MAX_FACE_PIC_NUM 30 /*人脸子图个数*/ +#define LOCKGATE_TIME_NUM 4 //锁闸时间段个数 + +#define MAX_SERIAL_PORT 8 //9000设备支持232串口数 +#define MAX_PREVIEW_MODE 8 /* 设备支持最大预览模式数目 1画面,4画面,9画面,16画面.... */ +#define MAX_MATRIXOUT 16 /* 最大模拟矩阵输出个数 */ +#define LOG_INFO_LEN 11840 /* 日志附加信息 */ +#define DESC_LEN 16 /* 云台描述字符串长度 */ +#define PTZ_PROTOCOL_NUM 200 /* 9000最大支持的云台协议数 */ +#define IPC_PROTOCOL_NUM 50 //ipc 协议最大个数 + +#define MAX_AUDIO 1 //8000语音对讲通道数 +#define MAX_AUDIO_V30 2 //9000语音对讲通道数 +#define MAX_CHANNUM 16 //8000设备最大通道数 +#define MAX_ALARMIN 16 //8000设备最大报警输入数 +#define MAX_ALARMOUT 4 //8000设备最大报警输出数 +#define MAX_AUDIOCAST_CFG_TYPE 3 //支持广播参数配置的类型数量 MP3、MPEG2、AAC +//9000 IPC接入 +#define MAX_ANALOG_CHANNUM 32 //最大32个模拟通道 +#define MAX_ANALOG_ALARMOUT 32 //最大32路模拟报警输出 +#define MAX_ANALOG_ALARMIN 32 //最大32路模拟报警输入 + +#define MAX_IP_DEVICE 32 //允许接入的最大IP设备数 +#define MAX_IP_DEVICE_V40 64 // 允许接入的最大IP设备数 最多可添加64个 IVMS 2000等新设备 +#define MAX_IP_CHANNEL 32 //允许加入的最多IP通道数 +#define MAX_IP_ALARMIN 128 //允许加入的最多报警输入数 +#define MAX_IP_ALARMOUT 64 //允许加入的最多报警输出数 +#define MAX_IP_ALARMIN_V40 4096 //允许加入的最多报警输入数 +#define MAX_IP_ALARMOUT_V40 4096 //允许加入的最多报警输出数 + +#define MAX_RECORD_FILE_NUM 20 // 每次删除或者刻录的最大文件数 +//SDK_V31 ATM +#define MAX_ACTION_TYPE 12 //自定义协议叠加交易行为最大行为个数 +#define MAX_ATM_PROTOCOL_NUM 256 //每种输入方式对应的ATM最大协议数 +#define ATM_CUSTOM_PROTO 1025 //自定义协议 值为1025 +#define ATM_PROTOCOL_SORT 4 //ATM协议段数 +#define ATM_DESC_LEN 32 //ATM描述字符串长度 +// SDK_V31 ATM + + +#define MAX_IPV6_LEN 64 //IPv6地址最大长度 +#define MAX_EVENTID_LEN 64 //事件ID长度 + +#define INVALID_VALUE_UINT32 0xffffffff //无效值 +#define MAX_CHANNUM_V40 512 +#define MAX_MULTI_AREA_NUM 24 + +//SDK 录播主机 +#define COURSE_NAME_LEN 32 //课程名称 +#define INSTRUCTOR_NAME_LEN 16 //授课教师 +#define COURSE_DESCRIPTION_LEN 256 //课程信息 + +#define MAX_TIMESEGMENT_V40 16 //每节课信息 + + +#define MAX_MIX_CHAN_NUM 16 /*目前支持的最大混音通道数,背景通道 + MIC + LINE IN + 最多4个小画面*/ +#define MAX_LINE_IN_CHAN_NUM 16 //最大line in通道数 +#define MAX_MIC_CHAN_NUM 16 //最大MIC通道数 +#define INQUEST_CASE_NO_LEN 64 //审讯案件编号长度 +#define INQUEST_CASE_NAME_LEN 64 //审讯案件名称长度 +#define CUSTOM_INFO_LEN 64 //自定义信息长度 +#define INQUEST_CASE_LEN 64 //审讯信息长度 + + +#define MAX_FILE_ID_LEN 128 //视图库项目中文件ID的最大长度 +#define MAX_PIC_NAME_LEN 128 //图片名称长度 + +/* 最大支持的通道数 最大模拟加上最大IP支持 */ +#define MAX_CHANNUM_V30 ( MAX_ANALOG_CHANNUM + MAX_IP_CHANNEL )//64 +#define MAX_ALARMOUT_V40 (MAX_IP_ALARMOUT_V40 +MAX_ANALOG_ALARMOUT) //4128 +#define MAX_ALARMOUT_V30 ( MAX_ANALOG_ALARMOUT + MAX_IP_ALARMOUT )//96 +#define MAX_ALARMIN_V30 ( MAX_ANALOG_ALARMIN + MAX_IP_ALARMIN )//160 +#define MAX_ALARMIN_V40 (MAX_IP_ALARMIN_V40 +MAX_ANALOG_ALARMOUT) //4128 +#define MAX_ANALOG_ALARM_WITH_VOLT_LIMIT 16 //受电压限定的模拟报警最大输入数 + +#define MAX_ROIDETECT_NUM 8 //支持的ROI区域数 +#define MAX_LANERECT_NUM 5 //最大车牌识别区域数 +#define MAX_FORTIFY_NUM 10 //最大布防个数 +#define MAX_INTERVAL_NUM 4 //最大时间间隔个数 +#define MAX_CHJC_NUM 3 //最大车辆省份简称字符个数 +#define MAX_VL_NUM 5 //最大虚拟线圈个数 +#define MAX_DRIVECHAN_NUM 16 //最大车道数 +#define MAX_COIL_NUM 3 //最大线圈个数 +#define MAX_SIGNALLIGHT_NUM 6 //最大信号灯个数 +#define LEN_16 16 +#define LEN_32 32 +#define LEN_64 64 +#define LEN_31 31 +#define MAX_LINKAGE_CHAN_NUM 16 //报警联动的通道的最大数量 +#define MAX_CABINET_COUNT 8 //最大支持机柜数量 +#define MAX_ID_LEN 48 +#define MAX_PARKNO_LEN 16 +#define MAX_ALARMREASON_LEN 32 +#define MAX_UPGRADE_INFO_LEN 48 //获取升级文件匹配信息(模糊升级) +#define MAX_CUSTOMDIR_LEN 32 //自定义目录长度 +#define MAX_LED_INFO_LEN 512//LED内容长度 +#define MAX_VOICE_INFO_LEN 128//语音播报内容长度 +#define MAX_LITLE_INFO_LEN 64 //纸票标题内容长度 +#define MAX_CUSTOM_INFO_LEN 64 //纸票自定义信息内容长度 +#define MAX_PHONE_NUM_LEN 16 //联系电话内容长度 +#define MAX_APP_SERIALNUM_LEN 32 //应用序列号长度 + +#define AUDIOTALKTYPE_G722 0 +#define AUDIOTALKTYPE_G711_MU 1 +#define AUDIOTALKTYPE_G711_A 2 +#define AUDIOTALKTYPE_MP2L2 5 +#define AUDIOTALKTYPE_G726 6 +#define AUDIOTALKTYPE_AAC 7 +#define AUDIOTALKTYPE_PCM 8 +#define AUDIOTALKTYPE_G722C 9 +#define AUDIOTALKTYPE_MP3 15 + +//packet type +#define FILE_HEAD 0 //file head +#define VIDEO_I_FRAME 1 //video I frame +#define VIDEO_B_FRAME 2 //video B frame +#define VIDEO_P_FRAME 3 //video P frame +#define AUDIO_PACKET 10 //audio packet +#define PRIVT_PACKET 11 //private packet +//E frame +#define HIK_H264_E_FRAME (1 << 6) // 以前E帧不用了,深P帧也没用到 +#define MAX_TRANSPARENT_CHAN_NUM 4 //每个串口允许建立的最大透明通道数 +#define MAX_TRANSPARENT_ACCESS_NUM 4 //每个监听端口允许接入的最大主机数 + +//ITS +#define MAX_PARKING_STATUS 8 //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 +#define MAX_PARKING_NUM 4 //一个通道最大4个车位 (从左到右车位 数组0~3) + +#define MAX_ITS_SCENE_NUM 16 //最大场景数量 +#define MAX_SCENE_TIMESEG_NUM 16 //最大场景时间段数量 +#define MAX_IVMS_IP_CHANNEL 128 //最大IP通道数 +#define DEVICE_ID_LEN 48 //设备编号长度 +#define MONITORSITE_ID_LEN 48 //显示点编号长度 +#define MAX_AUXAREA_NUM 16 //辅助区域最大数目 +#define MAX_SLAVE_CHANNEL_NUM 16 //最大从通道数量 +#define MAX_DEVDESC_LEN 64 //设备描述信息最大长度 +#define ILLEGAL_LEN 32 //违法代码长度 +#define MAX_TRUCK_AXLE_NUM 10 //货车轴最大数 +#define MAX_CATEGORY_LEN 8 //车牌附加信息最大字符 +#define SERIAL_NO_LEN 16 //泊车位编号 + + +#define MAX_SECRETKEY_LEN 512 //最大秘钥长度 +#define MAX_INDEX_CODE_LEN 64 //最大序号长度 +#define MAX_ILLEGAL_LEN 64 //违法代码最大字符长度 +#define CODE_LEN 64 //授权码 +#define ALIAS_LEN 32 //别名,只读 +#define MAX_SCH_TASKS_NUM 10 + +#define MAX_SERVERID_LEN 64 //最大服务器ID的长度 +#define MAX_SERVERDOMAIN_LEN 128 //服务器域名最大长度 +#define MAX_AUTHENTICATEID_LEN 64 //认证ID最大长度 +#define MAX_AUTHENTICATEPASSWD_LEN 32 //认证密码最大长度 +#define MAX_SERVERNAME_LEN 64 //最大服务器用户名 +#define MAX_COMPRESSIONID_LEN 64 //编码ID的最大长度 +#define MAX_SIPSERVER_ADDRESS_LEN 128 //SIP服务器地址支持域名和IP地址 +//压线报警 +#define MAX_PlATE_NO_LEN 32 //车牌号码最大长度 2013-09-27 +#define UPNP_PORT_NUM 12 //upnp端口映射端口数目 + +#define MAX_PEOPLE_DETECTION_NUM 8 //最大人员检测区域数 + +#define MAX_NOTICE_NUMBER_LEN 32 //公告编号最大长度 +#define MAX_NOTICE_THEME_LEN 64 //公告主题最大长度 +#define MAX_NOTICE_DETAIL_LEN 1024 //公告详情最大长度 +#define MAX_NOTICE_PIC_NUM 6 //公告信息最大图片数量 +#define MAX_DEV_NUMBER_LEN 32 //设备编号最大长度 +#define LOCK_NAME_LEN 32 //锁名称 + + +#define HOLIDAY_GROUP_NAME_LEN 32 //假日组名称长度 +#define MAX_HOLIDAY_PLAN_NUM 16 //假日组最大假日计划数 +#define TEMPLATE_NAME_LEN 32 //计划模板名称长度 +#define MAX_HOLIDAY_GROUP_NUM 16 //计划模板最大假日组数 +#define DOOR_NAME_LEN 32 //门名称 +#define STRESS_PASSWORD_LEN 8 //胁迫密码长度 +#define SUPER_PASSWORD_LEN 8 //胁迫密码长度 +#define GROUP_NAME_LEN 32 //群组名称长度 +#define GROUP_COMBINATION_NUM 8 //群组组合数 +#define MULTI_CARD_GROUP_NUM 4 //单门最大多重卡组数 +#define ACS_CARD_NO_LEN 32 //门禁卡号长度 +#define NET_SDK_EMPLOYEE_NO_LEN 32 //工号长度 +#define NET_SDK_UUID_LEN 36 //UUID长度 +#define NET_SDK_EHOME_KEY_LEN 32 //EHome Key长度 +#define CARD_PASSWORD_LEN 8 //卡密码长度 +#define MAX_DOOR_NUM 32 //最大门数 +#define MAX_CARD_RIGHT_PLAN_NUM 4 //卡权限最大计划个数 +#define MAX_GROUP_NUM_128 128 //最大群组数 +#define MAX_CARD_READER_NUM 64 //最大读卡器数 +#define MAX_SNEAK_PATH_NODE 8 //最大后续读卡器数 +#define MAX_MULTI_DOOR_INTERLOCK_GROUP 8 //最大多门互锁组数 +#define MAX_INTER_LOCK_DOOR_NUM 8 //一个多门互锁组中最大互锁门数 +#define MAX_CASE_SENSOR_NUM 8 //最大case sensor触发器数 +#define MAX_DOOR_NUM_256 256 //最大门数 +#define MAX_READER_ROUTE_NUM 16 //最大刷卡循序路径 +#define MAX_FINGER_PRINT_NUM 10 //最大指纹个数 +#define MAX_CARD_READER_NUM_512 512 //最大读卡器数 +#define NET_SDK_MULTI_CARD_GROUP_NUM_20 20 //单门最大多重卡组数 + +#define ERROR_MSG_LEN 32 //下发错误信息 +#define MAX_DOOR_CODE_LEN 8 //房间代码长度 +#define MAX_LOCK_CODE_LEN 8 //锁代码长度 +#define PER_RING_PORT_NUM 2 //每个环的端口数 +#define SENSORNAME_LEN 32 //传感器名称长度 +#define MAX_SENSORDESCR_LEN 64 //传感器描述长度 +#define MAX_DNS_SERVER_NUM 2 //最大DNS个数 +#define SENSORUNIT_LEN 32 //最大单位长度 + +#define WEP_KEY_MAX_SIZE 32 //最大WEP加密密钥长度 +#define WEP_KEY_MAX_NUM 4 //最大WEP加密密钥个数 +#define WPA_KEY_MAX_SIZE 64 //最大WPA共享密钥长度 + +#define MAX_SINGLE_FTPPICNAME_LEN 20 //最大单个FTP通道名称 +#define MAX_CAMNAME_LEN 32 //最大通道名称 +#define MAX_FTPNAME_NUM 12 //TFP名称数 + + +#define MAX_IDCODE_LEN 128 // 识别码最大长度 +#define MAX_VERSIIN_LEN 64 //版本最大长度 +#define MAX_IDCODE_NUM 32 // 识别码个数 +#define SDK_LEN_2048 2048 +#define SDK_MAX_IP_LEN 48 + +#define RECT_POINT_NUM 4 //矩形角数 + +#define MAX_PUBLIC_KEY_LEN 512 // 最大公钥长度 +#define CHIP_SERIALNO_LEN 32 //加密芯片序列号长度 +#define ENCRYPT_DEV_ID_LEN 20 //设备ID长度 + +//MCU相关的 +#define MAX_SEARCH_ID_LEN 36 //搜索标识符最大长度 +#define TERMINAL_NAME_LEN 64 //终端名称长度 +#define MAX_URL_LEN 512 //URL长度 +#define REGISTER_NAME_LEN 64 //终端注册GK名称最大长度 + +//光纤 +#define MAX_PORT_NUM 64 //最大端口数 +#define MAX_SINGLE_CARD_PORT_NO 4 //光纤收发器单卡最大端口数 +#define MAX_FUNC_CARD_NUM 32 //光纤收发器最大功能卡数 +#define MAX_FC_CARD_NUM 33 //光纤收发器最大卡数 +#define MAX_REMARKS_LEN 128 //注释最大长度 +#define MAX_OUTPUT_PORT_NUM 32 //单路输出包含的最大输出端口数 +#define MAX_SINGLE_PORT_RECVCARD_NUM 64 //单个端口连接的最大接收卡数 +#define MAX_GAMMA_X_VALUE 256 //GAMMA表X轴取值个数 +#define NET_DEV_NAME_LEN 64 //设备名称长度 +#define NET_DEV_TYPE_NAME_LEN 64 //设备类型名称长度 +#define ABNORMAL_INFO_NUM 4 //异常时间段个数 + +#define PLAYLIST_NAME_LEN 64 //播放表名称长度 +#define PLAYLIST_ITEM_NUM 64 //播放项数目 + +//后端相关 +#define NET_SDK_MAX_LOGIN_PASSWORD_LEN 128 //用户登录密码最大长度 +#define NET_SDK_MAX_ANSWER_LEN 256 //安全问题答案最大长度 +#define NET_SDK_MAX_QUESTION_LIST_LEN 32//安全问题列表最大长度 + +#define MAX_SCREEN_AREA_NUM 128 //屏幕区域最大数量 +#define NET_SDK_MAX_THERMOMETRYALGNAME 128//测温算法库版本最大长度 +#define NET_SDK_MAX_SHIPSALGNAME 128//船只算法库版本最大长度 +#define NET_SDK_MAX_FIRESALGNAME 128//火点算法库版本最大长度 + +#define MAX_PASSPORT_NUM_LEN 16 //最大护照证件号长度 +#define MAX_PASSPORT_INFO_LEN 128 //最大护照通用信息长度 +#define MAX_PASSPORT_NAME_LEN 64 //最大护照姓名长度 +#define MAX_PASSPORT_MONITOR_LEN 1024 //最大护照监护信息长度 +#define MAX_NATIONALITY_LEN 16 //最大护照国籍长度 +#define MAX_PASSPORT_TYPE_LEN 4 //最大护照证件类型长度 + +/*******************全局错误码 begin**********************/ +#define NET_DVR_NOERROR 0 //没有错误 +#define NET_DVR_PASSWORD_ERROR 1 //用户名密码错误 +#define NET_DVR_NOENOUGHPRI 2 //权限不足 +#define NET_DVR_NOINIT 3 //没有初始化 +#define NET_DVR_CHANNEL_ERROR 4 //通道号错误 +#define NET_DVR_OVER_MAXLINK 5 //连接到DVR的客户端个数超过最大 +#define NET_DVR_VERSIONNOMATCH 6 //版本不匹配 +#define NET_DVR_NETWORK_FAIL_CONNECT 7 //连接服务器失败 +#define NET_DVR_NETWORK_SEND_ERROR 8 //向服务器发送失败 +#define NET_DVR_NETWORK_RECV_ERROR 9 //从服务器接收数据失败 +#define NET_DVR_NETWORK_RECV_TIMEOUT 10 //从服务器接收数据超时 +#define NET_DVR_NETWORK_ERRORDATA 11 //传送的数据有误 +#define NET_DVR_ORDER_ERROR 12 //调用次序错误 +#define NET_DVR_OPERNOPERMIT 13 //无此权限 +#define NET_DVR_COMMANDTIMEOUT 14 //DVR命令执行超时 +#define NET_DVR_ERRORSERIALPORT 15 //串口号错误 +#define NET_DVR_ERRORALARMPORT 16 //报警端口错误 +#define NET_DVR_PARAMETER_ERROR 17 //参数错误 +#define NET_DVR_CHAN_EXCEPTION 18 //服务器通道处于错误状态 +#define NET_DVR_NODISK 19 //没有硬盘 +#define NET_DVR_ERRORDISKNUM 20 //硬盘号错误 +#define NET_DVR_DISK_FULL 21 //服务器硬盘满 +#define NET_DVR_DISK_ERROR 22 //服务器硬盘出错 +#define NET_DVR_NOSUPPORT 23 //服务器不支持 +#define NET_DVR_BUSY 24 //服务器忙 +#define NET_DVR_MODIFY_FAIL 25 //服务器修改不成功 +#define NET_DVR_PASSWORD_FORMAT_ERROR 26 //密码输入格式不正确 +#define NET_DVR_DISK_FORMATING 27 //硬盘正在格式化,不能启动操作 +#define NET_DVR_DVRNORESOURCE 28 //DVR资源不足 +#define NET_DVR_DVROPRATEFAILED 29 //DVR操作失败 +#define NET_DVR_OPENHOSTSOUND_FAIL 30 //打开PC声音失败 +#define NET_DVR_DVRVOICEOPENED 31 //服务器语音对讲被占用 +#define NET_DVR_TIMEINPUTERROR 32 //时间输入不正确 +#define NET_DVR_NOSPECFILE 33 //回放时服务器没有指定的文件 +#define NET_DVR_CREATEFILE_ERROR 34 //创建文件出错 +#define NET_DVR_FILEOPENFAIL 35 //打开文件出错 +#define NET_DVR_OPERNOTFINISH 36 //上次的操作还没有完成 +#define NET_DVR_GETPLAYTIMEFAIL 37 //获取当前播放的时间出错 +#define NET_DVR_PLAYFAIL 38 //播放出错 +#define NET_DVR_FILEFORMAT_ERROR 39 //文件格式不正确 +#define NET_DVR_DIR_ERROR 40 //路径错误 +#define NET_DVR_ALLOC_RESOURCE_ERROR 41 //资源分配错误 +#define NET_DVR_AUDIO_MODE_ERROR 42 //声卡模式错误 +#define NET_DVR_NOENOUGH_BUF 43 //缓冲区太小 +#define NET_DVR_CREATESOCKET_ERROR 44 //创建SOCKET出错 +#define NET_DVR_SETSOCKET_ERROR 45 //设置SOCKET出错 +#define NET_DVR_MAX_NUM 46 //个数达到最大 +#define NET_DVR_USERNOTEXIST 47 //用户不存在 +#define NET_DVR_WRITEFLASHERROR 48 //写FLASH出错 +#define NET_DVR_UPGRADEFAIL 49 //DVR升级失败 +#define NET_DVR_CARDHAVEINIT 50 //解码卡已经初始化过 +#define NET_DVR_PLAYERFAILED 51 //调用播放库中某个函数失败 +#define NET_DVR_MAX_USERNUM 52 //设备端用户数达到最大 +#define NET_DVR_GETLOCALIPANDMACFAIL 53 //获得客户端的IP地址或物理地址失败 +#define NET_DVR_NOENCODEING 54 //该通道没有编码 +#define NET_DVR_IPMISMATCH 55 //IP地址不匹配 +#define NET_DVR_MACMISMATCH 56 //MAC地址不匹配 +#define NET_DVR_UPGRADELANGMISMATCH 57 //升级文件语言不匹配 +#define NET_DVR_MAX_PLAYERPORT 58 //播放器路数达到最大 +#define NET_DVR_NOSPACEBACKUP 59 //备份设备中没有足够空间进行备份 +#define NET_DVR_NODEVICEBACKUP 60 //没有找到指定的备份设备 +#define NET_DVR_PICTURE_BITS_ERROR 61 //图像素位数不符,限24色 +#define NET_DVR_PICTURE_DIMENSION_ERROR 62 //图片高*宽超限, 限128*256 +#define NET_DVR_PICTURE_SIZ_ERROR 63 //图片大小超限,限100K +#define NET_DVR_LOADPLAYERSDKFAILED 64 //载入当前目录下Player Sdk出错 +#define NET_DVR_LOADPLAYERSDKPROC_ERROR 65 //找不到Player Sdk中某个函数入口 +#define NET_DVR_LOADDSSDKFAILED 66 //载入当前目录下DSsdk出错 +#define NET_DVR_LOADDSSDKPROC_ERROR 67 //找不到DsSdk中某个函数入口 +#define NET_DVR_DSSDK_ERROR 68 //调用硬解码库DsSdk中某个函数失败 +#define NET_DVR_VOICEMONOPOLIZE 69 //声卡被独占 +#define NET_DVR_JOINMULTICASTFAILED 70 //加入多播组失败 +#define NET_DVR_CREATEDIR_ERROR 71 //建立日志文件目录失败 +#define NET_DVR_BINDSOCKET_ERROR 72 //绑定套接字失败 +#define NET_DVR_SOCKETCLOSE_ERROR 73 //socket连接中断,此错误通常是由于连接中断或目的地不可达 +#define NET_DVR_USERID_ISUSING 74 //注销时用户ID正在进行某操作 +#define NET_DVR_SOCKETLISTEN_ERROR 75 //监听失败 +#define NET_DVR_PROGRAM_EXCEPTION 76 //程序异常 +#define NET_DVR_WRITEFILE_FAILED 77 //写文件失败 +#define NET_DVR_FORMAT_READONLY 78 //禁止格式化只读硬盘 +#define NET_DVR_WITHSAMEUSERNAME 79 //用户配置结构中存在相同的用户名 +#define NET_DVR_DEVICETYPE_ERROR 80 /*导入参数时设备型号不匹配*/ +#define NET_DVR_LANGUAGE_ERROR 81 /*导入参数时语言不匹配*/ +#define NET_DVR_PARAVERSION_ERROR 82 /*导入参数时软件版本不匹配*/ +#define NET_DVR_IPCHAN_NOTALIVE 83 /*预览时外接IP通道不在线*/ +#define NET_DVR_RTSP_SDK_ERROR 84 /*加载高清IPC通讯库StreamTransClient.dll失败*/ +#define NET_DVR_CONVERT_SDK_ERROR 85 /*加载转码库失败*/ +#define NET_DVR_IPC_COUNT_OVERFLOW 86 /*超出最大的ip接入通道数*/ +#define NET_DVR_MAX_ADD_NUM 87 /*添加标签(一个文件片段64)等个数达到最大*/ +#define NET_DVR_PARAMMODE_ERROR 88 //图像增强仪,参数模式错误(用于硬件设置时,客户端进行软件设置时错误值) +#define NET_DVR_CODESPITTER_OFFLINE 89 //视频综合平台,码分器不在线 +#define NET_DVR_BACKUP_COPYING 90 //设备正在备份 +#define NET_DVR_CHAN_NOTSUPPORT 91 // 通道不支持该操作 +#define NET_DVR_CALLINEINVALID 92 // 高度线位置太集中或长度线不够倾斜 +#define NET_DVR_CALCANCELCONFLICT 93 // 取消标定冲突,如果设置了规则及全局的实际大小尺寸过滤 +#define NET_DVR_CALPOINTOUTRANGE 94 // 标定点超出范围 +#define NET_DVR_FILTERRECTINVALID 95 // 尺寸过滤器不符合要求 +#define NET_DVR_DDNS_DEVOFFLINE 96 //设备没有注册到ddns上 +#define NET_DVR_DDNS_INTER_ERROR 97 //DDNS 服务器内部错误 +#define NET_DVR_FUNCTION_NOT_SUPPORT_OS 98 //此功能不支持该操作系统 +#define NET_DVR_DEC_CHAN_REBIND 99 //解码通道绑定显示输出次数受限 +#define NET_DVR_INTERCOM_SDK_ERROR 100 //加载当前目录下的语音对讲库失败 +#define NET_DVR_NO_CURRENT_UPDATEFILE 101 //没有正确的升级包 +#define NET_DVR_USER_NOT_SUCC_LOGIN 102 //用户还没登陆成功 +#define NET_DVR_USE_LOG_SWITCH_FILE 103 //正在使用日志开关文件 +#define NET_DVR_POOL_PORT_EXHAUST 104 //端口池中用于绑定的端口已耗尽 +#define NET_DVR_PACKET_TYPE_NOT_SUPPORT 105 //码流封装格式错误 +#define NET_DVR_IPPARA_IPID_ERROR 106 //IP接入配置时IPID有误 + +#define NET_DVR_LOAD_HCPREVIEW_SDK_ERROR 107 //预览组件加载失败 +#define NET_DVR_LOAD_HCVOICETALK_SDK_ERROR 108 //语音组件加载失败 +#define NET_DVR_LOAD_HCALARM_SDK_ERROR 109 //报警组件加载失败 +#define NET_DVR_LOAD_HCPLAYBACK_SDK_ERROR 110 //回放组件加载失败 +#define NET_DVR_LOAD_HCDISPLAY_SDK_ERROR 111 //显示组件加载失败 +#define NET_DVR_LOAD_HCINDUSTRY_SDK_ERROR 112 //行业应用组件加载失败 +#define NET_DVR_LOAD_HCGENERALCFGMGR_SDK_ERROR 113 //通用配置管理组件加载失败 +#define NET_DVR_LOAD_HCCOREDEVCFG_SDK_ERROR 114 //设备配置核心组件加载失败 +#define NET_DVR_LOAD_HCNETUTILS_SDK_ERROR 115 //HCNetUtils加载失败 + +#define NET_DVR_CORE_VER_MISMATCH 121 //单独加载组件时,组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCPREVIEW 122 //预览组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCVOICETALK 123 //语音组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCALARM 124 //报警组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCPLAYBACK 125 //回放组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCDISPLAY 126 //显示组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCINDUSTRY 127 //行业应用组件与core版本不匹配 +#define NET_DVR_CORE_VER_MISMATCH_HCGENERALCFGMGR 128 //通用配置管理组件与core版本不匹配 + +#define NET_DVR_COM_VER_MISMATCH_HCPREVIEW 136 //预览组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCVOICETALK 137 //语音组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCALARM 138 //报警组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCPLAYBACK 139 //回放组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCDISPLAY 140 //显示组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCINDUSTRY 141 //行业应用组件与HCNetSDK版本不匹配 +#define NET_DVR_COM_VER_MISMATCH_HCGENERALCFGMGR 142 //通用配置管理组件与HCNetSDK版本不匹配 + +#define NET_ERR_CONFIG_FILE_IMPORT_FAILED 145 //配置文件导入失败 +#define NET_ERR_CONFIG_FILE_EXPORT_FAILED 146 //配置文件导出失败 +#define NET_DVR_CERTIFICATE_FILE_ERROR 147 //证书错误 +#define NET_DVR_LOAD_SSL_LIB_ERROR 148 //加载SSL库失败(可能是版本不匹配,也可能是不存在) +#define NET_DVR_SSL_VERSION_NOT_MATCH 149 //SSL库版本不匹配 + +#define NET_DVR_ALIAS_DUPLICATE 150 //别名重复 //2011-08-31 通过别名或者序列号来访问设备的新版本ddns的配置 +#define NET_DVR_INVALID_COMMUNICATION 151 //无效通信 +#define NET_DVR_USERNAME_NOT_EXIST 152 //用户名不存在(用户名不存在,IPC5.1.7中发布出去了,所以删不掉。后续的产品这个错误码用不上) +#define NET_DVR_USER_LOCKED 153 //用户被锁定 +#define NET_DVR_INVALID_USERID 154 //无效用户ID +#define NET_DVR_LOW_LOGIN_VERSION 155 //登录版本低 +#define NET_DVR_LOAD_LIBEAY32_DLL_ERROR 156 //加载libeay32.dll库失败 +#define NET_DVR_LOAD_SSLEAY32_DLL_ERROR 157 //加载ssleay32.dll库失败 +#define NET_ERR_LOAD_LIBICONV 158 //加载libiconv库失败 +#define NET_ERR_SSL_CONNECT_FAILED 159 //SSL连接失败 +#define NET_ERR_MCAST_ADDRESS_ERROR 160 //获取多播地址错误 +#define NET_ERR_LOAD_ZLIB 161 //加载zlib.dll库失败 +#define NET_ERR_OPENSSL_NO_INIT 162 //Openssl库未初始化 + +#define NET_DVR_SERVER_NOT_EXIST 164 //对应的服务器找不到,查找时输入的国家编号或者服务器类型错误 +#define NET_DVR_TEST_SERVER_FAIL_CONNECT 165 //连接测试服务器失败 +#define NET_DVR_NAS_SERVER_INVALID_DIR 166 //NAS服务器挂载目录失败,目录无效 +#define NET_DVR_NAS_SERVER_NOENOUGH_PRI 167 //NAS服务器挂载目录失败,没有权限 +#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_DNS 168 //服务器使用域名,但是没有配置DNS,可能造成域名无效。 +#define NET_DVR_EMAIL_SERVER_NOT_CONFIG_GATEWAY 169 //没有配置网关,可能造成发送邮件失败。 +#define NET_DVR_TEST_SERVER_PASSWORD_ERROR 170 //用户名密码不正确,测试服务器的用户名或密码错误 +#define NET_DVR_EMAIL_SERVER_CONNECT_EXCEPTION_WITH_SMTP 171 //设备和smtp服务器交互异常 +#define NET_DVR_FTP_SERVER_FAIL_CREATE_DIR 172 //FTP服务器创建目录失败 +#define NET_DVR_FTP_SERVER_NO_WRITE_PIR 173 //FTP服务器没有写入权限 +#define NET_DVR_IP_CONFLICT 174 //IP冲突 +#define NET_DVR_INSUFFICIENT_STORAGEPOOL_SPACE 175 //存储池空间已满 +#define NET_DVR_STORAGEPOOL_INVALID 176 //云服务器存储池无效,没有配置存储池或者存储池ID错误 +#define NET_DVR_EFFECTIVENESS_REBOOT 177 //生效需要重启 +#define NET_ERR_ANR_ARMING_EXIST 178 //断网续传布防连接已经存在(该错误码是在私有布防连接建立的情况下,重复布防的断网续传功能时,返回。) +#define NET_ERR_UPLOADLINK_EXIST 179 //断网续传上传连接已经存在(EHOME协议和SDK协议是不能同时支持断网续传的,当一个协议存在的时候,另外一个连接建立话,报错这个错误码。) +#define NET_ERR_INCORRECT_FILE_FORMAT 180 //导入文件格式不正确 +#define NET_ERR_INCORRECT_FILE_CONTENT 181 //导入文件内容不正确 +#define NET_ERR_MAX_HRUDP_LINK 182 //HRUDP 连接数 超过设备限制 +#define NET_SDK_ERR_ACCESSKEY_SECRETKEY 183 // 接入秘钥或加密秘钥不正确 +#define NET_SDK_ERR_CREATE_PORT_MULTIPLEX 184 //创建端口复用失败 +#define NET_DVR_NONBLOCKING_CAPTURE_NOTSUPPORT 185 //不支持无阻塞抓图 +#define NET_SDK_ERR_FUNCTION_INVALID 186 //已开启异步,该功能无效 +#define NET_SDK_ERR_MAX_PORT_MULTIPLEX 187 //已达到端口复用最大数目 +#define NET_DVR_INVALID_LINK 188 //连接尚未建立或连接无效 +#define NET_DVR_ISAPI_NOT_SUPPORT 189 //接口不支持ISAPI协议 + +// 2010-5-28 +// 阵列错误码 +#define RAID_ERROR_INDEX 200 +#define NET_DVR_NAME_NOT_ONLY (RAID_ERROR_INDEX + 0) // 名称已存在 +#define NET_DVR_OVER_MAX_ARRAY (RAID_ERROR_INDEX + 1 ) // 阵列达到上限 +#define NET_DVR_OVER_MAX_VD (RAID_ERROR_INDEX + 2 ) // 虚拟磁盘达到上限 +#define NET_DVR_VD_SLOT_EXCEED (RAID_ERROR_INDEX + 3 ) // 虚拟磁盘槽位已满 +#define NET_DVR_PD_STATUS_INVALID (RAID_ERROR_INDEX + 4 ) // 重建阵列所需物理磁盘状态错误 +#define NET_DVR_PD_BE_DEDICATE_SPARE (RAID_ERROR_INDEX + 5 ) // 重建阵列所需物理磁盘为指定热备 +#define NET_DVR_PD_NOT_FREE (RAID_ERROR_INDEX + 6 ) // 重建阵列所需物理磁盘非空闲 +#define NET_DVR_CANNOT_MIG2NEWMODE (RAID_ERROR_INDEX + 7 ) // 不能从当前的阵列类型迁移到新的阵列类型 +#define NET_DVR_MIG_PAUSE (RAID_ERROR_INDEX + 8 ) // 迁移操作已暂停 +#define NET_DVR_MIG_CANCEL (RAID_ERROR_INDEX + 9 ) // 正在执行的迁移操作已取消 +#define NET_DVR_EXIST_VD (RAID_ERROR_INDEX + 10) // 阵列上阵列上存在虚拟磁盘,无法删除阵列 +#define NET_DVR_TARGET_IN_LD_FUNCTIONAL (RAID_ERROR_INDEX + 11) // 对象物理磁盘为虚拟磁盘组成部分且工作正常 +#define NET_DVR_HD_IS_ASSIGNED_ALREADY (RAID_ERROR_INDEX + 12) // 指定的物理磁盘被分配为虚拟磁盘 +#define NET_DVR_INVALID_HD_COUNT (RAID_ERROR_INDEX + 13) // 物理磁盘数量与指定的RAID等级不匹配 +#define NET_DVR_LD_IS_FUNCTIONAL (RAID_ERROR_INDEX + 14) // 阵列正常,无法重建 +#define NET_DVR_BGA_RUNNING (RAID_ERROR_INDEX + 15) // 存在正在执行的后台任务 +#define NET_DVR_LD_NO_ATAPI (RAID_ERROR_INDEX + 16) // 无法用ATAPI盘创建虚拟磁盘 +#define NET_DVR_MIGRATION_NOT_NEED (RAID_ERROR_INDEX + 17) // 阵列无需迁移 +#define NET_DVR_HD_TYPE_MISMATCH (RAID_ERROR_INDEX + 18) // 物理磁盘不属于同意类型 +#define NET_DVR_NO_LD_IN_DG (RAID_ERROR_INDEX + 19) // 无虚拟磁盘,无法进行此项操作 +#define NET_DVR_NO_ROOM_FOR_SPARE (RAID_ERROR_INDEX + 20) // 磁盘空间过小,无法被指定为热备盘 +#define NET_DVR_SPARE_IS_IN_MULTI_DG (RAID_ERROR_INDEX + 21) // 磁盘已被分配为某阵列热备盘 +#define NET_DVR_DG_HAS_MISSING_PD (RAID_ERROR_INDEX + 22) // 阵列缺少盘 + +// x86 64bit nvr新增 2012-02-04 +#define NET_DVR_NAME_EMPTY (RAID_ERROR_INDEX + 23) /*名称为空*/ +#define NET_DVR_INPUT_PARAM (RAID_ERROR_INDEX + 24) /*输入参数有误*/ +#define NET_DVR_PD_NOT_AVAILABLE (RAID_ERROR_INDEX + 25) /*物理磁盘不可用*/ +#define NET_DVR_ARRAY_NOT_AVAILABLE (RAID_ERROR_INDEX + 26) /*阵列不可用*/ +#define NET_DVR_PD_COUNT (RAID_ERROR_INDEX + 27) /*物理磁盘数不正确*/ +#define NET_DVR_VD_SMALL (RAID_ERROR_INDEX + 28) /*虚拟磁盘太小*/ +#define NET_DVR_NO_EXIST (RAID_ERROR_INDEX + 29) /*不存在*/ +#define NET_DVR_NOT_SUPPORT (RAID_ERROR_INDEX + 30) /*不支持该操作*/ +#define NET_DVR_NOT_FUNCTIONAL (RAID_ERROR_INDEX + 31) /*阵列状态不是正常状态*/ +#define NET_DVR_DEV_NODE_NOT_FOUND (RAID_ERROR_INDEX + 32) /*虚拟磁盘设备节点不存在*/ +#define NET_DVR_SLOT_EXCEED (RAID_ERROR_INDEX + 33) /*槽位达到上限*/ +#define NET_DVR_NO_VD_IN_ARRAY (RAID_ERROR_INDEX + 34) /*阵列上不存在虚拟磁盘*/ +#define NET_DVR_VD_SLOT_INVALID (RAID_ERROR_INDEX + 35) /*虚拟磁盘槽位无效*/ +#define NET_DVR_PD_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 36) /*所需物理磁盘空间不足*/ +#define NET_DVR_ARRAY_NONFUNCTION (RAID_ERROR_INDEX + 37) /*只有处于正常状态的阵列才能进行迁移*/ +#define NET_DVR_ARRAY_NO_ENOUGH_SPACE (RAID_ERROR_INDEX + 38) /*阵列空间不足*/ +#define NET_DVR_STOPPING_SCANNING_ARRAY (RAID_ERROR_INDEX + 39) /*正在执行安全拔盘或重新扫描*/ +#define NET_DVR_NOT_SUPPORT_16T (RAID_ERROR_INDEX + 40) /*不支持创建大于16T的阵列*/ +#define NET_DVR_ARRAY_FORMATING (RAID_ERROR_INDEX + 41) /*正在执行格式化的阵列无法删除*/ +#define NET_DVR_QUICK_SETUP_PD_COUNT (RAID_ERROR_INDEX + 42) /*一键配置至少需要三块空闲盘*/ + +//设备未激活时,登录失败,返回错误码 +#define NET_DVR_ERROR_DEVICE_NOT_ACTIVATED 250//设备未激活 +//老SDK接新设备,设置用户密码或者激活的时候为风险密码时,错误码 +#define NET_DVR_ERROR_RISK_PASSWORD 251 //有风险的密码 +//已激活的设备,再次激活时返回错误码 +#define NET_DVR_ERROR_DEVICE_HAS_ACTIVATED 252//设备已激活 + + +// 智能错误码 +#define VCA_ERROR_INDEX 300 // 智能错误码索引 +#define NET_DVR_ID_ERROR (VCA_ERROR_INDEX + 0) // 配置ID不合理 +#define NET_DVR_POLYGON_ERROR (VCA_ERROR_INDEX + 1) // 多边形不符合要求 +#define NET_DVR_RULE_PARAM_ERROR (VCA_ERROR_INDEX + 2) // 规则参数不合理 +#define NET_DVR_RULE_CFG_CONFLICT (VCA_ERROR_INDEX + 3) // 配置信息冲突 +#define NET_DVR_CALIBRATE_NOT_READY (VCA_ERROR_INDEX + 4) // 当前没有标定信息 +#define NET_DVR_CAMERA_DATA_ERROR (VCA_ERROR_INDEX + 5) // 摄像机参数不合理 +#define NET_DVR_CALIBRATE_DATA_UNFIT (VCA_ERROR_INDEX + 6) // 长度不够倾斜,不利于标定 +#define NET_DVR_CALIBRATE_DATA_CONFLICT (VCA_ERROR_INDEX + 7) // 标定出错,以为所有点共线或者位置太集中 +#define NET_DVR_CALIBRATE_CALC_FAIL (VCA_ERROR_INDEX + 8) // 摄像机标定参数值计算失败 +#define NET_DVR_CALIBRATE_LINE_OUT_RECT (VCA_ERROR_INDEX + 9) // 输入的样本标定线超出了样本外接矩形框 +#define NET_DVR_ENTER_RULE_NOT_READY (VCA_ERROR_INDEX + 10) // 没有设置进入区域 +#define NET_DVR_AID_RULE_NO_INCLUDE_LANE (VCA_ERROR_INDEX + 11) // 交通事件规则中没有包括车道(特值拥堵和逆行) +#define NET_DVR_LANE_NOT_READY (VCA_ERROR_INDEX + 12) // 当前没有设置车道 +#define NET_DVR_RULE_INCLUDE_TWO_WAY (VCA_ERROR_INDEX + 13) // 事件规则中包含2种不同方向 +#define NET_DVR_LANE_TPS_RULE_CONFLICT (VCA_ERROR_INDEX + 14) // 车道和数据规则冲突 +#define NET_DVR_NOT_SUPPORT_EVENT_TYPE (VCA_ERROR_INDEX + 15) // 不支持的事件类型 +#define NET_DVR_LANE_NO_WAY (VCA_ERROR_INDEX + 16) // 车道没有方向 +#define NET_DVR_SIZE_FILTER_ERROR (VCA_ERROR_INDEX + 17) // 尺寸过滤框不合理 +#define NET_DVR_LIB_FFL_NO_FACE (VCA_ERROR_INDEX + 18) // 特征点定位时输入的图像没有人脸 +#define NET_DVR_LIB_FFL_IMG_TOO_SMALL (VCA_ERROR_INDEX + 19) // 特征点定位时输入的图像太小 +#define NET_DVR_LIB_FD_IMG_NO_FACE (VCA_ERROR_INDEX + 20) // 单张图像人脸检测时输入的图像没有人脸 +#define NET_DVR_LIB_FACE_TOO_SMALL (VCA_ERROR_INDEX + 21) // 建模时人脸太小 +#define NET_DVR_LIB_FACE_QUALITY_TOO_BAD (VCA_ERROR_INDEX + 22) // 建模时人脸图像质量太差 +#define NET_DVR_KEY_PARAM_ERR (VCA_ERROR_INDEX + 23) //高级参数设置错误 +#define NET_DVR_CALIBRATE_DATA_ERR (VCA_ERROR_INDEX + 24) //标定样本数目错误,或数据值错误,或样本点超出地平线 +#define NET_DVR_CALIBRATE_DISABLE_FAIL (VCA_ERROR_INDEX + 25) //所配置规则不允许取消标定 +#define NET_DVR_VCA_LIB_FD_SCALE_OUTRANGE (VCA_ERROR_INDEX + 26) //最大过滤框的宽高最小值超过最小过滤框的宽高最大值两倍以上 +#define NET_DVR_LIB_FD_REGION_TOO_LARGE (VCA_ERROR_INDEX + 27) //当前检测区域范围过大。检测区最大为图像的2/3 +#define NET_DVR_TRIAL_OVERDUE (VCA_ERROR_INDEX + 28) //试用版评估期已结束 +#define NET_DVR_CONFIG_FILE_CONFLICT (VCA_ERROR_INDEX + 29) //设备类型与配置文件冲突(加密狗类型与现有分析仪配置不符错误码提示) +//算法库相关错误码 +#define NET_DVR_FR_FPL_FAIL (VCA_ERROR_INDEX + 30) // 人脸特征点定位失败 +#define NET_DVR_FR_IQA_FAIL (VCA_ERROR_INDEX + 31) // 人脸评分失败 +#define NET_DVR_FR_FEM_FAIL (VCA_ERROR_INDEX + 32) // 人脸特征提取失败 +#define NET_DVR_FPL_DT_CONF_TOO_LOW (VCA_ERROR_INDEX + 33) // 特征点定位时人脸检测置信度过低 +#define NET_DVR_FPL_CONF_TOO_LOW (VCA_ERROR_INDEX + 34) // 特征点定位置信度过低 +#define NET_DVR_E_DATA_SIZE (VCA_ERROR_INDEX + 35) // 数据长度不匹配 +#define NET_DVR_FR_MODEL_VERSION_ERR (VCA_ERROR_INDEX + 36) // 人脸模型数据中的模型版本错误 +#define NET_DVR_FR_FD_FAIL (VCA_ERROR_INDEX + 37) // 识别库中人脸检测失败 +#define NET_DVR_FA_NORMALIZE_ERR (VCA_ERROR_INDEX + 38) // 人脸归一化出错 +//其他错误码 +#define NET_DVR_DOG_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 39) // 加密狗与前端取流设备类型不匹配 +#define NET_DVR_DEV_PUSTREAM_NOT_MATCH (VCA_ERROR_INDEX + 40) // 前端取流设备版本不匹配 +#define NET_DVR_PUSTREAM_ALREADY_EXISTS (VCA_ERROR_INDEX + 41) // 设备的其他通道已经添加过该前端设备 +#define NET_DVR_SEARCH_CONNECT_FAILED (VCA_ERROR_INDEX + 42) // 连接检索服务器失败 +#define NET_DVR_INSUFFICIENT_DISK_SPACE (VCA_ERROR_INDEX + 43) // 可存储的硬盘空间不足 +#define NET_DVR_DATABASE_CONNECTION_FAILED (VCA_ERROR_INDEX + 44) // 数据库连接失败 +#define NET_DVR_DATABASE_ADM_PW_ERROR (VCA_ERROR_INDEX + 45) // 数据库用户名、密码错误 +#define NET_DVR_DECODE_YUV (VCA_ERROR_INDEX + 46) // 解码失败 +#define NET_DVR_IMAGE_RESOLUTION_ERROR (VCA_ERROR_INDEX + 47) // +#define NET_DVR_CHAN_WORKMODE_ERROR (VCA_ERROR_INDEX + 48) // + +#define NET_DVR_RTSP_ERROR_NOENOUGHPRI 401 //无权限:服务器返回401时,转成这个错误码 +#define NET_DVR_RTSP_ERROR_ALLOC_RESOURCE 402 //分配资源失败 +#define NET_DVR_RTSP_ERROR_PARAMETER 403 //参数错误 +#define NET_DVR_RTSP_ERROR_NO_URL 404 //指定的URL地址不存在:服务器返回404时,转成这个错误码 +#define NET_DVR_RTSP_ERROR_FORCE_STOP 406 //用户中途强行退出 + +#define NET_DVR_RTSP_GETPORTFAILED 407 //rtsp 得到端口错误 +#define NET_DVR_RTSP_DESCRIBERROR 410 //rtsp decribe 交互错误 +#define NET_DVR_RTSP_DESCRIBESENDTIMEOUT 411 //rtsp decribe 发送超时 +#define NET_DVR_RTSP_DESCRIBESENDERROR 412 //rtsp decribe 发送失败 +#define NET_DVR_RTSP_DESCRIBERECVTIMEOUT 413 //rtsp decribe 接收超时 +#define NET_DVR_RTSP_DESCRIBERECVDATALOST 414 //rtsp decribe 接收数据错误 +#define NET_DVR_RTSP_DESCRIBERECVERROR 415 //rtsp decribe 接收失败 +#define NET_DVR_RTSP_DESCRIBESERVERERR 416 //rtsp decribe 服务器返回错误状态 + +#define NET_DVR_RTSP_SETUPERROR 420 //rtsp setup 交互错误 +#define NET_DVR_RTSP_SETUPSENDTIMEOUT 421 //rtsp setup 发送超时 +#define NET_DVR_RTSP_SETUPSENDERROR 422 //rtsp setup 发送错误 +#define NET_DVR_RTSP_SETUPRECVTIMEOUT 423 //rtsp setup 接收超时 +#define NET_DVR_RTSP_SETUPRECVDATALOST 424 //rtsp setup 接收数据错误 +#define NET_DVR_RTSP_SETUPRECVERROR 425 //rtsp setup 接收失败 +#define NET_DVR_RTSP_OVER_MAX_CHAN 426 //超过服务器最大连接数,或者服务器资源不足,服务器返回453时,转成这个错误码。 +#define NET_DVR_RTSP_SETUPSERVERERR 427 //rtsp setup 服务器返回错误状态 + +#define NET_DVR_RTSP_PLAYERROR 430 //rtsp play 交互错误 +#define NET_DVR_RTSP_PLAYSENDTIMEOUT 431 //rtsp play 发送超时 +#define NET_DVR_RTSP_PLAYSENDERROR 432 //rtsp play 发送错误 +#define NET_DVR_RTSP_PLAYRECVTIMEOUT 433 //rtsp play 接收超时 +#define NET_DVR_RTSP_PLAYRECVDATALOST 434 //rtsp play 接收数据错误 +#define NET_DVR_RTSP_PLAYRECVERROR 435 //rtsp play 接收失败 +#define NET_DVR_RTSP_PLAYSERVERERR 436 //rtsp play 服务器返回错误状态 + +#define NET_DVR_RTSP_TEARDOWNERROR 440 //rtsp teardown 交互错误 +#define NET_DVR_RTSP_TEARDOWNSENDTIMEOUT 441 //rtsp teardown 发送超时 +#define NET_DVR_RTSP_TEARDOWNSENDERROR 442 //rtsp teardown 发送错误 +#define NET_DVR_RTSP_TEARDOWNRECVTIMEOUT 443 //rtsp teardown 接收超时 +#define NET_DVR_RTSP_TEARDOWNRECVDATALOST 444 //rtsp teardown 接收数据错误 +#define NET_DVR_RTSP_TEARDOWNRECVERROR 445 //rtsp teardown 接收失败 +#define NET_DVR_RTSP_TEARDOWNSERVERERR 446 //rtsp teardown 服务器返回错误状态 + +#define NET_PLAYM4_NOERROR 500 //no error +#define NET_PLAYM4_PARA_OVER 501 //input parameter is invalid; +#define NET_PLAYM4_ORDER_ERROR 502 //The order of the function to be called is error. +#define NET_PLAYM4_TIMER_ERROR 503 //Create multimedia clock failed; +#define NET_PLAYM4_DEC_VIDEO_ERROR 504 //Decode video data failed. +#define NET_PLAYM4_DEC_AUDIO_ERROR 505 //Decode audio data failed. +#define NET_PLAYM4_ALLOC_MEMORY_ERROR 506 //Allocate memory failed. +#define NET_PLAYM4_OPEN_FILE_ERROR 507 //Open the file failed. +#define NET_PLAYM4_CREATE_OBJ_ERROR 508 //Create thread or event failed +#define NET_PLAYM4_CREATE_DDRAW_ERROR 509 //Create DirectDraw object failed. +#define NET_PLAYM4_CREATE_OFFSCREEN_ERROR 510 //failed when creating off-screen surface. +#define NET_PLAYM4_BUF_OVER 511 //buffer is overflow +#define NET_PLAYM4_CREATE_SOUND_ERROR 512 //failed when creating audio device. +#define NET_PLAYM4_SET_VOLUME_ERROR 513 //Set volume failed +#define NET_PLAYM4_SUPPORT_FILE_ONLY 514 //The function only support play file. +#define NET_PLAYM4_SUPPORT_STREAM_ONLY 515 //The function only support play stream. +#define NET_PLAYM4_SYS_NOT_SUPPORT 516 //System not support. +#define NET_PLAYM4_FILEHEADER_UNKNOWN 517 //No file header. +#define NET_PLAYM4_VERSION_INCORRECT 518 //The version of decoder and encoder is not adapted. +#define NET_PALYM4_INIT_DECODER_ERROR 519 //Initialize decoder failed. +#define NET_PLAYM4_CHECK_FILE_ERROR 520 //The file data is unknown. +#define NET_PLAYM4_INIT_TIMER_ERROR 521 //Initialize multimedia clock failed. +#define NET_PLAYM4_BLT_ERROR 522 //Blt failed. +#define NET_PLAYM4_UPDATE_ERROR 523 //Update failed. +#define NET_PLAYM4_OPEN_FILE_ERROR_MULTI 524 //openfile error, streamtype is multi +#define NET_PLAYM4_OPEN_FILE_ERROR_VIDEO 525 //openfile error, streamtype is video +#define NET_PLAYM4_JPEG_COMPRESS_ERROR 526 //JPEG compress error +#define NET_PLAYM4_EXTRACT_NOT_SUPPORT 527 //Don't support the version of this file. +#define NET_PLAYM4_EXTRACT_DATA_ERROR 528 //extract video data failed. + +//转封装库错误码 +#define NET_CONVERT_ERROR_NOT_SUPPORT 581 //convert not support + +//语音对讲库错误码 +#define NET_AUDIOINTERCOM_OK 600 //无错误 +#define NET_AUDIOINTECOM_ERR_NOTSUPORT 601 //不支持 +#define NET_AUDIOINTECOM_ERR_ALLOC_MEMERY 602 //内存申请错误 +#define NET_AUDIOINTECOM_ERR_PARAMETER 603 //参数错误 +#define NET_AUDIOINTECOM_ERR_CALL_ORDER 604 //调用次序错误 +#define NET_AUDIOINTECOM_ERR_FIND_DEVICE 605 //未发现设备 +#define NET_AUDIOINTECOM_ERR_OPEN_DEVICE 606 //不能打开设备诶 +#define NET_AUDIOINTECOM_ERR_NO_CONTEXT 607 //设备上下文出错 +#define NET_AUDIOINTECOM_ERR_NO_WAVFILE 608 //WAV文件出错 +#define NET_AUDIOINTECOM_ERR_INVALID_TYPE 609 //无效的WAV参数类型 +#define NET_AUDIOINTECOM_ERR_ENCODE_FAIL 610 //编码失败 +#define NET_AUDIOINTECOM_ERR_DECODE_FAIL 611 //解码失败 +#define NET_AUDIOINTECOM_ERR_NO_PLAYBACK 612 //播放失败 +#define NET_AUDIOINTECOM_ERR_DENOISE_FAIL 613 //降噪失败 +#define NET_AUDIOINTECOM_ERR_UNKOWN 619 //未知错误 + +#define NET_QOS_OK 700 //no error +#define NET_QOS_ERROR (NET_QOS_OK - 1) //qos error +#define NET_QOS_ERR_INVALID_ARGUMENTS (NET_QOS_OK - 2) //invalid arguments +#define NET_QOS_ERR_SESSION_NOT_FOUND (NET_QOS_OK - 3) //session net found +#define NET_QOS_ERR_LIB_NOT_INITIALIZED (NET_QOS_OK - 4) //lib not initialized +#define NET_QOS_ERR_OUTOFMEM (NET_QOS_OK - 5) //outtofmem +#define NET_QOS_ERR_PACKET_UNKNOW (NET_QOS_OK - 10) //packet unknow +#define NET_QOS_ERR_PACKET_VERSION (NET_QOS_OK - 11) //packet version error +#define NET_QOS_ERR_PACKET_LENGTH (NET_QOS_OK - 12) //packet length error +#define NET_QOS_ERR_PACKET_TOO_BIG (NET_QOS_OK - 13) //packet too big +#define NET_QOS_ERR_SCHEDPARAMS_INVALID_BANDWIDTH (NET_QOS_OK - 20) //schedparams invalid bandwidth +#define NET_QOS_ERR_SCHEDPARAMS_BAD_FRACTION (NET_QOS_OK - 21) //schedparams bad fraction +#define NET_QOS_ERR_SCHEDPARAMS_BAD_MINIMUM_INTERVAL (NET_QOS_OK - 22) //schedparams bad minimum interval + +#define NET_ERROR_TRUNK_LINE 711 //子系统已被配成干线 +#define NET_ERROR_MIXED_JOINT 712 //不能进行混合拼接 +#define NET_ERROR_DISPLAY_SWITCH 713 //不能进行显示通道切换 +#define NET_ERROR_USED_BY_BIG_SCREEN 714 //解码资源被大屏占用 +#define NET_ERROR_USE_OTHER_DEC_RESOURCE 715 //不能使用其他解码子系统资源 +#define NET_ERROR_DISP_MODE_SWITCH 716 //显示通道显示状态切换中 +#define NET_ERROR_SCENE_USING 717 //场景正在使用 +#define NET_ERR_NO_ENOUGH_DEC_RESOURCE 718 //解码资源不足 +#define NET_ERR_NO_ENOUGH_FREE_SHOW_RESOURCE 719 //畅显资源不足 +#define NET_ERR_NO_ENOUGH_VIDEO_MEMORY 720 //显存资源不足 +#define NET_ERR_MAX_VIDEO_NUM 721 //一拖多资源不足 +#define NET_ERR_WIN_COVER_FREE_SHOW_AND_NORMAL 722 //窗口跨越了畅显输出口和非畅显输出口 +#define NET_ERR_FREE_SHOW_WIN_SPLIT 723 //畅显窗口不支持分屏 +#define NET_ERR_INAPPROPRIATE_WIN_FREE_SHOW 724 //不是输出口整数倍的窗口不支持开启畅显 +#define NET_DVR_TRANSPARENT_WIN_NOT_SUPPORT_SPLIT 725 //开启透明度的窗口不支持分屏 +#define NET_DVR_SPLIT_WIN_NOT_SUPPORT_TRANSPARENT 726 //开启多分屏的窗口不支持透明度设置 +#define NET_ERR_MAX_LOGO_NUM 727 //logo数达到上限 +#define NET_ERR_MAX_WIN_LOOP_NUM 728 //轮巡窗口数达到上限 +#define NET_ERR_VIRTUAL_LED_VERTICAL_CROSS 729 //虚拟LED不能纵向跨屏 +#define NET_ERR_MAX_VIRTUAL_LED_HEIGHT 730 //虚拟LED高度超限 +#define NET_ERR_VIRTUAL_LED_ILLEGAL_CHARACTER 731 //虚拟LED内容包含非法字符 +#define NET_ERR_BASEMAP_NOT_EXIST 732 //底图图片不存在 +#define NET_ERR_LED_NOT_SUPPORT_VIRTUAL_LED 733 //LED屏幕不支持虚拟LED +#define NET_ERR_LED_RESOLUTION_NOT_SUPPORT 734 //LED分辨率不支持 +#define NET_ERR_PLAN_OVERDUE 735 //预案超期,不能再调用 +#define NET_ERR_PROCESSER_MAX_SCREEN_BLK 736 //单个处理器接入的信号跨越的屏幕个数超限 +#define NET_ERR_WND_SIZE_TOO_SMALL 737 //开窗窗口宽高太小 +#define NET_ERR_WND_SPLIT_NOT_SUPPORT_ROAM 738 //分屏窗口不支持漫游 +#define NET_ERR_OUTPUT_ONE_BOARD_ONE_WALL 739 //同一个子板的输出口只能绑定到同一面墙上 +#define NET_ERR_WND_CANNOT_LCD_AND_LED_OUTPUT 740 //窗口不能同时跨LCD和LED输出口 +#define NET_ERR_MAX_OSD_NUM 741 //OSD数量达到最大 + +#define NET_SDK_CANCEL_WND_TOPKEEP_ATTR_FIRST 751 //先取消置顶保持窗口的置顶保持属性才能进行置底操作 +#define NET_SDK_ERR_LED_SCREEN_CHECKING 752 //正在校正LED屏幕 +#define NET_SDK_ERR_NOT_SUPPORT_SINGLE_RESOLUTION 753 //LCD/LED输出口绑定之后不支持单个输出口的分辨率配置 +#define NET_SDK_ERR_LED_RESOLUTION_MISMATCHED 754 //该输出口的LED分辨率和其他输出口的LED分辨率不匹配,需要满足同行等高、同列等宽 + + +#define NET_SDK_ERR_MAX_VIRTUAL_LED_WIDTH 755 //虚拟LED宽度超限,包括最大值和最小值 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_SCREEN 756 //单屏虚拟LED数量超限 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_IN_WALL 757 //单墙虚拟LED数量超限 +#define NET_SDK_ERR_VIRTUAL_LED_OVERLAP 758 //虚拟LED重叠错误 +#define NET_SDK_ERR_VIRTUAL_LED_TYPE 759 //类型错误 +#define NET_SDK_ERR_VIRTUAL_LED_COLOUR 760 //颜色错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_DIRECTION 761 //移动方向错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_MODE 762 //移动模式错误 +#define NET_SDK_ERR_VIRTUAL_LED_MOVE_SPEED 763 //移动速度错误 +#define NET_SDK_ERR_VIRTUAL_LED_DISP_MODE 764 //显示模式有误 +#define NET_SDK_ERR_VIRTUAL_LED_NO 765 //虚拟LED序号错误 +#define NET_SDK_ERR_VIRTUAL_LED_PARA 766 //虚拟LED参数配置错误,包括结构体内其他参数 +#define NET_SDK_ERR_BASEMAP_POSITION 767 //底图窗口宽高参数错误 +#define NET_SDK_ERR_BASEMAP_PICTURE_LEN 768 //底图图片长度超限 +#define NET_SDK_ERR_BASEMAP_PICTURE_RESOLUTION 769 //底图图片分辨率错误 +#define NET_SDK_ERR_BASEMAP_PICTURE_FORMAT 770 //底图图片格式错误 +#define NET_SDK_ERR_MAX_VIRTUAL_LED_NUM 771 //设备支持的虚拟LED数量超限 +#define NET_SDK_ERR_MAX_TIME_VIRTUAL_LED_IN_WALL 772 //单面电视墙支持的时间虚拟LED的数量超限 + +#define NET_ERR_TERMINAL_BUSY 780 //终端忙,终端处于会议中 + +#define NET_ERR_DATA_RETURNED_ILLEGAL 790 //设备返回的数据不合法 +#define NET_DVR_FUNCTION_RESOURCE_USAGE_ERROR 791 //设备其它功能占用资源,导致该功能无法开启 + +#define NET_DVR_ERR_IMPORT_EMPTY_FILE 792 //导入文件为空 +#define NET_DVR_ERR_IMPORT_TOO_LARGE_FILE 793 //导入文件过大 +#define NET_DVR_ERR_BAD_IPV4_ADDRESS 794 //IPV4地址无效 +#define NET_DVR_ERR_BAD_NET_MASK 795 //子网掩码地址无效 +#define NET_DVR_ERR_INVALID_NET_GATE_ADDRESS 796 //网关地址无效 +#define NET_DVR_ERR_BAD_DNS 797 //DNS地址无效 +#define NET_DVR_ERR_ILLEGAL_PASSWORD 798 //密码不能包含用户名 + +#define NET_DVR_DEV_NET_OVERFLOW 800 //网络流量超过设备能力上限 +#define NET_DVR_STATUS_RECORDFILE_WRITING_NOT_LOCK 801 //录像文件在录像,无法被锁定 +#define NET_DVR_STATUS_CANT_FORMAT_LITTLE_DISK 802 //由于硬盘太小无法格式化 + +//N+1错误码 +#define NET_SDK_ERR_REMOTE_DISCONNECT 803 //远端无法连接 +#define NET_SDK_ERR_RD_ADD_RD 804 //备机不能添加备机 +#define NET_SDK_ERR_BACKUP_DISK_EXCEPT 805 //备份盘异常 +#define NET_SDK_ERR_RD_LIMIT 806 //备机数已达上限 +#define NET_SDK_ERR_ADDED_RD_IS_WD 807 //添加的备机是工作机 +#define NET_SDK_ERR_ADD_ORDER_WRONG 808 //添加顺序出错,比如没有被工作机添加为备机,就添加工作机 +#define NET_SDK_ERR_WD_ADD_WD 809 //工作机不能添加工作机 +#define NET_SDK_ERR_WD_SERVICE_EXCETP 810 //工作机CVR服务异常 +#define NET_SDK_ERR_RD_SERVICE_EXCETP 811 //备机CVR服务异常 +#define NET_SDK_ERR_ADDED_WD_IS_RD 812 //添加的工作机是备机 +#define NET_SDK_ERR_PERFORMANCE_LIMIT 813 //性能达到上限 +#define NET_SDK_ERR_ADDED_DEVICE_EXIST 814 //添加的设备已经存在 + +//审讯机错误码 +#define NET_SDK_ERR_INQUEST_RESUMING 815 //审讯恢复中 +#define NET_SDK_ERR_RECORD_BACKUPING 816 //审讯备份中 +#define NET_SDK_ERR_DISK_PLAYING 817 //光盘回放中 +#define NET_SDK_ERR_INQUEST_STARTED 818 //审讯已开启 +#define NET_SDK_ERR_LOCAL_OPERATING 819 //本地操作进行中 +#define NET_SDK_ERR_INQUEST_NOT_START 820 //审讯未开启 +//Netra3.1.0错误码 +#define NET_SDK_ERR_CHAN_AUDIO_BIND 821 //通道未绑定或绑定语音对讲失败 +//云存储错误码 +#define NET_DVR_N_PLUS_ONE_MODE 822 //设备当前处于N+1模式 +#define NET_DVR_CLOUD_STORAGE_OPENED 823 //云存储模式已开启 + +#define NET_DVR_ERR_OPER_NOT_ALLOWED 824 //设备处于N+0被接管状态,不允许该操作 +#define NET_DVR_ERR_NEED_RELOCATE 825 //设备处于N+0被接管状态,需要获取重定向信息,再重新操作 + +//庭审主机错误码 +#define NET_SDK_ERR_IR_PORT_ERROR 830 //红外输出口错误 +#define NET_SDK_ERR_IR_CMD_ERROR 831 //红外输出口的命令号错误 +#define NET_SDK_ERR_NOT_INQUESTING 832 //设备处于非审讯状态 +#define NET_SDK_ERR_INQUEST_NOT_PAUSED 833 //设备处于非暂停状态 +#define NET_DVR_CHECK_PASSWORD_MISTAKE_ERROR 834 //校验密码错误 +#define NET_DVR_CHECK_PASSWORD_NULL_ERROR 835 //校验密码不能为空 +#define NET_DVR_UNABLE_CALIB_ERROR 836 // 当前无法标定 +#define NET_DVR_PLEASE_CALIB_ERROR 837 //请先完成标定 +#define NET_DVR_ERR_PANORAMIC_CAL_EMPTY 838 //Flash中全景标定为空 +#define NET_DVR_ERR_CALIB_FAIL_PLEASEAGAIN 839 //标定失败,请重新标定(Calibration failed. Please calibrate again.) +#define NET_DVR_ERR_DETECTION_LINE 840 //规则线配置错误,请重新配置规则线,确保规则线位于红色区域内(Please set detection line again. The detection line should be within the red count area.) +#define NET_DVR_ERR_TURN_OFF_IMAGE_PARA 841 //请先关闭图像参数切换功能(Please turn off the image parameters switch first.) +#define NET_DVR_EXCEED_FACE_IMAGES_ERROR 843 //超过人脸图片最大张数 +#define NET_DVR_ANALYSIS_FACE_IMAGES_ERROR 844 //图片数据识别失败 +#define NET_ERR_ALARM_INPUT_OCCUPIED 845 //A<-1报警号已用于触发车辆抓拍Alarm Input No. A<-1 is used to trigger vehicle capture. +#define NET_DVR_FACELIB_DATABASE_ERROR 846 //人脸库中数据库版本不匹配 +#define NET_DVR_FACELIB_DATA_ERROR 847 //人脸库数据错误 +#define NET_DVR_FACE_DATA_ID_ERROR 848 //人脸数据PID无效 +#define NET_DVR_FACELIB_ID_ERROR 849 //人脸库ID无效 +#define NET_DVR_EXCEED_FACE_LIBARY_ERROR 850 //超过人脸库最大个数 +#define NET_DVR_PIC_ANALYSIS_NO_TARGET_ERROR 851 //图片未识别到目标 +#define NET_DVR_SUBPIC_ANALYSIS_MODELING_ERROR 852 //子图建模失败 +#define NET_DVR_PIC_ANALYSIS_NO_RESOURCE_ERROR 853 //无对应智能分析引擎支持图片二次识别 +#define NET_DVR_ANALYSIS_ENGINES_NO_RESOURCE_ERROR 854//无分析引擎资源 +#define NET_DVR_ANALYSIS_ENGINES_USAGE_EXCEED_ERROR 855//引擎使用率超负荷,已达100% +#define NET_DVR_EXCEED_HUMANMISINFO_FILTER_ENABLED_ERROR 856 //超过开启人体去误报最大通道个数 +#define NET_DVR_NAME_ERROR 857 //名称错误 +#define NET_DVR_NAME_EXIST_ERROR 858 //名称已存在 +#define NET_DVR_FACELIB_PIC_IMPORTING_ERROR 859 //人脸库导入图片中 +#define NET_DVR_ERR_CALIB_POSITION 860 //标定位置超出摄像机运动范围 +#define NET_DVR_ERR_DELETE 861 //无法删除 +#define NET_DVR_ERR_SCENE_ID 862 //场景ID无效 +#define NET_DVR_ERR_CALIBING 863 //标定中 +#define NET_DVR_PIC_FORMAT_ERROR 864 //图片格式错误 +#define NET_DVR_PIC_RESOLUTION_INVALID_ERROR 865 //图片分辨率无效错误 +#define NET_DVR_PIC_SIZE_EXCEED_ERROR 866 //图片过大 +#define NET_DVR_PIC_ANALYSIS_TARGRT_NUM_EXCEED_ERROR 867 //图片目标个数超过上限 +#define NET_DVR_ANALYSIS_ENGINES_LOADING_ERROR 868//分析引擎初始化中 +#define NET_DVR_ANALYSIS_ENGINES_ABNORMA_ERROR 869//分析引擎异常 +#define NET_DVR_ANALYSIS_ENGINES_FACELIB_IMPORTING 870//分析引擎正在导入人脸库 +#define NET_DVR_NO_DATA_FOR_MODELING_ERROR 871 //无待建模数据 +#define NET_DVR_FACE_DATA_MODELING_ERROR 872 //设备正在进行图片建模操作,不支持并发处理 +#define NET_ERR_FACELIBDATA_OVERLIMIT 873 //超过设备中支持导入人脸数最大个数限制(导入的人脸库中数据) +#define NET_DVR_ANALYSIS_ENGINES_ASSOCIATED_CHANNEL 874//分析引擎已关联通道 +#define NET_DVR_ERR_CUSTOMID_LEN 875 //上层自定义ID的长度最小32字符长度 +#define NET_DVR_ERR_CUSTOMFACELIBID_REPEAT 876 //上层下发重复的自定义人脸库ID +#define NET_DVR_ERR_CUSTOMHUMANID_REPEAT 877 //上层下发重复的自定义人员ID +#define NET_DVR_ERR_URL_DOWNLOAD_FAIL 878 //url下载失败 +#define NET_DVR_ERR_URL_DOWNLOAD_NOTSTART 879 //url未开始下载 + +#define NET_DVR_CFG_FILE_SECRETKEY_ERROR 880 //配置文件安全校验密钥错误 +#define NET_DVR_WDR_NOTDISABLE_ERROR 881 //请先关闭所有通道当前日夜参数转换模式下的宽动态 +#define NET_DVR_HLC_NOTDISABLE_ERROR 882 //请先关闭所有通道当前日夜参数转换模式下的强光抑制 + +#define NET_DVR_THERMOMETRY_REGION_OVERSTEP_ERROR 883 //测温区域越界 + + +#define NET_DVR_ERR_MODELING_DEVICEINTERNAL 884 //建模失败,设备内部错误 +#define NET_DVR_ERR_MODELING_FACE 885 //建模失败,人脸建模错误 +#define NET_DVR_ERR_MODELING_FACEGRADING 886 //建模失败,人脸质量评分错误 +#define NET_DVR_ERR_MODELING_FACEGFEATURE 887 //建模失败,特征点提取错误 +#define NET_DVR_ERR_MODELING_FACEGANALYZING 888 //建模失败,属性提取错误 + +#define NET_DVR_ERR_STREAM_LIMIT 889 //码流性能超过上限,请减少取流路数 +#define NET_DVR_ERR_STREAM_DESCRIPTION 890 //请输入码流描述 +#define NET_DVR_ERR_STREAM_DELETE 891 //码流正在使用无法删除 +#define NET_DVR_ERR_CUSTOMSTREAM_NAME 892 //自定义码流名称为空或不合法 +#define NET_DVR_ERR_CUSTOMSTREAM_NOTEXISTED 893 //该自定义码流不存在 + +#define NET_DVR_ERR_TOO_SHORT_CALIBRATING_TIME 894 //标定时间太短 +#define NET_DVR_ERR_AUTO_CALIBRATE_FAILED 895 //自动标定失败 +#define NET_DVR_ERR_VERIFICATION_FAILED 896 //校验失败 + +#define NET_DVR_NO_TEMP_SENSOR_ERROR 897 //无温度传感器 +#define NET_DVR_PUPIL_DISTANCE_OVERSIZE_ERROR 898 //瞳距过大 +#define NET_DVR_ERR_UNOPENED_FACE_SNAP 899 //操作无效,请先开启人脸抓拍 +//2011-10-25多屏控制器错误码(900-950) +#define NET_ERR_CUT_INPUTSTREAM_OVERLIMIT 900 //信号源裁剪数值超限 +#define NET_ERR_WINCHAN_IDX 901 // 开窗通道号错误 +#define NET_ERR_WIN_LAYER 902 // 窗口层数错误,单个屏幕上最多覆盖的窗口层数 +#define NET_ERR_WIN_BLK_NUM 903 // 窗口的块数错误,单个窗口可覆盖的屏幕个数 +#define NET_ERR_OUTPUT_RESOLUTION 904 // 输出分辨率错误 +#define NET_ERR_LAYOUT 905 // 布局号错误 +#define NET_ERR_INPUT_RESOLUTION 906 // 输入分辨率不支持 +#define NET_ERR_SUBDEVICE_OFFLINE 907 // 子设备不在线 +#define NET_ERR_NO_DECODE_CHAN 908 // 没有空闲解码通道 +#define NET_ERR_MAX_WINDOW_ABILITY 909 // 开窗能力上限, 分布式多屏控制器中解码子设备能力上限或者显示处理器能力上限导致 +#define NET_ERR_ORDER_ERROR 910 // 调用顺序有误 +#define NET_ERR_PLAYING_PLAN 911 // 正在执行预案 +#define NET_ERR_DECODER_USED 912 // 解码板正在使用 +#define NET_ERR_OUTPUT_BOARD_DATA_OVERFLOW 913 // 输出板数据量超限 +#define NET_ERR_SAME_USER_NAME 914 // 用户名相同 +#define NET_ERR_INVALID_USER_NAME 915 // 无效用户名 +#define NET_ERR_MATRIX_USING 916 // 输入矩阵正在使用 +#define NET_ERR_DIFFERENT_CHAN_TYPE 917 // 通道类型不同(矩阵输出通道和控制器的输入为不同的类型) +#define NET_ERR_INPUT_CHAN_BINDED 918 // 输入通道已经被其他矩阵绑定 +#define NET_ERR_BINDED_OUTPUT_CHAN_OVERFLOW 919 // 正在使用的矩阵输出通道个数超过矩阵与控制器绑定的通道个数 +#define NET_ERR_MAX_SIGNAL_NUM 920 // 输入信号源个数达到上限 +#define NET_ERR_INPUT_CHAN_USING 921 // 输入通道正在使用 +#define NET_ERR_MANAGER_LOGON 922 // 管理员已经登陆,操作失败 +#define NET_ERR_USERALREADY_LOGON 923 // 该用户已经登陆,操作失败 +#define NET_ERR_LAYOUT_INIT 924 // 布局正在初始化,操作失败 +#define NET_ERR_BASEMAP_SIZE_NOT_MATCH 925 // 底图大小不符 +#define NET_ERR_WINDOW_OPERATING 926 // 窗口正在执行其他操作,本次操作失败 +#define NET_ERR_SIGNAL_UPLIMIT 927 // 信号源开窗个数达到上限 +#define NET_ERR_SIGNAL_MAX_ENLARGE_TIMES 928 // 信号源放大倍数超限 +#define NET_ERR_ONE_SIGNAL_MULTI_CROSS 929 // 单个信号源不能多次跨屏 +#define NET_ERR_ULTRA_HD_SIGNAL_MULTI_WIN 930 // 超高清信号源不能重复开窗 +#define NET_ERR_MAX_VIRTUAL_LED_WIDTH 931 //虚拟LED宽度大于限制值 +#define NET_ERR_MAX_VIRTUAL_LED_WORD_LEN 932 //虚拟LED字符数大于限制值 +#define NET_ERR_SINGLE_OUTPUTPARAM_CONFIG 933//不支持单个显示输出参数设置 +#define NET_ERR_MULTI_WIN_BE_COVER 934//多分屏窗口被覆盖 +#define NET_ERR_WIN_NOT_EXIST 935 //窗口不存在 +#define NET_ERR_WIN_MAX_SIGNALSOURCE 936//窗口信号源数超过限制值 +#define NET_ERR_MULTI_WIN_MOVE 937//对多分屏窗口移动 +#define NET_ERR_MULTI_WIN_YPBPR_SDI 938 // YPBPR 和SDI信号源不支持9/16分屏 +#define NET_ERR_DIFF_TYPE_OUTPUT_MIXUSE 939 //不同类型输出板混插 +#define NET_ERR_SPLIT_WIN_CROSS 940//对跨屏窗口分屏 +#define NET_ERR_SPLIT_WIN_NOT_FULL_SCREEN 941 //对未满屏窗口分屏 +#define NET_ERR_SPLIT_WIN_MANY_WIN 942 //对单个输出口上有多个窗口的窗口分屏 +#define NET_ERR_WINDOW_SIZE_OVERLIMIT 943 //窗口大小超限 +#define NET_ERR_INPUTSTREAM_ALREADY_JOINT 944 //信号源已加入拼接 +#define NET_ERR_JOINT_INPUTSTREAM_OVERLIMIT 945 //拼接信号源个数超限 + +#define NET_ERR_LED_RESOLUTION 946 //LED 分辨率大于输出分辨率 +#define NET_ERR_JOINT_SCALE_OVERLIMIT 947 //拼接信号源的规模超限 +#define NET_ERR_INPUTSTREAM_ALREADY_DECODE 948 //信号源已上墙 +#define NET_ERR_INPUTSTREAM_NOTSUPPORT_CAPTURE 949 //信号源不支持抓图 +#define NET_ERR_JOINT_NOTSUPPORT_SPLITWIN 950 //该信号源不支持分屏 + +//解码器错误码(951-999) +#define NET_ERR_MAX_WIN_OVERLAP 951 //达到最大窗口重叠数 +#define NET_ERR_STREAMID_CHAN_BOTH_VALID 952 //stream ID和通道号同时有效 +#define NET_ERR_NO_ZERO_CHAN 953 //设备无零通道 +#define NEED_RECONNECT 955 //需要重定向(转码子系统使用) +#define NET_ERR_NO_STREAM_ID 956 //流ID不存在 +#define NET_DVR_TRANS_NOT_START 957 //转码未启动 +#define NET_ERR_MAXNUM_STREAM_ID 958 //流ID数达到上限 +#define NET_ERR_WORKMODE_MISMATCH 959 //工作模式不匹配 +#define NET_ERR_MODE_IS_USING 960 //已工作在当前模式 +#define NET_ERR_DEV_PROGRESSING 961 //设备正在处理中 +#define NET_ERR_PASSIVE_TRANSCODING 962 //正在被动转码 + +#define NET_ERR_RING_NOT_CONFIGURE 964 //环网未配置 + +#define NET_ERR_CLOSE_WINDOW_FIRST 971 //切换全帧率畅显时必须先关闭对应的已上墙的窗口 +#define NET_ERR_SPLIT_WINDOW_NUM_NOT_SUPPORT 972 //VGA/DVI/DP/HDMI/HDBase_T输入源在全帧率畅显下不支持9/16画面 +#define NET_ERR_REACH_ONE_SIGNAL_PREVIEW_MAX_LINK 973 //单信号源回显连接数量超限 +#define NET_ERR_ONLY_SPLITWND_SUPPORT_AMPLIFICATION 974 //只有分屏窗口支持子窗口放大 +#define NET_DVR_ERR_WINDOW_SIZE_PLACE 975 //窗口位置错误 +#define NET_DVR_ERR_RGIONAL_RESTRICTIONS 976 //屏幕距离超限 +#define NET_ERR_WNDZOOM_NOT_SUPPORT 977 //单窗口不支持子窗口全屏功能 +#define NET_ERR_LED_SCREEN_SIZE 978 //LED屏宽高不正确 +#define NET_ERR_OPEN_WIN_IN_ERROR_AREA 979 //在非法区域开窗(包括跨LCD/LED屏) +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_MOVE 980 //平铺模式不支持漫游 +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_COVER 981 //平铺模式不支持图层覆盖 +#define NET_ERR_TITLE_WIN_NOT_SUPPORT_SPLIT 982 //平铺模式不支持分屏 +#define NET_DVR_LED_WINDOWS_ALREADY_CLOSED 983 //LED区域内输出口的分辨率发生变化,设备已关闭该区域内的所有LED窗口 +#define NET_DVR_ERR_CLOSE_WINDOWS 984 //操作失败,请先关闭窗口 +#define NET_DVR_ERR_MATRIX_LOOP_ABILITY 985 //超出轮巡解码能力限制 +#define NET_DVR_ERR_MATRIX_LOOP_TIME 986 //轮巡解码时间不支持 +#define NET_DVR_ERR_LINKED_OUT_ABILITY 987 //联动通道数超过上限 +#define NET_ERR_REACH_SCENE_MAX_NUM 988 //场景数量达到上限 +#define NET_ERR_SCENE_MEM_NOT_ENOUGH 989 //内存不足,无法新建场景 +#define NET_ERR_RESOLUTION_NOT_SUPPORT_ODD_VOUT 990 //奇口不支持该分辨率 +#define NET_ERR_RESOLUTION_NOT_SUPPORT_EVEN_VOUT 991 //偶口不支持该分辨率 + +#define NET_DVR_CANCEL_WND_OPENKEEP_ATTR_FIRST 992 //常开窗口需要先取消常开属性才能被关闭 +#define NET_SDK_LED_MODE_NOT_SUPPORT_SPLIT 993 //LED模式下不支持窗口分屏 +#define NET_ERR_VOICETALK_ONLY_SUPPORT_ONE_TALK 994 //同时只支持一路语音对讲 +#define NET_ERR_WND_POSITION_ADJUSTED 995 //窗口位置被设备调整,上层需要重新获取下窗口位置 +#define NET_SDK_ERR_STARTTIME_CANNOT_LESSTHAN_CURTIME 996 //开始时间不能小于当前时间 +#define NET_SDK_ERR_NEED_ADJUST_PLAN 997 //场景已被预案关联,请先将该场景从预案中删除 +#define NET_ERR_UnitConfig_Failed 998 //当“启用单位统一”勾选时,测温下配置的单位与系统设置下的单位不同返回单位配置错误 + +//能力集解析库错误码 +#define XML_ABILITY_NOTSUPPORT 1000 //不支持能力节点获取 +#define XML_ANALYZE_NOENOUGH_BUF 1001 //输出内存不足 +#define XML_ANALYZE_FIND_LOCALXML_ERROR 1002 //无法找到对应的本地xml +#define XML_ANALYZE_LOAD_LOCALXML_ERROR 1003 //加载本地xml出错 +#define XML_NANLYZE_DVR_DATA_FORMAT_ERROR 1004 //设备能力数据格式错误 +#define XML_ANALYZE_TYPE_ERROR 1005 //能力集类型错误 +#define XML_ANALYZE_XML_NODE_ERROR 1006 //XML能力节点格式错误 +#define XML_INPUT_PARAM_ERROR 1007 //输入的能力XML节点值错误 + +#define NET_DVR_ERR_RETURNED_XML_DATA 1008 //设备返回的XML数据有误 + +//传显错误码 +#define NET_ERR_LEDAREA_EXIST_WINDOW 1051 //LED区域有窗口存在(如果LED区域上已经有窗口存在,不允许修改LED区域) +#define NET_ERR_AUDIO_EXIST 1052 //输出口上存在音频输出,不允许解除绑定 +#define NET_ERR_MATERIAL_NAME_EXIST 1053 //素材名称已存在 +#define NET_ERR_MATERIAL_APPROVE_STATE 1054 //素材审核状态错误 +#define NET_ERR_DATAHD_SIGNAL_FORMAT 1055 //已使用的硬盘不允许单个格式化 + +#define NET_ERR_SCENE_SWITCHING 1056 //场景正在切换 +#define NER_ERR_DATA_TRANSFER 1057 //设备正在数据转移中 +#define NET_ERR_DATA_RESTORE 1058 //设备正在数据还原中 +#define NET_ERR_CHECK_NOT_ENABLE 1059 //校正使能未开启 +#define NET_ERR_AREA_OFFLINE 1060 //区域不在线 +#define NET_ERR_SCREEN_TYPE 1061 //屏幕类型不匹配 +#define NET_ERR_MIN_OPERATE_UNIT 1062 //最小操作单元不匹配 +#define NET_ERR_MAINHD_NOT_BACKUP 1063 //第一槽位上的普通盘(主盘)禁止设置成备份盘 +#define NET_ERR_ONE_BACKUP_HD 1064 //设置备份盘时,设备至少有一块普通盘 +#define NET_ERR_CONNECT_SUB_SYSTEM_ABNORMAL 1065 //连接子系统异常 +#define NET_ERR_SERIAL_PORT_VEST 1066 //错误的串口归属 +#define NET_ERR_BLOCKLIST_FULL 1067 //允许名单列表数量已满 +#define NET_ERR_NOT_MATCH_SOURCE 1068 //不匹配的信号源类型 +#define NET_ERR_CLOCK_VIRTUAL_LED_FULL 1069 //开启时钟功能的虚拟LED达上限 +#define NET_ERR_MAX_WIN_SIGNAL_LOOP_NUM 1070 //窗口轮巡信号源个数已达上限 +#define NET_ERR_RESOLUTION_NO_MATCH_FRAME 1071 //分辨率与当前帧数不匹配 +#define NET_ERR_NOT_UPDATE_LOW_VERSION 1072 //不支持向低版本升级 +#define NET_ERR_NO_CUSTOM_TO_UPDATE 1073 //非定制程序无法升级 +#define NET_ERR_CHAN_RESOLUTION_NOT_SUPPORT_SPLIT 1074 //该输出口分辨率不支持分屏 +#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_SPLIT 1075 //超高清不支持9/16画面分割 +#define NET_ERR_MIRROR_IMAGE_BY_VIDEO_WALL 1076 //电视墙镜像出错 +#define NET_ERR_MAX_OSD_FONT_SIZE 1077 //超过OSD最大支持字符数 +#define NET_ERR_HIGH_DEFINITION_NOT_SUPPORT_VIDEO_SET 1078 //超清不支持视频参数设置 +#define NET_ERR_TILE_MODE_NOT_SUPPORT_JOINT 1079 //平铺模式不支持拼接窗口 +#define NET_ERR_ADD_AUDIO_MATRIX_FAILED 1080 //创建音频矩阵失败 +#define NET_ERR_ONE_VIRTUAL_LED_AREA_BIND_ONE_AUDIO_AREA 1081 //一个虚拟LED区域只能绑定一个音频区域 +#define NET_ERR_NAT_NOT_MODIFY_SERVER_NETWORK_PARAM 1082 //NAT下无法修改服务器网络参数 +#define NET_ERR_ORIGINAL_CHECH_DATA_ERROR 1083 //原始校正数据错误 +#define NET_ERR_INPUT_BOARD_SPLICED_IN_DIFFERENT_NETWORKAREAS 1084 //不同网络区域的输入板不能拼接 +#define NET_ERR_SPLICINGSOURCE_ONWALL_IN_DIFFERENT_NETWORKAREAS 1085 //不同网络区域的拼接源不能上墙 +#define NET_ERR_ONWALL_OUTPUTBOARD_MODIFY_NETWORKAREAS 1086 //已绑定在电视墙上的输出板不能修改网络区域 +#define NET_ERR_LAN_AND_WAN_CANNOT_SAME_NET_SEGMENT 1087 //LAN口IP和WAN口IP不能处于同一网段 +#define NET_ERR_USERNAME_REPETITIVE 1088 //用户名重复 +#define NET_ERR_ASSOCIATED_SAMEWALL_IN_DIFFERENT_NETWORKAREAS 1089 //不同数据网络区域的输出口不能关联到同一电视墙 +#define NET_ERR_BASEMAP_ROAM_IN_LED_AREA 1090 //LED区域不允许底图漫游 +#define NET_ERR_VIRTUAL_LED_NOT_SUPPORT_4K_OUTPUT 1091 //虚拟LED不支持4K输出口显示 +#define NET_ERR_BASEMAP_NOT_SUPPORT_4K_OUTPUT 1092 //底图不支持4K输出口显示 +#define NET_ERR_MIN_BLOCK_IN_VIRTUAL_LED_AND_OUTPUT 1093 //虚拟LED与输出口相交出现最小块 +#define NET_ERR_485FIlE_VERSION_INVALID 1094 //485文件版本无效 +#define NET_ERR_485FIlE_CHECK_ERROR 1095 //485文件校验错误 +#define NET_ERR_485FIlE_ABNORMAL_SIZE 1096 //485文件大小异常效 +#define NET_ERR_MODIFY_SUBBOARD_NETCFG_IN_NAT 1097 //NAT下无法修改子板网络参 +#define NET_ERR_OSD_CONTENT_WITH_ILLEGAL_CHARACTERS 1098 //OSD内容包含非法字符 +#define NET_ERR_NON_SLAVE_DEVICE_INSERT_SYNC_LINE 1099 //非从设备禁止插入同步线 +//民用错误码(1100~1200) +#define NET_ERR_PLT_USERID 1100 //验证平台userid错误 +#define NET_ERR_TRANS_CHAN_START 1101 //透明通道已打开,当前操作无法完成 +#define NET_ERR_DEV_UPGRADING 1102 //设备正在升级 +#define NET_ERR_MISMATCH_UPGRADE_PACK_TYPE 1103 //升级包类型不匹配 +#define NET_ERR_DEV_FORMATTING 1104 //设备正在格式化 +#define NET_ERR_MISMATCH_UPGRADE_PACK_VERSION 1105 //升级包版本不匹配 +#define NET_ERR_PT_LOCKED 1106 //PT锁定功能 + +#define NET_DVR_LOGO_OVERLAY_WITHOUT_UPLOAD_PIC 1110 //logo叠加失败,没有上传logo图片 +#define NET_DVR_ERR_ILLEGAL_VERIFICATION_CODE 1111 //不合法验证码 +#define NET_DVR_ERR_LACK_VERIFICATION_CODE 1112 //缺少验证码 +#define NET_DVR_ERR_FORBIDDEN_IP 1113 //该IP地址已被禁止,不允许配置(设备支持的IP地址过滤功能) +#define NET_DVR_ERR_UNLOCKPTZ 1114 //操作无效,请先锁定云台 +#define NET_DVR_ERR_COUNTAREA_LARGE 1116 //计数区域绘制错误,区域面积大于设备允许值 +#define NET_DVR_ERR_LABEL_ID_EXCEED 1117//标签ID超限 +#define NET_DVR_ERR_LABEL_TYPE 1118//标签类型错误 +#define NET_DVR_ERR_LABEL_FULL 1119//标签满 +#define NET_DVR_ERR_LABEL_DISABLED 1120//标签未使能 +#define NET_DVR_ERR_DOME_PT_TRANS_TO_DOME_XY 1121//球机PT转球机XY失败 +#define NET_DVR_ERR_DOME_PT_TRANS_TO_PANORAMA_XY 1122//球机PT转全景XY失败 +#define NET_DVR_ERR_PANORAMA_XY_TRANS_TO_DOME_PT 1123//全景XY坐标转球机PT错误 +#define NET_DVR_ERR_SCENE_DUR_TIME_LESS_THAN_INTERV_TIME 1124//场景停留时间要大于检测周期 +#define NET_DVR_ERR_HTTP_BKN_EXCEED_ONE 1125//断网续传布防只支持一路 +#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_WEBSOCKETS_FIRST 1126//删除失败,请先关闭HTTPS和网络服务中的增强型SDK服务及WebSockets服务。 +#define NET_DVR_ERR_DELETING_FAILED_TURN_OFF_HTTPS_ESDK_FIRST 1127//删除失败,请先关闭HTTPS和网络服务中的增强型SDK服务 +#define NET_DVR_ERR_PTZ_OCCUPIED_PRIORITY 1128// 有高优先级云台控制权限用户操作 +#define NET_DVR_ERR_INCORRECT_VIDEOAUDIO_ID 1129// 视频通道编码ID或语音输出通道编码ID错误 +#define NET_DVR_ERR_REPETITIONTIME_OVER_MAXIMUM 1130// 去重时间最大不超过最大值 +#define NET_DVR_ERR_FORMATTING_FAILED 1131// 格式化错误,请重新 +#define NET_DVR_ERR_ENCRYPTED_FORMATTING_FAILED 1132// 加密格式化失败,请重试 +#define NET_DVR_ERR_WRONG_PASSWORD 1133// 密码错误,请输入正确的密码(SD卡 密码校验失败) +#define NET_DVR_ERR_EXPOSURE_SYNC 1134// 镜头间曝光同步已开启,不允许配置手动RGB + +//2012-10-16 报警设备错误码(1200~1300) +#define NET_ERR_SEARCHING_MODULE 1201 // 正在搜索外接模块 +#define NET_ERR_REGISTERING_MODULE 1202 // 正在注册外接模块 +#define NET_ERR_GETTING_ZONES 1203 // 正在获取防区参数 +#define NET_ERR_GETTING_TRIGGERS 1204 // 正在获取触发器 +#define NET_ERR_ARMED_STATUS 1205 // 系统处于布防状态 +#define NET_ERR_PROGRAM_MODE_STATUS 1206 // 系统处于编程模式 +#define NET_ERR_WALK_TEST_MODE_STATUS 1207 // 系统处于步测模式 +#define NET_ERR_BYPASS_STATUS 1208 // 旁路状态 +#define NET_ERR_DISABLED_MODULE_STATUS 1209 // 功能未使能 +#define NET_ERR_NOT_SUPPORT_OPERATE_ZONE 1210 // 防区不支持该操作 +#define NET_ERR_NOT_SUPPORT_MOD_MODULE_ADDR 1211 // 模块地址不能被修改 +#define NET_ERR_UNREGISTERED_MODULE 1212 // 模块未注册 +#define NET_ERR_PUBLIC_SUBSYSTEM_ASSOCIATE_SELF 1213 // 公共子系统关联自身 +#define NET_ERR_EXCEEDS_ASSOCIATE_SUBSYSTEM_NUM 1214 // 超过公共子系统最大关联个数 +#define NET_ERR_BE_ASSOCIATED_BY_PUBLIC_SUBSYSTEM 1215 // 子系统被其他公共子系统关联 +#define NET_ERR_ZONE_FAULT_STATUS 1216 // 防区处于故障状态 +#define NET_ERR_SAME_EVENT_TYPE 1217 // 事件触发报警输出开启和事件触发报警输出关闭中有相同事件类型 +#define NET_ERR_ZONE_ALARM_STATUS 1218 // 防区处于报警状态 +#define NET_ERR_EXPANSION_BUS_SHORT_CIRCUIT 1219 //扩展总线短路 +#define NET_ERR_PWD_CONFLICT 1220 //密码冲突 +#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_ZONE 1221 //探测器已被其他防区注册 +#define NET_ERR_DETECTOR_GISTERED_BY_OTHER_PU 1222 //探测器已被其他主机注册 +#define NET_ERR_DETECTOR_DISCONNECT 1223 //探测器不在线 +#define NET_ERR_CALL_BUSY 1224 //设备正在通话中 +#define NET_DVR_ERR_ZONE_TAMPER_STAUS 1225 //防区处于防拆状态 +#define NET_DVR_ERR_WIRELESS_DEV_REGISTER 1226 //无线外设已被其他主机注册 +#define NET_DVR_ERR_WIRELESS_DEV_ADDED 1227 //无线外设已被添加 +#define NET_DVR_ERR_WIRELESS_DEV_OFFLINE 1228 //无线外设不在线 +#define NET_DVR_ERR_WIRELESS_DEV_TAMPER_STATUS 1229 //无线外设处于防拆状态 +#define NET_DVR_ERR_GPRS_PHONE_CONFLICT 1230 //电话报警与无线报警中心冲突 +#define NET_ERR_INIT_PASSWORD_NOT_MODIFY 1231 //初始密码未修改,无法进行其他操作(安装商/管理员用户在初始密码未修改时,除修改自身用户密码外,其他操作均返回该错误码 +#define NET_ERR_USER_DISABLED 1232 //用户未开启 +#define NET_ERR_DEVICE_DEBUGGING 1233 //当前设备处于调试模式中 +//信息发布主机 +#define NET_ERR_GET_ALL_RETURN_OVER 1300 //获取所有返回数目超限 +#define NET_ERR_RESOURCE_USING 1301 //信息发布资源正在使用,不能修改 +#define NET_ERR_FILE_SIZE_OVERLIMIT 1302 //文件大小超限 + +//信息发布服务器错误码 +#define NET_ERR_MATERIAL_NAME 1303 //素材名称非法 +#define NET_ERR_MATERIAL_NAME_LEN 1304 //素材名称长度非法 +#define NET_ERR_MATERIAL_REMARK 1305 //素材描述非法 +#define NET_ERR_MATERIAL_REMARK_LEN 1306 //素材描述长度非法 +#define NET_ERR_MATERIAL_SHARE_PROPERTY 1307 //素材共享属性非法 +#define NET_ERR_UNSUPPORT_MATERIAL_TYPE 1308 //素材类型不支持 +#define NET_ERR_MATERIAL_NOT_EXIST 1309 //素材不存在 +#define NET_ERR_READ_FROM_DISK 1310 //从硬盘读取素材文件失败 +#define NET_ERR_WRITE_TO_DISK 1311 //向硬盘写素材文件失败 +#define NET_ERR_WRITE_DATA_BASE 1312 //素材写数据库失败 +#define NET_ERR_NO_APPROVED_NOT_EXPORT 1313 //未审核内容禁止发布 +#define NET_ERR_MATERIAL_EXCEPTION 1314 //素材异常 +#define NET_ERR_NO_MISINFO 1315 //无误报信息 +#define NET_ERR_LAN_NOT_SUP_DHCP_CLIENT_CONFIGURATION 1316 //网桥在路由模式下,配置DHCP客户端返回错误 +#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT 1317 //电视墙上各输出口分辨率不一致(主要用于设置输出分辨率为4K出现异常时报错) +#define NET_ERR_VIDEOWALL_OPTPORT_RESOLUTION_INCONSISTENT_UNBIND_OPTPORT_FIRST 1318 //电视墙上各输出口分辨率不一致,请先解绑定输出口(主要用于绑定输出口出现异常时报错) +#define NET_ERR_FOUR_K_OUTPUT_RESOLUTION_UNSUPPORT_NINE_TO_SIXTEEN_SPLIT_SCREEN 1319 //4K输出分辨率不支持9/16分屏 +#define NET_ERR_SIGNAL_SOURCE_UNSUPPORT_CUSTOM_RESOLUTION 1320 //信号源不支持该自定义分辨率 +#define NET_ERR_DVI_UNSUPPORT_FOURK_OUTPUT_RESOLUTION 1321 //DVI不支持4K输出分辨率 +#define NET_ERR_BNC_UNSUPPORT_SOURCE_CROPPING 1322 //BNC不支持信号源裁剪 +#define NET_ERR_OUTPUT_NOT_SUPPORT_VIDEOWALL_RESOLUTION 1323 //输出口不支持电视墙分辨率 + +//多屏互动错误码 +#define NET_ERR_MAX_SCREEN_CTRL_NUM 1351 //屏幕控制连接数达到上限 +#define NET_ERR_FILE_NOT_EXIST 1352 //文件不存在 +#define NET_ERR_THUMBNAIL_NOT_EXIST 1353 //缩略图不存在 +#define NET_ERR_DEV_OPEN_FILE_FAIL 1354 //设备端打开文件失败 +#define NET_ERR_SERVER_READ_FILE_FAIL 1355 //设备端读取文件失败 +#define NET_ERR_FILE_SIZE 1356 //文件大小错误 +#define NET_ERR_FILE_NAME 1357 //文件名称错误,为空或不合法 + +//分段错误码(1351-1400) +#define NET_ERR_BROADCAST_BUSY 1358 //设备正在广播中 + +//2012-12-20抓拍机错误码(1400-1499) +#define NET_DVR_ERR_LANENUM_EXCEED 1400 //车道数超出能力 +#define NET_DVR_ERR_PRAREA_EXCEED 1401 //牌识区域过大 +#define NET_DVR_ERR_LIGHT_PARAM 1402 //信号灯接入参数错误 +#define NET_DVR_ERR_LANE_LINE_INVALID 1403 //车道线配置错误 +#define NET_DVR_ERR_STOP_LINE_INVALID 1404 //停止线配置错误 +#define NET_DVR_ERR_LEFTORRIGHT_LINE_INVALID 1405 //左/右转分界线配置错误 +#define NET_DVR_ERR_LANE_NO_REPEAT 1406 //叠加车道号重复 +#define NET_DVR_ERR_PRAREA_INVALID 1407 //牌识多边形不符合要求 +#define NET_DVR_ERR_LIGHT_NUM_EXCEED 1408 //视频检测交通灯信号灯数目超出最大值 +#define NET_DVR_ERR_SUBLIGHT_NUM_INVALID 1409 //视频检测交通灯信号灯子灯数目不合法 +#define NET_DVR_ERR_LIGHT_AREASIZE_INVALID 1410 //视频检测交通灯输入信号灯框大小不合法 +#define NET_DVR_ERR_LIGHT_COLOR_INVALID 1411 //视频检测交通灯输入信号灯颜色不合法 +#define NET_DVR_ERR_LIGHT_DIRECTION_INVALID 1412 //视频检测交通灯输入灯方向属性不合法 +#define NET_DVR_ERR_LACK_IOABLITY 1413 //IO口实际支持的能力不足 + +#define NET_DVR_ERR_FTP_PORT 1414 //FTP端口号非法(端口号重复或者异常) +#define NET_DVR_ERR_FTP_CATALOGUE 1415 //FTP目录名非法(启用多级目录,多级目录传值为空) +#define NET_DVR_ERR_FTP_UPLOAD_TYPE 1416 //FTP上传类型非法(单ftp只支持全部/双ftp只支持卡口和违章) +#define NET_DVR_ERR_FLASH_PARAM_WRITE 1417 //配置参数时写FLASH失败 +#define NET_DVR_ERR_FLASH_PARAM_READ 1418 //配置参数时读FLASH失败 +#define NET_DVR_ERR_PICNAME_DELIMITER 1419 //FTP图片命名分隔符非法 +#define NET_DVR_ERR_PICNAME_ITEM 1420 //FTP图片命名项非法(例如 分隔符) +#define NET_DVR_ERR_PLATE_RECOGNIZE_TYPE 1421 //牌识区域类型非法 (矩形和多边形有效性校验) +#define NET_DVR_ERR_CAPTURE_TIMES 1422 //抓拍次数非法 (有效值是0~5) +#define NET_DVR_ERR_LOOP_DISTANCE 1423 //线圈距离非法 (有效值是0~2000ms) +#define NET_DVR_ERR_LOOP_INPUT_STATUS 1424 //线圈输入状态非法 (有效值) +#define NET_DVR_ERR_RELATE_IO_CONFLICT 1425 //测速组IO关联冲突 +#define NET_DVR_ERR_INTERVAL_TIME 1426 //连拍间隔时间非法 (0~6000ms) +#define NET_DVR_ERR_SIGN_SPEED 1427 //标志限速值非法(大车标志限速不能大于小车标志限速 ) +#define NET_DVR_ERR_PIC_FLIP 1428 //图像配置翻转 (配置交互影响) +#define NET_DVR_ERR_RELATE_LANE_NUMBER 1429 //关联车道数错误 (重复 有效值校验1~99) +#define NET_DVR_ERR_TRIGGER_MODE 1430 //配置抓拍机触发模式非法 +#define NET_DVR_ERR_DELAY_TIME 1431 //触发延时时间错误(2000ms) +#define NET_DVR_ERR_EXCEED_RS485_COUNT 1432 //超过最大485个数限制 +#define NET_DVR_ERR_RADAR_TYPE 1433 //雷达类型错误 +#define NET_DVR_ERR_RADAR_ANGLE 1434 //雷达角度错误 +#define NET_DVR_ERR_RADAR_SPEED_VALID_TIME 1435 //雷达有效时间错误 +#define NET_DVR_ERR_RADAR_LINE_CORRECT 1436 //雷达线性矫正参数错误 +#define NET_DVR_ERR_RADAR_CONST_CORRECT 1437 //雷达常量矫正参数错误 +#define NET_DVR_ERR_RECORD_PARAM 1438 //录像参数无效(预录时间不超过10s) +#define NET_DVR_ERR_LIGHT_WITHOUT_COLOR_AND_DIRECTION 1439 //视频检测信号灯配置信号灯个数,但是没有勾选信号灯方向和颜色的 +#define NET_DVR_ERR_LIGHT_WITHOUT_DETECTION_REGION 1440 //视频检测信号灯配置信号灯个数,但是没有画检测区域 +#define NET_DVR_ERR_RECOGNIZE_PROVINCE_PARAM 1441 //牌识参数省份参数的合法性 + +#define NET_DVR_ERR_SPEED_TIMEOUT 1442 //IO测速超时时间非法(有效值大于0) +#define NET_DVR_ERR_NTP_TIMEZONE 1443 //ntp时区参数错误 +#define NET_DVR_ERR_NTP_INTERVAL_TIME 1444 //ntp校时间隔错误 +#define NET_DVR_ERR_NETWORK_CARD_NUM 1445 //可配置网卡数目错误 +#define NET_DVR_ERR_DEFAULT_ROUTE 1446 //默认路由错误 +#define NET_DVR_ERR_BONDING_WORK_MODE 1447 //bonding网卡工作模式错误 +#define NET_DVR_ERR_SLAVE_CARD 1448 //slave网卡错误 +#define NET_DVR_ERR_PRIMARY_CARD 1449 //Primary网卡错误 +#define NET_DVR_ERR_DHCP_PPOE_WORK 1450 //dhcp和pppoE不能同时启动 +#define NET_DVR_ERR_NET_INTERFACE 1451 //网络接口错误 +#define NET_DVR_ERR_MTU 1452 //MTU错误 +#define NET_DVR_ERR_NETMASK 1453 //子网掩码错误 +#define NET_DVR_ERR_IP_INVALID 1454 //IP地址不合法 +#define NET_DVR_ERR_MULTICAST_IP_INVALID 1455 //多播地址不合法 +#define NET_DVR_ERR_GATEWAY_INVALID 1456 //网关不合法 +#define NET_DVR_ERR_DNS_INVALID 1457 //DNS不合法 +#define NET_DVR_ERR_ALARMHOST_IP_INVALID 1458 //告警主机地址不合法 +#define NET_DVR_ERR_IP_CONFLICT 1459 //IP冲突 +#define NET_DVR_ERR_NETWORK_SEGMENT 1460 //IP不支持同网段 +#define NET_DVR_ERR_NETPORT 1461 //端口错误 + +#define NET_DVR_ERR_PPPOE_NOSUPPORT 1462 //PPPOE不支持 +#define NET_DVR_ERR_DOMAINNAME_NOSUPPORT 1463 //域名不支持 +#define NET_DVR_ERR_NO_SPEED 1464 //未启用测速功能 +#define NET_DVR_ERR_IOSTATUS_INVALID 1465 //IO状态错误 +#define NET_DVR_ERR_BURST_INTERVAL_INVALID 1466 //连拍间隔非法 +#define NET_DVR_ERR_RESERVE_MODE 1467 //备用模式错误 + +#define NET_DVR_ERR_LANE_NO 1468 //叠加车道号错误 +#define NET_DVR_ERR_COIL_AREA_TYPE 1469 //线圈区域类型错误 +#define NET_DVR_ERR_TRIGGER_AREA_PARAM 1470 //触发区域参数错误 +#define NET_DVR_ERR_SPEED_LIMIT_PARAM 1471 //违章限速参数错误 +#define NET_DVR_ERR_LANE_PROTOCOL_TYPE 1472 //车道关联协议类型错误 + +#define NET_DVR_ERR_INTERVAL_TYPE 1473 //连拍间隔类型非法 +#define NET_DVR_ERR_INTERVAL_DISTANCE 1474 //连拍间隔距离非法 +#define NET_DVR_ERR_RS485_ASSOCIATE_DEVTYPE 1475 //RS485关联类型非法 +#define NET_DVR_ERR_RS485_ASSOCIATE_LANENO 1476 //RS485关联车道号非法 +#define NET_DVR_ERR_LANENO_ASSOCIATE_MULTIRS485 1477 //车道号关联多个RS485口 +#define NET_DVR_ERR_LIGHT_DETECTION_REGION 1478 //视频检测信号灯配置信号灯个数,但是检测区域宽或高为0 + +#define NET_DVR_ERR_DN2D_NOSUPPORT 1479 //不支持抓拍帧2D降噪 +#define NET_DVR_ERR_IRISMODE_NOSUPPORT 1480 //不支持的镜头类型 +#define NET_DVR_ERR_WB_NOSUPPORT 1481 //不支持的白平衡模式 +#define NET_DVR_ERR_IO_EFFECTIVENESS 1482 //IO口的有效性 +#define NET_DVR_ERR_LIGHTNO_MAX 1483 //信号灯检测器接入红/黄灯超限(16) +#define NET_DVR_ERR_LIGHTNO_CONFLICT 1484 //信号灯检测器接入红/黄灯冲突 + +#define NET_DVR_ERR_CANCEL_LINE 1485 //直行触发线 +#define NET_DVR_ERR_STOP_LINE 1486 //待行区停止线 +#define NET_DVR_ERR_RUSH_REDLIGHT_LINE 1487 //闯红灯触发线 +#define NET_DVR_ERR_IOOUTNO_MAX 1488 //IO输出口编号越界 + +#define NET_DVR_ERR_IOOUTNO_AHEADTIME_MAX 1489 //IO输出口提前时间超限 +#define NET_DVR_ERR_IOOUTNO_IOWORKTIME 1490 //IO输出口有效持续时间超限 +#define NET_DVR_ERR_IOOUTNO_FREQMULTI 1491 //IO输出口脉冲模式下倍频出错 +#define NET_DVR_ERR_IOOUTNO_DUTYRATE 1492 //IO输出口脉冲模式下占空比出错 +#define NET_DVR_ERR_VIDEO_WITH_EXPOSURE 1493 //以曝闪起效,工作方式不支持视频 +#define NET_DVR_ERR_PLATE_BRIGHTNESS_WITHOUT_FLASHDET 1494 //车牌亮度自动使能闪光灯仅在车牌亮度补偿模式下起效 + +#define NET_DVR_ERR_RECOGNIZE_TYPE_PARAM 1495 //识别类型非法 车牌识别参数(如大车、小车、背向、正向、车标识别等) +#define NET_DVR_ERR_PALTE_RECOGNIZE_AREA_PARAM 1496 //牌识参数非法 牌识区域配置时判断出错 +#define NET_DVR_ERR_PORT_CONFLICT 1497 //端口有冲突 +#define NET_DVR_ERR_LOOP_IP 1498 //IP不能设置为回环地址 +#define NET_DVR_ERR_DRIVELINE_SENSITIVE 1499 //压线灵敏度出错(视频电警模式下) + + +//2013-3-6VQD错误码(1500~1550) +#define NET_ERR_VQD_TIME_CONFLICT 1500 //VQD诊断时间段冲突 +#define NET_ERR_VQD_PLAN_NO_EXIST 1501 //VQD诊断计划不存在 +#define NET_ERR_VQD_CHAN_NO_EXIST 1502 //VQD布防点不存在 +#define NET_ERR_VQD_CHAN_MAX 1503 //VQD计划数已达上限 +#define NET_ERR_VQD_TASK_MAX 1504 //VQD任务数已达上限 + +#define NET_SDK_GET_INPUTSTREAMCFG 1551 //获取信号源 +#define NET_SDK_AUDIO_SWITCH_CONTROL 1552 //子窗口音频开关控制 +#define NET_SDK_GET_VIDEOWALLDISPLAYNO 1553 //获取设备显示输出号 +#define NET_SDK_GET_ALLSUBSYSTEM_BASIC_INFO 1554//获取所有子系统基本信息 +#define NET_SDK_SET_ALLSUBSYSTEM_BASIC_INFO 1555 //设置所有子系统基本信息 +#define NET_SDK_GET_AUDIO_INFO 1556//获取所有音频信息 +#define NET_SDK_GET_MATRIX_STATUS_V50 1557 // 获取视频综合平台状态_V50 +#define NET_SDK_DELETE_MONITOR_INFO 1558//删除Monitor信息 +#define NET_SDK_DELETE_CAMERA_INFO 1559//删除Camaera信息 + + +//抓拍机错误码新增扩展(1600~1900) +#define NET_DVR_ERR_EXCEED_MAX_CAPTURE_TIMES 1600 //抓拍模式为频闪时最大抓拍张数为2张(IVT模式下) +#define NET_DVR_ERR_REDAR_TYPE_CONFLICT 1601 //相同485口关联雷达类型冲突 +#define NET_DVR_ERR_LICENSE_PLATE_NULL 1602 //车牌号为空 +#define NET_DVR_ERR_WRITE_DATABASE 1603 //写入数据库失败 +#define NET_DVR_ERR_LICENSE_EFFECTIVE_TIME 1604 //车牌有效时间错误 +//视频电警 +#define NET_DVR_ERR_PRERECORDED_STARTTIME_LONG 1605 //预录开始时间大于违法抓拍张数 +//混合卡口 +#define NET_DVR_ERR_TRIGGER_RULE_LINE 1606 //触发规则线错误 +#define NET_DVR_ERR_LEFTRIGHT_TRIGGERLINE_NOTVERTICAL 1607 //左/右触发线不垂直 +#define NET_DVR_ERR_FLASH_LAMP_MODE 1608 //闪光灯闪烁模式错误 +#define NET_DVR_ERR_ILLEGAL_SNAPSHOT_NUM 1609 //违章抓拍张数错误 +#define NET_DVR_ERR_ILLEGAL_DETECTION_TYPE 1610 //违章检测类型错误 +#define NET_DVR_ERR_POSITIVEBACK_TRIGGERLINE_HIGH 1611 //正背向触发线高度错误 +#define NET_DVR_ERR_MIXEDMODE_CAPTYPE_ALLTARGETS 1612 //混合模式下只支持机非人抓拍类型 + +#define NET_DVR_ERR_CARSIGNSPEED_GREATERTHAN_LIMITSPEED 1613//小车标志限速大于限速值 +#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_LIMITSPEED 1614//大车标志限速大于限速值 +#define NET_DVR_ERR_BIGCARSIGNSPEED_GREATERTHAN_CARSIGNSPEED 1615//大车标志限速大于小车标志限速值 +#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_CARLIMITSPEED 1616//大车限速值大于小车限速值 +#define NET_DVR_ERR_BIGCARLOWSPEEDLIMIT_GREATERTHAN_CARLOWSPEEDLIMIT 1617//大车低速限速值大于小车低速限速值 +#define NET_DVR_ERR_CARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1618//小车限速大于异常高速值 +#define NET_DVR_ERR_BIGCARLIMITSPEED_GREATERTHAN_EXCEPHIGHSPEED 1619//大车限速大于异常高速值 +#define NET_DVR_ERR_STOPLINE_MORETHAN_TRIGGERLINE 1620//停止线超过直行触发线 +#define NET_DVR_ERR_YELLOWLIGHTTIME_INVALID 1621/*视频检测黄灯持续时间不合法报错*/ +#define NET_DVR_ERR_TRIGGERLINE1_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE2 1622//第一条不礼让行人触发线的位置超过了第二条不礼让行人触发线 +#define NET_DVR_ERR_TRIGGERLINE2_FOR_NOT_YIELD_TO_PEDESTRIAN_CANNOT_EXCEED_TRIGGERLINE1 1623//第二条不礼让行人触发线的位置超过了第一条不礼让行人触发线 + +//门禁主机错误码 +#define NET_ERR_TIME_OVERLAP 1900 //时间段重叠 +#define NET_ERR_HOLIDAY_PLAN_OVERLAP 1901 //假日计划重叠 +#define NET_ERR_CARDNO_NOT_SORT 1902 //卡号未排序 +#define NET_ERR_CARDNO_NOT_EXIST 1903 //卡号不存在 +#define NET_ERR_ILLEGAL_CARDNO 1904 //卡号错误 +#define NET_ERR_ZONE_ALARM 1905 //防区处于布防状态(参数修改不允许) +#define NET_ERR_ZONE_OPERATION_NOT_SUPPORT 1906 //防区不支持该操作 +#define NET_ERR_INTERLOCK_ANTI_CONFLICT 1907 //多门互锁和反潜回同时配置错误 +#define NET_ERR_DEVICE_CARD_FULL 1908 //卡已满(卡达到10W后返回) +#define NET_ERR_HOLIDAY_GROUP_DOWNLOAD 1909 //假日组下载失败 +#define NET_ERR_LOCAL_CONTROL_OFF 1910 //就地控制器离线 +#define NET_ERR_LOCAL_CONTROL_DISADD 1911 //就地控制器未添加 +#define NET_ERR_LOCAL_CONTROL_HASADD 1912 //就地控制器已添加 +#define NET_ERR_LOCAL_CONTROL_DOORNO_CONFLICT 1913 //与已添加的就地控制器门编号冲突 +#define NET_ERR_LOCAL_CONTROL_COMMUNICATION_FAIL 1914 //就地控制器通信失败 +#define NET_ERR_OPERAND_INEXISTENCE 1915 //操作对象不存在(对门、报警输出、报警输入相关操作,当对象未添加时返回) +#define NET_ERR_LOCAL_CONTROL_OVER_LIMIT 1916 //就地控制器超出设备最大能力(主控对就地数量有限制) +#define NET_ERR_DOOR_OVER_LIMIT 1917 //门超出设备最大能力 +#define NET_ERR_ALARM_OVER_LIMIT 1918 //报警输入输出超出设备最大能力 +#define NET_ERR_LOCAL_CONTROL_ADDRESS_INCONFORMITY_TYPE 1919 //就地控制器地址与类型不符 +#define NET_ERR_NOT_SUPPORT_ONE_MORE_CARD 1920 //不支持一人多卡 +#define NET_ERR_DELETE_NO_EXISTENCE_FACE 1921 //删除的人脸不存在 +#define NET_ERR_DOOR_SPECIAL_PASSWORD_REPEAT 1922 //与设备门特殊密码重复 +#define NET_ERR_AUTH_CODE_REPEAT 1923 //与设备认证码重复 +#define NET_ERR_DEPLOY_EXCEED_MAX 1924 //布防超过最大连接数 +#define NET_ERR_NOT_SUPPORT_DEL_FP_BY_ID 1925 //读卡器不支持按手指ID删除指纹 +#define NET_ERR_TIME_RANGE 1926 //有效期参数配置范围有误 +#define NET_ERR_CAPTURE_TIMEOUT 1927 //采集超时 +#define NET_ERR_LOW_SCORE 1928 //采集质量低 +#define NET_ERR_OFFLINE_CAPTURING 1929 //离线采集中,无法响应 + +//可视对讲错误码 +#define NET_DVR_ERR_OUTDOOR_COMMUNICATION 1950 //与门口机通信异常 +#define NET_DVR_ERR_ROOMNO_UNDEFINED 1951 //未设置房间号 +#define NET_DVR_ERR_NO_CALLING 1952 //无呼叫 +#define NET_DVR_ERR_RINGING 1953 //响铃 +#define NET_DVR_ERR_IS_CALLING_NOW 1954 //正在通话 +#define NET_DVR_ERR_LOCK_PASSWORD_WRONG 1955//智能锁密码错误 +#define NET_DVR_ERR_CONTROL_LOCK_FAILURE 1956//开关锁失败 +#define NET_DVR_ERR_CONTROL_LOCK_OVERTIME 1957//开关锁超时 +#define NET_DVR_ERR_LOCK_DEVICE_BUSY 1958//智能锁设备繁忙 +#define NET_DVR_ERR_UNOPEN_REMOTE_LOCK_FUNCTION 1959//远程开锁功能未打开 + + +//后端错误码 (2100 - 3000) +#define NET_DVR_ERR_FILE_NOT_COMPLETE 2100 //下载的文件不完整 +#define NET_DVR_ERR_IPC_EXIST 2101 //该IPC已经存在 +#define NET_DVR_ERR_ADD_IPC 2102 //该通道已添加IPC +#define NET_DVR_ERR_OUT_OF_RES 2103 //网络带宽能力不足 +#define NET_DVR_ERR_CONFLICT_TO_LOCALIP 2104 //IPC的ip地址跟DVR的ip地址冲突 +#define NET_DVR_ERR_IP_SET 2105 //非法ip地址 +#define NET_DVR_ERR_PORT_SET 2106 //非法的端口号 + +#define NET_ERR_WAN_NOTSUPPORT 2107 //不在同一个局域网,无法设置安全问题或导出GUID文件 +#define NET_ERR_MUTEX_FUNCTION 2108 //功能互斥 +#define NET_ERR_QUESTION_CONFIGNUM 2109 //安全问题配置数量错误 +#define NET_ERR_FACECHAN_NORESOURCE 2110 //人脸智能通道资源已用完 +#define NET_ERR_DATA_CALLBACK 2111 //正在数据回迁 +#define NET_ERR_ATM_VCA_CHAN_IS_RELATED 2112 //ATM智能通道已被关联 +#define NET_ERR_ATM_VCA_CHAN_IS_OVERLAPED 2113 //ATM智能通道已被叠加 +#define NET_ERR_FACE_CHAN_UNOVERLAP_EACH_OTHER 2114 //人脸通道不能互相叠加 +#define NET_ERR_ACHIEVE_MAX_CHANNLE_LIMIT 2115 //达到最大路数限制 +#define NET_DVR_SMD_ENCODING_NORESOURSE 2116 //SMD编码资源不足 +#define NET_DVR_SMD_DECODING_NORESOURSE 2117 //SMD解码资源不足 +#define NET_DVR_FACELIB_DATA_PROCESSING 2118 //人脸库数据正在处理 +#define NET_DVR_ERR_LARGE_TIME_DIFFRENCE 2119 //设备和服务器之间的时间差异太大 +#define NET_DVR_NO_SUPPORT_WITH_PLAYBACK 2120 //已开启回放,不支持本功能 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SMD 2121 //通道已开启SMD,不支持本功能 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FD 2122 //通道已开启人脸抓拍,不支持本功能 +#define NET_DVR_ILLEGAL_PHONE_NUMBER 2123 //非法的电话号码 +#define NET_DVR_ILLEGAL_CERITIFICATE_NUMBER 2124 //非法的证件号码 +#define NET_DVR_ERR_CHANNEL_RESOLUTION_NO_SUPPORT 2125 //通道分辨率不支持 +#define NET_DVR_ERR_CHANNEL_COMPRESSION_NO_SUPPORT 2126 //通道编码格式不支持 + +#define NET_DVR_ERR_CLUSTER_DEVICE_TOO_LESS 2127 //设备数少,不允许删除 +#define NET_DVR_ERR_CLUSTER_DEL_DEVICE_CM_PLAYLOAD 2128 //该设备是集群主机,不允许删除 +#define NET_DVR_ERR_CLUSTER_DEVNUM_OVER_UPPER_LIMIT 2129 //设备数达到上限,不允许增加 +#define NET_DVR_ERR_CLUSTER_DEVICE_TYPE_INCONFORMITY 2130 //设备类型不一致 +#define NET_DVR_ERR_CLUSTER_DEVICE_VERSION_INCONFORMITY 2131 //设备版本不一致 +#define NET_DVR_ERR_CLUSTER_IP_CONFLICT 2132 //集群系统IP地址冲突:ipv4地址冲突、ipv6地址冲突 +#define NET_DVR_ERR_CLUSTER_IP_INVALID 2133 //集群系统IP地址无效:ipv4非法、ipv6非法 +#define NET_DVR_ERR_CLUSTER_PORT_CONFLICT 2134 //集群系统端口冲突 +#define NET_DVR_ERR_CLUSTER_PORT_INVALID 2135 //集群系统端口非法 +#define NET_DVR_ERR_CLUSTER_USERNAEM_OR_PASSWORD_INVALID 2136 //组网用户名或密码非法 +#define NET_DVR_ERR_CLUSTER_DEVICE_ALREADY_EXIST 2137 //存在相同设备 +#define NET_DVR_ERR_CLUSTER_DEVICE_NOT_EXIST 2138 //设备不存在(组网时下发的cs列表中的设备信息在任何一台cs上都找不到,删除的时候下发的id不对) +#define NET_DVR_ERR_CLUSTER_NON_CLUSTER_MODE 2139 //设备处于非集群模式 +#define NET_DVR_ERR_CLUSTER_IP_NOT_SAME_LAN 2140 //IP地址不在同一局域网,不同区域网不允许组网/扩容 + +#define NET_DVR_ERR_CAPTURE_PACKAGE_FAILED 2141 //抓包失败 +#define NET_DVR_ERR_CAPTURE_PACKAGE_PROCESSING 2142 //正在抓包 +#define NET_DVR_ERR_SAFETY_HELMET_NO_RESOURCE 2143 //安全帽检测资源不足 +#define NET_DVR_NO_SUPPORT_WITH_ABSTRACT 2144 //已开启视频摘要,不支持本功能 +#define NET_DVR_ERR_TAPE_LIB_NEED_STOP_ARCHIVE 2145 //磁带库归档需要停止 +#define NET_DVR_INSUFFICIENT_DEEP_LEARNING_RESOURCES 2146 //深度学习资源超限 +#define NET_DVR_ERR_IDENTITY_KEY 2147 //交互口令错误 +#define NET_DVR_MISSING_IDENTITY_KEY 2148 //交互口令缺失 +#define NET_DVR_NO_SUPPORT_WITH_PERSON_DENSITY_DETECT 2149 //已开启人员密度检测,不支持本功能 +#define NET_DVR_IPC_RESOLUTION_OVERFLOW 2150 //IPC分辨率超限 +#define NET_DVR_IPC_BITRATE_OVERFLOW 2151 //IPC码率超限 +#define NET_DVR_ERR_INVALID_TASKID 2152 //无效的taskID +#define NET_DVR_PANEL_MODE_NOT_CONFIG 2153 //没有配置面板路智能 +#define NET_DVR_NO_HUMAN_ENGINES_RESOURCE 2154 //人体引擎资源不足 +#define NET_DVR_ERR_TASK_NUMBER_OVERFLOW 2155 //任务数据超过上限 +#define NET_DVR_ERR_COLLISION_TIME_OVERFLOW 2156 //碰撞时间超过上限 +#define NET_DVR_ERR_CAPTURE_PACKAGE_NO_USB 2157 //未识别到U盘,请插入U盘或重新插入 +#define NET_DVR_ERR_NO_SET_SECURITY_EMAIL 2158 //未设置安全邮箱 +#define NET_DVR_ERR_EVENT_NOTSUPPORT 2159 //订阅事件不支持 +#define NET_DVR_ERR_PASSWORD_FORMAT 2160 //密码格式不对 +#define NET_DVR_ACCESS_FRONT_DEVICE_PARAM_FAILURE 2161 //获取前端设备参数失败 +#define NET_DVR_ACCESS_FRONT_DEVICE_STREAM_FAILURE 2162 //对前端设备取流失败 +#define NET_DVR_ERR_USERNAME_FORMAT 2163 //用户名格式不对 +#define NET_DVR_ERR_UNOPENED_HIGH_RESOLUTION_MODE 2164 //超高分辨率模式未开启 +#define NET_DVR_ERR_TOO_SMALL_QUATO 2165 //配额设置太小 +#define NET_DVR_ERR_EMAIL_FORMAT 2166 //邮箱格式不对 +#define NET_DVR_ERR_SECURITY_CODE_FORMAT 2167 //安全码格式不对 +#define NET_DVR_PD_SPACE_TOO_SMALL 2168 //阵列硬盘容量太小 +#define NET_DVR_PD_NUM_TOO_BIG 2169 //阵列硬盘总数超过总盘数的二分之一 +#define NET_DVR_ERR_USB_IS_FULL 2170 //U盘已满 +#define NET_DVR_EXCEED_MAX_SMD_TYPE 2171 //达到最大SMD事件种类上限 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_BEHAVIOR 2172 //通道已开启异常行为检测,不支持本功能 +#define NET_DVR_NO_BEHAVIOR_ENGINES_RESOURCE 2173 //异常行为检测资源不足 +#define NET_DVR_NO_RETENTION_ENGINES_RESOURCE 2174 //人员滞留检测资源不足 +#define NET_DVR_NO_LEAVE_POSITION_ENGINES_RESOURCE 2175 //离岗检测资源不足 +#define NET_DVR_NO_PEOPLE_NUM_CHANGE_ENGINES_RESOURCE 2176 //人数异常资源不足 +#define NET_DVR_PANEL_MODE_NUM_OVER_LIMIT 2177 //超过面板路最大路数 +#define NET_DVR_SURROUND_MODE_NUM_OVER_LIMIT 2178 //超过环境路最大路数 +#define NET_DVR_FACE_MODE_NUM_OVER_LIMIT 2179 //超过人脸路最大路数 +#define NET_DVR_SAFETYCABIN_MODE_NUM_OVER_LIMIT 2180 //超过防护舱路最大路数 +#define NET_DVR_DETECT_REGION_RANGE_INVALID 2181 //检测区域范围非法 +#define NET_DVR_CHANNEL_CAPTURE_PICTURE_FAILURE 2182 //通道抓图失败 +#define NET_DVR_VCACHAN_IS_NORESOURCE 2183 //智能通道资源用完 +#define NET_DVR_IPC_NUM_REACHES_LIMIT 2184 // Ipc通道数目达到上限 +#define NET_DVR_IOT_NUM_REACHES_LIMIT 2185 // IOT通道数目达到上限 +#define NET_DVR_IOT_CHANNEL_DEVICE_EXIST 2186 //当前IOT通道已经添加设备 +#define NET_DVR_IOT_CHANNEL_DEVICE_NOT_EXIST 2187 //当前IOT通道不存在设备 +#define NET_DVR_INVALID_IOT_PROTOCOL_TYPE 2188 //非法的IOT协议类型 +#define NET_DVR_INVALID_EZVIZ_SECRET_KEY 2189 //非法的萤石注册验证码 +#define NET_DVR_DUPLICATE_IOT_DEVICE 2190 //重复的IOT设备 +#define NET_DVR_SADP_MODIFY_FALIURE 2191 // SADP修改失败 +#define NET_DVR_IPC_NETWORK_ABNORMAL 2192 // IPC网络异常 +#define NET_DVR_IPC_PASSWORD_ERROR 2193 // IPC用户名密码错误 +#define NET_DVR_ERROR_IPC_TYPE 2194 //IPC类型不对 +#define NET_DVR_ERROR_IPC_LIST_NOT_EMPTY 2195 //已添加IPC列表不为空,不支持一键配置 +#define NET_DVR_ERROR_IPC_LIST_NOT_MATCH_PAIRING 2196 //IPC列表和配单不匹配 +#define NET_DVR_ERROR_IPC_BAD_LANGUAGE 2197 //IPC语言和设备不匹配 +#define NET_DVR_ERROR_IPC_IS_LOCKING 2198 //IPC已被锁 +#define NET_DVR_ERROR_IPC_NOT_ACTIVATED 2199 //IPC未激活 +#define NET_DVR_FIELD_CODING_NOT_SUPPORT 2200 //场编码不支持 +#define NET_DVR_ERROR_H323_NOT_SUPPORT_H265 2201 //H323视频会议就不支持H265码流 +#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_P 2202 //P制式下,曝光时间过大 +#define NET_DVR_ERROR_EXPOSURE_TIME_TOO_BIG_IN_MODE_N 2203 //N制式下,曝光时间过大 +#define NET_DVR_ERROR_PING_PROCESSING 2204 //正在PING +#define NET_DVR_ERROR_PING_NOT_START 2205 //Ping功能未开始 +#define NET_DVR_ERROR_NEED_DOUBLE_VERIFICATION 2206 //需要二次认证 +#define NET_DVR_NO_DOUBLE_VERIFICATION_USER 2207 //无二次认证用户 +#define NET_DVR_CHANNEL_OFFLINE 2208 //通道离线 +#define NET_DVR_TIMESPAN_NUM_OVER_LIMIT 2209 //时间段超出支持最大数目 +#define NET_DVR_CHANNEL_NUM_OVER_LIMIT 2210 //通道数目超出支持最大数目 +#define NET_DVR_NO_SEARCH_ID_RESOURCE 2211 //分页查询的searchID资源不足 +#define NET_DVR_ERROR_ONEKEY_EXPORT 2212 //正在进行导出操作,请稍后再试 +#define NET_DVR_NO_CITY_MANAGEMENT_ENGINES_RESOURCE 2213 //城管算法引擎资源不足 +#define NET_DVR_NO_SITUATION_ANALYSIS_ENGINES_RESOURCE 2214 //态势分析引擎资源不足 +#define NET_DVR_INTELLIGENT_ANALYSIS_IPC_CANNT_DELETE 2215 //正在进行智能分析的IPC无法删除 +#define NET_DVR_NOSUPPORT_RESET_PASSWORD 2216 //NVR不支持对IPC重置密码 +#define NET_DVR_ERROR_IPC_NEED_ON_LAN 2217 // IPC需要在局域网内 +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_SAFETY_HELMET 2218 //通道已开启安全帽检测,不支持本功能 +#define NET_DVR_ERROR_GET_RESETPASSWORDTYPE_IS_ABNORMAL 2219 /*IPC重置密码时,获取IPC的重置密码类型异常*/ +#define NET_DVR_ERROR_IPC_NOSUPPORT_RESET_PASSWORD 2220 /* IPC不支持重置密码*/ +#define NET_DVR_ERROR_IP_IS_NOT_ONLY_ONE 2221 /*IPC的IP不唯一,有重复*/ +#define NET_DVR_NO_SUPPORT_WITH_SMD_OR_SCD 2222 //已开启SMD/SCD,不支持本功能(SCD为场景变更) +#define NET_DVR_NO_SUPPORT_WITH_FD 2223 //已开启人脸抓拍,不支持本功能 +#define NET_DVR_NO_FD_ENGINES_RESOURCE 2224 //人脸抓拍资源不足 +#define NET_DVR_ERROR_ONEKEY_REMOVE 2225 //正在进行删除操作,请稍后再试 +#define NET_DVR_FACE_PIP_BACKGROUND_CHANNEL_OVERFLOW 2226 //人脸画中画背景通道超限 +#define NET_DVR_MICIN_CHANNEL_OCCUPIED 2227 //micin通道被占用 +#define NET_DVR_IPC_CHANNEL_IS_IN_PIP 2228 //操作失败,该通道已关联到审讯通道,请先取消画中画配置关联 + +#define NET_DVR_CHANNEL_NO_SUPPORT_WITH_FACE_CONTRAST 2229 //通道已开启人脸比对,不支持本功能 + +#define NET_DVR_INVALID_RECHARGE_CARD 2230 //无效的充值卡 +#define NET_DVR_CLOUD_PLATFORM_SERVER_EXCEPTION 2231 //云平台服务器异常 +#define NET_DVR_OPERATION_FAILURE_WITHOUT_LOGIN 2232 //未登录操作失败 +#define NET_DVR_INVALID_ASSOCIATED_SERIAL_NUMBER 2233 //关联序列号非法 +#define NET_DVR_CLOUD_PLATFORM_ACCOUNT_NOT_EXIST 2234 //云平台帐号不存在 +#define NET_DVR_DEVICE_SERIAL_NUMBER_REGISTERED 2235 //设备序列号已注册 +#define NET_DVR_CONFERENCE_ROOM_NOT_EXIST 2236 //会议室不存在 +#define NET_DVR_NEED_DISABLED_ANALOG_CHANNEL 2237//需禁用模拟通道 +#define NET_DVR_STUDENT_ROLL_CALL_FAILURE 2238//学生点名失败 +#define NET_DVR_SUB_DEVICE_NOT_ENABLE_INDIVIDUAL_BEHAVIOR 2239//子设备未启用个体行为模式 +#define NET_DVR_SUB_DEVICE_CHANNEL_CONTROL_FAILED 2240//子设备通道控制失败 +#define NET_DVR_DEVICE_NOT_IN_CONFERENCE 2241//设备不在会议中 +#define NET_DVR_ALREADY_EXIST_CONFERENCE 2242//当前已经存在会议 +#define NET_DVR_NO_SUPPORT_WITH_VIDEO_CONFERENCE 2243//当前正在视频会议中,不支持本功能 +#define NET_DVR_START_INTERACTION_FAILURE 2244//互动开始失败 +#define NET_DVR_ASK_QUESTION_STARTED 2245//已开始提问 +#define NET_DVR_ASK_QUESTION_CLOSED 2246//已结束提问 +#define NET_DVR_UNABLE_OPERATE_BY_HOST 2247//已被主持人禁用,无法操作 +#define NET_DVR_REPEATED_ASK_QUESTION 2248//重复提问 +#define NET_DVR_SWITCH_TIMEDIFF_LESS_LIMIT 2249/*开关机时间差小于限制值(10分钟)*/ +#define NET_DVR_CHANNEL_DEVICE_EXIST 2250 //当前通道已经添加设备 +#define NET_DVR_CHANNEL_DEVICE_NOT_EXIST 2251 //当前通道不存在设备 +#define NET_DVR_ERROR_ADJUSTING_RESOLUTION 2252 //先关闭摄像机的裁剪,再调整分辨率 +#define NET_DVR_SSD_FILE_SYSTEM_IS_UPGRADING 2253 //SSD文件系统正在升级 +#define NET_DVR_SSD_FILE_SYSTEM_IS_FORMAT 2254 //SSD正在格式化 +#define NET_DVR_CHANNEL_IS_CONNECTING 2255 //当前通道正在连接 + +#define NET_DVR_CHANNEL_STREAM_TYPE_NOT_SUPPORT 2257 //当前通道码流类型不支持 +#define NET_DVR_CHANNEL_USERNAME_NOT_EXIST 2258 //当前通道用户名不存在 +#define NET_DVR_CHANNEL_ACCESS_PARAM_FAILURE 2259 //当前通道获取参数失败 +#define NET_DVR_CHANNEL_GET_STREAM_FAILURE 2260 //当前通道取流失败 +#define NET_DVR_CHANNEL_RISK_PASSWORD 2261 //当前通道密码为风险密码 + +#define NET_DVR_NO_SUPPORT_DELETE_STRANGER_LIB 2262 //不支持删除陌生人库 +#define NET_DVR_NO_SUPPORT_CREATE_STRANGER_LIB 2263 //不支持创建陌生人库 + +#define NET_DVR_NETWORK_PORT_CONFLICT 2264 //网络配置端口冲突 +#define NET_DVR_TRANSCODE_NO_RESOURCES 2265 //转码资源不足 +#define NET_DVR_SSD_FILE_SYSTEM_ERROR 2266 //SSD文件系统错误 +#define NET_DVR_INSUFFICIENT_SSD__FOR_FPD 2267 //用于人员频次业务的SSD容量不够 +#define NET_DVR_ASSOCIATED_FACELIB_OVER_LIMIT 2268 //关联人脸库已达上限 +#define NET_DVR_NEED_DELETE_DIGITAL_CHANNEL 2269 //需删除数字通道 +#define NET_DVR_ERR_FALL_DOWN_RULENUM_LIMIT 2270 //人员倒地规则数上限 +#define NET_DVR_ERR_VIOLENT_MOTION_RULENUM_LIMIT 2271 //剧烈运动规则数上限 +#define NET_DVR_UPGRADE_ENGINE_VERSION_MISMATCH 2272 //升级包引擎版本不匹配(升级过程中返回) +#define NET_ERR_SLEEP_STREAM_UNSUPPORT 2273 //相机处于休眠中,开启预览失败;请先唤醒后再进行尝试 + +//热成像产线相关错误码(3001 - 3500) +#define NET_DVR_ERR_NOTSUPPORT_DEICING 3001 //设备当前状态不支持除冰功能(只在POE+、AC24V、DC12V供电下支持除冰功能) +#define NET_DVR_ERR_THERMENABLE_CLOSE 3002 //测温功能总使能未开启。(即NET_DVR_THERMOMETRY_BASICPARAM使能未开启) +#define NET_DVR_ERR_NOTMEET_DEICING 3003 //当前空腔温度不满足手动除冰开启条件(需空腔温度小于30度才可开启) +#define NET_DVR_ERR_PANORAMIC_LIMIT_OPERATED 3004 //全景地图和限位不可同时操作 +#define NET_DVR_ERR_SMARTH264_ROI_OPERATED 3005 //SmartH264和ROI不可同时操作 +#define NET_DVR_ERR_RULENUM_LIMIT 3006 //规则数上限 +#define NET_DVR_ERR_LASER_DEICING_OPERATED 3007 //激光以及除冰功能不可同时操作 +#define NET_DVR_ERR_OFFDIGITALZOOM_OR_MINZOOMLIMIT 3008 //请先关闭数据变倍功能或变倍限制设置为最小值。当执行烟火检测、异常行为检测、船只检测、坏点矫正、测温、烟火屏蔽功能时,若没有关闭数据变倍或者变倍限制没有设置为最小值时,将会提示该错误码。 +#define NET_DVR_ERR_FIREWAITING 3009 //设备云台正在火点等待中 +#define NET_DVR_SYNCHRONIZEFOV_ERROR 3010 //同步视场角错误 +#define NET_DVR_CERTIFICATE_VALIDATION_ERROR 3011 //证书验证不通过 +#define NET_DVR_CERTIFICATES_NUM_EXCEED_ERROR 3012 //证书个数超过上限 +#define NET_DVR_RULE_SHIELDMASK_CONFLICT_ERROR 3013 //规则区域与屏蔽区域冲突 +#define NET_DVR_MOTOR_PREHEATING_ERROR 3014 //电机预热中 +#define NET_DVR_PT_DEICING_ERROR 3015 //云台除冰中 + +//前端产品线错误码(3501-4000) +#define NET_DVR_ERR_NO_SAFETY_HELMET_REGION 3501 //未配置安全帽检测区域 +#define NET_DVR_ERR_UNCLOSED_SAFETY_HELMET 3502 //未关闭安全帽检测使能 +#define NET_DVR_ERR_MUX_RECV_STATE 3503 //多路复用接收状态异常 +#define NET_DVR_UPLOAD_HBDLIBID_ERROR 3504 // 上传人体库ID(HBDID or customHBDID)错误 +#define NET_DVR_NOTSUPPORT_SMALLER_RATIOS 3505 // 倍率小于1倍时不支持功能配置,请调高倍率 +#define NET_ERR_ACCOUNT_NOT_ACTIVED 3506// 用户账户未激活,排查建议:请先登录账户修改初始密码,再尝试操作。 + +#define NET_ERR_NPQ_BASE_INDEX 8000 //NPQ库错误码 +#define NET_ERR_NPQ_PARAM (NET_ERR_NPQ_BASE_INDEX + 1) //NPQ库参数有误 +#define NET_ERR_NPQ_SYSTEM (NET_ERR_NPQ_BASE_INDEX + 2) //NPQ库操作系统调用错误(包括资源申请失败或内部错误等) +#define NET_ERR_NPQ_GENRAL (NET_ERR_NPQ_BASE_INDEX + 3) //NPQ库内部通用错误 +#define NET_ERR_NPQ_PRECONDITION (NET_ERR_NPQ_BASE_INDEX + 4) //NPQ库调用顺序错误 +#define NET_ERR_NPQ_NOTSUPPORT (NET_ERR_NPQ_BASE_INDEX + 5) //NPQ库功能不支持 + +#define NET_ERR_NPQ_NOTCALLBACK (NET_ERR_NPQ_BASE_INDEX + 100) //数据没有回调上来 +#define NET_ERR_NPQ_LOADLIB (NET_ERR_NPQ_BASE_INDEX + 101) //NPQ库加载失败 +#define NET_ERR_NPQ_STEAM_CLOSE (NET_ERR_NPQ_BASE_INDEX + 104) //本路码流NPQ功能未开启 +#define NET_ERR_NPQ_MAX_LINK (NET_ERR_NPQ_BASE_INDEX + 110) //NPQ取流路数达到上限 +#define NET_ERR_NPQ_STREAM_CFG (NET_ERR_NPQ_BASE_INDEX + 111) //编码参数存在冲突配置 +#define NET_ERR_NPQ_PLAYBACK_OVERSPEED (NET_ERR_NPQ_BASE_INDEX + 112) //NPQ回放倍率达到上限 +#define NET_ERR_NPQ_PLAYBACK_BELOWSPEED (NET_ERR_NPQ_BASE_INDEX + 113) //NPQ回放倍率达到下限 + +#define NET_EZVIZ_P2P_BASE_INDEX 8300 //萤石P2P组件错误码 +#define NET_DVR_EZVIZ_P2P_REGISTER_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 1) +#define NET_DVR_EZVIZ_P2P_LOGIN_2C_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 2) +#define NET_DVR_EZVIZ_P2P_LOGIN_2B_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 3) +#define NET_DVR_EZVIZ_P2P_BUILDLINK_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 4) +#define NET_DVR_EZVIZ_P2P_PORTMAPPING_ERROR (NET_EZVIZ_P2P_BASE_INDEX + 5) +#define NET_DVR_EZVIZ_P2P_COULDNT_RESOLVE_HOST (NET_EZVIZ_P2P_BASE_INDEX + 6) //P2PCLOUD_ER_COULDNT_RESOLVE_HOST 1006 +#define NET_DVR_EZVIZ_P2P_COULDNT_CONNECT (NET_EZVIZ_P2P_BASE_INDEX + 7) //P2PCLOUD_ER_COULDNT_CONNECT 1007 +#define NET_DVR_EZVIZ_P2P_OPERATION_TIMEOUT (NET_EZVIZ_P2P_BASE_INDEX + 8) //P2PCLOUD_ER_OPERATION_TIMEOUT 1028 +#define NET_DVR_EZVIZ_P2P_NOT_INITIALIZED (NET_EZVIZ_P2P_BASE_INDEX + 9) //P2PCLOUD_ER_NOT_INITIALIZED 2001 +#define NET_DVR_EZVIZ_P2P_INVALID_ARG (NET_EZVIZ_P2P_BASE_INDEX + 10) //P2PCLOUD_ER_INVALID_ARG 2002 +#define NET_DVR_EZVIZ_P2P_EXCEED_MAX_SERVICE (NET_EZVIZ_P2P_BASE_INDEX + 11) //P2PCLOUD_ER_EXCEED_MAX_SERVICE 2003 +#define NET_DVR_EZVIZ_P2P_TOKEN_NOT_EXIST (NET_EZVIZ_P2P_BASE_INDEX + 12) //P2PCLOUD_ER_TOKEN_NOT_EXIST 2004 +#define NET_DVR_EZVIZ_P2P_DISCONNECTED (NET_EZVIZ_P2P_BASE_INDEX + 13) //P2PCLOUD_ER_DISCONNECTED 2005 +#define NET_DVR_EZVIZ_P2P_RELAY_ADDR_NOT_EXIST (NET_EZVIZ_P2P_BASE_INDEX + 14) //P2PCLOUD_ER_RELAY_ADDR_NOT_EXIST 2006 +#define NET_DVR_EZVIZ_P2P_DEV_NOT_ONLINE (NET_EZVIZ_P2P_BASE_INDEX + 15) //P2PCLOUD_ER_DEV_NOT_ONLINE 3121 +#define NET_DVR_EZVIZ_P2P_DEV_CONNECT_EXCEED (NET_EZVIZ_P2P_BASE_INDEX + 16) //P2PCLOUD_ER_DEV_CONNECT_EXCEED 3123 +#define NET_DVR_EZVIZ_P2P_DEV_CONNECT_FAILED (NET_EZVIZ_P2P_BASE_INDEX + 17) //P2PCLOUD_ER_DEV_CONNECT_FAILED 3209 +#define NET_DVR_EZVIZ_P2P_DEV_RECV_TIMEOUT (NET_EZVIZ_P2P_BASE_INDEX + 18) //P2PCLOUD_ER_DEV_RECV_TIMEOUT 3213 +#define NET_DVR_EZVIZ_P2P_USER_FORCE_STOP (NET_EZVIZ_P2P_BASE_INDEX + 19) //P2PCLOUD_ER_USER_FORCE_STOP 3216 +#define NET_DVR_EZVIZ_P2P_NO_PERMISSION (NET_EZVIZ_P2P_BASE_INDEX + 20) //P2PCLOUD_ER_NO_PERMISSION 3255 +#define NET_DVR_EZVIZ_P2P_DEV_PU_NOT_FOUND (NET_EZVIZ_P2P_BASE_INDEX + 21) //P2PCLOUD_ER_DEV_PU_NOT_FOUND 3297 +#define NET_DVR_EZVIZ_P2P_DEV_CONN_NOLONGER_AVAIL (NET_EZVIZ_P2P_BASE_INDEX + 22) //P2PCLOUD_ER_DEV_CONN_NOLONGER_AVAIL 3351 +#define NET_DVR_EZVIZ_P2P_DEV_NOT_LISTENING (NET_EZVIZ_P2P_BASE_INDEX + 23) //P2PCLOUD_ER_DEV_NOT_LISTENING 3610 +#define NET_DVR_EZVIZ_P2P_DEV_TUNNEL_SOCKET_LIMITED (NET_EZVIZ_P2P_BASE_INDEX + 24) //P2PCLOUD_ER_DEV_TUNNEL_SOCKET_LIMITED 3612 +#define NET_DVR_EZVIZ_P2P_FAIL_CREATE_THREAD (NET_EZVIZ_P2P_BASE_INDEX + 25) //TUNNEL_ER_FAIL_CREATE_THREAD 4001 +#define NET_DVR_EZVIZ_P2P_FAIL_ALLOC_BUFFERS (NET_EZVIZ_P2P_BASE_INDEX + 26) //P2PCLOUD_ER_FAIL_ALLOC_BUFFERS 4002 +#define NET_DVR_EZVIZ_P2P_FAIL_CREATE_SOCKET (NET_EZVIZ_P2P_BASE_INDEX + 27) //P2PCLOUD_ER_FAIL_CREATE_SOCKET 4003 +#define NET_DVR_EZVIZ_P2P_BIND_LOCAL_SERVICE (NET_EZVIZ_P2P_BASE_INDEX + 28) //P2PCLOUD_ER_BIND_LOCAL_SERVICE 4004 +#define NET_DVR_EZVIZ_P2P_LISTEN_LOCAL_SERVICE (NET_EZVIZ_P2P_BASE_INDEX + 29) //P2PCLOUD_ER_LISTEN_LOCAL_SERVICE 4005 +#define NET_DVR_EZVIZ_P2P_SVR_RSP_BAD (NET_EZVIZ_P2P_BASE_INDEX + 30) //P2PCLOUD_ER_SVR_RSP_BAD 5001 +#define NET_DVR_EZVIZ_P2P_SVR_RSP_INVALID (NET_EZVIZ_P2P_BASE_INDEX + 31) //P2PCLOUD_ER_SVR_RSP_INVALID 5002 +#define NET_DVR_EZVIZ_P2P_SVR_LOGIN_FAILED (NET_EZVIZ_P2P_BASE_INDEX + 32) //P2PCLOUD_ER_SVR_LOGIN_FAILED 5003 +#define NET_DVR_EZVIZ_P2P_SVR_TOKEN_EXPIRED (NET_EZVIZ_P2P_BASE_INDEX + 33) //P2PCLOUD_ER_SVR_TOKEN_EXPIRED 5004 +#define NET_DVR_EZVIZ_P2P_SVR_DEV_NOT_BELONG_TO_USER (NET_EZVIZ_P2P_BASE_INDEX + 34) //P2PCLOUD_ER_SVR_DEV_NOT_BELONG_TO_USER 5005 + + +//传显错误码 8501~9500 +#define NET_ERR_UPGRADE_PROG_ERR 8501 //程序执行出错 +#define NET_ERR_UPGRADE_NO_DEVICE 8502 //没有设备(指LED控制器没有接接收卡) +#define NET_ERR_UPGRADE_NO_FILE 8503 //没有找到升级文件 +#define NET_ERR_UPGRADE_DATA_ERROR 8504 //升级文件数据不兼容 +#define NET_ERR_UPGRADE_LINK_SERVER_ERR 8505 //与服务器连接失败 +#define NET_ERR_UPGRADE_OEMCODE_NOMATCH 8506 //oemCode不匹配 +#define NET_ERR_UPGRADE_FLASH_NOENOUGH 8507 //flash不足 +#define NET_ERR_UPGRADE_RAM_NOENOUGH 8508 //RAM不足 +#define NET_ERR_UPGRADE_DSPRAM_NOENOUGH 8509 //DSP RAM不足 +#define NET_ERR_NOT_SUPPORT_CHECK 8510 //该屏幕型号不支持校正 +#define NET_ERR_LED_DEVICE_BUSY_CHECK 8511 //LED设备忙(正在校正) +#define NET_ERR_DEVICE_MEM_NOT_ENOUGH 8512 //设备内存不足 +#define NET_ERR_CHECK_PARAM 8513 //校正参数错误 +#define NET_ERR_RESOLUTION_OVER_LIMIT 8514 //输入分辨率超过限制 +#define NET_ERR_NO_CUSTOM_BASE 8515 //无自定义底图 +#define NET_ERR_PRIORITY_LOWER 8516 //优先级低于当前模式 +#define NET_ERR_SEND_MESSAGE_EXCEPT 8517 //消息发送异常 +#define NET_ERR_SENDCARD_UPGRADING 8518 //发送卡升级中 +#define NET_ERR_NO_WIRELESS_NETCARD 8519 //未插入无线网卡 +#define NET_ERR_LOAD_FS_FAIL 8520 //从屏幕加载失败 +#define NET_ERR_FLASH_UNSTORAGE_RECCARD 8521 //Flash中未存储接收卡参数 +#define NET_ERR_NOT_SUPPORT_SINGLE_NETWORKCARD_AGGREGA 8522 //不支持单网卡聚合 +#define NET_ERR_DISPLAYRESOLUTION_LESSTHAN_SMALLESTRESOLUTION 8523 //显示分辨率小于最小分辨率 +#define NET_ERR_NOT_SUPPORT_LOCAL_SOURCE_DRAG_MORE 8524 //不支持本地源一拖多 +#define NET_ERR_CANCEL_CURRENT_LED_AREA 8525 //请先取消LED区域 +#define NET_ERR_LED_OUT_ASSOCIATED_AREA 8526 //LED未在关联区域 +#define NET_ERR_MAX_VIRTUAL_LED_PICTURE_SIZE 8527 //虚拟LED图片大小超限 +#define NET_ERR_DEVICE_CTRLED_BY_REMOTER 8528 //设备当前受遥控器控制 +/*******************全局错误码 end**********************/ + +/************************************************* +NET_DVR_IsSupport()返回值 +1-9位分别表示以下信息(位与是TRUE)表示支持; +**************************************************/ +#define NET_DVR_SUPPORT_DDRAW 0x01//支持DIRECTDRAW,如果不支持,则播放器不能工作; +#define NET_DVR_SUPPORT_BLT 0x02//显卡支持BLT操作,如果不支持,则播放器不能工作; +#define NET_DVR_SUPPORT_BLTFOURCC 0x04//显卡BLT支持颜色转换,如果不支持,播放器会用软件方法作RGB转换; +#define NET_DVR_SUPPORT_BLTSHRINKX 0x08//显卡BLT支持X轴缩小;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSHRINKY 0x10//显卡BLT支持Y轴缩小;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSTRETCHX 0x20//显卡BLT支持X轴放大;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_BLTSTRETCHY 0x40//显卡BLT支持Y轴放大;如果不支持,系统会用软件方法转换; +#define NET_DVR_SUPPORT_SSE 0x80//CPU支持SSE指令,Intel Pentium3以上支持SSE指令; +#define NET_DVR_SUPPORT_MMX 0x100//CPU支持MMX指令集,Intel Pentium3以上支持SSE指令; + +/**********************云台控制命令 begin*************************/ +#define LIGHT_PWRON 2 /* 接通灯光电源 */ +#define WIPER_PWRON 3 /* 接通雨刷开关 */ +#define FAN_PWRON 4 /* 接通风扇开关 */ +#define HEATER_PWRON 5 /* 接通加热器开关 */ +#define AUX_PWRON1 6 /* 接通辅助设备开关 */ +#define AUX_PWRON2 7 /* 接通辅助设备开关 */ +#define SET_PRESET 8 /* 设置预置点 */ +#define CLE_PRESET 9 /* 清除预置点 */ + +#define ZOOM_IN 11 /* 焦距以速度SS变大(倍率变大) */ +#define ZOOM_OUT 12 /* 焦距以速度SS变小(倍率变小) */ +#define FOCUS_NEAR 13 /* 焦点以速度SS前调 */ +#define FOCUS_FAR 14 /* 焦点以速度SS后调 */ +#define IRIS_OPEN 15 /* 光圈以速度SS扩大 */ +#define IRIS_CLOSE 16 /* 光圈以速度SS缩小 */ + +#define TILT_UP 21 /* 云台以SS的速度上仰 */ +#define TILT_DOWN 22 /* 云台以SS的速度下俯 */ +#define PAN_LEFT 23 /* 云台以SS的速度左转 */ +#define PAN_RIGHT 24 /* 云台以SS的速度右转 */ +#define UP_LEFT 25 /* 云台以SS的速度上仰和左转 */ +#define UP_RIGHT 26 /* 云台以SS的速度上仰和右转 */ +#define DOWN_LEFT 27 /* 云台以SS的速度下俯和左转 */ +#define DOWN_RIGHT 28 /* 云台以SS的速度下俯和右转 */ +#define PAN_AUTO 29 /* 云台以SS的速度左右自动扫描 */ + +#define FILL_PRE_SEQ 30 /* 将预置点加入巡航序列 */ +#define SET_SEQ_DWELL 31 /* 设置巡航点停顿时间 */ +#define SET_SEQ_SPEED 32 /* 设置巡航速度 */ +#define CLE_PRE_SEQ 33 /* 将预置点从巡航序列中删除 */ +#define STA_MEM_CRUISE 34 /* 开始记录 */ +#define STO_MEM_CRUISE 35 /* 停止记录 */ +#define RUN_CRUISE 36 /* 开始 */ +#define RUN_SEQ 37 /* 开始巡航 */ +#define STOP_SEQ 38 /* 停止巡航 */ +#define GOTO_PRESET 39 /* 快球转到预置点 */ +//dac通过私有协议接入NVR,NVR通过Onvif协议接入相机时。由于私有协议巡航点位下发速度、时间等为单个命令, +//Onvif为批量下发所有点位,私有协议中无巡航点位下发的开始和结束,导致NVR无法判断何时组Onvif报文给前端设备 +#define SET_SEQ_START 41 /* IP快球,开始设置巡航*/ +#define SET_SEQ_END 42 /* IP快球,结束设置巡航*/ + +#define DEL_SEQ 43 /* 删除巡航路径 */ +#define STOP_CRUISE 44 /* 停止 */ +#define DELETE_CRUISE 45 /* 删除单条 */ +#define DELETE_ALL_CRUISE 46/* 删除所有 */ + +#define PAN_CIRCLE 50 /* 云台以SS的速度自动圆周扫描 */ +#define DRAG_PTZ 51 /* 拖动PTZ */ +#define LINEAR_SCAN 52 /* 区域扫描 */ //2014-03-15 +#define CLE_ALL_PRESET 53 /* 预置点全部清除 */ +#define CLE_ALL_SEQ 54 /* 巡航全部清除 */ +#define CLE_ALL_CRUISE 55 /* 全部清除 */ + +#define POPUP_MENU 56 /* 显示操作菜单 */ + +#define TILT_DOWN_ZOOM_IN 58 /* 云台以SS的速度下俯&&焦距以速度SS变大(倍率变大) */ +#define TILT_DOWN_ZOOM_OUT 59 /* 云台以SS的速度下俯&&焦距以速度SS变小(倍率变小) */ +#define PAN_LEFT_ZOOM_IN 60 /* 云台以SS的速度左转&&焦距以速度SS变大(倍率变大)*/ +#define PAN_LEFT_ZOOM_OUT 61 /* 云台以SS的速度左转&&焦距以速度SS变小(倍率变小)*/ +#define PAN_RIGHT_ZOOM_IN 62 /* 云台以SS的速度右转&&焦距以速度SS变大(倍率变大) */ +#define PAN_RIGHT_ZOOM_OUT 63 /* 云台以SS的速度右转&&焦距以速度SS变小(倍率变小) */ +#define UP_LEFT_ZOOM_IN 64 /* 云台以SS的速度上仰和左转&&焦距以速度SS变大(倍率变大)*/ +#define UP_LEFT_ZOOM_OUT 65 /* 云台以SS的速度上仰和左转&&焦距以速度SS变小(倍率变小)*/ +#define UP_RIGHT_ZOOM_IN 66 /* 云台以SS的速度上仰和右转&&焦距以速度SS变大(倍率变大)*/ +#define UP_RIGHT_ZOOM_OUT 67 /* 云台以SS的速度上仰和右转&&焦距以速度SS变小(倍率变小)*/ +#define DOWN_LEFT_ZOOM_IN 68 /* 云台以SS的速度下俯和左转&&焦距以速度SS变大(倍率变大) */ +#define DOWN_LEFT_ZOOM_OUT 69 /* 云台以SS的速度下俯和左转&&焦距以速度SS变小(倍率变小) */ +#define DOWN_RIGHT_ZOOM_IN 70 /* 云台以SS的速度下俯和右转&&焦距以速度SS变大(倍率变大) */ +#define DOWN_RIGHT_ZOOM_OUT 71 /* 云台以SS的速度下俯和右转&&焦距以速度SS变小(倍率变小) */ +#define TILT_UP_ZOOM_IN 72 /* 云台以SS的速度上仰&&焦距以速度SS变大(倍率变大) */ +#define TILT_UP_ZOOM_OUT 73 /* 云台以SS的速度上仰&&焦距以速度SS变小(倍率变小) */ +/**********************云台控制命令 end*************************/ + +#define DVR_VEHICLE_CONTROL_LIST 0x1 //车辆名单数据类型(发送的数据类型)2013-11-04 + + +/************************************************* +回放时播放控制命令宏定义 +NET_DVR_PlayBackControl +NET_DVR_PlayControlLocDisplay +NET_DVR_DecPlayBackCtrl的宏定义 +具体支持查看函数说明和代码 +**************************************************/ +#define NET_DVR_PLAYSTART 1//开始播放 +#define NET_DVR_PLAYSTOP 2//停止播放 +#define NET_DVR_PLAYPAUSE 3//暂停播放 +#define NET_DVR_PLAYRESTART 4//恢复播放 +#define NET_DVR_PLAYFAST 5//快放 +#define NET_DVR_PLAYSLOW 6//慢放 +#define NET_DVR_PLAYNORMAL 7//正常速度 +#define NET_DVR_PLAYFRAME 8//单帧放 +#define NET_DVR_PLAYSTARTAUDIO 9//打开声音 +#define NET_DVR_PLAYSTOPAUDIO 10//关闭声音 +#define NET_DVR_PLAYAUDIOVOLUME 11//调节音量 +#define NET_DVR_PLAYSETPOS 12//改变文件回放的进度 +#define NET_DVR_PLAYGETPOS 13//获取文件回放的进度 +#define NET_DVR_PLAYGETTIME 14//获取当前已经播放的时间(按文件回放的时候有效) +#define NET_DVR_PLAYGETFRAME 15//获取当前已经播放的帧数(按文件回放的时候有效) +#define NET_DVR_GETTOTALFRAMES 16//获取当前播放文件总的帧数(按文件回放的时候有效) +#define NET_DVR_GETTOTALTIME 17//获取当前播放文件总的时间(按文件回放的时候有效) +#define NET_DVR_THROWBFRAME 20//丢B帧 +#define NET_DVR_SETSPEED 24//设置码流速度 +#define NET_DVR_KEEPALIVE 25//保持与设备的心跳(如果回调阻塞,建议2秒发送一次) +#define NET_DVR_PLAYSETTIME 26//按绝对时间定位 +#define NET_DVR_PLAYGETTOTALLEN 27//获取按时间回放对应时间段内的所有文件的总长度 +#define NET_DVR_PLAYSETTIME_V50 28//按绝对时间定位(支持时区扩展) +#define NET_DVR_PLAY_FORWARD 29 //倒放切换为正放 +#define NET_DVR_PLAY_REVERSE 30 //正放切换为倒放 +#define NET_DVR_SET_DECODEFFRAMETYPE 31 +#define NET_DVR_SET_TRANS_TYPE 32 //设置转码格式 +#define NET_DVR_PLAY_CONVERT 33 //回放转码 +#define NET_DVR_START_DRAWFRAME 34 //开始抽帧回放 +#define NET_DVR_STOP_DRAWFRAME 35 //停止抽帧回放 +#define NET_DVR_CHANGEWNDRESOLUTION 36 //窗口大小改变,通知播放库 +#define NET_DVR_RESETBUFFER 37 //清空矩阵解码缓冲区(远程回放文件) +#define NET_DVR_VOD_DRAG_ING 38 //回放拖动中 +#define NET_DVR_VOD_DRAG_END 39 //回放拖动结束 +#define NET_DVR_VOD_RESET_PLAYTIME 40 //重设播放时间 + + +#define PLAYM4_DECODE_NORMAIL 0 //正常解码 +#define PLAYM4_DECODE_KEY_FRAME 1 //只解I帧 +#define PLAYM4_DECODE_NONE 2 //全不解 +#define PLAYM4_DECODE_TEMPORAL_LAYER_0 3 //解1/2 +#define PLAYM4_DECODE_TEMPORAL_LAYER_1 4 //解1/4 + + +//远程按键定义如下: +/* key value send to CONFIG program */ +#define KEY_CODE_1 1 +#define KEY_CODE_2 2 +#define KEY_CODE_3 3 +#define KEY_CODE_4 4 +#define KEY_CODE_5 5 +#define KEY_CODE_6 6 +#define KEY_CODE_7 7 +#define KEY_CODE_8 8 +#define KEY_CODE_9 9 +#define KEY_CODE_0 10 +#define KEY_CODE_POWER 11 +#define KEY_CODE_MENU 12 +#define KEY_CODE_ENTER 13 +#define KEY_CODE_CANCEL 14 +#define KEY_CODE_UP 15 +#define KEY_CODE_DOWN 16 +#define KEY_CODE_LEFT 17 +#define KEY_CODE_RIGHT 18 +#define KEY_CODE_EDIT 19 +#define KEY_CODE_ADD 20 +#define KEY_CODE_MINUS 21 +#define KEY_CODE_PLAY 22 +#define KEY_CODE_REC 23 +#define KEY_CODE_PAN 24 +#define KEY_CODE_M 25 +#define KEY_CODE_A 26 +#define KEY_CODE_F1 27 +#define KEY_CODE_F2 28 + +/* for PTZ control */ +#define KEY_PTZ_UP_START KEY_CODE_UP +#define KEY_PTZ_UP_STOP 32 + +#define KEY_PTZ_DOWN_START KEY_CODE_DOWN +#define KEY_PTZ_DOWN_STOP 33 + +#define KEY_PTZ_LEFT_START KEY_CODE_LEFT +#define KEY_PTZ_LEFT_STOP 34 + +#define KEY_PTZ_RIGHT_START KEY_CODE_RIGHT +#define KEY_PTZ_RIGHT_STOP 35 + +#define KEY_PTZ_AP1_START KEY_CODE_EDIT /*光圈+*/ +#define KEY_PTZ_AP1_STOP 36 + +#define KEY_PTZ_AP2_START KEY_CODE_PAN /*光圈-*/ +#define KEY_PTZ_AP2_STOP 37 + +#define KEY_PTZ_FOCUS1_START KEY_CODE_A /*聚焦+*/ +#define KEY_PTZ_FOCUS1_STOP 38 + +#define KEY_PTZ_FOCUS2_START KEY_CODE_M /*聚焦-*/ +#define KEY_PTZ_FOCUS2_STOP 39 + +#define KEY_PTZ_B1_START 40 /*变倍+*/ +#define KEY_PTZ_B1_STOP 41 + +#define KEY_PTZ_B2_START 42 /*变倍-*/ +#define KEY_PTZ_B2_STOP 43 + +//9000新增 +#define KEY_CODE_11 44 +#define KEY_CODE_12 45 +#define KEY_CODE_13 46 +#define KEY_CODE_14 47 +#define KEY_CODE_15 48 +#define KEY_CODE_16 49 + + + +/*************************参数配置命令 begin*******************************/ +//用于NET_DVR_SetDVRConfig和NET_DVR_GetDVRConfig,注意其对应的配置结构 + +#define NET_DVR_GET_DEVICECFG 100 //获取设备参数 +#define NET_DVR_SET_DEVICECFG 101 //设置设备参数 +#define NET_DVR_GET_NETCFG 102 //获取网络参数 +#define NET_DVR_SET_NETCFG 103 //设置网络参数 +#define NET_DVR_GET_PICCFG 104 //获取图象参数 +#define NET_DVR_SET_PICCFG 105 //设置图象参数 +#define NET_DVR_GET_COMPRESSCFG 106 //获取压缩参数 +#define NET_DVR_SET_COMPRESSCFG 107 //设置压缩参数 +#define NET_DVR_GET_RECORDCFG 108 //获取录像时间参数 +#define NET_DVR_SET_RECORDCFG 109 //设置录像时间参数 +#define NET_DVR_GET_DECODERCFG 110 //获取解码器参数 +#define NET_DVR_SET_DECODERCFG 111 //设置解码器参数 +#define NET_DVR_GET_RS232CFG 112 //获取232串口参数 +#define NET_DVR_SET_RS232CFG 113 //设置232串口参数 +#define NET_DVR_GET_ALARMINCFG 114 //获取报警输入参数 +#define NET_DVR_SET_ALARMINCFG 115 //设置报警输入参数 +#define NET_DVR_GET_ALARMOUTCFG 116 //获取报警输出参数 +#define NET_DVR_SET_ALARMOUTCFG 117 //设置报警输出参数 +#define NET_DVR_GET_TIMECFG 118 //获取DVR时间 +#define NET_DVR_SET_TIMECFG 119 //设置DVR时间 +#define NET_DVR_GET_PREVIEWCFG 120 //获取预览参数 +#define NET_DVR_SET_PREVIEWCFG 121 //设置预览参数 +#define NET_DVR_GET_VIDEOOUTCFG 122 //获取视频输出参数 +#define NET_DVR_SET_VIDEOOUTCFG 123 //设置视频输出参数 +#define NET_DVR_GET_USERCFG 124 //获取用户参数 +#define NET_DVR_SET_USERCFG 125 //设置用户参数 +#define NET_DVR_GET_EXCEPTIONCFG 126 //获取异常参数 +#define NET_DVR_SET_EXCEPTIONCFG 127 //设置异常参数 +#define NET_DVR_GET_ZONEANDDST 128 //获取时区和夏时制参数 +#define NET_DVR_SET_ZONEANDDST 129 //设置时区和夏时制参数 + +//注:该命令只支持4条OSD的类型,通常用于V30以下的设备版本。 +#define NET_DVR_GET_SHOWSTRING 130 //获取叠加字符参数 +#define NET_DVR_SET_SHOWSTRING 131 //设置叠加字符参数 + +#define NET_DVR_GET_EVENTCOMPCFG 132 //获取事件触发录像参数 +#define NET_DVR_SET_EVENTCOMPCFG 133 //设置事件触发录像参数 +#define NET_DVR_GET_FTPCFG 134 //获取抓图的FTP参数(基线) +#define NET_DVR_SET_FTPCFG 135 //设置抓图的FTP参数(基线) +#define NET_DVR_GET_AUXOUTCFG 140 //获取报警触发辅助输出设置(HS设备辅助输出2006-02-28) +#define NET_DVR_SET_AUXOUTCFG 141 //设置报警触发辅助输出设置(HS设备辅助输出2006-02-28) +#define NET_DVR_GET_PREVIEWCFG_AUX 142 //获取-s系列双输出预览参数(-s系列双输出2006-04-13) +#define NET_DVR_SET_PREVIEWCFG_AUX 143 //设置-s系列双输出预览参数(-s系列双输出2006-04-13) + +#define NET_DVR_GET_PASSWORD_MANAGE_CFG 144 //获取密码管理配置 +#define NET_DVR_SET_PASSWORD_MANAGE_CFG 145 //设置密码管理配置 +#define NET_DVR_UNLOCK_USER 146 //用户解锁 +#define NET_DVR_GET_SECURITY_CFG 147 //获取安全认证配置 +#define NET_DVR_SET_SECURITY_CFG 148 //设置安全认证配置 +#define NET_DVR_GET_LOCKED_INFO_LIST 149 //获取所有被锁定信息 + + +/*********************************智能部分接口 begin***************************************/ +//行为对应(NET_VCA_RULECFG) +#define NET_DVR_SET_RULECFG 152 //设置异常行为检测规则 +#define NET_DVR_GET_RULECFG 153 //获取异常行为检测规则 +//球机标定参数(NET_DVR_TRACK_CFG ) +#define NET_DVR_SET_TRACK_CFG 160//设置球机的配置参数 +#define NET_DVR_GET_TRACK_CFG 161//获取球机的配置参数 + +//智能分析仪取流配置结构 +#define NET_DVR_SET_IVMS_STREAMCFG 162 //设置智能分析仪取流参数 +#define NET_DVR_GET_IVMS_STREAMCFG 163 //获取智能分析仪取流参数 +//智能控制参数结构 +#define NET_DVR_SET_VCA_CTRLCFG 164 //设置智能控制参数 +#define NET_DVR_GET_VCA_CTRLCFG 165 //获取智能控制参数 +//屏蔽区域NET_VCA_MASK_REGION_LIST +#define NET_DVR_SET_VCA_MASK_REGION 166 //设置屏蔽区域参数 +#define NET_DVR_GET_VCA_MASK_REGION 167 //获取屏蔽区域参数 + +//ATM进入区域 NET_VCA_ENTER_REGION +#define NET_DVR_SET_VCA_ENTER_REGION 168 //设置进入区域参数 +#define NET_DVR_GET_VCA_ENTER_REGION 169 //获取进入区域参数 + +//标定线配置NET_VCA_LINE_SEGMENT_LIST +#define NET_DVR_SET_VCA_LINE_SEGMENT 170 //设置标定线 +#define NET_DVR_GET_VCA_LINE_SEGMENT 171 //获取标定线 + +// ivms屏蔽区域NET_IVMS_MASK_REGION_LIST +#define NET_DVR_SET_IVMS_MASK_REGION 172 //设置IVMS屏蔽区域参数 +#define NET_DVR_GET_IVMS_MASK_REGION 173 //获取IVMS屏蔽区域参数 +// ivms进入检测区域NET_IVMS_ENTER_REGION +#define NET_DVR_SET_IVMS_ENTER_REGION 174 //设置IVMS进入区域参数 +#define NET_DVR_GET_IVMS_ENTER_REGION 175 //获取IVMS进入区域参数 + +#define NET_DVR_SET_IVMS_BEHAVIORCFG 176 //设置智能分析仪行为规则参数 +#define NET_DVR_GET_IVMS_BEHAVIORCFG 177 //获取智能分析仪行为规则参数 + +// IVMS 回放检索 +#define NET_DVR_IVMS_SET_SEARCHCFG 178 //设置IVMS回放检索参数 +#define NET_DVR_IVMS_GET_SEARCHCFG 179 //获取IVMS回放检索参数 + +#define NET_DVR_SET_POSITION_TRACK 180 // 设置场景配置信息 +#define NET_DVR_GET_POSITION_TRACK 181 // 获取场景配置信息 + +#define NET_DVR_SET_CALIBRATION 182 // 设置标定信息 +#define NET_DVR_GET_CALIBRATION 183 // 获取标定信息 + +#define NET_DVR_SET_PDC_RULECFG 184 // 设置人流量统计规则 +#define NET_DVR_GET_PDC_RULECFG 185 // 获取人流量统计规则 + +#define NET_DVR_SET_PU_STREAMCFG 186 // 设置前段取流设备信息 +#define NET_DVR_GET_PU_STREAMCFG 187 // 获取前段取流设备信息 + +#define NET_VCA_SET_IVMS_BEHAVIOR_CFG 192 // 设置IVMS行为规则配置 不带时间段 +#define NET_VCA_GET_IVMS_BEHAVIOR_CFG 193 // 获取IVMS行为规则配置 不带时间段 + +#define NET_VCA_SET_SIZE_FILTER 194 // 设置全局尺寸过滤器 +#define NET_VCA_GET_SIZE_FILTER 195 // 获取全局尺寸过滤器 + +#define NET_DVR_SET_TRACK_PARAMCFG 196 // 设置球机本地菜单规则 +#define NET_DVR_GET_TRACK_PARAMCFG 197 // 获取球机本地菜单规则 + +#define NET_DVR_SET_DOME_MOVEMENT_PARAM 198 // 设置球机机芯参数 +#define NET_DVR_GET_DOME_MOVEMENT_PARAM 199 // 获取球机机芯参数 + +#define NET_DVR_GET_PICCFG_EX 200 //获取图象参数(SDK_V14扩展命令) +#define NET_DVR_SET_PICCFG_EX 201 //设置图象参数(SDK_V14扩展命令) +#define NET_DVR_GET_USERCFG_EX 202 //获取用户参数(SDK_V15扩展命令) +#define NET_DVR_SET_USERCFG_EX 203 //设置用户参数(SDK_V15扩展命令) +#define NET_DVR_GET_COMPRESSCFG_EX 204 //获取压缩参数(SDK_V15扩展命令2006-05-15) +#define NET_DVR_SET_COMPRESSCFG_EX 205 //设置压缩参数(SDK_V15扩展命令2006-05-15) + + +#define NET_DVR_GET_NETAPPCFG 222 //获取网络应用参数 NTP/DDNS/EMAIL +#define NET_DVR_SET_NETAPPCFG 223 //设置网络应用参数 NTP/DDNS/EMAIL +#define NET_DVR_GET_NTPCFG 224 //获取网络应用参数 NTP +#define NET_DVR_SET_NTPCFG 225 //设置网络应用参数 NTP +#define NET_DVR_GET_DDNSCFG 226 //获取网络应用参数 DDNS +#define NET_DVR_SET_DDNSCFG 227 //设置网络应用参数 DDNS +//对应NET_DVR_EMAILPARA +#define NET_DVR_GET_EMAILCFG 228 //获取网络应用参数 EMAIL +#define NET_DVR_SET_EMAILCFG 229 //设置网络应用参数 EMAIL + +#define NET_DVR_GET_NFSCFG 230 /* NFS disk config */ +#define NET_DVR_SET_NFSCFG 231 /* NFS disk config */ + +/*注:该命令为定制,只支持8条OSD的类型,不会兼容V30设备版本之前的 +NET_DVR_GET_SHOWSTRING 、NET_DVR_SET_SHOWSTRING 命令。(不建议使用)*/ +#define NET_DVR_GET_SHOWSTRING_EX 238 //获取叠加字符参数扩展(支持8条字符) +#define NET_DVR_SET_SHOWSTRING_EX 239 //设置叠加字符参数扩展(支持8条字符) +#define NET_DVR_GET_NETCFG_OTHER 244 //获取网络参数 +#define NET_DVR_SET_NETCFG_OTHER 245 //设置网络参数 + +//对应NET_DVR_EMAILCFG结构 +#define NET_DVR_GET_EMAILPARACFG 250 //Get EMAIL parameters +#define NET_DVR_SET_EMAILPARACFG 251 //Setup EMAIL parameters + + +#define NET_DVR_GET_DDNSCFG_EX 274 //获取扩展DDNS参数 +#define NET_DVR_SET_DDNSCFG_EX 275 //设置扩展DDNS参数 + +#define NET_DVR_SET_PTZPOS 292 //云台设置PTZ位置 +#define NET_DVR_GET_PTZPOS 293 //云台获取PTZ位置 +#define NET_DVR_GET_PTZSCOPE 294 //云台获取PTZ范围 + +#define NET_DVR_GET_AP_INFO_LIST 305//获取无线网络资源参数 +#define NET_DVR_SET_WIFI_CFG 306 //设置IP布防设备无线参数 +#define NET_DVR_GET_WIFI_CFG 307 //获取IP布防设备无线参数 +#define NET_DVR_SET_WIFI_WORKMODE 308 //设置IP布防设备网口工作模式参数 +#define NET_DVR_GET_WIFI_WORKMODE 309 //获取IP布防设备网口工作模式参数 +#define NET_DVR_GET_WIFI_STATUS 310 //获取设备当前wifi连接状态 +/*********************************智能交通事件begin***************************************/ +#define NET_DVR_GET_REFERENCE_REGION 400 //获取参考区域 +#define NET_DVR_SET_REFERENCE_REGION 401 //设置参考区域 + +#define NET_DVR_GET_TRAFFIC_MASK_REGION 402 //获取交通事件屏蔽区域 +#define NET_DVR_SET_TRAFFIC_MASK_REGION 403 //设置交通事件屏蔽区域 +#define NET_DVR_SET_AID_RULECFG 404 //设置交通事件规则参数 +#define NET_DVR_GET_AID_RULECFG 405 //获取交通事件规则参数 + +#define NET_DVR_SET_TPS_RULECFG 406 //设置交通统计规则参数 +#define NET_DVR_GET_TPS_RULECFG 407 //获取交通统计规则参数 + +#define NET_DVR_SET_LANECFG 408 //设置车道规则 +#define NET_DVR_GET_LANECFG 409 //获取车道规则 +#define NET_DVR_GET_VCA_RULE_COLOR_CFG 410 //获取智能规则关联的颜色参数 +#define NET_DVR_SET_VCA_RULE_COLOR_CFG 411 //设置智能规则关联的颜色参数 +#define NET_DVR_GET_SWITCH_LAMP_CFG 412 //获取开关灯检测规则配置参数 +#define NET_DVR_SET_SWITCH_LAMP_CFG 413 //设置开关灯检测规则配置参数 + + +/*********************************智能交通事件end***************************************/ +#define NET_DVR_SET_FACEDETECT_RULECFG 420 // 设置人脸检测规则 +#define NET_DVR_GET_FACEDETECT_RULECFG 421 // 获取人脸检测规则 + +#define NET_DVR_SET_VEHICLE_RECOG_TASK 422 //车辆二次识别任务提交 +#define NET_DVR_GET_VEHICLE_RECOG_TASK 423 //车辆二次识别任务获取 + +#define NET_DVR_SET_TIMECORRECT 432 //校时配置(只做校时操作,不记录校时配置 eg.NET_DVR_SET_TIMECFG 会修改设备的校时配置(NTP校时,会被修改为手动校时)) +#define NET_DVR_GET_CONNECT_LIST 433 //获取连接设备列表信息 + +/***************************DS9000新增命令(_V30) begin *****************************/ +//网络(NET_DVR_NETCFG_V30结构) +#define NET_DVR_GET_NETCFG_V30 1000 //获取网络参数 +#define NET_DVR_SET_NETCFG_V30 1001 //设置网络参数 + +//图象(NET_DVR_PICCFG_V30结构) +#define NET_DVR_GET_PICCFG_V30 1002 //获取图象参数 +#define NET_DVR_SET_PICCFG_V30 1003 //设置图象参数 + +//录像时间(NET_DVR_RECORD_V30结构) +#define NET_DVR_GET_RECORDCFG_V30 1004 //获取录像参数 +#define NET_DVR_SET_RECORDCFG_V30 1005 //设置录像参数 + +//用户(NET_DVR_USER_V30结构) +#define NET_DVR_GET_USERCFG_V30 1006 //获取用户参数 +#define NET_DVR_SET_USERCFG_V30 1007 //设置用户参数 + +//录像时间(NET_DVR_RECORD_V40结构) +#define NET_DVR_GET_RECORDCFG_V40 1008 //获取录像参数(扩展) +#define NET_DVR_SET_RECORDCFG_V40 1009 //设置录像参数(扩展) + +//9000DDNS参数配置(NET_DVR_DDNSPARA_V30结构) +#define NET_DVR_GET_DDNSCFG_V30 1010 //获取DDNS(9000扩展) +#define NET_DVR_SET_DDNSCFG_V30 1011 //设置DDNS(9000扩展) + +//EMAIL功能(NET_DVR_EMAILCFG_V30结构) +#define NET_DVR_GET_EMAILCFG_V30 1012 //获取EMAIL参数 +#define NET_DVR_SET_EMAILCFG_V30 1013 //设置EMAIL参数 + +#define NET_DVR_GET_NETCFG_V50 1015 //获取网络参数配置(V50) +#define NET_DVR_SET_NETCFG_V50 1016 //设置网络参数配置(V50) + +#define NET_GET_CRUISEPOINT_V40 1018 //获取巡航路径配置 + +//巡航参数 (NET_DVR_CRUISE_PARA结构) +#define NET_DVR_GET_CRUISE 1020 +#define NET_DVR_SET_CRUISE 1021 + + +//报警输入结构参数 (NET_DVR_ALARMINCFG_V30结构) +#define NET_DVR_GET_ALARMINCFG_V30 1024 +#define NET_DVR_SET_ALARMINCFG_V30 1025 + +//报警输出结构参数 (NET_DVR_ALARMOUTCFG_V30结构) +#define NET_DVR_GET_ALARMOUTCFG_V30 1026 +#define NET_DVR_SET_ALARMOUTCFG_V30 1027 + +//视频输出结构参数 (NET_DVR_VIDEOOUT_V30结构) +#define NET_DVR_GET_VIDEOOUTCFG_V30 1028 +#define NET_DVR_SET_VIDEOOUTCFG_V30 1029 + + +/*该命令支持8条OSD的类型(即设备版本为V30以上时),并会通过设备版本的匹配, +同时兼容之前的NET_DVR_GET_SHOWSTRING 、NET_DVR_SET_SHOWSTRING 命令。(建议使用)*/ +//叠加字符结构参数 (NET_DVR_SHOWSTRING_V30结构) +#define NET_DVR_GET_SHOWSTRING_V30 1030 +#define NET_DVR_SET_SHOWSTRING_V30 1031 + +//异常结构参数 (NET_DVR_EXCEPTION_V30结构) +#define NET_DVR_GET_EXCEPTIONCFG_V30 1034 +#define NET_DVR_SET_EXCEPTIONCFG_V30 1035 + +//串口232结构参数 (NET_DVR_RS232CFG_V30结构) +#define NET_DVR_GET_RS232CFG_V30 1036 +#define NET_DVR_SET_RS232CFG_V30 1037 + +//网络硬盘接入结构参数 (NET_DVR_NET_DISKCFG结构) +#define NET_DVR_GET_NET_DISKCFG 1038 //网络硬盘接入获取 +#define NET_DVR_SET_NET_DISKCFG 1039 //网络硬盘接入设置 +//压缩参数 (NET_DVR_COMPRESSIONCFG_V30结构) +#define NET_DVR_GET_COMPRESSCFG_V30 1040 +#define NET_DVR_SET_COMPRESSCFG_V30 1041 + +//获取485解码器参数 (NET_DVR_DECODERCFG_V30结构) +#define NET_DVR_GET_DECODERCFG_V30 1042 //获取解码器参数 +#define NET_DVR_SET_DECODERCFG_V30 1043 //设置解码器参数 + +//获取预览参数 (NET_DVR_PREVIEWCFG_V30结构) +#define NET_DVR_GET_PREVIEWCFG_V30 1044 //获取预览参数 +#define NET_DVR_SET_PREVIEWCFG_V30 1045 //设置预览参数 + +//辅助预览参数 (NET_DVR_PREVIEWCFG_AUX_V30结构) +#define NET_DVR_GET_PREVIEWCFG_AUX_V30 1046 //获取辅助预览参数 +#define NET_DVR_SET_PREVIEWCFG_AUX_V30 1047 //设置辅助预览参数 + +//IP接入配置参数 (NET_DVR_IPPARACFG结构) +#define NET_DVR_GET_IPPARACFG 1048 //获取IP接入配置信息 +#define NET_DVR_SET_IPPARACFG 1049 //设置IP接入配置信息 + +//IP报警输入接入配置参数 (NET_DVR_IPALARMINCFG结构) +#define NET_DVR_GET_IPALARMINCFG 1050 //获取IP报警输入接入配置信息 +#define NET_DVR_SET_IPALARMINCFG 1051 //设置IP报警输入接入配置信息 + +//IP报警输出接入配置参数 (NET_DVR_IPALARMOUTCFG结构) +#define NET_DVR_GET_IPALARMOUTCFG 1052 //获取IP报警输出接入配置信息 +#define NET_DVR_SET_IPALARMOUTCFG 1053 //设置IP报警输出接入配置信息 + +//硬盘管理的参数获取 (NET_DVR_HDCFG结构) +#define NET_DVR_GET_HDCFG 1054 //获取硬盘管理配置参数 +#define NET_DVR_SET_HDCFG 1055 //设置硬盘管理配置参数 +//盘组管理的参数获取 (NET_DVR_HDGROUP_CFG结构) +#define NET_DVR_GET_HDGROUP_CFG 1056 //获取盘组管理配置参数 +#define NET_DVR_SET_HDGROUP_CFG 1057 //设置盘组管理配置参数 + +//设备编码类型配置(NET_DVR_COMPRESSION_AUDIO结构) +#define NET_DVR_GET_COMPRESSCFG_AUD 1058 //获取设备语音对讲编码参数 +#define NET_DVR_SET_COMPRESSCFG_AUD 1059 //设置设备语音对讲编码参数 + +//IP接入配置参数 (NET_DVR_IPPARACFG_V31结构) +#define NET_DVR_GET_IPPARACFG_V31 1060 //获取IP接入配置信息 +#define NET_DVR_SET_IPPARACFG_V31 1061 //设置IP接入配置信息 + +// 通道资源配置 (NET_DVR_IPPARACFG_V40结构) +#define NET_DVR_GET_IPPARACFG_V40 1062 // 获取IP接入配置 +#define NET_DVR_SET_IPPARACFG_V40 1063 // 设置IP接入配置 + +#define NET_DVR_GET_CCDPARAMCFG 1067 //IPC获取CCD参数配置 +#define NET_DVR_SET_CCDPARAMCFG 1068 //IPC设置CCD参数配置 + +#define NET_DVR_GET_IOINCFG 1070 //获取抓拍机IO输入参数 +#define NET_DVR_SET_IOINCFG 1071 //设置抓拍机IO输入参数 + +#define NET_DVR_GET_IOOUTCFG 1072 //获取抓拍机IO输出参数 +#define NET_DVR_SET_IOOUTCFG 1073 //设置抓拍机IO输出参数 + +#define NET_DVR_GET_FLASHCFG 1074 //获取IO闪光灯输出参数 +#define NET_DVR_SET_FLASHCFG 1075 //设置IO闪光灯输出参数 + +#define NET_DVR_GET_LIGHTSNAPCFG 1076 //获取抓拍机红绿灯参数 +#define NET_DVR_SET_LIGHTSNAPCFG 1077 //设置抓拍机红绿灯参数 + +#define NET_DVR_GET_MEASURESPEEDCFG 1078 //获取抓拍机测速参数 +#define NET_DVR_SET_MEASURESPEEDCFG 1079 //设置抓拍机测速参数 + +#define NET_DVR_GET_IMAGEOVERLAYCFG 1080//获取抓拍机图像叠加信息参数 +#define NET_DVR_SET_IMAGEOVERLAYCFG 1081//设置抓拍机图像叠加信息参数 + +#define NET_DVR_GET_SNAPCFG 1082//获取单IO触发抓拍功能配置 +#define NET_DVR_SET_SNAPCFG 1083//设置单IO触发抓拍功能配置 + +#define NET_DVR_GET_VTPPARAM 1084//获取虚拟线圈参数 +#define NET_DVR_SET_VTPPARAM 1085//设置虚拟线圈参数 + +#define NET_DVR_GET_SNAPENABLECFG 1086//获取抓拍机使能参数 +#define NET_DVR_SET_SNAPENABLECFG 1087//设置抓拍机使能参数 + +#define NET_DVR_GET_POSTEPOLICECFG 1088//获取卡口电警参数 +#define NET_DVR_SET_POSTEPOLICECFG 1089//设置卡口电警参数 + +#define NET_DVR_GET_JPEGCFG_V30 1090//获取抓图的JPEG参数(基线) +#define NET_DVR_SET_JPEGCFG_V30 1091//设置抓图的JPEG参数(基线) + +#define NET_DVR_GET_SPRCFG 1092//获取车牌识别参数 +#define NET_DVR_SET_SPRCFG 1093//设置车牌识别参数 +#define NET_DVR_GET_PLCCFG 1094//获取车牌亮度补偿参数 +#define NET_DVR_SET_PLCCFG 1095//设置车牌亮度补偿参数 + +#define NET_DVR_GET_DEVICESTATECFG 1096//获取设备当前状态参数 +#define NET_DVR_SET_CALIBRATE_TIME 1097//设置扩展时间校时 +#define NET_DVR_GET_CALIBRATE_TIME 1098//获取扩展时间校时 + +#define NET_DVR_GET_DEVICECFG_V40 1100//获取扩展设备参数 +#define NET_DVR_SET_DEVICECFG_V40 1101//设置扩展设备参数 + +#define NET_DVR_GET_ZEROCHANCFG 1102 //获取零通道压缩参数 +#define NET_DVR_SET_ZEROCHANCFG 1103 //设置零通道压缩参数 + +#define NET_DVR_GET_ZERO_PREVIEWCFG_V30 1104 // 获取零通道预览参数配置 +#define NET_DVR_SET_ZERO_PREVIEWCFG_V30 1105 // 设置零通道预览参数配置 + +#define NET_DVR_SET_ZERO_ZOOM 1106 //设置零通道的缩放配置 +#define NET_DVR_GET_ZERO_ZOOM 1107 //获取零通道的缩放配置 + +#define NET_DVR_NATASSOCIATECFG_GET 1110 //获取NAT功能相关信息 +#define NET_DVR_NATASSOCIATECFG_SET 1111 //设置NAT功能相关信息 + +#define NET_DVR_GET_SNMPCFG 1112 //获取SNMP参数 +#define NET_DVR_SET_SNMPCFG 1113 //设置SNMP参数 + +#define NET_DVR_GET_SNMPCFG_V30 1114 //获取SNMPv30参数 +#define NET_DVR_SET_SNMPCFG_V30 1115 //设置SNMPv30参数 + +#define NET_DVR_VIDEOPLATFORMALARMCFG_GET 1130 //获取视频综合平台报警配置 +#define NET_DVR_VIDEOPLATFORMALARMCFG_SET 1131 //设置视频综合平台报警配置 + +#define NET_DVR_GET_RAID_ADAPTER_INFO 1134 // 获取适配器信息 +#define NET_DVR_SET_RAID_ADAPTER_INFO 1135 // 设置适配器信息 + +#define NET_DVR_MATRIX_BIGSCREENCFG_GET 1140//获取大屏拼接参数 +#define NET_DVR_MATRIX_BIGSCREENCFG_SET 1141//设置大屏拼接参数 + +#define NET_DVR_GET_MB_PLATFORMPARA 1145 //获取平台登录参数 +#define NET_DVR_SET_MB_PLATFORMPARA 1146 //设置平台登录参数 +#define NET_DVR_GET_MB_DEVSTATUS 1147 //获取移动设备状态 + +#define NET_DVR_GET_DECODER_JOINT_CHAN 1151//获取解码关联通道 +#define NET_DVR_SET_DECODER_JOINT_CHAN 1152//设置解码关联通道 + +//多网卡配置 +#define NET_DVR_GET_NETCFG_MULTI 1161 //获取多网卡配置 +#define NET_DVR_SET_NETCFG_MULTI 1162 //设置多网卡配置 +#define NET_DVR_GET_NETCFG_MULTI_V50 1163 //获取多网卡配置(分组) +#define NET_DVR_SET_NETCFG_MULTI_V50 1164 //设置多网卡配置(分组) + +#define NET_DVR_GET_CMSPARA 1170//获取平台参数 +#define NET_DVR_SET_CMSPARA 1171//设置平台参数 +#define NET_DVR_GET_DIALSTATUS 1172//获取拨号状态参数 +#define NET_DVR_GET_SMSRELATIVEPARA 1173//获取短信相关参数 +#define NET_DVR_SET_SMSRELATIVEPARA 1174//设置短信相关参数 +#define NET_DVR_GET_PINSTATUS 1175//获取Pin状态 +#define NET_DVR_SET_PINCMD 1176//设置PIN命令 +#define NET_DVR_SET_SENSOR_CFG 1180//设置模拟量参数 +#define NET_DVR_GET_SENSOR_CFG 1181//获取模拟量参数 +#define NET_DVR_SET_ALARMIN_PARAM 1182//设置报警输入参数 +#define NET_DVR_GET_ALARMIN_PARAM 1183//获取报警输入参数 +#define NET_DVR_SET_ALARMOUT_PARAM 1184//设置报警输出参数 +#define NET_DVR_GET_ALARMOUT_PARAM 1185//获取报警输出参数 +#define NET_DVR_SET_SIREN_PARAM 1186//设置警号参数 +#define NET_DVR_GET_SIREN_PARAM 1187//获取警号参数 +#define NET_DVR_SET_ALARM_RS485CFG 1188//设置报警主机485参数 +#define NET_DVR_GET_ALARM_RS485CFG 1189//获取报警主机485参数 +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS 1190//获取报警主机主要状态 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS 1191//获取报警主机其他状态 +#define NET_DVR_SET_ALARMHOST_ENABLECFG 1192//获取报警主机使能状态 +#define NET_DVR_GET_ALARMHOST_ENABLECFG 1193//设置报警主机使能状态 +#define NET_DVR_SET_ALARM_CAMCFG 1194//设置视频综合平台报警触发CAM操作配置 +#define NET_DVR_GET_ALARM_CAMCFG 1195//设置视频综合平台报警触发CAM操作配置 +#define NET_DVR_GET_GATEWAY_CFG 1196//获取门禁参数配置 +#define NET_DVR_SET_GATEWAY_CFG 1197//设置门禁参数配置 + +#define NET_DVR_GET_ALARMDIALMODECFG 1198//获取报警主机拨号参数 +#define NET_DVR_SET_ALARMDIALMODECFG 1199//设置报警主机拨号参数 +#define NET_DVR_SET_ALARMIN_PARAM_V50 1200 // 设置防区参数V50 +#define NET_DVR_GET_ALARMIN_PARAM_V50 1201 // 获取防区参数V50 +#define NET_DVR_SET_WINCFG 1202//窗口参数设置 +#define NET_DVR_GET_ALARMHOSTDIALSETUPMODE 1204//获取报警主机拨号启用方式 +#define NET_DVR_SET_ALARMHOSTDIALSETUPMODE 1205//设置报警主机拨号启用方式 + +//视频报警主机海外版命令(视频报警主机 V1.3) +#define NET_DVR_SET_SUBSYSTEM_ALARM 1210 //设置子系统布/撤防 +#define NET_DVR_GET_SUBSYSTEM_ALARM 1211 //获取子系统布/撤防 +#define NET_DVR_GET_ALLOWLIST_ALARM 1215 //获取允许名单参数 +#define NET_DVR_SET_ALLOWLIST_ALARM 1216 //设置允许名单参数 +#define NET_DVR_GET_ALARMHOST_MODULE_LIST 1222 //获取所有模块 +#define NET_DVR_SET_PRIOR_ALARM 1223 //设置子系统布/撤防 +#define NET_DVR_GET_PRIOR_ALARM 1224 //获取子系统布/撤防 +#define NET_DVR_SET_TAMPER_ALARMIN_PARAM 1225 // 设置防区防拆参数 +#define NET_DVR_GET_TAMPER_ALARMIN_PARAM 1226 // 获取防区防拆参数 + +#define NET_DVR_GET_HOLIDAY_PARAM_CFG 1240// 获取节假日参数 +#define NET_DVR_SET_HOLIDAY_PARAM_CFG 1241// 设置节假日参数 + +#define NET_DVR_GET_MOTION_HOLIDAY_HANDLE 1242// 获取移动侦测假日报警处理方式 +#define NET_DVR_SET_MOTION_HOLIDAY_HANDLE 1243// 获取移动侦测假日报警处理方式 + +#define NET_DVR_GET_VILOST_HOLIDAY_HANDLE 1244// 获取视频信号丢失假日报警处理方式 +#define NET_DVR_SET_VILOST_HOLIDAY_HANDLE 1245// 获取视频信号丢失假日报警处理方式 + +#define NET_DVR_GET_HIDE_HOLIDAY_HANDLE 1246// 获取遮盖假日报警处理方式 +#define NET_DVR_SET_HIDE_HOLIDAY_HANDLE 1247// 设置遮盖假日报警处理方式 + +#define NET_DVR_GET_ALARMIN_HOLIDAY_HANDLE 1248// 获取报警输入假日报警处理方式 +#define NET_DVR_SET_ALARMIN_HOLIDAY_HANDLE 1249// 设置报警输入假日报警处理方式 +#define NET_DVR_GET_ALARMOUT_HOLIDAY_HANDLE 1250// 获取报警输出假日报警处理方式 +#define NET_DVR_SET_ALARMOUT_HOLIDAY_HANDLE 1251// 设置报警输出假日报警处理方式 +#define NET_DVR_GET_HOLIDAY_RECORD 1252// 获取假日录像参数 +#define NET_DVR_SET_HOLIDAY_RECORD 1253// 设置假日录像参数 +#define NET_DVR_GET_NETWORK_BONDING 1254// 获取BONDING网络参数 +#define NET_DVR_SET_NETWORK_BONDING 1255// 设置BONDING网络参数 +#define NET_DVR_GET_LINK_STATUS 1256// 获取通道IP工作状态 +#define NET_DVR_GET_DISK_QUOTA_CFG 1278// 获取磁盘配额信息 +#define NET_DVR_SET_DISK_QUOTA_CFG 1279// 设置磁盘配额信息 +#define NET_DVR_GET_JPEG_CAPTURE_CFG 1280// 获取DVR抓图配置 +#define NET_DVR_SET_JPEG_CAPTURE_CFG 1281// 设置DVR抓图配置 +#define NET_DVR_GET_SCHED_CAPTURECFG 1282// 获取抓图计划 +#define NET_DVR_SET_SCHED_CAPTURECFG 1283// 设置抓图计划 +#define NET_DVR_GET_VGA_PREVIEWCFG 1284// 获取VGA预览配置 +#define NET_DVR_SET_VGA_PREVIEWCFG 1285// 设置VGA预览配置 +#define NET_DVR_GET_VIDEO_INPUT_EFFECT 1286// 获取通道视频输入图像参数 +#define NET_DVR_SET_VIDEO_INPUT_EFFECT 1287// 设置通道视频输入图像参数 + +#define NET_DVR_GET_STORAGE_SERVER_SWITCH 1290//获取存储服务器开关状态 +#define NET_DVR_SET_STORAGE_SERVER_SWITCH 1291//设置存储服务器开关状态 + +#define NET_DVR_GET_DISK_QUOTA_CFG_V60 1292//获取磁盘配额信息V60 +#define NET_DVR_SET_DISK_QUOTA_CFG_V60 1293//设置磁盘配额信息V60 + +#define NET_DVR_GET_OPTICAL_CHANNEL 1300//获取光端子系统通道关联信息 +#define NET_DVR_SET_OPTICAL_CHANNEL 1301//设置光端子系统通道关联信息 +#define NET_DVR_GET_FIBER_CASCADE 1302//获取光纤级联模式 +#define NET_DVR_SET_FIBER_CASCADE 1303//设置光纤级联模式 +#define NET_DVR_GET_SPARTAN_STATUS 1304//获取畅显状态 +#define NET_DVR_SET_SPARTAN_STATUS 1305//设置畅显状态 +#define NET_DVR_GET_ETHERNET_CHANNEL 1306//获取端口聚合参数 +#define NET_DVR_SET_ETHERMET_CHANNEL 1307//设置端口聚合参数 +#define NET_DVR_OPTICAL_REBOOT 1320//光端机重启 +#define NET_DVR_SET_AUDIOCHAN_CFG 1321//设置音频切换参数 +#define NET_DVR_GET_AUDIOCHAN_CFG 1322//获取音频切换参数 +//SDI矩阵1.0 +#define NET_DVR_SET_MATRIX_BASE_CFG 1332 //设置矩阵基本参数 +#define NET_DVR_GET_MATRIX_BASE_CFG 1333 //获取矩阵基本参数 +#define NET_DVR_SWITCH_MATRIX_IO 1334 //矩阵输入输出切换 +#define NET_DVR_GET_MATRIX_IO_RELATION 1335 //获取矩阵输入输入关联关系 + +#define NET_DVR_V6PSUBSYSTEMARAM_GET 1501//获取V6子系统配置 +#define NET_DVR_V6PSUBSYSTEMARAM_SET 1502//设置V6子系统配置 +#define NET_DVR_GET_ALLWINCFG 1503 //窗口参数获取 + +#define NET_DVR_BIGSCREENASSOCIATECFG_GET 1511 //获取大屏关联配置 +#define NET_DVR_BIGSCREENASSOCIATECFG_SET 1512 //设置大屏关联配置 + +//1200起 +#define NET_DVR_GETSCREENINFO 1601 //获取大屏信息配置 +#define NET_DVR_SETSCREENINFO 1602 //设置大屏信息配置 +#define NET_DVR_GET_SCREEN_WINCFG 1603//单个窗口参数获取 +#define NET_DVR_LAYOUTLIST_GET 1605//获取布局列表 +#define NET_DVR_SET_LAYOUTCFG 1606 //布局设置 +#define NET_DVR_LAYOUTCTRL 1607//布局控制,1-open,2-close +#define NET_DVR_INPUTLIST_GET 1608 //获取输入信号源列表 +#define NET_DVR_SET_INPUTSTREAMCFG 1609 //输入信号源设置 +#define NET_DVR_OUTPUT_SET 1610 //输出参数设置 +#define NET_DVR_OUTPUT_GET 1611 //输出参数获取 +#define NET_DVR_SET_OSDCFG 1612 //OSD参数设置 +#define NET_DVR_GET_OSDCFG 1613 //OSD参数获取 +#define NET_DVR_BIGSCREEN_GETSERIAL 1614//获取大屏串口信息 +#define NET_DVR_GET_PLANLIST 1615//获取预案列表 +#define NET_DVR_SET_PLAN 1616//设置预案 +#define NET_DVR_CTRL_PLAN 1617//控制预案 +#define NET_DVR_GET_DEVICE_RUN_STATUS 1618//获取设备运行状态 +#define NET_DVR_GET_EXTERNAL_MATRIX_CFG 1619//获取矩阵信息 +#define NET_DVR_SET_EXTERNAL_MATRIX_CFG 1620//设置矩阵信息 +#define NET_DVR_GET_OUTPUT_SCREEN_RELATION 1621//获取输出和屏幕的绑定关系 +#define NET_DVR_SET_OUTPUT_SCREEN_RELATION 1622//设置输出和屏幕的绑定关系 +#define NET_DVR_GET_VCS_USER_CFG 1623//获取用户信息配置 +#define NET_DVR_SET_VCS_USER_CFG 1624//设置用户信息配置 +#define NET_DVR_CONTROL_SCREEN 1625//屏幕控制 +#define NET_DVR_GET_EXTERNAL_MATRIX_CFG_V50 1626 //获取矩阵信息 +#define NET_DVR_SET_EXTERNAL_MATRIX_CFG_V50 1627 //设置矩阵信息 + +#define NET_DVR_GET_DEV_BASEINFO 1650//获取单个设备信息 +#define NET_DVR_SET_DEV_BASEINFO 1651//设置单个设备信息 +#define NET_DVR_GET_DEV_NETINFO 1652//获取设备的网络信息 +#define NET_DVR_SET_DEV_NETINFO 1653//设置设备的网络信息 +#define NET_DVR_GET_SIGNAL_SOURCE_INFO 1654//获取信号源信息 +#define NET_DVR_SET_SIGNAL_SOURCE_INFO 1655//设置信号源信息 +#define NET_DVR_ADJUST_PIC_V40 1656//图像微调 +#define NET_DVR_RESTORE_V40 1657//恢复默认参数 +#define NET_DVR_SET_NET_SIGNAL 1658//设置网络信号源 +#define NET_DVR_REBOOT_V40 1659//重启 +#define NET_DVR_CONTROL_PICTURE_V41 1660//图片控制V41 + +#define NET_DVR_GET_AUTO_REBOOT_CFG 1710//获取自动重启参数 +#define NET_DVR_SET_AUTO_REBOOT_CFG 1711//设置自动重启参数 +#define NET_DVR_GET_TRUNK_USE_STATE 1713//获取指定干线使用状态 +#define NET_DVR_SET_PTZ_CTRL_INFO 1714//设置PTZ控制参数 +#define NET_DVR_GET_PTZ_CTRL_INFO 1715//获取PTZ控制参数 +#define NET_DVR_GET_PTZ_STATUS 1716//获取PTZ状态 +#define NET_DVR_GET_DISP_ROUTE_LIST 1717//获取显示路径列表 + +#define NET_DVR_GET_DEC_RESOURCE_LIST 1720//获取可用解码资源列表 +#define NET_DVR_SET_DEC_RESOURCE_LIST 1721//预分配解码资源 +#define NET_DVR_GET_DEC_YUV 1722//获取解码通道关联YUV输出参数 +#define NET_DVR_SET_DEC_YUV 1723//设置解码通道关联YUV输出参数 +#define NET_DVR_GET_DEC_RESOUCE 1724//向视频综合平台申请解码资源 +#define NET_DVR_FREE_DEC_RESOURCE 1725//释放解码资源 + +#define NET_DVR_SET_VIDEOWALLDISPLAYMODE 1730//设置电视墙拼接模式 +#define NET_DVR_GET_VIDEOWALLDISPLAYMODE 1731//获取电视墙拼接模式 +#define NET_DVR_GET_VIDEOWALLDISPLAYNO 1732//获取设备显示输出号 +#define NET_DVR_SET_VIDEOWALLDISPLAYPOSITION 1733//设置显示输出位置参数 +#define NET_DVR_GET_VIDEOWALLDISPLAYPOSITION 1734//获取显示输出位置参数 +#define NET_DVR_GET_VIDEOWALLWINDOWPOSITION 1735//获取电视墙窗口参数 +#define NET_DVR_SET_VIDEOWALLWINDOWPOSITION 1736//设置电视墙窗口参数 +#define NET_DVR_VIDEOWALLWINDOW_CLOSEALL 1737//电视墙关闭所有窗口 +#define NET_DVR_SET_VIRTUALLED 1738//虚拟LED设置 +#define NET_DVR_GET_VIRTUALLED 1739//虚拟LED获取 +#define NET_DVR_GET_IMAGE_CUT_MODE 1740//获取图像切割模式 +#define NET_DVR_SET_IMAGE_CUT_MODE 1741//设置图像切割模式 +#define NET_DVR_GET_USING_SERIALPORT 1742//获取当前使用串口 +#define NET_DVR_SET_USING_SERIALPORT 1743//设置当前使用串口 +#define NET_DVR_SCENE_CONTROL 1744//场景控制 +#define NET_DVR_GET_CURRENT_SCENE 1745//获取当前场景号 +#define NET_DVR_GET_VW_SCENE_PARAM 1746//获取电视墙场景模式参数 +#define NET_DVR_SET_VW_SCENE_PARAM 1747//设置电视墙场景模式参数 +#define NET_DVR_DISPLAY_CHANNO_CONTROL 1748//电视墙显示编号控制 +#define NET_DVR_GET_WIN_DEC_INFO 1749//获取窗口解码信息(批量) +#define NET_DVR_RESET_VIDEOWALLDISPLAYPOSITION 1750 //解除电视墙输出接口绑定 +#define NET_DVR_SET_VW_AUDIO_CFG 1752 //设置音频切换参数 +#define NET_DVR_GET_VW_AUDIO_CFG 1753 //获取音频切换参数 +#define NET_DVR_GET_GBT28181_DECCHANINFO_CFG 1754 //获取GBT28181协议接入设备的解码通道信息 +#define NET_DVR_SET_GBT28181_DECCHANINFO_CFG 1755 //设置GBT28181协议接入设备的解码通道信息 +#define NET_DVR_SET_MAINBOARD_SERIAL 1756 //设置主控板串口参数 +#define NET_DVR_GET_MAINBOARD_SERIAL 1757 //获取主控板串口参数 +#define NET_DVR_GET_SUBBOARD_INFO 1758 //获取子板信息 +#define NET_DVR_GET_SUBBOARD_EXCEPTION 1759 //获取异常子板异常信息 + +#define NET_DVR_GET_CAMERACHAN_SERIALCFG 1760 //获取Camera通道绑定串口配置 +#define NET_DVR_SET_CAMERACHAN_SERIALCFG 1761 //设置Camera通道绑定串口配置 +#define NET_DVR_GET_MATRIX_STATUS 1762 //获取视频综合平台状态 +#define NET_SET_MULTIFUNCTION_SERIALCFG 1763 //设置多功能串口配置 +#define NET_GET_MULTIFUNCTION_SERIALCFG 1764 //获取多功能串口配置 +#define NET_DVR_PTZ_3D_SPEED 1765 // 3维带速度的云台控制 + +#define NET_DVR_GET_SIGNAL_JOINT 1766 //获取信号源绑定配置 +#define NET_DVR_SET_SIGNAL_JOINT 1767 //设置信号源绑定配置 +#define NET_DVR_SIGNAL_CUT 1768 //信号源裁剪 +#define NET_DVR_DYNAMIC_DECODE_BATCH 1769 //批量动态解码 +#define NET_DVR_DECSWITCH_SET_BATCH 1770 //批量设置解码通道开关 +#define NET_DVR_DECSWITCH_GET_BATCH 1771 //批量获取解码通道开关 +#define NET_DVR_GET_ALL_SIGNAL_JOINT 1772 //获取所有信号源绑定配置 +#define NET_DVR_GET_PLAYING_PLAN 1773 //获取正在执行预案 +#define NET_DVR_WALL_RELATION_GET 1774 //获取设备墙与物理墙的关联 +#define NET_DVR_WALL_RELATION_SET 1775 //设置设备墙与物理墙的关联 +#define NET_DVR_SET_INPUTSTREAMCFG_V40 1776 //输入信号源设置 +#define NET_DVR_PTZCFG_INPUTSTREAM_GET 1777 //获取输入源反向云台控制配置 +#define NET_DVR_PTZCFG_INPUTSTREAM_SET 1778 //设置输入源反向云台控制配置 +#define NET_DVR_SIGNAL_CUTPARAM_GET 1779 //获取信号源裁剪参数 + +#define NET_DVR_GET_SUBSYSTEM_NETCFG 1780 //获取子系统网卡参数 +#define NET_DVR_SET_SUBSYSTEM_NETCFG 1781 //设置子系统网卡参数 +#define NET_DVR_DEL_SIGNAL_JOINT 1782 //删除拼接信号源 + +#define NET_DVR_GET_PICTURE_INFO 1783 //获取图片信息 +#define NET_DVR_SET_PICTURE_INFO 1784 //设置图片信息 +#define NET_DVR_GET_VIDEO_INFO 1785 //获取视频信息 +#define NET_DVR_SET_VIDEO_INFO 1786 //设置视频信息 +#define NET_DVR_SET_PLAYLIST 1787 //设置播放列表 +#define NET_DVR_GET_PLAYLIST 1788 //获取播放列表 +#define NET_DVR_GET_ALL_PLAYLIST 1789 //获取所有播放列表 +#define NET_DVR_PLAYITEM_CONTROL 1790 //播放项操作 +#define NET_DVR_SET_PLAYPLAN_TEMPLATE 1791 //设置播放计划模板 +#define NET_DVR_GET_PLAYPLAN_TEMPLATE 1792 //获取播放计划 +#define NET_DVR_GET_ALL_PLAYPLAN_TEMPLATE 1793 //获取所有播放计划 +#define NET_DVR_SET_WINDOW_PLAYPLAN 1794 //设置窗口播放计划 +#define NET_DVR_GET_WINDOW_PLAYPLAN 1795 //获取窗口播放计划 +#define NET_DVR_TOPLAY_ITEM 1796 //指定播放 +#define NET_DVR_DEVICE_PLAY_CONTROL 1797 //设备播放控制 +#define NET_DVR_GET_PLAY_INFO 1798 //获取当前播放信息 +#define NET_DVR_GET_ALL_PICTURE_INFO 1799 //获取图片信息 +#define NET_DVR_GET_ALL_VIDEO_INFO 1800 //获取视频信息 +#define NET_DVR_DELETE_VIDEO_FILE 1801 //删除视频 + + +#define NET_DVR_GET_ALARMHOSTSUBSYSTEM_CFG 2001//报警主机获取子系统参数 +#define NET_DVR_SET_ALARMHOSTSUBSYSTEM_CFG 2002//报警主机设置子系统参数 +#define NET_DVR_GETEXTENDALARMININFO 2003//获取防区编号信息 +#define NET_DVR_MODIFYALARMINNO 2004//修改防区编号信息 +#define NET_DVR_GET_ALARMHOST_WIRELESS_NETWORK_CFG 2005//获取无线网络参数配置 +#define NET_DVR_SET_ALARMHOST_WIRELESS_NETWORK_CFG 2006//设置无线网络参数配置 +#define NET_DVR_GET_ALARMHOST_NETCFG 2007//获取网络参数配置 +#define NET_DVR_SET_ALARMHOST_NETCFG 2008//设置网络参数配置 +#define NET_DVR_GET_LED_SCREEN_CFG 2009// 获取LED屏幕参数 +#define NET_DVR_SET_LED_SCREEN_CFG 2010// 设置LED屏幕参数 +#define NET_DVR_GET_LED_CONTENT_CFG 2011// 获取LED屏显内容 +#define NET_DVR_SET_LED_CONTENT_CFG 2012// 设置LED屏显内容 +#define NET_DVR_TURNON_LED 2013// 打开LED屏 +#define NET_DVR_TURNOFF_LED 2014// 关闭LED屏 +#define NET_DVR_GET_LED_TIMER_SWITCH 2015// 获取LED屏定时开关参数 +#define NET_DVR_SET_LED_TIMER_SWITCH 2016// 设置LED屏定时开关参数 +#define NET_DVR_SET_LED_BRIGHTNESS 2017// 手动设置LED屏亮度 +#define NET_DVR_GET_LED_TIMER_BRIGHTNESS 2018//设置分时LED屏亮度 +#define NET_DVR_SET_LED_TIMER_BRIGHTNESS 2019//获取分时LED屏亮度 +#define NET_DVR_LED_CHECKTIME 2020//LED校时 +#define NET_DVR_GET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2021//获取音频报警事件 +#define NET_DVR_SET_ALARMHOST_AUDIO_ASSOCIATE_ALARM 2022//设置音频报警事件 +#define NET_DVR_GET_LED_STATUS 2023//获取LED屏状态 +#define NET_DVR_CLOSE_SUBSYSTEM_FAULT_ALARM 2027//关闭子系统故障提示音 +#define NET_DVR_SET_SUBSYSTEM_BYPASS 2028//子系统旁路 +#define NET_DVR_CANCEL_SUBSYSTEM_BYPASS 2029//子系统旁路恢复 + +#define NET_DVR_GET_ALARMHOST_SUBSYSTEM_CFG_EX 2030//获取子系统扩展参数 +#define NET_DVR_SET_ALARMHOST_SUBSYSTEM_CFG_EX 2031//设置子系统扩展参数 +#define NET_DVR_GET_ALARMHOST_PRINTER_CFG 2032//获取打印机打印使能 +#define NET_DVR_SET_ALARMHOST_PRINTER_CFG 2033//设置打印机打印使能 +#define NET_DVR_GET_ALARMHOST_ZONE_LIST_IN_SUBSYSTEM 2034//获取指定子系统内的所有防区 +#define NET_DVR_GET_ALARMHOST_TRIGGER_LIST 2035//获取所有触发器 +#define NET_DVR_ARM_ALARMHOST_SUBSYSTEM 2036//按布防类型对子系统布防 +#define NET_DVR_GET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2037// 获取事件触发报警输出配置 +#define NET_DVR_SET_ALARMHOST_EVENT_TRIG_ALARMOUT_CFG 2038// 设置事件触发报警输出配置 +#define NET_DVR_GET_ALARMHOST_FAULT_CFG 2039// 获取故障处理配置 +#define NET_DVR_SET_ALARMHOST_FAULT_CFG 2040// 设置故障处理配置 +#define NET_DVR_SEARCH_ARMHOST_EXTERNAL_MODULE 2041//自动搜索 +#define NET_DVR_REGISTER_ALARMHOST_EXTERNAL_MODULE 2042//自动注册 +#define NET_DVR_CLOSE_ALARMHOST_OVERALL_FAULT_ALARM 2043//关闭全局故障提示音 + +#define NET_DVR_GET_SAFETYCABIN_WORK_MODE 2044 //获取防护舱工作模式参数 +#define NET_DVR_SET_SAFETYCABIN_WORK_MODE 2045 //设置防护舱工作模式参数 +#define NET_DVR_GET_SAFETYCABIN_PERSON_SIGNAL_CFG 2046 //获取防护舱人信号探测参数 +#define NET_DVR_SET_SAFETYCABIN_PERSON_SIGNAL_CFG 2047 //设置防护舱人信号探测参数 + +#define NET_DVR_GET_ALARMHOST_MODULE_CFG 2048//获取模块信息 +//#define NET_DVR_SET_ALARMHOST_MODULE_CFG 2049//设置模块信息(预留) + +#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_STATE 2050//获取485外接设备状态 +#define NET_DVR_SET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2051//设置外接设备报警限值 +#define NET_DVR_GET_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE 2052//获取外接设备报警限值 +#define NET_DVR_GET_ALARMHOST_SENSOR_JOINT_CFG 2053// 获取模拟量关联配置 +#define NET_DVR_SET_ALARMHOST_SENSOR_JOINT_CFG 2054// 设置模拟量关联配置 +#define NET_DVR_SET_ALARMHOST_RS485_SLOT_CFG 2055// 设置报警主机485槽位参数 +#define NET_DVR_GET_ALARMHOST_RS485_SLOT_CFG 2056// 获取报警主机485槽位参数 + +#define NET_DVR_GET_ALL_VARIABLE_INFO 2057 // 获取所有变量元素信息 +#define NET_DVR_GET_ALARM_POINT_CFG 2058 // 获取点号信息 +#define NET_DVR_SET_ALARM_POINT_CFG 2059 // 设置点号信息 +#define NET_DVR_GET_HISTORY_VALUE 2060 // 获取历史数据 +#define NET_DVR_GET_ALARMHOST_ALARM_MODE 2061 // 获取数据上传方式 +#define NET_DVR_SET_ALARMHOST_ALARM_MODE 2062 // 设置数据上传方式 +#define NET_DVR_GET_ALARMHOST_SENSOR_VALUE 2063 // 获取模拟量实时数据 + +#define NET_DVR_GET_ALARMHOST_REPORT_CENTER_V40 2064 // 获取数据上传方式 +#define NET_DVR_SET_ALARMHOST_REPORT_CENTER_V40 2065 // 设置数据上传方式 +#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG 2068 // 获取时控输出参数 +#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG 2069 // 设置时控输出参数 +#define NET_DVR_GET_CMS_CFG 2070 +#define NET_DVR_SET_CMS_CFG 2071 + +#define NET_DVR_GET_PASSTHROUGH_CAP 2073 //获取设备透传能力集 + +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V40 2072 // 获取主要状态V40 +#define NET_DVR_GET_ALARMHOST_MAIN_STATUS_V51 2083 // 获取主要状态V51 + +/*************************************视频报警主机1.3 begin*************************************/ +#define NET_DVR_GET_ALARM_CAPTRUE_CFG 2074 //获取报警抓图参数配置 +#define NET_DVR_SET_ALARM_CAPTRUE_CFG 2075 //设置报警抓图参数配置 +#define NET_DVR_GET_ONE_OUTPUT_SCH_RULECFG_V40 2078 // 获取单个时控输出参数V40 +#define NET_DVR_SET_ONE_OUTPUT_SCH_RULECFG_V40 2079 // 设置单个时控输出参数V40 +#define NET_DVR_GET_OUTPUT_SCHEDULE_RULECFG_V40 2080 // 获取时控输出参数V40 +#define NET_DVR_SET_OUTPUT_SCHEDULE_RULECFG_V40 2081 // 设置时控输出参数V40 +#define NET_DVR_ALARMHOST_CLOSE_SUBSYSTEM 2082 //对子系统撤防操作 +/*************************************视频报警主机1.3 end**************************************/ + + +#define NET_DVR_GET_WEEK_PLAN_CFG 2100 //获取门状态周计划参数 +#define NET_DVR_SET_WEEK_PLAN_CFG 2101 //设置门状态周计划参数 +#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_PLAN 2102 //获取门状态假日计划参数 +#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_PLAN 2103 //设置门状态假日计划参数 +#define NET_DVR_GET_DOOR_STATUS_HOLIDAY_GROUP 2104 //获取门状态假日组参数 +#define NET_DVR_SET_DOOR_STATUS_HOLIDAY_GROUP 2105 //设置门状态假日组参数 +#define NET_DVR_GET_DOOR_STATUS_PLAN_TEMPLATE 2106 //获取门状态计划模板参数 +#define NET_DVR_SET_DOOR_STATUS_PLAN_TEMPLATE 2107 //设置门状态计划模板参数 +#define NET_DVR_GET_DOOR_CFG 2108 //获取门参数 +#define NET_DVR_SET_DOOR_CFG 2109 //设置门参数 +#define NET_DVR_GET_DOOR_STATUS_PLAN 2110 //获取门状态计划参数 +#define NET_DVR_SET_DOOR_STATUS_PLAN 2111 //设置门状态计划参数 +#define NET_DVR_GET_GROUP_CFG 2112 //获取群组参数 +#define NET_DVR_SET_GROUP_CFG 2113 //设置群组参数 +#define NET_DVR_GET_MULTI_CARD_CFG 2114 //获取多重卡参数 +#define NET_DVR_SET_MULTI_CARD_CFG 2115 //设置多重卡参数 +#define NET_DVR_GET_CARD_CFG 2116 //获取卡参数 +#define NET_DVR_SET_CARD_CFG 2117 //设置卡参数 +#define NET_DVR_CLEAR_ACS_PARAM 2118 //清空门禁主机参数 +#define NET_DVR_GET_SNEAK_CFG 2119 //获取反潜回参数 +#define NET_DVR_SET_SNEAK_CFG 2120 //设置反潜回参数 +#define NET_DVR_GET_MULTI_DOOR_INTERLOCK_CFG 2121 //获取多门互锁参数 +#define NET_DVR_SET_MULTI_DOOR_INTERLOCK_CFG 2122 //设置多门互锁参数 +#define NET_DVR_GET_ACS_WORK_STATUS 2123 //获取门禁主机工作状态 +#define NET_DVR_GET_VERIFY_WEEK_PLAN 2124 //获取读卡器验证方式周计划参数 +#define NET_DVR_SET_VERIFY_WEEK_PLAN 2125 //设置读卡器验证方式周计划参数 +#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN 2126 //获取卡权限周计划参数 +#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN 2127 //设置卡权限周计划参数 +#define NET_DVR_GET_VERIFY_HOLIDAY_PLAN 2128 //获取读卡器验证方式假日计划参数 +#define NET_DVR_SET_VERIFY_HOLIDAY_PLAN 2129 //设置读卡器验证方式假日计划参数 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN 2130 //获取卡权限假日计划参数 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN 2131 //设置卡权限假日计划参数 +#define NET_DVR_GET_VERIFY_HOLIDAY_GROUP 2132 //获取读卡器验证方式假日组参数 +#define NET_DVR_SET_VERIFY_HOLIDAY_GROUP 2133 //设置读卡器验证方式假日组参数 +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP 2134 //获取卡权限假日组参数 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP 2135 //设置卡权限假日组参数 +#define NET_DVR_GET_VERIFY_PLAN_TEMPLATE 2136 //获取读卡器验证方式计划模板参数 +#define NET_DVR_SET_VERIFY_PLAN_TEMPLATE 2137 //设置读卡器验证方式计划模板参数 +#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE 2138 //获取卡权限计划模板参数 +#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE 2139 //设置卡权限计划模板参数 +#define NET_DVR_GET_CARD_READER_CFG 2140 //获取读卡器参数 +#define NET_DVR_SET_CARD_READER_CFG 2141 //设置读卡器参数 +#define NET_DVR_GET_CARD_READER_PLAN 2142 //获取读卡器验证计划参数 +#define NET_DVR_SET_CARD_READER_PLAN 2143 //设置读卡器验证计划参数 +#define NET_DVR_GET_CASE_SENSOR_CFG 2144 //获取事件触发器参数 +#define NET_DVR_SET_CASE_SENSOR_CFG 2145 //设置事件触发器参数 +#define NET_DVR_GET_CARD_READER_ANTI_SNEAK_CFG 2146 //获取读卡器反潜回参数 +#define NET_DVR_SET_CARD_READER_ANTI_SNEAK_CFG 2147 //设置读卡器反潜回参数 +#define NET_DVR_GET_PHONE_DOOR_RIGHT_CFG 2148 //获取手机关联门权限参数 +#define NET_DVR_SET_PHONE_DOOR_RIGHT_CFG 2149 //获取手机关联门权限参数 +#define NET_DVR_GET_FINGERPRINT_CFG 2150 //获取指纹参数 +#define NET_DVR_SET_FINGERPRINT_CFG 2151 //设置指纹参数 +#define NET_DVR_DEL_FINGERPRINT_CFG 2152 //删除指纹参数 +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG 2153 //获取事件卡号联动配置参数 +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG 2154 //设置事件卡号联动配置参数 +#define NET_DVR_GET_ANTI_SNEAK_HOST_CFG 2155 //获取主机组反潜回参数 +#define NET_DVR_SET_ANTI_SNEAK_HOST_CFG 2156 //设置主机组反潜回参数 +#define NET_DVR_GET_READER_ANTI_SNEAK_HOST_CFG 2157 //获取主机组读卡器反潜回参数 +#define NET_DVR_SET_READER_ANTI_SNEAK_HOST_CFG 2158 //设置主机组读卡器反潜回参数 +#define NET_DVR_GET_ACS_CFG 2159 //获取门禁主机参数 +#define NET_DVR_SET_ACS_CFG 2160 //设置门禁主机参数 +#define NET_DVR_GET_CARD_PASSWD_CFG 2161 //获取卡密码开门使能配置 +#define NET_DVR_SET_CARD_PASSWD_CFG 2162 //设置卡密码开门使能配置 +#define NET_DVR_GET_CARD_USERINFO_CFG 2163 //获取卡号关联用户信息参数 +#define NET_DVR_SET_CARD_USERINFO_CFG 2164 //设置卡号关联用户信息参数 + +#define NET_DVR_GET_ACS_EXTERNAL_DEV_CFG 2165 //获取门禁主机串口外设参数 +#define NET_DVR_SET_ACS_EXTERNAL_DEV_CFG 2166 //设置门禁主机串口外设参数 +#define NET_DVR_GET_PERSONNEL_CHANNEL_CFG 2167 //获取人员通道参数 +#define NET_DVR_SET_PERSONNEL_CHANNEL_CFG 2168 //设置人员通道参数 +#define NET_DVR_SET_PLATFORM_VERIFY_CFG 2169 //下发平台认证结果 +#define NET_DVR_GET_PERSON_STATISTICS_CFG 2170 //获取人数统计参数 +#define NET_DVR_SET_PERSON_STATISTICS_CFG 2171 //设置人数统计参数 +#define NET_DVR_GET_ACS_SCREEN_DISPLAY_CFG 2172 //获取屏幕字符串显示参数 +#define NET_DVR_SET_ACS_SCREEN_DISPLAY_CFG 2173 //设置屏幕字符串显示参数 +#define NET_DVR_GET_GATE_TIME_CFG 2174 //获取人员通道闸门时间参数 +#define NET_DVR_SET_GATE_TIME_CFG 2175 //设置人员通道闸门时间参数 +#define NET_DVR_GET_LOCAL_CONTROLLER_STATUS 2176 //获取就地控制器状态 +#define NET_DVR_GET_ONLINE_LOCAL_CONTROLLER 2177 //搜索在线就地控制器 +#define NET_DVR_GET_CARD_CFG_V50 2178 //获取新卡参数(V50) +#define NET_DVR_SET_CARD_CFG_V50 2179 //设置新卡参数(V50) +#define NET_DVR_GET_ACS_WORK_STATUS_V50 2180 //获取门禁主机工作状态(V50) +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V50 2181 //获取事件卡号联动配置参数(V50) +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V50 2182 //设置事件卡号联动配置参数(V50) +#define NET_DVR_GET_FINGERPRINT_CFG_V50 2183 //获取指纹参数V50 +#define NET_DVR_SET_FINGERPRINT_CFG_V50 2184 //设置指纹参数V50 + +#define NET_DVR_GET_SAFETYCABIN_STATE 2197 //获取防护舱状态 +#define NET_DVR_GET_RS485_CASCADE_CFG 2198 //获取Rs485级联设备配置 +#define NET_DVR_SET_RS485_CASCADE_CFG 2199 //设置Rs485级联设备配置 + +/*************************************视频报警主机2.0 begin*************************************/ +#define NET_DVR_GET_REMOTECONTROLLER_PERMISION_CFG 2200 //获取遥控器权限参数 +#define NET_DVR_SET_REMOTECONTROLLER_PERMISION_CFG 2201 //设置遥控器权限参数 +#define NET_DVR_GET_KEYBOARD_CFG 2202 //获取键盘参数配置 +#define NET_DVR_SET_KEYBOARD_CFG 2203 //设置键盘参数配置 +#define NET_DVR_GET_ALARMHOST_WIRELESS_BUSINNESS_INFO 2204 //无线业务查询 +#define NET_DVR_GET_ALL_REMOTECONTROLLER_LIST 2205 //获取所有遥控器 +#define NET_DVR_GET_PREVIEW_DELAY_CFG 2206 //获取延迟预览参数配置 +#define NET_DVR_SET_PREVIEW_DELAY_CFG 2207 //设置延迟预览参数配置 +#define NET_DVR_GET_ZONE_CHANNEL_LINKAGE_CFG 2208 //获取防区联动视频通道配置 +#define NET_DVR_SET_ZONE_CHANNEL_LINKAGE_CFG 2209 //设置防区联动视频通道配置 +#define NET_DVR_GET_CENTER_SERVER_CFG 2210 //获取报警中心服务器 +#define NET_DVR_SET_CENTER_SERVER_CFG 2211 //设置报警中心服务器 +/*************************************视频报警主机2.0 end**************************************/ + +/********************************一键式紧急报警产品V1.0.0 begin********************************/ +#define NET_DVR_GET_EMERGENCE_ALARM_PRODUCT_CAP 2212 //获取一键式紧急报警产品能力 +#define NET_DVR_GET_CALL_WAITTING_CFG_CAP 2213 //获取呼叫等待参数配置能力 +#define NET_DVR_GET_CALL_WAITTING_CFG 2214 //获取呼叫等待参数配置 +#define NET_DVR_SET_CALL_WAITTING_CFG 2215 //设置呼叫等待参数配置 +#define NET_DVR_GET_ALARM_LAMP_CFG_CAP 2216 //获取警灯参数配置能力 +#define NET_DVR_GET_ALARM_LAMP_CFG 2217 //获取警灯参数配置 +#define NET_DVR_SET_ALARM_LAMP_CFG 2218 //设置警灯参数配置 +#define NET_DVR_GET_VOICE_PROMPTION_CFG_CAP 2219 //获取语音提示配置能力 +#define NET_DVR_GET_VOICE_PROMPTION_CFG 2220 //获取语音提示配置 +#define NET_DVR_SET_VOICE_PROMPTION_CFG 2221 //设置语音提示配置 +#define NET_DVR_GET_EMERGENCE_ALARM_RESPONSE_CAP 2222 //获取紧急报警处理能力 +#define NET_DVR_EMERGENCE_ALARM_RESPONSE_CTRL 2223 //紧急报警处理控制 +/********************************一键式紧急报警产品V1.0.0 end**********************************/ + +//网络报警主机 V2.2 +#define NET_DVR_GET_ALARMHOST_NETCFG_V50 2224 //获取报警主机网络参数配置V50 +#define NET_DVR_SET_ALARMHOST_NETCFG_V50 2225 //设置报警主机网络参数配置V50 +#define NET_DVR_REGISTER_ALARM_RS485 2226 //RS485重新注册 +/**********************************动环报警主机V3.0****************************************/ + +#define NET_DVR_GET_ALARMIN_PARAM_LIST 2227 //获取防区参数列表 +//无线报警主机1.0.0 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V50 2228 //获取报警主机其他状态v50 +#define NET_DVR_GET_ALARMHOST_OTHER_STATUS_V51 2236 //获取报警主机其他状态V51 +#define NET_DVR_GET_ALARMIN_ASSOCIATED_CHAN_LIST 2229 //获取防区防区联动视频通道参数列表 +#define NET_DVR_GET_ALARMIN_TRIGGER 2230 //获取报警主机防区联动配置 +#define NET_DVR_SET_ALARMIN_TRIGGER 2231 //设置报警主机防区联动配置 +#define NET_DVR_GET_EMERGENCY_CALL_HELP_TRIGGER 2232 //获取报警主机紧急求助联动配置 +#define NET_DVR_SET_EMERGENCY_CALL_HELP_TRIGGER 2233 //设置报警主机紧急求助联动配置 +#define NET_DVR_GET_CONSULT_TRIGGER 2234 //获取报警主机业务咨询联动配置 +#define NET_DVR_SET_CONSULT_TRIGGER 2235 //设置报警主机业务咨询联动配置 +#define NET_DVR_GET_ALARMIN_PARAM_LIST_V50 2237 //获取防区参数列表V50 + +#define NET_DVR_GET_CARD_RIGHT_WEEK_PLAN_V50 2304 //获取卡权限周计划参数V50 +#define NET_DVR_SET_CARD_RIGHT_WEEK_PLAN_V50 2305 //设置卡权限周计划参数V50 + +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_PLAN_V50 2310 //获取卡权限假日计划参数V50 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_PLAN_V50 2311 //设置卡权限假日计划参数V50 + +#define NET_DVR_GET_CARD_RIGHT_HOLIDAY_GROUP_V50 2316 //获卡权限假日组参数V50 +#define NET_DVR_SET_CARD_RIGHT_HOLIDAY_GROUP_V50 2317 //设置卡权限假日组参数V50 + +#define NET_DVR_GET_CARD_RIGHT_PLAN_TEMPLATE_V50 2322 //获取卡权限计划模板参数V50 +#define NET_DVR_SET_CARD_RIGHT_PLAN_TEMPLATE_V50 2323//设置卡权限计划模板参数V50 + +/**********************************经济型指纹门禁产品V1.0 设备不做****************************************/ +#define NET_DVR_GET_SCHEDULE_INFO 2500 //获取排班信息 +#define NET_DVR_GET_ATTENDANCE_SUMMARY_INFO 2501 //获取考勤汇总信息 +#define NET_DVR_GET_ATTENDANCE_RECORD_INFO 2502 //获取考勤记录信息 +#define NET_DVR_GET_ABNORMAL_INFO 2503 //获取异常统计信息 +/**********************************经济型指纹门禁产品V1.0****************************************/ + +/*************************************视频门禁一体机1.0 begin**************************************/ +#define NET_DVR_CAPTURE_FINGERPRINT_INFO 2504 //采集指纹信息 +/*************************************视频门禁一体机1.0 end**************************************/ + +/*************************************嵌入式智能终端1.0 begin**************************************/ +#define NET_DVR_BULK_UPLOAD_BLOCKLIST_PICTURE 2520 //批量上传禁止名单图片 +#define NET_DVR_BULK_UPLOAD_ID_BLOCKLIST 2521 //批量上传身份证禁止名单 +#define NET_DVR_GET_FAILED_FACE_INFO 2522 //获取设备升级建模失败的人脸记录 +#define NET_DVR_GET_FACE_AND_TEMPLATE 2523 //获取人脸及模板数据 +#define NET_DVR_SET_FACE_AND_TEMPLATE 2524 //设置人脸及模板数据 +/*************************************嵌入式智能终端1.0 end**************************************/ + +/*************************************人脸识别门禁一体机1.0 begin**************************************/ +#define NET_DVR_GET_CARD_READER_CFG_V50 2505 //获取读卡器参数(V50) +#define NET_DVR_SET_CARD_READER_CFG_V50 2506 //设置读卡器参数(V50) +#define NET_DVR_GET_FACE_PARAM_CFG 2507 //获取人脸参数 +#define NET_DVR_SET_FACE_PARAM_CFG 2508 //设置人脸参数 +#define NET_DVR_DEL_FACE_PARAM_CFG 2509 //删除人脸参数 +#define NET_DVR_CAPTURE_FACE_INFO 2510 //采集人脸信息 +/*************************************人脸识别门禁一体机1.0 end**************************************/ +#define NET_DVR_GET_REGISTER_INFO 2511 //登记信息获取 + +#define NET_DVR_GET_SMSRELATIVEPARA_V50 2512 //获取短信相关参数 +#define NET_DVR_SET_SMSRELATIVEPARA_V50 2513 //设置短信相关参数 +#define NET_DVR_GET_ACS_EVENT 2514 //设备事件获取 +#define NET_DVR_GET_MULTI_CARD_CFG_V50 2515 //获取多重卡参数V50 +#define NET_DVR_SET_MULTI_CARD_CFG_V50 2516 //设置多重卡参数V50 +#define NET_DVR_DEL_FINGERPRINT_CFG_V50 2517 //删除指纹参数V50 +#define NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 2518 //获取事件卡号联动配置参数(V51) +#define NET_DVR_SET_EVENT_CARD_LINKAGE_CFG_V51 2519 //设置事件卡号联动配置参数(V51) + +#define NET_DVR_SET_EXAM_INFO 2530 //考试信息下发 +#define NET_DVR_SET_EXAMINEE_INFO 2531 //考生信息下发 +#define NET_DVR_SEARCH_EXAM_COMPARE_RESULT 2532 //考试比对结果查询 +#define NET_DVR_BULK_CHECK_FACE_PICTURE 2533 //批量校验人脸图片 +#define NET_DVR_JSON_CONFIG 2550 //JSON透传数据 +#define NET_DVR_FACE_DATA_RECORD 2551 //添加人脸数据到人脸库 +#define NET_DVR_FACE_DATA_SEARCH 2552 //查询人脸库中的人脸数据 +#define NET_DVR_FACE_DATA_MODIFY 2553 //修改人脸库中的人脸数据 +#define NET_DVR_CAPTURE_DATA_SEARCH 2554 //查询离线采集数据集中数据 +#define NET_DVR_SET_FORM_DATA 2555 //长连接设置表单数据 +#define NET_DVR_GET_FORM_DATA 2556 //长连接获取表单数据 + +#define NET_DVR_GET_CARD 2560 +#define NET_DVR_SET_CARD 2561 +#define NET_DVR_DEL_CARD 2562 +#define NET_DVR_GET_FINGERPRINT 2563 +#define NET_DVR_SET_FINGERPRINT 2564 +#define NET_DVR_DEL_FINGERPRINT 2565 +#define NET_DVR_GET_FACE 2566 +#define NET_DVR_SET_FACE 2567 + +#define NET_DVR_GET_ALL_ALARM_RS485CFG 2705 // 获取485参数 +#define NET_DVR_GET_ALL_ALARMHOST_RS485_SLOT_CFG 2706 // 获取所有报警主机485槽位参数 +#define NET_DVR_GET_DEVICE_SELF_CHECK_STATE 2707 //获取设备自检功能 +#define NET_DVR_GET_ALL_ALARM_POINT_CFG 2708 // 获取所有点号参数 +#define NET_DVR_GET_ALL_ALARM_SENSOR_CFG 2709 // 获取所有模拟量参数 +#define NET_DVR_GET_ALL_ALARM_SENSOR_JOINT 2710 //获取所有模拟量联动参数 +#define NET_DVR_GET_AIR_CONDITION_PARAM 2711 //获取空调参数 +#define NET_DVR_GET_OUT_SCALE_CFG 2712 //获取主辅口输出配置 +#define NET_DVR_SET_OUT_SCALE_CFG 2713 //设置主辅口输出配置 +#define NET_DVR_GET_ALARM_CHAN_ABLITITY 2714 //获取报警相关通道参 +/**********************************动环报警主机V3.0****************************************/ + +//动环报警主机D2000 V1.0 +#define NET_DVR_GET_ALARMCENTER_NETCFG 2715 //获取报警中心网络参数配置 +#define NET_DVR_SET_ALARMCENTER_NETCFG 2716 //获取报警中心网络参数配置 + + +#define NET_ITC_GET_TRIGGERCFG 3003 //获取触发参数 +#define NET_ITC_SET_TRIGGERCFG 3004 //设置触发参数 +#define NET_ITC_GET_IOOUT_PARAM_CFG 3005 //获取IO输出参数(3.1含之后版本) +#define NET_ITC_SET_IOOUT_PARAM_CFG 3006 //设置IO输出参数(3.1含之后版本) + +#define NET_DVR_GET_CAMERA_SETUPCFG 3007 //获取相机架设参数 +#define NET_DVR_SET_CAMERA_SETUPCFG 3008 //设置相机架设参数 + +#define NET_ITC_GET_TRIGGER_DEFAULTCFG 3013 //获取触发模式推荐参数 +#define NET_DVR_GET_STATUS_DETECTCFG 3015 //获取状态检测使能参数 +#define NET_DVR_SET_STATUS_DETECTCFG 3016 //设置状态检测使能参数 +#define NET_ITC_GET_VIDEO_TRIGGERCFG 3017 //获取视频电警触发参数 +#define NET_ITC_SET_VIDEO_TRIGGERCFG 3018 //设置视频电警触发参数 +#define NET_DVR_GET_TPS_ALARMCFG 3019 //获取交通统计报警参数 +#define NET_DVR_SET_TPS_ALARMCFG 3020 //设置交通统计报警参数 + + +#define NET_DVR_GET_REDAREACFG 3100 //获取红绿灯区域参数 +#define NET_DVR_SET_REDAREACFG 3101 //设置红绿灯区域参数 +#define NET_DVR_GET_TEST_SPOT 3102 //获取SPOT口测试总步数和当前第几步 +#define NET_DVR_SET_TEST_SPOT 3103 //设置SPOT口测试总步数和当前第几步 +#define NET_DVR_GET_CABINETCFG 3104 //机柜参数配置获取 +#define NET_DVR_SET_CABINETCFG 3105 //机柜参数配置设置 +#define NET_DVR_VEHICLE_CHECK_START 3106 //禁止名单稽查数据回传 +#define NET_DVR_SET_CAPTUREPIC_CFG 3107 //车载抓图配置设置命令 +#define NET_DVR_GET_CAPTUREPIC_CFG 3108 //车载抓图配置获取命令 +#define NET_DVR_SET_MOBILEPLATE_RECOG_CFG 3109 //车载车牌识别配置设置命令 +#define NET_DVR_GET_MOBILEPLATE_RECOG_CFG 3110 //车载车牌识别配置获取命令 +#define NET_DVR_SET_MOBILE_RADAR_CFG 3111 //车载雷达配置设置命令 +#define NET_DVR_GET_MOBILE_RADAR_CFG 3112 //车载雷达配置获取命令 +#define NET_DVR_SET_MOBILE_LOCALPLATECHK_CFG 3113 //车载禁止名单本地对比配置设置命令 +#define NET_DVR_GET_MOBILE_LOCALPLATECHK_CFG 3114 //车载禁止名单本地对比配置获取命令 + +#define NET_ITC_GET_ICRCFG 3115 //获取ICR配置切换 +#define NET_ITC_SET_ICRCFG 3116 //设置ICR配置切换 +#define NET_ITC_GET_RS485_ACCESSINFO 3117 //获取Rs485关联接入设备的信息 +#define NET_ITC_SET_RS485_ACCESSINFO 3118 //设置Rs485关联接入设备的信息 +#define NET_ITC_GET_EXCEPTIONCFG 3119 //获取异常参数 +#define NET_ITC_SET_EXCEPTIONCFG 3120 //设置异常参数 +#define NET_ITC_GET_FTPCFG 3121 //获取ITC FTP设置参数 +#define NET_ITC_SET_FTPCFG 3122 //设置ITC FTP设置参数 + +#define NET_DVR_VEHICLE_CONTROL_LIST_START 3123 //设置车辆禁止和允许名单信息 +#define NET_DVR_GET_ALL_VEHICLE_CONTROL_LIST 3124 //获取所有车辆禁止和允许名单信息 +#define NET_DVR_VEHICLE_DELINFO_CTRL 3125 //删除设备内禁止名单数据库信息 +#define NET_DVR_GET_ENTRANCE_PARAMCFG 3126 //获取出入口控制参数 +#define NET_DVR_SET_ENTRANCE_PARAMCFG 3127 //设置出入口控制参数 +#define NET_DVR_BARRIERGATE_CTRL 3128 //远程控制道闸 +#define NET_DVR_GATELAMP_CTRL 3129 //常亮灯功能 +#define NET_DVR_GET_CURTRIGGERMODE 3130 //获取设备当前触发模式 +#define NET_DVR_GET_GPSDATACFG 3131 //获取GPS参数 +#define NET_DVR_SET_GPSDATACFG 3132 //设置GPS参数 +#define NET_DVR_VEHICLELIST_CTRL_START 3133 //设置车辆禁止和允许名单信息 + +#define NET_DVR_GET_GUARDCFG 3134 //获取车牌识别检测计划 +#define NET_DVR_SET_GUARDCFG 3135 //设置车牌识别检测计划 +#define NET_DVR_GET_SNAPINFO_CFG 3136 //获取抓拍图片参数 +#define NET_DVR_SET_SNAPINFO_CFG 3137 //设置抓拍图片参数 +#define NET_DVR_GET_SNAPINFO_CFG_V40 3138 //获取抓拍图片参数扩展 +#define NET_DVR_SET_SNAPINFO_CFG_V40 3139 //设置抓拍图片参数扩展 +#define NET_DVR_SET_CURTRIGGERMODE 3140 //设置设备当前触发模式(仅IPC/D支持) +#define NET_DVR_GET_TRAFFIC_DATA 3141 //长连接获取交通数据 +#define NET_DVR_GET_TRAFFIC_FLOW 3142 //长连接获取交通流量 +#define NET_DVR_PARKING_VEHICLE_SEND 3143 //停车车辆信息下发 +#define NET_DVR_PARKING_CARD_SEND 3144 //停车卡下发 +#define NET_DVR_PARKING_CARD_CTRL 3145 //停车场停车卡控制接口 + +#define NET_DVR_GET_ALARMCTRL_CAPABILITIES 3146 //获取报警控制能力 +#define NET_DVR_SET_ALARMCTRL_CFG 3147 //设置报警控制 +#define NET_DVR_GET_ALARMCTRL_CFG 3148 //获取报警控制 + +#define NET_DVR_GET_AUDIO_INPUT 3201 //获取音频输入参数 +#define NET_DVR_SET_AUDIO_INPUT 3202 //设置音频输入参数 +#define NET_DVR_GET_CAMERA_DEHAZE_CFG 3203 //获取透雾参数配置 +#define NET_DVR_SET_CAMERA_DEHAZE_CFG 3204 //设置透雾参数配置 +#define NET_DVR_REMOTECONTROL_ALARM 3205 //远程控制遥控器布防 +#define NET_DVR_REMOTECONTROL_DISALARM 3206 //远程控制遥控器撤防 +#define NET_DVR_REMOTECONTROL_STUDY 3207 //远程控制遥控器学习 +#define NET_DVR_WIRELESS_ALARM_STUDY 3208 //远程控制无线报警学习 +#define NET_IPC_GET_AUX_ALARMCFG 3209 //获取辅助报警参数配置 +#define NET_IPC_SET_AUX_ALARMCFG 3210 //设置辅助报警参数配置 +#define NET_DVR_GET_PREVIEW_DISPLAYCFG 3211 //获取预览显示参数 +#define NET_DVR_SET_PREVIEW_DISPLAYCFG 3212 //设置预览显示参数 +#define NET_DVR_REMOTECONTROL_PTZ 3213 //远程控制PTZ +#define NET_DVR_REMOTECONTROL_PRESETPOINT 3214 //远程控制预置点 +#define NET_DVR_REMOTECONTROL_CRUISE 3215 //远程控制巡航 + +#define NET_DVR_GET_MULTI_STREAM_COMPRESSIONCFG 3216 //远程获取多码流压缩参数 +#define NET_DVR_SET_MULTI_STREAM_COMPRESSIONCFG 3217 //远程设置多码流压缩参数 + +#define NET_DVR_GET_WPSCFG 3218 //获取WPS参数 +#define NET_DVR_SET_WPSCFG 3219 //设置WPS参数 +#define NET_DVR_WPS_CONNECT 3220 //远程启用WPS连接 +#define NET_DVR_GET_DEVICE_PIN 3221 //获取设备PIN码 +#define NET_DVR_UPDATE_PIN 3223 //更新设备PIN码 +#define NET_DVR_GET_PRESETCFG 3224 //获取预置点参数 +#define NET_DVR_GET_PTZCRUISECFG 3225 //获取巡航路径参数 +#define NET_DVR_GET_PRESET_NUM 3226 //获取预置点个数 +#define NET_DVR_GET_PTZCRUISE_NUM 3227 //获取巡航路径个数 + +#define NET_DVR_GET_MOTION_TRACK_CFG 3228 //获取运动参数 +#define NET_DVR_SET_MOTION_TRACK_CFG 3229 //设置运动参数 +#define NET_DVR_CLEAR_IPC_PARAM 3230 //清空前端参数 +#define NET_DVR_GET_IPADDR_FILTERCFG 3232 //获取IP地址过滤参数 +#define NET_DVR_SET_IPADDR_FILTERCFG 3233 //设置IP地址过滤参数 + +#define NET_DVR_GET_LOGO_OVERLAYCFG 3234 //获取LOGO图片叠加参数 +#define NET_DVR_SET_LOGO_OVERLAYCFG 3235 //设置LOGO图片叠加参数 + +#define NET_DVR_GET_IPV6_LIST 3236 //获取网卡的全部IPV6地址信息 +#define NET_DVR_GET_AUDIOOUT_VOLUME 3237 //获取输出音频大小 +#define NET_DVR_SET_AUDIOOUT_VOLUME 3238 //设置输出音频大小 +#define NET_DVR_GET_FUZZY_UPGRADE 3239 //获取模糊升级匹配信息 + +#define NET_DVR_GET_BV_CORRECT_PARAM 3240 //获取相机校正参数 +#define NET_DVR_SET_BV_CORRECT_PARAM 3241 //设置相机校正参数 +#define NET_DVR_GET_OUTPUT_VIDEO_TYPE 3242 //获取输出视频类型 +#define NET_DVR_SET_OUTPUT_VIDEO_TYPE 3243 //设置输出视频类型 + +#define NET_DVR_FISHEYE_CFG 3244 //鱼眼长连接配置 +#define NET_DVR_GET_PTZ_POINT 3245 //获取PTZ点坐标 +#define NET_DVR_SET_PTZ_POINT 3246 //设置PTZ点坐标 +#define NET_DVR_REMOTECONTROL_DEV_PARAM 3247 //设置设备登录客户端参数 +#define NET_DVR_GET_FISHEYE_STREAM_STATUS 3248 //获取鱼眼码流状态 + +#define NET_DVR_GET_GBT28181_ACCESS_CFG 3249 //获取GBT28181协议接入配置 +#define NET_DVR_SET_GBT28181_ACCESS_CFG 3250 //设置GBT28181协议接入配置 +#define NET_DVR_GET_GBT28181_CHANINFO_CFG 3251 //获取GBT28181协议接入设备的通道信息 +#define NET_DVR_SET_GBT28181_CHANINFO_CFG 3252 //设置GBT28181协议接入设备的通道信息 +#define NET_DVR_GET_GBT28181_ALARMINCFG 3253 //获取GBT28181协议接入设备的报警信息 +#define NET_DVR_SET_GBT28181_ALARMINCFG 3254 //设置GBT28181协议接入设备的报警信息 +#define NET_DVR_GET_ISP_CAMERAPARAMCFG 3255 //获取ISP前端参数配置 +#define NET_DVR_SET_ISP_CAMERAPARAMCFG 3256 //设置ISP前端参数配置 +#define NET_DVR_GET_DEVSERVER_CFG 3257 //获取模块服务配置 +#define NET_DVR_SET_DEVSERVER_CFG 3258 //设置模块服务配置 + +//2013-11-25 +#define NET_DVR_GET_WIPERINFO_CFG 3259 //雨刷配置获取 +#define NET_DVR_SET_WIPERINFO_CFG 3260 //雨刷配置设置 +#define NET_DVR_GET_TRACK_DEV_PARAM 3261 //获取设备参数 +#define NET_DVR_SET_TRACK_DEV_PARAM 3262 //设置设备参数 +#define NET_DVR_GET_PTZ_TRACK_PARAM 3263 //获取PTZ参数 +#define NET_DVR_SET_PTZ_TRACK_PARAM 3264 //设置PTZ参数 +#define NET_DVR_GET_CENTER_POINT_CFG 3265 //获取中心点参数 +#define NET_DVR_SET_CENTER_POINT_CFG 3266 //设置中心点参数 +#define NET_DVR_GET_CENTER_POINT_CFG_CAPABILITIES 3267 //获取中心点参数能力 +#define NET_DVR_GET_FISHEYE_CAPABILITIES 3268 //获取鱼眼能力 + +#define NET_DVR_GET_BASICPARAMCFG 3270 //获取PTZ配置基本参数信息 +#define NET_DVR_SET_BASICPARAMCFG 3271 //设置PTZ配置基本参数信息 +#define NET_DVR_GET_PTZOSDCFG 3272 //获取PTZ OSD配置参数信息 +#define NET_DVR_SET_PTZOSDCFG 3273 //设置PTZ OSD配置参数信息 +#define NET_DVR_GET_POWEROFFMEMCFG 3274 //获取掉电记忆模式参数信息 +#define NET_DVR_SET_POWEROFFMEMCFG 3275 //设置掉电记忆模式参数信息 +#define NET_DVR_GET_LIMITCFG 3276 //获取限位参数配置信息 +#define NET_DVR_SET_LIMITCFG 3277 //设置限位参数配置信息 +#define NET_DVR_PTZLIMIT_CTRL 3278 //清除限位参数控制 + +#define NET_DVR_PTZ_CLEARCTRL 3279 //清除配置信息控制接口 +#define NET_DVR_GET_PRIORITIZECFG 3281 //获取云台优先配置信息 +#define NET_DVR_SET_PRIORITIZECFG 3282 //设置云台优先配置信息 +#define NET_DVR_PTZ_INITIALPOSITIONCTRL 3283 //零方位角控制 +#define NET_DVR_GET_PRIVACY_MASKSCFG 3285 //获取隐私遮蔽参数 +#define NET_DVR_SET_PRIVACY_MASKSCFG 3286 //设置隐私遮蔽参数 +#define NET_DVR_GET_PTZLOCKCFG 3287 //获取云台锁定信息 +#define NET_DVR_SET_PTZLOCKCFG 3288 //设置云台锁定信息 +#define NET_DVR_PTZ_ZOOMRATIOCTRL 3289 //设置倍率 +#define NET_DVR_GET_PTZLOCKINFO 3290 //获取云台锁定剩余秒数 +#define NET_DVR_GET_PRIVACY_MASKS_ENABLECFG 3291 //获取全局使能 +#define NET_DVR_SET_PRIVACY_MASKS_ENABLECFG 3292 //设置全局使能 +#define NET_DVR_GET_SMARTTRACKCFG 3293 //获取智能运动配置信息 +#define NET_DVR_SET_SMARTTRACKCFG 3294 //设置智能运动配置信息 +#define NET_DVR_GET_EPTZ_CFG 3295 //获取EPTZ参数 +#define NET_DVR_SET_EPTZ_CFG 3296 //设置EPTZ参数 +#define NET_DVR_GET_EPTZ_CFG_CAPABILITIES 3297 //获取EPTZ参数能力 + +#define NET_DVR_GET_LOW_LIGHTCFG 3303//获取快球低照度设置信息 +#define NET_DVR_SET_LOW_LIGHTCFG 3304//设置快球低照度设置信息 +#define NET_DVR_GET_FOCUSMODECFG 3305//获取快球聚焦模式信息 +#define NET_DVR_SET_FOCUSMODECFG 3306//设置快球聚焦模式信息 +#define NET_DVR_GET_INFRARECFG 3307//获取快球红外设置信息 +#define NET_DVR_SET_INFRARECFG 3308//设置快球红外设置信息 +#define NET_DVR_GET_AEMODECFG 3309//获取快球其他设置信息 +#define NET_DVR_SET_AEMODECFG 3310//设置快球其他设置信息 +#define NET_DVR_CONTROL_RESTORE_SUPPORT 3311 //恢复前端默认参数(参数能力中有的前端参数配置相关的都恢复) +#define NET_DVR_CONTROL_RESTART_SUPPORT 3312 //快球机芯重启 +#define NET_DVR_CONTROL_PTZ_PATTERN 3313//云台花样扫描 +#define NET_DVR_GET_PTZ_PARKACTION_CFG 3314//获取云台守望参数 +#define NET_DVR_SET_PTZ_PARKACTION_CFG 3315//设置云台守望参数 +#define NET_DVR_CONTROL_PTZ_MANUALTRACE 3316//手动定位 +#define NET_DVR_GET_ROI_DETECT_NUM 3349 //获取ROI检测区域编号数目 +#define NET_DVR_GET_ROI_DETECT 3350 //获取ROI检测区域配置 +#define NET_DVR_SET_ROI_DETECT 3351 //设置ROI检测区域配置 +#define NET_DVR_GET_FACE_DETECT 3352 //获取人脸侦测配置 +#define NET_DVR_SET_FACE_DETECT 3353 //设置人脸侦测配置 +#define NET_DVR_GET_CORRIDOR_MODE 3354 //获取走廊模式功能配置 +#define NET_DVR_SET_CORRIDOR_MODE 3355 //设置走廊模式功能配置 +#define NET_DVR_GET_SCENECHANGE_DETECTIONCFG 3356 //获取场景变更报警配置 +#define NET_DVR_SET_SCENECHANGE_DETECTIONCFG 3357 //设置场景变更报警配置 +#define NET_DVR_GET_TRAVERSE_PLANE_DETECTION 3360 +#define NET_DVR_SET_TRAVERSE_PLANE_DETECTION 3361 +#define NET_DVR_GET_FIELD_DETECTION 3362 //获取区域侦测配置 +#define NET_DVR_SET_FIELD_DETECTION 3363 //设置区域侦测配置 +#define NET_DVR_GET_DEFOCUSPARAM 3364 //获取虚焦侦测参数配置 +#define NET_DVR_SET_DEFOCUSPARAM 3365 //设置虚焦侦测参数配置 +#define NET_DVR_GET_AUDIOEXCEPTIONPARAM 3366 //获取音频异常配置 +#define NET_DVR_SET_AUDIOEXCEPTIONPARAM 3367 //设置音频异常配置 +#define NET_DVR_GET_CCDPARAMCFG_EX 3368 //获取CCD参数配置 +#define NET_DVR_SET_CCDPARAMCFG_EX 3369 //设置CCD参数配置 +#define NET_DVR_START_GET_INPUTVOLUME 3370//开始获取音量 +#define NET_DVR_SET_SCH_TASK 3380 //设置球机定时任务 +#define NET_DVR_GET_SCH_TASK 3381 //获取球机定时任务 +#define NET_DVR_SET_PRESET_NAME 3382 //设置预置点名称 +#define NET_DVR_GET_PRESET_NAME 3383 //获取预置点名称 +#define NET_DVR_SET_AUDIO_NAME 3384 //设置语音名称 +#define NET_DVR_GET_AUDIO_NAME 3385 //获取语音名称 +#define NET_DVR_RESUME_INITRACKPOS 3386 //恢复初始位 +#define NET_DVR_NTP_SERVER_TEST 3387 //NTP服务器测试 +#define NET_DVR_NAS_SERVER_TEST 3388 //NAS服务器测试 +#define NET_DVR_EMAIL_SERVER_TEST 3389 //Email服务器测试 +#define NET_DVR_FTP_SERVER_TEST 3390 //FTP服务器测试 +#define NET_DVR_IP_TEST 3391 //IP测试 +#define NET_DVR_GET_NET_DISKCFG_V40 3392 //网络硬盘接入获取v40 +#define NET_DVR_SET_NET_DISKCFG_V40 3393 //网络硬盘接入设置v40 +#define NET_DVR_GET_IOOUT_CFG 3394//获取补光灯参数 +#define NET_DVR_SET_IOOUT_CFG 3395//设置补光灯参数 +#define NET_DVR_GET_SIGNAL_SYNC 3396//获取信号灯同步配置参数 +#define NET_DVR_SET_SIGNAL_SYNC 3397//设置信号灯同步配置参数 + +#define NET_DVR_GET_EZVIZ_ACCESS_CFG 3398//获取EZVIZ接入参数 +#define NET_DVR_SET_EZVIZ_ACCESS_CFG 3399//设置EZVIZ接入参数 +#define NET_DVR_GET_SCHEDULE_AUTO_TRACK_CFG 3400//获取定时智能参数 +#define NET_DVR_SET_SCHEDULE_AUTO_TRACK_CFG 3401//设置定时智能参数 +#define NET_DVR_MAKE_I_FRAME 3402//强制I帧 +#define NET_DVR_GET_ALARM_RELATE 3403//获取报警联动通道功能参数 +#define NET_DVR_SET_ALARM_RELATE 3404//设置报警联动通道功能参数 +#define NET_DVR_GET_PDC_RULECFG_V42 3405 //设置人流量统计规则(扩展) +#define NET_DVR_SET_PDC_RULECFG_V42 3406 //获取人流量统计规则(扩展) +#define NET_DVR_GET_HEATMAP_CFG 3407 //设置热度图参数配置 +#define NET_DVR_SET_HEATMAP_CFG 3408 //获取热度图参数配置 +#define NET_DVR_REMOTECONTROL_LINEARSCAN 3409 //设置左右边界参数 2014-03-15 +#define NET_DVR_DPC_CTRL 3410//坏点校正控制 +#define NET_DVR_FFC_MANUAL_CTRL 3411//非均匀性校正(FFC)手动模式 +#define NET_DVR_FFC_BACKCOMP_CTRL 3412//非均匀性校正(FFC)背景补偿 +#define NET_DVR_GET_FOCUSING_POSITION_STATE 3413//获取聚焦到位状态参数 +#define NET_DVR_GET_PRIVATE_PROTOCOL_CFG 3414 //获取 私有关键信息上传配置接口配置 +#define NET_DVR_SET_PRIVATE_PROTOCOL_CFG 3415 //设置 私有关键信息上传配置接口配置 +#define NET_DVR_COMPLETE_RESTORE_CTRL 3420 //设置完全恢复出厂值 + +#define NET_DVR_CLOUDSTORAGE_SERVER_TEST 3421 //云存储服务器测试 +#define NET_DVR_PHONE_NUM_TEST 3422 //电话号码测试 +#define NET_DVR_GET_REMOTECONTROL_STATUS 3423 //获取无线布防状态 +#define NET_DVR_GET_MONITOR_LOCATION_INFO 3424 //获取显示点信息 +#define NET_DVR_SET_MONITOR_LOCATION_INFO 3425 //设置显示点信息 + + +#define NET_DVR_GET_SMART_CAPABILITIES 3500 //获取Smart能力 +#define NET_DVR_GET_EVENT_TRIGGERS_CAPABILITIES 3501 //获取事件触发能力 +#define NET_DVR_GET_REGION_ENTRANCE_CAPABILITIES 3502 //获取进入区域侦测能力 +#define NET_DVR_GET_REGION_ENTR_DETECTION 3503 //获取进入区域配置 +#define NET_DVR_SET_REGION_ENTR_DETECTION 3504 //设置进入区域配置 +#define NET_DVR_GET_REGION_ENTR_REGION 3505 //获取进入区域的单个区域配置 +#define NET_DVR_SET_REGION_ENTR_REGION 3506 //设置进入区域的单个区域配置 +#define NET_DVR_GET_REGION_ENTR_TRIGGER 3507 //获取进入区域联动配置 +#define NET_DVR_SET_REGION_ENTR_TRIGGER 3508 //设置进入区域联动配置 +#define NET_DVR_GET_REGION_ENTR_SCHEDULE 3509 //获取进入区域布防时间配置 +#define NET_DVR_SET_REGION_ENTR_SCHEDULE 3510 //设置进入区域布防时间配置 +#define NET_DVR_GET_REGION_EXITINT_CAPABILITIES 3511 //获取离开区域侦测能力 +#define NET_DVR_GET_REGION_EXITING_DETECTION 3512 //获取离开区域配置 +#define NET_DVR_SET_REGION_EXITING_DETECTION 3513 //设置离开区域配置 +#define NET_DVR_GET_REGION_EXITING_REGION 3514 //获取离开区域的单个区域配置 +#define NET_DVR_SET_REGION_EXITING_REGION 3515 //设置离开区域的单个区域配置 +#define NET_DVR_GET_REGION_EXIT_TRIGGER 3516 //获取离开区域联动配置 +#define NET_DVR_SET_REGION_EXIT_TRIGGER 3517 //设置离开区域联动配置 +#define NET_DVR_GET_REGION_EXIT_SCHEDULE 3518 //获取离开区域布防时间配置 +#define NET_DVR_SET_REGION_EXIT_SCHEDULE 3519 //设置离开区域布防时间配置 +#define NET_DVR_GET_LOITERING_CAPABILITIES 3520 //获取徘徊侦测能力 +#define NET_DVR_GET_LOITERING_DETECTION 3521 //获取徘徊侦测配置 +#define NET_DVR_SET_LOITERING_DETECTION 3522 //设置徘徊侦测配置 +#define NET_DVR_GET_LOITERING_REGION 3523 //获取徘徊的单个区域配置 +#define NET_DVR_SET_LOITERING_REGION 3524 //设置徘徊的单个区域配置 +#define NET_DVR_GET_LOITERING_TRIGGER 3525 //获取徘徊联动配置 +#define NET_DVR_SET_LOITERING_TRIGGER 3526 //设置徘徊联动配置 +#define NET_DVR_GET_LOITERING_SCHEDULE 3527 //获取徘徊布防时间配置 +#define NET_DVR_SET_LOITERING_SCHEDULE 3528 //设置徘徊布防时间配置 +#define NET_DVR_GET_GROUPDETECTION_CAPABILITIES 3529 //获取人员聚集侦测能力 +#define NET_DVR_GET_GROUP_DETECTION 3530 //获取人员聚集侦测配置 +#define NET_DVR_SET_GROUP_DETECTION 3531 //设置人员聚集侦测配置 +#define NET_DVR_GET_GROUPDETECTION_REGION 3532 //获取人员聚集的单个区域配置 +#define NET_DVR_SET_GROUPDETECTION_REGION 3533 //设置人员聚集的单个区域配置 +#define NET_DVR_GET_GROUPDETECTION_TRIGGER 3534 //获取人员聚集联动配置 +#define NET_DVR_SET_GROUPDETECTION_TRIGGER 3535 //设置人员聚集联动配置 +#define NET_DVR_GET_GROUPDETECTION_SCHEDULE 3536 //获取人员聚集布防时间配置 +#define NET_DVR_SET_GROUPDETECTION_SCHEDULE 3537 //设置人员聚集布防时间配置 +#define NET_DVR_GET_RAPIDMOVE_CAPABILITIES 3538 //获取快速运动侦测能力 +#define NET_DVR_GET_RAPIDMOVE_DETECTION 3539 //获取快速运动侦测配置 +#define NET_DVR_SET_RAPIDMOVE_DETECTION 3540 //设置快速运动侦测配置 +#define NET_DVR_GET_RAPIDMOVE_REGION 3541 //获取快速运动的单个区域配置 +#define NET_DVR_SET_RAPIDMOVE_REGION 3542 //设置快速运动的单个区域配置 +#define NET_DVR_GET_RAPIDMOVE_TRIGGER 3543 //获取快速运动联动配置 +#define NET_DVR_SET_RAPIDMOVE_TRIGGER 3544 //设置快速运动联动配置 +#define NET_DVR_GET_RAPIDMOVE_SCHEDULE 3545 //获取快速运动的布防时间配置 +#define NET_DVR_SET_RAPIDMOVE_SCHEDULE 3546 //设置快速运动的布防时间配置 +#define NET_DVR_GET_PATKING_CAPABILITIES 3547 //获取停车侦测能力 +#define NET_DVR_GET_PARKING_DETECTION 3548 //获取停车侦测配置 +#define NET_DVR_SET_PARKING_DETECTION 3549 //设置停车侦测配置 +#define NET_DVR_GET_PARKING_REGION 3550 //获取停车侦测的单个区域配置 +#define NET_DVR_SET_PARKING_REGION 3551 //设置停车侦测的单个区域配置 +#define NET_DVR_GET_PARKING_TRIGGER 3552 //获取停车侦测联动配置 +#define NET_DVR_SET_PARKING_TRIGGER 3553 //设置停车侦测联动配置 +#define NET_DVR_GET_PARKING_SCHEDULE 3554 //获取停车侦测的布防时间配置 +#define NET_DVR_SET_PARKING_SCHEDULE 3555 //设置停车侦测的布防时间配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_CAPABILITIES 3556 //获取物品遗留侦测能力 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_DETECTION 3557 //获取物品遗留侦测配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_DETECTION 3558 //设置物品遗留侦测配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_REGION 3559 //获取物品遗留侦测的单个区域配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_REGION 3560 //设置物品遗留侦测的单个区域配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_TRIGGER 3561 //获取物品遗留侦测联动配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_TRIGGER 3562 //设置物品遗留侦测联动配置 +#define NET_DVR_GET_UNATTENDED_BAGGAGE_SCHEDULE 3563 //获取物品遗留侦测的布防时间配置 +#define NET_DVR_SET_UNATTENDED_BAGGAGE_SCHEDULE 3564 //设置物品遗留侦测的布防时间配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_CAPABILITIES 3565 //获取物品拿取侦测能力 +#define NET_DVR_GET_ATTENDEDBAGGAGE_DETECTION 3566 //获取物品拿取侦测配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_DETECTION 3567 //设置物品拿取侦测配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_REGION 3568 //获取物品拿取侦测的单个区域配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_REGION 3569 //设置物品拿取侦测的单个区域配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_TRIGGER 3570 //获取物品拿取侦测联动配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_TRIGGER 3571 //设置物品拿取侦测联动配置 +#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE 3572 //获取物品遗留侦测的布防时间配置 +#define NET_DVR_SET_ATTENDEDBAGGAGE_SCHEDULE 3573 //设置物品拿取侦测的布防时间配置 +#define NET_DVR_GET_REGIONCLIP_CAPABILITIES 3574 //获取区域裁剪能力 +#define NET_DVR_GET_REGION_CLIP 3575 //获取区域裁剪配置 +#define NET_DVR_SET_REGION_CLIP 3576 //设置区域裁剪配置 +#define NET_DVR_GET_NETWORK_CAPABILITIES 3577 //获取网络能力 +#define NET_DVR_GET_WIRELESS_DIAL 3578 //获取无线参数配置 +#define NET_DVR_SET_WIRELESS_DIAL 3579 //设置无线参数配置 +#define NET_DVR_GET_WIRELESSDIAL_CAPABILITIES 3580 //获取无线拨号参数能力 +#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE 3581 //获取拨号计划配置 +#define NET_DVR_SET_WIRELESSDIAL_SCHEDULE 3582 //设置拨号计划配置 +#define NET_DVR_GET_WIRELESSDIAL_STATUS 3583 //获取拨号状态 +#define NET_DVR_GET_REGION_ENTRANCE_SCHEDULE_CAPABILITIES 3584 //获取进入区域侦测布防时间能力 +#define NET_DVR_GET_REGION_EXITING_SCHEDULE_CAPABILITIES 3585 //获取离开区域侦测布防时间能力 +#define NET_DVR_GET_LOITERING_SCHEDULE_CAPABILITIES 3586 //获取徘徊侦测布防时间能力 +#define NET_DVR_GET_GROUP_SCHEDULE_CAPABILITIES 3587 //获取人员聚集侦测布防时间能力 +#define NET_DVR_GET_RAPIDMOVE_SCHEDULE_CAPABILITIES 3588 //获取快速运动侦测布防时间能力 +#define NET_DVR_GET_PARKING_SCHEDULE_CAPABILITIES 3589 //获取停车侦测布防时间能力 +#define NET_DVR_GET_UNATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3590 //获取物品遗留侦测布防时间能力 +#define NET_DVR_GET_ATTENDEDBAGGAGE_SCHEDULE_CAPABILITIES 3591 //获取物品拿取侦测布防时间能力 +#define NET_DVR_GET_WIRELESSDIAL_SCHEDULE_CAPABILITIES 3592 //获取拨号计划能力 +#define NET_DVR_WIRELESSDIAL_CONNECT 3593 //控制无线网络连网断网 + +#define NET_DVR_GET_LITESTORAGE 3594 //获取轻存储配置 +#define NET_DVR_SET_LITESTORAGE 3595 //设置轻存储配置 +#define NET_DVR_GET_LITESTORAGE_CAPABILITIES 3596 //获取轻存储能力 + +#define NET_DVR_GET_VEHICLE_CAPABILITIES 3597 //获取车俩检测标定能力 +#define NET_DVR_GET_VEHICLE_CALIBRATION 3598 //获取车辆检测标定 + +#define NET_DVR_GET_SLAVECAMERA_CAPABILITIES 3599 //获取从摄像机IP信息配置能力 +#define NET_DVR_GET_SLAVECAMERA 3600 //获取从摄像机IP信息配置 +#define NET_DVR_SET_SLAVECAMERA 3601 //设置从摄像机IP信息配置 +#define NET_DVR_GET_SLAVECAMERA_STATUS 3602 //获取从摄像机连接状态 +#define NET_DVR_GET_SLAVECAMERA_CALIB_CAPABILITIES 3603 //获取从摄像机配置&&标定能力 +#define NET_DVR_GET_SLAVECAMERA_CALIB 3604 //获取从摄像机标定配置 +#define NET_DVR_SET_SLAVECAMERA_CALIB 3605 //设置从摄像机标定配置 +#define NET_DVR_GET_PHY_RATIO 3606 //获取物理倍率坐标信息 +#define NET_DVR_SET_PHY_RATIO 3607 //设置物理倍率坐标信息 +#define NET_DVR_GET_MASTERSLAVETRACKING_CAPABILITIES 3608 //获取主从能力 +#define NET_DVR_SET_TRACKINGRATIO 3610 //设置从摄像机倍率 +#define NET_DVR_GET_TRACKING 3611 //获取主从功能相机配置 +#define NET_DVR_SET_TRACKING 3612 //设置主从功能相机配置 +#define NET_DVR_GET_TRACKING_CAPABILITIES 3613 //获取主从功能相机配置能力 + +#define NET_DVR_GET_SLAVECAMERA_CALIB_V50 3614 //获取从摄像机标定配置V50 +#define NET_DVR_SET_SLAVECAMERA_CALIB_V50 3615 //设置从摄像机标定配置V50 +#define NET_DVR_SET_TRACKINGRATIO_MANUAL 3616 //设置从摄像机手动倍率 +#define NET_DVR_GET_TRACKINGRATIO_MANUAL 3617 //获取从摄像机手动倍率 +#define NET_DVR_SET_TRACK_INITPOSTION 3618 //设置从摄像机初始位置 +#define NET_DVR_GET_PTZ_CAPABILITIES 3619 //获取ptz球机控制能力 + +#define NET_DVR_GET_THERMOMETRY_BASICPARAM_CAPABILITIES 3620 //获取测温配置能力 +#define NET_DVR_GET_THERMOMETRY_BASICPARAM 3621 //获取测温配置参数 +#define NET_DVR_SET_THERMOMETRY_BASICPARAM 3622 //设置测温配置参数 +#define NET_DVR_GET_THERMOMETRY_SCENE_CAPABILITIES 3623 //获取测温预置点关联配置能力 +#define NET_DVR_GET_THERMOMETRY_PRESETINFO 3624 //获取测温预置点关联配置参数 +#define NET_DVR_SET_THERMOMETRY_PRESETINFO 3625 //设置测温预置点关联配置参数 +#define NET_DVR_GET_THERMOMETRY_ALARMRULE_CAPABILITIES 3626//获取测温报警方式配置能力 +#define NET_DVR_GET_THERMOMETRY_ALARMRULE 3627 //获取测温预置点报警规则配置参数 +#define NET_DVR_SET_THERMOMETRY_ALARMRULE 3628 //设置测温预置点报警规则配置参数 +#define NET_DVR_GET_REALTIME_THERMOMETRY 3629 //实时温度检测 +#define NET_DVR_GET_THERMOMETRY_DIFFCOMPARISON 3630 //获取测温预置点温差规则配置参数 +#define NET_DVR_SET_THERMOMETRY_DIFFCOMPARISON 3631 //设置测温预置点温差规则配置参数 +#define NET_DVR_GET_THERMOMETRY_TRIGGER 3632 //获取测温联动配置 +#define NET_DVR_SET_THERMOMETRY_TRIGGER 3633 //设置测温联动配置 + +#define NET_DVR_GET_THERMAL_CAPABILITIES 3634 //获取热成像(Thermal)能力 +#define NET_DVR_GET_FIREDETECTION_CAPABILITIES 3635 //获取火点检测配置能力 +#define NET_DVR_GET_FIREDETECTION 3636 //获取火点检测参数 +#define NET_DVR_SET_FIREDETECTION 3637 //设置火点检测参数 +#define NET_DVR_GET_FIREDETECTION_TRIGGER 3638 //获取火点检测联动配置 +#define NET_DVR_SET_FIREDETECTION_TRIGGER 3639 //设置火点检测联动配置 + +#define NET_DVR_GET_OIS_CAPABILITIES 3640 //获取光学防抖参数配置能力 +#define NET_DVR_GET_OIS_CFG 3641 //获取光学防抖配置 +#define NET_DVR_SET_OIS_CFG 3642 //设置光学防抖配置 +#define NET_DVR_GET_MACFILTER_CAPABILITIES 3643 //获取MAC地址过滤配置能力 +#define NET_DVR_GET_MACFILTER_CFG 3644 //获取MAC地址过滤配置 +#define NET_DVR_SET_MACFILTER_CFG 3645 //设置MAC地址过滤配置 +#define NET_DVR_GET_EAGLEFOCUS_CALCFG_CAPABILITIES 3646 //鹰视聚焦标定配置能力 +#define NET_DVR_GET_EAGLEFOCUSING_CALCFG 3647 //获取鹰视聚焦标定配置 +#define NET_DVR_SET_EAGLEFOCUSING_CALCFG 3648 //设置鹰视聚焦标定配置 +#define NET_DVR_GET_EAGLEFOCUSING_CFG_CAPABILITIES 3649 //获取鹰视聚焦配置能力 +#define NET_DVR_GET_EAGLEFOCUSING_CTRL 3650 //获取鹰视聚焦配置 +#define NET_DVR_SET_EAGLEFOCUSING_CTRL 3651 //设置鹰视聚焦配置 + +#define NET_DVR_GET_PXOFFLINE_CAPABILITIES 3652 //获取停车场票箱脱机下参数配置 能力 +#define NET_DVR_SET_PXOFFLINE_CFG 3653 //设置停车场票箱脱机下参数配置信息 +#define NET_DVR_GET_PXOFFLINE_CFG 3654 //获取停车场票箱脱机下参数配置信息 +#define NET_DVR_GET_PAPERCHARGEINFO_CAPABILITIES 3655 //获取停车场出入口纸票信息下发 能力 +#define NET_DVR_SET_PAPERCHARGEINFO 3656 //设置停车场出入口纸票信息下发 +#define NET_DVR_GET_PARKINGSAPCE_CAPABILITIES 3657 //获取停车场出入口停车位信息下发 能力 +#define NET_DVR_SET_PARKINGSAPCE_INFO 3658 //设置停车场出入口停车位信息下发 +#define NET_DVR_GET_PXMULTICTRL_CAPABILITIES 3659 //获取停车场票箱从属设备多角度参数配置 能力 +#define NET_DVR_GET_CHARGEACCOUNT_CAPABILITIES 3661 //获取停车场票箱参数配置能力 +#define NET_DVR_SET_CHARGE_ACCOUNTINFO 3662 //设置缴费金额信息 +#define NET_DVR_SET_PXMULTICTRL_CFG 3663 //设置停车场票箱从属设备多角度参数配置信息 +#define NET_DVR_GET_PXMULTICTRL_CFG 3664 //获取停车场票箱从属设备多角度参数配置信息 +#define NET_DVR_GET_TME_CHARGERULE 3665 //获取停车场出入口车卡收费规则规则 +#define NET_DVR_SET_TME_CHARGERULE 3666 //设置停车场出入口车卡收费规则规则 +#define NET_DVR_GET_TME_CHARGERULE_CAPABILITIES 3667 //获取停车场出入口 车卡收费信息配置能力 +#define NET_DVR_GET_ILLEGALCARDFILTERING_CAPABILITIES 3668 //获取停车场票箱参数配置能力 +#define NET_DVR_GET_ILLEGALCARDFILTERING_CFG 3669 //获取停车场票箱参数配置 +#define NET_DVR_SET_ILLEGALCARDFILTERING_CFG 3670 //设置停车场票箱参数配置 +#define NET_DVR_GET_LEDDISPLAY_CAPABILITIES 3671 //获取LED屏幕显示参数配置参数能力 +#define NET_DVR_SET_LEDDISPLAY_CFG 3672 //设置LED屏幕显示参数 +#define NET_DVR_GET_LEDDISPLAY_CFG 3673 //获取LED屏幕显示参数 +#define NET_DVR_GET_VOICEBROADCAST_CAPABILITIES 3674 //获取语音播报控制参数配置参数能力 +#define NET_DVR_SET_VOICEBROADCAST_CFG 3675 //设置语音播报控制参数 +#define NET_DVR_GET_PAPERPRINTFORMAT_CAPABILITIES 3676//获取纸票打印格式配置能力 +#define NET_DVR_GET_PAPERPRINTFORMAT_CFG 3677 //获取纸票打印格式参数配置 +#define NET_DVR_SET_PAPERPRINTFORMAT_CFG 3678 //设置纸票打印格式参数配置 +#define NET_DVR_GET_LOCkGATE_CAPABILITIES 3679 //获取智能锁闸配置能力 +#define NET_DVR_GET_LOCKGATE_CFG 3680 //获取智能锁闸参数配置 +#define NET_DVR_SET_LOCKGATE_CFG 3681 //设置智能锁闸参数配置 +#define NET_DVR_GET_PARKING_DATASTATE 3682 //获取数据同步状态 +#define NET_DVR_SET_PARKING_DATASTATE 3683 //设置数据同步状态 +#define NET_DVR_GET_TME_CAPABILITIES 3684 //获取停车场出入口设备 能力 + +#define NET_DVR_GET_TMEVOICE_CAPABILITIES 3686 //获取语音配置信息能力 +#define NET_DVR_SET_TMEVOICE_CFG 3687 //设置语音参数配置 +#define NET_DVR_GET_TMEVOICE_CFG 3688 //获取语音参数配置 +#define NET_DVR_DEL_TMEVOICE_CFG 3689 //删除语音参数配置 +#define NET_DVR_GET_POSITION 3698 // 获取方位矫正配置参数 +#define NET_DVR_SET_POSITION 3699 // 设置方位矫正配置参数 +#define NET_DVR_GET_CENTRALIZEDCTRL_CAPABILITIES 3700//获取集中布防能力 +#define NET_DVR_GET_CENTRALIZEDCTRL 3701//获取集中布防参数配置 +#define NET_DVR_SET_CENTRALIZEDCTRL 3702//设置集中布防参数配置 +#define NET_DVR_GET_COMPASS_CAPABILITIES 3703//获取电子罗盘能力 +#define NET_DVR_GET_VANDALPROOFALARM 3704//获取防破坏报警参数配置 +#define NET_DVR_SET_VANDALPROOFALARM 3705//设置防破坏报警参数配置 +#define NET_DVR_COMPASS_CALIBRATE_CTRL 3706//电子罗盘矫正控制接口 +#define NET_DVR_COMPASS_NORTH_CTRL 3707//电子罗盘指向正北控制接口 +#define NET_DVR_GET_AZIMUTHINFO 3708//获取方位角度参数配置 + + +#define NET_DVR_GET_SATELLITETIME 3709//获取卫星定位参数配置 +#define NET_DVR_SET_SATELLITETIME 3710//设置卫星定位参数配置 +#define NET_DVR_GET_GISINFO 3711//获取当前球机的GIS信息数据 +#define NET_DVR_GET_STREAMING_CAPABILITIES 3712//获取视频流的能力 +#define NET_DVR_GET_REFRESHFRAME_CAPABILITIES 3713//获取刷新帧的能力 +#define NET_DVR_STREAMING_REFRESH_FRAME 3714//取流预览的强制刷新帧 +#define NET_DVR_FACECAPTURE_STATISTICS 3715//长连接人员统计 +#define NET_DVR_GET_WIRELESSSERVER_CAPABILITIES 3716 //获取热点功能配置协议的能力 +#define NET_DVR_GET_WIRELESSSERVER 3717 //获取热点功能配置协议 +#define NET_DVR_SET_WIRELESSSERVER 3718 //设置热点功能配置协议 +#define NET_DVR_GET_CONNECT_LIST_CAPABILITIES 3719 //获取连接设备列表信息的能力 +#define NET_DVR_GET_THSCREEN_CAPABILITIES 3720 //获取温湿度配置协议的能力 +#define NET_DVR_GET_THSCREEN 3721 //获取温湿度配置协议 +#define NET_DVR_GET_EXTERNALDEVICE_CAPABILITIES 3722//获取外设配置协议的能力 +#define NET_DVR_GET_EXTERNALDEVICE 3723//获取外设配置协议 +#define NET_DVR_SET_EXTERNALDEVICE 3724//设置外设配置协议 +#define NET_DVR_GET_LEDDISPLAYINFO_CAPABILITIES 3725 //获取LED显示信息的能力 +#define NET_DVR_SET_LEDDISPLAYINFO 3726 //设置LED显示信息 +#define NET_DVR_GET_SUPPLEMENTLIGHT_CAPABILITIES 3727 //获取内置补光灯配置协议的能力 (球机支持,软件实现,补光灯是设计在设备内部的) +#define NET_DVR_GET_SUPPLEMENTLIGHT 3728 //获取内置补光灯配置协议 +#define NET_DVR_SET_SUPPLEMENTLIGHT 3729 //设置内置补光灯配置协议 +#define NET_DVR_SET_THSCREEN 3730 //设置温湿度配置协议 +#define NET_DVR_GET_LOWPOWER_CAPABILITIES 3731 //获取低功耗配置协议的能力 +#define NET_DVR_GET_LOWPOWER 3732 //获取低功耗配置协议 +#define NET_DVR_SET_LOWPOWER 3733 //设置低功耗配置协议 +#define NET_DVR_GET_ZOOMLINKAGE_CAPABILITIES 3734 //获取变倍联动配置协议的能力 +#define NET_DVR_GET_ZOOMLINKAGE 3735 //获取变倍联动配置协议 +#define NET_DVR_SET_ZOOMLINKAGE 3736 //设置变倍联动配置协议 +#define NET_DVR_THSCREEN_TIMING 3737 //温湿度 +#define NET_DVR_GET_OSD_BATTERY_POWER_CFG 3741 //获取OSD电池电量显示参数 +#define NET_DVR_SET_OSD_BATTERY_POWER_CFG 3742 //设置OSD电池电量显示参数 +#define NET_DVR_GET_OSD_BATTERY_POWER_CFG_CAPABILITIES 3743//OSD电池电量显示参数的能力 +#define NET_DVR_GET_VANDALPROOFALARM_TRIGGER 3744 //获取防破坏报警联动配置 +#define NET_DVR_SET_VANDALPROOFALARM_TRIGGER 3745 //设置防破坏报警联动配置 +#define NET_DVR_GET_PANORAMAIMAGE_CAPABILITIES 3746 //获取全景图像的能力 +#define NET_DVR_GET_PANORAMAIMAGE 3747 //获取全景图像参数的协议 +#define NET_DVR_SET_PANORAMAIMAGE 3748 //设置全景图像参数的协议 +#define NET_DVR_GET_STREAMENCRYPTION 3749 //获取码流加密配置 +#define NET_DVR_SET_STREAMENCRYPTION 3750 //设置码流加密配置 +#define NET_DVR_GET_STREAMENCRYPTION_CAPABILITIES 3751 //获取码流加密能力 +#define NET_DVR_GET_REVISE_GPS_CAPABILITIES 3752 //获取校准GPS经纬度能力 +#define NET_DVR_GET_REVISE_GPS 3753 //获取校准GPS经纬度能力 +#define NET_DVR_SET_REVISE_GPS 3754 //设置校准GPS经纬度能力 +#define NET_DVR_GET_PDC_RECOMMEND 3755 //获取客流统计表示推荐值 +#define NET_DVR_REMOVE_FLASHSTORAGE 3756 //客流数据清除操作 +#define NET_DVR_GET_COUNTING_CAPABILITIES 3757 //获取客流量统计能力 +#define NET_DVR_SET_SENSOR_ADJUSTMENT 3758 //设置Sensor 调节参数的协议 +#define NET_DVR_GET_SENSOR_ADJUSTMENT_CAPABILITIES 3759 //获取Sensor 调节参数的协议的能力 +#define NET_DVR_GET_WIRELESSSERVER_FULLVERSION_CFG 3760 //获取wifi热点参数配置(完整版) +#define NET_DVR_SET_WIRELESSSERVER_FULLVERSION_CFG 3761 //设置wifi热点参数配置(完整版) +#define NET_DVR_GET_ONLINEUSER_INFO 3762 //长连接获取用户在线信息 +#define NET_DVR_GET_SENSOR_ADJUSTMENT_INFO 3763 //获取指定sensor调节参数 +#define NET_DVR_SENSOR_RESET_CTRL 3764 //Sensor 调节复位 + +#define NET_DVR_GET_POSTRADAR_CAPABILITIES 3765 //获取雷达测速配置能力 +#define NET_DVR_GET_POSTRADARSPEED_CFG 3766 //获取雷达测速配置 +#define NET_DVR_SET_POSTRADARSPEED_CFG 3767 //设置雷达测速配置 +#define NET_DVR_GET_POSTRADARSPEED_RECOM_CFG 3768 //获取雷达测速推荐值 +#define NET_DVR_GET_POSTRADARPARAM_CFG 3769 //获取雷达参数配置 +#define NET_DVR_SET_POSTRADARPARAM_CFG 3770 //设置雷达参数配置 +#define NET_DVR_GET_POSTRADARPARAM_RECOM_CFG 3771 //获取雷达参数推荐值 + +#define NET_DVR_GET_ENCRYPT_DEVICE_INFO 3772 //获取加密设备信息 +#define NET_DVR_GET_ANR_ARMING_HOST 3773 //获取断网续传的主机信息 +#define NET_DVR_GET_FIRMWARE_VERSION 3776 //GET firmware version +/********************************IPC基线FF车牌****************************/ +#define NET_DVR_GET_FTP_CAPABILITIES 3782 //获取ftp能力 +#define NET_DVR_GET_FTPUPLOAD_CFG 3783 //获取ftp上传信息规整参数 +#define NET_DVR_SET_FTPUPLOAD_CFG 3784 //设置ftp上传信息规整参数 +#define NET_DVR_GET_VEHICLE_INFORMATION 3785 //获取车辆信息 +#define NET_DVR_GET_DDNS_COUNTRY_ABILITY 3800//获取设备支持的DDNS国家能力列表 +#define NET_DVR_GET_DEVICECFG_V50 3801 //获取设备参数 +#define NET_DVR_SET_DEVICECFG_V50 3802 //设置设备参数 +#define NET_DVR_SET_VEHICLE_RECOG_TASK_V50 3851 //车辆二次识别任务提交V50扩展 +#define NET_DVR_GET_SMARTCALIBRATION_CAPABILITIES 3900// Smart行为标定过滤尺寸功能能力 +#define NET_DVR_GET_TEMPERATURE_TRIGGER 3903 //获取测温差联动配置 +#define NET_DVR_SET_TEMPERATURE_TRIGGER 3904 //设置测温差联动配置 + +#define NET_DVR_GET_SMARTCALIBRATION_CFG 3910 //获取Smart行为标定过滤尺寸功能 +#define NET_DVR_SET_SMARTCALIBRATION_CFG 3911 //设置Smart行为标定过滤尺寸功能 +#define NET_DVR_POST_SETUP_CALIB 3912 //架设标定 +#define NET_DVR_SET_POS_INFO_OVERLAY 3913//设置Pos信息码流叠加控制 +#define NET_DVR_GET_POS_INFO_OVERLAY 3914//获取Pos信息码流叠加控制 +#define NET_DVR_GET_CAMERA_WORK_MODE 3915 //设置相机工作模式参数 +#define NET_DVR_SET_CAMERA_WORK_MODE 3916 //获取相机工作模式参数 +#define NET_DVR_GET_RESOLUTION_SWITCH_CAPABILITIES 3917 //获取分辨率模式切换能力 +#define NET_DVR_GET_RESOLUTION_SWITCH 3918 //获取分辨率模式切换配置 +#define NET_DVR_SET_RESOLUTION_SWITCH 3919 //设置分辨率模式切换配置 +#define NET_DVR_GET_CONFIRM_MECHANISM_CAPABILITIES 3920 //报警上传确认机制控制能力 +#define NET_DVR_CONFIRM_MECHANISM_CTRL 3921 //报警上传确认机制控制 +#define NET_DVR_GET_VEHICLLE_RESULT_CAPABILITIES 3951 //获取获取车辆信息结果能力 +#define NET_DVR_GET_CALIB_CAPABILITIES 3952//获取架设标定能力 +#define NET_DVR_GET_POSINFO_OVERLAY_CAPABILITIES 3953//获取获取Pos叠加能力 +#define NET_SDK_FINDMEDICALFILE 3954 //慧影科技智慧医疗查找录像文件 +#define NET_SDK_FINDMEDICALPICTURE 3955 //慧影科技智慧医疗查找图片文件 +#define NET_DVR_SET_POSINFO_OVERLAY 3960//设置Pos叠加 +#define NET_DVR_GET_POSINFO_OVERLAY 3961//获取Pos叠加 +#define NET_DVR_GET_FACELIB_TRIGGER 3962 //获取人脸比对库的联动配置 +#define NET_DVR_SET_FACELIB_TRIGGER 3963 //设置人脸比对库的联动配置 +#define NET_DVR_GET_FACECONTRAST_TRIGGER 3965//获取人脸比对联动配置 +#define NET_DVR_SET_FACECONTRAST_TRIGGER 3966//设置人脸比对联动配置 +#define NET_DVR_GET_FACECONTRAST_SCHEDULE_CAPABILITIES 3967 //获取人脸比对布防时间能力 +#define NET_DVR_GET_FACECONTRAST_SCHEDULE 3968//获取人脸比对布防时间配置 +#define NET_DVR_SET_FACECONTRAST_SCHEDULE 3969//设置人脸比对布防时间配置 +#define NET_DVR_GET_FACELIB_SCHEDULE_CAPABILITIES 3970 //获取人脸比对库的布防时间能力 +#define NET_DVR_GET_VCA_VERSION_LIST 3973//获取算法库版本 +#define NET_DVR_GET_SETUP_CALIB 3974//获取架设标定 +#define NET_DVR_GET_PANORAMA_LINKAGE 3975//获取联动抓图上传使能配置 +#define NET_DVR_SET_PANORAMA_LINKAGE 3976//设置联动抓图上传使能配置 +#define NET_DVR_GET_FACELIB_SCHEDULE 3977 //获取人脸比对库的布防时间配置 +#define NET_DVR_SET_FACELIB_SCHEDULE 3978 //设置人脸比对库的布防时间配置 +#define NET_DVR_GET_SOFTWARE_SERVICE_CAPABILITIES 3980//获取软件服务能力 +#define NET_DVR_GET_SOFTWARE_SERVICE 3981//获取软件服务配置 +#define NET_DVR_SET_SOFTWARE_SERVICE 3982//设置软件服务配置 +#define NET_DVR_GET_PREVIEW_MODE_CAPABILITIES 3983//获取预览模式配置能力 +#define NET_DVR_SET_EAGLE_FOCUS_GOTOSCENE 3984//鹰式聚焦设置摄像机转向指定的场景ID +#define NET_DVR_EAGLE_FOCUS_SCENE_DEL 3985//删除鹰式聚焦标定的场景 +#define NET_DVR_GET_SAFETY_HELMET_TRIGGER 3986 //获取安全帽检测联动配置 +#define NET_DVR_SET_SAFETY_HELMET_TRIGGER 3987 //设置安全帽检测联动配置 +#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE_CAPABILITIES 3988 //获取安全帽检测布防时间能力 +#define NET_DVR_GET_SAFETY_HELMET_SCHEDULE 3989//获取安全帽检测布防时间配置 +#define NET_DVR_SET_SAFETY_HELMET_SCHEDULE 3990//设置安全帽检测布防时间配置 + +#define NET_DVR_GET_SIGN_ABNORMAL_TRIGGER 4150 //获取体征异常联动配置 +#define NET_DVR_SET_SIGN_ABNORMAL_TRIGGER 4151 //设置体征异常联动配置 + +#define NET_DVR_ONE_KEY_CONFIG_SAN_V50 4152 //一键配置SAN(V50) +#define NET_DVR_GET_HDCFG_V50 4153 //获取硬盘信息参数V50 +#define NET_DVR_SET_HDCFG_V50 4154 //设置硬盘信息参数V50 +#define NET_DVR_GET_HDVOLUME_CFG 4155 //获取硬盘卷信息 +#define NET_DVR_SET_HDVOLUME_CFG 4156 //设置硬盘卷信息 +#define NET_DVR_GET_POWER_SUPPLY_CABINET_TRIGGER 4157 //获取机柜供电检测的联动配置 +#define NET_DVR_SET_POWER_SUPPLY_CABINET_TRIGGER 4158 //设置机柜供电检测的联动配置 +#define NET_DVR_GET_SENSOR_TRIGGER 4159 //获取传感器检测的联动配置 +#define NET_DVR_SET_SENSOR_TRIGGER 4160 //设置传感器检测的联动配置 +#define NET_DVR_GET_FACESNAP_TRIGGER 4161 //获取人脸抓拍联动配置 +#define NET_DVR_SET_FACESNAP_TRIGGER 4162 //设置人脸抓拍联动配置 +#define NET_DVR_GET_FACESNAP_SCHEDULE_CAPABILITIES 4163 //获取人脸抓拍布防时间能力 +#define NET_DVR_GET_FACESNAP_SCHEDULE 4164 //获取人脸抓拍布防时间配置 +#define NET_DVR_SET_FACESNAP_SCHEDULE 4165 //设置人脸抓拍布防时间配置 + +#define NET_DVR_SET_SCREEN_SWITCH 4171 //画面切换控制 +#define NET_DVR_GET_BV_CALIB_PIC 4172 //获取设备抓取图片和附加信息 +#define NET_DVR_GET_BV_CALIB_RESULT 4173 //获取双目外参标定结果 +#define NET_DVR_GET_BV_HCORRECTION 4174 //获取双目高度矫正数据 +#define NET_DVR_DEL_BV_CALIB_PIC 4175 //删除样本图片 +#define NET_DVR_GET_TV_SCREEN_CFG 4176 //获取导播画面停留时间配置 +#define NET_DVR_SET_TV_SCREEN_CFG 4177 //设置导播画面停留时间配置 +#define NET_DVR_ADJUST_BV_CALIB 4178 //双目标定微调 +#define NET_DVR_GET_HUMAN_CALIB 4179 //获取人体坐标标定配置 +#define NET_DVR_SET_HUMAN_CALIB 4180 //设置人体坐标标定配置 +#define NET_DVR_GET_USERCFG_V51 4181 //获取用户参数 +#define NET_DVR_SET_USERCFG_V51 4182 //设置用户参数 +#define NET_DVR_GET_SOFTIO_TRIGGER 4183 //获取SoftIO联动配置 +#define NET_DVR_SET_SOFTIO_TRIGGER 4184 //设置SoftIO联动配置 +#define NET_DVR_GET_SOFTIO_SCHEDULE_CAPABILITIES 4185 //获取SoftIO布防时间能力 +#define NET_DVR_GET_SOFTIO_SCHEDULE 4186 //获取SoftIO布防时间配置 +#define NET_DVR_SET_SOFTIO_SCHEDULE 4187 //设置SoftIO布防时间配置 +#define NET_DVR_GET_HFPD_TRIGGER 4188 //获取高频人员侦测联动配置 +#define NET_DVR_SET_HFPD_TRIGGER 4189 //设置高频人员侦测联动配置 +#define NET_DVR_GET_HFPD_SCHEDULE_CAPABILITIES 4190 //获取高频人员侦测布防时间能力 +#define NET_DVR_GET_HFPD_SCHEDULE 4191 //获取高频人员侦测布防时间配置 +#define NET_DVR_SET_HFPD_SCHEDULE 4192 //设置高频人员侦测布防时间配置 +#define NET_DVR_GET_ALARM_INFO 4193 //获取报警事件信息 +#define NET_DVR_GET_USERCFG_V52 4194 //获取用户参数 +#define NET_DVR_SET_USERCFG_V52 4195 //设置用户参数 + +/********************************NVR_后端产品线****************************/ +#define NET_DVR_GET_MUTEX_FUNCTION 4353 //获取功能互斥信息 + +#define NET_DVR_GET_SINGLE_CHANNELINFO 4360 //获取单个通道属性数据 +#define NET_DVR_GET_CHANNELINFO 4361 //获取通道属性数据 +#define NET_DVR_CHECK_LOGIN_PASSWORDCFG 4362 //用户登录密码校验 +#define NET_DVR_GET_SINGLE_SECURITY_QUESTION_CFG 4363 //获取单个设备安全问题 +#define NET_DVR_SET_SINGLE_SECURITY_QUESTION_CFG 4364 //设置单个设备安全问题 +#define NET_DVR_GET_SECURITY_QUESTION_CFG 4365 //获取设备安全问题 +#define NET_DVR_SET_SECURITY_QUESTION_CFG 4366 //设置设备安全问题 +#define NET_DVR_GET_ONLINEUSERLIST_SC 4367 //远程获取登陆用户信息(短连接) + +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_TRIGGER 4368 //获取禁止单人脸比对联动配置 +#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_TRIGGER 4369 //设置禁止单人脸比对联动配置 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_TRIGGER 4370 //获取允许名单人脸比对联动配置 +#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_TRIGGER 4371 //设置允许名单人脸比对联动配置 +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4372 //获取禁止单人脸比对布防时间能力 +#define NET_DVR_GET_BLOCKLIST_FACECONTRAST_SCHEDULE 4373 //获取禁止单人脸比对布防时间配置 +#define NET_DVR_SET_BLOCKLIST_FACECONTRAST_SCHEDULE 4374 //设置禁止单人脸比对布防时间配置 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE_CAPABILITIES 4375 //获取允许名单人脸比对布防时间能力 +#define NET_DVR_GET_ALLOWLIST_FACECONTRAST_SCHEDULE 4376 //获取允许名单人脸比对布防时间配置 +#define NET_DVR_SET_ALLOWLIST_FACECONTRAST_SCHEDULE 4377 //设置允许名单人脸比对布防时间配置 + +#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE_CAPABILITIES 4378 //获取人体识别布防时间能力 +#define NET_DVR_GET_HUMAN_RECOGNITION_SCHEDULE 4379 //获取人体识别布防时间配置 +#define NET_DVR_SET_HUMAN_RECOGNITION_SCHEDULE 4380 //设置人体识别布防时间配置 +#define NET_DVR_GET_HUMAN_RECOGNITION_TRIGGER 4381 //获取人体识别联动配置 +#define NET_DVR_SET_HUMAN_RECOGNITION_TRIGGER 4382 //设置人体识别联动配置 +#define NET_DVR_GET_GBT28181_AUDIO_OUTPUT_CFG 4383 //获取GBT28181协议接入设备的语音对讲信息 +#define NET_DVR_SET_GBT28181_AUDIO_OUTPUT_CFG 4384 //设置GBT28181协议接入设备的语音对讲信息 + +#define NET_DVR_GET_STUDENTS_STOODUP_TRIGGER 4386 //获取学生起立检测联动配置 +#define NET_DVR_SET_STUDENTS_STOODUP_TRIGGER 4387 //设置学生起立检测联动配置 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE_CAPABILITIES 4388 //获取区域人数统计布防时间能力 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4389 //获取区域人数统计布防时间配置 +#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_SCHEDULE 4390 //设置区域人数统计布防时间配置 +#define NET_DVR_GET_FRAMES_PEOPLE_COUNTING_TRIGGER 4391 //获取区域人数统计联动配置 +#define NET_DVR_SET_FRAMES_PEOPLE_COUNTING_TRIGGER 4392 //设置区域人数统计联动配置 + +#define NET_DVR_GET_PERSONDENSITY_TRIGGER 4393 //获取人员密度检测的联动配置 +#define NET_DVR_SET_PERSONDENSITY_TRIGGER 4394 //设置人员密度检测的联动配置 +#define NET_DVR_GET_PERSONDENSITY_SCHEDULE_CAPABILITIES 4395 //获取人员密度检测的布防时间能力 +#define NET_DVR_GET_PERSONDENSITY_SCHEDULE 4396 //获取人员密度检测的布防时间配置 +#define NET_DVR_SET_PERSONDENSITY_SCHEDULE 4397 //设置人员密度检测的布防时间配置 + +#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE_CAPABILITIES 4398 //获取学生起立检测布防时间能力 +#define NET_DVR_GET_STUDENTS_STOODUP_SCHEDULE 4399 //获取学生起立检测布防时间配置 +#define NET_DVR_SET_STUDENTS_STOODUP_SCHEDULE 4400 //设置学生起立检测布防时间配置 + +#define NET_DVR_SET_FACE_THERMOMETRY_TRIGGER 4401 //设置人脸测温联动配置 +#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE_CAPABILITIES 4402 //获取人脸测温布防时间能力 +#define NET_DVR_GET_FACE_THERMOMETRY_SCHEDULE 4403 //获取人脸测温布防时间配置 +#define NET_DVR_SET_FACE_THERMOMETRY_SCHEDULE 4404 //设置人脸测温布防时间配置 +#define NET_DVR_GET_FACE_THERMOMETRY_TRIGGER 4405 //获取人脸测温联动配置 +#define NET_DVR_GET_PERSONQUEUE_TRIGGER 4406 //获取人员排队检测的联动配置 +#define NET_DVR_SET_PERSONQUEUE_TRIGGER 4407 //设置人员排队检测的联动配置 +#define NET_DVR_GET_PERSONQUEUE_SCHEDULE_CAPABILITIES 4408 //获取人员排队检测的布防时间能力 +#define NET_DVR_GET_PERSONQUEUE_SCHEDULE 4409 //获取人员排队检测的布防时间配置 +#define NET_DVR_SET_PERSONQUEUE_SCHEDULE 4410 //设置人员排队检测的布防时间配置 +#define NET_DVR_SET_START_VIDEOAUDIO 4411 //设置NVR开启音视频功能(仅供设备自测功能) + + +/********************************智能人脸识别****************************/ +#define NET_DVR_GET_FACESNAPCFG 5001 //获取人脸抓拍参数 +#define NET_DVR_SET_FACESNAPCFG 5002 //设置人脸抓拍参数 +#define NET_DVR_GET_DEVACCESS_CFG 5005 //获取接入设备参数 +#define NET_DVR_SET_DEVACCESS_CFG 5006 //设置接入设备参数 +#define NET_DVR_GET_SAVE_PATH_CFG 5007 //获取存储信息参数 +#define NET_DVR_SET_SAVE_PATH_CFG 5008 //设置存储信息参数 +#define NET_VCA_GET_RULECFG_V41 5011 //获取异常行为检测参数(扩展) +#define NET_VCA_SET_RULECFG_V41 5012 //设置异常行为检测参数(扩展) +#define NET_DVR_GET_AID_RULECFG_V41 5013 //获取交通事件规则参数 +#define NET_DVR_SET_AID_RULECFG_V41 5014 //设置交通事件规则参数 +#define NET_DVR_GET_TPS_RULECFG_V41 5015 //获取交通统计规则参数(扩展) +#define NET_DVR_SET_TPS_RULECFG_V41 5016 //设置交通统计规则参数(扩展) +#define NET_VCA_GET_FACEDETECT_RULECFG_V41 5017 //获取ATM人脸检测规则(扩展) +#define NET_VCA_SET_FACEDETECT_RULECFG_V41 5018 //设置ATM人脸检测规则(扩展) +#define NET_DVR_GET_PDC_RULECFG_V41 5019 //设置人流量统计规则(扩展) +#define NET_DVR_SET_PDC_RULECFG_V41 5020 //获取人流量统计规则(扩展) +#define NET_DVR_GET_TRIAL_VERSION_CFG 5021 //获取试用版信息 +#define NET_DVR_GET_VCA_CTRLINFO_CFG 5022 //批量获取智能控制参数 +#define NET_DVR_SET_VCA_CTRLINFO_CFG 5023 //批量设置智能控制参数 +#define NET_DVR_SYN_CHANNEL_NAME 5024 //同步通道名 +#define NET_DVR_GET_RESET_COUNTER 5025 //获取统计数据清零参数(人流量、交通统计) +#define NET_DVR_SET_RESET_COUNTER 5026 //设置统计数据清零参数(人流量、交通统计) +#define NET_DVR_GET_OBJECT_COLOR 5027 //获取物体颜色属性 +#define NET_DVR_SET_OBJECT_COLOR 5028 //设置物体颜色属性 +#define NET_DVR_GET_AUX_AREA 5029 //获取辅助区域 +#define NET_DVR_SET_AUX_AREA 5030 //设置辅助区域 +#define NET_DVR_GET_CHAN_WORKMODE 5031 //获取通道工作模式 +#define NET_DVR_SET_CHAN_WORKMODE 5032 //设置通道工作模式 +#define NET_DVR_GET_SLAVE_CHANNEL 5033 //获取从通道参数 +#define NET_DVR_SET_SLAVE_CHANNEL 5034 //设置从通道参数 +#define NET_DVR_GET_VQD_EVENT_RULE 5035 //获取视频质量诊断事件规则 +#define NET_DVR_SET_VQD_EVENT_RULE 5036 //设置视频质量诊断事件规则 +#define NET_DVR_GET_BASELINE_SCENE 5037 //获取基准场景参数 +#define NET_DVR_SET_BASELINE_SCENE 5038 //设置基准场景参数 +#define NET_DVR_CONTROL_BASELINE_SCENE 5039 //基准场景操作 +#define NET_DVR_SET_VCA_DETION_CFG 5040 //设置智能移动参数配置 +#define NET_DVR_GET_VCA_DETION_CFG 5041 //获取智能移动参数配置 +#define NET_DVR_GET_STREAM_ATTACHINFO_CFG 5042 //获取码流附加信息配置 +#define NET_DVR_SET_STREAM_ATTACHINFO_CFG 5043 //设置码流附加信息配置 + +#define NET_DVR_GET_BV_CALIB_TYPE 5044 //获取双目标定类型 +#define NET_DVR_CONTROL_BV_SAMPLE_CALIB 5045 //双目样本标定 +#define NET_DVR_GET_BV_SAMPLE_CALIB_CFG 5046 //获取双目标定参数 +#define NET_DVR_GET_RULECFG_V42 5049 //获取异常行为检测参数(支持16条规则扩展) +#define NET_DVR_SET_RULECFG_V42 5050 //设置异常行为检测参数(支持16条规则扩展) +#define NET_DVR_SET_VCA_DETION_CFG_V40 5051 //设置智能移动参数配置 +#define NET_DVR_GET_VCA_DETION_CFG_V40 5052 //获取智能移动参数配置 +#define NET_DVR_SET_FLASH_CFG 5110 //写入数据到Flash 测试使用 +/********************************智能人脸识别 end****************************/ + +//2014-12-03 +#define NET_DVR_GET_T1TEST_CFG 5053 //产线测试配置接口(获取) +#define NET_DVR_SET_T1TEST_CFG 5054 ////产线测试配置接口(设置) + +/********************************ITS****************************/ +#define NET_ITS_GET_OVERLAP_CFG_V50 5055 //获取字符叠加参数配置扩展 +#define NET_ITS_SET_OVERLAP_CFG_V50 5056 //设置字符叠加参数配置扩展 + +#define NET_DVR_GET_PARKLAMP_STATE 5057 //获取停车场信号灯状态信息 +#define NET_DVR_GET_CLOUDSTORAGE_CFG 5058 //获取云存储配置参数 +#define NET_DVR_SET_CLOUDSTORAGE_CFG 5059 //设置云存储配置参数 + +#define NET_ITS_GET_BASE_INFO 5060 //获取终端基本信息 +#define NET_DVR_GET_SENSOR_INFO 5061 //传感器信息查询 +#define NET_DVR_SET_SENSOR_SWITCH 5062 //传感器远程控制 +#define NET_ITS_GET_IMGMERGE_CFG 5063 //获取图片合成配置参数 +#define NET_ITS_SET_IMGMERGE_CFG 5064 //设置图片合成配置参数 +#define NET_ITS_GET_UPLOAD_CFG 5065 //获取数据上传配置 +#define NET_ITS_SET_UPLOAD_CFG 5066 //设置数据上传配置 +#define NET_DVR_GET_SENSOR_PORT_CAPABILITIES 5067 //获取传感器能力 +#define NET_ITS_GET_WORKSTATE 5069 //获取终端工作状态 +#define NET_ITS_GET_IPC_CHAN_CFG 5070 //获取通道IPC信息 +#define NET_ITS_SET_IPC_CHAN_CFG 5071 //设置通道IPC信息 +#define NET_ITS_GET_OVERLAP_CFG 5072 //获取字符叠加参数配置 +#define NET_ITS_SET_OVERLAP_CFG 5073 //设置字符叠加参数配置 +#define NET_DVR_GET_TRIGGEREX_CFG 5074 //获取ITC扩展配置 +#define NET_DVR_SET_TRIGGEREX_CFG 5075 //设置ITC扩展配置 +#define NET_ITS_GET_ROAD_INFO 5076 //获取路口信息 + +#define NET_ITS_REMOTE_DEVICE_CONTROL 5077//设置远程设备控制 +#define NET_ITS_GET_GATEIPC_CHAN_CFG 5078//获取出入口参数 +#define NET_ITS_SET_GATEIPC_CHAN_CFG 5079//设置出入口参数 +#define NET_ITS_TRANSCHAN_START 5080//同步数据服务器建立连接 +#define NET_ITS_GET_ECTWORKSTATE 5081//获取出入口终端工作状态 +#define NET_ITS_GET_ECT_CHAN_INFO 5082//获取出入口终端通道状态 +#define NET_DVR_GET_HEATMAP_RESULT 5083//热度图数据查找 +#define NET_DVR_SET_ITS_EXDEVCFG 5084 //设置ITS外接设备信息 +#define NET_DVR_GET_ITS_EXDEVCFG 5085 //获取ITS外接设备信息 +#define NET_DVR_GET_ITS_EXDEVSTATUS 5086 //获取ITS所有外接设备信息 +#define NET_DVR_SET_ITS_ENDEVCMD 5087 //设置ITS终端出入口控制命令 +#define NET_DVR_SET_ENISSUED_DATADEL 5088 //设置ITS终端出入口控制清除 +#define NET_DVR_GET_PDC_RESULT 5089//客流量数据查询 2014-03-21 +#define NET_ITS_GET_LAMP_CTRLCFG 5090 //获取内外置灯参数 +#define NET_ITS_SET_LAMP_CTRLCFG 5091 //设置内外置灯参数 +#define NET_ITS_GET_PARKSPACE_ATTRIBUTE_CFG 5092 //获取特殊车位参数 +#define NET_ITS_SET_PARKSPACE_ATTRIBUTE_CFG 5093 //设置特殊车位参数 +#define NET_ITS_SET_LAMP_EXTERNAL_CFG 5095 //设置外控配置参数 +#define NET_ITS_SET_COMPEL_CAPTURE 5096 //设置车位强制抓图 +#define NET_DVR_SET_TIMESIGN_CFG 5097 //设置扩展校时自定义标记 +#define NET_DVR_GET_TIMESIGN_CFG 5098 //获取扩展校时自定义标记 +#define NET_DVR_GET_SIGNALLAMP_STATUS 5099 //信号灯检测 +/********************************ITS end****************************/ + +#define NET_DVR_GET_MONITOR_PLAN_VQD 5100 //长连接获取诊断服务器计划 +#define NET_DVR_GET_MONITORID_VQD 5101 //长连接获取对应计划内的布防点信息 +#define NET_DVR_SET_MONITOR_INFO 5102 //批量设置计划内的布防点信息 +#define NET_DVR_DEL_MONITOR_PLAN_VQD 5103 //删除计划 +#define NET_DVR_GET_MONITOR_VQD_STATUS 5104 //平台查询诊断服务器的状态 +#define NET_DVR_GET_RECORD_INFO 5105 //获取资源图片查询 +#define NET_DVR_GET_MONITOR_VQDCFG 5106 //获取服务器的布防点信息 +#define NET_DVR_SET_MONITOR_VQDCFG 5107 //设置服务器的布防点信息 +#define NET_DVR_SET_MONITOR_PLAN_VQDCFG 5108 //设置管理计划(单独的计划) + +#define NET_DVR_SCENE_CHANGE_UPDATE 5109 //场景变更数据更新 + +#define NET_DVR_GET_CALIBRATE_POINT 5153 //归一化坐标转换(枪球联动设备 外部交互命令码 基线代码不实现,防止冲突,提交基线)/*************************智能多场景********************************/ +#define NET_DVR_GET_SCENE_CFG 5201 //获取场景信息 +#define NET_DVR_SET_SCENE_CFG 5202 //设置场景信息 +#define NET_DVR_GET_SCENE_REFERENCE_REGION 5203 //获取参考区域 +#define NET_DVR_SET_SCENE_REFERENCE_REGION 5204 //设置参考区域 +#define NET_DVR_GET_SCENE_CALIBRATION 5205 //获取标定信息 +#define NET_DVR_SET_SCENE_CALIBRATION 5206 //设置标定信息 +#define NET_DVR_GET_SCENE_MASK_REGION 5207 //获取屏蔽区域 +#define NET_DVR_SET_SCENE_MASK_REGION 5208 //设置屏蔽区域 +#define NET_DVR_GET_SCENE_LANECFG 5209 //获取车道规则 +#define NET_DVR_SET_SCENE_LANECFG 5210 //设置车道规则 +#define NET_DVR_GET_SCENE_AID_RULECFG 5211 //获取交通事件规则参数 +#define NET_DVR_SET_SCENE_AID_RULECFG 5212 //设置交通事件规则参数 +#define NET_DVR_GET_SCENE_TPS_RULECFG 5213 //获取交通统计规则参数 +#define NET_DVR_SET_SCENE_TPS_RULECFG 5214 //设置交通统计规则参数 +#define NET_DVR_GET_SCENE_TIME_CFG 5215 //获取通道的场景时间段配置 +#define NET_DVR_SET_SCENE_TIME_CFG 5216 //设置通道的场景时间段配置 +#define NET_DVR_GET_FORENSICS_MODE 5217 //获取取证方式参数 +#define NET_DVR_SET_FORENSICS_MODE 5218 //设置取证方式参数 +#define NET_DVR_FORCESTOP_FORENSICS_CTRL 5219 //强制停止取证 +#define NET_DVR_GET_ALARM_PROCESS_CFG 5220 //获取报警处理参数 +#define NET_DVR_SET_ALARM_PROCESS_CFG 5221 //设置报警处理参数 +#define NET_DVR_GET_BLOCKLIST_ALARM_INFO 5222 //获取名单报警 +#define NET_DVR_GET_STORAGE_RESOURCE_CFG 5225 //获取存储资源参数 +#define NET_DVR_SET_STORAGE_RESOURCE_CFG 5226 //设置存储资源参数 +#define NET_DVR_DEL_BLOCKLIST_ALARM_RECORD 5227 //远程删除名单报警记录 +#define NET_DVR_SET_BLOCKLIST_GROUP_INFO 5229 //远程分组列表参数配置 +#define NET_DVR_DEL_BLOCKLIST_GROUP_INFO 5230 //远程删除分组列表 +#define NET_DVR_GET_BLOCKLIST_GROUP_INFO 5231 //远程获取全部分组列表 +#define NET_DVR_SET_BLOCKLIST_GROUP_RECORD_CFG 5232 //分组记录参数配置 +#define NET_DVR_GET_BLOCKLIST_GROUP_RECORD_CFG 5234 //远程获取分组记录参数 +#define NET_DVR_DEL_BLOCKLIST_GROUP_RECORD_CFG 5235 //远程删除分组记录参数 +#define NET_DVR_GET_AREA_MONITOR_CFG 5236 //获取区域布防点参数 +#define NET_DVR_SET_AREA_MONITOR_CFG 5237 //设置区域布防点参数 +#define NET_DVR_DEL_AREA_MONITOR_CFG 5238 //删除区域布防点 +#define NET_DVR_RETRIEVAL_SNAP_RECORD 5240 //抓拍库检索 +#define NET_DVR_GET_ALARMLIST 5241 //获取名单报警列表 +#define NET_DVR_DETECT_IMAGE 5242 //单张图片检测 +#define NET_DVR_GET_SNAP_RECORD 5243 //获取抓拍记录 +#define NET_DVR_DEL_SNAP_RECORD 5244 //删除抓拍记录 +#define NET_DVR_GET_FACE_RECORD 5245 //远程获取人脸记录列表 +#define NET_DVR_SET_FACE_RECORD 5246 //添加人脸记录 +#define NET_DVR_DEL_FACE_RECORD 5247 //删除人脸记录 +#define NET_DVR_GET_FACE_DATABASE 5248 //获取人脸库配置参数 +#define NET_DVR_SET_FACE_DATABASE 5249 //设置人脸库配置参数 +#define NET_DVR_DEL_FACE_DATABASE 5250 //删除人脸库 +#define NET_DVR_RETRIEVAL_FACE_DATABASE 5251 //人脸库检索 +#define NET_DVR_SET_BLOCKLIST_REL_DEV_CFG 5252 //设备关联名单分组关联 +#define NET_DVR_DEL_BLOCKLIST_REL_DEV 5253 //删除 设备关联名单分组信息 +/*************************智能多场景end*****************************/ + +#define NET_DVR_GET_DISK_RAID_INFO 6001 //获取磁盘Raid信息 +#define NET_DVR_SET_DISK_RAID_INFO 6002 //设置磁盘Raid信息 + +#define NET_DVR_GET_DVR_SYNCHRONOUS_IPC 6005 //获取:是否为前端IPC同步设备参数 +#define NET_DVR_SET_DVR_SYNCHRONOUS_IPC 6006 //设置:是否为前端IPC同步设备参数 + +#define NET_DVR_SET_DVR_IPC_PASSWD 6008 //设置:IPC用户名密码 +#define NET_DVR_GET_DEVICE_NET_USING_INFO 6009 //获取:当前设备网络资源使用情况 + +#define NET_DVR_SET_DVR_IPC_NET 6012 //设置:设置前端IPC的网络地址 + +#define NET_DVR_GET_RECORD_CHANNEL_INFO 6013 //获取:录像通道信息 +#define NET_DVR_SET_RECORD_CHANNEL_INFO 6014 //设置:录像通道信息 + + +#define NET_DVR_MOUNT_DISK 6015 // 加载磁盘 +#define NET_DVR_UNMOUNT_DISK 6016 // 卸载磁盘 + +// CVR +#define NET_DVR_GET_STREAM_SRC_INFO 6017 //获取:流来源信息 +#define NET_DVR_SET_STREAM_SRC_INFO 6018 //设置:流来源信息 +#define NET_DVR_GET_STREAM_RECORD_INFO 6019 //获取:流录像信息 +#define NET_DVR_SET_STREAM_RECORD_INFO 6020 //设置:流录像信息 +#define NET_DVR_GET_STREAM_RECORD_STATUS 6021 //获取:流录像状态 +#define NET_DVR_SET_STREAM_RECORD_STATUS 6022 //设置:流录像状态 +#define NET_DVR_GET_STREAM_INFO 6023 //获取已添加的流ID信息 +#define NET_DVR_GET_STREAM_SRC_INFO_V40 6024 //获取:流来源信息 +#define NET_DVR_SET_STREAM_SRC_INFO_V40 6025 //设置:流来源信息 +#define NET_DVR_GET_RELOCATE_INFO 6026 //获取N+0模式下重定向信息 +#define NET_DVR_START_GOP_INFO_PASSBACK 6032 //智能信息回填 +#define NET_DVR_GET_CHANS_RECORD_STATUS_CFG 6035 //获取通道录像状态信息 +#define NET_DVR_SET_CHANS_RECORD_STATUS_CFG 6036 //设置通道录像状态信息 +//NVR:96xx +#define NET_DVR_GET_IP_ALARM_GROUP_NUM 6100 //获取:IP通道报警输入输出组数 +#define NET_DVR_GET_IP_ALARM_IN 6101 //获取:IP通道报警输入信息 +#define NET_DVR_GET_IP_ALARM_OUT 6102 //获取:IP通道报警输出信息 + +//9000 v2.2 +#define NET_DVR_GET_FTPCFG_SECOND 6103 //获取图片上传FTP参数 +#define NET_DVR_SET_FTPCFG_SECOND 6104 //设置图片上传FTP参数 + +#define NET_DVR_GET_DEFAULT_VIDEO_EFFECT 6105 // 获取视频输入效果参数默认值 +#define NET_DVR_SET_VIDEO_EFFECT 6106 // 设置通道视频输入图像参数 +#define NET_DVR_DEL_INVALID_DISK 6107 // 删除无效磁盘 + +#define NET_DVR_GET_DRAWFRAME_DISK_QUOTA_CFG 6109 //获取抽帧通道磁盘配额 +#define NET_DVR_SET_DRAWFRAME_DISK_QUOTA_CFG 6110 //设置抽帧通道磁盘配额 + +#define NET_DVR_GET_NAT_CFG 6111 //获取NAT映射参数 +#define NET_DVR_SET_NAT_CFG 6112 //设置NAT映射参数 +#define NET_DVR_GET_AES_KEY 6113 //获取设备AES加密密钥 +#define NET_DVR_GET_POE_CFG 6114 //获取POE参数 +#define NET_DVR_SET_POE_CFG 6115 //设置POE参数 +#define NET_DVR_GET_CUSTOM_PRO_CFG 6116 //获取自定义协议参数 +#define NET_DVR_SET_CUSTOM_PRO_CFG 6117 //设置自定义协议参数 +#define NET_DVR_GET_STREAM_CABAC 6118 //获取码流压缩性能选项 +#define NET_DVR_SET_STREAM_CABAC 6119 //设置码流压缩性能选项 +#define NET_DVR_GET_ESATA_MINISAS_USAGE_CFG 6120 //获取eSATA和miniSAS用途 +#define NET_DVR_SET_ESATA_MINISAS_USAGE_CFG 6121 //设置eSATA和miniSAS用途 + +#define NET_DVR_GET_HDCFG_V40 6122 //获取硬盘信息参数 +#define NET_DVR_SET_HDCFG_V40 6123 //设置硬盘信息参数 +#define NET_DVR_GET_POE_CHANNEL_ADD_MODE 6124 //获取POE通道添加方式 +#define NET_DVR_SET_POE_CHANNEL_ADD_MODE 6125 //设置POE通道添加方式 +#define NET_DVR_GET_DIGITAL_CHANNEL_STATE 6126 //获取设备数字通道状态 +#define NET_DVR_GET_BONJOUR_CFG 6127 // 获取Bonjour信息 +#define NET_DVR_SET_BONJOUR_CFG 6128 // 设置Bonjour信息 + + +#define NET_DVR_GET_SOCKS_CFG 6130//获取SOCKS信息 +#define NET_DVR_SET_SOCKS_CFG 6131//设置SOCKS信息 + +#define NET_DVR_GET_QOS_CFG 6132//获取QoS信息 +#define NET_DVR_SET_QOS_CFG 6133//设置QoS信息 + +#define NET_DVR_GET_HTTPS_CFG 6134//获取HTTPS信息 +#define NET_DVR_SET_HTTPS_CFG 6135//设置HTTPS信息 + +#define NET_DVR_GET_WD1_CFG 6136//远程获取WD1使能开关 +#define NET_DVR_SET_WD1_CFG 6137//远程设置WD1使能开关 + +#define NET_DVR_CREATE_CERT 6138//创建证书 +#define NET_DVR_DELETE_CERT 6139//删除证书 + + +#define NET_DVR_GET_RECORD_LOCK_PERCENTAGE 6140 //获取录像段锁定比例 +#define NET_DVR_SET_RECORD_LOCK_PERCENTAGE 6141 //设置录像段锁定比例 + +#define NET_DVR_CMD_TRIGGER_PERIOD_RECORD 6144 //外部命令触发指定时间录像 +#define NET_DVR_UPLOAD_CERT 6145 //上传证书 +#define NET_DVR_DOWNLOAD_CERT 6146 //下载证书 +#define NET_DVR_GET_CERT 6147 //获取证书 + +#define NET_DVR_GET_POS_FILTER_CFG 6148 //获取POS过滤规则 +#define NET_DVR_SET_POS_FILTER_CFG 6149 //设置POS过滤规则 +#define NET_DVR_GET_CONNECT_POS_CFG 6150 //获取DVR与POS连接方式 +#define NET_DVR_SET_CONNECT_POS_CFG 6151 //设置DVR与POS连接方式 +#define NET_DVR_GET_CHAN_FILTER_CFG 6152 //获取规则与通道关联信息 +#define NET_DVR_SET_CHAN_FILTER_CFG 6153 //设置规则与通道关联信息 + + +#define NET_DVR_GET_FTPCFG_V40 6162 //获取FTP信息 +#define NET_DVR_SET_FTPCFG_V40 6163 //设置FTP信息 + +#define NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION 6164 //获取月历录像分布 +#define NET_DVR_GET_ACCESS_DEVICE_CHANNEL_INFO 6165 //获取待接入设备通道信息 +#define NET_DVR_GET_PREVIEW_SWITCH_CFG 6166 //获取设备本地预览切换参数 +#define NET_DVR_SET_PREVIEW_SWITCH_CFG 6167 //设置设备本地预览切换参数 + +//Netra3.0.0 +#define NET_DVR_GET_N_PLUS_ONE_WORK_MODE 6168 //获取N+1工作模式 +#define NET_DVR_SET_N_PLUS_ONE_WORK_MODE 6169 //设置N+1工作模式 + +#define NET_DVR_GET_HD_STATUS 6170 //获取硬盘状态 +#define NET_DVR_SET_HD_STATUS 6171 //设置硬盘状态 + +#define NET_DVR_IMPORT_IPC_CFG_FILE 6172 //导入IPC配置文件 +#define NET_DVR_EXPORT_IPC_CFG_FILE 6173 //导出IPC配置文件 +#define NET_DVR_UPGRADE_IPC 6174 //升级IP通道 + +#define NET_DVR_GET_RAID_BACKGROUND_TASK_SPEED 6175 //获取RAID后台任务速度 +#define NET_DVR_SET_RAID_BACKGROUND_TASK_SPEED 6176 //设置RAID后台任务速度 + +//marvell 256路NVR +#define NET_DVR_GET_EXCEPTIONCFG_V40 6177 //获取异常参数配置 +#define NET_DVR_SET_EXCEPTIONCFG_V40 6178 //设置异常参数配置 +#define NET_DVR_GET_PICCFG_V40 6179 //获取图象参数 支持变长 NetSDK_ +#define NET_DVR_SET_PICCFG_V40 6180 //设置图象参数, 支持变长 +#define NET_DVR_GET_ALARMINCFG_V40 6181 //获取报警输入参数,支持变长 +#define NET_DVR_SET_ALARMINCFG_V40 6182 //获取报警输入参数,支持变长 +#define NET_DVR_GET_IPALARMINCFG_V40 6183 //获取IP报警输入接入配置信息 +#define NET_DVR_GET_IPALARMOUTCFG_V40 6185 //获取IP报警输出接入配置信息 +#define NET_DVR_GET_USERCFG_V40 6187 //获取用户参数 +#define NET_DVR_SET_USERCFG_V40 6188 //设置用户参数 +#define NET_DVR_GET_WORK_STATUS 6189 //获取设备工作状态 +#define NET_DVR_GET_JPEG_CAPTURE_CFG_V40 6190 //获取DVR抓图配置 +#define NET_DVR_SET_JPEG_CAPTURE_CFG_V40 6191 //设置DVR抓图配置 +#define NET_DVR_GET_HDGROUP_CFG_V40 6192 //获取盘组管理配置参数 +#define NET_DVR_SET_HDGROUP_CFG_V40 6193 //设置盘组管理配置参数 +#define NET_DVR_GET_SMD_HOLIDAY_HANDLE 6194 //获取简易智能假日计划 +#define NET_DVR_SET_SMD_HOLIDAY_HANDLE 6195 //设置简易智能假日计划 +#define NET_DVR_GET_PIC_MODEL_CFG 6196 //获取图片建模配置参数 +#define NET_DVR_SET_PIC_MODEL_CFG 6197 //设置图片建模配置参数 +#define NET_DVR_START_LOCAL_MOUSE_EVENT 6198 //开启设备本地鼠标事件记录 +#define NET_DVR_START_SIMULARE_MOUSE_EVENT 6199 //远程模拟鼠标事件 +#define NET_DVR_GET_WORK_STATUS_V50 6200 //获取设备工作状态V50 + +//91系列HD-SDI高清DVR +#define NET_DVR_GET_ACCESS_CAMERA_INFO 6201 // 获取前端相机信息 +#define NET_DVR_SET_ACCESS_CAMERA_INFO 6202 // 设置前端相机信息 +#define NET_DVR_PULL_DISK 6203 // 安全拔盘 +#define NET_DVR_SCAN_RAID 6204 // 扫描阵列 +// CVR 2.0.X +#define NET_DVR_GET_USER_RIGHT_CFG 6210 // 获取用户权限 +#define NET_DVR_SET_USER_RIGHT_CFG 6211 // 设置用户权限 + +#define NET_DVR_ONE_KEY_CONFIG 6212 // 一键配置CVR +#define NET_DVR_RESTART_SERVICE 6213 // 重启CVR服务 + +#define NET_DVR_GET_MAX_MACHINE_NUM_CFG 6214 // 获取备机最大个数 +#define NET_DVR_SET_MAX_MACHINE_NUM_CFG 6215 // 设置备机最大个数 + +#define NET_DVR_ADD_DEVICE 6216 //N+1模式添加设备 +#define NET_DVR_DEL_DEVICE 6217 //N+1模式删除设备 + +#define NET_DVR_GET_DATA_CALLBACK_CFG 6218 // 获取数据回迁状态 +#define NET_DVR_SET_DATA_CALLBACK_CFG 6219 // 设置数据回迁状态 + +#define NET_DVR_CLONE_LUN 6220 //克隆LUN卷 +#define NET_DVR_EXPAND_LUN 6221 //扩展和重命名LUN卷 + +#define NET_DVR_GET_N_PLUS_ONE_DEVICE_INFO 6222 //获取N+1设备信息 +#define NET_DVR_MODIFY_DVR_NET_DISK 6223 //修改DVR网盘 +//#define NET_DVR_DEL_DVR_NET_DISK 6224 //删除DVR网盘 + +#define NET_DVR_CREATE_NAS 6225 //创建NAS +#define NET_DVR_DELETE_NAS 6226 //删除NAS + +#define NET_DVR_OPEN_ISCSI 6227 //开启iSCSI +#define NET_DVR_CLOSE_ISCSI 6228 //关闭iSCSI + +#define NET_DVR_GET_FC 6229 //获取光纤信息 +#define NET_DVR_OPEN_FC 6230 //开启FC +#define NET_DVR_CLOSE_FC 6231 //关闭FC +#define NET_DVR_ONE_KEY_CONFIG_SAN 6232 // 一键配置SAN, 与一键配置CVR逻辑一样 + +//CVR2.3.2 +#define NET_DVR_RECORD_CHECK 6233 //录像完整性检测 +#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL 6234 //手动添加录像回传任务 +#define NET_DVR_GET_ALL_RECORD_PASSBACK_TASK_MANUAL 6235 //获取所有手动添加录像回传任务 +#define NET_DVR_RECORD_PASSBACK_TASK_MANUAL_CTRL 6236 //控制手动录像回传任务 +#define NET_DVR_DEL_RECORD_PASSBACK_TASK_MANUAL 6237 //删除手动录像回传任务 +#define NET_DVR_GET_RECORD_PASSBACK_PLAN_CFG 6238 //获取录像回传计划配置 +#define NET_DVR_SET_RECORD_PASSBACK_PLAN_CFG 6239 //设置录像回传计划配置 +#define NET_DVR_GET_DEV_STORAGE_CFG 6240 //获取设备存储信息 +#define NET_DVR_GET_ONLINE_USER_CFG 6241 //获取在线用户参数 +#define NET_DVR_GET_RECORD_SEGMENT_CFG 6242 //获取录像段总量 + +#define NET_DVR_GET_REC_PASSBACK_TASK_EXECUTABLE 6243 //查询手动录像回传任务可执行性 +#define NET_DVR_GET_STREAM_MEDIA_CFG 6244 //获取流媒体回传录像参数配置(流ID方式) +#define NET_DVR_SET_STREAM_MEDIA_CFG 6245 //设置流媒体回传录像参数配置(流ID方式) +#define NET_DVR_GET_USERCFG_V50 6246 //获取用户参数V50 +#define NET_DVR_SET_USERCFG_V50 6247 //设置用户参数V50 + +#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG_CAP 6248 //获取CVR回传功能基础配置能力 +#define NET_DVR_GET_RECORD_PASSBACK_BASIC_CFG 6249 //获取CVR回传功能基础配置 +#define NET_DVR_SET_RECORD_PASSBACK_BASIC_CFG 6250 //设置CVR回传功能基础配置 +#define NET_DVR_ONE_KEY_CONFIG_V50 6251 // 一键配置CVR(V50) +#define NET_DVR_GET_RACM_CAP 6252 //获取存储总能力(RACM能力) +#define NET_DVR_GET_THUMBNAILS 6253 //获取缩略图(默认是录像的缩略图)(支持流ID) +#define NET_DVR_ADD_RECORD_PASSBACK_TASK_MANUAL_V50 6254 //手动添加录像回传任务V50(返回任务ID) +#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG_CAP 6255 //获取CVR回传历史录像计划能力 +#define NET_DVR_GET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6256 //获取CVR回传历史录像计划配置 +#define NET_DVR_SET_RECORD_PASSBACK_HISTORY_PLAN_CFG 6257 //设置CVR回传历史录像计划配置 +#define NET_DVR_ONE_KEY_CONFIG_V51 6258 // 一键配置CVR(V51) + + +#define NET_DVR_GET_RECORD_PACK 6301 //获取录像打包参数 +#define NET_DVR_SET_RECORD_PACK 6302 //设置录像打包参数 + +#define NET_DVR_GET_CLOUD_STORAGE_CFG 6303 //获取云存储配置信息 +#define NET_DVR_SET_CLOUD_STORAGE_CFG 6304 //设置云存储配置信息 +#define NET_DVR_GET_GOP_INFO 6305 //获取GOP信息 +#define NET_DVR_GET_PHY_DISK_INFO 6306 //获取物理磁盘信息 +//录播主机外部命令 +#define NET_DVR_GET_RECORDING_AUTO_TRACK_CFG 6307 //获取SDI自动配置信息 +#define NET_DVR_SET_RECORDING_AUTO_TRACK_CFG 6308 //设置SDI自动配置信息 + +#define NET_DVR_GET_RECORDING_PUBLISH_CFG 6309 //获取一键发布信息 +#define NET_DVR_SET_RECORDING_PUBLISH_CFG 6310 //设置一键发布信息 + + +#define NET_DVR_RECORDING_ONEKEY_CONTROL 6311 //录播主机控制 + +#define NET_DVR_GET_RECORDING_END_TIME 6312 //获取录播剩余时间 + +#define NET_DVR_RECORDING_PUBLISH 6313 //一键发布录像 + +#define NET_DVR_GET_CURRICULUM_CFG 6314 //获取课表配置信息 +#define NET_DVR_SET_CURRICULUM_CFG 6315 //设置课表配置信息 + +#define NET_DVR_GET_COURSE_INDEX_CFG 6316 //获取课程信息索引 +#define NET_DVR_SET_COURSE_INDEX_CFG 6317 //设置课程信息索引 + +#define NET_DVR_GET_PPT_CHANNEL 6318 //获取PPT支持通道号 +#define NET_DVR_GET_PPT_DETECT_CFG 6319 //获取PPT检测参数 +#define NET_DVR_SET_PPT_DETECT_CFG 6320 //设置PPT检测参数 + +#define NET_DVR_GET_RECORDINGHOST_CFG 6321 //获取录播主机配置信息 +#define NET_DVR_SET_RECORDINGHOST_CFG 6322 //设置录播主机配置信息 +#define NET_DVR_GET_BACKUP_RECORD_CFG 6323 //获取一键备份配置信息 +#define NET_DVR_SET_BACKUP_RECORD_CFG 6324 //设置一键备份配置信息 + +//庭审主机 +#define NET_DVR_GET_AUDIO_ACTIVATION_CFG 6326 //获取语音激励配置参数 +#define NET_DVR_SET_AUDIO_ACTIVATION_CFG 6327 //设置语音激励配置参数 +#define NET_DVR_GET_DECODERCFG_V40 6328 //获取解码器参数信息 +#define NET_DVR_SET_DECODERCFG_V40 6329 //设置解码器参数信息 + +#define NET_DVR_INFRARED_OUTPUT_CONTROL 6330 //红外输出控制 +#define NET_DVR_GET_INFRARED_CMD_NAME_CFG 6331 //获取红外命令名称参数配置 +#define NET_DVR_SET_INFRARED_CMD_NAME_CFG 6332 //设置红外命令名称参数配置 +#define NET_DVR_START_INFRARED_LEARN 6333 //远程红外学码 + +#define NET_DVR_GET_TRIAL_SYSTEM_CFG 6334 //获取庭审主机系统信息 +#define NET_DVR_SET_CASE_INFO 6335 //案件信息录入 +#define NET_DVR_GET_TRIAL_MICROPHONE_STATUS 6336 //获取麦克风状态信息 +#define NET_DVR_SET_TRIAL_MICROPHONE_STATUS 6337 //获取麦克风状态信息 +#define NET_DVR_GET_TRIAL_HOST_STATUS 6338 //获取庭审主机状态信息 +#define NET_DVR_GET_LAMP_OUT 6339 //获取LAMP输出口信息 +#define NET_DVR_SET_LAMP_OUT 6340 //设置LAMP输出口信息 +#define NET_DVR_LAMP_REMOTE_CONTROL 6341 // LAMP控制 +#define NET_DVR_REMOTE_CONTROL_PLAY 6342 //远程控制本地回放 +#define NET_DVR_GET_LOCAL_INPUT_CFG 6343 //获取庭审主机状态信息庭审主机本地输入信息 +#define NET_DVR_SET_LOCAL_INPUT_CFG 6344 //设置庭审主机本地输入信息 +#define NET_DVR_GET_CASE_INFO 6345 //获取当前案件信息 + +//审讯机外部命令 +#define NET_DVR_INQUEST_GET_CDW_STATUS 6350 //获取审讯机刻录状态-长连接 +#define NET_DVR_GET_MIX_AUDIOIN_CFG 6351 //获取混音输入口参数配置 +#define NET_DVR_SET_MIX_AUDIOIN_CFG 6352 //设置混音输入口参数配置 +#define NET_DVR_GET_MIX_AUDIOOUT_CFG 6353 //获取混音输出口参数配置 +#define NET_DVR_SET_MIX_AUDIOOUT_CFG 6354 //设置混音输出口参数配置 +#define NET_DVR_GET_AUDIOIN_VOLUME_CFG 6355 //获取音频输入口音量调节参数配置 +#define NET_DVR_SET_AUDIOIN_VOLUME_CFG 6356 //设置音频输入口音量调节参数配置 +#define NET_DVR_GET_AREA_MASK_CFG 6357 //获取马赛克区域配置 +#define NET_DVR_SET_AREA_MASK_CFG 6358 //设置马赛克区域配置 +#define NET_DVR_GET_AUDIO_DIACRITICAL_CFG 6359 //获取音频变音配置 +#define NET_DVR_SET_AUDIO_DIACRITICAL_CFG 6360 //设置音频变音配置 +#define NET_DVR_GET_WIFI_DHCP_ADDR_CFG 6361 //获WIFI DHCP 地址范围参数配置 +#define NET_DVR_SET_WIFI_DHCP_ADDR_CFG 6362 //设WIFI DHCP 地址范围参数配置 +#define NET_DVR_GET_WIFI_CLIENT_LIST_INFO 6363 //获取wifi热点下连接的设备信息 +#define NET_DVR_REMOTECONTROL_POWER_ON 6364 //远程开机 +#define NET_DVR_GET_MULTISTREAM_RELATION_CHAN_CFG 6365 //获取多码流关联通道参数配置 +#define NET_DVR_SET_MULTISTREAM_RELATION_CHAN_CFG 6366 //设置多码流关联通道参数配置 +#define NET_DVR_GET_VIDEOOUT_RESOLUTION_CFG 6367 //获取设备本地视频输出口分辨率 +#define NET_DVR_SET_VIDEOOUT_RESOLUTION_CFG 6368 //设置设备本地视频输出口分辨率 +#define NET_DVR_GET_AUDIOOUT_VOLUME_CFG 6369 //获取音频输出口音量调节参数配置 +#define NET_DVR_SET_AUDIOOUT_VOLUME_CFG 6370 //设置音频输出口音量调节参数配置 +#define NET_DVR_INQUEST_PAUSE_CDW 6371 //暂停刻录 +#define NET_DVR_INQUEST_RESUME_CDW 6372 //恢复刻录 +#define NET_DVR_GET_INPUT_CHAN_CFG 6373 //获取输入通道配置 +#define NET_DVR_SET_INPUT_CHAN_CFG 6374 //设置输入通道配置 +#define NET_DVR_GET_INQUEST_MIX_AUDIOIN_CFG 6375 //获取审讯机音频输入混音配置 +#define NET_DVR_SET_INQUEST_MIX_AUDIOIN_CFG 6376 //设置审讯机音频输入混音配置 +#define NET_DVR_CASE_INFO_CTRL 6377 //案件信息显示控制 +#define NET_DVR_GET_INQUEST_USER_RIGHT 6378 //获取审讯机用户权限 +#define NET_DVR_SET_INQUEST_USER_RIGHT 6379 //设置审讯机用户权限 +#define NET_DVR_GET_INQUEST_CASE_INFO 6380 //获取审讯案件信息配置 +#define NET_DVR_SET_INQUEST_CASE_INFO 6381 //设置审讯案件信息配置 + +#define NET_DVR_GET_FILM_MODE_CFG 6387 //获取电影模式 +#define NET_DVR_SET_FILM_MODE_CFG 6388 //设置电影模式 +#define NET_DVR_GET_FILM_MODE_CFG_CAP 6389 //获取电影模式配置能力 + +#define NET_DVR_GET_DIRECTED_STRATEGY_CFG 6390 //获取导播策略类型 +#define NET_DVR_SET_DIRECTED_STRATEGY_CFG 6391 //设置导播策略类型 +#define NET_DVR_GET_DIRECTED_STRATEGY_CFG_CAP 6392 //获取电影模式配置能力 +#define NET_DVR_GET_FRAME_CFG 6393 //获取画面边框 +#define NET_DVR_SET_FRAME_CFG 6394 //设置画面边框 +#define NET_DVR_GET_FRAME_CFG_CAP 6395 //获取画面边框配置能力 +#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG 6396 //获取音频优化参数 +#define NET_DVR_SET_AUDIO_EFFECTIVE_CFG 6397 //设置音频效果参数 +#define NET_DVR_GET_AUDIO_EFFECTIVE_CFG_CAP 6398 //获取音频效果优化配置能力 +#define NET_DVR_GET_RECORD_VIDEO_CFG 6399 //获取录制视频参数 +#define NET_DVR_SET_RECORD_VIDEO_CFG 6400 //设置录制视频参数 + + +#define NET_DVR_GET_OUTPUT_CFG 6401 //获取显示输出参数 +#define NET_DVR_SET_OUTPUT_CFG 6402 //设置显示输出参数 +#define NET_DVR_CODER_DISPLAY_START 6403 //开始输出 +#define NET_DVR_CODER_DISPLAY_STOP 6404 //停止输出 +#define NET_DVR_GET_WINDOW_STATUS 6405 //获取显示窗口状态 + +//VQD功能接口 +#define NET_DVR_GET_VQD_LOOP_DIAGNOSE_CFG 6406 //获取VQD循环诊断配置参数 +#define NET_DVR_SET_VQD_LOOP_DIAGNOSE_CFG 6407 //设置VQD循环诊断配置参数 +#define NET_DVR_GET_VQD_DIAGNOSE_INFO 6408 //手动获取VQD诊断信息 + +#define NET_DVR_RECORDING_PUBLISH_FILE 6421 //文件发布 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_CAP 6422 //获取文件发布能力 +#define NET_DVR_GET_PUBLISH_PROGRESS 6423 //获取发布进度 +#define NET_DVR_GET_RECORD_VIDEO_CFG_CAP 6424 //获取录制视频配置能力 +#define NET_DVR_GET_RTMP_CFG 6425 //获取RTMP参数 +#define NET_DVR_SET_RTMP_CFG 6426 //设置RTMP参数 +#define NET_DVR_GET_RTMP_CFG_CAP 6427 //获取RTMP配置能力 +#define NET_DVR_DEL_BACKGROUND_PIC 6428 //删除背景图片文件 +#define NET_DVR_GET_BACKGROUND_PIC_CFG 6429 //查询背景图片文件 +#define NET_DVR_GET_BACKGROUND_PIC_INFO 6430 //获取哪张图片作为背景图片 +#define NET_DVR_SET_BACKGROUND_PIC_INFO 6431 //设置哪张图片作为背景图片 +#define NET_DVR_GET_BACKGROUND_PIC_INFO_CAP 6432 //获取哪张图片作为背景图片配置能力 +#define NET_DVR_GET_RECORD_HOST_CAP 6433 //获取录播主机总能力 +#define NET_DVR_GET_COURSE_LIST 6434 //获取课程列表 +#define NET_DVR_GET_RECORD_STATUS 6435 //查询录播主机当前状态 +#define NET_DVR_MANUAL_CURRICULUM_CONTROL 6436 //手动课表控制 +#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG 6437 //获取图像差分检测参数 +#define NET_DVR_SET_IMAGE_DIFF_DETECTION_CFG 6438 //设置图像差分检测参数 +#define NET_DVR_GET_IMAGE_DIFF_DETECTION_CFG_CAP 6439 //获取图像差分检测配置能力 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO 6440 //获取发布文件信息参数 +#define NET_DVR_SET_RECORDING_PUBLISH_FILE_INFO 6441 //设置发布文件信息参数 +#define NET_DVR_GET_RECORDING_PUBLISH_FILE_INFO_CAP 6442 //获取发布文件信息配置能力 +#define NET_DVR_MANUAL_CURRICULUM_CONTROL_CAP 6443 //获取手动课程录像的能力 +#define NET_DVR_GET_STATISTIC_DATA_LIST 6444 //获取统计数据列表 + +#define NET_DVR_GET_DEVICE_LAN_ENCODE 6501 //获取设备的语言编码 +#define NET_DVR_GET_GBT28181_SERVICE_CFG 6503 //获取GB28181服务器参数 +#define NET_DVR_SET_GBT28181_SERVICE_CFG 6504 //设置GB28181服务器参数 +#define NET_DVR_GET_GBT28181_SERVICE_CAPABILITIES 6505 //获取GB28181服务器能力 + +#define NET_DVR_GET_CLOUD_URL 6506 //获取云存储URL +#define NET_DVR_GET_CLOUD_URL_CAP 6507 //获取云存储URL-能力集 +#define NET_DVR_GET_CLOUD_CFG 6508 //获取云存储配置参数 +#define NET_DVR_SET_CLOUD_CFG 6509 //设置云存储配置参数 +#define NET_DVR_GET_CLOUD_CFG_CAP 6510 //获取云存储配置-能力集 +#define NET_DVR_GET_CLOUD_UPLOADSTRATEGY 6511 //获取云存储上传策略 +#define NET_DVR_SET_CLOUD_UPLOADSTRATEGY 6512 //设置云存储上传策略 +#define NET_DVR_GET_CLOUDSTORAGE_UPLOADSTRATEGY_CAP 6513 //云存储上传策略配置-能力集 + +#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG 6601 //获取视图库信息 +#define NET_DVR_SET_VIDEO_IMAGE_DB_CFG 6602 //设置视图库信息 +#define NET_DVR_GET_VIDEO_IMAGE_DB_CFG_CAP 6603 //获取视图库相关能力 +#define NET_DVR_GET_FILE_INFO_BY_ID 6604 //根据文件ID获取视图库中文件信息 +#define NET_DVR_QUERY_FILE_INFO_CAP 6605 //根据文件名查询文件信息能力 +#define NET_DVR_DEL_FILE_FROM_DB 6606 //从视图库中删除文件 +#define NET_DVR_GET_VIDEO_IMAGE_DB_CAP 6607 //获取视图库总能力 + +#define NET_DVR_GET_FIGURE 6610 //获取缩略图 + +#define NET_DVR_SYNC_IPC_PASSWD 6621 //同步IPC密码与NVR一致 +#define NET_DVR_GET_VEHICLE_BLOCKLIST_SCHEDULE 6622 //获取禁止名单布防时间配置 +#define NET_DVR_SET_VEHICLE_BLOCKLIST_SCHEDULE 6623 //设置禁止名单布防时间配置 + +#define NET_DVR_GET_VEHICLE_ALLOWLIST_SCHEDULE 6624 //获取允许名单布防时间配置 +#define NET_DVR_SET_VEHICLE_ALLOWLIST_SCHEDULE 6625 //设置允许名单布防时间配置 + +#define NET_DVR_GET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6626 //获取禁止名单布防联动配置 +#define NET_DVR_SET_VEHICLE_BLOCKLIST_EVENT_TRIGGER 6627 //设置禁止名单布防联动配置 + +#define NET_DVR_GET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6628 //获取允许名单布防联动配置 +#define NET_DVR_SET_VEHICLE_ALLOWLIST_EVENT_TRIGGER 6629 //设置允许名单布防联动配置 + +#define NET_DVR_GET_TRAFFIC_CAP 6630 //获取抓拍相关能力集 +#define NET_DVR_GET_VEHICLE_ALLLIST_EVENT_TRIGGER 6631 //获取全部车辆检测布防联动配置 +#define NET_DVR_SET_VEHICLE_ALLLIST_EVENT_TRIGGER 6632 //设置全部车辆检测布防联动配置 +#define NET_DVR_GET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6633 //获取其他单布防联动配置 +#define NET_DVR_SET_VEHICLE_OTHERLIST_EVENT_TRIGGER 6634 //设置其他单布防联动配置 + +#define NET_DVR_GET_STORAGEDETECTION_EVENT_TRIGGER 6635 //获取存储健康检测联动配置 +#define NET_DVR_SET_STORAGEDETECTION_EVENT_TRIGGER 6636 //设置存储健康检测联动配置 +#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE_CAPABILITIES 6637 //获取存储健康检测布防时间能力 +#define NET_DVR_GET_STORAGEDETECTION_SCHEDULE 6638 //获取存储健康布防时间配置 +#define NET_DVR_SET_STORAGEDETECTION_SCHEDULE 6639 //设置存储健康布防时间配置 +#define NET_DVR_GET_STORAGEDETECTION_STATE 6640 //获取存储健康状态 + +#define NET_DVR_GET_STORAGEDETECTION_RWLOCK 6646 //获取存储侦测的读写锁配置 +#define NET_DVR_GET_STORAGEDETECTION_RWLOCK_CAPABILITIES 6647 //获取存储侦测的读写锁配置能力 +#define NET_DVR_SET_STORAGEDETECTION_RWLOCK 6648 //设置存储侦测的读写锁配置 +#define NET_DVR_GET_PTZTRACKSTATUS 6649 //获取球机联动状态 + +#define NET_DVR_SET_STORAGEDETECTION_UNLOCK 6653 //设置存储侦测的解锁配置 +#define NET_DVR_GET_STORAGEDETECTION_UNLOCK_CAPABILITIES 6654 //获取存储侦测的解锁配置能力 + +#define NET_DVR_SET_SHIPSDETECTION_CFG 6655 //设置船只检测参数配置 +#define NET_DVR_GET_SHIPSDETECTION_CFG 6656 //获取船只检测参数配置 +#define NET_DVR_GET_SHIPSDETECTION_CAPABILITIES 6657 //获取船只检测参数配置能力 +#define NET_DVR_GET_SHIPSDETECTION_COUNT 6658 //获取船只计数信息 +#define NET_DVR_SHIPSCOUNT_DELETE_CTRL 6659 //清空船只计数信息 + +#define NET_DVR_GET_BAREDATAOVERLAY_CAPABILITIES 6660 //获取裸数据叠加能力 +#define NET_DVR_SET_BAREDATAOVERLAY_CFG 6661 //设置裸数据叠加 +#define NET_DVR_GET_BAREDATAOVERLAY_CFG 6662 //获取裸数据叠加 +#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE 6663 //获取船只检测布防时间配置 +#define NET_DVR_SET_SHIPSDETECTION_SCHEDULE 6664 //设置船只检测布防时间配置 +#define NET_DVR_GET_SHIPSDETECTION_EVENT_TRIGGER 6665 //获取船只检测联动配置 +#define NET_DVR_SET_SHIPSDETECTION_EVENT_TRIGGER 6666 //设置船只检测联动配置 +#define NET_DVR_GET_SHIPSDETECTION_SCHEDULE_CAPABILITIES 6667 //获取船只检测布防时间能力 + +#define NET_DVR_FIRE_FOCUSZOOM_CTRL 6670 //火点可见光镜头聚焦变倍 + +#define NET_DVR_GET_FIREDETECTION_SCHEDULE_CAPABILITIES 6671 //获取火点检测布防时间能力 +#define NET_DVR_GET_FIREDETECTION_SCHEDULE 6672 //获取火点检测布防时间配置 +#define NET_DVR_SET_FIREDETECTION_SCHEDULE 6673 //设置火点检测布防时间配置 +#define NET_DVR_GET_MANUALRANGING_CAPABILITIES 6675 //获取手动测距配置能力 +#define NET_DVR_SET_MANUALRANGING 6677 //设置手动测距参数 +#define NET_DVR_GET_MANUALDEICING_CAPABILITIES 6678//获取手动除冰配置能力 +#define NET_DVR_SET_MANUALDEICING 6679 //设置手动除冰 +#define NET_DVR_GET_MANUALDEICING 6680 //获取手动除冰 + +#define NET_DVR_GET_THERMALPOWER_CAPABILITIES 6689 //获取相机电源配置能力 +#define NET_DVR_GET_THERMALPOWER 6690 //获取相机电源配置参数 +#define NET_DVR_SET_THERMALPOWER 6691 //设置相机电源配置参数 +#define NET_DVR_GET_PTZABSOLUTEEX_CAPABILITIES 6695 //获取高精度PTZ绝对位置配置扩展能力 +#define NET_DVR_GET_PTZABSOLUTEEX 6696 //获取高精度PTZ绝对位置配置扩展 +#define NET_DVR_SET_PTZABSOLUTEEX 6697 //设置高精度PTZ绝对位置配置扩展 + +#define NET_DVR_GET_CRUISE_CAPABILITIES 6698 //获取设备巡航模式配置能力 +#define NET_DVR_GET_CRUISE_INFO 6699 //获取设备巡航模式 +#define NET_DVR_GET_TEMP_HUMI_CAPABILITIES 6700 //温湿度实时能力获取 +#define NET_DVR_GET_TEMP_HUMI_INFO 6701 //温湿度实时获取 + +#define NET_DVR_GET_MANUALTHERM_INFO 6706 //手动测温实时获取 +#define NET_DVR_GET_MANUALTHERM_CAPABILITIES 6707 //获取手动测温实时数据能力 +#define NET_DVR_SET_MANUALTHERM 6708 //设置手动测温数据设置 + +//DVR96000 +#define NET_DVR_GET_ACCESSORY_CARD_INFO_CAPABILITIES 6709 //获取配件板信息能力 +#define NET_DVR_GET_ACCESSORY_CARD_INFO 6710 //获取配件板信息 + +#define NET_DVR_GET_THERMINTELL_CAPABILITIES 6711 //获取热成像智能互斥能力 +#define NET_DVR_GET_THERMINTELL 6712 //获取热成像智能互斥配置参数 +#define NET_DVR_SET_THERMINTELL 6713 //设置热成像智能互斥配置参数 +#define NET_GET_CRUISEPOINT_V50 6714 //获取巡航路径配置扩展 +#define NET_DVR_GET_MANUALTHERM_BASIC_CAPABILITIES 6715 //获取手动测温基本参数配置能力 +#define NET_DVR_SET_MANUALTHERM_BASICPARAM 6716 //设置手动测温基本参数 +#define NET_DVR_GET_MANUALTHERM_BASICPARAM 6717 //获取手动测温基本参数 + +#define NET_DVR_GET_FIRESHIELDMASK_CAPABILITIES 6718 //获取火点区域屏蔽能力 + +#define NET_DVR_GET_HIDDEN_INFORMATION_CAPABILITIES 6720 //隐藏信息配置能力 +#define NET_DVR_GET_HIDDEN_INFORMATION 6721 //获取隐藏信息参数 +#define NET_DVR_SET_HIDDEN_INFORMATION 6722 //设置隐藏信息参数 + +#define NET_DVR_SET_FIRESHIELDMASK_CFG 6723 //设置火点区域屏蔽参数 +#define NET_DVR_GET_FIRESHIELDMASK_CFG 6724 //获取火点区域屏蔽参数 + +#define NET_DVR_GET_SMOKESHIELDMASK_CAPABILITIES 6725 //获取烟雾区域屏蔽能力 +#define NET_DVR_SET_SMOKESHIELDMASK_CFG 6726 //设置烟雾区域屏蔽参数 +#define NET_DVR_GET_SMOKESHIELDMASK_CFG 6727 //获取烟雾区域屏蔽参数 + +#define NET_DVR_GET_AREASCAN_CAPABILITIES 6728 //获取区域扫描能力 +#define NET_DVR_GET_AREASCAN_CFG 6730 //获取区域扫描参数 + +#define NET_DVR_DEL_AREASCAN_CFG 6731 //扫描区域删除 +#define NET_DVR_AREASCAN_INIT_CTRL 6732 //进入区域扫描设置 +#define NET_DVR_AREASCAN_CONFIRM_CTRL 6733 //保存区域扫描设置 +#define NET_DVR_AREASCAN_STOP_CTRL 6734 //停止区域扫描设置 +#define NET_DVR_SAVE_SCANZOOM_CTRL 6735 //设置扫描倍率;保存当前光学倍率为扫描倍率 +#define NET_DVR_GET_SCANZOOM_CTRL 6736 //获取扫描倍率;将预览界面中的光学倍率返回到当前扫描倍率。 +#define NET_DVR_DEL_FIRESHIELDMASK_CTRL 6737 //删除火点屏蔽区域 +#define NET_DVR_DEL_SMOKESHIELDMASK_CTRL 6738 //删除烟雾屏蔽区域 + +#define NET_DVR_GET_DENSEFOG_EVENT_TRIGGER 6740 //获取大雾检测联动配置 +#define NET_DVR_SET_DENSEFOG_EVENT_TRIGGER 6741 //设置大雾检测联动配置 +#define NET_DVR_SET_DENSEFOGDETECTION_CFG 6742 //设置大雾检测参数配置 +#define NET_DVR_GET_DENSEFOGDETECTION_CFG 6743 //获取大雾检测参数配置 +#define NET_DVR_GET_DENSEFOGDETECTION_CAPABILITIES 6744 //获取大雾检测参数配置能力 + +#define NET_DVR_GET_THERMOMETRY_SCHEDULE_CAPABILITIES 6750 //获取测温检测布防时间能力 +#define NET_DVR_GET_THERMOMETRY_SCHEDULE 6751 //获取测温检测布防时间配置 +#define NET_DVR_SET_THERMOMETRY_SCHEDULE 6752 //设置测温检测布防时间配置 +#define NET_DVR_GET_TEMPERTURE_SCHEDULE_CAPABILITIES 6753 //获取温差布防时间能力 +#define NET_DVR_GET_TEMPERTURE_SCHEDULE 6754 //获取温差布防时间配置 +#define NET_DVR_SET_TEMPERTURE_SCHEDULE 6755 //设置温差布防时间配置 +#define NET_DVR_GET_SEARCH_LOG_CAPABILITIES 6756 //日志类型支持能力 +#define NET_DVR_GET_VEHICLEFLOW 6758 //获取车流量数据 +#define NET_DVR_GET_IPADDR_FILTERCFG_V50 6759 //获取IP地址过滤参数扩展 +#define NET_DVR_SET_IPADDR_FILTERCFG_V50 6760 //设置IP地址过滤参数扩展 +#define NET_DVR_GET_TEMPHUMSENSOR_CAPABILITIES 6761 //获取温湿度传感器的能力 +#define NET_DVR_GET_TEMPHUMSENSOR 6762 //获取温湿度传感器配置协议 +#define NET_DVR_SET_TEMPHUMSENSOR 6763 //设置温湿度传感器配置协议 + +#define NET_DVR_GET_THERMOMETRY_MODE_CAPABILITIES 6764 //获取测温模式能力 +#define NET_DVR_GET_THERMOMETRY_MODE 6765 //获取测温模式参数 +#define NET_DVR_SET_THERMOMETRY_MODE 6766 //设置测温模式参数 + +#define NET_DVR_GET_THERMAL_PIP_CAPABILITIES 6767 //获取热成像画中画配置能力 +#define NET_DVR_GET_THERMAL_PIP 6768 //获取热成像画中画配置参数 +#define NET_DVR_SET_THERMAL_PIP 6769 //设置热成像画中画配置参数 +#define NET_DVR_GET_THERMAL_INTELRULEDISPLAY_CAPABILITIES 6770 //获取热成像智能规则显示能力 +#define NET_DVR_GET_THERMAL_INTELRULE_DISPLAY 6771 //获取热成像智能规则显示参数 +#define NET_DVR_SET_THERMAL_INTELRULE_DISPLAY 6772 //设置热成像智能规则显示参数 +#define NET_DVR_GET_THERMAL_ALGVERSION 6773 //获取热成像相关算法库版本 +#define NET_DVR_GET_CURRENT_LOCK_CAPABILITIES 6774 //获取电流锁定配置能力 +#define NET_DVR_GET_CURRENT_LOCK 6775 //获取电流锁定配置参数 +#define NET_DVR_SET_CURRENT_LOCK 6776 //设置电流锁定配置参数 + +#define NET_DVR_DEL_MANUALTHERM_RULE 6778 //删除手动测温规则 + +#define NET_DVR_GET_UPGRADE_INFO 6779 //获取升级信息 + +#define NET_DVR_SWITCH_TRANSFER 7000 + +#define NET_DVR_GET_MB_POWERCTRLPARA 8000//获取启动控制参数 +#define NET_DVR_SET_MB_POWERCTRLPARA 8001 //设置启动控制参数 +#define NET_DVR_GET_AUTOBACKUPPARA 8002//获取自动备份参数 +#define NET_DVR_SET_AUTOBACKUPPARA 8003 //设置自动备份参数 +#define NET_DVR_GET_MB_GPSPARA 8004//获取GPS参数 +#define NET_DVR_SET_MB_GPSPARA 8005 //设置GPS参数 +#define NET_DVR_GET_MB_SENSORINPARA 8006//获取SENSOR参数 +#define NET_DVR_SET_MB_SENSORINPARA 8007 //设置SENSOR参数 +#define NET_DVR_GET_GSENSORPARA 8008//获取GSENSOR参数 +#define NET_DVR_SET_GSENSORPARA 8009 //设置GSENSOR参数 +#define NET_DVR_GET_MB_DOWNLOADSVRPARA 8010//获取下载服务器参数 +#define NET_DVR_SET_MB_DOWNLOADSVRPARA 8011//设置下载服务器参数 +#define NET_DVR_GET_PLATERECOG_PARA 8012//获取车牌识别参数 +#define NET_DVR_SET_PLATERECOG_PARA 8013//设置车牌识别参数 +#define NET_DVR_GET_ENFORCESYS_PARA 8014//获取车辆稽查参数 +#define NET_DVR_SET_ENFORCESYS_PARA 8015//设置车辆稽查参数 +#define NET_DVR_GET_GPS_DATA 8016 //获取GPS数据 +#define NET_DVR_GET_ANALOG_ALARMINCFG 8017//获取模拟报警输入参数 +#define NET_DVR_SET_ANALOG_ALARMINCFG 8018//设置模拟报警输入参数 + +#define NET_DVR_GET_SYSTEM_CAPABILITIES 8100 //获取设备的系统能力 +#define NET_DVR_GET_EAGLEEYE_CAPABILITIES 8101 //获取设备鹰眼能力 +#define NET_DVR_GET_SLAVECAMERA_CALIB_V51 8102 //获取从摄像机标定配置V51 +#define NET_DVR_SET_SLAVECAMERA_CALIB_V51 8103 //设置从摄像机标定配置V51 +#define NET_DVR_SET_GOTOSCENE 8105 //设置主摄像机转向指定的场景ID + +//I、K、E系列NVR产品升级 +#define NET_DVR_GET_PTZ_NOTIFICATION 8201//获取多通道事件联动PTZ +#define NET_DVR_SET_PTZ_NOTIFICATION 8202//设置多通道事件联动PTZ +/*****************************电视墙 start****************************/ +#define NET_DVR_MATRIX_WALL_SET 9001 //设置电视墙中屏幕参数 +#define NET_DVR_MATRIX_WALL_GET 9002 //获取电视墙中屏幕参数 +#define NET_DVR_WALLWIN_GET 9003 //电视墙中获取窗口参数 +#define NET_DVR_WALLWIN_SET 9004 //电视墙中设置窗口参数 +#define NET_DVR_WALLWINPARAM_SET 9005 //设置电视墙窗口相关参数 +#define NET_DVR_WALLWINPARAM_GET 9006 //获取电视墙窗口相关参数 +#define NET_DVR_WALLSCENEPARAM_GET 9007 //设置场景模式参数 +#define NET_DVR_WALLSCENEPARAM_SET 9008 //获取场景模式参数 +#define NET_DVR_MATRIX_GETWINSTATUS 9009 //获取窗口解码状态 +#define NET_DVR_GET_WINASSOCIATEDDEVINFO 9010 //电视墙中获取对应资源信息 +#define NET_DVR_WALLOUTPUT_GET 9011 //电视墙中获取显示输出参数 +#define NET_DVR_WALLOUTPUT_SET 9012 //电视墙中设置显示输出参数 +#define NET_DVR_GET_UNITEDMATRIXSYSTEM 9013 //电视墙中获取对应资源 +#define NET_DVR_GET_WALL_CFG 9014 //获取电视墙全局参数 +#define NET_DVR_SET_WALL_CFG 9015 //设置电视墙全局参数 +#define NET_DVR_CLOSE_ALL_WND 9016 //关闭所有窗口 +#define NET_DVR_SWITCH_WIN_TOP 9017 //窗口置顶 +#define NET_DVR_SWITCH_WIN_BOTTOM 9018 //窗口置底 + +#define NET_DVR_CLOSE_ALL_WND_V41 9019 //电视墙关闭所有窗口v41(有多个电视墙) +#define NET_DVR_GET_WALL_WINDOW_V41 9020 //获取电视墙中的窗口v41 +#define NET_DVR_SET_WALL_WINDOW_V41 9021 //设置电视墙中的窗口v41 +#define NET_DVR_GET_CURRENT_SCENE_V41 9022 //获取当前电视墙中正在使用的场景v41 +#define NET_DVR_GET_WALL_SCENE_PARAM_V41 9023 //获取当前电视墙中正在使用的场景v41 +#define NET_DVR_SET_WALL_SCENE_PARAM_V41 9024 //设置当前电视墙中正在使用的场景v41 +#define NET_DVR_GET_MATRIX_LOGO_CFG 9025 //获取logo参数 +#define NET_DVR_SET_MATRIX_LOGO_CFG 9026 //设置logo参数 +#define NET_DVR_GET_WIN_LOGO_CFG 9027 //获取窗口logo参数 +#define NET_DVR_SET_WIN_LOGO_CFG 9028 //设置窗口logo参数 +#define NET_DVR_DELETE_LOGO 9029 //删除logo +#define NET_DVR_SET_DISPLAY_EFFECT_CFG 9030 //设置显示输出效果参数v41 +#define NET_DVR_GET_DISPLAY_EFFECT_CFG 9031 //获取显示输出效果参数v41 +#define NET_DVR_DEC_PLAY_REMOTE_FILE 9032 //解码播放远程文件 +#define NET_DVR_DEC_PLAY_REMOTE_FILE_V50 9314 //解码播放远程文件V50 +#define NET_DVR_GET_WIN_ZOOM_STATUS 9033 //获取窗口电子放大状态 +#define NET_DVR_GET_ALL_MATRIX_LOGOCFG 9034 //获取所有logo参数 + +/*****************************电视墙 end******************************/ + +/*******************************LCD拼接屏 begin******************************************/ +#define NET_DVR_SIMULATE_REMOTE_CONTROL 9035 //模拟遥控按键 2013-09-05 +#define NET_DVR_SET_SCREEN_SIGNAL_CFG 9036 //设置屏幕信号源参数 +#define NET_DVR_GET_SCREEN_SIGNAL_CFG 9037 //获取屏幕信号源参数 +#define NET_DVR_SET_SCREEN_SPLICE_CFG 9038 //设置屏幕拼接 +#define NET_DVR_GET_SCREEN_SPLICE_CFG 9039 //获取屏幕拼接 +#define NET_DVR_GET_SCREEN_FAN_WORK_MODE 9040 //获取风扇工作方式 +#define NET_DVR_SET_SCREEN_FAN_WORK_MODE 9041 //设置风扇工作方式 +#define NET_DVR_SHOW_SCREEN_WORK_STATUS 9044 //显示屏幕状态 +#define NET_DVR_GET_VGA_CFG 9045 //获取VGA信号配置 +#define NET_DVR_SET_VGA_CFG 9046 //设置VGA信号配置 +#define NET_DVR_GET_SCREEN_MENU_CFG 9048 //获取屏幕菜单配置 +#define NET_DVR_SET_SCREEN_MENU_CFG 9049 //设置屏幕菜单配置 +#define NET_DVR_SET_SCREEN_DISPLAY_CFG 9050 //设置显示参数 2013-08-28 +#define NET_DVR_GET_SCREEN_DISPLAY_CFG 9051 //获取显示参数 2013-08-28 + +#define NET_DVR_SET_FUSION_CFG 9052 //设置图像融合参数 +#define NET_DVR_GET_FUSION_CFG 9053 //获取图像融合参数 + +#define NET_DVR_SET_PIP_CFG 9060 //设置画中画参数 +#define NET_DVR_GET_PIP_CFG 9061 //获取画中画参数 +#define NET_DVR_SET_DEFOG_LCD 9073 //设置透雾参数 +#define NET_DVR_GET_DEFOG_LCD 9074 //获取透雾参数 +#define NET_DVR_SHOW_IP 9075 //显示IP +#define NET_DVR_SCREEN_MAINTENANCE_WALL 9076 //屏幕维墙 +#define NET_DVR_SET_SCREEN_POS 9077 //设置屏幕位置参数 +#define NET_DVR_GET_SCREEN_POS 9078 //获取屏幕位置参数 +/*******************************LCD拼接屏 end******************************************/ + +/*******************************LCD拼接屏V1.2 begin******************************************/ +#define NET_DVR_SCREEN_INDEX_SET 9079 //屏幕索引相关参数设置 +#define NET_DVR_SCREEN_INDEX_GET 9080 //屏幕索引相关参数获取 +#define NET_DVR_SCREEN_SPLICE_SET 9081 //设置屏幕拼接参数 +#define NET_DVR_SCREEN_SPLICE_GET 9082 //获取屏幕拼接参数 +#define NET_DVR_SET_SCREEN_PARAM 9083 //设置屏幕相关参数 +#define NET_DVR_GET_SCREEN_PARAM 9084 //获取屏幕相关参数 +#define NET_DVR_SET_SWITCH_CFG 9085 //设置定时开关机参数 +#define NET_DVR_GET_SWITCH_CFG 9086 //获取定时开关机参数 +#define NET_DVR_SET_POWERON_DELAY_CFG 9087 //设置延时开机参数 +#define NET_DVR_GET_POWERON_DELAY_CFG 9088 //获取延时开机参数 +#define NET_DVR_SET_SCREEN_POSITION 9089 //设置屏幕位置参数 +#define NET_DVR_GET_SCREEN_POSITION 9090 //获取屏幕位置参数 +#define NET_DVR_SCREEN_SCENE_CONTROL 9091 //屏幕场景控制 +#define NET_DVR_GET_CURRENT_SCREEN_SCENE 9092 //获取当前屏幕场景号 +#define NET_DVR_GET_SCREEN_SCENE_PARAM 9093 //获取屏幕场景模式参数 +#define NET_DVR_SET_SCREEN_SCENE_PARAM 9094 //设置屏幕场景模式参数 +#define NET_DVR_GET_EXTERNAL_MATRIX_RELATION 9095 //获取外接矩阵输入输出关联关系 +#define NET_DVR_GET_LCD_AUDIO_CFG 9096 //获取LCD屏幕音频参数 +#define NET_DVR_SET_LCD_AUDIO_CFG 9097 //设置LCD屏幕音频参数 +#define NET_DVR_GET_LCD_WORK_STATE 9098 //获取LCD屏幕工作状态 +#define NET_DVR_GET_BOOT_LOGO_CFG 9099 //获取LCD屏幕开机logo显示参数 +#define NET_DVR_SET_BOOT_LOGO_CFG 9100 //设置LCD屏幕开机logo显示参数 + +/*******************************LCD拼接屏V1.2 end ******************************************/ +#define NET_DVR_GET_STREAM_DST_COMPRESSIONINFO 9101 //获取目标压缩参数 +#define NET_DVR_SET_STREAM_DST_COMPRESSIONINFO 9102 //设置目标压缩参数 +#define NET_DVR_GET_STREAM_TRANS_STATUS 9103 //获取流状态 +#define NET_DVR_GET_DEVICE_TRANS_STATUS 9104 //获取设备转码状态 +#define NET_DVR_GET_ALLSTREAM_SRC_INFO 9105 //获取所有流信息 +#define NET_DVR_GET_BIG_SCREEN_AUDIO 9106 //获取大屏音频信息 +#define NET_DVR_SET_BIG_SCREEN_AUDIO 9107 //设置大屏音频信息 +#define NET_DVR_GET_DEV_WORK_MODE 9108 //获取转码设备工作模式 +#define NET_DVR_SET_DEV_WORK_MODE 9109 //设置转码设备工作模式 +#define NET_DVR_APPLY_TRANS_CHAN 9110 //按流ID申请转码通道 +#define NET_DVR_GET_DISPCHAN_CFG 9111 //批量获取显示通道参数 +#define NET_DVR_SET_DISPCHAN_CFG 9112 //批量设置显示通道参数 + +#define NET_DVR_GET_DEC_CHAN_STATUS 9113 //获取解码通道解码状态 +#define NET_DVR_GET_DISP_CHAN_STATUS 9114 //获取显示通道状态 +#define NET_DVR_GET_ALARMIN_STATUS 9115 //获取报警输入状态 +#define NET_DVR_GET_ALARMOUT_STATUS 9116 //获取报警输出状态 +#define NET_DVR_GET_AUDIO_CHAN_STATUS 9117 //获取语音对讲状态 + +#define NET_DVR_GET_VIDEO_AUDIOIN_CFG 9118 //获取视频的音频输入参数 +#define NET_DVR_SET_VIDEO_AUDIOIN_CFG 9119 //设置视频的音频输入参数 + +#define NET_DVR_SET_BASEMAP_CFG 9120 //设置底图参数 +#define NET_DVR_GET_BASEMAP_CFG 9121 //获取底图参数 +#define NET_DVR_GET_VIRTUAL_SCREEN_CFG 9122 //获取超高清输入子系统参数 +#define NET_DVR_SET_VIRTUAL_SCREEN_CFG 9123 //设置超高清输入子系统参数 +#define NET_DVR_GET_BASEMAP_WIN_CFG 9124 //获取底图窗口参数 +#define NET_DVR_SET_BASEMAP_WIN_CFG 9125 //设置底图窗口参数 +#define NET_DVR_DELETE_PICTURE 9126 //删除底图 +#define NET_DVR_GET_BASEMAP_PIC_INFO 9127 //获取底图图片信息 +#define NET_DVR_SET_BASEMAP_WIN_CFG_V40 9128 //设置底图窗口参数V40 +#define NET_DVR_GET_BASEMAP_WIN_CFG_V40 9129 //获取底图窗口参数V40 + +#define NET_DVR_GET_DEC_VCA_CFG 9130 //获取解码器智能报警参数 +#define NET_DVR_SET_DEC_VCA_CFG 9131 //设置解码器智能报警参数 + +#define NET_DVR_SET_VS_INPUT_CHAN_INIT_ALL 9132 //初始化虚拟屏子板的所有输入通道 +#define NET_DVR_GET_VS_INPUT_CHAN_INIT_ALL 9133 //获取虚拟屏子板的所有输入通道的初始化参数 +#define NET_DVR_GET_VS_INPUT_CHAN_INIT 9134 //获取虚拟屏输入通道的初始化参数 +#define NET_DVR_GET_VS_INPUT_CHAN_CFG 9135 //获取虚拟屏输入通道配置参数 + +#define NET_DVR_GET_TERMINAL_CONFERENCE_STATUS 9136 //获取终端会议状态 +#define NET_DVR_GET_TERMINAL_INPUT_CFG_CAP 9137 //获取终端输入参数能力 +#define NET_DVR_GET_TERMINAL_INPUT_CFG 9138 //获取终端视频会议输入参数 +#define NET_DVR_SET_TERMINAL_INPUT_CFG 9139 //设置终端视频会议输入参数 + +#define NET_DVR_GET_CONFERENCE_REGION_CAP 9140 //获取终端会议区域能力 +#define NET_DVR_GET_CONFERENCE_REGION 9141 //获取终端会议区域参数 +#define NET_DVR_SET_CONFERENCE_REGION 9142 //设置终端会议区域参数 +#define NET_DVR_GET_TERMINAL_CALL_CFG_CAP 9143 //获取终端呼叫配置能力 +#define NET_DVR_GET_TERMINAL_CALL_CFG 9144 //获取终端呼叫参数 +#define NET_DVR_SET_TERMINAL_CALL_CFG 9145 //设置终端呼叫参数 +#define NET_DVR_GET_TERMINAL_CTRL_CAP 9146 //获取终端呼叫控制能力 +#define NET_DVR_TERMINAL_CTRL 9147 //终端呼叫控制 +#define NET_DVR_GET_CALL_QUERY_CAP 9148 //获取会议查找能力 +#define NET_DVR_GET_CALLINFO_BY_COND 9149 //按条件查询呼叫记录 + +#define NET_DVR_SET_FUSION_SCALE 9150 //设置图像融合规模 +#define NET_DVR_GET_FUSION_SCALE 9151 //获取图像融合规模 + +#define NET_DVR_GET_VCS_CAP 9152 //获取MCU能力集 + + +#define NET_DVR_GET_TERMINAL_GK_CFG_CAP 9153 //获取终端注册GK能力 +#define NET_DVR_GET_TERMINAL_GK_CFG 9154 //获取终端注册GK参数 +#define NET_DVR_SET_TERMINAL_GK_CFG 9155 //设置终端注册GK参数 +#define NET_DVR_GET_MCU_CONFERENCESEARCH_CAP 9156 //获取MCU设备的能力 +#define NET_DVR_SET_VS_INPUT_CHAN_CFG 9157 //设置虚拟屏输入通道配置参数 +#define NET_DVR_GET_VS_NETSRC_CFG 9158 //设置虚拟屏网络源参数 +#define NET_DVR_SET_VS_NETSRC_CFG 9159 //设置虚拟屏网络源参数 + +#define NET_DVR_GET_LLDP_CFG 9160 //获取LLDP参数 +#define NET_DVR_SET_LLDP_CFG 9161 //设置LLDP参数 +#define NET_DVR_GET_LLDP_CAP 9162 //获取LLDP能力集 +#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO 9163 //获取光纤收发器基本信息 +#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE 9164 //获取光纤收发器工作状 +#define NET_DVR_GET_FIBER_CONVERT_TOPOLOGY 9165 //获取光纤收发器拓扑信息 +#define NET_DVR_GET_FC_PORT_REMARKS 9166 //获取光纤收发器端口注释参数 +#define NET_DVR_SET_FC_PORT_REMARKS 9167 //设置光纤收发器端口注释参数 +#define NET_DVR_GET_PORT_REMARKS_CAP 9168 //获取光纤收发器端口注释能力集 + +#define NET_DVR_GET_MCU_CONFERENCECONTROL_CAP 9169 //获取会议控制能力 +#define NET_DVR_GET_MCU_TERMINALCONTROL_CAP 9170 //获取终端控制能力 +#define NET_DVR_GET_MCU_TERIMINALGROUP_CAP 9171 //获取终端分组能力 +#define NET_DVR_GET_MCU_TERMINAL_CAP 9174 //获取终端管理能力 +#define NET_DVR_GET_MCU_CONFERENCE_CAP 9175 //获取会议能力 +#define NET_DVR_GET_MCU_GK_CFG_CAP 9176 //获取MCUGK配置能力 +#define NET_DVR_GET_MCU_GK_SERVER_CAP 9177 //获取MCUGK服务能力 + +#define NET_DVR_GET_EDID_CFG_FILE_INFO 9178 //获取EDID配置文件信息 +#define NET_DVR_GET_EDID_CFG_FILE_INFO_LIST 9179 //获取所有EDID配置文件信息 +#define NET_DVR_SET_EDID_CFG_FILE_INFO 9180 //设置EDID配置文件信息 +#define NET_DVR_DEL_EDID_CFG_FILE_INFO 9181 //删除EDID配置文件信息(包括文件) +#define NET_DVR_GET_EDID_CFG_FILE_INFO_CAP 9182 //EDID配置文件信息能力集 + +#define NET_DVR_GET_SUBWND_DECODE_OSD 9183 //获取子窗口解码OSD信息 +#define NET_DVR_GET_SUBWND_DECODE_OSD_ALL 9184 //获取所有子窗口解码OSD信息 +#define NET_DVR_SET_SUBWND_DECODE_OSD 9185 //设置子窗口解码OSD信息 +#define NET_DVR_GET_SUBWND_DECODE_OSD_CAP 9186 //获取子窗口解码OSD信息能力集 +#define NET_DVR_GET_DECODE_CHANNEL_OSD 9187 //获取解码通道OSD信息 +#define NET_DVR_SET_DECODE_CHANNEL_OSD 9188 //设置解码通道OSD信息 + + +#define NET_DVR_GET_OUTPUT_PIC_INFO 9200 //获取输出口图片参数 +#define NET_DVR_SET_OUTPUT_PIC_INFO 9201 //设置输出口图片参数 +#define NET_DVR_GET_OUTPUT_PIC_WIN_CFG 9202 //获取输出口图片窗口参数 +#define NET_DVR_SET_OUTPUT_PIC_WIN_CFG 9203 //设置输出口图片窗口参数 +#define NET_DVR_GET_OUTPUT_ALL_PIC_WIN_CFG 9204 //获取输出口所有图片窗口参数 +#define NET_DVR_DELETE_OUPUT_PIC 9205 //删除输出口图片 +#define NET_DVR_GET_OUTPUT_OSD_CFG 9206 //获取输出口OSD参数 +#define NET_DVR_SET_OUTPUT_OSD_CFG 9207 //设置输出口OSD参数 +#define NET_DVR_GET_OUTPUT_ALL_OSD_CFG 9208 //获取输出口所有OSD参数 +#define NET_DVR_GET_CHAN_RELATION 9209 //获取编码通道关联资源参数 +#define NET_DVR_SET_CHAN_RELATION 9210 //设置编码通道关联资源参数 +#define NET_DVR_GET_ALL_CHAN_RELATION 9211 //获取所有编码通道关联资源参数 +#define NET_DVR_GET_NS_RING_CFG 9212 //获取光纤板环网配置 +#define NET_DVR_SET_NS_RING_CFG 9213 //设置光纤板环网配置 +#define NET_DVR_GET_NS_RING_STATUS 9214 //获取光纤板环网状态 +#define NET_DVR_GET_OPTICAL_PORT_INFO 9220 //获取光口信息 +#define NET_DVR_SET_OPTICAL_PORT_INFO 9221 //设置光口信息 +#define NET_DVR_GET_OPTICAL_CHAN_RELATE_CFG 9222 //获取编码通道关联光口输入源参数 +#define NET_DVR_SET_OPTICAL_CHAN_RELATE_CFG 9223 //设置编码通道关联光口输入源参数 +#define NET_DVR_GET_WIN_ROAM_SWITCH_CFG 9224 //获取解码器窗口漫游开关参数 +#define NET_DVR_SET_WIN_ROAM_SWITCH_CFG 9225 //设置解码器窗口漫游开关参数 +#define NET_DVR_START_SCREEN_CRTL 9226 //开始屏幕控制 +#define NET_DVR_GET_SCREEN_FLIE_LIST 9227 //获取屏幕文件列表 +#define NET_DVR_GET_SCREEN_FILEINFO 9228 //获取屏幕文件信息参数 +#define NET_DVR_SET_SCREEN_FILEINFO 9229 //设置屏幕文件信息参数 + +/*******************************小间距LED显示屏 begin***************************************/ +#define NET_DVR_GET_LED_OUTPUT_CFG 9230 //获取发送卡输出参数 +#define NET_DVR_SET_LED_OUTPUT_CFG 9231 //设置发送卡输出参数 +#define NET_DVR_GET_LED_OUTPUT_PORT_CFG 9232 //获取LED发送卡输出端口参数 +#define NET_DVR_SET_LED_OUTPUT_PORT_CFG 9233 //设置LED发送卡输出端口参数 +#define NET_DVR_GET_LED_DISPLAY_AREA_CFG 9234 //获取LED发送卡显示区域 +#define NET_DVR_SET_LED_DISPLAY_AREA_CFG 9235 //设置LED发送卡显示区域 +#define NET_DVR_GET_LED_PORT_CFG 9236 //获取LED发送卡端口参数 +#define NET_DVR_SET_LED_PORT_CFG 9237 //设置LED发送卡端口参数 +#define NET_DVR_GET_LED_DISPLAY_CFG 9238 //获取LED发送卡显示参数 +#define NET_DVR_SET_LED_DISPLAY_CFG 9239 //设置LED发送卡显示参数 +#define NET_DVR_GET_ALL_LED_PORT_CFG 9240 //获取LED发送卡某个输出对应 +#define NET_DVR_SAVE_LED_CONFIGURATION 9241 //参数固化 +#define NET_DVR_GET_LED_TEST_SIGNAL_CFG 9242 //获取LED屏测试信号参数 +#define NET_DVR_SET_LED_TEST_SIGNAL_CFG 9243 //设置LED屏测试信号参数 +#define NET_DVR_GET_LED_NOSIGNAL_CFG 9244 //获取LED屏无信号显示模式参数 +#define NET_DVR_SET_LED_NOSIGNAL_CFG 9245 //设置LED屏无信号显示模式参数 +#define NET_DVR_GET_LED_INPUT_CFG 9246 //获取LED发送卡输入参数 +#define NET_DVR_SET_LED_INPUT_CFG 9247 //设置LED发送卡输入参数 +#define NET_DVR_GET_LED_RECV_GAMMA_CFG 9248 //获取接收卡GAMMA表参数 +#define NET_DVR_SET_LED_RECV_GAMMA_CFG 9249 //设置接收卡GAMMA表参数 +#define NET_DVR_GET_LED_RECV_CFG 9250 //获取接收卡基本参数 +#define NET_DVR_SET_LED_RECV_CFG 9251 //设置接收卡基本参数 +#define NET_DVR_GET_LED_RECV_ADVANCED_CFG 9252 //获取接收卡高级参数 +#define NET_DVR_SET_LED_RECV_ADVANCED_CFG 9253 //设置接收卡高级参数 +#define NET_DVR_GET_LED_SCREEN_DISPLAY_CFG 9254 //获取LED屏显示参数 +#define NET_DVR_SET_LED_SCREEN_DISPLAY_CFG 9255 //设置LED屏显示参数 +/*******************************小间距LED显示屏 end*****************************************/ + +#define NET_DVR_GET_INSERTPLAY_PROGRESS 9273 //获取插播进度 + +#define NET_DVR_GET_SCREEN_CONFIG 9260 //获取屏幕服务器参数 +#define NET_DVR_SET_SCREEN_CONFIG 9261 //设置屏幕服务器参数 +#define NET_DVR_GET_SCREEN_CONFIG_CAP 9262 //获取屏幕服务器参数能力集 + +#define NET_DVR_GET_SCHEDULE_PUBLISH_PROGRESS 9271 //获取日程发布进度 +#define NET_DVR_GET_PUBLISH_UPGRADE_PROGRESS 9272 //获取信息发布终端升级进度 + +#define NET_DVR_GET_INPUT_BOARD_CFG 9281 //获取输入板配置信息 +#define NET_DVR_GET_INPUT_BOARD_CFG_LIST 9282 //获取输入板配置信息列表 +#define NET_DVR_SET_INPUT_BOARD_CFG 9283 //设置输入板配置信息 + +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CAP 9284 //获取输入源字符叠加能力 +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG 9285 //获取输入源字符叠加参数 +#define NET_DVR_GET_INPUT_SOURCE_TEXT_CFG_LSIT 9286 //获取输入源字符叠加参数列表 +#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG 9287 //设置输入源字符叠加参数 +#define NET_DVR_SET_INPUT_SOURCE_TEXT_CFG_LIST 9288 //设置输入源字符叠加参数列表 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CAP 9289 //获取输入源自定义分辨率能力 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG 9290 //获取输入源自定义分辨率参数 +#define NET_DVR_GET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9291 //获取输入源自定义分辨率列表 +#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG 9292 //设置输入源自定义分辨率参数 +#define NET_DVR_SET_INPUT_SOURCE_RESOLUTION_CFG_LIST 9293 //设置输入源自定义分辨率参数 +#define NET_DVR_GET_LED_AREA_INFO_LIST 9295 //获取LED区域列表 + +#define NET_DVR_GET_DISPINPUT_CFG 9296 //获取显示输入参数 +#define NET_DVR_GET_DISPINPUT_CFG_LIST 9297 //获取所有显示输入参数 +#define NET_DVR_SET_DISPINPUT_CFG 9298 //设置显示输入参数 +#define NET_DVR_GET_DISPINPUT_CFG_CAP 9299 //获取显示输入参数能力集 +#define NET_DVR_GET_CURRENT_VALID_PORT 9300 //获取当前有效的,可以连接的端口 + +#define NET_DVR_SET_ONLINE_UPGRADE 9301 //允许在线升级 +#define NET_DVR_GET_ONLINEUPGRADE_PROGRESS 9302 //获取在线升级进度 +#define NET_DVR_GET_FIRMWARECODE 9303 //获取识别码 +#define NET_DVR_GET_ONLINEUPGRADE_SERVER 9304 //获取升级服务器状态 +#define NET_DVR_GET_ONLINEUPGRADE_VERSION 9305 //获取新版本信息 +#define NET_DVR_GET_RECOMMEN_VERSION 9306 //检测是否推荐升级到此版本 +#define NET_DVR_GET_ONLINEUPGRADE_ABILITY 9309 //获取在线升级能力集 + +#define NET_DVR_GET_FIBER_CONVERT_BASIC_INFO_V50 9310 //获取远端网管收发器基本信息V50 +#define NET_DVR_GET_FIBER_CONVERT_WORK_STATE_V50 9311 //获取远端网管收发器工作状态 + +#define NET_SDK_LED_SCREEN_CHECK 9312 //LED屏幕校正 +#define NET_SDK_GENERATE_OUTPUT_CONTROL 9315 //通用扩展输出口模块控制 +#define NET_SDK_GET_MATRIX_STATUS_V51 9313 /*获取视频综合平台状态*/ + +//DS-19D2000-S V2.0升级 报警联动配置参数命令码 +#define NET_DVR_GET_ALARM_LINKAGE_CFG 9316 //获取动环报警联动配置参数 +#define NET_DVR_SET_ALARM_LINKAGE_CFG 9317 //设置动环报警联动配置参数 + + +#define NET_DVR_GET_RS485_WORK_MODE 10001 //获取RS485串口工作模式 +#define NET_DVR_SET_RS485_WORK_MODE 10002 //设置RS485串口工作模式 +#define NET_DVR_GET_SPLITTER_TRANS_CHAN_CFG 10003 //获取码分器透明通道参数 +#define NET_DVR_SET_SPLITTER_TRANS_CHAN_CFG 10004 //设置码分器透明通道参数 + +#define NET_DVR_GET_RS485_PROTOCOL_VERSION 10301 //获取RS485协议库版本信息 +#define NET_DVR_ALARMHOST_REGISTER_DETECTOR 10302 //自动注册探测器 + +#define NET_DVR_GET_SIP_CFG 11001 //IP可视化机获取SIP参数 +#define NET_DVR_SET_SIP_CFG 11002 //IP可视化机设置SIP参数 +#define NET_DVR_GET_IP_VIEW_DEVCFG 11003 //获取IP对讲分机配置 +#define NET_DVR_SET_IP_VIEW_DEVCFG 11004 //设置IP对讲分机配置 +#define NET_DVR_GET_IP_VIEW_AUDIO_CFG 11005 //获取IP对讲分机音频参数 +#define NET_DVR_SET_IP_VIEW_AUDIO_CFG 11006 //设置IP对讲分机音频参数 +#define NET_DVR_GET_IP_VIEW_CALL_CFG 11007 //获取IP对讲分机呼叫参数 +#define NET_DVR_SET_IP_VIEW_CALL_CFG 11008 //设置IP对讲分机呼叫参数 +#define NET_DVR_GET_AUDIO_LIMIT_ALARM_CFG 11009 //获取声音超限配置参数 +#define NET_DVR_SET_AUDIO_LIMIT_ALARM_CFG 11010 //设置声音超限配置参数 +#define NET_DVR_GET_BUTTON_DOWN_ALARM_CFG 11011 //获取按钮按下告警配置参数 +#define NET_DVR_SET_BUTTON_DOWN_ALARM_CFG 11012 //设置按钮按下告警配置参数 + +#define NET_DVR_GET_ISCSI_CFG 11070 // 获取ISCSI存储配置协议 +#define NET_DVR_SET_ISCSI_CFG 11071 // 获取ISCSI存储配置协议 + +#define NET_DVR_GET_SECURITYMODE 12004 //获取当前安全模式 +//2013-11-21 获取设备当前的温度和湿度 +#define NET_DVR_GET_TEMP_HUMI 12005 + +//2014-02-15 民用IPC自动化测试项目 +#define NET_DVR_SET_ALARMSOUNDMODE 12006 //设置报警声音模式 +#define NET_DVR_GET_ALARMSOUNDMODE 12007 //获取报警声音模式 + +#define NET_DVR_SET_IPDEVICE_ACTIVATED 13000//通过NVR激活前端设备 +#define NET_DVR_GET_DIGITAL_CHAN_SECURITY_STATUS 13001 //获取数字通道对应设备安全状态 +#define NET_DVR_GET_ACTIVATE_IPC_ABILITY 13003 //获取NVR激活IPC能力集 + + +/*******************************楼宇可视对讲机 start***********************************/ +#define NET_DVR_GET_VIDEO_INTERCOM_DEVICEID_CFG 16001 //获取可视对讲设备编号 +#define NET_DVR_SET_VIDEO_INTERCOM_DEVICEID_CFG 16002 //设置可视对讲设备编号 +#define NET_DVR_SET_PRIVILEGE_PASSWORD 16003 //设置权限密码配置信息 +#define NET_DVR_GET_OPERATION_TIME_CFG 16004 //获取操作时间配置 +#define NET_DVR_SET_OPERATION_TIME_CFG 16005 //设置操作时间配置 +#define NET_DVR_GET_VIDEO_INTERCOM_RELATEDEV_CFG 16006 //获取关联网络设备参数 +#define NET_DVR_SET_VIDEO_INTERCOM_RELATEDEV_CFG 16007 //设置关联网络设备参数 +#define NET_DVR_REMOTECONTROL_NOTICE_DATA 16008 //公告信息下发 +#define NET_DVR_REMOTECONTROL_GATEWAY 16009 //远程开锁 +#define NET_DVR_REMOTECONTROL_OPERATION_AUTH 16010 //操作权限验证 + +#define NET_DVR_GET_VIDEO_INTERCOM_IOIN_CFG 16016 //获取IO输入参数 +#define NET_DVR_SET_VIDEO_INTERCOM_IOIN_CFG 16017 //设置IO输入参数 +#define NET_DVR_GET_VIDEO_INTERCOM_IOOUT_CFG 16018 //获取IO输出参数 +#define NET_DVR_SET_VIDEO_INTERCOM_IOOUT_CFG 16019 //设置IO输出参数 +#define NET_DVR_GET_ELEVATORCONTROL_CFG 16020 //获取梯控器参数 +#define NET_DVR_SET_ELEVATORCONTROL_CFG 16021 //设置梯控器参数 +#define NET_DVR_GET_VIDEOINTERCOM_STREAM 16022 //获取可视对讲流通道参数 +#define NET_DVR_SET_VIDEOINTERCOM_STREAM 16023 //设置可视对讲流通道参数 +#define NET_DVR_GET_WDR_CFG 16024 //获取宽动态参数配置 +#define NET_DVR_SET_WDR_CFG 16025 //设置宽动态参数配置 +#define NET_DVR_GET_VIS_DEVINFO 16026 //获取可设备编号信息 +#define NET_DVR_GET_VIS_REGISTER_INFO 16027 //获取可设备注册的设备信息 +#define NET_DVR_GET_ELEVATORCONTROL_CFG_V40 16028 //获取梯控器参数-扩展 +#define NET_DVR_SET_ELEVATORCONTROL_CFG_V40 16029 //设置梯控器参数-扩展 +#define NET_DVR_GET_CALL_ROOM_CFG 16030 //获取按键呼叫住户配置 +#define NET_DVR_SET_CALL_ROOM_CFG 16031 //设置按键呼叫住户配置 +#define NET_DVR_VIDEO_CALL_SIGNAL_PROCESS 16032 //可视话对讲信令处理 +#define NET_DVR_GET_CALLER_INFO 16033 //获取主叫长号信息 +#define NET_DVR_GET_CALL_STATUS 16034 //获取通话状态 +#define NET_DVR_GET_SERVER_DEVICE_INFO 16035 //获取设备列表 +#define NET_DVR_SET_CALL_SIGNAL 16036 //可视对讲手机端发送信令 +#define NET_DVR_GET_VIDEO_INTERCOM_ALARM_CFG 16037 //获取可视对讲报警事件参数 +#define NET_DVR_SET_VIDEO_INTERCOM_ALARM_CFG 16038 //设置可视对讲报警事件参数 +#define NET_DVR_GET_RING_LIST 16039 //查询铃音参数列表 + +#define NET_DVR_GET_ROOM_CUSTOM_CFG 16040 //房间自定义获取 +#define NET_DVR_SET_ROOM_CUSTOM_CFG 16041 //房间自定义设置 +#define NET_DVR_GET_ELEVATORCONTROL_CFG_V50 16042 //获取梯控器参数V50 +#define NET_DVR_SET_ELEVATORCONTROL_CFG_V50 16043 //设置梯控器参数V50 +#define NET_DVR_GET_SIP_CFG_V50 16044 //获取SIP参数V50 +#define NET_DVR_SET_SIP_CFG_V50 16045 //设置SIP参数V50 +#define NET_DVR_GET_NOTICE_VIDEO_DATA 16050 //公告视频获取 + +/*******************************楼宇可视对讲机 end***********************************/ + +#define NET_DVR_DEBUGINFO_START 18000 //网传设备调试信息启动命令 +#define NET_DVR_AUTO_TEST_START 18001 //自动测试长连接获取 + +#define NET_DVR_GET_SELFCHECK_RESULT 20000 //获取设备自检结果 +#define NET_DVR_SET_TEST_COMMAND 20001 //设置测试控制命令 +#define NET_DVR_SET_TEST_DEVMODULE 20002 //设置测试硬件模块控制命令 +#define NET_DVR_GET_TEST_DEVMODULE 20003 //获取测试硬件模块控制命令 + +#define NET_DVR_SET_AUTOFOCUS_TEST 20004 //保存自动对焦参数 2013-10-26 +#define NET_DVR_CHECK_USER_STATUS 20005 //检测用户是否在线 +#define NET_DVR_GET_TEST_COMMAND 20010 //获取测试控制命令 +#define NET_DVR_GET_DIAL_SWITCH_CFG 20200 //获取拨码开关信息 +#define NET_DVR_SET_AGING_TRICK_SCAN 20201 //设置老化前后工具参数 +#define NET_DVR_GET_ECCENTRIC_CORRECT_STATE 20202 //获取获取偏心校正状态 + +#define NET_DVR_GET_THERMOMETRYRULE_TEMPERATURE_INFO 23001 //手动获取测温规则温度信息 + +#define NET_DVR_T1_TEST_CMD 131073 //当测试命令来用,通过数据区域的文本内容区分具体做什么.数据长度不得大于1024 +//数据区格式为://恢复设备默认参数并关机。 + +// 美分定制菜单输出模式外部命令 +#define NET_DVR_GET_MEMU_OUTPUT_MODE 155649 // 获取菜单输出模式 +#define NET_DVR_SET_MEMU_OUTPUT_MODE 155650 // 设置菜单输出模式 + +/***************************DS9000新增命令(_V30) end *****************************/ + +#define NET_DVR_GET_DEV_LOGIN_RET_INFO 16777200 //设备登陆返回参数 + + +#define NET_DVR_GET_TEST_VERSION_HEAD 268435441 //获取测试版本头 +#define NET_DVR_SET_TEST_VERSION_HEAD 268435442 //设置测试版本头 +#define NET_DVR_GET_TEST_VERSION_HEAD_V1 268435443 //获取测试版本头-第二版 +#define NET_DVR_SET_TEST_VERSION_HEAD_V1 268435444 //设置测试版本头-第二版 +#define NET_DVR_GET_TEST_VERSION_HEAD_V2 268435445 //获取测试版本头-第三版 +#define NET_DVR_SET_TEST_VERSION_HEAD_V2 268435446 //设置测试版本头-第三版 + +#define NET_DVR_GET_TEST_VERSION_HEAD_ONLY_0 268435447 //获取测试版本头,当前仅有一个版本 +#define NET_DVR_SET_TEST_VERSION_HEAD_ONLY_0 268435448 //设置测试版本头,当前仅有一个版本 + + +#define MAX_LOCAL_ADDR_LEN 96 //SOCKS最大本地网段个数 +#define MAX_COUNTRY_NAME_LEN 4 //国家简写名称长度 + +/************************DVR日志 begin***************************/ + +/* 报警 */ +//主类型 +#define MAJOR_ALARM 0x1 +//次类型 +#define MINOR_ALARM_IN 0x1 /* 报警输入 */ +#define MINOR_ALARM_OUT 0x2 /* 报警输出 */ +#define MINOR_MOTDET_START 0x3 /* 移动侦测报警开始 */ +#define MINOR_MOTDET_STOP 0x4 /* 移动侦测报警结束 */ +#define MINOR_HIDE_ALARM_START 0x5 /* 遮挡报警开始 */ +#define MINOR_HIDE_ALARM_STOP 0x6 /* 遮挡报警结束 */ +#define MINOR_VCA_ALARM_START 0x7 /*智能报警开始*/ +#define MINOR_VCA_ALARM_STOP 0x8 /*智能报警停止*/ +#define MINOR_ITS_ALARM_START 0x09 // 交通事件报警开始 +#define MINOR_ITS_ALARM_STOP 0x0A // 交通事件报警结束 +//2010-11-10 网络报警日志 +#define MINOR_NETALARM_START 0x0b /*网络报警开始*/ +#define MINOR_NETALARM_STOP 0x0c /*网络报警结束*/ +//2010-12-16 报警板日志,与"MINOR_ALARM_IN"配对使用 +#define MINOR_NETALARM_RESUME 0x0d /*网络报警恢复*/ +//2012-4-5 IPC PIR、无线、呼救报警 +#define MINOR_WIRELESS_ALARM_START 0x0e /* 无线报警开始 */ +#define MINOR_WIRELESS_ALARM_STOP 0x0f /* 无线报警结束 */ +#define MINOR_PIR_ALARM_START 0x10 /* 人体感应报警开始 */ +#define MINOR_PIR_ALARM_STOP 0x11 /* 人体感应报警结束 */ +#define MINOR_CALLHELP_ALARM_START 0x12 /* 呼救报警开始 */ +#define MINOR_CALLHELP_ALARM_STOP 0x13 /* 呼救报警结束 */ +#define MINOR_IPCHANNEL_ALARMIN_START 0x14 //数字通道报警输入开始:PCNVR在接收到数字通道的MINOR_ALARM_IN产生“数字通道报警输入开始”,10s,再收不到MINOR_ALARM_IN,产生“数字通道报警输入结束” +#define MINOR_IPCHANNEL_ALARMIN_STOP 0x15 //数字通道报警输入开始:同上 +#define MINOR_DETECTFACE_ALARM_START 0x16 /* 人脸侦测报警开始 */ +#define MINOR_DETECTFACE_ALARM_STOP 0x17 /* 人脸侦测报警结束 */ +#define MINOR_VQD_ALARM_START 0x18 //VQD报警 +#define MINOR_VQD_ALARM_STOP 0x19 //VQD报警结束 +#define MINOR_VCA_SECNECHANGE_DETECTION 0x1a //场景侦测报警 2013-07-16 + +#define MINOR_SMART_REGION_EXITING_BEGIN 0x1b //离开区域侦测开始 +#define MINOR_SMART_REGION_EXITING_END 0x1c //离开区域侦测结束 +#define MINOR_SMART_LOITERING_BEGIN 0x1d //徘徊侦测开始 +#define MINOR_SMART_LOITERING_END 0x1e //徘徊侦测结束 + +#define MINOR_VCA_ALARM_LINE_DETECTION_BEGIN 0x20 +#define MINOR_VCA_ALARM_LINE_DETECTION_END 0x21 +#define MINOR_VCA_ALARM_INTRUDE_BEGIN 0x22 //区域侦测开始 +#define MINOR_VCA_ALARM_INTRUDE_END 0x23 //区域侦测结束 +#define MINOR_VCA_ALARM_AUDIOINPUT 0x24 //音频异常输入 +#define MINOR_VCA_ALARM_AUDIOABNORMAL 0x25 //声强突变 +#define MINOR_VCA_DEFOCUS_DETECTION_BEGIN 0x26 //虚焦侦测开始 +#define MINOR_VCA_DEFOCUS_DETECTION_END 0x27 //虚焦侦测结束 + +//民用NVR +#define MINOR_EXT_ALARM 0x28/*IPC外部报警*/ +#define MINOR_VCA_FACE_ALARM_BEGIN 0x29 /*人脸侦测开始*/ +#define MINOR_SMART_REGION_ENTRANCE_BEGIN 0x2a //进入区域侦测开始 +#define MINOR_SMART_REGION_ENTRANCE_END 0x2b //进入区域侦测结束 +#define MINOR_SMART_PEOPLE_GATHERING_BEGIN 0x2c //人员聚集侦测开始 +#define MINOR_SMART_PEOPLE_GATHERING_END 0x2d //人员聚集侦测结束 +#define MINOR_SMART_FAST_MOVING_BEGIN 0x2e //快速运动侦测开始 +#define MINOR_SMART_FAST_MOVING_END 0x2f //快速运动侦测结束 + +#define MINOR_VCA_FACE_ALARM_END 0x30 /*人脸侦测结束*/ +#define MINOR_VCA_SCENE_CHANGE_ALARM_BEGIN 0x31 /*场景变更侦测开始*/ +#define MINOR_VCA_SCENE_CHANGE_ALARM_END 0x32 /*场景变更侦测结束*/ +#define MINOR_VCA_ALARM_AUDIOINPUT_BEGIN 0x33 /*音频异常输入开始*/ +#define MINOR_VCA_ALARM_AUDIOINPUT_END 0x34 /*音频异常输入结束*/ +#define MINOR_VCA_ALARM_AUDIOABNORMAL_BEGIN 0x35 /*声强突变侦测开始*/ +#define MINOR_VCA_ALARM_AUDIOABNORMAL_END 0x36 /*声强突变侦测结束*/ + +#define MINOR_VCA_LECTURE_DETECTION_BEGIN 0x37 //授课侦测开始报警 +#define MINOR_VCA_LECTURE_DETECTION_END 0x38 //授课侦测结束报警 +#define MINOR_VCA_ALARM_AUDIOSTEEPDROP 0x39 //声强陡降 2014-03-21 +#define MINOR_VCA_ANSWER_DETECTION_BEGIN 0x3a //回答问题侦测开始报警 +#define MINOR_VCA_ANSWER_DETECTION_END 0x3b //回答问题侦测结束报警 + +#define MINOR_SMART_PARKING_BEGIN 0x3c //停车侦测开始 +#define MINOR_SMART_PARKING_END 0x3d //停车侦测结束 +#define MINOR_SMART_UNATTENDED_BAGGAGE_BEGIN 0x3e //物品遗留侦测开始 +#define MINOR_SMART_UNATTENDED_BAGGAGE_END 0x3f //物品遗留侦测结束 +#define MINOR_SMART_OBJECT_REMOVAL_BEGIN 0x40 //物品拿取侦测开始 +#define MINOR_SMART_OBJECT_REMOVAL_END 0x41 //物品拿取侦测结束 +#define MINOR_SMART_VEHICLE_ALARM_START 0x46 //车牌检测开始 +#define MINOR_SMART_VEHICLE_ALARM_STOP 0x47 //车牌检测结束 +#define MINOR_THERMAL_FIREDETECTION 0x48 //热成像火点检测侦测开始 +#define MINOR_THERMAL_FIREDETECTION_END 0x49 //热成像火点检测侦测结束 +#define MINOR_SMART_VANDALPROOF_BEGIN 0x50 //防破坏检测开始 +#define MINOR_SMART_VANDALPROOF_END 0x51 //防破坏检测结束 + +#define MINOR_FACESNAP_MATCH_ALARM_START 0x55 /*人脸比对报警开始*/ +#define MINOR_FACESNAP_MATCH_ALARM_STOP 0x56 /*人脸比对报警结束*/ +#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_START 0x57 /*允许名单人脸比对(陌生人)报警开始*/ +#define MINOR_ALLOWLIST_FACESNAP_MATCH_ALARM_STOP 0x58 /*允许名单人脸比对(陌生人)报警结束*/ + +#define MINOR_THERMAL_SHIPSDETECTION 0x5a //热成像船只检测侦测 +#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_BEGIN 0x5b //热成像测温预警开始 +#define MINOR_THERMAL_THERMOMETRY_EARLYWARNING_END 0x5c //热成像测温预警结束 +#define MINOR_THERMAL_THERMOMETRY_ALARM_BEGIN 0x5d //热成像测温报警开始 +#define MINOR_THERMAL_THERMOMETRY_ALARM_END 0x5e //热成像测温报警结束 +#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_BEGIN 0x5f //热成像温差报警开始 +#define MINOR_THERMAL_THERMOMETRY_DIFF_ALARM_END 0x60 //热成像温差报警结束 +#define MINOR_FACE_THERMOMETRY_ALARM 0x63 //人脸测温报警 +#define MINOR_SMART_DENSEFOGDETECTION_BEGIN 0x6e //大雾侦测开始 +#define MINOR_SMART_DENSEFOGDETECTION_END 0x6f //大雾侦测结束 +#define MINOR_RUNNING_ALARM 0x70 //奔跑检测 +#define MINOR_RETENTION_ALARM 0x71 //滞留检测 +#define MINOR_SAFETY_HELMET_ALARM_START 0x72 /*未佩戴安全帽检测报警开始*/ +#define MINOR_SAFETY_HELMET_ALARM_STOP 0x73 /*未佩戴安全帽检测报警结束*/ +#define MINOR_HFPD_ALARM_START 0x74 /*高频人员检测报警开始*/ +#define MINOR_HFPD_ALARM_STOP 0x75 /*高频人员检测报警结束*/ +#define MINOR_MIXED_TARGET_ALARM_START 0x76 /*混合目标检测报警开始*/ +#define MINOR_MIXED_TARGET_ALARM_STOP 0x77 /*混合目标检测报警结束*/ +#define MINOR_VCA_PLAY_CELLPHONE_ALARM_BEGIN 0x78 //玩手机检测报警开始 +#define MINOR_VCA_PLAY_CELLPHONE_ALARM_END 0x79 //玩手机检测报警结束 +#define MINOR_VCA_GET_UP_ALARM_BEGIN 0x80 //起床检测报警开始 +#define MINOR_VCA_GET_UP_ALARM_END 0x81 //起床检测报警结束 +#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_BEGIN 0x82 //折线攀高报警开始 +#define MINOR_VCA_ADV_REACH_HEIGHT_ALARM_END 0x83 //折线攀高报警结束 +#define MINOR_VCA_TOILET_TARRY_ALARM_BEGIN 0x84 //如厕超时报警开始 +#define MINOR_VCA_TOILET_TARRY_ALARM_END 0x85 //如厕超时报警结束 +#define MINOR_HUMAN_RECOGNITION_ALARM_BEGIN 0x86 //人体识别报警开始 +#define MINOR_HUMAN_RECOGNITION_ALARM_END 0x87 //人体识别报警结束 +#define MINOR_STUDENTS_STOODUP_ALARM_BEGIN 0x88 //学生起立报警开始 +#define MINOR_STUDENTS_STOODUP_ALARM_END 0x89 //学生起立报警结束 +#define MINOR_FRAMES_PEOPLE_COUNTING_ALARM 0x8a //区域人数统计报警 +#define MINOR_FACE_SNAP_ALARM_BEGIN 0x8b //人脸抓拍报警开始 +#define MINOR_FACE_SNAP_ALARM_END 0x8c //人脸抓拍报警结束 +#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_BEGIN 0x8d //教师行为检测报警开始 +#define MINOR_TEACHER_BEHAVIOR_DETECT_ALARM_END 0x8e //教师行为检测报警结束 +#define MINOR_PERIMETER_CAPTURE_ALARM_BEGIN 0x8f //周界抓拍报警开始 +#define MINOR_PERIMETER_CAPTURE_ALARM_END 0x90 //周界抓拍报警结束 +#define MINOR_UNREGISTERED_STREET_VENDOR_ALARM 0x91 //非法摆摊报警 + +#define MINOR_PERSON_QUEUE_TIME_ALARM_BEGIN 0x92 //排队时长检测报警开始 +#define MINOR_PERSON_QUEUE_TIME_ALARM_END 0x93 //排队时长检测报警结束 +#define MINOR_PERSON_QUEUE_COUNTING_ALARM_BEGIN 0x94 //排队人数检测报警开始 +#define MINOR_PERSON_QUEUE_COUNTING_ALARM_END 0x95 //排队人数检测报警结束 +#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_START 0x96 //人脸比对失败报警开始 +#define MINOR_FACE_SNAP_MATCH_FAILURE_ALARM_END 0x97 //人脸比对失败报警结束 + + +#define MINOR_ACCESS_CONTROLLER_EVENT 0x100 //门禁主机事件 +#define MINOR_VIDEO_INTERCOM_EVENT 0x101 //可视对讲设备事件 +#define MINOR_GJD_EVENT 0x102 //GJD报警主机事件 +#define MINOR_LUMINITE_EVENT 0x103 // LUMINITE报警主机事件 +#define MINOR_OPTEX_EVENT 0x104 // OPTEX报警主机事件 +#define MINOR_CAMERA_DETECTOR_EVENT 0x105 // 传感器事件 +#define MINOR_SECURITY_CONTROL_PANEL_EVENT 0x106 //私有报警主机事件 + +#define MINOR_VCA_SPACE_CHANGE_START 0x10c //间距异常检测开始 +#define MINOR_VCA_SPACE_CHANGE_STOP 0x10d //间距异常检测结束 +#define MINOR_MANUAL_ALARM 0x10e //手动报警 +#define MINOR_DETECTOR_ALARM 0x10f //探测器报警 +#define MINOR_LINKAGE_ALARM 0x110 //联动报警 +#define MINOR_VCA_SITUATION_ANALYSIS_START 0x111 //态势分析检测开始 +#define MINOR_VCA_SITUATION_ANALYSIS_STOP 0x112 //态势分析检测结束 +#define MINOR_FIRE_ALARM 0x113 //火警报警 +#define MINOR_SUPERVISE_ALARM 0x114 //监管报警 +#define MINOR_SHIELD_ALARM 0x115 //屏蔽报警 +#define MINOR_ABNORMAL_ALARM 0x116 //故障报警 +#define MINOR_RESIDUAL_CURRENT_ALARM 0x117 //剩余电流报警 +#define MINOR_TEMPERATURE_ALARM 0x118 //温度报警 +#define MINOR_ARC_ALARM 0x119 //电弧报警 + +#define MINOR_VCA_YARD_TARRY_ALARM_BEGIN 0x11a //放风场滞留报警开始 +#define MINOR_VCA_YARD_TARRY_ALARM_END 0x11b //放风场滞留报警结束 +#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_BEGIN 0x11c //重点人员起身报警开始 +#define MINOR_VCA_KEY_PERSON_GET_UP_ALARM_END 0x11d //重点人员起身报警结束 +#define MINOR_VCA_SIT_QUIETLY_ALARM_BEGIN 0x11e //一动不动报警开始 +#define MINOR_VCA_SIT_QUIETLY_ALARM_END 0x11f //一动不动报警结束 +#define MINOR_VCA_STAND_UP_ALARM_BEGIN 0x120 //站立报警开始 +#define MINOR_VCA_STAND_UP_ALARM_END 0x121 //站立报警结束 +#define MINOR_VCA_REACH_HIGHT_ALARM_BEGIN 0x122 //攀高报警开始 +#define MINOR_VCA_REACH_HIGHT_ALARM_END 0x123 //攀高报警结束 + +#define MINOR_LFPD_ALARM_START 0x124 /*低频人员检测报警开始*/ +#define MINOR_LFPD_ALARM_STOP 0x125 /*低频人员检测报警结束*/ + +#define MINOR_DREDGERDETECTION_ALARM 0x126// 挖沙船检测报警 +#define MINOR_STUDENT_BEHAVIOR_ALARM_BEGIN 0x127 //课堂学生行为报警开始 +#define MINOR_STUDENT_BEHAVIOR_ALARM_END 0x128 //课堂学生行为报警结束 +#define MINOR_VCA_ALARM_VEHICLEMONITOR 0x129 //车辆布防报警(用于车辆布防第一次上来车辆检测(带车辆布防信息)的日志) +#define MINOR_WASTEGASDETECTION_ALARM 0x130// 废气排放显示事件上报 +#define MINOR_GREYSCALE_ALARM 0x131// 灰度报警 +#define MINOR_VIBRATION_DETECTION_ALARM_BEGIN 0x132 //振动侦测报警开始 +#define MINOR_VIBRATION_DETECTION_ALARM_END 0x133 //振动侦测报警结束 +#define MINOR_SMOKE_DETECT_ALARM_BEGIN 0x134 //抽烟检测报警开始 +#define MINOR_SMOKE_DETECT_ALARM_END 0x135 //抽烟检测报警结束 +#define MINOR_METHANE_CONCENTRATION_ALARM 0x136 //甲烷浓度异常事件 +#define MINOR_METHANE_LIGHTINTENSITY_ALARM 0x137 //甲烷光强异常事件 +#define MINOR_SMOG_BEGIN 0x138 //烟雾报警开始 +#define MINOR_SMOG_END 0x139 //烟雾报警结束 +#define MINOR_VOCS_ALARM 0x140 //VOCs气体报警 + +//0x400-0x1000 门禁报警 +#define MINOR_ALARMIN_SHORT_CIRCUIT 0x400 //防区短路报警 +#define MINOR_ALARMIN_BROKEN_CIRCUIT 0x401 //防区断路报警 +#define MINOR_ALARMIN_EXCEPTION 0x402 //防区异常报警 +#define MINOR_ALARMIN_RESUME 0x403 //防区报警恢复 +#define MINOR_HOST_DESMANTLE_ALARM 0x404 //设备防拆报警 +#define MINOR_HOST_DESMANTLE_RESUME 0x405 //设备防拆恢复 +#define MINOR_CARD_READER_DESMANTLE_ALARM 0x406 //读卡器防拆报警 +#define MINOR_CARD_READER_DESMANTLE_RESUME 0x407 //读卡器防拆恢复 +#define MINOR_CASE_SENSOR_ALARM 0x408 //事件输入报警 +#define MINOR_CASE_SENSOR_RESUME 0x409 //事件输入恢复 +#define MINOR_STRESS_ALARM 0x40a //胁迫报警 +#define MINOR_OFFLINE_ECENT_NEARLY_FULL 0x40b //离线事件满90%报警 +#define MINOR_CARD_MAX_AUTHENTICATE_FAIL 0x40c //卡号认证失败超次报警 +#define MINOR_SD_CARD_FULL 0x40d //SD卡存储满报警 +#define MINOR_LINKAGE_CAPTURE_PIC 0x40e //联动抓拍事件报警 +#define MINOR_SECURITY_MODULE_DESMANTLE_ALARM 0x40f //门控安全模块防拆报警 +#define MINOR_SECURITY_MODULE_DESMANTLE_RESUME 0x410 //门控安全模块防拆恢复 + +#define MINOR_POS_START_ALARM 0x411 //POS开启 +#define MINOR_POS_END_ALARM 0x412 //POS结束 +#define MINOR_FACE_IMAGE_QUALITY_LOW 0x413 //人脸图像画质低 +#define MINOR_FINGE_RPRINT_QUALITY_LOW 0x414 //指纹图像画质低 +#define MINOR_FIRE_IMPORT_SHORT_CIRCUIT 0x415 //消防输入短路报警 +#define MINOR_FIRE_IMPORT_BROKEN_CIRCUIT 0x416 //消防输入断路报警 +#define MINOR_FIRE_IMPORT_RESUME 0x417 //消防输入恢复 +#define MINOR_FIRE_BUTTON_TRIGGER 0x418 //消防按钮触发 +#define MINOR_FIRE_BUTTON_RESUME 0x419 //消防按钮恢复 +#define MINOR_MAINTENANCE_BUTTON_TRIGGER 0x41a //维护按钮触发 +#define MINOR_MAINTENANCE_BUTTON_RESUME 0x41b //维护按钮恢复 +#define MINOR_EMERGENCY_BUTTON_TRIGGER 0x41c //紧急按钮触发 +#define MINOR_EMERGENCY_BUTTON_RESUME 0x41d //紧急按钮恢复 +#define MINOR_DISTRACT_CONTROLLER_ALARM 0x41e //分控器防拆报警 +#define MINOR_DISTRACT_CONTROLLER_RESUME 0x41f //分控器防拆报警恢复 + +#define MINOR_PERSON_DENSITY_DETECTION_START 0x420 //人员密度超阈值报警开始 +#define MINOR_PERSON_DENSITY_DETECTION_END 0x421 //人员密度超阈值报警结束 + +#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_ALARM 0x422 //通道控制器防拆报警 +#define MINOR_CHANNEL_CONTROLLER_DESMANTLE_RESUME 0x423 //通道控制器防拆报警恢复 +#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM 0x424 //通道控制器消防输入报警 +#define MINOR_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME 0x425 //通道控制器消防输入报警恢复 + +#define MINOR_HEART_RATE_ABNORMAL_BEGIN 0x426 //心率异常报警开始 +#define MINOR_HEART_RATE_ABNORMAL_END 0x427 //心率异常报警结束 +#define MINOR_BLOOD_OXYGEN_ABNORMAL_BEGIN 0x428 //血氧异常报警开始 +#define MINOR_BLOOD_OXYGEN_ABNORMAL_END 0x429 //血氧异常报警结束 +#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42a //血压收缩压异常报警开始 +#define MINOR_SYSTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42b //血压收缩压异常报警结束 +#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_BEGIN 0x42c //血压舒张压异常报警开始 +#define MINOR_DIASTOLIC_BLOOD_PRESSURE_ABNORMAL_END 0x42d //血压舒张压异常报警结束 +#define MINOR_VCA_LEAVE_POSITION_START 0x42e//离岗检测开始 +#define MINOR_VCA_LEAVE_POSITION_STOP 0x42f//离岗检测结束 +#define MINOR_VCA_STOOODUP_START 0x430//起立检测开始 +#define MINOR_VCA_STOOODUP_STOP 0x431//起立检测结束 +#define MINOR_VCA_PEOPLENUM_CHANGE_START 0x434//人数变化开始 +#define MINOR_VCA_PEOPLENUM_CHANGE_STOP 0x435//人数变化结束 +#define MINOR_VCA_RUNNING_START 0x438//人员奔跑开始 +#define MINOR_VCA_RUNNING_STOP 0x439//人员奔跑结束 +#define MINOR_VCA_VIOLENT_MOTION_START 0x43a//剧烈运动开始 +#define MINOR_VCA_VIOLENT_MOTION_STOP 0x43b//剧烈运动结束 +#define MINOR_VCA_FAIL_DOWN_START 0x43c//人员倒地开始 +#define MINOR_VCA_FAIL_DOWN_STOP 0x43d//人员倒地结束 +#define MINOR_VCA_RETENTION_START 0x43e//人员滞留开始 +#define MINOR_VCA_RETENTION_STOP 0x43f//人员滞留结束 + +#define MINOR_PRINTER_OUT_OF_PAPER 0x440 //打印机缺纸报警 +#define MINOR_LEGAL_EVENT_NEARLY_FULL 0x442 //离线合法事件满90%报警 +#define MINOR_FIRE_IMPORT_ALARM 0x443 //消防输入报警 +#define MINOR_TRANSACTION_RECORD_NEARLY_FULL 0x444 //交易记录满90%报警 + +#define MINOR_ALARM_CUSTOM1 0x900 //门禁自定义报警1 +#define MINOR_ALARM_CUSTOM2 0x901 //门禁自定义报警2 +#define MINOR_ALARM_CUSTOM3 0x902 //门禁自定义报警3 +#define MINOR_ALARM_CUSTOM4 0x903 //门禁自定义报警4 +#define MINOR_ALARM_CUSTOM5 0x904 //门禁自定义报警5 +#define MINOR_ALARM_CUSTOM6 0x905 //门禁自定义报警6 +#define MINOR_ALARM_CUSTOM7 0x906 //门禁自定义报警7 +#define MINOR_ALARM_CUSTOM8 0x907 //门禁自定义报警8 +#define MINOR_ALARM_CUSTOM9 0x908 //门禁自定义报警9 +#define MINOR_ALARM_CUSTOM10 0x909 //门禁自定义报警10 +#define MINOR_ALARM_CUSTOM11 0x90a //门禁自定义报警11 +#define MINOR_ALARM_CUSTOM12 0x90b //门禁自定义报警12 +#define MINOR_ALARM_CUSTOM13 0x90c //门禁自定义报警13 +#define MINOR_ALARM_CUSTOM14 0x90d //门禁自定义报警14 +#define MINOR_ALARM_CUSTOM15 0x90e //门禁自定义报警15 +#define MINOR_ALARM_CUSTOM16 0x90f //门禁自定义报警16 +#define MINOR_ALARM_CUSTOM17 0x910 //门禁自定义报警17 +#define MINOR_ALARM_CUSTOM18 0x911 //门禁自定义报警18 +#define MINOR_ALARM_CUSTOM19 0x912 //门禁自定义报警19 +#define MINOR_ALARM_CUSTOM20 0x913 //门禁自定义报警20 +#define MINOR_ALARM_CUSTOM21 0x914 //门禁自定义报警21 +#define MINOR_ALARM_CUSTOM22 0x915 //门禁自定义报警22 +#define MINOR_ALARM_CUSTOM23 0x916 //门禁自定义报警23 +#define MINOR_ALARM_CUSTOM24 0x917 //门禁自定义报警24 +#define MINOR_ALARM_CUSTOM25 0x918 //门禁自定义报警25 +#define MINOR_ALARM_CUSTOM26 0x919 //门禁自定义报警26 +#define MINOR_ALARM_CUSTOM27 0x91a //门禁自定义报警27 +#define MINOR_ALARM_CUSTOM28 0x91b //门禁自定义报警28 +#define MINOR_ALARM_CUSTOM29 0x91c //门禁自定义报警29 +#define MINOR_ALARM_CUSTOM30 0x91d //门禁自定义报警30 +#define MINOR_ALARM_CUSTOM31 0x91e //门禁自定义报警31 +#define MINOR_ALARM_CUSTOM32 0x91f //门禁自定义报警32 +#define MINOR_ALARM_CUSTOM33 0x920 //门禁自定义报警33 +#define MINOR_ALARM_CUSTOM34 0x921 //门禁自定义报警34 +#define MINOR_ALARM_CUSTOM35 0x922 //门禁自定义报警35 +#define MINOR_ALARM_CUSTOM36 0x923 //门禁自定义报警36 +#define MINOR_ALARM_CUSTOM37 0x924 //门禁自定义报警37 +#define MINOR_ALARM_CUSTOM38 0x925 //门禁自定义报警38 +#define MINOR_ALARM_CUSTOM39 0x926 //门禁自定义报警39 +#define MINOR_ALARM_CUSTOM40 0x927 //门禁自定义报警40 +#define MINOR_ALARM_CUSTOM41 0x928 //门禁自定义报警41 +#define MINOR_ALARM_CUSTOM42 0x929 //门禁自定义报警42 +#define MINOR_ALARM_CUSTOM43 0x92a //门禁自定义报警43 +#define MINOR_ALARM_CUSTOM44 0x92b //门禁自定义报警44 +#define MINOR_ALARM_CUSTOM45 0x92c //门禁自定义报警45 +#define MINOR_ALARM_CUSTOM46 0x92d //门禁自定义报警46 +#define MINOR_ALARM_CUSTOM47 0x92e //门禁自定义报警47 +#define MINOR_ALARM_CUSTOM48 0x92f //门禁自定义报警48 +#define MINOR_ALARM_CUSTOM49 0x930 //门禁自定义报警49 +#define MINOR_ALARM_CUSTOM50 0x931 //门禁自定义报警50 +#define MINOR_ALARM_CUSTOM51 0x932 //门禁自定义报警51 +#define MINOR_ALARM_CUSTOM52 0x933 //门禁自定义报警52 +#define MINOR_ALARM_CUSTOM53 0x934 //门禁自定义报警53 +#define MINOR_ALARM_CUSTOM54 0x935 //门禁自定义报警54 +#define MINOR_ALARM_CUSTOM55 0x936 //门禁自定义报警55 +#define MINOR_ALARM_CUSTOM56 0x937 //门禁自定义报警56 +#define MINOR_ALARM_CUSTOM57 0x938 //门禁自定义报警57 +#define MINOR_ALARM_CUSTOM58 0x939 //门禁自定义报警58 +#define MINOR_ALARM_CUSTOM59 0x93a //门禁自定义报警59 +#define MINOR_ALARM_CUSTOM60 0x93b //门禁自定义报警60 +#define MINOR_ALARM_CUSTOM61 0x93c //门禁自定义报警61 +#define MINOR_ALARM_CUSTOM62 0x93d //门禁自定义报警62 +#define MINOR_ALARM_CUSTOM63 0x93e //门禁自定义报警63 +#define MINOR_ALARM_CUSTOM64 0x93f //门禁自定义报警64 +#define MINOR_LOCK_HIJIACK_FINGER_ALARM 0x950 //智能锁防劫持指纹报警 +#define MINOR_LOCK_HIJIACK_PASSWORD_ALARM 0x951 //智能锁防劫持密码报警 +#define MINOR_LOCK_PRY_DOOR_ALARM 0x952 //智能锁撬门报警 +#define MINOR_LOCK_LOCKED_ALARM 0x953 //智能锁锁定报警 +#define MINOR_LOCK_BATTERLOW_ALARM 0x954 //智能锁低电压报警 +#define MINOR_LOCK_BLOCKLIST_DOOR_ALARM 0x955 //智能锁禁止名单报警 +#define MINOR_LOCK_OFFLINE_ALARM 0x956 //智能锁离线报警 +#define MINOR_LOCK_UNCLOSED_ALARM 0x957 //智能锁虚掩报警 +#define MINOR_LOCK_NO_HOME_ALARM 0x958 //智能锁用户未回家报警 +#define MINOR_LOCK_MAGNETOMETER_ALARM 0x959 //门磁探测器报警 +#define MINOR_LOCK_IR_DETECTOR_ALARM 0x95a //红外探测器报警 +#define MINOR_LOCK_FP_LOCKED_ALARM 0x95b //指纹锁定报警 +#define MINOR_LOCK_PASSWORD_LOCKED_ALARM 0x95c //密码锁定报警 +#define MINOR_LOCK_HIJIACK_ALARM 0x95d //智能锁防劫持报警 + +//2018-04-23 通用物联网关报警日志类型 +#define MINOR_ALARMHOST_SHORT_CIRCUIT 0x1001 //短路报警 +#define MINOR_ALARMHOST_BROKEN_CIRCUIT 0x1002 //断路报警 +#define MINOR_ALARMHOST_ALARM_RESET 0x1003 //报警复位 +#define MINOR_ALARMHOST_ALARM_NORMAL 0x1004 //报警恢复正常 +#define MINOR_ALARMHOST_PASSWORD_ERROR 0x1005 //密码错误(连续3次输入密码错误) +#define MINOR_ALARMHOST_ID_CARD_ILLEGALLY 0x1006 //非法感应卡ID +#define MINOR_ALARMHOST_KEYPAD_REMOVE 0x1007 //键盘防拆 +#define MINOR_ALARMHOST_KEYPAD_REMOVE_RESTORE 0x1008 //键盘防拆复位 + +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT1 0x1011 //模拟量低于报警限1 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT2 0x1012 //模拟量低于报警限2 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT3 0x1013 //模拟量低于报警限3 +#define MINOR_ALARMHOST_BELOW_ALARM_LIMIT4 0x1014 //模拟量低于报警限4 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT1 0x1015 //模拟量高于报警限1 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT2 0x1016 //模拟量高于报警限2 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT3 0x1017 //模拟量高于报警限3 +#define MINOR_ALARMHOST_ABOVE_ALARM_LIMIT4 0x1018 //模拟量高于报警限4 + +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_SUSPECT 0x1021 //软防区匪警 +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_FIRE 0x1022 //软防区火警 +#define MINOR_ALARMHOST_VIRTUAL_DEFENCE_URGENT 0x1023 //软防区紧急 + +#define MINOR_UPS_ALARM 0x1028 //UPS报警 +#define MINOR_ELECTRICITY_METER_ALARM 0x1029 //智能电表报警 +#define MINOR_SWITCH_POWER_ALARM 0x1030 //开关电源报警 +#define MINOR_GAS_DETECT_SYS_ALARM 0x1031 //气体检测系统报警 +#define MINOR_TRANSFORMER_TEMPRATURE_ALARM 0x1032 //变电器温显表报警 +#define MINOR_TEMP_HUMI_ALARM 0x1033 //温湿度传感器报警 +#define MINOR_UPS_ALARM_RESTORE 0x1034 //UPS报警恢复 +#define MINOR_ELECTRICITY_METER_ALARM_RESTORE 0x1035 //智能电表报警恢复 +#define MINOR_SWITCH_POWER_ALARM_RESTORE 0x1036 //开关电源报警恢复 +#define MINOR_GAS_DETECT_SYS_ALARM_RESTORE 0x1037 //气体检测系统报警恢复 +#define MINOR_TRANSFORMER_TEMPRATURE_ALARM_RESTORE 0x1038 //变电器温显表报警恢复 +#define MINOR_TEMP_HUMI_ALARM_RESTORE 0x1039 //温湿度传感器报警恢复 +#define MINOR_WATER_LEVEL_SENSOR_ALARM 0x1040 //水位传感器报警 +#define MINOR_WATER_LEVEL_SENSOR_ALARM_RESTORE 0x1041 //水位传感器报警恢复 +#define MINOR_DUST_NOISE_ALARM 0x1042 //扬尘噪声传感器报警 +#define MINOR_DUST_NOISE_ALARM_RESTORE 0x1043 //扬尘噪声传感器报警恢复 +#define MINOR_ENVIRONMENTAL_LOGGER_ALARM 0x1044 //环境采集仪报警 +#define MINOR_ENVIRONMENTAL_LOGGER_ALARM_RESTORE 0x1045 //环境采集仪报警恢复 + +#define MINOR_TRIGGER_TAMPER 0x1046 //探测器防拆 +#define MINOR_TRIGGER_TAMPER_RESTORE 0x1047 //探测器防拆恢复 +#define MINOR_EMERGENCY_CALL_HELP_ALARM 0x1048 //紧急呼叫求助报警 +#define MINOR_EMERGENCY_CALL_HELP_ALARM_RESTORE 0x1049 //紧急呼叫求助报警恢复 +#define MINOR_CONSULTING_ALARM 0x1050 //业务咨询报警 +#define MINOR_CONSULTING_ALARM_RESTORE 0x1051 //业务咨询报警恢复 +#define MINOR_ALARMHOST_ZONE_MODULE_REMOVE 0x1052 //防区模块防拆 +#define MINOR_ALARMHOST_ZONE_MODULE_RESET 0x1053 //防区模块防拆复位 + +#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM 0x1054 //风速传感器告警 +#define MINOR_ALARMHOST_ALARM_WIND_SPEED_ALARM_RESTORE 0x1055 //风速传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_ALARM 0x1056 //通用扩展输出模块告警 +#define MINOR_ALARMHOST_ALARM_GENERATE_OUTPUT_RESTORE 0x1057 //通用扩展输出模块告警恢复 +#define MINOR_ALARMHOST_ALARM_SOAK_ALARM 0x1058 //水浸传感器告警 +#define MINOR_ALARMHOST_ALARM_SOAK_ALARM_RESTORE 0x1059 //水浸传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM 0x1060 //太阳能传感器告警 +#define MINOR_ALARMHOST_ALARM_SOLAR_POWER_ALARM_RESTORE 0x1061 //太阳能传感器告警恢复 +#define MINOR_ALARMHOST_ALARM_SF6_ALARM 0x1062 //SF6报警主机告警 +#define MINOR_ALARMHOST_ALARM_SF6_ALARM_RESTORE 0x1063 //SF6报警主机告警恢复 +#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM 0x1064 //称重仪告警 +#define MINOR_ALARMHOST_ALARM_WEIGHT_ALARM_RESTORE 0x1065 //称重仪告警恢复 +#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM 0x1066 //气象采集系统告警 +#define MINOR_ALARMHOST_ALARM_WEATHER_ALARM_RESTORE 0x1067 //气象采集系统告警恢复 +#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM 0x1068 //燃气显示系统告警 +#define MINOR_ALARMHOST_ALARM_FUEL_GAS_ALARM_RESTORE 0x1069 //燃气显示系统告警恢 +#define MINOR_ALARMHOST_ALARM_FIRE_ALARM 0x1070 //火灾报警系统告警 +#define MINOR_ALARMHOST_ALARM_FIRE_ALARM_RESTORE 0x1071 //火灾报警系统告警恢复 +#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_REMOVE 0x1072 //无线输出模块防拆 +#define MINOR_ALARMHOST_WIRELESS_OUTPUT_MODULE_RESET 0x1073 //无线输出模块防拆复位 +#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_REMOVE 0x1074 //无线中继器防拆 + +#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_REMOVE 0x1075 //无线警号防拆 +#define MINOR_ALARMHOST_WIRELESS_SIREN_MODULE_RESET 0x1076 //无线警号防拆复位 + +#define MINOR_RS485_DEV_ALARM 0x1077 //RS485外接设备报警(针对设备类型未知的设备) +#define MINOR_RS485_DEV_RESTORE 0x1078 //RS485外接设备报警恢复(针对设备类型未知的设备) +#define MINOR_ALARMHOST_ALARM_HOST_ALARM 0x1079 //消防主机报警 +#define MINOR_ALARMHOST_ALARM_HOST_RESTORE 0x107a //消防主机报警恢复 + +#define MINOR_AIR_CONDITION_DEV_ALARM 0x107b //空调控制器报警 +#define MINOR_AIR_CONDITION_DEV_RESTORE 0x107c //空调控制器报警恢复 + +#define MINOR_ALARMHOST_WIRELESS_REPEATER_MODULE_RESET 0x107d //无线中继器防拆复位 + +#define MINOR_ALARM_ELEVATOR_BREAKDOWN 0x107e//电梯故障 +#define MINOR_WATER_PRESSURE_SENSOR_ALARM 0x107f //水压传感器报警 +#define MINOR_FLOW_SENSOR_ALARM 0x1080 //流量传感器报警 +#define MINOR_SENSOR_LINKAGE_ALARM 0x1081 //传感器联动报警 +#define MINOR_SENSOR_LINKAGE_ALARM_RESTORE 0x1082 //传感器联动报警恢复 +#define MINOR_SHELF_ABNORMAL_ALARM 0x1083 //货架异常报警 + +//LED报警次类型 0x1201 ~ 0x1300 +#define MINOR_SYSTEM_CHECK_ALARM 0x1201 //系统检测报警 + +/* 异常 */ +//主类型 +#define MAJOR_EXCEPTION 0x2 +//次类型 +#define MINOR_SUBSYSTEM_ERROR 0x0a /* 子系统异常 */ +#define MINOR_RAID_ERROR 0x20 /* 阵列异常 */ +#define MINOR_VI_LOST 0x21 /* 视频信号丢失 */ +#define MINOR_ILLEGAL_ACCESS 0x22 /* 非法访问 */ +#define MINOR_HD_FULL 0x23 /* 硬盘满 */ +#define MINOR_HD_ERROR 0x24 /* 硬盘错误 */ +#define MINOR_DCD_LOST 0x25 /* MODEM 掉线(保留不使用) */ +#define MINOR_IP_CONFLICT 0x26 /* IP地址冲突 */ +#define MINOR_NET_BROKEN 0x27 /* 网络断开*/ +#define MINOR_REC_ERROR 0x28 /* 录像出错 */ +#define MINOR_IPC_NO_LINK 0x29 /* IPC连接异常 */ +#define MINOR_VI_EXCEPTION 0x2a /* 视频输入异常(只针对模拟通道) */ +#define MINOR_IPC_IP_CONFLICT 0x2b /*ipc ip 地址 冲突*/ +#define MINOR_SENCE_EXCEPTION 0x2c // 场景异常 + +#define MINOR_PIC_REC_ERROR 0x2d /* 抓图出错--获取图片文件失败*/ +#define MINOR_VI_MISMATCH 0x2e /* 视频制式不匹配*/ +#define MINOR_RESOLUTION_MISMATCH 0x2f /*前端/录像分辨率不匹配 */ + +//2009-12-16 增加视频综合平台日志类型 +#define MINOR_FANABNORMAL 0x31 /* 视频综合平台:风扇状态异常 */ +#define MINOR_FANRESUME 0x32 /* 视频综合平台:风扇状态恢复正常 */ +#define MINOR_SUBSYSTEM_ABNORMALREBOOT 0x33 /* 视频综合平台:6467异常重启 */ +#define MINOR_MATRIX_STARTBUZZER 0x34 /* 视频综合平台:dm6467异常,启动蜂鸣器 */ + +//2010-01-22 增加视频综合平台异常日志次类型 +#define MINOR_NET_ABNORMAL 0x35 /*网络状态异常*/ +#define MINOR_MEM_ABNORMAL 0x36 /*内存状态异常*/ +#define MINOR_FILE_ABNORMAL 0x37 /*文件状态异常*/ +#define MINOR_PANEL_ABNORMAL 0x38 /*前面板连接异常*/ +#define MINOR_PANEL_RESUME 0x39 /*前面板恢复正常*/ +#define MINOR_RS485_DEVICE_ABNORMAL 0x3a /*RS485连接状态异常*/ +#define MINOR_RS485_DEVICE_REVERT 0x3b /*RS485连接状态异常恢复*/ + +//2012-2-18 增加大屏控制器异常日志次类型 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALREBOOT 0x3c //子板异常启动 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALINSERT 0x3d //子板插入 +#define MINOR_SCREEN_SUBSYSTEM_ABNORMALPULLOUT 0x3e //子板拔出 +#define MINOR_SCREEN_ABNARMALTEMPERATURE 0x3f //温度异常 +//2012-07-26 视频综合平台v2.1 +#define MINOR_HIGH_TEMPERATURE_PROTECT 0x40 //子板过热保护 + +//Netra 2.2.2 +#define MINOR_RECORD_OVERFLOW 0x41 /*缓冲区溢出*/ +#define MINOR_DSP_ABNORMAL 0x42 //DSP异常 + +//Netra 3.0.0 +#define MINOR_ANR_RECORD_FAIED 0x43 /*ANR录像失败*/ +#define MINOR_SPARE_WORK_DEVICE_EXCEPT 0x44 /*热备设备工作机异常*/ +#define MINOR_START_IPC_MAS_FAILED 0x45 /*开启IPC MAS失败*/ +//256路NVR +#define MINOR_IPCM_CRASH 0x46 /*IPCM异常重启*/ +#define MINOR_POE_POWER_EXCEPTION 0x47 /*POE 供电异常*/ +#define MINOR_UPLOAD_DATA_CS_EXCEPTION 0x48 //云存储数据上传失败/ +#define MINOR_DIAL_EXCEPTION 0x49 /*拨号异常*/ +#define MINOR_DEV_EXCEPTION_OFFLINE 0x50 //设备异常下线 +#define MINOR_UPGRADEFAIL 0x51 //远程升级设备失败 +#define MINOR_AI_LOST 0x52 /* 音频信号丢失 */ +#define MINOR_SYNC_IPC_PASSWD 0x53 /* 同步IPC密码异常 */ +#define MINOR_EZVIZ_OFFLINE 0x54 /* 萤石下线异常*/ +#define MINOR_VQD_ABNORMAL 0x55 //VQD异常 +#define MINOR_ACCESSORIES_PLATE 0x57 //配件板异常 +#define MINOR_KMS_EXPAMSION_DISK_LOST 0x58 // KMS扩容盘丢失 +#define MINOR_ABNORMAL_PORT 0x59 // 端口异常 +#define MINOR_CAMERA_ANGLE_ANOMALY 0x60// 相机视角异常 +#define MINOR_DATA_DISK_ERROE 0x61// 数据盘错误 +#define MINOR_INTELLIGENT_SYSTEM_RUNNING_ERROR 0x62// 智能系统运行异常 +#define MINOR_FACESNAP_RESOLUTION_OVERFLOW 0x63// 人脸抓拍码流分辨率超限 +#define MINOR_SMD_RESOLUTION_OVERFLOW 0x64// SMD码流分辨率超限 +#define MINOR_AUDIO_LOSS_EXCEPTION 0x65// 音频丢失异常 +#define MINOR_SAFETY_HELMET_EXCEPTION 0x66 //未佩戴安全帽检测异常 +#define MINOR_VCA_PIC_LENGTH_OVERFLOW 0x67 // VCA图片长度过长(例如超过2M大小的图片) +#define MINOR_FACE_MODEL_EXCEPTION 0x68// 人脸库模型同步异常 +#define MINOR_SSD_EXCEPTION 0x69 // SSD异常 +//NVR集群 +#define MINOR_CLUSTER_DEVICE_OFFLINE 0x70 // 集群内设备下线 +#define MINOR_CLUSTER_CONFIG_FAILED 0x71 // 集群内设备配置失败 +#define MINOR_CLUSTER_DISASTER_TOLERANCE_EXCEPT 0x72 // 集群容灾异常:集群CM选举失败,集群存储周期不足,集群带宽不足,集群通道资源不足,集群设备不足等 +#define MINOR_CLUSTER_STORFULL_EXCEPTION 0x73 //集群硬盘满 +#define MINOR_CLUSTER_VERSION_EXCEPTION 0x74 //集群版本异常 +#define MINOR_CLUSTER_OFFLINENODE_EXCEPTION 0x75 //集群掉线数超限 +#define MINOR_CLUSTER_RECORDCYCLE_EXCEPTION 0x76 //集群录像周期不足 +#define MINOR_CLUSTER_IPCTRANSFER_EXCEPTION 0x77 //集群IPC迁移失败 +#define MINOR_CLUSTER_IPCONFLICT_EXCEPTION 0x78 // 集群IP冲突,记录CM的IP地址 + +#define MINOR_GET_SUB_STREAM_FAILURE 0x79//子码流取流失败 +#define MINOR_HDD_SHM_DETECT_EXCEPTION 0x7a//硬盘SHM检测异常 +#define MINOR_DEVICE_FORTIFY_FAILURE 0x7b//前端设备报警布防失败 +#define MINOR_EVENT_UPLOAD_EXCEPTION 0x7c //事件发送异常(设备上传事件失败或者丢弃了) + +#define MINOR_LORA_EXCEPTION 0x7d//LoRa异常 +#define MINOR_AK_OR_SK_IS_EMPTY 0x7e//云存储密码或加密密码为空 + +#define MINOR_HIGH_HD_TEMPERATURE 0x80 /*硬盘温度过高*/ +#define MINOR_LOW_HD_TEMPERATURE 0x81 /*硬盘温度过低*/ +#define MINOR_HD_IMPACT 0x82 /*硬盘受到冲击*/ +#define MINOR_HD_BAD_BLOCK 0x83 /*硬盘出现坏块*/ +#define MINOR_SEVERE_HD_FAILURE 0x84 /*硬盘严重故障*/ +#define MINOR_RELEASE_FAILED 0x85 //信息发布失败 +#define MINOR_PORT_CONFLICT 0x86 //端口冲突 +#define MINOR_MODULE_STARTUP_FAILED 0x87 //模块启动失败 +#define MINIOR_VCA_RUNNING_EXCEPTION 0x88 //智能板运行异常 + +//0x400-0x1000 门禁异常类型 +#define MINOR_DEV_POWER_ON 0x400 //设备上电启动 +#define MINOR_DEV_POWER_OFF 0x401 //设备掉电关闭 +#define MINOR_WATCH_DOG_RESET 0x402 //看门狗复位 +#define MINOR_LOW_BATTERY 0x403 //蓄电池电压低 +#define MINOR_BATTERY_RESUME 0x404 //蓄电池电压恢复正常 +#define MINOR_AC_OFF 0x405 //交流电断电 +#define MINOR_AC_RESUME 0x406 //交流电恢复 +#define MINOR_NET_RESUME 0x407 //网络恢复 +#define MINOR_FLASH_ABNORMAL 0x408 //FLASH读写异常 +#define MINOR_CARD_READER_OFFLINE 0x409 //读卡器掉线 +#define MINOR_CARD_READER_RESUME 0x40a //读卡器掉线恢复 +#define MINOR_INDICATOR_LIGHT_OFF 0x40b //指示灯关闭 +#define MINOR_INDICATOR_LIGHT_RESUME 0x40c //指示灯恢复 +#define MINOR_CHANNEL_CONTROLLER_OFF 0x40d //通道控制器掉线 +#define MINOR_CHANNEL_CONTROLLER_RESUME 0x40e //通道控制器恢复 +#define MINOR_SECURITY_MODULE_OFF 0x40f //门控安全模块掉线 +#define MINOR_SECURITY_MODULE_RESUME 0x410 //门控安全模块在线 +#define MINOR_BATTERY_ELECTRIC_LOW 0x411 //电池电压低(仅人脸设备使用) +#define MINOR_BATTERY_ELECTRIC_RESUME 0x412 //电池电压恢复正常(仅人脸设备使用) +#define MINOR_LOCAL_CONTROL_NET_BROKEN 0x413 //就地控制器网络断开 +#define MINOR_LOCAL_CONTROL_NET_RSUME 0x414 //就地控制器网络恢复 +#define MINOR_MASTER_RS485_LOOPNODE_BROKEN 0x415 //主控RS485环路节点断开 +#define MINOR_MASTER_RS485_LOOPNODE_RESUME 0x416 //主控RS485环路节点恢复 +#define MINOR_LOCAL_CONTROL_OFFLINE 0x417 //就地控制器掉线 +#define MINOR_LOCAL_CONTROL_RESUME 0x418 //就地控制器掉线恢复 +#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN 0x419 //就地下行RS485环路断开 +#define MINOR_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME 0x41a //就地下行RS485环路恢复 +#define MINOR_DISTRACT_CONTROLLER_ONLINE 0x41b //分控器在线 +#define MINOR_DISTRACT_CONTROLLER_OFFLINE 0x41c //分控器离线 +#define MINOR_ID_CARD_READER_NOT_CONNECT 0x41d //身份证阅读器未连接(智能专用) +#define MINOR_ID_CARD_READER_RESUME 0x41e //身份证阅读器连接恢复(智能专用) +#define MINOR_FINGER_PRINT_MODULE_NOT_CONNECT 0x41f //指纹模组未连接(智能专用) +#define MINOR_FINGER_PRINT_MODULE_RESUME 0x420 //指纹模组连接恢复(智能专用) +#define MINOR_CAMERA_NOT_CONNECT 0x421 //摄像头未连接 +#define MINOR_CAMERA_RESUME 0x422 //摄像头连接恢复 +#define MINOR_COM_NOT_CONNECT 0x423 //COM口未连接 +#define MINOR_COM_RESUME 0x424 //COM口连接恢复 +#define MINOR_DEVICE_NOT_AUTHORIZE 0x425 //设备未授权 +#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_ONLINE 0x426 //人证设备在线 +#define MINOR_PEOPLE_AND_ID_CARD_DEVICE_OFFLINE 0x427 //人证设备离线 +#define MINOR_LOCAL_LOGIN_LOCK 0x428 //本地登录锁定 +#define MINOR_LOCAL_LOGIN_UNLOCK 0x429 //本地登录解锁 +#define MINOR_SUBMARINEBACK_COMM_BREAK 0x42a //与反潜回服务器通信断开 +#define MINOR_SUBMARINEBACK_COMM_RESUME 0x42b //与反潜回服务器通信恢复 +#define MINOR_MOTOR_SENSOR_EXCEPTION 0x42c //电机或传感器异常 +#define MINOR_CAN_BUS_EXCEPTION 0x42d //CAN总线异常 +#define MINOR_CAN_BUS_RESUME 0x42e //CAN总线恢复 +#define MINOR_GATE_TEMPERATURE_OVERRUN 0x42f //闸机腔体温度超限 +#define MINOR_IR_EMITTER_EXCEPTION 0x430 //红外对射异常 +#define MINOR_IR_EMITTER_RESUME 0x431 //红外对射恢复 +#define MINOR_LAMP_BOARD_COMM_EXCEPTION 0x432 //灯板通信异常 +#define MINOR_LAMP_BOARD_COMM_RESUME 0x433 //灯板通信恢复 +#define MINOR_IR_ADAPTOR_COMM_EXCEPTION 0x434 //红外转接板通信异常 +#define MINOR_IR_ADAPTOR_COMM_RESUME 0x435 //红外转接板通信恢复 +#define MINOR_PRINTER_ONLINE 0x436 //打印机在线 +#define MINOR_PRINTER_OFFLINE 0x437 //打印机离线 +#define MINOR_4G_MOUDLE_ONLINE 0x438 //4G模块在线 +#define MINOR_4G_MOUDLE_OFFLINE 0x439 //4G模块离线 +#define MINOR_DSP_START_FAILED 0x43a //DSP启动失败 +#define MINOR_SMART_REGULATION_NOT_ALLOWED 0x43b //智能规则不支持 +#define MINOR_AUXILIARY_BOARD_OFFLINE 0x43c //辅助板掉线 +#define MINOR_AUXILIARY_BOARD_RESUME 0x43d //辅助板掉线恢复 +#define MINOR_IDCARD_SECURITY_MOUDLE_EXCEPTION 0x43e //身份证安全模块异常 +#define MINOR_IDCARD_SECURITY_MOUDLE_RESUME 0x43f //身份证安全模块恢复 +#define MINOR_FP_PERIPHERAL_EXCEPTION 0x440 //指纹采集外设异常 +#define MINOR_FP_PERIPHERAL_RESUME 0x441 //指纹采集外设恢复 +#define MINOR_REPLAY_ATTACK 0x442 //重复攻击 +#define MINOR_TLS_ABNORMAL 0x443 //TLS通信异常 +#define MINOR_SMART_PLATE_OFFLINE 0x444 //智盘离线 +#define MINOR_SMART_PLATE_ONLINE 0x445 //智盘上线 +#define MINOR_REFUND_LOCKED 0x446 //纠错锁定 +#define MINOR_CODER_ONLINE 0x447 //编码盘在线 +#define MINOR_CODER_OFFLINE 0x448 //编码盘离线 +#define MINOR_KEYBOARD_OFFLINE 0x449 //小键盘离线 +#define MINOR_KEYBOARD_ONLINE 0x44a //小键盘上线 +#define MINOR_5G_MOUDLE_ONLINE 0x44b //5G模块在线 +#define MINOR_5G_MOUDLE_OFFLINE 0x44c //5G模块离线 +#define MINOR_EXTEND_MODULE_ONLINE 0x44d //扩展模块在线(拓展模块:主要是以usb形式外接身份证读卡器、指纹传感器、蓝牙、二维码等模块,支持热插拔) +#define MINOR_EXTEND_MODULE_OFFLINE 0x44e //扩展模块离线(拓展模块:主要是以usb形式外接身份证读卡器、指纹传感器、蓝牙、二维码等模块,支持热插拔) +#define MINOR_INTERLOCK_SERVER_DISCONNECTED 0x44f //与多门互锁服务器通信断开 +#define MINOR_INTERLOCK_SERVER_CONNECTED 0x450 //与多门互锁服务器通信恢复 +#define MINOR_QRCODE_READER_OFFLINE 0x451 //二维码阅读器离线 +#define MINOR_QRCODE_READER_ONLINE 0x452 //二维码阅读器在线 +#define MINOR_HEALTH_INFO_ABNORMAL_LOCK 0x453 //健康信息异常锁定 +#define MINOR_HEALTH_INFO_ABNORMAL_UNLOCK 0x454 //健康信息异常解锁 + +#define MINOR_EXCEPTION_CUSTOM1 0x900 //门禁自定义异常1 +#define MINOR_EXCEPTION_CUSTOM2 0x901 //门禁自定义异常2 +#define MINOR_EXCEPTION_CUSTOM3 0x902 //门禁自定义异常3 +#define MINOR_EXCEPTION_CUSTOM4 0x903 //门禁自定义异常4 +#define MINOR_EXCEPTION_CUSTOM5 0x904 //门禁自定义异常5 +#define MINOR_EXCEPTION_CUSTOM6 0x905 //门禁自定义异常6 +#define MINOR_EXCEPTION_CUSTOM7 0x906 //门禁自定义异常7 +#define MINOR_EXCEPTION_CUSTOM8 0x907 //门禁自定义异常8 +#define MINOR_EXCEPTION_CUSTOM9 0x908 //门禁自定义异常9 +#define MINOR_EXCEPTION_CUSTOM10 0x909 //门禁自定义异常10 +#define MINOR_EXCEPTION_CUSTOM11 0x90a //门禁自定义异常11 +#define MINOR_EXCEPTION_CUSTOM12 0x90b //门禁自定义异常12 +#define MINOR_EXCEPTION_CUSTOM13 0x90c //门禁自定义异常13 +#define MINOR_EXCEPTION_CUSTOM14 0x90d //门禁自定义异常14 +#define MINOR_EXCEPTION_CUSTOM15 0x90e //门禁自定义异常15 +#define MINOR_EXCEPTION_CUSTOM16 0x90f //门禁自定义异常16 +#define MINOR_EXCEPTION_CUSTOM17 0x910 //门禁自定义异常17 +#define MINOR_EXCEPTION_CUSTOM18 0x911 //门禁自定义异常18 +#define MINOR_EXCEPTION_CUSTOM19 0x912 //门禁自定义异常19 +#define MINOR_EXCEPTION_CUSTOM20 0x913 //门禁自定义异常20 +#define MINOR_EXCEPTION_CUSTOM21 0x914 //门禁自定义异常21 +#define MINOR_EXCEPTION_CUSTOM22 0x915 //门禁自定义异常22 +#define MINOR_EXCEPTION_CUSTOM23 0x916 //门禁自定义异常23 +#define MINOR_EXCEPTION_CUSTOM24 0x917 //门禁自定义异常24 +#define MINOR_EXCEPTION_CUSTOM25 0x918 //门禁自定义异常25 +#define MINOR_EXCEPTION_CUSTOM26 0x919 //门禁自定义异常26 +#define MINOR_EXCEPTION_CUSTOM27 0x91a //门禁自定义异常27 +#define MINOR_EXCEPTION_CUSTOM28 0x91b //门禁自定义异常28 +#define MINOR_EXCEPTION_CUSTOM29 0x91c //门禁自定义异常29 +#define MINOR_EXCEPTION_CUSTOM30 0x91d //门禁自定义异常30 +#define MINOR_EXCEPTION_CUSTOM31 0x91e //门禁自定义异常31 +#define MINOR_EXCEPTION_CUSTOM32 0x91f //门禁自定义异常32 +#define MINOR_EXCEPTION_CUSTOM33 0x920 //门禁自定义异常33 +#define MINOR_EXCEPTION_CUSTOM34 0x921 //门禁自定义异常34 +#define MINOR_EXCEPTION_CUSTOM35 0x922 //门禁自定义异常35 +#define MINOR_EXCEPTION_CUSTOM36 0x923 //门禁自定义异常36 +#define MINOR_EXCEPTION_CUSTOM37 0x924 //门禁自定义异常37 +#define MINOR_EXCEPTION_CUSTOM38 0x925 //门禁自定义异常38 +#define MINOR_EXCEPTION_CUSTOM39 0x926 //门禁自定义异常39 +#define MINOR_EXCEPTION_CUSTOM40 0x927 //门禁自定义异常40 +#define MINOR_EXCEPTION_CUSTOM41 0x928 //门禁自定义异常41 +#define MINOR_EXCEPTION_CUSTOM42 0x929 //门禁自定义异常42 +#define MINOR_EXCEPTION_CUSTOM43 0x92a //门禁自定义异常43 +#define MINOR_EXCEPTION_CUSTOM44 0x92b //门禁自定义异常44 +#define MINOR_EXCEPTION_CUSTOM45 0x92c //门禁自定义异常45 +#define MINOR_EXCEPTION_CUSTOM46 0x92d //门禁自定义异常46 +#define MINOR_EXCEPTION_CUSTOM47 0x92e //门禁自定义异常47 +#define MINOR_EXCEPTION_CUSTOM48 0x92f //门禁自定义异常48 +#define MINOR_EXCEPTION_CUSTOM49 0x930 //门禁自定义异常49 +#define MINOR_EXCEPTION_CUSTOM50 0x931 //门禁自定义异常50 +#define MINOR_EXCEPTION_CUSTOM51 0x932 //门禁自定义异常51 +#define MINOR_EXCEPTION_CUSTOM52 0x933 //门禁自定义异常52 +#define MINOR_EXCEPTION_CUSTOM53 0x934 //门禁自定义异常53 +#define MINOR_EXCEPTION_CUSTOM54 0x935 //门禁自定义异常54 +#define MINOR_EXCEPTION_CUSTOM55 0x936 //门禁自定义异常55 +#define MINOR_EXCEPTION_CUSTOM56 0x937 //门禁自定义异常56 +#define MINOR_EXCEPTION_CUSTOM57 0x938 //门禁自定义异常57 +#define MINOR_EXCEPTION_CUSTOM58 0x939 //门禁自定义异常58 +#define MINOR_EXCEPTION_CUSTOM59 0x93a //门禁自定义异常59 +#define MINOR_EXCEPTION_CUSTOM60 0x93b //门禁自定义异常60 +#define MINOR_EXCEPTION_CUSTOM61 0x93c //门禁自定义异常61 +#define MINOR_EXCEPTION_CUSTOM62 0x93d //门禁自定义异常62 +#define MINOR_EXCEPTION_CUSTOM63 0x93e //门禁自定义异常63 +#define MINOR_EXCEPTION_CUSTOM64 0x93f //门禁自定义异常64 +#define MINOR_SWITCH_WIRED_NETWORK 0x950 //切换有线网络 +#define MINOR_SWITCH_WIRELESS_NETWORK 0x951 //切换无线网络 +#define MINOR_LOCK_ONLINE_RESUME 0x952 //智能锁恢复上线 +#define MINOR_USB_ONLINE 0x953 //USB摄像头上线 +#define MINOR_USB_OFFLINE 0x954 //USB摄像头掉线 + + + +//2018-04-23 通用物联网关异常日志类型 +#define MINOR_ALARMHOST_WDT_RESET 0x1003 //WDT 复位 +#define MINOR_ALARMHOST_RTC_EXCEPTION 0x1007 //RTC实时时钟异常 + +#define MINOR_ALARMHOST_TEL_LINE_CONNECT_FAILURE 0x100a //电话线连接断 +#define MINOR_ALARMHOST_TEL_LINE_CONNECT_RESTORE 0x100b //电话线连接恢复 +#define MINOR_ALARMHOST_EXPANDER_BUS_LOSS 0x100c //扩展总线模块掉线 +#define MINOR_ALARMHOST_EXPANDER_BUS_RESTORE 0x100d //扩展总线模块掉线恢复 +#define MINOR_ALARMHOST_KEYPAD_BUS_LOSS 0x100e //键盘总线模块掉线 +#define MINOR_ALARMHOST_KEYPAD_BUS_RESTORE 0x100f //键盘总线模块掉线恢复 +#define MINOR_ALARMHOST_SENSOR_FAILURE 0x1010 //模拟量传感器故障 +#define MINOR_ALARMHOST_SENSOR_RESTORE 0x1011 //模拟量传感器恢复 +#define MINOR_ALARMHOST_RS485_CONNECT_FAILURE 0x1012 //RS485通道连接断 +#define MINOR_ALARMHOST_RS485_CONNECT_RESTORE 0x1013 //RS485通道连接断恢复 + +//“有线网络异常”和“有线网络异常恢复”这两个日志跟“网络连接断”“网络连接恢复”这两个日志时一样的,且没有设备支持“有线网络异常”和“有线网络异常恢复”这两种类型。 +#define MINOR_ALARMHOST_WIRED_NETWORK_ABNORMAL 0x1015 //有线网络异常 +#define MINOR_ALARMHOST_WIRED_NETWORK_RESTORE 0x1016 //有线网络恢复正常 +#define MINOR_ALARMHOST_GPRS_ABNORMAL 0x1017 //GPRS通信异常 +#define MINOR_ALARMHOST_GPRS_RESTORE 0x1018 //GPRS恢复正常 +#define MINOR_ALARMHOST_3G_ABNORMAL 0x1019 //3G通信异常 +#define MINOR_ALARMHOST_3G_RESTORE 0x101a //3G恢复正常 +#define MINOR_ALARMHOST_SIM_CARD_ABNORMAL 0x101b //SIM卡异常 +#define MINOR_ALARMHOST_SIM_CARD_RESTORE 0x101c //SIM卡恢复正常 + +#define MINOR_FORMAT_HDD_ERROR 0x1026 //远程格式化硬盘失败 +#define MINOR_USB_ERROR 0x1027 //USB通信故障 +#define MINOR_USB_RESTORE 0x1028 //USB通信故障恢复 +#define MINOR_PRINT_ERROR 0x1029 //打印机故障 +#define MINOR_PRINT_RESTORE 0x1030 //打印机故障恢复 +#define MINOR_ALARMHOST_SUBSYSTEM_COMMUNICATION_ERROR 0x1031 //子板通讯错误 + +#define MINOR_MCU_RESTART 0x1035 //MCU重启 +#define MINOR_GPRS_MODULE_FAULT 0x1036 //GPRS模块故障 +#define MINOR_TELEPHONE_MODULE_FAULT 0x1037 //电话模块故障 +#define MINOR_WIFI_ABNORMAL 0x1038 //WIFI通信异常 +#define MINOR_WIFI_RESTORE 0x1039 //WIFI恢复正常 +#define MINOR_RF_ABNORMAL 0x103a //RF信号异常 +#define MINOR_RF_RESTORE 0x103b //RF信号恢复正常 +#define MINOR_DETECTOR_ONLINE 0x103c //探测器在线 +#define MINOR_DETECTOR_OFFLINE 0x103d //探测器离线 +#define MINOR_DETECTOR_BATTERY_NORMAL 0x103e //探测器电量正常 +#define MINOR_DETECTOR_BATTERY_LOW 0x103f //探测器电量欠压 +#define MINOR_DATA_TRAFFIC_OVERFLOW 0x1040 //流量超额 +#define MINOR_ALARMHOST_ZONE_MODULE_LOSS 0x1041 //防区模块掉线 +#define MINOR_ALARMHOST_ZONE_MODULE_RESTORE 0x1042 //防区模块掉线恢复 +#define MINOR_WIRELESS_OUTPUT_LOSS 0x1043 //无线输出模块离线 +#define MINOR_WIRELESS_OUTPUT_RESTORE 0x1044 //无线输出模块恢复在线 +#define MINOR_WIRELESS_REPEATER_LOSS 0x1045 //无线中继器离线 +#define MINOR_WIRELESS_REPEATER_RESTORE 0x1046 //无线中继器恢复在线 +#define MINOR_ALARMHOST_TRIGGER_MODULE_LOSS 0x1047 //触发器模块掉线 +#define MINOR_ALARMHOST_TRIGGER_MODULE_RESTORE 0x1048 //触发器模块掉线恢复 +#define MINOR_ALARMHOST_WIRELESS_SIREN_LOSS 0x1049 //无线警号离线 +#define MINOR_ALARMHOST_WIRELESS_SIREN_RESTORE 0x104a //无线警号恢复在线 +#define MINOR_TX1_SUB_SYSTEM_EXCEPTION 0x1050 /*TX1子系统异常*/ +#define MINOR_TX1_REBOOT_EXCEPTION 0x1051 /*TX1系统异常重启*/ +#define MINOR_TX1_SUB_SYSTEM_LOSS 0x1052 /*智能子系统异常离线*/ +#define MINOR_TX1_SUB_SYSTEM_RESTORE 0x1053 /*智能子系统离线恢复*/ +#define MINOR_WIRELESS_SPEED_EXCEPTION 0x1054 //无线传输速率异常 +#define MINOR_SUB_BOARD_HEARTBEAT_EXCEPTION 0x1055 //子板心跳异常 +#define MINOR_HOTSTANDBY__EXCEPTION 0x1056 //热备异常 +#define MINOR_PRODUCTIONDATA_EXCEPTION 0x1057 //生产数据异常 + + +//LED 异常次类型 0x1201~0x1300 +#define MINOR_LED_SYSTEM_EXCEPTION 0x1201 //LED系统异常 +#define MINOR_FLASH_NOTENOUGH_EXCEPTION 0x1202 //FLASH空间不足 + +#define MINOR_LOG_EXCEPTION 0x1301 //日志盘异常 + +//[add]by silujie 2013-3-22 14:16 +//0x2000~0x3fff 为设备报警日志 +//0x4000~0x5000 为设备异常日志 +#define MINOR_SUBSYSTEM_IP_CONFLICT 0x4000 //子板IP冲突 +#define MINOR_SUBSYSTEM_NET_BROKEN 0x4001 //子板断网 +#define MINOR_FAN_ABNORMAL 0x4002 //风扇异常 +#define MINOR_BACKPANEL_TEMPERATURE_ABNORMAL 0x4003 //背板温度异常 + +#define MINOR_SDCARD_ABNORMAL 0x4004 //SD卡不健康 +#define MINOR_SDCARD_DAMAGE 0x4005 //SD卡损坏 +#define MINOR_POC_ABNORMAL 0x4006 //设备POC模块异常 +#define MINOR_MAIN_POWER_FAULT 0x4007 //主电故障 +#define MINOR_BACK_UP_POWER_FAULT 0x4008 //备电故障 +#define MINOR_TAMPER_FAULT 0x4009 //防拆故障 +#define MINOR_RS232_FAULT 0x400a //232总线故障 +#define MINOR_RS485_FAULT 0x400b //485总线故障 +#define MINOR_LAN_STATUS_FAULT 0x400c //LAN网线接入状态故障 +#define MINOR_LAN_LINK1_FAULT 0x400d //LAN链路1故障 +#define MINOR_LAN_LINK2_FAULT 0x400e //LAN链路2故障 +#define MINOR_SIM_CARD_STATUS_FAULT 0x400f //4G-SIM卡状态故障 +#define MINOR_4G_LINK1_FAULT 0x4010 //4G链路1故障 +#define MINOR_4G_LINK2_FAULT 0x4011 //4G链路2故障 +#define MINOR_OTHER_FAULT 0x4012 //其他故障 +#define MINOR_FIRE_CONTROL_CONNECT_FAULT 0x4013 //与消控主机连接故障 +#define MINOR_SENSOR_SHORT_CIRCUIT 0x4014 //传感器短路 +#define MINOR_SENSOR_OPEN_CIRCUIT 0x4015 //传感器断路 +#define MINOR_SENSOR_MIS_CONNECT 0x4016 //传感器错接 +#define MINOR_SENSOR_FAULT_RESTORE 0x4017 //传感器故障恢复 +#define MINOR_DEVICE_FAULT 0x4018 //设备故障 +#define MINOR_OVERVOLTAGE 0X4019 //电源电压过高 +#define MINOR_UNDERVOLTAGE 0X401a //电源电压过低 +#define MINOR_PANLOCKING 0x401b //云台水平堵转 +#define MINOR_TILTLOCKING 0x401c //云台垂直堵转 +#define MINOR_SUBBOARD_TEMPERATURE_ABNORMAL 0x401d //子板温度异常 +#define MINOR_EZVIZ_UPGRADE_EXCEPTION 0x401e //萤石升级异常 + +//萤石相关操作异常日志 +#define MINOR_EZVIZ_OPERATION_ABNORMAL 0x4020 //萤石操作异常 + +#define MINOR_IFRAME_IS_TOO_LARGE 0x4030 //预览/回放时I帧过大 + +/* 操作 */ +//主类型 +#define MAJOR_OPERATION 0x3 + +//次类型 +#define MINOR_VCA_MOTIONEXCEPTION 0x29 //智能侦测异常 +#define MINOR_START_DVR 0x41 /* 开机 */ +#define MINOR_STOP_DVR 0x42 /* 关机 */ +#define MINOR_STOP_ABNORMAL 0x43 /* 异常关机 */ +#define MINOR_REBOOT_DVR 0x44 /*本地重启设备*/ + +#define MINOR_LOCAL_LOGIN 0x50 /* 本地登陆 */ +#define MINOR_LOCAL_LOGOUT 0x51 /* 本地注销登陆 */ +#define MINOR_LOCAL_CFG_PARM 0x52 /* 本地配置参数 */ +#define MINOR_LOCAL_PLAYBYFILE 0x53 /* 本地按文件回放或下载 */ +#define MINOR_LOCAL_PLAYBYTIME 0x54 /* 本地按时间回放或下载*/ +#define MINOR_LOCAL_START_REC 0x55 /* 本地开始录像 */ +#define MINOR_LOCAL_STOP_REC 0x56 /* 本地停止录像 */ +#define MINOR_LOCAL_PTZCTRL 0x57 /* 本地云台控制 */ +#define MINOR_LOCAL_PREVIEW 0x58 /* 本地预览 (保留不使用)*/ +#define MINOR_LOCAL_MODIFY_TIME 0x59 /* 本地修改时间(保留不使用) */ +#define MINOR_LOCAL_UPGRADE 0x5a /* 本地升级 */ +#define MINOR_LOCAL_RECFILE_OUTPUT 0x5b /* 本地备份录象文件 */ +#define MINOR_LOCAL_FORMAT_HDD 0x5c /* 本地初始化硬盘 */ +#define MINOR_LOCAL_CFGFILE_OUTPUT 0x5d /* 导出本地配置文件 */ +#define MINOR_LOCAL_CFGFILE_INPUT 0x5e /* 导入本地配置文件 */ +#define MINOR_LOCAL_COPYFILE 0x5f /* 本地备份文件 */ +#define MINOR_LOCAL_LOCKFILE 0x60 /* 本地锁定录像文件 */ +#define MINOR_LOCAL_UNLOCKFILE 0x61 /* 本地解锁录像文件 */ +#define MINOR_LOCAL_DVR_ALARM 0x62 /* 本地手动清除和触发报警*/ +#define MINOR_IPC_ADD 0x63 /* 本地添加IPC */ +#define MINOR_IPC_DEL 0x64 /* 本地删除IPC */ +#define MINOR_IPC_SET 0x65 /* 本地设置IPC */ +#define MINOR_LOCAL_START_BACKUP 0x66 /* 本地开始备份 */ +#define MINOR_LOCAL_STOP_BACKUP 0x67 /* 本地停止备份*/ +#define MINOR_LOCAL_COPYFILE_START_TIME 0x68 /* 本地备份开始时间*/ +#define MINOR_LOCAL_COPYFILE_END_TIME 0x69 /* 本地备份结束时间*/ +#define MINOR_LOCAL_ADD_NAS 0x6a /*本地添加网络硬盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_DEL_NAS 0x6b /* 本地删除nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_SET_NAS 0x6c /* 本地设置nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_RESET_PASSWD 0x6d /* 本地恢复管理员默认密码*/ + +#define MINOR_REMOTE_LOGIN 0x70 /* 远程登录 */ +#define MINOR_REMOTE_LOGOUT 0x71 /* 远程注销登陆 */ +#define MINOR_REMOTE_START_REC 0x72 /* 远程开始录像 */ +#define MINOR_REMOTE_STOP_REC 0x73 /* 远程停止录像 */ +#define MINOR_START_TRANS_CHAN 0x74 /* 开始透明传输 */ +#define MINOR_STOP_TRANS_CHAN 0x75 /* 停止透明传输 */ +#define MINOR_REMOTE_GET_PARM 0x76 /* 远程获取参数 */ +#define MINOR_REMOTE_CFG_PARM 0x77 /* 远程配置参数 */ +#define MINOR_REMOTE_GET_STATUS 0x78 /* 远程获取状态 */ +#define MINOR_REMOTE_ARM 0x79 /* 远程布防 */ +#define MINOR_REMOTE_DISARM 0x7a /* 远程撤防 */ +#define MINOR_REMOTE_REBOOT 0x7b /* 远程重启 */ +#define MINOR_START_VT 0x7c /* 开始语音对讲 */ +#define MINOR_STOP_VT 0x7d /* 停止语音对讲 */ +#define MINOR_REMOTE_UPGRADE 0x7e /* 远程升级 */ +#define MINOR_REMOTE_PLAYBYFILE 0x7f /* 远程按文件回放或下载 */ +#define MINOR_REMOTE_PLAYBYTIME 0x80 /* 远程按时间回放或下载 */ +#define MINOR_REMOTE_PTZCTRL 0x81 /* 远程云台控制 */ +#define MINOR_REMOTE_FORMAT_HDD 0x82 /* 远程格式化硬盘 */ +#define MINOR_REMOTE_STOP 0x83 /* 远程关机 */ +#define MINOR_REMOTE_LOCKFILE 0x84 /* 远程锁定文件 */ +#define MINOR_REMOTE_UNLOCKFILE 0x85 /* 远程解锁文件 */ +#define MINOR_REMOTE_CFGFILE_OUTPUT 0x86 /* 远程导出配置文件 */ +#define MINOR_REMOTE_CFGFILE_INTPUT 0x87 /* 远程导入配置文件 */ +#define MINOR_REMOTE_RECFILE_OUTPUT 0x88 /* 远程导出录象文件 */ +#define MINOR_REMOTE_DVR_ALARM 0x89 /* 远程手动清除和触发报警*/ +#define MINOR_REMOTE_IPC_ADD 0x8a /* 远程添加IPC */ +#define MINOR_REMOTE_IPC_DEL 0x8b /* 远程删除IPC */ +#define MINOR_REMOTE_IPC_SET 0x8c /* 远程设置IPC */ +#define MINOR_REBOOT_VCA_LIB 0x8d /*重启智能库*/ +#define MINOR_REMOTE_ADD_NAS 0x8e /* 远程添加nas盘 (nfs、iscsi)*/ +#define MINOR_REMOTE_DEL_NAS 0x8f /* 远程删除nas盘 (nfs、iscsi)*/ +#define MINOR_REMOTE_SET_NAS 0x90 /* 远程设置nas盘 (nfs、iscsi)*/ +#define MINOR_LOCAL_OPERATE_LOCK 0x9d /* 本地操作锁定 */ +#define MINOR_LOCAL_OPERATE_UNLOCK 0x9e /* 本地操作解除锁定 */ +#define MINOR_REMOTE_DELETE_HDISK 0x9a /* 远程删除异常不存在的硬盘 */ +#define MINOR_REMOTE_LOAD_HDISK 0x9b /* 远程加载硬盘 */ +#define MINOR_REMOTE_UNLOAD_HDISK 0x9c /* 远程卸载硬盘 */ +#define MINOR_SCHEDULE_ANGLECALIBRATION 0x139 /*定期倾角校准*/ +#define MINOR_OTHER_OPERATE 0x200 /* 其他操作 */ + +//2010-05-26 增加审讯DVR日志类型 +#define MINOR_LOCAL_START_REC_CDRW 0x91 /* 本地开始讯问 */ +#define MINOR_LOCAL_STOP_REC_CDRW 0x92 /* 本地停止讯问 */ +#define MINOR_REMOTE_START_REC_CDRW 0x93 /* 远程开始讯问 */ +#define MINOR_REMOTE_STOP_REC_CDRW 0x94 /* 远程停止讯问 */ + +#define MINOR_LOCAL_PIC_OUTPUT 0x95 /* 本地备份图片文件 */ +#define MINOR_REMOTE_PIC_OUTPUT 0x96 /* 远程备份图片文件 */ + +//2011-07-26 增加81审讯DVR日志类型 +#define MINOR_LOCAL_INQUEST_RESUME 0x97 /* 本地恢复审讯事件*/ +#define MINOR_REMOTE_INQUEST_RESUME 0x98 /* 远程恢复审讯事件*/ + +//2013-01-23 增加86高清审讯NVR操作日志 +#define MINOR_LOCAL_ADD_FILE 0x99 /*本地导入文件*/ +#define MINOR_LOCAL_DEL_FILE 0x9f /*本地删除审讯*/ +#define MINOR_REMOTE_INQUEST_ADD_FILE 0x100 /*远程导入文件*/ + +//2009-12-16 增加视频综合平台日志类型 +#define MINOR_SUBSYSTEMREBOOT 0xa0 /*视频综合平台:dm6467 正常重启*/ +#define MINOR_MATRIX_STARTTRANSFERVIDEO 0xa1 /*视频综合平台:矩阵切换开始传输图像*/ +#define MINOR_MATRIX_STOPTRANSFERVIDEO 0xa2 /*视频综合平台:矩阵切换停止传输图像*/ +#define MINOR_REMOTE_SET_ALLSUBSYSTEM 0xa3 /*视频综合平台:设置所有6467子系统信息*/ +#define MINOR_REMOTE_GET_ALLSUBSYSTEM 0xa4 /*视频综合平台:获取所有6467子系统信息*/ +#define MINOR_REMOTE_SET_PLANARRAY 0xa5 /*视频综合平台:设置计划轮巡组*/ +#define MINOR_REMOTE_GET_PLANARRAY 0xa6 /*视频综合平台:获取计划轮巡组*/ +#define MINOR_MATRIX_STARTTRANSFERAUDIO 0xa7 /*视频综合平台:矩阵切换开始传输音频*/ +#define MINOR_MATRIX_STOPRANSFERAUDIO 0xa8 /*视频综合平台:矩阵切换停止传输音频*/ +#define MINOR_LOGON_CODESPITTER 0xa9 /*视频综合平台:登陆码分器*/ +#define MINOR_LOGOFF_CODESPITTER 0xaa /*视频综合平台:退出码分器*/ + +//2010-01-22 增加视频综合平台中解码器操作日志 +#define MINOR_START_DYNAMIC_DECODE 0xb0 /*开始动态解码*/ +#define MINOR_STOP_DYNAMIC_DECODE 0xb1 /*停止动态解码*/ +#define MINOR_GET_CYC_CFG 0xb2 /*获取解码器通道轮巡配置*/ +#define MINOR_SET_CYC_CFG 0xb3 /*设置解码通道轮巡配置*/ +#define MINOR_START_CYC_DECODE 0xb4 /*开始轮巡解码*/ +#define MINOR_STOP_CYC_DECODE 0xb5 /*停止轮巡解码*/ +#define MINOR_GET_DECCHAN_STATUS 0xb6 /*获取解码通道状态*/ +#define MINOR_GET_DECCHAN_INFO 0xb7 /*获取解码通道当前信息*/ +#define MINOR_START_PASSIVE_DEC 0xb8 /*开始被动解码*/ +#define MINOR_STOP_PASSIVE_DEC 0xb9 /*停止被动解码*/ +#define MINOR_CTRL_PASSIVE_DEC 0xba /*控制被动解码*/ +#define MINOR_RECON_PASSIVE_DEC 0xbb /*被动解码重连*/ +#define MINOR_GET_DEC_CHAN_SW 0xbc /*获取解码通道总开关*/ +#define MINOR_SET_DEC_CHAN_SW 0xbd /*设置解码通道总开关*/ +#define MINOR_CTRL_DEC_CHAN_SCALE 0xbe /*解码通道缩放控制*/ +#define MINOR_SET_REMOTE_REPLAY 0xbf /*设置远程回放*/ +#define MINOR_GET_REMOTE_REPLAY 0xc0 /*获取远程回放状态*/ +#define MINOR_CTRL_REMOTE_REPLAY 0xc1 /*远程回放控制*/ +#define MINOR_SET_DISP_CFG 0xc2 /*设置显示通道*/ +#define MINOR_GET_DISP_CFG 0xc3 /*获取显示通道设置*/ +#define MINOR_SET_PLANTABLE 0xc4 /*设置计划轮巡表*/ +#define MINOR_GET_PLANTABLE 0xc5 /*获取计划轮巡表*/ +#define MINOR_START_PPPPOE 0xc6 /*开始PPPoE连接*/ +#define MINOR_STOP_PPPPOE 0xc7 /*结束PPPoE连接*/ +#define MINOR_UPLOAD_LOGO 0xc8 /*上传LOGO*/ +//推模式操作日志 +#define MINOR_LOCAL_PIN 0xc9 /* 本地PIN功能操作 */ +#define MINOR_LOCAL_DIAL 0xca /* 本地手动启动断开拨号 */ +#define MINOR_SMS_CONTROL 0xcb /* 短信控制上下线 */ +#define MINOR_CALL_ONLINE 0xcc /* 呼叫控制上线 */ +#define MINOR_REMOTE_PIN 0xcd /* 远程PIN功能操作 */ + +//2010-12-16 报警板日志 +#define MINOR_REMOTE_BYPASS 0xd0 /* 远程旁路*/ +#define MINOR_REMOTE_UNBYPASS 0xd1 /* 远程旁路恢复*/ +#define MINOR_REMOTE_SET_ALARMIN_CFG 0xd2 /* 远程设置报警输入参数*/ +#define MINOR_REMOTE_GET_ALARMIN_CFG 0xd3 /* 远程获取报警输入参数*/ +#define MINOR_REMOTE_SET_ALARMOUT_CFG 0xd4 /* 远程设置报警输出参数*/ +#define MINOR_REMOTE_GET_ALARMOUT_CFG 0xd5 /* 远程获取报警输出参数*/ +#define MINOR_REMOTE_ALARMOUT_OPEN_MAN 0xd6 /* 远程手动开启报警输出*/ +#define MINOR_REMOTE_ALARMOUT_CLOSE_MAN 0xd7 /* 远程手动关闭报警输出*/ +#define MINOR_REMOTE_ALARM_ENABLE_CFG 0xd8 /* 远程设置报警主机的RS485串口使能状态*/ +#define MINOR_DBDATA_OUTPUT 0xd9 /* 导出数据库记录 */ +#define MINOR_DBDATA_INPUT 0xda /* 导入数据库记录 */ +#define MINOR_MU_SWITCH 0xdb /* 级联切换 */ +#define MINOR_MU_PTZ 0xdc /* 级联PTZ控制 */ +#define MINOR_DELETE_LOGO 0xdd /* 删除logo */ +#define MINOR_REMOTE_INQUEST_DEL_FILE 0xde /*远程删除文件*/ + +#define MINOR_LOCAL_CONF_REB_RAID 0x101 /*本地配置自动重建*/ +#define MINOR_LOCAL_CONF_SPARE 0x102 /*本地配置热备*/ +#define MINOR_LOCAL_ADD_RAID 0x103 /*本地创建阵列*/ +#define MINOR_LOCAL_DEL_RAID 0x104 /*本地删除阵列*/ +#define MINOR_LOCAL_MIG_RAID 0x105 /*本地迁移阵列*/ +#define MINOR_LOCAL_REB_RAID 0x106 /* 本地手动重建阵列*/ +#define MINOR_LOCAL_QUICK_CONF_RAID 0x107 /*本地一键配置*/ +#define MINOR_LOCAL_ADD_VD 0x108 /*本地创建虚拟磁盘*/ +#define MINOR_LOCAL_DEL_VD 0x109 /*本地删除虚拟磁盘*/ +#define MINOR_LOCAL_RP_VD 0x10a /*本地修复虚拟磁盘*/ +#define MINOR_LOCAL_FORMAT_EXPANDVD 0X10b /*本地扩展虚拟磁盘扩容*/ +#define MINOR_LOCAL_RAID_UPGRADE 0X10c /*本地raid卡升级*/ +#define MINOR_LOCAL_STOP_RAID 0x10d /*本地暂停RAID操作(即安全拔盘)*/ +#define MINOR_REMOTE_CONF_REB_RAID 0x111 /*远程配置自动重建*/ +#define MINOR_REMOTE_CONF_SPARE 0x112 /*远程配置热备*/ +#define MINOR_REMOTE_ADD_RAID 0x113 /*远程创建阵列*/ +#define MINOR_REMOTE_DEL_RAID 0x114 /*远程删除阵列*/ +#define MINOR_REMOTE_MIG_RAID 0x115 /*远程迁移阵列*/ +#define MINOR_REMOTE_REB_RAID 0x116 /* 远程手动重建阵列*/ +#define MINOR_REMOTE_QUICK_CONF_RAID 0x117 /*远程一键配置*/ +#define MINOR_REMOTE_ADD_VD 0x118 /*远程创建虚拟磁盘*/ +#define MINOR_REMOTE_DEL_VD 0x119 /*远程删除虚拟磁盘*/ +#define MINOR_REMOTE_RP_VD 0x11a /*远程修复虚拟磁盘*/ +#define MINOR_REMOTE_FORMAT_EXPANDVD 0X11b /*远程虚拟磁盘扩容*/ +#define MINOR_REMOTE_RAID_UPGRADE 0X11c /*远程raid卡升级*/ +#define MINOR_REMOTE_STOP_RAID 0x11d /*远程暂停RAID操作(即安全拔盘)*/ +#define MINOR_LOCAL_START_PIC_REC 0x121 /*本地开始抓图*/ +#define MINOR_LOCAL_STOP_PIC_REC 0x122 /*本地停止抓图*/ +#define MINOR_LOCAL_SET_SNMP 0x125 /*本地配置SNMP*/ +#define MINOR_LOCAL_TAG_OPT 0x126 /*本地标签操作*/ +#define MINOR_REMOTE_START_PIC_REC 0x131 /*远程开始抓图*/ +#define MINOR_REMOTE_STOP_PIC_REC 0x132 /*远程停止抓图*/ +#define MINOR_REMOTE_SET_SNMP 0x135 /*远程配置SNMP*/ +#define MINOR_REMOTE_TAG_OPT 0x136 /*远程标签操作*/ +#define MINOR_REMOTE_LOGIN_LOCK 0x137 //远程登录锁定 +#define MINOR_REMOTE_LOGIN_UNLOCK 0x138 //远程登录解锁 +// 9000 v2.2.0 +#define MINOR_LOCAL_VOUT_SWITCH 0x140 /* 本地输出口切换操作*/ +#define MINOR_STREAM_CABAC 0x141 /* 码流压缩性能选项配置操作*/ + +//Netra 3.0.0 +#define MINOR_LOCAL_SPARE_OPT 0x142 /*本地N+1 热备相关操作*/ +#define MINOR_REMOTE_SPARE_OPT 0x143 /*远程N+1 热备相关操作*/ +#define MINOR_LOCAL_IPCCFGFILE_OUTPUT 0x144 /* 本地导出ipc配置文件*/ +#define MINOR_LOCAL_IPCCFGFILE_INPUT 0x145 /* 本地导入ipc配置文件 */ +#define MINOR_LOCAL_IPC_UPGRADE 0x146 /* 本地升级IPC */ +#define MINOR_REMOTE_IPCCFGFILE_OUTPUT 0x147 /* 远程导出ipc配置文件*/ +#define MINOR_REMOTE_IPCCFGFILE_INPUT 0x148 /* 远程导入ipc配置文件*/ +#define MINOR_REMOTE_IPC_UPGRADE 0x149 /* 远程升级IPC */ + +#define MINOR_LOCAL_UNLOAD_HDISK 0x150 /*本地卸载硬盘*/ +#define MINOR_LOCAL_AUDIO_MIX 0x151 /*本地配置音频混音参数*/ +#define MINOR_REMOTE_AUDIO_MIX 0x152 /*远程配置音频混音参数*/ +#define MINOR_LOCAL_TRIAL_PAUSE 0x153 /*本地暂停讯问*/ +#define MINOR_LOCAL_TRIAL_RESUME 0x154 /*本地继续讯问*/ +#define MINOR_REMOTE_TRIAL_PAUSE 0x155 /*远程暂停讯问*/ +#define MINOR_REMOTE_TRIAL_RESUME 0x156 /*远程继续讯问*/ +#define MINOR_REMOTE_MODIFY_VERIFICATION_CODE 0x157 /*修改平台的验证码*/ + +#define MINOR_LOCAL_MAKECALL 0x180 /*本地呼叫*/ +#define MINOR_LOCAL_REJECTCALL 0x181 /*本地拒接*/ +#define MINOR_LOCAL_ANSWERCALL 0x182 /*本地接听*/ +#define MINOR_LOCAL_HANGUPCALL 0x183 /*本地挂断*/ + +#define MINOR_REMOTE_MAKECALL 0x188 /*远程呼叫*/ +#define MINOR_REMOTE_REJECTCALL 0x189 /*远程拒接*/ +#define MINOR_REMOTE_ANSWERCALL 0x18a /*远程接听*/ +#define MINOR_REMOTE_HANGUPCALL 0x18b /*远程挂断*/ + +#define MINOR_LOCAL_CHANNEL_ORDERED 0x19b /*本地通道排序*/ + +#define MINOR_SET_MULTI_MASTER 0x201 /*设置大屏主屏*/ +#define MINOR_SET_MULTI_SLAVE 0x202 /*设置大屏子屏*/ +#define MINOR_CANCEL_MULTI_MASTER 0x203 /*取消大屏主屏*/ +#define MINOR_CANCEL_MULTI_SLAVE 0x204 /*取消大屏子屏*/ + +#define MINOR_DISPLAY_LOGO 0x205 /*显示LOGO*/ +#define MINOR_HIDE_LOGO 0x206 /*隐藏LOGO*/ +#define MINOR_SET_DEC_DELAY_LEVEL 0x207 /*解码通道延时级别设置*/ +#define MINOR_SET_BIGSCREEN_DIPLAY_AREA 0x208 /*设置大屏显示区域*/ +#define MINOR_CUT_VIDEO_SOURCE 0x209 /*大屏视频源切割设置*/ +#define MINOR_SET_BASEMAP_AREA 0x210 /*大屏底图区域设置*/ +#define MINOR_DOWNLOAD_BASEMAP 0x211 /*下载大屏底图*/ +#define MINOR_CUT_BASEMAP 0x212 /*底图切割配置*/ +#define MINOR_CONTROL_ELEC_ENLARGE 0x213 /*电子放大操作(放大或还原)*/ +#define MINOR_SET_OUTPUT_RESOLUTION 0x214 /*显示输出分辨率设置*/ +#define MINOR_SET_TRANCSPARENCY 0X215 /*图层透明度设置*/ +#define MINOR_SET_OSD 0x216 /*显示OSD设置*/ +#define MINOR_RESTORE_DEC_STATUS 0x217 /*恢复初始状态(场景切换时,解码恢复初始状态)*/ + +//2011-11-11 增加大屏控制器操作日志次类型 +#define MINOR_SCREEN_OPEN_SCREEN 0x218 //打开屏幕 +#define MINOR_SCREEN_CLOSE_SCREEN 0x219 //关闭屏幕 +#define MINOR_SCREEN_SWITCH_SIGNAL 0x21a //信号源切换 +#define MINOR_SCREEN_MODIFY_NETWORK 0x21b //配置网络参数 +#define MINOR_SCREEN_MODIFY_LEDRES 0x21c //配置输出口LED分辨率 +#define MINOR_SCREEN_SHOW_NORMAL 0x21d //配置窗口普通显示模式 +#define MINOR_SCREEN_SHOW_TILE 0x21e //配置窗口平铺显示模式 +#define MINOR_SCREEN_DEC_NORMAL 0x21f //配置普通解码模式 +#define MINOR_SCREEN_DEC_LOWLATENCY 0x220 //配置低延时解码模式 +#define MINOR_SCREEN_MODIFY_SELFRES 0x221 //配置信号源自定义分辨率 +#define MINOR_SCREEN_OUTPUT_POSITION 0x222 //输出口关联屏幕 +#define MINOR_SCREEN_IMAGE_ENHANCE 0x223 //图像增强 +#define MINOR_SCREEN_JOIN_SIGNAL 0x224 //信号源拼接 +#define MINOR_SCREEN_SIGNAL_OSD 0x225 //信号源字符叠加 +#define MINOR_SCREEN_ASSOCIATED_INTERACTION 0x226 //信号源关联多屏互动服务器 +#define MINOR_SCREEN_MODIFY_MATRIX 0x227 //配置矩阵参数 +#define MINOR_SCREEN_WND_TOP_KEEP 0x228 //窗口置顶保持 +#define MINOR_SCREEN_WND_OPEN_KEEP 0x229 //窗口打开保持 +#define MINOR_SCREEN_WALL_MIRROR 0x22a //电视墙区域镜像 +#define MINOR_SCREEN_UPLOAD_BASEMAP 0x22b //上传底图 +#define MINOR_SCREEN_SHOW_BASEMAP 0x22c //显示底图 +#define MINOR_SCREEN_HIDE_BASEMAP 0x22d //隐藏底图 +#define MINOR_SCREEN_MODIFY_SERIAL 0x22e //配置串口参数 + +#define MINOR_SCREEN_SET_INPUT 0x251 /*修改输入源*/ +#define MINOR_SCREEN_SET_OUTPUT 0x252 /*修改输出通道*/ +#define MINOR_SCREEN_SET_OSD 0x253 /*修改虚拟LED*/ +#define MINOR_SCREEN_SET_LOGO 0x254 /*修改LOGO*/ +#define MINOR_SCREEN_SET_LAYOUT 0x255 /*设置布局*/ +#define MINOR_SCREEN_PICTUREPREVIEW 0x256 /*回显操作*/ + + +//2012-06-14 CVCS2.0, 窗口设置等操作在V1.0, V1.1中已经有了,当时在设备日志中没有定义 +#define MINOR_SCREEN_GET_OSD 0x257 /*获取虚拟LED*/ +#define MINOR_SCREEN_GET_LAYOUT 0x258 /*获取布局*/ +#define MINOR_SCREEN_LAYOUT_CTRL 0x259 /*布局控制*/ +#define MINOR_GET_ALL_VALID_WND 0x260 /*获取所有有效窗口*/ +#define MINOR_GET_SIGNAL_WND 0x261 /*获取单个窗口信息*/ +#define MINOR_WINDOW_CTRL 0x262 /*窗口控制*/ +#define MINOR_GET_LAYOUT_LIST 0x263 /*获取布局列表*/ +#define MINOR_LAYOUT_CTRL 0x264 /*布局控制*/ +#define MINOR_SET_LAYOUT 0x265 /*设置布局*/ +#define MINOR_GET_SIGNAL_LIST 0x266 /*获取输入信号源列表*/ +#define MINOR_GET_PLAN_LIST 0x267 /*获取预案列表*/ +#define MINOR_SET_PLAN 0x268 /*修改预案*/ +#define MINOR_CTRL_PLAN 0x269 /*控制预案*/ +#define MINOR_CTRL_SCREEN 0x270 /*屏幕控制*/ +#define MINOR_ADD_NETSIG 0x271 /*添加信号源*/ +#define MINOR_SET_NETSIG 0x272 /*修改信号源*/ +#define MINOR_SET_DECBDCFG 0x273 /*设置解码板参数*/ +#define MINOR_GET_DECBDCFG 0x274 /*获取解码板参数*/ +#define MINOR_GET_DEVICE_STATUS 0x275 /*获取设备信息*/ +#define MINOR_UPLOAD_PICTURE 0x276 /*底图上传*/ +#define MINOR_SET_USERPWD 0x277 /*设置用户密码*/ +#define MINOR_ADD_LAYOUT 0x278 /*添加布局*/ +#define MINOR_DEL_LAYOUT 0x279 /*删除布局*/ +#define MINOR_DEL_NETSIG 0x280 /*删除信号源*/ +#define MINOR_ADD_PLAN 0x281 /*添加预案*/ +#define MINOR_DEL_PLAN 0x282 /*删除预案*/ +#define MINOR_GET_EXTERNAL_MATRIX_CFG 0x283 //获取外接矩阵配置 +#define MINOR_SET_EXTERNAL_MATRIX_CFG 0x284 //设置外接矩阵配置 +#define MINOR_GET_USER_CFG 0x285 //获取用户配置 +#define MINOR_SET_USER_CFG 0x286 //设置用户配置 +#define MINOR_GET_DISPLAY_PANEL_LINK_CFG 0x287 //获取显示墙连接配置 +#define MINOR_SET_DISPLAY_PANEL_LINK_CFG 0x288 //设置显示墙连接配置 + +#define MINOR_GET_WALLSCENE_PARAM 0x289 //获取电视墙场景 +#define MINOR_SET_WALLSCENE_PARAM 0x28a //设置电视墙场景 +#define MINOR_GET_CURRENT_WALLSCENE 0x28b //获取当前使用场景 +#define MINOR_SWITCH_WALLSCENE 0x28c //场景切换 +#define MINOR_SIP_LOGIN 0x28d //SIP注册成功 +#define MINOR_VOIP_START 0x28e //VOIP对讲开始 +#define MINOR_VOIP_STOP 0x28f //VOIP对讲停止 +#define MINOR_WIN_TOP 0x290 //电视墙窗口置顶 +#define MINOR_WIN_BOTTOM 0x291 //电视墙窗口置底 +#define MINOR_SET_USER_ADD_CFG 0x292 //增加用户 +#define MINOR_SET_USER_MODF_CFG 0x293 //修改用户 +#define MINOR_SET_USER_DEL_CFG 0x294 //删除用户 + +// Netra 2.2.2 +#define MINOR_LOCAL_LOAD_HDISK 0x300 //本地加载硬盘 +#define MINOR_LOCAL_DELETE_HDISK 0x301 //本地删除异常不存在的硬盘 + +//KY2013 3.0.0 +#define MINOR_LOCAL_MAIN_AUXILIARY_PORT_SWITCH 0X302 //本地主辅口切换 +#define MINOR_LOCAL_HARD_DISK_CHECK 0x303 //本地物理硬盘自检 + +//Netra3.1.0 +#define MINOR_LOCAL_CFG_DEVICE_TYPE 0x310 //本地配置设备类型 +#define MINOR_REMOTE_CFG_DEVICE_TYPE 0x311 //远程配置设备类型 +#define MINOR_LOCAL_CFG_WORK_HOT_SERVER 0x312 //本地配置工作机热备服务器 +#define MINOR_REMOTE_CFG_WORK_HOT_SERVER 0x313 //远程配置工作机热备服务器 +#define MINOR_LOCAL_DELETE_WORK 0x314 //本地删除工作机 +#define MINOR_REMOTE_DELETE_WORK 0x315 //远程删除工作机 +#define MINOR_LOCAL_ADD_WORK 0x316 //本地添加工作机 +#define MINOR_REMOTE_ADD_WORK 0x317 //远程添加工作机 +#define MINOR_LOCAL_IPCHEATMAP_OUTPUT 0x318 /* 本地导出热度图文件 */ +#define MINOR_LOCAL_IPCHEATFLOW_OUTPUT 0x319 /* 本地导出热度流量文件 */ +#define MINOR_REMOTE_SMS_SEND 0x350 /*远程发送短信*/ +#define MINOR_LOCAL_SMS_SEND 0x351 /*本地发送短信*/ +#define MINOR_ALARM_SMS_SEND 0x352 /*发送短信报警*/ +#define MINOR_SMS_RECV 0x353 /*接收短信*/ +//(备注:0x350、0x351是指人工在GUI或IE控件上编辑并发送短信) +#define MINOR_LOCAL_SMS_SEARCH 0x354 /*本地搜索短信*/ +#define MINOR_REMOTE_SMS_SEARCH 0x355 /*远程搜索短信*/ +#define MINOR_LOCAL_SMS_READ 0x356 /*本地查看短信*/ +#define MINOR_REMOTE_SMS_READ 0x357 /*远程查看短信*/ +#define MINOR_REMOTE_DIAL_CONNECT 0x358 /*远程开启手动拨号*/ +#define MINOR_REMOTE_DIAL_DISCONN 0x359 /*远程停止手动拨号*/ +#define MINOR_LOCAL_ALLOWLIST_SET 0x35A /*本地配置允许名单*/ +#define MINOR_REMOTE_ALLOWLIST_SET 0x35B /*远程配置允许名单*/ +#define MINOR_LOCAL_DIAL_PARA_SET 0x35C /*本地配置拨号参数*/ +#define MINOR_REMOTE_DIAL_PARA_SET 0x35D /*远程配置拨号参数*/ +#define MINOR_LOCAL_DIAL_SCHEDULE_SET 0x35E /*本地配置拨号计划*/ +#define MINOR_REMOTE_DIAL_SCHEDULE_SET 0x35F /*远程配置拨号计划*/ +#define MINOR_PLAT_OPER 0x360 /* 平台操作*/ +#define MINOR_REMOTE_CFG_POE_WORK_MODE 0x361//远程设置POE工作模式 +#define MINOR_LOCAL_CFG_POE_WORK_MODE 0x362//本地设置POE工作模式 +#define MINOR_REMOTE_CFG_FACE_CONTRAST 0x363//远程设置人脸比对配置 +#define MINOR_LOCAL_CFG_FACE_CONTRAST 0x364//本地设置人脸比对配置 +#define MINOR_REMOTE_CFG_ALLOWLIST_FACE_CONTRAST 0x365//远程设置允许名单人脸比对配置 +#define MINOR_LOCAL_CFG_ALLOWLIST_FACE_CONTRAST 0x366//本地设置允许名单人脸比对配置 +#define MINOR_LOCAL_CHECK_TIME 0x367 //本地手动校时 +#define MINOR_VCA_ONEKEY_EXPORT_PICTURE 0x368 //一键导出图片 +#define MINOR_VCA_ONEKEY_DELETE_PICTURE 0x369 //一键删除图片 +#define MINOR_VCA_ONEKEY_EXPORT_VIDEO 0x36a //一键导出录像 +#define MINOR_VCA_ONEKEY_DELETE_VIDEO 0x36b //一键删除录像 +#define MINOR_REMOTE_CFG_WIRELESS_DIALPARAM 0x36c /*远程配置无线拨号参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_DIALPARAM 0x36d /*本地配置无线拨号参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_SMSPARAM 0x36e /*远程配置无线短信配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_SMSPARAM 0x36f /*本地配置无线短信配置参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_SMSSElFHELP 0x370 /*远程配置无线短信自助配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_SMSSElFHELP 0x371 /*本地配置无线短信自助配置参数*/ +#define MINOR_REMOTE_CFG_WIRELESS_NETFLOWPARAM 0x372 /*远程配置无线流量配置参数*/ +#define MINOR_LOCAL_CFG_WIRELESS_NETFLOWPARAM 0x373 /*本地配置无线流量配置参数*/ + +//0x400-0x1000 门禁操作类型 +#define MINOR_REMOTE_OPEN_DOOR 0x400 //远程开门 +#define MINOR_REMOTE_CLOSE_DOOR 0x401 //远程关门(受控) +#define MINOR_REMOTE_ALWAYS_OPEN 0x402 //远程常开(自由) +#define MINOR_REMOTE_ALWAYS_CLOSE 0x403 //远程常关(禁用) +#define MINOR_REMOTE_CHECK_TIME 0x404 //远程手动校时 +#define MINOR_NTP_CHECK_TIME 0x405 //NTP自动校时 +#define MINOR_REMOTE_CLEAR_CARD 0x406 //远程清空卡号 +#define MINOR_REMOTE_RESTORE_CFG 0x407 //远程恢复默认参数 +#define MINOR_ALARMIN_ARM 0x408 //防区布防 +#define MINOR_ALARMIN_DISARM 0x409 //防区撤防 +#define MINOR_LOCAL_RESTORE_CFG 0x40a //本地恢复默认参数 +#define MINOR_REMOTE_CAPTURE_PIC 0x40b //远程抓拍 +#define MINOR_MOD_NET_REPORT_CFG 0x40c //修改网络中心参数配置 +#define MINOR_MOD_GPRS_REPORT_PARAM 0x40d //修改GPRS中心参数配置 +#define MINOR_MOD_REPORT_GROUP_PARAM 0x40e //修改中心组参数配置 +#define MINOR_UNLOCK_PASSWORD_OPEN_DOOR 0x40f //解除码输入 +#define MINOR_AUTO_RENUMBER 0x410 //自动重新编号 +#define MINOR_AUTO_COMPLEMENT_NUMBER 0x411 //自动补充编号 +#define MINOR_NORMAL_CFGFILE_INPUT 0x412 //导入普通配置文件 +#define MINOR_NORMAL_CFGFILE_OUTTPUT 0x413 //导出普通配置文件 +#define MINOR_CARD_RIGHT_INPUT 0x414 //导入卡权限参数 +#define MINOR_CARD_RIGHT_OUTTPUT 0x415 //导出卡权限参数 +#define MINOR_LOCAL_USB_UPGRADE 0x416 //本地U盘升级 +#define MINOR_REMOTE_VISITOR_CALL_LADDER 0x417 //访客呼梯 +#define MINOR_REMOTE_HOUSEHOLD_CALL_LADDER 0x418 //住户呼梯 +#define MINOR_REMOTE_ACTUAL_GUARD 0x419 //远程实时布防 +#define MINOR_REMOTE_ACTUAL_UNGUARD 0x41a //远程实时撤防 +#define MINOR_REMOTE_CONTROL_NOT_CODE_OPER_FAILED 0x41b //遥控器未对码操作失败 +#define MINOR_REMOTE_CONTROL_CLOSE_DOOR 0x41c //遥控器关门 +#define MINOR_REMOTE_CONTROL_OPEN_DOOR 0x41d //遥控器开门 +#define MINOR_REMOTE_CONTROL_ALWAYS_OPEN_DOOR 0x41e //遥控器常开门 +#define MINOR_M1_CARD_ENCRYPT_VERIFY_OPEN 0x41f /*M1卡加密验证功能开启*/ +#define MINOR_M1_CARD_ENCRYPT_VERIFY_CLOSE 0x420 /*M1卡加密验证功能关闭*/ +#define MINOR_NFC_FUNCTION_OPEN 0x421 /*NFC开门功能开启*/ +#define MINOR_NFC_FUNCTION_CLOSE 0x422 /*NFC开门功能关闭*/ +#define MINOR_OFFLINE_DATA_OUTPUT 0x423 //离线采集数据导出 +#define MINOR_CREATE_SSH_LINK 0x42d //建立SSH连接 +#define MINOR_CLOSE_SSH_LINK 0x42e //断开SSH连接 +#define MINOR_LOCAL_IMPORT_USERINFO 0x42f //本地导入人员数据(导入人员权限,模板,人脸图片都用这个事件类型) +#define MINOR_LOCAL_EXPORT_USERINFO 0x430 //本地导出人员数据 +#define MINOR_CREATE_CERTIFICATE 0x431 //创建证书(用于SSL通信的证书,包括SDK的TLS和HTTPS等) +#define MINOR_UPLOAD_CERTIFICATE 0x432 //上传证书 +#define MINOR_DELETE_CERTIFICATE 0x433 //删除证书 +#define MINOR_COMSUME_ARM 0x434 //消费布防 +#define MINOR_COMSUME_DISARM 0x435 //消费撤防 +#define MINOR_ORCODE_KEY_MODIFY 0x436 //二维码密钥修改 + +#define MINOR_OPERATION_CUSTOM1 0x900 //门禁自定义操作1 +#define MINOR_OPERATION_CUSTOM2 0x901 //门禁自定义操作2 +#define MINOR_OPERATION_CUSTOM3 0x902 //门禁自定义操作3 +#define MINOR_OPERATION_CUSTOM4 0x903 //门禁自定义操作4 +#define MINOR_OPERATION_CUSTOM5 0x904 //门禁自定义操作5 +#define MINOR_OPERATION_CUSTOM6 0x905 //门禁自定义操作6 +#define MINOR_OPERATION_CUSTOM7 0x906 //门禁自定义操作7 +#define MINOR_OPERATION_CUSTOM8 0x907 //门禁自定义操作8 +#define MINOR_OPERATION_CUSTOM9 0x908 //门禁自定义操作9 +#define MINOR_OPERATION_CUSTOM10 0x909 //门禁自定义操作10 +#define MINOR_OPERATION_CUSTOM11 0x90a //门禁自定义操作11 +#define MINOR_OPERATION_CUSTOM12 0x90b //门禁自定义操作12 +#define MINOR_OPERATION_CUSTOM13 0x90c //门禁自定义操作13 +#define MINOR_OPERATION_CUSTOM14 0x90d //门禁自定义操作14 +#define MINOR_OPERATION_CUSTOM15 0x90e //门禁自定义操作15 +#define MINOR_OPERATION_CUSTOM16 0x90f //门禁自定义操作16 +#define MINOR_OPERATION_CUSTOM17 0x910 //门禁自定义操作17 +#define MINOR_OPERATION_CUSTOM18 0x911 //门禁自定义操作18 +#define MINOR_OPERATION_CUSTOM19 0x912 //门禁自定义操作19 +#define MINOR_OPERATION_CUSTOM20 0x913 //门禁自定义操作20 +#define MINOR_OPERATION_CUSTOM21 0x914 //门禁自定义操作21 +#define MINOR_OPERATION_CUSTOM22 0x915 //门禁自定义操作22 +#define MINOR_OPERATION_CUSTOM23 0x916 //门禁自定义操作23 +#define MINOR_OPERATION_CUSTOM24 0x917 //门禁自定义操作24 +#define MINOR_OPERATION_CUSTOM25 0x918 //门禁自定义操作25 +#define MINOR_OPERATION_CUSTOM26 0x919 //门禁自定义操作26 +#define MINOR_OPERATION_CUSTOM27 0x91a //门禁自定义操作27 +#define MINOR_OPERATION_CUSTOM28 0x91b //门禁自定义操作28 +#define MINOR_OPERATION_CUSTOM29 0x91c //门禁自定义操作29 +#define MINOR_OPERATION_CUSTOM30 0x91d //门禁自定义操作30 +#define MINOR_OPERATION_CUSTOM31 0x91e //门禁自定义操作31 +#define MINOR_OPERATION_CUSTOM32 0x91f //门禁自定义操作32 +#define MINOR_OPERATION_CUSTOM33 0x920 //门禁自定义操作33 +#define MINOR_OPERATION_CUSTOM34 0x921 //门禁自定义操作34 +#define MINOR_OPERATION_CUSTOM35 0x922 //门禁自定义操作35 +#define MINOR_OPERATION_CUSTOM36 0x923 //门禁自定义操作36 +#define MINOR_OPERATION_CUSTOM37 0x924 //门禁自定义操作37 +#define MINOR_OPERATION_CUSTOM38 0x925 //门禁自定义操作38 +#define MINOR_OPERATION_CUSTOM39 0x926 //门禁自定义操作39 +#define MINOR_OPERATION_CUSTOM40 0x927 //门禁自定义操作40 +#define MINOR_OPERATION_CUSTOM41 0x928 //门禁自定义操作41 +#define MINOR_OPERATION_CUSTOM42 0x929 //门禁自定义操作42 +#define MINOR_OPERATION_CUSTOM43 0x92a //门禁自定义操作43 +#define MINOR_OPERATION_CUSTOM44 0x92b //门禁自定义操作44 +#define MINOR_OPERATION_CUSTOM45 0x92c //门禁自定义操作45 +#define MINOR_OPERATION_CUSTOM46 0x92d //门禁自定义操作46 +#define MINOR_OPERATION_CUSTOM47 0x92e //门禁自定义操作47 +#define MINOR_OPERATION_CUSTOM48 0x92f //门禁自定义操作48 +#define MINOR_OPERATION_CUSTOM49 0x930 //门禁自定义操作49 +#define MINOR_OPERATION_CUSTOM50 0x931 //门禁自定义操作50 +#define MINOR_OPERATION_CUSTOM51 0x932 //门禁自定义操作51 +#define MINOR_OPERATION_CUSTOM52 0x933 //门禁自定义操作52 +#define MINOR_OPERATION_CUSTOM53 0x934 //门禁自定义操作53 +#define MINOR_OPERATION_CUSTOM54 0x935 //门禁自定义操作54 +#define MINOR_OPERATION_CUSTOM55 0x936 //门禁自定义操作55 +#define MINOR_OPERATION_CUSTOM56 0x937 //门禁自定义操作56 +#define MINOR_OPERATION_CUSTOM57 0x938 //门禁自定义操作57 +#define MINOR_OPERATION_CUSTOM58 0x939 //门禁自定义操作58 +#define MINOR_OPERATION_CUSTOM59 0x93a //门禁自定义操作59 +#define MINOR_OPERATION_CUSTOM60 0x93b //门禁自定义操作60 +#define MINOR_OPERATION_CUSTOM61 0x93c //门禁自定义操作61 +#define MINOR_OPERATION_CUSTOM62 0x93d //门禁自定义操作62 +#define MINOR_OPERATION_CUSTOM63 0x93e //门禁自定义操作63 +#define MINOR_OPERATION_CUSTOM64 0x93f //门禁自定义操作64 +#define MINOR_OPERATION_REALTIMEBROADCAST 0x940 //实时广播 +#define MINOR_OPERATION_PLANBROADCAST 0x941 //计划广播 + +#define MINOR_SET_WIFI_PARAMETER 0x950 //设置WIFI配置参数 +#define MINOR_EZVIZ_LOGIN 0x951 //萤石云登陆 +#define MINOR_EZVIZ_LOGINOUT 0x952 //萤石云登出 +#define MINOR_LOCK_ADD 0x953 //智能锁添加 +#define MINOR_LOCK_DELETE 0x954 //智能锁删除 +#define MINOR_LOCK_GET_STATUS 0x955 //智能锁状态获取 +#define MINOR_LOCK_SET_TMP_PASSWORD 0x956 //智能锁临时密码下发 +#define MINOR_LOCK_SET_SILENT_MODE 0x957 //智能锁静音设置 +#define MINOR_LOCK_SET_LATE_WARNING 0x958 //智能锁晚归提醒设置 +#define MINOR_LOCK_IPC_ADD 0x959 //智能锁IPC关联 +#define MINOR_LOCK_IPC_REMOVE 0x95a //智能锁IPC解除关联 +#define MINOR_LOCK_DETECTOR_ADD 0x95b //智能锁探测器关联 +#define MINOR_LOCK_DETECTOR_REMOVE 0x95c //智能锁探测器解除关联 +#define MINOR_LOCK_MESSAGE_REMINDING_OPEN 0x95d //智能锁消息提醒打开 +#define MINOR_LOCK_MESSAGE_REMINDING_CLOSE 0x95e //智能锁消息提醒关闭 +#define MINOR_LOCK_SET_HEART_BEAT 0x95f //智能锁心跳设置 +#define MINOR_LOCK_REBOOT 0x960 //智能锁重启 +#define MINOR_LOCK_CLEAR_USER 0x961 //智能锁清空用户 +#define MINOR_LOCK_FORMAT 0x962 //智能锁格式化 +#define MINOR_LOCK_FINGER_CHANGE 0x963 //智能锁指纹改动 +#define MINOR_LOCK_PASSWORD_CHANGE 0x964 //智能锁密码改动 +#define MINOR_LOCK_CARD_CHANGE 0x965 //智能锁卡信息改动 +#define MINOR_LOCK_USER_CHANGE 0x966 //智能锁用户信息改动 +#define MINOR_LOCK_SYSTEM_CHANGE 0x967 //智能锁系统信息改动 +#define MINOR_LOCK_CHANGE_ADD_UESR 0x968 //智能锁新增用户 +#define MINOR_LOCK_CHANGE_DEL_UESR 0x969 //智能锁删除用户 +#define MINOR_LOCK_CHANGE_CUSTOM_USER_NAME 0x96a //智能锁自定义用户用户名改动 +#define MINOR_LOCK_CHANGE_REMOTE_DEVICE 0x96b //智能锁遥控器信息改动 +#define MINOR_LOCK_CHANGE_ADD_FP 0x96c //智能锁新增指纹 +#define MINOR_LOCK_CHANGE_DEL_FP 0x96d //智能锁删除指纹 +#define MINOR_LOCK_CHANGE_ADD_PASSWORD 0x96e //智能锁新增密码 +#define MINOR_LOCK_CHANGE_DEL_PASSWORD 0x96f //智能锁删除密码 +#define MINOR_LOCK_CHANGE_ADD_CARD 0x970 //智能锁新增卡片 +#define MINOR_LOCK_CHANGE_DEL_CARD 0x971 //智能锁删除卡片 +#define MINOR_LOCK_NETWORK_SWITCH 0x972 //智能锁网络功能开关改动 +#define MINOR_LOCK_CLEAR_NETWORK_DATA 0x973 //智能锁网络数据清空 +#define MINOR_LOCK_CLEAR_HOST_USER 0x974 //智能锁清空主人用户 +#define MINOR_LOCK_CLEAR_GUEST_USER 0x975 //智能锁清空客人用户 +#define MINOR_LOCK_CLEAN_ALL_REMOTE_DEVICE 0x976 //遥控器用户信息清空 +#define MINOR_LOCK_CLEAN_NORMAL_USER_FINGRT 0x977 //智能锁清空普通用户指纹 +#define MINOR_LOCK_CLEAN_ALL_CARD 0x978 //智能锁清空所有卡片 +#define MINOR_LOCK_CLEAN_ALL_PASSWORD 0x979 //智能锁清空所有密码 +#define MINOR_START_WIRELESSSERVER 0x97a //开启设备热点 +#define MINOR_STOP_WIRELESSSERVER 0x97b //关闭设备热点 +#define MINOR_EMERGENCY_CARD_AUTH_NORMAL_CARD 0x97c //应急管理卡授权普通卡 +#define MINOR_CHANGE_ALWAYS_OPEN_RIGHT 0x97d //通道模式改动 +#define MINOR_LOCK_DOOR_BELL_EVENT 0x97e //门铃事件(操作锁触发) + +//传显信息发布操作日志 +#define MINOR_BACKUP_DATA 0xc41 //数据备份 +#define MINOR_TRANSFER_DATA 0xc42 //数据迁移 +#define MINOR_RESTORE_DATA 0xc43 //数据还原 +#define MINOR_SET_INPUT_PLAN 0xc44 //设置终端定时输入切换计划 +#define MINOR_TERMINAL_ADB 0xc45//终端ADB配置 +#define MINOR_TERMINAL_VOLUME 0xc46 //终端音量配置 +#define MINOR_TERMINAL_LOGO 0xc47 //终端LOGO配置 +#define MINOR_TERMINAL_DEFAULT_SCHEDULE 0xc48 //垫片日程使能 +#define MINOR_TERMINAL_PASSWORD 0xc49 //设置终端密码 +#define MINOR_TERMINAL_IP 0xc4a//终端IP配置 +#define MINOR_TERMINAL_RELATE_IPC 0xc4b//终端关联IPC +#define MINOR_TERMINAL_SERVER 0xc4c//终端关联服务器配置 +#define MINOR_TERMINAL_SADP 0xc4d//终端SADP开关配置 +#define MINOR_TERMINAL_TIMEZONE 0xc4e//终端时区配置 +#define MINOR_TERMINAL_TEMP_PROTECT 0xc4f//终端温度保护配置 +#define MINOR_ADD_ORGANIZATION 0xc50 //添加组织 +#define MINOR_DELETE_ORGANIZATION 0xc51 //删除组织 +#define MINOR_MODIFY_ORGANIZATION 0xc52 //修改组织 +#define MINOR_WEATHER_FACTORY 0xc53 //天气厂商配置 +#define MINOR_SADP_ENABLE 0xc54 //sadp开关配置 +#define MINOR_SSH_ENABLE 0xc55 //SSH开关配置 +#define MINOR_MODIFY_MATERIAL 0xc56 //素材参数修改 +#define MINOR_INSERT_CHARACTER 0xc57 //插播文字消息 +#define MINOR_TERMINAL_BACKLIGHT 0xc58 //终端背光配置 +#define MINOR_DOWNLOAD_MATERIAL_THUMBNAIL 0xc59 //下载素材缩略图 +#define MINOR_UPLOAD_PROGRAM_THUMBNAIL 0xc5a//上传节目缩略图 +#define MINOR_TDOWNLOAD_PROGRAM_THUMBNAIL 0xc5b//下载节目缩略图 +#define MINOR_BATCH_DELETE_SCHEDULE_PLAN 0xc5c//批量删除发布计划 +#define MINOR_REPUBLISH 0xc5d//重新发布 +#define MINOR_CLEAR_TERMINAL_PLAY_INFO 0xc5e//清空终端播放信息 +#define MINOR_GET_TERMINAL_RESOLUTION 0xc5f//获取终端分辨率 +#define MINOR_SET_TERMINAL_RESOLUTION 0xc60//设置终端分辨率 +#define MINOR_GET_BATCH_TERMINAL_UPGRATE_PROGRESS 0xc61//批量获取终端升级进度 +#define MINOR_GET_BATCH_PROGRESS 0xc62//批量获取终端发布进度 +#define MINOR_GET_TEMPLATE 0xc64//获取模板 +#define MINOR_INIT_TEMPLATE 0xc65//初始化模板 +#define MINOR_GET_TERMINAL_NTP_SERVERS 0xc66//获取终端NTP服务 +#define MINOR_SET_TERMINAL_NTP_SERVERS 0xc67//设置终端NTP服务 +#define MINOR_GET_RELEASE_DETAILS 0xc68//获取发布详细信息 +#define MINOR_UPLOAD_TEMPLATE_THUMBNAIL 0xc69//上传模板缩略图 +#define MINOR_DOWNLOAD_TEMPLATE_THUMBNAIL 0xc6a//下载模板缩略图 +#define MINOR_ADD_TEMPLATE 0xc6b//添加模板 +#define MINOR_DELETE_TEMPLATE 0xc6c//删除模板 +#define MINOR_MODIFY_TEMPLATE 0xc6d//修改模板 +#define MINOR_ADD_SCHEDULE_PLAN 0xc6e//添加发布计划 +#define MINOR_MODIFY_SCHEDULE_PLAN 0xc6f//修改发布计划 +#define MINOR_CANCEL_SCHEDULE_RELEASE 0xc70//取消日程发布 +#define MINOR_GET_SCHEDULE 0xc71//获取日程 +#define MINOR_ADD_INSERT 0xc72//新建插播 +#define MINOR_CANCEL_INSERT 0xc73//取消插播 +#define MINOR_SWITCH_LANGUAGE 0xc74//切换语言 +#define MINOR_SET_ADMIN_INITIAL_PASSWORD 0xc75//设置admin初始密码 +#define MINOR_MODIFY_PORT 0xc76//修改端口 +#define MINOR_MODIFY_STORAGE_PATH 0xc77//修改存储路径 +#define MINOR_EXIT_PROGRAM 0xc78//退出程序 +#define MINOR_MODULE_STARTUP_SUCCESS 0xc79//模块启动成功 +#define MINOR_APPROVE_SCHEDULE 0xc80//日程审核 +#define MINOR_GENERAL_DATA_SEND 0xc81//第三方数据下发 +#define MINOR_SET_SIGN_INTERFACE 0xc82//配置签到界面参数 +#define MINOR_GET_SIGN_INTERFACE 0xc83//获取签到界面参数 +#define MINOR_SET_SHOW_MODE 0xc84//配置显示模式参数 +#define MINOR_GET_SHOW_MODE 0xc85//获取显示模式参数 +#define MINOR_SET_SCREEN_DIRECTION 0xc86//配置屏幕方向参数 +#define MINOR_GET_SCREEN_DIRECTION 0xc87//获取屏幕方向参数 +#define MINOR_SET_LOCK_SCREEN 0xc88//配置锁屏参数 +#define MINOR_GET_LOCK_SCREEN 0xc89//获取锁屏参数 +#define MINOR_SET_FACE_DATA_LIB 0xc8a//配置人脸库参数 +#define MINOR_DELETE_FACE_DATA_LIB 0xc8b//删除人脸库 +#define MINOR_SET_SPEC_FACE_DATA_LIB 0xc8c//配置指定人脸库参数 +#define MINOR_DELETE_SPEC_FACE_DATA_LIB 0xc8d//删除指定人脸库参数 +#define MINOR_ADD_FACE_DATA 0xc8e//添加人脸数据 +#define MINOR_SEARCH_FACE_DATA 0xc8f//查询人脸数据 +#define MINOR_MODIFY_FACE_DATA 0xc90//修改人脸数据 +#define MINOR_DELETE_FACE_DATA 0xc91//删除人脸数据 +#define MINOR_DELETE_USERINFO_DETAIL 0xc92//人员信息及权限删除 +#define MINOR_ADD_USERINFO 0xc93//添加人员信息 +#define MINOR_MODIFY_USERINFO 0xc94//修改人员信息 +#define MINOR_DELETE_USERINFO 0xc95//删除人员信息 +#define MINOR_ADD_CARD_INFO 0xc96//添加卡信息 +#define MINOR_MODIFY_CARD_INFO 0xc97//修改卡信息 +#define MINOR_DELETE_CARD_INFO 0xc98//删除卡信息 +#define MINOR_SET_USER_RIGHT_WEEK 0xc99//人员权限周计划设置 +#define MINOR_SET_USER_RIGHT_HOLIDAY 0xc9a//人员权限节日计划设置 +#define MINOR_SET_USER_RIGHT_HOLIDAYGROUP 0xc9b//人员权限假日组计划设置 +#define MINOR_SET_USER_RIGHT_TEMPLATE 0xc9c//人员权限计划模板设置 + +//2012-03-05 ITC操作日志类型 +#define MINOR_SET_TRIGGERMODE_CFG 0x1001 /*设置触发模式参数*/ +#define MINOR_GET_TRIGGERMODE_CFG 0x1002 /*获取触发模式参数*/ +#define MINOR_SET_IOOUT_CFG 0x1003 /*设置IO输出参数*/ +#define MINOR_GET_IOOUT_CFG 0x1004 /*获取IO输出参数*/ +#define MINOR_GET_TRIGGERMODE_DEFAULT 0x1005 /*获取触发模式推荐参数*/ +#define MINOR_GET_ITCSTATUS 0x1006 /*获取状态检测参数*/ +#define MINOR_SET_STATUS_DETECT_CFG 0x1007 /*设置状态检测参数*/ +#define MINOR_GET_STATUS_DETECT_CFG 0x1008 /*获取状态检测参数*/ +#define MINOR_SET_VIDEO_TRIGGERMODE_CFG 0x1009 /*设置视频触发模式参数*/ +#define MINOR_GET_VIDEO_TRIGGERMODE_CFG 0x100a /*获取视频触发模式参数*/ + +//2018-04-23 通用物联网关操作日志类型 +#define MINOR_ALARMHOST_GUARD 0x1010 //普通布防(外出布防) +#define MINOR_ALARMHOST_UNGUARD 0x1011 //普通撤防 +#define MINOR_ALARMHOST_BYPASS 0x1012 //旁路 +#define MINOR_ALARMHOST_DURESS_ACCESS 0x1013 //挟持 + +#define MINOR_ALARMHOST_RS485_PARAM 0x1018 //修改485配置参数 +#define MINOR_ALARMHOST_ALARM_OUTPUT 0x1019 //控制触发器 +#define MINOR_ALARMHOST_ACCESS_OPEN 0x101a //控制门禁开 +#define MINOR_ALARMHOST_ACCESS_CLOSE 0x101b //控制门禁关 +#define MINOR_ALARMHOST_SIREN_OPEN 0x101c //控制警号开 +#define MINOR_ALARMHOST_SIREN_CLOSE 0x101d //控制警号关 +#define MINOR_ALARMHOST_MOD_ZONE_CONFIG 0x101e //修改防区参数 +#define MINOR_ALARMHOST_MOD_ALARMOUT_CONIFG 0x101f //修改触发器参数 +#define MINOR_ALARMHOST_MOD_ANALOG_CONFIG 0x1020 //修改模拟量配置 +#define MINOR_ALARMHOST_RS485_CONFIG 0x1021 //修改485通道配置 +#define MINOR_ALARMHOST_PHONE_CONFIG 0x1022 //修改拨号配置 +#define MINOR_ALARMHOST_ADD_ADMIN 0x1023 //增加管理员 +#define MINOR_ALARMHOST_MOD_ADMIN_PARAM 0x1024 //修改管理员参数 +#define MINOR_ALARMHOST_DEL_ADMIN 0x1025 //删除管理员 +#define MINOR_ALARMHOST_ADD_NETUSER 0x1026 //增加后端操作员 +#define MINOR_ALARMHOST_MOD_NETUSER_PARAM 0x1027 //修改后端操作员参数 +#define MINOR_ALARMHOST_DEL_NETUSER 0x1028 //删除后端操作员 +#define MINOR_ALARMHOST_ADD_OPERATORUSER 0x1029 //增加前端操作员 +#define MINOR_ALARMHOST_MOD_OPERATORUSER_PW 0x102a //修改前端操作员密码 +#define MINOR_ALARMHOST_DEL_OPERATORUSER 0x102b //删除前端操作员 +#define MINOR_ALARMHOST_ADD_KEYPADUSER 0x102c //增加键盘/读卡器用户 +#define MINOR_ALARMHOST_DEL_KEYPADUSER 0x102d //删除键盘/读卡器用户 + + +#define MINOR_ALARMHOST_MOD_HOST_CONFIG 0x1032 //修改主机配置 +#define MINOR_ALARMHOST_RESTORE_BYPASS 0x1033 //旁路恢复 + +#define MINOR_ALARMHOST_ALARMOUT_OPEN 0x1034 //触发器开启 +#define MINOR_ALARMHOST_ALARMOUT_CLOSE 0x1035 //触发器关闭 +#define MINOR_ALARMHOST_MOD_SUBSYSTEM_PARAM 0x1036 //修改子系统参数配置 +#define MINOR_ALARMHOST_GROUP_BYPASS 0x1037 //组旁路 +#define MINOR_ALARMHOST_RESTORE_GROUP_BYPASS 0x1038 //组旁路恢复 +#define MINOR_ALARMHOST_MOD_GRPS_PARAM 0x1039 //修改GPRS参数 + +#define MINOR_ALARMHOST_MOD_REPORT_MOD 0x103b //修改上传方式配置 +#define MINOR_ALARMHOST_MOD_GATEWAY_PARAM 0x103c //修改门禁参数配置 + +#define MINOR_STAY_ARM 0x104c //留守布防 +#define MINOR_QUICK_ARM 0x104d //即时布防 +#define MINOR_AUTOMATIC_ARM 0x104e //自动布防 +#define MINOR_AUTOMATIC_DISARM 0x104f //自动撤防 +#define MINOR_KEYSWITCH_ARM 0x1050 //钥匙布撤防防区布防 +#define MINOR_KEYSWITCH_DISARM 0x1051 //钥匙布撤防防区撤防 +#define MINOR_CLEAR_ALARM 0x1052 //消警 +#define MINOR_MOD_FAULT_CFG 0x1053 //修改系统故障配置 +#define MINOR_MOD_EVENT_TRIGGER_ALARMOUT_CFG 0x1054 //修改事件触发触发器配置 +#define MINOR_SEARCH_EXTERNAL_MODULE 0x1055 //搜索外接模块 +#define MINOR_REGISTER_EXTERNAL_MODULE 0x1056 //重新注册外接模块 +#define MINOR_CLOSE_KEYBOARD_ALARM 0x1057 //关闭键盘报警提示音 +#define MINOR_MOD_3G_PARAM 0x1058 //修改3G参数 +#define MINOR_MOD_PRINT_PARAM 0x1059 //修改打印机参数 +#define MINOR_ALARMHOST_SD_CARD_FORMAT 0x1060 //SD卡格式化 +#define MINOR_ALARMHOST_SUBSYSTEM_UPGRADE 0x1061 //子板固件升级 + +#define MINOR_PLAN_ARM_CFG 0x1062 //计划布撤防参数配置 +#define MINOR_PHONE_ARM 0x1063 //手机布防 +#define MINOR_PHONE_STAY_ARM 0x1064 //手机留守布防 +#define MINOR_PHONE_QUICK_ARM 0x1065 //手机即时布防 +#define MINOR_PHONE_DISARM 0x1066 //手机撤防 +#define MINOR_PHONE_CLEAR_ALARM 0x1067 //手机消警 +#define MINOR_ALLOWLIST_CFG 0x1068 //允许名单配置 +#define MINOR_TIME_TRIGGER_CFG 0x1069 //定时开关触发器配置 +#define MINOR_CAPTRUE_CFG 0x106a //抓图参数配置 +#define MINOR_TAMPER_CFG 0x106b //防区防拆参数配置 + +#define MINOR_REMOTE_KEYPAD_UPGRADE 0x106c //远程升级键盘 +#define MINOR_ONETOUCH_AWAY_ARMING 0x106d //一键外出布防 +#define MINOR_ONETOUCH_STAY_ARMING 0x106e //一键留守布防 +#define MINOR_SINGLE_PARTITION_ARMING_OR_DISARMING 0x106f //单防区布撤防 +#define MINOR_CARD_CONFIGURATION 0x1070 //卡参数配置 +#define MINOR_CARD_ARMING_OR_DISARMING 0x1071 //刷卡布撤防 +#define MINOR_EXPENDING_NETCENTER_CONFIGURATION 0x1072 //扩展网络中心配置 +#define MINOR_NETCARD_CONFIGURATION 0x1073 //网卡配置 +#define MINOR_DDNS_CONFIGURATION 0x1074 //DDNS配置 +#define MINOR_RS485BUS_CONFIGURATION 0x1075 // 485总线参数配置 +#define MINOR_RS485BUS_RE_REGISTRATION 0x1076 //485总线重新注册 + +#define MINOR_REMOTE_OPEN_ELECTRIC_LOCK 0x1077 //远程打开电锁 +#define MINOR_REMOTE_CLOSE_ELECTRIC_LOCK 0x1078 //远程关闭电锁 +#define MINOR_LOCAL_OPEN_ELECTRIC_LOCK 0x1079 //本地打开电锁 +#define MINOR_LOCAL_CLOSE_ELECTRIC_LOCK 0x107a //本地关闭电锁 +#define MINOR_OPEN_ALARM_LAMP 0x107b //打开警灯(远程) +#define MINOR_CLOSE_ALARM_LAMP 0x107c //关闭警灯(远程) + + +#define MINOR_TEMPORARY_PASSWORD 0x107d //临时密码操作记录 + +#define MINOR_HIDDNS_CONFIG 0x1082 // HIDDNS配置 +#define MINOR_REMOTE_KEYBOARD_UPDATA 0x1083 //远程键盘升级日志 +#define MINOR_ZONE_ADD_DETECTOR 0x1084 //防区添加探测器 +#define MINOR_ZONE_DELETE_DETECTOR 0x1085 //防区删除探测器 +#define MINOR_QUERY_DETECTOR_SIGNAL 0x1086 //主机查询探测器信号强度 +#define MINOR_QUERY_DETECTOR_BATTERY 0x1087 //主机查询探测器电量 +#define MINOR_SET_DETECTOR_GUARD 0x1088 //探测器布防 +#define MINOR_SET_DETECTOR_UNGUARD 0x1089 //探测器撤防 +#define MINOR_WIRELESS_CONFIGURATION 0x108a //无线参数配置 +#define MINOR_OPEN_VOICE 0x108b //打开语音 +#define MINOR_CLOSE_VOICE 0x108c //关闭语音 +#define MINOR_ENABLE_FUNCTION_KEY 0x108d //启用功能键 +#define MINOR_DISABLE_FUNCTION_KEY 0x108e //关闭功能键 +#define MINOR_READ_CARD 0x108f //巡更刷卡 +#define MINOR_START_BROADCAST 0x1090 //打开语音广播 +#define MINOR_STOP_BROADCAST 0x1091 //关闭语音广播 +#define MINOR_REMOTE_ZONE_MODULE_UPGRADE 0x1092 //远程升级防区模块 +#define MINOR_NETWORK_MODULE_EXTEND 0x1093 //网络模块参数配置 +#define MINOR_ADD_CONTROLLER 0x1094 //添加遥控器用户 +#define MINOR_DELETE_CONTORLLER 0x1095 //删除遥控器用户 +#define MINOR_REMOTE_NETWORKMODULE_UPGRADE 0x1096 //远程升级网络模块 +#define MINOR_WIRELESS_OUTPUT_ADD 0x1097 //注册无线输出模块 +#define MINOR_WIRELESS_OUTPUT_DEL 0x1098 //删除无线输出模块 +#define MINOR_WIRELESS_REPEATER_ADD 0x1099 //注册无线中继器 +#define MINOR_WIRELESS_REPEATER_DEL 0x109a //删除无线中继器 +#define MINOR_PHONELIST_CFG 0x109b //电话名单参数配置 +#define MINOR_RF_SIGNAL_CHECK 0x109c // RF信号查询 +#define MINOR_USB_UPGRADE 0x109d // USB升级 +#define MINOR_DOOR_TIME_REMINDER_CFG 0x109f //门磁定时提醒参数配置 +#define MINOR_WIRELESS_SIREN_ADD 0x1100 //注册无线警号 +#define MINOR_WIRELESS_SIREN_DEL 0x1101 //删除无线警号 +#define MINOR_OUT_SCALE_OPEN 0x1102 //辅电开启 +#define MINOR_OUT_SCALE_CLOSE 0x1103 //辅电关闭 + +#define MINOR_ALARMHOST_4G_MODULS_START 0x1108 //4G模块启用 +#define MINOR_ALARMHOST_4G_MODULS_STOP 0x1109 //4G模块停用 + +#define MINOR_EZVIZ_CLOUD_START 0x1110 //萤石云启用 +#define MINOR_EZVIZ_CLOUD_STOP 0x1111 //萤石云停用 +#define MINOR_SIPUA_GRID_START 0x1112 //国网B启用 +#define MINOR_SIPUA_GRID_STOP 0x1113 //国网B停用 + +#define MINOR_MODBUS_FILE_DOWNLOAD 0x1114 //导出modbus协议配置文件 +#define MINOR_MODBUS_FILE_UPLOAD 0x1115 //导入modbus协议配置文件 + +#define MINOR_RS485_DLL_FILE_DOWNLOAD 0x1116 //导出485协议库文件 +#define MINOR_RS485_DLL_FLIE_UPLOAD 0x1117 //导入485协议库文件 +#define MINOR_TX1_REBOOT 0x1118 //TX1系统正常重启 + +#define MINOR_LORA_PARAM 0x1119 //LoRa参数 +#define MINOR_GB28181_PLATE_CFG_PARAM 0x111a //国标平台接入参数配置 +#define MINOR_GB28181_SERVER_START 0x111b //国标服务启用 +#define MINOR_GB28181_SERVER_STOP 0x111c //国标服务停用 +#define MINOR_WEB_AUTHENTICATION 0x111d //web认证方式配置 +#define MINOR_SADP_ENABLED 0x111e //SADP开关配置 +#define MINOR_HTTPS_ENABLED 0x111f //HTTPS开关配置 +#define MINOR_EZVIZ_PARAM_CFG 0x1120 //萤石云配置 +#define MINOR_SET_MOTION_DETECTION_CFG 0x1121 //设置移动侦测参数配置 +#define MINOR_GET_MOTION_DETECTION_CFG 0x1122 //获取移动侦测参数配置 +#define MINOR_SET_SHELTER_ALARM_CFG 0x1123 //设置遮挡报警参数配置 +#define MINOR_GET_SHELTER_ALARM_CFG 0x1124 //获取遮挡报警参数配置 +#define MINOR_SET_VIDEO_LOSS_CFG 0x1125 //设置视频丢失参数配置 +#define MINOR_GET_VIDEO_LOSS_CFG 0x1126 //获取视频丢失参数配置 +#define MINOR_SET_ABNORMAL_CFG 0x1127 //设置异常参数配置 +#define MINOR_GET_ABNORMAL_CFG 0x1128 //获取异常参数配置 +#define MINOR_SET_ALARM_LINKAGE_CFG 0x1129 //设置报警联动配置 +#define MINOR_GET_ALARM_LINKAGE_CFG 0x112a //获取报警联动配置 +#define MINOR_SET_NETWORK_CFG 0x112b //设置网络参数配置 +#define MINOR_GET_NETWORK_CFG 0x112c //获取网络参数配置 +#define MINOR_SET_VIDEO_MASK_CFG 0x112d //设置视频遮盖参数配置 +#define MINOR_GET_VIDEO_MASK_CFG 0x112e //获取视频遮盖参数配置 + +#define MINOR_BASIC_OPERATION_CFG 0x112f //基本操作 +#define MINOR_DISPLAY_EFFECT_ADJUST_CFG 0x1130 //显示效果调节 +#define MINOR_DISPLAY_PROPERTY_CFG 0x1131 //显示屏属性配置 +#define MINOR_SIGNAL_CABLE_CFG 0x1132 //信号线缆配置 +#define MINOR_BASIC_CFG 0x1133 //基础配置 +#define MINOR_IMAGE_ADJUST_CFG 0x1134 //图像调整配置 +#define MINOR_IMAGE_ENHANCE_CFG 0x1135 //图像增强配置 +#define MINOR_NOSIGN_SCREEN_SAVER_CFG 0x1136 //无信号屏保 +#define MINOR_ADVANCED_OPERATION_CFG 0x1137 //高级操作 +#define MINOR_RECEIVE_CARD_CFG 0x1138 //接收卡配置 +#define MINOR_INPUT_SUPPORT_CFG 0x1139 //输入支持管理 +#define MINOR_SYSTEM_MAINTAIN_CFG 0x113a //系统维护配置 +#define MINOR_SYSTEM_TEST_CFG 0x113b //系统检测配置 +#define MINOR_JOINT_CFG 0x113c //拼接配置 +#define MINOR_SHOW_MODE_CFG 0x113d //显示模式配置 +#define MINOR_ADVANCED_IMAGE_CFG 0x113e //高级图像配置 +#define MINOR_SHELF_SIZE_CALIBRATION 0x1140 //货架规格标定 +#define MINOR_CARGO_SENSOR_CALIBRATION 0x1141 //货格传感器标定 +#define MINOR_CARGO_PRODUCT_BIND_CFG 0x1142 //货格商品绑定配置 + +//2013-04-19 ITS操作日志类型 +#define MINOR_LOCAL_ADD_CAR_INFO 0x2001 /*本地添加车辆信息*/ +#define MINOR_LOCAL_MOD_CAR_INFO 0x2002 /*本地修改车辆信息*/ +#define MINOR_LOCAL_DEL_CAR_INFO 0x2003 /*本地删除车辆信息*/ +#define MINOR_LOCAL_FIND_CAR_INFO 0x2004 /*本地查找车辆信息*/ +#define MINOR_LOCAL_ADD_MONITOR_INFO 0x2005 /*本地添加布防信息*/ +#define MINOR_LOCAL_MOD_MONITOR_INFO 0x2006 /*本地修改布防信息*/ +#define MINOR_LOCAL_DEL_MONITOR_INFO 0x2007 /*本地删除布防信息*/ +#define MINOR_LOCAL_FIND_MONITOR_INFO 0x2008 /*本地查询布防信息*/ +#define MINOR_LOCAL_FIND_NORMAL_PASS_INFO 0x2009 /*本地查询正常通行信息*/ +#define MINOR_LOCAL_FIND_ABNORMAL_PASS_INFO 0x200a /*本地查询异常通行信息*/ +#define MINOR_LOCAL_FIND_PEDESTRIAN_PASS_INFO 0x200b /*本地查询正常通行信息*/ +#define MINOR_LOCAL_PIC_PREVIEW 0x200c /*本地图片预览*/ +#define MINOR_LOCAL_SET_GATE_PARM_CFG 0x200d /*设置本地配置出入口参数*/ +#define MINOR_LOCAL_GET_GATE_PARM_CFG 0x200e /*获取本地配置出入口参数*/ +#define MINOR_LOCAL_SET_DATAUPLOAD_PARM_CFG 0x200f /*设置本地配置数据上传参数*/ +#define MINOR_LOCAL_GET_DATAUPLOAD_PARM_CFG 0x2010 /*获取本地配置数据上传参数*/ + +//2013-11-19新增日志类型 +#define MINOR_LOCAL_DEVICE_CONTROL 0x2011 /*本地设备控制(本地开关闸)*/ +#define MINOR_LOCAL_ADD_EXTERNAL_DEVICE_INFO 0x2012 /*本地添加外接设备信息 */ +#define MINOR_LOCAL_MOD_EXTERNAL_DEVICE_INFO 0x2013 /*本地修改外接设备信息 */ +#define MINOR_LOCAL_DEL_EXTERNAL_DEVICE_INFO 0x2014 /*本地删除外接设备信息 */ +#define MINOR_LOCAL_FIND_EXTERNAL_DEVICE_INFO 0x2015 /*本地查询外接设备信息 */ +#define MINOR_LOCAL_ADD_CHARGE_RULE 0x2016 /*本地添加收费规则 */ +#define MINOR_LOCAL_MOD_CHARGE_RULE 0x2017 /*本地修改收费规则 */ +#define MINOR_LOCAL_DEL_CHARGE_RULE 0x2018 /*本地删除收费规则 */ +#define MINOR_LOCAL_FIND_CHARGE_RULE 0x2019 /*本地查询收费规则 */ +#define MINOR_LOCAL_COUNT_NORMAL_CURRENTINFO 0x2020 /*本地统计正常通行信息 */ +#define MINOR_LOCAL_EXPORT_NORMAL_CURRENTINFO_REPORT 0x2021 /*本地导出正常通行信息统计报表 */ +#define MINOR_LOCAL_COUNT_ABNORMAL_CURRENTINFO 0x2022 /*本地统计异常通行信息 */ +#define MINOR_LOCAL_EXPORT_ABNORMAL_CURRENTINFO_REPORT 0x2023 /*本地导出异常通行信息统计报表 */ +#define MINOR_LOCAL_COUNT_PEDESTRIAN_CURRENTINFO 0x2024 /*本地统计行人通行信息 */ +#define MINOR_LOCAL_EXPORT_PEDESTRIAN_CURRENTINFO_REPORT 0x2025 /*本地导出行人通行信息统计报表 */ +#define MINOR_LOCAL_FIND_CAR_CHARGEINFO 0x2026 /*本地查询过车收费信息 */ +#define MINOR_LOCAL_COUNT_CAR_CHARGEINFO 0x2027 /*本地统计过车收费信息 */ +#define MINOR_LOCAL_EXPORT_CAR_CHARGEINFO_REPORT 0x2028 /*本地导出过车收费信息统计报表 */ +#define MINOR_LOCAL_FIND_SHIFTINFO 0x2029 /*本地查询交接班信息 */ +#define MINOR_LOCAL_FIND_CARDINFO 0x2030 /*本地查询卡片信息 */ +#define MINOR_LOCAL_ADD_RELIEF_RULE 0x2031 /*本地添加减免规则 */ +#define MINOR_LOCAL_MOD_RELIEF_RULE 0x2032 /*本地修改减免规则 */ +#define MINOR_LOCAL_DEL_RELIEF_RULE 0x2033 /*本地删除减免规则 */ +#define MINOR_LOCAL_FIND_RELIEF_RULE 0x2034 /*本地查询减免规则 */ +#define MINOR_LOCAL_GET_ENDETCFG 0x2035 /*本地获取出入口控制机离线检测配置 */ +#define MINOR_LOCAL_SET_ENDETCFG 0x2036 /*本地设置出入口控制机离线检测配置*/ +#define MINOR_LOCAL_SET_ENDEV_ISSUEDDATA 0x2037 /*本地设置出入口控制机下发卡片信息 */ +#define MINOR_LOCAL_DEL_ENDEV_ISSUEDDATA 0x2038 /*本地清空出入口控制机下发卡片信息 */ + +#define MINOR_REMOTE_DEVICE_CONTROL 0x2101 /*远程设备控制*/ +#define MINOR_REMOTE_SET_GATE_PARM_CFG 0x2102 /*设置远程配置出入口参数*/ +#define MINOR_REMOTE_GET_GATE_PARM_CFG 0x2103 /*获取远程配置出入口参数*/ +#define MINOR_REMOTE_SET_DATAUPLOAD_PARM_CFG 0x2104 /*设置远程配置数据上传参数*/ +#define MINOR_REMOTE_GET_DATAUPLOAD_PARM_CFG 0x2105 /*获取远程配置数据上传参数*/ +#define MINOR_REMOTE_GET_BASE_INFO 0x2106 /*远程获取终端基本信息*/ +#define MINOR_REMOTE_GET_OVERLAP_CFG 0x2107 /*远程获取字符叠加参数配置*/ +#define MINOR_REMOTE_SET_OVERLAP_CFG 0x2108 /*远程设置字符叠加参数配置*/ +#define MINOR_REMOTE_GET_ROAD_INFO 0x2109 /*远程获取路口信息*/ +#define MINOR_REMOTE_START_TRANSCHAN 0x210a /*远程建立同步数据服务器*/ +#define MINOR_REMOTE_GET_ECTWORKSTATE 0x210b /*远程获取出入口终端工作状态*/ +#define MINOR_REMOTE_GET_ECTCHANINFO 0x210c /*远程获取出入口终端通道状态*/ + +//远程控制 2013-11-19 +#define MINOR_REMOTE_ADD_EXTERNAL_DEVICE_INFO 0x210d /*远程添加外接设备信息 */ +#define MINOR_REMOTE_MOD_EXTERNAL_DEVICE_INFO 0x210e /*远程修改外接设备信息 */ +#define MINOR_REMOTE_GET_ENDETCFG 0x210f /*远程获取出入口控制机离线检测配置 */ +#define MINOR_REMOTE_SET_ENDETCFG 0x2110 /*远程设置出入口控制机离线检测配置*/ +#define MINOR_REMOTE_ENDEV_ISSUEDDATA 0x2111 /*远程设置出入口控制机下发卡片信息 */ +#define MINOR_REMOTE_DEL_ENDEV_ISSUEDDATA 0x2112 /*远程清空出入口控制机下发卡片信息 */ + +//ITS 0x2115~0x2120 停车场车位项目 +#define MINOR_REMOTE_ON_CTRL_LAMP 0x2115 /*开启远程控制车位指示灯*/ +#define MINOR_REMOTE_OFF_CTRL_LAMP 0x2116 /*关闭远程控制车位指示灯*/ +//Netra3.1.0 +#define MINOR_SET_VOICE_LEVEL_PARAM 0x2117 /*设置音量大小 */ +#define MINOR_SET_VOICE_INTERCOM_PARAM 0x2118 /*设置音量录音 */ +#define MINOR_SET_INTELLIGENT_PARAM 0x2119 /*智能配置*/ +#define MINOR_LOCAL_SET_RAID_SPEED 0x211a /*本地设置raid速度*/ +#define MINOR_REMOTE_SET_RAID_SPEED 0x211b /*远程设置raid速度*/ +//Nerta3.1.2 +#define MINOR_REMOTE_CREATE_STORAGE_POOL 0x211c //远程添加存储池 +#define MINOR_REMOTE_DEL_STORAGE_POOL 0x211d //远程删除存储池 + +#define MINOR_REMOTE_DEL_PIC 0x2120 //远程删除图片数据 +#define MINOR_REMOTE_DEL_RECORD 0x2121 //远程删除录像数据 +#define MINOR_REMOTE_CLOUD_ENABLE 0x2123 //远程设置云系统启用 +#define MINOR_REMOTE_CLOUD_DISABLE 0x2124 //远程设置云系统禁用 +#define MINOR_REMOTE_CLOUD_MODIFY_PARAM 0x2125 //远程修改存储池参数 +#define MINOR_REMOTE_CLOUD_MODIFY_VOLUME 0x2126 //远程修改存储池容量 +#define MINOR_REMOTE_GET_GB28181_SERVICE_PARAM 0x2127 //远程获取GB28181服务参数 +#define MINOR_REMOTE_SET_GB28181_SERVICE_PARAM 0x2128 //远程设置GB28181服务参数 +#define MINOR_LOCAL_GET_GB28181_SERVICE_PARAM 0x2129 //本地获取GB28181服务参数 +#define MINOR_LOCAL_SET_GB28181_SERVICE_PARAM 0x212a //本地配置B28181服务参数 +#define MINOR_REMOTE_SET_SIP_SERVER 0x212b //远程配置SIP SERVER +#define MINOR_LOCAL_SET_SIP_SERVER 0x212c //本地配置SIP SERVER +#define MINOR_LOCAL_BLOCKALLOWFILE_OUTPUT 0x212d //本地名单导出 +#define MINOR_LOCAL_BLOCKALLOWFILE_INPUT 0x212e //本地名单导入 +#define MINOR_REMOTE_BLOCKALLOWCFGFILE_OUTPUT 0x212f //远程名单导出 +#define MINOR_REMOTE_BLOCKALLOWCFGFILE_INPUT 0x2130 //远程名单导入 + + +#define MINOR_REMOTE_CREATE_MOD_VIEWLIB_SPACE 0x2200 /*远程创建/修改视图库空间*/ +#define MINOR_REMOTE_DELETE_VIEWLIB_FILE 0x2201 /*远程删除视图库文件*/ +#define MINOR_REMOTE_DOWNLOAD_VIEWLIB_FILE 0x2202 /*远程下载视图库文件*/ +#define MINOR_REMOTE_UPLOAD_VIEWLIB_FILE 0x2203 /*远程上传视图库文件*/ +#define MINOR_LOCAL_CREATE_MOD_VIEWLIB_SPACE 0x2204 /*本地创建/修改视图库空间*/ + +#define MINOR_LOCAL_SET_DEVICE_ACTIVE 0x3000 //本地激活设备 +#define MINOR_REMOTE_SET_DEVICE_ACTIVE 0x3001 //远程激活设备 +#define MINOR_LOCAL_PARA_FACTORY_DEFAULT 0x3002 //本地回复出厂设置 +#define MINOR_REMOTE_PARA_FACTORY_DEFAULT 0x3003 //远程恢复出厂设置 +#define MIMOR_REMOTE_DELETE_ALL_VERIFYORCAP_PICS 0x3004 //远程删除所有认证或抓拍图片 +#define MIMOR_LOCAL_DELETE_ALL_VERIFYORCAP_PICS 0x3005 //本地删除所有认证或抓拍图片 +#define MIMOR_REMOTE_DELETE_EVENTS_AT_SPECTIME 0x3006 //远程按指定时间删除事件 +#define MIMOR_LOCAL_DELETE_EVENTS_AT_SPECTIME 0x3007 //本地按指定时间删除事件 +#define MIMOR_REMOTE_OPEN_SUMMER_TIME 0x3008 //远程开启夏令时 +#define MIMOR_LOCAL_OPEN_SUMMER_TIME 0x3009 //本地开启夏令时 +#define MIMOR_REMOTE_CLOSE_SUMMER_TIME 0x3010 //远程关闭夏令时 +#define MIMOR_LOCAL_CLOSE_SUMMER_TIME 0x3011 //本地关闭夏令时 +#define MIMOR_REMOTE_EZVIZ_UNBIND 0x3012 //远程萤石云解绑 +#define MIMOR_LOCAL_EZVIZ_UNBIND 0x3013 //本地萤石云解绑 +#define MIMOR_ENTER_LOCALUI_BACKGROUND 0x3014 //进入UI后台 +#define MIMOR_REMOTE_DELETE_FACEBASEMAP 0x3015 //远程删除人脸底图 +#define MIMOR_LOCAL_DELETE_FACEBASEMAP 0x3016 //本地删除人脸底图 + + +/*信息发布服务器操作日志*/ +#define MINOR_UPLAOD_STATIC_MATERIAL 0x2401 //静态素材上传 +#define MINOR_UPLOAD_DYNAMIC_MATERIAL 0x2402 //动态素材上传 +#define MINOR_DELETE_MATERIAL 0x2403 //删除素材 +#define MINOR_DOWNLOAD_STATIC_MATERIAL 0x2404 //静态素材下载 +#define MINOR_COVER_STATIC_MATERIAL 0x2405 //静态素材覆盖 +#define MINOR_APPROVE_MATERIAL 0x2406 //素材审核 +#define MINOR_UPLAOD_PROGRAM 0x2407 //上传节目 +#define MINOR_DOWNLOAD_PROGRAM 0x2408 //下载节目 +#define MINOR_DELETE_PROGRAM 0x2409 //删除节目 +#define MINOR_MODIFY_PROGRAM 0x240a //节目属性修改 +#define MINOR_APPROVE_PRAGRAM 0x240b //节目审核 +#define MINOR_UPLAOD_SCHEDULE 0x240c //上传日程 +#define MINOR_DOWNLOAD_SCHEDULE 0x240d //下载日程 +#define MINOR_DELETE_SCHEDULE 0x240e //删除日程 +#define MINOR_MODIFY_SCHEDULE 0x240f //修改日程属性 +#define MINOR_RELEASE_SCHEDULE 0x2410 //发布日程 +#define MINOR_ADD_TERMINAL 0x2411 //添加终端 +#define MINOR_DELETE_TERMINAL 0x2412 //删除终端 +#define MINOR_MODIFY_TERMIANL_PARAM 0x2413 //修改终端参数 +#define MINOR_MODIFY_TERMIANL_PLAY_PARAM 0x2414 //配置终端播放参数 +#define MINOR_ADD_TERMIANL_GROUP 0x2415 //添加终端组 +#define MINOR_MODIFY_TERMINAL_GROUP_PARAM 0x2416 //修改终端组参数 +#define MINOR_DELETE_TERMIANL_GROUP 0x2417 //删除终端组 +#define MINOR_TERMINAL_PLAY_CONTROL 0x2418 //终端播放控制 +#define MINOR_TERMINAL_ON_OFF_LINE 0x2419 //终端上下线 +#define MINOR_SET_SWITCH_PLAN 0x241a //设置终端定时开关机计划 +#define MINOR_SET_VOLUME_PLAN 0x241b //设置终端定时音量计划 +#define MINOR_TERMINAL_SCREENSHOT 0x241c //终端截屏 +#define MINOR_SYSTEM_TIME_CFG 0x241d //系统校时 +#define MINOR_ADD_USER_CFG 0x241e //添加用户配置 +#define MINOR_DEL_USER_CFG 0x241f //删除用户配置 +#define MINOR_REMOTE_MANAGE_HDD 0x2420 //远程编辑硬盘 +#define MINOR_TERMINAL_UPDATE_START 0x2421 //终端升级 +#define MINOR_SVR_RESTORE_DEFAULT_PARAM 0x2422 //服务器远程恢复默认 +#define MINOR_SVR_REMOTE_RESTORE_FACTORY 0x2423 //服务器远程恢复出厂设置 +#define MINOR_SVR_REMOTE_REBOOT 0x2424 //服务器远程重启 +#define MINOR_SVR_MODIFY_NETWORK_PARAM 0x2425 //服务器网络参数修改 +#define MINOR_SVR_SOFTWARE_UPGRADE 0x2426 //服务器软件升级 + + + +#define MINOR_REMOTE_CONFERENCE_CONFIG 0x2501 //MCU会议配置 +#define MINOR_REMOTE_TERMINAL_CONFIG 0x2502 //MCU终端配置 +#define MINOR_REMOTE_GROUP_CONFIG 0x2503 //MCU分组配置 +#define MINOR_REMOTE_CONFERENCE_CTRL 0x2504 //MCU会议控制 +#define MINOR_REMOTE_TERMINAL_CTRL 0x2505 //MCU终端控制 +#define MINOR_ADD_VIDEOWALLSCENE 0x2506 //新建电视墙场景 +#define MINOR_DEL_VIDEOWALLSCENE 0x2507 //删除电视墙场景 +#define MINOR_SAVE_VIDEOWALLSCENE 0x2508 //保存电视墙场景 +#define MINOR_UPLOAD_SCENECFGFILE 0x2509 //上传电视墙场景配置文件 +#define MINOR_DOWNLOAD_SCENECFGFILE 0x250a //下载电视墙场景配置文件 + + +//NVR后端 +#define MINOR_LOCAL_RESET_LOGIN_PASSWORD 0x2600 /* 本地重置admin登陆密码*/ +#define MINOR_REMOTE_RESET_LOGIN_PASSWORD 0x2601 /* 远程重置admin登录密码 */ +#define MINOR_LOCAL_FACE_BASE_CREATE 0x2602 /* 本地人脸对比库创建*/ +#define MINOR_REMOTE_FACE_BASE_CREATE 0x2603 /* 远程人脸对比库创建*/ +#define MINOR_LOCAL_FACE_BASE_MODIFY 0x2604 /* 本地人脸对比库修改*/ +#define MINOR_REMOTE_FACE_BASE_MODIFY 0x2605 /* 远程人脸对比库修改*/ +#define MINOR_LOCAL_FACE_BASE_DELETE 0x2606 /* 本地人脸对比库删除*/ +#define MINOR_REMOTE_FACE_BASE_DELETE 0x2607 /* 远程人脸对比库删除*/ +#define MINOR_LOCAL_FACE_DATA_APPEND 0x2608 /* 本地录入人脸数据*/ +#define MINOR_REMOTE_FACE_DATA_APPEND 0x2609 /* 远程录入人脸数据*/ +#define MINOR_LOCAL_FACE_DATA_SEARCH 0x2610 /* 本地人脸比对数据查找*/ +#define MINOR_REMOTE_FACE_DATA_SEARCH 0x2611 /* 远程人脸比对数据查找*/ +#define MINOR_LOCAL_FACE_DATA_ANALYSIS 0x2612 /* 本地图片分析操作*/ +#define MINOR_REMOTE_FACE_DATA_ANALYSIS 0x2613 /* 远程图片分析操作*/ +#define MINOR_LOCAL_FACE_DATA_EDIT 0x2614 /* 本地人脸数据修改*/ +#define MINOR_REMOTE_FACE_DATA_EDIT 0x2615 /* 远程人脸数据修改*/ + +#define MINOR_LOCAL_FACE_DATA_DELETE 0x2616 /* 本地人脸数据删除*/ +#define MINOR_REMOTE_FACE_DATA_DELET 0x2617 /* 远程人脸数据删除*/ + +#define MINOR_LOCAL_VCA_ANALYSIS_CFG 0x2618 /* 本地智能分析配置*/ +#define MINOR_REMOTE_VCA_ANALYSIS_CFG 0x2619 /* 远程智能分析配置*/ + +#define MINOR_LOCAL_FACE_BASE_IMPORT 0x261a /* 本地导入人脸库*/ +#define MINOR_LOCAL_FACE_BASE_EXPORT 0x261b /* 本地导出人脸库*/ +//NVR集群 +#define MINOR_REMOTE_CLUSTER_MODE_CONFIG 0x261c /* 远程集群模式配置操作*/ +#define MINOR_LOCAL_CLUSTER_MODE_CONFIG 0x261d /* 本地集群模式配置操作*/ +#define MINOR_REMOTE_CLUSTER_NETWORK_CONFIG 0x261e /* 远程集群组网配置操作*/ +#define MINOR_LOCAL_CLUSTER_NETWORK_CONFIG 0x261f /* 本地集群组网配置操作*/ +#define MINOR_REMOTE_CLUSTER_ADD_DEVICE 0x2620 /* 远程集群添加设备操作*/ +#define MINOR_LOCAL_CLUSTER_ADD_DEVICE 0x2621 /* 本地集群添加设备操作*/ +#define MINOR_REMOTE_CLUSTER_DEL_DEVICE 0x2622 /* 远程集群删除设备操作*/ +#define MINOR_LOCAL_CLUSTER_DEL_DEVICE 0x2623 /* 本地集群删除设备操作*/ +#define MINOR_REMOTE_HFPD_CFG 0x2624 /* 远程高频人员检测配置*/ +#define MINOR_REMOTE_FACE_CONTRAST_TASK 0x2625 /* 远程人脸比对任务配置 */ +#define MINOR_REMOTE_LFPD_CFG 0x2626 /* 远程低频人员检测配置*/ +#define MINOR_REMOTE_IOTCFGFILE_INPUT 0x2627//远程导入IOT配置文件 +#define MINOR_REMOTE_IOTCFGFILE_OUTPUT 0x2628//远程导出IOT配置文件 +#define MINOR_LOCAL_IOT_ADD 0x2629//本地添加IOT通道 +#define MINOR_REMOTE_IOT_ADD 0x262a//远程添加IOT通道 +#define MINOR_LOCAL_IOT_DEL 0x262b//本地删除IOT通道 +#define MINOR_REMOTE_IOT_DEL 0x262c//远程删除IOT通道 +#define MINOR_LOCAL_IOT_SET 0x262d//本地配置IOT通道 +#define MINOR_REMOTE_IOT_SET 0x262e//远程配置IOT通道 +#define MINOR_LOCAL_IOTCFGFILE_INPUT 0x262f //本地导入IOT配置文件 +#define MINOR_LOCAL_IOTCFGFILE_OUTPUT 0x2630//本地导出IOT配置文件 +#define MINOR_LOCAL_VAD_CFG 0x2631 /* 本地语音活动检测配置*/ +#define MINOR_REMOTE_VAD_CFG 0x2632 /* 远程语音活动检测配置*/ +#define MINOR_LOCAL_ADDRESS_FILTER_CONFIG 0x2633 /* 本地地址过滤配置*/ +#define MINOR_REMOTE_ADDRESS_FILTER_CONFIG 0x2634 /* 远程地址过滤配置*/ +#define MINOR_LOCAL_POE_CFG 0x2635 /* 本地POE配置*/ +#define MINOR_REMOTE_POE_CFG 0x2636 /* 远程POE配置*/ +#define MINOR_LOCAL_RESET_CHANNEL_PASSWORD 0x2637 /* 本地重置通道密码*/ +#define MINOR_REMOTE_RESET_CHANNEL_PASSWORD 0x2638 /* 远程重置通道密码*/ +#define MINOR_LOCAL_SSD_UPGRADE_START 0x2639 /* 本地SSD文件系统升级开始*/ +#define MINOR_LOCAL_SSD_UPGRADE_STOP 0x2640 /* 本地SSD文件系统升级结束*/ +#define MINOR_REMOTE_SSD_UPGRADE_START 0x2641 /* 远程SSD文件系统升级开始*/ +#define MINOR_REMOTE_SSD_UPGRADE_STOP 0x2642 /* 远程SSD文件系统升级结束*/ +#define MINOR_LOCAL_SSD_FORMAT_START 0x2643 /*本地SSD文件系统格式化开始*/ +#define MINOR_LOCAL_SSD_FORMAT_STOP 0x2644 /*本地SSD文件系统格式化结束*/ +#define MINOR_REMOTE_SSD_FORMAT_START 0x2645 /*远程SSD文件系统格式化开始*/ +#define MINOR_REMOTE_SSD_FORMAT_STOP 0x2646 /*远程SSD文件系统格式化结束*/ +#define MINOR_LOCAL_AUTO_SWITCH_CONFIG 0x2647 /* 本地自动开关机配置*/ +#define MINOR_REMOTE_AUTO_SWITCH_CONFIG 0x2648 /* 远程自动开关机配置*/ + +#define MINOR_LOCAL_SSD_INITIALIZATION_START 0x264a /* 本地SSD初始化开始*/ +#define MINOR_LOCAL_SSD_INITIALIZATION_END 0x264b /* 本地SSD初始化结束*/ +#define MINOR_REMOTE_SSD_INITIALIZATION_START 0x264c /* 远程SSD初始化开始*/ +#define MINOR_REMOTE_SSD_INITIALIZATION_END 0x264d /* 远程SSD初始化结束*/ + + +//定义AI开放平台的操作日志 +#define MINOR_REMOTE_AI_MODEL_ADD 0x2650//模型包添加 +#define MINOR_REMOTE_AI_MODEL_QUERY 0x2651//模型包查询 +#define MINOR_REMOTE_AI_MODEL_DELETE 0x2652//模型包删除 +#define MINOR_REMOTE_AI_MODEL_UPDATE 0x2653//模型包更新 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_ADD 0x2654//图片轮询任务增加 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_QUERY 0x2655//图片轮询任务查询 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_DELETE 0x2656//图片轮询任务删除 +#define MINOR_REMOTE_AI_PICTURE_POLLING_TASK_MODIFY 0x2657//图片轮询任务修改 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_ADD 0x2658//视频轮询任务增加 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_QUERY 0x2659//视频轮询任务查询 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_DELETE 0x265A//视频轮询任务删除 +#define MINOR_REMOTE_AI_VIDEO_POLLING_TASK_MODIFY 0x265B//视频轮询任务修改 +#define MINOR_REMOTE_AI_PICTURE_TASK_ADD 0x265C//图片任务增加 +#define MINOR_REMOTE_AI_PICTURE_TASK_QUERY 0x265D//图片任务查询 +#define MINOR_REMOTE_AI_PICTURE_TASK_DELETE 0x265E//图片任务删除 +#define MINOR_REMOTE_AI_PICTURE_TASK_MODIFY 0x265F//图片任务修改 +#define MINOR_REMOTE_AI_VIDEO_TASK_ADD 0x2660//视频任务增加 +#define MINOR_REMOTE_AI_VIDEO_TASK_QUERY 0x2661//视频任务查询 +#define MINOR_REMOTE_AI_VIDEO_TASK_DELETE 0x2662//视频任务删除 +#define MINOR_REMOTE_AI_VIDEO_TASK_MODIFY 0x2663//视频任务修改 +#define MINOR_REMOTE_AI_RULE_CONFIG 0x2664//AI规则配置 + +#define MINOR_REMOTE_LOG_STORAGE_CONFIG 0x2665//日志存储配置 +#define MINOR_REMOTE_LOG_SERVER_CONFIG 0x2666//日志服务器参数配置 + +#define MINOR_REMOTE_RESET_IPC_PASSWORD 0x2670//NVR重置IPC密码日志 + +//定义萤石平台操作日志 +#define MINOR_LOCAL_EZVIZ_OPERATION 0x2671 //本地萤石操作(包括萤石参数配置和升级) +#define MINOR_REMOTE_EZVIZ_OPERATION 0x2672 //远程萤石操作(包括萤石参数配置和升级) + +#define MINOR_EZVIZ_BITSTREAM_PARAMATERS_CONFIG 0x2673 /* 萤石码流参数配置*/ +#define MINOR_EZVIZ_ALARM_PARAMATERS_CONFIG 0x2674 /* 萤石报警参数配置*/ +#define MINOR_EZVIZ_UPGRADE 0x2675 /* 萤石升级*/ +#define MINOR_EZVIZ_REGISTER 0x2676 /* 萤石注册*/ +#define MINOR_EZVIZ_LOCAL_PARAMATERS_CONFIG 0x2677 /* 萤石本地参数配置*/ +#define MINOR_EZVIZ_REMOTE_PARAMATERS_CONFIG 0x2678 /* 萤石远程参数配置*/ + + +//消防操作日志 +#define MINOR_STOP_SOUND 0x2700 /*消音*/ +#define MINOR_SELF_CHECK 0x2701 /*自检*/ +#define MINOR_DUTY_CHECK 0x2702 /*查岗*/ +#define MINOR_SWITCH_SIMPLE_WORKMODE 0x2703 /*切换至简易模式*/ +#define MINOR_SWITCH_NORMAL_WORKMODE 0x2704 /*切换至标准模式*/ +#define MINOR_LOCAL_SSD_OPERATE_START 0x2705 /* 本地SSD操作开始*/ +#define MINOR_LOCAL_SSD_OPERATE_STOP 0x2706 /* 本地SSD操作结束*/ +#define MINOR_REMOTE_SSD_OPERATE_START 0x2707 /* 远程SSD操作开始*/ +#define MINOR_REMOTE_SSD_OPERATE_STOP 0x2708 /* 远程SSD操作结束*/ + +/*日志附加信息*/ +//主类型 +#define MAJOR_INFORMATION 0x4 /*附加信息*/ +//次类型 +#define MINOR_HDD_INFO 0xa1 /*硬盘信息*/ +#define MINOR_SMART_INFO 0xa2 /*SMART信息*/ +#define MINOR_REC_START 0xa3 /*开始录像*/ +#define MINOR_REC_STOP 0xa4 /*停止录像*/ +#define MINOR_REC_OVERDUE 0xa5 /*过期录像删除*/ +#define MINOR_LINK_START 0xa6 //连接前端设备 +#define MINOR_LINK_STOP 0xa7 //断开前端设备  +#define MINOR_NET_DISK_INFO 0xa8 //网络硬盘信息 +#define MINOR_RAID_INFO 0xa9 //raid相关信息 +#define MINOR_RUN_STATUS_INFO 0xaa /*系统运行状态信息*/ + +//Netra3.0.0 +#define MINOR_SPARE_START_BACKUP 0xab /*热备系统开始备份指定工作机*/ +#define MINOR_SPARE_STOP_BACKUP 0xac /*热备系统停止备份指定工作机*/ +#define MINOR_SPARE_CLIENT_INFO 0xad /*热备客户机信息*/ +#define MINOR_ANR_RECORD_START 0xae /*ANR录像开始*/ +#define MINOR_ANR_RECORD_END 0xaf /*ANR录像结束*/ +#define MINOR_ANR_ADD_TIME_QUANTUM 0xb0 /*ANR添加时间段*/ +#define MINOR_ANR_DEL_TIME_QUANTUM 0xb1 /*ANR删除时间段*/ + +#define MINOR_PIC_REC_START 0xb3 /* 开始抓图*/ +#define MINOR_PIC_REC_STOP 0xb4 /* 停止抓图*/ +#define MINOR_PIC_REC_OVERDUE 0xb5 /* 过期图片文件删除 */ +//Netra3.1.0 +#define MINOR_CLIENT_LOGIN 0xb6 /*登录服务器成功*/ +#define MINOR_CLIENT_RELOGIN 0xb7 /*重新登录服务器*/ +#define MINOR_CLIENT_LOGOUT 0xb8 /*退出服务器成功*/ +#define MINOR_CLIENT_SYNC_START 0xb9 /*录像同步开始*/ +#define MINOR_CLIENT_SYNC_STOP 0xba /*录像同步终止*/ +#define MINOR_CLIENT_SYNC_SUCC 0xbb /*录像同步成功*/ +#define MINOR_CLIENT_SYNC_EXCP 0xbc /*录像同步异常*/ +#define MINOR_GLOBAL_RECORD_ERR_INFO 0xbd /*全局错误记录信息*/ +#define MINOR_BUFFER_STATE 0xbe /*缓冲区状态日志记录*/ +#define MINOR_DISK_ERRORINFO_V2 0xbf /*硬盘错误详细信息V2*/ +#define MINOR_CS_DATA_EXPIRED 0xc0 //云存储数据过期 +#define MINOR_PLAT_INFO 0xc1 //平台操作信息 +#define MINOR_DIAL_STAT 0xc2 /*拨号状态*/ + +#define MINOR_UNLOCK_RECORD 0xc3 //开锁记录 +#define MINOR_VIS_ALARM 0xc4 //防区报警 +#define MINOR_TALK_RECORD 0xc5 //通话记录 +#define MINOR_ACCESSORIES_MESSAGE 0xc6 //配件板信息 +#define MINOR_KMS_EXPAMSION_DISK_INSERT 0xc7// KMS扩容盘插入 +#define MINOR_IPC_CONNECT 0xc8// IPC连接信息 +#define MINOR_INTELLIGENT_BOARD_STATUS 0xc9// 智能板状态 +#define MINOR_IPC_CONNECT_STATUS 0xca// IPC连接状态 +#define MINOR_AUTO_TIMING 0xcb //自动校时 +#define MINOR_EZVIZ_OPERATION 0xcc //萤石运行状态 +//NVR集群 +#define MINOR_CLUSTER_DEVICE_ONLINE 0xcd //集群设备上线 +#define MINOR_CLUSTER_MGR_SERVICE_STARTUP 0xce //集群管理服务启动 +#define MINOR_CLUSTER_BUSINESS_TRANSFER 0xcf //集群业务迁移 +#define MINOR_CLUSTER_STATUS 0xd0 //集群状态信息 +#define MINOR_CLUSTER_CS_STATUS 0xd1 //集群CS向CM发送设备状态失败,记录CS和CM的IP地址 +#define MINOR_CLUSTER_CM_STATUS 0xd2 //CM状态切换,记录CM转变的角色,如leader、follower、candidate +#define MINOR_VOICE_START_DETECTED 0xd3 /*检测到语音开始*/ +#define MINOR_VOICE_END_DETECTED 0xd4 /*检测到语音结束*/ +#define MINOR_DOUBLE_VERIFICATION_PASS 0xd5 /*二次认证通过*/ +#define MINOR_WIRELESS_RUNNING_STATUS 0xd6 /*无线运行状态*/ +#define MINOR_SYSTEM_DATA_SYNCHRONIZATION 0xd7 /*系统数据同步*/ +#define MINOR_HD_FORMAT_START 0xd8 /*硬盘格式化开始*/ +#define MINOR_HD_FORMAT_STOP 0xd9 /*硬盘格式化结束*/ + +//0x400-0x4ff 门禁附件信息日志类型 +#define MINOR_LIVE_DETECT_OPEN 0x400 //真人检测开启 +#define MINOR_LIVE_DETECT_CLOSE 0x401 //真人检测关闭 +#define MINOR_CLEAR_DATA_COLLECTION 0x402 //采集数据清空 +#define MINOR_DELETE_DATA_COLLECTION 0x403 //采集数据删除 +#define MINOR_EXPORT_DATA_COLLECTION 0x404 //采集数据导出 +#define MINOR_CARD_LEN_CONFIG 0x405 //卡长度配置 +#define MINOR_DATA_BASE_INIT_FAILED 0x406 //数据库初始化失败 +#define MINOR_DATA_BASE_PATCH_UPDATE 0x407 //数据库补丁升级 +#define MINOR_PSAM_CARD_INSERT 0x408 //Psam卡插入 +#define MINOR_PSAM_CARD_REMOVE 0x409 //Psam卡拔出 +#define MINOR_HARD_FAULT_REBOOT 0x40a //硬件异常(hardfault)重启 +#define MINOR_PSAM_CARD_OCP 0x40b //Psam卡过流保护 +#define MINOR_STACK_OVERFLOW 0x40c //堆栈溢出 +#define MINOR_PARM_CFG 0x40d //参数配置 +#define MINOR_CLR_USER 0x40e //清空所有用户 +#define MINOR_CLR_CARD 0x40f //清空所有卡 +#define MINOR_CLR_FINGER_BY_READER 0x410 //清空所有指纹(按读卡器) +#define MINOR_CLR_FINGER_BY_CARD 0x411 //清空所有指纹(按卡号) +#define MINOR_CLR_FINGER_BY_EMPLOYEE_ON 0x412 //清空所有指纹(按工号) +#define MINOR_DEL_FINGER 0x413 //删除一个指纹 +#define MINOR_CLR_WEEK_PLAN 0x414 //清除权限周计划 +#define MINOR_SET_WEEK_PLAN 0x415 //设置权限周计划 +#define MINOR_SET_HOLIDAY_PLAN 0x416 //设置权限假日计划 +#define MINOR_CLR_HOLIDAY_PLAN 0x417 //清除权限假日计划 +#define MINOR_SET_HOLIDAY_GROUP 0x418 //设置权限假日组计划 +#define MINOR_CLR_HOLIDAY_GROUP 0x419 //清除权限假日组计划 +#define MINOR_CLR_TEMPLATE_PLAN 0x41a //清除权限计划 +#define MINOR_SET_TEMPLATE_PLAN 0x41b //设置权限计划 +#define MINOR_ADD_CARD 0x41c //新增卡 +#define MINOR_MOD_CARD 0x41d //修改卡 +#define MINOR_ADD_FINGER_BY_CARD 0x41e //新增指纹(按卡号) +#define MINOR_ADD_FINGER_BY_EMPLOYEE_NO 0x41f //新增指纹(按工号) +#define MINOR_MOD_FINGER_BY_CARD 0x420 //修改指纹(按卡号) +#define MINOR_MOD_FINGER_BY_EMPLOYEE_NO 0x421 //修改指纹(按工号) +#define MINOR_IMPORT_USER_LIST 0x422 //用户列表导入(离线采集) +#define MINOR_USB_LOGIN 0x423 //USB登陆 +#define MINOR_USB_LOGOUT 0x424 //USB登出 +#define MINOR_ISAPI_HTTP_LOGIN 0x425 //ISAPI HTTP登陆 +#define MINOR_ISAPI_HTTP_LOGOUT 0x426 //ISAPI HTTP 登出 +#define MINOR_ISAPI_HTTPS_LOGIN 0x427 //ISAPI HTTPS登陆 +#define MINOR_ISAPI_HTTPS_LOGOUT 0x428 //ISAPI HTTPS登出 +#define MINOR_ISUP_ONLINE 0x429 //ISUP在线 +#define MINOR_ISUP_OFFLINE 0x42a//ISUP下线 +#define MINOR_FP_ISSUE_REC 0x42b //指纹发卡记录 +#define MINOR_FACE_ISSUE_REC 0x42c//人脸发卡记录 +#define MINOR_ADD_IRIS 0x42d //下发虹膜 +#define MINOR_MODIFY_IRIS 0x42e //修改虹膜 +#define MINOR_DELETE_EMPLOYEE_IRIS 0x42f //删除用户虹膜(按工号删除) +#define MINOR_DELETE_WHOLE_IRIS 0x430 //删除全部虹膜 +#define MINOR_MODIFY_IRIS_CFG 0x431 //修改虹膜参数 +#define MINOR_ADD_USER_INFO 0x432 //新增人员信息(门禁人员权限) +#define MINOR_MODIFY_USER_INFO 0x433 //修改人员信息(门禁人员权限) +#define MINOR_CLR_USER_INFO 0x434 //删除人员信息(门禁人员权限,按工号) +#define MINOR_CLR_CARD_BY_CARD_OR_EMPLOYEE 0x435 //删除卡(按卡号或工号) +#define MINOR_CLR_ALL_CARD 0x436 //删除所有卡 +#define MINOR_SIM_CARD_INSERT 0x437 //SIM卡插入 +#define MINOR_SIM_CARD_PULLOUT 0x438 //SIM卡拔出 +#define MINOR_FINGERPRINT_RECOGNITION_OPEN 0x439 //指纹识别开启 +#define MINOR_FINGERPRINT_RECOGNITION_CLOSE 0x43a //指纹识别关闭 +#define MINOR_FACE_RECOGNITION_OPEN 0x43b //人脸识别开启 +#define MINOR_FACE_RECOGNITION_CLOSE 0x43c //人脸识别关闭 +#define MINOR_RESET_ONLINE_READER 0x43d //重置在线读卡器 +#define MINOR_CLEAR_IRIS_PICTURE 0x43e //清空虹膜底图 +#define MINOR_ADD_VP 0x43f //下发声纹 +#define MINOR_MODIFY_VP 0x440 //修改声纹 +#define MINOR_DELETE_EMPLOYEE_VP 0x441 //按工号删除声纹 +#define MINOR_DELETE_ALL_VP 0x442 //删除所有声纹 + + +//802.1x认证操作日志 +#define MINOR_802_1X_AUTH_SUCC 0x320 /*802.1x认证成功*/ +#define MINOR_802_1X_AUTH_FAIL 0x321 /*802.1x认证失败*/ + +/*事件*/ +//主类型 +#define MAJOR_EVENT 0x5 /*事件*/ +//次类型 +#define MINOR_LEGAL_CARD_PASS 0x01 //合法卡认证通过 +#define MINOR_CARD_AND_PSW_PASS 0x02 //刷卡加密码认证通过 +#define MINOR_CARD_AND_PSW_FAIL 0x03 //刷卡加密码认证失败 +#define MINOR_CARD_AND_PSW_TIMEOUT 0x04 //数卡加密码认证超时 +#define MINOR_CARD_AND_PSW_OVER_TIME 0x05 //刷卡加密码超次 +#define MINOR_CARD_NO_RIGHT 0x06 //未分配权限 +#define MINOR_CARD_INVALID_PERIOD 0x07 //无效时段 +#define MINOR_CARD_OUT_OF_DATE 0x08 //卡号过期 +#define MINOR_INVALID_CARD 0x09 //无此卡号 +#define MINOR_ANTI_SNEAK_FAIL 0x0a //反潜回认证失败 +#define MINOR_INTERLOCK_DOOR_NOT_CLOSE 0x0b //互锁门未关闭 +#define MINOR_NOT_BELONG_MULTI_GROUP 0x0c //卡不属于多重认证群组 +#define MINOR_INVALID_MULTI_VERIFY_PERIOD 0x0d //卡不在多重认证时间段内 +#define MINOR_MULTI_VERIFY_SUPER_RIGHT_FAIL 0x0e //多重认证模式超级权限认证失败 +#define MINOR_MULTI_VERIFY_REMOTE_RIGHT_FAIL 0x0f //多重认证模式远程认证失败 +#define MINOR_MULTI_VERIFY_SUCCESS 0x10 //多重认证成功 +#define MINOR_LEADER_CARD_OPEN_BEGIN 0x11 //首卡开门开始 +#define MINOR_LEADER_CARD_OPEN_END 0x12 //首卡开门结束 +#define MINOR_ALWAYS_OPEN_BEGIN 0x13 //常开状态开始 +#define MINOR_ALWAYS_OPEN_END 0x14 //常开状态结束 +#define MINOR_LOCK_OPEN 0x15 //门锁打开 +#define MINOR_LOCK_CLOSE 0x16 //门锁关闭 +#define MINOR_DOOR_BUTTON_PRESS 0x17 //开门按钮打开 +#define MINOR_DOOR_BUTTON_RELEASE 0x18 //开门按钮放开 +#define MINOR_DOOR_OPEN_NORMAL 0x19 //正常开门(门磁) +#define MINOR_DOOR_CLOSE_NORMAL 0x1a //正常关门(门磁) +#define MINOR_DOOR_OPEN_ABNORMAL 0x1b //门异常打开(门磁) +#define MINOR_DOOR_OPEN_TIMEOUT 0x1c //门打开超时(门磁) +#define MINOR_ALARMOUT_ON 0x1d //报警输出打开 +#define MINOR_ALARMOUT_OFF 0x1e //报警输出关闭 +#define MINOR_ALWAYS_CLOSE_BEGIN 0x1f //常关状态开始 +#define MINOR_ALWAYS_CLOSE_END 0x20 //常关状态结束 +#define MINOR_MULTI_VERIFY_NEED_REMOTE_OPEN 0x21 //多重多重认证需要远程开门 +#define MINOR_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS 0x22 //多重认证超级密码认证成功事件 +#define MINOR_MULTI_VERIFY_REPEAT_VERIFY 0x23 //多重认证重复认证事件 +#define MINOR_MULTI_VERIFY_TIMEOUT 0x24 //多重认证重复认证事件 +#define MINOR_DOORBELL_RINGING 0x25 //门铃响 +#define MINOR_FINGERPRINT_COMPARE_PASS 0x26 //指纹比对通过 +#define MINOR_FINGERPRINT_COMPARE_FAIL 0x27 //指纹比对失败 +#define MINOR_CARD_FINGERPRINT_VERIFY_PASS 0x28 //刷卡加指纹认证通过 +#define MINOR_CARD_FINGERPRINT_VERIFY_FAIL 0x29 //刷卡加指纹认证失败 +#define MINOR_CARD_FINGERPRINT_VERIFY_TIMEOUT 0x2a //刷卡加指纹认证超时 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_PASS 0x2b //刷卡加指纹加密码认证通过 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2c //刷卡加指纹加密码认证失败 +#define MINOR_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x2d //刷卡加指纹加密码认证超时 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_PASS 0x2e //指纹加密码认证通过 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_FAIL 0x2f //指纹加密码认证失败 +#define MINOR_FINGERPRINT_PASSWD_VERIFY_TIMEOUT 0x30 //指纹加密码认证超时 +#define MINOR_FINGERPRINT_INEXISTENCE 0x31 //指纹不存在 +#define MINOR_CARD_PLATFORM_VERIFY 0x32 //刷卡平台认证 +#define MINOR_CALL_CENTER 0x33 //呼叫中心事件 +#define MINOR_FIRE_RELAY_TURN_ON_DOOR_ALWAYS_OPEN 0x34 //消防继电器导通触发门常开 +#define MINOR_FIRE_RELAY_RECOVER_DOOR_RECOVER_NORMAL 0x35 //消防继电器恢复门恢复正常 +#define MINOR_FACE_AND_FP_VERIFY_PASS 0x36 //人脸加指纹认证通过 +#define MINOR_FACE_AND_FP_VERIFY_FAIL 0x37 //人脸加指纹认证失败 +#define MINOR_FACE_AND_FP_VERIFY_TIMEOUT 0x38 //人脸加指纹认证超时 +#define MINOR_FACE_AND_PW_VERIFY_PASS 0x39 //人脸加密码认证通过 +#define MINOR_FACE_AND_PW_VERIFY_FAIL 0x3a //人脸加密码认证失败 +#define MINOR_FACE_AND_PW_VERIFY_TIMEOUT 0x3b //人脸加密码认证超时 +#define MINOR_FACE_AND_CARD_VERIFY_PASS 0x3c //人脸加刷卡认证通过 +#define MINOR_FACE_AND_CARD_VERIFY_FAIL 0x3d //人脸加刷卡认证失败 +#define MINOR_FACE_AND_CARD_VERIFY_TIMEOUT 0x3e //人脸加刷卡认证超时 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_PASS 0x3f //人脸加密码加指纹认证通过 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_FAIL 0x40 //人脸加密码加指纹认证失败 +#define MINOR_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT 0x41 //人脸加密码加指纹认证超时 +#define MINOR_FACE_CARD_AND_FP_VERIFY_PASS 0x42 //人脸加刷卡加指纹认证通过 +#define MINOR_FACE_CARD_AND_FP_VERIFY_FAIL 0x43 //人脸加刷卡加指纹认证失败 +#define MINOR_FACE_CARD_AND_FP_VERIFY_TIMEOUT 0x44 //人脸加刷卡加指纹认证超时 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_PASS 0x45 //工号加指纹认证通过 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_FAIL 0x46 //工号加指纹认证失败 +#define MINOR_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT 0x47 //工号加指纹认证超时 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS 0x48 //工号加指纹加密码认证通过 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL 0x49 //工号加指纹加密码认证失败 +#define MINOR_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT 0x4a //工号加指纹加密码认证超时 +#define MINOR_FACE_VERIFY_PASS 0x4b //人脸认证通过 +#define MINOR_FACE_VERIFY_FAIL 0x4c //人脸认证失败 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_PASS 0x4d //工号加人脸认证通过 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_FAIL 0x4e //工号加人脸认证失败 +#define MINOR_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT 0x4f //工号加人脸认证超时 +#define MINOR_FACE_RECOGNIZE_FAIL 0x50 //人脸识别失败 +#define MINOR_FIRSTCARD_AUTHORIZE_BEGIN 0x51 //首卡授权开始 +#define MINOR_FIRSTCARD_AUTHORIZE_END 0x52 //首卡授权结束 +#define MINOR_DOORLOCK_INPUT_SHORT_CIRCUIT 0x53 //门锁输入短路报警 +#define MINOR_DOORLOCK_INPUT_BROKEN_CIRCUIT 0x54 //门锁输入断路报警 +#define MINOR_DOORLOCK_INPUT_EXCEPTION 0x55 //门锁输入异常报警 +#define MINOR_DOORCONTACT_INPUT_SHORT_CIRCUIT 0x56 //门磁输入短路报警 +#define MINOR_DOORCONTACT_INPUT_BROKEN_CIRCUIT 0x57 //门磁输入断路报警 +#define MINOR_DOORCONTACT_INPUT_EXCEPTION 0x58 //门磁输入异常报警 +#define MINOR_OPENBUTTON_INPUT_SHORT_CIRCUIT 0x59 //开门按钮输入短路报警 +#define MINOR_OPENBUTTON_INPUT_BROKEN_CIRCUIT 0x5a //开门按钮输入断路报警 +#define MINOR_OPENBUTTON_INPUT_EXCEPTION 0x5b //开门按钮输入异常报警 +#define MINOR_DOORLOCK_OPEN_EXCEPTION 0x5c //门锁异常打开 +#define MINOR_DOORLOCK_OPEN_TIMEOUT 0x5d //门锁打开超时 +#define MINOR_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE 0x5e //首卡未授权开门失败 +#define MINOR_CALL_LADDER_RELAY_BREAK 0x5f //呼梯继电器断开 +#define MINOR_CALL_LADDER_RELAY_CLOSE 0x60 //呼梯继电器闭合 +#define MINOR_AUTO_KEY_RELAY_BREAK 0x61 //自动按键继电器断开 +#define MINOR_AUTO_KEY_RELAY_CLOSE 0x62 //自动按键继电器闭合 +#define MINOR_KEY_CONTROL_RELAY_BREAK 0x63 //按键梯控继电器断开 +#define MINOR_KEY_CONTROL_RELAY_CLOSE 0x64 //按键梯控继电器闭合 +#define MINOR_EMPLOYEENO_AND_PW_PASS 0x65 //工号加密码认证通过 +#define MINOR_EMPLOYEENO_AND_PW_FAIL 0x66 //工号加密码认证失败 +#define MINOR_EMPLOYEENO_AND_PW_TIMEOUT 0x67 //工号加密码认证超时 +#define MINOR_HUMAN_DETECT_FAIL 0x68 //真人检测失败 +#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_PASS 0x69 //人证比对通过 +#define MINOR_PEOPLE_AND_ID_CARD_COMPARE_FAIL 0x70 //人证比对失败 +#define MINOR_CERTIFICATE_BLOCKLIST 0x71 //禁止名单事件 +#define MINOR_LEGAL_MESSAGE 0x72 //合法短信 +#define MINOR_ILLEGAL_MESSAGE 0x73 //非法短信 +#define MINOR_DOOR_OPEN_OR_DORMANT_FAIL 0x75 //门状态常闭或休眠状态认证失败 +#define MINOR_AUTH_PLAN_DORMANT_FAIL 0x76 //认证计划休眠模式认证失败 +#define MINOR_CARD_ENCRYPT_VERIFY_FAIL 0x77 //卡加密校验失败 +#define MINOR_SUBMARINEBACK_REPLY_FAIL 0x78 //反潜回服务器应答失败 +#define MINOR_DOOR_OPEN_OR_DORMANT_OPEN_FAIL 0x82 //门常闭或休眠时开门按钮开门失败 +#define MINOR_HEART_BEAT 0x83 //心跳事件 +#define MINOR_DOOR_OPEN_OR_DORMANT_LINKAGE_OPEN_FAIL 0x84 //门常闭或休眠时开门联动开门失败 +#define MINOR_TRAILING 0x85 //尾随通行 +#define MINOR_REVERSE_ACCESS 0x86 //反向闯入 +#define MINOR_FORCE_ACCESS 0x87 //外力冲撞 +#define MINOR_CLIMBING_OVER_GATE 0x88 //翻越 +#define MINOR_PASSING_TIMEOUT 0x89 //通行超时 +#define MINOR_INTRUSION_ALARM 0x8a //误闯报警 +#define MINOR_FREE_GATE_PASS_NOT_AUTH 0x8b //闸机自由通行时未认证通过 +#define MINOR_DROP_ARM_BLOCK 0x8c //摆臂被阻挡 +#define MINOR_DROP_ARM_BLOCK_RESUME 0x8d //摆臂阻挡消除 +#define MINOR_LOCAL_FACE_MODELING_FAIL 0x8e //设备升级本地人脸建模失败 +#define MINOR_STAY_EVENT 0x8f //逗留事件 +#define MINOR_CERTIFICATE_ALLOWLIST_PASS 0x90 //授权名单认证通过 +#define MINOR_CERTIFICATE_ALLOWLIST_FALL 0x91 //授权名单认证失败 +#define MINOR_FACE_COLLECTION 0x92 //人脸采集事件(无认证,远程核验时上报) +#define MINOR_CARD_COLLECTION 0x93 //卡采集事件(无认证,远程核验时上报) +#define MINOR_PSW_ERROR_OVER_TIMES 0x94 //密码认证失败超次 +#define MINOR_ID_CARD_COLLECTION 0x95 //身份证采集事件(无认证,远程核验时上报) +#define MINOR_PSW_VERIFY_FAIL 0x96 //密码认证失败 +#define MINOR_PASSWORD_MISMATCH 0x97 //密码不匹配 +#define MINOR_EMPLOYEE_NO_NOT_EXIST 0x98 //工号不存在 +#define MINOR_COMBINED_VERIFY_PASS 0x99 //组合认证通过 +#define MINOR_COMBINED_VERIFY_TIMEOUT 0x9a //组合认证超时 +#define MINOR_VERIFY_MODE_MISMATCH 0x9b //认证方式不匹配 +#define MINOR_ORCODE_VERIFY_PASS 0x9c //二维码认证通过 +#define MINOR_ORCODE_VERIFY_FAIL 0x9d //二维码认证失败 +#define MINOR_HOUSEHOLDER_AUTHORIZE_PASS 0x9e //户主授权认证通过 +#define MINOR_BLUETOOTH_VERIFY_PASS 0x9f //蓝牙认证通过 +#define MINOR_BLUETOOTH_VERIFY_FAIL 0xa0 //蓝牙认证失败 + +#define MINOR_PASSPORT_VERIFY_FAIL 0xa1 //护照信息校验失败 +#define MINOR_INFORMAL_M1_CARD_VERIFY_FAIL 0xa2 //非正规M1卡认证失败 +#define MINOR_CPU_CARD_ENCRYPT_VERIFY_FAIL 0xa3 //CPU卡加密校验失败 +#define MINOR_NFC_DISABLE_VERIFY_FAIL 0xa4 //NFC功能关闭验证失败 + +#define MINOR_LORA_MODULE_ONLINE 0xa5 //LoRa模块上线 +#define MINOR_LORA_MODULE_OFFLINE 0xa6 //LoRa模块下线 +#define MINOR_MQTT_STATUS 0xa7 //Mqtt连接状态 + +#define MINOR_EM_CARD_RECOGNIZE_NOT_ENABLED 0xa8 //EM卡识别未启用 +#define MINOR_M1_CARD_RECOGNIZE_NOT_ENABLED 0xa9 //M1卡识别未启用 +#define MINOR_CPU_CARD_RECOGNIZE_NOT_ENABLED 0xaa //CPU卡识别未启用 +#define MINOR_ID_CARD_RECOGNIZE_NOT_ENABLED 0xab //身份证识别未启用 +#define MINOR_CARD_SET_SECRET_KEY_FAIL 0xac //卡灌装密钥失败 +#define MINOR_LOCAL_UPGRADE_FAIL 0xad /* 本地升级失败 */ +#define MINOR_REMOTE_UPGRADE_FAIL 0xae /* 远程升级失败 */ +#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_SUCC 0xaf /*远程扩展模块升级成功*/ +#define MINOR_REMOTE_EXTEND_MODULE_UPGRADE_FAIL 0xb0 /*远程扩展模块升级失败*/ +#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_SUCC 0xb1 /*远程指纹模组升级成功*/ +#define MINOR_REMOTE_FINGER_PRINT_MODULE_UPGRADE_FAIL 0xb2 /*远程指纹模组升级失败*/ +#define MINOR_DYNAMICCODE_VERIFY_PASS 0xb3 // 动态验证码认证通过 +#define MINOR_DYNAMICCODE_VERIFY_FAIL 0xb4 // 动态验证码认证失败 +#define MINOR_PASSWD_VERIFY_PASS 0xb5 //密码认证通过 +#define MINOR_COMSUME_TIMEOUT 0xb6 //消费超时 +#define MINOR_REFUND_TIMEOUT 0xb7 //纠错超时 +#define MINOR_COMSUME_AMOUNT_OVERLIMIT 0xb8 //消费金额超过最大值 +#define MINOR_COMSUME_TIMES_OVERLIMIT 0xb9 //消费次数满 +#define MINOR_USER_COMSUME_ENSURE_TIMEOUT 0xba //用户消费确认超时 +#define MINOR_BLOCKLIST_REACH_THRESHOLD 0xbb //禁止名单数量达到阈值 +#define MINOR_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL 0xbc //Desfire卡加密校验失败 +#define MINOR_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED 0xbd //Desfire卡识别未启用 +#define MINOR_IRIS_VERIFY_PASS 0xbe //虹膜认证通过 +#define MINOR_IRIS_VERIFY_FAIL 0xbf //虹膜认证失败 +#define MINOR_IRIS_BIOASSAY_FAIL 0xc0 //虹膜活体检测失败 +#define MINOR_FULL_STAFF 0xc1 //人员满提醒事件,人员数量超过90%时产生 +#define MINOR_ATTENDANCE_RECORD_EXCEED_THRESHOLD 0xc2 //本地考勤记录超过设置的阈值 +#define MINOR_DYNAMICCODE_VERIFY_INVALID 0xc3 // 动态验证码认证过期 +#define MINOR_MEETING_NO_SIGNIN 0xc4 //会议未签到 +#define MINOR_MEETING_SIGNIN 0xc5 //会议签到 +#define MINOR_MEETING_LATE 0xc6 //会议迟到 + +#define MINOR_INTERLOCK_SERVER_FAILED_RESPONSE 0xc9 //多门互锁服务器应答失败 +#define MINOR_FINGERPRINT_DISENABELD_VERIFY_FAIL 0xca //指纹识别未使能认证失败 +#define MINOR_FACE_DISENABELD_VERIFY_FAIL 0xcb //人脸识别未使能认证失败 +#define MINOR_MONITOR_OPEN_DOOR 0xcc //开门 +#define MINOR_READER_FACTORY_RESET 0xcd //读卡器恢复出厂设置 +#define MINOR_READER_ID_CONFLICT 0xce //读卡器ID冲突 +#define MINOR_FELICA_CARD_RECOGNIZE_NOT_ENABLED 0xcf //Felica卡识别未启用 +#define MINOR_PROPERTY_EXCEPTION_VERIFY_FAIL 0xd0 //属性异常认证失败(未戴口罩,安全帽,体温异常等属性异常) +#define MINOR_MEETING_NO_PERSON 0xd1 //非会议人员:会议模式下,所有状态,非会议人员签到,上报该事件 +#define MINOR_MEETING_NOT_START 0xd2 //会议未开始:会议空闲状态,会议人员签到 +#define MINOR_MEETING_SIGNEDIN 0xd3 //已签到:已签到会议人员重复签到 +#define MINOR_AUTHENTICATION_TIMES_REACHED 0xd4 //人员认证次数已满(在权限计划的当前时间段内,达到认证次数限制) +#define MINOR_FACE_MODEL_FAIL_BY_UPGRADE 0xd5 //人脸建模升级兼容失败事件 + +#define MINOR_UNCLOCK_RECORD 0xd6 //设备开锁记录事件上报 +#define MINOR_DOOR_NOT_OPEN 0xd7 //门未开报警(对讲设备) +#define MINOR_DOOR_UNCLOSED 0xd8 //门未关报警(对讲设备) +#define MINOR_ORCODE_KEY_VERIFY_FAIL 0xd9 //二维码密钥验证失败 +#define MINOR_PERSON_PASS_THROUGH 0xda //人员通行事件 + +#define MINOR_EVENT_CUSTOM1 0x500 //门禁自定义事件1 +#define MINOR_EVENT_CUSTOM2 0x501 //门禁自定义事件2 +#define MINOR_EVENT_CUSTOM3 0x502 //门禁自定义事件3 +#define MINOR_EVENT_CUSTOM4 0x503 //门禁自定义事件4 +#define MINOR_EVENT_CUSTOM5 0x504 //门禁自定义事件5 +#define MINOR_EVENT_CUSTOM6 0x505 //门禁自定义事件6 +#define MINOR_EVENT_CUSTOM7 0x506 //门禁自定义事件7 +#define MINOR_EVENT_CUSTOM8 0x507 //门禁自定义事件8 +#define MINOR_EVENT_CUSTOM9 0x508 //门禁自定义事件9 +#define MINOR_EVENT_CUSTOM10 0x509 //门禁自定义事件10 +#define MINOR_EVENT_CUSTOM11 0x50a //门禁自定义事件11 +#define MINOR_EVENT_CUSTOM12 0x50b //门禁自定义事件12 +#define MINOR_EVENT_CUSTOM13 0x50c //门禁自定义事件13 +#define MINOR_EVENT_CUSTOM14 0x50d //门禁自定义事件14 +#define MINOR_EVENT_CUSTOM15 0x50e //门禁自定义事件15 +#define MINOR_EVENT_CUSTOM16 0x50f //门禁自定义事件16 +#define MINOR_EVENT_CUSTOM17 0x510 //门禁自定义事件17 +#define MINOR_EVENT_CUSTOM18 0x511 //门禁自定义事件18 +#define MINOR_EVENT_CUSTOM19 0x512 //门禁自定义事件19 +#define MINOR_EVENT_CUSTOM20 0x513 //门禁自定义事件20 +#define MINOR_EVENT_CUSTOM21 0x514 //门禁自定义事件21 +#define MINOR_EVENT_CUSTOM22 0x515 //门禁自定义事件22 +#define MINOR_EVENT_CUSTOM23 0x516 //门禁自定义事件23 +#define MINOR_EVENT_CUSTOM24 0x517 //门禁自定义事件24 +#define MINOR_EVENT_CUSTOM25 0x518 //门禁自定义事件25 +#define MINOR_EVENT_CUSTOM26 0x519 //门禁自定义事件26 +#define MINOR_EVENT_CUSTOM27 0x51a //门禁自定义事件27 +#define MINOR_EVENT_CUSTOM28 0x51b //门禁自定义事件28 +#define MINOR_EVENT_CUSTOM29 0x51c //门禁自定义事件29 +#define MINOR_EVENT_CUSTOM30 0x51d //门禁自定义事件30 +#define MINOR_EVENT_CUSTOM31 0x51e //门禁自定义事件31 +#define MINOR_EVENT_CUSTOM32 0x51f //门禁自定义事件32 +#define MINOR_EVENT_CUSTOM33 0x520 //门禁自定义事件33 +#define MINOR_EVENT_CUSTOM34 0x521 //门禁自定义事件34 +#define MINOR_EVENT_CUSTOM35 0x522 //门禁自定义事件35 +#define MINOR_EVENT_CUSTOM36 0x523 //门禁自定义事件36 +#define MINOR_EVENT_CUSTOM37 0x524 //门禁自定义事件37 +#define MINOR_EVENT_CUSTOM38 0x525 //门禁自定义事件38 +#define MINOR_EVENT_CUSTOM39 0x526 //门禁自定义事件39 +#define MINOR_EVENT_CUSTOM40 0x527 //门禁自定义事件40 +#define MINOR_EVENT_CUSTOM41 0x528 //门禁自定义事件41 +#define MINOR_EVENT_CUSTOM42 0x529 //门禁自定义事件42 +#define MINOR_EVENT_CUSTOM43 0x52a //门禁自定义事件43 +#define MINOR_EVENT_CUSTOM44 0x52b //门禁自定义事件44 +#define MINOR_EVENT_CUSTOM45 0x52c //门禁自定义事件45 +#define MINOR_EVENT_CUSTOM46 0x52d //门禁自定义事件46 +#define MINOR_EVENT_CUSTOM47 0x52e //门禁自定义事件47 +#define MINOR_EVENT_CUSTOM48 0x52f //门禁自定义事件48 +#define MINOR_EVENT_CUSTOM49 0x530 //门禁自定义事件49 +#define MINOR_EVENT_CUSTOM50 0x531 //门禁自定义事件50 +#define MINOR_EVENT_CUSTOM51 0x532 //门禁自定义事件51 +#define MINOR_EVENT_CUSTOM52 0x533 //门禁自定义事件52 +#define MINOR_EVENT_CUSTOM53 0x534 //门禁自定义事件53 +#define MINOR_EVENT_CUSTOM54 0x535 //门禁自定义事件54 +#define MINOR_EVENT_CUSTOM55 0x536 //门禁自定义事件55 +#define MINOR_EVENT_CUSTOM56 0x537 //门禁自定义事件56 +#define MINOR_EVENT_CUSTOM57 0x538 //门禁自定义事件57 +#define MINOR_EVENT_CUSTOM58 0x539 //门禁自定义事件58 +#define MINOR_EVENT_CUSTOM59 0x53a //门禁自定义事件59 +#define MINOR_EVENT_CUSTOM60 0x53b //门禁自定义事件60 +#define MINOR_EVENT_CUSTOM61 0x53c //门禁自定义事件61 +#define MINOR_EVENT_CUSTOM62 0x53d //门禁自定义事件62 +#define MINOR_EVENT_CUSTOM63 0x53e //门禁自定义事件63 +#define MINOR_EVENT_CUSTOM64 0x53f //门禁自定义事件64 +#define MINOR_ESD_OK 0x540 //ESD合格 +#define MINOR_ESD_LINKAGE_DISENABLE 0x541 //ESD不合格,不开门 +#define MINOR_ESD_LINKAGE_ENABLE 0x542 //ESD不合格,开门 +#define MINOR_ESD_OVERTIME 0x543 //ESD检测超时 + + +#define MINOR_LOCK_FINGER_OPEN_DOOR 0x600 //智能锁指纹开门 +#define MINOR_LOCK_PASSWORD_OPEN_DOOR 0x601 //智能锁密码开门 +#define MINOR_LOCK_CARD_OPEN_DOOR 0x602 //智能锁刷卡开门 +#define MINOR_LOCK_CENTER_OPEN_DOOR 0x603 //智能锁中心开门 +#define MINOR_LOCK_APP_OPEN_DOOR 0x604 //智能锁APP开门 +#define MINOR_LOCK_KEY_OPEN_DOOR 0x605 //智能锁钥匙开门 +#define MINOR_LOCK_REMOTE_DEVICE_OPEN_DOOR 0x606 //智能锁遥控器开门 +#define MINOR_LOCK_TMP_PASSWORD_OPEN_DOOR 0x607 //智能锁临时密码开门 +#define MINOR_LOCK_BLUETOOTH_OPEN_DOOR 0x608 //智能锁蓝牙开门 +#define MINOR_LOCK_MULTI_OPEN_DOOR 0x609 //智能锁多重开门 + + +#define MINOR_VP_ANTI_SPOOFING_FAIL 0x700 //声纹活体检测失败 +#define MINOR_VP_VERIFY_FAIL 0x701 //声纹认证失败 + + +//2018-04-23 通用物联网关事件日志类型 +#define MINOR_ALARMHOST_SCHOOLTIME_IRGI_B 0x1001 //B码校时 +#define MINOR_ALARMHOST_SCHOOLTIME_SDK 0x1002 //SDK校时 +#define MINOR_ALARMHOST_SCHOOLTIME_SELFTEST 0x1003 //定制自检校时 +#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALINSERT 0x1004 //子板插入 +#define MINOR_ALARMHOST_SUBSYSTEM_ABNORMALPULLOUT 0x1005 //子板拔出 + +#define MINOR_ALARMHOST_AUTO_ARM 0x1006 //自动布防 +#define MINOR_ALARMHOST_AUTO_DISARM 0x1007 //自动撤防 +#define MINOR_ALARMHOST_TIME_TIGGER_ON 0x1008 //定时开启触发器 +#define MINOR_ALARMHOST_TIME_TIGGER_OFF 0x1009 //定时关闭触发器 +#define MINOR_ALARMHOST_AUTO_ARM_FAILD 0x100a //自动布防失败 +#define MINOR_ALARMHOST_AUTO_DISARM_FAILD 0x100b //自动撤防失败 +#define MINOR_ALARMHOST_TIME_TIGGER_ON_FAILD 0x100c //定时开启触发器失败 +#define MINOR_ALARMHOST_TIME_TIGGER_OFF_FAILD 0x100d //定时关闭触发器失败 +#define MINOR_ALARMHOST_MANDATORY_ALARM 0x100e //强制布防 +#define MINOR_ALARMHOST_KEYPAD_LOCKED 0x100f //键盘锁定 +#define MINOR_ALARMHOST_USB_INSERT 0x1010 //USB插入 +#define MINOR_ALARMHOST_USB_PULLOUT 0x1011 //USB拔出 +#define MINOR_ALARMHOST_4G_MODULS_ONLINE 0x1012 //4G模块上线 +#define MINOR_ALARMHOST_4G_MODULS_OFFLINE 0x1013 //4G模块下线 + +#define MINOR_EZVIZ_CLOUD_ONLINE 0x1014 //萤石云上线 +#define MINOR_EZVIZ_CLOUD_OFFLINE 0x1015 //萤石云下线 + +#define MINOR_SIPUA_GRID_ONLINE 0x1016 //国网B上线 +#define MINOR_SIPUA_GRID_OFFLINE 0x1017 //国网B下线 + +#define MINOR_INTERNET_ACCESS_CONNECTED 0x1018 //网口连接 +#define MINOR_INTERNET_ACCESS_BREAK 0x1019 //网口断开 + +#define MINOR_WIRELESS_CONNECTED 0x101a //无线连接 +#define MINOR_WIRELESS_BREAK 0x101b //无线断开 +#define MINOR_PORT_LINK_DOWN 0x101c //端口网络down +#define MINOR_PORT_LINK_UP 0x101d //端口网络up +#define MINOR_POE_PORT_POWER_ON 0x101e //POE端口power on +#define MINOR_POE_PORT_POWER_OFF 0x101f //POE端口power off +#define MINOR_POE_TOTAL_POWER_MAX 0x1020 //POE总功率达到poe-max +#define MINNOR_POE_TOTAL_POWER_RESUME 0x1021 //POE总功率恢复正常 +#define MINNOR_CARGO_ITEMS 0x1022 //货格物品取放 + + +typedef enum tagALARMHOST_MAJOR_TYPE +{ + MAJOR_ALARMHOST_ALARM = 1, + MAJOR_ALARMHOST_EXCEPTION, + MAJOR_ALARMHOST_OPERATION, + MAJ0R_ALARMHOST_EVENT +}ALARMHOST_MAJOR_TYPE; + +typedef enum tagALARMHOST_MINOR_TYPE +{ + // 报警 + MINOR_SHORT_CIRCUIT =0x01, // 短路报警 + MINOR_BROKEN_CIRCUIT, // 断路报警 + MINOR_ALARM_RESET, // 报警复位 + MINOR_ALARM_NORMAL, // 报警恢复正常 + MINOR_PASSWORD_ERROR, // 密码错误(连续3次输入密码错误) + MINOR_ID_CARD_ILLEGALLY, // 非法感应卡ID + MINOR_KEYPAD_REMOVE, // 键盘防拆 + MINOR_KEYPAD_REMOVE_RESTORE, // 键盘防拆复位 + MINOR_DEV_REMOVE, // 设备防拆 + MINOR_DEV_REMOVE_RESTORE, // 设备防拆复位 + MINOR_BELOW_ALARM_LIMIT1, // 模拟量低于报警限1 + MINOR_BELOW_ALARM_LIMIT2, // 模拟量低于报警限2 + MINOR_BELOW_ALARM_LIMIT3, // 模拟量低于报警限3 + MINOR_BELOW_ALARM_LIMIT4, // 模拟量低于报警限4 + MINOR_ABOVE_ALARM_LIMIT1, // 模拟量高于报警限1 + MINOR_ABOVE_ALARM_LIMIT2, // 模拟量高于报警限2 + MINOR_ABOVE_ALARM_LIMIT3, // 模拟量高于报警限3 + MINOR_ABOVE_ALARM_LIMIT4, // 模拟量高于报警限4 + MINOR_URGENCYBTN_ON, // 紧急按钮按下 + MINOR_URGENCYBTN_OFF, // 紧急按钮复位 + MINOR_VIRTUAL_DEFENCE_SUSPECT, //软防区匪警 + MINOR_VIRTUAL_DEFENCE_FIRE, //软防区火警 + MINOR_VIRTUAL_DEFENCE_URGENT, //软防区紧急 + MINOR_ALARMHOST_MOTDET_START, //移动侦测报警开始 + MINOR_ALARMHOST_MOTDET_STOP, //移动侦测报警结束 + MINOR_ALARMHOST_HIDE_ALARM_START, //遮挡报警开始 + MINOR_ALARMHOST_HIDE_ALARM_STOP, //遮挡报警结束 + MINOR_ALARMHOST_UPS_ALARM, //UPS报警 + MINOR_ALARMHOST_ELECTRICITY_METER_ALARM, //电量表报警 + MINOR_ALARMHOST_SWITCH_POWER_ALARM, //开关电源报警 + MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM, //气体检测系统报警 + MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM, //变电器温显表报警 + MINOR_ALARMHOST_TEMP_HUMI_ALARM, //温湿度传感器报警 + MINOR_ALARMHOST_UPS_ALARM_RESTORE, //UPS报警恢复 + MINOR_ALARMHOST_ELECTRICITY_METER_ALARM_RESTORE, //电量表报警恢复 + MINOR_ALARMHOST_SWITCH_POWER_ALARM_RESTORE, //开关电源报警恢复 + MINOR_ALARMHOST_GAS_DETECT_SYS_ALARM_RESTORE, //气体检测系统报警恢复 + MINOR_ALARMHOST_TRANSFORMER_TEMPRATURE_ALARM_RESTORE, //变电器温显表报警恢复 + MINOR_ALARMHOST_TEMP_HUMI_ALARM_RESTORE, //温湿度传感器报警恢复 + MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM, //水位传感器报警 + MINOR_ALARMHOST_WATER_LEVEL_SENSOR_ALARM_RESTORE, //水位传感器报警恢复 + MINOR_ALARMHOST_DUST_NOISE_ALARM, //扬尘噪声传感器报警 + MINOR_ALARMHOST_DUST_NOISE_ALARM_RESTORE, //扬尘噪声传感器报警恢复 + MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM, //环境采集仪报警 + MINOR_ALARMHOST_ENVIRONMENTAL_LOGGER_ALARM_RESTORE, //环境采集仪报警恢复 + + MINOR_ALARMHOST_TRIGGER_TAMPER, //探测器防拆 + MINOR_ALARMHOST_TRIGGER_TAMPER_RESTORE, //探测器防拆恢复 + MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM, //紧急呼叫求助报警 + MINOR_ALARMHOST_EMERGENCY_CALL_HELP_ALARM_RESTORE, //紧急呼叫求助报警恢复 + MINOR_ALARMHOST_CONSULTING_ALARM, //业务咨询报警 + MINOR_ALARMHOST_CONSULTING_ALARM_RESTORE, //业务咨询报警恢复 + MINOR_ZONE_MODULE_REMOVE, // 防区模块防拆 + MINOR_ZONE_MODULE_RESET, // 防区模块防拆复位 + + MINOR_ALARM_WIND_SPEED_ALARM, //风速传感器告警 + MINOR_ALARM_WIND_SPEED_ALARM_RESTORE, //风速传感器告警恢复 + MINOR_ALARM_GENERATE_OUTPUT_ALARM, //通用输出模块告警 + MINOR_ALARM_GENERATE_OUTPUT_RESTORE, //通用输出模块告警恢复 + MINOR_ALARM_SOAK_ALARM, //浸水传感器告警 + MINOR_ALARM_SOAK_ALARM_RESTORE, //浸水传感器告警恢复 + MINOR_ALARM_SOLAR_POWER_ALARM, //太阳能传感器告警 + MINOR_ALARM_SOLAR_POWER_ALARM_RESTORE, //太阳能传感器告警恢复 + MINOR_ALARM_SF6_ALARM, //SF6报警主机告警 + MINOR_ALARM_SF6_ALARM_RESTORE, //SF6报警主机告警恢复 + MINOR_ALARM_WEIGHT_ALARM, //称重仪告警 + MINOR_ALARM_WEIGHT_ALARM_RESTORE, //称重仪告警恢复 + MINOR_ALARM_WEATHER_ALARM, //气象采集系统告警 + MINOR_ALARM_WEATHER_ALARM_RESTORE, //气象采集系统告警恢复 + MINOR_ALARM_FUEL_GAS_ALARM, //燃气显示系统告警 + MINOR_ALARM_FUEL_GAS_ALARM_RESTORE, //燃气显示系统告警恢复 + MINOR_ALARM_FIRE_ALARM, //火灾报警系统告警 + MINOR_ALARM_FIRE_ALARM_RESTORE, //火灾报警系统告警恢复 + + MINOR_WIRELESS_OUTPUT_MODULE_REMOVE, // 无线输出模块防拆 + MINOR_WIRELESS_OUTPUT_MODULE_RESET, // 无线输出模块防拆复位 + MINOR_WIRELESS_REPEATER_MODULE_REMOVE, // 无线中继器防拆 + MINOR_WIRELESS_REPEATER_MODULE_RESET, // 无线中继器防拆复位 + MINOR_WIRELESS_SIREN_MODULE_REMOVE, // 无线警号防拆 + MINOR_WIRELESS_SIREN_MODULE_RESET, // 无线警号防拆复位 + MINOR_SOUND_INTENSITY_RISE, // 声强陡升报警 + MINOR_SOUND_INTENSITY_RISE_RESET, // 声强陡升报警恢复 + MINOR_SOUND_INTENSITY_DROP, // 声强陡降报警 + MINOR_SOUND_INTENSITY_DROP_RESET, // 声强陡降报警恢复 + MINOR_AUDIO_INPUT_EXCEPTION, // 音频输入异常报警 + MINOR_AUDIO_INPUT_EXCEPTION_RESET, // 音频输入异常报警恢复 + MINOR_FACE_DETECTION_ALARM, // 人脸侦测报警 + MINOR_FACE_DETECTION_ALARM_RESTORE, // 人脸侦测报警恢复 + + // 异常 + MINOR_POWER_ON = 0x01, // 上电 + MINOR_POWER_OFF, // 掉电 + MINOR_WDT_RESET, // WDT 复位 + MINOR_LOW_BATTERY_VOLTAGE, // 蓄电池电压低 + MINOR_AC_LOSS, // 交流电断电 + MINOR_AC_RESTORE, // 交流电恢复 + MINOR_RTC_EXCEPTION, // RTC实时时钟异常 + MINOR_NETWORK_CONNECT_FAILURE, // 网络连接断 + MINOR_NETWORK_CONNECT_RESTORE, // 网络连接恢复 + MINOR_TEL_LINE_CONNECT_FAILURE, // 电话线连接断 + MINOR_TEL_LINE_CONNECT_RESTORE, // 电话线连接恢复 + MINOR_EXPANDER_BUS_LOSS, // 扩展总线模块掉线 + MINOR_EXPANDER_BUS_RESTORE, // 扩展总线模块掉线恢复 + MINOR_KEYPAD_BUS_LOSS, // 键盘总线模块掉线 + MINOR_KEYPAD_BUS_RESTORE, // 键盘总线模块掉线恢复 + MINOR_SENSOR_FAILURE, // 模拟量传感器故障 + MINOR_SENSOR_RESTORE, // 模拟量传感器恢复 + MINOR_RS485_CONNECT_FAILURE, // RS485通道连接断 + MINOR_RS485_CONNECT_RESTORE, // RS485通道连接断恢复 + MINOR_BATTERT_VOLTAGE_RESTORE, // 蓄电池电压恢复正常 + MINOR_WIRED_NETWORK_ABNORMAL, //有线网络异常 + MINOR_WIRED_NETWORK_RESTORE, //有线网络恢复正常 + MINOR_GPRS_ABNORMAL, //GPRS通信异常 + MINOR_GPRS_RESTORE, //GPRS恢复正常 + MINOR_3G_ABNORMAL, //3G通信异常 + MINOR_3G_RESTORE, //3G恢复正常 + MINOR_SIM_CARD_ABNORMAL, //SIM卡异常 + MINOR_SIM_CARD_RESTORE, //SIM卡恢复正常 + MINOR_ALARMHOST_VI_LOST, // 视频信号丢失 + MINOR_ALARMHOST_ILLEGAL_ACCESS, // 非法访问 + MINOR_ALARMHOST_HD_FULL, // 硬盘满 + MINOR_ALARMHOST_HD_ERROR, // 硬盘错误 + MINOR_ALARMHOST_DCD_LOST, // MODEM 掉线(保留不使用) + MINOR_ALARMHOST_IP_CONFLICT, // IP地址冲突 + MINOR_ALARMHOST_NET_BROKEN, // 网络断开 + MINOR_ALARMHOST_REC_ERROR, // 录像出错 + MINOR_ALARMHOST_VI_EXCEPTION, // 视频输入异常(只针对模拟通道) + MINOR_ALARMHOST_FORMAT_HDD_ERROR, //远程格式化硬盘失败 + MINOR_ALARMHOST_USB_ERROR, //USB通信故障 + MINOR_ALARMHOST_USB_RESTORE, //USB通信故障恢复 + MINOR_ALARMHOST_PRINT_ERROR, //打印机故障 + MINOR_ALARMHOST_PRINT_RESTORE, //打印机故障恢复 + MINOR_SUBSYSTEM_COMMUNICATION_ERROR, //子板通讯错误 + MINOR_ALARMHOST_IPC_NO_LINK, /* IPC连接断开 */ + MINOR_ALARMHOST_IPC_IP_CONFLICT, /*ipc ip 地址 冲突*/ + MINOR_ALARMHOST_VI_MISMATCH, /*视频制式不匹配*/ + MINOR_ALARMHOST_MCU_RESTART, //MCU重启 + MINOR_ALARMHOST_GPRS_MODULE_FAULT, //GPRS模块故障 + MINOR_ALARMHOST_TELEPHONE_MODULE_FAULT, //电话模块故障 + MINOR_ALARMHOST_WIFI_ABNORMAL, //WIFI通信异常 + MINOR_ALARMHOST_WIFI_RESTORE, //WIFI恢复正常 + MINOR_ALARMHOST_RF_ABNORMAL, //RF信号异常 + MINOR_ALARMHOST_RF_RESTORE, //RF信号恢复正常 + MINOR_ALARMHOST_DETECTOR_ONLINE, //探测器在线 + MINOR_ALARMHOST_DETECTOR_OFFLINE, //探测器离线 + MINOR_ALARMHOST_DETECTOR_BATTERY_NORMAL, //探测器电量正常 + MINOR_ALARMHOST_DETECTOR_BATTERY_LOW, //探测器电量欠压 + MINOR_ALARMHOST_DATA_TRAFFIC_OVERFLOW, //流量超额 + MINOR_ZONE_MODULE_LOSS, // 防区模块掉线 + MINOR_ZONE_MODULE_RESTORE, // 防区模块掉线恢复 + MINOR_ALARMHOST_WIRELESS_OUTPUT_LOSS, //无线输出模块离线 + MINOR_ALARMHOST_WIRELESS_OUTPUT_RESTORE, //无线输出模块恢复在线 + MINOR_ALARMHOST_WIRELESS_REPEATER_LOSS, //无线中继器离线 + MINOR_ALARMHOST_WIRELESS_REPEATER_RESTORE, //无线中继器恢复在线 + MINOR_TRIGGER_MODULE_LOSS, // 触发器模块掉线 + MINOR_TRIGGER_MODULE_RESTORE, // 触发器模块掉线恢复 + MINOR_WIRELESS_SIREN_LOSS, // 无线警号离线 + MINOR_WIRELESS_SIREN_RESTORE, // 无线警号恢复在线 + MINOR_ALARMHOST_WIRELESS_RS485_LOSS, //无线RS485接收器模块离线 + MINOR_ALARMHOST_WIRELESS_RS485_RESTORE, //无线RS485接收器模块恢复在线 + + // 操作 + MINOR_GUARD = 0x01, // 普通布防 + MINOR_UNGUARD, // 普通撤防 + MINOR_BYPASS, // 旁路 + MINOR_DURESS_ACCESS, // 挟持 + MINOR_ALARMHOST_LOCAL_REBOOT, // 本地重启 + MINOR_ALARMHOST_REMOTE_REBOOT, // 远程重启 + MINOR_ALARMHOST_LOCAL_UPGRADE, // 本地升级 + MINOR_ALARMHOST_REMOTE_UPGRADE, // 远程升级 + MINOR_RECOVERY_DEFAULT_PARAM, // 恢复默认参数 + MINOR_ALARM_OUTPUT, // 控制报警输出 + MINOR_ACCESS_OPEN, // 控制门禁开 + MINOR_ACCESS_CLOSE, // 控制门禁关 + MINOR_SIREN_OPEN, // 控制警号开 + MINOR_SIREN_CLOSE, // 控制警号关 + MINOR_MOD_ZONE_CONFIG, // 修改防区设置 + MINOR_MOD_ALARMOUT_CONIFG, // 控制报警输出配置 + MINOR_MOD_ANALOG_CONFIG, // 修改模拟量配置 + MINOR_RS485_CONFIG, // 修改485通道配置 + MINOR_PHONE_CONFIG, // 修改拨号配置 + MINOR_ADD_ADMIN, // 增加管理员 + MINOR_MOD_ADMIN_PARAM, // 修改管理员参数 + MINOR_DEL_ADMIN, // 删除管理员 + MINOR_ADD_NETUSER, // 增加后端操作员 + MINOR_MOD_NETUSER_PARAM, // 修改后端操作员参数 + MINOR_DEL_NETUSER, // 删除后端操作员 + MINOR_ADD_OPERATORUSER, // 增加前端操作员 + MINOR_MOD_OPERATORUSER_PW, // 修改前端操作员密码 + MINOR_DEL_OPERATORUSER, // 删除前端操作员 + MINOR_ADD_KEYPADUSER, // 增加键盘/读卡器用户 + MINOR_DEL_KEYPADUSER, // 删除键盘/读卡器用户 + MINOR_REMOTEUSER_LOGIN, // 远程用户登陆 + MINOR_REMOTEUSER_LOGOUT, // 远程用户注销 + MINOR_REMOTE_GUARD, // 远程布防 + MINOR_REMOTE_UNGUARD, // 远程撤防 + MINOR_MOD_HOST_CONFIG, // 修改主机配置 + MINOR_RESTORE_BYPASS, // 旁路恢复 + MINOR_ALARMOUT_OPEN, // 报警输出开启 + MINOR_ALARMOUT_CLOSE, // 报警输出关闭 + MINOR_MOD_SUBSYSTEM_PARAM, // 修改子系统参数配置 + MINOR_GROUP_BYPASS, // 组旁路 + MINOR_RESTORE_GROUP_BYPASS, // 组旁路恢复 + MINOR_MOD_GRPS_PARAM, // 修改GPRS参数 + MINOR_MOD_NET_REPORT_PARAM, // 修改网络上报参数配置 + MINOR_MOD_REPORT_MOD, // 修改上传方式配置 + MINOR_MOD_GATEWAY_PARAM, // 修改门禁参数配置 + MINOR_ALARMHOST_REMOTE_START_REC, // 远程开始录像 + MINOR_ALARMHOST_REMOTE_STOP_REC, // 远程停止录像 + MINOR_ALARMHOST_START_TRANS_CHAN, // 开始透明传输 + MINOR_ALARMHOST_STOP_TRANS_CHAN, // 停止透明传输 + MINOR_ALARMHOST_START_VT, // 开始语音对讲 + MINOR_ALARMHOST_STOP_VTM, // 停止语音对讲 + MINOR_ALARMHOST_REMOTE_PLAYBYFILE, // 远程按文件回放 + MINOR_ALARMHOST_REMOTE_PLAYBYTIME, // 远程按时间回放 + MINOR_ALARMHOST_REMOTE_PTZCTRL, // 远程云台控制 + MINOR_ALARMHOST_REMOTE_FORMAT_HDD, // 远程格式化硬盘 + MINOR_ALARMHOST_REMOTE_LOCKFILE, // 远程锁定文件 + MINOR_ALARMHOST_REMOTE_UNLOCKFILE, // 远程解锁文件 + MINOR_ALARMHOST_REMOTE_CFGFILE_OUTPUT, // 远程导出配置文件 + MINOR_ALARMHOST_REMOTE_CFGFILE_INTPUT, // 远程导入配置文件 + MINOR_ALARMHOST_REMOTE_RECFILE_OUTPUT, // 远程导出录象文件 + + MINOR_ALARMHOST_STAY_ARM, //留守布防 + MINOR_ALARMHOST_QUICK_ARM, //即时布防 + MINOR_ALARMHOST_AUTOMATIC_ARM, //自动布防 + MINOR_ALARMHOST_AUTOMATIC_DISARM, //自动撤防 + MINOR_ALARMHOST_KEYSWITCH_ARM, //钥匙防区布防 + MINOR_ALARMHOST_KEYSWITCH_DISARM, //钥匙防区撤防 + MINOR_ALARMHOST_CLEAR_ALARM, //消警 + MINOR_ALARMHOST_MOD_FAULT_CFG, //修改系统故障配置 + MINOR_ALARMHOST_MOD_EVENT_TRIGGER_ALARMOUT_CFG, //修改事件触发报警输出配置 + MINOR_ALARMHOST_SEARCH_EXTERNAL_MODULE, //搜索外接模块 + MINOR_ALARMHOST_REGISTER_EXTERNAL_MODULE, //重新注册外接模块 + MINOR_ALARMHOST_CLOSE_KEYBOARD_ALARM, //关闭键盘报警提示音 + MINOR_ALARMHOST_MOD_3G_PARAM, //修改3G参数 + MINOR_ALARMHOST_MOD_PRINT_PARAM, //修改打印机参数 + MINOR_SD_CARD_FORMAT, //SD卡格式化 + MINOR_SUBSYSTEM_UPGRADE, //子板固件升级 + + MINOR_ALARMHOST_PLAN_ARM_CFG, //计划布撤防参数配置 + MINOR_ALARMHOST_PHONE_ARM, //手机布防 + MINOR_ALARMHOST_PHONE_STAY_ARM, //手机留守布防 + MINOR_ALARMHOST_PHONE_QUICK_ARM,//手机即时布防 + MINOR_ALARMHOST_PHONE_DISARM, //手机撤防 + MINOR_ALARMHOST_PHONE_CLEAR_ALARM, //手机消警 + MINOR_ALARMHOST_ALLOWLIST_CFG, //允许名单配置 + MINOR_ALARMHOST_TIME_TRIGGER_CFG, //定时开关触发器配置 + MINOR_ALARMHOST_CAPTRUE_CFG, //抓图参数配置 + MINOR_ALARMHOST_TAMPER_CFG, //防区防拆参数配置 + + MINOR_ALARMHOST_REMOTE_KEYPAD_UPGRADE, //远程升级键盘 + MINOR_ALARMHOST_ONETOUCH_AWAY_ARMING, //一键外出布防 + MINOR_ALARMHOST_ONETOUCH_STAY_ARMING, //一键留守布防 + MINOR_ALARMHOST_SINGLE_PARTITION_ARMING_OR_DISARMING, //单防区布撤防 + MINOR_ALARMHOST_CARD_CONFIGURATION, //卡参数配置 + MINOR_ALARMHOST_CARD_ARMING_OR_DISARMING, //刷卡布撤防 + MINOR_ALARMHOST_EXPENDING_NETCENTER_CONFIGURATION, //扩展网络中心配置 + MINOR_ALARMHOST_NETCARD_CONFIGURATION, //网卡配置 + MINOR_ALARMHOST_DDNS_CONFIGURATION, //DDNS配置 + MINOR_ALARMHOST_RS485BUS_CONFIGURATION, // 485总线参数配置 + MINOR_ALARMHOST_RS485BUS_RE_REGISTRATION, //485总线重新注册 + + MINOR_ALARMHOST_REMOTE_OPEN_ELECTRIC_LOCK, //远程打开电锁 + MINOR_ALARMHOST_REMOTE_CLOSE_ELECTRIC_LOCK, //远程关闭电锁 + MINOR_ALARMHOST_LOCAL_OPEN_ELECTRIC_LOCK, //本地打开电锁 + MINOR_ALARMHOST_LOCAL_CLOSE_ELECTRIC_LOCK, //本地关闭电锁 + MINOR_ALARMHOST_OPEN_ALARM_LAMP, //打开警灯(远程) + MINOR_ALARMHOST_CLOSE_ALARM_LAMP, //关闭警灯(远程) + + + MINOR_ALARMHOST_TEMPORARY_PASSWORD, //临时密码操作记录 + MINOR_ALARMHOST_ONEKEY_AWAY_ARM, //一键外出布防 + MINOR_ALARMHOST_ONEKEY_STAY_ARM, //一键留守布防 + MINOR_ALARMHOST_SINGLE_ZONE_ARM, //单防区布防 + MINOR_ALARMHOST_SINGLE_ZONE_DISARM, //单防区撤防 + MINOR_ALARMHOST_HIDDNS_CONFIG, // HIDDNS配置 + MINOR_ALARMHOST_REMOTE_KEYBOARD_UPDATA, //远程键盘升级日志 + MINOR_ALARMHOST_ZONE_ADD_DETECTOR, //防区添加探测器 + MINOR_ALARMHOST_ZONE_DELETE_DETECTOR, //防区删除探测器 + MINOR_ALARMHOST_QUERY_DETECTOR_SIGNAL, //主机查询探测器信号强度 + MINOR_ALARMHOST_QUERY_DETECTOR_BATTERY, //主机查询探测器电量 + MINOR_ALARMHOST_SET_DETECTOR_GUARD, //探测器布防 + MINOR_ALARMHOST_SET_DETECTOR_UNGUARD, //探测器撤防 + MINOR_ALARMHOST_SET_WIFI_PARAMETER, //设置WIFI配置参数 + MINOR_ALARMHOST_OPEN_VOICE, //打开语音 + MINOR_ALARMHOST_CLOSE_VOICE, //关闭语音 + MINOR_ALARMHOST_ENABLE_FUNCTION_KEY, //启用功能键 + MINOR_ALARMHOST_DISABLE_FUNCTION_KEY, //关闭功能键 + MINOR_ALARMHOST_READ_CARD, //巡更刷卡 + MINOR_ALARMHOST_START_BROADCAST, //打开语音广播 + MINOR_ALARMHOST_STOP_BROADCAST, //关闭语音广播 + MINOR_ALARMHOST_REMOTE_ZONE_MODULE_UPGRADE, //远程升级防区模块 + MINOR_ALARMHOST_NETWORK_MODULE_EXTEND, //网络模块参数配置 + MINOR_ALARMHOST_ADD_CONTROLLER, //添加遥控器用户 + MINOR_ALARMHOST_DELETE_CONTORLLER, //删除遥控器用户 + MINOR_ALARMHOST_REMOTE_NETWORKMODULE_UPGRADE, //远程升级网络模块 + MINOR_ALARMHOST_WIRELESS_OUTPUT_ADD, //注册无线输出模块 + MINOR_ALARMHOST_WIRELESS_OUTPUT_DEL, //删除无线输出模块 + MINOR_ALARMHOST_WIRELESS_REPEATER_ADD, //注册无线中继器 + MINOR_ALARMHOST_WIRELESS_REPEATER_DEL, //删除无线中继器 + MINOR_ALARMHOST_PHONELIST_CFG, //电话名单参数配置 + MINOR_ALARMHOST_RF_SIGNAL_CHECK, // RF信号查询 + MINOR_ALARMHOST_USB_UPGRADE, // USB升级 + MINOR_ALARMHOST_DOOR_TIME_REMINDER_CFG,//门磁定时提醒参数配置 + MINOR_ALARMHOST_WIRELESS_SIREN_ADD, //注册无线警号 + MINOR_ALARMHOST_WIRELESS_SIREN_DEL, //删除无线警号 + MINOR_ALARMHOST_OUT_SCALE_OPEN, //辅电开启 + MINOR_ALARMHOST_OUT_SCALE_CLOSE, //辅电关闭 + + MINOR_ALARMHOST_TIME_ZONE_CFG,//时区修改 + MINOR_ALARMHOST_NTP_START_AND_PARAMETERS_CFG,//NTP启动及参数修改 + MINOR_ALARMHOST_DST_START_AND_PARAMETERS_CFG,//DST启动及参数修改 + MINOR_ALARMHOST_DEVINFO_CFG,//设备信息配置 + MINOR_ALARMHOST_VIDEO_OVERLAP_CFG,//录像覆盖配置 + MINOR_ALARMHOST_SSH_CFG,//SSH启动配置 + MINOR_ALARMHOST_PASSWORD_MANAGE_CFG,//密码管理配置 + MINOR_ALARMHOST_RESTORE_DEFAULT_PARAMETERS,//恢复默认参数 + MINOR_ALARMHOST_RESTORECOMPLETELY_DEFAULT_PARAMETERS,//完全恢复默认参数 + MINOR_ALARMHOST_AUDIO_AUTO_DETECT_CFG,//自动检测参数配置 + MINOR_ALARMHOST_AUDIO_MANUAL_DETECT_CFG,//手动检测 + MINOR_ALARMHOST_NET_PARAMETERS_CFG,//网络参数配置 + MINOR_ALARMHOST_MTU_CFG,//MTU配置 + MINOR_ALARMHOST_PORT_CFG,//端口配置 + MINOR_ALARMHOST_DEFAULT_ROUTER_CFG,//默认路由配置 + MINOR_ALARMHOST_DNS_PARAMETERS_CFG,//DNS参数配置 + MINOR_ALARMHOST_UNPNP_PARAMETERS_CFG,//UNPNP参数配置 + MINOR_ALARMHOST_SIP_PARAMETERS_CFG,//SIP参数配置 + MINOR_ALARMHOST_FLOW_LIMIT_CFG,//流量限额参数配置 + MINOR_ALARMHOST_APN_PARAMETERS_CFG,//APN参数配置 + MINOR_ALARMHOST_MESSAGE_TELEPHONENO_CFG,//短信电话号码配置 + MINOR_ALARMHOST_EZVIZ_PARAMATERS_CFG,//萤石参数配置 + MINOR_ALARMHOST_ISUP_PARAMATERS_CFG,//ISUP参数配置 + MINOR_ALARMHOST_SIP_SWITCH_CFG,//SIP标准协议私有协议切换 + MINOR_ALARMHOST_INFO_UPLOAD_TO_PLATFORM_CFG,//上传平台信息配置 + MINOR_ALARMHOST_ONVIF_CONTROL,//ONVIF控制(开启,关闭) + MINOR_ALARMHOST_ONVIF_USER_ADD,//onvif用户的增加 + MINOR_ALARMHOST_ONVIF_USER_MOD,//onvif用户的修改 + MINOR_ALARMHOST_ONVIF_USER_DELETE,//onvif用户的删除 + MINOR_ALARMHOST_TIME_OF_BELLS_CFG,//响铃时间 + MINOR_ALARMHOST_CALL_WAITTIME_CFG,//呼叫等待时间 + MINOR_ALARMHOST_PROMPT_PARAMATERS_CFG,//提示音参数配置 + MINOR_ALARMHOST_MUTEPLAN_PARAMATERS_CFG,//静音计划参数配置 + MINOR_ALARMHOST_SD_PARTITION_CFG,//SD卡分区参数配置 + MINOR_ALARMHOST_AUDIO_PARAMETERS_CFG,//音视频参数配置 + MINOR_ALARMHOST_VOICETALK_AUDIO_ENCODING_CFG,//对讲音频编码 + MINOR_ALARMHOST_RECORD_PLAN_PARAMETERS_CFG,//录像计划参数配置 + MINOR_ALARMHOST_RECORD_ADVANCE_PARAMETERS_CFG,//录像高级参数配置 + MINOR_ALARMHOST_PICTURE_PLAN_PARAMETERS_CFG,//抓图计划参数配置 + MINOR_ALARMHOST_PICTURE_ADVANCE_PARAMETERS_CFG,//抓图高级参数配置 + MINOR_ALARMHOST_AUDIO_EXCEPTION_PARAMETERS_CFG,//音频异常参数配置 + MINOR_ALARMHOST_PATROL_CARD_CFG,//巡更卡配置 + MINOR_ALARMHOST_VOICE_VOLUME_CFG,//声音配置 + MINOR_ALARMHOST_VOICE_MODE_CFG,//声音模式配置(输入,输出,广播模式) + MINOR_ALARMHOST_AUDIO_OR_MATERIALS_UPLOAD,//音频、素材文件上传 + MINOR_ALARMHOST_AUDIO_OR_MATERIALS_DELETE,//音频、素材文件删除 + MINOR_ALARMHOST_ALARM_LAMP_FLASH_TIME_CFG,//闪烁时间 + MINOR_ALARMHOST_ALARM_LAMP_FLASH_PLAN_CFG,//计划闪烁配置 + MINOR_ALARMHOST_FRONT_END_VIDEO_PARAMETERS_CFG,//前端视频参数配置 + MINOR_ALARMHOST_WDR_CFG,//宽动态配置 + MINOR_ALARMHOST_BPFRAME_CFG,//PN帧配置 + MINOR_ALARMHOST_PASSWORD_RESET_CFG,//密码重置配置 + MINOR_ALARMHOST_ACCOUNT_LOCK,//账户锁定 + MINOR_ALARMHOST_ACCOUNT_UNLOCK,//账户解锁 + MINOR_ALARMHOST_START_LIVEVIEW_REMOTELY,//远程开启预览 + MINOR_ALARMHOST_STOP_LIVEVIEW_REMOTELT,//远程关闭预览 + MINOR_ALARMHOST_TELEPHONE_CENTER_SETTINGS,//电话中心参数配置 + MINOR_ALARMHOST_NATIONAL_STANDARD_CFG,//国标配置 + MINOR_ALARMHOST_SUPPLEMENTLIGHT_CFG,//补光灯配置 + MINOR_ALARMHOST_FACESNAP_CFG,//人脸抓拍配置 + MINOR_ALARMHOST_PUBLISHMANAGE_CFG,//发布管理配置 + MINOR_ALARMHOST_KEYDIAL_CFG,//按键配置 + MINOR_ALARMHOST_VOICETALK_SILENT_CFG,//对讲静音配置 + MINOR_ALARMHOST_START_VIDEO_PROTECT,//启用视频保护 + MINOR_ALARMHOST_START_AUDIO_PROTECT,//启用监听保护 + MINOR_ALARMHOST_START_MANUAL_ANSWER,//启用手动接听 + MINOR_ALARMHOST_START_LOG_SERVER,//启用安全日志 + MINOR_ALARMHOST_ADD_CARD,//添加卡片 + MINOR_ALARMHOST_DELETE_CARD,//删除卡片 + MINOR_ALARMHOST_MOTION_DETECTION_CFG,//移动侦测配置 + MINOR_ALARMHOST_VIDEO_BLOCK_CFG,//视频遮挡配置 + MINOR_ALARMHOST_FACE_DETECTION_CFG,//人脸侦测配置 + MINOR_ALARMHOST_LOG_BACKUP,//日志备份 + + + MINOR_ALARMHOST_LOCAL_SET_DEVICE_ACTIVE = 0xf0, //本地激活设备 + MINOR_ALARMHOST_REMOTE_SET_DEVICE_ACTIVE = 0xf1, //远程激活设备 + MINOR_ALARMHOST_LOCAL_PARA_FACTORY_DEFAULT = 0xf2, //本地回复出厂设置 + MINOR_ALARMHOST_REMOTE_PARA_FACTORY_DEFAULT = 0xf3, //远程恢复出厂设置 + + MINOR_ADD_IPC = 0xf4, //IPC添加(报警接入IPC) + MINOR_MODIFY_IPC = 0xf5, //IPC修改 + MINOR_DELETE_IPC = 0xf6, //IPC删除 + MINOR_SYS_CHECK_START = 0xf7, //系统检测开始 + MINOR_SYS_CHECK_STOP = 0xf8, //系统检测中止 + MINOR_SYS_CHECK_FINISH = 0xf9, //系统检测结束 + MINOR_DEVICE_TAMPER_CFG = 0xfa, //设备防拆参数配置 + MINOR_ALARMHOST_INDICATORLIGHT_CFG = 0xfb, //指示灯配置 + MINOR_ALARMHOST_WIRELESSBUTTON_CFG = 0xfc, //无线按钮配置 + MINOR_ALARMHOST_IRCUTFILTER_CFG = 0xfd, //日夜切换配置 + MINOR_ALARMHOST_KEYWORD_AUDIO_RECOGNITION_CFG = 0xfe, //关键字语音识别配置 + MINOR_ALARMHOST_DEVICE_POWER_MODE_SWITCH_CFG = 0xff, //设备功耗模式切换 + + + // 事件 + MINOR_SCHOOLTIME_IRGI_B = 0x01, // B码校时 + MINOR_SCHOOLTIME_SDK, // SDK校时 + MINOR_SCHOOLTIME_SELFTEST, // 定时自检校时 + MINOR_SUBSYSTEM_ABNORMALINSERT, //子板插入 + MINOR_SUBSYSTEM_ABNORMALPULLOUT, //子板拔出 + + MINOR_AUTO_ARM, //自动布防 + MINOR_AUTO_DISARM, //自动撤防 + MINOR_TIME_TIGGER_ON, //定时开启触发器 + MINOR_TIME_TIGGER_OFF, //定时关闭触发器 + MINOR_AUTO_ARM_FAILD, //自动布防失败 + MINOR_AUTO_DISARM_FAILD, //自动撤防失败 + MINOR_TIME_TIGGER_ON_FAILD, //定时开启触发器失败 + MINOR_TIME_TIGGER_OFF_FAILD, //定时关闭触发器失败 + MINOR_MANDATORY_ALARM, //强制布防 + MINOR_KEYPAD_LOCKED, //键盘锁定 + MINOR_USB_INSERT, //USB插入 + MINOR_USB_PULLOUT, //USB拔出 + MINOR_KEYPAD_UNLOCK, //键盘解锁 +}ALARMHOST_MINOR_TYPE; + + +//当日志的主类型为MAJOR_OPERATION=03,次类型为MINOR_LOCAL_CFG_PARM=0x52或者MINOR_REMOTE_GET_PARM=0x76 +//或者MINOR_REMOTE_CFG_PARM=0x77时,dwParaType:参数类型有效,其含义如下: +#define PARA_VIDEOOUT 0x1 +#define PARA_IMAGE 0x2 +#define PARA_ENCODE 0x4 +#define PARA_NETWORK 0x8 +#define PARA_ALARM 0x10 +#define PARA_EXCEPTION 0x20 +#define PARA_DECODER 0x40 /*解码器*/ +#define PARA_RS232 0x80 +#define PARA_PREVIEW 0x100 +#define PARA_SECURITY 0x200 +#define PARA_DATETIME 0x400 +#define PARA_FRAMETYPE 0x800 /*帧格式*/ +#define PARA_DETECTION 0x1000 //侦测配置 +#define PARA_VCA_RULE 0x1001 //行为规则 +#define PARA_VCA_CTRL 0x1002 //配置智能控制信息 +#define PARA_VCA_PLATE 0x1003 // 车牌识别 + +#define PARA_CODESPLITTER 0x2000 /*码分器参数*/ +//2010-01-22 增加视频综合平台日志信息次类型 +#define PARA_RS485 0x2001 /* RS485配置信息*/ +#define PARA_DEVICE 0x2002 /* 设备配置信息*/ +#define PARA_HARDDISK 0x2003 /* 硬盘配置信息 */ +#define PARA_AUTOBOOT 0x2004 /* 自动重启配置信息*/ +#define PARA_HOLIDAY 0x2005 /* 节假日配置信息*/ +#define PARA_IPC 0x2006 /* IP通道配置 */ +/*************************参数配置命令 end*******************************/ + + +/*******************查找文件和日志函数返回值*************************/ +#define NET_DVR_FILE_SUCCESS 1000 //获得文件信息 +#define NET_DVR_FILE_NOFIND 1001 //没有文件 +#define NET_DVR_ISFINDING 1002 //正在查找文件 +#define NET_DVR_NOMOREFILE 1003 //查找文件时没有更多的文件 +#define NET_DVR_FILE_EXCEPTION 1004 //查找文件时异常 +#define NET_DVR_FIND_TIMEOUT 1005 //查找文件超时 + +/*********************回调函数类型 begin************************/ + +//报警回调命令 +#define COMM_ALARM 0x1100 //8000报警信息主动上传 + +//对应NET_VCA_RULE_ALARM +#define COMM_ALARM_RULE 0x1102 //异常行为检测报警信息 +#define COMM_ALARM_PDC 0x1103 //人数统计报警信息 +#define COMM_ALARM_VIDEOPLATFORM 0x1104 //视频综合平台报警 +#define COMM_ALARM_ALARMHOST 0x1105 //网络报警主机报警 +#define COMM_ALARM_FACE 0x1106 //人脸检测识别报警信息 +#define COMM_RULE_INFO_UPLOAD 0x1107 // 事件数据信息上传 +#define COMM_ALARM_AID 0x1110 //交通事件报警信息 +#define COMM_ALARM_TPS 0x1111 //交通参数统计报警信息 +//智能人脸抓拍结果上传 +#define COMM_UPLOAD_FACESNAP_RESULT 0x1112 //人脸识别结果上传 +#define COMM_ALARM_TFS 0x1113 //交通取证报警信息 +#define COMM_ALARM_TPS_V41 0x1114 //交通参数统计报警信息扩展 +#define COMM_ALARM_AID_V41 0x1115 //交通事件报警信息扩展 +#define COMM_ALARM_VQD_EX 0x1116 //视频质量诊断报警 +#define COMM_ALARM_NOTIFICATION_REPORT 0x1117 //通知事件上报 +#define COMM_SENSOR_VALUE_UPLOAD 0x1120 //模拟量数据实时上传 +#define COMM_SENSOR_ALARM 0x1121 //模拟量报警上传 +#define COMM_SWITCH_ALARM 0x1122 //开关量报警 +#define COMM_ALARMHOST_EXCEPTION 0x1123 //报警主机故障报警 +#define COMM_ALARMHOST_OPERATEEVENT_ALARM 0x1124 //操作事件报警上传 +#define COMM_ALARMHOST_SAFETYCABINSTATE 0x1125 //防护舱状态 +#define COMM_ALARMHOST_ALARMOUTSTATUS 0x1126 //报警输出口/警号状态 +#define COMM_ALARMHOST_CID_ALARM 0x1127 //报告报警上传 +#define COMM_ALARMHOST_EXTERNAL_DEVICE_ALARM 0x1128 //报警主机外接设备报警上传 +#define COMM_ALARMHOST_DATA_UPLOAD 0x1129 //报警数据上传 +#define COMM_FACECAPTURE_STATISTICS_RESULT 0x112a //人脸抓拍统计上传 +#define COMM_ALARM_WIRELESS_INFO 0x122b // 无线网络信息上传 +#define COMM_SCENECHANGE_DETECTION_UPLOAD 0x1130 //场景变更报警上传(布防)2013-7-16 +#define COMM_CROSSLINE_ALARM 0x1131 //压线报警(监听) 2013-09-27 +#define COMM_UPLOAD_VIDEO_INTERCOM_EVENT 0x1132 //可视对讲事件记录上传 +#define COMM_ALARM_VIDEO_INTERCOM 0x1133 //可视对讲报警上传 +#define COMM_UPLOAD_NOTICE_DATA 0x1134 //可视对讲公告信息上传 +#define COMM_ALARM_AUDIOEXCEPTION 0x1150 //声音报警信息 +#define COMM_ALARM_DEFOCUS 0x1151 //虚焦报警信息 +#define COMM_ALARM_BUTTON_DOWN_EXCEPTION 0x1152 //按钮按下报警信息 +#define COMM_ALARM_ALARMGPS 0x1202 //GPS报警信息上传 +#define COMM_TRADEINFO 0x1500 //ATMDVR主动上传交易信息 +#define COMM_UPLOAD_PLATE_RESULT 0x2800 //上传车牌信息 +#define COMM_ITC_STATUS_DETECT_RESULT 0x2810 //实时状态检测结果上传(智能高清IPC) +#define COMM_IPC_AUXALARM_RESULT 0x2820 //PIR报警、无线报警、呼救报警上传 +#define COMM_UPLOAD_PICTUREINFO 0x2900 //上传图片信息 +#define COMM_SNAP_MATCH_ALARM 0x2902 //禁止名单比对结果上传 +#define COMM_ITS_PLATE_RESULT 0x3050 //终端图片上传 +#define COMM_ITS_TRAFFIC_COLLECT 0x3051 //终端统计数据上传 +#define COMM_ITS_GATE_VEHICLE 0x3052 //出入口车辆抓拍数据上传 +#define COMM_ITS_GATE_FACE 0x3053 //出入口人脸抓拍数据上传 +#define COMM_ITS_GATE_COSTITEM 0x3054 //出入口过车收费明细 2013-11-19 +#define COMM_ITS_GATE_HANDOVER 0x3055 //出入口交接班数据 2013-11-19 +#define COMM_ITS_PARK_VEHICLE 0x3056 //停车场数据上传 +#define COMM_ITS_BLOCKLIST_ALARM 0x3057 //禁止名单报警上传 + +#define COMM_VEHICLE_CONTROL_LIST_DSALARM 0x3058 //名单数据需要同步报警2013-11-04 +#define COMM_VEHICLE_CONTROL_ALARM 0x3059 //车辆报警2013-11-04 +#define COMM_FIRE_ALARM 0x3060 //消防报警2013-11-04 + +#define COMM_ITS_GATE_ALARMINFO 0x3061 //出入口控制机数据上传 + +#define COMM_VEHICLE_RECOG_RESULT 0x3062 //车辆二次识别结果上传 2014-11-12 +#define COMM_PLATE_RESULT_V50 0x3063 //车牌上传 V50 + +#define COMM_GATE_CHARGEINFO_UPLOAD 0x3064 //出入口付费信息上传 +#define COMM_TME_VEHICLE_INDENTIFICATION 0x3065 //TME车辆抓图上传 +#define COMM_GATE_CARDINFO_UPLOAD 0x3066 //出入口卡片信息上传 +#define COMM_LOADING_DOCK_OPERATEINFO 0x3067 //月台作业上传 + +#define COMM_ALARM_SENSORINFO_UPLOAD 0x3077 //传感器上传信息 +#define COMM_ALARM_CAPTURE_UPLOAD 0x3078 //抓拍图片上传 + +#define COMM_ITS_RADARINFO 0x3079 //雷达报警上传 + +#define COMM_SIGNAL_LAMP_ABNORMAL 0x3080 //信号灯异常检测上传 + +#define COMM_ALARM_TPS_REAL_TIME 0x3081 //TPS实时过车数据上传 +#define COMM_ALARM_TPS_STATISTICS 0x3082 //TPS统计过车数据上传 + +#define COMM_ALARM_V30 0x4000 //9000报警信息主动上传 +#define COMM_IPCCFG 0x4001 //9000设备IPC接入配置改变报警信息主动上传 +#define COMM_IPCCFG_V31 0x4002 //9000设备IPC接入配置改变报警信息主动上传扩展 9000_1.1 +#define COMM_IPCCFG_V40 0x4003 // IVMS 2000 编码服务器 NVR IPC接入配置改变时报警信息上传 +#define COMM_ALARM_DEVICE 0x4004 //设备报警内容,由于通道值大于256而扩展 +#define COMM_ALARM_CVR 0x4005 //CVR 2.0.X外部报警类型 +#define COMM_ALARM_HOT_SPARE 0x4006 //热备异常报警(N+1模式异常报警) +#define COMM_ALARM_V40 0x4007 //移动侦测,视频丢失,遮挡,IO信号量等报警信息主动上传,报警数据为可变长 + +#define COMM_UPLOAD_HEATMAP_RESULT 0x4008 //热度图报警上传 2014-03-21 +#define COMM_ALARM_DEVICE_V40 0x4009 //设备报警内容扩展 +#define COMM_ALARM_FACE_DETECTION 0x4010 //人脸侦测报警 +#define COMM_ALARM_TARGET_LEFT_REGION 0x4011 //检测目标离开检测区域报警(教师走向学生报警(用于联动切换录播主机控制检测学生的球机)) +#define COMM_GISINFO_UPLOAD 0x4012 //GIS信息上传 +#define COMM_VANDALPROOF_ALARM 0x4013 //上传防破坏报警信息 +#define COMM_PEOPLE_DETECTION_UPLOAD 0x4014 //人员侦测信息上传 +#define COMM_ALARM_STORAGE_DETECTION 0x4015 //存储智能检测报警上传 +#define COMM_MVM_REGISTER 0x4016 //地磁管理器(Magnetic Vehicle Manager)注册 +#define COMM_MVM_STATUS_INFO 0x4017 //地磁管理器(Magnetic Vehicle Manager)状态上报 +#define COMM_UPLOAD_HEATMAP_RESULT_PDC 0x4018 //热度图按人数统计数据上传事件 +#define COMM_UPLOAD_HEATMAP_RESULT_DURATION 0x4019 //热度图按人员停留时间统计数据上传事件 +#define COMM_UPLOAD_HEATMAP_RESULT_INTERSECTION 0x4020 //路口分析热度值结果上传 +#define COMM_UPLOAD_AIOP_VIDEO 0x4021 //设备支持AI开放平台接入,上传视频检测数据 +#define COMM_UPLOAD_AIOP_PICTURE 0x4022 //设备支持AI开放平台接入,上传图片检测数据 +#define COMM_UPLOAD_AIOP_POLLING_SNAP 0x4023 //设备支持AI开放平台接入,上传轮巡抓图图片检测数据 对应的结构体(NET_AIOP_POLLING_PICTURE_HEAD) +#define COMM_UPLOAD_AIOP_POLLING_VIDEO 0x4024 //设备支持AI开放平台接入,上传轮巡视频检测数据 对应的结构体(NET_AIOP_POLLING_VIDEO_HEAD) +#define COMM_UPLOAD_AIOP_HISTORY_VIDEO 0x4025 //设备支持AI开放平台接入,上传历史视频任务检测数据 对应的结构体(NET_AIOP_HISTORY_VIDEO_HEAD) + + +#define COMM_ITS_ROAD_EXCEPTION 0x4500 //路口设备异常报警 +#define COMM_ITS_EXTERNAL_CONTROL_ALARM 0x4520 //外控报警 +#define COMM_ALARM_SHIPSDETECTION 0x4521 // 船只检测报警信息 + +#define COMM_VCA_DBD_ALARM 0x4550 //驾驶行为报警信息 +#define COMM_VCA_ADAS_ALARM 0x4551 //高级辅助驾驶报警信息 +#define COMM_VEH_REALTIME_INFO 0x4552 //行车实时数据信息 +#define COMM_VCA_ATTEND_ALARM 0x4553 //考勤事件报警信息 + +#define COMM_FIREDETECTION_ALARM 0x4991 //火点检测报警 +#define COMM_ALARM_DENSEFOGDETECTION 0x4992 //大雾检测报警信息 +#define COMM_VCA_ALARM 0x4993 //智能检测报警 +#define COMM_FACE_THERMOMETRY_ALARM 0x4994 //人脸测温报警 + +#define COMM_TAPE_ARCHIVE_ALARM 0x4996 //磁带库归档报警 + +#define COMM_SCREEN_ALARM 0x5000 //多屏控制器报警类型 +#define COMM_DVCS_STATE_ALARM 0x5001 //分布式大屏控制器报警上传 +#define COMM_ALARM_ACS 0x5002 //门禁主机报警 +#define COMM_ALARM_FIBER_CONVERT 0x5003 //光纤收发器报警 +#define COMM_ALARM_SWITCH_CONVERT 0x5004 //交换机报警 +#define COMM_ALARM_DEC_VCA 0x5010 //智能解码报警 +#define COMM_ALARM_LCD 0x5011 //屏幕报警 +#define COMM_CONFERENCE_CALL_ALARM 0x5012 //会议呼叫告警 + +#define COMM_ALARM_WALL_CONFERNECE 0x5015 //MCU单个已开会的会议信息报警 + +#define COMM_DIAGNOSIS_UPLOAD 0x5100 //诊断服务器VQD报警上传 +#define COMM_HIGH_DENSITY_UPLOAD 0x5101 //人员聚集密度输出报警上传 + +#define COMM_ID_INFO_ALARM 0x5200 //身份证信息上传 +#define COMM_PASSNUM_INFO_ALARM 0x5201 //通行人数上报 +#define COMM_PASSPORT_ALARM 0x5202 //护照信息上传 + +#define COMM_THERMOMETRY_DIFF_ALARM 0x5211 //温差报警上传 +#define COMM_THERMOMETRY_ALARM 0x5212 //温度报警上传 +#define COMM_PANORAMIC_LINKAGE_ALARM 0x5213 //全景联动到位上传 +#define COMM_TAG_INFO_ALARM 0x5215 // 标签信息上传 +#define COMM_ALARM_VQD 0x6000 //VQD主动报警上传 +#define COMM_PUSH_UPDATE_RECORD_INFO 0x6001 //推模式录像信息上传 +#define COMM_SWITCH_LAMP_ALARM 0x6002 //开关灯检测 +#define COMM_INQUEST_ALARM 0x6005 // 审讯主机报警上传 +#define COMM_VIDEO_PARKING_POLE_ALARM 0x6006 //视频桩报警 +#define COMM_GPS_STATUS_ALARM 0x6010 // GPS状态上传 +#define COMM_BASE_STATION_INFO_ALARM 0x6011 //基站信息上传 +#define COMM_ALARM_SUBSCRIBE_EVENT 0x6012 //订阅结果上报 + +#define COMM_FACESNAP_RAWDATA_ALARM 0x6015 //人脸比对报警(数据透传方式) +#define COMM_CLUSTER_ALARM 0x6020 //集群报警上传 + +#define COMM_ISAPI_ALARM 0x6009 + +//PJ01C20170209084超脑录播NVS软件功能开发定制项目专用 +#define COMM_FRAMES_PEOPLE_COUNTING_ALARM 0x6069 //单帧画面人数统计结果上传 + +#define COMM_SIGN_ABNORMAL_ALARM 0x6120 //体征异常报警 +#define COMM_HFPD_ALARM 0x6121 //高频人员检测报警 + +#define COMM_HCU_ALARM 0x6150 //车载智能盒子报警(本报警SDK库不实现,用作设备和DVR通信协议,占位防止冲突) + +#define COMM_DEV_STATUS_CHANGED 0x7000 //设备状态改变报警上传 + +#define COMM_ALARM_EXCEPTION 0x7fff //报警异常类型 + +/*************操作异常类型(消息方式, 回调方式(保留))****************/ +#define EXCEPTION_EXCHANGE 0x8000 //用户交互时异常 +#define EXCEPTION_AUDIOEXCHANGE 0x8001 //语音对讲异常 +#define EXCEPTION_ALARM 0x8002 //报警异常 +#define EXCEPTION_PREVIEW 0x8003 //网络预览异常 +#define EXCEPTION_SERIAL 0x8004 //透明通道异常 +#define EXCEPTION_RECONNECT 0x8005 //预览时重连 +#define EXCEPTION_ALARMRECONNECT 0x8006 //报警时重连 +#define EXCEPTION_SERIALRECONNECT 0x8007 //透明通道重连 +#define SERIAL_RECONNECTSUCCESS 0x8008 //透明通道重连成功 +#define EXCEPTION_PLAYBACK 0x8010 //回放异常 +#define EXCEPTION_DISKFMT 0x8011 //硬盘格式化 +#define EXCEPTION_PASSIVEDECODE 0x8012 //被动解码异常 +#define EXCEPTION_EMAILTEST 0x8013 //邮件测试异常 +#define EXCEPTION_BACKUP 0x8014 //备份异常 +#define PREVIEW_RECONNECTSUCCESS 0x8015 //预览时重连成功 +#define ALARM_RECONNECTSUCCESS 0x8016 //报警时重连成功 +#define RESUME_EXCHANGE 0x8017 //用户交互恢复 +#define NETWORK_FLOWTEST_EXCEPTION 0x8018 //网络流量检测异常 +#define EXCEPTION_PICPREVIEWRECONNECT 0x8019 //图片预览重连 +#define PICPREVIEW_RECONNECTSUCCESS 0x8020 //图片预览重连成功 +#define EXCEPTION_PICPREVIEW 0x8021 //图片预览异常 +#define EXCEPTION_MAX_ALARM_INFO 0x8022 //报警信息缓存已达上限 +#define EXCEPTION_LOST_ALARM 0x8023 //报警丢失 +#define EXCEPTION_PASSIVETRANSRECONNECT 0x8024 //被动转码重连 +#define PASSIVETRANS_RECONNECTSUCCESS 0x8025 //被动转码重连成功 +#define EXCEPTION_PASSIVETRANS 0x8026 //被动转码异常 +#define SUCCESS_PUSHDEVLOGON 0x8030 //推模式设备注册成功 +#define EXCEPTION_RELOGIN 0x8040 //用户重登陆 +#define RELOGIN_SUCCESS 0x8041 //用户重登陆成功 +#define EXCEPTION_PASSIVEDECODE_RECONNNECT 0x8042 //被动解码重连 +#define EXCEPTION_CLUSTER_CS_ARMFAILED 0x8043 //集群报警异常 + +#define EXCEPTION_RELOGIN_FAILED 0x8044 //重登陆失败,停止重登陆 +#define EXCEPTION_PREVIEW_RECONNECT_CLOSED 0x8045 //关闭预览重连功能 +#define EXCEPTION_ALARM_RECONNECT_CLOSED 0x8046 //关闭报警重连功能 +#define EXCEPTION_SERIAL_RECONNECT_CLOSED 0x8047 //关闭透明通道重连功能 +#define EXCEPTION_PIC_RECONNECT_CLOSED 0x8048 //关闭回显重连功能 +#define EXCEPTION_PASSIVE_DECODE_RECONNECT_CLOSED 0x8049 //关闭被动解码重连功能 +#define EXCEPTION_PASSIVE_TRANS_RECONNECT_CLOSED 0x804a //关闭被动转码重连功能 +#define EXCEPTION_VIDEO_DOWNLOAD 0x804b // [add] by yangzheng 2019/11/09 录像下载异常 + +/********************预览回调函数*********************/ +#define NET_DVR_SYSHEAD 1 //系统头数据 +#define NET_DVR_STREAMDATA 2 //视频流数据(包括复合流和音视频分开的视频流数据) +#define NET_DVR_AUDIOSTREAMDATA 3 //音频流数据 +#define NET_DVR_STD_VIDEODATA 4 //标准视频流数据 +#define NET_DVR_STD_AUDIODATA 5 //标准音频流数据 +#define NET_DVR_SDP 6 //SDP信息(Rstp传输时有效) +#define NET_DVR_CHANGE_FORWARD 10 //码流改变为正放 +#define NET_DVR_CHANGE_REVERSE 11 //码流改变为倒放 +#define NET_DVR_PLAYBACK_ALLFILEEND 12 //回放文件结束标记 +#define NET_DVR_VOD_DRAW_FRAME 13 //回放抽帧码流 +#define NET_DVR_VOD_DRAW_DATA 14 //拖动平滑码流 +#define NET_DVR_HLS_INDEX_DATA 15 //HLS索引数据 +#define NET_DVR_PLAYBACK_NEW_POS 16 //回放重置(按时间定位命令NET_DVR_PLAYSETTIME和NET_DVR_PLAYSETTIME_V50接口返回成功后,还需要等待收到该回调类型后才可认为操作成功) +#define NET_DVR_METADATA_DATA 107 //Metadata数据 +#define NET_DVR_PRIVATE_DATA 112 //私有数据,包括智能信息 + +//设备型号(DVR类型) +/* 设备类型 */ +#define DVR 1 /*对尚未定义的dvr类型返回DVR*/ +#define ATMDVR 2 /*atm dvr*/ +#define DVS 3 /*DVS*/ +#define DEC 4 /* 6001D */ +#define ENC_DEC 5 /* 6001F */ +#define DVR_HC 6 /*8000HC*/ +#define DVR_HT 7 /*8000HT*/ +#define DVR_HF 8 /*8000HF*/ +#define DVR_HS 9 /* 8000HS DVR(no audio) */ +#define DVR_HTS 10 /* 8016HTS DVR(no audio) */ +#define DVR_HB 11 /* HB DVR(SATA HD) */ +#define DVR_HCS 12 /* 8000HCS DVR */ +#define DVS_A 13 /* 带ATA硬盘的DVS */ +#define DVR_HC_S 14 /* 8000HC-S */ +#define DVR_HT_S 15 /* 8000HT-S */ +#define DVR_HF_S 16 /* 8000HF-S */ +#define DVR_HS_S 17 /* 8000HS-S */ +#define ATMDVR_S 18 /* ATM-S */ +#define DVR_7000H 19 /*7000H系列*/ +#define DEC_MAT 20 /*多路解码器*/ +#define DVR_MOBILE 21 /* mobile DVR */ +#define DVR_HD_S 22 /* 8000HD-S */ +#define DVR_HD_SL 23 /* 8000HD-SL */ +#define DVR_HC_SL 24 /* 8000HC-SL */ +#define DVR_HS_ST 25 /* 8000HS_ST */ +#define DVS_HW 26 /* 6000HW */ +#define DS630X_D 27 /* 多路解码器 */ +#define DS640X_HD 28 /*640X高清解码器*/ +#define DS610X_D 29 /*610X解码器*/ +#define IPCAM 30 /*IP 摄像机*/ +#define MEGA_IPCAM 31 /*高清IP摄像机*/ +#define IPCAM_X62MF 32 /*862MF可以接入9000设备*/ +#define ITCCAM 35 /*智能高清网络摄像机*/ +#define IVS_IPCAM 36 /*智能分析高清网络摄像机*/ +#define ZOOMCAM 38 /*一体机*/ +#define IPDOME 40 /*IP 标清球机*/ +#define IPDOME_MEGA200 41 /*IP 200万高清球机*/ +#define IPDOME_MEGA130 42 /*IP 130万高清球机*/ +#define IPDOME_AI 43 /*IP 高清智能快球*/ +#define TII_IPCAM 44 /*红外热成像摄像机*/ +#define IPTC_DOME 45 /*红外热成像双目球机*/ +#define DS_2DP_Z 46 /*球型鹰眼(大)*/ +#define DS_2DP 47 /*非球型鹰眼(小)*/ +#define ITS_WMS 48 /*称重数据管理服务器*/ +#define IPMOD 50 /*IP 模块*/ +#define TRAFFIC_YTDOME 51 //交通智能云台(不带雷达测速) +#define TRAFFIC_RDDOME 52 //交通智能云台(带雷达测速) +#define IDS6501_HF_P 60 // 6501 车牌 +#define IDS6101_HF_A 61 //智能ATM +#define IDS6002_HF_B 62 //双机:DS6002-HF/B +#define IDS6101_HF_B 63 //异常行为检测:DS6101-HF/B DS6101-HF/B_SATA +#define IDS52XX 64 //智能分析仪IVMS +#define IDS90XX 65 // 9000智能 +#define IDS8104_AHL_S_HX 66 // 海鑫人脸识别 ATM +#define IDS8104_AHL_S_H 67 // 私有人脸识别 ATM +#define IDS91XX 68 // 9100智能 +#define IIP_CAM_B 69 // 智能行为IP摄像机 +#define IIP_CAM_F 70 //智能人脸IP摄像机 +#define DS71XX_H 71 /* DS71XXH_S */ +#define DS72XX_H_S 72 /* DS72XXH_S */ +#define DS73XX_H_S 73 /* DS73XXH_S */ +#define DS72XX_HF_S 74 //DS72XX_HF_S +#define DS73XX_HFI_S 75 //DS73XX_HFI_S +#define DS76XX_H_S 76 /* DVR,e.g. DS7604_HI_S */ +#define DS76XX_N_S 77 /* NVR,e.g. DS7604_NI_S */ +#define DS_TP3200_EC 78 /*机柜智能检测仪*/ +#define DS81XX_HS_S 81 /* DS81XX_HS_S */ +#define DS81XX_HL_S 82 /* DS81XX_HL_S */ +#define DS81XX_HC_S 83 /* DS81XX_HC_S */ +#define DS81XX_HD_S 84 /* DS81XX_HD_S */ +#define DS81XX_HE_S 85 /* DS81XX_HE_S */ +#define DS81XX_HF_S 86 /* DS81XX_HF_S */ +#define DS81XX_AH_S 87 /* DS81XX_AH_S */ +#define DS81XX_AHF_S 88 /* DS81XX_AHF_S */ +#define DS90XX_HF_S 90 /*DS90XX_HF_S*/ +#define DS91XX_HF_S 91 /*DS91XX_HF_S*/ +#define DS91XX_HD_S 92 /*91XXHD-S(MD)*/ +#define IDS90XX_A 93 // 9000智能 ATM +#define IDS91XX_A 94 // 9100智能 ATM +#define DS95XX_N_S 95 /*DS95XX_N_S NVR 不带任何输出*/ +#define DS96XX_N_SH 96 /*DS96XX_N_SH NVR*/ +#define DS90XX_HF_SH 97 /*DS90XX_HF_SH */ +#define DS91XX_HF_SH 98 /*DS91XX_HF_SH */ +#define DS_B10_XY 100 /*视频综合平台设备型号(X:编码板片数,Y:解码板片数)*/ +#define DS_6504HF_B10 101 /*视频综合平台内部编码器*/ +#define DS_6504D_B10 102 /*视频综合平台内部解码器*/ +#define DS_1832_B10 103 /*视频综合平台内部码分器*/ +#define DS_6401HFH_B10 104 /*视频综合平台内部光纤板*/ +#define DS_65XXHC 105 //65XXHC DVS +#define DS_65XXHC_S 106 //65XXHC-SATA DVS +#define DS_65XXHF 107 //65XXHF DVS +#define DS_65XXHF_S 108 //65XXHF-SATA DVS +#define DS_6500HF_B 109 //65 rack DVS +#define IVMS_6200_C 110 // iVMS-6200(/C) +#define IVMS_6200_B 111 // iVMS-6200(/B) +#define DS_72XXHV_ST15 112 //72XXHV_ST 海思3515平台 DVR +#define DS_72XXHV_ST20 113 //72XXHV_ST 海思3520平台 DVR +#define IVMS_6200_T 114 // IVMS-6200(/T) +#define IVMS_6200_BP 115 // IVMS-6200(/BP) +#define DS_81XXHC_ST 116 //DS_81XXHC_ST +#define DS_81XXHS_ST 117 //DS_81XXHS_ST +#define DS_81XXAH_ST 118 //DS_81XXAH_ST +#define DS_81XXAHF_ST 119 //DS_81XXAHF_ST +#define DS_66XXDVS 120 //66XX DVS + +#define DS_1964_B10 121 /*视频综合平台内部报警器*/ +#define DS_B10N04_IN 122 /*视频综合平台内部级联输入*/ +#define DS_B10N04_OUT 123 /*视频综合平台内部级联输出*/ +#define DS_B10N04_INTEL 124 /*视频综合平台内部智能*/ +#define DS_6408HFH_B10E_RM 125 //V6高清 +#define DS_B10N64F1_RTM 126 //V6级联不带DSP +#define DS_B10N64F1D_RTM 127 //V6级联带DSP +#define DS_B10_SDS 128 //视频综合平台子域控制器 +#define DS_B10_DS 129 //视频综合平台域控制器 +#define DS_6401HFH_B10V 130 //VGA高清编码器 +#define DS_6504D_B10B 131 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B10H 132 /*视频综合平台内部高清解码器*/ +#define DS_6504D_B10V 133 /*视频综合平台内部VGA解码器*/ +#define DS_6408HFH_B10S 134 //视频综合平台SDI子板 +#define DS_18XX_N 135 /* 矩阵接入网关*/ +#define DS_6504HF_B10F_CLASS 136 //光端机SD +#define DS_18XX_PTZ 141 /*网络码分类产品*/ +#define DS_19AXX 142 /*通用报警主机类产品*/ +#define DS_19BXX 143 /*家用报警主机*/ +#define DS_19CXX 144 /*自助银行报警主机*/ +#define DS_19DXX 145 /*动环布防报警主机*/ +#define DS_19XX 146 /*1900系列报警主机*/ +#define DS_19SXX 147 /*视频报警主机*/ +#define DS_1HXX 148 /*CS类产品*/ //防护舱 +#define DS_PEAXX 149 /*一键式紧急报警产品*/ +#define DS_PWXX 150 /*无线报警主机产品*/ +#define DS_PMXX 151 /*4G网络模块*/ +#define DS_19DXX_S 152 /*视频动环布防主机*/ +#define DS_PWAXX 153 /* Axiom Hub无线报警主机 */ +#define DS_PHAXX 154 /* Axiom Hybrid混合报警主机 */ +#define DS_PHAProXX 155 /* Axiom Hybrid Pro混合报警主机*/ + + +//2011-11-30 +#define DS_C10H 161 /*多屏控制器*/ +#define DS_C10N_BI 162 //BNC处理器 +#define DS_C10N_DI 163 //rbg处理器 +#define DS_C10N_SI 164 //码流处理器 +#define DS_C10N_DO 165 //显示处理器 +#define DS_C10N_SERVER 166 //分布式服务器 + + +#define IDS_8104_AHFL_S_H 171 // 8104ATM +#define IDS_65XX_HF_A 172 // 65 ATM +#define IDS90XX_HF_RH 173 // 9000 智能RH +#define IDS91XX_HF_RH 174 // 9100 智能RH设备 +#define IDS_65XX_HF_B 175 // 65 异常行为检测 +#define IDS_65XX_HF_P 176 // 65 车牌识别 +#define IVMS_6200_F 177 // IVMS-6200(/F) +#define IVMS_6200_A 178 //iVMS-6200(/A) +#define IVMS_6200_F_S 179 // IVMS-6200(/F_S)人脸后检索分析仪 + +#define DS90XX_HF_RH 181 // 9000 RH 648 +#define DS91XX_HF_RH 182 // 9100 RH设备 648 +#define DS78XX_S 183 // 78系列设备 6446 +#define DS81XXHW_S 185 // 81 Resolution 960 KY2011 +#define DS81XXHW_ST 186 // DS81XXHW_ST KY2011 +#define DS91XXHW_ST 187 // DS91XXHW_ST KY2011 +#define DS91XX_ST 188 // DS91XX_ST netra +#define DS81XX_ST 189 // DS81XX_ST netra +#define DS81XXHX_ST 190 // DS81XXHDI_ST,DS81XXHE_ST ky2012 +#define DS73XXHX_ST 191 // DS73XXHI_ST ky2012 +#define DS81XX_SH 192 // 审讯81SH,81SHF +#define DS81XX_SN 193 // 审讯81SNL + +#define DS96XXN_ST 194 //NVR:DS96xxN_ST +#define DS86XXN_ST 195 //NVR:DS86xxN_ST +#define DS80XXHF_ST 196 //DVR:DS80xxHF_ST +#define DS90XXHF_ST 197 //DVR:DS90xxHF_ST +#define DS76XXN_ST 198 //NVR:DS76xxN_ST + +#define DS_9664N_RX 199 //NVR:DS_9664N_RX +#define ENCODER_SERVER 200 // 编码卡服务器 +#define DECODER_SERVER 201 // 解码卡服务器 +#define PCNVR_SERVER 202 // PCNVR存储服务器 +#define CVR_SERVER 203 // 邦诺CVR,他给自己定的类型为DVR_S-1 +#define DS_91XXHFH_ST 204 // 91系列HD-SDI高清DVR +#define DS_66XXHFH 205 // 66高清编码器 +#define TRAFFIC_TS_SERVER 210 //终端服务器 +#define TRAFFIC_VAR 211 //视频分析记录仪 +#define IPCALL 212 //IP可视对讲分机 +#define SAN_SERVER 213 //与CVR_SERVER相同的程序,只是模式不同 + +#define DS_B11_M_CLASS 301 /*视频综合平台设备型号*/ +#define DS_B12_M_CLASS 302 /*视频综合平台设备型号*/ +#define DS_6504HF_B11_CLASS 303 /*视频综合平台内部编码器*/ +#define DS_6504HF_B12_CLASS 304 /*视频综合平台内部编码器*/ +#define DS_6401HFH_B11V_CLASS 305 //VGA高清 +#define DS_6401HFH_B12V_CLASS 306 //VGA高清 +#define DS_6408HFH_B11S_CLASS 307 //SDI +#define DS_6408HFH_B12S_CLASS 308 //SDI +#define DS_6504D_B11H_CLASS 309 /*视频综合平台内部高清解码器*/ +#define DS_6504D_B11B_CLASS 310 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B12B_CLASS 311 /*视频综合平台内部标清解码器*/ +#define DS_6504D_B11V_CLASS 312 /*视频综合平台内部VGA解码器*/ +#define DS_6504D_B12V_CLASS 313 /*视频综合平台内部VGA解码器*/ +//B10新增 +#define DS_6401HFH_B10R_CLASS 314 //B10 RGB高清 +#define DS_6401HFH_B10D_CLASS 315 //B10 DVI高清 +#define DS_6401HFH_B10H_CLASS 316 //B10 HDMI高清 +//B11新增 +#define DS_6401HFH_B11R_CLASS 317 //B11 RGB高清 +#define DS_6401HFH_B11D_CLASS 318 //B11 DVI高清 +#define DS_6401HFH_B11H_CLASS 319 //B11 HDMI高清 +//B12新增 +#define DS_6401HFH_B12R_CLASS 320 //B12 RGB高清 +#define DS_6401HFH_B12D_CLASS 321 //B12 DVI高清 +#define DS_6401HFH_B12H_CLASS 322 //B12 HDMI高清 +#define DS_65XXD_B10Ex_CLASS 323 //netra高清解码 + +//B10 V2.1新增 +#define DS_6516HW_B10_CLASS 324 //netra高线编码 +#define DS_6401HFH_B10F_RX_CLASS 326 //高清光端机接入(支持1/2路光端机接入) +#define DS_6502HW_B10F_RX_CLASS 327 //960H光端机接入(支持1/4/8路光端机接入) +//2012-5-16新增 +#define DS_6504D_B11Ex_CLASS 328 //netra高清解码 +#define DS_6504D_B12Ex_CLASS 329 //netra高清解码 +#define DS_6512_B11_CLASS 330 //netra高线编码 +#define DS_6512_B12_CLASS 331 //netra高线编码 +#define DS_6504D_B10H_CLASS 332 //视频综合平台内部高清解码器 + +#define DS_65XXT_B10_CLASS 333 //视频综合平台转码子系统 +#define DS_65XXD_B10_CLASS 335 //视频综合平台解码板 +#define DS_IVMSE_B10X_CLASS 336 //X86服务器子系统 +#define DS_6532D_B10ES_CLASS 337 //增强型解码板_SDI(B10) +#define DS_6508HFH_B10ES_CLASS 338 //SDI输入编码子系统 +#define DS_82NCG_CLASS 340 //联网网关中的子系统 +#define DS_82VAG_CLASS 341 //联网网关中的子系统 +#define DS_1802XXF_B10_CLASS 342 //光口交换子系统 +#define iDS_6504_B10EVAC_CLASS 343 //智能子系统 +#define iDS_6504_B10EDEC_CLASS 344 //智能子系统 +#define DS_6402HFH_B10EV_CLASS 345 //netra编码(VGA) +#define DS_6402HFH_B10ED_CLASS 346 //netra编码(DVI) +#define DS_6402HFH_B10EH_CLASS 347 //netra编码(HDMI) +#define DS_6404HFH_B10T_RX_CLASS 348 //光纤接入编码 +#define DS_6504D_AIO_CLASS 349 //netra高清解码 +#define DS_IVMST_B10_CLASS 350 //X86转码子系统 +#define DS_6402_AIO_CLASS 351 //netra编码 +#define DS_iVMSE_AIO_CLASS 352 //x86服务器子系统 +#define DS_AIO_M_CLASS 353 //一体机 + + +#define DS_6508HF_B10E_CLASS 355 //BNC输入编码子系统 +#define DS_6404HFH_B10ES_CLASS 356 //SDI输入编码子系统 +#define DS_6402HFH_B10ER_CLASS 358 //RGB输入编码子系统 +#define DS_6404HFH_B10T_RM_CLASS 361 //光纤输入编码子系统 +#define DS_6516D_B10EB_CLASS 362 //BNC输出解码子系统 +#define DS_6516D_B10ES_CLASS 363 //SDI输出解码子系统 + +//DVI/HDMI/VGA畅显解码公用一个类型 +#define DS_6508D_B10FH_CLASS 364 +#define DS_6508D_B10FD_CLASS 364 +#define DS_6508D_B10FV_CLASS 364 + +#define DS_6508_B11E_CLASS 365 //BNC输入编码子系统 +#define DS_6402_B11ES_CLASS 366 //SDI输入编码子系统 +#define DS_6402_B11EV_CLASS 367 //VGA输入编码子系统 +#define DS_6402_B11ER_CLASS 368 //RGB输入编码子系统 +#define DS_6402_B11ED_CLASS 369 //DVI输入编码子系统 +#define DS_6402_B11EH_CLASS 370 //HDMI输入编码子系统 +#define DS_6516D_B11EB_CLASS 371 //BNC输出解码子系统 +#define DS_6516D_B11ES_CLASS 372 //SDI输出解码子系统 + +#define DS_6508_B12E_CLASS 373 //BNC输入编码子系统 +#define DS_6402_B12ES_CLASS 375 //SDI输入编码子系统 +#define DS_6402_B12EV_CLASS 376 //VGA输入编码子系统 +#define DS_6402_B12ER_CLASS 377 //RGB输入编码子系统 +#define DS_6402_B12ED_CLASS 378 //DVI输入编码子系统 +#define DS_6402_B12EH_CLASS 379 //HDMI输入编码子系统 +#define DS_6516D_B12EB_CLASS 380 //BNC输出解码子系统 + +#define DS_iVMSE_AIO_8100x_CLASS 381 //金融行业一体机X86子系统 +#define DS_iVMSE_AIO_87x_CLASS 382 //智能楼宇一体机X86子系统 +#define DS_6532D_B11ES_CLASS 384 //增强型解码板_SDI(B11) +#define DS_6532D_B12ES_CLASS 385 //增强型解码板_SDI(B12) +//B20新增 +#define DS_B20_MSU_NP 400 //B20主控板 +#define DS_6416HFH_B20S 401 //SDI输入编码 +#define DS_6416HFH_B20_RM 402 //光纤输入高清编码 +#define DS_6564D_B20D 403 //DVI解码 +#define DS_6564D_B20H 404 //HDMI解码 +#define DS_6564D_B20V 405 //VGA解码 +#define DS_B20_6516D_DEV_CLASS 406 //B20解码子系统 +#define DS_6408HFH_B20V 407 //VGA编码板 +#define DS_MMC_B20_CLASS 408 //B20主控 +#define DS_CARD_CHIP_B20_CLASS 409 //B20主控子板 +#define DS_6564D_B20B_DEV_CLASS 410 //BNC解码子系统 +#define DS_6564D_B20S_DEV_CLASS 411 //SDI解码子系统 +#define DS_6532HF_B20B_DEV_CLASS 412 //BNC编码子系统 +#define DS_6408HFH_B20D_DEV_CLASS 413 //DVI编码子系统 +#define DS_6408HFH_B20H_DEV_CLASS 414 //HDMI编码子系统 +#define DS_IVMSE_B20_CLASS 415 //X86服务器子系统 +#define DS_6402HFH_B20Y_DEV_CLASS 416 //YUV编码子系统 +#define DS_6508HW_B20_DEV_CLASS 417 //HW编码子系统 +#define DS_B20N128Fx_B20_DEV_CLASS 418 //DS_B20N128Fx_M级联板 +#define DS_AIO_MCU_NP_DEV_CLASS 419 //IO主控板 +#define DS_6402_AIO_EV_DEV_CLASS 420 //VGA编码 +#define DS_6508D_AIO_EV_DEV_CLASS 421 //VGA解码 +#define DS_6508D_AIO_ED_DEV_CLASS 422 //DVI解码 +#define DS_6508D_AIO_EH_DEV_CLASS 423 //HDMI解码 +#define DS_6508HD_B20F_DEV_CLASS 424 //视频增强板 +#define DS_6402HFH_B20ES_DEV_CLASS 425 //3G SID编码 +#define DS_6532D_B20_DEV_CLASS 426 //B20解码子系统 +#define DS_IVMST_B20_DEV_CLASS 427 //X86服务器子系统 +#define DS_6416HFH_B20DD_DEV_CLASS 428 //DVI双链路 +#define DS_6441VS_B20_DEV_CLASS 429 //相机拼接类型 +#define DS_6404HFH_B20T_CLASS 431 //TVI +#define DS_FS22_B20_DEV_CLASS 432 //交换机子系统 +#define DS_IVMSE_B20UH_DEV_CLASS 433 //超高清X86输入 +#define IDS_6524J_B20_DEV_CLASS 434 +#define IDS_6532B_B20_DEV_CLASS 435 +#define DS_6404HFH_B20Fx_DEV_CLASS 436 //光端机接入子系统 +#define DS_N128x_B20Fy_CLASS 437 //级联子系统 +#define DS_181600F_B20_CLASS 438 //网络光纤子系统 +#define DS_6904UD_B20H_CLASS 439 //超高清解码子系统 + +#define DS_B21_MCU_NP_CLASS 440 //B21主控 +#define DS_B21_S10_x_CLASS 441 //B21机箱 x = A/S/D +#define DS_6402HFH_B21D_CLASS 442 //B21编码子系统 +#define DS_6508HD_B21D_CLASS 443 //B21解码子系统 +#define DS_iVMSE_B21HW_CLASS 444 //B21 X86子系统 + +#define DS_C10S 501 //C10S 集中式大屏控制器 +#define DS_C3X 502 //集中式拼接控制器 + +#define DS_C10N_SDI 551 //SDI处理器 +#define DS_C10N_BIW 552 //8路BNC处理器 +#define DS_C10N_DON 553 //显示处理器 +#define DS_C10N_TVI 554 //TVI输入板 +#define DS_C10N_DI2 555 //DVI 2路输入板 +#define DS_C10N_AUDIO_OUT 556 //DVI,HDMI,VGA输出板带音频 +#define DS_C10N_AUDIO_IN 557 //DVI,HDMI,VGA输入板带音频 + +//软服务器版本的分布式大屏控制器 +#define DS_C20N 570 //分布式大屏控制器 +#define DS_C20N_BNC 571 //BNC输入设备 +#define DS_C20N_DVI 572 //DVI输入设备 +#define DS_C20N_DP 573 //DP输入设备 +#define DS_C20N_OUT 574 //输出设备 + +//集中式多屏控制器 5301 - 5350 (50) +#define DS_C30 5301 //C30集中式拼接控制器 +#define DS_C31 5302 //C31集中式拼接控制器 +#define DS_M0804 5303 //M0804经济型拼接控制器 + +//硬服务器版本的分布式大屏控制器 +#define DS_C20N_VWMS 5351 //C20N服务器 +#define DS_C20N_DI2 5352 //两路DVI输入设备 +#define DS_C20N_DO2 5353 //两路DVI输出设备 +#define DS_C20N_UHDI 5354 //DP/HDMI 1路4K超高清输入设备 +#define DS_C20N_YI2 5355 //两路YPbPr输入板 + +#define DS_C12N_VWMS 5356 //C12N服务器 +#define DS_C12N_DO 5357 //1路DVI输出 +#define DS_C12N_HOE 5358 //1路HDMI 4K输出 + +#define DS_C20N_HI2 5359 // HDMI输入节点(2路) +#define DS_C20N_VI2 5360 //VGA输入节点(2路) +#define DS_C20N_SI2 5361 //SDI输入节点(2路) +#define DS_C20N_HO2 5362 //HDMI输出节点(2路) +#define DS_C20N_S24G 5363 //C20N专用千兆交换机(24路) +#define DS_C20N_S24X 5364 //C20N专用万兆交换机(24路) +#define DS_C12A_0104H 5365 //创意拼接控制器 +#define DS_C20N_DO2_V2 5366 //两路DVI输出设备V2 +#define DS_C20N_HO2_V2 5367 //两路HDMI输出设备V2 +#define DS_C21N 5368 //分布式大屏控制器 +#define DS_C21K 5369 //坐席KVM系统C21 +#define DS_68TS_A 5370 //触控一体机 +#define DS_C22N_UHDI 5371 //4K60输入设备(1路) +#define DS_C21N_UHDI_T 5372 //1路4K60超高清输入节点 +#define DS_C22N_HI1 5373 //1路HDMI高清输入 +#define DS_C22N_HO1 5374 //1路HDMI高清输出 + + +//全息显示设备 +#define DS_D1HXX 5591 //全息显示设备 +#define DS_60SDL_X 5592 //Windows双面屏终端 +#define DS_6043DL_B 5593 //安卓双面屏43寸终端 +#define DS_6049DL_B 5594 //安卓双面屏49寸终端 +#define DS_6055DL_B 5595 //安卓双面屏55寸终端 + +//无线传输设备 +#define ELEVATO_BRIDGE 5751 //无线电梯网桥 +#define DS_3WF01S_5NG_M 5752 //5.8G室外1公里无线工地网 +#define DS_3WF0EC_2N_D 5753 //2.4G室外500米网桥 +#define DS_3WF0EC_5ACT 5754 //5.8G 11ac电梯网桥 +#define DS_3WF03S_5AC 5755 //5.8G 3公里经济型网桥 +#define DS_3WF0ES_5AC_H 5756 //5.8G室外500米高穿透网桥 +#define DS_3WF05S_5AC_H 5765 //5.8G 5KM千兆网口拨码网桥 +#define DS_3WSXXX 5766 //网关路由器系列(包括AC控制器) +#define DS_3WAXXX 5767 //吸顶、室外AP系列 +#define DS_3WAXXXP 5768 //面板AP系列 +#define DS_3WRXXX 5769 //普通无线路由器系列 +#define DS_3WMRXXX 5770 //MESH路由器系列 +#define DS_3WAX18 5881 //室外AP + +//网络设备管理类 +#define DS_3CXXXX 5891 //统一网络管理平台 + + +//报警设备 +#define DS_19M00_MN 601 //报警主机百兆网络模块 +#define DS_KH8302_A 602 //室内机 +#define DS_KD8101_2 603 //门口机 +#define DS_KM8301 604 //管理机 +#define DS_KVXXXX_XX 605 //别墅门口机 +#define DS_LHPM1D_C 606 //酒店锁 +#define DS_KAM03 607 //半数字转接模块 +#define DS_KDXXX 608 //智能交互终端,监所行业DS-KD9623-F-JP,DS-KD9623-FC-JP,DS-KD9803-F-JP医疗行业:DS-KD9803-3XF5G-HI,DS-KD9803-3XFW-HI,DS-KD9803-W-HI + +#define DS64XXHD_T 701 //64-T高清解码器 +#define DS_65XXD 703 //65解码器 +#define DS63XXD_T 704 //63-T标清解码器 +#define SCE_SERVER 705 //抓屏服务器 +#define DS_64XXHD_S 706 //64XXHD-S高清解码器 +#define DS_68XXT 707 //多功能视音频转码器 +#define DS_65XXD_T 708 //65D-T解码器 +#define DS_65XXHD_T 709 //65HD-T解码器 +#define DS_69XXUD 710 //69XXUD超高清解码器 +#define DS_65XXUD 711 //65XXUD解码器 +#define DS_65XXUD_L 712 //65XXUD_L解码器 +#define DS_65XXUD_T 713 //65XXUD_T解码器 + + +#define DS_D20XX 750 //LCD屏幕 解码卡 +//SDI矩阵 +#define DS_C50S 751 //SDI矩阵 +#define DS_D50XX 752 //LCD屏幕 解码卡 + +#define DS_D40 760 //LED屏发送卡 + +#define DS_65VMXX 770 //视频会议服务器 +#define DS_65VTXX 771 //视频会议终端 +#define DS_65VTA 772 //视频会议一体式终端 +#define DS_65VT_RX 773 //互动教学终端 +#define DS_65VM_MCU_NP 774 //大容量MCU + + +#define DS_CS_SERVER 800 //虚拟屏服务器 +#define DS_68GAP_MCU 831 //视频网闸 +#define DS_K260X 850 //门禁主机 +#define DS_K1TXXX 851 //指纹一体机 +#define DS_K280X 852 //经济型门禁主机 +#define DS_K281X 853 //门禁主机DS-K281X系列 +#define DS_K1T80X 854 //经济型门禁一体机 +#define RAC_6X00 856 //汉军指纹门禁一体机 +#define DS_K2602_AX 857 //人员通道主机 +#define DS_K1T803F 858 //经济型指纹门禁产品 +#define DS_K2700 859 //分布式三层架构门禁主机 +#define DS_K270X 860 //分布式三层架构就地控制器 +#define DS_K1T500S 861 //视屏门禁一体机 +#define DS_K1A801F 862 //经济型指纹门禁产品 +#define DS_K1T600X 863 //人脸识别门禁一体机 +#define DS_K22X 864 //梯控主控制器 +#define DS_K2M0016AX 865 //梯控分控制器 +#define DS_K2602S_AX 867 //人员通道产品 +#define DS_K560XX 870 //立式/台式智能身份识别终端 +#define DS_K260X_E 873 //低端门禁主机 +#define DS_K5603X 874 //台式/壁挂式嵌入式人证设备 +#define DS_K3M200X 875 //权限控制器 +#define DS_K3M100X 879 //通道控制器 +#define DS_K1T8101XT 881 //经销型人脸识别门禁一体机 +#define DS_K1T8101XX 882 //经销型人脸识别门禁一体机 +#define DS_K5604 883 //5604人证设备 +#define DS_K1T607XXXX 884 //中端人脸门禁一体机DS_K1T607(M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW) +#define DS_K1A850X 885 //低端经销指纹考勤机 +#define DS_K1T800X 886 //低端经销指纹门禁一体机 +#define DS_K1T610XXXX 887 //中端人脸门禁一体机DS_K1T610(M/MF/E/EF/MG/MFG?MW/MFW/TM/TMF/TE/TEF/TMG/TMFG/TMW/TMFW) +#define DS_K1T8115X 888 //DS-K1T8115、DS-K1T8115M、DS-K1T8115M-Z 经销型人脸识别一体机 +#define DS_K1T815LC_M 889 //经销型人脸识别一体机 +#define DS_K1T606M_Z 890 //经销型人脸识别一体机 +#define DS_K5607_XXX 891 //K5607轻薄款通道人脸组件 +#define DS_K1T806X 892 //低端经销门禁一体机DS-K1T806系列 +#define DS_K1T950MX 893 //经销款人脸指纹门禁一体机 +#define DS_K1T331XX 894 //低端人脸门禁考勤一体机 +#define DS_K1T671T 895 //人脸门禁一体机 +#define DS_K1T671 896 //人脸门禁一体机 +#define DS_K5671 897 //轻薄款通道人脸组件 +#define DS_K1T640 898 //4.3寸人脸门禁一体机 +#define DS_K1A802A 899 //经济型指纹考勤机 + +#define DS_6800M 900 //68M合码器 +#define DS_68NTH 901 //信息发布主机 +#define DS_D60S 902 //信息发布服务器 +#define DS_D60W 903 //信息发布Windows终端 +#define DS_D10 931 //背投显示设备 +#define DS_3K0X_NM 951 //光纤收发器 +#define DS_3E2328 952 //百兆交换机 +#define DS_3E1528 953 //千兆交换机 +#define SCREEN_LINK_SERVER 971 //屏幕服务器 +#define DS_D51OPSXX 972 //OPS电脑盒 +//一体化云台 +#define IP_PTSYS_MEGA200 1001 //IP 200万一体化云台 +#define IPCAM_FISHEYE 1002 //鱼眼摄像机 +#define IPCAM_FISHEYE_E 1003 //经济型鱼眼摄像机 + +//68xx系列双目3D相机 +#define IPCAM_BINOCULAR 1004 //双目摄像机 + +#define IPCAM_365 1010 //支持365的平台的IPC CAM +#define IPCAM_R0 1011 //支持A5S的平台的IPC CAM +#define IPCAM_R1 1012 //支持385的平台的IPC CAM +#define IPCAM_R2 1013 //支持R2的平台的IPC CAM +#define IPCAM_R3 1014 //支持8127的平台的IPC CAM +#define IPCAM_R4 1015 //支持S2的平台的IPC CAM + +#define IPDOME_365 1110 //支持365的平台的IPD CAM +#define IPDOME_R0 1111 //支持A5S的平台的IPD CAM +#define IPDOME_R1 1112 //支持385的平台的IPD CAM +#define IPDOME_R2 1113 //支持R2的平台的IPD CAM +#define IPDOME_R3 1114 //支持8127的平台的IPD CAM +#define IPDOME_R4 1115 //支持S2的平台的IPD CAM +#define ITCCAM_R3 1211 //支持8127的平台的ITCCAM + +//无人机业务设备(1300~1350) +#define UAV_S 1300 //无人机基站设备 (Ummanned Aerial Vehicle – Station) + +//新增设备类型 2013-11-19 +#define TRAFFIC_ECT 1400 //ECT设备类型 +#define TRAFFIC_PARKING_SERVER 1401 //停车场服务器 +#define TRAFFIC_TME 1402 //出入口控制机 +// DVR +#define DS90XXHW_ST 2001 // DS90XXHW_ST混合DVR +#define DS72XXHX_SH 2002 // DS-72xxHV_SH, DS-72xxHF-SH +#define DS_92XX_HF_ST 2003 // DS-92XX-HF-ST +#define DS_91XX_HF_XT 2004 // 9100DVR_HF_XT +#define DS_90XX_HF_XT 2005 // 9000DVR_HF_XT +#define DS_73XXHX_SH 2006 // 7300DVR_HX_SH +#define DS_72XXHFH_ST 2007 // 7200DVR_HFH_ST +//DS_67系列 + +#define DS_67XXHF_SATA 2008 // DS-67XXHF-SATA +#define DS_67XXHW 2009 // DS-67XXHW +#define DS_67XXHW_SATA 2010 // DS-67XXHW-SATA +#define DS_67XXHF 2011 // DS-67XXHF + +//Netra2.3 +#define DS_72XXHF_SV 2012 // DS-72xxHF-SV +#define DS_72XXHW_SV 2013 // DS-72xxHW-SV + +#define DS_81XXHX_SH 2014 // 8100DVR_HX_SH + +#define DS_71XXHX_SL 2015 //小型DVR + +#define DS_76XXH_ST 2016 //DS_76XXH_ST + + +#define DS_73XXHFH_ST 2017 //73HFH系列 +#define DS_81XXHFH_ST 2018 //81HFH系列 ST + +#define DS_72XXHFH_SL 2019 //hi3521 +#define DS_FDXXCGA_FLT 2020 //2盘位ATM + +#define IDS_91XX_HF_ST_A 2100 //iDS-9100HF-ST/A +#define IDS_91XX_HF_ST_B 2101 //iDS-9100HF-ST/B +#define IDS_90XX_HF_ST_A 2102 //iDS-9000HF-ST/A +#define IDS_90XX_HF_ST_B 2103 //iDS-9000HF-ST/B +#define IDS_81XX_HF_ST_A 2104 //iDS-8100HF-ST/A +#define IDS_81XX_HF_ST_B 2105 //iDS-8100HF-ST/B +#define IDS_80XX_HF_ST_A 2106 //iDS-8000HF-ST/A +#define IDS_80XX_HF_ST_B 2107 //iDS-8000HF-ST/B +#define IDS_8104_AHFL_ST 2108 //智能混合ATM机 +#define IDS_2CD6812F_C 2109 //垂直双目相机 + + +// NVR +#define DS_77XXN_ST 2201 // NVR DS-77XXHF-ST +#define DS_95XX_N_ST 2202 // 95XXN_ST NVR +#define DS_85XX_N_ST 2203 // 85XXN_ST NVR +#define DS_96XX_N_XT 2204 // 9600NVR_N_XT +#define DS_76XX_N_SE 2205 // 7600NVR_N_SE + +//高清审讯机 +#define DS_86XXSN_SX 2206 // 8608NVR_SX,包括4中类型DS-8608SNL-SP、DS-8608SNL-ST、DS-8608SN-SP、DS-8608SN-ST,L表示带LCD,P表POE + +//#define DS_96XX_N_RX 2207 //DS-96XX-N-RX +#define DS_71XXN_SL 2208 //DS-71XXN-SL 民用产品 +#define CS_N1_1XX 2209 //CS_N1_1XX,民用事业部所用 + +#define DS_71XXN_SN 2210 //71XX_N_SN 经济型民用产品 +#define CS_N1_2XX 2211 //N1_2XX 民用事业部所用 +#define DS_76XX_N_SHT 2212 //76XX_N_SHT 后端基线产品 +#define DS_96XXX_N_E 2213 //高新性能NVR(256) + +#define DS_76XXN_EX 2214 /* 76 78系列NVR,注:包括 4 8 16路的E1一盘位, 8 16 32路 E2两盘位; /N /P设备*/ +#define DS_77XXN_E4 2215/* 77系列NVR, 注:包括8 16 32路, /N /P设备*/ +#define DS_86XXN_E8 2216/* 86系列NVR, 注:包括8 16 32路, /N /P设备*/ +#define DS_9616N_H8 2217 //DS_9616N_H8 +#define DS_72XXHX_EX_GXY 2218 //表示72系列无线DVR产品,其中72后面的xx表示通道数,H后的X目前仅有HW,为了后续扩展保留,E后面的X表示的是盘位数,G XY表示的是无线类型 +#define DS_76XXN_EX_GXY 2219 //表示是76系列无线NVR产品,其中76后面的xx表示通道数,E后面的X表示的是盘位数,G XY表示的是无线类型 +#define DS_72XXHXH_SH_21 2220 // 72XXHXH_SH_21 +#define DS_72XXHXH_SH_31 2221 // 72XXHXH_SH_31 +#define DS_73XXHXH_SH_31 2222 // 73XXHXH_SH_31 +#define DS_81XXHXH_SH_31 2223 // 81XXHXH_SH_31 +#define DS_71XXHXH_SH_21 2224 // 71XXHXH_SH_21 +#define DS_71XXHXH_SH_31 2225 // 71XXHXH_SH_31 +#define DS_NBXX_N_E1_X 2226 //便携式主机 +#define DS_96XXN_FX 2230 +#define DS_86XXN_FX 2231 +#define DS_96XXXN_HX 2232 //96系列设备 + + +#define DS_86XXN_I 2233 //DS_86XXN_I +#define DS_77XX_N_I 2234 //DS_77XX_N_I +#define DS_76XX_N_I 2235 //DS_76XX_N_I +#define DS_78XX_N_I 2236 //DS_78XX_N_I +#define DS_96XXXN_IX 2237 //DS-96XXX_N_I(DS-96128N-I16、DS-96128N-I24、DS-96256N-I16、DS-96256N-I24) + +#define DS_90XXHXH_XT 2238 //DS_90XXHXH_XT(DS-9016HQH-XT) + +#define DS_NVR_ALL 2239 //NVR设备统一类型码,后续所有NVR产品(包括已定义系列)都使用DS_NVR_ALL +#define DS_DVR_ALL 2240 //DVR设备统一类型码,后续所有DVR产品(包括已定义系列)都使用DS_DVR_ALL + +//PCNVR +#define PCNVR_IVMS_4200 2301 // PCNVR_IVMS_4200 + + +//智能分析仪 +#define IVMS_6200_TP 2401 //IVMS-6200 交通诱导分析仪 +#define IVMS_6200_TF 2402 //IVMS-6200 交通取证分析仪 +#define IVMS_6200_D 2403 //iVMS-6200(/D) +#define IDS_81XXAHW_ST 2405 //iDS-81xxAHW-ST +#define IDS_81XXAHW_SP 2406 //iDS-81xxAHW-SP +#define IDS_81XXAHWL_ST 2407 //iDS-81xxAHWL-ST +#define IDS_81XXAHWL_SP 2408 //iDS-81xxAHWL-SP +#define IDS_9616N_H8 2409 //iDS_9616N_H8 +#define IVMS_6200_SMD 2500 //IVMS_6200_SMD +//HISI3531平台混合ATM DVR, 其中L表示带液晶屏,P表示带poe +#define DS_81XXAHW_ST 2501 +#define DS_81XXAHW_SP 2502 +#define DS_81XXAHWL_ST 2503 +#define DS_81XXAHWL_SP 2504 + +//TVI ATM +#define DS_81XXAHGH_E4 2601 //DS_81XXAHGH_E4 + +/************************************************************************/ +/* 传输与显示产品设备类型start(不包含老的设备类型) */ +/************************************************************************/ + +/** B20系列(4001-4100) */ + +#define DS_6904UD_AIOE_H_CLASS 4002 //B20一体机 +#define DS_6402HFH_B21B_CLASS 4005 //B21 编码 +#define DS_6902UD_B21H_CLASS 4006 //B21 HDMI解码 +#define DS_6902UD_B21D_CLASS 4007 //B21 DVI解码 +#define DS_6902UD_B21V_CLASS 4008 //B21 VGA解码 +#define DS_6904UD_B20D_CLASS 4010 //B20 DVI解码 +#define DS_6904UD_B20V_CLASS 4011 //B20 VGA解码 +#define DS_B30_MCU 4012 //B30主控板 +#define DS_B30_SW 4013 //B30交换板 +#define DS_B30_04XI 4014 //B30编码输入板 +#define DS_B30_04XO 4015 //B30解码输出板 +#define DS_B31 4016 //B31一体机 + +//B21一体机设备型号 +#define DS_AIOH_MCU_NP 4042 //主控板 +#define DS_6404HFH_AIOH_D 4043 //4路DVI输入板 +#define DS_6908UD_AIOH_D 4044 //4路DVI输出板 +#define DS_6908UD_AIOH_H 4045 //4路HDMI输出板 + +//解码一体机设备型号 +#define DS_69XXUD_B 4046 //解码一体机 +#define DS_6404HFH_I 4047 //4路DVI输入板 +#define DS_6904UD_O 4048 //8路HDMI输出板 + + +//集中式拼控器 +#define DS_C12L_0204H 4060 //经济型小型拼控器 + +//AR一体机 4101 - 4120 (20) +#define DS_D1A24FDI 4101 //AR教育一体机 + +//解码器5001-5050 +#define DS_69XXHD 5001 //69XXHD解码器 +#define DS_69UD_V2 5002 //69UD超高清解码器V2 +#define DS_69UD_T 5003 //6输入超高清解码器 +#define DS_6AUD 5004 //超高清解码器网络版 +#define DS_6AUD_V3 5005 //超高清解码器V3 + +//转码器 5401 - 5450 (50) +#define DS_68VTG 5401 //综合转码网关 + +//视频会议设备 5571 - 5590 (20) +#define DS_65VT0010 5571 //一体式终端 +#define DS_65VM_MCU 5572 //高密度MCU主控板 +#define DS_65VM_MPC 5573 //高密度MCU媒体资源板 +#define DS_65VT2XXYR_SF 5574 //司法提讯终端 +#define DS_65VT0XXY 5575 //视频会议大终端 +#define DS_65VT0010Z 5576 //智能一体式终端 +#define DS_65VT0050Z 5577 //智能分体式终端 +#define DS_65VS0XXXS 5878 //opensips服务器设备 +#define DS_65VS0XXXM 5579 //视频会议会控平台设备 +#define DS_65VM00XX_X 5580 //视频会议X86系统MCU +#define DS_65VA800_BOX 5581 //视频会议麦克风 +#define DS_65VT0020S 5582 //一体式单目智能会议终端 +#define DS_65VT0020D 5583 //一体式双目智能会议终端 +#define DS_65VM00XX_G 5584 //视频会议MCU服务器 +#define DS_65VM0000_GPU 5585 //视频会议媒体处理卡 +#define DS_65VTA011 5586 //单目高集成终端 +#define DS_65VCP1100M_S 5587 //4K单目相机(智能会议终端) +#define Z_MINISMC_01 5588 //4K USB相机 + +#define DS_65VCAXX 5590 //高集成摄像机 + +#define DS_65VTR00X0 5791 //分体式信创会议终端 +#define DS_65VA800AM_S 5792 //视频会议列阵麦克风 +#define DS_65VAM0100UB 5793 //视频会议麦克风扬声器 +#define DS_65VA800SW 5794 //音频转换器 +#define DS_65VTA22XX_X 5795 //SmartEye A2200 +#define DS_65VCAXXXX 5796 //Smart Meeting Bar + +//视频云模方(Y10系列) +#define DS_Y10_MCU 5771 //主控板 +#define DS_Y10_SW1 5772 //交换板 +#define DS_6516UD_Y10D 5773 //8路DVI显示接口解码板 +#define DS_6532UD_Y10D 5774 //16路DVI显示接口解码板 +#define DS_6E2724_Y10 5775 //24个万兆接口编码接入板 +#define DS_68SAA_AA_Y10 5776 //双路2620、内存32G业务板 +#define DS_68SBA_AA_Y10 5777 //双路2630、内存32G业务板 +#define DS_68SCA_AA_Y10 5778 //双路2650、内存32G业务板 +#define DS_68GPU_A1_Y10 5779 //P4显卡版 +#define DS_CPU_SERVER 5780 //CPU服务板 +#define DS_GPU_SERVER 5781 //GPU服务板 +#define DS_BIGDATA_SERVER 5782 //大数据服务板 + + +//安监一体机系列 +#define DS_B80_MCU 5821//主控板 +#define DS_B80_SW 5822//交换板 +#define DS_B80_SR_01 5823//服务板 +#define DS_B80_AI04 5824//智能分析板,支持4路分析能力 +#define DS_B80_ST 5825//存储板,支持4个2.5寸2T硬盘 +#define DS_B80_D04 5826//数据采集业务板 +#define DS_B80_BNC08 5827//标清编码板 +#define DS_B80_SDI08 5828//高清编码板 +#define DS_B80_VP 5829//转码/合码板 +#define DS_B80_VO02 5830//视频输出板 +#define DS_B81_MCU 5831//B81主控模块 +#define DS_B81_AI 5832//B81智能分析模块 +#define DS_B81_TVI 5833//B81 模拟视频输入模块(TVI/BNC) +#define DS_B81_APL 5834//B81服务模块 X86平台 +#define DS_B81_D08T 5835//B81 生产数据采集模块 +#define DS_B85 5836//B85小型物联网主机 +#define DS_B86 5837//B86物联中控主机 +#define AX_GW100_V16A00M 5838//B81主机(非隔离),OEM设备 +#define DS_B81_AT_M 5839//B81主机(非隔离) + +//网关类 +#define DS_3LGCX 5841//通用物联网关 +#define DS_3LGRX 5842//LoRa网关 +#define DS_3LGT4 5843 //电梯网关设备 +#define DS_3LGT40_N 5844 //NB-IoT电梯网关 +#define DS_3LGS_I 5845 //智能网关 + + +//交换机 +#define DS_3E11XX 5681 //百兆交换机 +#define DS_3E13XX 5682 //千兆上行交换机 +#define DS_3E15XX 5683 //千兆交换机 +#define DS_3E11XXP 5684 //百兆POE交换机 +#define DS_3E13XXP 5685 //千兆上行POE交换机 +#define DS_3E15XXP 5686 //千兆POE交换机 +#define DS_3E1520U 5687 //USB充电柜 +#define DS_3EODM_H 5688 //华三交换机 +#define DS_3EODM_W 5689 //恒茂交换机 +#define DS_3T1XXX 5690 //DS-3T1XXX系列交换机 +#define DS_3E2XXX 5861 //二层全网管交换机 +#define DS_3E2XXXP 5862 //二层全网管交换机-POE +#define DS_3E3XXX 5863 //三层全网管交换机 +#define DS_3E3XXXP 5864 //三层全网管交换机-POE + +//光纤收发器 +#define DS_3D01R_NM 5691 //收发器接收卡 +#define DS_3D01T_NM 5692 //收发器发送机 +#define DS_3K02_RNM 5693 //收发器网管卡 + + +/************************************************************************/ +/* 传输与显示产品设备类型end(不包含老的设备类型) */ +/************************************************************************/ + +#define IDS_90XX_HXH_XX_S 6001 //超脑人体DVR产品 +#define IDS_90XX_HXH_XX_FA 6002 //超脑人脸DVR产品 + +#define DS_81XX_SHXL_K4 6101 //KY2017平台审讯机DS-8104SHFH(L)-K4/4P + +#define DS_8116THFHL_F4 6201 //标准庭审主机DS-8116THFHL-F4 + +#define DS_81XXAHQ_E4 6301 //DS_81XXAHQ_E4(TVI ATM) +#define IDS_81XXAHQ_E4 6302 //IDS_81XXAHQ_E4(智能TVI ATM) + +#define IDS_86XX_NX_A 7501 //超脑智能ATM NVR(iDS-8632NX-I8/A) +#define IDS_96XX_NX_S 7502 //人体超脑智能NVR +#define IDS_96XX_NX_V 7503 //超脑加油站NVR +#define IDS_96XX_NX_FA 7504 //人脸超脑智能NVR iDS-9632NX-I8/FA +#define IDS_86XX_NX_IX_B 7505 //86系列安全帽检测NVR产品 +#define IDS_67XX_NX_S_X 7506 //人脸超脑智能安检产品NVR(IDS_67XX_NX/S_X) +#define NP_ST204_X_ 7507 //第二代智能安检分析仪(NP_ST204_S:NP_ST204_D:NP_ST204_D_4G) +#define NP_ST_ANJIAN 7508 //安检机 + +#define IDS_ECDXX_HE 8001//学生三目相机 +#define IDS_ECDXX_HT 8002//教师三目相机 + +#define IDS_ECDXX_E 8101//4K半球 + +#define IDS_EPTXX_HF 8201//二代人脸抓拍机 + + +#define DS_2CD69XXX_I 8351 //3200W全景拼接IPC型号 +#define DS_TRIXX 8471 //超高频固定式读卡器DS_TRI900 + +#define DS_K1F600_D6EXX 10501 //多功能采集仪 +#define DS_K1T341 10502 //经销人脸门禁 +#define DS_K1T641XXX 10503 //中端通用人脸门禁 +#define DS_K1T642XXX 10504 //中端通用人脸门禁 +#define DS_K1T601 10505 //酒店人脸产品 +#define DS_K1T672XXX 10506 //室内7寸超薄款人脸门禁产品 +#define DS_K56A0X 10507 //安卓中端人证 +#define DS_K56Q_F70 10508 //低端人脸组件(经销型) +#define DS_K1T6Q_F70M 10509 //F70系列人脸识别一体机(经销型) +#define DS_K1T6Q_F40X 10510 //F40系列人脸识别一体机(经销型) +#define DS_K5604A_XXX 10511 //中低端人脸组件 +#define DS_K1A330X 10512 //超低端人脸考勤机(经销型) +#define DS_K1T804A 10513 //经济型指纹门禁一体机 +#define DS_K1T202 10514 //经济型指纹门禁一体机 +#define DS_K1T343MX 10515 //人脸门禁一体机(经销型) +#define DS_K1T331W_D 10516 //低端人脸门禁考勤一体机(DS-K1T331W(D)) +#define DS_K1T671WX_D 10517 //人脸门禁一体机(DS-K1T671M(D) DS-K1T671MW(D) DS-K1T671MG(D)) +#define DS_K1T680X 10518 //8.0寸室内外人脸门禁(DS-K1T680M DS-K1T680D) +#define DS_K1T640A 10519 //智能门禁一体机(DS-K1T640AM DS-K1T640AMW) +#define DS_K1F600U_D6E_X 10520 //多功能采集仪(DS-K1F600U-D6E DS-K1F600U-D6E-F DS-K1F600U-D6E-IF) +#define DS_K1T671AMX 10521 //人脸门禁一体机(DS-K1T671AM DS-K1T671AMW DS-K1T671AM-5G) +#define DS_VISITORXX 10530 //访客机 +#define DS_FACE_PAYMENT_TERMINALXX 10531 //人脸消费机 +#define DS_K1T341B_T 10532 //人脸门禁一体机,支持测温(DS-K1T341BMWI-T DS-K1T341BMI-T) +#define DS_K1T343 10533 //F1Pro平台4.3寸人脸门禁一体机(经销)(DS-K1T343M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFX/EFWX,D10,D10W/F/FW) +#define DS_K1T673 10534 //F1Plus平台7寸人脸门禁一体机(行业)(DS_K1T673M/MG/MW/TMW/TMG/DX/DWX/TDX/TDWX/TDGX) +#define DS_K1T981 10535 //虹膜识别一体机 +#define DS_K5680X 10536 //K5680系列8寸桌面人证设备 +#define DS_K5022A_X 10537 //5022A系列安卓访客机 +#define DS_K1T342 10538 //F1Pro平台4.3寸人脸门禁一体机(经销)(DS-K1T342M/MX/MW/MWX/MF/MFX/MFW/MFWX/EX/EWX/EFWX/DX/DWX,D11,D11S/Pro/Plus) +#define DS_K1T690 10539 //DS_K1T690 +#define DS_K1T340 10540 //DS_K1T340 +#define DS_K1T6QT_F72 10541 //F72系列人脸识别一体机(经销型) +#define DS_K1T641A 10542 //F1Plus平台4.3寸人脸门禁一体机l,641系列 +#define DS_K1TACS 10543 //门禁产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 +#define DS_K1T6_GS3 10544 //行业人脸识别一体机DS-K1T6-GS3系列 +#define DS_K1T6Q_F41_3XF 10545 //经销人脸识别一体机DS_K1T6Q_F41_3XF系列 +#define DS_K56A1X 10546 //K56A1系列桌面人证设备 +#define DS_K1T320MFW 10547 //F2 Pro平台2.4寸超低端经销人脸门禁机一体机 +#define DS_K5033X 10548 //5033系列安卓桌面式访客机 + +#define DS_K1T681X 10550 //A2S平台8寸人脸门禁一体机(DS-K1T681M 、DS-K1T681MW、 DS-K1T681MG、 DS-K1T681M-3D等) +#define DS_K5670X 10551 //F2pro低端7寸工地明眸K5670系列 +#define DS_K1T670X 10552 //中端行业一体式测温DS-K1T670系列 + +//访客机10530,10601-10650 +#define DS_K3501 10601 //经销访客机K3501系列 +//消费机10531,10651-10700 +#define DS_K6600X 10651 //K6600系列商超收银机 + +//智能柜10701-10750 +#define DS_KL_CABINET 10701 //智能柜产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 + +//梯控主机10751-10800 + +//人员通道10801-10850 +#define DS_K3B961 10801 //人员通道产品大类值,用于ISAPI登录是在设备信息结构体的wDevType字段返回 + +#define DS_KBS6XXX_WX 11001 //音箱DS-KBS6100-WV/DS-KBS6101-W/DS-KBS6100-W/DS-KBS6101-W/DS-KBS6200-W/DS-KBS6201-W +#define DS_KBC6XXX_X 11002 //音柱DS-KBC6300/DS-KBC6600 +#define DS_KBI6000_P 11003 //寻呼话筒DS-KBI6000-P +#define DS_KBA6XXX 11004 //功放设备(扩音器)DS-KBA6120/DS-KBA6240/DS-KBA6360/DS-KBA6650/DS-KBA6400-2/DS-KBA6800-2 + +#define DS_IEXX_E_J 11501 //监所智能服务器 + +#define IDS_67XX_NX_A 12501 //67系列NVS产品(iDS-6704NX/A) +#define IDS_67XX_NX_L 12502 //67系列录播NVS产品 +#define IDS_ENIXX_XHE 12503 //录播NVS行业专业产品 +#define IDS_67XX_NX_V 12504 //超脑加油站NVS +#define IDS_67XX_NX_B 12505 //67系列安全帽检测NVS产品 + +//智能中心类设备 +#define DS_IE63XX_E_FA 13001 //脸谱单机 +#define DS_DS_GPKIA 13002 //猎鹰服务器 +#define DS_DS_PURE 13003 //脸谱纯分析 +#define DS_DS_FS 13004 //人脸静态数据服务器 +#define DS_DS_FD 13005 //抓拍检测服务器 +#define DS_DS_BLADE 13006 //刀锋 +#define DS_DS_HMCP 13007 //模型对比服务器 + +//智能锁设备 +#define DS_LNX_RF 13501 //智能锁盒子 + +//雷达设备 13551-14000(500) +#define DS_PA_RADAR 13551 //PA雷达 +#define DS_PERIMETER_RADAR 13552 //周界雷达 +#define DS_SECURITY_RADAR 13553 //120米安防雷达 +#define DS_IMAGING_RADAR_PANEL 13554 //成像雷达主机 + +//消防设备 14001-14500(500) +#define DS_N1104X 14001 //消防网关 +#define DS_N1103X 14002 //用户信息传输设备 +#define NP_FSC201 14003 //用水设备 +#define NP_FDC240 14004 //组合式电气火灾探测器 +#define DS_N1107 14005 //物联网网关 +#define NP_FAXXX 14006 //消防分析仪 +#define NP_FVY100 14007 //视频烟感 +#define NP_FVW100 14008 //安消智能相机 +#define NP_FVG100 14009 //安消联动相机 +#define NP_FVY300 14010 //经济型视频烟感 +#define NP_FVR212_P 14011 //三合一火灾探测器 +#define NP_FVR213_P 14012 //三合一火灾探测器(自研) + +//安检设备 14501-15000(500) +#define NP_ST204_X 14501 //第二代智能安检分析仪 +#define ISD_SG2XXL_X 14502 //安检门(ISD-SG206L ISD-SG218L ISD-SG218L-F) +#define ISD_SL300T 14503 //液体分析仪 + +//模拟和音频设备 15001-15500(500) +#define IPA 15001 +/**********************设备类型 end***********************/ +/**********************设备大类 begin**********************/ + +/* dvr相关 1-50 */ +#define DEV_CLASS_DVR 1 //普通dvr类型 +#define DEV_CLASS_INTERROGATION 2 //审讯机 +#define DEV_CLASS_SIMPLE_TRAIL 3 //简易庭审主机 +#define DEV_CLASS_TRAIL 4 //标准庭审主机 +#define DEV_CLASS_RECORD_PLAY 5 //录播主机 +#define DEV_CLASS_ATM 6 //ATM机 + +/* dvs相关 51-100 */ +#define DEV_CLASS_DVS 51 //普通dvs + +/* nvr相关 101-150 */ +#define DEV_CLASS_NVR 101 //普通nvr + +/* ipc相关 151-200 */ +#define DEV_CLASS_GUN 151 //ipc枪机 +#define DEV_CLASS_BALL 152 //ipc球机 +#define DEV_CLASS_SNAP 153 //抓拍机 +#define DEV_CLASS_INTELLI_TILT 154 //智能云台 +#define DEV_CLASS_FISH_EYE 155 //鱼眼 +#define DEV_CLASS_2DP_Z 156 //大鹰眼 +#define DEV_CLASS_2DP 157 //小鹰眼 +#define DEV_CLASS_PT 158 //全景细节相机 +#define DEV_CLASS_TRI 159 //超高频固定式读卡器 + +/* CVR相关 201 - 250*/ +#define DEV_CLASS_CVR 201 //CVR + +/* 传显相关 251 - 300*/ +#define DEV_CLASS_B20 251 //传显B20系列 +#define DEV_CLASS_B10 252 //传显B10系列 +#define DEV_CLASS_DECODER 253 //解码器 +#define DEV_CLASS_MATRIXMANAGEDEVICE 254 //矩阵接入网关 +#define DEV_CLASS_OTICAL 255 //光端机 +#define DEV_CLASS_CODESPITTER 256 //码分器 +#define DEV_CLASS_ALARMHOST 257 //行业报警主机 +#define DEV_CLASS_MOVING_RING 258 //动环设备 +#define DEV_CLASS_CVCS 259 //集中式多屏控制器 +#define DEV_CLASS_DVCS 260 //分布式多屏控制器 +#define DEV_CLASS_TRANSCODER 261 //转码器 +#define DEV_CLASS_LCD_SCREEN 262 //LCD屏幕 +#define DEV_CLASS_LED_SCREEN 263 //LED屏幕 +#define DEV_CLASS_MATRIX 264 //矩阵 +#define DEV_CLASS_CONFERENCE_SYSTEM 265 //视频会议设备 +#define DEV_CLASS_INFORMATION_RELEASE_EQUIPMENT 266 //信息发布设备 +#define DEV_CLASS_NET_GAP 267 //网闸 +#define DEV_CLASS_MERGE 268 //合码器 +#define DEV_CLASS_REAR_PROJECTION 269 //背投显示设备 +#define DEV_CLASS_SWITCH 270 //交换机 +#define DEV_CLASS_FIBER_CONVERTER 271 //光纤收发器 +#define DEV_CLASS_SCREEN_SERVER 272 //屏幕服务器 +#define DEV_CLASS_SCE_SERVER 273 //抓屏服务器 +#define DEV_CLASS_WIRELESS_TRANS 274 //无线传输设备 +#define DEV_CLASS_Y10_SERIES 275 //Y10系列 +#define DEV_CLASS_SAFETY_MAVHINE 276 //安监一体机 +#define DEV_CLASS_IOTGATEWAY 277 //物联网关类 +#define DEV_CLASS_NET_MANAGEMENT_EQUIPMENT 278 //网络设备管理类 +#define DEV_CLASS_PUBLISH_SIGNAGE 279 //电子班牌 +#define DEV_CLASS_AR_MACHINE 280 //AR一体机 +/* 报警主机相关 301 - 350*/ +#define DEV_CLASS_VIDEO_ALARM_HOST 301 //视频报警主机 +#define DEV_CLASS_NET_ALARM_HOST 302 //网络报警主机 +#define DEV_CLASS_ONE_KEY_ALARM 303 //一键式报警产品 +#define DEV_CLASS_WIRELESS_ALARM_HOST 304 //无线报警主机 +#define DEV_CLASS_ALARM_MODULE 305 //报警模块 +#define DEV_CLASS_HOME_ALARM_HOST 306 //家用报警主机 +#define DEV_CLASS_HYBRID_ALARM_HOST 307 //混合报警主机 +#define DEV_CLASS_NETWORK_RECEIVER 308 //网络接警机产品 + +/* 门禁相关 351 - 400*/ +#define DEV_CLASS_ACCESS_CONTROL 351 //门禁产品 +#define DEV_CLASS_VISITOR 352 //访客机产品 +#define DEV_CLASS_FACE_PAYMENT_TERMINALXX 353 //人脸消费机产品 +#define DEV_CLASS_CABINET 354 //智能柜 +#define DEV_CLASS_LADDER_CONTROL 355 //梯控主机 +#define DEV_CLASS_PERSONNEL_CHANNEL 356 //人员通道 + +/* 可视对讲 401 - 450*/ +#define DEV_CLASS_VIDEO_INTERCOM 401 //可视对讲 + +/* 无人机 451 - 500*/ +#define DEV_CLASS_UMMANNED_AERIAL_VEHICLE 451 //无人机产品 + +/* 移动产品: 501-550*/ +#define DEV_CLASS_MOBILE 501 //移动产品 + +/* 移动车载设备: 551-600*/ +#define DEV_CLASS_MOBILE_VEHICLE 551 //移动车载设备 + +//智能分析仪:601-650 +#define DEV_CLASS_INTELLIGENT_ANALYZER 601 //智能分析仪 + +//智能交通服务器:651-700 +#define DEV_CLASS_INTELLIGENT_TRAFFIC_SERVER 651 //智能交通服务器 +#define DS_TP2200_EC 652 //经济型机柜显示仪 + +/* nvs相关 701-750 */ +#define DEV_CLASS_NVS 701 //普通nvs + +/*有源RFID系列 751-800*/ +#define DS_TRI21A_1_P 751 //有源RFID读取器 + +/* 数据中心设备801-850 */ +#define DS_CLASS_FA 801 //脸谱单机 +#define DS_CLASS_PURE 802 //脸谱纯分析 +#define DS_CLASS_FS 803 //人脸静态数据服务器 +#define DS_CLASS_FD 804 //抓拍检测服务器 +#define DS_CLASS_HAWK 805 //猎鹰服务器 +#define DS_CLASS_BLADE 806 //刀锋 +#define DS_CLASS_HMCP 807 //模型对比服务器 + +/* 智能锁相关 851 - 900*/ +#define DEV_CLASS_SMART_LOCK 851 //智能锁盒子 + +/* 雷达相关 901 - 950*/ +#define DEV_CLASS_RADAR 901 //雷达产品 + +/* 智慧消防相关 951 - 1000*/ +#define DEV_CLASS_FIRE_CONTROL 951 //消防产品 + +/* 安检相关 1001 - 1050*/ +#define DEV_CLASS_SECURITY_CHECK 1001 //安检产品 + +#define DEV_CLASS_CONFERENCE_TABLET 1051 //会议平板 + +#define DEV_CLASS_JUDICIAL_TABLET 1101 //司法平板 + +/*全景细节相机: 8451-8470*/ +#define iDS_PT 8451 //全景细节相机 + +/*网络接警机产品 9851 - 9900*/ +#define DS_XCM1_IP 9851 //网络接警机 + +/* 其他设备类型 65534 */ +#define DEV_CLASS_DEFAULT 65534 //默认设备类型 +/**********************设备大类 end**********************/ + +/******************************能力集获取*********************************/ +//能力获取命令 +#define DEVICE_SOFTHARDWARE_ABILITY 0x001 //设备软硬件能力 +#define DEVICE_NETWORK_ABILITY 0x002 //设备网络能力 +#define DEVICE_ENCODE_ALL_ABILITY 0x003 //设备所有编码能力 +#define DEVICE_ENCODE_CURRENT 0x004 //设备当前编码能力 +#define IPC_FRONT_PARAMETER 0x005 //ipc前端参数1.0 +#define IPC_UPGRADE_DESCRIPTION 0x006 //ipc升级信息 +#define DEVICE_RAID_ABILITY 0x007 //RAID能力 +#define DEVICE_ENCODE_ALL_ABILITY_V20 0x008 //设备所有编码能力2.0 +#define IPC_FRONT_PARAMETER_V20 0x009 //ipc前端参数2.0 +#define DEVICE_ALARM_ABILITY 0x00a //辅助报警能力 +#define DEVICE_DYNCHAN_ABILITY 0x00b //设备数字通道能力 +#define DEVICE_USER_ABILITY 0x00c //设备用户管理参数能力 +#define DEVICE_NETAPP_ABILITY 0x00d //设备网络应用参数能力 +#define DEVICE_VIDEOPIC_ABILITY 0x00e //设备图像参数能力 +#define DEVICE_JPEG_CAP_ABILITY 0x00f //设备JPEG抓图能力 +#define DEVICE_SERIAL_ABILITY 0x010 //RS232和RS485串口能力 +#define DEVICE_ABILITY_INFO 0x011 //设备通用能力类型,具体能力根据发送的能力节点来区分 +#define STREAM_ABILITY 0x012 //流能力 +#define SYSTEM_MANAGEMENT_ABILITY 0x013 //设备系统管理能力 +#define IP_VIEW_DEV_ABILITY 0x014 //IP可视对讲分机能力 +#define VCA_DEV_ABILITY 0x100 //设备智能分析的总能力 +#define VCA_CHAN_ABILITY 0x110 //异常行为检测能力 +#define TRANSFER_ABILITY 0x120 +#define MATRIXDECODER_ABILITY 0x200 //多路解码器显示、解码能力 +#define VIDEOPLATFORM_ABILITY 0x210 //视频综合平台能力集 +#define VIDEOPLATFORM_SBUCODESYSTEM_ABILITY 0x211 //视频综合平台编码子系统能力集 +#define WALL_ABILITY 0x212 //电视墙能力集 +#define MATRIX_ABILITY 0x213 //SDI矩阵能力 +#define DECODECARD_ABILITY 0x220 //解码卡服务器能力集 +#define VIDEOPLATFORM_ABILITY_V40 0x230 //视频综合平台能力集 +#define MATRIXMANAGEDEVICE_ABILITY 0x240 //矩阵接入网关能力集 +#define MATRIXDECODER_ABILITY_V41 0x260 //解码器能力集 +#define DECODER_ABILITY 0x261 //解码器xml能力集 +#define DECODECARD_ABILITY_V41 0x270 //解码卡服务器能力集V41 +#define CODECARD_ABILITY 0x271 //编码卡能力集 +#define SNAPCAMERA_ABILITY 0x300 //抓拍机能力集 +#define ITC_TRIGGER_MODE_ABILITY 0x301 //智能IPC设备的触发模式能力 +#define COMPRESSIONCFG_ABILITY 0x400 //获取压缩参数能力集合 +#define COMPRESSION_LIMIT 0x401 //获取主子码流压缩参数能力限制 +#define PIC_CAPTURE_ABILITY 0x402 //获图片分辨率能力集合 +#define ALARMHOST_ABILITY 0x500 //网络报警主机能力集 +#define IT_DEVICE_ABILITY 0x501 //智能交通能力集 +#define SCREENCONTROL_ABILITY 0x600 //大屏控制器能力集 +#define SCREENSERVER_ABILITY 0x610 //大屏服务器能力集 +#define FISHEYE_ABILITY 0x700 //鱼眼能力集 +#define LCD_SCREEN_ABILITY 0x800 //LCD屏幕能力 2013-10-12 +#define ACS_ABILITY 0x801 //门禁能力 +#define MERGEDEV_ABILITY 0x802 //合码器能力集 +#define CAM_FUSION_ABILITY 0x803 //相机拼接能力 +#define OPTICAL_DEV_ACCESS_ABILITY 0x805 //光端机接入能力 +#define NET_RING_ABILITY 0x806 //环网能力集 +#define LED_ABILITY 0x807 //LED屏能力集 +#define PUBLISHDEV_ABILITY 0x80a //信息发布能力 +#define SCREEN_EXCHANGE_ABILITY 0x80b //屏幕互动能力 +#define REMOTE_NETMGR_FOT_ABILITY 0x80e //远端网管收发器能力 +/************************************************* +参数配置结构、参数(其中_V30为9000新增) +**************************************************/ + +//子板异常信息 +//主类型 +#define EXCEPTION_MAJOR_MAINBOARD_BOOT 0x1 //主板启动类型 +//次类型 +#define EXCEPTION_MINOR_PCIE_SCAN 0x1 // pcie链路扫描异常 +#define EXCEPTION_MINOR_DOWNLOAD_SUBBOARD 0xa //下载子板完成异常 + +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_BOOT 0x2 //子板启动类型 +//次类型 +#define EXCEPTION_MINOR_INEXISTENCE 0x1 //PCI-E扫不到或当前子板不存在 +#define EXCEPTION_MINOR_UBOOT_DOWNLOAD 0xa // uboot下载异常 +#define EXCEPTION_MINOR_UBOOT_INIT 0xe //uboot初始化异常 +#define EXCEPTION_MINOR_ROOTFS_DOWNLOAD 0x14 //rootfs.img下载异常 +#define EXCEPTION_MINOR_UIMAGE_DOWNLOAD 0x19 //uImage下载异常 +#define EXCEPTION_MINOR_UBOOT_SETBOOTFLAG 0x1e // uboot启动标志位置位异常 +#define EXCEPTION_MINOR_ROOTFS_BOOT_SUBBOARD 0x23 // rootfs启动异常 +#define EXCEPTION_MINOR_NEED_FILE_FINISH 0x28 //子板所需文件传输异常 + +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_HARDWARE 0x3 //子板硬件类型 +//次类型 +#define EXCEPTION_MINOR_AD 0x1 //AD异常 +#define EXCEPTION_MINOR_DA 0xa // DA异常 +#define EXCEPTION_MINOR_TIMER 0xb //时钟异常 + +//主类型 +#define EXCEPTION_MAJOR_FPGA 0x4 //FPGA类型 +//次类型 +#define EXCEPTION_MINOR_IDLE 0x1 //无法IDLE +#define EXCEPTION_MINOR_LANE 0xa // LANE OK失败 +#define EXCEPTION_MINOR_REGISTER_ALL_F 0xe //FPGA寄存器全F +#define EXCEPTION_MINOR_MEMORY_INIT_FAIL 0x14 //FPGA内存初始化失败 +//主类型 +#define EXCEPTION_MAJOR_DSP 0x5 //DSP类型 + +//主类型 +#define EXCEPTION_MAJOR_ARM 0x6 //ARM类型 + +//主类型 +#define EXCEPTION_MAJOR_BACKBOARD 0x7 //背板类型 +//次类型 +#define EXCEPTION_MINOR_BACKBOARD_TYPE 0x1 //获取背板类型异常 +#define EXCEPTION_MINOR_SERDES 0xa //视频交换芯片 +#define EXCEPTION_MINOR_CLOCK 0xe //时钟故障 +#define EXCEPTION_MINOR_SYNCH 0x14 //同步信号故障 + +//主类型 +#define EXCEPTION_MAJOR_SUBBOARD_NET 0x8 //子板网络 +//次类型 +#define EXCEPTION_MINOR_IP_CONFLICT 0x1 //IP冲突 +#define EXCEPTION_MINOR_DISCONNECT 0x14 // 断网 + +//[add]by zengxiaole 2017-09-27 DS-19D2000-S v2.0 +#define MAX_FIRE_ALARM_ZONE 12 //最大消防主机报警分区个数 +#define MAX_FIRE_ALARM_POINT_ZONE 32 //最大消防主机报警火点个数 + + +typedef enum tagCharEncodeType +{ + ENUM_MEM_CHAR_ENCODE_ERR = -1, //Error + ENUM_MEM_CHAR_ENCODE_NO = 0, //Don't know. + ENUM_MEM_CHAR_ENCODE_CN = 1, //EUC-CN, GB2312 + ENUM_MEM_CHAR_ENCODE_GBK = 2, //GBK + ENUM_MEM_CHAR_ENCODE_BIG5 = 3, //BIG5 + ENUM_MEM_CHAR_ENCODE_JP = 4, //JISX0208-1, EUC-JP + ENUM_MEM_CHAR_ENCODE_KR = 5, //EUC-KR + ENUM_MEM_CHAR_ENCODE_UTF8 = 6, //UTF-8 + ENUM_MEM_CHAR_ENCODE_ISO8859_1 = 7, //ISO-8859-n: ENUM_MEM_CHAR_ENCODE_ISO8859_1 + n -1 + ENUM_MEM_CHAR_ENCODE_UNICODE = 8, //Unicode +}CHAR_ENCODE_TYPE; + + +///////////////////////////////////////////////////////////////////////// +//校时结构参数 +typedef struct +{ + DWORD dwYear; //年 + DWORD dwMonth; //月 + DWORD dwDay; //日 + DWORD dwHour; //时 + DWORD dwMinute; //分 + DWORD dwSecond; //秒 +}NET_DVR_TIME, *LPNET_DVR_TIME; + +typedef struct tagNET_DVR_TIME_V30 +{ + WORD wYear; + BYTE byMonth; + BYTE byDay; + BYTE byHour; + BYTE byMinute; + BYTE bySecond; + BYTE byISO8601; /*是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 */ + WORD wMilliSec; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区,byISO8601为1时有效 +}NET_DVR_TIME_V30, *LPNET_DVR_TIME_V30; + +typedef struct tagNET_DVR_TIME_SEARCH +{ + WORD wYear; //年,设备OSD时间 + BYTE byMonth; //月,设备OSD时间 + BYTE byDay; //日,设备OSD时间 + BYTE byHour; //时,设备OSD时间 + BYTE byMinute; //分,设备OSD时间 + BYTE bySecond; //秒,设备OSD时间 + char cTimeDifferenceH; //与国际标准时间的时差(小时),-12 ... +14 + char cTimeDifferenceM; //与国际标准时间的时差(分钟),-30, 0, 30, 45 + BYTE byLocalOrUTC; //0-时差无效,设备本地时间,即设备OSD时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 +}NET_DVR_TIME_SEARCH, *LPNET_DVR_TIME_SEARCH; + +typedef struct tagNET_DVR_TIME_SEARCH_COND +{ + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 + BYTE byLocalOrUTC; //0-时差无效,设备本地时间,即设备OSD时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区,byLocalOrUTC为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,+表示东区,byLocalOrUTC为1时有效 +}NET_DVR_TIME_SEARCH_COND, *LPNET_DVR_TIME_SEARCH_COND; + + +typedef struct tagNET_DVR_TIME_V50 +{ + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + WORD wMillisecond; //毫秒,精度不够,默认为0 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区,byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,+表示东区,byISO8601为1时有效 +}NET_DVR_TIME_V50, *LPNET_DVR_TIME_V50; + + + +typedef struct tagNET_DVR_CALIBRATE_TIME +{ + DWORD dwSize; + NET_DVR_TIME struTime; + WORD wMilliSec; + BYTE byRes[14]; +}NET_DVR_CALIBRATE_TIME,*LPNET_DVR_CALIBRATE_TIME; + +#define MAX_TIMESIGN_LEN 32 //自定义校时标记信息长度 +typedef struct tagNET_DVR_TIMESIGN_CFG +{ + DWORD dwSize; + BYTE byCustomSetTimeSign[MAX_TIMESIGN_LEN/*32*/];//自定义校时标记 + BYTE byRes[96]; +}NET_DVR_TIMESIGN_CFG,*LPNET_DVR_TIMESIGN_CFG; + + +typedef struct tagNET_DVR_TIME_EX +{ + WORD wYear; + BYTE byMonth; + BYTE byDay; + BYTE byHour; + BYTE byMinute; + BYTE bySecond; + BYTE byRes; +}NET_DVR_TIME_EX,*LPNET_DVR_TIME_EX; + +//时间段(子结构) +typedef struct +{ + //开始时间 + BYTE byStartHour; + BYTE byStartMin; + //结束时间 + BYTE byStopHour; + BYTE byStopMin; +}NET_DVR_SCHEDTIME, *LPNET_DVR_SCHEDTIME; + +/*设备报警和异常处理方式*/ +/*设备报警和异常处理方式*/ +#define NOACTION 0x0 /*无响应*/ +#define WARNONMONITOR 0x1 /*显示器上警告*/ +#define WARNONAUDIOOUT 0x2 /*声音警告*/ +#define UPTOCENTER 0x4 /*上传中心*/ +#define TRIGGERALARMOUT 0x8 /*触发报警输出*/ +#define TRIGGERCATPIC 0x10 /*触发抓图并上传E-mail*/ +#define SEND_PIC_FTP 0x200 /*抓图并上传ftp*/ + +typedef struct tagNET_DVR_STRUCTHEAD +{ + WORD wLength; //结构长度 + BYTE byVersion ; /*高低4位分别代表高低版本,后续根据版本和长度进行扩展,不同的版本的长度进行限制*/ + BYTE byRes; +}NET_DVR_STRUCTHEAD, *LPNET_DVR_STRUCTHEAD; + +typedef struct tagNET_DVR_HANDLEEXCEPTION_V41 +{ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x400: 虚交侦测 联动 聚焦模式(提供可配置项,原先设备自动完成)IPC5.1.0*/ + /*0x800: PTZ联动(球机目标)*/ + /*0x4000:白光灯报警*/ + /*0x10000:短信报警*/ + /*0x20000:指示灯报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //触发报警通道 + BYTE byRes[64]; //保留 +}NET_DVR_HANDLEEXCEPTION_V41, *LPNET_DVR_HANDLEEXCEPTION_V41; + +typedef struct tagNET_DVR_HANDLEEXCEPTION_V40 +{ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x80: 报警触发录像(目前只有PCNVR支持) */ + /*0x100: 报警触发云台预置点 (目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x400: 虚交侦测 联动 聚焦模式(提供可配置项,原先设备自动完成)IPC5.1.0*/ + /*0x800: PTZ联动(球机目标)*/ + /*0x1000:抓图上传到云*/ + /*0x2000:短信报警*/ + /*0x4000:白光灯报警*/ + /*0x8000:语音报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOutChanNum; //触发的报警输出通道数 实际支持数 + DWORD dwRelAlarmOut[MAX_CHANNUM_V30]; //触发报警通道 + BYTE byWhiteLightDurationTime;//白光灯闪烁持续时长,1~60s(当开启了白光灯报警时生效) + BYTE byBrightness;//白光灯亮度,范围0-100,默认50 + BYTE byAudioType;//声音报警类型 + BYTE byTimes;//声音报警次数,范围:0-9,默认2, 0xff-持续 + BYTE byRes[60]; //保留 +}NET_DVR_HANDLEEXCEPTION_V40, *LPNET_DVR_HANDLEEXCEPTION_V40; + +//报警和异常处理结构(子结构)(多处使用)(9000扩展) +typedef struct +{ + DWORD dwHandleType; /*处理方式,处理方式的"或"结果*/ + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x2000:短信报警*/ + BYTE byRelAlarmOut[MAX_ALARMOUT_V30]; + //报警触发的输出通道,报警触发的输出,为1表示触发该输出 +}NET_DVR_HANDLEEXCEPTION_V30, *LPNET_DVR_HANDLEEXCEPTION_V30; + +//报警和异常处理结构(子结构)(多处使用) +typedef struct +{ + DWORD dwHandleType; /*处理方式,处理方式的"或"结果*/ + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: Jpeg抓图并上传EMail*/ + BYTE byRelAlarmOut[MAX_ALARMOUT]; //报警触发的输出通道,报警触发的输出,为1表示触发该输出 +}NET_DVR_HANDLEEXCEPTION, *LPNET_DVR_HANDLEEXCEPTION; + +//DVR设备参数 +typedef struct +{ + DWORD dwSize; + BYTE sDVRName[NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 +}NET_DVR_DEVICECFG, *LPNET_DVR_DEVICECFG; + +/* +IP地址 +*/ +typedef struct +{ + char sIpV4[16]; /* IPv4地址 */ + BYTE byIPv6[128]; /* 保留 */ +}NET_DVR_IPADDR, *LPNET_DVR_IPADDR; + +typedef union tagNET_DVR_IPADDR_UNION +{ + char szIPv4[16]; //IPv4地址 + char szIPv6[256]; //IPv6地址 +}NET_DVR_IPADDR_UNION, *LPNET_DVR_IPADDR_UNION; + +typedef struct tagNET_DVR_ADDRESS +{ + NET_DVR_IPADDR struIP; //IP地址 + WORD wPort; //端口号 + BYTE byRes[2]; +}NET_DVR_ADDRESS, *LPNET_DVR_ADDRESS; + +/* +网络数据结构(子结构)(9000扩展) +*/ +typedef struct +{ + NET_DVR_IPADDR struDVRIP; //DVR IP地址 + NET_DVR_IPADDR struDVRIPMask; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M自适应 + WORD wDVRPort; //端口号 + WORD wMTU; //增加MTU设置,默认1500。 + BYTE byMACAddr[MACADDR_LEN]; // 物理地址 + BYTE byEthernetPortNo; //网口号,0-无效,1-网口0,2-网口1以此类推,只读 + BYTE byRes[1]; //保留 +}NET_DVR_ETHERNET_V30, *LPNET_DVR_ETHERNET_V30; + +/* +网络数据结构(子结构) +*/ +typedef struct +{ + char sDVRIP[16]; //DVR IP地址 + char sDVRIPMask[16]; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口 1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M自适应 + WORD wDVRPort; //端口号 + BYTE byMACAddr[MACADDR_LEN]; //服务器的物理地址 +}NET_DVR_ETHERNET; + +//pppoe结构 +typedef struct +{ + DWORD dwPPPOE; //0-不启用,1-启用 + BYTE sPPPoEUser[NAME_LEN]; //PPPoE用户名 + char sPPPoEPassword[PASSWD_LEN]; // PPPoE密码 + NET_DVR_IPADDR struPPPoEIP; //PPPoE IP地址 +}NET_DVR_PPPOECFG, *LPNET_DVR_PPPOECFG; + +//网络配置结构(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //以太网口 + NET_DVR_IPADDR struRes1[2]; /*保留*/ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + BYTE byRes2[4]; /* 保留 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byUseDhcp; /* 是否启用DHCP 0xff-无效 0-不启用 1-启用*/ + BYTE byIPv6Mode; //IPv6分配方式,0-路由公告,1-手动设置,2-启用DHCP分配 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wHttpPortNo; /* HTTP端口号 */ + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + NET_DVR_PPPOECFG struPPPoE; + BYTE byEnablePrivateMulticastDiscovery; //私有多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableOnvifMulticastDiscovery; //Onvif多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableDNS; //DNS自动使能, 0-保留,1-打开,2-关闭 + BYTE byRes[61]; +} NET_DVR_NETCFG_V30, *LPNET_DVR_NETCFG_V30; + +//多网卡配置网卡结构 +typedef struct +{ + NET_DVR_IPADDR struDVRIP; //DVR IP地址 + NET_DVR_IPADDR struDVRIPMask; //DVR IP地址掩码 + DWORD dwNetInterface; //网络接口1-10MBase-T 2-10MBase-T全双工 3-100MBase-TX 4-100M全双工 5-10M/100M/1000M自适应 + BYTE byCardType; //网卡类型,0-普通网卡,1-内网网卡,2-外网网卡 + BYTE byEnableDNS; //DNS是否自动使能,0-保留,1-打开, 0-关闭 + WORD wMTU; //增加MTU设置,默认1500。 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,只用于显示 + BYTE byEthernetPortNo; //网口号,0-无效,1-网口0,2-网口1以此类推,只读 + BYTE bySilkScreen; //丝印信息,0-无效,1-GE1,2-GE2,3-G1,4-G2,只读 + BYTE byUseDhcp; /* 是否启用DHCP */ + BYTE byRes3[3]; + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ +}NET_DVR_ETHERNET_MULTI, *LPNET_DVR_ETHERNET_MULTI; + +//多网卡网络配置结构 +typedef struct +{ + DWORD dwSize; + BYTE byDefaultRoute; //默认路由,0表示struEtherNet[0],1表示struEtherNet[1] + BYTE byNetworkCardNum; //设备实际可配置的网卡数目 + BYTE byWorkMode; //0-普通多网卡模式,1-内外网隔离模式 + BYTE byRes; //保留 + NET_DVR_ETHERNET_MULTI struEtherNet[MAX_NETWORK_CARD]; //以太网口 + NET_DVR_IPADDR struManageHost1IpAddr; /* 主管理主机IP地址 */ + NET_DVR_IPADDR struManageHost2IpAddr; /* 辅管理主机IP地址 */ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + WORD wManageHost1Port; /* 主管理主机端口号 */ + WORD wManageHost2Port; /* 辅管理主机端口号 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wDvrPort; //通讯端口 默认8000 + WORD wHttpPortNo; /* HTTP端口号 */ + WORD wDvrPort2; //通讯端口2 + BYTE byRes2[4]; + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ + NET_DVR_PPPOECFG struPPPoE; + BYTE byRes3[24]; +}NET_DVR_NETCFG_MULTI, *LPNET_DVR_NETCFG_MULTI; + +//网络配置结构 +typedef struct +{ + DWORD dwSize; + NET_DVR_ETHERNET struEtherNet[MAX_ETHERNET]; /* 以太网口 */ + char sManageHostIP[16]; //远程管理主机地址 + WORD wManageHostPort; //远程管理主机端口号 + char sIPServerIP[16]; //IPServer服务器地址 + char sMultiCastIP[16]; //多播组地址 + char sGatewayIP[16]; //网关地址 + char sNFSIP[16]; //NFS主机IP地址 + BYTE sNFSDirectory[PATHNAME_LEN];//NFS目录 + DWORD dwPPPOE; //0-不启用,1-启用 + BYTE sPPPoEUser[NAME_LEN]; //PPPoE用户名 + char sPPPoEPassword[PASSWD_LEN];// PPPoE密码 + char sPPPoEIP[16]; //PPPoE IP地址(只读) + WORD wHttpPort; //HTTP端口号 +}NET_DVR_NETCFG, *LPNET_DVR_NETCFG; + +//网络配置结构(V50) +typedef struct tagNET_DVR_NETCFG_V50 +{ + DWORD dwSize; + NET_DVR_ETHERNET_V30 struEtherNet[MAX_ETHERNET]; //以太网口 + NET_DVR_IPADDR struRes1[2]; /*保留*/ + NET_DVR_IPADDR struAlarmHostIpAddr; /* 报警主机IP地址 */ + BYTE byRes2[4]; /* 保留 */ + WORD wAlarmHostIpPort; /* 报警主机端口号 */ + BYTE byUseDhcp; /* 是否启用DHCP 0xff-无效 0-不启用 1-启用*/ + BYTE byIPv6Mode; //IPv6分配方式,0-路由公告,1-手动设置,2-启用DHCP分配 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ + BYTE byIpResolver[MAX_DOMAIN_NAME]; /* IP解析服务器域名或IP地址 */ + WORD wIpResolverPort; /* IP解析服务器端口号 */ + WORD wHttpPortNo; /* HTTP端口号 */ + NET_DVR_IPADDR struMulticastIpAddr; /* 多播组地址 */ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + NET_DVR_PPPOECFG struPPPoE; + BYTE byEnablePrivateMulticastDiscovery; //私有多播搜索,0~默认,1~启用,2-禁用 + BYTE byEnableOnvifMulticastDiscovery; //Onvif多播搜索,0~默认,1~启用,2-禁用 + WORD wAlarmHost2IpPort; /* 报警主机2端口号 */ + NET_DVR_IPADDR struAlarmHost2IpAddr; /* 报警主机2 IP地址 */ + BYTE byEnableDNS; //DNS使能, 0-关闭,1-打开 + BYTE byRes[599]; +}NET_DVR_NETCFG_V50, *LPNET_DVR_NETCFG_V50; + +//sip配置 +typedef struct tagNET_DVR_SIP_CFG +{ + DWORD dwSize; + BYTE byEnableAutoLogin; //使能自动注册,0-不使能,1-使能 + BYTE byLoginStatus; //注册状态,0-未注册,1-已注册,此参数只能获取 + BYTE byRes1[2]; + NET_DVR_IPADDR stuServerIP; //SIP服务器IP + WORD wServerPort; //SIP服务器端口 + BYTE byRes2[2]; + BYTE byUserName[NAME_LEN]; //注册用户名 + BYTE byPassWord[PASSWD_LEN]; //注册密码 + BYTE byLocalNo[MAX_NUMBER_LEN]; + BYTE byDispalyName[MAX_NAME_LEN]; //设备显示名称 + WORD wLocalPort; //本地端口 + BYTE byLoginCycle; //注册周期,1-99分钟 + BYTE byType;//0-IP/IPV6,1-域名 + BYTE byDomainName[MAX_DOMAIN_NAME]; //域名 + BYTE byRes[64]; +}NET_DVR_SIP_CFG, *LPNET_DVR_SIP_CFG; + +typedef struct tagNET_DVR_SIP_CFG_V50 +{ + DWORD dwSize; + BYTE byEnableAutoLogin; //使能自动注册,0-不使能,1-使能 + BYTE byLoginStatus; //注册状态,0-未注册,1-已注册,此参数只能获取 + BYTE byRes1[2]; + NET_DVR_IPADDR stuServerIP; //SIP服务器IP + WORD wServerPort; //SIP服务器端口 + BYTE byRes2[2]; + BYTE byUserName[NAME_LEN]; //注册用户名 + BYTE byPassWord[PASSWD_LEN]; //注册密码 + BYTE byLocalNo[MAX_NUMBER_LEN]; + BYTE byDispalyName[MAX_NAME_LEN]; //设备显示名称 + WORD wLocalPort; //本地端口 + BYTE byLoginCycle; //注册周期,1-99分钟 + BYTE byRes3; + BYTE bySIPServerDomain[MAX_DOMAIN_NAME]; //sip服务器域名(IP和域名只需要填其一,都有值时IP优先) + NET_DVR_IPADDR stuSTUNServerIP; // STUN服务器IP + BYTE bySTUNServerDomain[MAX_DOMAIN_NAME]; //STUN服务器域名 (IP和域名只需要填其一,都有值时IP优先) + WORD wSTUNServerPort; // STUN服务器端口 + BYTE byRes4[2]; + NET_DVR_IPADDR stuProxyServerIP; //代理服务器IP + BYTE byProxyServerDomain[MAX_DOMAIN_NAME]; //代理服务器域名 (IP和域名只需要填其一,都有值时IP优先) + WORD wProxyServerPort; // 代理服务器端口 + BYTE byNetWork; //表示网络类型,0-无效,1-有线网络1, 2-有线网络2,3-无线网络 + BYTE byRes5; + BYTE byCalledTargetName[NET_SDK_MAX_CALLEDTARGET_NAME]; + BYTE byRes[224]; +}NET_DVR_SIP_CFG_V50, *LPNET_DVR_SIP_CFG_V50; + +//IP可视对讲分机配置 +typedef struct tagNET_DVR_IP_VIEW_DEVCFG +{ + DWORD dwSize; + BYTE byDefaultRing; //默认铃音,范围1-6 + BYTE byRingVolume; //铃音音量,范围0-9 + BYTE byInputVolume; //输入音量值,范围0-6 + BYTE byOutputVolume; //输出音量值,范围0-9 + WORD wRtpPort; //Rtp端口 + BYTE byRes1[2]; + DWORD dwPreviewDelayTime; //预览延时配置,0-30秒 + BYTE byRes2[64]; +}NET_DVR_IP_VIEW_DEVCFG,*LPNET_DVR_IP_VIEW_DEVCFG; + +//Ip可视对讲音频相关参数配置 +typedef struct tagNET_DVR_IP_VIEW_AUDIO_CFG +{ + DWORD dwSize; + BYTE byAudioEncPri1; //音频编码优先级1,0-G722,1-G711_U,2-G711_A, 5-MPEG2,6-G726,7-AAC + BYTE byAudioEncPri2; //音频编码优先级2,当sip服务器不支持音频编码1时会使用音频编码2,0-G722,1-G711_U,2-G711_A, 5-MPEG2,6-G726,7-AAC + WORD wAudioPacketLen1; //音频编码1数据包长度 + WORD wAudioPacketLen2; //音频编码2数据包长度 + BYTE byRes[30]; +}NET_DVR_IP_VIEW_AUDIO_CFG,*LPNET_DVR_IP_VIEW_AUDIO_CFG; + +//IP分机呼叫对讲参数配置结构体 +typedef struct tagNET_DVR_IP_VIEW_CALL_CFG +{ + DWORD dwSize ; + BYTE byEnableAutoResponse; //使能自动应答,0-不使能,1-使能 + BYTE byAudoResponseTime; //自动应答时间,0-30秒 + BYTE byRes1[2]; + BYTE byEnableAlarmNumber1; //启动报警号码1,0-不启动,1-启动 + BYTE byRes2[3]; + BYTE byAlarmNumber1[MAX_NUMBER_LEN]; //呼叫号码1 + BYTE byEnableAlarmNumber2; //启动报警号码2,0-不启动,1-启动 + BYTE byRes3[3]; + BYTE byAlarmNumber2[MAX_NUMBER_LEN]; //呼叫号码2,呼叫号码1失败会尝试呼叫号码2 + BYTE byRes4[72]; +}NET_DVR_IP_VIEW_CALL_CFG,*LPNET_DVR_IP_VIEW_CALL_CFG; + +//通道图象结构 +//移动侦测(子结构)(按组方式扩展) +typedef struct +{ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwCurRecordChanNum; //当前实际已配置的关联录像通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - MAX_CHANNUM_V30-1有效,如果中间遇到0xffffffff,则后续无效*/ + BYTE byRes[64]; //保留 +}NET_DVR_RECORDCHAN, *LPNET_DVR_RECORDCHAN; + +//移动侦测(子结构)(9000扩展) +typedef struct +{ + BYTE byMotionScope[64][96]; /*侦测区域,0-96位,表示64行,共有96*64个小宏块,为1表示是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,oxff关闭*/ + BYTE byEnableHandleMotion; /* 是否处理移动侦测 0-否 1-是*/ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ + char reservedData; + NET_DVR_HANDLEEXCEPTION_V30 struMotionHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道*/ +}NET_DVR_MOTION_V30, *LPNET_DVR_MOTION_V30; + +//移动侦测(子结构) +typedef struct +{ + BYTE byMotionScope[18][22]; /*侦测区域,共有22*18个小宏块,为1表示改宏块是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ + BYTE byEnableHandleMotion; /* 是否处理移动侦测 */ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ + char reservedData; + NET_DVR_HANDLEEXCEPTION strMotionHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 +}NET_DVR_MOTION, *LPNET_DVR_MOTION; + +//遮挡报警(子结构)(9000扩展) 区域大小704*576 +typedef struct +{ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警 ,0-否,1-低灵敏度 2-中灵敏度 3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + NET_DVR_HANDLEEXCEPTION_V30 strHideAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 +}NET_DVR_HIDEALARM_V30, *LPNET_DVR_HIDEALARM_V30; +//遮挡报警(子结构) 区域大小704*576 +typedef struct +{ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警 ,0-否,1-低灵敏度 2-中灵敏度 3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + NET_DVR_HANDLEEXCEPTION strHideAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 +}NET_DVR_HIDEALARM, *LPNET_DVR_HIDEALARM; + +//信号丢失报警(子结构)(9000扩展) +typedef struct +{ + BYTE byEnableHandleVILost; /* 是否处理信号丢失报警 */ + NET_DVR_HANDLEEXCEPTION_V30 strVILostHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 +}NET_DVR_VILOST_V30, *LPNET_DVR_VILOST_V30; + +//信号丢失报警(子结构) +typedef struct +{ + BYTE byEnableHandleVILost; /* 是否处理信号丢失报警 */ + NET_DVR_HANDLEEXCEPTION strVILostHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 +}NET_DVR_VILOST, *LPNET_DVR_VILOST; + +//遮挡区域(子结构) +typedef struct +{ + WORD wHideAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAreaHeight; /*遮挡区域的高*/ +}NET_DVR_SHELTER, *LPNET_DVR_SHELTER; + +typedef struct +{ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255*/ + BYTE byHue; /*色调,0-255*/ +}NET_DVR_COLOR, *LPNET_DVR_COLOR; + +typedef struct +{ + BYTE byRed; //RGB颜色三分量中的红色 + BYTE byGreen; //RGB颜色三分量中的绿色 + BYTE byBlue; //RGB颜色三分量中的蓝色 + BYTE byRes; //保留 +}NET_DVR_RGB_COLOR, *LPNET_DVR_RGB_COLOR; + +//坐标值归一化,浮点数值为当前画面的百分比大小, 精度为小数点后三位 +//点坐标结构 +typedef struct tagNET_VCA_POINT +{ + float fX; // X轴坐标, 0.000~1 + float fY; //Y轴坐标, 0.000~1 +}NET_VCA_POINT, *LPNET_VCA_POINT; + +//通道图象结构(9000扩展) +typedef struct +{ + DWORD dwSize; + BYTE sChanName[NAME_LEN]; + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byReservedData[64];/*保留*/ + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //视频信号丢失报警 + NET_DVR_VILOST_V30 struVILost; + NET_DVR_VILOST_V30 struRes; /*保留*/ + // BYTE byRes1[328]; + //移动侦测 + NET_DVR_MOTION_V30 struMotion; + //遮挡报警 + NET_DVR_HIDEALARM_V30 struHideAlarm; + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ + NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; + //OSD + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* OSD的y坐标 */ + BYTE byOSDType; /* OSD类型(主要是年月日格式) */ + /* 0: XXXX-XX-XX 年月日 */ + /* 1: XX-XX-XXXX 月日年 */ + /* 2: XXXX年XX月XX日 */ + /* 3: XX月XX日XXXX年 */ + /* 4: XX-XX-XXXX 日月年*/ + /* 5: XX日XX月XXXX年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOSDType; /* OSD小时制:0-24小时制,1-12小时制 */ + BYTE byFontSize;//字体大小,16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) 3-48*48(中)/24*48(英) 4-24*24(中)/12*24(英) 5-96*96(中)/48*96(英) 6-128*128(中)/64*128(英) 7-80*80(中)/40*80(英) 8-112*112(中)/56*112(英) 0xff-自适应(adaptive) + BYTE byOSDColorType; //0-默认(黑白);1-自定义;2-勾边 + /*当对齐方式选择国标模式时,可以分别对右下角、左下角两个区域做字符叠加。 + 右下角区域: + 共支持6行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第0至第5个下标的值。叠加字符的方式为从下到上的方式。 + 左下角区域: + 共支持2行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第6和第7个下标的值。叠加字符的方式为从下到上的方式。 + */ + BYTE byAlignment;//对齐方式 0-自适应,1-右对齐, 2-左对齐,3-国标模式, 4-全部右对齐(包含叠加字符、时间以及标题等所有OSD字符),5-全部左对齐(包含叠加字符、时间以及标题等所有OSD字符) + BYTE byOSDMilliSecondEnable;//视频叠加时间支持毫秒;0~不叠加, 1-叠加 + NET_DVR_RGB_COLOR struOsdColor;//OSD颜色 + DWORD dwBoundary; //边界值,左对齐,右对齐以及国标模式的边界值,0-表示默认值,单位:像素 + NET_DVR_RGB_COLOR struOsdBkColor; //自定义OSD背景色 + BYTE byOSDBkColorMode; //OSD背景色模式,0-默认,1-自定义OSD背景色 + BYTE byUpDownBoundary; //上下最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byLeftRightBoundary; //左右最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byAngleEnabled;//OSD是否叠加俯仰角信息,0~不叠加, 1-叠加 + WORD wTiltAngleTopLeftX; /* 俯仰角信息显示位置的x坐标 */ + WORD wTiltAngleTopLeftY; /* 俯仰角信息显示位置的y坐标 */ + BYTE byRes[40]; +}NET_DVR_PICCFG_V30, *LPNET_DVR_PICCFG_V30; + +//通道图象结构SDK_V14扩展 +typedef struct +{ + DWORD dwSize; + BYTE sChanName[NAME_LEN]; + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255 */ + BYTE byHue; /*色调,0-255*/ + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //信号丢失报警 + NET_DVR_VILOST struVILost; + //移动侦测 + NET_DVR_MOTION struMotion; + //遮挡报警 + NET_DVR_HIDEALARM struHideAlarm; + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ + NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; + //OSD + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* OSD的y坐标 */ + BYTE byOSDType; /* OSD类型(主要是年月日格式) */ + /* 0: XXXX-XX-XX 年月日 */ + /* 1: XX-XX-XXXX 月日年 */ + /* 2: XXXX年XX月XX日 */ + /* 3: XX月XX日XXXX年 */ + /* 4: XX-XX-XXXX 日月年*/ + /* 5: XX日XX月XXXX年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOsdType; /* OSD小时制:0-24小时制,1-12小时制 */ +}NET_DVR_PICCFG_EX, *LPNET_DVR_PICCFG_EX; + +//通道图象结构(SDK_V13及之前版本) +typedef struct +{ + DWORD dwSize; + BYTE sChanName[NAME_LEN]; + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL*/ + BYTE byBrightness; /*亮度,0-255*/ + BYTE byContrast; /*对比度,0-255*/ + BYTE bySaturation; /*饱和度,0-255 */ + BYTE byHue; /*色调,0-255*/ + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 区域大小704*576 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //信号丢失报警 + NET_DVR_VILOST struVILost; + //移动侦测 + NET_DVR_MOTION struMotion; + //遮挡报警 + NET_DVR_HIDEALARM struHideAlarm; + //遮挡 区域大小704*576 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ + WORD wHideAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAreaHeight; /*遮挡区域的高*/ + //OSD + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 区域大小704*576 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* OSD的y坐标 */ + BYTE byOSDType; /* OSD类型(主要是年月日格式) */ + /* 0: XXXX-XX-XX 年月日 */ + /* 1: XX-XX-XXXX 月日年 */ + /* 2: XXXX年XX月XX日 */ + /* 3: XX月XX日XXXX年 */ + /* 4: XX-XX-XXXX 日月年*/ + /* 5: XX日XX月XXXX年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 闪烁,不透明 */ + /* 4: 不透明,不闪烁 */ + char reservedData2; +}NET_DVR_PICCFG, *LPNET_DVR_PICCFG; + +typedef enum _BITRATE_ENCODE_INDEX_ +{ + BITRATE_ENCODE_def = 0, + BITRATE_ENCODE_8kps = 1, + BITRATE_ENCODE_16kps = 2, + BITRATE_ENCODE_32kps = 3, + BITRATE_ENCODE_64kps = 4, + BITRATE_ENCODE_128kps = 5, + BITRATE_ENCODE_192kps = 6, + BITRATE_ENCODE_40kps = 7, + BITRATE_ENCODE_48kps = 8, + BITRATE_ENCODE_56kps = 9, + BITRATE_ENCODE_80kps = 10, + BITRATE_ENCODE_96kps = 11, + BITRATE_ENCODE_112kps = 12, + BITRATE_ENCODE_144kps = 13, + BITRATE_ENCODE_160kps = 14, + BITRATE_ENCODE_224kps = 15, + BITRATE_ENCODE_256kps = 16, + BITRATE_ENCODE_320kps = 17 +}BITRATE_ENCODE_INDEX; + +//码流压缩参数(子结构)(9000扩展) +typedef struct +{ + BYTE byStreamType; //码流类型 0-视频流, 1-复合流, 表示事件压缩参数时最高位表示是否启用压缩参数 + /*分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, + 4-2CIF 5(保留), 6-QVGA(320*240), 7-QQVGA(160*120), + 12-384*288 13-576*576, + 16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA(800*600), 19-HD720p(1280*720), + 20-XVGA, 21-HD900p, 22-1360*1024, 23-1536*1536, + 24-1920*1920, 27-HD1080i, + 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048, + 32-2448*1200, 33-2448*800, 34-XGA(1024*768), 35-SXGA(1280*1024), + 36-WD1(960*576/960*480), 37-1080i, 38-WSXGA(1440*900), 39-HD_F(1920*1080/1280*720), + 40-HD_H(1920*540/1280*360), 41-HD_Q(960*540/630*360), 42-2336*1744, 43-1920*1456, + 44-2592*2048, 45-3296*2472, 46-1376*768, 47-1366*768, + 48-1360*768, 49-WSXGA+, 50-720*720, 51-1280*1280, + 52-2048*768, 53-2048*2048, 54-2560*2048, 55-3072*2048, + 56-2304*1296 57-WXGA(1280*800), 58-1600*600, 59-1600*900, + 60-2752*2208, 61-保留, 62-4000*3000, 63-4096*2160, + 64-3840*2160, 65-4000*2250, 66-3072*1728, 67-2592*1944, + 68-2464*1520, 69-1280*1920, 70-2560*1440, 71-1024*1024, + 72-160*128, 73-324*240, 74-324*256, 75-336*256, + 76-640*512, 77-2720*2048, 78-384*256, 79-384*216, + 80-320*256, 81-320*180, 82-320*192, 83-512*384, + 84-325*256, 85-256*192, 86-640*360, 87-1776x1340, + 88-1936x1092, 89-2080x784, 90-2144x604, 91-1920*1200, + 92-4064*3040, 93-3040*3040, 94-3072*2304, 95-3072*1152, + 96-2560*2560, 97-2688*1536, 98-2688*1520, 99-3072*3072, + 100-3392*2008, 101-4000*3080, 102-960*720, 103-1024*1536, + 104-704*1056, 105-352*528, 106-2048*1530, 107-2560*1600, + 108-2800*2100, 109-4088*4088, 110-4000*3072, 111-960*1080(1080p Lite) + 112-640*720(half 720p), 113-640*960, 114-320*480, 115-3840*2400, + 116-3840*1680, 117-2560*1120, 118-704*320, 119-1200*1920, + 120-480*768, 121-768*480, 122-320*512, 123-512*320, + 124-4096*1800, 125-1280*560, 126-2400*3840, 127-480*272, + 128-512*272, 129-2592*2592, 130-1792*2880, 131-1600*2560, + 132-2720*1192, 133-3MP(1920*1536/2048*1536), 134-5MP(2560*1944), + 135-2560*960, 136-2064*1544 137-4096*1200, + 138-3840*1080 139-2720*800 140-512*232 141-704*200, + 142-512*152, 143-2048*896 144-2048*600 145-1280*376, + 146-2592*1520, 147-2592*1536, 148-3072*8192, 149-768*2048, + 150-8208*3072, 151-4096*1536, 152-6912*2800, 153-3456*1400 + 154-480*720, 155-800*450, 156-480*270, 157-2560*1536, + 160-3264*2448, 161-288*320, 162-144*176, 163-480*640, + 164-240*320, 165-120*160, 166-576*720, 167-720*1280, + 168-576*960, 169-2944*1656, 170-432*240, 171-2160*3840, + 172-1080*1920, 173-7008*1080, 174-3504*540, 175-1752*270, + 176-876*135, 177-4096*1440, 178-4096*1080, 179-1536*864, + 180-180*240, 181-360*480, 182-540*720, 183-720*960, + 184-960*1280, 185-1080*1440, + 186-3200*1800, 187-1752*272, 188-872*136, 189-1280*1440, + 190-3520*544, 191-1728*256, 192-864*128, 193-5470*3684, + 194-2560*750, 195-1600*480, 196-1024*300, 197-848*480, + 198-8160*3616, 199-8160*2304, 200-4064*2560, 201-1400*1050, + 202-2688*1512, 203-704*288, 204-1560*656, 205-3072*1280, + 206-4320*1808, 207-6120*2560, 208-1280*960, 209-3000*3000, + 210-2032*3616, 211-7680*4320, 212-5760*3240, 213-3264*1836, + 214-2712*1536, 215-1080*720(占位,未测试), 216-360x640(占位,未测试),217-1440*812, + 218-8160*2416, 219-5760*1712, 220-4080*1200, 221-6144*2560, + 222-1568*656, 223-4096*1808, 224-2720*1200, 225-2896*848 + 226-2048*608 227-3840*1120 228-2720*784 229-1920*560, + 230-1360*400 231-704*208 232-496*144 233-352*128, + 234-512*240 235-512*160 236-368*128 237-256*128 + 238-2048*592 239-1456*416 240-1024*304 241-1280*368 + 242-912*256 243-640*192 244-252*112 (未使用) 245-(576*704[P制]/480*704[N制]) + + 254-表示超出该字段范围,使用NET_DVR_MULTI_STREAM_COMPRESSIONCFG中的dwResolution表示分辨率 + 0xff-Auto(使用当前码流分辨率) + 256-3888*1696 257-2784*1200 258-496*224 259-352*160 + 260-912*400 261-640*288 262-1456*640 263-1024*448 + 264-2896*1280 265-2544*1080 266-2736*768 267-1920*544 + 268-3840*1696 269-2880*848 270-5424*2400 271-5520*1600 + 272-848*376 273-912*272 274-1360*600 275-1456*432 + 276-2736*1200 277-5760*1696 278-8160*2400 279-5520*2400 + 280-4608*2592 281-4944*3280 282-6016*4008 283-720*480 + 284-3200*2400 285-2784*800 286-1968*848 287-1392*608 + 288-2736*1184 289-1920*848 290-2560*2880 291-1944*1212 + 292-1920*2400 293-384*384 294-768*768 295-4800*2688 + 296-6480*1080 297-8640*1440 298-4800*800 299-6720*1200 + 300-3600*600 301-4800*840 302-2400*400 303-3072*540 + 304-1440*810 305-1920*320 306-2688*480 307-1440*240 + 308-4800*1792 309-3360*1264 310-2304*880 311-3840*1440 + 312-2688*1008 313-1824*704 314-1248*496 315-1920*720 + 316-1344*496 317-912*336 318-1280*480 319-864*336 + 320-576*224 321-2704*1008 322-1904*704 323-1808*672 + 324-1264*464 325-944*336 326-2400*1344 327-2032*1440 + 328-4064*1792 329-304*112 330-960*360 331-672*240 + 332-464*160 333-896*336 334-624*224 335-640*240 + 336-448*160 337-4976*1452 338-1968*560 339-2736*784 + 340-3888*1136 341-6120*1800 342-4320*1280 343-3056*896 + 344-1776*528 345-1392*400 346-7256*1520 347-512*288 + 348-1936*1210 349-640*400 350-2688*1792 351-2464*2056 + 352-2720*1600 353-4800*1600 354-3600*1200 355-未定义 + 356-2400*800 357-1200*400 358-4096*3008 359-7680*4096 + 360-1080*1520 361-6656*3744 362-5120*1400 363-2560*704 + 364-2688*3040 365-1280*352 366-3376*1008 367-1688*504 + 368-5120*1440 369-1920*2160 370-4080*1808 371-4080*1152 + 372-2688*3888 373-3840*2880 374-2464*3520 375-4416*1696 + 376-1408*540 377-3456*1080 378-1728*540 379-704*1152 + 380-1408*1152 381-5120*2880 382-720*576 383-3984*1168 + 384-1920*1440 385-3840*4096 386-1920*536 387-1536*432 + 388-3072*864 389-1440*1080 390-720*540 391-960*544 + 392-720*544 393-5430*3054 394-8000*6000 395-6560*3690 + 396-2688*1944 397-960*272 398-960*368 399-960*304 + 400-3632*1632 401-1200*536 402-960*432 403-1920*3264 + 404-3040*1368 405-1704*2896 406-768*216 407-360*272 + 408-960*536 409-720*536 410-848*240 411-368*272 + 412-4096*2460 413-536*240 414-2560*1168 415-1920*864 + 416-752*336 417-752*416 418-560*416 419-592*272 + 420-448*336 421-832*464 422-624*464 423-672*304 + 424-672*368 425-496*368 426-832*368 427-592*336 + 428-8032*6032 429-4096*2464 430-8128*2304 431-1480*1664 + 432-1280*1944 433-1024*600 434-1520*2736 435-5328*3040 + 436-192*256 437-8112*2304 438-720x576 439-704*576 + 440-2560*480 441-2048*384 442-8160*3922 443-6128*1800 + 444-3680*1656 445-2048*1152 446-4096*576 447-2048*288 + 448-240*240 449-1200*900 450-8112*2416 451-5472*1600 + 452-2880*2160 453-1920*540 454-4032*1200 455-3792*1120 + 456-2688*794 457-4096*768 + */ + BYTE byResolution; + BYTE byBitrateType; //码率类型 0:变码率, 1:定码率,0xfe:自动,和源一致 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差,自动,和源一致 + /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K + 24-3072K 25-4096K 26-8192K 27-16384K (28-30 Reserved) 31-12288K*/ + DWORD dwVideoBitrate; + DWORD dwVideoFrameRate; //帧率 0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20; V2.0版本中新加14-15; 15-18; 16-22; + //17-25;18-30;19-35;20-40;21-45;22-50;23-55;24-60;25-3;26-5;27-7;28-9;29-100; 30-120;31-24;32-48,33-8.3,0xfffffffe-自动,和源一致 + WORD wIntervalFrameI; //I帧间隔,0xfffe 自动,和源一致 + BYTE byIntervalBPFrame;//0-BBP帧; 1-BP帧; 2-单P帧(2006-08-11 增加单P帧的配置接口,可以改善实时流延时问题);0xfe-自动,和源一致 + BYTE byres1; //保留 + BYTE byVideoEncType; //视频编码类型 0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,8-MPEG2,9-SVAC, 10-标准h265, 0xfe-自动(和源一致),0xff-无效 + BYTE byAudioEncType; //音频编码类型 0-G722;1-G711_U;2-G711_A;5-MP2L2;6-G276;7-AAC;8-PCM;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;0xff-无效 + BYTE byVideoEncComplexity; //视频编码复杂度,0-低,1-中,2高,0xfe:自动,和源一致 + BYTE byEnableSvc; //0 - 不启用SVC功能;1- 启用SVC功能; 2-自动启用SVC功能 + BYTE byFormatType; //封装类型,1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP,9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byAudioBitRate; //音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byStreamSmooth;//码流平滑 1~100(1等级表示清晰(Clear),100表示平滑(Smooth)) + BYTE byAudioSamplingRate;//音频采样率0-默认,1- 16kHZ, 2-32kHZ, 3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE bySmartCodec;///*bit0-快速编码 0-关闭,1-打开,bit1 - 低码率模式 0 - 关闭,1 - 打开*/ + BYTE byDepthMapEnable;// 深度图使能开关,0-关闭,1-打开;如果开启后,第二通道的子码流(双目)的视频参数都不能配置,默认输出 960*540 的深度图; + //平均码率(在SmartCodec使能开启下生效), 0-0K 1-16K 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K 24-2560K 25-3072K 26-4096K 27-5120K 28-6144K 29-7168K 30-8192K + //最高位(15位)置成1表示是自定义码流, 0-14位表示码流值(MIN- 0 K)。 + WORD wAverageVideoBitrate; +}NET_DVR_COMPRESSION_INFO_V30, *LPNET_DVR_COMPRESSION_INFO_V30; + +//通道压缩参数(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_COMPRESSION_INFO_V30 struNormHighRecordPara; //录像 对应8000的普通 + NET_DVR_COMPRESSION_INFO_V30 struRes;//保留 char reserveData[28]; + NET_DVR_COMPRESSION_INFO_V30 struEventRecordPara; //事件触发压缩参数 + NET_DVR_COMPRESSION_INFO_V30 struNetPara; //网传(子码流) +}NET_DVR_COMPRESSIONCFG_V30, *LPNET_DVR_COMPRESSIONCFG_V30; + +//码流压缩参数(子结构) +typedef struct +{ + BYTE byStreamType; //码流类型0-视频流,1-复合流,表示压缩参数时最高位表示是否启用压缩参数 + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(车载专用) + BYTE byBitrateType; //码率类型0:变码率,1:定码率,2:低码率 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差 + DWORD dwVideoBitrate; /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K + 24-2560K 25-3072K 26-4096K 27-5120K 28-6144K 29-7168K 30-8192K 31-12288K*/ + DWORD dwVideoFrameRate; //帧率 0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20; +}NET_DVR_COMPRESSION_INFO, *LPNET_DVR_COMPRESSION_INFO; + +//通道压缩参数 +typedef struct +{ + DWORD dwSize; + NET_DVR_COMPRESSION_INFO struRecordPara; //录像/事件触发录像 + NET_DVR_COMPRESSION_INFO struNetPara; //网传/保留 +}NET_DVR_COMPRESSIONCFG, *LPNET_DVR_COMPRESSIONCFG; + +//码流压缩参数(子结构)(扩展) 增加I帧间隔 +typedef struct +{ + BYTE byStreamType; //码流类型0-视频流, 1-复合流 + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF, 5-2QCIF(352X144)(车载专用) + BYTE byBitrateType; //码率类型0:变码率,1:定码率,2:低码率 + BYTE byPicQuality; //图象质量 0-最好 1-次好 2-较好 3-一般 4-较差 5-差 + DWORD dwVideoBitrate; /*视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K + 24-3072K 25-4096K 26-8192K 27-16384K (28-30 Reserved) 31-12288K*/ + DWORD dwVideoFrameRate; //帧率 0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20, //V2.0增加14-15, 15-18, 16-22; + WORD wIntervalFrameI; //I帧间隔 + //2006-08-11 增加单P帧的配置接口,可以改善实时流延时问题 + BYTE byIntervalBPFrame;//0-BBP帧; 1-BP帧; 2-单P帧 + BYTE byRes; +}NET_DVR_COMPRESSION_INFO_EX, *LPNET_DVR_COMPRESSION_INFO_EX; + +//通道压缩参数(扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_COMPRESSION_INFO_EX struRecordPara; //录像 + NET_DVR_COMPRESSION_INFO_EX struNetPara; //网传 +}NET_DVR_COMPRESSIONCFG_EX, *LPNET_DVR_COMPRESSIONCFG_EX; + + +//时间段录像参数配置(子结构) +typedef struct +{ + NET_DVR_SCHEDTIME struRecordTime; + BYTE byRecordType; //0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警, 5:命令触发, 6: 智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-所有报警,14-智能交通事件,15越界侦测,16区域入侵侦测,17音频异常侦测 + char reservedData[3]; +}NET_DVR_RECORDSCHED, *LPNET_DVR_RECORDSCHED; + +//全天录像参数配置(子结构) +typedef struct +{ + WORD wAllDayRecord; /* 是否全天录像 0-否 1-是*/ + BYTE byRecordType; /* 录象类型 0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, 6: 智能录像, + 10-PIR报警,11-无线报警,12-呼救报警,13-移动|报警输入|PIR|无线报警|呼救报警,14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常, + 18-场景变更侦测,19-智能侦测(越界侦测|区域入侵|进入区域|离开区域|人脸识别),20-人脸侦测, 21-POS录像*/ + char reservedData; +}NET_DVR_RECORDDAY, *LPNET_DVR_RECORDDAY; + +//通道录像参数配置(9000扩展) +typedef struct +{ + DWORD dwSize; + DWORD dwRecord; /*是否录像 0-否 1-是*/ + NET_DVR_RECORDDAY struRecAllDay[MAX_DAYS]; + NET_DVR_RECORDSCHED struRecordSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + DWORD dwRecordTime; /* 录象延时长度 0-5秒, 1-10秒, 2-30秒, 3-1分钟, 4-2分钟, 5-5分钟, 6-10分钟*/ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ + DWORD dwRecorderDuration; /* 录像保存的最长时间 */ + BYTE byRedundancyRec; /*是否冗余录像,重要数据双备份:0/1*/ + BYTE byAudioRec; /*录像时复合流编码时是否记录音频数据:国外有此法规*/ + BYTE byStreamType; // 0-主码流,1-子码流,2-主子码流同时 3-三码流 + BYTE byPassbackRecord; // 0:不回传录像 1:回传录像 + WORD wLockDuration; // 录像锁定时长,单位小时 0表示不锁定,0xffff表示永久锁定,录像段的时长大于锁定的持续时长的录像,将不会锁定 + BYTE byRecordBackup; // 0:录像不存档 1:录像存档 + BYTE bySVCLevel; //SVC抽帧类型:0-不抽,1-抽二分之一 2-抽四分之三 + BYTE byRecordManage; //录像调度,0-启用, 1-不启用; 启用时进行定时录像;不启用时不进行定时录像,但是录像计划仍在使用,比如移动侦测,回传都还在按这条录像计划进行 + BYTE byExtraSaveAudio; //音频单独另存0-非单独另存,1-单独另存 + /*开启智能录像功能后,算法库是自动启用智能录像算法,其功能为若录像中无目标出现,会降低码率、帧率,而目标出现时又恢复全码率及帧率,从而达到减少资源消耗的目的*/ + BYTE byIntelligentRecord;//是否开启智能录像功能 0-否 1-是 + BYTE byReserve; +}NET_DVR_RECORD_V30, *LPNET_DVR_RECORD_V30; + +//时间段录像参数配置(子结构) +typedef struct +{ + NET_DVR_SCHEDTIME struRecordTime; + /*录像类型,0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, + 6-智能报警录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件, + 15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测, + 19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测),20-人脸侦测,21-POS录像, + 22-进入区域侦测, 23-离开区域侦测,24-徘徊侦测,25-人员聚集侦测,26-快速运动侦测,27-停车侦测, + 28-物品遗留侦测,29-物品拿取侦测,30-火点检测,31-防破坏检测,32-打架斗殴事件(司法),33-起身事件(司法), 34-瞌睡事件(司法) + 35-船只检测, 36-测温预警,37-测温报警,38-温差报警,39-离线测温报警,40-防区报警,41-紧急求助,42-业务咨询,43-起身检测,44-折线攀高,45-如厕超时,46-人脸抓拍,47-非法摆摊,48-目标抓拍, + 49-剧烈运动,50离岗检测,51-起立,52人数变化 53-废气排放显示 54-灰度报警*/ + BYTE byRecordType; + BYTE byRes[31]; +}NET_DVR_RECORDSCHED_V40, *LPNET_DVR_RECORDSCHED_V40; + +//全天录像参数配置(子结构) +typedef struct +{ + BYTE byAllDayRecord; /* 是否全天录像 0-否 1-是*/ + /*录像类型,0:定时录像,1:移动侦测,2:报警录像,3:动测|报警,4:动测&报警 5:命令触发, + 6-智能报警录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件, + 15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测, + 19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测),20-人脸侦测,21-POS录像, + 22-进入区域侦测, 23-离开区域侦测,24-徘徊侦测,25-人员聚集侦测,26-快速运动侦测,27-停车侦测, + 28-物品遗留侦测,29-物品拿取侦测,30-火点检测,31-防破坏检测,32-打架斗殴事件(司法),33-起身事件(司法), 34-瞌睡事件(司法) + 35-船只检测, 36-测温预警,37-测温报警,38-温差报警,39-离线测温报警,40-防区报警,41-紧急求助,42-业务咨询,43-起身检测,44-折线攀高,45-如厕超时,46-人脸抓拍,47-非法摆摊,48-目标抓拍, + 49-剧烈运动,50离岗检测,51-起立,52人数变化 53-废气排放显示 54-灰度报警*/ + BYTE byRecordType; + BYTE byRes[62]; +}NET_DVR_RECORDDAY_V40, *LPNET_DVR_RECORDDAY_V40; + +typedef struct +{ + DWORD dwSize; + DWORD dwRecord; /*是否录像 0-否 1-是*/ + NET_DVR_RECORDDAY_V40 struRecAllDay[MAX_DAYS]; + NET_DVR_RECORDSCHED_V40 struRecordSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + DWORD dwRecordTime; /* 录象延时长度 0-5秒, 1-10秒, 2-30秒, 3-1分钟, 4-2分钟, 5-5分钟, 6-10分钟*/ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ + DWORD dwRecorderDuration; /* 录像保存的最长时间 */ + BYTE byRedundancyRec; /*是否冗余录像,重要数据双备份:0/1*/ + BYTE byAudioRec; /*录像时复合流编码时是否记录音频数据:国外有此法规*/ + BYTE byStreamType; // 0-主码流,1-子码流,2-主子码流同时 3-三码流 + BYTE byPassbackRecord; // 0:不回传录像 1:回传录像 + WORD wLockDuration; // 录像锁定时长,单位小时 0表示不锁定,0xffff表示永久锁定,录像段的时长大于锁定的持续时长的录像,将不会锁定 + BYTE byRecordBackup; // 0:录像不存档 1:录像存档 + BYTE bySVCLevel; //SVC抽帧类型:0-不抽,1-抽二分之一 2-抽四分之三 + BYTE byRecordManage; //录像调度,0-启用, 1-不启用; 启用时进行定时录像;不启用时不进行定时录像,但是录像计划仍在使用,比如移动侦测,回传都还在按这条录像计划进行 + BYTE byExtraSaveAudio;//音频单独存储 + /*开启智能录像功能后,算法库是自动启用智能录像算法,其功能为若录像中无目标出现,会降低码率、帧率,而目标出现时又恢复全码率及帧率,从而达到减少资源消耗的目的*/ + BYTE byIntelligentRecord;//是否开启智能录像功能 0-否 1-是 + BYTE byRes[125]; +}NET_DVR_RECORD_V40, *LPNET_DVR_RECORD_V40; + +//通道录像参数配置 +typedef struct +{ + DWORD dwSize; + DWORD dwRecord; /*是否录像 0-否 1-是*/ + NET_DVR_RECORDDAY struRecAllDay[MAX_DAYS]; + NET_DVR_RECORDSCHED struRecordSched[MAX_DAYS][MAX_TIMESEGMENT]; + DWORD dwRecordTime; /* 录象时间长度 */ + DWORD dwPreRecordTime; /* 预录时间 0-不预录 1-5秒 2-10秒 3-15秒 4-20秒 5-25秒 6-30秒 7-0xffffffff(尽可能预录) */ +}NET_DVR_RECORD, *LPNET_DVR_RECORD; + +//云台协议表结构配置 +typedef struct +{ + DWORD dwType; /*解码器类型值*/ + BYTE byDescribe[DESC_LEN]; /*解码器的描述符,和8000中的一致*/ +}NET_DVR_PTZ_PROTOCOL; + +typedef struct +{ + DWORD dwSize; + NET_DVR_PTZ_PROTOCOL struPtz[PTZ_PROTOCOL_NUM];/*最大200中PTZ协议*/ + DWORD dwPtzNum; /*有效的ptz协议数目,从0开始(即计算时加1)*/ + BYTE byRes[8]; +}NET_DVR_PTZCFG, *LPNET_DVR_PTZCFG; + +/***************************云台类型(end)******************************/ +typedef struct tagNET_DVR_SERIALSTART_V40 //透明通道 +{ + DWORD dwSize; //结构体大小 + DWORD dwSerialType; //串口号(1-232串口,2-485串口) + BYTE bySerialNum; //串口编号 + BYTE byRes[255]; +}NET_DVR_SERIALSTART_V40,*LPNET_DVR_SERIALSTART_V40; + +//通道解码器(云台)参数配置 扩展 +typedef struct tagNET_DVR_DECODERCFG_V40 +{ + DWORD dwSize; //结构体大小 + DWORD dwBaudRate; //波特率 0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit; //数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit; //停止位 0-1位,1-2位 + BYTE byParity; //校验 0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol; //0-无,1-软流控,2-硬流控 + WORD wDecoderType; //解码器类型*/ + WORD wDecoderAddress; //解码器地址,0-255 + BYTE bySetPreset [MAX_PRESET_V30]; //预置点是否设置,0-没有设置,1-设置 + BYTE bySetCruise[MAX_CRUISE_V30]; //巡航是否设置: 0-没有设置,1-设置 + BYTE bySetTrack [MAX_TRACK_V30]; //是否设置,0-没有设置,1-设置 + BYTE bySerialNO; //串口编号 + BYTE byWorkMode; /*工作模式, 1-矩阵串口控制,2-屏幕控制,3-透明通道模式 4-PPP模式 5-控制台模式 6-串口直连 7-键盘控制 8-布防板管理 9-控制云台 12-LED显示,13-触发抓拍数据传输*/ + BYTE byRes[254]; //保留 +}NET_DVR_DECODERCFG_V40,*LPNET_DVR_DECODERCFG_V40; + +typedef struct tagNET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO +{ + float fMaxTemperature;//最高温,精确到小数点后一位 + float fMinTemperature;//最低温,精确到小数点后一位 + float fAverageTemperature;//平均温,精确到小数点后一位 + NET_VCA_POINT struHighestPoint; //最高温度位置坐标 + NET_VCA_POINT struLowestPoint; //最低温度位置坐标 + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 + BYTE byRes[15]; +}NET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO, *LPNET_DVR_THERMOMETRYRULE_TEMPERATURE_INFO; + +//通道解码器(云台)参数配置(9000扩展) +typedef struct +{ + DWORD dwSize; + DWORD dwBaudRate;//波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + WORD wDecoderType;//解码器类型, 从0开始,对应ptz协议列表从NET_DVR_IPC_PROTO_LIST得到 + WORD wDecoderAddress; /*解码器地址:0 - 255*/ + BYTE bySetPreset[MAX_PRESET_V30]; /* 预置点是否设置,0-没有设置,1-设置*/ + BYTE bySetCruise[MAX_CRUISE_V30]; /* 巡航是否设置: 0-没有设置,1-设置 */ + BYTE bySetTrack[MAX_TRACK_V30]; /* 是否设置,0-没有设置,1-设置*/ +}NET_DVR_DECODERCFG_V30, *LPNET_DVR_DECODERCFG_V30; + +//通道解码器(云台)参数配置 +typedef struct +{ + DWORD dwSize; + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit; // 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit; // 停止位 0-1位,1-2位; + BYTE byParity; // 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol; // 0-无,1-软流控,2-硬流控 + WORD wDecoderType; //解码器类型 NET_DVR_IPC_PROTO_LIST中得到 + WORD wDecoderAddress; /*解码器地址:0 - 255*/ + BYTE bySetPreset[MAX_PRESET]; /* 预置点是否设置,0-没有设置,1-设置*/ + BYTE bySetCruise[MAX_CRUISE]; /* 巡航是否设置: 0-没有设置,1-设置 */ + BYTE bySetTrack[MAX_TRACK]; /* 是否设置,0-没有设置,1-设置*/ +}NET_DVR_DECODERCFG, *LPNET_DVR_DECODERCFG; + +//ppp参数配置(子结构) +typedef struct +{ + NET_DVR_IPADDR struRemoteIP; //远端IP地址 + NET_DVR_IPADDR struLocalIP; //本地IP地址 + char sLocalIPMask[16]; //本地IP地址掩码 + BYTE sUsername[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byPPPMode; //PPP模式, 0-主动,1-被动 + BYTE byRedial; //是否回拨 :0-否,1-是 + BYTE byRedialMode; //回拨模式,0-由拨入者指定,1-预置回拨号码 + BYTE byDataEncrypt; //数据加密,0-否,1-是 + DWORD dwMTU; //MTU + char sTelephoneNumber[PHONENUMBER_LEN]; //电话号码 +}NET_DVR_PPPCFG_V30, *LPNET_DVR_PPPCFG_V30; + +//ppp参数配置(子结构) +typedef struct +{ + char sRemoteIP[16]; //远端IP地址 + char sLocalIP[16]; //本地IP地址 + char sLocalIPMask[16]; //本地IP地址掩码 + BYTE sUsername[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byPPPMode; //PPP模式, 0-主动,1-被动 + BYTE byRedial; //是否回拨 :0-否,1-是 + BYTE byRedialMode; //回拨模式,0-由拨入者指定,1-预置回拨号码 + BYTE byDataEncrypt; //数据加密,0-否,1-是 + DWORD dwMTU; //MTU + char sTelephoneNumber[PHONENUMBER_LEN]; //电话号码 +}NET_DVR_PPPCFG, *LPNET_DVR_PPPCFG; + +//RS232串口参数配置(9000扩展) +typedef struct +{ + DWORD dwBaudRate; /*波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k;*/ + BYTE byDataBit; /* 数据有几位 0-5位,1-6位,2-7位,3-8位 */ + BYTE byStopBit; /* 停止位 0-1位,1-2位 */ + BYTE byParity; /* 校验 0-无校验,1-奇校验,2-偶校验 */ + BYTE byFlowcontrol; /* 0-无,1-软流控,2-硬流控 */ + DWORD dwWorkMode; //工作模式,0-232串口用于PPP拨号,1-232串口用于参数控制,2-透明通道 3- ptz模式,审讯温湿度传感器, 4-报警盒模式 5-矩阵串口控制 6-屏幕控制 7-串口直连 8-键盘控制 9-布防板管理 10-控制云台 +}NET_DVR_SINGLE_RS232; + +typedef struct tagNET_DVR_USB_RS232 +{ + DWORD dwBaudRate; /*波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k;*/ + BYTE byDataBit; /* 数据有几位 0-5位,1-6位,2-7位,3-8位 */ + BYTE byStopBit; /* 停止位 0-1位,1-2位 */ + BYTE byParity; /* 校验 0-无校验,1-奇校验,2-偶校验 */ + BYTE byFlowcontrol; /* 0-无,1-软流控,2-硬流控 */ + BYTE byVirtualSerialPort; //虚拟串口编号 + BYTE byRes[3]; +}NET_DVR_USB_RS232,*LPNET_DVR_USB_RS232; + +//RS232串口参数配置(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_SINGLE_RS232 struRs232[MAX_SERIAL_PORT];/*注意:此结构修改了,原来是单个结构,现在修改为了数组结构*/ + NET_DVR_PPPCFG_V30 struPPPConfig; +}NET_DVR_RS232CFG_V30, *LPNET_DVR_RS232CFG_V30; + +//RS232串口参数配置 +typedef struct +{ + DWORD dwSize; + DWORD dwBaudRate;//波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + DWORD dwWorkMode;// 工作模式,0-窄带传输(232串口用于PPP拨号),1-控制台(232串口用于参数控制),2-透明通道 + NET_DVR_PPPCFG struPPPConfig; +}NET_DVR_RS232CFG, *LPNET_DVR_RS232CFG; + + +typedef struct +{ + DWORD dwEnablePresetChan; /*启用预置点的通道, 0xfffffff表示不调用预置点*/ + DWORD dwPresetPointNo; /*调用预置点通道对应的预置点序号, 0xfffffff表示不调用预置点。*/ +}NET_DVR_PRESETCHAN_INFO, LPNET_DVR_PRESETCHAN_INFO; + +typedef struct +{ + DWORD dwEnableCruiseChan; /*启用巡航的通道*/ + DWORD dwCruiseNo; /*巡航通道对应的巡航编号, 0xfffffff表示无效*/ +}NET_DVR_CRUISECHAN_INFO, LPNET_DVR_CRUISECHAN_INFO; + +typedef struct +{ + DWORD dwEnablePtzTrackChan; /*启用云台的通道*/ + DWORD dwPtzTrackNo; /*云台通道对应的编号, 0xfffffff表示无效*/ +}NET_DVR_PTZTRACKCHAN_INFO, LPNET_DVR_PTZTRACKCHAN_INFO; + +typedef struct tagNET_DVR_PTZ_NOTIFICATION_COND +{ + DWORD dwSize; + /* + 0-facedetection, + 1-vehicleDetection, + 2-scenechangedetection, + 3-LineDetection, + 4-regionEntrance, + 5-regionExiting, + 6-loitering, + 7-group, + 8-rapidMove, + 9-parking, + 10-unattendedBaggage, + 11-attendedBaggage, + 12-audioDetection, + 13-PIR, + 14-defocusDetection + 15-temperature, + 16-fireDetection, + 17-thermometry, + 18-shipsDetection + 19-fieldDetection + 20-blockListFaceContrast + 21-allowListFaceContrast + 22- humanRecognition + 23- faceContrast + */ + WORD byEventType; + BYTE byRes[2]; + DWORD dwChannel; + BYTE byRes1[128]; +}NET_DVR_PTZ_NOTIFICATION_COND, *LPNET_DVR_PTZ_NOTIFICATION_COND; + +typedef struct tagNET_DVR_PTZ_NOTIFICATION_CFG +{ + DWORD dwSize; + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息(关联联动类型 ptz) + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息(关联联动类型 ptz) + DWORD dwEnablePtzTrackChanNum; //当前已启用云台的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息(关联联动类型 ptz) + BYTE byRes1[1024]; +}NET_DVR_PTZ_NOTIFICATION_CFG, *LPNET_DVR_PTZ_NOTIFICATION_CFG; + + +typedef struct tagNET_DVR_PTZ_NOTIFICATION +{ + DWORD dwSize; + /* + 0-facedetection, + 1-vehicleDetection, + 2-scenechangedetection, + 3-LineDetection, + 4-regionEntrance, + 5-regionExiting, + 6-loitering, + 7-group, + 8-rapidMove, + 9-parking, + 10-unattendedBaggage, + 11-attendedBaggage, + 12-audioDetection, + 13-PIR, + 14-defocusDetection, + 15-temperature, + 16-fireDetection, + 17-thermometry, + 18-shipsDetection + 19-fieldDetection + 20-blockListFaceContrast + 21-allowListFaceContrast + 22- humanRecognition + */ + WORD byEventType; + BYTE byRes[62]; + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息(关联联动类型 ptz) + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息(关联联动类型 ptz) + DWORD dwEnablePtzTrackChanNum; //当前已启用云台的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息(关联联动类型 ptz) + BYTE byRes1[1024]; +}NET_DVR_PTZ_NOTIFICATION, *LPNET_DVR_PTZ_NOTIFICATION; + +#define NET_SDK_MAX_EVENT_NUM 64 //组合事件最大支持个数 + +//报警输入参数配置(256路NVR扩展) +typedef struct tagNET_DVR_ALARMINCFG_V40 +{ + DWORD dwSize; + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 + BYTE byInputType; //输入类型 0-开关量方式 1-信号量方式 + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + /*0x2000:短信报警*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOutChanNum; //触发的报警输出通道数 实际支持数 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //触发报警通道 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwCurRecordChanNum; //当前实际已配置的关联录像通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwCurRecordChanNum -1有效,如果中间遇到0xffffffff,则后续无效*/ + DWORD dwMaxEnablePtzCtrlNun; //最大可启用的云台控制总数(只读) + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息 + BYTE byPresetDurationTime[MAX_CHANNUM_V40];//预置点停留时间 范围0-20s,默认10s; + BYTE byRes2[4]; /*保留*/ + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息 + DWORD dwEnablePtzTrackChanNum; //当前已启用巡航的通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息 + WORD wEventType[NET_SDK_MAX_EVENT_NUM/*64*/]; /*组合事件类型,每一个位对应一个事件类型*/ + BYTE byRes[128]; +}NET_DVR_ALARMINCFG_V40, *LPNET_DVR_ALARMINCFG_V40; + +//报警输入参数配置(9000扩展) +typedef struct +{ + DWORD dwSize; + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 + BYTE byInputType; //输入类型 0-开关量方式 1-信号量方式 + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byEnablePreset[MAX_CHANNUM_V30]; /* 是否调用预置点 0-否,1-是*/ + BYTE byPresetNo[MAX_CHANNUM_V30]; /* 调用的云台预置点序号,一个报警输入可以调用多个通道的云台预置点, 0xff表示不调用预置点。*/ + BYTE byRes2[192]; /*保留*/ + BYTE byEnableCruise[MAX_CHANNUM_V30]; /* 是否调用巡航 0-否,1-是*/ + BYTE byCruiseNo[MAX_CHANNUM_V30]; /* 巡航 */ + BYTE byEnablePtzTrack[MAX_CHANNUM_V30]; /* 是否调用 0-否,1-是*/ + BYTE byPTZTrack[MAX_CHANNUM_V30]; /* 调用的云台的序号 */ + BYTE byRes3[16]; +}NET_DVR_ALARMINCFG_V30, *LPNET_DVR_ALARMINCFG_V30; + + +typedef struct tagNET_DVR_ALARMINFO_FIXED_HEADER +{ + /*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-写硬盘出错,6-遮挡报警, + 7-制式不匹配, 8-非法访问,9-视频信号异常,10-录像异常,11-智能场景变化,12-阵列异常,13-前端/录像分辨率不匹配, + 14-申请解码资源失败,15-智能侦测报警, 16-热备异常,17-录播主机报警,18-语音对讲请求报警,19-音频丢失,20-开启录像, + 21-关闭录像,22-车辆检测算法异常,23-脉冲报警,24-人脸库硬盘异常,25-人脸库变更,26-人脸库图片变更,27-POC异常,28-相机视角异常, + 30-缺少SD卡,32-云台堵转异常,34-异常重启*/ + DWORD dwAlarmType;//报警类型 + NET_DVR_TIME_EX struAlarmTime; //发生报警的时间 + union + { + BYTE byUnionLen[116]; //分出去8个字节用于扩展时区 + struct + { + DWORD dwAlarmInputNo; //发生报警的报警输入通道号,一次只有一个 + DWORD dwTrigerAlarmOutNum; /*触发的报警输出个数,用于后面计算变长数据部分中所有触发的报警输出通道号,四字节表示一个*/ + DWORD dwTrigerRecordChanNum; /*触发的录像通道个数,用于后面计算变长数据部分中所有触发的录像通道号,四字节表示一个*/ + }struIOAlarm; // 报警类型dwAlarmType为0时有效 + struct + { + DWORD dwAlarmChanNum; /*发生报警通道数据个数,用于后面计算变长数据部分中所有发生的报警通道号,四字节表示一个*/ + DWORD dwPicLen;//Jpeg图片长度 + BYTE byPicURL; //图片数据采用URL方式 0-二进制图片数据,1-图片数据走URL方式 + BYTE byTarget; /*0-不区分识别目标,1-识别目标为人,2-识别目标为车*/ + BYTE byRes1[2]; //保留 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pDataBuff; //报警图片或者图片URL +#else + char* pDataBuff; //报警图片或者图片URL + BYTE byRes3[4]; +#endif + }struAlarmChannel; // dwAlarmType为2,3,6,9,10、13或28时有效 + struct + { + DWORD dwAlarmHardDiskNum; /*发生报警的硬盘数据长度,用于后面计算变长数据部分中所有发生报警的硬盘号,四节表示一个*/ + }struAlarmHardDisk; // dwAlarmType为1,4,5时有效 + struct + { + BYTE bySubAlarmType; //报警子类型,1-一键延迟录像; + BYTE byRes1[3]; //保留 + NET_DVR_TIME_EX struRecordEndTime; //录播结束时间 + }struRecordingHost; //录播主机专用报警 + struct + { + float fVoltageValue;//电源电压值,单位V,精确到0.1 + BYTE byVoltageAlarmType; //电源电压报警类型,0-电源电压过高,1-电源电压过低 + BYTE byRes1[3]; //保留字节 + }struVoltageInstable; //dwAlarmType=31时有效 + + struct + { + float fTemperature;//传感器温度,精确到小数点后1位 + DWORD dwCustomInfoLength; //自定义信息长度 + BYTE* pCustomInfo; //自定义信息 + BYTE byType; //云台堵转类型 1-水平堵转 2-垂直堵转 + BYTE byDeicingEnabled; // 云台除冰加热使能 0-关闭 1-开启 + BYTE byRes2[2]; //保留 + DWORD dwChannel; //通道号 + }struPTLocking; //云台堵转异常 dwAlarmType=32时有效 + + struct + { + BYTE byExceptionType; //异常类型,0-保留, 1- 日志存储异常,2-日志盘满 + }struLogException; //dwAlarmType=33时有效,日志异常信息 + + struct + { + NET_DVR_TIME_EX struAlarmTime; //重启时间,设备本地时间 + BYTE byExceptionType; //重启具体类型 0-保留 1- 线程 2-无码流 当前0、1、2 以外为其他 + BYTE byRes1[3]; //保留字节 + }struAbnormalReboot; //异常重启 dwAlarmType=34时有效 + + }uStruAlarm; + DWORD* pRes; //用于兼容64位下结构体字节不对齐问题 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes; //保留 + WORD wDevInfoIvmsChannel; //增加后端透传前端时的通道号 + BYTE byRes2[2]; //保留 +}NET_DVR_ALRAM_FIXED_HEADER, *LPNET_DVR_ALARM_FIXED_HEADER; + +//上传报警信息(256路NVR扩展) +typedef struct NET_DVR_ALARMINFO_V40 +{ + NET_DVR_ALRAM_FIXED_HEADER struAlarmFixedHeader; //报警固定部分 + DWORD* pAlarmData; //报警可变部分内容 +}NET_DVR_ALARMINFO_V40, *LPNET_DVR_ALARMINFO_V40; + +//报警输入参数配置 +typedef struct +{ + DWORD dwSize; + BYTE sAlarmInName[NAME_LEN]; /* 名称 */ + BYTE byAlarmType; //报警器类型,0:常开,1:常闭 + BYTE byAlarmInHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byChannel; // 报警输入触发智能识别通道 + BYTE byRes; + NET_DVR_HANDLEEXCEPTION struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 + BYTE byEnablePreset[MAX_CHANNUM]; /* 是否调用预置点 0-否,1-是*/ + BYTE byPresetNo[MAX_CHANNUM]; /* 调用的云台预置点序号,一个报警输入可以调用多个通道的云台预置点, 0xff表示不调用预置点。*/ + BYTE byEnableCruise[MAX_CHANNUM]; /* 是否调用巡航 0-否,1-是*/ + BYTE byCruiseNo[MAX_CHANNUM]; /* 巡航 */ + BYTE byEnablePtzTrack[MAX_CHANNUM]; /* 是否调用 0-否,1-是*/ + BYTE byPTZTrack[MAX_CHANNUM]; /* 调用的云台的序号 */ +}NET_DVR_ALARMINCFG, *LPNET_DVR_ALARMINCFG; + +//模拟报警输入参数配置 +typedef struct +{ + DWORD dwSize; + BYTE byEnableAlarmHandle; //处理报警输入 + BYTE byRes1[3]; + BYTE byAlarmInName[NAME_LEN]; //模拟报警输入名称 + WORD wAlarmInUpper; //模拟输入电压上限,实际值乘10,范围0~360 + WORD wAlarmInLower; //模拟输入电压下限,实际值乘10,范围0~360 + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //被触发的录像通道 + BYTE byRes2[100]; +}NET_DVR_ANALOG_ALARMINCFG, *LPNET_DVR_ANALOG_ALARMINCFG; + +//上传报警信息(9000扩展) +typedef struct +{ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常, + 10-录像异常,11- 智能场景变化,12-阵列异常,13-前端/录像分辨率不匹配,14-申请解码资源失败,15-智能侦测, 16-POE供电异常报警,17-闪光灯异常, + 18-磁盘满负荷异常报警,19-音频丢失,20-开启录像,21-关闭录像,22-车辆检测算法异常,23-脉冲报警,24-人脸库硬盘异常,25-人脸库变更,26-人脸库图片变更,27-POC异常 + 28-相机视角异常,29-电量低,30-缺少SD卡*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*触发的输出端口,为1表示对应输出*/ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*触发的录像通道,为1表示对应录像, dwAlarmRelateChannel[0]对应第1个通道*/ + BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmType为2或3,6,9,10,14,19,28时,表示哪个通道,dwChannel[0]对应第1个通道*/ + BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]对应第1个硬盘*/ + #ifdef SDK_CHEZAI + NET_DVR_ADDIT_POSITION GPS_pos; /* GPS定位信息 */ + #endif +}NET_DVR_ALARMINFO_V30, *LPNET_DVR_ALARMINFO_V30; + +typedef struct tagNET_DVR_ALARM_HOT_SPARE +{ + DWORD dwSize; //结构体 + DWORD dwExceptionCase; //报警原因 0-网络异常 + NET_DVR_IPADDR struDeviceIP; //产生异常的设备IP地址 + BYTE byRes[256]; //保留 +}NET_DVR_ALARM_HOT_SPARE, *LPNET_DVR_ALARM_HOT_SPARE; + +typedef struct +{ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*触发的输出端口,哪一位为1表示对应哪一个输出*/ + DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*触发的录像通道,哪一位为1表示对应哪一路录像, dwAlarmRelateChannel[0]对应第1个通道*/ + DWORD dwChannel[MAX_CHANNUM];/*dwAlarmType为2或3,6,9,10时,表示哪个通道,dwChannel[0]位对应第1个通道*/ + DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]位对应第1个硬盘*/ +}NET_DVR_ALARMINFO, *LPNET_DVR_ALARMINFO; + +////////////////////////////////////////////////////////////////////////////////////// +//IPC接入参数配置 +/* IP设备结构 */ +typedef struct +{ + DWORD dwEnable; /* 该IP设备是否启用 */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_IPADDR struIP; /* IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byRes[34]; /* 保留 */ +}NET_DVR_IPDEVINFO, *LPNET_DVR_IPDEVINFO; + +#define DEV_ID_LEN 32 //设备ID长度 + +//ipc接入设备信息扩展,支持ip设备的域名添加 +typedef struct tagNET_DVR_IPDEVINFO_V31 +{ + BYTE byEnable; //该IP设备是否有效 + BYTE byProType; //协议类型,0-私有协议,1-松下协议,2-索尼 + BYTE byEnableQuickAdd; // 0 不支持快速添加 1 使用快速添加 + // 快速添加需要设备IP和协议类型,其他信息由设备默认指定 + BYTE byCameraType; //通道接入的相机类型,值为 0-无意义,1-聚焦老师,2-聚焦学生,3-老师全景,4-学生全景,5-多媒体,6–教师定位,7-学生定位,8-板书定位,9-板书相机 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + NET_DVR_IPADDR struIP; //IP地址 + WORD wDVRPort; // 端口号 + BYTE szDeviceID[DEV_ID_LEN]; //设备ID + BYTE byEnableTiming; //0-保留,1-不启用NVR对IPC自动校时,2-启用NVR对IPC自动校时 + BYTE byCertificateValidation;//证书验证 + // byCertificateValidation:bit0: 0-不启用证书验证 1-启用证书验证 + // byCertificateValidation:bit1: 0-不启用默认通信端口 1-启用默认通信端口 +}NET_DVR_IPDEVINFO_V31, *LPNET_DVR_IPDEVINFO_V31; + +/* IP通道匹配参数 */ +typedef struct +{ + BYTE byEnable; /* 该通道是否在线 */ + BYTE byIPID; //IP设备ID低8位,当设备ID为0时表示通道不可用 + BYTE byChannel; /* 通道号 */ + BYTE byIPIDHigh; // IP设备ID的高8位 + BYTE byTransProtocol; //传输协议类型0-TCP/auto(具体有设备决定),1-UDP 2-多播 3-仅TCP 4-auto + BYTE byGetStream; /* 是否对该通道取流,0-是,1-否*/ + BYTE byres[30]; /* 保留 */ +} NET_DVR_IPCHANINFO, *LPNET_DVR_IPCHANINFO; + +/* IP接入配置结构 */ +typedef struct +{ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,从低到高表示1-32通道,0表示无效 1有效 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ +}NET_DVR_IPPARACFG, *LPNET_DVR_IPPARACFG; +/* 扩展IP接入配置结构 */ +typedef struct tagNET_DVR_IPPARACFG_V31 +{ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,从低到高表示1-32通道,0表示无效 1有效 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ +}NET_DVR_IPPARACFG_V31, *LPNET_DVR_IPPARACFG_V31; + +typedef struct tagNET_DVR_IPSERVER_STREAM +{ + BYTE byEnable; // 是否在线 + BYTE byRes[3]; // 保留字节 + NET_DVR_IPADDR struIPServer; //IPServer 地址 + WORD wPort; //IPServer 端口 + WORD wDvrNameLen; // DVR 名称长度 + BYTE byDVRName[NAME_LEN]; // DVR名称 + WORD wDVRSerialLen; // 序列号长度 + WORD byRes1[2]; // 保留字节 + BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVR序列号长度 + BYTE byUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE byPassWord[PASSWD_LEN]; // DVR登陆密码 + BYTE byChannel; // DVR 通道 + BYTE byRes2[11]; // 保留字节 +}NET_DVR_IPSERVER_STREAM, *LPNET_DVR_IPSERVER_STREAM; + +//流媒体服务器基本配置 +typedef struct tagNET_DVR_STREAM_MEDIA_SERVER_CFG +{ + BYTE byValid; /*是否可用*/ + BYTE byRes1[3]; + NET_DVR_IPADDR struDevIP; + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ + BYTE byRes2[69]; +}NET_DVR_STREAM_MEDIA_SERVER_CFG,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG; + +//设备通道信息 +typedef struct tagNET_DVR_DEV_CHAN_INFO +{ + NET_DVR_IPADDR struIP; //DVR IP地址 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 + BYTE byRes[2]; + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 +}NET_DVR_DEV_CHAN_INFO,*LPNET_DVR_DEV_CHAN_INFO; + +//直接通过流媒体取流 +typedef struct tagNET_DVR_PU_STREAM_CFG +{ + DWORD dwSize; + NET_DVR_STREAM_MEDIA_SERVER_CFG struStreamMediaSvrCfg; + NET_DVR_DEV_CHAN_INFO struDevChanInfo; +}NET_DVR_PU_STREAM_CFG,*LPNET_DVR_PU_STREAM_CFG; + +typedef struct tagNET_DVR_DDNS_STREAM_CFG +{ + BYTE byEnable; // 是否启用 + BYTE byRes1[3]; + NET_DVR_IPADDR struStreamServer; //流媒体服务器地址 + WORD wStreamServerPort; //流媒体服务器端口 + BYTE byStreamServerTransmitType; //流媒体传输协议类型 0-TCP,1-UDP + BYTE byRes2; + NET_DVR_IPADDR struIPServer; //IPSERVER地址 + WORD wIPServerPort; //IPserver端口号 + BYTE byRes3[2]; + BYTE sDVRName[NAME_LEN]; //DVR名称 + WORD wDVRNameLen; // DVR名称长度 + WORD wDVRSerialLen; // 序列号长度 + BYTE sDVRSerialNumber[SERIALNO_LEN]; // DVR序列号 + BYTE sUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // DVR登陆密码 + WORD wDVRPort; //DVR端口号 + BYTE byRes4[2]; + BYTE byChannel; // DVR 通道 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; //前端设备厂家类型,通过接口获取 +}NET_DVR_DDNS_STREAM_CFG, *LPNET_DVR_DDNS_STREAM_CFG; + +#define URL_LEN 240 //URL长度 +typedef struct tagNET_DVR_PU_STREAM_URL +{ + BYTE byEnable; + BYTE strURL[URL_LEN]; + BYTE byTransPortocol ; // 传输协议类型 0-tcp 1-UDP + WORD wIPID; //设备ID号,wIPID = iDevInfoIndex + iGroupNO*64 +1 + BYTE byChannel; //通道号 + BYTE byRes[7]; +}NET_DVR_PU_STREAM_URL, *LPNET_DVR_PU_STREAM_URL; + +typedef struct tagNET_DVR_HKDDNS_STREAM +{ + BYTE byEnable; // 是否在线 + BYTE byRes[3]; // 保留字节 + BYTE byDDNSDomain[64]; // hiDDNS服务器 + WORD wPort; // hiDDNS 端口 + WORD wAliasLen; // 别名长度 + BYTE byAlias[NAME_LEN]; // 别名 + WORD wDVRSerialLen; // 序列号长度 + BYTE byRes1[2]; // 保留字节 + BYTE byDVRSerialNumber[SERIALNO_LEN]; // DVR序列号 + BYTE byUserName[NAME_LEN]; // DVR 登陆用户名 + BYTE byPassWord[PASSWD_LEN]; // DVR登陆密码 + BYTE byChannel; // DVR通道 + BYTE byRes2[11]; // 保留字 +}NET_DVR_HKDDNS_STREAM, *LPNET_DVR_HKDDNS_STREAM; + +typedef struct tagNET_DVR_IPCHANINFO_V40 +{ + BYTE byEnable; /* 该通道是否在线 */ + BYTE byRes1; + WORD wIPID; //IP设备ID + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP,2- 多播,3-RTSP,0xff- auto(自动) + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byRes; + BYTE strURL[URL_LEN/*240*/]; /*RTSP协议取流URL (仅RTSP协议时有效)*/ +}NET_DVR_IPCHANINFO_V40,*LPNET_DVR_IPCHANINFO_V40; + +// 邦诺CVR +#define MAX_ID_COUNT 256 +#define MAX_STREAM_ID_COUNT 1024 +#define STREAM_ID_LEN 32 +#define PLAN_ID_LEN 32 +#define DEVICE_NO_LEN 24 +#define MAX_VOLUMENAME_LEN 32 //录像卷名称 +#define MAX_VAG_CHANNO_LEN 32 //VAG协议取流时通道号编码长度 + +#define MAX_STREAM_ID_NUM 30 //最大流ID数目 + +// 流信息 - 72字节长 +typedef struct tagNET_DVR_STREAM_INFO +{ + DWORD dwSize; + BYTE byID[STREAM_ID_LEN]; //ID数据 + DWORD dwChannel; //关联设备通道,等于0xffffffff时,表示不关联 + BYTE byRes[32]; //保留 +}NET_DVR_STREAM_INFO, *LPNET_DVR_STREAM_INFO; + +typedef struct tagNET_DVR_RTSP_PROTOCAL_CFG +{ + BYTE byEnable; + BYTE byLocalBackUp; //是否本地备份 + BYTE byRes[2]; + BYTE strURL[URL_LEN_V40]; + DWORD dwProtocalType; //协议类型 + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //前端IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + WORD wPort; + BYTE byRes1[122]; //保留 +}NET_DVR_RTSP_PROTOCAL_CFG, *LPNET_DVR_RTSP_PROTOCAL_CFG; + +typedef union tagNET_DVR_GET_STREAM_UNION +{ + NET_DVR_IPCHANINFO struChanInfo; /*IP通道信息*/ + NET_DVR_IPSERVER_STREAM struIPServerStream; // IPServer去流 + NET_DVR_PU_STREAM_CFG struPUStream; // 通过前端设备获取流媒体去流 + NET_DVR_DDNS_STREAM_CFG struDDNSStream; //通过IPServer和流媒体取流 + NET_DVR_PU_STREAM_URL struStreamUrl; //通过流媒体到url取流 + NET_DVR_HKDDNS_STREAM struHkDDNSStream; //通过hiDDNS去取流 + NET_DVR_IPCHANINFO_V40 struIPChan; //直接从设备取流(扩展) +}NET_DVR_GET_STREAM_UNION, *LPNET_DVR_GET_STREAM_UNION; + +typedef enum +{ + NET_SDK_IP_DEVICE = 0, + NET_SDK_STREAM_MEDIA, + NET_SDK_IPSERVER, + NET_SDK_DDNS_STREAM_CFG, + NET_SDK_STREAM_MEDIA_URL, + NET_SDK_HKDDNS, + NET_SDK_IP_DEVICE_ADV, + NET_SDK_IP_DEVICE_V40, + NET_SDK_RTSP +}GET_STREAM_TYPE; + +typedef struct tagNET_DVR_STREAM_MODE +{ + BYTE byGetStreamType; //取流方式GET_STREAM_TYPE,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流,3.通过IPServer找到设备,再通过流媒体去设备的流 + //4-通过流媒体由URL去取流,5-通过hkDDNS取流,6-直接从设备取流(扩展),使用NET_DVR_IPCHANINFO_V40结构, 7-通过RTSP协议方式进行取流 + BYTE byRes[3]; //保留字节 + NET_DVR_GET_STREAM_UNION uGetStream; // 不同取流方式结构体 +}NET_DVR_STREAM_MODE, *LPNET_DVR_STREAM_MODE; + +//扩展IP接入配置设备 +typedef struct tagNET_DVR_IPPARACFG_V40 +{ + DWORD dwSize; /* 结构大小 */ + DWORD dwGroupNum; // 设备支持的总组数 + DWORD dwAChanNum; //最大模拟通道个数 + DWORD dwDChanNum; //数字通道个数 + DWORD dwStartDChan; //起始数字通道 + BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* 模拟通道是否启用,从低到高表示1-64通道,0表示无效 1有效 */ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; /* IP设备 */ + NET_DVR_STREAM_MODE struStreamMode[MAX_CHANNUM_V30]; + BYTE byRes2[20]; // 保留字节 +}NET_DVR_IPPARACFG_V40, *LPNET_DVR_IPPARACFG_V40; + + +//为CVR扩展的报警类型 +typedef struct tagNET_DVR_ALARMINFO_DEV +{ + DWORD dwAlarmType; //0-编码器(通道)信号量报警;1-私有卷二损坏;2- NVR服务退出; + //3-编码器状态异常;4-系统时钟异常;5-录像卷剩余容量过低; + //6-编码器(通道)移动侦测报警;7-编码器(通道)遮挡报警。;8-录像丢失报警; 9-视频实时显示报警; 10-资源使用率告警; 11- CVR自动修复异常, 12-录像异常 + NET_DVR_TIME struTime; //报警时间 + BYTE byRes[32]; //保留 + DWORD dwNumber; //数目 + WORD *pNO; //dwNumber个WORD; 每个WORD表示一个通道号,或者磁盘号, 无效时为0 +}NET_DVR_ALARMINFO_DEV, *LPNET_DVR_ALARMINFO_DEV; + +/* 报警输出参数 */ +typedef struct +{ + BYTE byIPID; /* IP设备ID取值1- MAX_IP_DEVICE */ + BYTE byAlarmOut; /* 报警输出号 */ + BYTE byRes[18]; /* 保留 */ +}NET_DVR_IPALARMOUTINFO, *LPNET_DVR_IPALARMOUTINFO; + +/* IP报警输出配置结构 */ +typedef struct +{ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT];/* IP报警输出 */ +}NET_DVR_IPALARMOUTCFG, *LPNET_DVR_IPALARMOUTCFG; + +/* IP报警输出参数 */ +typedef struct tagNET_DVR_IPALARMOUTINFO_V40 +{ + DWORD dwIPID; /* IP设备ID */ + DWORD dwAlarmOut; /* IP设备ID对应的报警输出号 */ + BYTE byRes[32]; /* 保留 */ +}NET_DVR_IPALARMOUTINFO_V40, *LPNET_DVR_IPALARMOUTINFO_V40;/*报警输出参数*/ + +typedef struct tagNET_DVR_IPALARMOUTCFG_V40 +{ + DWORD dwSize; //结构体长度 + DWORD dwCurIPAlarmOutNum; + NET_DVR_IPALARMOUTINFO_V40 struIPAlarmOutInfo[MAX_IP_ALARMOUT_V40];/*IP报警输出*/ + BYTE byRes[256]; +}NET_DVR_IPALARMOUTCFG_V40, *LPNET_DVR_IPALARMOUTCFG_V40; /*IP报警输出*/ + +/* 报警输入参数 */ +typedef struct +{ + BYTE byIPID; /* IP设备ID取值1- MAX_IP_DEVICE */ + BYTE byAlarmIn; /* 报警输入号 */ + BYTE byRes[18]; /* 保留 */ +}NET_DVR_IPALARMININFO, *LPNET_DVR_IPALARMININFO; + +/* IP报警输入配置结构 */ +typedef struct +{ + DWORD dwSize; /* 结构大小 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN];/* IP报警输入 */ +}NET_DVR_IPALARMINCFG, *LPNET_DVR_IPALARMINCFG; + +/* IP报警输入参数 */ +typedef struct tagNET_DVR_IPALARMININFO_V40 +{ + DWORD dwIPID; /* IP设备ID */ + DWORD dwAlarmIn; /* IP设备ID对应的报警输入号 */ + BYTE byRes[32]; /* 保留 */ +}NET_DVR_IPALARMININFO_V40, *LPNET_DVR_IPALARMININFO_V40; /* 报警输入参数 */ + +typedef struct tagNET_DVR_IPALARMINCFG_V40 +{ + DWORD dwSize; //结构体长度 + DWORD dwCurIPAlarmInNum; //当前报警输入口数 + NET_DVR_IPALARMININFO_V40 struIPAlarmInInfo[MAX_IP_ALARMIN_V40];/* IP报警输入*/ + BYTE byRes[256]; +}NET_DVR_IPALARMINCFG_V40, *LPNET_DVR_IPALARMINCFG_V40; /*IP报警输入资源*/ + +//ipc alarm info +typedef struct tagNET_DVR_IPALARMINFO +{ + NET_DVR_IPDEVINFO struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ +}NET_DVR_IPALARMINFO, *LPNET_DVR_IPALARMINFO; + +//ipc配置改变报警信息扩展 9000_1.1 +typedef struct tagNET_DVR_IPALARMINFO_V31 +{ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE]; /* IP设备 */ + BYTE byAnalogChanEnable[MAX_ANALOG_CHANNUM]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_IP_CHANNEL]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ +}NET_DVR_IPALARMINFO_V31, *LPNET_DVR_IPALARMINFO_V31; + +typedef struct tagNET_DVR_IPALARMINFO_V40 +{ + NET_DVR_IPDEVINFO_V31 struIPDevInfo[MAX_IP_DEVICE_V40]; // IP设备 + BYTE byAnalogChanEnable[MAX_CHANNUM_V30]; /* 模拟通道是否启用,0-未启用 1-启用 */ + NET_DVR_IPCHANINFO struIPChanInfo[MAX_CHANNUM_V30]; /* IP通道 */ + NET_DVR_IPALARMININFO struIPAlarmInInfo[MAX_IP_ALARMIN]; /* IP报警输入 */ + NET_DVR_IPALARMOUTINFO struIPAlarmOutInfo[MAX_IP_ALARMOUT]; /* IP报警输出 */ + BYTE byRes[20]; // 保留字节 +}NET_DVR_IPALARMINFO_V40, *LPNET_DVR_IPALARMINFO_V40; + +typedef enum _HD_STAT_ +{ + HD_STAT_OK = 0, /* 正常 */ + HD_STAT_UNFORMATTED = 1, /* 未格式化 */ + HD_STAT_ERROR = 2, /* 错误 */ + HD_STAT_SMART_FAILED = 3, /* SMART状态 */ + HD_STAT_MISMATCH = 4, /* 不匹配 */ + HD_STAT_IDLE = 5, /* 休眠*/ + NET_HD_STAT_OFFLINE = 6, /* 网络盘处于未连接状态 */ + HD_RIADVD_EXPAND = 7, /* 虚拟磁盘可扩容 */ + HD_STAT_REPARING = 10, /* 硬盘正在修复(9000 2.0) */ + HD_STAT_FORMATING = 11, /* 硬盘正在格式化(9000 2.0) */ +}HD_STAT; + + +//本地硬盘信息配置 +typedef struct +{ + DWORD dwHDNo; /*硬盘号, 取值0~MAX_DISKNUM_V30-1*/ + DWORD dwCapacity; /*硬盘容量(不可设置)*/ + DWORD dwFreeSpace; /*硬盘剩余空间(不可设置)*/ + DWORD dwHdStatus; //硬盘状态(不可设置) HD_STAT 0-正常, 1-未格式化, 2-错误, 3-SMART状态, + //4-不匹配, 5-休眠 6-网络硬盘不在线 7-虚拟磁盘可扩容 10-硬盘正在修复 + //11-硬盘正在格式化 12-硬盘正在等待格式化 13-硬盘已卸载 14-本地硬盘不存在 + //15-正在删除(网络硬盘),16-已锁定 + BYTE byHDAttr; /*0-普通, 1-冗余; 2-只读 3-存档(CVR专用),4-不可读写*/ + BYTE byHDType; /*0-本地硬盘,1-ESATA硬盘,2-NAS硬盘,3-iSCSI硬盘 4-Array虚拟磁盘,5-SD卡,6-minSAS*/ + BYTE byDiskDriver; // 值 代表其ASCII字符 + BYTE byRes1; + DWORD dwHdGroup; /*属于哪个盘组 1-MAX_HD_GROUP*/ + BYTE byRecycling; // 是否循环利用 0:不循环利用,1:循环利用 + BYTE bySupportFormatType; /*当前硬盘所支持的格式化类型,只读。当前该节点仅支持byHDType=5(SD卡)时; + 若bySupportFormatType=0,则代表设备将以自身的默认类型来格式化硬盘; + bySupportFormatType:bit0: 0-代表不支持FAT32格式化类型,1-代表支持; + bySupportFormatType:bit1: 0-代表不支持EXT4格式化类型,1-代表支持;*/ + BYTE byFormatType; /*当前硬盘格式化类型配置: 0-设备默认格式化类型,1-指定FAT32格式化(byHDType=5(SD卡)时生效), + 2-指定EXT4格式化(byHDType=5(SD卡)时生效)*/ + BYTE byRes2; + DWORD dwStorageType; //按位表示 0-不支持 非0-支持 + // dwStorageType & 0x1 表示是否是普通录像专用存储盘 + // dwStorageType & 0x2 表示是否是抽帧录像专用存储盘 + // dwStorageType & 0x4 表示是否是图片录像专用存储盘 + + DWORD dwPictureCapacity; //硬盘图片容量(不可设置),单位:MB + DWORD dwFreePictureSpace; //剩余图片空间(不可设置),单位:MB + BYTE byRes3[104]; +}NET_DVR_SINGLE_HD, *LPNET_DVR_SINGLE_HD; + +typedef struct +{ + DWORD dwSize; + DWORD dwHDCount; /*硬盘数(不可设置)*/ + NET_DVR_SINGLE_HD struHDInfo[MAX_DISKNUM_V30];//硬盘相关操作都需要重启才能生效; +}NET_DVR_HDCFG, *LPNET_DVR_HDCFG; + +//本地硬盘信息配置 +typedef struct +{ + DWORD dwHDNo; /*硬盘号, 取值0~MAX_DISKNUM_V30-1*/ + DWORD dwCapacity; /*硬盘容量(不可设置)*/ + DWORD dwFreeSpace; /*硬盘剩余空间(不可设置)*/ + DWORD dwHdStatus; //硬盘状态(不可设置) HD_STAT 0-正常, 1-未格式化, 2-错误, 3-SMART状态, + //4-不匹配, 5-休眠 6-网络硬盘不在线 7-虚拟磁盘可扩容 10-硬盘正在修复 + //11-硬盘正在格式化 12-硬盘正在等待格式化 13-硬盘已卸载 14-本地硬盘不存在 + //15-正在删除(网络硬盘),16-已锁定,17-警告(随时会变成坏盘),18-坏盘(已经损坏的硬盘),19-隐患盘(出现异常被踢出阵列,比如出现坏扇区),20-未认证(未检测,需要到CVR中对磁盘进行检测) + //21-未在录播主机中格式化 + BYTE byHDAttr; /*0-普通, 1-冗余; 2-只读,3-存档,4-不可读写*/ + BYTE byHDType; /*0-本地硬盘,1-ESATA硬盘,2-NAS硬盘,3-iSCSI硬盘 4-Array虚拟磁盘,5-SD卡,6-minSAS*/ + BYTE byDiskDriver; // 值 代表其ASCII字符 + BYTE byGenusGruop; //属组:0-保留,1-阵列,2-存储池,3-阵列踢盘,4-未初始化,5-无效盘,6-区域热备,7-全局热备,只读 + DWORD dwHdGroup; /*属于哪个盘组 1-MAX_HD_GROUP*/ + BYTE byRecycling; // 是否循环利用 0:不循环利用,1:循环利用 + BYTE bySupportFormatType; /*当前硬盘所支持的格式化类型,只读。当前该节点仅支持byHDType=5(SD卡)时; + 若bySupportFormatType=0,则代表设备将以自身的默认类型来格式化硬盘; + bySupportFormatType:bit0: 0-代表不支持FAT32格式化类型,1-代表支持; + bySupportFormatType:bit1: 0-代表不支持EXT4格式化类型,1-代表支持;*/ + BYTE byFormatType; /*当前硬盘格式化类型配置: 0-设备默认格式化类型,1-指定FAT32格式化(byHDType=5(SD卡)时生效), + 2-指定EXT4格式化(byHDType=5(SD卡)时生效)*/ + BYTE byRes2; + DWORD dwStorageType; //按位表示 0-不支持 非0-支持 + // dwStorageType & 0x1 表示是否是普通录像专用存储盘 + // dwStorageType & 0x2 表示是否是抽帧录像专用存储盘 + // dwStorageType & 0x4 表示是否是图片录像专用存储盘 + + DWORD dwPictureCapacity; //硬盘图片容量(不可设置),单位:MB + DWORD dwFreePictureSpace; //剩余图片空间(不可设置),单位:MB + BYTE byDiskLocation[NET_SDK_DISK_LOCATION_LEN/*16*/];//硬盘位置,具体格式见备注,只读 + BYTE bySupplierName[NET_SDK_SUPPLIER_NAME_LEN/*32*/];//供应商名称,只读 + BYTE byDiskModel[NET_SDK_DISK_MODEL_LEN /*64*/];//硬盘型号,只读 + char szHDLocateIP[SDK_MAX_IP_LEN];//磁盘所在IP信息 + BYTE byRes3[80]; +}NET_DVR_SINGLE_HD_V50, *LPNET_DVR_SINGLE_HD_V50; + +typedef struct +{ + DWORD dwSize; + DWORD dwHDCount; /*硬盘数(不可设置)*/ + NET_DVR_SINGLE_HD_V50 struHDInfoV50[MAX_DISKNUM_V30];//硬盘相关操作都需要重启才能生效; + BYTE byRes[128]; +}NET_DVR_HDCFG_V50, *LPNET_DVR_HDCFG_V50; + +typedef struct tagNET_DVR_HARD_DISK_SINGLE_VOLUME_INFO +{ + DWORD dwSize; + BYTE byHDVolumeNo; /*硬盘卷ID(不可设置)*/ + BYTE byType; /*硬盘卷类型:0-录像卷(用于保存录像),1-存档卷(用于存档录像,下发录像计划时,不能关联存档卷), + 2-文件卷(只用于存储客户端上传的文件,下发录像计划时,不能关联文件卷,需要过滤掉)3-图片卷(只用于存储客户端上传的图片)*/ + BYTE byRes1[2]; + DWORD dwCapacity; /*硬盘卷容量,单位MB(不可设置)*/ + DWORD dwFreeSpace; /*硬盘卷剩余空间,单位MB(不可设置) */ + BYTE byHDVolumeName[NET_SDK_DISK_VOLUME_LEN/*36*/]; /*硬盘卷名称(不可设置)*/ + BYTE byLoopCover; /*是否循环覆盖:0-非循环覆盖,1-循环覆盖(硬盘卷满了之后,循环覆盖最老的录像)*/ + BYTE byRes[63]; +}NET_DVR_HARD_DISK_SINGLE_VOLUME_INFO, *LPNET_DVR_HARD_DISK_SINGLE_VOLUME_INFO; + +typedef struct tagNET_DVR_HARD_DISK_VOLUME_INFO +{ + DWORD dwSize; + DWORD dwHDVolumeCount; /*当前硬盘卷总数(不可设置)*/ + NET_DVR_HARD_DISK_SINGLE_VOLUME_INFO struSingleVolumeInfo[NET_SDK_MAX_DISK_VOLUME/*33*/]; /*单个硬盘卷信息*/ + BYTE byRes[128]; +}NET_DVR_HARD_DISK_VOLUME_INFO, *LPNET_DVR_HARD_DISK_VOLUME_INFO; + +//本地盘组信息配置扩展 +typedef struct tagNET_DVR_SINGLE_HDGROUP_V40 +{ + DWORD dwHDGroupNo; /*盘组号(不可设置) 1-MAX_HD_GROUP*/ + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //触发的录像通道,按值表示,遇到0xffffffff时后续视为无效 + BYTE byRes[64]; /* 保留 */ +}NET_DVR_SINGLE_HDGROUP_V40, *LPNET_DVR_SINGLE_HDGROUP_V40; + +typedef struct tagNET_DVR_HDGROUP_CFG_V40 +{ + DWORD dwSize; //结构体大小 + DWORD dwMaxHDGroupNum; //设备支持的最大盘组数-只读 + DWORD dwCurHDGroupNum; /*当前配置的盘组数*/ + NET_DVR_SINGLE_HDGROUP_V40 struHDGroupAttr[MAX_HD_GROUP]; //硬盘相关操作都需要重启才能生效; + BYTE byRes[128]; //保留 +}NET_DVR_HDGROUP_CFG_V40, *LPNET_DVR_HDGROUP_CFG_V40; + +//本地盘组信息配置 +typedef struct +{ + DWORD dwHDGroupNo; /*盘组号(不可设置) 1-MAX_HD_GROUP*/ + BYTE byHDGroupChans[MAX_CHANNUM_V30]; /*盘组对应的录像通道, 0-表示该通道不录象到该盘组,1-表示录象到该盘组*/ + BYTE byRes[8]; +}NET_DVR_SINGLE_HDGROUP, *LPNET_DVR_SINGLE_HDGROUP; + +typedef struct +{ + DWORD dwSize; + DWORD dwHDGroupCount; /*盘组总数(不可设置)*/ + NET_DVR_SINGLE_HDGROUP struHDGroupAttr[MAX_HD_GROUP];//硬盘相关操作都需要重启才能生效; +}NET_DVR_HDGROUP_CFG, *LPNET_DVR_HDGROUP_CFG; + + +//配置缩放参数的结构 +typedef struct +{ + DWORD dwSize; + DWORD dwMajorScale; /* 主显示 0-不缩放,1-缩放*/ + DWORD dwMinorScale; /* 辅显示 0-不缩放,1-缩放*/ + DWORD dwRes[2]; +}NET_DVR_SCALECFG, *LPNET_DVR_SCALECFG; + + + +//DVR报警输出(9000扩展) +typedef struct +{ + DWORD dwSize; + BYTE sAlarmOutName[NAME_LEN]; /* 名称 */ + DWORD dwAlarmOutDelay; /* 输出保持时间(-1为无限,手动关闭) */ + //0-5秒,1-10秒,2-30秒,3-1分钟,4-2分钟,5-5分钟,6-10分钟,7-手动,8-1秒,9-2秒,10-3秒,11-4秒 + NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT_V30];/* 报警输出激活时间段 */ + BYTE byAlarmOutHandle; /* 是否处理 0-处理 1-不处理*/ + BYTE byNormalSatus; /* 常态 0-常开 1-常闭*/ + BYTE byRes[14]; +}NET_DVR_ALARMOUTCFG_V30, *LPNET_DVR_ALARMOUTCFG_V30; + +//DVR报警输出 +typedef struct +{ + DWORD dwSize; + BYTE sAlarmOutName[NAME_LEN]; /* 名称 */ + DWORD dwAlarmOutDelay; /* 输出保持时间(-1为无限,手动关闭) */ + //0-5秒,1-10秒,2-30秒,3-1分钟,4-2分钟,5-5分钟,6-10分钟,7-手动, 8-1秒, 9-3秒 + NET_DVR_SCHEDTIME struAlarmOutTime[MAX_DAYS][MAX_TIMESEGMENT];/* 报警输出激活时间段 */ +}NET_DVR_ALARMOUTCFG, *LPNET_DVR_ALARMOUTCFG; + +//DVR本地预览参数(9000扩展) +/*切换是指在当前预览模式下切换显示画面,而不是切换预览模式。比如byPreviewNumber为0(1画面),bySwitchSeq[0][0] = 1,bySwitchSeq[0][1] = 2,bySwitchSeq[0][2] = 3 +则本地画面一直是1画面,然后在输出画面按1,2,3通道顺序切换*/ +typedef struct +{ + DWORD dwSize; + BYTE byPreviewNumber;//预览模式,0-1画面,1-4画面,2-9画面,3-16画面,0xff:最大画面 + BYTE byEnableAudio;//是否声音预览,0-不预览,1-预览 + WORD wSwitchTime;//切换时间,0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s + BYTE bySwitchSeq[MAX_PREVIEW_MODE][MAX_WINDOW_V30];//切换顺序,如果lSwitchSeq[i]为 0xff表示不用 + BYTE byRes[24]; +}NET_DVR_PREVIEWCFG_V30, *LPNET_DVR_PREVIEWCFG_V30; + +//DVR本地预览参数 +typedef struct +{ + DWORD dwSize; + BYTE byPreviewNumber;//预览数目,0-1画面,1-4画面,2-9画面,3-16画面,0xff:最大画面 + BYTE byEnableAudio;//是否声音预览,0-不预览,1-预览 + WORD wSwitchTime;//切换时间,0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s + BYTE bySwitchSeq[MAX_WINDOW];//切换顺序,如果lSwitchSeq[i]为 0xff表示不用 +}NET_DVR_PREVIEWCFG, *LPNET_DVR_PREVIEWCFG; + +//DVR视频输出 +typedef struct +{ + WORD wResolution; /* 分辨率 */ + WORD wFreq; /* 刷新频率 */ + DWORD dwBrightness; /* 亮度 */ +}NET_DVR_VGAPARA; + +/* +* MATRIX输出参数结构 +*/ +typedef struct +{ + WORD wOrder[MAX_ANALOG_CHANNUM]; /* 预览顺序, 0xff表示相应的窗口不预览 */ + WORD wSwitchTime; /* 预览切换时间 */ + BYTE res[14]; +}NET_DVR_MATRIXPARA_V30, *LPNET_DVR_MATRIXPARA_V30; + +typedef struct +{ + WORD wDisplayLogo; /* 显示视频通道号 */ + WORD wDisplayOsd; /* 显示时间 */ +}NET_DVR_MATRIXPARA; + +typedef struct +{ + BYTE byVideoFormat; /* 输出制式,0-PAL,1-NTSC */ + BYTE byMenuAlphaValue; /* 菜单与背景图象对比度 */ + WORD wScreenSaveTime; /* 屏幕保护时间 0-从不,1-1分钟,2-2分钟,3-5分钟,4-10分钟,5-20分钟,6-30分钟 */ + WORD wVOffset; /* 视频输出偏移 */ + WORD wBrightness; /* 视频输出亮度 */ + BYTE byStartMode; /* 启动后视频输出模式(0:菜单,1:预览)*/ + BYTE byEnableScaler; /* 是否启动缩放 (0-不启动, 1-启动)*/ +}NET_DVR_VOOUT; + +//DVR视频输出(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_VOOUT struVOOut[MAX_VIDEOOUT_V30]; + NET_DVR_VGAPARA struVGAPara[MAX_VGA_V30]; /* VGA参数 */ + NET_DVR_MATRIXPARA_V30 struMatrixPara[MAX_MATRIXOUT]; /* MATRIX参数 */ + BYTE byRes[16]; +}NET_DVR_VIDEOOUT_V30, *LPNET_DVR_VIDEOOUT_V30; + +//DVR视频输出 +typedef struct +{ + DWORD dwSize; + NET_DVR_VOOUT struVOOut[MAX_VIDEOOUT]; + NET_DVR_VGAPARA struVGAPara[MAX_VGA]; /* VGA参数 */ + NET_DVR_MATRIXPARA struMatrixPara; /* MATRIX参数 */ +}NET_DVR_VIDEOOUT, *LPNET_DVR_VIDEOOUT; + + +//单用户参数(子结构)(扩展) +typedef struct tagNET_DVR_USER_INFO_V40 +{ + BYTE sUserName[NAME_LEN]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启 + 高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ + BYTE byRes[84]; +}NET_DVR_USER_INFO_V40, *LPNET_DVR_USER_INFO_V40; + +//单用户参数(子结构)(扩展) +typedef struct tagNET_DVR_USER_INFO_V51 +{ + BYTE sUserName[NAME_LEN/*32*/]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN/*16*/]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT/*32*/]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + /*数组10: 本地预览 */ + BYTE byRemoteRight[MAX_RIGHT/*32*/];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 本地预览权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN/*6*/]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT/*32*/]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ + DWORD dwPasswordValidity; //密码有效期,仅管理员用户可以修改,单位:天,填0表示永久生效 + BYTE byKeypadPassword[PASSWD_LEN/*16*/]; //键盘密码 + BYTE byUserOperateType; //用户操作类型,1-网络用户,2-键盘用户,3-网络用户+键盘用户 + BYTE byRes[1007]; +}NET_DVR_USER_INFO_V51, *LPNET_DVR_USER_INFO_V51; + +typedef struct tagNET_DVR_USER_V51 +{ + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V51 struUser[MAX_USERNUM_V30/*32*/]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 +}NET_DVR_USER_V51, *LPNET_DVR_USER_V51; + +//单用户参数(子结构)(扩展) +typedef struct tagNET_DVR_USER_INFO_V52 +{ + BYTE sUserName[NAME_LEN/*32*/]; /* 用户名只能用16字节 */ + BYTE sPassword[PASSWD_LEN/*16*/]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT/*32*/]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + /*数组10: 本地预览 */ + BYTE byRemoteRight[MAX_RIGHT/*32*/];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + DWORD dwNetPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以预览的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalRecordRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetRecordRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以录像的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPTZRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetPTZRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以PTZ的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地备份权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalPreviewRight[MAX_CHANNUM_V40/*512*/]; /* 本地预览权限通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以二次认证回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwLocalDoubleVerificationBackupRight[MAX_CHANNUM_V40/*512*/]; /* 本地可以二次认证备份的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + DWORD dwNetDoubleVerificationPlaybackRight[MAX_CHANNUM_V40/*512*/]; /* 远程可以二次认证回放的通道,从前往后顺序排列,遇到0xffffffff后续均为无效*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN/*6*/]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和 + 状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和 + 远程回放,语音对讲和远程预览、本地备份,本地/远程关机/重启高……管理员 */ + BYTE byAlarmOnRight; // 报警输入口布防权限 1-有权限,0-无权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 1-有权限,0-无权限 + BYTE byBypassRight; // 报警输入口旁路权限 1-有权限,0-无权限 + BYTE byRes1[2]; //四字节对齐 + BYTE byPublishRight[MAX_RIGHT/*32*/]; //信息发布专有权限 + /*数组0: 素材审核权限*/ + /*数组1: 节目审核权限*/ + /*数组2: 日程审核权限*/ + /*数组3: 上传素材权限*/ + /*数组4: 新建节目权限*/ + /*数组5: 新建日程权限*/ + /*数组6: 信息播放权限*/ + /*数组7: 终端管理权限*/ + /*数组8: 商业智能权限*/ + DWORD dwPasswordValidity; //密码有效期,仅管理员用户可以修改,单位:天,填0表示永久生效 + BYTE byKeypadPassword[PASSWD_LEN/*16*/]; //键盘密码 + BYTE byUserOperateType; //用户操作类型,1-网络用户,2-键盘用户,3-网络用户+键盘用户 + BYTE byRes[1007]; +}NET_DVR_USER_INFO_V52, *LPNET_DVR_USER_INFO_V52; + +typedef struct tagNET_DVR_USER_V52 +{ + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V52 struUser[MAX_USERNUM_V30/*32*/]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 +}NET_DVR_USER_V52, *LPNET_DVR_USER_V52; + +//单用户参数(子结构)(9000扩展) +typedef struct +{ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + /*数组6: 本地查看参数 */ + /*数组7: 本地管理模拟和IP camera */ + /*数组8: 本地备份 */ + /*数组9: 本地关机/重启 */ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + /*数组11: 远程查看参数 */ + /*数组12: 远程管理模拟和IP camera */ + /*数组13: 远程关机/重启 */ + BYTE byNetPreviewRight[MAX_CHANNUM_V30]; /* 远程可以预览的通道 0-有权限,1-无权限*/ + BYTE byLocalPlaybackRight[MAX_CHANNUM_V30]; /* 本地可以回放的通道 0-有权限,1-无权限*/ + BYTE byNetPlaybackRight[MAX_CHANNUM_V30]; /* 远程可以回放的通道 0-有权限,1-无权限*/ + BYTE byLocalRecordRight[MAX_CHANNUM_V30]; /* 本地可以录像的通道 0-有权限,1-无权限*/ + BYTE byNetRecordRight[MAX_CHANNUM_V30]; /* 远程可以录像的通道 0-有权限,1-无权限*/ + BYTE byLocalPTZRight[MAX_CHANNUM_V30]; /* 本地可以PTZ的通道 0-有权限,1-无权限*/ + BYTE byNetPTZRight[MAX_CHANNUM_V30]; /* 远程可以PTZ的通道 0-有权限,1-无权限*/ + BYTE byLocalBackupRight[MAX_CHANNUM_V30]; /* 本地备份权限通道 0-有权限,1-无权限*/ + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byPriority; /* 优先级,0xff-无,0--低,1--中,2--高 */ + /* + 无……表示不支持优先级的设置 + 低……默认权限:包括本地和远程回放,本地和远程查看日志和状态,本地和远程关机/重启 + 中……包括本地和远程控制云台,本地和远程手动录像,本地和远程回放,语音对讲和远程预览 + 本地备份,本地/远程关机/重启 + 高……管理员 + */ + BYTE byAlarmOnRight; // 报警输入口布防权限 + BYTE byAlarmOffRight; // 报警输入口撤防权限 + BYTE byBypassRight; // 报警输入口旁路权限 + BYTE byRes[14]; +}NET_DVR_USER_INFO_V30, *LPNET_DVR_USER_INFO_V30; + +//单用户参数(SDK_V15扩展)(子结构) +typedef struct +{ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwLocalRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + DWORD dwLocalPlaybackRight; /* 本地可以回放的通道 bit0 -- channel 1*/ + DWORD dwRemoteRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + DWORD dwNetPreviewRight; /* 远程可以预览的通道 bit0 -- channel 1*/ + DWORD dwNetPlaybackRight; /* 远程可以回放的通道 bit0 -- channel 1*/ + char sUserIP[16]; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ +}NET_DVR_USER_INFO_EX, *LPNET_DVR_USER_INFO_EX; + +//单用户参数(子结构) +typedef struct +{ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwLocalRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 本地控制云台*/ + /*数组1: 本地手动录象*/ + /*数组2: 本地回放*/ + /*数组3: 本地设置参数*/ + /*数组4: 本地查看状态、日志*/ + /*数组5: 本地高级操作(升级,格式化,重启,关机)*/ + DWORD dwRemoteRight[MAX_RIGHT]; /* 权限 */ + /*数组0: 远程控制云台*/ + /*数组1: 远程手动录象*/ + /*数组2: 远程回放 */ + /*数组3: 远程设置参数*/ + /*数组4: 远程查看状态、日志*/ + /*数组5: 远程高级操作(升级,格式化,重启,关机)*/ + /*数组6: 远程发起语音对讲*/ + /*数组7: 远程预览*/ + /*数组8: 远程请求报警上传、报警输出*/ + /*数组9: 远程控制,本地输出*/ + /*数组10: 远程控制串口*/ + char sUserIP[16]; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ +}NET_DVR_USER_INFO, *LPNET_DVR_USER_INFO; + +//DVR用户参数(扩展) +typedef struct tagNET_DVR_USER_V40 +{ + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* 用户参数 */ +}NET_DVR_USER_V40,*LPNET_DVR_USER_V40; +typedef struct tagNET_DVR_USER_V50 +{ + DWORD dwSize; //结构体大小 + DWORD dwMaxUserNum; //设备支持的最大用户数-只读 + NET_DVR_USER_INFO_V40 struUser[MAX_USERNUM_V30]; /* 用户参数 */ + char sloginPassword[PASSWD_LEN/*16*/]; /* 登陆密码确认 */ + BYTE byRes[240]; //保留 +}NET_DVR_USER_V50, *LPNET_DVR_USER_V50; +//DVR用户参数(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_USER_INFO_V30 struUser[MAX_USERNUM_V30]; +}NET_DVR_USER_V30, *LPNET_DVR_USER_V30; + +//DVR用户参数(SDK_V15扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_USER_INFO_EX struUser[MAX_USERNUM]; +}NET_DVR_USER_EX, *LPNET_DVR_USER_EX; + +//DVR用户参数 +typedef struct +{ + DWORD dwSize; + NET_DVR_USER_INFO struUser[MAX_USERNUM]; +}NET_DVR_USER, *LPNET_DVR_USER; + +typedef struct tagNET_DVR_EXCEPTION_V40 +{ + DWORD dwSize ; //结构体大小 + DWORD dwMaxGroupNum ; //设备支持的最大组数 + NET_DVR_HANDLEEXCEPTION_V41 struExceptionHandle[MAX_EXCEPTIONNUM_V30]; + BYTE byRes[128]; //保留 +}NET_DVR_EXCEPTION_V40,*LPNET_DVR_EXCEPTION_V40; /*异常参数配置扩展结构体*/ + +//DVR异常参数(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_HANDLEEXCEPTION_V30 struExceptionHandleType[MAX_EXCEPTIONNUM_V30]; + /*数组0-盘满,1- 硬盘出错,2-网线断,3-局域网内IP 地址冲突, 4-非法访问, 5-输入/输出视频制式不匹配, 6-视频信号异常, 7-录像异常 8-阵列异常,9-前端/录像分辨率不匹配异常,10-行车超速(车载专用) 11-热备异常(N+1使用)12-温度,13-子系统异常,14-风扇异常, 15-POE供电异常, 16-POC异常,数组17-电源电压波动异常*/ +}NET_DVR_EXCEPTION_V30, *LPNET_DVR_EXCEPTION_V30; + + + +//DVR异常参数 +typedef struct +{ + DWORD dwSize; + NET_DVR_HANDLEEXCEPTION struExceptionHandleType[MAX_EXCEPTIONNUM]; + /*数组0-盘满,1- 硬盘出错,2-网线断,3-局域网内IP 地址冲突,4-非法访问, 5-输入/输出视频制式不匹配, 6-视频信号异常*/ +}NET_DVR_EXCEPTION, *LPNET_DVR_EXCEPTION; + +//通道状态(9000扩展) +typedef struct +{ + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + BYTE byRes1; //保留 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + NET_DVR_IPADDR struClientIP[MAX_LINK];//客户端的IP地址 + DWORD dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数 + BYTE byExceedMaxLink; // 是否超出了单路6路连接数 0 - 未超出, 1-超出 + BYTE byRes[3]; // 保留字节 + DWORD dwAllBitRate; //所有实际码率之和 + DWORD dwChannelNo; //当前的通道号,0xffffffff表示无效 +}NET_DVR_CHANNELSTATE_V30, *LPNET_DVR_CHANNELSTATE_V30; + +//通道状态 +typedef struct +{ + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + char reservedData; //保留 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + DWORD dwClientIP[MAX_LINK];//客户端的IP地址 +}NET_DVR_CHANNELSTATE, *LPNET_DVR_CHANNELSTATE; + +//硬盘状态 +typedef struct +{ + DWORD dwVolume;//硬盘的容量 + DWORD dwFreeSpace;//硬盘的剩余空间 + DWORD dwHardDiskStatic; //硬盘的状态,按位:1-休眠,2-不正常,3-休眠硬盘出错,4-未格式化, 5-未连接状态(网络硬盘),6-硬盘正在格式化,7-硬盘满(未开启循环覆盖的情况下),8-其他异常(待设备端统计) +}NET_DVR_DISKSTATE, *LPNET_DVR_DISKSTATE; + +typedef struct tagNET_DVR_WORKSTATE_V40 +{ + DWORD dwSize ; //结构体大小 + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态,一次最多只能获取33个硬盘信息 + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V40/*512*/];//通道的状态,从前往后顺序排列 + DWORD dwHasAlarmInStatic[MAX_ALARMIN_V40/*512*/]; //有报警的报警输入口,按值表示,按下标值顺序排列,值为0xffffffff时当前及后续值无效 + DWORD dwHasAlarmOutStatic[MAX_ALARMOUT_V40/*512*/]; //有报警输出的报警输出口,按值表示,按下标值顺序排列,值为0xffffffff时当前及后续值无效 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byAudioInChanStatus[MAX_AUDIO_V30/*2*/]; //按位表示语音通道的状态 0-未使用,1-使用中,第0位表示第1个语音通道 + BYTE byRes1[2]; + float fHumidity; //传感器获知的湿度,范围:0.0 ~100.0 + float fTemperature; //传感器获知的温度,范围:-20.0 ~ 90.0 + BYTE byRes[116]; //保留 +}NET_DVR_WORKSTATE_V40, *LPNET_DVR_WORKSTATE_V40; /*设备工作状态扩展结构体*/ + +typedef struct tagNET_DVR_GETWORKSTATE_COND +{ + DWORD dwSize ; //结构体长度 + BYTE byFindHardByCond; /*0-查找全部磁盘(但一次最多只能查找33个),此时dwFindHardStatusNum无效*/ + BYTE byFindChanByCond ; /*0-查找全部通道,此时dwFindChanNum无效*/ + BYTE byRes1[2] ;//保留 + DWORD dwFindHardStatus[MAX_DISKNUM_V30/*33*/] ; /*要查找的硬盘号,按值表示,该值采用顺序排列, 遇到0xffffffff则认为后续无效 */ + DWORD dwFindChanNo[MAX_CHANNUM_V40/*512*/] ; /*要查找的通道号,按值表示,该值采用顺序排列, 遇到0xffffffff则认为后续无效 */ + BYTE byRes[64] ; //保留 +}NET_DVR_GETWORKSTATE_COND, *LPNET_DVR_GETWORKSTATE_COND; + +//DVR工作状态(9000扩展) +typedef struct +{ + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30];//通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警端口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay;//本地显示状态,0-正常,1-不正常 + BYTE byAudioChanStatus[MAX_AUDIO_V30];//表示语音通道的状态 0-未使用,1-使用中, 0xff无效 + BYTE byRes[10]; +}NET_DVR_WORKSTATE_V30, *LPNET_DVR_WORKSTATE_V30; + +//DVR工作状态 +typedef struct +{ + DWORD dwDeviceStatic; //设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM]; + NET_DVR_CHANNELSTATE struChanStatic[MAX_CHANNUM];//通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN]; //报警端口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay;//本地显示状态,0-正常,1-不正常 +}NET_DVR_WORKSTATE, *LPNET_DVR_WORKSTATE; + + + +//日志信息(9000扩展) +typedef struct +{ + NET_DVR_TIME strLogTime; + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType;//次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN]; //操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + DWORD dwParaType;//参数类型,9000设备MINOR_START_VT/MINOR_STOP_VT时,表示语音对讲的端子号 + DWORD dwChannel;//通道号 + DWORD dwDiskNumber;//硬盘号 + DWORD dwAlarmInPort;//报警输入端口 + DWORD dwAlarmOutPort;//报警输出端口 + DWORD dwInfoLen; + char sInfo[LOG_INFO_LEN]; +}NET_DVR_LOG_V30, *LPNET_DVR_LOG_V30; + +//日志信息 +typedef struct +{ + NET_DVR_TIME strLogTime; + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType;//次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN]; //操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + char sRemoteHostAddr[16];//远程主机地址 + DWORD dwParaType;//参数类型 + DWORD dwChannel;//通道号 + DWORD dwDiskNumber;//硬盘号 + DWORD dwAlarmInPort;//报警输入端口 + DWORD dwAlarmOutPort;//报警输出端口 +}NET_DVR_LOG, *LPNET_DVR_LOG; + + +typedef struct tagNET_DVR_FIND_LOG_COND +{ + DWORD dwSelectMode; // 0-全部;1-按类型;2-按时间;3-按时间和类型 + DWORD dwMainType; //日志主类型 + DWORD dwSubType; //日志次类型 + NET_DVR_TIME_V50 struStartTime; //开始时间 + NET_DVR_TIME_V50 struEndTime; //结束时间 + BOOL bOnlySmart; //是否只搜索带S.M.A.R.T信息的日志 + BYTE byRes[128]; +}NET_DVR_FIND_LOG_COND, *LPNET_DVR_FIND_LOG_COND; + + +typedef struct +{ + NET_DVR_TIME_V50 struLogTime; //日志发生的时间 + DWORD dwMajorType; //主类型 1-报警; 2-异常; 3-操作; 0xff-全部 + DWORD dwMinorType; //次类型 0-全部; + BYTE sPanelUser[MAX_NAMELEN];//操作面板的用户名 + BYTE sNetUser[MAX_NAMELEN]; //网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr; //远程主机地址 + DWORD dwParaType; //参数类型,9000设备MINOR_START_VT/MINOR_STOP_VT时,表示语音对讲的端子号 + DWORD dwChannel; //通道号 + DWORD dwDiskNumber; //硬盘号 + DWORD dwAlarmInPort; //报警输入端口 + DWORD dwAlarmOutPort; //报警输出端口 + DWORD dwInfoLen; + char sInfo[LOG_INFO_LEN]; + BYTE byRes[128]; +}NET_DVR_LOG_V50, *LPNET_DVR_LOG_V50; + + +/************************DVR日志 end***************************/ + +/************************动环报警管理主机日志查找 begin************************************************/ +typedef struct tagNET_DVR_ALARMHOST_SEARCH_LOG_PARAM +{ + WORD wMajorType; // 主类型 + WORD wMinorType; // 次类型 + NET_DVR_TIME struStartTime; // 开始时间 + NET_DVR_TIME struEndTime; // 结束时间 + BYTE byRes[8]; // 保留字节 +}NET_DVR_ALARMHOST_SEARCH_LOG_PARAM, LPNET_DVR_ALARMHOST_SEARCH_LOG_PARAM; + +typedef struct tagNET_DVR_ALARMHOST_LOG_RET +{ + NET_DVR_TIME struLogTime; // 日志时间 + BYTE sUserName[NAME_LEN]; // 操作用户 + NET_DVR_IPADDR struIPAddr; // 操作IP地址 + WORD wMajorType; // 主类型 + WORD wMinorType; // 次类型 + WORD wParam; // 操作参数 + BYTE byRes[10]; + DWORD dwInfoLen; // 描述信息长度 + char sInfo[LOG_INFO_LEN]; // 描述信息 +}NET_DVR_ALARMHOST_LOG_RET, *LPNET_DVR_ALARMHOST_LOG_RET; + +/*************************动环报警管理主机日志查找 end***********************************************/ + +//报警输出状态(9000扩展) +typedef struct +{ + BYTE Output[MAX_ALARMOUT_V30]; +}NET_DVR_ALARMOUTSTATUS_V30, *LPNET_DVR_ALARMOUTSTATUS_V30; + +//报警输出状态 +typedef struct +{ + BYTE Output[MAX_ALARMOUT]; +}NET_DVR_ALARMOUTSTATUS, *LPNET_DVR_ALARMOUTSTATUS; + +//交易信息 +typedef struct +{ + USHORT m_Year; + USHORT m_Month; + USHORT m_Day; + USHORT m_Hour; + USHORT m_Minute; + USHORT m_Second; + BYTE DeviceName[24]; //设备名称 + DWORD dwChannelNumer; //通道号 + BYTE CardNumber[32]; //卡号 + char cTradeType[12]; //交易类型 + DWORD dwCash; //交易金额 +}NET_DVR_TRADEINFO, *LPNET_DVR_TRADEINFO; + + +//ATM专用 +/****************************ATM(begin)***************************/ +#define NCR 0 +#define DIEBOLD 1 +#define WINCOR_NIXDORF 2 +#define SIEMENS 3 +#define OLIVETTI 4 +#define FUJITSU 5 +#define HITACHI 6 +#define SMI 7 +#define IBM 8 +#define BULL 9 +#define YiHua 10 +#define LiDe 11 +#define GDYT 12 +#define Mini_Banl 13 +#define GuangLi 14 +#define DongXin 15 +#define ChenTong 16 +#define NanTian 17 +#define XiaoXing 18 +#define GZYY 19 +#define QHTLT 20 +#define DRS918 21 +#define KALATEL 22 +#define NCR_2 23 +#define NXS 24 + + +/*帧格式*/ +typedef struct +{ + BYTE code[12]; /* 代码 */ +}NET_DVR_FRAMETYPECODE; + + +//ATM参数 +typedef struct +{ + DWORD dwSize; + char sATMIP[16]; /* ATM IP地址 */ + DWORD dwATMType; /* ATM类型 */ + DWORD dwInputMode; /* 输入方式 0-网络侦听 1-网络接收 2-串口直接输入 3-串口ATM命令输入*/ + DWORD dwFrameSignBeginPos; /* 报文标志位的起始位置*/ + DWORD dwFrameSignLength; /* 报文标志位的长度 */ + BYTE byFrameSignContent[12]; /* 报文标志位的内容 */ + DWORD dwCardLengthInfoBeginPos; /* 卡号长度信息的起始位置 */ + DWORD dwCardLengthInfoLength; /* 卡号长度信息的长度 */ + DWORD dwCardNumberInfoBeginPos; /* 卡号信息的起始位置 */ + DWORD dwCardNumberInfoLength; /* 卡号信息的长度 */ + DWORD dwBusinessTypeBeginPos; /* 交易类型的起始位置 */ + DWORD dwBusinessTypeLength; /* 交易类型的长度 */ + NET_DVR_FRAMETYPECODE frameTypeCode[10];/* 类型 */ +}NET_DVR_FRAMEFORMAT, *LPNET_DVR_FRAMEFORMAT; + +//ATM参数(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_IPADDR struATMIP; /* ATM IP地址 */ + DWORD dwATMType; /* ATM类型 */ + DWORD dwInputMode; /* 输入方式 0-网络侦听 1-网络接收 2-串口直接输入 3-串口ATM命令输入*/ + DWORD dwFrameSignBeginPos; /* 报文标志位的起始位置*/ + DWORD dwFrameSignLength; /* 报文标志位的长度 */ + BYTE byFrameSignContent[12]; /* 报文标志位的内容 */ + DWORD dwCardLengthInfoBeginPos; /* 卡号长度信息的起始位置 */ + DWORD dwCardLengthInfoLength; /* 卡号长度信息的长度 */ + DWORD dwCardNumberInfoBeginPos; /* 卡号信息的起始位置 */ + DWORD dwCardNumberInfoLength; /* 卡号信息的长度 */ + DWORD dwBusinessTypeBeginPos; /* 交易类型的起始位置 */ + DWORD dwBusinessTypeLength; /* 交易类型的长度 */ + NET_DVR_FRAMETYPECODE frameTypeCode[10]; /* 类型 */ + WORD wATMPort; /* 卡号捕捉端口号(网络协议方式) (保留)0xffff表示该值无效*/ + WORD wProtocolType; /* 网络协议类型(保留) 0xffff表示该值无效*/ + BYTE byRes[24]; +}NET_DVR_FRAMEFORMAT_V30, *LPNET_DVR_FRAMEFORMAT_V30; + +//SDK_V31 ATM + +/*过滤设置*/ +typedef struct tagNET_DVR_FILTER +{ + BYTE byEnable; //0,不启用;1,启用 + BYTE byMode; //0,ASCII;1,HEX + BYTE byFrameBeginPos; // 需要过滤目标字符串起始位置 + BYTE byRes; // 保留字节 + BYTE byFilterText[16]; //过滤字符串 + BYTE byRes2[12]; // 保留字节 +}NET_DVR_FILTER, *LPNET_DVR_FILTER; + +//数据包分析 数据包标识 +typedef struct tagNET_DVR_IDENTIFICAT +{ + BYTE byStartMode; //起始字符模式:0,ASCII;1,HEX + BYTE byEndMode; //结束字符模式:0,ASCII;1,HEX + BYTE byRes[2]; //保留字节 + NET_DVR_FRAMETYPECODE struStartCode; //数据包起始标识字符 + NET_DVR_FRAMETYPECODE struEndCode; //数据包结束标识字符 + BYTE byRes1[12]; //保留字节 +}NET_DVR_IDENTIFICAT, *LPNET_DVR_IDENTIFICAT; + +typedef struct tagNET_DVR_PACKAGE_LOCATION/*报文信息位置*/ +{ + BYTE byOffsetMode; /*报文位置信息模式 0,token(字符标志模式);1,fix(固定模式)*/ + BYTE byRes1[3]; // 保留字节 + DWORD dwOffsetPos; /*mode为1的时候使用,固定偏移大小*/ + NET_DVR_FRAMETYPECODE struTokenCode; /*标志位*/ + BYTE byMultiplierValue; /*标志位多少次出现*/ + BYTE byEternOffset; /*附加字符偏移量*/ + BYTE byCodeMode; /*0,ASCII;1,HEX*/ + BYTE byRes2[9]; //保留字节 +}NET_DVR_PACKAGE_LOCATION, *LPNET_DVR_PACKAGE_LOCATION; + + +typedef struct tagNET_DVR_PACKAGE_LENGTH//报文信息长度 +{ + BYTE byLengthMode; //长度类型,0,可变长度;1,固定长度;2,自助长度(从卡号中获取) + BYTE byRes1[3]; // 保留字节 + DWORD dwFixLength; //mode为1的时候使用,固定长度大小 + DWORD dwMaxLength; //报文信息最大长度 byLengthMode为0时使用 + DWORD dwMinLength; //报文信息最小长度 byLengthMode为0时使用 + BYTE byEndMode; //可变长度 终结符模式 0,ASCII;1,HEX + BYTE byRes2[3]; //保留字节 + NET_DVR_FRAMETYPECODE struEndCode; //可变长度终结符 + DWORD dwLengthPos; //lengthMode为2的时候使用,卡号长度在报文中的位置 + DWORD dwLengthLen; //lengthMode为2的时候使用,卡号长度的长度 + BYTE byRes3[8]; // 保留字节 +}NET_DVR_PACKAGE_LENGTH,* LPNET_DVR_PACKAGE_LENGTH; + +typedef struct tagNET_DVR_OSD_POSITION//OSD 叠加的位置 +{ + BYTE byPositionMode; //叠加风格,共2种;0,不显示;1,自定义 + BYTE byRes1[3]; // 保留字节 + DWORD dwPosX; //x坐标,叠加风格为自定义时使用 + DWORD dwPosY; //y坐标,叠加风格为自定义时使用 + BYTE byRes2[8]; //保留字节 +}NET_DVR_OSD_POSITION, *LPNET_DVR_OSD_POSITION; + +typedef struct tagNET_DVR_DATE_FORMAT//日期显示格式 +{ + BYTE byMonth; //Month,0.mm;1.mmm;2.mmmm + BYTE byDay; //Day,0.dd; + BYTE byYear; //Year,0.yy;1.yyyy + BYTE byDateForm; //0~5,年月日的排列组合 + BYTE byRes[20]; // 保留字节 + char chSeprator[4]; //分隔符 + char chDisplaySeprator[4]; //显示分隔符 + BYTE byDisplayForm; //0~5,3个item的排列组合 + BYTE res[27]; // 保留字节 +}NET_DVR_DATE_FORMAT, *LPNET_DVR_DATE_FORMAT; +typedef struct tagNET_DVRT_TIME_FORMAT//时间显示格式 +{ + BYTE byTimeForm; //1. HH MM SS;0. HH MM + BYTE byRes1[23]; // 保留字节 + BYTE byHourMode; //0,12;1,24 + BYTE byRes2[3]; // 保留字节 + char chSeprator[4]; //报文分隔符,暂时没用 + char chDisplaySeprator[4]; //显示分隔符 + BYTE byDisplayForm; //0~5,3个item的排列组合 + BYTE byRes3[3]; // 保留字节 + BYTE byDisplayHourMode; //0,12;1,24 + BYTE byRes4[19]; // 保留字节 +}NET_DVR_TIME_FORMAT, *LPNET_DVR_TIME_FORMAT; + +typedef struct tagNET_DVR_OVERLAY_CHANNEL +{ + BYTE byChannel[64];//叠加的通道 每个字节标识一个通道, 例如byChannel[0]值为1对应叠加通道1,0表示不叠加通道1。 + DWORD dwDelayTime; //叠加延时时间 + BYTE byEnableDelayTime; //是否启用叠加延时 + BYTE byRes[11]; // 保留字节 +}NET_DVR_OVERLAY_CHANNEL, *LPNET_DVR_OVERLAY_CHANNEL; + +// ATM 报文行为信息 +typedef struct tagNET_DVR_ATM_PACKAGE_ACTION +{ + NET_DVR_PACKAGE_LOCATION struPackageLocation;// 报文位置信息 + NET_DVR_OSD_POSITION struOsdPosition; // OSD 叠加位置 + NET_DVR_FRAMETYPECODE struActionCode; //交易类型行为码 + NET_DVR_FRAMETYPECODE struPreCode; //叠加字符前的字符 + BYTE byActionCodeMode; //交易类型行为码模式0,ASCII;1,HEX + BYTE byRes[7]; // 保留字节 +}NET_DVR_ATM_PACKAGE_ACTION, *LPNET_DVR_ATM_PACKAGE_ACTION; + +// ATM 报文DATA信息 +typedef struct tagNET_DVR_ATM_PACKAGE_DATE +{ + NET_DVR_PACKAGE_LOCATION struPackageLocation;// 日期在报文中的位置信息 + NET_DVR_DATE_FORMAT struDateForm; //日期显示格式 + NET_DVR_OSD_POSITION struOsdPosition; // OSD叠加位置信息 + BYTE res[8]; // 保留字节 +}NET_DVR_ATM_PACKAGE_DATE, *LPNET_DVR_ATM_PACKAGE_DATE; + + +//ATM报文时间信息 +typedef struct tagNET_DVR_ATM_PACKAGE_TIME +{ + NET_DVR_PACKAGE_LOCATION location; // 时间在报文中的位置信息 + NET_DVR_TIME_FORMAT struTimeForm; // 时间显示格式 + NET_DVR_OSD_POSITION struOsdPosition;// OSD 叠加位置信息 + BYTE byRes[8]; // 保留字节 +}NET_DVR_ATM_PACKAGE_TIME, *LPNET_DVR_ATM_PACKAGE_TIME; + + +// ATM 其他报文信息(卡号,交易金额,交易序号) +typedef struct tagNET_DVR_ATM_PACKAGE_OTHERS +{ + NET_DVR_PACKAGE_LOCATION struPackageLocation; //报文位置信息 + NET_DVR_PACKAGE_LENGTH struPackageLength; //长度信息 + NET_DVR_OSD_POSITION struOsdPosition; // OSD叠加位置信息 + NET_DVR_FRAMETYPECODE struPreCode; //叠加字符前的字符 + BYTE res[8]; //保留字节 +}NET_DVR_ATM_PACKAGE_OTHERS, *LPNET_DVR_ATM_PACKAGE_OTHERS; + + +//用户自定义协议 +typedef struct tagNET_DVR_ATM_USER_DEFINE_PROTOCOL +{ + NET_DVR_IDENTIFICAT struIdentification; //报文标志 + NET_DVR_FILTER struFilter; //数据包过滤设置 + NET_DVR_ATM_PACKAGE_OTHERS struCardNoPara; //叠加卡号设置 + NET_DVR_ATM_PACKAGE_ACTION struTradeActionPara[MAX_ACTION_TYPE]; //叠加交易行为设置 0-9 依次对应InCard OutCard OverLay SetTime GetStatus Query WithDraw Deposit ChanPass Transfer + NET_DVR_ATM_PACKAGE_OTHERS struAmountPara; //叠加交易金额设置 + NET_DVR_ATM_PACKAGE_OTHERS struSerialNoPara; //叠加交易序号设置 + NET_DVR_OVERLAY_CHANNEL struOverlayChan; //叠加通道设置 + NET_DVR_ATM_PACKAGE_DATE struRes1; //叠加日期,保留 + NET_DVR_ATM_PACKAGE_TIME struRes2; //叠加时间,保留 + BYTE byRes3[124]; //保留 +}NET_DVR_ATM_USER_DEFINE_PROTOCOL, *LPNET_DVR_ATM_USER_DEFINE_PROTOCOL; + +typedef struct tagNET_DVR_ATM_FRAMEFORMAT_V30 +{ + DWORD dwSize; //结构大小 + BYTE byEnable; /*是否启用0,不启用;1,启用*/ + BYTE byInputMode; /**输入方式:0-网络监听、1网络协议、2-串口监听、3-串口协议*/ + BYTE byRes1[34]; //保留字节 + NET_DVR_IPADDR struAtmIp; /*ATM 机IP 网络监听时使用 */ + WORD wAtmPort; /* 网络协议方式时是使用*/ + BYTE byRes2[2]; // 保留字节 + DWORD dwAtmType; /*ATM协议类型,从NET_DVR_ATM_PROTOCOL结构中获取,如果类型为自定义时使用用户自定义协议*/ + NET_DVR_ATM_USER_DEFINE_PROTOCOL struAtmUserDefineProtocol; //用户自定义协议,当ATM类型为自定时需要使用该定义 + BYTE byRes3[8]; +}NET_DVR_ATM_FRAMEFORMAT_V30, *LPNET_DVR_ATM_FRAMEFORMAT_V30; + +//ATM协议类型 +typedef enum _ATM_PROTO_TYPE_ +{ + ATM_PROTO_NCR = 0,//NCR + ATM_PROTO_DIEBOLD = 1,//DIEBOLD + ATM_PROTO_WINCOR_NIXDORF = 2,//WINCOR-NIXDORF + ATM_PROTO_SIEMENS = 4,//SIEMENS + ATM_PROTO_OLIVETTI = 5,//OLIVETTI + ATM_PROTO_FUJITSU = 6,//FUJITSU + ATM_PROTO_HITACHI = 7,//HITACHI + ATM_PROTO_SMI = 8,//SMI + ATM_PROTO_BULL = 9,//BULL + ATM_PROTO_YIHUA = 10,//怡化 + ATM_PROTO_LIDE = 11,//立德 + ATM_PROTO_GDYT = 12,//广电运通 + ATM_PROTO_MINI_BANL = 13,//Mini-Banl + ATM_PROTO_GUANGLI = 14,//广利 + ATM_PROTO_DONGXIN = 15,//东信 + ATM_PROTO_CHENTONG = 16,//辰通 + ATM_PROTO_NANTIAN = 17,//南天 + ATM_PROTO_XIAOXING = 18,//晓星 + ATM_PROTO_GZYY = 19,//广州御银 + ATM_PROTO_QHTLT = 20,//青湖泰利特 + ATM_PROTO_DRS918 = 21,//DRS918 + ATM_PROTO_KALATEL = 22,//KALATEL + ATM_PROTO_NCR_2 = 23,//NCR_2 + ATM_PROTO_NXS = 24,//NXS + ATM_PROTO_ICBC = 25,//工商银行 + ATM_PROTO_PSBC = 26,//中国邮政储蓄银行 + ATM_PROTO_CUSTOM = 1025//自定义 +}ATM_PROTO_TYPE; + +typedef struct tagNET_DVR_ATM_PROTO_TYPE +{ + DWORD dwAtmType; //ATM协议类型,同时作为索引序号 ATM 配置中的dwAtmType 自定义时为1025 + char chDesc[ATM_DESC_LEN]; //ATM协议简单描述 +}NET_DVR_ATM_PROTO_TYPE, *LPNET_DVR_ATM_PROTO_TYPE; //协议信息数据结构 + +typedef struct tagNET_DVR_ATM_PROTO_LIST //ATM 协议列表 +{ + DWORD dwAtmProtoNum; // 协议列表的个数 + NET_DVR_ATM_PROTO_TYPE struAtmProtoType[MAX_ATM_PROTOCOL_NUM]; //协议列表信息 +}NET_DVR_ATM_PROTO_LIST, *LPNET_DVR_ATM_PROTO_LIST; + +typedef struct tagNET_DVR_ATM_PROTOCOL +{ + DWORD dwSize; + NET_DVR_ATM_PROTO_LIST struNetListenList; // 网络监听协议描述 + NET_DVR_ATM_PROTO_LIST struSerialListenList; //串口监听协议描述 + NET_DVR_ATM_PROTO_LIST struNetProtoList; //网络协议描述 + NET_DVR_ATM_PROTO_LIST struSerialProtoList; //串口协议描述 + NET_DVR_ATM_PROTO_TYPE struCustomProto; //自定义协议 +}NET_DVR_ATM_PROTOCOL, *LPNET_DVR_ATM_PROTOCOL; +// SDK_V31 + +/*****************************DS-6001D/F(begin)***************************/ +//DS-6001D Decoder +typedef struct +{ + BYTE byEncoderIP[16]; //解码设备连接的服务器IP + BYTE byEncoderUser[16]; //解码设备连接的服务器的用户名 + BYTE byEncoderPasswd[16]; //解码设备连接的服务器的密码 + BYTE bySendMode; //解码设备连接服务器的连接模式 + BYTE byEncoderChannel; //解码设备连接的服务器的通道号 + WORD wEncoderPort; //解码设备连接的服务器的端口号 + BYTE reservedData[4]; //保留 +}NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO; + +typedef struct +{ + BYTE byEncoderIP[16]; //解码设备连接的服务器IP + BYTE byEncoderUser[16]; //解码设备连接的服务器的用户名 + BYTE byEncoderPasswd[16]; //解码设备连接的服务器的密码 + BYTE byEncoderChannel; //解码设备连接的服务器的通道号 + BYTE bySendMode; //解码设备连接的服务器的连接模式 + WORD wEncoderPort; //解码设备连接的服务器的端口号 + DWORD dwConnectState; //解码设备连接服务器的状态 + BYTE reservedData[4]; //保留 +}NET_DVR_DECODERSTATE, *LPNET_DVR_DECODERSTATE; + +/*解码设备控制码定义*/ +#define NET_DEC_STARTDEC 1 +#define NET_DEC_STOPDEC 2 +#define NET_DEC_STOPCYCLE 3 +#define NET_DEC_CONTINUECYCLE 4 +/*连接的通道配置*/ +typedef struct +{ + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE byChannel; /* 通道号 */ + BYTE byLinkMode; /* 连接模式 */ + BYTE byLinkType; /* 连接类型 0-主码流 1-子码流 */ +}NET_DVR_DECCHANINFO, *LPNET_DVR_DECCHANINFO; + +/*每个解码通道的配置*/ +typedef struct +{ + BYTE byPoolChans; /*每路解码通道上的循环通道数量, 最多4通道 0表示没有解码*/ + NET_DVR_DECCHANINFO struchanConInfo[MAX_DECPOOLNUM]; + BYTE byEnablePoll; /*是否轮巡 0-否 1-是*/ + BYTE byPoolTime; /*轮巡时间 0-保留 1-10秒 2-15秒 3-20秒 4-30秒 5-45秒 6-1分钟 7-2分钟 8-5分钟 */ +}NET_DVR_DECINFO, *LPNET_DVR_DECINFO; + +/*整个设备解码配置*/ +typedef struct +{ + DWORD dwSize; + DWORD dwDecChanNum; /*解码通道的数量*/ + NET_DVR_DECINFO struDecInfo[MAX_DECNUM]; +}NET_DVR_DECCFG, *LPNET_DVR_DECCFG; + +//2005-08-01 +/* 解码设备透明通道设置 */ +typedef struct +{ + DWORD dwEnableTransPort; /* 是否启动透明通道 0-不启用 1-启用*/ + char sDecoderIP[16]; /* DVR IP地址 */ + WORD wDecoderPort; /* 端口号 */ + WORD wDVRTransPort; /* 配置前端DVR是从485/232输出,1表示232串口,2表示485串口 */ + char cReserve[4]; +}NET_DVR_PORTINFO, *LPNET_DVR_PORTINFO; + +typedef struct +{ + DWORD dwSize; + NET_DVR_PORTINFO struTransPortInfo[MAX_TRANSPARENTNUM]; /* 数组0表示232 数组1表示485 */ +}NET_DVR_PORTCFG, *LPNET_DVR_PORTCFG; + +/* 控制网络文件回放 */ +typedef struct +{ + DWORD dwSize; + char sDecoderIP[16]; /* DVR IP地址 */ + WORD wDecoderPort; /* 端口号 */ + WORD wLoadMode; /* 回放下载模式 1-按名字 2-按时间 */ + union + { + BYTE byFile[100]; /* 回放的文件名 */ + struct + { + DWORD dwChannel; + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ + }bytime; + }mode_size; +}NET_DVR_PLAYREMOTEFILE, *LPNET_DVR_PLAYREMOTEFILE; + +/*当前设备解码连接状态*/ +typedef struct +{ + DWORD dwWorkType; /*工作方式:1:轮巡、2:动态连接解码、3:文件回放下载 4:按时间回放下载*/ + char sDVRIP[16]; /*连接的设备ip*/ + WORD wDVRPort; /*连接端口号*/ + BYTE byChannel; /* 通道号 */ + BYTE byLinkMode; /* 连接模式 */ + DWORD dwLinkType; /*连接类型 0-主码流 1-子码流*/ + union + { + struct + { + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + char cReserve[52]; + }userInfo; + struct + { + BYTE fileName[100]; + }fileInfo; + struct + { + DWORD dwChannel; + BYTE sUserName[NAME_LEN]; /*请求视频用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ + }timeInfo; + }objectInfo; +}NET_DVR_DECCHANSTATUS, *LPNET_DVR_DECCHANSTATUS; + +typedef struct +{ + DWORD dwSize; + NET_DVR_DECCHANSTATUS struDecState[MAX_DECNUM]; +}NET_DVR_DECSTATUS, *LPNET_DVR_DECSTATUS; +/*****************************DS-6001D/F(end)***************************/ + +//单字符参数(子结构) +typedef struct +{ + WORD wShowString; // 预览的图象上是否显示字符,0-不显示,1-显示 整个预览画面大小704*576,单个字符的大小为32*32 + WORD wStringSize; /* 该行字符的长度,不能大于44个字符 */ + WORD wShowStringTopLeftX; /* 字符显示位置的x坐标 */ + WORD wShowStringTopLeftY; /* 字符名称显示位置的y坐标 */ + char sString[44]; /* 要显示的字符内容 */ +}NET_DVR_SHOWSTRINGINFO, *LPNET_DVR_SHOWSTRINGINFO; + +//叠加字符(9000扩展) +typedef struct +{ + DWORD dwSize; + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_V30]; /* 要显示的字符内容 */ +}NET_DVR_SHOWSTRING_V30, *LPNET_DVR_SHOWSTRING_V30; + +//叠加字符扩展(8条字符) +typedef struct +{ + DWORD dwSize; + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM_EX]; /* 要显示的字符内容 */ +}NET_DVR_SHOWSTRING_EX, *LPNET_DVR_SHOWSTRING_EX; + +//叠加字符 +typedef struct +{ + DWORD dwSize; + NET_DVR_SHOWSTRINGINFO struStringInfo[MAX_STRINGNUM]; /* 要显示的字符内容 */ +}NET_DVR_SHOWSTRING, *LPNET_DVR_SHOWSTRING; + +/****************************DS9000新增结构(begin)******************************/ +/* +EMAIL参数结构 +*/ +typedef struct +{ + DWORD dwSize; + BYTE sAccount[NAME_LEN]; /* 账号*/ + BYTE sPassword[MAX_EMAIL_PWD_LEN]; /*密码 */ + struct + { + BYTE sName[NAME_LEN]; /* 发件人姓名 */ + BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* 发件人地址 */ + }struSender; + BYTE sSmtpServer[MAX_EMAIL_ADDR_LEN]; /* smtp服务器 */ + BYTE sPop3Server[MAX_EMAIL_ADDR_LEN]; /* pop3服务器 */ + struct + { + BYTE sName[NAME_LEN]; /* 收件人姓名 */ + BYTE sAddress[MAX_EMAIL_ADDR_LEN]; /* 收件人地址 */ + }struReceiver[3]; /* 最多可以设置3个收件人 */ + BYTE byAttachment; /* 是否带附件 */ + BYTE bySmtpServerVerify; /* 发送服务器要求身份验证 */ + BYTE byMailInterval; /* mail interval */ + BYTE byEnableSSL; //ssl是否启用9000_1.1 + WORD wSmtpPort; //gmail的465,普通的为25 + BYTE byEnableTLS; /*TLS是否启用*/ + BYTE byStartTLS; /*是否启用StartTLS*/ + BYTE byRes[72]; /*保留*/ +} NET_DVR_EMAILCFG_V30, *LPNET_DVR_EMAILCFG_V30; + +/* +DVR实现巡航数据结构 +*/ +typedef struct +{ + DWORD dwSize; + BYTE byPresetNo[CRUISE_MAX_PRESET_NUMS]; /* 预置点号 */ + BYTE byCruiseSpeed[CRUISE_MAX_PRESET_NUMS]; /* 巡航速度 */ + WORD wDwellTime[CRUISE_MAX_PRESET_NUMS]; /* 停留时间 */ + BYTE byEnableThisCruise; /* 是否启用 */ + BYTE res[15]; +}NET_DVR_CRUISE_PARA, *LPNET_DVR_CRUISE_PARA; +/****************************DS9000新增结构(end)******************************/ + +//时间点 +typedef struct +{ + DWORD dwMonth; //月 0-11表示1-12个月 + DWORD dwWeekNo; //第几周 0-第1周 1-第2周 2-第3周 3-第4周 4-最后一周 + DWORD dwWeekDate; //星期几 0-星期日 1-星期一 2-星期二 3-星期三 4-星期四 5-星期五 6-星期六 + DWORD dwHour; //小时 开始时间0-23 结束时间1-23 + DWORD dwMin; //分 0-59 +}NET_DVR_TIMEPOINT; + +//夏令时参数 +typedef struct +{ + DWORD dwSize; + DWORD dwZoneIndex; //应用层软件使用NET_DVR_NTPPARA 中的cTimeDifferenceH 或cTimeDifferenceM 来设置时区,此处用获取的值填充,不对用户提供输入编辑框 + BYTE byRes1[12]; //保留 + DWORD dwEnableDST; //是否启用夏时制 0-不启用 1-启用 + BYTE byDSTBias; //夏令时偏移值,30min, 60min, 90min, 120min, 以分钟计,传递原始数值 + BYTE byRes2[3]; + NET_DVR_TIMEPOINT struBeginPoint; //夏时制开始时间 + NET_DVR_TIMEPOINT struEndPoint; //夏时制停止时间 +}NET_DVR_ZONEANDDST, *LPNET_DVR_ZONEANDDST; + +//图片质量 +typedef struct +{ +/*注意:当图像压缩分辨率为VGA时,支持0=CIF, 1=QCIF, 2=D1抓图, +当分辨率为3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA,7=XVGA, 8=HD900p + 仅支持当前分辨率的抓图*/ + + /* 可以通过能力集获取 + 0-CIF, 1-QCIF, 2-D1, 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720), + 6-VGA, 7-XVGA, 8-HD900p, 9-HD1080, 10-2560*1920, + 11-1600*304, 12-2048*1536, 13-2448*2048, 14-2448*1200, 15-2448*800, + 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576, + 21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768, + 26-1280*1280, 27-1600*600, 28-2048*768, 29-160*120, 55-3072*2048, + 64-3840*2160, 70-2560*1440, 75-336*256, + 78-384*256, 79-384*216, 80-320*256, 82-320*192, 83-512*384, + 127-480*272, 128-512*272, 161-288*320, 162-144*176, 163-480*640, + 164-240*320, 165-120*160, 166-576*720, 167-720*1280, 168-576*960, + 180-180*240, 181-360*480, 182-540*720, 183-720*960, 184-960*1280, + 185-1080*1440, 215-1080*720(占位,未测试), 216-360x640(占位,未测试),245-576*704(占位,未测试) + 500-384*288, + 0xff-Auto(使用当前码流分辨率) + */ + WORD wPicSize; + WORD wPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ +}NET_DVR_JPEGPARA, *LPNET_DVR_JPEGPARA; + +//区域框结构 +typedef struct tagNET_VCA_RECT +{ + float fX; //边界框左上角点的X轴坐标, 0.000~1 + float fY; //边界框左上角点的Y轴坐标, 0.000~1 + float fWidth; //边界框的宽度, 0.000~1 + float fHeight; //边界框的高度, 0.000~1 +}NET_VCA_RECT, *LPNET_VCA_RECT; + +typedef struct tagNET_DVR_JPEGPICTURE_WITH_APPENDDATA +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + DWORD dwJpegPicLen;//Jpeg图片长度 + char *pJpegPicBuff;//Jpeg图片指针 + DWORD dwJpegPicWidth; // 图像宽度 + DWORD dwJpegPicHeight; //图像高度 + DWORD dwP2PDataLen;//全屏测温数据长度 + char *pP2PDataBuff; //全屏测温数据指针 + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 + BYTE byRes1[3]; + DWORD dwVisiblePicLen;//可见光图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char *pVisiblePicBuff;//可见光图片指针 +#else + char *pVisiblePicBuff;//可见光图片指针 + BYTE byRes2[4]; +#endif + NET_VCA_RECT struThermalValidRect;//热成像有效区域 + NET_VCA_RECT struVisibleValidRect;//可见光有效区域 + BYTE byRes[208]; +}NET_DVR_JPEGPICTURE_WITH_APPENDDATA, *LPNET_DVR_JPEGPICTURE_WITH_APPENDDATA; + +//抓图参数 +typedef struct +{ + NET_DVR_JPEGPARA struParam; + BYTE byPicFormat; // 设备抓图图片格式 0-Jpeg + /* + 设备抓图类型: + 0-设备通用抓图,1-鹰眼标定图片(FPJA重启刷新获取图片 最长超时3min),2-从Flash中获取已存在鹰眼标定图片, + 3-获取鱼眼相机圆形图片,4-专用高清抓图,5-获取鱼眼相机壁装全景展开图(矩形图) + */ + BYTE byCapturePicType; + BYTE bySceneID; //0-不支持,1-场景1,2-场景2 …… + BYTE byRes[253]; +}NET_DVR_PICPARAM_V50, *LPNET_DVR_PICPARAM_V50; +/* aux video out parameter */ +//辅助输出参数配置 +typedef struct +{ + DWORD dwSize; + DWORD dwAlarmOutChan; /* 选择报警弹出大报警通道切换时间:1画面的输出通道: 0:主输出/1:辅1/2:辅2/3:辅3/4:辅4 */ + DWORD dwAlarmChanSwitchTime; /* :1秒 - 10:10秒 */ + DWORD dwAuxSwitchTime[MAX_AUXOUT]; /* 辅助输出切换时间: 0-不切换,1-5s,2-10s,3-20s,4-30s,5-60s,6-120s,7-300s */ + BYTE byAuxOrder[MAX_AUXOUT][MAX_WINDOW]; /* 辅助输出预览顺序, 0xff表示相应的窗口不预览 */ +}NET_DVR_AUXOUTCFG, *LPNET_DVR_AUXOUTCFG; + + +//ntp +typedef struct +{ + BYTE sNTPServer[64]; /* Domain Name or IP addr of NTP server */ + WORD wInterval; /* adjust time interval(hours) */ + BYTE byEnableNTP; /* enable NPT client 0-no,1-yes*/ + signed char cTimeDifferenceH; /* 与国际标准时间的 小时偏移-12 ... +13 */ + signed char cTimeDifferenceM;/* 与国际标准时间的 分钟偏移0, 30, 45*/ + BYTE res1; + WORD wNtpPort; /* ntp server port 9000新增 设备默认为123*/ + BYTE res2[8]; +}NET_DVR_NTPPARA, *LPNET_DVR_NTPPARA; + +//ddns +typedef struct +{ + BYTE sUsername[NAME_LEN]; /* DDNS账号用户名/密码 */ + BYTE sPassword[PASSWD_LEN]; + BYTE sDomainName[64]; /* 域名 */ + BYTE byEnableDDNS; /*是否应用 0-否,1-是*/ + BYTE res[15]; +}NET_DVR_DDNSPARA, *LPNET_DVR_DDNSPARA; + + +typedef struct +{ + BYTE byHostIndex; /* 0-私有DDNS 1-Dyndns 2-PeanutHull(花生壳)*/ + BYTE byEnableDDNS; /*是否应用DDNS 0-否,1-是*/ + WORD wDDNSPort; /* DDNS端口号 */ + BYTE sUsername[NAME_LEN]; /* DDNS用户名*/ + BYTE sPassword[PASSWD_LEN]; /* DDNS密码 */ + BYTE sDomainName[MAX_DOMAIN_NAME]; /* 设备配备的域名地址 */ + BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNS 对应的服务器地址,可以是IP地址或域名 */ + BYTE byRes[16]; +}NET_DVR_DDNSPARA_EX, *LPNET_DVR_DDNSPARA_EX; + +//9000扩展 +typedef struct +{ + BYTE byEnableDDNS; + BYTE byHostIndex;/*0-IPServer 1-Dyndns 2-PeanutHull(花生壳),3- NO-IP, 4- hiDDNS*/ + BYTE byRes1[2]; + struct + { + BYTE sUsername[NAME_LEN]; /* DDNS账号用户名*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + BYTE sDomainName[MAX_DOMAIN_NAME]; /* 设备配备的域名地址 */ + BYTE sServerName[MAX_DOMAIN_NAME]; /* DDNS协议对应的服务器地址,可以是IP地址或域名 */ + WORD wDDNSPort; /* 端口号 */ + WORD wCountryID; //国家编号,仅在byHostIndex = 4时有效,0表示默认 + BYTE byStatus; /* DDNS运行状态(只读), + 0-无意义 + 1-连接服务器失败(connServerfail)、 + 2-解析服务器消息失败(solveServerMesFail)、 + 3-连接心跳服务器失败(connHeartSrvfail)、 + 4-解析心跳服务器消息失败(solveHeartSrvMesFail)、 + 5-连接域名服务器失败(connHostSrvfail)、 + 6-解析域名服务器消息失败(solveHostSrvMesFail)、 + 7-DDNS状态正常(updateSuccess)、 + 8-未启用(disable)、 + 9-注册域名成功(registHostSuccess)、 + 10-DNS服务器配置错误(DNSSrvError)、 + 11-域名被占用(DomainConflict)、 + 12-别名(域名)不合法(invalidAlias)、 + 13-鉴权失败(authenticationFail) + 14-注册服务器错误(registServerError) + 15-注册失败(registFail) + */ + BYTE byRes[7]; + } struDDNS[MAX_DDNS_NUMS]; + BYTE byRes2[16]; +}NET_DVR_DDNSPARA_V30, *LPNET_DVR_DDNSPARA_V30; + +//email +typedef struct +{ + BYTE sUsername[64]; /* 邮件账号/密码 */ + BYTE sPassword[64]; + BYTE sSmtpServer[64]; + BYTE sPop3Server[64]; + BYTE sMailAddr[64]; /* email */ + BYTE sEventMailAddr1[64]; /* 上传报警/异常等的email */ + BYTE sEventMailAddr2[64]; + BYTE res[16]; +}NET_DVR_EMAILPARA, *LPNET_DVR_EMAILPARA; + +//网络参数配置 +typedef struct +{ + DWORD dwSize; + char sDNSIp[16]; /* DNS服务器地址 */ + NET_DVR_NTPPARA struNtpClientParam; /* NTP参数 */ + NET_DVR_DDNSPARA struDDNSClientParam; /* DDNS参数 */ + BYTE res[464]; /* 保留 */ +}NET_DVR_NETAPPCFG, *LPNET_DVR_NETAPPCFG; + +//nfs结构配置 +typedef struct +{ + char sNfsHostIPAddr[16]; + BYTE sNfsDirectory[PATHNAME_LEN]; // PATHNAME_LEN = 128 +}NET_DVR_SINGLE_NFS, *LPNET_DVR_SINGLE_NFS; + +typedef struct +{ + DWORD dwSize; + NET_DVR_SINGLE_NFS struNfsDiskParam[MAX_NFS_DISK]; +}NET_DVR_NFSCFG, *LPNET_DVR_NFSCFG; + +typedef struct tagNET_DVR_ISCSI_CFG +{ + DWORD dwSize; // 结构大小 + WORD wVrmPort; // VRM 监听端口 + BYTE byEnable; // 是否启用 ISCSI存储 + BYTE byRes[69]; // 保留字节 + NET_DVR_IPADDR struVrmAddr; // VRM ip地址 16位 + char chNvtIndexCode[64]; //nvt index Code +}NET_DVR_ISCSI_CFG, *LPNET_DVR_ISCSI_CFG; + +//巡航点配置(私有IP快球专用) +typedef struct +{ + BYTE PresetNum; //预置点 + BYTE Dwell; //停留时间 + BYTE Speed; //速度 + BYTE Reserve; //保留 +}NET_DVR_CRUISE_POINT, *LPNET_DVR_CRUISE_POINT; + +typedef struct +{ + NET_DVR_CRUISE_POINT struCruisePoint[32]; //最大支持32个巡航点 +}NET_DVR_CRUISE_RET, *LPNET_DVR_CRUISE_RET; + +/************************************多路解码器(begin)***************************************/ +typedef struct +{ + DWORD dwSize; + char sFirstDNSIP[16]; + char sSecondDNSIP[16]; + char sRes[32]; +}NET_DVR_NETCFG_OTHER, *LPNET_DVR_NETCFG_OTHER; + +typedef struct +{ + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ + BYTE byTransProtocol; /* 传输协议类型 0-TCP, 1-UDP */ + BYTE byTransMode; /* 传输码流模式 0-主码流 1-子码流*/ + BYTE byRes[3]; + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ +}NET_DVR_MATRIX_DECINFO, *LPNET_DVR_MATRIX_DECINFO; + +//启动/停止动态解码 +typedef struct +{ + DWORD dwSize; + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 动态解码通道信息 */ +}NET_DVR_MATRIX_DYNAMIC_DEC, *LPNET_DVR_MATRIX_DYNAMIC_DEC; + +typedef struct +{ + DWORD dwSize; + DWORD dwIsLinked; /* 解码通道状态 0-休眠 1-正在连接 2-已连接 3-正在解码 */ + DWORD dwStreamCpRate; /* Stream copy rate, X kbits/second */ + char cRes[64]; /* 保留 */ +}NET_DVR_MATRIX_DEC_CHAN_STATUS, *LPNET_DVR_MATRIX_DEC_CHAN_STATUS; + +typedef struct +{ + DWORD dwSize; + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 解码通道信息 */ + DWORD dwDecState; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + char sFileName[128]; /* 按文件回放文件名 */ +}NET_DVR_MATRIX_DEC_CHAN_INFO, *LPNET_DVR_MATRIX_DEC_CHAN_INFO; + +//连接的通道配置 2007-11-05 +typedef struct +{ + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ + NET_DVR_MATRIX_DECINFO struDecChanInfo; /* 轮巡解码通道信息 */ +}NET_DVR_MATRIX_DECCHANINFO, *LPNET_DVR_MATRIX_DECCHANINFO; + +//2007-11-05 新增每个解码通道的配置 +typedef struct +{ + DWORD dwSize; + DWORD dwPoolTime; /*轮巡时间 */ + NET_DVR_MATRIX_DECCHANINFO struchanConInfo[MAX_CYCLE_CHAN]; +}NET_DVR_MATRIX_LOOP_DECINFO, *LPNET_DVR_MATRIX_LOOP_DECINFO; + +//2007-12-22 +typedef struct +{ + BYTE baudrate; /* 波特率 */ + BYTE databits; /* 数据位 */ + BYTE stopbits; /* 停止位 */ + BYTE parity; /* 奇偶校验位 */ + BYTE flowcontrol; /* 流控 */ + BYTE res[3]; +}TTY_CONFIG, *LPTTY_CONFIG; + +typedef struct +{ + BYTE byTranChanEnable; /* 当前透明通道是否打开 0:关闭 1:打开 */ + /* + * 多路解码器本地有1个485串口,1个232串口都可以作为透明通道,设备号分配如下: + * 0 RS485 + * 1 RS232 Console + */ + BYTE byLocalSerialDevice; /* Local serial device */ + /* + * 远程串口输出还是两个,一个RS232,一个RS485 + * 1表示232串口 + * 2表示485串口 + */ + BYTE byRemoteSerialDevice; /* Remote output serial device */ + BYTE res1; /* 保留 */ + char sRemoteDevIP[16]; /* Remote Device IP */ + WORD wRemoteDevPort; /* Remote Net Communication Port */ + BYTE res2[2]; /* 保留 */ + TTY_CONFIG RemoteSerialDevCfg; +}NET_DVR_MATRIX_TRAN_CHAN_INFO, *LPNET_DVR_MATRIX_TRAN_CHAN_INFO; + +typedef struct +{ + DWORD dwSize; + BYTE by232IsDualChan; /* 设置哪路232透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE by485IsDualChan; /* 设置哪路485透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE res[2]; /* 保留 */ + NET_DVR_MATRIX_TRAN_CHAN_INFO struTranInfo[MAX_SERIAL_NUM];/*同时支持建立MAX_SERIAL_NUM个透明通道*/ +}NET_DVR_MATRIX_TRAN_CHAN_CONFIG, *LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG; + +//2007-12-24 Merry Christmas Eve... +typedef struct +{ + DWORD dwSize; + char sDVRIP[16]; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ + BYTE byReserve; + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ + NET_DVR_TIME StartTime; + NET_DVR_TIME StopTime; + char sFileName[128]; +}NET_DVR_MATRIX_DEC_REMOTE_PLAY, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY; + +/* 文件播放命令 */ +#define NET_DVR_PLAYSTART 1//开始播放 +#define NET_DVR_PLAYSTOP 2//停止播放 +#define NET_DVR_PLAYPAUSE 3//暂停播放 +#define NET_DVR_PLAYRESTART 4//恢复播放 +#define NET_DVR_PLAYFAST 5//快放 +#define NET_DVR_PLAYSLOW 6//慢放 +#define NET_DVR_PLAYNORMAL 7//正常速度 +#define NET_DVR_PLAYSTARTAUDIO 9//打开声音 +#define NET_DVR_PLAYSTOPAUDIO 10//关闭声音 +#define NET_DVR_PLAYSETPOS 12//改变文件回放的进度 +#define NET_DVR_RESETBUFFER 37 //清空矩阵解码缓冲区(远程回放文件) + +typedef struct +{ + DWORD dwSize; + DWORD dwPlayCmd; /* 播放命令 见文件播放命令*/ + DWORD dwCmdParam; /* 播放命令参数 */ +}NET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_CONTROL; + +typedef struct +{ + DWORD dwSize; + DWORD dwCurMediaFileLen; /* 当前播放的媒体文件长度 */ + DWORD dwCurMediaFilePosition; /* 当前播放文件的播放位置 */ + DWORD dwCurMediaFileDuration; /* 当前播放文件的总时间 */ + DWORD dwCurPlayTime; /* 当前已经播放的时间 */ + DWORD dwCurMediaFIleFrames; /* 当前播放文件的总帧数 */ + DWORD dwCurDataType; /* 当前传输的数据类型,19-文件头,20-流数据, 21-播放结束标志 */ + BYTE res[72]; +}NET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS; + +//2009-4-11 added by likui 多路解码器new +typedef struct tagNET_MATRIX_PASSIVEMODE +{ + WORD wTransProtol; //传输协议,0-TCP, 1-UDP, 2-MCAST + WORD wPassivePort; //UDP端口, TCP时默认 + NET_DVR_IPADDR struMcastIP; //TCP,UDP时无效, MCAST时为多播地址 + BYTE byStreamType;/* 数据播放模式:REAL_TIME_STREAM(1)实时流,RECORD_STREAM(2)文件流 */ + BYTE byRes[7]; +}NET_DVR_MATRIX_PASSIVEMODE, *LPNET_DVR_MATRIX_PASSIVEMODE; + +typedef struct tagNET_DVR_MATRIX_TRAN_CHAN_INFO_V30 +{ + BYTE byTranChanEnable; /* 当前透明通道是否打开 0:关闭 1:打开 */ + BYTE byLocalSerialDevice; /* Local serial device */ + /* + * 多路解码器本地有1个485串口,1个232串口都可以作为透明通道,设备号分配如下: + * 0 RS485 + * 1 RS232 Console + * 2 Dual Scom + */ + BYTE byRemoteSerialDevice; /* Remote output serial device */ + /* + * 远程串口输出还是两个,一个RS232,一个RS485 + * 1 表示232串口 + * 2 表示485串口 + */ + BYTE byRes1; /* 保留 */ + NET_DVR_IPADDR struRemoteDevIP; /* Remote Device IP */ + WORD wRemoteDevPort; /* Remote Net Communication Port */ + BYTE byIsEstablished; /* 透明通道建立成功标志,0-没有成功,1-建立成功 */ + BYTE byRes2; /* 保留 */ + TTY_CONFIG RemoteSerialDevCfg; + BYTE byUsername[NAME_LEN]; + BYTE byPassword[PASSWD_LEN]; + DWORD dwLocalSerialNo; /* 本地串口 */ + DWORD dwRemoteSerialNo; /* 远程串口 */ + BYTE byRes3[8]; +} NET_DVR_MATRIX_TRAN_CHAN_INFO_V30,*LPNET_DVR_MATRIX_TRAN_CHAN_INFO_V30; + +typedef struct tagMATRIX_TRAN_CHAN_CONFIG +{ + DWORD dwSize; + BYTE by232IsDualChan; /* 设置哪路232透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE by485IsDualChan; /* 设置哪路485透明通道是全双工的 取值1到MAX_SERIAL_NUM */ + BYTE byRes[2]; /* 保留 */ + NET_DVR_MATRIX_TRAN_CHAN_INFO_V30 struTranInfo[MAX_SERIAL_NUM]; /*同时支持建立MAX_SERIAL_NUM个透明通道*/ +}NET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30,*LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30; + +typedef struct +{ + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ + NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 轮巡解码通道信息 */ +}NET_DVR_MATRIX_CHAN_INFO_V30,*LPNET_DVR_CYC_SUR_CHAN_ELE_V30; + +typedef struct tagMATRIX_LOOP_DECINFO_V30 +{ + DWORD dwSize; + DWORD dwPoolTime; /*轮巡间隔*/ + NET_DVR_MATRIX_CHAN_INFO_V30 struchanConInfo[MAX_CYCLE_CHAN_V30]; + BYTE byRes[16]; +} NET_DVR_MATRIX_LOOP_DECINFO_V30,*LPNET_DVR_MATRIX_LOOP_DECINFO_V30; + + +typedef struct tagDEC_MATRIX_CHAN_INFO_V30 +{ + DWORD dwSize; + NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; /*流媒体服务器配置*/ + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 解码通道信息 */ + DWORD dwDecState; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + char sFileName[128]; /* 按文件回放文件名 */ + DWORD dwGetStreamMode; /*取流模式:1-主动,2-被动*/ + NET_DVR_MATRIX_PASSIVEMODE struPassiveMode; + BYTE byRes[32]; +}NET_DVR_MATRIX_DEC_CHAN_INFO_V30,*LPNET_DVR_MATRIX_DEC_CHAN_INFO_V30; + +#define MAX_RESOLUTIONNUM 64 //支持的最大分辨率数目 +typedef struct tagNET_DVR_MATRIX_ABILITY +{ + DWORD dwSize; + BYTE byDecNums; + BYTE byStartChan; + BYTE byVGANums; + BYTE byBNCNums; + BYTE byVGAWindowMode[8][12]; /*VGA支持的窗口模式,VGA1可能由混合输出*/ + BYTE byBNCWindowMode[4]; /*BNC支持的窗口模式*/ + BYTE byDspNums; + BYTE byHDMINums;//HDMI显示通道个数(从25开始) + BYTE byDVINums;//DVI显示通道个数(从29开始) + BYTE byRes1[13]; + BYTE bySupportResolution[MAX_RESOLUTIONNUM];//按照上面的枚举定义,一个字节代表一个分辨率是//否支持,1:支持,0:不支持 + BYTE byHDMIWindowMode[4][8];//HDMI支持的窗口模式 + BYTE byDVIWindowMode[4][8];//DVI支持的窗口模式 + BYTE byRes2[24]; +}NET_DVR_MATRIX_ABILITY, *LPNET_DVR_MATRIX_ABILITY; +//上传logo结构 +typedef struct tagNET_DVR_DISP_LOGOCFG +{ + DWORD dwCorordinateX; //图片显示区域X坐标 + DWORD dwCorordinateY; //图片显示区域Y坐标 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + BYTE byRes1[4]; + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[6]; //保留 + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头 +}NET_DVR_DISP_LOGOCFG,*LPNET_DVR_DISP_LOGOCFG; + +/*编码类型*/ +#define NET_DVR_ENCODER_UNKOWN 0 /*未知编码格式*/ +#define NET_DVR_ENCODER_H264 1 /*私有 264*/ +#define NET_DVR_ENCODER_S264 2 /*Standard H264*/ +#define NET_DVR_ENCODER_MPEG4 3 /*MPEG4*/ +#define NET_DVR_ORIGINALSTREAM 4 /*Original Stream*/ +#define NET_DVR_PICTURE 5/*Picture*/ +#define NET_DVR_ENCODER_MJPEG 6 +#define NET_DVR_ENCODER_MPEG2 7 +#define NET_DVR_ENCODER_H265 8 +#define NET_DVR_ENCODER_SVAC 9 +#define NET_DVR_ENCODER_SMART264 10/*Smart 264*/ +#define NET_DVR_ENCODER_SMART265 11/*Smart 265*/ + +/* 打包格式 */ +#define NET_DVR_STREAM_TYPE_UNKOWN 0 /*未知打包格式*/ +#define NET_DVR_STREAM_TYPE_PRIVT 1 /*私有格式*/ +#define NET_DVR_STREAM_TYPE_TS 7 /* TS打包 */ +#define NET_DVR_STREAM_TYPE_PS 8 /* PS打包 */ +#define NET_DVR_STREAM_TYPE_RTP 9 /* RTP打包 */ +#define NET_DVR_STREAM_TYPE_ORIGIN 10 //未打包(视频综合平台解码子系统用) + +/*解码通道状态*/ +typedef struct +{ + BYTE byDecodeStatus; /*当前状态:0:未启动,1:启动解码*/ + BYTE byStreamType; /*码流类型*/ + BYTE byPacketType; /*打包方式*/ + BYTE byRecvBufUsage; /*接收缓冲使用率*/ + BYTE byDecBufUsage; /*解码缓冲使用率*/ + BYTE byFpsDecV; /*视频解码帧率*/ + BYTE byFpsDecA; /*音频解码帧率*/ + BYTE byCpuLoad; /*DSP CPU使用率*/ + BYTE byRes1[4]; + DWORD dwDecodedV; /*解码的视频帧*/ + DWORD dwDecodedA; /*解码的音频帧*/ + WORD wImgW; /*解码器当前的图像大小,宽*/ + WORD wImgH; //高 + BYTE byVideoFormat; /*视频制式:0-NON,NTSC--1,PAL--2*/ + BYTE byRes2[3]; + DWORD dwDecChan; /*获取全部解码通道状态时有效,设置时可填0*/ + BYTE byRes3[20]; +}NET_DVR_MATRIX_CHAN_STATUS, *LPNET_DVR_MATRIX_CHAN_STATUS; + +/*显示通道状态*/ +#define NET_DVR_MAX_DISPREGION 16 /*每个显示通道最多可以显示的窗口*/ +//分辨率 +// +typedef enum +{ + /*VGA*/ + VGA_NOT_AVALIABLE, + VGA_THS8200_MODE_SVGA_60HZ, //(800*600) + VGA_THS8200_MODE_SVGA_75HZ, //(800*600) + VGA_THS8200_MODE_XGA_60HZ, //(1024*768) + VGA_THS8200_MODE_XGA_75HZ, //(1024*768) + VGA_THS8200_MODE_SXGA_60HZ, //(1280*1024) + VGA_THS8200_MODE_720P_60HZ, //(1280*720) + VGA_THS8200_MODE_1080I_60HZ, //(1920*1080) + VGA_THS8200_MODE_1080P_30HZ, //(1920*1080) + VGA_THS8200_MODE_UXGA_30HZ, //(1600*1200) + /*HDMI*/ + HDMI_SII9134_MODE_XGA_60HZ, //(1024*768) + HDMI_SII9134_MODE_SXGA_60HZ, //(1280*1024) + HDMI_SII9134_MODE_SXGA2_60HZ, //(1280*960) + HDMI_SII9134_MODE_720P_60HZ, //(1280*720) + HDMI_SII9134_MODE_720P_50HZ, //(1280*720) + HDMI_SII9134_MODE_1080I_60HZ, //(1920*1080) + HDMI_SII9134_MODE_1080I_50HZ, //(1920*1080) + HDMI_SII9134_MODE_1080P_25HZ, //(1920*1080) + HDMI_SII9134_MODE_1080P_30HZ, //(1920*1080) + HDMI_SII9134_MODE_1080P_50HZ, //(1920*1080) + HDMI_SII9134_MODE_1080P_60HZ, //(1920*1080) + HDMI_SII9134_MODE_UXGA_60HZ, //(1600*1200) + /*DVI*/ + DVI_SII9134_MODE_XGA_60HZ, //(1024*768) + DVI_SII9134_MODE_SXGA_60HZ, //(1280*1024) + DVI_SII9134_MODE_SXGA2_60HZ, //(1280*960) + DVI_SII9134_MODE_720P_60HZ, //(1280*720) + DVI_SII9134_MODE_720P_50HZ, //(1280*720) + DVI_SII9134_MODE_1080I_60HZ, //(1920*1080) + DVI_SII9134_MODE_1080I_50HZ, //(1920*1080) + DVI_SII9134_MODE_1080P_25HZ, //(1920*1080) + DVI_SII9134_MODE_1080P_30HZ, //(1920*1080) + DVI_SII9134_MODE_1080P_50HZ, //(1920*1080) + DVI_SII9134_MODE_1080P_60HZ, //(1920*1080) + DVI_SII9134_MODE_UXGA_60HZ, //(1600*1200) + VGA_DECSVR_MODE_SXGA2_60HZ, + HDMI_DECSVR_MODE_1080P_24HZ, + DVI_DECSVR_MODE_1080P_24HZ, + YPbPr_DECSVR_MODE_720P_60HZ, + YPbPr_DECSVR_MODE_1080I_60HZ +}VGA_MODE; + +//低帧率定义 +#define LOW_DEC_FPS_1_2 51 +#define LOW_DEC_FPS_1_4 52 +#define LOW_DEC_FPS_1_8 53 +#define LOW_DEC_FPS_1_16 54 + +/*视频制式标准*/ +typedef enum +{ + VS_NON = 0, + VS_NTSC = 1, + VS_PAL = 2 +}VIDEO_STANDARD; + +typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG +{ + DWORD dwSize; + BYTE byAudio; /*音频是否开启,0-否,1-是*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVgaResolution; /*VGA的分辨率*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + DWORD dwWindowMode; /*画面模式,从能力集获取,目前支持1,2,4,9,16*/ + BYTE byJoinDecChan[MAX_WINDOWS];/*各个子窗口关联的解码通道*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + union + { + BYTE byRes[16]; + struct + { + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ + BYTE byJoinDecoderId[MAX_WINDOWS]; + }struVideoPlatform; + struct + { + BYTE byRes[16]; + }struNotVideoPlatform; + }struDiff; + /*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ + BYTE byUnionType; + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ +}NET_DVR_VGA_DISP_CHAN_CFG,*LPNET_DVR_VGA_DISP_CHAN_CFG; + + +/*显示通道状态*/ +#define NET_DVR_MAX_DISPREGION 16 /*每个显示通道最多可以显示的窗口*/ +typedef struct +{ + BYTE byDispStatus; /*显示状态:0:未显示,1:启动显示*/ + BYTE byBVGA; /*0-BNC,1-VGA, 2-HDMI,3-DVI*/ + BYTE byVideoFormat; /*视频制式:1:NTSC,2:PAL,0-NON*/ + BYTE byWindowMode; /*当前画面模式*/ + BYTE byJoinDecChan[MAX_WINDOWS]; /*各个子窗口关联的解码通道*/ + BYTE byFpsDisp[NET_DVR_MAX_DISPREGION]; /*每个子画面的显示帧率*/ + BYTE byScreenMode; //屏幕模式0-普通 1-大屏 + BYTE byRes2[31]; +}NET_DVR_DISP_CHAN_STATUS, *LPNET_DVR_DISP_CHAN_STATUS; + +#define MAX_DECODECHANNUM 32//多路解码器最大解码通道数 +#define MAX_DISPCHANNUM 24//多路解码器最大显示通道数 + +/*解码器设备状态*/ +typedef struct tagNET_DVR_DECODER_WORK_STATUS +{ + DWORD dwSize; + NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[MAX_DECODECHANNUM]; /*解码通道状态*/ + NET_DVR_DISP_CHAN_STATUS struDispChanStatus[MAX_DISPCHANNUM]; /*显示通道状态*/ + BYTE byAlarmInStatus[MAX_ANALOG_ALARMIN]; /*报警输入状态*/ + BYTE byAlarmOutStatus[MAX_ANALOG_ALARMOUT]; /*报警输出状态*/ + BYTE byAudioInChanStatus; /*语音对讲状态*/ + BYTE byRes[127]; +}NET_DVR_DECODER_WORK_STATUS,*LPNET_DVR_DECODER_WORK_STATUS; + +//2009-12-1 增加被动解码播放控制 +typedef struct tagNET_DVR_PASSIVEDECODE_CONTROL +{ + DWORD dwSize; + DWORD dwPlayCmd; /* 播放命令 见文件播放命令*/ + DWORD dwCmdParam; /* 播放命令参数 */ + BYTE byRes[16];//Reverse +}NET_DVR_PASSIVEDECODE_CONTROL,*LPNET_DVR_PASSIVEDECODE_CONTROL; + +#define PASSIVE_DEC_PAUSE 1 /*被动解码暂停(仅文件流有效)*/ +#define PASSIVE_DEC_RESUME 2 /*恢复被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_FAST 3 /*快速被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_SLOW 4 /*慢速被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_NORMAL 5 /*正常被动解码(仅文件流有效)*/ +#define PASSIVE_DEC_ONEBYONE 6 /*被动解码单帧播放(保留)*/ +#define PASSIVE_DEC_AUDIO_ON 7 /*音频开启*/ +#define PASSIVE_DEC_AUDIO_OFF 8 /*音频关闭*/ +#define PASSIVE_DEC_RESETBUFFER 9 /*清空缓冲区*/ +//2009-12-16 增加控制解码器解码通道缩放 +typedef struct tagNET_DVR_MATRIX_DECCHAN_CONTROL +{ + DWORD dwSize; + BYTE byDecChanScaleStatus;/*解码通道显示缩放控制,1表示缩放显示,0表示真实显示*/ + BYTE byDecodeDelay;//解码延时,0-默认,1-实时性好,2-实时性较好,3-实时性中,流畅性中,4-流畅性较好,5-流畅性好,0xff-自动调整 + BYTE byEnableSpartan;//畅显使能,0-关,1-开 + BYTE byLowLight; //低照度。0-关,1-8代表低照度等级,等级越高强度越大 + BYTE byNoiseReduction; //3D降噪,0-关,1-开,2-自动 + BYTE byDefog; //透雾,0-关,1-7代表透雾等级,等级越高强度越大 + BYTE byEnableVcaDec; //是否启用智能解码,0-不启用,非0-启用 + BYTE byEnableAudio; //是否开启音频,0-无效,1-开启,2-关闭 + DWORD dwAllCtrlType; //所有子窗口一起操作的类型,设置时有效,按位表示 + //dwAllCtrlType & 0x01,开启关闭智能解码 + BYTE byVolume; //volume,[0-100] + BYTE byRes[55]; +}NET_DVR_MATRIX_DECCHAN_CONTROL,*LPNET_DVR_MATRIX_DECCHAN_CONTROL; + +/************************************多路解码器(end)***************************************/ +//2009-8-19 视频综合平台接口函数 +/************************************视频综合平台(begin)***************************************/ +#define MAX_SUBSYSTEM_NUM 80 //一个矩阵系统中最多子系统数量 +#define MAX_SERIALLEN 36 //最大序列号长度 +#define MAX_LOOPPLANNUM 16//最大计划切换组 +#define DECODE_TIMESEGMENT 4//计划解码每天时间段数 +typedef struct tagNET_DVR_SUBSYSTEMINFO +{ + BYTE bySubSystemType;//子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,0-NULL(此参数只能获取) + BYTE byChan;//子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 + BYTE byRes1[5]; + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + WORD wSubSystemPort; //子系统端口号(可修改) + BYTE byRes2[6]; + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址*/ + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码(此参数只能获取)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) +}NET_DVR_SUBSYSTEMINFO, *LPNET_DVR_SUBSYSTEMINFO; + +typedef struct tagNET_DVR_ALLSUBSYSTEMINFO +{ + DWORD dwSize; + NET_DVR_SUBSYSTEMINFO struSubSystemInfo[MAX_SUBSYSTEM_NUM]; + BYTE byRes[8]; +}NET_DVR_ALLSUBSYSTEMINFO, *LPNET_DVR_ALLSUBSYSTEMINFO; + +typedef struct tagNET_DVR_LOOPPLAN_SUBCFG +{ + DWORD dwSize; + DWORD dwPoolTime; /*轮巡间隔,单位:秒*/ + NET_DVR_MATRIX_CHAN_INFO_V30 struChanConInfo[MAX_CYCLE_CHAN_V30]; + BYTE byRes[16]; +}NET_DVR_LOOPPLAN_SUBCFG,*LPNET_DVR_LOOPPLAN_SUBCFG; + +typedef struct tagNET_DVR_ALARMMODECFG +{ + DWORD dwSize; + BYTE byAlarmMode;//报警触发类型,1-轮巡,2-保持 + WORD wLoopTime;//轮巡时间, 单位:秒 + BYTE byRes[9]; +}NET_DVR_ALARMMODECFG,*LPNET_DVR_ALARMMODECFG; + +typedef struct tagNET_DVR_CODESPLITTERINFO +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; /*码分器IP地址*/ + WORD wPort; //码分器端口号 + BYTE byRes1[6]; + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /*密码 */ + BYTE byChan;//码分器485号 + BYTE by485Port;//485口地址 + BYTE byRes2[14]; +} NET_DVR_CODESPLITTERINFO, *LPNET_DVR_CODESPLITTERINFO; + +typedef struct tagNET_DVR_ASSOCIATECFG +{ + BYTE byAssociateType;//关联类型,1-报警 + WORD wAlarmDelay;//报警延时,0-5秒;1-10秒;2-30秒;3-1分钟;4-2分钟;5-5分钟;6-10分钟; + BYTE byAlarmNum;//报警号,具体的值由应用赋,相同的报警赋相同的值 + BYTE byRes[8]; +} NET_DVR_ASSOCIATECFG,*LPNET_DVR_ASSOCIATECFG; + +typedef struct tagNET_DVR_DYNAMICDECODE +{ + DWORD dwSize; + NET_DVR_ASSOCIATECFG struAssociateCfg;//触发动态解码关联结构 + NET_DVR_PU_STREAM_CFG struPuStreamCfg;//动态解码结构 + BYTE byRes[8]; +}NET_DVR_DYNAMICDECODE,*LPNET_DVR_DYNAMICDECODE; + +typedef struct tagNET_DVR_DECODESCHED +{ + NET_DVR_SCHEDTIME struSchedTime;// + BYTE byDecodeType;/*0-无,1-轮巡解码,2-动态解码*/ + BYTE byLoopGroup;//轮巡组号 + BYTE byRes[6]; + NET_DVR_PU_STREAM_CFG struDynamicDec;//动态解码 +} NET_DVR_DECODESCHED, *LPNET_DVR_DECODESCHED; + +typedef struct tagNET_DVR_PLANDECODE +{ + DWORD dwSize; + NET_DVR_DECODESCHED struDecodeSched[MAX_DAYS][DECODE_TIMESEGMENT];//周一作为开始,和9000一致 + BYTE byRes[8]; +} NET_DVR_PLANDECODE,*LPNET_DVR_PLANDECODE; + +//end +/************************************视频综合平台(end)***************************************/ +typedef struct +{ /* 12 bytes */ + DWORD dwSize; + char sUserName[32]; + char sPassWord[32]; + char sFromName[32]; /* Sender *///字符串中的第一个字符和最后一个字符不能是"@",并且字符串中要有"@"字符 + char sFromAddr[48]; /* Sender address */ + char sToName1[32]; /* Receiver1 */ + char sToName2[32]; /* Receiver2 */ + char sToAddr1[48]; /* Receiver address1 */ + char sToAddr2[48]; /* Receiver address2 */ + char sEmailServer[32]; /* Email server address */ + BYTE byServerType; /* Email server type: 0-SMTP, 1-POP, 2-IMTP…*/ + BYTE byUseAuthen; /* Email server authentication method: 1-enable, 0-disable */ + BYTE byAttachment; /* enable attachment */ + BYTE byMailinterval; /* mail interval 0-2s, 1-3s, 2-4s. 3-5s*/ +} NET_DVR_EMAILCFG, *LPNET_DVR_EMAILCFG; + +typedef struct +{ + DWORD dwSize; + NET_DVR_COMPRESSION_INFO_EX struLowCompression; //定时录像 + NET_DVR_COMPRESSION_INFO_EX struEventCompression; //事件触发录像 +}NET_DVR_COMPRESSIONCFG_NEW, *LPNET_DVR_COMPRESSIONCFG_NEW; + +//球机位置信息 +typedef struct +{ + WORD wAction;//获取时该字段无效 + WORD wPanPos;//水平参数 + WORD wTiltPos;//垂直参数 + WORD wZoomPos;//变倍参数 +}NET_DVR_PTZPOS, *LPNET_DVR_PTZPOS; + +//球机范围信息 +typedef struct +{ + WORD wPanPosMin;//水平参数min + WORD wPanPosMax;//水平参数max + WORD wTiltPosMin;//垂直参数min + WORD wTiltPosMax;//垂直参数max + WORD wZoomPosMin;//变倍参数min + WORD wZoomPosMax;//变倍参数max +}NET_DVR_PTZSCOPE, *LPNET_DVR_PTZSCOPE; + +//rtsp配置 ipcamera专用 +typedef struct +{ + DWORD dwSize; //长度 + WORD wPort; //rtsp服务器侦听端口 + BYTE byReserve1[40]; //预留 + WORD wRtspsPort; //rtsps服务器侦听端口 + BYTE byReserve[12]; +}NET_DVR_RTSPCFG, *LPNET_DVR_RTSPCFG; + +/********************************接口参数结构(begin)*********************************/ + +//NET_DVR_Login()参数结构 +typedef struct +{ + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byDiskNum; //DVR硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 +}NET_DVR_DEVICEINFO, *LPNET_DVR_DEVICEINFO; + +//NET_DVR_Login_V30()参数结构 +typedef struct +{ + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + BYTE byAlarmInPortNum; //报警输入个数 + BYTE byAlarmOutPortNum; //报警输出个数 + BYTE byDiskNum; //硬盘个数 + BYTE byDVRType; //设备类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //模拟通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byAudioChanNum; //语音通道数 + BYTE byIPChanNum; //最大数字通道个数,低位 + BYTE byZeroChanNum; //零通道编码个数 //2010-01-16 + BYTE byMainProto; //主码流传输协议类型 0-private, 1-rtsp,2-同时支持private和rtsp + BYTE bySubProto; //子码流传输协议类型0-private, 1-rtsp,2-同时支持private和rtsp + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN 目录查找 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE bySupport1; // 能力集扩充,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + //bySupport1 & 0x80, 表示是否支持车牌新报警信息2012-9-28, 且还表示是否支持NET_DVR_IPPARACFG_V40结构体 + BYTE bySupport2; /*能力,位与结果为0表示不支持,非0表示支持 + bySupport2 & 0x1, 表示解码器是否支持通过URL取流解码 + bySupport2 & 0x2, 表示支持FTPV40 + bySupport2 & 0x4, 表示支持ANR + bySupport2 & 0x8, 表示支持CCD的通道参数配置 + bySupport2 & 0x10, 表示支持布防报警回传信息(仅支持抓拍机报警 新老报警结构) + bySupport2 & 0x20, 表示是否支持单独获取设备状态子项 + bySupport2 & 0x40, 表示是否是码流加密设备*/ + WORD wDevType; //设备型号 + BYTE bySupport3; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport3 & 0x1, 表示是否支持批量配置多码流参数 + // bySupport3 & 0x4 表示支持按组配置, 具体包含 通道图像参数、报警输入参数、IP报警输入、输出接入参数、 + // 用户参数、设备工作状态、JPEG抓图、定时和时间抓图、硬盘盘组管理 + //bySupport3 & 0x8为1 表示支持使用TCP预览、UDP预览、多播预览中的"延时预览"字段来请求延时预览(后续都将使用这种方式请求延时预览)。而当bySupport3 & 0x8为0时,将使用 "私有延时预览"协议。 + //bySupport3 & 0x10 表示支持"获取报警主机主要状态(V40)"。 + //bySupport3 & 0x20 表示是否支持通过DDNS域名解析取流 + + BYTE byMultiStreamProto;//是否支持多码流,按位表示,0-不支持,1-支持,bit1-码流3,bit2-码流4,bit7-主码流,bit-8子码流 + BYTE byStartDChan; //起始数字通道号,0表示无效 + BYTE byStartDTalkChan; //起始数字对讲通道号,区别于模拟对讲通道号,0表示无效 + BYTE byHighDChanNum; //数字通道个数,高位 + BYTE bySupport4; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport4 & 0x02 表示是否支持NetSDK透传接口(NET_DVR_STDXMLConfig)透传表单格式 + //bySupport4 & 0x4表示是否支持拼控统一接口 + //bySupport4 & 0x80 支持设备上传中心报警使能。表示判断调用接口是 NET_DVR_PDC_RULE_CFG_V42还是 NET_DVR_PDC_RULE_CFG_V41 + BYTE byLanguageType;// 支持语种能力,按位表示,每一位0-不支持,1-支持 + // byLanguageType 等于0 表示 老设备 + // byLanguageType & 0x1表示支持中文 + // byLanguageType & 0x2表示支持英文 + BYTE byVoiceInChanNum; //音频输入通道数 + BYTE byStartVoiceInChanNo; //音频输入起始通道号 0表示无效 + BYTE bySupport5; //按位表示,0-不支持,1-支持,bit0-支持多码流 + //bySupport5 &0x01表示支持wEventTypeEx ,兼容dwEventType 的事件类型(支持行为事件扩展)--先占住,防止冲突 + //bySupport5 &0x04表示是否支持使用扩展的场景模式接口 + /* + bySupport5 &0x08 设备返回该值表示是否支持计划录像类型V40接口协议(DVR_SET_RECORDCFG_V40/ DVR_GET_RECORDCFG_V40)(在该协议中设备支持类型类型13的配置) + 之前的部分发布的设备,支持录像类型13,则配置录像类型13。如果不支持,统一转换成录像类型3兼容处理。SDK通过命令探测处理) + bySupport5 &0x10 设备返回改值表示支持超过255个预置点 + */ + BYTE bySupport6; //能力,按位表示,0-不支持,1-支持 + //bySupport6 0x1 表示设备是否支持压缩 + //bySupport6 0x2 表示是否支持流ID方式配置流来源扩展命令,DVR_SET_STREAM_SRC_INFO_V40 + //bySupport6 0x4 表示是否支持事件搜索V40接口 + //bySupport6 0x8 表示是否支持扩展智能侦测配置命令 + //bySupport6 0x40表示图片查询结果V40扩展 + BYTE byMirrorChanNum; //镜像通道个数,<录播主机中用于表示导播通道> + WORD wStartMirrorChanNo; //起始镜像通道号 + BYTE bySupport7; //能力,按位表示,0-不支持,1-支持 + // bySupport7 & 0x1 表示设备是否支持 INTER_VCA_RULECFG_V42 扩展 + // bySupport7 & 0x2 表示设备是否支持 IPC HVT 模式扩展 + // bySupport7 & 0x04 表示设备是否支持 返回锁定时间 + // bySupport7 & 0x08 表示设置云台PTZ位置时,是否支持带通道号 + // bySupport7 & 0x10 表示设备是否支持双系统升级备份 + // bySupport7 & 0x20 表示设备是否支持 OSD字符叠加 V50 + // bySupport7 & 0x40 表示设备是否支持 主从(从摄像机) + // bySupport7 & 0x80 表示设备是否支持 报文加密 + BYTE byRes2; //保留 +}NET_DVR_DEVICEINFO_V30, *LPNET_DVR_DEVICEINFO_V30; + +typedef struct tagNET_DVR_DEVICEINFO_V40 +{ + NET_DVR_DEVICEINFO_V30 struDeviceV30; + BYTE bySupportLock; //设备支持锁定功能,该字段由SDK根据设备返回值来赋值的。bySupportLock为1时,dwSurplusLockTime和byRetryLoginTime有效 + BYTE byRetryLoginTime; //剩余可尝试登陆的次数,用户名,密码错误时,此参数有效 + BYTE byPasswordLevel; //admin密码安全等级 + //0-无效,1-默认密码,2-有效密码,3-风险较高的密码。当用户的密码为出厂默认密码(12345)或者风险较高的密码时,上层客户端需要提示用户更改密码。 + //4-管理员创建一个普通用户为其设置密码,该普通用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,用户每次登入都会进行提醒; + //5-当普通用户的密码被管理员修改,该普通用户再次正确登录设备后,需要提示“请重新设置登录密码”,未修改的情况下,用户每次登入都会进行提醒; + //6-管理员创建一个安装商/操作员用户为其设置密码,该用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,无法进行除修改本身密码外的其他操作; + BYTE byProxyType; //代理类型,0-不使用代理, 1-使用socks5代理, 2-使用EHome代理 + DWORD dwSurplusLockTime; //剩余时间,单位秒,用户锁定时,此参数有效 + BYTE byCharEncodeType; //字符编码类型0-无字符编码信息(老设备),1-GB2312(简体中文),2-GBK,3-BIG5(繁体中文),4-Shift_JIS(日文),5-EUC-KR(韩文),6-UTF-8,7-21:ISO8859-1---15(西欧),22-Hebrew(希伯来语) + BYTE bySupportDev5;//支持v50版本的设备参数获取,设备名称和设备类型名称长度扩展为64字节 + BYTE bySupport; //能力集扩展,位与结果:0- 不支持,1- 支持 + // bySupport & 0x1: 保留 + // bySupport & 0x2: 0-不支持变化上报 1-支持变化上报 + BYTE byLoginMode; //登录模式 0-Private登录 1-ISAPI登录 + DWORD dwOEMCode; + int iResidualValidity; //该用户密码剩余有效天数,单位:天,返回负值,表示密码已经超期使用,例如“-3表示密码已经超期使用3天” + BYTE byResidualValidity; // iResidualValidity字段是否有效,0-无效,1-有效 + BYTE bySingleStartDTalkChan; //独立音轨接入的设备,起始接入通道号,0-为保留字节,无实际含义,音轨通道号不能从0开始 + BYTE bySingleDTalkChanNums; //独立音轨接入的设备的通道总数,0-表示不支持 + BYTE byPassWordResetLevel; //0-无效,1-管理员创建一个非管理员用户为其设置密码,该非管理员用户正确登录设备后要提示“请修改初始登录密码”,未修改的情况下,用户每次登入都会进行提醒;2-当非管理员用户的密码被管理员修改,该非管理员用户再次正确登录设备后,需要提示“请重新设置登录密码”,未修改的情况下,用户每次登入都会进行提醒。 + BYTE bySupportStreamEncrypt; //能力集扩展,位与结果:0- 不支持,1- 支持 bySupportStreamEncrypt & 0x1:表示是否支持RTP/TLS取流 bySupportStreamEncrypt & 0x2: 表示是否支持SRTP/UDP取流 bySupportStreamEncrypt & 0x4: 表示是否支持SRTP/MULTICAST取流 + BYTE byMarketType;//0-无效(未知类型),1-经销型,2-行业型 + BYTE byTLSCap; //0-无效;byTLSCap & 0x1: 表示是否支持TLS链路预览;byTLSCap & 0x2: 表示是否支持TLS链路回放;byTLSCap & 0x4: 表示是否支持TLS链路下载; + BYTE byRes2[237]; +}NET_DVR_DEVICEINFO_V40, *LPNET_DVR_DEVICEINFO_V40; + +typedef void (CALLBACK *fLoginResultCallBack) (LONG lUserID, DWORD dwResult, LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo , void* pUser); + +#define NET_DVR_DEV_ADDRESS_MAX_LEN 129 +#define NET_DVR_LOGIN_USERNAME_MAX_LEN 64 +#define NET_DVR_LOGIN_PASSWD_MAX_LEN 64 + +typedef struct +{ + char sDeviceAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; + BYTE byUseTransport; //是否启用能力集透传,0--不启用透传,默认,1--启用透传 + WORD wPort; + char sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN]; + char sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN]; + fLoginResultCallBack cbLoginResult; + void *pUser; + BOOL bUseAsynLogin; + BYTE byProxyType; //0:不使用代理,1:使用标准代理,2:使用EHome代理 + BYTE byUseUTCTime; //0-不进行转换,默认,1-接口上输入输出全部使用UTC时间,SDK完成UTC时间与设备时区的转换,2-接口上输入输出全部使用平台本地时间,SDK完成平台本地时间与设备时区的转换 + BYTE byLoginMode; //0-Private 1-ISAPI 2-自适应 + BYTE byHttps; //0-不适用tls,1-使用tls 2-自适应 + LONG iProxyID; //代理服务器序号,添加代理服务器信息时,相对应的服务器数组下表值 + BYTE byVerifyMode; //认证方式,0-不认证,1-双向认证,2-单向认证;认证仅在使用TLS的时候生效; + BYTE byRes3[119]; +}NET_DVR_USER_LOGIN_INFO,*LPNET_DVR_USER_LOGIN_INFO; + +//sdk网络环境枚举变量,用于远程升级 +typedef enum _SDK_NET_ENV +{ + LOCAL_AREA_NETWORK = 0, + WIDE_AREA_NETWORK +}SDK_NETWORK_ENVIRONMENT; + +//显示模式 +typedef enum +{ + NORMALMODE = 0, + OVERLAYMODE +}DISPLAY_MODE; + +//发送模式 +typedef enum +{ + PTOPTCPMODE = 0, + PTOPUDPMODE, + MULTIMODE, + RTPMODE, + RESERVEDMODE +}SEND_MODE; + +//抓图模式 +typedef enum +{ + BMP_MODE = 0, //BMP模式 + JPEG_MODE = 1 //JPEG模式 +}CAPTURE_MODE; + +//实时声音模式 +typedef enum +{ + MONOPOLIZE_MODE = 1,//独占模式 + SHARE_MODE = 2 //共享模式 +}REALSOUND_MODE; + +//软解码预览参数 +typedef struct +{ + LONG lChannel;//通道号 + LONG lLinkMode;//最高位(31)为0表示主码流,为1表示子,0-30位表示码流连接方式: 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + char* sMultiCastIP;//多播组地址 + BYTE byProtoType; //应用层取流协议,0-私有协议,1-RTSP协议 + BYTE byRes[3]; +}NET_DVR_CLIENTINFO, *LPNET_DVR_CLIENTINFO; + +//SDK状态信息(9000新增) +typedef struct +{ + DWORD dwTotalLoginNum; //当前login用户数 + DWORD dwTotalRealPlayNum; //当前realplay路数 + DWORD dwTotalPlayBackNum; //当前回放或下载路数 + DWORD dwTotalAlarmChanNum; //当前建立报警通道路数 + DWORD dwTotalFormatNum; //当前硬盘格式化路数 + DWORD dwTotalFileSearchNum; //当前日志或文件搜索路数 + DWORD dwTotalLogSearchNum; //当前日志或文件搜索路数 + DWORD dwTotalSerialNum; //当前透明通道路数 + DWORD dwTotalUpgradeNum; //当前升级路数 + DWORD dwTotalVoiceComNum; //当前语音转发路数 + DWORD dwTotalBroadCastNum; //当前语音广播路数 + DWORD dwTotalListenNum; //当前网络监听路数 + DWORD dwEmailTestNum; //当前邮件计数路数 + DWORD dwBackupNum; // 当前文件备份路数 + DWORD dwTotalInquestUploadNum; //当前审讯上传路数 + DWORD dwRes[6]; +}NET_DVR_SDKSTATE, *LPNET_DVR_SDKSTATE; + +//SDK功能支持信息(9000新增) +typedef struct +{ + DWORD dwMaxLoginNum; //最大login用户数 MAX_LOGIN_USERS + DWORD dwMaxRealPlayNum; //最大realplay路数 WATCH_NUM + DWORD dwMaxPlayBackNum; //最大回放或下载路数 WATCH_NUM + DWORD dwMaxAlarmChanNum; //最大建立报警通道路数 ALARM_NUM + DWORD dwMaxFormatNum; //最大硬盘格式化路数 SERVER_NUM + DWORD dwMaxFileSearchNum; //最大文件搜索路数 SERVER_NUM + DWORD dwMaxLogSearchNum; //最大日志搜索路数 SERVER_NUM + DWORD dwMaxSerialNum; //最大透明通道路数 SERVER_NUM + DWORD dwMaxUpgradeNum; //最大升级路数 SERVER_NUM + DWORD dwMaxVoiceComNum; //最大语音转发路数 SERVER_NUM + DWORD dwMaxBroadCastNum; //最大语音广播路数 MAX_CASTNUM + DWORD dwRes[10]; +}NET_DVR_SDKABL, *LPNET_DVR_SDKABL; + +//报警设备信息 +typedef struct +{ + BYTE byUserIDValid; /* userid是否有效 0-无效,1-有效 */ + BYTE bySerialValid; /* 序列号是否有效 0-无效,1-有效 */ + BYTE byVersionValid; /* 版本号是否有效 0-无效,1-有效 */ + BYTE byDeviceNameValid; /* 设备名字是否有效 0-无效,1-有效 */ + BYTE byMacAddrValid; /* MAC地址是否有效 0-无效,1-有效 */ + BYTE byLinkPortValid; /* login端口是否有效 0-无效,1-有效 */ + BYTE byDeviceIPValid; /* 设备IP是否有效 0-无效,1-有效 */ + BYTE bySocketIPValid; /* socket ip是否有效 0-无效,1-有效 */ + LONG lUserID; /* NET_DVR_Login()返回值, 布防时有效 */ + BYTE sSerialNumber[SERIALNO_LEN]; /* 序列号 */ + DWORD dwDeviceVersion; /* 版本信息 高16位表示主版本,低16位表示次版本*/ + char sDeviceName[NAME_LEN]; /* 设备名字 */ + BYTE byMacAddr[MACADDR_LEN]; /* MAC地址 */ + WORD wLinkPort; /* link port */ + char sDeviceIP[128]; /* IP地址 */ + char sSocketIP[128]; /* 报警主动上传时的socket IP地址 */ + BYTE byIpProtocol; /* Ip协议 0-IPV4, 1-IPV6 */ + BYTE byRes1[2]; + BYTE bJSONBroken; //JSON断网续传标志。0:不续传;1:续传 + WORD wSocketPort; + BYTE byRes2[6]; +}NET_DVR_ALARMER, *LPNET_DVR_ALARMER; + +//硬解码显示区域参数(子结构) +typedef struct +{ + long bToScreen; + long bToVideoOut; + long nLeft; + long nTop; + long nWidth; + long nHeight; + long nReserved; +}NET_DVR_DISPLAY_PARA, *LPNET_DVR_DISPLAY_PARA; + +//硬解码预览参数 +typedef struct +{ + LONG lChannel;//通道号 + LONG lLinkMode; //最高位(31)为0表示主码流,为1表示子,0-30位表示码流连接方式:0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-电话线,5-128k宽带,6-256k宽带,7-384k宽带,8-512k宽带; + char* sMultiCastIP; + NET_DVR_DISPLAY_PARA struDisplayPara; +}NET_DVR_CARDINFO, *LPNET_DVR_CARDINFO; + +//录象文件参数 +typedef struct +{ + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 +}NET_DVR_FIND_DATA, *LPNET_DVR_FIND_DATA; + +//录象文件参数(9000) +typedef struct +{ + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 + char sCardNum[32]; + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型:0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,14-智能交通事件 + BYTE byRes[2]; +}NET_DVR_FINDDATA_V30, *LPNET_DVR_FINDDATA_V30; + +//录象文件参数(cvr) +typedef struct +{ + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 + char sCardNum[32]; + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型:0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,14-智能交通事件 + BYTE byQuickSearch; //0:普通查询结果,1:快速(日历)查询结果 + BYTE byRes; + DWORD dwFileIndex; //文件索引号 + BYTE byStreamType; + BYTE byRes1[127]; +}NET_DVR_FINDDATA_V40, *LPNET_DVR_FINDDATA_V40; + +typedef struct tagNET_DVR_FINDDATA_V50 +{ + char sFileName[100]; + NET_DVR_TIME_SEARCH struStartTime; + NET_DVR_TIME_SEARCH struStopTime; + NET_DVR_ADDRESS struAddr; //片段所在的地址信息,集群回放时用到 + DWORD dwFileSize; //文件大小 //对于大文件搜索类型时(byBigFileType为1),该值无意义 + BYTE byLocked; //文件是否被锁定,1-文件已锁定;0-文件未锁定 + BYTE byFileType; //文件类型,与V40相同 + BYTE byQuickSearch; //0- 普通查询结果,1- 快速(日历)查询结果 + BYTE byStreamType; //码流类型:0- 主码流,1- 子码流,2- 码流三 + DWORD dwFileIndex; //文件索引号 + char sCardNum[32]; //卡号 + DWORD dwTotalLenH; // 对于大文件搜索,时间段内数据总长度,高32字节 + DWORD dwTotalLenL; // 对于大文件搜索,时间段内数据总长度,低32字节 + BYTE byBigFileType; // 0为普通片段搜索,1为大文件搜索 + BYTE byRes[247]; +}NET_DVR_FINDDATA_V50, *LPNET_DVR_FINDDATA_V50; + +//录象文件参数(带卡号) +typedef struct +{ + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 + char sCardNum[32]; +}NET_DVR_FINDDATA_CARD, *LPNET_DVR_FINDDATA_CARD; + + +//录象文件查找条件结构 +typedef struct +{ + LONG lChannel;//通道号 + DWORD dwFileType;//录象文件类型 + //不带卡号,0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发,3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + //带卡号,0xff-全部,0-定时录像,1-移动侦测,2-接近报警,3-出钞报警,4-进钞报警,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + DWORD dwIsLocked;//是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo;//是否使用卡号 + BYTE sCardNumber[32];//卡号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 +}NET_DVR_FILECOND, *LPNET_DVR_FILECOND; + +//云台区域选择放大缩小(私有 快球专用) +typedef struct +{ + int xTop; //方框起始点的x坐标 + int yTop; //方框结束点的y坐标 + int xBottom; //方框结束点的x坐标 + int yBottom; //方框结束点的y坐标 + int bCounter; //保留 +}NET_DVR_POINT_FRAME, *LPNET_DVR_POINT_FRAME; + +//语音对讲参数 +typedef struct tagNET_DVR_COMPRESSION_AUDIO +{ + BYTE byAudioEncType; //音频编码类型 0-OggVorbis(G722.1);1-G711_U;2-G711_A;5-MP2L2;6-G726;7-AAC,8-PCM;9-G722.1.C;12-AAC_LC;13-AAC_LD;14-Opus;15-MP3;16-ADPCM + BYTE byAudioSamplingRate;//音频采样率 0-默认,1-16kHZ,2-32kHZ,3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE byAudioBitRate;// 音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byres[4];//这里保留音频的压缩参数 + BYTE bySupport;//bySupport Bit0表示 Mp2l2前4个字节的含义表示后面内容音频数据长度 +}NET_DVR_COMPRESSION_AUDIO, *LPNET_DVR_COMPRESSION_AUDIO; + +//2009-7-22 + + +#define IW_ESSID_MAX_SIZE 32 +#define WIFI_WEP_MAX_KEY_COUNT 4 +#define WIFI_WEP_MAX_KEY_LENGTH 33 +#define WIFI_WPA_PSK_MAX_KEY_LENGTH 63 +#define WIFI_WPA_PSK_MIN_KEY_LENGTH 8 +#define WIFI_MAX_AP_COUNT 20 +#define WIFI_WPA_PSK_MAX_HEXKEY_LENGTH 68 //WPA16进制密钥最大长度 + +typedef struct tagNET_DVR_AP_INFO +{ + char sSsid[IW_ESSID_MAX_SIZE]; + DWORD dwMode; /* 0 mange 模式;1 ad-hoc模式,参见NICMODE */ + DWORD dwSecurity; /*0 不加密;1 wep加密;2 wpa-psk;3 wpa-Enterprise;4-WPA2_PSK参见WIFISECURITY*/ + DWORD dwChannel; /*1-11表示11个通道*/ + DWORD dwSignalStrength; /*0-100信号由最弱变为最强*/ + DWORD dwSpeed; /*速率,单位是0.01mbps*/ +}NET_DVR_AP_INFO,*LPNET_DVR_AP_INFO; + +typedef struct tagNET_DVR_AP_INFO_LIST +{ + DWORD dwSize; + DWORD dwCount; /*无线AP数量,不超过20*/ + NET_DVR_AP_INFO struApInfo[WIFI_MAX_AP_COUNT]; +}NET_DVR_AP_INFO_LIST,*LPNET_DVR_AP_INFO_LIST; + +typedef struct tagNET_DVR_WIFIETHERNET +{ + char sIpAddress[16]; /*IP地址*/ + char sIpMask[16]; /*掩码*/ + BYTE byMACAddr[MACADDR_LEN]; /*物理地址,只用来显示*/ + BYTE byCloseWifi; //是否关闭wifi连接,0-不关闭,1-关闭 + BYTE bRes; + DWORD dwEnableDhcp; /*是否启动dhcp 0不启动 1启动*/ + DWORD dwAutoDns; /*如果启动dhcp是否自动获取dns,0不自动获取 1自动获取;对于有线如果启动dhcp目前自动获取dns*/ + char sFirstDns[16]; /*第一个dns域名*/ + char sSecondDns[16]; /*第二个dns域名*/ + char sGatewayIpAddr[16]; /* 网关地址*/ + BYTE bRes2[8]; +}NET_DVR_WIFIETHERNET,*LPNET_DVR_WIFIETHERNET; + +typedef struct tagNET_DVR_WIFI_CFG_EX +{ + NET_DVR_WIFIETHERNET struEtherNet; /*wifi网口*/ + char sEssid[IW_ESSID_MAX_SIZE]; /*SSID*/ + DWORD dwMode; /* 0 mange 模式;1 ad-hoc模式,参见*/ + DWORD dwSecurity; /*0-不加密;1-WEP加密;2-WPA-personal; 3-WPA-enterprise;4-WPA2-personal;5-WPA2-enterprise */ + union + { + struct + { + DWORD dwAuthentication;/*0 -开放式 1-共享式*/ + DWORD dwKeyLength;/* 0 -64位;1- 128位;2-152位*/ + DWORD dwKeyType;/*0 16进制;1 ASCI */ + DWORD dwActive;/*0 索引:0---3表示用哪一个密钥*/ + char sKeyInfo[WIFI_WEP_MAX_KEY_COUNT][WIFI_WEP_MAX_KEY_LENGTH]; + }wep; + struct + { + DWORD dwKeyLength;/*8-63个ASCII字符*/ + char sKeyInfo[WIFI_WPA_PSK_MAX_KEY_LENGTH]; + BYTE byEncryptType; /*WPA/WPA2模式下加密类型,0-AES, 1-TKIP*/ + char sNewKeyInfo[WIFI_WPA_PSK_MAX_HEXKEY_LENGTH/*68*/];//新密钥(支持8-63个ASCII字符以及64个十六制字符密钥) + //当byKeyType为0时,启用sKeyInfo,当byKeyType为1时,启用sNewKeyInfo + //密钥类型;0 ~ 老密钥类型(只支持8-63个ASCII字符),1 ~新密钥类型(支持8-63个ASCII字符以及64个十六制字符密钥) + BYTE byKeyType; + BYTE byRes[7]; + }wpa_psk; + struct + { + BYTE byEncryptType; /*加密类型,0-AES, 1-TKIP*/ + BYTE byAuthType; //认证类型,0-EAP_TTLS,1-EAP_PEAP,2-EAP_TLS + BYTE byRes[2]; + union + { + struct + { + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 + BYTE byAuthType; //内部认证方式,0-PAP,1-MSCHAPV2 + BYTE byRes1[2]; + BYTE byAnonyIdentity [NAME_LEN]; //匿名身份 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 + BYTE byRes[44]; + }EAP_TTLS; //WPA-enterprise/WPA2-enterpris模式适用 + struct + { + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 + BYTE byAuthType; //内部认证方式,0-GTC,1-MD5,2-MSCHAPV2 + BYTE byPeapVersion; //PEAP版本,0-版本0,1-版本1 + BYTE byPeapLabel; //PEAP标签,0-老标签,1-新标签 + BYTE byAnonyIdentity[NAME_LEN]; //匿名身份 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 + BYTE byRes[44]; + }EAP_PEAP; //WPA-enterprise/WPA2-enterpris模式适用 + struct + { + BYTE byEapolVersion; //EAPOL版本,0-版本1,1-版本2 + BYTE byRes1[3]; + BYTE byIdentity[NAME_LEN]; //身份 + BYTE byPrivateKeyPswd[NAME_LEN]; //私钥密码 + BYTE byRes[76]; + }EAP_TLS; + }auth_param; + }wpa_wpa2; //WPA-enterprise/WPA2-enterpris模式适用 + }key; +}NET_DVR_WIFI_CFG_EX,*LPNET_DVR_WIFI_CFG_EX; + +//wifi配置结构 +typedef struct tagNET_DVR_WIFI_CFG +{ + DWORD dwSize; + NET_DVR_WIFI_CFG_EX struWifiCfg; +}NET_DVR_WIFI_CFG,*LPNET_DVR_WIFI_CFG; + +//wifi连接状态 +typedef struct tagNET_DVR_WIFI_CONNECT_STATUS +{ + DWORD dwSize; + BYTE byCurStatus; //1-已连接,2-未连接,3-正在连接 + BYTE byRes1[3]; //保留 + DWORD dwErrorCode; // byCurStatus = 2时有效,1-用户名或密码错误,2-无此路由器,3-未知错误 + BYTE byRes[244]; +}NET_DVR_WIFI_CONNECT_STATUS,*LPNET_DVR_WIFI_CONNECT_STATUS; + +//wifi工作模式 +typedef struct tagNET_DVR_WIFI_WORKMODE +{ + DWORD dwSize; + DWORD dwNetworkInterfaceMode; /*0 自动切换模式 1 有线模式*/ +}NET_DVR_WIFI_WORKMODE,*LPNET_DVR_WIFI_WORKMODE; + +//结构参数宏定义 +#define VCA_MAX_POLYGON_POINT_NUM 10 //检测区域最多支持10个点的多边形 +#define MAX_RULE_NUM 8 //最多规则条数 +#define MAX_RULE_NUM_V42 16 //最多规则条数扩展 +#define MAX_TARGET_NUM 30 //最多目标个数 +#define MAX_CALIB_PT 6 //最大标定点个数 +#define MIN_CALIB_PT 4 //最小标定点个数 +#define MAX_TIMESEGMENT_2 2 //最大时间段数 +#define DATA_INDEX_LEN 64 //数据流水号 +#define MAX_DEV_DATAINDEX_LEN 64 //设备数据流水号 +#define MAX_TRAFFIC_PICTURE_NUM 8 //交通图片数量 +#define MAX_LICENSE_LEN 16 //车牌号最大长度 +#define MAX_LICENSE_LEN_EX 32 //车牌号最大长度 +#define MAX_CARDNO_LEN 48 //卡号最大长度 2013-11-04 +#define MAX_OPERATE_INDEX_LEN 32 //操作数最大长度2014-03-03 +#define MAX_PLATE_NUM 3 //车牌个数 +#define MAX_MASK_REGION_NUM 4 //最多四个屏蔽区域 +#define MAX_SEGMENT_NUM 6 //摄像机标定最大样本线数目 +#define MIN_SEGMENT_NUM 3 //摄像机标定最小样本线数目 +#define MAX_REL_SNAPCHAN_NUM 3 //最大关联抓图通道数 +#define MAX_PIC_SWITCH_STORAGE_SERVER 64 //云存储服务器存储的最大图片类型数 +#define MAX_INFO_SWITCH_STORAGE_SERVER 64 //云存储服务器存储的最大附加信息类型数 +#define RTMP_URL_LEN 128 //RTMP URL 长度 +#define MAX_ID_LEN_128 128 //发布文件ID长度 +#define MAX_DEBUGCMD_LEN 1024 //设备调试命令最大长度 +#define MAX_DEBUGINFO_LEN 1400 //设备调试信息最大长度 +#define MAX_VEHICLE_ID_LEN 32 //最大车辆标识长度 +#define LEN_PROPERTY 128 +typedef struct +{ + DWORD dwSize; //本段报文长度, + NET_DVR_TIME_EX strStartTime; //开始时间 + NET_DVR_TIME_EX strStopTime; //结束时间 + char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //车牌号码 + DWORD dwChannel; + BYTE byRegion; + BYTE byRes[127]; // 区域索引值 0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS) , 4-中东(Middle East),0xff-所有 +}NET_DVR_VEHICLE_INFO_COND, *LPNET_DVR_VEHICLE_INFO_COND; + +typedef struct +{ + DWORD dwSize; + DWORD dwIndex;//序号 + BYTE byDeviceID[DEVICE_ID_LEN/*48*/]; //设备编号 + BYTE byBelieve;//置信度,0-100 + BYTE byDir;//方向,0-无意义,1-反向,2-正向,3-未知 + BYTE byLineID;//车道号 + BYTE byRes1; + NET_DVR_TIME_EX struSnapTime;//抓拍时间 + char sLicense[MAX_LICENSE_LEN_EX/*32*/]; //车牌号码 + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN /*48*/]; //显示点编号 + BYTE byCountry; // 国家索引值,参照枚举COUNTRY_INDEX(不支持”COUNTRY_ALL = 0xff, //ALL 全部”) + BYTE byMatchingResult;//匹配结果:0-保留,1-允许名单,2-禁止名单,3-其他 + BYTE byArea; //区域(省份),各国家内部区域枚举,阿联酋参照 EMI_AREA + BYTE byPlateType; //车牌类型 参考 VCA_PLATE_TYPE + char sDeviceName[NAME_LEN/*32*/]; //设备名称 + BYTE byPlateColor; //车牌颜色 参考 VCA_PLATE_COLOR + BYTE byPlateSize; //车牌尺寸,0~未知,1~long, 2~short(中东车牌使用) + BYTE byRes2[2]; + char sPlateCategory[MAX_CATEGORY_LEN/*8*/]; //车牌附加信息, 即车牌小字信息,(目前只有中东地区支持) + char sPlateImageURL[URL_LEN_V40/*256*/]; //车牌小图URL + char sEffectiveTime[ISO_8601_LEN/*32*/]; //车牌信息有效时间,使用ISO8601 time格式,如:2009-11-14T15:27Z + BYTE byRes[176]; +}NET_DVR_VEHICLE_INFO_CFG, *LPNET_DVR_VEHICLE_INFO_CFG; + +//智能控制信息 +#define MAX_VCA_CHAN 16//最大智能通道数 +typedef struct tagNET_VCA_CTRLINFO +{ + BYTE byVCAEnable; //是否开启智能 + BYTE byVCAType; //智能能力类型,VCA_CHAN_ABILITY_TYPE + BYTE byStreamWithVCA; //码流中是否带智能信息 + BYTE byMode; //模式,ATM能力时参照VCA_CHAN_MODE_TYPE ,TFS能力时参照TFS_CHAN_MODE_TYPE + BYTE byControlType; //控制类型,按位表示,0-否,1-是 + // byControlType &1 是否启用抓拍功能 + BYTE byPicWithVCA ;// 报警抓图叠加目标信息(目标框):0-不叠加(默认),1-叠加; + BYTE byRes[2]; //保留,设置为0 +}NET_VCA_CTRLINFO, * LPNET_VCA_CTRLINFO; + +//智能控制信息结构 +typedef struct tagNET_VCA_CTRLCFG +{ + DWORD dwSize; + NET_VCA_CTRLINFO struCtrlInfo[MAX_VCA_CHAN]; //控制信息,数组0对应设备的起始通道 + BYTE byRes[16]; +}NET_VCA_CTRLCFG, * LPNET_VCA_CTRLCFG; + +//智能设备能力集 +typedef struct tagNET_VCA_DEV_ABILITY +{ + DWORD dwSize; //结构长度 + BYTE byVCAChanNum; //智能通道个数 + BYTE byPlateChanNum; //车牌通道个数 + BYTE byBBaseChanNum; //行为基本版个数 + BYTE byBAdvanceChanNum; //行为高级版个数 + BYTE byBFullChanNum; //行为完整版个数 + BYTE byATMChanNum; //智能ATM个数 + BYTE byPDCChanNum; //人数统计通道个数 + BYTE byITSChanNum; //交通事件通道个数 + BYTE byBPrisonChanNum; //行为监狱版(监舍)通道个数 + BYTE byFSnapChanNum; //人脸抓拍通道个数 + BYTE byFSnapRecogChanNum; //人脸抓拍和识别通道个数 + BYTE byFRetrievalChanNum; //人脸后检索个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持 + //bySupport & 0x1,表示是否支持智能 2012-3-22 + //bySupport & 0x2,表示是否支持128路取流扩展2012-12-27 + BYTE byFRecogChanNum; //人脸识别通道个数 + BYTE byBPPerimeterChanNum; //行为监狱版(周界)通道个数 + BYTE byTPSChanNum; //交通诱导通道个数 + BYTE byTFSChanNum; //道路违章取证通道个数 + BYTE byFSnapBFullChanNum; //人脸抓拍和异常行为检测通道个数 + BYTE byHeatMapChanNum; //热度图通道个数 + BYTE bySmartVehicleNum; //SMART事件+车辆检测通道个数 + BYTE bySmartHVTNum; //SMART事件+混行检测通道个数 + BYTE bySmartNum; //SMART事件个数 + BYTE byVehicleNum; //车辆检测通道个数 + BYTE bySmartRoadDetectionNum ; // SMART事件+道路布防通道个数 + BYTE bySmartFaceDetectionNum ; // SMART事件+人脸侦测通道个数 + BYTE bySmartHeatMapNum ; // SMART事件+热度图通道个数 + BYTE byHumanRecognitionNum; //人体识别通道个数 + BYTE byEdcationStudentNum; //教育录播(学生起来检测&&学生人数统计)支持的通道数 + BYTE byRoadDetectionNum;//道路布防通道个数 + BYTE byPersonDensityDetection; //人员密度检测通道个数 + BYTE bySafetyHelmetDetection; //安全帽检测通道个数 + BYTE byPerimeterCapture;//周界抓拍通道个数 + BYTE byHeelPDC;//倾斜客流通道个数 + BYTE by12MPLiveView;// 主码流 1200W@20fps预览(4000*3000) + BYTE byTeacherBehaviorDetectNum; //教育录播(教师行为检测)支持的通道数 + BYTE byMixedTargetDetection;//混合目标检测通道个数 + BYTE byFaceContrast;//人脸比对检测通道个数 + BYTE byCityManagement;//智慧城管检测通道个数 + BYTE byMixedTargetDetectionSmart;//混合目标检测+Smart事件 + BYTE byRes; +}NET_VCA_DEV_ABILITY, *LPNET_VCA_DEV_ABILITY; + + +//异常行为检测能力类型 +typedef enum _VCA_ABILITY_TYPE_ +{ + TRAVERSE_PLANE_ABILITY = 0x01, //穿越警戒面 + ENTER_AREA_ABILITY = 0x02, //进入区域 + EXIT_AREA_ABILITY = 0x04, //离开区域 + INTRUSION_ABILITY = 0x08, //入侵 + LOITER_ABILITY = 0x10, //徘徊 + LEFT_TAKE_ABILITY = 0x20, //物品遗留拿取 + PARKING_ABILITY = 0x40, //停车 + RUN_ABILITY = 0x80, //快速移动 + HIGH_DENSITY_ABILITY = 0x100, //人员聚集 + LF_TRACK_ABILITY = 0x200, //球机 + VIOLENT_MOTION_ABILITY = 0x400, //剧烈运动检测 + REACH_HIGHT_ABILITY = 0x800, //攀高检测 + GET_UP_ABILITY = 0x1000, //起身检测 + LEFT_ABILITY = 0x2000, //物品遗留 + TAKE_ABILITY = 0x4000, //物品拿取 + LEAVE_POSITION = 0x8000, //离岗 + TRAIL_ABILITY = 0x10000, //尾随 + KEY_PERSON_GET_UP_ABILITY = 0x20000, //重点人员起身检测 + STANDUP_ABILITY = 0x40000, //起立 + FALL_DOWN_ABILITY = 0x80000, //倒地 + AUDIO_ABNORMAL_ABILITY = 0x100000, //声强突变 + ADV_REACH_HEIGHT_ABILITY = 0x200000, //折线攀高 + TOILET_TARRY_ABILITY = 0x400000, //如厕超时 + YARD_TARRY_ABILITY = 0x800000, //放风场滞留 + ADV_TRAVERSE_PLANE_ABILITY = 0x1000000, //折线警戒面 + LECTURE_ABILITY = 0x2000000, //授课 + ANSWER_ABILITY = 0x4000000, //回答问题 + HUMAN_ENTER_ABILITY = 0x10000000, //人靠近ATM ,只在ATM_PANEL模式下支持 + OVER_TIME_ABILITY = 0x20000000, //操作超时,只在ATM_PANEL模式下支持 + STICK_UP_ABILITY = 0x40000000, //贴纸条 + INSTALL_SCANNER_ABILITY = 0x80000000 //安装读卡器 +}VCA_ABILITY_TYPE; + +typedef enum _VCA_ABILITY_TYPE_EX_ +{ + PEOPLENUM_CHANGE_ABILITY = 0x00000002, //人数变化检测 + SPACING_CHANGE_ABILITY = 0x00000004, //间距变化检测 + EVENT_COMBINED_ABILITY = 0x00000008, //组合事件规则 + EVENT_SIT_QUIETLY = 0x00000010, //一动不动 + EVENT_HIGH_DENSITY_STATUS_ABILITY = 0x00000020, //人员聚集状态 + EVENT_RUNNING = 0x00000040, //奔跑 + EVENT_RETENTION = 0x00000080, //滞留 + EVENT_TEACHER_WRITING = 0x00000100, //板书 + EVENT_FAKECARD = 0x00000200 //伪造卡检测 +}VCA_ABILITY_TYPE_EX; + +//智能通道类型 +typedef enum _VCA_CHAN_ABILITY_TYPE_ +{ + VCA_BEHAVIOR_BASE = 1, //异常行为检测基本版 + VCA_BEHAVIOR_ADVANCE = 2, //异常行为检测高级版 + VCA_BEHAVIOR_FULL = 3, //异常行为检测完整版 + VCA_PLATE = 4, //车牌能力 + VCA_ATM = 5, //ATM能力 + VCA_PDC = 6, //人流量统计 + VCA_ITS = 7, //智能 交通事件 + VCA_BEHAVIOR_PRISON = 8, //异常行为检测监狱版(监舍) + VCA_FACE_SNAP = 9, //人脸抓拍能力 + VCA_FACE_SNAPRECOG = 10, //人脸抓拍和识别能力 + VCA_FACE_RETRIEVAL = 11, //人脸后检索能力 + VCA_FACE_RECOG = 12, //人脸识别能力 + VCA_BEHAVIOR_PRISON_PERIMETER = 13, // 异常行为检测监狱版 (周界) + VCA_TPS = 14, //交通诱导 + VCA_TFS = 15, //道路违章取证 + VCA_BEHAVIOR_FACESNAP = 16, //人脸抓拍和异常行为检测能力 + VCA_HEATMAP = 17, //热度图 + VCA_SMART_VEHICLE_DETECTION = 18, // SMART事件+车辆检测 + VCA_SMART_HVT_DETECTION = 19, // SMART事件+混行检测 + VCA_SMART_EVENT = 20, // SMART事件 + VCA_VEHICLE_DETECTION = 21, // 车辆检测 + VCA_SMART_ROAD_DETECTION = 22, // SMART事件+道路布防 + VCA_SMART_FACE_DETECTION = 23, // SMART事件+人脸侦测 + VCA_SMART_HEATMAP = 24, // SMART事件+热度图 + VCA_HUMAN_RECOGNITION = 25 , // 人体识别 + VCA_EDUCATION_STUDENT_DETECTION = 26, //教育录播(学生起来检测&&学生人数统计) + VCA_ROAD_DETECTION = 27, //道路布防 + VCA_PERSON_DENSITY_DETECTION = 28, //人员密度检测 + VCA_PERIMETER_CAPTURE = 29, //周界抓拍 + VCA_SAFETY_HELMET_DETECTION = 30, //安全帽检测 + VCA_HEEL_PDC = 31, //倾斜客流 + VCA_12MPLIVE_VIEW = 32, //主码流 1200W@20fps预览(4000*3000) + VCA_TEACHER_BEHAVIOR_DETECTION = 33, //教师行为检测 + VCA_MIXED_TARGET_DETECTION = 34, //混合目标检测 + VCA_FACE_CONTRAST = 35, //人脸对比检测(同时支持人脸抓拍及人脸对比功能,但是算法核心不同。算法采用人脸比对为核心,确保每次比对成功。若目标不适合对比则将舍弃对该目标进行抓拍。) + VCA_CITY_MANAGEMENT = 36, //智慧城管 + VCA_MIXED_TARGET_DETECTION_SMART = 37 //混合目标检测加Smart +}VCA_CHAN_ABILITY_TYPE; + +//智能ATM模式类型(ATM能力特有) +typedef enum _VCA_CHAN_MODE_TYPE_ +{ + VCA_ATM_PANEL = 0, //ATM面板 + VCA_ATM_SURROUND = 1, //ATM环境 + VCA_ATM_FACE = 2, //ATM人脸 + VCA_ATM_SAFETYCABIN = 3 //ATM防护舱 +}VCA_CHAN_MODE_TYPE; + +//交通取证TFS通道模式(TFS能力特有) +typedef enum _TFS_CHAN_MODE_TYPE_ +{ + TFS_CITYROAD = 0, //TFS 城市道路 + TFS_FREEWAY = 1 //TFS 高速道路 +}TFS_CHAN_MODE_TYPE; + +//异常行为检测场景模式 +typedef enum _BEHAVIOR_SCENE_MODE_TYPE_ +{ + BEHAVIOR_SCENE_DEFAULT = 0, //系统默认 + BEHAVIOR_SCENE_WALL = 1, //围墙 + BEHAVIOR_SCENE_INDOOR = 2 //室内 +}BEHAVIOR_SCENE_MODE_TYPE; + +//监舍模式 +typedef enum _BEHAVIOR_PRISON_MODE_TYPE_ +{ + BEHAVIOR_PRISON = 0, //监所 + BEHAVIOR_HEARING = 1, //审讯室 + BEHAVIOR_RECFIELD = 2 //放风场 +}BEHAVIOR_PRISON_MODE_TYPE,LPBEHAVIOR_PRISON_MODE_TYPE; + + +//通道能力输入参数 +typedef struct tagNET_VCA_CHAN_IN_PARAM +{ + BYTE byVCAType; //VCA_CHAN_ABILITY_TYPE枚举值 + BYTE byMode; //模式,ATM 能力时参照VCA_CHAN_MODE_TYPE,TFS能力时参照TFS_CHAN_MODE_TYPE,当VCA_TYPE 为交通事件时参照TRAFFIC_SCENE_MODE + BYTE byRes[2]; //保留,设置为0 +}NET_VCA_CHAN_IN_PARAM, *LPNET_VCA_CHAN_IN_PARAM; + + +//行为能力集结构 +typedef struct tagNET_VCA_BEHAVIOR_ABILITY +{ + DWORD dwSize; //结构长度 + DWORD dwAbilityType; //支持的能力类型,按位表示,见VCA_ABILITY_TYPE定义 + BYTE byMaxRuleNum; //最大规则数 + BYTE byMaxTargetNum; //最大目标数 + BYTE bySupport; // 支持的功能类型 按位表示 + // bySupport & 0x01 支持标定功能 + BYTE byRes[5]; //保留,设置为0 + DWORD dwAbilityTypeEx; //支持的能力类型,按位表示,见VCA_ABILITY_TYPE_EX定义 +}NET_VCA_BEHAVIOR_ABILITY, *LPNET_VCA_BEHAVIOR_ABILITY; + +//场景变更数据更新参数 +typedef struct tagNET_DVR_SCENE_CHANGE_UPDATE_PARAM +{ + DWORD dwSize; + BYTE byIDCount; //实际流ID数 + BYTE byRes1[3]; + BYTE byStreamID[MAX_STREAM_ID_NUM][STREAM_ID_LEN]; + BYTE byRes[256]; +}NET_DVR_SCENE_CHANGE_UPDATE_PARAM, *LPNET_DVR_SCENE_CHANGE_UPDATE_PARAM; + +// 交通能力集结构 +typedef struct tagNET_DVR_ITS_ABILITY +{ + DWORD dwSize; // 结构体大小 + DWORD dwAbilityType; // 支持的能力列表 参照ITS_ABILITY_TYPE + BYTE byMaxRuleNum; //最大规则数 + BYTE byMaxTargetNum; //最大目标数 + BYTE byRes[10]; // 保留 +}NET_DVR_ITS_ABILITY, *LPNET_DVR_ITS_ABILITY; + +/***********************************end*******************************************/ + +/************************************智能参数结构*********************************/ +//智能共用结构 +//坐标值归一化,浮点数值为当前画面的百分比大小, 精度为小数点后三位 + +//异常行为检测事件类型 +typedef enum _VCA_EVENT_TYPE_ +{ + VCA_TRAVERSE_PLANE = 0x1, //穿越警戒面 + VCA_ENTER_AREA = 0x2, //目标进入区域,支持区域规则 + VCA_EXIT_AREA = 0x4, //目标离开区域,支持区域规则 + VCA_INTRUSION = 0x8, //周界入侵,支持区域规则 + VCA_LOITER = 0x10, //徘徊,支持区域规则 + VCA_LEFT_TAKE = 0x20, //物品遗留拿取,支持区域规则 + VCA_PARKING = 0x40, //停车,支持区域规则 + VCA_RUN = 0x80, //快速移动,支持区域规则 + VCA_HIGH_DENSITY = 0x100, //区域内人员聚集,支持区域规则 + VCA_VIOLENT_MOTION = 0x200, //剧烈运动检测 + VCA_REACH_HIGHT = 0x400, //攀高检测 + VCA_GET_UP = 0x800, //起身检测 + VCA_LEFT = 0x1000, //物品遗留 + VCA_TAKE = 0x2000, //物品拿取 + VCA_LEAVE_POSITION = 0x4000, //离岗 + VCA_TRAIL = 0x8000, //尾随 + VCA_KEY_PERSON_GET_UP = 0x10000, //重点人员起身检测 + VCA_STANDUP = 0x20000, //起立 + VCA_FALL_DOWN = 0x80000, //倒地检测 + VCA_AUDIO_ABNORMAL = 0x100000, //声强突变检测 + VCA_ADV_REACH_HEIGHT = 0x200000, //折线攀高 + VCA_TOILET_TARRY = 0x400000, //如厕超时 + VCA_YARD_TARRY = 0x800000, //放风场滞留 + VCA_ADV_TRAVERSE_PLANE = 0x1000000, //折线警戒面 + VCA_LECTURE = 0x2000000, //授课 + VCA_ANSWER = 0x4000000, //回答问题 + VCA_HUMAN_ENTER = 0x10000000, //人靠近ATM 只在ATM_PANEL模式下支持 + VCA_OVER_TIME = 0x20000000, //操作超时 只在ATM_PANEL模式下支持 + VCA_STICK_UP = 0x40000000, //贴纸条,支持区域规则 + VCA_INSTALL_SCANNER = 0x80000000 //安装读卡器,支持区域规则 +}VCA_EVENT_TYPE; + +//异常行为检测事件类型扩展 +typedef enum _VCA_RULE_EVENT_TYPE_EX_ +{ + ENUM_VCA_EVENT_TRAVERSE_PLANE = 1, //穿越警戒面 + ENUM_VCA_EVENT_ENTER_AREA = 2, //目标进入区域,支持区域规则 + ENUM_VCA_EVENT_EXIT_AREA = 3, //目标离开区域,支持区域规则 + ENUM_VCA_EVENT_INTRUSION = 4, //周界入侵,支持区域规则 + ENUM_VCA_EVENT_LOITER = 5, //徘徊,支持区域规则 + ENUM_VCA_EVENT_LEFT_TAKE = 6, //物品遗留拿取,支持区域规则 + ENUM_VCA_EVENT_PARKING = 7, //停车,支持区域规则 + ENUM_VCA_EVENT_RUN = 8, //快速移动,支持区域规则 + ENUM_VCA_EVENT_HIGH_DENSITY = 9, //区域内人员聚集,支持区域规则 + ENUM_VCA_EVENT_VIOLENT_MOTION = 10, //剧烈运动检测 + ENUM_VCA_EVENT_REACH_HIGHT = 11, //攀高检测 + ENUM_VCA_EVENT_GET_UP = 12, //起身检测 + ENUM_VCA_EVENT_LEFT = 13, //物品遗留 + ENUM_VCA_EVENT_TAKE = 14, //物品拿取 + ENUM_VCA_EVENT_LEAVE_POSITION = 15, //离岗 + ENUM_VCA_EVENT_TRAIL = 16, //尾随 + ENUM_VCA_EVENT_KEY_PERSON_GET_UP = 17, //重点人员起身检测 + ENUM_VCA_EVENT_STANDUP = 18, //起立 + ENUM_VCA_EVENT_FALL_DOWN = 20, //倒地检测 + ENUM_VCA_EVENT_AUDIO_ABNORMAL = 21, //声强突变检测 + ENUM_VCA_EVENT_ADV_REACH_HEIGHT = 22, //折线攀高 + ENUM_VCA_EVENT_TOILET_TARRY = 23, //如厕超时 + ENUM_VCA_EVENT_YARD_TARRY = 24, //放风场滞留 + ENUM_VCA_EVENT_ADV_TRAVERSE_PLANE = 25, //折线警戒面 + ENUM_VCA_EVENT_LECTURE = 26, //授课(文教) + ENUM_VCA_EVENT_ANSWER = 27, //回答问题(文教) + ENUM_VCA_EVENT_HUMAN_ENTER = 29, //人靠近ATM,只在ATM_PANEL模式下支持 + ENUM_VCA_EVENT_OVER_TIME = 30, //操作超时,只在ATM_PANEL模式下支持 + ENUM_VCA_EVENT_STICK_UP = 31, //贴纸条,支持区域规则 + ENUM_VCA_EVENT_INSTALL_SCANNER = 32, //安装读卡器,支持区域规则 + ENUM_VCA_EVENT_PEOPLENUM_CHANGE = 35, //人数变化事件 + ENUM_VCA_EVENT_SPACING_CHANGE = 36, //间距变化事件 + ENUM_VCA_EVENT_COMBINED_RULE = 37, //组合规则事件 + ENUM_VCA_EVENT_SIT_QUIETLY = 38, //一动不动则事件 + ENUM_VCA_EVENT_HIGH_DENSITY_STATUS= 39, //区域内人员聚集状态 + ENUM_VCA_EVENT_RUNNING = 40, //奔跑检测 + ENUM_VCA_EVENT_RETENTION = 41, //滞留检测 + ENUM_VCA_EVENT_BLACKBOARD_WRITE = 42, //板书 + ENUM_VCA_EVENT_SITUATION_ANALYSIS = 43, //态势分析 + ENUM_VCA_EVENT_PLAY_CELLPHONE = 44, //玩手机检测 + ENUM_VCA_EVENT_DURATION = 45, //持续报警 + ENUM_VCA_EVENT_FAKECARD = 46 //伪造卡检测 +} VCA_RULE_EVENT_TYPE_EX; + +//警戒面穿越方向类型 +typedef enum _VCA_CROSS_DIRECTION_ +{ + VCA_BOTH_DIRECTION, // 双向 + VCA_LEFT_GO_RIGHT, // 由左至右 + VCA_RIGHT_GO_LEFT // 由右至左 +}VCA_CROSS_DIRECTION; + +//线结构 +typedef struct tagNET_VCA_LINE +{ + NET_VCA_POINT struStart; //起点 + NET_VCA_POINT struEnd; //终点 +}NET_VCA_LINE, *LPNET_VCA_LINE; + +//多边型结构体 +typedef struct tagNET_VCA_POLYGON +{ + DWORD dwPointNum; //有效点 大于等于3,若是3点在一条线上认为是无效区域,线交叉认为是无效区域 + NET_VCA_POINT struPos[VCA_MAX_POLYGON_POINT_NUM]; //多边形边界点,最多十个 +}NET_VCA_POLYGON, *LPNET_VCA_POLYGON; + +//警戒面参数 +typedef struct tagNET_VCA_TRAVERSE_PLANE +{ + NET_VCA_LINE struPlaneBottom; //警戒面底边 + VCA_CROSS_DIRECTION dwCrossDirection; //穿越方向: 0-双向,1-从左到右,2-从右到左 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byPlaneHeight; //警戒面高度 + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byPriority;//优先级,0~低,1~中,2~高 + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes2[34]; //保留 +}NET_VCA_TRAVERSE_PLANE, *LPNET_VCA_TRAVERSE_PLANE; + +typedef struct tagNET_VCA_SIT_QUIETLY +{ + NET_VCA_POLYGON struRegion;//区域范围 + //规则触发顺序,0-顺序或逆序触发,1-顺序触发 + DWORD dwDuration; //持续时间 单位s 范围1-3600 + BYTE byRes[4]; +} NET_VCA_SIT_QUIETLY, *LPNET_VCA_SIT_QUIETLY; + +//进入/离开区域参数 +typedef struct tagNET_VCA_AREA +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byPriority;//优先级,0~低,1~中,2~高 + BYTE byRes[5]; +}NET_VCA_AREA, *LPNET_VCA_AREA; + +//根据报警延迟时间来标识报警中带图片,报警间隔和IO报警一致,1秒发送一个。 +//入侵参数 +typedef struct tagNET_VCA_INTRUSION +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //行为事件触发时间阈值: 1-120秒,建议5秒,判断是有效报警的时间 在ATM系统中触发文件阈值为 1-1000秒 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byRate; //占比:区域内所有未报警目标尺寸目标占区域面积的比重,归一化为-; + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byPriority;//优先级,0~低,1~中,2~高 + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 +}NET_VCA_INTRUSION, *LPNET_VCA_INTRUSION; + +//徘徊参数 +typedef struct tagNET_VCA_LOITER +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:1-120秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[1]; + DWORD dwLoiterDistance; //行程总距离阈值:100-5000,默认1000cm +}NET_VCA_LOITER, *LPNET_VCA_LOITER; + +//物品遗留/物品拿取参数 +typedef struct tagNET_VCA_TAKE_LEFT +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:1-120秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[5]; +}NET_VCA_TAKE_LEFT, *LPNET_VCA_TAKE_LEFT; + +//停车参数 +typedef struct tagNET_VCA_PARKING +{ + NET_VCA_POLYGON struRegion; //区域范围 + WORD wDuration; //触发时间阈值:1-100秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[5]; +}NET_VCA_PARKING, *LPNET_VCA_PARKING; + +//快速移动参数 +typedef struct tagNET_VCA_RUN +{ + NET_VCA_POLYGON struRegion; //区域范围 + float fRunDistance; //人快速移动最大距离, 范围: [0.1, 1.00] 像素模式 实际模式(1,20)m/s + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byMode; // 0 像素模式 1 实际模式 + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车,, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byRes; +}NET_VCA_RUN, *LPNET_VCA_RUN; + +//人员聚集参数 +typedef struct tagNET_VCA_HIGH_DENSITY +{ + NET_VCA_POLYGON struRegion; //区域范围 + float fDensity; //聚集比率, 范围: [0.1, 1.0] + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes; // 保留字节 + WORD wDuration; // 触发人员聚集参数报警阈值 20-360s +}NET_VCA_HIGH_DENSITY, *LPNET_VCA_HIGH_DENSITY; + +//剧烈运动参数 +typedef struct tagNET_VCA_VIOLENT_MOTION +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发剧烈运动报警阈值:1-50秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byMode; //0-纯视频模式,1-音视频联合模式,2-纯音频模式 + BYTE byRes[4]; //保留 +}NET_VCA_VIOLENT_MOTION, *LPNET_VCA_VIOLENT_MOTION; + +// 攀高参数 +typedef struct tagNET_VCA_REACH_HIGHT +{ + NET_VCA_LINE struVcaLine; //攀高警戒面 + WORD wDuration; //触发攀高报警阈值:1-120秒 + BYTE byRes[6]; // 保留字节 +}NET_VCA_REACH_HIGHT, *LPNET_VCA_REACH_HIGHT; + +// 起床参数 +typedef struct tagNET_VCA_GET_UP +{ + NET_VCA_POLYGON struRegion; //区域范围 + WORD wDuration; //触发起床报警阈值1-100 秒 + BYTE byMode; //起身检测模式,0-大床通铺模式,1-高低铺模式,2-大床通铺坐立起身模式 + BYTE bySensitivity; //灵敏度参数,范围[1,10] + BYTE byRes[4]; //保留字节 +}NET_VCA_GET_UP, * LPNET_VCA_GET_UP; + +// 物品遗留 +typedef struct tagNET_VCA_LEFT +{ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 触发物品遗留报警阈值 10-100秒 + BYTE bySensitivity; // 灵敏度参数,范围[1,5] + BYTE byRes[5]; // 保留字节 +}NET_VCA_LEFT, *LPNET_VCA_LEFT; + +// 物品拿取 +typedef struct tagNET_VCA_TAKE +{ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 触发物品拿取报警阈值10-100秒 + BYTE bySensitivity; // 灵敏度参数,范围[1,5] + BYTE byRes[5]; // 保留字节 +}NET_VCA_TAKE, *LPNET_VCA_TAKE; + +typedef struct tagNET_VCA_OVER_TIME +{ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; // 操作报警时间阈值 4s-60000s + BYTE byRes[6]; // 保留字节 +}NET_VCA_OVER_TIME, *LPNET_VCA_OVER_TIME; + +typedef struct tagNET_VCA_HUMAN_ENTER +{ + DWORD dwRes[23]; //保留字节 +}NET_VCA_HUMAN_ENTER, *LPNET_VCA_HUMAN_ENTER; + +//贴纸条参数 +typedef struct tagNET_VCA_STICK_UP +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //触发时间阈值:4-60秒,建议10秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[5]; +}NET_VCA_STICK_UP, *LPNET_VCA_STICK_UP; + +//读卡器参数 +typedef struct tagNET_VCA_SCANNER +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //读卡持续时间:4-60秒 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[5]; +}NET_VCA_SCANNER, *LPNET_VCA_SCANNER; + +//离岗事件 +typedef struct tagNET_VCA_LEAVE_POSITION +{ + NET_VCA_POLYGON struRegion; //区域范围 + WORD wLeaveDelay; //无人报警时间,单位:s + WORD wStaticDelay; //睡觉报警时间,单位:s + BYTE byMode; //模式,0-离岗事件,1-睡岗事件,2-离岗睡岗事件,3-在岗(当离岗人员回到岗位) + BYTE byPersonType; //值岗人数类型,0-单人值岗,1-双人值岗 + BYTE byOnPosition; //在岗人数,1-10,默认1 + BYTE bySensitivity; //灵敏度参数,范围[1,5] +}NET_VCA_LEAVE_POSITION, *LPNET_VCA_LEAVE_POSITION; + +//尾随参数 +typedef struct tagNET_VCA_TRAIL +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wRes; /* 保留 */ + BYTE bySensitivity; /* 灵敏度参数,范围[1,5] */ + BYTE byRes[5]; +}NET_VCA_TRAIL, *LPNET_VCA_TRAIL; + +//倒地参数 +typedef struct tagNET_VCA_FALL_DOWN +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; /* 触发事件阈值 1-60s*/ + BYTE bySensitivity; /* 灵敏度参数,范围[1,5] */ + BYTE byHeightThreshold; //高度阈值,范围[0,250],默认90,单位:厘米 + BYTE byRes[4]; +}NET_VCA_FALL_DOWN, *LPNET_VCA_FALL_DOWN; + +//起立 +typedef struct tagNET_VCA_STANDUP +{ + NET_VCA_POLYGON struRegion; //区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byHeightThreshold; //高度阈值,范围[0,250],默认130,单位:厘米 + WORD wDuration; //触发事件阈值[1,3600],默认2,单位:秒 + BYTE byRes[4]; //保留 +}NET_VCA_STANDUP, *LPNET_VCA_STANDUP; + + +//人数变化 +typedef struct tagNET_VCA_PEOPLENUM_CHANGE +{ + NET_VCA_POLYGON struRegion; //区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byPeopleNumThreshold; //人数阈值,范围[0,5],默认1 + BYTE byDetectMode; //检测方式,与人数阈值相比较。1-大于,2-小于,3-等于,4-不等于 + BYTE byNoneStateEffective; //无人状态是否有效,0-无效,1-有效 + WORD wDuration; //触发时间阈值[1,3600],默认2,单位:秒 + BYTE byPeopleNum; //触发报警人数,只读,仅报警上报,设备返回0表示不支持本功能上报,0xff表示报警人数为0 + BYTE byRes; //保留 +}NET_VCA_PEOPLENUM_CHANGE, *LPNET_VCA_PEOPLENUM_CHANGE; + +//间距变化 +typedef struct tagNET_VCA_SPACING_CHANGE +{ + NET_VCA_POLYGON struRegion; //区域范围 + float fSpacingThreshold; //间距阈值,范围[0,10.0],默认1.0,单位:米 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byDetectMode; //检测方式,与间距阈值相比较。1-大于,2-小于 + WORD wDuration; //触发时间阈值[1,3600],默认2,单位:秒 +}NET_VCA_SPACING_CHANGE, *LPNET_VCA_SPACING_CHANGE; + + +//声强突变参数 +typedef struct tagNET_VCA_AUDIO_ABNORMAL +{ + WORD wDecibel; //声音强度 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byAudioMode; //声音检测模式,0-灵敏度检测,1-分贝阈值检测,2-灵敏度与分贝阈值检测 + BYTE byEnable; //使能,是否开启(声强突变,陡升) + BYTE byThreshold; //声音阈值[1,100] + BYTE byRes[54]; //保留 +}NET_VCA_AUDIO_ABNORMAL, *LPNET_VCA_AUDIO_ABNORMAL; + +//声强陡降 2014-03-21 +typedef struct tagNET_DVR_AUDIO_STEEP_DROP +{ + BYTE bySensitivity; /* 灵敏度参数,范围[1,100] */ + BYTE byEnable; //使能,是否开启(声强突变,陡降) + BYTE byRes[6]; +}NET_DVR_AUDIO_STEEP_DROP, *LPNET_DVR_AUDIO_STEEP_DROP; + + +typedef struct tagNET_DVR_AUDIO_EXCEPTION +{ + DWORD dwSize; + BYTE byEnableAudioInException;//使能,是否开启 + BYTE byRes1[3]; + NET_VCA_AUDIO_ABNORMAL struAudioAbnormal; + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD byRelRecordChan[MAX_CHANNUM_V30]; + NET_DVR_AUDIO_STEEP_DROP struAudioSteepDrop; //声强陡降 + BYTE byRes2[24]; +}NET_DVR_AUDIO_EXCEPTION, *LPNET_DVR_AUDIO_EXCEPTION; + +typedef struct tagNET_VCA_TOILET_TARRY +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDelay; //如厕超时时间[1,3600],单位:秒 + BYTE byRes[6]; +}NET_VCA_TOILET_TARRY, *LPNET_VCA_TOILET_TARRY; + +typedef struct tagNET_VCA_YARD_TARRY +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDelay; //放风场滞留时间[1,120],单位:秒 + BYTE byRes[6]; +}NET_VCA_YARD_TARRY, *LPNET_VCA_YARD_TARRY; + +typedef struct tagNET_VCA_ADV_REACH_HEIGHT +{ + NET_VCA_POLYGON struRegion; //攀高折线 + DWORD dwCrossDirection; //跨越方向(详见VCA_CROSS_DIRECTION): 0-双向,1-从左到右2-从右到左 + BYTE byRes[4]; // 保留字节 +}NET_VCA_ADV_REACH_HEIGHT, * LPNET_VCA_ADV_REACH_HEIGHT; + +typedef struct tagNET_VCA_ADV_TRAVERSE_PLANE +{ + NET_VCA_POLYGON struRegion; //警戒面折线 + DWORD dwCrossDirection; //跨越方向(详见VCA_CROSS_DIRECTION): 0-双向,1-从左到右2-从右到左 + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[3]; //保留字节 +} NET_VCA_ADV_TRAVERSE_PLANE,*LPNET_VCA_ADV_TRAVERSE_PLANE; + +typedef struct tagNET_VCA_PLAY_CELLPHONE +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //玩手机超时时间[1,600]秒, 默认20秒 + BYTE byRes[6]; //保留字节 +}NET_VCA_PLAY_CELLPHONE, *LPNET_VCA_PLAY_CELLPHONE; + +typedef struct tagNET_VCA_LECTURE +{ + NET_VCA_POLYGON struRegion;//区域范围 + WORD wDuration; //行为事件触发时间阈值: 1-10秒,建议1秒,判断是有效报警的时间 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byAlarmState;//只读字段界面不显示;0-保留,1-报警开始,2-报警结束 + BYTE byTrackingMode ;//模式,0-自动(默认) , 1-水平, 2-垂直 + BYTE byZoomMode;//变倍模式, 0-固定(默认), 1-自动 + BYTE byZoomOver;//0-保留,1-变倍到位(报警上传录播主机,作为切换画面判断依据) + BYTE byTrackStatus;//状态 0-保留,1-开始授课(A,全景) 2-正在(2,特写),3 -丢失(2,全景) +}NET_VCA_LECTURE, *LPNET_VCA_LECTURE; + +typedef struct tagNET_VCA_ANSWER +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity;//灵敏度参数,范围[1-100] + BYTE byAlarmState;//只读字段界面不显示;0-保留,1-报警开始,2-报警结束 + BYTE byZoomOver;//0-保留,1-变倍到位(报警上传录播主机,作为切换画面判断依据) + BYTE byAnswerStudent;//0-保留,1-无学生起立,2-单个学生起立,3-多个学生起立,4-疑似学生起立, 5-单个学生走动 + BYTE byRes[4]; //保留 +}NET_VCA_ANSWER, *LPNET_VCA_ANSWER; + +//关联规则结构体 +typedef struct tagNET_VCA_RELATE_RULE_PARAM +{ + BYTE byRuleID; //规则序号 0-表示无 + BYTE byRes; //保留 + WORD wEventType; //行为事件类型,参考VCA_RULE_EVENT_TYPE_EX留 +}NET_VCA_RELATE_RULE_PARAM,*LPNET_VCA_RELATE_RULE_PARAM; + +typedef struct tagNET_VCA_COMBINED_RULE_ +{ + //规则触发顺序,0-顺序或逆序触发,1-顺序触发 + BYTE byRuleSequence; + BYTE byRes[7]; + DWORD dwMinInterval; //最小时间间隔,单位:秒 + DWORD dwMaxInterval; //最大时间间隔,单位:秒 + NET_VCA_RELATE_RULE_PARAM struRule1Raram;//规则1 + NET_VCA_RELATE_RULE_PARAM struRule2Raram;//规则2 + BYTE byRes1[36]; +} NET_VCA_COMBINED_RULE, *LPNET_VCA_COMBINED_RULE; + +//板书事件 +typedef struct tagNET_VCA_BLACKBOARD_WRITE +{ + NET_VCA_POLYGON struRegion;//区域范围(配置区域,报警中不含有该区域) + BYTE byTeacherState;//教师状态;0~教师特写,1~教师全景,2~讲台无人状态 + BYTE byWritingState;//板书状态;0~板书开始,1~板书结束 + BYTE byWritingArea;//板书区域;0~整个板书,1~板书左边,2~板书右边 + BYTE byRes[5]; +}NET_VCA_BLACKBOARD_WRITE, *LPNET_VCA_BLACKBOARD_WRITE; + +//人员聚集状态 +typedef struct tagNET_VCA_HIGH_DENSITY_STATUS +{ + NET_VCA_POLYGON struRegion; //区域范围 + float fDensity; //聚集比率, 范围: [0.1, 1.0] + BYTE bySensitivity; //灵敏度参数,范围[1,5] + BYTE byRes[3]; // 保留字节 +}NET_VCA_HIGH_DENSITY_STATUS, *LPNET_VCA_HIGH_DENSITY_STATUS; + +//奔跑检测 +typedef struct _NET_VCA_RUNNING_ +{ + NET_VCA_POLYGON struRegion; //区域范围 + DWORD dwSpeed; //奔跑速度,范围[1,10] + WORD wDuration; // 触发报警时间阈值 + BYTE byRunMode; //奔跑模式,0-保留,1:单人奔跑,2:多人奔跑 + BYTE byRes; +}NET_VCA_RUNNING, *LPNET_VCA_RUNNING; + +// 滞留检测 +typedef struct tagNET_VCA_RETENTION +{ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wDuration; //触发滞留报警阈值时间(60-3600秒)默认1800秒 + BYTE byRes[6]; // 保留字节 +}NET_VCA_RETENTION, *LPNET_VCA_RETENTION; + +// 态势分析参数 +typedef struct tagNET_VCA_SITUATION_ANALYSIS +{ + NET_VCA_POLYGON struRegion; // 区域范围 + WORD wPeopleNum; //区域人数 + BYTE byRes[6]; // 保留字节 +}NET_VCA_SITUATION_ANALYSIS, *LPNET_VCA_SITUATION_ANALYSIS; + +//持续报警 +typedef struct _NET_VCA_DURATION_ +{ + WORD wRelationEventType; //参考VCA_RULE_EVENT_TYPE_EX + BYTE byRes[90]; +}NET_VCA_DURATION, *LPNET_VCA_DURATION; + +//伪造卡检测参数 +typedef struct tagNET_VCA_FAKECARD +{ + NET_VCA_POLYGON struRegion; // 区域范围 + BYTE bySensitivity; // 灵敏度参数:最小1,最大5,默认3 + BYTE byRes[7]; // 保留字节 +}NET_VCA_FAKECARD, *LPNET_VCA_FAKECARD; + +//警戒事件参数 +typedef union tagNET_VCA_EVENT_UNION +{ + DWORD uLen[23]; //参数 + NET_VCA_TRAVERSE_PLANE struTraversePlane; //穿越警戒面参数 + NET_VCA_AREA struArea; //进入/离开区域参数 + NET_VCA_INTRUSION struIntrusion; //入侵参数 + NET_VCA_LOITER struLoiter; //徘徊参数 + NET_VCA_TAKE_LEFT struTakeTeft; //物品遗留/物品拿取参数 + NET_VCA_PARKING struParking; //停车参数 + NET_VCA_RUN struRun; //快速移动参数 + NET_VCA_HIGH_DENSITY struHighDensity; //人员聚集参数 + NET_VCA_VIOLENT_MOTION struViolentMotion; //剧烈运动 + NET_VCA_REACH_HIGHT struReachHight; //攀高 + NET_VCA_GET_UP struGetUp; //起床 + NET_VCA_LEFT struLeft; //物品遗留 + NET_VCA_TAKE struTake; // 物品拿取 + NET_VCA_HUMAN_ENTER struHumanEnter; //人员进入 + NET_VCA_OVER_TIME struOvertime; //操作超时 + NET_VCA_STICK_UP struStickUp; //贴纸条 + NET_VCA_SCANNER struScanner; //读卡器参数 + NET_VCA_LEAVE_POSITION struLeavePos; //离岗参数 + NET_VCA_TRAIL struTrail; //尾随参数 + NET_VCA_FALL_DOWN struFallDown; //倒地参数 + NET_VCA_AUDIO_ABNORMAL struAudioAbnormal; //声强突变 + NET_VCA_ADV_REACH_HEIGHT struReachHeight; //折线攀高参数 + NET_VCA_TOILET_TARRY struToiletTarry; //如厕超时参数 + NET_VCA_YARD_TARRY struYardTarry; //放风场滞留参数 + NET_VCA_ADV_TRAVERSE_PLANE struAdvTraversePlane;//折线警戒面参数 + NET_VCA_LECTURE struLecture; //授课事件 + NET_VCA_ANSWER struAnswer; //回答问题事件 + NET_VCA_STANDUP struStandUp; //起立参数 + NET_VCA_PEOPLENUM_CHANGE struPeopleNumChange; //人数变化参数 + NET_VCA_SPACING_CHANGE struSpacingChange; //间距变化参数 + NET_VCA_COMBINED_RULE struCombinedRule; //组合规则参数 + NET_VCA_SIT_QUIETLY struSitQuietly; //一动不动参数 + NET_VCA_HIGH_DENSITY_STATUS struHighDensityStatus; //人员聚集状态 + NET_VCA_RUNNING struRunning; //奔跑参数 + NET_VCA_RETENTION struRetention;//滞留检测 + NET_VCA_BLACKBOARD_WRITE struBlackboardWrite; //板书参数 + NET_VCA_SITUATION_ANALYSIS struSituationAnalysis; //态势分析参数 + NET_VCA_PLAY_CELLPHONE struPlayCellphone; //玩手机检测参数 + NET_VCA_DURATION struDruation;//持续报警参数 + NET_VCA_FAKECARD struFakeCard; //伪造卡检测 +}NET_VCA_EVENT_UNION, *LPNET_VCA_EVENT_UNION; + +// 尺寸过滤器类型 +typedef enum _VCA_SIZE_FILTER_MODE_ +{ + IMAGE_PIX_MODE, //根据像素大小设置 + REAL_WORLD_MODE, //根据实际大小设置 + DEFAULT_MODE // 默认模式 +}SIZE_FILTER_MODE; +//尺寸过滤器 +typedef struct tagNET_VCA_SIZE_FILTER +{ + BYTE byActive; //是否激活尺寸过滤器 0-否 非0-是 + BYTE byMode; //过滤器模式SIZE_FILTER_MODE + BYTE byRes[2]; //保留,置0 + NET_VCA_RECT struMiniRect; //最小目标框,全0表示不设置 + NET_VCA_RECT struMaxRect; //最大目标框,全0表示不设置 +}NET_VCA_SIZE_FILTER, *LPNET_VCA_SIZE_FILTER; + +//警戒规则结构 +typedef struct tagNET_VCA_ONE_RULE +{ + BYTE byActive; //是否激活规则,0-否,非0-是 + BYTE byRes[7]; //保留,设置为0字段 + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //异常行为检测事件类型 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 +}NET_VCA_ONE_RULE, *LPNET_VCA_ONE_RULE; + +//异常行为检测配置结构体 +typedef struct tagNET_VCA_RULECFG +{ + DWORD dwSize; //结构长度 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ + BYTE byRes; + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_ONE_RULE struRule[MAX_RULE_NUM]; //规则数组 +}NET_VCA_RULECFG, *LPNET_VCA_RULECFG; + +//前端设备地址信息,智能分析仪表示的是前端设备的地址信息,其他设备表示本机的地址 +/* +当接入设备模拟通道(IPC/DVR/DVS/IVMS)报警的时候,下面字段填写设备的IP地址,端口,byChannel和byIvmsChannel 均为当前的模拟通道号 +eg: +struDevIP = 模拟通道对应设备的IP地址 +wPort = 模拟通道对应设备的端口 +byChannel = 报警对应模拟通道的通道号 +byIvmsChannel = 报警对应模拟通道的通道号 + + 当接入设备数字通道(DVR/DVS/IVMS)报警的时候,下面字段填写数字通道接入设备的IP地址,端口,byChannel为数字通道接入设备的通道号,byIvmsChannel为数字通道号 + eg: + struDevIP = 数字通道接入设备的IP地址 + wPort = 数字通道接入设备的端口 + byChannel = 数字通道接入设备的通道号 + byIvmsChannel = 数字通道号 +*/ +typedef struct tagNET_VCA_DEV_INFO +{ + NET_DVR_IPADDR struDevIP; //前端设备地址, + WORD wPort; //前端设备端口号, + BYTE byChannel; //前端设备通道, + BYTE byIvmsChannel; // Ivms 通道 +}NET_VCA_DEV_INFO, *LPNET_VCA_DEV_INFO; + +typedef struct tagNET_DVR_TARGET_LEFT_REGION_ALARM +{ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byTargetType;//检测目标类型 0-无效目标,1-教师 2-学生 + BYTE byLeftDirection;//检测目标离开方向类型0-保留,1-上,2-下,3-左,4-右 + BYTE byTargetStatus;//0-保留(不做处理) + BYTE byRes[125]; +}NET_DVR_TARGET_LEFT_REGION_ALARM,*LPNET_DVR_TARGET_LEFT_REGION_ALARM; + +/* 报警图片图片信息 */ +typedef struct +{ + /*20-司机吸烟 司机报警从抽烟开始, 21-司机打电话, 22-司机疲劳驾驶, 23-司机没有目视前方(离岗),24-司机检测不到头部, 25-司机系安全带, + 26-司机捡拾物品, 27-司机打哈欠, 28-司机吃东西或喝水, 29-司机聊天, 31-司机未穿工作服*/ + DWORD dwPicType; /* 报警图片类型 */ + char *pPicBuf; /*图片指针*/ + DWORD dwPicLen; /* 报警图片长度,为0时表示没有图片 */ + DWORD dwTime; /* 抓图时间 */ + char *pVideoBuf; /*视频指针, xxx.mp4*/ + DWORD dwVideoLen; /* 抓图视频的长度,0表示没有报警视频 20180518 */ + BYTE byRes[12]; /* 预留 */ +}NET_DVR_DBD_PICTURE_INFO, *LPNET_DVR_DBD_PICTURE_INFO; + +/* 报警位置信息 */ +typedef struct +{/* 24 bytes */ + DWORD bValid; /* 定位信息是否有效 */ + DWORD dwLongitude; /* 经度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLatitude; /* 纬度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* 速度 = 实际速度*1000*100 */ + DWORD dwVehicleDirection; /* 速度方向角 = 实际方向*100 */ + DWORD dwAltitude; /* 海拔高度(厘米) */ +}NET_DVR_DBD_POSITION_INFO, *LPNET_DVR_DBD_POSITION_INFO; + +/* 报警状态信息 */ +typedef struct +{/* 24 bytes */ + BYTE bySmoke; /* 吸烟 */ + BYTE byPhone; /* 打电话 */ + BYTE byTiredDriving; /* 疲劳驾驶 */ + BYTE byNoVisualFront; /* 没有目视前方 */ + BYTE byNoHead; /* 离岗 */ + BYTE byWithoutBelt; /* 不系安全带 */ + BYTE byPickingUpThing; /* 捡拾物品 */ + BYTE byYawn; /* 打哈欠 */ + BYTE byEatOrDrink; /* 吃喝 */ + BYTE byChatting; /* 聊天 */ + BYTE byTampering; /* 遮挡IPC */ + BYTE byWithoutUniform; /* 未穿工作服 */ + BYTE byDriverCmpFail; /* 身份识别异常*/ + BYTE byDriverChange; /* 驾驶员更换*/ + BYTE byDriveLongTime; /*超时驾驶*/ + BYTE byInfraredBlockingSunglasses; /* 红外阻断墨镜 */ + BYTE byOutOfWheel; /* 0-保留,1-单手脱离方向盘,2-双手脱离方向盘 */ + BYTE byRes[7]; +}NET_DVR_DBD_ALARM_STATE, *LPNET_DVR_DBD_ALARM_STATE; + +/* 驾驶行为报警信息 */ +typedef struct +{ + DWORD dwSize; /* 报警上传结构体大小 4*/ + BYTE byChannel; /* 通道号 1*/ + BYTE byLevel; /*报警等级,当前只有1*/ + BYTE byRes1[2]; /* 保留字节 3*/ + NET_VCA_DEV_INFO struIpcInfo; /* 报警IP通道信息 24*/ + NET_DVR_DBD_POSITION_INFO struPosInfo; /* 报警位置信息 24*/ + NET_DVR_DBD_PICTURE_INFO struPicInfo; /* 报警图片信息*/ + NET_DVR_DBD_ALARM_STATE struAlarmState; /* 报警状态信息 24*/ + BYTE byRes2[20]; /* 保留 20*/ +}NET_DVR_DBD_ALRAM_INFO, *LPNET_DVR_DBD_ALRAM_INFO; + +/* ADAS报警图片信息 */ +typedef struct +{ + DWORD dwPicType; /* 报警图片类型 */ + char *pPicBuf; /*图片指针*/ + DWORD dwPicLen; /* 报警图片长度,为0时表示没有图片 */ + DWORD dwTime; /* 抓图时间 */ + char *pVideoBuf; /*视频指针, xxx.mp4*/ + DWORD dwVideoLen; /* 抓图视频的长度,0表示没有报警视频 20180518 */ + BYTE byRes[12]; /* 预留 */ +} NET_DVR_ADAS_PICTURE_INFO, *LPNET_DVR_ADAS_PICTURE_INFO; + +/* ADAS报警位置信息 */ +typedef struct +{/* 24 bytes */ + DWORD dwValid; /* 定位信息是否有效 */ + DWORD dwLongitude; /* 经度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLatitude; /* 纬度 = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* 速度 = 实际速度*1000*100 */ + DWORD dwVehicleDirection; /* 速度方向角 = 实际方向*100 */ + DWORD dwAltitude; /* 海拔高度(厘米) */ +}NET_DVR_ADAS_POSITION_INFO, *LPNET_DVR_ADAS_POSITION_INFO; + +/* ADAS报警状态信息 */ +typedef struct +{/* 24 bytes */ + BYTE dwFcw; /* 前车碰撞,0无,1事件发生 */ + BYTE dwLdw; /* 车道偏离,0无,1左侧偏离,2右侧偏离 */ + BYTE dwHmw; /* 车距显示,0无,1事件发生 */ + BYTE dwPcw; /* 行人碰撞,0无,1事件发生 */ + BYTE dwBsd; /* 盲区检测,0无,1事件发生 , 2-右侧盲区报警,3-左侧盲区报警, 4-后侧盲区报警*/ + BYTE byAcc; /* 急加速,0无,1事件发生 */ + BYTE byBrake; /*急减速,0无,1事件发生 */ + BYTE byTurn; /* 急转弯,0无,1右急转弯,2左急转弯 */ + BYTE byRollover; /* 侧翻,0无,1事件发生 */ + BYTE byNoCourtesy; /* 未礼让行人,0无,1事件发生 */ + BYTE byTsr; /*交通标识警告,0无,1限速,2限高,3限宽 */ + BYTE byRes[13]; +}NET_DVR_ADAS_ALARM_STATE, *LPNET_DVR_ADAS_ALARM_STATE; + +/* ADAS驾驶行为报警信息 */ +typedef struct +{ + DWORD dwSize; /* 报警上传结构体大小 4*/ + BYTE byChannel; /* 通道号 1*/ + BYTE byRes1[3]; /* 保留字节 3*/ + NET_VCA_DEV_INFO struIpcInfo; /* 报警IP通道信息 28*/ + NET_DVR_ADAS_POSITION_INFO struPosInfo; /* 报警位置信息 24*/ + NET_DVR_ADAS_PICTURE_INFO struPicInfo; /* 报警图片信息*/ + NET_DVR_ADAS_ALARM_STATE struAlarmState; /* 报警状态信息 24*/ + BYTE byRes2[20]; /* 保留 20*/ +}NET_DVR_ADAS_ALRAM_INFO, *LPNET_DVR_ADAS_ALRAM_INFO; + +/* 行车实时数据 */ +typedef struct +{ + DWORD dwSize; /* 报警上传结构体大小 */ + DWORD dwSpeedValue; /* 速度值 */ + DWORD dwSpeedPulse; /* 测速脉冲 */ + BYTE byUpgPercent; /* 升级进度,正常0-100,升级失败返回255,每次开始升级时,首先需要等进度0,才表示准备开始了 20180508扩展*/ + BYTE byRes1[3]; + DWORD dwVideoLostChans; /*按位表示,0表示正常,1-表示视频丢失,第一位表示第一通道*/ + BYTE byRes2[44]; +}NET_DVR_VEH_REALTIME_DATA_INFO, *LPNET_DVR_VEH_REALTIME_DATA_INFO; + +#define VCA_ATTEND_MAX_PIC_NUM 3 //考勤事件最大图片张数 +#define VCA_ATTEND_DRIVER_NAME_LEN 64 //分组信息司机名字长度 +#define VCA_ATTEND_CARD_ID_LEN 32 //分组信息司机证件号码长度 +#define VCA_ATTEND_MAX_ALARM_ID_LEN 32 //报警事件唯一编号的最大长度 + +typedef struct +{ + DWORD dwPicLen; //报警图片长度,为0时表示没有图片 + char *pPicBuf; //图片指针 + BYTE byRes[12]; //预留 +}NET_DVR_VCA_ATTEND_PICDATA, *LPNET_DVR_VCA_ATTEND_PICDATA; + +/* 考勤事件图片信息 */ +typedef struct +{ + BYTE byPicNum; //考勤图片数量 + BYTE byRes1[3]; //预留 + NET_DVR_VCA_ATTEND_PICDATA struPicData[VCA_ATTEND_MAX_PIC_NUM]; //报警图片数据 + DWORD dwVideoLen; //抓图视频的长度,0表示没有报警视频 + char *pVideoBuf; //视频指针 + BYTE byRes[64]; //预留 +}NET_DVR_VCA_ATTEND_PICTURE_INFO, *LPNET_DVR_VCA_ATTEND_PICTURE_INFO; + +/* 考勤事件上传信息*/ +typedef struct +{ + DWORD dwSize; // 报警上传结构体大小 + BYTE byMethod; //考勤方式 0-IC卡考勤,1-人脸考勤 + BYTE byStatus; //考勤状态 0-保留,1-上班,2-下班(无人脸或换班) + BYTE byCertIDType; //驾驶员证件类型:0-营运资格证,1-身份证 + BYTE byCertIDLen; //驾驶员从业资格证编码长度 + char sCertId[VCA_ATTEND_CARD_ID_LEN]; //驾驶员从业资格证编码 + DWORD dwTime; //考勤时间 + char sName[VCA_ATTEND_DRIVER_NAME_LEN]; //驾驶员姓名 + char sAlarmIdNo[VCA_ATTEND_MAX_ALARM_ID_LEN]; //报警标识号 + NET_DVR_VCA_ATTEND_PICTURE_INFO struPicInfo; //报警图片信息 + BYTE byRes[128]; //保留 +}NET_DVR_VCA_ATTEND_ALARM_INFO, *LPNET_DVR_VCA_ATTEND_ALARM_INFO; + +//尺寸过滤策略 +typedef struct tagNET_VCA_FILTER_STRATEGY +{ + BYTE byStrategy; //尺寸过滤策略 0 - 不启用 1-高度和宽度过滤,2-面积过滤 + BYTE byRes[11]; //保留 +}NET_VCA_FILTER_STRATEGY,*LPNET_VCA_FILTER_STRATEGY; + +//规则触发参数 +typedef struct tagNET_VCA_RULE_TRIGGER_PARAM +{ + BYTE byTriggerMode; //规则的触发方式,0- 不启用,1- 点 2- 目标面积 + BYTE byTriggerPoint; //触发点,触发方式为点时有效 0- 中,1-上,2-下 + BYTE byRes1[2]; //保留 + float fTriggerArea; //触发目标面积百分比 [0,100],触发方式为目标面积时有效 + BYTE byRes2[4]; //保留 +}NET_VCA_RULE_TRIGGER_PARAM,*LPNET_VCA_RULE_TRIGGER_PARAM; + +//警戒规则结构 +typedef struct tagNET_VCA_ONE_RULE_V41 +{ + BYTE byActive; //是否激活规则,0-否,非0-是 + BYTE byRes1[4]; //保留,设置为0字段 + BYTE byEventTypeFlag; //标志行为事件类型字段的有效性,0-dwEventType有效,1-wEventTypeEx有效 + //注:此字段byEventTypeFlag只在设置参数时有效,从设备获取参数时,可直接从wEventTypeEx获取事件类型,无需判断此字段的值 + WORD wEventTypeEx; //行为事件类型扩展,用于代替字段dwEventType,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //行为事件类型,保留是为了兼容,后续建议使用wEventTypeEx获取事件类型 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + WORD wAlarmDelay; //智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + BYTE byRes2[2]; //保留 + NET_VCA_FILTER_STRATEGY struFilterStrategy; //尺寸过滤策略 + NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //规则触发参数 + BYTE byRes[32]; +}NET_VCA_ONE_RULE_V41, *LPNET_VCA_ONE_RULE_V41; + +//异常行为检测配置结构体 +typedef struct tagNET_VCA_RULECFG_V41 +{ + DWORD dwSize; //结构长度 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ + BYTE byRes1; + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_ONE_RULE_V41 struRule[MAX_RULE_NUM]; //规则数组 + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 + BYTE byRes[26]; +}NET_VCA_RULECFG_V41, *LPNET_VCA_RULECFG_V41; + +//警戒规则结构 +typedef struct NET_VCA_ONE_RULE_V42_ +{ + BYTE byActive; //是否激活规则, 0-否,非0-是 + BYTE byEventPriority;//事件优先级 0-低,1-中,2-高 + BYTE byBackgroundSuppression;//背景干扰抑制 0-关闭 1-开启 2-自适应 + BYTE byRes1[3]; //保留,设置为0字段 + WORD wEventType; //行为事件类型,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN/*32*/]; //规则名称 + NET_VCA_EVENT_UNION uEventParam; //异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式*/ + //异常处理方式中报警输出号与组号绑定,即组号为0时,表示关联的报警输出号范围为1-64,当组号为1时,表示关联的报警输出号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的报警出号无效 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道(四字节的通道号,初始值是 0xffffffff)*/ + //关联的录像通道号与组号绑定,即组号为0时,表示关联的通道号范围为1-64,当组号为1时,表示关联的通道号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的关联通道号无效 + WORD wAlarmDelay; //智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + BYTE byRes2[2]; //保留 + NET_VCA_FILTER_STRATEGY struFilterStrategy; //尺寸过滤策略 + NET_VCA_RULE_TRIGGER_PARAM struTriggerParam; //规则触发参数 + BYTE byRes[32]; +}NET_VCA_ONE_RULE_V42, *LPNET_VCA_ONE_RULE_V42; + + +typedef struct tagNET_DVR_PTZ_POSITION +{ + // 是否启用场景,在设置场景行为规则的时候该字段无效,在设置球机本地配置场景位置信息时作为使能位 + BYTE byEnable; + BYTE byRes1[3]; //保留 + BYTE byPtzPositionName[NAME_LEN]; //场景位置名称 + NET_DVR_PTZPOS struPtzPos; //ptz 坐标 + BYTE byRes2[40]; +}NET_DVR_PTZ_POSITION, *LPNET_DVR_PTZ_POSITION; + +//异常行为检测配置结构体 +typedef struct tagNET_VCA_RULECFG_V42 +{ + DWORD dwSize; //结构图大小 + BYTE byPicProType; //报警时图片处理方式 0-不处理 1-上传 + BYTE byUpLastAlarm; //是否先上传最近一次的报警,0-否,1-是 + BYTE byPicRecordEnable; //是否启用图片存储, 0-不启用, 1-启用 + BYTE byRes1; + NET_DVR_JPEGPARA struPicParam; //图片规格结构 + NET_VCA_ONE_RULE_V42 struRule[MAX_RULE_NUM_V42 /*16*/]; /* 规则数组*/ + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 + BYTE byTrackEnable; //是否启用 + BYTE byRes2; + NET_DVR_PTZ_POSITION struPTZPosition; //场景位置信息 + WORD wTrackDuration; //持续时间,单位s + WORD wIntervalTime; //单次报警间隔时间(秒)[1-7200](默认为600) + WORD wHeightLimit;//目标检测高度下限(厘米)[0-250](默认为80cm),小于此高度的目标将不作为目标进行检测 + BYTE byRes[58];//保留 +}NET_VCA_RULECFG_V42, *LPNET_VCA_RULECFG_V42; + + +//简化目标结构体 +typedef struct tagNET_VCA_TARGET_INFO +{ + DWORD dwID; //目标ID ,人员聚集过高报警时为0 + NET_VCA_RECT struRect; //目标边界框 + BYTE byRes[4]; //保留 +}NET_VCA_TARGET_INFO, *LPNET_VCA_TARGET_INFO; + +//简化的规则信息, 包含规则的基本信息 +typedef struct tagNET_VCA_RULE_INFO +{ + BYTE byRuleID; //规则ID,0-7 + BYTE bySceneID; //场景ID,返回0无效 + WORD wEventTypeEx; //行为事件类型扩展,用于代替字段dwEventType,参考VCA_RULE_EVENT_TYPE_EX + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //行为事件类型,保留是为了兼容,后续建议使wEventTypeEx获取事件类型 + NET_VCA_EVENT_UNION uEventParam;//事件参数 +}NET_VCA_RULE_INFO, *LPNET_VCA_RULE_INFO; + +//异常行为检测结果上报结构 +typedef struct tagNET_VCA_RULE_ALARM +{ + DWORD dwSize; //结构长度 + DWORD dwRelativeTime; //相对时标,历史原因,实际没用,本版本用起来当byRelativeTimeFlag为1时,表示为UTC的时间 + DWORD dwAbsTime; //绝对时标,历史原因,这里实际为OSD时间 + NET_VCA_RULE_INFO struRuleInfo; //事件规则信息 + NET_VCA_TARGET_INFO struTargetInfo; //报警目标信息 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + BYTE byPicType; // 0-触发抓拍图片 1-对比图片 + BYTE byRelAlarmPicNum; //关联通道报警图片数量 + BYTE bySmart;//IDS设备返回0(默认值),Smart Functiom Return 1 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + DWORD dwAlarmID; //报警ID,用以标识通道间关联产生的组合报警,0表示无效 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRelativeTimeFlag; //dwRelativeTime字段是否有效 0-无效, 1-有效,dwRelativeTime表示UTC时间 + BYTE byAppendInfoUploadEnabled; //附加信息上传使能 0-不上传 1-上传 + BYTE *pAppendInfo; //指向附加信息NET_VCA_APPEND_INFO的指针,byAppendInfoUploadEnabled为1时或者byTimeDiffFlag为1时有效 + BYTE *pImage; //指向图片的指针 +}NET_VCA_RULE_ALARM, *LPNET_VCA_RULE_ALARM; + +//异常行为检测附加信息 +typedef struct tagNET_VCA_APPEND_INFO +{ + DWORD dwSize; //结构长度 + DWORD dwAppendPicLen;//附加图片长度 + BYTE* pAppendPicBuff;//附加图片指针 + BYTE byAppendPicType;//附加图片类型:0-保留;1-可见光图片;2-热成像图片; + BYTE byUID[64];//设备报警UID + BYTE byApplicationScene;// 应用场景 0-保留 1-室内 + BYTE byRes1[2]; //保留 + DWORD dwTargetSpeed; //雷达检测到目标速度,单位:km/h + DWORD dwTargetDistance; //雷达检测到目标距离,单位:m/米 + BYTE byAlarmType;//报警类型 0-视频 1-雷达 + BYTE byRadarChannel; //雷达通道,从1开始累加 + BYTE byBrokenNetHttp; // 断网续传标志位,0-不重传数据,1-重传数据 + BYTE byAppendChannelType;//附加通道类型:0-保留;1-可见光通道;2-热成像通道; + DWORD dwAppendChannel; //附加通道通道号 + BYTE byRes[44]; //保留 +}NET_VCA_APPEND_INFO, *LPNET_VCA_APPEND_INFO; + + +//异常行为检测规则DSP信息叠加结构 +typedef struct tagNET_VCA_DRAW_MODE +{ + DWORD dwSize; + BYTE byDspAddTarget; //编码是否叠加目标 + BYTE byDspAddRule; //编码是否叠加规则 + BYTE byDspPicAddTarget; //抓图是否叠加目标 + BYTE byDspPicAddRule; //抓图是否叠加规则 + BYTE byRes[4]; +}NET_VCA_DRAW_MODE, *LPNET_VCA_DRAW_MODE; + +//物体类型 +typedef enum tagOBJECT_TYPE_ENUM +{ + ENUM_OBJECT_TYPE_COAT = 1 //上衣 +}OBJECT_TYPE_ENUM; + +//物体颜色条件结构体 +typedef struct tagNET_DVR_OBJECT_COLOR_COND +{ + DWORD dwChannel; //通道号 + DWORD dwObjType; //物体类型,参见OBJECT_TYPE_ENUM + BYTE byRes[64]; //保留 +}NET_DVR_OBJECT_COLOR_COND,*LPNET_DVR_OBJECT_COLOR_COND; + +//图片参数 +typedef struct tagNET_DVR_PIC +{ + BYTE byPicType; //图片类型,1-jpg + BYTE byRes1[3]; //保留 + DWORD dwPicWidth; //图片宽度 + DWORD dwPicHeight; //图片高度 + DWORD dwPicDataLen; //图片数据实际大小 + DWORD dwPicDataBuffLen; //图片数据缓冲区大小 + BYTE* byPicDataBuff; //图片数据缓冲区 + BYTE byRes2[40]; //保留 +}NET_DVR_PIC,*LPNET_DVR_PIC; + +//颜色联合体 +typedef union tagNET_DVR_OBJECT_COLOR_UNION +{ + NET_DVR_COLOR struColor; //颜色值 + NET_DVR_PIC struPicture; //图片 + BYTE byRes[64]; //保留 +}NET_DVR_OBJECT_COLOR_UNION,*LPNET_DVR_OBJECT_COLOR_UNION; + +//物体颜色参数结构体 +typedef struct tagNET_DVR_OBJECT_COLOR +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byColorMode; //取色方式,1-颜色值,2-图片 + BYTE byRes1[2]; //保留 + NET_DVR_OBJECT_COLOR_UNION uObjColor; //物体颜色联合体,取值依赖于取色方式 + BYTE byRes2[64]; //保留 +}NET_DVR_OBJECT_COLOR, *LPNET_DVR_OBJECT_COLOR; + +//区域类型 +typedef enum tagAREA_TYPE_ENUM +{ + ENUM_OVERLAP_REGION = 1,//共同区域 + ENUM_BED_LOCATION = 2 //床铺位置 +}AREA_TYPE_ENUM; + +//辅助区域 +typedef struct tagNET_DVR_AUXAREA +{ + DWORD dwAreaType; //区域类型,参见AREA_TYPE_ENUM + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes1[3]; //保留 + NET_VCA_POLYGON struPolygon; //区域 + BYTE byRes2[16]; //保留 +}NET_DVR_AUXAREA,*LPNET_DVR_AUXAREA; + +//辅助区域列表 +typedef struct tagNET_DVR_AUXAREA_LIST +{ + DWORD dwSize; // 结构体大小 + NET_DVR_AUXAREA struArea[MAX_AUXAREA_NUM]; //辅助区域 + BYTE byRes2[64]; // 保留 +}NET_DVR_AUXAREA_LIST,*LPNET_DVR_AUXAREA_LIST; + +//通道工作模式 +typedef enum tagCHAN_WORKMODE_ENUM +{ + ENUM_CHAN_WORKMODE_INDEPENDENT = 1, //独立模式 + ENUM_CHAN_WORKMODE_MASTER = 2, //主模式 + ENUM_CHAN_WORKMODE_SLAVE = 3 //从模式 +}CHAN_WORKMODE_ENUM; + +//通道工作模式参数结构体 +typedef struct tagNET_DVR_CHANNEL_WORKMODE +{ + DWORD dwSize; //结构体大小 + BYTE byWorkMode; //工作模式,参见CHAN_WORKMODE_ENUM + BYTE byRes[63]; //保留 +}NET_DVR_CHANNEL_WORKMODE,*LPNET_DVR_CHANNEL_WORKMODE; + +//设备通道参数结构体 +typedef struct tagNET_DVR_CHANNEL +{ + BYTE byAddress[MAX_DOMAIN_NAME]; //设备IP或域名 + WORD wDVRPort; //端口号 + BYTE byRes1[2]; //保留 + BYTE sUserName[NAME_LEN]; //主机用户名 + BYTE sPassword[PASSWD_LEN]; //主机密码 + DWORD dwChannel; //通道号 + BYTE byRes2[32]; //保留 +}NET_DVR_CHANNEL,*LPNET_DVR_CHANNEL; + +//从通道信息联合体 +typedef union tagNET_DVR_SLAVE_CHANNEL_UNION +{ + BYTE byRes[152]; //联合体大小 + DWORD dwLocalChannel; //本机通道 + NET_DVR_CHANNEL struRemoteChannel; //远程通道 +}NET_DVR_SLAVE_CHANNEL_UNION,*LPNET_DVR_SLAVE_CHANNEL_UNION; + +//从通道参数结构体 +typedef struct tagNET_DVR_SLAVE_CHANNEL_PARAM +{ + BYTE byChanType; //从通道类型,1-本机通道,2-远程通道 + BYTE byRes1[3]; //保留 + NET_DVR_SLAVE_CHANNEL_UNION uSlaveChannel; //从通道联合体,取值依赖于byChanType + BYTE byRes2[64]; //保留 +}NET_DVR_SLAVE_CHANNEL_PARAM,*LPNET_DVR_SLAVE_CHANNEL_PARAM; + + +//从通道参数配置结构体 +typedef struct tagNET_DVR_SLAVE_CHANNEL_CFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_SLAVE_CHANNEL_PARAM struChanParam[MAX_SLAVE_CHANNEL_NUM];//从通道参数 + BYTE byRes[64]; //保留 +}NET_DVR_SLAVE_CHANNEL_CFG,*LPNET_DVR_SLAVE_CHANNEL_CFG; + +//视频质量诊断检测事件 +typedef enum tagVQD_EVENT_ENUM +{ + ENUM_VQD_EVENT_BLUR = 1, //图像模糊 + ENUM_VQD_EVENT_LUMA = 2, //亮度异常 + ENUM_VQD_EVENT_CHROMA = 3, //图像偏色 + ENUM_VQD_EVENT_SNOW = 4, //雪花干扰 + ENUM_VQD_EVENT_STREAK = 5, //条纹干扰 + ENUM_VQD_EVENT_FREEZE = 6, //画面冻结 + ENUM_VQD_EVENT_SIGNAL_LOSS = 7, //信号丢失 + ENUM_VQD_EVENT_PTZ = 8, //云台失控 + ENUM_VQD_EVENT_SCNENE_CHANGE = 9, //场景突变 + ENUM_VQD_EVENT_VIDEO_ABNORMAL = 10, //视频异常 + ENUM_VQD_EVENT_VIDEO_BLOCK = 11, //视频遮挡 + ENUM_VQD_EVENT_CLARTY = 12, //清晰度异常 + ENUM_VQD_EVENT_JITTER = 13, //画面抖动 + ENUM_VQD_EVENT_FLOWERS = 14, //画屏 + ENUM_VQD_EVENT_NOISE = 15, //噪点 + ENUM_VQD_EVENT_GHOST = 16, //异常光斑 + ENUM_VQD_EVENT_PURPLE = 17, //紫边 + ENUM_VQD_EVENT_ICR = 18, // ICR检测异常 + ENUM_VQD_EVENT_PROTECTFILM = 19 //保护膜未撕 +}VQD_EVENT_ENUM; + +//视频质量诊断事件条件结构体 +typedef struct tagNET_DVR_VQD_EVENT_COND +{ + DWORD dwChannel; //通道号 + DWORD dwEventType; //检测事件类型,参见VQD_EVENT_ENUM + BYTE byRes[64]; //保留 +}NET_DVR_VQD_EVENT_COND,*LPNET_DVR_VQD_EVENT_COND; + +//视频质量诊断事件参数 +typedef struct tagNET_DVR_VQD_EVENT_PARAM +{ + BYTE byThreshold; //报警阈值,范围[0,100] + BYTE byTriggerMode; //1-持续触发,2-单次触发 + BYTE byUploadPic; //0-不上传图片,1-上传图片,无论是否上传图片,事后都可以从设备获取该事件所对应最新的一张报警图片,参见接口NET_DVR_StartDownload + BYTE byRes1; //保留 + DWORD dwTimeInterval; //持续触发报警时间间隔,范围[0,3600] 单位:秒 + BYTE byRes2[64]; //保留 +}NET_DVR_VQD_EVENT_PARAM,*LPNET_DVR_VQD_EVENT_PARAM; + +//视频质量诊断事件规则 +typedef struct tagNET_DVR_VQD_EVENT_RULE +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes1[3]; //保留 + NET_DVR_VQD_EVENT_PARAM struEventParam; //视频质量诊断事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//检测时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + BYTE byRes2[128]; //保留 +}NET_DVR_VQD_EVENT_RULE,*LPNET_DVR_VQD_EVENT_RULE; + +//基准场景参数 +typedef struct tagNET_DVR_BASELINE_SCENE +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //0-不启用,1-启用 + BYTE byRes[63]; //保留 +}NET_DVR_BASELINE_SCENE,*LPNET_DVR_BASELINE_SCENE; + +//基准场景操作参数结构体 +typedef struct tagNET_DVR_CONTROL_BASELINE_SCENE_PARAM +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCommand; //操作类型,1-此字段保留,暂不使用,2-更新基准场景 + BYTE byRes[127]; //保留 +}NET_DVR_CONTROL_BASELINE_SCENE_PARAM,*LPNET_DVR_CONTROL_BASELINE_SCENE_PARAM; + +//视频质量诊断报警结构体 +typedef struct tagNET_DVR_VQD_ALARM +{ + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwEventType; //事件类型,参考VQD_EVENT_ENUM + float fThreshold; //报警阈值[0.000,1.000] + DWORD dwPicDataLen; //图片长度,为0表示没有图片 + BYTE *pImage; //指向图片的指针 + BYTE byRes[128]; //保留 +}NET_DVR_VQD_ALARM,*LPNET_DVR_VQD_ALARM; + +//标定点子结构 +typedef struct tagNET_DVR_CB_POINT +{ + NET_VCA_POINT struPoint; //标定点,主摄像机(枪机) + NET_DVR_PTZPOS struPtzPos; //球机输入的PTZ坐标 + BYTE byRes[8]; +}NET_DVR_CB_POINT, LPNET_DVR_CB_POINT; + +//标定参数配置结构 +typedef struct tagNET_DVR_TRACK_CALIBRATION_PARAM +{ + BYTE byPointNum; //有效标定点个数 + BYTE byRes[3]; + NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //标定点组 +}NET_DVR_TRACK_CALIBRATION_PARAM, *LPNET_DVR_TRACK_CALIBRATION_PARAM; + +//球机配置结构 +typedef struct tagNET_DVR_TRACK_CFG +{ + DWORD dwSize; //结构长度 + BYTE byEnable; //标定使能 + BYTE byFollowChan; // 被控制的从通道 + BYTE byDomeCalibrate; //设置智能球机标定,1设置 0不设置 + BYTE byRes; // 保留字节 + NET_DVR_TRACK_CALIBRATION_PARAM struCalParam; //标定点组 +}NET_DVR_TRACK_CFG, *LPNET_DVR_TRACK_CFG ; + +//模式 +typedef enum _TRACK_MODE_ +{ + MANUAL_CTRL = 0, //手动 + ALARM_TRACK //报警触发 +}TRACK_MODE; + +//手动控制结构 +typedef struct tagNET_DVR_MANUAL_CTRL_INFO +{ + NET_VCA_POINT struCtrlPoint; + BYTE byRes[8]; +}NET_DVR_MANUAL_CTRL_INFO, *LPNET_DVR_MANUAL_CTRL_INFO ; + +//模式结构 +typedef struct tagNET_DVR_TRACK_MODE +{ + DWORD dwSize; //结构长度 + BYTE byTrackMode; //模式 + BYTE byRuleConfMode; //规则配置模式0-本地配置,1-远程配置 + BYTE byRes[2]; //保留,置0 + union + { + DWORD dwULen[4]; + NET_DVR_MANUAL_CTRL_INFO struManualCtrl;//手动结构 + }uModeParam; +}NET_DVR_TRACK_MODE,*LPNET_DVR_TRACK_MODE; + +typedef struct tagNET_DVR_ALARM_JPEG +{ + BYTE byPicProType; /*报警时图片处理方式 0-不处理 1-上传*/ + BYTE byRes[3]; //保留字节 + NET_DVR_JPEGPARA struPicParam; /*图片规格结构*/ +}NET_DVR_ALARM_JPEG, *LPNET_DVR_ALARM_JPEG; + +/**********************ipc/d5.3.0********************************/ +typedef struct tagNET_DVR_PHY_RATIO +{ + DWORD dwSize; + DWORD dwPhysicsRatio;//物理倍率坐标 + BYTE byRes[60]; +}NET_DVR_PHY_RATIO, *LPNET_DVR_PHY_RATIO; + +typedef struct tagNET_DVR_SLAVECAMERA_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byID;//主从 从摄像机ID编号[1,4] + BYTE byRes1[3]; + DWORD dwSceneID;// scene Id + BYTE byRes[56]; +}NET_DVR_SLAVECAMERA_COND, *LPNET_DVR_SLAVECAMERA_COND; + +typedef struct tagNET_DVR_SLAVECAMERA_CFG +{ + DWORD dwSize; + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 + // 控制unionServer是使用实际地址还是域名 + WORD wPort; /*端口*/ + BYTE byLoginStatus; /*从设备的登陆状态 0-logout,1-login*/ + union + { + struct + { + BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//服务器地址,域名 + BYTE byRes1[80]; + }struDomain; + struct + { + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 + } struAddrIP; + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 + BYTE szUserName[NAME_LEN/*32*/]; /*用户名*/ + BYTE szPassWord[PASSWD_LEN/*16*/]; /*密码*/ + BYTE byRes1[128]; +}NET_DVR_SLAVECAMERA_CFG, *LPNET_DVR_SLAVECAMERA_CFG; + +typedef struct tagNET_DVR_SLAVECAMERA_PARAM +{ + BYTE byLinkStatus ;//连接状态 0- 未连接,1-连接 + BYTE byRes[15]; +}NET_DVR_SLAVECAMERA_PARAM, *LPNET_DVR_SLAVECAMERA_PARAM; + +typedef struct tagNET_DVR_SLAVECAMERA_STATUS +{ + DWORD dwSize; + NET_DVR_SLAVECAMERA_PARAM struSlaveCamera[MAX_SLAVECAMERA_NUM/*8*/];//数组下标0表示从摄像机ID 1,依次类推 + BYTE byRes[64]; +}NET_DVR_SLAVECAMERA_STATUS, *LPNET_DVR_SLAVECAMERA_STATUS; + +typedef struct tagNET_PTZ_INFO +{ + float fPan; + float fTilt; + float fZoom; + DWORD dwFocus;// 聚焦参数,聚焦范围:归一化0-100000 + BYTE byRes[4]; +}NET_PTZ_INFO, *LPNET_PTZ_INFO; + +typedef struct tagNET_DVR_BV_CALIB_POSITION +{ + DWORD dwSize; //结构长度 + NET_PTZ_INFO struInitialPos; //初始坐标 + NET_PTZ_INFO struAdjustPos; //调整坐标 + BYTE byRes[300]; //保留 +}NET_DVR_BV_CALIB_POSITION, *LPNET_DVR_BV_CALIB_POSITION; + +typedef struct tagNET_DVR_HUMAN_CALIB_CFG +{ + DWORD dwSize; //结构长度 + NET_VCA_POINT struLeftPos; //人体左坐标点 + NET_VCA_POINT struRightPos; //人体右坐标点 + BYTE byRes[300]; //保留 +}NET_DVR_HUMAN_CALIB_CFG, *LPNET_DVR_HUMAN_CALIB_CFG; + +typedef struct tagNET_DVR_CALIB_PARAM +{ + NET_PTZ_INFO struPtzInfo; + NET_VCA_POINT struCalibCoordinates;//标定坐标 + int iHorValue;//双目标定 水平值 cm(手动模式下生效 双目相机配置) + int iVerValue;//双目标定 垂直值 cm(手动模式下生效 双目相机配置) + BYTE byRes[8]; +}NET_DVR_CALIB_PARAM, *LPNET_DVR_CALIB_PARAM; + +typedef struct tagNET_DVR_SLAVECAMERA_CALIB_CFG +{ + DWORD dwSize; + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 + BYTE byRes[3]; + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 + NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM/*6*/];//只在手动标定模式下生效 + BYTE byRes1[64]; +}NET_DVR_SLAVECAMERA_CALIB_CFG, *LPNET_DVR_SLAVECAMERA_CALIB_CFG; + +typedef struct tagNET_DVR_TRACKING +{ + DWORD dwSize; //结构长度 + BYTE byEnable; //使能 0-false,1-true + BYTE byMode; //模式 0-关闭,1-手动,2-自动 + WORD wTrackingTime;//时间:[0,60]s + NET_VCA_POLYGON struRegion;//手动目标区域范围 + BYTE byRes[64]; +}NET_DVR_TRACKING,*LPNET_DVR_TRACKING; + +typedef struct tagNET_DVR_SLAVECAMERA_CALIB_V50 +{ + DWORD dwSize; + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 + BYTE byRes[3]; + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 + NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM_EX/*20*/]; + BYTE byRes1[64]; +}NET_DVR_SLAVECAMERA_CALIB_V50, *LPNET_DVR_SLAVECAMERA_CALIB_V50; + +typedef struct tagNET_DVR_SLAVECAMERA_CALIB_V51 +{ + DWORD dwSize; + BYTE byCalibMode;//标定模式: 0-保留,1-自动标定, 2-手动标定 + BYTE byRes[3]; + //数组下标0表示从摄像机ID 1,依次类推 + //手动标定模式下支持配置(设置&&获取),自动模式下支持获取操作 + NET_DVR_CALIB_PARAM struCalibParam[MAX_CALIB_NUM_EX/*20*/]; + BYTE byRes1[512]; +}NET_DVR_SLAVECAMERA_CALIB_V51, *LPNET_DVR_SLAVECAMERA_CALIB_V51; + +//特殊功能抓图结果结构(鹰眼项目) +typedef struct tagNET_DVR_CAPTURE_PICTURE_RESULT +{ + DWORD dwSize;//结构体大小 + DWORD dwReturnPicSize;//返回的图片大小 + BYTE byRes[256]; +}NET_DVR_CAPTURE_PICTURE_RESULT, *LPNET_DVR_CAPTURE_PICTURE_RESULT; + +typedef struct tagNET_DVR_GOTOSCENE_COND +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwSceneID;//场景ID号 + BYTE byRes[512]; +}NET_DVR_GOTOSCENE_COND, *LPNET_DVR_GOTOSCENE_COND; + +typedef struct tagNET_DVR_TRACK_INITPOSTION +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byID;//主从 从摄像机ID编号[1,4] + BYTE byRes[127]; +}NET_DVR_TRACK_INITPOSTION, *LPNET_DVR_TRACK_INITPOSTION; + +typedef struct tagNET_DVR_MANUAL_TRACKRATIO +{ + DWORD dwSize; + BYTE byCoefficient;//倍率系数[1,60] + BYTE byRes[127]; +}NET_DVR_MANUAL_TRACKRATIO, *LPNET_DVR_MANUAL_TRACKRATIO; + +/**********************ipc/d5.3.0********************************/ + +//分析仪异常行为检测规则结构 +//警戒规则结构 +typedef struct tagNET_IVMS_ONE_RULE_ +{ + BYTE byActive; /* 是否激活规则,0-否, 非0-是 */ + BYTE byRes1[7]; //保留,设置为0字段 + BYTE byRuleName[NAME_LEN]; //规则名称 + VCA_EVENT_TYPE dwEventType; //异常行为检测事件类型 + NET_VCA_EVENT_UNION uEventParam;//异常行为检测事件参数 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + BYTE byRes2[68]; /*保留,设置为0*/ +}NET_IVMS_ONE_RULE, *LPNET_IVMS_ONE_RULE; + +// 分析仪规则结构 +typedef struct tagNET_IVMS_RULECFG +{ + NET_IVMS_ONE_RULE struRule[MAX_RULE_NUM]; //规则数组 +}NET_IVMS_RULECFG, *LPNET_IVMS_RULECFG; + +// IVMS异常行为检测配置结构 +typedef struct tagNET_IVMS_BEHAVIORCFG +{ + DWORD dwSize; + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes[3]; + NET_DVR_JPEGPARA struPicParam; //图片规格结构 + NET_IVMS_RULECFG struRuleCfg[MAX_DAYS][MAX_TIMESEGMENT];//每个时间段对应规则 +} NET_IVMS_BEHAVIORCFG, *LPNET_IVMS_BEHAVIORCFG; + +//智能分析仪取流计划子结构 +typedef struct tagNET_IVMS_DEVSCHED +{ + NET_DVR_SCHEDTIME struTime; //时间参数 + NET_DVR_PU_STREAM_CFG struPUStream; //前端取流参数 +}NET_IVMS_DEVSCHED, *LPNET_IVMS_DEVSCHED; + +//智能分析仪参数配置结构 +typedef struct tagNET_IVMS_STREAMCFG +{ + DWORD dwSize; + NET_IVMS_DEVSCHED struDevSched[MAX_DAYS][MAX_TIMESEGMENT];//按时间段配置前端取流以及规则信息 +} NET_IVMS_STREAMCFG, *LPNET_IVMS_STREAMCFG; + +//屏蔽区域 +typedef struct tagNET_VCA_MASK_REGION +{ + BYTE byEnable; //是否激活, 0-否,非0-是 + BYTE byRes[3]; //保留,置0 + NET_VCA_POLYGON struPolygon; //屏蔽多边形 +}NET_VCA_MASK_REGION, * LPNET_VCA_MASK_REGION; + +//屏蔽区域链表结构 +typedef struct tagNET_VCA_MASK_REGION_LIST +{ + DWORD dwSize; //结构长度 + BYTE byRes[4]; //保留,置0 + NET_VCA_MASK_REGION struMask[MAX_MASK_REGION_NUM]; //屏蔽区域数组 +}NET_VCA_MASK_REGION_LIST, *LPNET_VCA_MASK_REGION_LIST; + + +//ATM进入区域参数 +typedef struct tagNET_VCA_ENTER_REGION//防止干扰ATM检测 +{ + DWORD dwSize; + BYTE byEnable; //是否激活,0-否,非0-是 + BYTE byRes1[3]; + NET_VCA_POLYGON struPolygon; //进入区域 + BYTE byRes2[16]; +}NET_VCA_ENTER_REGION, * LPNET_VCA_ENTER_REGION; + +//IVMS屏蔽区域链表 +typedef struct tagNET_IVMS_MASK_REGION_LIST +{ + DWORD dwSize; //结构长度 + NET_VCA_MASK_REGION_LIST struList[MAX_DAYS][ MAX_TIMESEGMENT]; +}NET_IVMS_MASK_REGION_LIST, *LPNET_IVMS_MASK_REGION_LIST; + +//IVMS的ATM进入区域参数 +typedef struct tagNET_IVMS_ENTER_REGION +{ + DWORD dwSize; + NET_VCA_ENTER_REGION struEnter[MAX_DAYS][ MAX_TIMESEGMENT]; //进入区域 +}NET_IVMS_ENTER_REGION, *LPNET_IVMS_ENTER_REGION; + +// ivms 报警图片上传结构 +typedef struct tagNET_IVMS_ALARM_JPEG +{ + BYTE byPicProType; + BYTE byRes[3]; + NET_DVR_JPEGPARA struPicParam; +}NET_IVMS_ALARM_JPEG, *LPNET_IVMS_ALARM_JPEG; + +// IVMS 后检索配置 +typedef struct tagNET_IVMS_SEARCHCFG +{ + DWORD dwSize; + NET_DVR_MATRIX_DEC_REMOTE_PLAY struRemotePlay;// 远程回放 + NET_IVMS_ALARM_JPEG struAlarmJpeg; // 报警上传图片配置 + NET_IVMS_RULECFG struRuleCfg; //IVMS 行为规则配置 +}NET_IVMS_SEARCHCFG, *LPNET_IVMS_SEARCHCFG; + +//标定参数结构体 +typedef struct tagNET_DVR_TRACK_CALIBRATION_PARAM_V41 +{ + BYTE byPointNum; //有效标定点个数 + BYTE byRes[3]; //保留 + NET_DVR_CB_POINT struCBPoint[MAX_CALIB_PT]; //标定点组 + NET_DVR_PTZPOS struHorizonPtzPos; //球机水平线PTZ坐标 + BYTE byRes2[256]; //保留 +}NET_DVR_TRACK_CALIBRATION_PARAM_V41, *LPNET_DVR_TRACK_CALIBRATION_PARAM_V41; + +//设备配置参数 +typedef struct tagNET_DVR_TRACK_DEV_PARAM_ +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //启用此设备, 0-不启用, 1 -启用 + BYTE byTransMode; //通讯方式,0-网络SDK,1-485串口 + BYTE byRes1[2]; //保留 + NET_DVR_CHANNEL struTrackDevChan; //联动设备参数 + NET_DVR_TRACK_CALIBRATION_PARAM_V41 struCalParam; //设备标定参数 + BYTE byRes2[256]; //保留 +}NET_DVR_TRACK_DEV_PARAM, *LPNET_DVR_TRACK_DEV_PARAM; +/************************************end******************************************/ +//NAS认证配置 +typedef struct tagNET_DVR_IDENTIFICATION_PARAM +{ + BYTE sUserName[NAME_LEN]; /* 用户名 32*/ + BYTE sPassword[PASSWD_LEN]; /* 密码 16*/ + BYTE byRes1[4]; //保留 +}NET_DVR_IDENTIFICATION_PARAM, *LPNET_DVR_IDENTIFICATION_PARAM; + +typedef union tagNET_DVR_MOUNT_PARAM_UNION +{ + BYTE uLen[52]; //联合体结构大小 + NET_DVR_IDENTIFICATION_PARAM struIdentificationParam;//(SMB/CIFS时生效) +} NET_DVR_MOUNT_PARAM_UNION, *LPNET_DVR_MOUNT_PARAM_UNION; + +typedef struct tagNET_DVR_NAS_MOUNT_PARAM +{ + BYTE byMountType; //0~保留,1~NFS, 2~ SMB/CIFS + BYTE byRes[3]; + NET_DVR_MOUNT_PARAM_UNION uMountParam; +}NET_DVR_NAS_MOUNT_PARAM, *LPNET_DVR_NAS_MOUNT_PARAM; + +typedef union tagNET_DVR_MOUNTMETHOD_PARAM_UNION +{ + BYTE uLen[56]; //联合体结构大小 + NET_DVR_NAS_MOUNT_PARAM struNasMountParam;//NAS挂载方式 (byNetDiskType为NFS(NAS)时生效) +}NET_DVR_MOUNTMETHOD_PARAM_UNION, *LPNET_DVR_MOUNTMETHOD_PARAM_UNION; + +//网络硬盘结构配置 +typedef struct tagNET_DVR_SINGLE_NET_DISK_INFO +{ + BYTE byNetDiskType; //网络硬盘类型, 0-NFS(NAS),1-iSCSI + BYTE byRes1[3]; //保留 + NET_DVR_IPADDR struNetDiskAddr; //网络硬盘地址 + BYTE sDirectory[PATHNAME_LEN]; // PATHNAME_LEN = 128 + WORD wPort; //iscsi有端口,现在为默认 + BYTE byRes2[2]; + NET_DVR_MOUNTMETHOD_PARAM_UNION uMountMethodParam; + BYTE byRes3[8]; //保留 +}NET_DVR_SINGLE_NET_DISK_INFO, *LPNET_DVR_SINGLE_NET_DISK_INFO; + +#define MAX_NET_DISK 16//最大网络硬盘个数 + +typedef struct tagNET_DVR_NET_DISKCFG +{ + DWORD dwSize; + NET_DVR_SINGLE_NET_DISK_INFO struNetDiskParam[MAX_NET_DISK]; +}NET_DVR_NET_DISKCFG, *LPNET_DVR_NET_DISKCFG; + +typedef struct tagNET_DVR_SINGLE_NET_DISK_INFO_V40 +{ + BYTE byNetDiskType; //网络硬盘类型, 0-NFS(NAS),1-iSCSI + BYTE byRes1[3]; //保留 + BYTE sDirectory[PATHNAME_LEN]; // PATHNAME_LEN = 128 + BYTE byDevAddr[MAX_DOMAIN_NAME]; /*域名 64*/ + WORD wPort; //iscsi有端口,现在为默认 + BYTE byRes2[2]; + NET_DVR_MOUNTMETHOD_PARAM_UNION uMountMethodParam; + BYTE byRes4[80]; +}NET_DVR_SINGLE_NET_DISK_INFO_V40, *LPNET_DVR_SINGLE_NET_DISK_INFO_V40; + +typedef struct tagNET_DVR_NET_DISKCFG_V40 +{ + DWORD dwSize; + NET_DVR_SINGLE_NET_DISK_INFO_V40 struNetDiskParam[MAX_NET_DISK]; +}NET_DVR_NET_DISKCFG_V40, *LPNET_DVR_NET_DISKCFG_V40; +//事件类型 +//主类型 +typedef enum _MAIN_EVENT_TYPE_ +{ + EVENT_MOT_DET = 0, //移动侦测 + EVENT_ALARM_IN = 1, //报警输入 + EVENT_VCA_BEHAVIOR = 2, // 异常行为检测 + EVENT_INQUEST = 3, //审讯事件 + EVENT_VCA_DETECTION = 4, //智能侦测 + EVENT_POS = 5, + EVENT_TRIAL_CASE = 6,//庭审案件信息 + EVENT_ACS_CASE = 7, //门禁事件 + EVENT_IOT_CASE = 8, //非视频联动事件—本类事件均为非视频设备联动视频设备产生的事件,不包含非视频设备本身的事件 + EVENT_STREAM_INFO = 100 //流ID信息 +}MAIN_EVENT_TYPE; + +#define INQUEST_START_INFO 0x1001 /*讯问开始信息*/ +#define INQUEST_STOP_INFO 0x1002 /*讯问停止信息*/ +#define INQUEST_TAG_INFO 0x1003 /*重点标记信息*/ +#define INQUEST_SEGMENT_INFO 0x1004 /*审讯片断状态信息*/ +#define INQUEST_CASE_INFO 0x1005 // 案件信息类型 + +typedef enum _VCA_DETECTION_MINOR_TYPE_ +{ + EVENT_VCA_TRAVERSE_PLANE = 1, //越警侦测 + EVENT_FIELD_DETECTION, //区域入侵侦测 + EVENT_AUDIO_INPUT_ALARM, //音频输入异常 + EVENT_SOUND_INTENSITY_ALARM, //声强突变侦测 + EVENT_FACE_DETECTION, //人脸侦测 + EVENT_VIRTUAL_FOCUS_ALARM, //虚焦侦测 + EVENT_SCENE_CHANGE_ALARM, //场景变更侦测 + EVENT_PIR_ALARM, //PIR报警 + EVENT_ENTER_REGION, //进入区域 + EVENT_EXIT_REGION, //目标离开区域 + EVENT_LOITERING, //徘徊 + EVENT_GROUPDETECTION, //区域内人员聚集,支持区域规则 + EVENT_RAPIDMOVE, //快速移动 + EVENT_PARK, //停车 + EVENT_UNATTENDED_BAGGAGE, //物品遗留 + EVENT_ATTENDEDBAGGAGE, //物品拿取 + EVENT_VEHICLE_DETECTION, //车辆检测 + EVENT_ALL = 0xffffffff //表示全部 +}VCA_DETECTION_MINOR_TYPE; + + + +//异常行为检测主类型对应的次类型, 0xffff表示全部 +typedef enum _BEHAVIOR_MINOR_TYPE_ +{ + EVENT_TRAVERSE_PLANE = 0, // 穿越警戒面 + EVENT_ENTER_AREA, //目标进入区域,支持区域规则 + EVENT_EXIT_AREA, //目标离开区域,支持区域规则 + EVENT_INTRUSION, // 周界入侵,支持区域规则 + EVENT_LOITER, //徘徊,支持区域规则 + EVENT_LEFT_TAKE, //物品遗留拿取,支持区域规则 + EVENT_PARKING, //停车,支持区域规则 + EVENT_RUN, //快速移动,支持区域规则 + EVENT_HIGH_DENSITY, //区域内人员聚集,支持区域规则 + EVENT_STICK_UP, //贴纸条,支持区域规则 + EVENT_INSTALL_SCANNER, //安装读卡器,支持区域规则 + EVENT_OPERATE_OVER_TIME, // 操作超时 + EVENT_FACE_DETECT, // 异常人脸 + EVENT_LEFT, // 物品遗留 + EVENT_TAKE, // 物品拿取 + EVENT_LEAVE_POSITION, //离岗事件 + EVENT_TRAIL_INFO = 16, //尾随 + EVENT_HUMAN_ENTER = 18, //人员进入 + EVENT_FALL_DOWN_INFO = 19, //倒地 + EVENT_OBJECT_PASTE =20, // 异物粘贴区域 + EVENT_FACE_CAPTURE_INFO = 21, //正常人脸 + EVENT_MULTI_FACES_INFO = 22, //多张人脸 + EVENT_AUDIO_ABNORMAL_INFO = 23, //声强突变 + EVENT_SUNGLASSES_FACE_INFO = 25, //戴墨镜人脸 + EVENT_CALLING_FACE_INFO = 26, //打电话人脸 + EVENT_VIOLENT_MOTION = 27, //剧烈运动 + EVENT_SAFETY_HELMET = 28, //安全帽检测 + EVENT_PEOPLE_NUM_CHANGE = 29, //人数变化 + EVENT_GET_UP = 30, //起身 + EVENT_ADV_REACH_HEIGHT = 31, //折线攀高 + EVENT_STOOD_UP = 32, //起立 + EVENT_PERSON_DENSITY = 33, //人员密度(人数预警) + EVENT_MANUAL_ALARM = 34, //手动报警 + EVENT_VIOLATION_HIGH_SPEED = 35, //超速 + EVENT_GSENSOR = 36, // G-Sensor事件(急加速、急减速、急左转弯、急右转弯、车辆翻车、车辆碰撞) + EVENT_SENSOR_IN = 37, // Sensor-In行为(刹车、左转、右转、倒车) + EVENT_VCA_DBD = 38, //司机驾驶行为 + EVENT_VCA_ABS = 39, //高级辅助驾驶 + EVENT_TOILET_TARRY = 40 //如厕超时 +}BEHAVIOR_MINOR_TYPE; + +//主类型6对应的次类型 +typedef enum _TRIAL_CASE_MINOR_TYPE_ +{ + TRIAL_START_INFO = 0x1001, // 庭审开始事件 + TRIAL_STOP_INFO = 0x1002, //庭审结束事件 + TRIAL_TAG_INFO = 0x1003, //庭审重点标注事件 + TRIAL_SEGMENT_INFO = 0x1004, // 庭审片段状态信息 + TRIAL_JUDGE_CASE_INFO=0x1005 //庭审案件信息 +}TRIAL_CASE_MINOR_TYPE; + +// 主类型100,对应的小类型 +typedef enum _STREAM_INFO_MINOR_TYPE_ +{ + EVENT_STREAM_ID = 0, // 流ID + EVENT_TIMING = 1, // 定时录像 + EVENT_MOTION_DETECT = 2, // 移动侦测 + EVENT_ALARM = 3, // 报警录像 + EVENT_ALARM_OR_MOTION_DETECT = 4, // 报警或移动侦测 + EVENT_ALARM_AND_MOTION_DETECT = 5, // 报警和移动侦测 + EVENT_COMMAND_TRIGGER = 6, // 命令触发 + EVENT_MANNUAL = 7, // 手动录像 + EVENT_BACKUP_VOLUME = 8, // 存档卷录像 + STREAM_EVENT_SEMAPHORE, //信号量 + STREAM_EVENT_HIDE, //遮挡 + STREAM_EVENT_INVERSE, //逆行 + STREAM_EVENT_VIDEO_LOST, //视频丢失 + STREAM_EVENT_WIRELESS_ALARM, //无线报警 + STREAM_EVENT_PIR_ALARM, //PIR报警 + STREAM_EVENT_CALLHELP_ALARM, //呼救报警 + + STREAM_EVENT_FACESNAP, //人脸抓拍 + STREAM_EVENT_FACE_DETECTION, //人脸侦测 + STREAM_EVENT_ITS_PLATE, //车辆检测 + STREAM_EVENT_PDC, //客流量统计 + STREAM_EVENT_SCENECHANGE_DETECTION, //场景变更 + STREAM_EVENT_DEFOCUS_DETECTION, //虚焦侦测 + STREAM_EVENT_AUDIOEXCEPTION, //音频异常 + + //以下为异常行为检测(COMM_ALARM_RULE)的子类型,具体见VCA_EVENT_TYPE + VCA_EVENT_TRAVERSE_PLANE, //穿越警戒面 + VCA_EVENT_INTRUSION, //周界入侵 + VCA_EVENT_ENTER_AREA, //进入区域 + VCA_EVENT_EXIT_AREA, //离开区域 + VCA_EVENT_LOITER, //徘徊侦测 + VCA_EVENT_HIGH_DENSITY, //人员聚集 + VCA_EVENT_RUN, //快速移动 + VCA_EVENT_PARKING, //非法停车 + VCA_EVENT_LEFT, //物品遗留 + VCA_EVENT_TAKE, //物品拿取 +}STREAM_INFO_MINOR_TYPE; + +// typedef enum tagITS_MINOR_TYPE +// { +// ITS_EVENT_CONGESTION = 0, // 拥堵 +// ITS_EVENT_PARKING, // 停车 +// ITS_EVENT_INVERSE, // 逆行 +// ITS_EVENT_PEDESTRIAN, // 行人 +// ITS_EVENT_DEBRIS // 遗留物,抛洒物碎片 +// }ITS_MINOR_TYPE; + + +#define SEARCH_EVENT_INFO_LEN 300 //事件信息长度 +#define CASE_NO_LEN 64 +#define CASE_NAME_LEN 128 +#define LITIGANT_LEN 32 +#define CHIEF_JUDGE_LEN 32 +#define SEARCH_CASE_NO_LEN 56 +#define SEARCH_CASE_NAME_LEN 100 +#define SEARCH_LITIGANT_LEN 32 +#define SEARCH_CHIEF_JUDGE_LEN 32 +#define CASE_NO_RET_LEN 52 +#define CASE_NAME_RET_LEN 64 +#define LITIGANT_RET_LEN 24 +#define CHIEF_JUDGE_RET_LEN 24 +#define NET_SDK_CASETYPE_LEN 32 +//事件搜索条件 +typedef struct tagNET_DVR_SEARCH_EVENT_PARAM +{ + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 + NET_DVR_TIME struEndTime; // + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byValue; //0-按位表示,1-按值表示 + BYTE byRes[130]; // 保留 + union + { + BYTE byLen[SEARCH_EVENT_INFO_LEN]; + struct//报警输入 + { + BYTE byAlarmInNo[MAX_ALARMIN_V30]; //报警输入号,byAlarmInNo[0]若置1则表示查找由报警输入1触发的事件 + BYTE byRes[SEARCH_EVENT_INFO_LEN - MAX_ALARMIN_V30]; + }struAlarmParam; + + struct//报警输入--按值 + { + WORD wAlarmInNo[128]; /*报警输入号,按值表示,采用紧凑型排列*/ + BYTE byRes[44]; //保留 + }struAlarmParamByValue; + + struct//移动侦测 + { + BYTE byMotDetChanNo[MAX_CHANNUM_V30];//移动侦测通道,byMotDetChanNo[0]若置1则表示查找由通道1发生移动侦测触发的事件 + BYTE byRes[SEARCH_EVENT_INFO_LEN - MAX_CHANNUM_V30]; + }struMotionParam; + + struct//移动侦测--按值 + { + WORD wMotDetChanNo[64]; /* 移动侦测通道,按值表示 ,采用紧凑型排列*/ + BYTE byRes[172]; /*保留*/ + }struMotionParamByValue; + + struct//异常行为检测 + { + BYTE byChanNo[MAX_CHANNUM_V30]; //触发事件的通道 + BYTE byRuleID; //规则ID,0xff表示全部 + BYTE byRes1[43]; //保留 + }struVcaParam; + + struct //异常行为检测--按值方式查找 + { + WORD wChanNo[64]; //异常行为检测对应的通道,按值表示,采用紧凑型排列 + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byRes[171]; /*保留*/ + }struVcaParamByValue; + + struct//审讯事件搜索条件 + { + BYTE byRoomIndex; //审讯室编号,按值表示,从1开始 + BYTE byRes1[3]; + BYTE sInquestInfo[INQUEST_CASE_LEN]; + BYTE byRes2[232]; //保留 + } struInquestParam; + struct //智能侦测查找条件 + { + BYTE byChan [256];//触发智能侦测的通道号,按数组下标表示,byChan[0]若置1则表示查找由通道1发生移动侦测触发的事件 + }struVCADetectByBit; + + struct//智能侦测查找条件 ,通道号按值表示 + { + DWORD dwChanNo[MAX_CHANNUM_V30-1];// 触发通道号,按值表示,0xffffffff无效,且后续数据也表示无效值 + BYTE byAll;//0-表示不是全部,1-表示全部。 + BYTE byres[3]; + }struVCADetectByValue; + struct + { + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 + BYTE byRes[223]; + }struStreamIDParam; + struct + { + BYTE byCaseNo[SEARCH_CASE_NO_LEN]; //案件编号 + BYTE byCaseName[SEARCH_CASE_NAME_LEN]; //案件名称; + BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //当事人1; + BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //当事人2; + BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN];//审判长 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 + BYTE byRes[47]; + }struTrialParam; + }uSeniorParam; +}NET_DVR_SEARCH_EVENT_PARAM, *LPNET_DVR_SEARCH_EVENT_PARAM; + +#define MAX_POS_KEYWORDS_NUM 3 //支持关键字查找条数 +#define MAX_POS_KEYWORD_LEN 128 //每条关键字长度 +#define SEARCH_EVENT_INFO_LEN_V40 800 + +//事件搜索条件 +typedef struct tagNET_DVR_SEARCH_EVENT_PARAM_V40 +{ + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 5-pos录像 7-门禁事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 + NET_DVR_TIME struEndTime; // + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byQuickSearch; // 是否启用快速查询,0-不启用,1-启用(快速查询不会返回文件大小,仅对设备数据库进行查询,避免频繁唤醒硬盘) + BYTE byRes[130]; // 保留 + union + { + BYTE byLen[SEARCH_EVENT_INFO_LEN_V40/*800*/]; + struct//报警输入 + { + /*报警输入号,按值表示,采用紧凑型排列,0xffff表示后续无效*/ + WORD wAlarmInNo[128]; + BYTE byRes[544]; //保留 + }struAlarmParam; + + struct//移动侦测 + { + /* 移动侦测通道,按值表示 ,采用紧凑型排列,0xffff表示后续无效*/ + WORD wMotDetChanNo[MAX_CHANNUM_V30]; + BYTE byRes[672]; /*保留*/ + }struMotionParam; + + struct //异常行为检测 + { + //异常行为检测对应的通道,按值表示,采用紧凑型排列,0xffff表示后续无效 + WORD wChanNo[MAX_CHANNUM_V30]; + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byDriverBehaviortType; //司机驾驶行为类型:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜 + BYTE byADASType; //高级辅助驾驶类型:0-保留、1-前向碰撞、2-车道偏离、3-盲区检测、4-车距检测、5-行人防撞、6-急加速、7-急减速、8-急左转弯、9-急右转弯、10-车辆翻车、11-未礼让行人 + BYTE byGSensorType; // G-Sensor事件:0-保留、1-急加速、2-急减速、3-急左转弯、4-急右转弯、5-车辆翻车、6-车辆碰撞 + BYTE bySensorInType; // Sensor-In行为:0-保留、1-刹车、2-左转、3-右转、4-倒车 + BYTE byRes[667]; /*保留*/ + }struVcaParam; + + struct//审讯事件搜索条件 + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byRes[799]; //保留 + } struInquestParam; + + struct//智能侦测查找条件 ,通道号按值表示 + { + BYTE byAll; //查找全部通道,0-否,此时dwChanNo参数有效, + //1-查找全部通道,此时dwChanNo参数无效。 + BYTE byRes1[3]; + WORD wChanNo[MAX_CHANNUM_V30];// 触发通道号,按值表示,0xffff无效,且后续数据也表示无效值 + BYTE byRes[668]; + }struVCADetect; + + struct + { + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 + BYTE byRes1[3]; + BYTE byArchiveLabel[64]; //存档标签,CVR使用 + BYTE byRes[656]; + }struStreamIDParam; + + struct //pos录像 + { + WORD wChannel[MAX_CHANNUM_V30]; //通道,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE byRes1; //保留 + char sKeyWord[MAX_POS_KEYWORDS_NUM][MAX_POS_KEYWORD_LEN]; + //关键字查找时的条件 + BYTE byRes[284]; //保留 + }struPosAlarm; + + struct + { + BYTE byCaseNo[SEARCH_CASE_NO_LEN]; //案件编号 + BYTE byCaseName[SEARCH_CASE_NAME_LEN]; //案件名称 + BYTE byLitigant1[SEARCH_LITIGANT_LEN]; //当事人1 + BYTE byLitigant2[SEARCH_LITIGANT_LEN]; //当事人2 + BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN]; //审判长 + BYTE byCaseType; + BYTE byRes[47]; + }struTrialParam; + + struct //门禁事件搜索条件 + { + DWORD dwMajor; //报警主类型(与事件上传主类型一致,0代表全部) + DWORD dwMinor; //报警次类型(与事件上传主类型一致,0代表全部) + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 + BYTE byRes[722]; + }struACSAlarm; + }uSeniorParam; +}NET_DVR_SEARCH_EVENT_PARAM_V40, *LPNET_DVR_SEARCH_EVENT_PARAM_V40; + +//事件搜索条件 +typedef struct tagNET_DVR_SEARCH_EVENT_PARAM_V50 +{ + WORD wMajorType; //0-移动侦测,1-报警输入, 2-智能事件 5-pos录像 7-门禁事件, 8-非视频联动事件 + WORD wMinorType; //搜索次类型- 根据主类型变化,0xffff表示全部 + NET_DVR_TIME_SEARCH_COND struStartTime; //搜索的开始时间,停止时间: 同时为(0, 0) 表示从最早的时间开始,到最后,最前面的4000个事件 + NET_DVR_TIME_SEARCH_COND struEndTime; //搜索的结束时间 + BYTE byLockType; // 0xff-全部,0-未锁,1-锁定 + BYTE byQuickSearch; // 是否启用快速查询,0-不启用,1-启用(快速查询不会返回文件大小,仅对设备数据库进行查询,避免频繁唤醒硬盘) + BYTE byRes[254]; // 保留 + union + { + BYTE byLen[SEARCH_EVENT_INFO_LEN_V40/*800*/]; + struct//报警输入 + { + /*报警输入号,按值表示,采用紧凑型排列,0xffff表示后续无效*/ + WORD wAlarmInNo[128]; + BYTE byRes[544]; //保留 + }struAlarmParam; + + struct//移动侦测 + { + /* 移动侦测通道,按值表示 ,采用紧凑型排列,0xffff表示后续无效*/ + WORD wMotDetChanNo[MAX_CHANNUM_V30]; + BYTE byRes[672]; /*保留*/ + }struMotionParam; + + struct //异常行为检测 + { + //异常行为检测对应的通道,按值表示,采用紧凑型排列,0xffff表示后续无效 + WORD wChanNo[MAX_CHANNUM_V30]; + BYTE byRuleID; //异常行为检测类型,规则0xff表示全部,从0开始 + BYTE byDriverBehaviortType; //司机驾驶行为类型:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜 + BYTE byADASType; //高级辅助驾驶类型:0-保留、1-前向碰撞、2-车道偏离、3-盲区检测、4-车距检测、5-行人防撞、6-急加速、7-急减速、8-急左转弯、9-急右转弯、10-车辆翻车、11-未礼让行人 + BYTE byGSensorType; // G-Sensor事件:0-保留、1-急加速、2-急减速、3-急左转弯、4-急右转弯、5-车辆翻车、6-车辆碰撞 + BYTE bySensorInType; // Sensor-In行为:0-保留、1-刹车、2-左转、3-右转、4-倒车 + BYTE byRes[667]; /*保留*/ + }struVcaParam; + + struct//审讯事件搜索条件 + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byRes[799]; //保留 + } struInquestParam; + + struct//智能侦测查找条件 ,通道号按值表示 + { + BYTE byAll; //查找全部通道,0-否,此时dwChanNo参数有效, + //1-查找全部通道,此时dwChanNo参数无效。 + BYTE byRes1[3]; + WORD wChanNo[MAX_CHANNUM_V30];// 触发通道号,按值表示,0xffff无效,且后续数据也表示无效值 + BYTE byRes[668]; + }struVCADetect; + + struct + { + NET_DVR_STREAM_INFO struIDInfo; // 流id信息,72字节长 + DWORD dwCmdType; // 外部触发类型,NVR接入云存储使用 + BYTE byBackupVolumeNum; //存档卷号,CVR使用 + BYTE byRes1[3]; + BYTE byArchiveLabel[64]; //存档标签,CVR使用 + BYTE byRes[656]; + }struStreamIDParam; + + struct //pos录像 + { + WORD wChannel[MAX_CHANNUM_V30]; //通道,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE byRes1; //保留 + char sKeyWord[MAX_POS_KEYWORDS_NUM][MAX_POS_KEYWORD_LEN]; + //关键字查找时的条件 + BYTE byRes[284]; //保留 + }struPosAlarm; + + struct + { + BYTE byCaseNo[SEARCH_CASE_NO_LEN]; + BYTE byCaseName[SEARCH_CASE_NAME_LEN]; + BYTE byLitigant1[SEARCH_LITIGANT_LEN]; + BYTE byLitigant2[SEARCH_LITIGANT_LEN]; + BYTE byChiefJudge[SEARCH_CHIEF_JUDGE_LEN]; + BYTE byCaseType; + BYTE byRes[547]; + }struTrialParam; + + struct //门禁事件搜索条件 + { + DWORD dwMajor; //报警主类型(与事件上传主类型一致,0代表全部) + DWORD dwMinor; //报警次类型(与事件上传主类型一致,0代表全部) + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 + BYTE byRes[722]; + }struACSAlarm; + struct //非视频联动事件搜索条件 + { + WORD wDeviceType; //设备类型,0-私有门禁主机,1-私有可视对讲设备, 2-私有报警主机(预留) 3-GJD报警主机 4-Luminite报警主机, 5-OPTEX报警主机,6-cameraDetector模拟相机传感器设备 + WORD wEventType; //搜索次类型- 根据主类型变化,0xffff表示全部 + WORD wChannel[MAX_CHANNUM_V30/*64*/]; //通道号,按值表示,紧凑型排列,遇到0xffff时表示数组后续值无效 + BYTE byAllChan; //是否查找全部通道,0-否,此时wChannel有效,1-全部通道,此时wChannel无效 + BYTE byCaseSensitive; //0-不区分大小写, 1-区分大小写 + BYTE byCombinateMode; //关键字组合方式,0-或,1-与 + BYTE bySearchType; //搜索方式:0-按视频源搜索(此时通道号为视频通道号) + char sKeyWord[MAX_POS_KEYWORDS_NUM/*3*/][MAX_POS_KEYWORD_LEN/*128*/];//关键字查找时的条件 + WORD wZoneNo; //防区号,仅当设备类型为私有报警主机,次类型为防区(wEventType为1)时有效 + BYTE byRes[278]; //保留 + }struIOTAlarm; + }uSeniorParam; +}NET_DVR_SEARCH_EVENT_PARAM_V50, *LPNET_DVR_SEARCH_EVENT_PARAM_V50; + + +//查找返回结果 +typedef struct tagNET_DVR_SEARCH_EVENT_RET +{ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME struStartTime; //事件开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 + BYTE byChan[MAX_CHANNUM_V30]; + BYTE byChanEx[32]; //关联通道,按位表示,使用该字段后byChan可以不使用 + BYTE byRes[4]; + union + { + struct//报警输入结果 + { + DWORD dwAlarmInNo; //报警输入号 + BYTE byRes[SEARCH_EVENT_INFO_LEN]; + }struAlarmRet; + struct//移动侦测结果 + { + DWORD dwMotDetNo; //移动侦测通道 + BYTE byRes[SEARCH_EVENT_INFO_LEN]; + }struMotionRet; + struct//异常行为检测结果 + { + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 + }struVcaRet; + struct//审讯事件 + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[288]; //保留 + }struInquestRet; + struct //流id录像查询结果 + { + DWORD dwRecordType; /*录像类型 0-定时录像,1-移动侦测,2-报警触发,3-报警|移动侦测, 4-报警&移动侦测,5-命令触发,6-手动录像,7-震动报警,8-环境触发报警, + 9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13- PIR|无线报警|呼救报, 14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常, + 18-场景变更侦测, 19-全部简单智能(越界侦测|区域入侵|进入区域|离开区域|人脸识别), 20-信号量,21-回传、22-回迁录像,23-遮挡 24-录像拼接存档*/ + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 + BYTE byRes1[2]; + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 + BYTE byRes[256]; + }struStreamIDRet; + struct + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 + BYTE byRes[2]; + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 + BYTE byRes1[104]; + }struTrialRet; + }uSeniorRet; +}NET_DVR_SEARCH_EVENT_RET, *LPNET_DVR_SEARCH_EVENT_RET; + +#define NET_SDK_MAX_TAPE_INDEX_LEN 32 //磁带编号最大长度 +#define NET_SDK_MAX_FILE_LEN 256 //文件名最大长度 + +//查找返回结果 +typedef struct tagNET_DVR_SEARCH_EVENT_RET_V40 +{ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME struStartTime; //事件开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 + WORD wChan[MAX_CHANNUM_V40/*512*/]; //触发的通道号,0xffff表示后续无效 + BYTE byRes[36]; + union + { + BYTE byLen[800]; //联合体长度 + struct//报警输入结果 + { + DWORD dwAlarmInNo; //报警输入号 + BYTE byRes[796]; + }struAlarmRet; + struct//移动侦测结果 + { + DWORD dwMotDetNo; //移动侦测通道 + BYTE byRes[796]; + }struMotionRet; + struct//异常行为检测结果 + { + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 + BYTE byRes[668]; //保留 + }struVcaRet; + + struct//审讯事件 + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[784]; //保留 + }struInquestRet; + + struct //流id录像查询结果 + { + DWORD dwRecordType; //录像类型 0-定时录像 1-移动侦测 2-报警录像 3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 7-震动报警 8-环境触发 9-智能报警 10-回传录像 + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 + BYTE byPosition;// 文件所在存储位置:0-阵列上,1-带库机位上,可以直接下载,2-磁带库内,需要把磁盘切换到机位上,3-不在磁带库中,需要把磁盘插到磁带库中 + BYTE byRes1; + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 + BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //文件所在磁带编号 + BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //文件名扩展 + BYTE byRes[464]; + }struStreamIDRet; + + struct//POS录像查询结果 + { + DWORD dwChanNo; //触发产生pos事件的通道 + BYTE byRes[796]; + }struPosRet; + + struct + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 + BYTE byRes[2]; + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 + BYTE byRes1[600]; + }struTrialRet; + }uSeniorRet; +}NET_DVR_SEARCH_EVENT_RET_V40, *LPNET_DVR_SEARCH_EVENT_RET_V40; + +//查找返回结果 +typedef struct tagNET_DVR_SEARCH_EVENT_RET_V50 +{ + WORD wMajorType; //主类型 + WORD wMinorType; //次类型 + NET_DVR_TIME_SEARCH struStartTime; //事件开始的时间 + NET_DVR_TIME_SEARCH struEndTime; //事件停止的时间,脉冲事件时和开始时间一样 + NET_DVR_ADDRESS struAddr; //片段所在的地址信息,集群回放时用到 + WORD wChan[MAX_CHANNUM_V40/*512*/]; //触发的通道号,0xffff表示后续无效 + BYTE byRes[256]; + union + { + BYTE byLen[800]; //联合体长度 + struct//报警输入结果 + { + DWORD dwAlarmInNo; //报警输入号 + BYTE byRes[796]; + }struAlarmRet; + struct//移动侦测结果 + { + DWORD dwMotDetNo; //移动侦测通道 + BYTE byRes[796]; + }struMotionRet; + struct//异常行为检测结果 + { + DWORD dwChanNo; //触发事件的通道号 + BYTE byRuleID; //规则ID + BYTE byRes1[3]; //保留 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_EVENT_UNION uEvent; //行为事件参数 + BYTE byRes[668]; //保留 + }struVcaRet; + + struct//审讯事件 + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + BYTE byRes1[6]; //保留 + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + WORD wSegmentState; //本片断状态 0 刻录正常,1 刻录异常,2 不刻录审讯 + BYTE byRes2[784]; //保留 + }struInquestRet; + + struct //流id录像查询结果 + { + DWORD dwRecordType; //录像类型 0-定时录像 1-移动侦测 2-报警录像 3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 7-震动报警 8-环境触发 9-智能报警 10-回传录像 + DWORD dwRecordLength; //录像大小 + BYTE byLockFlag; // 锁定标志 0:没锁定 1:锁定 + BYTE byDrawFrameType; // 0:非抽帧录像 1:抽帧录像 + BYTE byPosition;// 文件所在存储位置:0-阵列上,1-带库机位上,可以直接下载,2-磁带库内,需要把磁盘切换到机位上,3-不在磁带库中,需要把磁盘插到磁带库中 + BYTE byRes1; + BYTE byFileName[NAME_LEN]; //文件名 + DWORD dwFileIndex; // 存档卷上的文件索引 + BYTE byTapeIndex[NET_SDK_MAX_TAPE_INDEX_LEN]; //文件所在磁带编号 + BYTE byFileNameEx[NET_SDK_MAX_FILE_LEN/*256*/]; //文件名扩展 + BYTE byRes[464]; + }struStreamIDRet; + + struct//POS录像查询结果 + { + DWORD dwChanNo; //触发产生pos事件的通道 + BYTE byRes[796]; + }struPosRet; + + struct + { + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE bySegmentState; //本片断状态,0-刻录正常,1-刻录异常,2-不刻录审讯 + BYTE byCaseType; //案件类型;0-全部、1-刑事案件、2-民事案件 + BYTE byRes[2]; + BYTE byCaseNo[CASE_NO_RET_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_RET_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_RET_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_RET_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_RET_LEN];//审判长 + BYTE byRes1[600]; + }struTrialRet; + struct//非视频通道查询结果 + { + DWORD dwChanNo; //触发产生事件的通道号(事件源通道) + BYTE byRes[796]; + }struIOTRet; + }uSeniorRet; +}NET_DVR_SEARCH_EVENT_RET_V50, *LPNET_DVR_SEARCH_EVENT_RET_V50; + +//SDK_V35 2009-10-26 + +// 标定配置类型 +typedef enum tagCALIBRATE_TYPE +{ + PDC_CALIBRATE = 0x01, // PDC 标定 + BEHAVIOR_OUT_CALIBRATE = 0x02, //行为室外场景标定 + BEHAVIOR_IN_CALIBRATE = 0x03, // 行为室内场景标定 + ITS_CALBIRETE = 0x04, // 交通事件标定 + BV_DIRECT_CALIBRATE = 0x05, //双目直接标定 + PDC_LINE_CALIBRATE = 0x06 //PDC 线 标定 +}CALIBRATE_TYPE; + +#define MAX_RECT_NUM 6 +typedef struct tagNET_DVR_RECT_LIST +{ + BYTE byRectNum; // 矩形框的个数 + BYTE byRes1[11]; //保留字节 + NET_VCA_RECT struVcaRect[MAX_RECT_NUM]; // 最大为6个Rect +}NET_DVR_RECT_LIST, *LPNET_DVR_RECT_LIST; + +// PDC 标定参数 +typedef struct tagNET_DVR_PDC_CALIBRATION +{ + NET_DVR_RECT_LIST struRectList; // 标定矩形框列表 + BYTE byRes[120]; // 保留字节 +}NET_DVR_PDC_CALIBRATION, *LPNET_DVR_PDC_CALIBRATION; + + +// 标定线的属性类别,用来表示当前标定线在实际表示的是高度线还是长度线。 +typedef enum tagLINE_MODE +{ + HEIGHT_LINE, //高度样本线 + LENGTH_LINE //长度样本线 +}LINE_MODE; +/* +在设置标定信息的时候,如果相应位设置了使能,并设置相关参数, +若没有设置使能,则标定后可以获取相关的摄像机参数 +*/ +typedef struct tagNET_DVR_CAMERA_PARAM +{ + BYTE byEnableHeight; // 是否使能设置摄像机高度线 + BYTE byEnableAngle; // 是否使能设置摄像机俯仰角度 + BYTE byEnableHorizon; // 是否使能设置摄像机地平线 + BYTE byRes[5]; // 保留字节 + float fCameraHeight; // 摄像机高度 + float fCameraAngle; // 摄像机俯仰角度 + float fHorizon; // 场景中的地平线 +}NET_DVR_CAMERA_PARAM, *LPNET_DVR_CAMERA_PARAM; +/* +当fValue表示目标高度的时候,struStartPoint和struEndPoint分别表示目标头部点和脚部点。 +当fValue表示线段长度的时候,struStartPoint和struEndPoint分别表示线段起始点和终点, +mode表示当前样本线表示高度线还是长度线。 +*/ +typedef struct tagNET_DVR_LINE_SEGMENT +{ + BYTE byLineMode; // 参照 LINE_MODE + BYTE byRes[3]; // 保留字节 + NET_VCA_POINT struStartPoint; + NET_VCA_POINT struEndPoint; + float fValue; +}NET_DVR_LINE_SEGMENT, *LPNET_DVR_LINE_SEGMENT; + +#define MAX_LINE_SEG_NUM 8 + +/* +标定样本线目前需要4-8调样本线,以获取摄像机相关参数 +*/ +typedef struct tagNET_DVR_BEHAVIOR_OUT_CALIBRATION +{ + DWORD dwLineSegNum; // 样本线个数 + NET_DVR_LINE_SEGMENT struLineSegment[MAX_LINE_SEG_NUM]; // 样本线最大个数 + NET_DVR_CAMERA_PARAM struCameraParam; // 摄像机参数 + BYTE byRes[20]; +}NET_DVR_BEHAVIOR_OUT_CALIBRATION, *LPNET_DVR_BEHAVIOR_OUT_CALIBRATION; + +/* +该结构体表示IAS智能库标定样本, +其中包括一个目标框和一条对应的高度标定线; +目标框为站立的人体外接矩形框;高度线样本标识从人头顶点到脚点的标定线; +用归一化坐标表示; +*/ +typedef struct tagNET_DVR_IN_CAL_SAMPLE +{ + NET_VCA_RECT struVcaRect; // 目标框 + NET_DVR_LINE_SEGMENT struLineSegment; // 高度标定线 +}NET_DVR_IN_CAL_SAMPLE, *LPNET_DVR_IN_CAL_SAMPLE; + +#define MAX_SAMPLE_NUM 5 //直接标定点最大个数 +#define MAX_SAMPLE_NUM_EX 7 //样本标定点个数扩展 + +typedef struct tagNET_DVR_BEHAVIOR_IN_CALIBRATION +{ + DWORD dwCalSampleNum; // 标定样本个数 + NET_DVR_IN_CAL_SAMPLE struCalSample[MAX_SAMPLE_NUM]; // 标定样本最大个数 + NET_DVR_CAMERA_PARAM struCameraParam; // 摄像机参数 + BYTE byRes[16]; +}NET_DVR_BEHAVIOR_IN_CALIBRATION, *LPNET_DVR_BEHAVIOR_IN_CALIBRATION; + +#define CALIB_PT_NUM 4 +typedef struct tagNET_DVR_ITS_CALIBRATION +{ + DWORD dwPointNum; //标定点数 + NET_VCA_POINT struPoint[CALIB_PT_NUM]; //图像坐标 + float fWidth; + float fHeight; + BYTE byRes1[100]; // 保留字节 +}NET_DVR_ITS_CALIBRATION, *LPNET_DVR_ITS_CALIBRATION; + +typedef struct tagNET_DVR_BV_DIRECT_CALIBRATION +{ + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], + float fInclineAngle; //摄像机倾斜角度[-20°,20°] + BYTE byRes1[228]; //保留 +}NET_DVR_BV_DIRECT_CALIBRATION,*LPNET_DVR_BV_DIRECT_CALIBRATION; + +// PDC 标定参数 +typedef struct tagNET_DVR_PDC_LINE_CALIBRATION +{ + NET_VCA_LINE struCalibrationLine; + BYTE byRes[224];// 保留字节 +} NET_DVR_PDC_LINE_CALIBRATION, *LPNET_DVR_PDC_LINE_CALIBRATION; + +// 标定参数联合体 +// 后续的相关标定参数可以放在该结构里面 +typedef union tagNET_DVR_CALIBRATION_PRARM_UNION +{ + BYTE byRes[240]; //联合体结构大小 + NET_DVR_PDC_CALIBRATION struPDCCalibration; //PDC 标定参数 + NET_DVR_BEHAVIOR_OUT_CALIBRATION struBehaviorOutCalibration; // 行为室外场景标定 主要应用于IVS等 + NET_DVR_BEHAVIOR_IN_CALIBRATION struBehaviorInCalibration; // 行为室内场景标定,主要应用IAS等 + NET_DVR_ITS_CALIBRATION struITSCalibration; + NET_DVR_BV_DIRECT_CALIBRATION struBvDirectCalibration; //双目直接标定 + NET_DVR_PDC_LINE_CALIBRATION struPDCLineCalibration; //PDC 线标定参数 +}NET_DVR_CALIBRATION_PRARM_UNION, *LPNET_DVR_CALIBRATION_PRARM_UNION; + + +// 标定配置结构 +typedef struct tagNET_DVR_CALIBRATION_CFG +{ + DWORD dwSize; //标定结构大小 + BYTE byEnable; // 是否启用标定 + BYTE byCalibrationType; // 标定类型 根据不同类型在联合体类选择不同的标定 参考CALIBRATE_TYPE + BYTE byRes1[2]; + NET_DVR_CALIBRATION_PRARM_UNION uCalibrateParam; // 标定参数联合体 + BYTE byRes2[12]; +}NET_DVR_CALIBRATION_CFG, *LPNET_DVR_CALIBRATION_CFG; + +//流量统计方向结构体 +typedef struct tagNET_DVR_PDC_ENTER_DIRECTION +{ + NET_VCA_POINT struStartPoint; //流量统计方向起始点 + NET_VCA_POINT struEndPoint; // 流量统计方向结束点 +}NET_DVR_PDC_ENTER_DIRECTION, *LPNET_DVR_PDC_ENTER_DIRECTION; + +typedef struct tagNET_DVR_PDC_RULE_CFG +{ + DWORD dwSize; //结构大小 + BYTE byEnable; // 是否激活规则; + BYTE byRes1[23]; // 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 +} NET_DVR_PDC_RULE_CFG, *LPNET_DVR_PDC_RULE_CFG; + +typedef struct tagNET_DVR_PDC_RULE_CFG_V41 +{ + DWORD dwSize; //结构大小 + BYTE byEnable; // 是否激活规则; + BYTE byRes1[23]; // 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_TIME_EX struDayStartTime; //白天开始时间,时分秒有效 + NET_DVR_TIME_EX struNightStartTime; //夜晚开始时间,时分秒有效 + BYTE byRes[100]; // 保留字节 +}NET_DVR_PDC_RULE_CFG_V41, *LPNET_DVR_PDC_RULE_CFG_V41; + +/********* IPC5.1.7 人流量统计规则 Begin 2014-03-21***********/ +//条件结构 +typedef struct tagNET_DVR_PDC_RULE_COND +{ + DWORD dwSize; //结构大小 + DWORD dwChannel; //通道号 + DWORD dwID; //场景ID,兼容球机多场景概念,兼容老版本SDK配置新设备时,保留字节为0的情况,所以这个字节为0时,也默认为场景1 + BYTE byRes[60]; +}NET_DVR_PDC_RULE_COND, *LPNET_DVR_PDC_RULE_COND; + +//折线结构体 +typedef struct tagNET_VCA_POLYLINE +{ + NET_VCA_POINT struPoint[4]; //折线点 +}NET_VCA_POLYLINE, *LPNET_VCA_POLYLINE; + +//配置结构 +typedef struct tagNET_DVR_PDC_RULE_CFG_V42 +{ + DWORD dwSize; //结构大小 + BYTE byEnable; //是否激活规则; + BYTE byOSDEnable;//客流统计OSD显示是否启用, 0-否(0-无),1-是(0-进入和离开), 2-进入, 3-离开 对于老设备的不启用OSD叠加对应(无),启用对应(进入/离开),4-经过人数,5-进入和经过。 + BYTE byCurDetectType;//当前检测区域类型,0-多边形,1-检测线, 2-折线检测 + BYTE byInterferenceSuppression; //干扰抑制,按位表示,0-未勾选,1-勾选,bit0-阴影,bit1-徘徊,bit2-推车 + NET_VCA_POINT struOSDPoint;//客流统计显示OSD显示左上角坐标 + //客流量检测数据上传周期(0-15、1-1、2-5、3-10、4-20、5-30、6-60)单位:分钟 + BYTE byDataUploadCycle; + //每秒上传机制使能(0-关闭,1-开启) + BYTE bySECUploadEnable; + BYTE byEmailDayReport;//客流日报表使能 0-关闭,1-开启 + BYTE byEmailWeekReport;//客流周报表使能 0-关闭,1-开启 + BYTE byEmailMonthReport;//客流月报表使能0-关闭,1-开启 + BYTE byEmailYearReport;//客流年报表使能0-关闭,1-开启 + BYTE byRes2[6];// 保留字节 + NET_VCA_POLYGON struPolygon; // 多边形 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_TIME_EX struDayStartTime; //白天开始时间,时分秒有效 + NET_DVR_TIME_EX struNightStartTime; //夜晚开始时间,时分秒有效 + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式 仅支持上传中心*/ + BYTE byDetecteSensitivity;//目标检测灵敏度:范围1-100,默认50 + BYTE byGenerateSpeedSpace;//目标生成速度(空域):范围1-100,默认50 + BYTE byGenerateSpeedTime;// 目标生成速度(时域):范围1-100,默认50 + BYTE byCountSpeed;// 计数速度:范围1-100,默认50 + BYTE byDetecteType;// 目标检测类型:0-自动,1-人头,2-头肩,默认0-自动,自动模式下DSP调整算法的参数配置给算法库 + BYTE byTargetSizeCorrect;//目标尺寸修正:范围1-100,默认50 + BYTE byStreamOverlayRuleInfos;//码流智能信息叠加 0-否,1-是 + BYTE byRes3;// 保留字节 + NET_VCA_LINE struLine;//检测线 + BYTE byHeightFilterEnable;//高度过滤是否开启,0-保留,1-关闭,2-开启 + BYTE byDetectThreshold;//检测阈值,范围[0,100],默认 90(内部使用,暂不开放)用于设定算法库中被检测目标的置信度阈值,置信度低于该阈值的目标,不用于计数; + BYTE byAidedTrackEnabled;//辅助开关,0~开启、1~关闭,默认开启(内部使用) 用于开启和关闭算法模块中的光流辅助,客流人员,增加精准度。 + BYTE byRes4; + float fHeightFilter;//过滤高度,单位:厘米,默认值:120厘米,范围:40-200厘米。byHeightFilterEnable为2是才有效 + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定 + BYTE byCountingType;//计数触发方式 0-无,1-报警输入触发,2-视频分析触发 + BYTE bySignalType;//信号类型 0-电平,1-脉冲 + BYTE byRS485TransmissionEnabled;//启用485传输 0-关闭,1-开启 + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,只读 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,只读 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时设置有效,其余时只读 + NET_VCA_POLYGON struCountPolygon;//计数区域:该参数默认为只读属性,若智能通道分析能力中返回了能力节点,则代表该参数支持配置。 + NET_VCA_POLYGON struAutoCalibPolygon;//标定区域,当byCalibrateType为1时有效 + NET_DVR_TIME_EX struDailyResetTime; //定时清零 + NET_VCA_POLYLINE struPolyLine;//折线检测区域(配置折线后,struLine不做显示) + BYTE byRes[4]; //保留字节 +}NET_DVR_PDC_RULE_CFG_V42, *LPNET_DVR_PDC_RULE_CFG_V42; +/********* IPC5.1.7 人流量统计规则 End 2014-03-21***********/ + +//试用版信息结构体 +typedef struct tagNET_DVR_TRIAL_VERSION_CFG +{ + DWORD dwSize; + WORD wReserveTime; //试用期剩余时间,0xffff表示无效,单位:天 + BYTE byRes[62]; +}NET_DVR_TRIAL_VERSION_CFG, *LPNET_DVR_TRIAL_VERSION_CFG; + +typedef struct tagNET_DVR_SYN_CHANNEL_NAME_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_SYN_CHANNEL_NAME_PARAM, *LPNET_DVR_SYN_CHANNEL_NAME_PARAM; + +typedef struct tagNET_DVR_RESET_COUNTER_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byMode; //生效模式,0-定时,1-手动 + BYTE byRes1[2]; + NET_DVR_TIME_EX struTime[MAX_DAYS];//数据清零时间,时分秒有效 + BYTE byRes[64]; +}NET_DVR_RESET_COUNTER_CFG, *LPNET_DVR_RESET_COUNTER_CFG; + +typedef struct tagNET_DVR_VCA_CTRLINFO_COND +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; + BYTE byRes[64]; +}NET_DVR_VCA_CTRLINFO_COND, *LPNET_DVR_VCA_CTRLINFO_COND; + +#define NET_SDK_MAX_RELATED_CHAN_NUM 4 //最大关联通道数 + +typedef struct tagNET_DVR_VCA_CTRLINFO_CFG +{ + DWORD dwSize; + BYTE byVCAEnable; //是否开启智能 + BYTE byVCAType; //智能能力类型,VCA_CHAN_ABILITY_TYPE + BYTE byStreamWithVCA; //码流中是否带智能信息 + BYTE byMode; //模式,ATM 能力时参照VCA_CHAN_MODE_TYPE ,TFS 能力时参照 TFS_CHAN_MODE_TYPE,异常行为检测完整版时参照BEHAVIOR_SCENE_MODE_TYPE + BYTE byControlType; //控制类型,按位表示,0-否,1-是 + //byControlType &1 是否启用抓拍功能 + //byControlType &2 是否启用联动前端设备 + BYTE byRes1[3]; + WORD wRelatedChannel[NET_SDK_MAX_RELATED_CHAN_NUM/*4*/];/*关联通道号,0-不关联(当前仅ATM设备使用,当设置通道模式为ATM面板时,可以关联一路ATM人脸通道)*/ + BYTE byRes[72]; //保留,设置为0 +}NET_DVR_VCA_CTRLINFO_CFG, *LPNET_DVR_VCA_CTRLINFO_CFG; + +//设置人流量统计参数 复用行为内部关键字参数 +// HUMAN_GENERATE_RATE +// 目标生成速度参数,控制PDC库生成目标的速度。速度越快,目标越容易生成。当输入视频光照条件较差,对比度较低时,或者设置的规则区域较小时,应加快目标生成速度, 避免目标的漏检;当输入视频中对比度较高时,或者规则区域较大时,应该降低目标生成速度,以减少误检。目标生成速度参数共有5级,1级速度最慢,5级最快,默认参数为3。 +// +// DETECT_SENSITIVE +// 目标检测灵敏度控制参数,控制PDC库中一个矩形区域被检测为目标的灵敏度。灵敏度越高,矩形区域越容易被检测为目标,灵敏度越低则越难检测为目标。当输入视频光照条件较差,对比度较低时,应提高检测灵敏度, 避免目标的漏检;当输入视频中对比度较高时,应该降低检测灵敏度,以减少误检。对应参数共有5级,级别1灵敏度最低,5级最高,默认级别为3。 +// TRAJECTORY_LEN +// 生成长度控制参数,表示生成时要求目标的最大位移像素。对应参数共有5级,级别1,生成长度最长,生成最慢,5级生成长度最短,生成最快,默认级别为3。 +// TRAJECT_CNT_LEN +// 计数长度控制参数,表示计数时要求目标的最大位移像素。对应参数共有5级,级别1,计数要求长度最长,计数最慢,5级计数要求长度最短,计数最快,默认级别为3。 +// PREPROCESS +// 图像预处理控制参数,0 - 不处理;1 - 处理。默认为0; +// CAMERA_ANGLE +// 摄像机角度输入参数, 0 - 倾斜; 1 - 垂直。默认为0; +typedef enum tagPDC_PARAM_KEY +{ + HUMAN_GENERATE_RATE = 50, // 目标生成速度 从50开始 + DETECT_SENSITIVE = 51, // 检测灵敏度 +}PDC_PARAM_KEY; + +typedef struct tagNET_DVR_PDC_TARGET_INFO +{ + DWORD dwTargetID; // 目标id + NET_VCA_RECT struTargetRect; // 目标框 + BYTE byRes1[8]; // 保留字节 +}NET_DVR_PDC_TARGET_INFO, *LPNET_DVR_PDC_TARGET_INFO; + +typedef struct tagNET_DVR_PDC_TARGET_IN_FRAME +{ + BYTE byTargetNum; //目标个数 + BYTE byRes1[3]; + NET_DVR_PDC_TARGET_INFO struTargetInfo[MAX_TARGET_NUM]; //目标信息数组 + BYTE byRes2[8]; // 保留字节 +}NET_DVR_PDC_TARGET_IN_FRAME, *LPNET_DVR_PDC_TARGET_IN_FRAME; + +typedef struct tagNET_DVR_PDC_ALRAM_INFO +{ + DWORD dwSize; // PDC人流量报警上传结构体大小 + BYTE byMode; // 0 单帧统计结果 1最小时间段统计结果 2 信号量触发(结果存在“统计起始时间”&&“统计结束时间”) + BYTE byChannel; // 报警上传通道号 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE bySmart; //专业智能返回0,Smart 返回 1 + BYTE byRes1; // 保留字节 + /********* IPC5.1.7 新增参数 End 2014-03-21***********/ + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + union + { + struct // 单帧统计结果时使用 + { + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes[89]; + }struStatFrame; + struct + { + NET_DVR_TIME tmStart; // 统计起始时间 + NET_DVR_TIME tmEnd; // 统计结束时间 + BYTE byTimeDifferenceFlag; /*0-默认行为,cStartTimeDifferenceH,等时差信息无效,1-时差信息有效*/ + char cStartTimeDifferenceH; /*开始时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStartTimeDifferenceM; /*开始时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + char cStopTimeDifferenceH; /*结束时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStopTimeDifferenceM; /*结束时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + BYTE byRes[87]; + }struStatTime; + }uStatModeParam; // 作为一个联合体 单帧的时候才有帧内目标信息 最小时间段统计结果需要统计时间 参数 + DWORD dwLeaveNum; // 离开人数 + DWORD dwEnterNum; // 进入人数 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + BYTE byRes3; + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx + DWORD dwPassingNum; // 经过人数(进入区域后徘徊没有触发进入、离开的人数) + DWORD dwChildLeaveNum; // 小孩离开人数 + DWORD dwChildEnterNum; // 小孩进入人数 + DWORD dwDuplicatePeople; // 重复人数 + DWORD dwXmlLen;//XML透传数据长度, 即EventNotificationAlert XML Block的数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block +#else + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block + BYTE byRes4[4]; +#endif + BYTE byRes2[8]; // 保留字节 +}NET_DVR_PDC_ALRAM_INFO, *LPNET_DVR_PDC_ALRAM_INFO; + + +// 人流量信息查询 +typedef struct tagNET_DVR_PDC_QUERY +{ + NET_DVR_TIME tmStart; + NET_DVR_TIME tmEnd; + DWORD dwLeaveNum; + DWORD dwEnterNum; + BYTE byRes1[256]; +}NET_DVR_PDC_QUERY, *LPNET_DVR_PDC_QUERY; + +typedef struct tagNET_DVR_POSITION_RULE_CFG +{ + DWORD dwSize; // 结构大小 + NET_DVR_PTZ_POSITION struPtzPosition; // 场景位置信息 + NET_VCA_RULECFG struVcaRuleCfg; //行为规则配置 + BYTE byRes2[80]; // 保留字节 +}NET_DVR_POSITION_RULE_CFG, *LPNET_DVR_POSITION_RULE_CFG; + +typedef struct tagNET_DVR_POSITION_RULE_CFG_V41 +{ + DWORD dwSize; // 结构大小 + NET_DVR_PTZ_POSITION struPtzPosition; // 场景位置信息 + NET_VCA_RULECFG_V41 struVcaRuleCfg; //行为规则配置 + BYTE byTrackEnable; //是否启用 + BYTE byRes1; + WORD wTrackDuration; //持续时间,单位s + BYTE byRes2[76]; // 保留字节 +}NET_DVR_POSITION_RULE_CFG_V41, *LPNET_DVR_POSITION_RULE_CFG_V41; + + +typedef struct tagNET_DVR_LIMIT_ANGLE +{ + BYTE byEnable; // 是否启用场景限位功能 + BYTE byRes1[3]; + NET_DVR_PTZPOS struUp; // 上限位 + NET_DVR_PTZPOS struDown; // 下限位 + NET_DVR_PTZPOS struLeft; // 左限位 + NET_DVR_PTZPOS struRight; // 右限位 + BYTE byRes2[20]; +}NET_DVR_LIMIT_ANGLE, *LPNET_DVR_LIMIT_ANGLE; + +typedef struct tagNET_DVR_POSITION_INDEX +{ + BYTE byIndex; // 场景索引 + BYTE byRes1; + WORD wDwell; // 停留时间 + BYTE byRes2[4]; // 保留字节 +}NET_DVR_POSITION_INDEX, *LPNET_DVR_POSITION_INDEX; + +#define MAX_POSITION_NUM 10 +typedef struct tagNET_DVR_POSITION_TRACK_CFG +{ + DWORD dwSize; + BYTE byNum; // 场景个数 + BYTE byRes1[3]; + NET_DVR_POSITION_INDEX struPositionIndex[MAX_POSITION_NUM]; + BYTE byRes2[8]; +}NET_DVR_POSITION_TRACK_CFG, *LPNET_DVR_POSITION_TRACK_CFG; + +//巡航路径场景信息 +typedef struct tagNET_DVR_PATROL_SCENE_INFO +{ + WORD wDwell; // 停留时间 30-300 + BYTE byPositionID; // 场景号1-10,默认0表示该巡航点不添加场景 + BYTE byRes[5]; +}NET_DVR_PATROL_SCENE_INFO, *LPNET_DVR_PATROL_SCENE_INFO; + +// 场景巡航配置信息 +typedef struct tagNET_DVR_PATROL_TRACKCFG +{ + DWORD dwSize; // 结构大小 + NET_DVR_PATROL_SCENE_INFO struPatrolSceneInfo[10]; // 巡航路径 + BYTE byRes[16]; // 保留字节 +}NET_DVR_PATROL_TRACKCFG, *LPNET_DVR_PATROL_TRACKCFG; + +//球机本地规则菜单配置结构体 +typedef struct tagNET_DVR_TRACK_PARAMCFG +{ + DWORD dwSize; // 结构大小 + WORD wAlarmDelayTime; // 报警延时时间,目前球机只支持全局入侵 范围1-120秒 + WORD wTrackHoldTime; // 报警持续时间 范围0-300秒 + BYTE byTrackMode; // 参照 IPDOME_TRACK_MODE + BYTE byPreDirection; // 方向预判 0-不启用 1-启用 + BYTE byTrackSmooth; // 连续 0-不启用 1-启用 + BYTE byZoomAdjust; // 倍率系数调整 参见下表 + BYTE byMaxTrackZoom; //最大倍率系数,0-表示默认倍率系数,等级6-标定值*1.0(默认),1-5为缩小标定值,值越小,缩小的比例越大,7-15为放大,值越大,放大的比例越大 + BYTE byStopTrackWhenFindFace; //人脸检测到后是否停止 0-否 1-是 + BYTE byStopTrackThreshold; //终止评分阈值 + BYTE byRes[9]; // 保留字节 +}NET_DVR_TRACK_PARAMCFG, *LPNET_DVR_TRACK_PARAMCFG; + +// 球机机芯参数 +typedef struct tagNET_DVR_DOME_MOVEMENT_PARAM +{ + WORD wMaxZoom; // 球机最大倍率系数 + BYTE byRes[42]; // 保留字节 +}NET_DVR_DOME_MOVEMENT_PARAM, *LPNET_DVR_DOME_MOVEMENT_PARAM; + +/********************************智能交通事件 begin****************************************/ +#define MAX_REGION_NUM 8 // 区域列表最大数目 +#define MAX_TPS_RULE 8 // 最大参数规则数目 +#define MAX_AID_RULE 8 // 最大事件规则数目 +#define MAX_LANE_NUM 8 // 最大车道数目 + +//交通事件类型, +typedef enum tagTRAFFIC_AID_TYPE +{ + CONGESTION = 0x01, //拥堵 + PARKING = 0x02, //停车 + INVERSE = 0x04, //逆行 + PEDESTRIAN = 0x08, //行人 + DEBRIS = 0x10, //遗留物 抛洒物碎片 + SMOKE = 0x20, //烟雾 + OVERLINE = 0x40, //压线 + VEHICLE_CONTROL_LIST = 0x80, //禁止名单数据 + SPEED = 0x100, //超速 + LANECHANGE = 0x200, //变道 + TURNAROUND = 0x400, //掉头 + VEHICLE_OCCUPANCY_NONVEHICLE = 0x800, //机动车占用非机动车位 + GASSER = 0x1000, //加塞 + ROADBLOCK = 0x2000, //路障 + CONSTRUCTION = 0x4000, //施工 + TRAFFIC_ACCIDENT = 0x8000, //交通事故检测(交通事故目前先做车车事故,追尾、剐蹭等算法判断车与车之间有交叉,其他车辆绕行则报警) + PARALLEL_PARKING = 0x10000, //侧方位停车检测 + FOG_DETECTION = 0x20000, //浓雾检测 + OCCUPY_EMERGENCY_LANE = 0x40000, //占用紧急车道 + CONFLAGRATION = 0X80000, //火灾 + TFS_MANUAL_TRIGGER = 0x100000, //手动违章取证事件 + LOADING_DOCK_TRIGGER_UPLOAD = 0x200000, //月台触发上传 + OCCUPY_OVERTAKING_LANE = 0x400000, //占用超车道 + PROHIBITION_MARK_VIOLATION = 0x800000, //违反禁令标志 + CHECK_POINT = 0x1000000, //卡口 + SUDDEN_SPEED_DROP = 0x2000000, //速度骤降 + SLOW_MOVING = 0x4000000 //车辆缓行 +}TRAFFIC_AID_TYPE; + +typedef enum tagTRAFFIC_SCENE_MODE +{ + FREEWAY = 0, // 高速户外场景 + TUNNEL, // 高速隧道场景 + BRIDGE // 高速桥梁场景 +}TRAFFIC_SCENE_MODE; + +typedef enum tagITS_ABILITY_TYPE +{ + ITS_CONGESTION_ABILITY = 0x01, //拥堵 + ITS_PARKING_ABILITY = 0x02, //停车 + ITS_INVERSE_ABILITY = 0x04, //逆行 + ITS_PEDESTRIAN_ABILITY = 0x08, //行人 + ITS_DEBRIS_ABILITY = 0x10, //遗留物 抛洒物碎片 + ITS_SMOKE_ABILITY = 0x20, //烟雾-隧道 + ITS_OVERLINE_ABILITY = 0x40, //压线 + ITS_VEHICLE_CONTROL_LIST_ABILITY = 0x80, //禁止名单数据 + ITS_SPEED_ABILITY = 0x100, //超速 + ITS_LANECHANGE_ABILITY = 0x200, //变道 + ITS_TURNAROUND_ABILITY = 0x400, //掉头 + ITS_LANE_VOLUME_ABILITY = 0x010000, //车道流量 + ITS_LANE_VELOCITY_ABILITY = 0x020000, //车道平均速度 + ITS_TIME_HEADWAY_ABILITY = 0x040000, //车头时距 + ITS_SPACE_HEADWAY_ABILITY = 0x080000, //车头间距 + ITS_TIME_OCCUPANCY_RATIO_ABILITY = 0x100000, //车道占有率,(时间上) + ITS_SPACE_OCCUPANCY_RATIO_ABILITY = 0x200000, //车道占有率,百分比计算(空间上) + ITS_LANE_QUEUE_ABILITY = 0x400000, //排队长度 + ITS_VEHICLE_TYPE_ABILITY = 0x800000, //车辆类型 + ITS_TRAFFIC_STATE_ABILITY = 0x1000000 //交通状态 +}ITS_ABILITY_TYPE; + +// 交通统计参数 +typedef enum tagITS_TPS_TYPE +{ + LANE_VOLUME = 0x01, //车道流量 + LANE_VELOCITY = 0x02, //车道速度 + TIME_HEADWAY = 0x04, //车头时距 + SPACE_HEADWAY = 0x08, //车头间距 + TIME_OCCUPANCY_RATIO = 0x10, //车道占有率 (时间上) + SPACE_OCCUPANCY_RATIO = 0x20, //车道占有率,百分比计算(空间上) + QUEUE = 0x40, //排队长度 + VEHICLE_TYPE = 0x80, //车辆类型 + TRAFFIC_STATE = 0x100 //交通状态 +}ITS_TPS_TYPE; + +typedef struct tagNET_DVR_REGION_LIST +{ + DWORD dwSize; // 结构体大小 + BYTE byNum; // 区域个数 + BYTE byRes1[3]; // 保留字节 + NET_VCA_POLYGON struPolygon[MAX_REGION_NUM]; // 区域 + BYTE byRes2[20]; // 保留字节 +}NET_DVR_REGION_LIST,*LPNET_DVR_REGION_LIST; + + +// 方向结构体 +typedef struct tagNET_DVR_DIRECTION +{ + NET_VCA_POINT struStartPoint; // 方向起始点 + NET_VCA_POINT struEndPoint; // 方向结束点 +}NET_DVR_DIRECTION, *LPNET_DVR_DIRECTION; + +// 单个车道 +typedef struct tagNET_DVR_ONE_LANE +{ + BYTE byEnable; // 车道是否启用 + BYTE byRes1[11]; // 保留字节 + BYTE byLaneName[NAME_LEN]; // 车道规则名称 + NET_DVR_DIRECTION struFlowDirection;// 车道内车流方向 + NET_VCA_POLYGON struPolygon; // 车道区域 +}NET_DVR_ONE_LANE, *LPNET_DVR_ONE_LANE; + +// 车道配置 +typedef struct tagNET_DVR_LANE_CFG +{ + DWORD dwSize; // 结构体大小 + NET_DVR_ONE_LANE struLane[MAX_LANE_NUM]; // 车道参数 数组下标作为车道ID, + BYTE byRes1[40]; // 保留字节 +}NET_DVR_LANE_CFG, *LPNET_DVR_LANE_CFG; + +// 交通事件参数 +typedef struct tagNET_DVR_AID_PARAM +{ + WORD wParkingDuration; // 违停检测灵敏度 10-120s + WORD wPedestrianDuration; // 行人持续时间 1-120s + WORD wDebrisDuration; // 抛洒物持续时间 10-120s + WORD wCongestionLength; // 拥堵长度阈值 5-200(米) + WORD wCongestionDuration; // 拥堵持续参数 10-120s + WORD wInverseDuration; // 逆行持续时间 1-10s + WORD wInverseDistance; // 逆行距离阈值 单位m 范围[2-100] 默认 10米 + WORD wInverseAngleTolerance; // 允许角度偏差 90-180度,车流与逆行允许的夹角 + WORD wIllegalParkingTime; // 违停时间[4,60],单位:分钟 ,TFS(交通违章取证) 城市模式下 + WORD wIllegalParkingPicNum; // 违停图片数量[1,6], TFS(交通违章取证) 城市模式下 + BYTE byMergePic; // 图片拼接,TFS 城市模式下 0- 不拼接 1- 拼接 + BYTE byRes1[23]; // 保留字节 +}NET_DVR_AID_PARAM, *LPNET_DVR_AID_PARAM; + +// 单条交通事件规则结构体 +typedef struct tagNET_DVR_ONE_AID_RULE +{ + BYTE byEnable; // 是否启用事件规则 + BYTE byRes1[3]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 交通事件检测类型 TRAFFIC_AID_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; // 尺寸过滤器 + NET_VCA_POLYGON struPolygon; // 规则区域 + NET_DVR_AID_PARAM struAIDParam; // 事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes2[20]; +}NET_DVR_ONE_AID_RULE, *LPNET_DVR_ONE_AID_RULE; + +// 交通事件规则 +typedef struct tagNET_DVR_AID_RULECFG +{ + DWORD dwSize; // 结构体大小 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_DVR_ONE_AID_RULE struOneAIDRule[MAX_AID_RULE]; + BYTE byRes2[32]; +}NET_DVR_AID_RULECFG, *LPNET_DVR_AID_RULECFG; + +// 单条交通事件规则结构体(扩展) +typedef struct tagNET_DVR_ONE_AID_RULE_V41 +{ + BYTE byEnable; // 是否启用事件规则 + BYTE byLaneNo; // 关联车道号 + BYTE byRes1[2]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 交通事件检测类型 TRAFFIC_AID_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; // 尺寸过滤器 + NET_VCA_POLYGON struPolygon; // 规则区域 + NET_DVR_AID_PARAM struAIDParam; // 事件参数 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];// 布防时间段 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + BYTE byRes2[60]; //保留 +}NET_DVR_ONE_AID_RULE_V41, *LPNET_DVR_ONE_AID_RULE_V41; + +// 交通事件规则(扩展) +typedef struct tagNET_DVR_AID_RULECFG_V41 +{ + DWORD dwSize; // 结构体大小 + BYTE byPicProType; // 报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; // 图片规格结构 + NET_DVR_ONE_AID_RULE_V41 struAIDRule[MAX_AID_RULE]; //规则数组 + BYTE byRes2[128]; //保留 +} NET_DVR_AID_RULECFG_V41, *LPNET_DVR_AID_RULECFG_V41; + +// 交通统计参数结构体 +typedef struct tagNET_DVR_ONE_TPS_RULE +{ + BYTE byEnable; //是否使能车道交通规则参数 + BYTE byLaneID; //车道ID + BYTE byRes1[2]; + DWORD dwCalcType; //统计参数类型ITS_TPS_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVitrualLoop; //虚拟线圈 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式,一般为处理是否上传中心,其他功能不需要 + BYTE byRes2[20]; //保留字节 +}NET_DVR_ONE_TPS_RULE, *LPNET_DVR_ONE_TPS_RULE; + +// 交通参数统计规则配置结构体 +typedef struct tagNET_DVR_TPS_RULECFG +{ + DWORD dwSize; // 结构大小 + NET_DVR_ONE_TPS_RULE struOneTpsRule[MAX_TPS_RULE]; // 下标对应交通参数ID + BYTE byRes2[40]; // 保留字节 +}NET_DVR_TPS_RULECFG, *LPNET_DVR_TPS_RULECFG; + +// 交通统计参数结构体(扩展) +typedef struct tagNET_DVR_ONE_TPS_RULE_V41 +{ + BYTE byEnable; //是否使能车道交通规则参数 + BYTE byLaneID; //车道ID + BYTE byRes1[2]; //保留 + DWORD dwCalcType; // 统计参数类型ITS_TPS_TYPE + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVitrualLoop; //虚拟线圈 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRes2[60]; // 保留字节 +}NET_DVR_ONE_TPS_RULE_V41, *LPNET_DVR_ONE_TPS_RULE_V41; + + +// 交通参数统计规则配置结构体(扩展) +typedef struct tagNET_DVR_TPS_RULECFG_V41 +{ + DWORD dwSize; // 结构大小 + NET_DVR_ONE_TPS_RULE_V41 struOneTpsRule[MAX_TPS_RULE]; // 下标对应交通参数ID + BYTE byRes[128]; // 保留 +}NET_DVR_TPS_RULECFG_V41, *LPNET_DVR_TPS_RULECFG_V41; + +//交通事件类型扩展 +typedef enum tagTRAFFIC_AID_TYPE_EX +{ + ENUM_AID_TYPE_CONGESTION = 1, //拥堵 + ENUM_AID_TYPE_PARKING = 2, //停车 + ENUM_AID_TYPE_INVERSE = 3, //逆行 + ENUM_AID_TYPE_PEDESTRIAN = 4, //行人 + ENUM_AID_TYPE_DEBRIS = 5, //遗留物 抛洒物碎片 + ENUM_AID_TYPE_SMOKE = 6, //烟雾 + ENUM_AID_TYPE_OVERLINE = 7, //压线 + ENUM_AID_TYPE_VEHICLE_CONTROL_LIST = 8, //禁止名单数据 + ENUM_AID_TYPE_SPEED = 9, //超速 + ENUM_AID_TYPE_LANECHANGE = 10, //变道 + ENUM_AID_TYPE_TURNAROUND = 11, //掉头 + ENUM_AID_TYPE_VEHICLE_OCCUPANCY_NONVEHICLE = 12, //机动车占用非机动车位 + ENUM_AID_TYPE_GASSER = 13, //加塞 + ENUM_AID_TYPE_ROADBLOCK = 14, //路障 + ENUM_AID_TYPE_CONSTRUCTION = 15, //施工 + ENUM_AID_TYPE_TRAFFIC_ACCIDENT = 16, //交通事故检测(交通事故目前先做车车事故,追尾、剐蹭等算法判断车与车之间有交叉,其他车辆绕行则报警) + ENUM_AID_TYPE_PARALLEL_PARKING = 17, //侧方位停车检测 + ENUM_AID_TYPE_FOG_DETECTION = 18, //浓雾检测 + ENUM_AID_TYPE_OCCUPY_EMERGENCY_LANE = 19, //占用紧急车道 + ENUM_AID_TYPE_CONFLAGRATION = 20, //火灾 + ENUM_AID_TYPE_TFS_MANUAL_TRIGGER = 21, //手动违章取证事件 + ENUM_AID_TYPE_LOADING_DOCK_TRIGGER_UPLOAD = 22, //月台触发上传 + ENUM_AID_TYPE_OCCUPY_OVERTAKING_LANE = 23, //占用超车道 + ENUM_AID_TYPE_PROHIBITION_MARK_VIOLATION = 24, //违反禁令标志 + ENUM_AID_TYPE_CHECK_POINT = 25, //卡口 + ENUM_AID_TYPE_SUDDEN_SPEED_DROP = 26, //速度骤降 + ENUM_AID_TYPE_SLOW_MOVING = 27, //车辆缓行 + ENUM_AID_TYPE_NOT_KEEP_DISTANCE = 28, //未保持车距 + ENUM_AID_TYPE_NOT_SLOW_ZEBRA_CROSSING = 29, //斑马线未减速 + ENUM_AID_TYPE_OVER_TAKE_RIGHT_SIDE = 30, //右侧超车 + ENUM_AID_TYPE_LOW_SPEED = 31, //机动车低速行驶 + ENUM_AID_TYPE_DRAG_RACING = 32, //飙车 + ENUM_AID_TYPE_CHANGE_LANE_CONTINUOUSLY = 33, //连续变道 + ENUM_AID_TYPE_S_SHARP_DRIVING = 34, //蛇形行驶 + ENUM_AID_TYPE_LARGE_VEHICLE_OCCUPY_LINE = 35, //大车占道 + ENUM_AID_TYPE_ROAD_GROUP = 36, //道路人员聚集,与异常行为检测的人员聚集算法不同,应用场景不同, 交通事件应用在高速、隧道等交通场景,异常行为检测人员聚集应用场景是街面。 + ENUM_AID_TYPE_SINGLE_VEHICLE_BREAKDOWN = 37, //单车抛锚 + ENUM_AID_TYPE_BLACK_SMOKE_VEHICLE = 38, //黑烟车 + ENUM_AID_TYPE_VEHNOYIELDPEDEST = 39, //机动车不礼让行人 + ENUM_AID_TYPE_ILLEGALMANNEDVEH = 40, //机动车违法载人 + ENUM_AID_TYPE_ILLEGALMANNEDNONMOTORVEH = 41, //非机动车违法载人 + ENUM_AID_TYPE_UMBRELLATENTINSTALL = 42, //非机动车违规加装雨棚 + ENUM_AID_TYPE_NONMOTORVEHONVEHLANE = 43, //非机动车占用机动车道 + ENUM_AID_TYPE_WEARINGNOHELMET = 44, //非机动车未佩戴头盔事 + ENUM_AID_TYPE_PEDESTREDLIGHTRUNNING = 45, //行人闯红灯 + ENUM_AID_TYPE_PEDESTONNONMOTORVEHLANE = 46, //行人非机动车道行走 + ENUM_AID_TYPE_PEDESTONVEHLANE = 47, //行人机动车道行走 + ENUM_AID_TYPE_OCCUPYDEDICATEDLANE = 48,//占用专用车道 + ENUM_AID_TYPE_NOTDRIVEINDEDICATEDLANE = 49,//未按专用车道行驶 +}TRAFFIC_AID_TYPE_EX; + +// 交通事件信息 +typedef struct tagNET_DVR_AID_INFO +{ + BYTE byRuleID; // 规则序号,为规则配置结构下标,0-16 + BYTE byVisibilityLevel; // 能见度等级:0-保留;1-无雾~薄雾;2-薄雾~中雾;3-大雾~浓雾;4-浓雾及以上 + BYTE byRes1[2]; + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwAIDType; // 报警事件类型 + NET_DVR_DIRECTION struDirect; // 报警指向区域 + BYTE bySpeedLimit; //限速值,单位km/h[0,255] + BYTE byCurrentSpeed; //当前速度值,单位km/h[0,255] + BYTE byVehicleEnterState;//车辆出入状态 0-无效 1-驶入 2-驶出 + BYTE byState; //0-变化上传,1-轮巡上传,2-当前设备定时抓拍的数据上传,实际作用于平台形成图片序列,用于反查算法没有检测到的停车车辆(索引值2在“dwAIDType;//报警事件类型”为 “停车事件”的时候生效) + BYTE byParkingID[16]; //停车位编号 + DWORD dwAIDTypeEx; // 报警事件类型扩展,参考TRAFFIC_AID_TYPE_EX + BYTE byRes2[16]; // 保留字节 +}NET_DVR_AID_INFO, *LPNET_DVR_AID_INFO; + +// 交通事件报警 +typedef struct tagNET_DVR_AID_ALARM +{ + DWORD dwSize; // 结构长度 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_AID_INFO struAIDInfo; // 交通事件信息 + DWORD dwPicDataLen; // 返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据 + BYTE *pImage; // 指向图片的指针 + BYTE byRes[40]; // 保留字节 +}NET_DVR_AID_ALARM, *LPNET_DVR_AID_ALARM; + +// 车道队列结构体 +typedef struct tagNET_DVR_LANE_QUEUE +{ + NET_VCA_POINT struHead; //队列头 + NET_VCA_POINT struTail; //队列尾 + DWORD dwLength; //实际队列长度 单位为米 [0-500] +}NET_DVR_LANE_QUEUE, *LPNET_DVR_LANE_QUEUE; + +typedef enum tagTRAFFIC_DATA_VARY_TYPE +{ + NO_VARY, //无变化 + VEHICLE_ENTER, //车辆进入虚拟线圈 + VEHICLE_LEAVE, //车辆离开虚拟线圈 + UEUE_VARY //队列变化 +}TRAFFIC_DATA_VARY_TYPE; + +typedef struct tagNET_DVR_LANE_PARAM +{ + BYTE byRuleName[NAME_LEN]; //车道规则名称 + BYTE byRuleID; //规则序号,为规则配置结构下标,0-7 + BYTE byVaryType; //车道交通参数变化类型 参照 TRAFFIC_DATA_VARY_TYPE + BYTE byLaneType; //车道上行或下行 + BYTE byRes1; + DWORD dwLaneVolume; //车道流量 ,统计有多少车子通过 + DWORD dwLaneVelocity; //车道速度,公里计算 + DWORD dwTimeHeadway; //车头时距,以秒计算 + DWORD dwSpaceHeadway; //车头间距,以米来计算 + float fSpaceOccupyRation; //车道占有率,百分比计算(空间上) + NET_DVR_LANE_QUEUE struLaneQueue; //车道队列长度 + NET_VCA_POINT struRuleLocation; //线圈规则的中心点位置 + BYTE byRes2[32]; +}NET_DVR_LANE_PARAM, *LPNET_DVR_LANE_PARAM; + + +typedef struct tagNET_DVR_TPS_INFO +{ + DWORD dwLanNum; // 交通参数的车道数目 + NET_DVR_LANE_PARAM struLaneParam[MAX_TPS_RULE]; +}NET_DVR_TPS_INFO, *LPNET_DVR_TPS_INFO; + +typedef struct tagNET_DVR_TPS_ALARM +{ + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_TPS_INFO struTPSInfo; //交通事件信息 + BYTE byRes1[32]; //保留字节 +}NET_DVR_TPS_ALARM, *LPNET_DVR_TPS_ALARM; + +typedef enum tagTRAFFIC_DATA_VARY_TYPE_EX_ENUM +{ + ENUM_TRAFFIC_VARY_NO = 0x00, //无变化 + ENUM_TRAFFIC_VARY_VEHICLE_ENTER = 0x01, //车辆进入虚拟线圈 + ENUM_TRAFFIC_VARY_VEHICLE_LEAVE = 0x02, //车辆离开虚拟线圈 + ENUM_TRAFFIC_VARY_QUEUE = 0x04, //队列变化 + ENUM_TRAFFIC_VARY_STATISTIC = 0x08, //统计数据变化(每分钟变化一次包括平均速度,车道空间/时间占有率,交通状态) +}TRAFFIC_DATA_VARY_TYPE_EX_ENUM; + +typedef struct tagNET_DVR_LANE_PARAM_V41 +{ + BYTE byRuleName[NAME_LEN]; // 车道规则名称 + BYTE byRuleID; // 规则序号,为规则配置结构下标,0-7 + BYTE byLaneType; // 车道上行或下行 + BYTE byTrafficState; // 车道的交通状态,0-无效,1-畅通,2-拥挤,3-堵塞 + BYTE byLaneNo; //车道号 + DWORD dwVaryType; // 车道交通参数变化类型参照 TRAFFIC_DATA_VARY_TYPE_EX_ENUM,按位区分 + DWORD dwTpsType; // 数据变化类型标志,表示当前上传的统计参数中,哪些数据有效,参照ITS_TPS_TYPE,按位区分 + DWORD dwLaneVolume; // 车道流量,统计有多少车子通过 + DWORD dwLaneVelocity; // 车道速度,公里计算 + DWORD dwTimeHeadway ; // 车头时距,以秒计算 + DWORD dwSpaceHeadway; // 车头间距,以米来计算 + float fSpaceOccupyRation; // 车道占有率,百分比计算(空间上) + float fTimeOccupyRation; // 时间占有率,百分比计算 + DWORD dwLightVehicle; // 小型车数量 + DWORD dwMidVehicle; // 中型车数量 + DWORD dwHeavyVehicle; // 重型车数量 + NET_DVR_LANE_QUEUE struLaneQueue; // 车道队列长度 + NET_VCA_POINT struRuleLocation; // 规则位置虚拟线圈的中心 + DWORD dwOversizeVehicle; // 大型车数量 + BYTE byRes2[60]; // 保留 +}NET_DVR_LANE_PARAM_V41, *LPNET_DVR_LANE_PARAM_V41; + + +typedef struct tagNET_DVR_TPS_INFO_V41 +{ + DWORD dwLanNum; // 交通参数的车道数目 + NET_DVR_LANE_PARAM_V41 struLaneParam[MAX_TPS_RULE]; + DWORD dwSceneID;//场景ID + BYTE byRes[28]; //保留 +}NET_DVR_TPS_INFO_V41, *LPNET_DVR_TPS_INFO_V41; + +// 人脸规则配置 +typedef struct tagNET_DVR_FACEDETECT_RULECFG +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用 + BYTE byEventType; //警戒事件类型, 0-异常人脸; 1-正常人脸;2-异常人脸&正常人脸;4-多张人脸&异常人脸;5-多张人脸&正常人脸; 6-多张人脸&异常人脸&正常人脸; 7-多张人脸 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byUpFacePic; //是否上传人脸子图,0-否,1-是 + BYTE byRuleName[NAME_LEN]; + NET_VCA_POLYGON struVcaPolygon; // 人脸检测规则区域 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE bySensitivity; // 规则灵敏度 + WORD wDuration; // 触发人脸报警时间阈值 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_2];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byPicRecordEnable; /*2012-3-1是否启用图片存储, 0-不启用, 1-启用*/ + BYTE byRes1[3]; //保留字节 + /* + 警戒事件类型:(目前事件类型按位表示,可任意选择其中1种或者几种进行组合) + 0x00: 无效 + 0x01: 异常人脸 + 0x02: 正常人脸 + 0x04: 多张人脸 + 0x08: 戴墨镜人脸 + 0x10: 打电话人脸 + */ + DWORD dwEventTypeEx; //dwEventTypeEx字段若为0时,byEventType字段生效。若dwEventTypeEx、byEventType字段都有值时,以dwEventTypeEx字段为准。上层配置dwEventTypeEx字段后,会将值同步到byEventType中。 + BYTE byRes2[32]; //保留字节 +}NET_DVR_FACEDETECT_RULECFG, *LPNET_DVR_FACEDETECT_RULECFG; + +typedef struct tagNET_DVR_FACE_PIPCFG +{ + BYTE byEnable; //是否开启画中画 + BYTE byBackChannel; //背景通道号(面板通道) + BYTE byPosition; //叠加位置,0-左上,1-左下,2-右上,3-右下 + BYTE byPIPDiv; //分屏系数(人脸画面:面板画面),0-1:4,1-1:9,2-1:16 + BYTE byRes[4]; +}NET_DVR_FACE_PIPCFG, *LPNET_DVR_FACE_PIPCFG; + +typedef struct tagNET_DVR_FACEDETECT_RULECFG_V41 +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用 + BYTE byEventType; //警戒事件类型, 0-异常人脸; 1-正常人脸;2-异常人脸&正常人脸;4-多张人脸&异常人脸;5-多张人脸&正常人脸; 6-多张人脸&异常人脸&正常人脸; 7-多张人脸 + BYTE byUpLastAlarm; //2011-04-06 是否先上传最近一次的报警 + BYTE byUpFacePic; //是否上传人脸子图,0-否,1-是 + BYTE byRuleName[NAME_LEN]; + NET_VCA_POLYGON struVcaPolygon; // 人脸检测规则区域 + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE bySensitivity; // 规则灵敏度 + WORD wDuration; // 触发人脸报警时间阈值 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//布防时间 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType; //处理方式 + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byPicRecordEnable; /*2012-10-22是否启用图片存储, 0-不启用, 1-启用*/ + BYTE byRes1; + WORD wAlarmDelay; //2012-10-22智能报警延时,0-5s,1-10,2-30s,3-60s,4-120s,5-300s,6-600s + NET_DVR_FACE_PIPCFG struFacePIP; //2012-11-7画中画参数 + WORD wRelSnapChan[MAX_REL_SNAPCHAN_NUM]; //关联抓图通道,当主通道报警时,同时会上传关联通道的抓拍图片,0表示不关联,其他值为关联通道号 + BYTE byRes2[2]; //保留字节 + /* + 警戒事件类型:(目前事件类型按位表示,可任意选择其中1种或者几种进行组合) + 0x00: 无效 + 0x01: 异常人脸 + 0x02: 正常人脸 + 0x04: 多张人脸 + 0x08: 戴墨镜人脸 + 0x10: 打电话人脸 + */ + DWORD dwEventTypeEx; //dwEventTypeEx字段若为0时,byEventType字段生效。若dwEventTypeEx、byEventType字段都有值时,以dwEventTypeEx字段为准。上层配置dwEventTypeEx字段后,会将值同步到byEventType中。 + BYTE byRes[16]; //保留字节 +}NET_DVR_FACEDETECT_RULECFG_V41, *LPNET_DVR_FACEDETECT_RULECFG_V41; + +typedef struct tagNET_DVR_FACEDETECT_ALARM +{ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byRuleName[NAME_LEN]; //规则名称 + NET_VCA_TARGET_INFO struTargetInfo;//报警目标信息 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + BYTE byAlarmPicType; // 0-异常人脸报警图片 1- 人脸图片,2-多张人脸, 3-戴墨镜人脸, 4-打电话人脸 + BYTE byPanelChan; /*2012-3-1人脸通道关联的面板通道*/ + BYTE byRelAlarmPicNum; //关联通道报警图片数量 + BYTE byRes1; + DWORD dwFacePicDataLen;//人脸图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + DWORD dwAlarmID; //报警ID,用以标识通道间关联产生的组合报警,0表示无效 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes2[42]; // 保留字节 + BYTE *pFaceImage; //指向人脸图指针 + BYTE *pImage; //指向图片的指针 +}NET_DVR_FACEDETECT_ALARM, *LPNET_DVR_FACEDETECT_ALARM; + +typedef struct tagNET_DVR_EVENT_PARAM_UNION +{ + DWORD uLen[3]; // 联合体大小为12字节 + DWORD dwHumanIn; //有无人接近 0 - 无人 1- 有人 + float fCrowdDensity; // 人员聚集值 +}NET_DVR_EVENT_PARAM_UNION, *LPNET_DVR_EVENT_PARAM_UNION; + +// 目前只有有人无人事件和人员聚集事件实时报警上传 +typedef struct tagNET_DVR_EVENT_INFO +{ + BYTE byRuleID; // Rule ID + BYTE byRes[3]; // 保留字节 + BYTE byRuleName[NAME_LEN]; // 规则名称 + DWORD dwEventType; // 参照VCA_EVENT_TYPE + NET_DVR_EVENT_PARAM_UNION uEventParam; // +}NET_DVR_EVENT_INFO, *LPNET_DVR_EVENT_INFO; + +typedef struct tagNET_DVR_EVENT_INFO_LIST +{ + BYTE byNum; // 事件实时信息个数 + BYTE byRes1[3]; // 保留字节 + NET_DVR_EVENT_INFO struEventInfo[MAX_RULE_NUM]; // 事际实时信息 +}NET_DVR_EVENT_INFO_LIST,*LPNET_DVR_EVENT_INFO_LIST; + +typedef struct tagNET_DVR_RULE_INFO_ALARM +{ + DWORD dwSize; // 结构体大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_EVENT_INFO_LIST struEventInfoList; //事件信息列表 + BYTE byRes2[40]; // 保留字节 +}NET_DVR_RULE_INFO_ALARM, *LPNET_DVR_RULE_INFO_ALARM; + +//单条场景时间段 +typedef struct tagNET_DVR_ONE_SCENE_TIME +{ + BYTE byActive; //0 -无效,1–有效 + BYTE byRes1[3]; //保留 + DWORD dwSceneID; //场景ID + NET_DVR_SCHEDTIME struEffectiveTime; //场景起效时间 + BYTE byRes2[16]; //保留 +}NET_DVR_ONE_SCENE_TIME, *LPNET_DVR_ONE_SCENE_TIME ; + +//场景起效时间段配置 +typedef struct tagNET_DVR_SCENE_TIME_CFG +{ + DWORD dwSize; //结构大小 + NET_DVR_ONE_SCENE_TIME struSceneTime[MAX_SCENE_TIMESEG_NUM]; //场景时间段数组 + BYTE byRes[64]; //保留 +}NET_DVR_SCENE_TIME_CFG, *LPNET_DVR_SCENE_TIME_CFG; + + +//单条场景配置信息 +typedef struct tagNET_DVR_ONE_SCENE_CFG_ +{ + BYTE byEnable; //是否启用该场景,0-不启用 1- 启用 + BYTE byDirection; //显示方向 1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byRes1[2]; //保留 + DWORD dwSceneID; //场景ID(只读), 0 - 表示该场景无效 + BYTE bySceneName[NAME_LEN]; //场景名称 + NET_DVR_PTZPOS struPtzPos; //ptz 坐标 + DWORD dwTrackTime; //球机时间[5,300] 秒,TFS(交通取证)模式下有效 + BYTE byRes2[24]; //保留 +}NET_DVR_ONE_SCENE_CFG, *LPNET_DVR_ONE_SCENE_CFG; + +//场景配置结构体 +typedef struct tagNET_DVR_SCENE_CFG +{ + DWORD dwSize; //结构大小 + NET_DVR_ONE_SCENE_CFG struSceneCfg[MAX_ITS_SCENE_NUM]; //场景配置信息 + BYTE byRes[40]; //保留 +}NET_DVR_SCENE_CFG,*LPNET_DVR_SCENE_CFG; + +//多场景操作条件 +typedef struct tagNET_DVR_SCENE_COND +{ + DWORD dwSize; //结构大小 + LONG lChannel; //通道号 + DWORD dwSceneID; //场景ID, 0-表示该场景无效 + BYTE byRes[48]; //保留 +}NET_DVR_SCENE_COND, *LPNET_DVR_SCENE_COND; + +//取证方式 +typedef struct tagNET_DVR_FORENSICS_MODE +{ + DWORD dwSize; //结构大小 + BYTE byMode; // 0-手动取证 ,1-自动取证,2-半自动和静态取证 + BYTE byRes[23]; //保留 +}NET_DVR_FORENSICS_MODE,*LPNET_DVR_FORENSICS_MODE; + +//报警场景信息 +typedef struct tagNET_DVR_SCENE_INFO_ +{ + DWORD dwSceneID; //场景ID, 0 - 表示该场景无效 + BYTE bySceneName[NAME_LEN]; //场景名称 + BYTE byDirection; //显示方向 1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byRes1[3]; //保留 + NET_DVR_PTZPOS struPtzPos; //Ptz 坐标 + BYTE byRes2[64] ; //保留 +}NET_DVR_SCENE_INFO,*LPNET_DVR_SCENE_INFO; + +//交通事件报警(扩展) +typedef struct tagNET_DVR_AID_ALARM_V41 +{ + DWORD dwSize; //结构长度 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_AID_INFO struAIDInfo; //交通事件信息 + NET_DVR_SCENE_INFO struSceneInfo; //场景信息 + DWORD dwPicDataLen; //图片长度 + BYTE *pImage; //指向图片的指针 + // 0-数据直接上传; 1-云存储服务器URL(3.7Ver)原先的图片数据变成URL数据,图片长度变成URL长度 + BYTE byDataType; + BYTE byLaneNo; //关联车道号 + WORD wMilliSecond; //时标毫秒 + //显示点编号(路口编号、内部编号) + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN/*48*/]; + BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//设备编号 + DWORD dwXmlLen;//XML报警信息长度 + char* pXmlBuf;// XML报警信息指针,其XML对应到EventNotificationAlert XML Block + BYTE byTargetType;// 检测的目标类型,0~未知,1~行人、2~二轮车、3~三轮车(行人检测中返回) + BYTE byRuleID;//规则ID,1-4,当congestion事件配置了规则区域时返回 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byBrokenNetHttp; // 断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[3]; // 保留字节 + DWORD dwPlateSmallPicDataLen; //车牌小图图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pPlateSmallImage; // //指向车牌小图的指针 +#else + char* pPlateSmallImage; //指向车牌小图的指针 + BYTE byRes1[4]; +#endif +}NET_DVR_AID_ALARM_V41, *LPNET_DVR_AID_ALARM_V41; + +//交通统计信息报警(扩展) +typedef struct tagNET_DVR_TPS_ALARM_V41 +{ + DWORD dwSize; // 结构体大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前端设备信息 + NET_DVR_TPS_INFO_V41 struTPSInfo; // 交通参数统计信息 + //显示点编号(路口编号、内部编号) + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN/*48*/]; + BYTE byDeviceID[DEVICE_ID_LEN/*48*/];//设备编号 + DWORD dwStartTime; // 开始统计时间 + DWORD dwStopTime; // 结束统计时间 + BYTE byRes[24]; // 保留 +} NET_DVR_TPS_ALARM_V41,*LPNET_DVR_TPS_ALARM_V41; + +/*******************************智能交通事件 end*****************************************/ + +#define XXX_MAJOR_VERSION 2 + +/* 子版本号,性能优化、局部结构调整、模块内集成其他库的主版本提升时递增,最大31 */ + +#define XXX_SUB_VERSION 3 + +/* 修正版本号,修正bug后递增,最大31 */ + +#define XXX_REVISION_VERSION 4 + +typedef struct tagNET_DVR_VCA_VERSION +{ + WORD wMajorVersion; // 主版本号 + WORD wMinorVersion; // 次版本号 + WORD wRevisionNumber; // 修正号 + WORD wBuildNumber; // 编译号 + WORD wVersionYear; // 版本日期-年 + BYTE byVersionMonth; // 版本日期-月 + BYTE byVersionDay; // 版本日期-日 + BYTE byType;/*算法库类型名称,0-保留,1-人脸属性,2-异常行为检测,3-人体属性,4-人脸抓拍,5人脸识别 6-人脸对比,7-学生站立检测, + 8-区域人数统计,9-人脸评分库,10-安全帽检测,11-电梯检测算法库,12-客流量统计,13-(私有目标结构化算法)HMS, + 14-教师行为检测, 15-人员密度,16-人数异常,17-离岗检测,18-人员滞留,19-人脸建模抓拍,20-HMS建模,21-态势分析, + 22-城管算法,23-排队检测*/ + BYTE byRes[7]; // 保留字节 +}NET_DVR_VCA_VERSION, *LPNET_DVR_VCA_VERSION; + + +/******************************智能 end***********************************/ + +/******************************车牌识别 begin******************************************/ +typedef struct tagNET_DVR_PLATE_PARAM +{ + BYTE byPlateRecoMode; //车牌识别的模式,默认为1(视频触发模式) + BYTE byBelive; //整牌置信度阈值, 只用于视频识别方式, 根据背景复杂程度设置, 误触发率高就设高, 漏车率高就设低, 建议在80-90范围内 + BYTE byRes[22]; //保留字节 +}NET_DVR_PALTE_PARAM, *LPNET_DVR_PALTE_PARAM; + +typedef struct tagNET_DVR_PLATECFG +{ + DWORD dwSize; + DWORD dwEnable; /* 是否启用视频车牌识别 0-否 1-是 */ + BYTE byPicProType; //报警时图片处理方式 0-不处理 非0-上传 + BYTE byRes1[3]; // 保留字节 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_DVR_PALTE_PARAM struPlateParam; // 车牌识别参数配置 + NET_DVR_HANDLEEXCEPTION struHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];//布防时间 + BYTE byRelRecordChan[MAX_CHANNUM]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes[20]; // 保留字节 +}NET_DVR_PLATECFG, *LPNET_DVR_PLATECFG; + +// 车牌识别结果子结构 +typedef struct tagNET_DVR_PLATE_INFO +{ + BYTE byPlateType; //车牌类型 + BYTE byColor; //车牌颜色 + BYTE byBright; //车牌亮度 + BYTE byLicenseLen; //车牌字符个数 + BYTE byEntireBelieve; //整个车牌的置信度,-100 + BYTE byRegion; // 区域索引值 0-保留,1-欧洲(EU),2-俄语区域(ER),3-欧洲&俄罗斯(EU&CIS) ,4-中东(ME),5-亚太(APAC),6-非美(非洲和美洲,AfandAM),0xff-所有 + BYTE byCountry; // 国家索引值,参照枚举COUNTRY_INDEX(不支持"COUNTRY_ALL = 0xff, //ALL 全部") + BYTE byArea; //区域(省份),各国家内部区域枚举,阿联酋参照 EMI_AREA + BYTE byPlateSize; //车牌尺寸,0~未知,1~long, 2~short(中东车牌使用) + /*附加信息标识(即是否有NET_DVR_VEHICLE_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ + BYTE byAddInfoFlag; + //该字段是在byCountry索引基础上,扩展了区域索引,之后使用该字段代替byCountry,优先使用wCRIndex字段 + //为了兼容老用户,如果该字段值大于256(即新增区域),则byCountry赋值为0xfd(国家字段无效)。 + WORD wCRIndex ;//国家/地区索引,索引值参考_CR_ INDEX_ + BYTE byRes[4]; //保留 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE* pAddInfoBuffer; +#else + /*附加信息指针,指向NET_DVR_VEHICLE_ADDINFO结构体*/ + BYTE* pAddInfoBuffer; + BYTE byRes2[4]; +#endif + char sPlateCategory[MAX_CATEGORY_LEN/*8*/];//车牌附加信息, 即中东车牌中车牌号码旁边的小字信息,(目前只有中东地区支持) + DWORD dwXmlLen; //XML报警信息长度 + char* pXmlBuf; // XML报警信息指针,报警类型为 COMM_ITS_PLATE_RESUL、COMM_PLATE_RESULT_V50时有效,其XML对应到EventNotificationAlert XML Block + NET_VCA_RECT struPlateRect; //车牌位置 + char sLicense[MAX_LICENSE_LEN]; //车牌号码,注:中东车牌需求把小字也纳入车牌号码,小字和车牌号中间用空格分隔 + BYTE byBelieve[MAX_LICENSE_LEN]; //各个识别字符的置信度,如检测到车牌"浙A12345", 置信度为,20,30,40,50,60,70,则表示"浙"字正确的可能性只有%,"A"字的正确的可能性是% +}NET_DVR_PLATE_INFO, *LPNET_DVR_PLATE_INFO; + +typedef struct tagNET_DVR_PLATERECO_RESULE +{ + DWORD dwSize; + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; // 前段设备信息 + NET_DVR_PLATE_INFO struPlateInfo; + DWORD dwPicDataLen; //返回图片的长度 为0表示没有图片,大于0表示该结构后面紧跟图片数据*/ + DWORD dwRes[4]; //保留,设置为0 + BYTE *pImage; //指向图片的指针 +}NET_DVR_PLATERECO_RESULE, *LPNET_DVR_PLATERECO_RESULE; + +/******************************车牌识别 end******************************************/ + +/*******************************视频综合平台***********************************/ +typedef struct +{ + NET_DVR_TIME strLogTime; + DWORD dwMajorType; //Main type 1-alarm; 2-abnormal; 3-operation; 0xff-all + DWORD dwMinorType; //Hypo-Type 0-all; + BYTE sPanelUser[MAX_NAMELEN]; //user ID for local panel operation + BYTE sNetUser[MAX_NAMELEN];//user ID for network operation + NET_DVR_IPADDR struRemoteHostAddr;//remote host IP + DWORD dwParaType;//parameter type + DWORD dwChannel;//channel number + DWORD dwDiskNumber;//HD number + DWORD dwAlarmInPort;//alarm input port + DWORD dwAlarmOutPort;//alarm output port + DWORD dwInfoLen; + BYTE byDevSequence;//槽位号 + BYTE byMacAddr[MACADDR_LEN];//MAC地址,6 + BYTE sSerialNumber[SERIALNO_LEN];//序列号,48 + char sInfo[LOG_INFO_LEN - SERIALNO_LEN - MACADDR_LEN - 1 ]; +}NET_DVR_LOG_MATRIX, *LPNET_DVR_LOG_MATRIX; + +//2009-11-21 视频综合平台 +typedef struct tagVEDIOPLATLOG +{ + BYTE bySearchCondition;//搜索条件,0-按槽位号搜索,1-按序列号搜索,2-按MAC地址进行搜索 + //槽位号,0-79:对应子系统的槽位号; + //0xff:表示搜索所有的日志,包括78K和所有6467; + //0xfe:表示搜索78K上的日志;0xfd:子域日志;0xfc:域日志。。 + BYTE byDevSequence; + BYTE sSerialNumber[SERIALNO_LEN];//序列号,48 + BYTE byMacAddr[MACADDR_LEN];//MAC地址,6 +} NET_DVR_VEDIOPLATLOG, *LPNET_DVR_VEDIOPLATLOG; + +typedef struct tagNET_DVR_CODESYSTEMABILITY +{ + DWORD dwSize; + DWORD dwAbilityVersion;//能力集版本号,高16位表示主版本,低16位表示次版本 + DWORD dwSupportMaxVideoFrameRate;//单位(K) + /*按位: + 0:定时录像; + 1:定时|事件触发录像 + 2:移动侦测录像; + 3:网络开关量报警录像; + 4:移动侦测|网络开关量报警录像; + 5:移动侦测&网络开关量报警录像; + 6:周界防范触发录像; + 7:人脸检测触发录像; + 8:车牌识别触发录像; + 9:手动录像*/ + DWORD dwSupportRecordType; + BYTE bySupportLinkMode;//按位:第0位:表示主码流,第1位:表示子码流 + BYTE bySupportStringRow;//支持字符叠加行数 + BYTE bySupportHideNum;//支持视频遮挡数量 + BYTE byRes1; + /*0-DCIF,1-CIF,2-QCIF,3-4CIF,4-2CIF,6-QVGA(320*240), 16-VGA,17-UXGA,18-SVGA,19-HD720p,20-XVGA,21-HD900p,22-SXGAp,27-HD1080i,28-2560*1920,29-1600*304,30-2048*1536,31-2448*2048,32-2448*1200,33-2448*800 ,34-XGA(1024x768),35-SXGA(1280x1024)*/ + BYTE byMainStreamSupportResolution[8];//主码流支持的分辨率,按位 + BYTE bySubStreamSupportResolution[8];//子码流支持的分辨率,按位 + BYTE byEventStreamSupportResolution[8];//事件触发码流支持的分辨率,按位 + BYTE byNotSupportPreview;//是否支持预览,1-不支持,0-支持 + BYTE byNotSupportStorage;//是否支持存储,1-不支持,0-支持 + BYTE byRes2[98];//保留 +}NET_DVR_CODESYSTEMABILITY, *LPNET_DVR_CODESYSTEMABILITY; + +/********************************end*******************************************/ + +/******************************抓拍机*******************************************/ +//IO输入配置 +typedef struct tagNET_DVR_IO_INCFG +{ + DWORD dwSize; + BYTE byIoInStatus;//输入的IO口状态,0-下降沿,1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRes[3];//保留字节 +}NET_DVR_IO_INCFG, *LPNET_DVR_IO_INCFG; + +//IO输出配置 +typedef struct tagNET_DVR_IO_OUTCFG +{ + DWORD dwSize; + BYTE byDefaultStatus;//IO默认状态:0-低电平,1-高电平 + BYTE byIoOutStatus;//IO起效时状态:0-低电平,1-高电平,2-脉冲 + WORD wAheadTime;//输出IO提前时间,单位us + DWORD dwTimePluse;//脉冲间隔时间,单位us + DWORD dwTimeDelay;//IO有效持续时间,单位us + BYTE byFreqMulti; //倍频,数值范围[1,15] + BYTE byDutyRate; //占空比,[0,40%] + BYTE byRes[2]; +}NET_DVR_IO_OUTCFG, *LPNET_DVR_IO_OUTCFG; + +//闪光灯配置 +typedef struct tagNET_DVR_FLASH_OUTCFG +{ + DWORD dwSize; + BYTE byMode;//闪光灯闪烁模式,0-不闪,1-闪,2-关联闪,3-轮闪 + BYTE byRelatedIoIn;//闪光灯关联的输入IO号(关联闪时此参数有效) + BYTE byRecognizedLane; /*关联的IO号,按位表示,bit0表示IO1是否关联,0-不关联,1-关联*/ + BYTE byDetectBrightness;/*自动检测亮度使能闪光灯0-不检测;1-检测*/ + BYTE byBrightnessThreld;/*使能闪光灯亮度阈值,范围[0,100],高于阈值闪*/ + BYTE byStartHour; //开始时间-小时,取值范围0-23 + BYTE byStartMinute; //开始时间-分,取值范围0-59 + BYTE byEndHour; //结束时间-小时,取值范围0-23 + BYTE byEndMinute; //结束时间-分,取值范围0-59 + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 + BYTE byRes[2]; +}NET_DVR_FLASH_OUTCFG, *LPNET_DVR_FLASH_OUTCFG; + +//红绿灯功能(2个IO输入一组) +typedef struct tagNET_DVR_LIGHTSNAPCFG +{ + DWORD dwSize; + BYTE byLightIoIn;//红绿灯的IO 号 + BYTE byTrigIoIn;//触发的IO号 + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE byTrafficLight; //0-高电平红灯,低电平绿灯;1-高电平绿灯,低电平红灯 + BYTE bySnapTimes1; //红灯抓拍次数1,0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //绿灯抓拍次数2,0-不抓拍,非0-连拍次数,最大5次 + BYTE byRes1[2]; + WORD wIntervalTime1[MAX_INTERVAL_NUM];//红灯连拍间隔时间,ms + WORD wIntervalTime2[MAX_INTERVAL_NUM];//绿灯连拍间隔时间,ms + BYTE byRecord;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE bySessionTimeout;//闯红灯周期录像超时时间(秒) + BYTE byPreRecordTime;//闯红灯录像片段预录时间(秒) + BYTE byVideoDelay;//闯红灯录像片段延时时间(秒) + BYTE byRes2[32];//保留字节 +}NET_DVR_LIGHTSNAPCFG, *LPNET_DVR_LIGHTSNAPCFG; + +//测速功能(2个IO输入一组) +typedef struct tagNET_DVR_MEASURESPEEDCFG +{ + DWORD dwSize; + BYTE byTrigIo1; //测速第1线圈 + BYTE byTrigIo2; //测速第2线圈 + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE byTestSpeedTimeOut;//测速模式超时时间,单位s + DWORD dwDistance;//线圈距离,cm + BYTE byCapSpeed;//测速模式起拍速度,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes1; //线圈1抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //线圈2抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + WORD wIntervalTime1[MAX_INTERVAL_NUM];//线圈1连拍间隔时间,ms + WORD wIntervalTime2[MAX_INTERVAL_NUM];//线圈2连拍间隔时间,ms + BYTE byRes[32];//保留字节 +}NET_DVR_MEASURESPEEDCFG, *LPNET_DVR_MEASURESPEEDCFG; + + +//配置条件 +typedef struct tagNET_DVR_CLOUDSTORAGE_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byRes1[64]; +}NET_DVR_CLOUDSTORAGE_COND,*LPNET_DVR_CLOUDSTORAGE_COND; + +//配置结构 +typedef struct tagNET_DVR_POOLPARAM +{ + DWORD dwPoolID;// 云存储分配节点号 + BYTE byRes[4]; +}NET_DVR_POOLPARAM,*LPNET_DVR_POOLPARAM; + +typedef struct tagNET_DVR_CLOUDSTORAGE_CFG +{ + DWORD dwSize; + BYTE byEnable;//0-不开启,1-开启 + BYTE byRes[3]; + NET_DVR_IPADDR struIP; + WORD wPort;//数据端口 + BYTE byRes1[2]; + char szUser[CLOUD_NAME_LEN/*48*/]; //用户名 + char szPassword[CLOUD_PASSWD_LEN/*48*/]; // 密码 + NET_DVR_POOLPARAM struPoolInfo[16];//数组0表示卡口录像池,数组1表示违章录像池,数组2表示车辆侦测数据池(IPC/D) + BYTE byRes2[128]; +}NET_DVR_CLOUDSTORAGE_CFG,*LPNET_DVR_CLOUDSTORAGE_CFG; + +typedef struct tagNET_DVR_PARKLAMP_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byParkingIndex; //相对车位号(1~4) + BYTE byRes[15]; //保留 +}NET_DVR_PARKLAMP_COND, *LPNET_DVR_PARKLAMP_COND; + +typedef struct tagNET_DVR_PARKLAMP_INFOCFG +{ + DWORD dwSize; + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + char sParkingNo[MAX_LICENSE_LEN/*16*/];//车位编号(实际的车位编号) + BYTE byLampFlicker;//0~不闪烁 1 ~闪烁 (车位指示灯闪烁) + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (车位指示灯颜色) + BYTE byStatus; //车位状态 0-无车,1-有车 + BYTE byColorDepth; //车身颜色深浅,0-深色,1-浅色,0xff-未知 + BYTE byColor;//车身颜色,0-其他色,1-白色,2-银色,3-灰色,4-黑色,5-红色,6-深蓝,7-蓝色,8-黄色,9-绿色,10-棕色,11-粉色,12-紫色,0xff-未进行车身颜色识别 + //车辆品牌类型识别; 参考枚举类型 VLR_VEHICLE_CLASS + BYTE byVehicleLogoRecog; + BYTE byRes[250];//保留 +}NET_DVR_PARKLAMP_INFOCFG, *LPNET_DVR_PARKLAMP_INFOCFG; + +//视频参数配置 +typedef struct tagNET_DVR_VIDEOEFFECT +{ + BYTE byBrightnessLevel; /*0-100*/ + BYTE byContrastLevel; /*0-100*/ + BYTE bySharpnessLevel; /*0-100*/ + BYTE bySaturationLevel; /*0-100*/ + BYTE byHueLevel; /*0-100,(保留)*/ + BYTE byEnableFunc; //使能,按位表示,bit0-SMART IR(防过曝),bit1-低照度,bit2-强光抑制使能,0-否,1-是 + BYTE byLightInhibitLevel; //强光抑制等级,[1-3]表示等级 + BYTE byGrayLevel; //灰度值域,0-[0-255],1-[16-235] +}NET_DVR_VIDEOEFFECT, *LPNET_DVR_VIDEOEFFECT; + +//增益配置 +typedef struct tagNET_DVR_GAIN +{ + BYTE byGainLevel; /*增益:0-100*/ + BYTE byGainUserSet; /*用户自定义增益;0-100,对于抓拍机,是CCD模式下的抓拍增益*/ + BYTE byRes[2]; + DWORD dwMaxGainValue;/*最大增益值,单位dB*/ +}NET_DVR_GAIN, *LPNET_DVR_GAIN; + +//白平衡配置 +typedef struct tagNET_DVR_WHITEBALANCE +{ +BYTE byWhiteBalanceMode; /*0-手动白平衡(MWB),1-自动白平衡1(AWB1),2-自动白平衡2 (AWB2),3-自动控制改名为锁定白平衡(Locked WB), + 4-室外(Indoor),5-室内(Outdoor)6-日光灯(Fluorescent Lamp),7-钠灯(Sodium Lamp), + 8-自动(Auto-Track)9-一次白平衡(One Push),10-室外自动(Auto-Outdoor), + 11-钠灯自动 (Auto-Sodiumlight),12-水银灯(Mercury Lamp),13-自动白平衡(Auto), +14-白炽灯 (IncandescentLamp),15-暖光灯(Warm Light Lamp),16-自然光(Natural Light) */ +BYTE byWhiteBalanceModeRGain; /*手动白平衡时有效,手动白平衡 R增益*/ +BYTE byWhiteBalanceModeBGain; /*手动白平衡时有效,手动白平衡 B增益*/ +BYTE byRes[5]; +}NET_DVR_WHITEBALANCE, *LPNET_DVR_WHITEBALANCE; + +//曝光控制 +typedef struct tagNET_DVR_EXPOSURE +{ + BYTE byExposureMode; /*0 手动曝光 1自动曝光*/ + BYTE byAutoApertureLevel; /* 自动光圈灵敏度, 0-10 */ + BYTE byRes[2]; + DWORD dwVideoExposureSet; /* 自定义视频曝光时间(单位us)*//*注:自动曝光时该值为曝光最慢值 新增20-1s(1000000us)*/ + DWORD dwExposureUserSet; /* 自定义曝光时间,在抓拍机上应用时,CCD模式时是抓拍快门速度*/ + DWORD dwRes; +} NET_DVR_EXPOSURE, *LPNET_DVR_EXPOSURE; + +//宽动态配置 +typedef struct tagNET_DVR_WDR +{ + BYTE byWDREnabled; /*宽动态:0 dsibale 1 enable 2 auto*/ + BYTE byWDRLevel1; /*0-F*/ + BYTE byWDRLevel2; /*0-F*/ + BYTE byWDRContrastLevel; /*0-100*/ + BYTE byRes[16]; +} NET_DVR_WDR, *LPNET_DVR_WDR; + +typedef struct tagNET_DVR_WDR_CFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_WDR struWDR; //配置信息 +}NET_DVR_WDR_CFG, *LPNET_DVR_WDR_CFG; + + +//日夜转换功能配置 +typedef struct tagNET_DVR_DAYNIGHT +{ + BYTE byDayNightFilterType; /*日夜切换:0-白天,1-夜晚,2-自动,3-定时,4-报警输入触发, 5-自动模式2(无光敏),6-黑光,7-黑光自动,8-黑光定时*/ + BYTE bySwitchScheduleEnabled; /*0 dsibale 1 enable,(保留)*/ + //定时模式参数 + BYTE byBeginTime; /*开始时间(小时),0-23*/ + BYTE byEndTime; /*结束时间(小时),0-23*/ + //模式2 + BYTE byDayToNightFilterLevel; //0-7 + BYTE byNightToDayFilterLevel; //0-7 + BYTE byDayNightFilterTime;//(60秒) + //定时模式参数 + BYTE byBeginTimeMin; //开始时间(分),0-59 + BYTE byBeginTimeSec; //开始时间(秒),0-59 + BYTE byEndTimeMin; //结束时间(分),0-59 + BYTE byEndTimeSec; //结束时间(秒),0-59 + //报警输入触发模式参数 + BYTE byAlarmTrigState; //报警输入触发状态,0-白天,1-夜晚 +} NET_DVR_DAYNIGHT, *LPNET_DVR_DAYNIGHT; + +//Gamma校正 +typedef struct tagNET_DVR_GAMMACORRECT +{ + BYTE byGammaCorrectionEnabled; /*0 dsibale 1 enable*/ + BYTE byGammaCorrectionLevel; /*0-100*/ + BYTE byRes[6]; +} NET_DVR_GAMMACORRECT, *LPNET_DVR_GAMMACORRECT; + +//背光补偿配置 +typedef struct tagNET_DVR_BACKLIGHT +{ + BYTE byBacklightMode; /*背光补偿:0 off 1 UP、2 DOWN、3 LEFT、4 RIGHT、5MIDDLE、6自定义,10-开,11-自动,12-多区域背光补偿*/ + BYTE byBacklightLevel; /*0x0-0xF*/ + BYTE byRes1[2]; + DWORD dwPositionX1; //(X坐标1) + DWORD dwPositionY1; //(Y坐标1) + DWORD dwPositionX2; //(X坐标2) + DWORD dwPositionY2; //(Y坐标2) + BYTE byRes2[4]; +} NET_DVR_BACKLIGHT, *LPNET_DVR_BACKLIGHT; + +//数字降噪功能 +typedef struct tagNET_DVR_NOISEREMOVE +{ + BYTE byDigitalNoiseRemoveEnable; /*0-不启用,1-普通模式数字降噪,2-专家模式数字降噪*/ + BYTE byDigitalNoiseRemoveLevel; /*普通模式数字降噪级别:0x0-0xF*/ + BYTE bySpectralLevel; /*专家模式下空域强度:0-100*/ + BYTE byTemporalLevel; /*专家模式下时域强度:0-100*/ + BYTE byDigitalNoiseRemove2DEnable; /* 抓拍帧2D降噪,0-不启用,1-启用 */ + BYTE byDigitalNoiseRemove2DLevel; /* 抓拍帧2D降噪级别,0-100 */ + BYTE byRes[2]; +} NET_DVR_NOISEREMOVE, *LPNET_DVR_NOISEREMOVE; + +//CMOS模式下前端镜头配置 +typedef struct tagNET_DVR_CMOSMODCFG +{ + BYTE byCaptureMod; //抓拍模式:0-抓拍模式1;1-抓拍模式2 + BYTE byBrightnessGate;//亮度阈值 + BYTE byCaptureGain1; //抓拍增益1,0-100 + BYTE byCaptureGain2; //抓拍增益2,0-100 + DWORD dwCaptureShutterSpeed1;//抓拍快门速度1 + DWORD dwCaptureShutterSpeed2;//抓拍快门速度2 + BYTE byRes[4]; +}NET_DVR_CMOSMODECFG, *LPNET_DVR_CMOSMODECFG; + +//前端参数配置 +typedef struct tagNET_DVR_CAMERAPARAMCFG +{ + DWORD dwSize; + NET_DVR_VIDEOEFFECT struVideoEffect;/*亮度、对比度、饱和度、锐度、色调配置*/ + NET_DVR_GAIN struGain;/*自动增益*/ + NET_DVR_WHITEBALANCE struWhiteBalance;/*白平衡*/ + NET_DVR_EXPOSURE struExposure; /*曝光控制*/ + NET_DVR_GAMMACORRECT struGammaCorrect;/*Gamma校正*/ + NET_DVR_WDR struWdr;/*宽动态*/ + NET_DVR_DAYNIGHT struDayNight;/*日夜转换*/ + NET_DVR_BACKLIGHT struBackLight;/*背光补偿*/ + NET_DVR_NOISEREMOVE struNoiseRemove;/*数字降噪*/ + BYTE byPowerLineFrequencyMode; /*0-50HZ; 1-60HZ*/ + /* + 0-自动光圈, + 1-手动光圈, + 2-P-Iris1, + 3-Union 3-9mm F1.6-2.7 (T5280-PQ1) [IPC5.1.7] + 4-Union 2.8-12mm F1.6-2.7 (T5289-PQ1) [IPC5.1.7] + 5-private 3.8-16mm F1.5(HV3816P-8MPIR) + 6-private 11-40mm F1.7 (HV1140P-8MPIR) + 7-private 2.7-12mm F1.2(TV2712P-MPIR) + 8- MZ5721D-12MPIR + 9- MZ1555D-12MPIR + 10- MZ5721D-12MPIR(RS485) + 11- MZ1555D-12MPIR(RS485) + */ + BYTE byIrisMode; + BYTE byMirror ; /* 镜像:0 off,1- leftright,2- updown,3-center */ + BYTE byDigitalZoom; /*数字缩放:0 dsibale 1 enable*/ + BYTE byDeadPixelDetect; /*坏点检测,0 dsibale 1 enable*/ + BYTE byBlackPwl;/*黑电平补偿 , 0-255*/ + BYTE byEptzGate;// EPTZ开关变量:0-不启用电子云台,1-启用电子云台 + BYTE byLocalOutputGate;//本地输出开关变量0-本地输出关闭1-本地BNC输出打开 2-HDMI输出关闭 11-缩放输出,12-裁剪输出,13-裁剪缩放输出 + //20-HDMI_720P50输出开 + //21-HDMI_720P60输出开 + //22-HDMI_1080I60输出开 + //23-HDMI_1080I50输出开 + //24-HDMI_1080P24输出开 + //25-HDMI_1080P25输出开 + //26-HDMI_1080P30输出开 + //27-HDMI_1080P50输出开 + //28-HDMI_1080P60输出开 + //40-SDI_720P50, + //41-SDI_720P60, + //42-SDI_1080I50, + //43-SDI_1080I60, + //44-SDI_1080P24, + //45-SDI_1080P25, + //46-SDI_1080P30, + //47-SDI_1080P50, + //48-SDI_1080P60, + //49-SDI_720P25 + //50-SDI_720P30 + //51-SDI_1080I25 + //52-SDI_1080I30 + //60- YPBPR_720P50 + //61-YPBPR_720P60 + //62-YPBPR_1080I50 + //63-YPBPR_1080I60 + //64-YPBPR_1080P24 + //65-YPBPR_1080P25 + //66-YPBPR_1080P30 + //67-YPBPR_1080P50 + //68-YPBPR_1080P60 + //69-YPBPR_720P25 + //70-YPBPR_720P30 + //71- HDMI_1080P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + //72- HDMI_720P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + //73- HDMI_2160P输出开(没有具体帧率,帧率由设备加入和captureMode保持一致) + BYTE byCoderOutputMode;//编码器fpga输出模式0直通3像素搬家 + BYTE byLineCoding; //是否开启行编码:0-否,1-是 + BYTE byDimmerMode; //调光模式:0-半自动,1-自动 + BYTE byPaletteMode; //调色板:0-白热,1-黑热,2-调色板2,…,8-调色板8 + BYTE byEnhancedMode; //增强方式(探测物体周边):0-不增强,1-1,2-2,3-3,4-4 + BYTE byDynamicContrastEN; //动态对比度增强 0-1 + BYTE byDynamicContrast; //动态对比度 0-100 + BYTE byJPEGQuality; //JPEG图像质量 0-100 + NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOS模式下前端参数配置,镜头模式从能力集获取 + BYTE byFilterSwitch; //滤波开关:0-不启用,1-启用 + BYTE byFocusSpeed; //镜头调焦速度:0-10 + BYTE byAutoCompensationInterval; //定时自动快门补偿:1-120,单位:分钟 + BYTE bySceneMode; //场景模式:0-室外,1-室内,2-默认,3-弱光 +}NET_DVR_CAMERAPARAMCFG, *LPNET_DVR_CAMERAPARAMCFG; + +//透雾 +typedef struct tagNET_DVR_DEFOGCFG +{ + BYTE byMode; //模式,0-不启用,1-自动模式,2-常开模式 + BYTE byLevel; //等级,0-100 + BYTE byRes[6]; +}NET_DVR_DEFOGCFG, *LPNET_DVR_DEFOGCFG; + +//电子防抖 +typedef struct tagNET_DVR_ELECTRONICSTABILIZATION +{ + BYTE byEnable;//使能 0- 不启用,1- 启用 + BYTE byLevel; //等级,0-100 + BYTE byRes[6]; +}NET_DVR_ELECTRONICSTABILIZATION, *LPNET_DVR_ELECTRONICSTABILIZATION; + +//走廊模式 +typedef struct tagNET_DVR_CORRIDOR_MODE_CCD +{ + BYTE byEnableCorridorMode; //是否启用走廊模式 0~不启用, 1~启用 + BYTE byRes[11]; +}NET_DVR_CORRIDOR_MODE_CCD, *LPNET_DVR_CORRIDOR_MODE_CCD; + +// SMART IR(防过曝)配置参数 +typedef struct tagNET_DVR_SMARTIR_PARAM +{ + BYTE byMode;//0~手动,1~自动 + BYTE byIRDistance;//红外距离等级(等级,距离正比例)level:1~100 默认:50(手动模式下增加) + BYTE byShortIRDistance;// 近光灯距离等级(1~100) + BYTE byLongIRDistance;// 远光灯距离等级(1~100) +}NET_DVR_SMARTIR_PARAM,*LPNET_DVR_SMARTIR_PARAM; + +//在byIrisMode 为P-Iris1时生效,配置红外光圈大小等级,配置模式 +typedef struct tagNET_DVR_PIRIS_PARAM +{ + BYTE byMode;//0-自动,1-手动 + BYTE byPIrisAperture;//红外光圈大小等级(等级,光圈大小正比例)level:1~100 默认:50(手动模式下增加) + BYTE byRes[6]; +}NET_DVR_PIRIS_PARAM,*LPNET_DVR_PIRIS_PARAM; + + +//激光参数配置 2014-02-25 +typedef struct tagNET_DVR_LASER_PARAM_CFG +{ + //Length = 16 + BYTE byControlMode; //控制模式 0-无效,1-自动,2-手动 默认自动 + BYTE bySensitivity; //激光灯灵敏度 0-100 默认50 + BYTE byTriggerMode; //激光灯触发模式 0-无效,1-机芯触发,2-光敏触发 默认机芯触发 + BYTE byBrightness; //控制模式为手动模式下有效;激光灯亮度 0-255 默认100 + BYTE byAngle; //激光灯角度 0-无效,范围1-36 默认12,激光灯照射范围为一个圆圈,调节激光角度是调节这个圆的半径的大小 + BYTE byLimitBrightness; //控制模式为自动模式下有效;激光灯亮度限制 0~100 (新增)2014-01-26 + BYTE byEnabled ; //手动控制激光灯使能 0-关闭,1-启动 + BYTE byIllumination; //激光灯强度配置0~100 + BYTE byLightAngle; //补光角度 0~100 + BYTE byRes[7]; //保留 +} NET_DVR_LASER_PARAM_CFG, *LPNET_DVR_LASER_PARAM_CFG; + +typedef struct tagNET_DVR_FFC_PARAM +{ + //1-Schedule Mode,2-Temperature Mode, 3-Off + BYTE byMode; + //(时间:按能力显示,单位分钟,选项有10,20,30,40,50,60,120,180,240) + BYTE byRes1; + WORD wCompensateTime; //定时模式下生效 + BYTE byRes2[4]; +}NET_DVR_FFC_PARAM,*LPNET_DVR_FFC_PARAM; + +typedef struct tagNET_DVR_DDE_PARAM //在sensor中完成 +{ + BYTE byMode;//1-Off,2-Normal Mode,3-Expert Mode + BYTE byNormalLevel;//普通模式等级范围[1,100],普通模式下生效 + BYTE byExpertLevel;//专家模式等级范围[1,100],专家模式下生效 + BYTE byRes[5]; +}NET_DVR_DDE_PARAM,*LPNET_DVR_DDE_PARAM; + +typedef struct tagNET_DVR_AGC_PARAM +{ + BYTE bySceneType;//1-Normal Sence,2-Highlight Sence,3-Manual Sence + BYTE byLightLevel;//亮度等级[1,100];手动模式下生效 + BYTE byGainLevel; //增益等级[1,100];手动模式下生效 + BYTE byRes[5]; +}NET_DVR_AGC_PARAM,*LPNET_DVR_AGC_PARAM; + +//抓拍机CCD参数 共64字节 +typedef struct tagNET_DVR_SNAP_CAMERAPARAMCFG +{ + BYTE byWDRMode; // 宽动态模式;0~关闭,1~数字宽动态 2~宽动态 + BYTE byWDRType; // 宽动态切换模式; 0~强制启用,1~按时间启用,2~按亮度启用 + BYTE byWDRLevel; // 宽动态等级,0~6索引对应1-7,默认索引2(即3级); + BYTE byRes1; + NET_DVR_TIME_EX struStartTime; //开始宽动态时间 + NET_DVR_TIME_EX struEndTime; //结束宽动态时间 + BYTE byDayNightBrightness; //日夜转换亮度阈值,0-100,默认50; + //记忆色增强 + BYTE byMCEEnabled;//记忆色增强使能,true:开启,false:关闭 + BYTE byMCELevel;//记忆色增强强度,0~100,默认值50 + //自动对比度 + BYTE byAutoContrastEnabled;//自动对比度使能,true:开启,false:关闭 + BYTE byAutoContrastLevel;//自动对比等级(0-100),默认50 + //细节增强 + BYTE byLSEDetailEnabled;//细节增强使能,true:开启,false:关闭 + BYTE byLSEDetailLevel;//细节增强等级(0-100),默认50 + // License Plate Definition Enhancement车牌增强 + BYTE byLPDEEnabled;//车牌增强使能,true:开启,false:关闭 + BYTE byLPDELevel;//车牌增强等级(0-100),默认50 + //对比度增强 + BYTE byLseEnabled; //对比度增强使能,true:开启,false:关闭 + BYTE byLseLevel; //对比度增强等级(0-100),默认0 + BYTE byLSEHaloLevel;//光晕抑制等级。范围 0-100,默认0 + BYTE byLseType; //对比度增强切换模式; 0~强制启用,1~按时间启用,2~按亮度启用(该字段可同时控制byLseLevel、byLSEHaloLevel两个参数) + BYTE byRes2[3]; + NET_DVR_TIME_EX struLSEStartTime; //开始对比度增强时间(当byLseType为1时生效) + NET_DVR_TIME_EX struLSEEndTime; //结束对比度增强时间(当byLseType为1时生效) + BYTE byLightLevel;//为亮度等级参数(0-100),默认0,(当byLseType为2时生效) + //车牌对比度 + BYTE byPlateContrastLevel;//车牌对比度等级,0~100,默认0 + //车牌饱和度 + BYTE byPlateSaturationLevel;//车牌饱和度等级,0~100,默认0 + BYTE byRes[9]; +} NET_DVR_SNAP_CAMERAPARAMCFG,*LPNET_DVR_SNAP_CAMERAPARAMCFG; + +//光学透雾参数 +typedef struct tagNET_DVR_OPTICAL_DEHAZE +{ + BYTE byEnable; //0~不启用光学透雾,1~启用光学透雾 + BYTE byRes[7]; +} NET_DVR_OPTICAL_DEHAZE, *LPNET_DVR_OPTICAL_DEHAZE; + +//测温AGC设置,当测温AGC模式为无效时,以NET_DVR_AGC_PARAM配置参数为准,当测温AGC模式为自动或者手动时,NET_DVR_AGC_PARAM配置参数无效 +typedef struct tagNET_DVR_THERMOMETRY_AGC +{ + BYTE byMode;//AGC模式,0~无效,1~自动,2~手动 + BYTE byRes1[3]; + int iHighTemperature;//最高温度,范围为:-273~9999摄氏度(1~手动模式下生效) + int iLowTemperature;//最低温度,范围为:-273~9999摄氏度(1~手动模式下生效) + BYTE byRes[8]; +}NET_DVR_THERMOMETRY_AGC, *LPNET_DVR_THERMOMETRY_AGC; + +//前端参数配置 +typedef struct tagNET_DVR_CAMERAPARAMCFG_EX +{ + DWORD dwSize; + NET_DVR_VIDEOEFFECT struVideoEffect;/*亮度、对比度、饱和度、锐度、色调配置*/ + NET_DVR_GAIN struGain;/*自动增益*/ + NET_DVR_WHITEBALANCE struWhiteBalance;/*白平衡*/ + NET_DVR_EXPOSURE struExposure; /*曝光控制*/ + NET_DVR_GAMMACORRECT struGammaCorrect;/*Gamma校正*/ + NET_DVR_WDR struWdr;/*宽动态*/ + NET_DVR_DAYNIGHT struDayNight;/*日夜转换*/ + NET_DVR_BACKLIGHT struBackLight;/*背光补偿*/ + NET_DVR_NOISEREMOVE struNoiseRemove;/*数字降噪*/ + BYTE byPowerLineFrequencyMode; /*0-50HZ; 1-60HZ*/ + /* + 0-自动光圈, + 1-手动光圈, + 2-P-Iris1, + 3-Union 3-9mm F1.6-2.7 (T5280-PQ1) [IPC5.1.7] + 4-Union 2.8-12mm F1.6-2.7 (T5289-PQ1) [IPC5.1.7] + 5-private 3.8-16mm F1.5(HV3816P-8MPIR) + 6-private 11-40mm F1.7 (HV1140P-8MPIR) + 7-private 2.7-12mm F1.2(TV2712P-MPIR) + 8- MZ5721D-12MPIR + 9- MZ1555D-12MPIR + 10- MZ5721D-12MPIR(RS485) + 11- MZ1555D-12MPIR(RS485) + */ + BYTE byIrisMode; + BYTE byMirror ; /* 镜像:0 off,1- leftright,2- updown,3-center 4-Auto*/ + BYTE byDigitalZoom; /*数字缩放:0 dsibale 1 enable*/ + BYTE byDeadPixelDetect; /*坏点检测,0 dsibale 1 enable*/ + BYTE byBlackPwl;/*黑电平补偿 , 0-255*/ + BYTE byEptzGate;// EPTZ开关变量:0-不启用电子云台,1-启用电子云台 + BYTE byLocalOutputGate;//本地输出开关变量0-本地输出关闭1-本地BNC输出打开 2-HDMI输出关闭 + //20-HDMI_720P50输出开 + //21-HDMI_720P60输出开 + //22-HDMI_1080I60输出开 + //23-HDMI_1080I50输出开 + //24-HDMI_1080P24输出开 + //25-HDMI_1080P25输出开 + //26-HDMI_1080P30输出开 + //27-HDMI_1080P50输出开 + //28-HDMI_1080P60输出开 + BYTE byCoderOutputMode;//编码器fpga输出模式0直通3像素搬家 + BYTE byLineCoding; //是否开启行编码:0-否,1-是 + BYTE byDimmerMode; //调光模式:0-半自动,1-自动 + BYTE byPaletteMode; //调色板:0-白热,1-黑热,2-调色板2,…,8-调色板8, 9-融合1,10-彩虹,11-融合2,12-铁红1,13-铁红2,14-深褐色,15-色彩1,16-色彩2,17-冰火,18-雨,19-红热,20-绿热,21-深蓝,22-色彩3 + BYTE byEnhancedMode; //增强方式(探测物体周边):0-不增强,1-1,2-2,3-3,4-4 + BYTE byDynamicContrastEN; //动态对比度增强 0-1 + BYTE byDynamicContrast; //动态对比度 0-100 + BYTE byJPEGQuality; //JPEG图像质量 0-100 + NET_DVR_CMOSMODECFG struCmosModeCfg;//CMOS模式下前端参数配置,镜头模式从能力集获取 + BYTE byFilterSwitch; //滤波开关:0-不启用,1-启用 + BYTE byFocusSpeed; //镜头调焦速度:0-10 + BYTE byAutoCompensationInterval; //定时自动快门补偿:1-120,单位:分钟 + BYTE bySceneMode; //场景模式:0-室外,1-室内,2-默认,3-弱光 + NET_DVR_DEFOGCFG struDefogCfg;//透雾参数 + NET_DVR_ELECTRONICSTABILIZATION struElectronicStabilization;//电子防抖 + NET_DVR_CORRIDOR_MODE_CCD struCorridorMode;//走廊模式 + BYTE byExposureSegmentEnable; //0~不启用,1~启用 曝光时间和增益呈阶梯状调整,比如曝光往上调整时,先提高曝光时间到中间值,然后提高增益到中间值,再提高曝光到最大值,最后提高增益到最大值 + BYTE byBrightCompensate;//亮度增强 [0~100] + /* + 0-关闭、1-640*480@25fps、2-640*480@30ps、3-704*576@25fps、4-704*480@30fps、5-1280*720@25fps、6-1280*720@30fps、 + 7-1280*720@50fps、8-1280*720@60fps、9-1280*960@15fps、10-1280*960@25fps、11-1280*960@30fps、 + 12-1280*1024@25fps、13--1280*1024@30fps、14-1600*900@15fps、15-1600*1200@15fps、16-1920*1080@15fps、 + 17-1920*1080@25fps、18-1920*1080@30fps、19-1920*1080@50fps、20-1920*1080@60fps、21-2048*1536@15fps、22-2048*1536@20fps、 + 23-2048*1536@24fps、24-2048*1536@25fps、25-2048*1536@30fps、26-2560*2048@25fps、27-2560*2048@30fps、 + 28-2560*1920@7.5fps、29-3072*2048@25fps、30-3072*2048@30fps、31-2048*1536@12.5、32-2560*1920@6.25、 + 33-1600*1200@25、34-1600*1200@30、35-1600*1200@12.5、36-1600*900@12.5、37-1280*960@12.5fps、38-800*600@25fps、39-800*600@30fps40、 + 4000*3000@12.5fps、41-4000*3000@15fps、42-4096*2160@20fps、43-3840*2160@20fps 、44-960*576@25fps、45-960*480@30fps、46-752*582@25fps、 + 47-768*494@30fps、48-2560*1440@25fps、49-2560*1440@30fps 、50-720P@100fps、51-720P@120fps、52-2048*1536@50fps、53-2048*1536@60fps、 + 54-3840*2160@25fps、55-3840*2160@30fps、56-4096*2160@25fps、57-4096*2160@30fps 、58-1280*1024@50fps、59-1280*1024@60fps、 + 60-3072*2048@50fps、61-3072*2048@60fps、62-3072*1728@25fps、63-3072*1728@30fps、64-3072*1728@50fps、65-3072*1728@60fps、66-336*256@50fps、67-336*256@60fps、 + 68-384*288@50fps、69-384*288@60fps 、70- 640 * 512@50fps 、71- 640 * 512@60fps、72-2592*1944@25fps、73-2592*1944@30fps、74-2688*1536@25fps、75-2688*1536@30fps + 76-2592*1944@20fps、77-2592*1944@15fps、78-2688*1520@20fps、79-2688*1520@15fps、80-2688*1520@25fps、81-2688*1520@30fps、82- 2720*2048@25fps、 83- 2720*2048@30fps、 + 84-336*256@25fps、85- 384*288@25fps、86-640*512@25fps、87-1280*960@50fps、88-1280*960@60fps、89-1280*960@100fps、90-1280*960@120fps、91-4000*3000@20fps、 + 92-1920*1200@25fps、93-1920*1200@30fps、94-2560*1920@25fps、95-2560*1920@20fps、96-2560*1920@30fps、97-1280*1920@25fps、98-1280*1920@30fps + 99-4000*3000@24fps、100-4000*3000@25fps、101-4000*3000@10fps、102- 384*288@30fps、103-2560*1920@15fps、104-2400*3840@25fps、105-1200*1920@25fps + 106-4096*1800@30fps、107-3840*1680@30fps、108-2560*1120@30fps、109-704*320@30fps、110-1280*560@30fps、111-4096*1800@25fps、112-3840*1680@25fps + 113-2560*1120@25fps、114-704*320@25fps、115-1280*560@25fps、116-2400*3840@24fps、117-3840*2400@24fps、118-3840*2400@25fps、119-2560*1920@12.5fps + 120-2560*2048@12fps、121-2560*2048@15fps、122-2560*1536@25fps、123-2560*1536@30fps、124-2256*2048@25fps、125-2256*2048@30fps、126-2592*2592@12.5fps、127-2592*2592@15fps、 + 128 - 640*512@30fps、129-2048*1520@30fps、130-2048*1520@25fps、131-3840*2160@24fps、132-2592*1520@25fps、133-2592*1520@30fps、134-2592*1536@25fps、135-2592*1536@30fps + 136-640*960@25fps、137-640*960@24fps、139-3840*1080@25fps、140-3840*1080@30fps、142-2992*2192@25fps、143-2992*2192@30fps、144-3008*2160@25fps、145-3008*2160@30fps、 + 146-3072*1728@20fps、147-2560*1440@20fps、148-2160*3840@25fps、149-2160*3840@30fps、150-7008*1080@25fps、151-7008*1080@30fps、152-3072*2048@20fps、153-1536*864@25fps、 + 154-2560*1920@24fps、155-2400*3840@30fps、156-3840*2400@30fps、157-3840*2160@15fps、 + 158-384*288@8.3fps、159-640*512@8.3fps、160-160*120@8.3fps、161-1024*768@8.3fps、162-640*480@8.3fps、163-3840*2160@12.5fps、164-2304*1296@30fps、165-2304*1296@25fps、 + 166-2560*1440@24fps、167-2688*1512@25fps、168-2688*1512@30fps、169-2688*1512@50fps、170-2688*1512@60fps、171-1536*864@30fps、172-2560*1440@50fps、173-2560*1440@60fps、 + 174-2048*2048@25fps、175-2048*2048@30fps、176-4000*3060@20fps、177-3060*3060@25fps、178-3060*3060@30fps、179-3000*3000@25fps、180-3000*3000@30fps、181-8160*3616@30fps、 + 182-8160*3616@25fps、183-3000*3000@20fps、184-3000*3000@15fps、185-3000*3000@12.5fps、186-5472*3648@25fps、187-5472*3648@30fps、188-7680*4320@25fps、189-7680*4320@30fps、 + 190-8160*2400@25fps、191-8160*2400@30fps、192-5520*2400@25fps、193-5520*2400@30fps、194-2560*1440@15fps、195-1944*1212@24fps、196-1944*1212@25fps、197-3456*1920@30fps、 + 198-4800*2688@25fps、199-4800*2688@30fps、200-6480*1080@25fps、201-6480*1080@30fps、202-8640*1440@25fps、203-8640*1440@30fps、204-3456*1920@25fps、205-2688*1520@50fps、 + 206-2688*1520@60fps、207-4976*1452@25fps、208-4976*1452@30fps、 209-3200*1800@25fps、210-3200*1800@30fps、211-5472*3648@24fps、212-1920*1080@12.5fps、213-2944*1656@20fps、 + 214-1920*1080@24fps、215-4800*1600@25fps、216-4800*1600@30fps、217-2560*1440@12.5fps、218-6560*3690@1fps、219-5120*1400@20fps、220-7680*4320@1fps、221-1920*1080@20fps + 222-5120*1440@20fps、223-4080*1808@25fps、224-4080*1808@30fps、225-4080*1152@25fps、226-4080*1152@30fps、227-2688*1944@20fps、228-2592*1944@24fps、229-3200*1800@15fps、 + 230-4416*1696@20fps、231-3456*1080@25fps、232-3200*1800@12.5fps、233-2688*1532@25fps、234-2688*1532@30fps、235-4416*1696@12.5fps、236-3840*2048P12.5fps、237-3840*4096P12.5fps、 + 238-5120*1440@12.5fps、239-3840*1080@24fps、240-320*256@30fps、241-3264*2448@25fps、242-3264*2448@30fps、243-5430*3054@1fps、244-2688*1520@24@24fps、245-4000*3000@30fps、 + 246-1632*1224@25fps、247-1632*1224@30fps、248-160*120@25fps、249-1920*1440@25fps、250-1920*1440@30fps、-3632*1632@20fps、252-3040*1368@25fps、253-3040*1368@24fps、 + 254-5120*1440@25fps、255-超出字段表示范围 + 设备输入模式索引超过255时: + 1)获取时,该字段值为255(无具体含义,用于表示实际输入模式索引值超过255),实际由wCaptureModeN、wCaptureModeP表示; + 2)设置时,该值仍需要设置为255,实际由wCaptureModeN、wCaptureModeP表示。 + 设备输入模式索引小于255时: + 1)获取时,该字段值为实际输入模式值,wCaptureModeN、wCaptureModeP值无需处理; + 2)设置时该字段为实际输入模式值,wCaptureModeN、wCaptureModeP值保持不变 + */ + BYTE byCaptureModeN; //视频输入模式(N制) + BYTE byCaptureModeP; //视频输入模式(P制) + NET_DVR_SMARTIR_PARAM struSmartIRParam; //红外放过爆配置信息 + NET_DVR_PIRIS_PARAM struPIrisParam;//PIris配置信息对应byIrisMode字段从2-PIris1开始生效 + //2014-02-25 新增参数 + NET_DVR_LASER_PARAM_CFG struLaserParam; //激光参数 + NET_DVR_FFC_PARAM struFFCParam; + NET_DVR_DDE_PARAM struDDEParam; + NET_DVR_AGC_PARAM struAGCParam; + BYTE byLensDistortionCorrection;//镜头畸变校正 0-关闭,1-开启 + BYTE byDistortionCorrectionLevel;//畸变校正等级:0-保留;1-等级一;2-等级二;3-等级三;255-自定义 + BYTE byCalibrationAccurateLevel;// 畸变校正强度[0-100] + BYTE byZoomedInDistantViewLevel;//远端放大等级[0-100] + NET_DVR_SNAP_CAMERAPARAMCFG struSnapCCD ; //抓拍机CCD参数,只用于抓拍机 + NET_DVR_OPTICAL_DEHAZE struOpticalDehaze;//光学透雾参数 + NET_DVR_THERMOMETRY_AGC struThermAGC;//测温AGC配置 + BYTE byFusionMode;//双光谱视频融合模式,0~热成像模式,1~融合模式,2~画中画模式,3~可见光模式, 4~融合黑白模式, 5~融合彩色模式-草地,6~融合彩色模式-荒地,7~融合彩色模式-雪地,8~融合彩色模式-海洋,9~融合彩色模式-城市 + BYTE byHorizontalFOV;//水平视场角[0-100] + BYTE byVerticalFOV;//垂直视场角[0-100] + BYTE byBrightnessSuddenChangeSuppression;//亮度突变抑制0-关闭,1-开启 + BYTE byGPSEnabled;//GPS开关使能,0-关,1-开 + BYTE byRes; + /* + 256-160*120@50fps、257-3200*1800@20fps、258-800*480@25fps、259-2688*1944@25fps、260-640*384@50fps、261-8000*6000@1fps、262-1440*1080@50fps、263-1440*1080@60fps、 + 264-8160*3616@24fps、265-3632*1632@25fps、266-3632*1632@30fps、267-3632*1632@20fps、268-1760*1320@25fps、269-4000*3000@4fps、270-192*256@25fps、271-720*576@25fps、 + 272-720x576@30fps、273-960*432@25fps、274-960*432@30fps、275-1200*536@25fps、276-1200*536@30fps、277-1760*1320@12.5fps、278-2560*480@25fps、279-2048*384@25fps、 + 280-96*96@25fps、281-320*256@25fps、282-6128*1800@25fps、283-6128*1800@30fps、284-2304*1296@24fps、285-2048*1152@25fps、286-2048*1152@30fps、287-3840*2100@20fps、 + 288-96*72@25fps、289-2048*1152@24fps、290-720*576@50fps、291-2368*1776@25fps、292-2368*1776@30fps、293-1776*1776@25fps、294-3776*2832@25fps、295-3776*2832@30fps、 + 296-2832*2832@25ps、297-2832*2832@30、298-1776*1776@30fps + */ + WORD wCaptureModeN; //视频输入模式(N制),当模式索引小于255时,与byCaptureModeN保持一致,大于255时以该字段返回索引值判断。 + WORD wCaptureModeP; //视频输入模式(P制),当模式索引小于255时,与byCaptureModeN保持一致,大于255时以该字段返回索引值判断 + BYTE byRes2[150]; +}NET_DVR_CAMERAPARAMCFG_EX, *LPNET_DVR_CAMERAPARAMCFG_EX; + +typedef struct tagNET_DVR_FOCUSING_POSITION_STATE +{ + DWORD dwSize; + BYTE byState;//聚焦到位状态参数 0-不到位,1-到位 + BYTE byRes[31]; +}NET_DVR_FOCUSING_POSITION_STATE, *LPNET_DVR_FOCUSING_POSITION_STATE; + +typedef enum _VCA_PLATE_COLOR_ +{ + VCA_BLUE_PLATE = 0, //蓝色车牌 + VCA_YELLOW_PLATE, //黄色车牌 + VCA_WHITE_PLATE, //白色车牌 + VCA_BLACK_PLATE, //黑色车牌 + VCA_GREEN_PLATE, //绿色车牌 + VCA_BKAIR_PLATE, //民航黑色车牌 + VCA_RED_PLATE, //红色车牌 + VCA_ORANGE_PLATE, //橙色车牌 + VCA_BROWN_PLATE = 8, //棕色车牌 + VCA_OTHER = 0xff //其他 +}VCA_PLATE_COLOR; + +//车牌类型 +typedef enum _VCA_PLATE_TYPE_ +{ + VCA_STANDARD92_PLATE = 0, //标准民用车与特种车 + VCA_STANDARD02_PLATE, //02式民用车牌 + VCA_WJPOLICE_PLATE, //武警车 + VCA_JINGCHE_PLATE, //警车 + STANDARD92_BACK_PLATE, //民用车双行尾牌 + VCA_SHIGUAN_PLATE, //使馆车牌 + VCA_NONGYONG_PLATE, //农用车 + VCA_MOTO_PLATE, //摩托车 + NEW_ENERGY_PLATE, //新能源车牌 + VCA_CONSULATE_PLATE = 9, //领事馆车牌 + VCA_EMERGENCY_PLATE = 10, //应急车牌 + //2017-05-18 增加 中东地区车牌类型 + TRANSPORT_PLATE = 0x20, //运输车 + COMMERCIAL_PLATE, //商用车 + PRIVATE_PLATE, //私家车 + LEARNING_PLATE, //教练车 + CD_PLATE, //使馆车 + CC_PLATE, //使馆车 + SPECIAL_PLATE, //特种车 + PROTOCOL_PLATE, //PROTOCOL + GOVERNMENT_PLATE, //政府车 + EXPORT_PLATE, //EXPORT + TAXI_PLATE, //出租车 + TESTING_PLATE, //TESTING + TRANSFER_PLATE, //TRANSFER + TRUCK_PLATE, //货车 + BUS_PLATE, //公交车 + PUBLIC_PLATE, //PUBLIC + PUB_TRANS_PLATE, //PUBLIC TRANSFER + PRI_TRANS_PLATE, //PRIVATE TRANSPORT + TUMBREL_PLATE, //二轮车 + HONG_KONG_MACAO_PLATE, //港澳入出车 + UNKNOWN_PLATE = 0xff, //未知(未识别) +}VCA_PLATE_TYPE; + +//车型识别结果 +typedef enum _VTR_RESULT +{ + VTR_RESULT_OTHER = 0, //未知 + VTR_RESULT_BUS = 1, //客车 + VTR_RESULT_TRUCK = 2, //货车 + VTR_RESULT_CAR = 3, //轿车 + VTR_RESULT_MINIBUS = 4, //面包车 + VTR_RESULT_SMALLTRUCK = 5, //小货车 + VTR_RESULT_HUMAN = 6, //行人 + VTR_RESULT_TUMBREL = 7, //二轮车 + VTR_RESULT_TRIKE = 8, //三轮车 + VTR_RESULT_SUV_MPV = 9, //SUV/MPV + VTR_RESULT_MEDIUM_BUS = 10, //中型客车 + VTR_RESULT_MOTOR_VEHICLE = 11, //机动车 + VTR_RESULT_NON_MOTOR_VEHICLE = 12, //非机动车 + VTR_RESULT_SMALLCAR = 13, //小型轿车 + VTR_RESULT_MICROCAR = 14, //微型轿车 + VTR_RESULT_PICKUP = 15, //皮卡车 + VTR_RESULT_CONTAINER_TRUCK = 16, // 集装箱卡车 + VTR_RESULT_MINI_TRUCK = 17, // 微卡,栏板卡 + VTR_RESULT_SLAG_CAR = 18, // 渣土车 + VTR_RESULT_CRANE = 19, // 吊车,工程车 + VTR_RESULT_OIL_TANK_TRUCK = 20, // 油罐车 + VTR_RESULT_CONCRETE_MIXER = 21, // 混凝土搅拌车 + VTR_RESULT_PLATFORM_TRAILER = 22, // 平板拖车 + VTR_RESULT_HATCHBACK = 23, // 两厢轿车 + VTR_RESULT_SALOON = 24, // 三厢轿车 + VTR_RESULT_SPORT_SEDAN = 25, // 轿跑 + VTR_RESULT_SMALL_BUS = 26 //小型客车 +}VTR_RESULT; + + +//车身颜色 +typedef enum _VCR_CLR_CLASS +{ + VCR_CLR_UNSUPPORT = 0, //不支持 + VCR_CLR_WHITE = 1, //白 + VCR_CLR_SILVER = 2, //银 + VCR_CLR_GRAY = 3, //灰 + VCR_CLR_BLACK = 4, //黑 + VCR_CLR_RED = 5, //红 + VCR_CLR_DARKBLUE = 6, //深蓝 + VCR_CLR_BLUE = 7, //蓝 + VCR_CLR_YELLOW = 8, //黄 + VCR_CLR_GREEN = 9, //绿 + VCR_CLR_BROWN = 10, //棕 + VCR_CLR_PINK = 11, //粉 + VCR_CLR_PURPLE = 12, //紫 + VCR_CLR_DARKGRAY = 13, //深灰 + VCR_CLR_CYAN = 14 //青色 +}VCR_CLR_CLASS; + +//车辆操作类型 2013-11-04 +typedef enum _VCA_OPERATE_TYPE_ +{ + VCA_LICENSE_TYPE = 0x1, //车牌号码 + VCA_PLATECOLOR_TYPE = 0x2, //车牌颜色 + VCA_CARDNO_TYPE = 0x4, //卡号 + VCA_PLATETYPE_TYPE = 0x8, //车牌类型 + VCA_LISTTYPE_TYPE = 0x10, //车辆名单类型 + VCA_INDEX_TYPE = 0x20, //数据流水号 2014-02-25 + VCA_OPERATE_INDEX_TYPE = 0x40 //操作数 2014-03-03 +}VCA_OPERATE_TYPE; + +typedef enum _VCA_ILLEGAL_TYPE_ +{ + VCA_POSTPIC_TYPE = 0x1, //卡口图片 + VCA_LOWSPEED_TYPE = 0x2, //低速 + VCA_HIGHSPEED_TYPE = 0x4, //高速 + VCA_RETROGRADE_TYPE = 0x8, //逆行 + VCA_RUSH_REDLIGHT_TYPE = 0x10, //闯红灯 + VCA_PRESS_LANE_TYPE = 0x20, //压车道线 + VCA_VIOLATE_GUIDE_TYPE = 0x40,//不按导向 + VCA_ROAD_STRAND_TYPE = 0x80,//路口滞留(设备不支持) + VCA_VEHICLE_ILLEGAL_LANE_TYPE = 0x100,//机占非 + VCA_ILLEGAL_LANE_CHANGE_TYPE = 0x200,//违法变道 + VCA_ILLEGAL_LANE_DRIVE_TYPE = 0x400,//不按车道 + VCA_VIOLATE_BAN_TYPE = 0x800,//违法禁令 + VCA_CROSS_PARKING_TYPE = 0x1000,//路口停车 + VCA_GREEN_PARKING_TYPE = 0x2000//绿灯停车 +}VCA_ILLEGAL_TYPE; + +typedef enum _VCA_VEHICLE_TYPE_ +{ + VCA_OTHER_TYPE = 0x1, //其它车型 + VCA_SMALLCAR_TYPE = 0x2, //小型车 + VCA_BIGCAR_TYPE = 0x4, //大型车 + VCA_BUS_TYPE = 0x8, //客车 + VCA_TRUCK_TYPE = 0x10, //货车 + VCA_CAR_TYPE = 0x20, //轿车 + VCA_MINIBUS_TYPE = 0x40, //面包车 + VCA_SMALL_TRUCK_TYPE = 0x80 //小货车 +}VCA_VEHICLE_TYPE; + +//车辆品牌主类型 +typedef enum _VLR_VEHICLE_CLASS +{ + VLR_OTHER = 0, //其它 + VLR_VOLKSWAGEN = 1, //大众 + VLR_BUICK = 2, //别克 + VLR_BMW = 3, //宝马 + VLR_HONDA = 4, //本田 + VLR_PEUGEOT = 5, //标致 + VLR_TOYOTA = 6, //丰田 + VLR_FORD = 7, //福特 + VLR_NISSAN = 8, //日产 + VLR_AUDI = 9, //奥迪 + VLR_MAZDA = 10, //马自达 + VLR_CHEVROLET = 11, //雪佛兰 + VLR_CITROEN = 12, //雪铁龙 + VLR_HYUNDAI = 13, //现代 + VLR_CHERY = 14, //奇瑞 + VLR_KIA = 15, //起亚 + VLR_ROEWE = 16, //荣威 + VLR_MITSUBISHI = 17, //三菱 + VLR_SKODA = 18, //斯柯达 + VLR_GEELY = 19, //吉利 + VLR_ZHONGHUA = 20, //中华 + VLR_VOLVO = 21, //沃尔沃 + VLR_LEXUS = 22, //雷克萨斯 + VLR_FIAT = 23, //菲亚特 + VLR_EMGRAND = 24, //帝豪(吉利) + VLR_DONGFENG = 25, //东风 + VLR_BYD = 26, //比亚迪 + VLR_SUZUKI = 27, //铃木 + VLR_JINBEI = 28, //金杯 + VLR_HAIMA = 29, //海马 + VLR_SGMW = 30, //五菱 + VLR_JAC = 31, //江淮 + VLR_SUBARU = 32, //斯巴鲁 + VLR_ENGLON = 33, //英伦(吉利) + VLR_GREATWALL = 34, //长城 + VLR_HAFEI = 35, //哈飞 + VLR_ISUZU = 36, //五十铃(庆铃) + VLR_SOUEAST = 37, //东南 + VLR_CHANA = 38, //长安 + VLR_FOTON = 39, //福田 + VLR_XIALI = 40, //夏利(一汽) + VLR_BENZ = 41, //奔驰 + VLR_FAW = 42, //一汽 + VLR_NAVECO = 43, //依维柯 + VLR_LIFAN = 44, //力帆 + VLR_BESTURN = 45, //一汽奔腾(一汽) + VLR_CROWN = 46, //皇冠(丰田) + VLR_RENAULT = 47, //雷诺 + VLR_JMC = 48, //JMC(江铃) + VLR_MG = 49, //MG名爵 + VLR_KAMA = 50, //凯马 + VLR_ZOTYE = 51, //众泰 + VLR_CHANGHE = 52, //昌河 + VLR_XMKINGLONG = 53, //厦门金龙(金旅) + VLR_HUIZHONG = 54, //上海汇众(上汽集团) + VLR_SZKINGLONG = 55, //苏州金龙 + VLR_HIGER = 56, //海格 + VLR_YUTONG = 57, //宇通 + VLR_CNHTC = 58, //中国重汽 + VLR_BEIBEN = 59, //北奔重卡 + VLR_XINGMA = 60, //华菱星马 + VLR_YUEJIN = 61, //跃进 + VLR_HUANGHAI = 62, //黄海 + VLR_OLDWALL = 63, //老款长城 + VLR_CHANACOMMERCIAL = 64, //长安商用 + VLR_PORSCHE = 65, // 保时捷 + VLR_CADILLAC = 66, // 凯迪拉克 + VLR_INFINITI = 67, // 英菲尼迪 + VLR_GLEAGLE = 68, // 吉利全球鹰(吉利) + VLR_JEEP = 69, // JEEP(吉普) + VLR_LANDROVER = 70, // 路虎 + VLR_CHANGFENG = 71, // 长丰 + VLR_BENNI = 72, // 长安奔奔(长安) + VLR_ERA = 73, // 福田时代(时代) + VLR_TAURUS = 74, // 长安金牛星(长安商用) + VLR_EADO = 75, // 长安逸动 + VLR_SHANQI = 76, // 陕汽 + VLR_HONGYAN = 77, // 红岩汽车(上汽依维柯红岩) + VLR_DRAGON = 78, // 霸龙汽车(东风柳汽) + VLR_JACTEXT = 79, // 江淮JAC (江淮) + VLR_JACBUS = 80, // 江淮现代客车 (江淮) + VLR_ANKAI = 81, // 安凯客车 + VLR_SHENLONG = 82, // 申龙客车 + VLR_DAEWOO = 83, // 大宇客车 + VLR_WUZHENG = 84, // 五征汽车 + VLR_MAN = 85, // MAN汽车 + VLR_ZHONGTONG = 86, // 中通客车 + VLR_BAOJUN = 87, // 宝骏 + VLR_BQWEIWANG = 88, // 北汽威旺 + VLR_TRUMPCHE = 89, // 传祺 + VLR_LUFENG = 90, // 陆风 + VLR_HMZHENGZHOU = 91, // 海马郑州 + VLR_BEIJING = 92, // 北京汽车 + VLR_ZHONGSHUN = 93, // 中顺 + VLR_WEILIN = 94, // 威麟汽车 + VLR_OPEL = 95, // 欧宝 + VLR_KARRY = 96, // 开瑞 + VLR_SMA = 97, // 华普汽车 + VLR_SMATEXT = 98, // 华普汽车文字SMA + VLR_YUWIN = 99, // 江铃驭胜 + VLR_MINI = 100, // 宝马MINI + VLR_MARK = 101, // 丰田MARKX + VLR_HAVAL = 102, // 哈弗HAVAL + VLR_OGA = 103, // 讴歌 + VLR_VENUCIA = 104, // 启辰 + VLR_BYD2 = 105, // 比亚迪样式2 (比亚迪) + VLR_SMART = 106, // 奔驰SMART + VLR_BAW = 107, // 北京汽车制造厂BAW + VLR_LUXGEN = 108, // 纳智捷 + VLR_YEMA = 109, // 野马 + VLR_ZTE = 110, // 中兴 + VLR_EVERUS = 111, // 理念 + VLR_CHRYSLER = 112, // 克莱斯勒 + VLR_GONOW = 113, // 吉奥汽车 + VLR_SHJIANG = 114, // 松花江 + VLR_RUILIN = 115, // 瑞麟 + VLR_FORTA = 116, // 福达 + VLR_GAGUAR = 117, // 捷豹 + VLR_HEIBAO = 118, // 黑豹 + VLR_TKING = 119, // 唐骏 + VLR_TKINGTEXT = 120, // 唐骏文字 + VLR_FODAY = 121, // 福迪 + VLR_LOTUS = 122, // 莲花汽车 + VLR_NANJUN = 123, // 南骏 + VLR_SHUANGHUAN = 124, // 双环汽车 + VLR_SAIBAO = 125, // 哈飞赛豹 + VLR_HAWTAI = 126, // 华泰 + VLR_LIFO = 127, // 永源飞碟 + VLR_JONWAY = 128, // 永源汽车 + VLR_FULONGMA = 129, // 福龙马 + VLR_WEILI = 130, // 潍力 + VLR_ANCHI = 131, // 江淮安驰 + VLR_PAIXI = 132, // 派喜 + VLR_HIGERTEXT = 133, // 海格HIGER文字 + VLR_RIYECAR = 134, // 广汽日野轻卡 + VLR_RIYETRUCK = 135, // 广汽日野重卡 + VLR_JIANGNAN = 136, // 江南 + VLR_OLDZOTYE = 137, // 老款众泰 + VLR_OLDXIALI = 138, // 老款夏利 + VLR_NEWAOCHI = 139, // 新奥驰 + VLR_CDW = 140, // 王牌重汽 + VLR_CDWTEXT = 141, // 王牌重汽文字 + VLR_CIIMO = 142, // 本田思铭 + VLR_CHANADS = 143, // 长安谛艾仕 + VLR_DS = 144, // 道奇 + VLR_ROHENS = 145, // 现代劳恩斯酷派 + VLR_YANTAI = 146, // 燕台 + VLR_SHUANGLONG = 147, // 双龙 + VLR_FENGLING = 148, // 时代风菱 + VLR_XINKAI = 149, // 新凯 + VLR_GMC = 150, // GMC + VLR_DATONG = 151, // 上汽大通 + VLR_BQYINXIANG = 152, // 北汽银翔 + VLR_NEWCHERY = 153, // 新奇瑞 + VLR_MUDAN = 154, // 牡丹 + VLR_DAYUN = 155, // 大运汽车 + VLR_DONGWO = 156, // 东沃汽车 + VLR_UNION = 157, // 联合汽车 + VLR_CHUNZHOU = 158, // 春洲客车 + VLR_SANY = 159, // 三一重工 + VLR_YAXING = 160, // 亚星客车 + VLR_HENGTONG = 161, // 恒通客车 + VLR_SHAOLIN = 162, // 少林客车 + VLR_YOUNG = 163, // 青年客车 + VLR_STOM = 164, // 十通 + VLR_SANHUAN = 165, // 三环 + VLR_XUGONG = 166, // 徐工 + VLR_BEIFANG = 167, // 北方汽车 + VLR_JIANGHUAN = 168, // 江环货车 + VLR_BJFARM = 169, // 北京农用 + VLR_NEWDADI = 170, // 新大地汽车 + VLR_SUNWIN = 171, // 申沃客车 + VLR_YINGTIAN = 172, // 英田 + VLR_QINGQI = 173, // 轻骑 + VLR_CHUFENG = 174, // 楚风汽车 + VLR_SCANIA = 175, // 斯堪尼亚 + VLR_JIULONG = 176, // 九龙客车 + VLR_YOUYI = 177, // 友谊客车 + VLR_SHANGRAO = 178, // 上饶客车 + VLR_JIJIANG = 179, // 吉江 + VLR_YANGZI = 180, // 扬子客车 + VLR_XIWO = 181, // 西沃客车 + VLR_CHANGJIANG = 182, // 长江客车 + VLR_WUYI = 183, // 武夷 + VLR_CHENGDU = 184, // 成都客车 + VLR_TIANMA = 185, // 天马 + VLR_BAOLONG = 186, // 宝龙 + VLR_NEWYATU = 187, // 新雅途 + VLR_BARUI = 188, // 起亚霸锐 + VLR_GUANZHI = 189, // 观致 + VLR_XIYATE = 190, // 西雅特 + VLR_BINLI = 191, // 宾利 + VLR_DADI = 192, // 大迪 + VLR_FUQI = 193, // 富奇 + VLR_HANGTIAN = 194, // HT汽车 + VLR_HENGTIAN = 195, // 恒天汽车 + VLR_JMCCAR = 196, // 江铃轻汽 + VLR_KAERSEN = 197, // 卡尔森汽车 + VLR_KAWEI = 198, // 卡威汽车 + VLR_LANBOJINI = 199, // 兰博基尼 + VLR_MASHALADI = 200, // 玛莎拉蒂 + VLR_SHUCHI = 201, // 舒驰客车 + VLR_SHILI = 202, // 实力客车 + VLR_HUABEI = 203, // 中客华北 + VLR_YIZHENG = 204, // 上汽仪征 + VLR_CHUNLAN = 205, // 春兰汽车 + VLR_DAFA = 206, // 大发汽车 + VLR_SHENYE = 207, // 神野汽车 + VLR_FALALI = 208, // 法拉利汽车 + VLR_FUXING = 209, // 福星汽车 + VLR_ANYUAN = 210, // 安源客车 + VLR_JINGHUA = 211, // 京华客车 + VLR_TAIHU = 212, // 太湖客车 + VLR_WUZHOULONG = 213, // 五洲龙 + VLR_CHANGLONG = 214, // 常隆客车 + VLR_YUEXI = 215, // 悦西客车 + VLR_SHENMA = 216, // 神马客车 + VLR_LUSHAN = 217, // 庐山牌 + VLR_WANFENG = 218, // 万丰牌 + VLR_GZYUNBAO = 219, // 广州云豹 + VLR_ZHONGDA = 220, // 中大汽车 + VLR_THREEWHEEL = 221, // 三轮车 + VLR_TWOWHEEL = 222, // 二轮车 + VLR_JBC = 223, // 金杯JBC + VLR_YZJIANG = 224, // 扬子江客车 + VLR_CNJ = 225, // 南骏CNJ + VLR_FORLAND = 226, // 福田时代文字 + VLR_FARMCAR = 227, // 农用车 + VLR_DONGFANGHONG = 228, // 东方红 + VLR_STEYR = 229, // 斯太尔汽车 + VLR_HONGQI = 230, // 红旗 + VLR_USER1 = 231, //用户1 + VLR_USER2 = 232, //用户2 + VLR_USER3 = 233, //用户3 + VLR_USER4 = 234, //用户4 + VLR_USER5 = 235, //用户5 + VLR_USER6 = 236, //用户6 + VLR_USER7 = 237, //用户7 + VLR_USER8 = 238 //用户8 +}VLR_VEHICLE_CLASS; + +/********************车辆品牌子类型Begin*************************/ +//大众子品牌类型 +typedef enum _VSB_VOLKSWAGEN_CLASS +{ + VSB_VOLKSWAGEN_OTHER = 0, // 其他(保留) + VSB_VOLKSWAGEN_LAVIDA = 1, // 朗逸 + VSB_VOLKSWAGEN_CROSSLAVIDA = 2, // 朗境 + VSB_VOLKSWAGEN_TIGUAN = 3, // 途观 + VSB_VOLKSWAGEN_TOURAN = 4, // 途安 + VSB_VOLKSWAGEN_SANTANA = 5, // 桑塔纳 + VSB_VOLKSWAGEN_SANTANA2000 = 6, // 桑塔纳2000 + VSB_VOLKSWAGEN_SANTANA3000 = 7, // 桑塔纳3000 + VSB_VOLKSWAGEN_VISTA = 8, // 桑塔纳-志俊 + VSB_VOLKSWAGEN_PASSAT = 9, // 帕萨特 + VSB_VOLKSWAGEN_PASSATLINGYU = 10, // 帕萨特-领驭 + VSB_VOLKSWAGEN_POLO = 11, // 波罗 + VSB_VOLKSWAGEN_POLOCROSS = 12, // 波罗-运动版 + VSB_VOLKSWAGEN_POLOGTI = 13, // 波罗-GTI + VSB_VOLKSWAGEN_SAGITAR = 14, // 速腾 + VSB_VOLKSWAGEN_MAGOTAN = 15, // 迈腾 + VSB_VOLKSWAGEN_JETTA = 16, // 捷达 + VSB_VOLKSWAGEN_BORA = 17, // 宝来 + VSB_VOLKSWAGEN_NEWGOLF = 18, // 新高尔夫 + VSB_VOLKSWAGEN_GOLFGTI = 19, // 高尔夫-GTI + VSB_VOLKSWAGEN_GOL = 20, // 高尔 + VSB_VOLKSWAGEN_CADDY = 21, // 开迪 + VSB_VOLKSWAGEN_PHAETON = 22, // 辉腾 + VSB_VOLKSWAGEN_TOUREG = 23, // 途锐 + VSB_VOLKSWAGEN_SCIROCCO = 24, // 尚酷 + VSB_VOLKSWAGEN_BEETLE = 25, // 甲壳虫 + VSB_VOLKSWAGEN_SHARAN = 26, // 夏朗 + VSB_VOLKSWAGEN_MULTIVAN = 27, // 迈特威 + VSB_VOLKSWAGEN_CARBONCOPY = 28, // 一汽大众-CC + VSB_VOLKSWAGEN_VISTACHANGDA = 29, // 桑塔纳志俊-畅达 + VSB_VOLKSWAGEN_BORASPORTLINE = 30, // 宝来-SPORTLINE + VSR_VOLKSWAGEN_CC_1 =31, //大众-CC-2012,2011,2010 + VSR_VOLKSWAGEN_Cross_POLO_1 = 32, //大众-Cross-POLO-2010,2007 + VSR_VOLKSWAGEN_Cross_POLO_2 = 33, //大众-Cross-POLO-2014,2012 + VSR_VOLKSWAGEN_MULTIVAN_1 = 34, //大众-Multivan-2014,2012,2011 + VSR_VOLKSWAGEN_POLO_1 = 35, //大众-POLO-2006,2005,2004,2003,2002 + VSR_VOLKSWAGEN_POLO_2 = 36, //大众-POLO-2013,2012,2011 + VSR_VOLKSWAGEN_POLO_JINQU_1 = 37, //大众-POLO劲取-2009,2008,2007,2006 + VSR_VOLKSWAGEN_POLO_JINQU_2 = 38, //大众-POLO劲取-2011 + VSR_VOLKSWAGEN_Tiguan_1 = 39, //大众-Tiguan-2011,2009 + VSR_VOLKSWAGEN_Tiguan_2 = 40, //大众-Tiguan-2014,2013,2012 + VSR_VOLKSWAGEN_XIALANG_1 = 41, //大众-夏朗-2013,2012 + VSR_VOLKSWAGEN_BAOLAI_1 = 42, //大众-宝来-2005,2004 + VSR_VOLKSWAGEN_BAOLAI_2 = 43, //大众-宝来-2006 + VSR_VOLKSWAGEN_BAOLAI_3 = 44, //大众-宝来-2012,2011,2010,2009,2008 + VSR_VOLKSWAGEN_BAOLAI_4 = 45, //大众-宝来-2014,2013 + VSR_VOLKSWAGEN_SHANGKU_1 = 46, //大众-尚酷-2014,2013 + VSR_VOLKSWAGEN_PASATE_1 = 47, //大众-帕萨特-2003进口,2001领驭 + VSR_VOLKSWAGEN_PASATE_2 = 48, //大众-帕萨特-2007,2006,2005领驭 + VSR_VOLKSWAGEN_PASATE_3 = 49, //大众-帕萨特-2009,2008,2007,2005,2004,2003,2001,2000 + VSR_VOLKSWAGEN_PASATE_4 = 50, //大众-帕萨特-2011,2009领驭 + VSR_VOLKSWAGEN_PASATE_5 = 51, //大众-帕萨特-2014,2013,2012,2011 + VSR_VOLKSWAGEN_JIEDA_1 = 52, //大众-捷达-2005CIF伙伴,2002 + VSR_VOLKSWAGEN_JIEDA_2 = 53, //大众-捷达-2009,2008,2006,2005,2004 + VSR_VOLKSWAGEN_JIEDA_3 = 54, //大众-捷达-2012,2010 + VSR_VOLKSWAGEN_JIEDA_4 = 55, //大众-捷达-2013 + VSR_VOLKSWAGEN_LANGYI_1 = 56, //大众-朗逸-2012,2011,2010,2009,2008 + VSR_VOLKSWAGEN_LANGYI_2 = 57, //大众-朗逸-2013 + VSR_VOLKSWAGEN_SANGTANA_1 = 58, //大众-桑塔纳-2007,2002,2000,1999,1995 + VSR_VOLKSWAGEN_SANGTANA_2 = 59, //大众-桑塔纳-2014,2013 + VSR_VOLKSWAGEN_SANGTANA_3 = 60, //大众-桑塔纳2000-2003,2001,2000,1999,1998,1996 + VSR_VOLKSWAGEN_SANGTANA_4 = 61, //大众-桑塔纳3000-2007,2006,2005,2004,2003 + VSR_VOLKSWAGEN_SANGTANAZHIJUN_1 = 62, //大众-桑塔纳志俊(vista)-2011,2010,2009,2008 + VSR_VOLKSWAGEN_SANGTANAZHIJUN_2 = 63, //大众-桑塔纳志俊(vista)-2006 + VSR_VOLKSWAGEN_JIAKECHONG_1 = 64, //大众-甲壳虫-2010,2009,2008,2007,2006,2005 + VSR_VOLKSWAGEN_JIAKECHONG_2 = 65, //大众-甲壳虫-2014,2013 + VSR_VOLKSWAGEN_HUITENG_2 = 66, //大众-辉腾-2010,2009,2007,2006 + VSR_VOLKSWAGEN_MAITENG_1 = 67, //大众-迈腾-2011,2010,2009,2008,2007 + VSR_VOLKSWAGEN_MAITENG_2 = 68, //大众-迈腾-2013,2012 + VSR_VOLKSWAGEN_TUAN_3 = 69, //大众-途安-2006,2005,2004 + VSR_VOLKSWAGEN_TUAN_1 = 70, //大众-途安-2010,2009,2008 + VSR_VOLKSWAGEN_TUAN_2 = 71, //大众-途安-2013,2012,2011 + VSR_VOLKSWAGEN_TUGUAN_1 = 72, //大众-途观-2012,2011,2010 + VSR_VOLKSWAGEN_TURUI_1 = 73, //大众-途锐-2006,2005,2003 + VSR_VOLKSWAGEN_TURUI_2 = 74, //大众-途锐-2014,2013,2012,2011 + VSR_VOLKSWAGEN_SUTENG_1 = 75, //大众-速腾-2010,2009,2007,2006 + VSR_VOLKSWAGEN_SUTENG_2 = 76, //大众-速腾-2011 + VSR_VOLKSWAGEN_SUTENG_3 = 77, //大众-速腾-2014,2013,2012 + VSR_VOLKSWAGEN_GAOERFU_1 = 78, //大众-高尔夫-2008,2007,2006,2005,2004,2003 + VSR_VOLKSWAGEN_GAOERFU_2 = 79, //大众-高尔夫-2012,2011进口,2012,2011,2010 + VSR_VOLKSWAGEN_GAOERFU_3 = 80, //大众-高尔夫GTI-2013,2012,2011,2010 + VSR_VOLKSWAGEN_LANGYI_3 = 81, //大众-朗逸-2014 + VSR_VOLKSWAGEN_HUITENG_1 = 82 //大众-辉腾-2004 +} VSB_VOLKSWAGEN_CLASS; + +//别克子品牌类型 +typedef enum _VBR_BUICK_CLASS +{ + VBR_BUICK_OTHER = 0, // 其他(保留) + VBR_BUICK_ENCORE = 1, // 昂科拉 + VBR_BUICK_GL8 = 2, // GL8 + VBR_BUICK_LEGAL = 3, // 君威 + VBR_BUICK_LACROSS = 4, // 君越 + VBR_BUICK_EXCELLE = 5, // 凯越 + VBR_BUICK_EXCELLEGT = 6, // 英朗GT + VBR_BUICK_WXCELLEXT = 7, // 英朗XT + VBR_BUICK_ENCLAVE = 8, // 昂科雷 + VBR_BUICK_ROYAUM = 9, // 荣御 + VBR_BUICK_SAIL = 10, // 别克赛欧 + VBR_BUICK_EXCELLEHRV = 11, // 凯越HRV + VBR_BUICK_PARKAVENUE = 12, // 林荫大道 + VBR_BUICK_CENTURY = 13, // 新世纪 + VBR_BUICK_GL8_1 = 14, // 别克-GL8-2004,2003 + VBR_BUICK_GL8_2 = 15, // 别克-GL8-2007,2006,2005 + VBR_BUICK_GL8_3 = 16, // 别克-GL8-2010_2008_2006_2005陆尊 + VBR_BUICK_GL8_4 = 17, // 别克-GL8-2014,2013,2012,2011 + VBR_BUICK_GL8_5 = 18, // 别克-GL8-2014_2013_2011豪华版 + VBR_BUICK_ENCORE_1 = 19, // 别克-昂科拉-2014,2013 + VBR_BUICK_ENCLAVE_1 = 20, // 别克-昂科雷-2013,2010,2009 + VBR_BUICK_LEGAL_1 = 21, // 别克-君威-2001,2000,1999 + VBR_BUICK_LEGAL_2 = 22, // 别克-君威-2008,2006,2005,2004,2002 + VBR_BUICK_LEGAL_3 = 23, // 别克-君威-2013,2012,2011,2010,2009 + VBR_BUICK_LEGAL_4 = 24, // 别克-君威-2013_2012_2011运动版 + VBR_BUICK_LEGAL_5 = 25, // 别克-君威-2014 + VBR_BUICK_LEGAL_6 = 26, // 别克-君威-2014运动版 + VBR_BUICK_LACROSS_1 = 27, // 别克-君越-2008,2007,2006 + VBR_BUICK_LACROSS_2 = 28, // 别克-君越-2012,2011,2010,2009 + VBR_BUICK_LACROSS_3 = 29, // 别克-君越-2013 + VBR_BUICK_EXCELLE_1 = 30, // 别克-凯越-2006,2005,2004 + VBR_BUICK_EXCELLE_2 = 31, // 别克-凯越-2008_2006_2005_2004HRV + VBR_BUICK_EXCELLE_3 = 32, // 别克-凯越-2011,2009,2008 + VBR_BUICK_EXCELLE_4 = 33, // 别克-凯越-2013 + VBR_BUICK_PARKAVENUE_1 = 34, // 别克-林荫大道-2011,2010,2009,2008,2007 + VBR_BUICK_SAIL_1 = 35, // 别克-赛欧-2004,2003 + VBR_BUICK_EXCELLEGT_1 = 36, // 别克-英朗GT-2013,2012,2011,2010 + VBR_BUICK_WXCELLEXT_1 = 37, // 别克-英朗XT-2014,2013,2012,2010 + VBR_BUICK_CENTURY_1 = 38, // 别克-新世纪-2000 + VBR_BUICK_RONGYU_1 = 39 // 别克-荣御-2005,2004 +}VBR_BUICK_CLASS; + +//宝马子品牌类型 +typedef enum _VSB_BMW_CLASS +{ + VSB_BMW_OTHER = 0, // 其他(保留) + VSB_BMW_3SERIES = 1, // 宝马3系 + VSB_BMW_5SERIES = 2, // 宝马5系 + VSB_BMW_X1 = 3, // 宝马X1 + VSB_BMW_1SERIES = 4, // 宝马1系 + VSB_BMW_7SERIES = 5, // 宝马7系 + VSB_BMW_X3 = 6, // 宝马X3 + VSB_BMW_X5 = 7, // 宝马X5 + VSB_BMW_X6 = 8, // 宝马X6 + VSB_BMW_Z4 = 9, // 宝马Z4 + VSB_BMW_MINI = 10, // 迷你 + VSB_BMW_6SERIES = 11, //宝马6系 + VSB_BMW_YIXI_1 = 12, // 宝马-1系-2011,2010,2008,2007 + VSB_BMW_YIXI_2 = 13, // 宝马-1系-2013,2012 + VSB_BMW_SANXI_1 = 14, // 宝马-3系-2004 + VSB_BMW_SANXI_2 = 15, // 宝马-3系-2007,2005 + VSB_BMW_SANXI_3 = 16, // 宝马-3系-2012,2011,2010,2009 + VSB_BMW_SANXI_4 = 17, // 宝马-3系-2014,2013 + VSB_BMW_WUXI_1 = 18, // 宝马-5系-2010,2009,2008 + VSB_BMW_WUXI_2 = 19, // 宝马-5系-2013,2012,2011 + VSB_BMW_LIUXI_1 = 20, // 宝马-6系-未知 + VSB_BMW_QIXI_1 = 21, // 宝马-7系-2011,2010,2009 + VSB_BMW_QIXI_2 = 22, // 宝马-7系-2013 + VSB_BMW_X1_1 = 23, // 宝马-X1-2012,2010 + VSB_BMW_X1_2 = 24, // 宝马-X1-2014,2013 + VSB_BMW_X3_1 = 25, // 宝马-X3-2009,2008,2006 + VSB_BMW_X3_2 = 26, // 宝马-X3-2013,2012,2011 + VSB_BMW_X5_1 = 27, // 宝马-X5-2010,2009,2008 + VSB_BMW_X5_2 = 28, // 宝马-X5-2013,2012,2011 + VSB_BMW_X5_3 = 29, // 宝马-X5-2013运动型 + VSB_BMW_X6_1 = 30, // 宝马-X6-2013,2012,2011,2009,2008 + VSB_BMW_Z4_1 = 31 // 宝马-Z4-2004 +}VSB_BMW_CLASS; + +//本田子品牌类型 +typedef enum _VSB_HONDA_CLASS +{ + VSB_HONDA_OTHER = 0, // 其他(保留) + VSB_HONDA_CRV = 1, // 本田CR-V(思威) + VSB_HONDA_JADE = 2, // 杰德 + VSB_HONDA_CIVIC = 3, // 思域 + VSB_HONDA_SPIRIOR = 4, // 思铂睿 + VSB_HONDA_CIIMO = 5, // 思铭 + VSB_HONDA_ELYSION = 6, // 艾力绅 + VSB_HONDA_OBYSSEY = 7, // 奥赛德 + VSB_HONDA_FIT = 8, // 飞度 + VSB_HONDA_NEWCITY = 9, // 锋范 + VSB_HONDA_CROSSTOUR = 10, // 歌诗图 + VSB_HONDA_CRIDER = 11, // 凌派 + VSB_HONDA_ACCORD = 12, // 雅阁 + VSB_HONDA_CITY = 13, // 思迪 + VSB_HONDA_ANTILOCK = 14, // 阿柯德 + VSB_HONDA_CRZ = 15, // 本田CR-Z + VSB_HONDA_CRV_1 = 16, // 本田-CR-V-2004 + VSB_HONDA_CRV_2 = 17, // 本田-CR-V-2005 + VSB_HONDA_CRV_3 = 18, // 本田-CR-V-2008,2007 + VSB_HONDA_CRV_4 = 19, // 本田-CR-V-2010 + VSB_HONDA_CRV_5 = 20, // 本田-CR-V-2013,2012 + VSB_HONDA_CRIDER_1 = 21, // 本田-凌派-2014,2013 + VSB_HONDA_OBYSSEY_1 = 22, // 本田-奥德赛-2002 + VSB_HONDA_OBYSSEY_2 = 23, // 本田-奥德赛-2006,2005,2004 + VSB_HONDA_OBYSSEY_3 = 24, // 本田-奥德赛-2008,2007 + VSB_HONDA_OBYSSEY_4 = 25, // 本田-奥德赛-2011豪华版 + VSB_HONDA_CIVIC_1 = 26, // 本田-思域-2007 + VSB_HONDA_CIVIC_5 = 27, // 本田-思域-1996 + VSB_HONDA_CIVIC_2 = 28, // 本田-思域-2008,2006 + VSB_HONDA_CIVIC_3 = 29, // 本田-思域-2009 + VSB_HONDA_CIVIC_4 = 30, // 本田-思域-2013,2012,2011 + VSB_HONDA_CITY_1 = 31, // 本田-思迪-2008,2007,2006 + VSB_HONDA_SPIRIOR_1 = 32, // 本田-思铂睿-2009 + VSB_HONDA_SIMING_1 = 33, // 本田-思铭-2012 + VSB_HONDA_JIEDE_1 = 34, // 本田-杰德-2013 + VSB_HONDA_CROSSTOUR_1 = 35, // 本田-歌诗图-2013,2012,2010 + VSB_HONDA_AILISHEN_1 = 36, // 本田-艾力绅-2012 + VSB_HONDA_NEWCITY_1 = 37, // 本田-锋范-2009 + VSB_HONDA_NEWCITY_2 = 38, // 本田-锋范-2011 + VSB_HONDA_NEWCITY_3 = 39, // 本田-锋范-2014,2012 + VSB_HONDA_ACCORD_1 = 40, // 本田-雅阁-1996 + VSB_HONDA_ACCORD_2 = 41, // 本田-雅阁-1999 + VSB_HONDA_ACCORD_3 = 42, // 本田-雅阁-2001 + VSB_HONDA_ACCORD_4 = 43, // 本田-雅阁-2003 + VSB_HONDA_ACCORD_5 = 44, // 本田-雅阁-2008 + VSB_HONDA_ACCORD_6 = 45, // 本田-雅阁-2010 + VSB_HONDA_ACCORD_7 = 46, // 本田-雅阁-2011 + VSB_HONDA_ACCORD_8 = 47, // 本田-雅阁-2012 + VSB_HONDA_ACCORD_9 = 48, // 本田-雅阁-2013 + VSB_HONDA_ACCORD_10 = 49, // 本田-雅阁-2014 + VSB_HONDA_FIT_1 = 50, // 本田-飞度-2004 + VSB_HONDA_FIT_2 = 51, // 本田-飞度-2004三厢 + VSB_HONDA_FIT_3 = 52, // 本田-飞度-2005 + VSB_HONDA_FIT_4 = 53, // 本田-飞度-2007 + VSB_HONDA_FIT_5 = 54, // 本田-飞度-2008 + VSB_HONDA_FIT_6 = 55 // 本田-飞度-2013,2011 +}VSB_HONDA_CLASS; + +//标致子品牌类型 +typedef enum _VSB_PEUGEOT_CLASS +{ + VSB_PEUGEOT_OTHER = 0, // 其他(保留) + VSB_PEUGEOT_2008 = 1, // 标致2008 + VSB_PEUGEOT_207 = 2, // 标致207 + VSB_PEUGEOT_SENNA = 3, // 赛纳 + VSB_PEUGEOT_3008 = 4, // 标致3008 + VSB_PEUGEOT_301 = 5, // 标致301 + VSB_PEUGEOT_307 = 6, // 标致307 + VSB_PEUGEOT_308 = 7, // 标致308 + VSB_PEUGEOT_408 = 8, // 标致408 + VSB_PEUGEOT_508 = 9, // 标致508 + VSB_PEUGEOT_206 = 10, // 标致206 + VSB_PEUGEOT_407 = 11, // 标致407 + VSB_PEUGEOT_206_1 = 12, // 标致-206-未知 + VSB_PEUGEOT_207_1 = 13, // 标致-207两厢-2011,2010,2009 + VSB_PEUGEOT_207_2 = 14, // 标致-207两厢-2013 + VSB_PEUGEOT_3008_1 = 15, // 标致-3008-2014,2013 + VSB_PEUGEOT_301_1 = 16, // 标致-301-未知 + VSB_PEUGEOT_307_1 = 17, // 标致-307三厢-2007,2006,2005,2004 + VSB_PEUGEOT_307_2 = 18, // 标致-307三厢-2010,2009,2008 + VSB_PEUGEOT_307_3 = 19, // 标致-307两厢-2013_2012_2011CROSS + VSB_PEUGEOT_308_1 = 20, // 标致-308-2014,2013,2012 + VSB_PEUGEOT_407_1 = 21, // 标致-407-未知 + VSB_PEUGEOT_408_1 = 22, // 标致-408-2012,2011,2010 + VSB_PEUGEOT_408_2 = 23, // 标致-408-2013 + VSB_PEUGEOT_508_1 = 24, // 标致-508-2014,2013,2012,2011 + VSB_PEUGEOT_207_3 = 25, // 标致-207三厢-2011,2010,2009 + VSB_PEUGEOT_307_4 = 26 // 标致-307两厢-2013,2012,2010,2009,2008 + +}VSB_PEUGEOT_CLASS; + +//丰田子品牌类型 +typedef enum _VSB_TOYOTA_CLASS +{ + VSB_TOYOTA_OTHER = 0, // 其他(保留) + VSB_TOYOTA_HIGHLANDER = 1, // 汉兰达 + VSB_TOYOTA_CAMRY = 2, // 凯美瑞 + VSB_TOYOTA_YARIS = 3, // 雅力士 + VSB_TOYOTA_YARISL = 4, // YARIS L致炫 + VSB_TOYOTA_VERSO = 5, // 逸致 + VSB_TOYOTA_HUAGUAN = 6, // 花冠 + VSB_TOYOTA_CROWN = 7, // 皇冠 + VSB_TOYOTA_COROLLA = 8, // 卡罗拉 + VSB_TOYOTA_COSTER = 9, // 柯斯达 + VSB_TOYOTA_PRADO = 10, // 普拉多 + VSB_TOYOTA_PRIUS = 11, // 普锐斯 + VSB_TOYOTA_RAV4 = 12, // 丰田RAV4 + VSB_TOYOTA_REZI = 13, // 锐志 + VSB_TOYOTA_VIOS = 14, // 威驰 + VSB_TOYOTA_PREVIA = 15, // 普瑞维亚 + VSB_TOYOTA_HIACE = 16, // 海狮 + VSB_TOYOTA_86 = 17, // 丰田86 + VSB_TOYOTA_SPEQUOIA = 18, // 红杉 + VSB_TOYOTA_LANDCRUISER = 19, // 陆地巡洋舰(兰德酷路泽) + VSB_TOYOTA_SIENNA = 20, // 赛纳 + VSB_TOYOTA_CAMRYHYBRID = 21, // 凯美瑞-HYBRID + VSB_TOYOTA_GRACE = 22, // 阁瑞斯 + VSB_TOYOTA_ALPHARD = 23, // 埃尔法 + VSB_TOYOTA_RAV4_1 = 24, // 丰田-RAV4-2012手动经典版,2011,2010,2009 + VSB_TOYOTA_RAV4_2 = 25, // 丰田-RAV4-2013 + VSB_TOYOTA_86_1 = 26, // 丰田-丰田86-未知 + VSB_TOYOTA_JIAMEI_2 = 27, // 丰田-佳美-2001,2000,1999,1998 + VSB_TOYOTA_JIAMEI_3 = 28, // 丰田-佳美-2004,2003,2002 + VSB_TOYOTA_LANDEKLZ_1 = 29, // 丰田-兰德酷路泽-2011中东版,2010,2007 + VSB_TOYOTA_KAIMEIRUI_1 = 30, // 丰田-凯美瑞-2008,2007,2006 + VSB_TOYOTA_KAIMEIRUI_2 = 31, // 丰田-凯美瑞-2012尊瑞 + VSB_TOYOTA_KAIMEIRUI_3 = 32, // 丰田-凯美瑞-2012经典版,2011,2010,2009 + VSB_TOYOTA_KAIMEIRUI_4 = 33, // 丰田-凯美瑞-2013,2012 + VSB_TOYOTA_KAIMEIRUI_5 = 34, // 丰田-凯美瑞-2013经典版 + VSB_TOYOTA_KAIMEIRUI_6 = 35, // 丰田-凯美瑞-2014,2012骏瑞 + VSB_TOYOTA_KALUOLA_1 = 36, // 丰田-卡罗拉-2010,2009,2008,2007,2006 + VSB_TOYOTA_KALUOLA_2 = 37, // 丰田-卡罗拉-2013,2012,2011 + VSB_TOYOTA_AIERFA_1 = 38, // 丰田-埃尔法-2011,2010 + VSB_TOYOTA_AIERFA_2 = 39, // 丰田-埃尔法-2013,2012 + VSB_TOYOTA_WEICHI_1 = 40, // 丰田-威驰-2004,2003 + VSB_TOYOTA_WEICHI_2 = 41, // 丰田-威驰-2007,2006,2005 + VSB_TOYOTA_WEICHI_3 = 42, // 丰田-威驰-2009,2008 + VSB_TOYOTA_WEICHI_4 = 43, // 丰田-威驰-2013,2012,2011,2010 + VSB_TOYOTA_WEICHI_5 = 44, // 丰田-威驰-2014 + VSB_TOYOTA_PULADUO_1 = 45, // 丰田-普拉多-2007,2006,2005,2004 + VSB_TOYOTA_PULADUO_2 = 46, // 丰田-普拉多-2010 + VSB_TOYOTA_PULADUO_3 = 47, // 丰田-普拉多-2014 + VSB_TOYOTA_PURUIWEIYA_1 = 48, // 丰田-普瑞维亚-2004 + VSB_TOYOTA_PURUIWEIYA_4 = 49, // 丰田-普瑞维亚-2005 + VSB_TOYOTA_PURUIWEIYA_2 = 50, // 丰田-普瑞维亚-2006 + VSB_TOYOTA_PURUIWEIYA_3 = 51, // 丰田-普瑞维亚-2012,2010,2008,2007 + VSB_TOYOTA_KESIDA_1 = 52, // 丰田-柯斯达-2007 + VSB_TOYOTA_KESIDA_2 = 53, // 丰田-柯斯达-2011 + VSB_TOYOTA_HANLANDA_1 = 54, // 丰田-汉兰达-2011,2009 + VSB_TOYOTA_HANLANDA_2 = 55, // 丰田-汉兰达-2012 + VSB_TOYOTA_HANLANDA_3 = 56, // 丰田-汉兰达-2013 + VSB_TOYOTA_HAISHI_1 = 57, // 丰田-海狮-2001 + VSB_TOYOTA_HUANGGUAN_1 = 58, // 丰田-皇冠-1999 + VSB_TOYOTA_HUANGGUAN_2 = 59, // 丰田-皇冠-2009,2008,2007,2006,2005 + VSB_TOYOTA_HUANGGUAN_3 = 60, // 丰田-皇冠-2010 + VSB_TOYOTA_HUANGGUAN_4 = 61, // 丰田-皇冠-2012,2011 + VSB_TOYOTA_HONGSHAN_1 = 62, // 丰田-红杉-未知 + VSB_TOYOTA_HUAGUAN_1 = 63, // 丰田-花冠-2006,2005,2004 + VSB_TOYOTA_HUAGUAN_2 = 64, // 丰田-花冠-2009,2008,2007 + VSB_TOYOTA_HUAGUAN_3 = 65, // 丰田-花冠-2011,2010 + VSB_TOYOTA_YIZHI_1 = 66, // 丰田-逸致-2014,2012,2011 + VSB_TOYOTA_RUIZHI_1 = 67, // 丰田-锐志-2006,2005 + VSB_TOYOTA_RUIZHI_2 = 68, // 丰田-锐志-2009,2008,2007 + VSB_TOYOTA_RUIZHI_3 = 69, // 丰田-锐志-2010风度版 + VSB_TOYOTA_RUIZHI_4 = 70, // 丰田-锐志-2012,2010 + VSB_TOYOTA_LUDIXUNYANG_1 = 71, // 丰田-陆地巡洋舰-未知 + VSB_TOYOTA_YALISHI_1 = 72, // 丰田-雅力士-2009,2008,2007 + VSB_TOYOTA_YALISHI_2 = 73, // 丰田-雅力士-2012,2011,2010 + VSB_TOYOTA_RAV4_3 = 74, // 丰田-RAV4-2013经典,精英,尊崇,2012 + VSB_TOYOTA_YARiSL_1 = 75, // 丰田-YARiS-L + VSB_TOYOTA_JIAMEI_1 = 76, // 丰田-佳美-1996 + VSB_TOYOTA_PLATZ_1 = 77, // 丰田-PLATZ-1999 + VSB_TOYOTA_LANDEKLZ_2 = 78 // 丰田-兰德酷路泽-2014,2012中东版,2012 +}VSB_TOYOTA_CLASS; + +//福特子品牌类型 +typedef enum _VSB_FORD_CLASS +{ + VSB_FORD_OTHER = 0, // 其他(保留) + VSB_FORD_FOCUS = 1, // 福克斯 + VSB_FORD_FIESTA = 2, // 嘉年华 + VSB_FORD_SMAX = 3, // 麦柯斯 + VSB_FORD_MONDEO = 4, // 蒙迪欧 + VSB_FORD_ECOSPORT = 5, // 翼博 + VSB_FORD_ESCAPE = 6, // 翼虎 + VSB_FORD_ZHISHENG = 7, // 致胜 + VSB_FORD_ESCORT = 8, // 福睿斯 + VSB_FORD_EXPLORER = 9, // 福特探险者 + VSB_FORD_EDGE = 10, // 锐界 + VSB_FORD_TRANSIT = 11, // 全顺 + VSB_FORD_QUANSHUN_1 = 12, // 福特-全顺-未知 + VSB_FORD_JIANIANHUA_1 = 13, // 福特-嘉年华三厢-2006,2005,2004 + VSB_FORD_JIANIANHUA_2 = 14, // 福特-嘉年华三厢-2011,2010,2009 + VSB_FORD_JIANIANHUA_3 = 15, // 福特-嘉年华三厢-2013 + VSB_FORD_JIANIANHUA_4 = 16, // 福特-嘉年华两厢-2012 + VSB_FORD_TANXIANZHE_1 = 17, // 福特-探险者-2013,2011 + VSB_FORD_FOCUS_1 = 18, // 福特-福克斯三厢-2005 + VSB_FORD_FOCUS_2 = 19, // 福特-福克斯三厢-2005经典型 + VSB_FORD_FOCUS_3 = 20, // 福特-福克斯三厢-2008,2007,2006 + VSB_FORD_FOCUS_4 = 21, // 福特-福克斯三厢-2013,2012经典,2011,2009 + VSB_FORD_FOCUS_5 = 22, // 福特-福克斯两厢-2012 + VSB_FORD_FOCUS_6 = 23, // 福特-福克斯两厢-2012基本,时尚,2011,2010,2009,2008 + VSB_FORD_YIBO_1 = 24, // 福特-翼博-2013 + VSB_FORD_YIHU_1 = 25, // 福特-翼虎-2013 + VSB_FORD_MENGDIOU_1 = 26, // 福特-蒙迪欧-2003 + VSB_FORD_MENGDIOU_2 = 27, // 福特-蒙迪欧-2005,2004 + VSB_FORD_MENGDIOU_3 = 28, // 福特-蒙迪欧-2006 + VSB_FORD_MENGDIOU_4 = 29, // 福特-蒙迪欧-2013 + VSB_FORD_MENGDIOU_5 = 30, // 福特-蒙迪欧-致胜-2010,2008,2007 + VSB_FORD_MENGDIOU_6 = 31, // 福特-蒙迪欧-致胜-2011 + VSB_FORD_RUIJIE_1 = 32, // 福特-锐界-2012,2011 + VSB_FORD_MAIKESI_1 = 33 // 福特-麦柯斯-2008,2007 +}VSB_FORD_CLASS; + +//日产子品牌类型 +typedef enum _VSB_NISSAN_CLASS +{ + VSB_NISSAN_OTHER = 0, // 其他(保留) + VSB_NISSAN_XTRAIL = 1, // 奇骏 + VSB_NISSAN_MURANO = 2, // 楼兰 + VSB_NISSAN_LIVINA = 3, // 骊威 + VSB_NISSAN_MARCH = 4, // 玛驰 + VSB_NISSAN_TIIDA = 5, // 骐达 + VSB_NISSAN_TEANA = 6, // 天籁 + VSB_NISSAN_QASHQAI = 7, // 逍客 + VSB_NISSAN_SYLPHY = 8, // 轩逸 + VSB_NISSAN_SUNNY = 9, // 阳光 + VSB_NISSAN_D22PICKUP = 10, // D22皮卡 + VSB_NISSAN_D22VAN = 11, // D22厢式车 + VSB_NISSAN_CABSTAR = 12, // 凯普斯达 + VSB_NISSAN_HV200 = 13, // NV200 + VSB_NISSAN_PALADIN = 14, // 帕拉丁 + VSB_NISSAN_YIDA = 15, // 颐达 + VSB_NISSAN_DUCK = 16, // 公爵 + VSB_NISSAN_CEFIRO = 17, // 风度 + VSB_NISSAN_FENGSHENBLUEBIRD = 18, // 风神蓝鸟 + VSB_NISSAN_FENGSHENSUNNY = 19, // 风神阳光 + VSB_NISSAN_SUCCE = 20, // 帅客 + VSB_NISSAN_FUGA = 21, // 风雅 + VSB_NISSAN_BLUEBIRD4 = 22, // 蓝鸟4代 + VSB_NISSAN_VENUCIA = 23, // 启辰 + VSB_NISSAN_QUEST = 24, // 贵士 + VSB_NISSAN_GENISS = 25, // 俊逸 + VSB_NISSAN_NV200_1 = 26, // 日产-NV200-2013,2012,2011,2010 + VSB_NISSAN_TIANLAI_1 = 27, // 日产-天籁-2005,2004 + VSB_NISSAN_TIANLAI_2 = 28, // 日产-天籁-2007,2006 + VSB_NISSAN_TIANLAI_3 = 29, // 日产-天籁-2010,2008 + VSB_NISSAN_TIANLAI_4 = 30, // 日产-天籁-2012,2011 + VSB_NISSAN_TIANLAI_5 = 31, // 日产-天籁-2012云安全版,2011公爵 + VSB_NISSAN_TIANLAI_6 = 32, // 日产-天籁-2014,2013 + VSB_NISSAN_QIJUN_1 = 33, // 日产-奇骏-2010,2008 + VSB_NISSAN_QIJUN_2 = 34, // 日产-奇骏-2012,2011进口 + VSB_NISSAN_PALADING_1 = 35, // 日产-帕拉丁-2013,2011,2006,2004 + VSB_NISSAN_LOULAN_1 = 36, // 日产-楼兰-2013,2011 + VSB_NISSAN_LOULAN_2 = 37, // 日产-玛驰-2010 + VSB_NISSAN_LANNIAO_1 = 38, // 日产-蓝鸟-2002 + VSB_NISSAN_LANNIAO_2 = 39, // 日产-蓝鸟-2003 + VSB_NISSAN_LANNIAO_3 = 40, // 日产-蓝鸟-2004 + VSB_NISSAN_GUISHI_1 = 41, // 日产-贵士-2005 + VSB_NISSAN_XUANYI_1 = 42, // 日产-轩逸-2006 + VSB_NISSAN_XUANYI_2 = 43, // 日产-轩逸-2012经典,2009,2007 + VSB_NISSAN_XUANYI_3 = 44, // 日产-轩逸-2014,2012 + VSB_NISSAN_XIAOKE_1 = 45, // 日产-逍客-2009,2008 + VSB_NISSAN_XIAOKE_2 = 46, // 日产-逍客-2013,2012,2011 + VSB_NISSAN_SUNNY_3 = 47, // 日产-阳光-2004 + VSB_NISSAN_SUNNY_1 = 48, // 日产-阳光-2006,2005 + VSB_NISSAN_SUNNY_2 = 49, // 日产-阳光-2012,2011 + VSB_NISSAN_YIDA_1 = 50, // 日产-颐达-2008,2006,2005 + VSB_NISSAN_YIDA_2 = 51, // 日产-颐达-未知 + VSB_NISSAN_FENGDU_1 = 52, // 日产-风度-未知 + VSB_NISSAN_FENGYA_1 = 53, // 日产-风雅-未知 + VSB_NISSAN_LIWEI_1 = 54, // 日产-骊威-2008,2007 + VSB_NISSAN_LIWEI_2 = 55, // 日产-骊威-2009 + VSB_NISSAN_LIWEI_3 = 56, // 日产-骊威-2010 + VSB_NISSAN_LIWEI_4 = 57, // 日产-骊威-2011,2010劲锐,2008炫能型 + VSB_NISSAN_JUNYI_1 = 58, // 日产-骏逸-2006 + VSB_NISSAN_QIDA_1 = 59, // 日产-骐达-2006,2005 + VSB_NISSAN_QIDA_2 = 60, // 日产-骐达-2009,2008 + VSB_NISSAN_QIDA_3 = 61, // 日产-骐达-2013,2012,2011 + VSB_NISSAN_RUIQI_1 = 62 // 日产-锐骐皮卡-2009豪华型 +}VSB_NISSAN_CLASS; + +//奥迪子品牌类型 +typedef enum _VSB_AUDI_CLASS +{ + VSB_AUDI_OTHER = 0, // 其他(保留) + VSB_AUDI_A3 = 1, // 奥迪A3 + VSB_AUDI_A4L = 2, // 奥迪A4L + VSB_AUDI_A6L = 3, // 奥迪A6L + VSB_AUDI_Q3 = 4, // 奥迪Q3 + VSB_AUDI_Q5 = 5, // 奥迪Q5 + VSB_AUDI_A1 = 6, // 奥迪A1 + VSB_AUDI_A4 = 7, // 奥迪A4 + VSB_AUDI_A5 = 8, // 奥迪A5 + VSB_AUDI_A6 = 9, // 奥迪A6 + VSB_AUDI_A7 = 10, // 奥迪A7 + VSB_AUDI_A8L = 11, // 奥迪A8L + VSB_AUDI_Q7 = 12, // 奥迪Q7 + VSB_AUDI_S5 = 13, // 奥迪S5 + VSB_AUDI_TT = 14, // 奥迪TT + VSB_AUDI_100 = 15, // 奥迪100 + VSB_AUDI_200 = 16, // 奥迪200 + VSB_AUDI_S7 = 17, // 奥迪S7 + VSB_AUDI_S8 = 18, // 奥迪S8 + VSB_AUDI_100_1 = 19, // 奥迪-100-未知 + VSB_AUDI_200_1 = 20, // 奥迪-200-未知 + VSB_AUDI_A1_1 = 21, // 奥迪-A1-2014,2013,2012 + VSB_AUDI_A3_1 = 22, // 奥迪-A3-2013,2010舒适版 + VSB_AUDI_A3_2 = 23, // 奥迪-A3-2013技术型,2011,2010 + VSB_AUDI_A4_1 = 24, // 奥迪-A4-2005国产,2000进口版 + VSB_AUDI_A4_2 = 25, // 奥迪-A4-2007,2006国产,2004进口 + VSB_AUDI_A4L_1 = 26, // 奥迪-A4L-2013 + VSB_AUDI_A5_1 = 27, // 奥迪-A5-2011,2010 + VSB_AUDI_A6_1 = 28, // 奥迪-A6-1996,1995,1991 + VSB_AUDI_A6L_1 = 29, // 奥迪-A6L-2008,2007,2006,2005 + VSB_AUDI_A6L_2 = 30, // 奥迪-A6L-2011,2010,2009 + VSB_AUDI_A6L_3 = 31, // 奥迪-A6L-2014,2013,2012 + VSB_AUDI_A7_1 = 32, // 奥迪-A7-2014,2013进取型,2012,2011 + VSB_AUDI_A8L_1 = 33, // 奥迪-A8L-2006 + VSB_AUDI_A8L_2 = 34, // 奥迪-A8L-2009,2008 + VSB_AUDI_A8L_3 = 35, // 奥迪-A8L-2011 + VSB_AUDI_A8L_4 = 36, // 奥迪-A8L-2013,2012 + VSB_AUDI_Q3_1 = 37, // 奥迪-Q3-2014,2013,2012 + VSB_AUDI_Q5_1 = 38, // 奥迪-Q5-2012,2010运动 + VSB_AUDI_Q5_2 = 39, // 奥迪-Q5-2012豪华型,2010越野版 + VSB_AUDI_Q5_3 = 40, // 奥迪-Q5-2012进取型,2011,2010,2009 + VSB_AUDI_Q5_4 = 41, // 奥迪-Q5-2013 + VSB_AUDI_Q7_1 = 42, // 奥迪-Q7-2007 + VSB_AUDI_Q7_2 = 43, // 奥迪-Q7-2014,2013 + VSB_AUDI_S7_1 = 44, // 奥迪-S7-2013 + VSB_AUDI_S8_1 = 45, // 奥迪-S8-2013 + VSB_AUDI_TT_2 = 46, // 奥迪-TT-2010,2008,2007 + VSB_AUDI_TT_3 = 47, // 奥迪-TT-2012,2011 + VSB_AUDI_TT_4 = 48, // 奥迪-TT-2013,2013,2011TTS + VSB_AUDI_TT_1 = 49 // 奥迪-TT-2008TTS +}VSB_AUDI_CLASS; + +//马自达子品牌类型 +typedef enum _VSB_MAZDA_CLASS +{ + VSB_MAZDA_OTHER = 0, // 其他(保留) + VSB_MAZDA_CX5 = 1, // 马自达CX5 + VSB_MAZDA_2 = 2, // 马自达2 + VSB_MAZDA_3 = 3, // 马自达3 + VSB_MAZDA_6 = 4, // 马自达6 + VSB_MAZDA_8 = 5, // 马自达8 + VSB_MAZDA_COREWING = 6, // 睿翼 + VSB_MAZDA_CX7 = 7, // 马自达CX7 + VSB_MAZDA_X5 = 8, // 马自达X5 + VSB_MAZDA_5 = 9, // 马自达5 + VSB_MAZDA_PREMACY = 10, // 老款普力马 + VSB_MAZDA_MPV = 11, // 马自达MPV + VSB_MAZDA_CX5_1 = 12, // 马自达-CX-5-2014,2013,2012进口 + VSB_MAZDA_CX7_1 = 13, // 马自达-CX-7-2014,2013,2011,2010 + VSB_MAZDA_2_1 = 14, // 马自达-Mazda2两厢-2011,2009,2008,2007A + VSB_MAZDA_3_1 = 15, // 马自达-Mazda3三厢-2004,2002 + VSB_MAZDA_3_2 = 16, // 马自达-Mazda3三厢-2009,2007 + VSB_MAZDA_3_3 = 17, // 马自达-Mazda3三厢-2012,2010 + VSB_MAZDA_3_4 = 18, // 马自达-Mazda3星骋两厢-2013,2012 + VSB_MAZDA_5_1 = 19, // 马自达-Mazda5-2010,2008,2007 + VSB_MAZDA_5_2 = 20, // 马自达-Mazda5-2013,2012,2011 + VSB_MAZDA_6_2 = 21, // 马自达-Mazda6-2006 + VSB_MAZDA_6_3 = 22, // 马自达-Mazda6-2007 + VSB_MAZDA_8_1 = 23, // 马自达-Mazda8-2013,2011,2010 + VSB_MAZDA_PREMACY_1 = 24, // 马自达-普力马-2003 + VSB_MAZDA_PREMACY_2 = 25, // 马自达-普力马-2006,2005,2004 + VSB_MAZDA_COREWING_1 = 26, // 马自达-睿翼-2012,2011,2010,2009 + VSB_MAZDA_COREWING_2 = 27, // 马自达-睿翼轿跑-2011,2010 + VSB_MAZDA_COREWING_3 = 28, // 马自达-睿翼轿跑-2012 + VSB_MAZDA_2_2 = 29, // 马自达-Mazda2劲翔(三厢)-2011,2010,2008 + VSB_MAZDA_6_1 = 30, // 马自达-Mazda6-2004 + VSB_MAZDA_6_4 = 31 // 马自达-Mazda6-2014,2013,2012,2011,2010 +}VSB_MAZDA_CLASS; + +//雪佛兰子品牌类型 +typedef enum _VSB_CHEVROLET_CLASS +{ + VSB_CHEVROLET_OTHER = 0, // 其他(保留) + VSB_CHEVROLET_NEWAVEO = 1, // 爱唯欧 + VSB_CHEVROLET_EPICA = 2, // 景程 + VSB_CHEVROLET_CRUZE = 3, // 科鲁兹 + VSB_CHEVROLET_CAPTIVA = 4, // 科帕奇 + VSB_CHEVROLET_MALIBU = 5, // 迈锐宝 + VSB_CHEVROLET_SAIL = 6, // 赛欧 + VSB_CHEVROLET_CAMARO = 7, // 科迈罗 + VSB_CHEVROLET_LECHENG = 8, // 乐成 + VSB_CHEVROLET_LOVA = 9, // 乐风 + VSB_CHEVROLET_OLDAVEO = 10, // 乐骋-老款爱唯欧 + VSB_CHEVROLET_SPARK = 11, // 乐驰 + VSB_CHEVROLET_SAILSRV = 12, // 赛欧SRV + VSB_CHEVROLET_LOVA_1 = 13, // 雪佛兰-乐风-2009,2008,2007,2006 + VSB_CHEVROLET_LOVA_2 = 14, // 雪佛兰-乐风-2010 + VSB_CHEVROLET_SPARK_1 = 15, // 雪佛兰-乐驰-2010,2009,2006,2005,2004 + VSB_CHEVROLET_SPARK_2 = 16, // 雪佛兰-乐驰-2010运动款 + VSB_CHEVROLET_OLDAVEO_1 = 17, // 雪佛兰-乐骋-2005 + VSB_CHEVROLET_OLDAVEO_2 = 18, // 雪佛兰-乐骋-2010,2009,2008 + VSB_CHEVROLET_EPICA_1 = 19, // 雪佛兰-景程-2005 + VSB_CHEVROLET_EPICA_3 = 20, // 雪佛兰-景程-2012,2011,2010 + VSB_CHEVROLET_EPICA_4 = 21, // 雪佛兰-景程-2012,2011,2010致真版 + VSB_CHEVROLET_EPICA_5 = 22, // 雪佛兰-景程-2013 + VSB_CHEVROLET_NEWAVEO_1 = 23, // 雪佛兰-爱唯欧三厢-2013,2012,2011 + VSB_CHEVROLET_CAPTIVA_1 = 24, // 雪佛兰-科帕奇-2010,2008 + VSB_CHEVROLET_CAPTIVA_2 = 25, // 雪佛兰-科帕奇-2014,2013,2012,2011 + VSB_CHEVROLET_KEMAILUO_1 = 26, // 雪佛兰-科迈罗-2012,2011 + VSB_CHEVROLET_CRUZE_1 = 27, // 雪佛兰-科鲁兹-2014,2013,2012,2011,2010,2009 + VSB_CHEVROLET_SAIL_1 = 28, // 雪佛兰-赛欧三厢-2005 + VSB_CHEVROLET_SAIL_2 = 29, // 雪佛兰-赛欧三厢-2013,2011,2010 + VSB_CHEVROLET_MALIBU_1 = 30, // 雪佛兰-迈锐宝-2014,2013,2012 + VSB_CHEVROLET_EPICA_2 = 31 // 雪佛兰-景程-2009,2008,2007 +}VSB_CHEVROLET_CLASS; + +//雪铁龙子品牌类型 +typedef enum _VSB_CITROEN_CLASS +{ + VSB_CITROEN_OTHER = 0, // 其他(保留) + VSB_CITROEN_C2 = 1, // 雪铁龙C2 + VSB_CITROEN_C4L = 2, // 雪铁龙C4L + VSB_CITROEN_C5 = 3, // 雪铁龙C5 + VSB_CITROEN_ELYSEE = 4, // 爱丽舍三厢 + VSB_CITROEN_CQUATRELIANGXIANG = 5, // 世嘉两厢 + VSB_CITROEN_CQUATRESANXIANG = 6, // 世嘉三厢 + VSB_CITROEN_SAEAPICASSO = 7, // 萨拉-毕加索 + VSB_CITROEN_PICASSO = 8, // 毕加索 + VSB_CITROEN_CTRIOMPHE = 9, // 凯旋 + VSB_CITROEN_XSARA = 10, // 塞纳 + VSB_CITROEN_SHENLONGFUKANG = 11, // 神龙富康 + VSB_CITROEN_CHANGANDS = 12, // 长安DS + VSB_CITROEN_C2_1 = 13, // 雪铁龙-C2-2012,2010,2008,2007,2006 + VSB_CITROEN_C4L_1 = 14, // 雪铁龙-C4L-2014,2013 + VSB_CITROEN_C4PICASSO_1 = 15, // 雪铁龙-C4毕加索-2009舒适版 + VSB_CITROEN_C5_1 = 16, // 雪铁龙-C5-2012,2011,2010 + VSB_CITROEN_CQUATRESANXIANG_1 = 17, // 雪铁龙-世嘉三厢-2013,2012 + VSB_CITROEN_CQUATRELIANGXIANG_1 = 18, // 雪铁龙-世嘉两厢-2011,2010,2009,2008 + VSB_CITROEN_CTRIOMPHE_1 = 19, // 雪铁龙-凯旋-2010,2009,2008,2006 + VSB_CITROEN_FUKANG_1 = 20, // 雪铁龙-富康-2006,2005,2004,2003,2002 + VSB_CITROEN_ELYSEE_1 = 21, // 雪铁龙-爱丽舍三厢-2006,2005,2004,2003,2002 + VSB_CITROEN_ELYSEE_2 = 22, // 雪铁龙-爱丽舍三厢-2013,2012,2011,2010,2009,2008,2007 + VSB_CITROEN_SAEAPICASSO_1 = 23 // 雪铁龙-萨拉-毕加索-2014 +}VSB_CITROEN_CLASS; + +//现代子品牌类型 +typedef enum _VSB_HYUNDAI_CLASS +{ + VSB_HYUNDAI_OTHER = 0, // 其他(保留) + VSB_HYUNDAI_IX35 = 1, // 现代IX35 + VSB_HYUNDAI_LANGDONG = 2, // 朗动 + VSB_HYUNDAI_MOINCA = 3, // 名驭 + VSB_HYUNDAI_SHENGDA = 4, // 胜达 + VSB_HYUNDAI_VERNA = 5, // 瑞纳 + VSB_HYUNDAI_RUIYI = 6, // 瑞奕 + VSB_HYUNDAI_SONATAEIGHT = 7, // 索纳塔八 + VSB_HYUNDAI_TUCSON = 8, // 途胜 + VSB_HYUNDAI_YUEDONG = 9, // 悦动 + VSB_HYUNDAI_ELANTRA = 10, // 伊兰特 + VSB_HYUNDAI_GRANDSANTAFE = 11, // 格锐 + VSB_HYUNDAI_COUPE = 12, // 酷派 + VSB_HYUNDAI_MATRIX = 13, // 美佳 + VSB_HYUNDAI_ACCENT = 14, // 雅绅特 + VSB_HYUNDAI_IX30 = 15, // 现代IX30 + VSB_HYUNDAI_SONATA = 16, // 索纳塔 + VSB_HYUNDAI_REFINE = 17, // 现代瑞风商务车 + VSB_HYUNDAI_MISTRA = 18, // 名图 + VSB_HYUNDAI_SONATAYUFENG = 19, // 索纳塔-御翔 + VSB_HYUNDAI_SANTAFE = 20, // 现代圣达菲 + VSB_HYUNDAI_HUIYI = 21, // 进口辉翼 + VSB_HYUNDAI_I30_1 = 22, // 现代-i30-2010,2009 + VSB_HYUNDAI_IX35_1 = 23, // 现代-ix35-2012,2011,2010 + VSB_HYUNDAI_YILANTE_1 = 24, // 现代-伊兰特-2006,2005,2004 + VSB_HYUNDAI_YILANTE_2 = 25, // 现代-伊兰特-2007三厢 + VSB_HYUNDAI_YILANTE_3 = 26, // 现代-伊兰特-2011 + VSB_HYUNDAI_SHENGDA_1 = 27, // 现代-全新胜达-2013,2012 + VSB_HYUNDAI_MINGTU_1 = 28, // 现代-名图-2014,2013 + VSB_HYUNDAI_MINGYU_1 = 29, // 现代-名驭-2013,2011,2009 + VSB_HYUNDAI_SHENGDAFEI_1 = 30, // 现代-圣达菲-未知 + VSB_HYUNDAI_YUXIANG_1 = 31, // 现代-御翔-2005舒适版 + VSB_HYUNDAI_YUXIANG_2 = 32, // 现代-御翔-2006,2005 + VSB_HYUNDAI_YUEDONG_1 = 33, // 现代-悦动-2010,2009,2008 + VSB_HYUNDAI_YUEDONG_2 = 34, // 现代-悦动-2012,2011 + VSB_HYUNDAI_SHENGDA_2 = 35, // 现代-新胜达-2009,2006 + VSB_HYUNDAI_SHENGDA_3 = 36, // 现代-新胜达-2012,2011,2010 + VSB_HYUNDAI_LANGDONG_1 = 37, // 现代-朗动-2013,2012 + VSB_HYUNDAI_GERUI_1 = 38, // 现代-格锐-未知 + VSB_HYUNDAI_RUIYI_1 = 39, // 现代-瑞奕-2014 + VSB_HYUNDAI_RUINA_1 = 40, // 现代-瑞纳三厢-2013,2010 + VSB_HYUNDAI_RUINA_2 = 41, // 现代-瑞纳两厢-2014,2013,2011 + VSB_HYUNDAI_RUIFENG_1 = 42, // 现代-瑞风-未知 + VSB_HYUNDAI_SUONATA_1 = 43, // 现代-索纳塔-2008,2007,2006,2004,2003标准型 + VSB_HYUNDAI_SUONATA_2 = 44, // 现代-索纳塔-2010,2009,2008,2006,2004 + VSB_HYUNDAI_SOUNATA_3 = 45, // 现代-索纳塔八-2011,2010 + VSB_HYUNDAI_WEILAKESI_1 = 46, // 现代-维拉克斯-2012,2010,2008,2007 + VSB_HYUNDAI_MEIJIA_1 = 47, // 现代-美佳-未知 + VSB_HYUNDAI_JINKOUHUIYI_1 = 48, // 现代-进口辉翼-未知 + VSB_HYUNDAI_TUSHENG_1 = 49, // 现代-途胜-2005 + VSB_HYUNDAI_TUSHENG_2 = 50, // 现代-途胜-2011,2009,2008,2006 + VSB_HYUNDAI_TUSHENG_3 = 51, // 现代-途胜-2013 + VSB_HYUNDAI_KUPAI_1 = 52, // 现代-酷派-未知 + VSB_HYUNDAI_YASHENTE_1 = 53, // 现代-雅绅特-2008,2006 + VSB_HYUNDAI_YASHENTE_2 = 54, // 现代-雅绅特-2011 + VSB_HYUNDAI_LINGXIANG_1 = 55, // 现代-领翔-2009,2008 + VSB_HYUNDAI_FEISI_1 = 56 // 现代-飞思-2011 +}VSB_HYUNDAI_CLASS; + +//奇瑞子品牌类型 +typedef enum _VSB_CHERY_CLASS +{ + VSB_CHERY_OTHER = 0, // 其他(保留) + VSB_CHERY_A1 = 1, // 奇瑞A1 + VSB_CHERY_A3 = 2, // 奇瑞A3 + VSB_CHERY_EASTAR = 3, // 东方之子 + VSB_CHERY_FULWIN = 4, // 风云 + VSB_CHERY_QQ = 5, // 奇瑞QQ + VSB_CHERY_E5 = 6, // 奇瑞E5 + VSB_CHERY_COWIN = 7, // 旗云 + VSB_CHERY_TIGGO = 8, // 瑞虎 + VSB_CHERY_A5 = 9, // 奇瑞A5 + VSB_CHERY_S16 = 10, // 奇瑞S16 + VSB_CHERY_YOUYA = 11, // 优雅 + VSB_CHERY_V5 = 12, // 奇瑞V5 + VSB_CHERY_E3 = 13, // 奇瑞E3 + VSB_CHERY_A1_1 = 14, // 奇瑞-A1-2011,2008,2007 + VSB_CHERY_A3LIANGXIANG_1 = 15, // 奇瑞-A3两厢-2012,2010,2009 + VSB_CHERY_A5_1 = 16, // 奇瑞-A5-2009,2007,2006 + VSB_CHERY_QQ_1 = 17, // 奇瑞-QQ-2006,2005,2004 + VSB_CHERY_QQ_2 = 18, // 奇瑞-QQ-2010,2007,2006 + VSB_CHERY_QQ_3 = 19, // 奇瑞-QQ-2012,2011,2010,2009,2007 + VSB_CHERY_QQ_4 = 20, // 奇瑞-QQ-2012运动版 + VSB_CHERY_QQ_5 = 21, // 奇瑞-QQ-2013 + VSB_CHERY_DONGFANGZHIZI_1 = 22, // 奇瑞-东方之子-2005,2004,2003 + VSB_CHERY_DONGFANGZHIZI_2 = 23, // 奇瑞-东方之子-2007,2006 + VSB_CHERY_DONGFANGZHIZI_3 = 24, // 奇瑞-东方之子CROSS-2009,2008,2007 + VSB_CHERY_YOUYA_1 = 25, // 奇瑞-优雅-未知 + VSB_CHERY_E3_1 = 26, // 奇瑞-奇瑞E3-2013 + VSB_CHERY_E5_1 = 27, // 奇瑞-奇瑞E5-2014,2012,2011 + VSB_CHERY_QIYUN1_1 = 28, // 奇瑞-旗云1-2010 + VSB_CHERY_QIYUN1_2 = 29, // 奇瑞-旗云1-2012 + VSB_CHERY_QIYUN_1 = 30, // 奇瑞-旗云-2004 + VSB_CHERY_QIYUN_2 = 31, // 奇瑞-旗云-2009,2008,2007,2006 + VSB_CHERY_QIYUN2_1 = 32, // 奇瑞-旗云2-2012 + VSB_CHERY_QIYUN2_2 = 33, // 奇瑞-旗云2-2012豪华型,2010 + VSB_CHERY_QIYUN3_1 = 34, // 奇瑞-旗云3-2010 + VSB_CHERY_RUIHU_1 = 35, // 奇瑞-瑞虎-2007,2006,2005 + VSB_CHERY_RUIHU_2 = 36, // 奇瑞-瑞虎-2009,2007 + VSB_CHERY_RUIHU_3 = 37, // 奇瑞-瑞虎-2012,2011 + VSB_CHERY_RUIHU_4 = 38, // 奇瑞-瑞虎-2013,2012自动DVVT豪华型 + VSB_CHERY_RUIHU_5 = 39, // 奇瑞-瑞虎-2013精英版豪华型,2012精英版舒适型 + VSB_CHERY_FENGYUN2SANXIANG_1 = 40, // 奇瑞-风云2三厢-2010 + VSB_CHERY_AIRUIZE7_1 = 41 // 奇瑞-艾瑞泽7-2014,2013 +}VSB_CHERY_CLASS; + +//起亚子品牌类型 +typedef enum _VSB_KIA_CLASS +{ + VSB_KIA_OTHER = 0, // 其他(保留) + VSB_KIA_K2 = 1, // 起亚K2 + VSB_KIA_K3 = 2, // 起亚K3 + VSB_KIA_K5 = 3, // 起亚K5 + VSB_KIA_RIO = 4, // 锐欧 + VSB_KIA_CERATO = 5, // 赛拉图 + VSB_KIA_SPORTAGER = 6, // 狮跑 + VSB_KIA_SOUL = 7, // 秀尔 + VSB_KIA_ZHIPAO = 8, // 智跑 + VSB_KIA_CARENS = 9, // 佳乐 + VSB_KIA_CARNIVAL = 10, // 嘉华 + VSB_KIA_OPTIMA = 11, // 远舰 + VSB_KIA_OPIRUS = 12, // 欧菲莱斯 + VSB_KIA_MAXIMA = 13, // 千里马 + VSB_KIA_FORTE = 14, // 福瑞迪 + VSB_KIA_SORENTO = 15, // 索兰托 + VSB_KIA_K2_1 = 16, // 起亚-K2-2013,2012,2011 + VSB_KIA_K3_1 = 17, // 起亚-K3-2012 + VSB_KIA_K5_1 = 18, // 起亚-K5-2012,2011 + VSB_KIA_RUIOU_1 = 19, // 起亚-RIO锐欧-2009,2007 + VSB_KIA_QIANLIMA_1 = 20, // 起亚-千里马-2004 + VSB_KIA_QIANLIMA_2 = 21, // 起亚-千里马-2006,2005 + VSB_KIA_JIAHUA_1 = 22, // 起亚-嘉华-未知 + VSB_KIA_XINJIALE_1 = 23, // 起亚-新佳乐-2011 + VSB_KIA_ZHIPAO_1 = 24, // 起亚-智跑-2014,2012,2011,2010 + VSB_KIA_SHIPAO_1 = 25, // 起亚-狮跑-2008,2007,2005 + VSB_KIA_SHIPAO_2 = 26, // 起亚-狮跑-2011,2009 + VSB_KIA_SHIPAO_3 = 27, // 起亚-狮跑-2012 + VSB_KIA_SHIPAO_4 = 28, // 起亚-狮跑-2013 + VSB_KIA_FURUIDI_1 = 29, // 起亚-福瑞迪-2012,2011,2009 + VSB_KIA_FURUIDI_2 = 30, // 起亚-福瑞迪-2014 + VSB_KIA_XIUER_1 = 31, // 起亚-秀尔-2012,2010 + VSB_KIA_SUOLANTUO_1 = 32, // 起亚-索兰托-2006 + VSB_KIA_SUOLANTUO_2 = 33, // 起亚-索兰托-2012,2010,2009 + VSB_KIA_SAILATU_1 = 34, // 起亚-赛拉图-2006,2005 + VSB_KIA_SAILATU_2 = 35, // 起亚-赛拉图-2007 + VSB_KIA_SAILATU_3 = 36, // 起亚-赛拉图-2012,2010GLS + VSB_KIA_YUANJIAN_1 = 37 // 起亚-远舰-未知 +}VSB_KIA_CLASS; + +//奔驰子品牌类型 +typedef enum _VSB_BENZ_CLASS +{ + VSB_BENZ_OTHER = 0, // 其他(保留) + VSB_BENZ_C = 1, // 奔驰C级 + VSB_BENZ_E = 2, // 奔驰E级 + VSB_BENZ_GLK = 3, // 奔驰GLK级 + VSB_BENZ_WEITING = 4, // 威霆-PINYIN + VSB_BENZ_SPRINTER = 5, // 凌特 + VSB_BENZ_VIANO = 6, // 唯雅诺 + VSB_BENZ_M = 7, // 奔驰M系 + VSB_BENZ_CLK = 8, // 奔驰CLK系 + VSB_BENZ_G = 9, // 奔驰G系 + VSB_BENZ_GL = 10, // 奔驰GL系 + VSB_BENZ_R = 11, // 奔驰R系 + VSB_BENZ_S = 12, // 奔驰S系 + VSB_BENZ_A = 13, // 奔驰A系 + VSB_BENZ_SMART = 14, // 斯玛特(精灵) + VSB_BENZ_B = 15, // 奔驰B系 + VSB_BENZ_SLK = 16, // 奔驰SLK系 + VSB_BENZ_MB100 = 17, // 奔驰MB100 + VSB_BENZ_VITO = 18, // 威特 + VSB_BENZ_CLS = 19, // 奔驰CLS系 + VSB_BENZ_SL = 20, // 奔驰SL系 + VSB_BENZ_AJI_1 = 21, // 奔驰-A级-2011,2009 + VSB_BENZ_AJI_2 = 22, // 奔驰-A级-2013 + VSB_BENZ_BJI_1 = 23, // 奔驰-B级-2010,2009 + VSB_BENZ_CJI_1 = 24, // 奔驰-C级-2010,2008,2007时尚型 + VSB_BENZ_CJI_2 = 25, // 奔驰-C级-2013,2011,CGI + VSB_BENZ_CJI_3 = 26, // 奔驰-C级-2013,2011时尚型 + VSB_BENZ_EJI_1 = 27, // 奔驰-E级-2002 + VSB_BENZ_EJI_2 = 28, // 奔驰-E级-2007,2006 + VSB_BENZ_EJI_3 = 29, // 奔驰-E级-2013,2012,2011,2010,2009 + VSB_BENZ_EJI_4 = 30, // 奔驰-E级-2013,2012,2011,2010,2009时尚型 + VSB_BENZ_GLKJI_1 = 31, // 奔驰-GLK级-2012,2011 + VSB_BENZ_GLKJI_2 = 32, // 奔驰-GLK级-2012,2011豪华型,2008 + VSB_BENZ_GLKJI_3 = 33, // 奔驰-GLK级-2014,2013 + VSB_BENZ_GLJI_1 = 34, // 奔驰-GL级-2011 + VSB_BENZ_GLJI_2 = 35, // 奔驰-GL级-2011尊贵型,2010 + VSB_BENZ_GLJI_3 = 36, // 奔驰-GL级-2012,2010北美版 + VSB_BENZ_GJI_1 = 37, // 奔驰-G级-2013,2010,2009 + VSB_BENZ_MB100_1 = 38, // 奔驰-MB100-2000 + VSB_BENZ_MLJI_1 = 39, // 奔驰-ML级-2006,2005 + VSB_BENZ_MLJI_2 = 40, // 奔驰-ML级-2010,2008 + VSB_BENZ_MLJI_3 = 41, // 奔驰-ML级-2014,2012 + VSB_BENZ_RJI_1 = 42, // 奔驰-R级-2006 + VSB_BENZ_RJI_2 = 43, // 奔驰-R级-2007 + VSB_BENZ_RJI_3 = 44, // 奔驰-R级-2014,2011,2010,2009 + VSB_BENZ_SLKJI_2 = 45, // 奔驰-SLK级-2006,2004 + VSB_BENZ_SLKJI_3 = 46, // 奔驰-SLK级-2010,2009 + VSB_BENZ_SLKJI_1 = 47, // 奔驰-SLK级-2011 + VSB_BENZ_SJI_1 = 48, // 奔驰-S级-2004 + VSB_BENZ_SJI_2 = 49, // 奔驰-S级-2009_Hybrid,2008,2006 + VSB_BENZ_SJI_3 = 50, // 奔驰-S级-2009,2008商务型 + VSB_BENZ_SJI_4 = 51, // 奔驰-S级-2012,2011,2010 + VSB_BENZ_LINGTE_1 = 52, // 奔驰-凌特-2013,2012,2011 + VSB_BENZ_WEIYANUO_1 = 53, // 奔驰-唯雅诺-2010,2006,2004 + VSB_BENZ_WEIYANUO_2 = 54, // 奔驰-唯雅诺-2014,2013,2012,2011 + VSB_BENZ_WEITING_1 = 55, // 奔驰-威霆-2013,2011,2010 + VSB_BENZ_KECHE_1 = 56 // 奔驰-客车车型1-A款 +}VSB_BENZ_CLASS; + +//斯柯达子品牌类型 +typedef enum _VSB_SKODA_CLASS +{ + VSB_SKODA_OTHER = 0, // 其他(保留) + VSB_SKODA_HAORUI = 1, // 昊锐 + VSB_SKODA_FABIA = 2, // 晶锐 + VSB_SKODA_OCTAVIA = 3, // 明锐 + VSB_SKODA_SUPERB = 4, // 速派 + VSB_SKODA_SPACEBACK = 5, // 昕动 + VSB_SKODA_RAPID = 6, // 昕锐 + VSB_SKODA_YETI = 7, // 野帝 + VSB_SKODA_HAORUI_1 = 8, // 斯柯达-昊锐-2013,2012,2010,2009 + VSB_SKODA_MINGRUI_1 = 9, // 斯柯达-明锐-2009,2008,2007 + VSB_SKODA_MINGRUI_2 = 10, // 斯柯达-明锐-2014,2013,2012,2011,2010 + VSB_SKODA_MINGRUI_3 = 11, // 斯柯达-明锐RS-2010 + VSB_SKODA_XINRUI_1 = 12, // 斯柯达-昕锐-2013乐选型 + VSB_SKODA_JINGRUI_1 = 13, // 斯柯达-晶锐-2011,2009,2008 + VSB_SKODA_JINGRUI_2 = 14, // 斯柯达-晶锐-2014,2013,2012 + VSB_SKODA_JINGRUI_3 = 15, // 斯柯达-晶锐-2014,2013,2012Sport版 + VSB_SKODA_SUPAI_1 = 16, // 斯柯达-速派-2013 + VSB_SKODA_YEDI_1 = 17 // 斯柯达-野帝-2014,2013 +}VSB_SKODA_CLASS; + +//东风子品牌类型 +typedef enum _VSB_DONGFENG_CLASS +{ + VSB_DONGFENG_OTHER = 0, // 其他(保留) + VSB_DONGFENG_JOYEARX5 = 1, // 景逸X5 + VSB_DONGFENG_LINGZHI = 2, // 菱智 + VSB_DONGFENG_JOYEARX3 = 3, // 景逸X3 + VSB_DONGFENG_JOYEAR = 4, // 景逸 + VSB_DONGFENG_FENGXINGCM7 = 5, // 风行CM7 + VSB_DONGFENG_YUFENG = 6, // 御风 + VSB_DONGFENG_FENGSHENA60 = 7, // 风神A60 + VSB_DONGFENG_FENGSHENS30 = 8, // 风神S30 + VSB_DONGFENG_FENGSHENH30CROSS = 9, // 风神H30-CROSS + VSB_DONGFENG_PICKUP = 10, // 东风皮卡 + VSB_DONGFENG_ZHONGXINGMIANBAOCHE = 11, // 东风中型面包车 + VSB_DONGFENG_XIAOXINGMIANBAOCHE = 12, // 东风小型面包车 + VSB_DONGFENG_ZHONGXINGVAN = 13, // 东风重型货车 + VSB_DONGFENG_QINGXINGXIANGSHIVAN = 14, // 东风轻型厢式货车 + VSB_DONGFENG_QINGZHONGXINGVAN = 15, // 东风轻中型普通货车 + VSB_DONGFENG_FENGSHENMERCURY = 16, // 风神水星 + VSB_DONGFENG_SUCCE = 17, // 帅客 + VSB_DONGFENG_ODIN = 18, // 奥丁 + VSB_DONGFENG_YUMSUN = 19, // 御轩 + VSB_DONGFENG_RUIQI = 20, // 锐骐 + VSB_DONGFENG_FENGGUANG = 21, // 风光 + VBR_DONGFENG_C35_1 = 22, // 东风-C35-2013 + VBR_DONGFENG_K07_1 = 23, // 东风-K07-2008 + VBR_DONGFENG_K07_2 = 24, // 东风-K07-2010,2006 + VBR_DONGFENG_V21_1 = 25, // 东风-V21-2011 + VBR_DONGFENG_JIALONG_1 = 26, // 东风-东风嘉龙-载货车 + VBR_DONGFENG_XKFG_1 = 27, // 东风-东风小康风光-2013 + VBR_DONGFENG_CV03_1 = 28, // 东风-俊风CV03-2012 + VBR_DONGFENG_KAIPUTE_1 = 29, // 东风-凯普特-C390 + VBR_DONGFENG_DUOLIKA_1 = 30, // 东风-多利卡-S2800 + VBR_DONGFENG_DUOLIKA_2 = 31, // 东风-多利卡-XL中卡 + VBR_DONGFENG_DUOLIKA_3 = 32, // 东风-多利卡-中卡 + VBR_DONGFENG_TIANJIN_1 = 33, // 东风-天锦-4X2载货车 + VBR_DONGFENG_TIANJIN_2 = 34, // 东风-天锦-A款 + VBR_DONGFENG_XBW_1 = 35, // 东风-小霸王-轻卡1 + VBR_DONGFENG_XBW_2 = 36, // 东风-小霸王-轻卡2 + VBR_DONGFENG_MENGKA_1 = 37, // 东风-梦卡-轻卡 + VBR_DONGFENG_FURUIKA_1 = 38, // 东风-福瑞卡-轻卡1 + VBR_DONGFENG_RUIQI_1 = 39, // 东风-锐骐皮卡-2013,2010,2009 + VBR_DONGFENG_A60_1 = 40, // 东风风神-A60-2014,2012 + VBR_DONGFENG_H30_1 = 41, // 东风风神-H30-Cross-2012,2011 + VBR_DONGFENG_H30_2 = 42, // 东风风神-H30-Cross-2014,2013 + VBR_DONGFENG_H30_3 = 43, // 东风风神-H30-2012 + VBR_DONGFENG_JINGYI_1 = 44, // 东风风行-景逸-2014_2012LV,2011豪华型 + VBR_DONGFENG_JINGYI_2 = 45, // 东风风行-景逸-2014_2012XL,2011,2010,2009,2008,2007 + VBR_DONGFENG_JINGYI_3 = 46, // 东风风行-景逸X5-2014,2013 + VBR_DONGFENG_LINGZHI_1 = 47, // 东风风行-菱智-2004 + VBR_DONGFENG_LINGZHI_2 = 48, // 东风风行-菱智-2011,2008,2007 + VBR_DONGFENG_LINGZHI_3 = 49, // 东风风行-菱智-2011Q3标准型,2010Q7 + VBR_DONGFENG_LINGZHI_4 = 50, // 东风风行-菱智-2014_2013M3 + VBR_DONGFENG_LINGZHI_5 = 51 // 东风风行-菱智-2014_2013V3,2011M3_商用版_舒适型 +}VSB_DONGFENG_CLASS; + +//比亚迪子品牌类型 +typedef enum _VSB_BYD_CLASS +{ + VSB_BYD_OTHER = 0, // 其他(保留) + VSB_BYD_F0 = 1, // 比亚迪F0 + VSB_BYD_F3 = 2, // 比亚迪F3 + VSB_BYD_F3R = 3, // 比亚迪F3R + VSB_BYD_F6 = 4, // 比亚迪F6 + VSB_BYD_G3 = 5, // 比亚迪G3 + VSB_BYD_G3R = 6, // 比亚迪G3R + VSB_BYD_G6 = 7, // 比亚迪G6 + VSB_BYD_L3 = 8, // 比亚迪L3 + VSB_BYD_M6 = 9, // 比亚迪M6 + VSB_BYD_S6 = 10, // 比亚迪S6 + VSB_BYD_SURUI = 11, // 速锐 + VSB_BYD_FOLEL = 12, // 秦川福莱尔 + VSB_BYD_SIRUI = 13, // 思锐 + VSB_BYD_MT5 = 14, // 比亚迪MT5(精灵) + VSB_BYD_F0_1 = 15, // 比亚迪-F0-2013,2012,2011,2010,2009,2008 + VSB_BYD_F3R_1 = 16, // 比亚迪-F3R-2011,2009,2008,2007 + VSB_BYD_F6_1 = 17, // 比亚迪-F6-2011,2009,2008 + VSB_BYD_G3R_1 = 18, // 比亚迪-G3R-2011 + VSB_BYD_G6_1 = 19, // 比亚迪-G6-2013,2012,2011 + VSB_BYD_L3_1 = 20, // 比亚迪-L3-2013,2012,2011,2010 + VSB_BYD_M6_1 = 21, // 比亚迪-M6-2013,2011,2010 + VSB_BYD_S6_1 = 22, // 比亚迪-S6-2014,2013,2012,2011 + VSB_BYD_FULAIER_1 = 23, // 比亚迪-福莱尔-2005豪华型 + VSB_BYD_SURUI_1 = 24 // 比亚迪-速锐-2014,2013,2012 +}VSB_BYD_CLASS; + +//铃木子品牌类型 +typedef enum _VSB_SUZUKI_CLASS +{ + VSB_SUZUKI_OTHER = 0, // 其他(保留) + VSB_SUZUKI_ALTO = 1, // 长安奥拓 + VSB_SUZUKI_SCROSS = 2, // 锋驭 + VSB_SUZUKI_SWIFT = 3, // 雨燕 + VSB_SUZUKI_SX4 = 4, // 天语 + VSB_SUZUKI_LINGYANG = 5, // 羚羊 + VSB_SUZUKI_BEIDOUXING = 6, // 北斗星 + VSB_SUZUKI_LIANAA6 = 7, // 利亚纳-A6 + VSB_SUZUKI_LANDY = 8, // 浪迪 + VSB_SUZUKI_SPLASH = 9, // 派喜 + VSB_SUZUKI_GRANDVITARA = 10, // 超级维特拉 + VSB_SUZUKI_JIMNY = 11, // 吉姆尼 + VSB_SUZUKI_KAZASHI = 12, // 凯泽西 + VSB_SUZUKI_LIANA = 13, // 利亚纳 + VSB_SUZUKI_LIANA_1 = 14, // 铃木-利亚纳三厢-2012,2011,2010,2008,2007,2005 + VSB_SUZUKI_LIANA_2 = 15, // 铃木-利亚纳两厢-2013,2012,2011 + VSB_SUZUKI_BEIDOUXING_1 = 16, // 铃木-北斗星-2012,2011,2010,2009,2008,2007,2005,2004标准型 + VSB_SUZUKI_BEIDOUXING_2 = 17, // 铃木-北斗星-2013,2012,2011,2010,2009,2008,2007,2005,2004,2003 + VSB_SUZUKI_BEIDOUXING_3 = 18, // 铃木-北斗星-2013,2012,2011,2010,2009,2008,2007,2005,2004,2003适用型 + VSB_SUZUKI_BEIDOUXING_4 = 19, // 铃木-北斗星-2013X5 + VSB_SUZUKI_JIMUNI_1 = 20, // 铃木-吉姆尼-2011,2010,2009,2007 + VSB_SUZUKI_JIMUNI_2 = 21, // 铃木-吉姆尼-2012 + VSB_SUZUKI_SX4_1 = 22, // 铃木-天语SX4三厢-2008,2006 + VSB_SUZUKI_SX4_2 = 23, // 铃木-天语SX4三厢-2010,2009 + VSB_SUZUKI_SX4_3 = 24, // 铃木-天语SX4两厢-2011A,2009,2008,2007 + VSB_SUZUKI_SX4_4 = 25, // 铃木-天语SX4两厢-2011B + VSB_SUZUKI_SX4_5 = 26, // 铃木-天语SX4尚悦-2013,2012,2011 + VSB_SUZUKI_ALTO_1 = 27, // 铃木-奥拓-2006,2001,2000,1999,1993标准型 + VSB_SUZUKI_ALTO_2 = 28, // 铃木-奥拓-2006,2004,2001,2000,1999,1993 + VSB_SUZUKI_ALTO_3 = 29, // 铃木-奥拓-2013 + VSB_SUZUKI_ALTO_4 = 30, // 铃木-奥拓-2014,2012,2011,2010,2009 + VSB_SUZUKI_SPLASH_1 = 31, // 铃木-派喜-2013,2012,2011 + VSB_SUZUKI_LANDY_1 = 32, // 铃木-浪迪-2011,2010,2007 + VSB_SUZUKI_LINGYANG_2 = 33, // 铃木-羚羊-2006,2004,2003 + VSB_SUZUKI_LINGYANG_3 = 34, // 铃木-羚羊-2009,2008,2007 + VSB_SUZUKI_LINGYANG_4 = 35, // 铃木-羚羊-2011 + VSB_SUZUKI_LINGYANG_5 = 36, // 铃木-羚羊-2012 + VSB_SUZUKI_GRANDVITARA_1 = 37, // 铃木-超级维特拉-2011,2008,2007,2006 + VSB_SUZUKI_FENGYU_1 = 38, // 铃木-锋驭-2014 + VSB_SUZUKI_SWIFT_1 = 39, // 铃木-雨燕-2011_1.3L,2009,2008,2007,2005 + VSB_SUZUKI_SWIFT_2 = 40, // 铃木-雨燕-2012,2011 + VSB_SUZUKI_KINGCHANG_1 = 41, // 铃木-昌铃王-2004 + VSB_SUZUKI_LINGYANG_1 = 42 // 铃木-羚羊-2002 +}VSB_SUZUKI_CLASS; + +//五菱子品牌类型 +typedef enum _VSB_SGMW_CLASS +{ + VSB_SGMW_OTHER = 0, // 其他(保留) + VSB_SGMW_HONGGUANG = 1, // 五菱宏光 + VSB_SGMW_HONGGUANGS = 2, // 五菱宏光S + VSB_SGMW_ZHIGUANG = 3, // 五菱之光 + VSB_SGMW_RONGGUANGS = 4, // 五菱荣光S + VSB_SGMW_RONGGUANG = 5, // 五菱荣光 + VSB_SGMW_HONGTU = 6, // 五菱鸿途 + VSB_SGMW_XINGWANG = 7, // 五菱兴旺 + VSB_SGMW_YANGGUANG = 8, // 五菱扬光 + VSB_SGMW_XIAOXUANFENG = 9, // 五菱小旋风 + VSB_SGMW_WULINGZHIGUANG_1 = 10, // 五菱-五菱之光-2010,2009立业 + VSB_SGMW_WULINGZHIGUANG_2 = 11, // 五菱-五菱之光-2010短车身,基本型 + VSB_SGMW_WULINGZHIGUANG_3 = 12, // 五菱-五菱之光-2010长车身,2008厢式,2007 + VSB_SGMW_XINGWANG_1 = 13, // 五菱-兴旺面包车-2003 + VSB_SGMW_XINGWANG_2 = 14, // 五菱-兴旺面包车-2009标准 + VSB_SGMW_XINGWANG_3 = 15, // 五菱-兴旺面包车-2010,2009,2007,2006,2005,2004 + VSB_SGMW_HONNGUANG_1 = 16, // 五菱-宏光-2013,2010 + VSB_SGMW_HONNGUANG_2 = 17, // 五菱-宏光-2014,2013S + VSB_SGMW_XIAOXUANFENG_1 = 18, // 五菱-小旋风-2006 + VSB_SGMW_YANGGUANG_1 = 19, // 五菱-扬光-2006,2005,2004 + VSB_SGMW_YANGGUANG_2 = 20, // 五菱-扬光-2008,2007 + VSB_SGMW_YANGGUANG_3 = 21, // 五菱-扬光-2009,2006,2005手动标准型 + VSB_SGMW_RONGGUANG_1 = 22, // 五菱-荣光面包车-2012,2011,2008基本 + VSB_SGMW_RONGGUANG_2 = 23, // 五菱-荣光面包车-2012,2011,2008标准 + VSB_SGMW_HONGTU_1 = 24 // 五菱-鸿途-2010,2009,2008,2007 +}VSB_SGMW_CLASS; + +//长安子品牌类型 +typedef enum _VSB_CHANA_CLASS +{ + VSB_CHANA_OTHER = 0, // 其他(保留) + VSB_CHANA_HONOR = 1, // 欧诺 + VSB_CHANA_XINGKA = 2, // 长安星卡 + VSB_CHANA_ZHIXING = 3, // 长安之星 + VSB_CHANA_PICKUP = 4, // 长安神骐小卡(长安皮卡) + VSB_CHANA_ZHIXING2 = 5, // 长安之星2代 + VSB_CHANA_TAURUS = 6, // 金牛星 + VSB_CHANA_XINGGUANG = 7, // 长安星光 + VSB_CHANA_BENNI = 8, // 奔奔 + VSB_CHANA_ALSVIN = 9, // 悦翔 + VSB_CHANA_CX20 = 10, // 长安CX20 + VSB_CHANA_CX30 = 11, // 长安CX30 + VSB_CHANA_EADO = 12, // 逸动 + VSB_CHANA_ZHIXINGS460 = 13, // 长安之星S460 + VSB_CHANA_CM8 = 14, // 长安CM8 + VSB_CHANA_XINBAO = 15, // 新豹 + VSB_CHANA_XUNLONG = 16, // 勋龙 + VSB_CHANA_YUNTONG = 17, // 运通 + VSB_CHANA_LEIMENG = 18, // 镭蒙 + VSB_CHANA_XINGYUN = 19, // 长安星韵 + VSB_CHANA_OULIWEI = 20, // 欧力威 + VSB_CHANA_EADOXT = 21, // 致尚XT + VSB_CHANA_XINGYUN_1 = 22, // 长安商用-星韵-2004,2003,2000 + VSB_CHANA_OULIWEI_1 = 23, // 长安商用-欧力威-2013 + VSB_CHANA_YUNTONG_1 = 24, // 长安商用-运通-2004 + VSB_CHANA_TAURUS_1 = 25, // 长安商用-金牛星-2013,2012,2011,2010 + VSB_CHANA_LEIMENG_1 = 26, // 长安商用-镭蒙-2005,2003 + VSB_CHANA_ZHIXING_1 = 27, // 长安商用-长安之星-2010,2009 + VSB_CHANA_ZHIXING_2 = 28, // 长安商用-长安之星-2013 + VSB_CHANA_ZHIXING_3 = 29, // 长安商用-长安之星2-2009,2008 + VSB_CHANA_ZHIXING_4 = 30, // 长安商用-长安之星2-2012 + VSB_CHANA_ZHIXING_5 = 31, // 长安商用-长安之星S460-2010,2009 + VSB_CHANA_ZHIXING_6 = 32, // 长安商用-长安之星SC6350-2003 + VSB_CHANA_PICKUP_1 = 33, // 长安商用-长安微货神骐-2013,2012 + VSB_CHANA_XINGGUANG_1 = 34, // 长安商用-长安星光4500-2009,2007 + VSB_CHANA_XINGGUANG_2 = 35, // 长安商用-长安星光4500-2012 + VSB_CHANA_HONOR_1 = 36 // 长安商用-长安欧诺-2014,2012 +}VSB_CHANA_CLASS; + +//长安轿车子品牌类型 +typedef enum _VSB_EADO_CLASS +{ + VSB_EADO_OTHER = 0, // 其他(保留) + VSB_EADO_CS_1 = 1, // 长安轿车-CS35-2014,2013,2012 + VSB_EADO_CX_1 = 2, // 长安轿车-CX20-2011 + VSB_EADO_CX_2 = 3, // 长安轿车-CX30两厢-2010 + VSB_EADO_BENBEN_1 = 4, // 长安轿车-奔奔-2008,2007,2006 + VSB_EADO_BENBEN_2 = 5, // 长安轿车-奔奔-2008经典型,2007运动型 + VSB_EADO_BENBEN_3 = 6, // 长安轿车-奔奔-2010 + VSB_EADO_BENBEN_4 = 7, // 长安轿车-奔奔MINI-2011,2010 + VSB_EADO_BENBEN_5 = 8, // 长安轿车-奔奔MINI-2012 + VSB_EADO_YUEXIANG_1 = 9, // 长安轿车-悦翔-2011,2010,2009 + VSB_EADO_YUEXIANG_2 = 10, // 长安轿车-悦翔-2012 + VSB_EADO_YUEXIANG_3 = 11, // 长安轿车-悦翔V3-2013,2012 + VSB_EADO_YUEXIANG_4 = 12, // 长安轿车-悦翔V5-2012 + VSB_EADO_YIDONG_1 = 13 // 长安轿车-逸动-2014,2013,2012 +}VSB_EADO_CLASS; + +//金杯子品牌类型 +typedef enum _VSB_JINBEI_CLASS +{ + VSB_JINBEI_OTHER = 0, // 其他(保留) + VSB_JINBEI_GRACE = 1, // 金杯阁瑞斯 + VSB_JINBEI_HIACE = 2, // 金杯海狮 + VSB_JINBEI_HAIXING = 3, // 海星 + VSB_JINBEI_BADAO = 4, // 金杯霸道 + VSB_JINBEI_LINGQI = 5, // 领骐 + VSB_JINBEI_JINQI = 6, // 金骐 + VSB_JINBEI_LINGCHI = 7, // 领驰 + VSB_JINBEI_QIYUN = 8, // 骐运 + VSB_JINBEI_ZHISHANG_1 = 9, // 金杯-智尚S30-2014,2013,2012 + VSB_JINBEI_HAIXING_1 = 10, // 金杯-海星-2012 + VSB_JINBEI_HAIXING_2 = 11, // 金杯-海星-2012A7特惠型,2011 + VSB_JINBEI_HIACE_1 = 12, // 金杯-海狮-2008 + VSB_JINBEI_HIACE_2 = 13, // 金杯-海狮-2013,2011,2010 + VSB_JINBEI_HIACE_3 = 14, // 金杯-海狮-2013豪华型,2011汽油,2008标准型 + VSB_JINBEI_JINDIAN_1 = 15, // 金杯-金典-2009 + VSB_JINBEI_GRACE_1 = 16, // 金杯-阁瑞斯MPV-2011,2008,2007 + VSB_JINBEI_GRACE_2 = 17, // 金杯-阁瑞斯MPV-2011御领豪华型,2010,2009,2007标准9座 + VSB_JINBEI_BADAO_1 = 18 // 金杯-霸道SUV-2011,2008 + +}VSB_JINBEI_CLASS; + +//吉利子品牌类型 +typedef enum _VSB_GEELY_CLASS +{ + VSB_GEELY_OTHER = 0, // 其他(保留) + VSB_GEELY_EC7 = 1, // 吉利帝豪EC7 + VSB_GEELY_EC8 = 2, // 吉利帝豪EC8 + VSB_GEELY_SC3 = 3, // 吉利SC3 + VSB_GEELY_SC5RV = 4, // 吉利SC5-RV + VSB_GEELY_SC6 = 5, // 吉利SC6 + VSB_GEELY_JINGYING = 6, // 金鹰 + VSB_GEELY_JINGGANG = 7, // 金刚 + VSB_GEELY_SX7 = 8, // 吉利SX7 + VSB_GEELY_HAOQING = 9, // 豪情 + VSB_GEELY_MEIRI = 10, // 美日 + VSB_GEELY_YINGLUNSC7 = 11, // 英伦SC7 + VSB_GEELY_PANDA = 12, // 熊猫 + VSB_GEELY_YUANJING = 13, // 远景 + VSB_GEELY_ZIYOUJIAN = 14 // 自由舰 +}VSB_GEELY_CLASS; + +//三菱子品牌类型 +typedef enum _VSB_MITSUBISHI_CLASS +{ + VSB_MITSUBISHI_OTHER = 0, // 其他(保留) + VSB_MITSUBISHI_GALANT = 1, // 戈蓝 + VSB_MITSUBISHI_ZINGER = 2, // 君阁 + VSB_MITSUBISHI_LANCER = 3, // 蓝瑟 + VSB_MITSUBISHI_LANCEREX = 4, // 翼神 + VSB_MITSUBISHI_PAJERO = 5, // 帕杰罗 + VSB_MITSUBISHI_PAJEROSPORT = 6, // 帕杰罗-劲畅 + VSB_MITSUBISHI_JINGXUANASX = 7, // 劲炫ASX + VSB_MITSUBISHI_GRANDIS = 8, // 三菱格蓝迪 + VSB_MITSUBISHI_OUTLANDER = 9, // 欧蓝德 + VSB_MITSUBISHI_QINXINGYUEYE = 10, // 三菱轻型越野 + VSB_MITSUBISHI_GTO = 11, // 三菱GTO + VSB_MITSUBISHI_SOVERAN = 12, // 三菱菱绅 + VSB_MITSUBISHI_LIONVEL = 13, // 三菱菱悦 + VSB_MITSUBISHI_HAFEISIMBO = 14, // 哈飞赛马 + VSB_MITSUBISHI_LANCEREX_1 = 15, // 三菱-三菱翼神-2012,2011,2010 + VSB_MITSUBISHI_JINGXUAN_1 = 16, // 三菱-劲炫-2012,2011 + VSB_MITSUBISHI_ZINGER_1 = 17, // 三菱-君阁-2011,2009 + VSB_MITSUBISHI_PAJERO_1 = 18, // 三菱-帕杰罗-2004国产 + VSB_MITSUBISHI_PAJERO_2 = 19, // 三菱-帕杰罗-2004进口 + VSB_MITSUBISHI_PAJERO_3 = 20, // 三菱-帕杰罗-2010进口 + VSB_MITSUBISHI_PAJEROSPORT_1 = 21, // 三菱-帕杰罗劲畅-2011 + VSB_MITSUBISHI_GALANT_1 = 22, // 三菱-戈蓝-2009 + VSB_MITSUBISHI_GALANDI_1 = 23, // 三菱-格蓝迪-2007 + VSB_MITSUBISHI_GALANDI_2 = 24, // 三菱-格蓝迪-2010 + VSB_MITSUBISHI_OUTLANDER_1 = 25, // 三菱-欧蓝德-2012,2011,2010 + VSB_MITSUBISHI_OUTLANDER_2 = 26, // 三菱-欧蓝德-2013 + VSB_MITSUBISHI_LINGYUE_1 = 27, // 三菱-菱悦-未知 + VSB_MITSUBISHI_LANCER_1 = 28 // 三菱-蓝瑟-2010 +}VSB_MITSUBISHI_CLASS; + +//雷克萨斯子品牌类型 +typedef enum _VSB_LEXUS_CLASS +{ + VSB_LEXUS_OTHER = 0, // 其他(保留) + VSB_LEXUS_ES = 1, // 雷克萨斯ES + VSB_LEXUS_CT = 2, // 雷克萨斯CT + VSB_LEXUS_RX = 3, // 雷克萨斯RX + VSB_LEXUS_IS = 4, // 雷克萨斯IS + VSB_LEXUS_LX = 5, // 雷克萨斯LX + VSB_LEXUS_GS = 6, // 雷克萨斯GS + VSB_LEXUS_GX = 7, // 雷克萨斯GX + VSB_LEXUS_LS = 8, // 雷克萨斯LS + VSB_LEXUS_CT_1 = 9, // 雷克萨斯-CT-2013,2012,2011 + VSB_LEXUS_ES_1 = 10, // 雷克萨斯-ES-1994 + VSB_LEXUS_ES_2 = 11, // 雷克萨斯-ES-2010,2009,2006 + VSB_LEXUS_ES_3 = 12, // 雷克萨斯-ES-2013,2012 + VSB_LEXUS_GS_1 = 13, // 雷克萨斯-GS-2011,2010,2009,2008,2005 + VSB_LEXUS_GX_1 = 14, // 雷克萨斯-GX-2012,2010 + VSB_LEXUS_IS_1 = 15, // 雷克萨斯-IS-2011 + VSB_LEXUS_LS_1 = 16, // 雷克萨斯-LS-1994 + VSB_LEXUS_LS_2 = 17, // 雷克萨斯-LS-2005,2004 + VSB_LEXUS_LS_3 = 18, // 雷克萨斯-LS-2009,2007,2006 + VSB_LEXUS_LX_1 = 19, // 雷克萨斯-LX-2013,2012 + VSB_LEXUS_RX_1 = 20, // 雷克萨斯-RX-2011,2010,2009 + VSB_LEXUS_RX_2 = 21, // 雷克萨斯-RX-2013,2012 + VSB_LEXUS_RX_3 = 22 // 雷克萨斯-RX-2007 +}VSB_LEXUS_CLASS; + +//荣威子品牌类型 +typedef enum _VSB_ROEWE_CLASS +{ + VSB_ROEWE_OTHER = 0, // 其他(保留) + VSB_ROEWE_350 = 1, // 荣威350 + VSB_ROEWE_550 = 2, // 荣威550 + VSB_ROEWE_W5 = 3, // 荣威W5 + VSB_ROEWE_950 = 4, // 荣威950 + VSB_ROEWE_750 = 5, // 荣威750 + VSB_ROEWE_350_1 = 6, // 荣威-350-2011迅智版,2010 + VSB_ROEWE_350_2 = 7, // 荣威-350-2014,2013,2012,2011 + VSB_ROEWE_550_1 = 8, // 荣威-550-2012,2010,2009,2008 + VSB_ROEWE_750_1 = 9, // 荣威-750-2009,2008,2007,2006 + VSB_ROEWE_750_2 = 10, // 荣威-750-2012,2011 + VSB_ROEWE_950_1 = 11 // 荣威-950-2012 +}VSB_ROEWE_CLASS; + + +//海马子品牌类型 +typedef enum _VSB_HAIMA_CLASS +{ + VSB_HAIMA_OTHER = 0, // 其他(保留) + VSB_HAIMA_PREMARIN = 1, // 普力马 + VSB_HAIMA_S7 = 2, // 海马S7 + VSB_HAIMA_PRINCE = 3, // 海马王子 + VSB_HAIMA_CUPID = 4, // 海马2-丘比特 + VSB_HAIMA_HATCHBACK = 5, // 海马3-欢动 + VSB_HAIMA_KNIGHT = 6, // 骑士 + VSB_HAIMA_HAPPIN = 7, // 海福星 + VSB_HAIMA_FAMILY = 8, // 福美来 + VSB_HAIMA_M3 = 9, // 海马M3 + VSB_HAIMA_CUPID_1 = 10, // 海马-丘比特-2012,2011,2010 + VSB_HAIMA_PREMARIN_1 = 11, // 海马-普力马-2007 + VSB_HAIMA_PREMARIN_2 = 12, // 海马-普力马-2012,2010 + VSB_HAIMA_HATCHBACK_1 = 13, // 海马-欢动-2010,2009 + VSB_HAIMA_HAPPIN_1 = 14, // 海马-海福星-2010,2009,2008,2007,2004 + VSB_HAIMA_HAPPIN_2 = 15, // 海马-海福星-2012,2011 + VSB_HAIMA_M3_1 = 16, // 海马-海马3-2010,2008,2007 + VSB_HAIMA_FAMILY_1 = 17, // 海马-福美来-2007,2006 + VSB_HAIMA_FAMILY_2 = 18, // 海马-福美来-2010,2009,2008 + VSB_HAIMA_FAMILY_3 = 19, // 海马-福美来-2011 + VSB_HAIMA_FAMILY_4 = 20, // 海马-福美来-2014,2013,2012 + VSB_HAIMA_KNIGHT_1 = 21, // 海马-骑士-2013_2012A,2011,2010 + VSB_HAIMA_KNIGHT_2 = 22, // 海马-骑士-2013_2012B + VSB_HAIMA_NEWHONGDA_1 = 23, // 海马商用车-新鸿达-2009 + VSB_HAIMA_NEWHONDGA_2 = 24, // 海马商用车-新鸿达-2012 + VSB_HAIMA_PRINCE_1 = 25, // 海马商用车-海马王子-2010 + VSB_HAIMA_RONGDA_1 = 26 // 海马商用车-荣达-2012 + +}VSB_HAIMA_CLASS; + +//长城子品牌类型 +typedef enum _VSB_GREATWALL_CLASS +{ + VSB_GREATWALL_OTHER = 0, // 其他(保留) + VSB_GREATWALL_SING = 1, // 赛影 + VSB_GREATWALL_SAIJUN = 2, // 赛骏 + VSB_GREATWALL_HAVAL = 3, // 哈弗 + VSB_GREATWALL_SAFE = 4, // 赛弗 + VSB_GREATWALL_SAIKU = 5, // 赛酷 + VSB_GREATWALL_SAILING = 6, // 赛铃 + VSB_GREATWALL_KINGDEER = 7, // 金迪尔 + VSB_GREATWALL_DEER = 8, // 迪尔 + VSB_GREATWALL_WINGLE = 9, // 风骏 + VSB_GREATWALL_COOLBEAR = 10, // 酷熊 + VSB_GREATWALL_LINGAO = 11, // 凌傲 + VSB_GREATWALL_CROSS = 12, // 炫丽 + VSB_GREATWALL_GWPERI = 13, // 精灵 + VSB_GREATWALL_COWRY = 14, // 腾翼 + VSB_GREATWALL_M4 = 15, // 长城M4 + VSB_GREATWALL_LINGAO_1 = 16, // 长城-凌傲-2010 + VSB_GREATWALL_HAVAL_1 = 17, // 长城-哈弗H3-2010,2009 + VSB_GREATWALL_HAVAL_2 = 18, // 长城-哈弗H3-2012,2010,2009锐意版 + VSB_GREATWALL_HAVAL_3 = 19, // 长城-哈弗H5-2012,2011,2010 + VSB_GREATWALL_HAVAL_4 = 20, // 长城-哈弗H5-2012,2011,2010绿静豪华型 + VSB_GREATWALL_HAVAL_5 = 21, // 长城-哈弗H5-2012舒适型 + VSB_GREATWALL_HAVAL_6 = 22, // 长城-哈弗H5-2014,2013 + VSB_GREATWALL_HAVAL_8 = 23, // 长城-哈弗H6-2014,2013升级版 + VSB_GREATWALL_HAVAL_9 = 24, // 长城-哈弗M2-2010 + VSB_GREATWALL_HAVAL_10 = 25, // 长城-哈弗M2-2013,2012 + VSB_GREATWALL_HAVAL_11 = 26, // 长城-哈弗M4-2012 + VSB_GREATWALL_HAVAL_12 = 27, // 长城-哈弗派-2011 + VSB_GREATWALL_CROSS_1 = 28, // 长城-炫丽-2009,2008 + VSB_GREATWALL_CROSS_2 = 29, // 长城-炫丽CROSS-2011,2009 + VSB_GREATWALL_JINGLING_1 = 30, // 长城-精灵-未知 + VSB_GREATWALL_SING_1 = 31, // 长城-赛影-2003 + VSB_GREATWALL_SAIKU_1 = 32, // 长城-赛酷-2004 + VSB_GREATWALL_SAILING_1 = 33, // 长城-赛铃-未知 + VSB_GREATWALL_DIER_1 = 34, // 长城-迪尔-未知 + VSB_GREATWALL_COOLBEAR_1 = 35, // 长城-酷熊-2010,2009 + VSB_GREATWALL_KINGDEER_1 = 36, // 长城-金迪尔-2008,2007,2004,2003 + VSB_GREATWALL_GREATWALL_1 = 37, // 长城-长城C20R-2013,2011 + VSB_GREATWALL_GREATWALL_2 = 38, // 长城-长城C30-2010 + VSB_GREATWALL_GREATWALL_3 = 39, // 长城-长城C30-2012 + VSB_GREATWALL_GREATWALL_4 = 40, // 长城-长城C30-2013 + VSB_GREATWALL_GREATWALL_5 = 41, // 长城-长城C50-2013,2012 + VSB_GREATWALL_GREATWALL_6 = 42, // 长城-长城V80-2013,2012,2010,2009,2008 + VSB_GREATWALL_WINGLE_1 = 43, // 长城-风骏3-2011,2010,2007,2006 + VSB_GREATWALL_WINGLE_2 = 44, // 长城-风骏5-2014,2012,2011,2009 + VSB_GREATWALL_HAVAL_7 = 45 // 长城-哈弗H6-2013,2012,2011 +}VSB_GREATWALL_CLASS; + +//道奇子品牌类型 +typedef enum _VSB_DS_CLASS +{ + VSB_DS_OTHER = 0, // 其他(保留) + VSB_DS_KUBO_1 = 1, // 道奇-酷搏-2011,2010,2009,2008 + VSB_DS_KUWEI_1 = 2, // 道奇-酷威-2011,2010,2009 + VSB_DS_KUWEI_2 = 3 // 道奇-酷威-2013 +}VSB_DS_CLASS; + +//路虎子品牌类型 +typedef enum _VSB_LANDROVER_CLASS +{ + VSB_LANDROVER_OTHER = 0, // 其他(保留) + VSB_LANDROVER_FAXIAN_1 = 1, // 路虎-发现-2005,2004 + VSB_LANDROVER_FAXIAN_2 = 2, // 路虎-发现-2013,2011,2010 + VSB_LANDROVER_LANSHENG_1 = 3, // 路虎-揽胜-2012,2011,2010 + VSB_LANDROVER_LANSHENG_2 = 4, // 路虎-揽胜极光-2014,2013,2012,2011 + VSB_LANDROVER_LANSHENG_3 = 5, // 路虎-揽胜运动版-2013,2012,2011,2010 + VSB_LANDROVER_LANSHENG_4 = 6, // 路虎-揽胜运动版-2013驭红限量版 + VSB_LANDROVER_SXZ_1 = 7 // 路虎-神行者2代-2014,2013,2011 +}VSB_LANDROVER_CLASS; + +//名爵子品牌类型 +typedef enum _VSB_MG_CLASS +{ + VSB_MG_OTHER = 0, // 其他(保留) + VSB_MG_3SW_1 = 1, // MG-MG-3SW-2009,2008 + VSB_MG_MG3_1 = 2, // MG-MG3-2013,2012,2011 + VSB_MG_MG5_1 = 3, // MG-MG5-2014,2013,2012 + VSB_MG_MG6_1 = 4, // MG-MG6三厢-2012,2011 + VSB_MG_MG7_1 = 5, // MG-MG7-2010,2009,2008,2007 +}VSB_MG_CLASS; + +//一汽子品牌类型 +typedef enum _VSB_FAW_CLASS +{ + VSB_FAW_OTHER = 0, // 其他(保留) + VSB_FAW_501_1 = 1, //一汽-501-轻卡 + VSB_FAW_N3_1 = 2, //一汽-N3+两厢-2006 + VSB_FAW_N3_2 = 3, //一汽-N3+两厢-2008 + VSB_FAW_JIABAO_1 = 4, //一汽-佳宝货车-2011T50,T57 + VSB_FAW_JIABAO_2 = 5, //一汽-佳宝面包车-2000 + VSB_FAW_JIABAO_3 = 6, //一汽-佳宝面包车-2006 + VSB_FAW_JIABAO_4 = 7, //一汽-佳宝面包车-2012,2011V50舒适版 + VSB_FAW_JIABAO_5 = 8, //一汽-佳宝面包车-2012,2011V70 + VSB_FAW_JIABAO_6 = 9, //一汽-佳宝面包车-2013,2012,2011V52实用型 + VSB_FAW_JIABAO_7 = 10, //一汽-佳宝面包车-2014,2013V80 + VSB_FAW_XIALI_1 = 11, //一汽-夏利-1999,1997 + VSB_FAW_XIALI_2 = 12, //一汽-夏利2000-2003,2002 + VSB_FAW_XIALI_3 = 13, //一汽-夏利A+-2011,2010,2006,2005 + VSB_FAW_XIALI_4 = 14, //一汽-夏利N3-2012 + VSB_FAW_XIALI_5 = 15, //一汽-夏利N5-2014,2013,2011,2010,2009 + VSB_FAW_XIALI_6 = 16, //一汽-夏利N7-2013 + VSB_FAW_AOWEI_1 = 17, //一汽-奥威J5P-2005,2004,2003 + VSB_FAW_AOWEI_2 = 18, //一汽-奥威J5P-4X2复合型牵引车,自卸车 + VSB_FAW_AOWEI_3 = 19, //一汽-奥威J5P-4X2牵引车,卸货车 + VSB_FAW_AOWEI_4 = 20, //一汽-奥威J5P-6X6越野自卸车 + VSB_FAW_AOXING_1 = 21, //一汽-奥星-2004 + VSB_FAW_WEILE_1 = 22, //一汽-威乐-2004 + VSB_FAW_WEILE_2 = 23, //一汽-威乐-2008,2007 + VSB_FAW_WEIZI_1 = 24, //一汽-威姿-2004 + VSB_FAW_WEIZHI_1 = 25, //一汽-威志V2-2012手动CROSS + VSB_FAW_WEIZHI_2 = 26, //一汽-威志V2-2012自动CROSS,2010 + VSB_FAW_WEIZHI_3 = 27, //一汽-威志V5-2013,2012 + VSB_FAW_WEIZHI_4 = 28, //一汽-威志三厢-2009,2008,2007 + VSB_FAW_WEIZHI_5 = 29, //一汽-威志三厢-2011 + VSB_FAW_XIAOJIEFANG_1 = 30, //一汽-小解放-90,109马力轻卡 + VSB_FAW_HANWEI_1 = 31, //一汽-悍威J5M-4X4载货车 + VSB_FAW_HANWEI_2 = 32, //一汽-悍威J5M-6X6牵引车,6X4自卸车 + VSB_FAW_HANWEI_3 = 33, //一汽-悍威J5M-8X8自卸车 + VSB_FAW_XINDAWEI_1 = 34, //一汽-新大威-2010 + VSB_FAW_XINHANWEI_1 = 35, //一汽-新悍威-2011 + VSB_FAW_SENYA_1 = 36, //一汽-森雅M80-2012,2011,2009 + VSB_FAW_TENGWEI_1 = 37, //一汽-腾威L5M-重卡 + VSB_FAW_JIEFANG_1 = 38, //一汽-解放J4R-A款 + VSB_FAW_JIEFANG_2 = 39, //一汽-解放J4R-自卸车,牵引车 + VSB_FAW_JIEFANG_3 = 40, //一汽-解放J6-2004 + VSB_FAW_JIEFANG_4 = 41, //一汽-解放J6-重卡 + VSB_FAW_JIEFANG_5 = 42, //一汽-解放J6L-中卡 + VSB_FAW_JIEFANG_6 = 43, //一汽-解放L5-A款 + VSB_FAW_SAILONG_1 = 44, //一汽-赛龙-中卡 + VSB_FAW_JUNWEI_1 = 45, //一汽-骏威J5K-中卡 + VSB_FAW_B50_1 = 46, //一汽-奔腾B50-2012,2011,2009 + VSB_FAW_B50_2 = 47 //一汽-奔腾B50-2013 +}VSB_FAW_CLASS; + + +//上汽子品牌类型 +typedef enum _VSB_SAICMOTOR_CLASS +{ + VSB_SAICMOTOR_OTHER = 0, // 其他(保留) + VSB_HONGYAN_JIESHI_1 = 1, // 上汽依维柯红岩-杰狮-2012 + VSB_DATONG_V80_1 = 2 // 上汽大通-V80-2014,2013,2012,2011 +}VSB_SAICMOTOR_CLASS; + +//东南汽车子品牌类型 +typedef enum _VSB_SOUEAST_CLASS +{ + VSB_SOUEAST_OTHER = 0, // 其他(保留) + VSB_SOUEAST_V3_1 = 1, // 东南-V3菱悦-2011超值幸福版,2010,2009,2008 + VSB_SOUEAST_V3_2 = 2, // 东南-V3菱悦-2012 + VSB_SOUEAST_V3_3 = 3, // 东南-V3菱悦-2012旗舰版,2011,2010新风采版 + VSB_SOUEAST_V3_4 = 4, // 东南-V3菱悦-2012风采版 + VSB_SOUEAST_V5_1 = 5, // 东南-V5菱致-2014,2013,2012 + VSB_SOUEAST_XIWANG_1 = 6, // 东南-希旺-2011,2010 + VSB_SOUEAST_DELIKA_1 = 7, // 东南-得利卡-2003,2002 + VSB_SOUEAST_DELIKA_2 = 8, // 东南-得利卡-2005 + VSB_SOUEAST_DELIKA_3 = 9, // 东南-得利卡-2008 + VSB_SOUEAST_DELIKA_4 = 10, // 东南-得利卡-2009 + VSB_SOUEAST_LINGSHUAI_1 = 11, // 东南-菱帅-2005,2004GLXi + VSB_SOUEAST_FULIKA_1 = 12, // 东南-富利卡-2005 + VSB_SOUEAST_FULIKA_2 = 13 // 东南-富利卡-2007 +}VSB_SOUEAST_CLASS; + + +//中兴汽车子品牌类型 +typedef enum _VSB_ZTE_CLASS +{ + VSB_ZTE_OTHER = 0, // 其他(保留) + VSB_ZTE_WEIHU_1 = 1, // 中兴-威虎-2012,2010 + VSB_ZTE_WEIHU_2 = 2, // 中兴-威虎TUV-2010,2006 + VSB_ZTE_WUXIAN_1 = 3, // 中兴-无限-2008 + VSB_ZTE_WUXIAN_2 = 4 // 中兴-无限-2012,2011,2010,2009 +}VSB_ZTE_CLASS; + + +//中华汽车子品牌类型 +typedef enum _VSB_ZHONGHUA_CLASS +{ + VSB_ZHONGHUA_OTHER = 0, // 其他(保留) + VSB_ZHONGHUA_H230_1 = 1, // 中华-H230-2012 + VSB_ZHONGHUA_H320_1 = 2, // 中华-H320-2012 + VSB_ZHONGHUA_H330_1 = 3, // 中华-H330-2013 + VSB_ZHONGHUA_H530_1 = 4, // 中华-H530-2012,2011 + VSB_ZHONGHUA_V5_1 = 5, // 中华-V5-2012,2011 + VSB_ZHONGHUA_ZUNCHI_1 = 6, // 中华-尊驰-2004 + VSB_ZHONGHUA_ZUNCHI_2 = 7, // 中华-尊驰-2005,2003 + VSB_ZHONGHUA_KUBAO_1 = 8, // 中华-酷宝-2007 + VSB_ZHONGHUA_JUNJIE_1 = 9, // 中华-骏捷-2010,2009,2008,2007,2006 + VSB_ZHONGHUA_JUNJIE_2 = 10, // 中华-骏捷-2012,2011 + VSB_ZHONGHUA_JUNJIECROSS_1 = 11, // 中华-骏捷cross-2010,2009 + VSB_ZHONGHUA_JUNJIEFRV_1 = 12, // 中华-骏捷FRV-2009,2008 + VSB_ZHONGHUA_JUNJIEFRV_2 = 13, // 中华-骏捷FRV-2010 + VSB_ZHONGHUA_JUNJIEFSV_1 = 14, // 中华-骏捷FSV-2009 + VSB_ZHONGHUA_JUNJIEFSV_2 = 15, // 中华-骏捷FSV-2010 + VSB_ZHONGHUA_JUNJIEFSV_3 = 16 // 中华-骏捷FSV-2011 +}VSB_ZHONGHUA_CLASS; + + +//中国重汽子品牌类型 +typedef enum _VSB_CNHTC_CLASS +{ + VSB_CNHTC_OTHER = 0, // 其他(保留) + VSB_CNHTC_HOKA_2 = 1, // 中国重汽-HOKA-牵引车,自卸车 + VSB_CNHTC_HOWO_1 = 2, // 中国重汽-HOWO-A7 + VSB_CNHTC_HOWO_2 = 3, // 中国重汽-HOWO-T7H + VSB_CNHTC_HOWO_3 = 4, // 中国重汽-HOWO-轻卡 + VSB_CNHTC_HOWO_4 = 5, // 中国重汽-HOWO重卡-牵引车 + VSB_CNHTC_HOWO_5 = 6, // 中国重汽-HOWO重卡-自卸车A + VSB_CNHTC_HOWO_6 = 7, // 中国重汽-HOWO重卡-自卸车B + VSB_CNHTC_HOWO_7 = 8, // 中国重汽-HOWO重卡-载货车A + VSB_CNHTC_HOWO_8 = 9, // 中国重汽-HOWO重卡-载货车C + VSB_CNHTC_SITAIERWANG_1 = 10, // 中国重汽-斯太尔王-牵引车A,载货车,搅拌车 + VSB_CNHTC_HAOHAN_1 = 11, // 中国重汽-豪瀚-A款 + VSB_CNHTC_HAOYUN_1 = 12, // 中国重汽-豪运-牵引车B,载货车,自卸车 + VSB_CNHTC_JINWANGZI_1 = 13, // 中国重汽-金王子重卡-牵引车B + VSB_CNHTC_HOKA_1 = 14 // 中国重汽-HOKA-H7 +}VSB_CNHTC_CLASS; + +//中通子品牌类型 +typedef enum _VSB_ZHONGTONG_CLASS +{ + VSB_ZHONGTONG_OTHER = 0, // 其他(保留) + VSB_ZHONGTONG_KAICHI_1 = 1, // 中通客车-凯驰A-A款 + VSB_ZHONGTONG_LINGYU_1 = 2, // 中通客车-领御-A款 + VSB_ZHONGTONG_LINGXIU_1 = 3, // 中通客车-领秀-A款 + VSB_ZHONGTONG_LINGHANG_1 = 4, // 中通客车-领航-A款 + VSB_ZHONGTONG_SHIJI_1 = 5, // 中通客车-世纪-A款 + VSB_ZHONGTONG_KAIXUAN_1 = 6, // 中通客车-凯旋-A款 + VSB_ZHONGTONG_LINGYUN_1 = 7, // 中通客车-领韵A-A款 + VSB_ZHONGTONG_YANGGUANG_1 = 8 // 中通客车-阳光-A款 +}VSB_ZHONGTONG_CLASS; + + +//九龙子品牌类型 +typedef enum _VSB_JIULONG_CLASS +{ + VSB_JIULONG_OTHER = 0, // 其他(保留) + VSB_JIULONG_JIULONGA5_1 = 1, // 九龙-九龙A5-2011 +}VSB_JIULONG_CLASS; + +//众泰子品牌类型 +typedef enum _VSB_ZOTYE_CLASS +{ + VSB_ZOTYE_OTHER = 0, // 其他(保留) + VSB_ZOTYE_2008_2 = 1, // 众泰-2008-2011,2010,2008 + VSB_ZOTYE_5008_1 = 2, // 众泰-5008-2013,2011,2010,2008 + VSB_ZOTYE_Z300_1 = 3, // 众泰-Z300-2013,2012 + VSB_ZOTYE_2008_1 = 4 // 众泰-2008-2007 +}VSB_ZOTYE_CLASS; + +//依维柯子品牌类型 +typedef enum _VSB_NAVECO_CLASS +{ + VSB_NAVECO_OTHER = 0, // 其他(保留) + VSB_NAVECO_Daily_1 = 1, // 依维柯-Daily-2006,2004,2003 + VSB_NAVECO_Power_1 = 2, // 依维柯-Power-Daily + VSB_NAVECO_Turbo_1 = 3, // 依维柯-Turbo-Daily-2014,2012,2011 + VSB_NAVECO_Venice_1 = 4, // 依维柯-Venice-2011,2008 + VSB_NAVECO_BAODI_1 = 5, // 依维柯-宝迪-2012,2009 + VSB_NAVECO_DEYIHUOCHE_1 = 6, // 依维柯-得意货车-2011 + VSB_NAVECO_DULING_1 = 7 // 依维柯-都灵-2010,2009,2007 +}VSB_NAVECO_CLASS; + +//保时捷子品牌类型 +typedef enum _VSB_PORSCHE_CLASS +{ + VSB_PORSCHE_OTHER = 0, // 其他(保留) + VBR_PORSCHE_PANAMERA_1 = 1, // 保时捷-panamera-2013,2012,2010 + VBR_PORSCHE_CAYENNE_1 = 2, // 保时捷-卡宴Cayenne-2014,2013,2011,2010 +}VSB_PORSCHE_CLASS; + + +//克莱斯勒子品牌类型 +typedef enum _VSB_CHRYSLER_CLASS +{ + VSB_CHRYSLER_OTHER = 0, // 其他(保留) + VSB_CHRYSLER_300C_1 = 1, // 克莱斯勒-300C-2007,2006,2004 + VSB_CHRYSLER_PTMANBUZHE_1 = 2, // 克莱斯勒-PT漫步者-2007 +}VSB_CHRYSLER_CLASS; + +//凯迪拉克子品牌类型 +typedef enum _VSB_CADILLAC_CLASS +{ + VSB_CADILLAC_OTHER = 0, // 其他(保留) + VSB_CADILLAC_ATS_1 = 1, // 凯迪拉克-ATS-2014 + VSB_CADILLAC_CTS_1 = 2, // 凯迪拉克-CTS-2012 + VSB_CADILLAC_CTS_3 = 3, // 凯迪拉克-CTS-2012精英运动型,2011,2010,2009,2008 + VSB_CADILLAC_SLS_1 = 4, // 凯迪拉克-SLS赛威-2007,2006 + VSB_CADILLAC_SLS_2 = 5, // 凯迪拉克-SLS赛威-2012,2011,2010 + VSB_CADILLAC_SRX_1 = 6, // 凯迪拉克-SRX-2012,2011,2010,2009 + VSB_CADILLAC_CTS_2 = 7, // 凯迪拉克-CTS-2012,2009CTS + VSB_CADILLAC_KAILEIDE_1 = 8 // 凯迪拉克-凯雷德-2011,2010,2008,2007,2006 +}VSB_CADILLAC_CLASS; + + +//凯马KAMA子品牌类型 +typedef enum _VSB_KAMA_CLASS +{ + VSB_KAMA_OTHER = 0, // 其他(保留) + VSB_KAMA_QINGKA_2 = 1, // 凯马KAMA-凯马-轻卡D + VSB_KAMA_FULAIKA_1 = 2, // 凯马KAMA-福来卡-轻卡A + VSB_KAMA_JINYUNKA_1 = 3, // 凯马KAMA-金运卡-轻卡 + VSB_KAMA_JUNWEIKA_1 = 4, // 凯马KAMA-骏威卡车-2014,2011 + VSB_KAMA_QINGKA_1 = 5 // 凯马KAMA-凯马-轻卡C +}VSB_KAMA_CLASS; + +//力帆子品牌类型 +typedef enum _VSB_LIFAN_CLASS +{ + VSB_LIFAN_OTHER = 0, // 其他(保留) + VSB_LIFAN_320_1 = 1, // 力帆-320-2012,2011,2009 + VSB_LIFAN_520_1 = 2, // 力帆-520-2007,2006 + VSB_LIFAN_520_2 = 3, // 力帆-520-2013,2011,2010,2008 + VSB_LIFAN_620_1 = 4, // 力帆-620-2012,2010,2009,2008 + VSB_LIFAN_X60_1 = 5, // 力帆-X60-2013,2012,2011 + VSB_LIFAN_FENGSHUN_1 = 6 // 力帆-丰顺-2011 +}VSB_LIFAN_CLASS; + + +//北京子品牌类型 +typedef enum _VSB_BEIJING_CLASS +{ + VSB_BEIJING_OTHER = 0, // 其他(保留) + VSB_BEIJING_E_1 = 1, // 北京汽车-E系列两厢-2014,2013,2012 +}VSB_BEIJING_CLASS; + +//北奔重汽子品牌类型 +typedef enum _VSB_BEIBEN_CLASS +{ + VSB_BEIBEN_OTHER = 0, // 其他(保留) + VSB_BEIBEN_NG80_1 = 1, // 北奔重汽-NG80-重卡A + VSB_BEIBEN_NG80_2 = 2, // 北奔重汽-NG80-重卡B + VSB_BEIBEN_NG80_3 = 3, // 北奔重汽-NG80-重卡C + VSB_BEIBEN_V3_1 = 4, // 北奔重汽-北奔V3-V3H1 + VSB_BEIBEN_V3_2 = 5 // 北奔重汽-北奔V3-重卡A +}VSB_BEIBEN_CLASS; + +//北方客车子品牌类型 +typedef enum _VSB_BEIFANG_CLASS +{ + VSB_BEIFANG_OTHER = 0, // 其他(保留) + VSB_BEIFANG_A_1 = 1 // 北方客车-客车车型1-A款 +}VSB_BEIFANG_CLASS; + + +//北汽制造子品牌类型 +typedef enum _VSB_BAW_CLASS +{ + VSB_BAW_OTHER = 0, // 其他(保留) + VSB_BAW_YUSHENG007_1 = 1, // 北汽制造-域胜007-2013,2011 + VSB_BAW_QILING_1 = 2, // 北汽制造-旗铃-A款 + VSB_BAW_LUBA_1 = 3, // 北汽制造-陆霸-2004 + VSB_BAW_QISHI_1 = 4 // 北汽制造-骑士-2009,2007 +}VSB_BAW_CLASS; + +//北汽威旺子品牌类型 +typedef enum _VSB_BQWEIWANG_CLASS +{ + VSB_BQWEIWANG_OTHER = 0, // 其他(保留) + VSB_BQWEIWANG_205_1 = 1, // 北汽威旺-205-2013 + VSB_BQWEIWANG_306_1 = 2 // 北汽威旺-306-2014,2013,2011 +}VSB_BQWEIWANG_CLASS; + + +//华普子品牌类型 +typedef enum _VSB_SMA_CLASS +{ + VSB_SMA_OTHER = 0, // 其他(保留) + VSB_SMA_HAIYU_1 = 1, // 华普-海域-2007,2005,2004 + VSB_SMA_HAIYU_2 = 2, // 华普-海域-2007海域MB + VSB_SMA_HAISHANG_1 = 3, // 华普-海尚-2008,2005 + VSB_SMA_HAIJING_1 = 5, // 华普-海景-2010,2009 + VSB_SMA_HAIXUN_1 = 4, // 华普-海迅-2005,2004飙风 + VSB_SMA_HAIXUN_2 = 6, // 华普-海迅-2007,2006 +}VSB_SMA_CLASS; + +//华菱星马子品牌类型 +typedef enum _VSB_XINGMA_CLASS +{ + VSB_XINGMA_OTHER = 0, // 其他(保留) + VSB_XINGMA_XINGKAIMA_1 = 1 // 华菱星马-星凯马-牵引车型1,载货车型1 +}VSB_XINGMA_CLASS; + +//双环子品牌类型 +typedef enum _VSB_SHUANGHUAN_CLASS +{ + VSB_SHUANGHUAN_OTHER = 0, // 其他(保留) + VSB_SHUANGHUAN_SCEO_1 = 1, // 双环-SCEO-2011,2009,2006,2005 +}VSB_SHUANGHUAN_CLASS; + +//吉普子品牌类型 +typedef enum _VSB_JEEP_CLASS +{ + VSB_JEEP_OTHER = 0, // 其他(保留) + VSB_JEEP_DAQIENUOJI_1 = 1, // 吉普-大切诺基(进口)-2014,2013,2012,2011 + VSB_JEEP_DAQIENUOJI_2 = 2, // 吉普-大切诺基(进口)-2014舒享导航版 + VSB_JEEP_ZHINANZHE_1 = 3, // 吉普-指南者-2010,2007 + VSB_JEEP_ZHINANZHE_2 = 4, // 吉普-指南者-2014,2013,2012,2011 + VSB_JEEP_MUMAREN_1 = 5, // 吉普-牧马人-2012使命召唤限量版,2011 + VSB_JEEP_MUMAREN_2 = 6, // 吉普-牧马人-2014,2013,2012,2011,2010,2009,2008 + VSB_JEEP_ZIYOUKE = 7, // 吉普-自由客-2014,2013,2012,2011 +}VSB_JEEP_CLASS; + +//启辰子品牌类型 +typedef enum _VSB_VENUCIA_CLASS +{ + VSB_VENUCIA_OTHER = 0, // 其他(保留) + VSB_VENUCIA_D50_1 = 1 // 启辰-D50-2014,2013,2012 +}VSB_VENUCIA_CLASS; + +//哈飞子品牌类型 +typedef enum _VSB_HAFEI_CLASS +{ + VSB_HAFEI_OTHER = 0, // 其他(保留) + VSB_HAFEI_XINMINYI_1 = 1, // 哈飞-新民意货车-2010 + VSB_HAFEI_XINMINYI_2 = 2, // 哈飞-新民意面包车-2012 + VSB_HAFEI_MINYI_1 = 3, // 哈飞-民意货车-2006 + VSB_HAFEI_MINYI_2 = 4, // 哈飞-民意面包车-2008 + VSB_HAFEI_SAIBAO_1 = 5, // 哈飞-赛豹Ⅲ-2012 + VSB_HAFEI_SAIMA_1 = 6, // 哈飞-赛马-2002 + VSB_HAFEI_SAIMA_2 = 7, // 哈飞-赛马-2004,2003 + VSB_HAFEI_SAIMA_3 = 8, // 哈飞-赛马-2009 + VSB_HAFEI_LUBAO_1 = 9, // 哈飞-路宝-2004 + VSB_HAFEI_LUBAO_2 = 10, // 哈飞-路宝-2008,2007 + VSB_HAFEI_LUBAO_3 = 11, // 哈飞-路宝-2012 + VSB_HAFEI_LUZUNXIAOBAWANG_1 = 12, // 哈飞-路尊小霸王-2011,2010 + VSB_HAFEI_RUIYI_1 = 13, // 哈飞-锐意-2009 + VSB_HAFEI_JUNYI_1 = 14 // 哈飞-骏意-2012,2010 +}VSB_HAFEI_CLASS; + +//唐骏欧铃子品牌类型 +typedef enum _VSB_TKING_CLASS +{ + VSB_TKING_OTHER = 0, // 其他(保留) + VSB_TKING_OUGUAN_1 = 1, // 唐骏欧铃-欧冠-2011 + VSB_TKING_OUGUAN_2 = 2, // 唐骏欧铃-欧冠-轻卡B + VSB_TKING_OUTENG_1 = 3, // 唐骏欧铃-欧腾-轻卡A + VSB_TKING_FUXING_1 = 4, // 唐骏欧铃-福星-2006 + VSB_TKING_QINGKAWANG_1 = 5, // 唐骏欧铃-轻卡王-轻卡 + VSB_TKING_AFANDA_1 = 6, // 唐骏欧铃-阿凡达-中重卡 + VSB_TKING_JUNQI_1 = 7 // 唐骏欧铃-骏麒-中重卡A +}VSB_TKING_CLASS; + +//大宇子品牌类型 +typedef enum _VSB_DAEWOO_CLASS +{ + VSB_DAEWOO_OTHER = 0, // 其他(保留) + VBR_DAEWOO_6960H3_1 = 1 // 大宇-6960H3-A款 +}VSB_DAEWOO_CLASS; + +//大运汽车子品牌类型 +typedef enum _VSB_DAYUN_CLASS +{ + VSB_DAYUN_OTHER = 0, // 其他(保留) + VBR_DAYUN_ZHONGKA_1 = 1 // 大运汽车-重卡-A款 +}VSB_DAYUN_CLASS; + +//奔腾子品牌类型 +typedef enum _VSB_BESTURN_CLASS +{ + VSB_BESTURN_OTHER = 0, // 其他(保留) + VSB_BESTURN_B70_1 = 1, // 奔腾-B70-2009,2007,2006 + VSB_BESTURN_B70_2 = 2, // 奔腾-B70-2011 + VSB_BESTURN_B70_3 = 3, // 奔腾-B70-2011精英型,2010 + VSB_BESTURN_B70_4 = 4, // 奔腾-B70-2012 + VSB_BESTURN_B90_1 = 5, // 奔腾-B90-2012 + VSB_BESTURN_AOXING_1 = 6 // 一汽-奥星-2004 +}VSB_BESTURN_CLASS; + +//威麟子品牌类型 +typedef enum _VSB_WEILIN_CLASS +{ + VSB_WEILIN_OTHER = 0, // 其他(保留) + VSB_WEILIN_H3_1 = 1, // 威麟-H3-2011 + VSB_WEILIN_V5_1 = 2, // 威麟-V5-2012,2009 + VSB_WEILIN_X5_1 = 3 // 威麟-X5-2012,2011,2010 +}VSB_WEILIN_CLASS; + +//宇通子品牌类型 +typedef enum _VSB_YUTONG_CLASS +{ + VSB_YUTONG_OTHER = 0, // 其他(保留) + VSB_YUTONG_8XI_1 = 1, // 宇通-8系-2012,2005 + VSB_YUTONG_KECHE_1 = 2, // 宇通-客车车型10-2013,2010 + VSB_YUTONG_KECHE_3 = 3, // 宇通-客车车型2-A款 + VSB_YUTONG_KECHE_4 = 4, // 宇通-客车车型8-2004 + VSB_YUTONG_KECHE_5 = 5, // 宇通-客车车型9-2014 + VSB_YUTONG_KECHE_2 = 6 // 宇通-客车车型12-A款 +}VSB_YUTONG_CLASS; + +//安凯子品牌类型 +typedef enum _VSB_ANKAI_CLASS +{ + VSB_ANKAI_OTHER = 0, // 其他(保留) + VSB_ANKAI_KECHE_1 = 1, // 安凯-客车车型1-A款 + VSB_ANKAI_KECHE_2 = 2 // 安凯-客车车型3-A款 +}VSB_ANKAI_CLASS; + +//宝骏子品牌类型 +typedef enum _VSB_BAOJUN_CLASS +{ + VSB_BAOJUN_OTHER = 0, // 其他(保留) + VSB_BAOJUN_630_1 = 1 // 宝骏-宝骏630-2014,2013,2012,2011 +}VSB_BAOJUN_CLASS; + +//宾利子品牌类型 +typedef enum _VSB_BINLI_CLASS +{ + VSB_BINLI_OTHER = 0, // 其他(保留) + VSB_BINLI_OULU_1 = 1 // 宾利-欧陆-2009,2008 +}VSB_BINLI_CLASS; + +//广汽传祺子品牌类型 +typedef enum _VSB_TRUMPCHE_CLASS +{ + VSB_TRUMPCHE_OTHER = 0, // 其他(保留) + VSB_TRUMPCHE_GA5_1 = 1, // 广汽传祺-GA5-2012,2011 + VSB_TRUMPCHE_GA5_2 = 3, // 广汽传祺-GA5-2013,2012自动精英版 + VSB_TRUMPCHE_GS5_1 = 2 // 广汽传祺-GS5-2014,2013,2012 +}VSB_TRUMPCHE_CLASS; + +//广汽吉奥 子品牌类型 +typedef enum _VSB_GONOW_CLASS +{ + VSB_GONOW_OTHER = 0, // 其他(保留) + VSB_GONOW_G3_1 = 1, // 广汽吉奥-G3-2011 + VSB_GONOW_G5_1 = 2, // 广汽吉奥-G5-2012,2011 + VSB_GONOW_SHUAIJIAN_1 = 4, // 广汽吉奥-帅舰-2012,2009 + VSB_GONOW_XINGWANGM1_1 = 3, // 广汽吉奥-星旺M1-2012 + VSB_GONOW_CAIYUN500_1 = 5 // 广汽吉奥-财运500-2010 +}VSB_GONOW_CLASS; + +//庆铃子品牌类型 +typedef enum _VSB_ISUZU_CLASS +{ + VSB_ISUZU_OTHER = 0, // 其他(保留) + VSB_ISUZU_ZHONGXINGSHANGYONG_1 = 1, // 庆铃-中型商用车-2011 + VSB_ISUZU_WUSHILINGPIKA_1 = 2, // 庆铃-五十铃皮卡-2009 + VSB_ISUZU_WUSHILINGPIKA_2 = 3, // 庆铃-五十铃皮卡-2014,2009 + VSB_ISUZU_JINGJIZHE_1 = 4 // 庆铃-竞技者-2004,2002 +}VSB_ISUZU_CLASS; + + +//开瑞子品牌类型 +typedef enum _VSB_KARRY_CLASS +{ + VSB_KARRY_OTHER = 0, // 其他(保留) + VSB_KARRY_YOU_2 = 1, // 开瑞-优优-2013,2012 + VSB_KARRY_YOUJIN_1 = 2, // 开瑞-优劲-2012,2011基本型,2010 + VSB_KARRY_YOUSHENG_1 = 3, // 开瑞-优胜-2010 + VSB_KARRY_YOUSHENG_2 = 4, // 开瑞-优胜-2012,2011 + VSB_KARRY_YOUYA = 5, // 开瑞-优雅-2012,2011,2007 + VSB_KARRY_YOU_1 = 6 // 开瑞-优优-2011,2010,2009 +}VSB_KARRY_CLASS; + +//捷豹子品牌类型 +typedef enum _VSB_GAGUAR_CLASS +{ + VSB_GAGUAR_OTHER = 0, // 其他(保留) + VSB_GAGUAR_XF_1 = 1, // 捷豹-XF-2014,2013 + VSB_GAGUAR_XJ_1 = 2 // 捷豹-XJ-2014,2013,2012,2011,2010 +}VSB_GAGUAR_CLASS; + +//斯巴鲁子品牌类型 +typedef enum _VSB_SUBARU_CLASS +{ + VSB_SUBARU_OTHER = 0, // 其他(保留) + VSB_SUBARU_AOHU_1 = 1, // 斯巴鲁-傲虎-2012,2011,2010 + VSB_SUBARU_LISHI_1 = 2, // 斯巴鲁-力狮轿车-2008,2006 + VSB_SUBARU_LISHI_2 = 3, // 斯巴鲁-力狮轿车-2011,2010 + VSB_SUBARU_XV_1 = 4, // 斯巴鲁-斯巴鲁XV-2014,2012 + VSB_SUBARU_SENLINREN_1 = 5, // 斯巴鲁-森林人-2007,2006 + VSB_SUBARU_SENLINREN_2 = 6 // 斯巴鲁-森林人-2012,2011,2010,2009,2008 +}VSB_SUBARU_CLASS; + +//时代汽车子品牌类型 +typedef enum _VSB_ERA_CLASS +{ + VSB_ERA_OTHER = 0, // 其他(保留) + VSB_ERA_XIAOKA_1 = 1, // 时代汽车-小卡之星-小卡之星1,2,Q2 + VSB_ERA_XIAOKA_3 = 2, // 时代汽车-小卡之星-小卡之星5 + VSB_ERA_XIAOKA_4 = 3, // 时代汽车-小卡之星-福锐 + VSB_ERA_KANGRUI_1 = 4, // 时代汽车-康瑞-康瑞H1 + VSB_ERA_KANGRUI_2 = 5, // 时代汽车-康瑞-康瑞H3 + VSB_ERA_KANGRUI_3 = 6, // 时代汽车-康瑞-康瑞K1,KQ1 + VSB_ERA_RUIWO_1 = 7, // 时代汽车-瑞沃-RC1 + VSB_ERA_RUIWO_2 = 8, // 时代汽车-瑞沃-RC2 + VSB_ERA_RUIWO_3 = 9, // 时代汽车-瑞沃-瑞沃II轻卡A + VSB_ERA_JINGANG = 10, // 时代汽车-金刚-金刚568 + VSB_ERA_LINGHANG_1 = 11, // 时代汽车-领航-领航2 + VSB_ERA_LINGHANG_2 = 12, // 时代汽车-领航-领航3 + VSB_ERA_YULING_1 = 13, // 时代汽车-驭菱-驭菱V1 + VSB_ERA_YULING_2 = 14, // 时代汽车-驭菱-驭菱V5,VQ5 + VSB_ERA_YULING_3 = 15, // 时代汽车-驭菱-驭菱VQ1,VQ2 + VSB_ERA_YULING_4 = 17, // 时代汽车-驭菱-鸿运 + VSB_ERA_XIAOKA_2 = 17, // 时代汽车-小卡之星-小卡之星3 +}VSB_ERA_CLASS; + +//昌河子品牌类型 +typedef enum _VSB_CHANGHE_CLASS +{ + VSB_CHANGHE_OTHER = 0, // 其他(保留) + VSB_CHANGHE_CH6321_1 = 1, // 昌河-CH6321-2000 + VSB_CHANGHE_DANSHUANGPAI_1 = 2, // 昌河-昌河新单双排-1999 + VSB_CHANGHE_AIDIER_1 = 3, // 昌河-爱迪尔-2004 + VSB_CHANGHE_AIDIER_2 = 4, // 昌河-爱迪尔Ⅱ-2007,2006 + VSB_CHANGHE_FURUIDA_1 = 5 // 昌河-福瑞达面包车-2014,2013,2011,2009 +}VSB_CHANGHE_CLASS; + +//欧宝子品牌类型 +typedef enum _VSB_OPEL_CLASS +{ + VSB_OPEL_OTHER = 0, // 其他(保留) + VSB_OPEL_YATE_1 = 1 // 欧宝-雅特-2010GTC全景风挡版,2007,2006 +}VSB_OPEL_CLASS; + +//永源子品牌类型 +typedef enum _VSB_JONWAY_CLASS +{ + VSB_JONWAY_OTHER = 0, // 其他(保留) + VSB_JONWAY_A380_1 = 1 // 永源-A380-2010,2009,2008 +}VSB_JONWAY_CLASS; + +//江南子品牌类型 +typedef enum _VSB_JIANGNAN_CLASS +{ + VSB_JIANGNAN_OTHER = 0, // 其他(保留) + VSB_JIANGNAN_TT_1 = 1 // 江南-江南TT-2011,2010,2004 +}VSB_JIANGNAN_CLASS; + +//吉利全球鹰子品牌类型 +typedef enum _VSB_GLEAGLE_CLASS +{ + VSB_GLEAGLE_OTHER = 0, // 其他(保留) + VSB_GLEAGLE_EAGLE_GC7_1 = 1, // 吉利全球鹰-GC7-2013,2012 + VSB_GLEAGLE_EAGLE_GX2_1 = 2, // 吉利全球鹰-GX2-2012,2011 + VSB_GLEAGLE_EAGLE_GX7_1 = 3, // 吉利全球鹰-GX7-2013,2012 + VSB_GLEAGLE_EAGLE_PANDA_1 = 4, // 吉利全球鹰-熊猫-2013,2011,2010,2009 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_1 = 5, // 吉利全球鹰-自由舰-2009精致标准型,2007 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_2 = 6, // 吉利全球鹰-自由舰-2010,2009,2008,2006,2005 + VSB_GLEAGLE_EAGLE_ZIYOUJIAN_3 = 7, // 吉利全球鹰-自由舰-2012,2011 + VSB_GLEAGLE_EAGLE_YUANJING_1 = 8, // 吉利全球鹰-远景-2011,2010,2009,2008,2006 + VSB_GLEAGLE_EAGLE_YUANJING_2 = 9, // 吉利全球鹰-远景-2013,2012 +}VSB_GLEAGLE_CLASS; + +//吉利帝豪子品牌类型 +typedef enum _VSB_EMGRAND_CLASS +{ + VSB_EMGRAND_OTHER = 0, // 其他(保留) + VSB_EMGRAND_EC7_2 = 1, // 吉利帝豪-EC7-2013 + VSB_EMGRAND_EC7_3 = 2, // 吉利帝豪-EC7-RV + VSB_EMGRAND_EC8_1 = 3, // 吉利帝豪-EC8-2013,2011,2010 + VSB_EMGRAND_EC7_1 = 4 // 吉利帝豪-EC7-2012,2010,2009 +}VSB_EMGRAND_CLASS; + + +//吉利英伦子品牌类型 +typedef enum _VSB_ENGLON_CLASS +{ + VSB_ENGLON_OTHER = 0, // 其他(保留) + VSB_ENGLON_SC3_1 = 1, // 吉利英伦-SC3-2012 + VSB_ENGLON_SC5_1 = 2, // 吉利英伦-SC5-RV-2012 + VSB_ENGLON_SC6_1 = 3, // 吉利英伦-SC6-2012 + VSB_ENGLON_SC7_1 = 4, // 吉利英伦-SC7-2013,2012,2011,2010 + VSB_ENGLON_SX7_1 = 5, // 吉利英伦-SX7-2014,2013 + VSB_ENGLON_JINGANG_1 = 6, // 吉利英伦-金刚-2010,2007,2006 + VSB_ENGLON_JINYING_1 = 7 // 吉利英伦-金鹰-2011,2010,2008 +}VSB_ENGLON_CLASS; + + +//江淮-子品牌类型 +typedef enum _VSB_JAC_CLASS +{ + VSB_JAC_OTHER = 0, // 其他(保留) + VSB_JAC_TONGYUE_1 = 1, // 江淮-同悦-2012,2010,2008 + VSB_JAC_HEYUE_1 = 2, // 江淮-和悦-2012,2011,2010 + VSB_JAC_HEYUEA30_2 = 3, // 江淮-和悦A30-2013 + VSB_JAC_HEYUERS_3 = 4, // 江淮-和悦RS-2012,2011 + VSB_JAC_HAOYUN_1 = 5, // 江淮-好运-轻卡1 + VSB_JAC_WEILING_2 = 6, // 江淮-威铃-排半轻卡 + VSB_JAC_WEILING_3 = 7, // 江淮-威铃-栏板载货车 + VSB_JAC_WEILING_4 = 8, // 江淮-威铃-轻卡 + VSB_JAC_KECHE_1 = 9, // 江淮-客车-A款 + VSB_JAC_BINYUE_1 = 10, // 江淮-宾悦-2010,2008 + VSB_JAC_SHUAILING_2 = 11, // 江淮-帅铃-轻卡 + VSB_JAC_KANGLING_1 = 12, // 江淮-康铃-轻卡1 + VSB_JAC_KANGLING_2 = 13, // 江淮-康铃-轻卡2 + VSB_JAC_YUEYUE_1 = 14, // 江淮-悦悦-2013,2012,2011,2010 + VSB_JAC_XINGRUI_1 = 15, // 江淮-星锐-2012,2011 + VSB_JAC_GEERFA_H_1 = 16, // 江淮-格尔发H-栏板载货车 + VSB_JAC_GEERFA_K_2 = 17, // 江淮-格尔发K-重卡1 + VSB_JAC_GEERFA_K_3 = 18, // 江淮-格尔发K-重卡2 + VSB_JAC_GEERFA_M_4 = 19, // 江淮-格尔发M-栏板载货车 + VSB_JAC_RUIFENG_1 = 20, // 江淮-瑞风-2011,2009,2007手动 + VSB_JAC_RUIFENG_2 = 21, // 江淮-瑞风-2013,2012,2011,2010,2007,2005 + VSB_JAC_RUIFENG_3 = 22, // 江淮-瑞风M5-2012,2011 + VSB_JAC_RUIFENG_4 = 23, // 江淮-瑞风S5-2013 + VSB_JAC_RUIYING_1 = 24, // 江淮-瑞鹰-2009,2007 + VSB_JAC_RUIYING_2 = 25, // 江淮-瑞鹰-2013,2012,2011 + VSB_JAC_JUNLING_2 = 26, // 江淮-骏铃-窄体版,中体版 + VSB_JAC_WEILING_1 = 27, // 江淮-威铃-厢式轻卡 + VSB_JAC_SHUAILING_1 = 28, // 江淮-帅铃-五十铃 + VSB_JAC_RUILING_1 = 29, // 江淮-瑞铃-2012 + VSB_JAC_JUNLING_1 = 30 // 江淮-骏铃-旗舰版 +}VSB_JAC_CLASS; + + +//江铃子品牌类型 +typedef enum _VSB_JMC_CLASS +{ + VSB_JMC_OTHER = 0, // 其他(保留) + VSB_JMC_KAIYUN_1 = 1, // 江铃-凯运-102,109马力轻卡 + VSB_JMC_KAIYUN_2 = 2, // 江铃-凯运-95马力轻卡 + VSB_JMC_YUHU_1 = 3, // 江铃-域虎-2012 + VSB_JMC_BAODIAN_1 = 4, // 江铃-宝典-2007 + VSB_JMC_BAODIAN_2 = 5, // 江铃-宝典-2009标准型,2008 + VSB_JMC_BAODIAN_3 = 6, // 江铃-宝典-2014,2012,2009豪华型 + VSB_JMC_BAOWEI_1 = 7, // 江铃-宝威-2005 + VSB_JMC_BAOWEI_2 = 8, // 江铃-宝威-2009 + VSB_JMC_QUANSHUN_1 = 9, // 江铃-福特新世代全顺-2010,2008 + VSB_JMC_QUANSHUN_2 = 10, // 江铃-经典全顺-2006 + VSB_JMC_QUANSHUN_3 = 11, // 江铃-经典全顺-2013,2011,2010 + VSB_JMC_SHUNDA_1 = 12, // 江铃-顺达-2004,2003 + VSB_JMC_SHUNDA_2 = 13, // 江铃-顺达-2011,2010,2008 + VSB_JMC_YUSHENG_1 = 14, // 江铃-驭胜-2013 + VSB_JMC_YUSHENG_2 = 15 // 江铃-驭胜-2013手动特装版,2012,2011 +}VSB_JMC_CLASS; + +// 沃尔沃子品牌类型 +typedef enum _VSB_VOLVO_CLASS +{ + VSB_VOLVO_OTHER = 0, // 其他(保留) + VSB_VOLVO_C30_1 = 1, // 沃尔沃-C30-2013,2012,2011,2010 + VSB_VOLVO_S40_1 = 2, // 沃尔沃-S40-2012,2011,2010,2009,2008,2007 + VSB_VOLVO_S60_1 = 3, // 沃尔沃-S60-2003 + VSB_VOLVO_S60_2 = 4, // 沃尔沃-S60-2013,2012,2011 + VSB_VOLVO_S80L_1 = 5, // 沃尔沃-S80L-2012,2011,2010,2009 + VSB_VOLVO_XC60_1 = 6, // 沃尔沃-XC60-2013,2012,2011,2010,2009 + VSB_VOLVO_XC90_1 = 7 // 沃尔沃-XC90-2013,2012,2011,2008 +}VSB_VOLVO_CLASS; + +// 海格子品牌类型 +typedef enum _VSB_HIGER_CLASS +{ + VSB_HIGER_OTHER = 0, // 其他(保留) + VSB_HIGER_H8_1 = 1, // 海格-H8-A款 + VSB_HIGER_H92_1 = 2, // 海格-H92-A款 + VSB_HIGER_V7_1 = 3, // 海格-V7,V8-2006 + VSB_HIGER_KECHE_1 = 4, // 海格-客车车型5-A款 + VSB_HIGER_LONGWEI_1 = 5, // 海格-龙威-2012,2011 + VSB_HIGER_H7V_1 = 6 // 海格-海格H7V-2010 +}VSB_HIGER_CLASS; + +// 瑞麒子品牌类型 +typedef enum _VSB_RUILIN_CLASS +{ + VSB_RUILIN_OTHER = 0, // 其他(保留) + VSB_RUILIN_G3_1 = 1, // 瑞麒-G3-2012,2010 + VSB_RUILIN_G5_1 = 2, // 瑞麒-G5-2012,2011,2010 + VSB_RUILIN_M1_1 = 3, // 瑞麒-M1-2013,2011,2010,2009 + VSB_RUILIN_X1_1 = 4, // 瑞麒-X1-2012A,2011,2010 + VSB_RUILIN_X1_2 = 5 // 瑞麒-X1-2012B +}VSB_RUILIN_CLASS; + +// 申龙子品牌类型 +typedef enum _VSB_SHENLONG_CLASS +{ + VSB_SHENLON_OTHER = 0, // 其他(保留) + VSB_SHENLONG_KECHE_1 = 1 //申龙客车-客车车型4-A款 +}VSB_SHENLONG_CLASS; + +// 福田子品牌类型 +typedef enum _VSB_FOTON_CLASS +{ + VSB_FOTON_OTHER = 0, // 其他(保留) + VSB_FOTON_AOLING_1 = 1, // 福田-奥铃-中卡 + VSB_FOTON_AOLING_2 = 2, // 福田-奥铃-厢式货车 + VSB_FOTON_AOLING_3 = 3, // 福田-奥铃-奥铃TX,CTX + VSB_FOTON_OUMAN_1 = 4, // 福田-欧曼-GTL6系B + VSB_FOTON_OUMAN_2 = 5, // 福田-欧曼-TX6系,9系 + VSB_FOTON_OUMAN_3 = 6, // 福田-欧曼-欧曼重卡1 + VSB_FOTON_OUMAN_4 = 7, // 福田-欧曼-雄狮6系,9系 + VSB_FOTON_OUHUI_1 = 8, // 福田-欧辉客车-D款 + VSB_FOTON_OUMAKE_1 = 9, // 福田-欧马可-3系 + VSB_FOTON_OUMAKE_2 = 10, // 福田-欧马可-5系 + VSB_FOTON_SAPU_1 = 11, // 福田-萨普-2011 + VSB_FOTON_SAPU_3 = 12, // 福田-萨普-2011柴油共轨 + VSB_FOTON_MENGPAIKE_1 = 13, // 福田-蒙派克-2013 + VSB_FOTON_MIDI_1 = 14, // 福田-迷迪-2011,2009 + VSB_FOTON_FENGJING_1 = 15, // 福田-风景系列-2012,2011,2009 + VSB_FOTON_SAPU_2 = 16 // 福田-萨普-2011四驱征服者Z7 +}VSB_FOTON_CLASS; + +//福迪子品牌类型 +typedef enum _VSB_FODAY_CLASS +{ + VSB_FODAY_OTHER = 0, // 其他(保留) + VSB_FODAY_CHAOREN_1 = 1, // 福迪-小超人皮卡-2009,2006 + VSB_FODAY_CHAOREN_2 = 2, // 福迪-小超人皮卡-2011 + VSB_FODAY_TANSUOZHE_1 = 3, // 福迪-探索者6-2013,2011,2010 + VSB_FODAY_TANSUOZHE_2 = 4, // 福迪-探索者Ⅱ-2011,2010,2009 + VSB_FODAY_TANSUOZHE_3 = 5, // 福迪-探索者Ⅲ-2011,2004 + VSB_FODAY_XIONGSHI_1 = 6 // 福迪-雄狮F16皮卡-2012 +}VSB_FODAY_CLASS; + +// 红旗子品牌类型 +typedef enum _VSB_HONGQI_CLASS +{ + VSB_HONGQI_OTHER = 0, // 其他(保留) + VSB_HONGQI_MINGSHI_1 = 1 // 红旗-明仕-2007,2003,2001,2000,1999 +}VSB_HONGQI_CLASS; + + +// 纳智捷 子品牌类型 +typedef enum _VSB_LUXGEN_CLASS +{ + VSB_LUXGEN_OTHER = 0, // 其他(保留) + VSB_LUXGEN_DASEVEN_1 = 1 // 纳智捷-大7-SUV +}VSB_LUXGEN_CLASS; + +// 夏利子品牌类型 +typedef enum _VSB_XIALI_CLASS +{ + VSB_XIALI_OTHER = 0, // 其他(保留) + VSB_XIALI_QIBING_1 = 1, // 美亚(夏利)-奇兵-2010 +}VSB_XIALI_CLASS; + +// 舒驰客车子品牌类型 +typedef enum _VSB_SHUCHI_CLASS +{ + VSB_SHUCHI_OTHER = 0, // 其他(保留) + VSB_SHUCHI_A_1 = 1 // 舒驰客车-客车-A款 +}VSB_SHUCHI_CLASS; + +//英菲尼迪子品牌类型 +typedef enum _VSB_INFINITI_CLASS +{ + VSB_INFINITI_OTHER = 0, // 其他(保留) + VSB_INFINITI_EX_1 = 1, // 英菲尼迪-EX-2013,2011,2010,2009,2008 + VSB_INFINITI_FX_1 = 2, // 英菲尼迪-FX-2007 + VSB_INFINITI_FX_2 = 3, // 英菲尼迪-FX-2011,2010,2009 + VSB_INFINITI_FX_3 = 4, // 英菲尼迪-FX-2013,2012FX35 + VSB_INFINITI_G_1 = 5, // 英菲尼迪-G-2013,2010 + VSB_INFINITI_JX_1 = 6 // 英菲尼迪-JX-2013,2011 +}VSB_INFINITI_CLASS; + + +// 莲花子品牌类型 +typedef enum _VSB_LOTUS_CLASS +{ + VSB_LOTUS_OTHER = 0, // 其他(保留) + VSB_LOTUS_L3_1 = 1, // 莲花-L3三厢-2010豪华型,2009 + VSB_LOTUS_L3_2 = 2 // 莲花-L5三厢-2012,2011 +}VSB_LOTUS_CLASS; + +//菲亚特子品牌类型 +typedef enum _VSB_FIAT_CLASS +{ + VSB_FIAT_OTHER = 0, // 其他(保留) + VSB_FIAT_FEIYUE_1 = 1 // 菲亚特-菲跃-2014,2013,2012 +}VSB_FIAT_CLASS; + +//讴歌子品牌类型 +typedef enum _VSB_OGA_CLASS +{ + VSB_OGA_OTHER = 0, // 其他(保留) + VSB_OGA_MDX_1 = 1, // 讴歌-MDX-2010 + VSB_OGA_MDX_2 = 2 // 讴歌-MDX-2011 +}VSB_OGA_CLASS; + + + +// 跃进子品牌类型 +typedef enum _VSB_YUEJIN_CLASS +{ + VSB_YUEJIN_OTHER = 0, // 其他(保留) + VSB_YUEJIN_SHUAIHU_1 = 1, // 跃进-帅虎-H100,H300 + VSB_YUEJIN_CAISHEN_1 = 2, // 跃进-财神-S100 + VSB_YUEJIN_CAISHEN_2 = 3, // 跃进-财神-S300 + VSB_YUEJIN_CAISHEN_3 = 4 // 跃进-财神-S500 +}VSB_YUEJIN_CLASS; + +//野马子品牌类型 +typedef enum _VSB_YEMA_CLASS +{ + VSB_YEMA_OTHER = 0, // 其他(保留) + VSB_YEMA_F99_1 = 1 // 野马-F99-2012,2011,2010,2009 +}VSB_YEMA_CLASS; + +//金龙子品牌类型 +typedef enum _VSB_SZKINGLONG_CLASS +{ + VSB_SZKINGLONG_OTHER = 0, // 其他(保留) + VSB_SZKINGLONG_BUS11_1 = 1, // 金龙-客车车型11-A款 + VSB_SZKINGLONG_BUS12_1 = 2, // 金龙-客车车型12-A款 + VSB_SZKINGLONG_BUS13_1 = 3, // 金龙-客车车型13-A款 + VSB_SZKINGLONG_BUS14_1 = 4, // 金龙-客车车型14-A款 + VSB_SZKINGLONG_BUS16_1 = 5, // 金龙-客车车型16-A款 + VSB_SZKINGLONG_BUS18_1 = 6, // 金龙-客车车型18-A款 + VSB_SZKINGLONG_BUS1_1 = 7, // 金龙-客车车型1-A款 + VSB_SZKINGLONG_BUS20_1 = 8, // 金龙-客车车型20-A款 + VSB_SZKINGLONG_BUS2_1 = 9, // 金龙-客车车型2-A款 + VSB_SZKINGLONG_BUS5_1 = 10, // 金龙-客车车型5-A款 + VSB_SZKINGLONG_BUS6_1 = 11, // 金龙-客车车型6-A款 + VSB_SZKINGLONG_BUS9_1 = 12, // 金龙-客车车型9-A款 + VSB_SZKINGLONG_BUS10_1 = 13, // 金龙-客车车型10-A款 + VSB_SZKINGLONG_BUS15_1 = 14 // 金龙-客车车型15-A款 +}VSB_SZKINGLONG_CLASS; + +//长丰猎豹子品牌类型 +typedef enum _VSB_CHANGFENG_CLASS +{ + VSB_CHANGFENG_OTHER = 0, // 其他(保留) + VSB_CHANGFENG_CS7_1 = 1, // 长丰猎豹-CS7-2009 + VSB_CHANGFENG_QIBING_1 = 2, // 长丰猎豹-奇兵-2010,2009 + VSB_CHANGFENG_LIEBAO_1 = 3, // 长丰猎豹-猎豹CS6-2010,2008 + VSB_CHANGFENG_FULING_1 = 4, // 长丰猎豹-福铃皮卡-A款 + VSB_CHANGFENG_FEIYANG_1 = 5, // 长丰猎豹-飞扬皮卡-2010,2009,2005 + VSB_CHANGFENG_FEITENG_1 = 6, // 长丰猎豹-飞腾-2010,2009,2006 + VSB_CHANGFENG_BLACKJINGANG_1 = 7, // 长丰猎豹-黑金刚-2013,2010,2009,2008,2006 +}VSB_CHANGFENG_CLASS; + +//陆风子品牌类型 +typedef enum _VSB_LUFENG_CLASS +{ + VSB_LUFENG_OTHER = 0, // 其他(保留) + VSB_LUFENG_X6_1 = 1, // 陆风-X6-2005 + VSB_LUFENG_X6_2 = 2, // 陆风-X6-2006 + VSB_LUFENG_X6_3 = 3, // 陆风-X6-2011,2010,2008,2007 + VSB_LUFENG_LUFENGX5_1 = 4, // 陆风-陆风X5-2013 + VSB_LUFENG_LUFENGX8_1 = 5, // 陆风-陆风X8-2013,2012,2011,2009 + VSB_LUFENG_LUFENGX8_2 = 6, // 陆风-陆风X8-2014,2012探索版 + VSB_LUFENG_FENGHUA_1 = 7, // 陆风-风华-2008,2007 + VSB_LUFENG_X6_4 = 8, // 陆风-X6-2011两驱 + VSB_LUFENG_FENGSHANG_1 = 9 // 陆风-风尚-2011,2006 +}VSB_LUFENG_CLASS; + +//陕汽重卡子品牌类型 +typedef enum _VSB_SHANQI_CLASS +{ + VSB_SHANQI_OTHER = 0, // 其他(保留) + VSB_SHANQI_AOLONG_1 = 1, // 陕汽重卡-奥龙-重卡A + VSB_SHANQI_AOLONG_2 = 2, // 陕汽重卡-奥龙-重卡B + VSB_SHANQI_DELONG_1 = 3, // 陕汽重卡-德龙F2000-4X2牵引车 + VSB_SHANQI_DELONG_2 = 4, // 陕汽重卡-德龙F3000-B款 + VSB_SHANQI_DELONG_3 = 5, // 陕汽重卡-德龙M3000-重卡 +}VSB_SHANQI_CLASS; + + +//野马子品牌类型 +typedef enum _VSB_RENAULT_CLASS +{ + VSB_RENAULT_OTHER = 0, // 其他(保留) + VSB_RENAULT_MEIGANNA_1 = 1, // 雷诺-梅甘娜-2006 + VSB_RENAULT_KELEIAO_1 = 2, // 雷诺-科雷傲-2010,2009 + VSB_RENAULT_KELEIAO_2 = 3, // 雷诺-科雷傲-2013,2012 + VSB_RENAULT_SCENE_1 = 4, // 雷诺-风景-2007 + VSB_RENAULT_FENGLANG_1 = 5, // 雷诺-风朗-2011 + VSB_RENAULT_TAFEIKE_1 = 6 // 雷诺-塔菲克-2004 +}VSB_RENAULT_CLASS; + +//黄海子品牌类型 +typedef enum _VSB_HUANGHAI_CLASS +{ + VSB_HUANGHAI_OTHER = 0, // 其他(保留) + VSB_HUANGHAI_DACAISHEN_1 = 1, // 黄海-大柴神-2013,2012 + VSB_HUANGHAI_DACAISHEN_2 = 2, // 黄海-大柴神-2013,2012,2011,2010,2009柴油版 + VSB_HUANGHAI_BUS4_1 = 3, // 黄海-客车车型4-2012,2011 + VSB_HUANGHAI_CHALLENGER_1 = 4, // 黄海-挑战者-2011,2010,2009,2008 + VSB_HUANGHAI_AOLONGCUV_1 = 5, // 黄海-翱龙CUV-2010,2009 + VSB_HUANGHAI_AOJUN_1 = 6, // 黄海-傲骏-2009 + VSB_HUANGHAI_AOJUN_2 = 7, // 黄海-傲骏-2010,2009 + VSB_HUANGHAI_QISHENGV3_1 = 8, // 黄海-旗胜V3-2011 + VSB_HUANGHAI_LINGHANGZHE_1 = 9, // 黄海-领航者-2007,2005 + VSB_HUANGHAI_FENGCHI_1 = 10 // 黄海-风驰-A款 +}VSB_HUANGHAI_CLASS; + +/********************车辆品牌子类型End*************************/ + +//车辆信息 +typedef struct tagNET_DVR_VEHICLE_INFO_ +{ + DWORD dwIndex; //车辆序号 + BYTE byVehicleType; //车辆类型 0 表示其它车型,1 表示小型车,2 表示大型车 ,3表示行人触发 ,4表示二轮车触发 5表示三轮车触发(3.5Ver) 6表示机动车触发 + BYTE byColorDepth; //车身颜色深浅 + BYTE byColor; //车身颜色,参考VCR_CLR_CLASS + /*雷达异常状态: + 0~雷达正常, + 1~雷达故障 + 2~雷达一直发送某一个相同速度值 + 3~雷达送出数据为0 + 4~雷达送出数据过大或者过小 + */ + BYTE byRadarState; + WORD wSpeed; //单位km/h + WORD wLength; //前一辆车的车身长度 + /*违规类型,0-正常,1-低速,2-超速,3-逆行,4-闯红灯,5-压车道线,6-不按导向,7-路口滞留, + 8-机占非,9-违法变道,10-不按车道 11-违反禁令,12-路口停车,13-绿灯停车, 14-未礼让行人(违法代码1357), + 15-违章停车,16-违章掉头,17-占用应急车道,18-禁右,19-禁左,20-压黄线,21-未系安全带,22-行人闯红灯,23-加塞,24-违法使用远光灯, + 25-驾驶时拨打接听手持电话,26-左转不让直行,27-右转不让左转,28-掉头不让直行,29-大弯小转, 30-闯绿灯,31-未带头盔, + 32-非机动车载人,33-非机动车占用机动车道,34-非机动车打伞棚, 35-黑烟车, 36-鸣笛,37-压线停车,38-跨位停车,39-压线且跨位停车, + 40-不让右方道路来车先行,41-进入环形路口未让已在路口内的机动车先行,42-机动车从匝道进入主路未让行,43-大车占道,44-炸街,45-吸烟 + */ + BYTE byIllegalType; + BYTE byVehicleLogoRecog; //参考枚举类型 VLR_VEHICLE_CLASS + BYTE byVehicleSubLogoRecog; //车辆品牌子类型识别;参考VSB_VOLKSWAGEN_CLASS等子类型枚举。 + BYTE byVehicleModel; //车辆子品牌年款,0-未知,参考"车辆子品牌年款.xlsx" + BYTE byCustomInfo[16]; //自定义信息 + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" (该字段兼容byVehicleLogoRecog); + BYTE byIsParking;//是否停车 0-无效,1-停车,2-未停车 + BYTE byRes;//保留字节 + DWORD dwParkingTime; //停车时间,单位:s + BYTE byBelieve; //byIllegalType置信度,1-100 + BYTE byCurrentWorkerNumber;//当前作业人数 + BYTE byCurrentGoodsLoadingRate;//当前货物装载率 0-空 1-少 2-中 3-多 4-满 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 + BYTE byRes3[4]; +}NET_DVR_VEHICLE_INFO, *LPNET_DVR_VEHICLE_INFO; + +//车牌检测结果 +typedef struct tagNET_DVR_PLATE_RESULT +{ + DWORD dwSize; //结构长度 + BYTE byResultType; //0-视频识别结果,1图像识别结果 2 大于10M时走下载路线 + BYTE byChanIndex; //通道号 + WORD wAlarmRecordID; //报警录像ID(用于查询录像,仅当byResultType为2时有效) + DWORD dwRelativeTime; //相对时间点 + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999(毫秒) + DWORD dwPicLen; //图片长度(近景图) + DWORD dwPicPlateLen; //车牌小图片长度 + DWORD dwVideoLen; //录像内容长度 + BYTE byTrafficLight; //0-非红绿灯抓拍,1-绿灯时抓拍;2-红灯时抓拍 + BYTE byPicNum; //连拍的图片序号 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + DWORD dwBinPicLen; //车牌二值图长度 + DWORD dwCarPicLen; //车辆原图长度 + DWORD dwFarCarPicLen; //远景图长度 + BYTE *pBuffer3; //车牌二值图 + BYTE *pBuffer4; //车辆原图 + BYTE *pBuffer5; //远景图 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 + BYTE byRes3[6]; + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE *pBuffer1; // 当上传的是图片(近景图),指针指向图片信息,当上传的是视频,指针指向视频信息,如果不想获得图片或视频信息,传NULL(DVS车辆近景图) + BYTE *pBuffer2; // 当上传的是图片(车牌图)时,指向车牌图片的指针(DVS车牌彩图) +}NET_DVR_PLATE_RESULT, *LPNET_DVR_PLATE_RESULT; +//后面紧跟图片数据和录像数据,只传一种,图片数据为场景图片+车牌小图片 + +typedef struct tagNET_VPD_SHUTTER +{ + DWORD dwCommmand; //命令:0,不控制 1,调亮 2,调暗 3,保持 4,直接输入快门值 + DWORD dwCode; //快门值, 当参数dwCommmand为4, 该参数不能为空 + BYTE byRes[60]; //保留 +}NET_VPD_SHUTTER, *LPNET_VPD_SHUTTER; + +//图像叠加信息配置 +typedef struct tagNET_DVR_IMAGEOVERLAYCFG +{ + DWORD dwSize; + BYTE byOverlayInfo;//叠加使能开关,0-不叠加,1-叠加 + BYTE byOverlayMonitorInfo;//是否叠加显示点信息,0-不叠加,1-叠加 + BYTE byOverlayTime;//是否叠加时间,0-不叠加,1-叠加 + BYTE byOverlaySpeed;//是否叠加速度,0-不叠加,1-叠加 + BYTE byOverlaySpeeding;//是否叠加超速比例,0-不叠加,1-叠加 + BYTE byOverlayLimitFlag;//是否叠加限速标志,0-不叠加,1-叠加 + BYTE byOverlayPlate;//是否叠加车牌号,0-不叠加,1-叠加 + BYTE byOverlayColor;//是否叠加车身颜色,0-不叠加,1-叠加 + BYTE byOverlayLength;//是否叠加车长,0-不叠加,1-叠加 + BYTE byOverlayType;//是否叠加车型,0-不叠加,1-叠加 + BYTE byOverlayColorDepth;//是否叠加车身颜色深浅,0-不叠加,1-叠加 + BYTE byOverlayDriveChan;//是否叠加车道,0-不叠加,1-叠加 + BYTE byOverlayMilliSec; //叠加毫秒信息 0-不叠加,1-叠加 + BYTE byOverlayIllegalInfo; //叠加违章信息 0-不叠加,1-叠加 + BYTE byOverlayRedOnTime; //叠加红灯已亮时间 0-不叠加,1-叠加 + BYTE byFarAddPlateJpeg; //远景图是否叠加车牌截图,0-不叠加,1-叠加 + BYTE byNearAddPlateJpeg; //近景图是否叠加车牌截图,0-不叠加,1-叠加 + BYTE byRes1[3]; //保留 + BYTE byMonitorInfo1[32]; //显示点信息1 + BYTE byMonitorInfo2[44]; //检测点信息2 + BYTE byRes2[52]; //保留 +}NET_DVR_IMAGEOVERLAYCFG, *LPNET_DVR_IMAGEOVERLAYCFG; + +//单IO触发抓拍功能配置 +typedef struct tagNET_DVR_SNAPCFG +{ + DWORD dwSize; + BYTE byRelatedDriveWay;//触发IO关联的车道号 + BYTE bySnapTimes; //线圈抓拍次数,0-不抓拍,非0-连拍次数,目前最大5次 + WORD wSnapWaitTime; //抓拍等待时间,单位ms,取值范围[0,60000] + WORD wIntervalTime[MAX_INTERVAL_NUM];//连拍间隔时间,ms + DWORD dwSnapVehicleNum; //抓拍车辆序号。 + NET_DVR_JPEGPARA struJpegPara;//抓拍图片参数 + BYTE byRes2[16];//保留字节 +}NET_DVR_SNAPCFG, *LPNET_DVR_SNAPCFG; + +typedef enum _ITC_MAINMODE_ABILITY_ +{ + ITC_MODE_UNKNOW = 0x0, //无 + ITC_POST_MODE = 0x1, //卡口模式 + ITC_EPOLICE_MODE = 0x2, //电警模式 + ITC_POSTEPOLICE_MODE = 0x4 //卡式电警模式 +}ITC_MAINMODE_ABILITY; + +typedef enum _ITC_RECOG_REGION_TYPE_ +{ + ITC_REGION_RECT = 0x0, //矩形 + ITC_REGION_POLYGON = 0x1, //多边形 +}ITC_RECOG_REGION_TYPE; + +typedef struct tagNET_DVR_SNAP_ABILITY +{ + DWORD dwSize; + BYTE byIoInNum;//IO输入口数 + BYTE byIoOutNum;//IO输出口数 + BYTE bySingleSnapNum;//单IO触发组数 + BYTE byLightModeArrayNum;//红绿灯模式组数 + BYTE byMeasureModeArrayNum;//测速模式组数 + BYTE byPlateEnable; //车牌识别能力 + BYTE byLensMode;//镜头模式0-CCD,1-CMOS + BYTE byPreTriggerSupport; //是否支持原触发模式,0-支持,1-不支持 + DWORD dwAbilityType; //支持的触发模式能力,按位表示,定义见ITC_MAINMODE_ABILITY + BYTE byIoSpeedGroup; //支持的IO测速组数 + BYTE byIoLightGroup; //支持的IO红绿灯组数 + BYTE byRecogRegionType; //牌识区域支持的类型,详见定义ITC_RECOG_REGION_TYPE + BYTE bySupport; //设备能力,按位表示,0-不支持,1-支持 + // bySupport&0x1,表示是否支持扩展的字符叠加配置 + // bySupport&0x2,表示是否支持扩展的校时配置结构 + // bySupport&0x4, 表示是否支持多网卡(多网隔离) + // bySupport&0x8, 表示是否支持网卡的bonding功能(网络容错) + // bySupport&0x10, 表示是否支持语音对讲 + //2013-07-09 能力集返回 + WORD wSupportMultiRadar;// 设备能力,按位表示,0-不支持,1-支持 + // wSupportMultiRadar&0x1,表示 卡口RS485雷达 支持车道关联雷达处理 + // wSupportMultiRadar&0x2,表示 卡口虚拟线圈 支持车道关联雷达处理 + // wSupportMultiRadar&0x4,表示 混行卡口 支持车道关联雷达处理 + // wSupportMultiRadar&0x8,表示 视频检测 支持车道关联雷达处理 + BYTE byICRPresetNum; + // 表示支持的ICR预置点(滤光片偏移点)数 + BYTE byICRTimeSlot;//表示支持的ICR的时间段数(1~8) + BYTE bySupportRS485Num;//表示支持的RS485口的数量 + BYTE byExpandRs485SupportSensor;// 设备能力,按位表示,0-不支持,1-支持 + // byExpandRs485SupportSensor &0x1,表示电警车检器支持车检器 + // byExpandRs485SupportSensor &0x2,表示卡式电警车检器支持车检器 + BYTE byExpandRs485SupportSignalLampDet;// 设备能力,按位表示,0-不支持,1-支持 + // byExpandRs485SupportSignalLampDet &0x1,表示电警车检器支持外接信号灯检测器 + // byExpandRs485SupportSignalLampDet &0x2,表示卡式电警车检器支持外接信号灯检测器 + BYTE byRelayNum;// 表示支持继电器的个数 2013-11-04 + BYTE bySupport1; //设备能力,按位表示,0-不支持,1-支持 + // bySupport1&0x1,表示是否支持自定义校时信息配置 + // bySupport1&0x2, 表示是否支持视频触发优化方案 + // bySupport1&0x4, 表示是否支持DDNS配置方案 + // bySupport1&0x8, 表示是否支持获取设备当前触发模式接口命令 + // bySupport1&0x10, 表示是否支持出入口配置 2014-03-03 + // bySupport1&0x20, 表示是否支持GPS模块参数配置 + // bySupport1&0x40, 表示是否支持NTP校时间隔支持分钟设置 + // bySupport1&0x80, 表示是否支持tps报警数据上传 + BYTE bySupport2; //设备能力,按位表示,0-不支持,1-支持 + // bySupport2&0x01, 表示是否支持码流附加信息配置 + // bySupport2&0x02, 表示通道图像参数(INTER_PICCFG_V30)中是否支持视频叠加时间毫秒启用参数(byOSDMilliSecondEnable) + // bySupport2&0x04, 表示道闸控制(NET_DVR_BARRIERGATE_CFG)中byBarrierGateCtrl字段支持索引4~解锁道闸,且支持byUnlock解锁使能。反之则标识不支持 + BYTE bySupportWhiteBalance; //白平衡能力,默认都是支持手动白平衡、自动白平衡、自动白平衡2这3种模式。 + // bySupportWhiteBalance &0x01, 表示是否支持日光灯模式 + // bySupportWhiteBalance &0x02, 表示是否支持自然光模式 + // bySupportWhiteBalance &0x04, 表示是否支持暖光灯模式 + // bySupportWhiteBalance &0x08, 表示是否支持白炽灯模式 + BYTE byRes[9]; +} NET_DVR_SNAP_ABILITY, *LPNET_DVR_SNAP_ABILITY; + +typedef struct tagNET_DVR_TRANSFER_CAP +{ + BYTE byAbility; + BYTE byRes[63]; +}NET_DVR_TRANSFER_CAP, *LPNET_DVR_TRANSFER_CAP; + +typedef struct tagNET_ITC_ICRTIMECFG +{ + NET_DVR_SCHEDTIME struTime; + BYTE byAssociateRresetNo;//预置点号1~8 , 0代表无 + BYTE bySubSwitchMode;//1~白天,2~晚上 (当预置点等于0 的时候生效) + BYTE byRes[10]; +}NET_ITC_ICRTIMECFG, *LPNET_ITC_ICRTIMECFG; + +typedef struct tagNET_ITC_ICR_TIMESWITCH_PARAM //156 +{ + NET_ITC_ICRTIMECFG struAutoCtrlTime[MAX_TIMESEGMENT_V30];//自动切换时间段 (自动切换下 时空下生效 现在支持4组,预留4组) + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] 数组下标表示预置点号1~8 (0~7 相对应) + BYTE byRes[20]; +}NET_ITC_ICR_TIMESWITCH_PARAM, *LPNET_ITC_ICR_TIMESWITCH_PARAM; + +typedef struct tagNET_ITC_ICR_MANUALSWITCH_PARAM +{ + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] + BYTE bySubSwitchMode;//1~白天,2~晚上 + BYTE byRes[147]; +}NET_ITC_ICR_MANUALSWITCH_PARAM, *LPNET_ITC_ICR_MANUALSWITCH_PARAM; + +typedef struct tagNET_ITC_ICR_AOTOSWITCH_PARAM +{ + BYTE byICRPreset[MAX_ICR_NUM]; //实际生效根据能力集动态显示 [0~100] 数组下标表示预置点号1~8 (0~7 相对应) + BYTE byICRAutoSwitch; // ICR自动切换加阈值选项, 取值范围[0 100] + BYTE byRes[147]; +}NET_ITC_ICR_AOTOSWITCH_PARAM, *LPNET_ITC_ICR_AOTOSWITCH_PARAM; + +//算法自动 +typedef struct tagNET_ITC_ICR_ALGAOTOSWITCH_PARAM +{ + BYTE byDetectThreshold;//检测阈值,范围[0,100],默认 58 + BYTE byAbBrightnessThreshold; //异常亮度阈值,范围[0,100],默认12 + BYTE byRes[154]; +}NET_ITC_ICR_ALGAOTOSWITCH_PARAM, *LPNET_ITC_ICR_ALGAOTOSWITCH_PARAM; + +typedef union tagNET_ITC_ICR_PARAM_UNION +{ + BYTE uLen[156]; + NET_ITC_ICR_AOTOSWITCH_PARAM struICRAutoSwitch; + NET_ITC_ICR_MANUALSWITCH_PARAM struICRManualSwitch; + NET_ITC_ICR_TIMESWITCH_PARAM struICRTimeSwitch; + NET_ITC_ICR_ALGAOTOSWITCH_PARAM strICRAlgorithmAutoSwitch; +}NET_ITC_ICR_PARAM_UNION,*LPNET_ITC_ICR_PARAM_UNION; + +typedef struct tagNET_ITC_ICRCFG +{ + DWORD dwSize; + BYTE bySwitchType;//1~自动切换,2~手动切换 ,3~定时切换,4~算法自动 + BYTE byRes[3]; + NET_ITC_ICR_PARAM_UNION uICRParam; +}NET_ITC_ICRCFG, *LPNET_ITC_ICRCFG; + +//2013-07-09 异常处理 +typedef struct +{ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出(继电器输出)*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + BYTE byEnable; //0~不启用,1~启用 + BYTE byRes; + WORD wDuration;//持续时间(单位/s) + BYTE byAlarmOutTriggered[MAX_ITC_EXCEPTIONOUT];//触发输出通道 + BYTE byRes1[8]; +} NET_ITC_HANDLEEXCEPTION, *LPNET_ITC_HANDLEEXCEPTION; + +typedef struct +{ + DWORD dwSize; + NET_ITC_HANDLEEXCEPTION struSnapExceptionType[MAX_EXCEPTIONNUM_V30]; //数组的每个元素都表示一种异常,数组0- 硬盘出错,1-网线断,2-IP 地址冲突, 3-车检器异常, 4-信号灯检测器异常 +}NET_ITC_EXCEPTION,*LPNET_ITC_EXCEPTION; + +typedef struct tagNET_DVR_TRIGCOORDINATE +{ + WORD wTopLeftX; /*线圈左上角横坐标(2个字节)*/ + WORD wTopLeftY; /*线圈左上角纵坐标(2个字节)*/ + WORD wWdith; /*线圈宽度(2个字节)*/ + WORD wHeight; /*线圈高度(2个字节)*/ +} NET_DVR_TRIGCOORDINATE, *LPNET_DVR_TRIGCOORDINATE; + +typedef enum _PROVINCE_CITY_IDX_ +{ + ANHUI_PROVINCE = 0, //安徽 + AOMEN_PROVINCE = 1, //澳门 + BEIJING_PROVINCE = 2, //北京 + CHONGQING_PROVINCE = 3, //重庆 + FUJIAN_PROVINCE = 4, //福建 + GANSU_PROVINCE = 5, //甘肃 + GUANGDONG_PROVINCE = 6, //广东 + GUANGXI_PROVINCE = 7, //广西 + GUIZHOU_PROVINCE = 8, //贵州 + HAINAN_PROVINCE = 9, //海南 + HEBEI_PROVINCE = 10, //河北 + HENAN_PROVINCE = 11, //河南 + HEILONGJIANG_PROVINCE = 12, //黑龙江 + HUBEI_PROVINCE = 13, //湖北 + HUNAN_PROVINCE = 14, //湖南 + JILIN_PROVINCE = 15, //吉林 + JIANGSU_PROVINCE = 16, //江苏 + JIANGXI_PROVINCE = 17, //江西 + LIAONING_PROVINCE = 18, //辽宁 + NEIMENGGU_PROVINCE = 19, //内蒙古 + NINGXIA_PROVINCE = 20, //宁夏 + QINGHAI_PROVINCE = 21, //青海 + SHANDONG_PROVINCE = 22, //山东 + SHANXI_JIN_PROVINCE = 23, //山西 + SHANXI_SHAN_PROVINCE = 24, //陕西 + SHANGHAI_PROVINCE = 25, //上海 + SICHUAN_PROVINCE = 26, //四川 + TAIWAN_PROVINCE = 27, //台湾 + TIANJIN_PROVINCE = 28, //天津 + XIZANG_PROVINCE = 29, //西藏 + XIANGGANG_PROVINCE = 30, //香港 + XINJIANG_PROVINCE = 31, //新疆 + YUNNAN_PROVINCE = 32, //云南 + ZHEJIANG_PROVINCE = 33 //浙江 +}PROVINCE_CITY_IDX; + +typedef struct tagNET_DVR_GEOGLOCATION +{ + int iRes[2]; /*保留*/ + DWORD dwCity; /*城市,详见PROVINCE_CITY_IDX */ +}NET_DVR_GEOGLOCATION, *LPNET_DVR_GEOGLOCATION; + +//场景模式 +typedef enum _SCENE_MODE_ +{ + UNKOWN_SCENE_MODE = 0, //未知场景模式 + HIGHWAY_SCENE_MODE = 1, //高速场景模式 + SUBURBAN_SCENE_MODE = 2, //郊区场景模式(保留) + URBAN_SCENE_MODE = 3, //市区场景模式 + TUNNEL_SCENE_MODE = 4 //隧道场景模式(保留) +}SCENE_MODE; +// 私有信息模块类型 +typedef enum _PRIDATA_RENDER +{ + RENDER_ANA_INTEL_DATA = 0x00000001, //智能分析 + RENDER_MD = 0x00000002, //移动侦测 + RENDER_ADD_POS = 0x00000004, //POS信息后叠加 + RENDER_ADD_PIC = 0x00000008, //图片叠加 + RENDER_FIRE_DETCET = 0x00000010, //热成像信息 + RENDER_TEM = 0x00000020, //温度信息 + RENDER_TRACK_TEM = 0x00000040, //信息 + RENDER_THERMAL = 0x00000080 //废气检测和烟火屏蔽信息 +}PRIDATA_RENDER; + +typedef enum _THERMAL_FLAG +{ + THERMAL_FIREMASK = 0x00000001, //烟火屏蔽 + THERMAL_RULEGAS = 0x00000002, //规则废气检测 + THERMAL_TARGETGAS = 0x00000004 //目标废气检测 +}THERMAL_FLAG; + +typedef enum _FIRE_ALARM{ + FIRE_FRAME_DIS = 0x00000001, //火点框显示 + FIRE_MAX_TEMP = 0x00000002, //最高温度 + FIRE_MAX_TEMP_POSITION = 0x00000004, //最高温度位置显示 + FIRE_DISTANCE = 0x00000008, //最高温度距离}FIRE_ALARM +}FIRE_ALARM; + +typedef enum _TEM_FLAG{ + TEM_REGION_BOX = 0x00000001, //框测温 + TEM_REGION_LINE = 0x00000002, //线测温 + TEM_REGION_POINT = 0x00000004, //点测温}TEM_FLAG +}TEM_FLAG; + +typedef enum _TRACK_FLAG +{ + TRACK_PEOPLE = 0x00000001, //人 + TRACK_VEHICLE = 0x00000002 //车 +}TRACK_FLAG; + +typedef struct tagNET_DVR_VTPARAM +{ + DWORD dwSize; + BYTE byEnable; /* 是否使能虚拟线圈,0-不使用,1-使用*/ + BYTE byIsDisplay; /* 是否显示虚拟线圈,0-不显示,1-显示*/ + BYTE byLoopPos; //晚间触发线圈的偏向:0-向上,1-向下 + BYTE bySnapGain; /*抓拍增益*/ + DWORD dwSnapShutter; /*抓拍快门速度*/ + NET_DVR_TRIGCOORDINATE struTrigCoordinate; //保留 + NET_DVR_TRIGCOORDINATE struRes[MAX_VL_NUM]; + BYTE byTotalLaneNum;/*视频触发的车道数1*/ + BYTE byPolarLenType; /*偏振镜类型,0:不加偏振镜;1:加施耐德偏振镜。*/ + BYTE byDayAuxLightMode; /*白天辅助照明模式,0:无辅助照明;1:LED灯照明;2:闪光灯照明*/ + BYTE byLoopToCalRoadBright; /*用以计算路面亮度的车道(虚拟线圈)*/ + BYTE byRoadGrayLowTh; /*路面亮度低阈值初始化值1*/ + BYTE byRoadGrayHighTh; /*路面亮度高阈值初始化值140*/ + WORD wLoopPosBias; /*晚间触发线圈位移30*/ + DWORD dwHfrShtterInitValue; /*连续图像曝光时间的初始值2000*/ + DWORD dwSnapShtterInitValue; /*抓拍图像曝光时间的初始值500*/ + DWORD dwHfrShtterMaxValue; /*连续图像曝光时间的最大值20000*/ + DWORD dwSnapShtterMaxValue; /*抓拍图像曝光时间的最大值1500*/ + DWORD dwHfrShtterNightValue; /*晚间连续图像曝光时间的设置值3000*/ + DWORD dwSnapShtterNightMinValue; /*晚间抓拍图像曝光时间的最小值3000*/ + DWORD dwSnapShtterNightMaxValue; /*晚间抓拍图像曝光时间的最大值5000*/ + DWORD dwInitAfe; /*增益的初始值200*/ + DWORD dwMaxAfe; /*增益的最大值400*/ + WORD wResolutionX;/* 设备当前分辨率宽*/ + WORD wResolutionY;/* 设备当前分辨率高*/ + DWORD dwGainNightValue; /*晚间增益,默认值70*/ + DWORD dwSceneMode; /*场景模式, 详见SCENE_MODE */ + DWORD dwRecordMode; /*录像标志:0-不录像,1-录像*/ + NET_DVR_GEOGLOCATION struGeogLocation; /*地址位置*/ + BYTE byTrigFlag[MAX_VL_NUM]; /*触发标志,0-车头触发;1-车尾触发;2-车头/车尾都触发*/ + BYTE byTrigSensitive[MAX_VL_NUM]; /*触发灵敏度,1-100*/ + BYTE byRes2[62]; +}NET_DVR_VTPARAM, *LPNET_DVR_VTPARAM; + +typedef struct tagNET_DVR_SNAPENABLECFG +{ + DWORD dwSize; + BYTE byPlateEnable;//是否支持车牌识别,0-不支持,1-支持 + BYTE byRes1[2]; //保留 + BYTE byFrameFlip; //图像是否翻转 0-不翻转,1-翻转 + WORD wFlipAngle; //图像翻转角度 0,90,180,270 + WORD wLightPhase; //相位,取值范围[0, 360] + BYTE byLightSyncPower; //是否信号灯电源同步,0-不同步;1-同步 + BYTE byFrequency; //信号频率 + BYTE byUploadSDEnable; //是否自动上传SD图片,0-否;1-是 + BYTE byPlateMode; //识别模式参数:0-视频触发,1-外部触发 + BYTE byUploadInfoFTP; //是否上传抓拍附加信息到FTP,0-否,1-是 + BYTE byAutoFormatSD; //是否自动格式化SD卡,0-否,1-是 + WORD wJpegPicSize; //Jpeg图片大小[64-8196] + BYTE bySnapPicResolution; //抓拍图片分辨率(与NET_DVR_COMPRESSION_INFO_V30中分辨率保持一致) + BYTE byRes[55]; //保留 +}NET_DVR_SNAPENABLECFG, *LPNET_DVR_SNAPENABLECFG; + +/*ftp上传参数*/ +typedef struct +{ + DWORD dwSize; + DWORD dwEnableFTP; /*是否启动ftp上传功能*/ + char sFTPIP[16]; /*ftp 服务器*/ + DWORD dwFTPPort; /*ftp端口*/ + BYTE sUserName[NAME_LEN]; /*用户名*/ + BYTE sPassword[PASSWD_LEN]; /*密码*/ + DWORD dwDirLevel; /*0 = 不使用目录结构,直接保存在根目录,1 = 使用1级目录,2=使用2级目录*/ + WORD wTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址,0x4=使用显示点,0x5=使用时间(年月),0x=6自定义,0x7=违规类型,0x8=方向,0x9=地点*/ + WORD wSubDirMode; /* 二级目录,0x1 = 使用通道名,0x2 = 使用通道号,,0x3=使用时间(年月日),0x4=使用车道号,0x=5自定义,0x6=违规类型,0x7=方向,0x8=地点*/ + BYTE byEnableAnony; //启用匿名,0-否,1-是 + BYTE byPicArchivingInterval;//图片归档间隔[1~30],0表示关闭 + BYTE byRes[22]; +}NET_DVR_FTPCFG, *LPNET_DVR_FTPCFG; + +/*可用来命名图片的相关元素 */ +#define PICNAME_ITEM_DEV_NAME 1 /*设备名*/ +#define PICNAME_ITEM_DEV_NO 2 /*设备号*/ +#define PICNAME_ITEM_DEV_IP 3 /*设备IP*/ +#define PICNAME_ITEM_CHAN_NAME 4 /*通道名*/ +#define PICNAME_ITEM_CHAN_NO 5 /*通道号*/ +#define PICNAME_ITEM_TIME 6 /*时间*/ +#define PICNAME_ITEM_CARDNO 7 /*卡号*/ +#define PICNAME_ITEM_PLATE_NO 8 /*车牌号码*/ +#define PICNAME_ITEM_PLATE_COLOR 9 /*车牌颜色*/ +#define PICNAME_ITEM_CAR_CHAN 10 /*车道号*/ +#define PICNAME_ITEM_CAR_SPEED 11 /*车辆速度*/ +#define PICNAME_ITEM_CARCHAN 12 /*显示点*/ +#define PICNAME_ITEM_PIC_NUMBER 13 //图片序号 +#define PICNAME_ITEM_CAR_NUMBER 14 //车辆序号 +#define PICNAME_MAXITEM 15 + +#define PICNAME_ITEM_SPEED_LIMIT_VALUES 15 //限速值 +#define PICNAME_ITEM_ILLEGAL_CODE 16 //国标违法代码 +#define PICNAME_ITEM_CROSS_NUMBER 17 //路口编号 +#define PICNAME_ITEM_DIRECTION_NUMBER 18 //方向编号 + +//(3.7Ver) +#define PICNAME_ITEM_CAR_COLOR 19 //车身颜色 +#define PICNAME_ITEM_PLATE_COORDINATE 20 //车牌坐标 +#define PICNAME_ITEM_CAR_TYPE 21 //车辆类型 +#define PICNAME_ITEM_VIOLATION_TYPE 22 //违规类型 +#define PICNAME_ITEM_CUSTOM 255//自定义 + + + +//图片命名 +typedef struct +{ + BYTE byItemOrder[PICNAME_MAXITEM]; /* 桉数组定义文件命名的规则 */ + BYTE byDelimiter; /*分隔符,一般为'_'*/ +}NET_DVR_PICTURE_NAME, *LPNET_DVR_PICTURE_NAME; + +//命名规则:2013-09-27 +#define PICNAME_ITEM_PARK_DEV_IP 1 /*设备IP*/ +#define PICNAME_ITEM_PARK_PLATE_NO 2 /*车牌号码*/ +#define PICNAME_ITEM_PARK_TIME 3 /*时间*/ +#define PICNAME_ITEM_PARK_INDEX 4 /*车位编号*/ +#define PICNAME_ITEM_PARK_STATUS 5 /*车位状态*/ +#define PICNAME_ITEM_BUILDING_NUMBER 6 /*栋号单元号*/ +#define PICNAME_ITEM_OUTDOOR_UNIT_ID 7 /*门口机编号*/ +#define PICNAME_ITEM_UNLOCK_TYPE 8 /*开锁方式*/ +#define PICNAME_ITEM_DEVICE_NAME 9 //设备名称 +#define PICNAME_ITEM_PERIOD_NO 10 /*期号*/ +#define PICNAME_ITEM_DEV_INDEX 11 /*设备编号*/ +#define PICNAME_PREFIX 32 /*图片名自定义前缀长度*/ +//图片命名扩展 2013-09-27 +typedef struct +{ + BYTE byItemOrder[PICNAME_MAXITEM]; /* 桉数组定义文件命名的规则 */ + BYTE byDelimiter; /*分隔符,一般为'_'*/ + BYTE byPicNamePrefix[PICNAME_PREFIX/*32*/]; //图片名自定义前缀 +}NET_DVR_PICTURE_NAME_EX, *LPNET_DVR_PICTURE_NAME_EX; + +/* 串口抓图设置*/ +typedef struct +{ + BYTE byStrFlag; /*串口数据开始符*/ + BYTE byEndFlag; /*结束符*/ + WORD wCardIdx; /*卡号相对起始位*/ + DWORD dwCardLen; /*卡号长度*/ + DWORD dwTriggerPicChans; /*所触发的通道号,按位,从第1位开始计,即0x2表示第一通道*/ +}NET_DVR_SERIAL_CATCHPIC_PARA, *LPNET_DVR_SERIAL_CATCHPIC_PARA; + +//DVR抓图参数配置(基线) +typedef struct +{ + DWORD dwSize; + NET_DVR_JPEGPARA struJpegPara[MAX_CHANNUM_V30]; /*每个通道的图像参数*/ + WORD wBurstMode; /*抓图方式,按位设置.0x1=报警输入触发,0x2=移动侦测触发 0x4=232触发,0x8=485触发,0x10=网络触发*/ + WORD wUploadInterval; /*图片上传间隔(秒)[0,65535]*/ + NET_DVR_PICTURE_NAME struPicNameRule; /* 图片命名规则 */ + BYTE bySaveToHD; /*是否保存到硬盘*/ + BYTE byRes1; + WORD wCatchInterval; /*抓图间隔(毫秒)[0,65535]*/ + BYTE byRes2[12]; + NET_DVR_SERIAL_CATCHPIC_PARA struRs232Cfg; + NET_DVR_SERIAL_CATCHPIC_PARA struRs485Cfg; + DWORD dwTriggerPicTimes[MAX_CHANNUM_V30]; /* 每个通道一次触发拍照次数 */ + DWORD dwAlarmInPicChanTriggered[MAX_ALARMIN_V30]; /*报警触发抓拍通道,按位设置,从第1位开始*/ +}NET_DVR_JPEGCFG_V30, *LPNET_DVR_JPEGCFG_V30; + +//抓拍触发请求结构(保留) +typedef struct tagNET_DVR_MANUALSNAP +{ + BYTE byOSDEnable;//0-不关闭(默认),1-关闭 + BYTE byLaneNo;//车道号, 范围为1-6,默认为1(抓拍机内部测试使用) + BYTE byChannel;//通道号 + BYTE byRes[21]; //保留 +}NET_DVR_MANUALSNAP, *LPNET_DVR_MANUALSNAP; + +typedef struct tagNET_DVR_SPRCFG +{ + DWORD dwSize; + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写*/ + BYTE byPlateOSD; /*0:不发送车牌彩色图,1:发送车牌彩色图*/ + BYTE bySendJPEG1; /*0-不传送近景JPEG图,1-传送近景JPEG图*/ + BYTE bySendJPEG2; /*0-不传送远景JPEG图,1-传送远景JPEG图*/ + WORD wDesignedPlateWidth; /*车牌设计宽度*/ + BYTE byTotalLaneNum; /*识别的车道数*/ + BYTE byRes1; /*保留*/ + WORD wRecognizedLane; /*识别的车道号,按位表示,bit0表示车道1是否识别,0-不识别,1-识别*/ + NET_VCA_RECT struLaneRect[MAX_LANERECT_NUM]; /*车道识别区域*/ + DWORD dwRecogMode; /*识别的类型, + bit0-背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + bit1-大车牌识别或小车牌识别:0-小车牌识别,1-大车牌识别 ; + bit2-车身颜色识别:0-不采用车身颜色识别,在背向识别或小车牌识别时禁止启用,1-车身颜色识别; + bit3-农用车识别:0-不采用农用车识别,1-农用车识别; + bit4-模糊识别:0-不采用模糊识别,1-模糊识别; + bit5-帧定位或场定位:0-帧定位,1-场定位; + bit6-帧识别或场识别:0-帧识别,1-场识别; + bit7-晚上或白天:0-白天,1-晚上 */ + BYTE bySendPRRaw; //是否发送原图:0-不发送,1-发送 + BYTE bySendBinImage; //是否发送车牌二值图:0-不发送,1-发送 + BYTE byDelayCapture; //延时抓拍控制,单位:帧 + BYTE byUseLED; //使用LED控制,0-否,1-是 + BYTE byRes2[68]; //保留 +}NET_DVR_SPRCFG, *LPNET_DVR_SPRCFG; + +typedef struct tagNET_DVR_PLCCFG +{ + DWORD dwSize; + BYTE byPlcEnable; //是否启用车牌亮度补偿(默认启用):0-关闭,1-启用 + BYTE byPlateExpectedBright; //车牌的预期亮度(默认值50), 范围[0, 100] + BYTE byRes1[2]; //保留 + BYTE byTradeoffFlash; //是否考虑闪光灯的影响: 0 - 否; 1 - 是(默认); + //使用闪光灯补光时, 如果考虑减弱闪光灯的亮度增强效应, 则需要设为1;否则为0 + BYTE byCorrectFactor; //纠正系数, 范围[0, 100], 默认值50 (在tradeoff_flash切换时,恢复默认值) + WORD wLoopStatsEn; //是否该线圈的亮度,按位表示,0-不统计,1-统计 + BYTE byPlcBrightOffset;// 车牌亮度补偿灵敏度(虚拟线圈模式起效),取值范围1~100 + BYTE byRes[19]; +}NET_DVR_PLCCFG, *LPNET_DVR_PLCCFG; + +typedef struct tagNET_DVR_DEVICESTATECFG +{ + DWORD dwSize; + WORD wPreviewNum; //预览连接个数 + WORD wFortifyLinkNum; //布防连接个数 + NET_DVR_IPADDR struPreviewIP[MAX_LINK]; //预览的用户IP地址 + NET_DVR_IPADDR struFortifyIP[MAX_FORTIFY_NUM]; //布防连接的用户IP地址 + DWORD dwVideoFrameRate; //帧率:0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20; 14-15; 15-18; 16-22; + BYTE byResolution; //分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5(保留),16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA (800*600),19-HD720p(1280*720),20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 + BYTE bySnapResolution; //抓拍分辨率0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5(保留),16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA (800*600),19-HD720p(1280*720),20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, 31-2448*2048 + BYTE byStreamType; //传输类型:0-主码流;1-子码流 + BYTE byTriggerType; //触发模式:0-视频触发;1-普通触发 + DWORD dwSDVolume; //SD卡容量 + DWORD dwSDFreeSpace; //SD卡剩余空间 + BYTE byDetectorState[MAX_DRIVECHAN_NUM][MAX_COIL_NUM]; //车检器状态:0-未使用;1-正常;2-异常 + BYTE byDetectorLinkState; //车检器连接状态:0-未连接;1-连接 + BYTE bySDStatus; //SD卡状态 0-活动;1-休眠;2-异常,3-无sd卡 + BYTE byFortifyLevel[MAX_FORTIFY_NUM]; //布防等级,0-无,1-一等级(高),2-二等级(中),3-三等级(低) + BYTE byRes2[116]; //保留 +}NET_DVR_DEVICESTATECFG, *LPNET_DVR_DEVICESTATECFG; + +typedef struct tagNET_DVR_POSTEPOLICECFG +{ + DWORD dwSize; + DWORD dwDistance;//线圈距离,单位cm,取值范围[0,20000] + DWORD dwLightChan[MAX_SIGNALLIGHT_NUM]; //信号灯通道号 + BYTE byCapSpeed;//标志限速,单位km/h,取值范围[0,255] + BYTE bySpeedLimit;//限速值,单位km/h,取值范围[0,255] + BYTE byTrafficDirection;//车流方向,0-由东向西,1-由西向东,2-由南向北,3-由北向南 + BYTE byRes1; //保留 + WORD wLoopPreDist; /*触发延迟距离 ,单位:分米*/ + WORD wTrigDelay; /*触发硬延时时间 ,单位:毫秒*/ + BYTE byRes[124];//保留字节 +}NET_DVR_POSTEPOLICECFG, *LPNET_DVR_POSTEPOLICECFG; + + +//信号灯异常检测 +typedef struct tagNET_DVR_SIGNALLAMP_DETCFG +{ + DWORD dwSize; //结构长度 + //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 + BYTE byAbsTime[32]; + NET_DVR_IPADDR struAlarmCamIP;//报警摄像机IP + DWORD dwPic1Len; //异常图片1长度 + DWORD dwPic2Len; //异常图片2长度 + char *pPic1Buffer; //数据指针 叠加车道线图片 + char *pPic2Buffer; //数据指针 叠加信号灯状态图片 + BYTE byRes[128]; +}NET_DVR_SIGNALLAMP_DETCFG, *LPNET_DVR_SIGNALLAMP_DETCFG; + +typedef struct tagNET_DVR_EXDEVDET_COND +{ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + BYTE byExternalDevType;// 0-无效值(保留)1-信号灯,2-闪光灯 + BYTE byRes[63]; // 保留字节 +}NET_DVR_EXDEVDET_COND,*LPNET_DVR_EXDEVDET_COND; + +typedef struct tagNET_DVR_EXDEVDET_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byExternalDevStatus;// 0-正常1-异常 + BYTE byRes[63];// 保留字节 +} NET_DVR_EXDEVDET_CFG,*LPNET_DVR_EXDEVDET_CFG; + +/***************************** end *********************************************/ + +#define IPC_PROTOCOL_NUM 50 //ipc 协议最大个数 + +//协议类型 +typedef struct tagNET_DVR_PROTO_TYPE +{ + DWORD dwType; /*ipc协议值*/ + BYTE byDescribe[DESC_LEN]; /*协议描述字段*/ +}NET_DVR_PROTO_TYPE, *LPNET_DVR_PROTO_TYPE; + +//协议列表 +typedef struct tagNET_DVR_IPC_PROTO_LIST +{ + DWORD dwSize; + DWORD dwProtoNum; /*有效的ipc协议数目*/ + NET_DVR_PROTO_TYPE struProto[IPC_PROTOCOL_NUM]; /*有效的ipc协议*/ + BYTE byRes[8]; +}NET_DVR_IPC_PROTO_LIST, *LPNET_DVR_IPC_PROTO_LIST; + +//协议列表V41 +typedef struct tagNET_DVR_IPC_PROTO_LIST_V41 +{ + DWORD dwSize; + DWORD dwProtoNum; //有效的ipc协议数目 + BYTE *pBuffer; //协议列表缓冲区, dwProtoNum 个NET_DVR_PROTO_TYPE结构 + DWORD dwBufferLen; //缓冲区长度 + BYTE byRes[32]; +}NET_DVR_IPC_PROTO_LIST_V41, *LPNET_DVR_IPC_PROTO_LIST_V41; + +typedef struct tagNET_DVR_PTZPOS_INFO +{ + DWORD dwPanPos; // P参数(水平参数) + DWORD dwTiltPos; // T参数(垂直参数) + DWORD dwZoomPos; // Z参数(变倍参数) +}NET_DVR_PTZPOS_INFO, *LPNET_DVR_PTZPOS_INFO; + +//人体特征识别结果结构体 +typedef struct tagNET_VCA_HUMAN_FEATURE +{ + BYTE byGroup; //段 + BYTE bySex; //性别, 0-表示“未知”(算法不支持),1 – 男 , 2 – 女, 0xff-算法支持,但是没有识别出来 + BYTE byEyeGlass; //是否戴眼镜 0-表示“未知”(算法不支持),1 –不戴, 2 –戴眼镜, 3 –戴墨镜,0xff-算法支持,但是没有识别出来 + //抓拍图片人脸的使用方式,如byRes3为15,byDeviation为1,表示,实际人脸图片的为14-16之间 + BYTE byRes3;// 0-表示“未知”(算法不支持),0xff-算法支持,但是没有识别出来 + BYTE byDeviation;//误差值 + BYTE byRes0; + BYTE byMask; //是否戴口罩 0-表示“未知”(算法不支持),1 – 不戴, 2 – 戴, 0xff-算法支持,但是没有识别出来 + BYTE bySmile; //是否微笑 0-表示“未知”(算法不支持),1 – 不微笑, 2 – 微笑, 0xff-算法支持,但是没有识别出来 + BYTE byFaceExpression; /* 表情,参见FACE_EXPRESSION_GROUP_ENUM*/ + BYTE byRes1; + BYTE byRes2; + BYTE byHat; // 帽子, 0-不支持,1-不戴帽子,2-戴帽子, 3-头盔 0xff-unknow表示未知,算法支持未检出 + BYTE byRes[4]; //保留 +}NET_VCA_HUMAN_FEATURE ,*LPNET_VCA_HUMAN_FEATURE; + +//物体颜色属性 +typedef struct tagNET_DVR_OBJECT_FEATURE +{ + BYTE byColorRatel; //颜色在移动物体中的占比阈值 + BYTE byRed; // RGB颜色三分量中的红色 + BYTE byGreen; // RGB颜色三分量中的绿色 + BYTE byBlue; // RGB颜色三分量中的兰色 + BYTE byRes[32]; +}NET_DVR_OBJECT_FEATURE ,*LPNET_DVR_OBJECT_FEATURE; + +//组合搜索条件 +typedef union tagNET_DVR_ADVANCE_COND_UNION +{ + BYTE byLen[36]; //联合体长度 + NET_VCA_HUMAN_FEATURE struHumanFeature; //人体属性 + NET_DVR_OBJECT_FEATURE struObjectFeature; //物体属性 +}NET_DVR_ADVANCE_COND_UNION,*LPNET_DVR_ADVANCE_COND_UNION; + + +#define MAX_ALERTLINE_NUM 8 //最大警戒线条数 + + +typedef struct tagNET_DVR_TRAVERSE_PLANE_SEARCHCOND +{ + NET_VCA_TRAVERSE_PLANE struVcaTraversePlane[MAX_ALERTLINE_NUM/*8*/]; //穿越境界面参数 + DWORD dwPreTime; /*智能报警提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能报警延迟时间 单位:秒*/ + NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZ坐标信息 + BYTE byAdvanceType; //组合方式,0-不使用组号,1-和人脸属性组合,2-与物体颜色占比组合 + BYTE byRes1[3]; //保留 + NET_DVR_ADVANCE_COND_UNION uAdvanceCond; //组合属性 + BYTE byRes[5604]; //保留 +}NET_DVR_TRAVERSE_PLANE_SEARCHCOND, *LPNET_DVR_TRAVERSE_PLANE_SEARCHCOND; //越界侦测查询条件 + +#define MAX_INTRUSIONREGION_NUM 8 //最大区域数数 +typedef struct tagNET_DVR_INTRUSION_SEARCHCOND +{ + NET_VCA_INTRUSION struVcaIntrusion[MAX_INTRUSIONREGION_NUM/*8*/]; //入侵区域 + DWORD dwPreTime; /*智能报警提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能报警延迟时间 单位:秒*/ + NET_DVR_PTZPOS_INFO struPTZPosInfo; //PTZ坐标信息 + BYTE byAdvanceType;//组合方式,0-不使用组号,1-和人脸属性组合,2-与物体颜色占比组合 + BYTE byRes1[3]; //保留 + NET_DVR_ADVANCE_COND_UNION uAdvanceCond; //组合属性 + BYTE byRes[5348]; //保留 +} NET_DVR_INTRUSION_SEARCHCOND, *LPNET_DVR_INTRUSION_SEARCHCOND; //区域入侵 + + +typedef struct tagNET_DVR_FACEDETECTION_SEARCHCOND +{ + NET_VCA_POLYGON struFacePolygon; //识别区域 + DWORD dwPreTime; /*智能录像提前时间 单位:秒*/ + DWORD dwDelayTime; /*智能录像延迟时间 单位:秒*/ + BYTE byRes[5972]; //保留 +}NET_DVR_FACEDETECTION_SEARCHCOND, *LPNET_DVR_FACEDETECTION_SEARCHCOND; //人脸检测 + + +typedef union tagNET_DVR_AREA_SMARTSEARCH_COND_UNION +{ + BYTE byLen[6144]; //结构体长度 + BYTE byMotionScope[64][96]; //侦测区域 0-96位表示64行,共有96*64个小宏块,1-是移动侦测区域,0-非移动侦测区域 + NET_DVR_TRAVERSE_PLANE_SEARCHCOND struTraversPlaneCond; //越界侦测 + NET_DVR_INTRUSION_SEARCHCOND struIntrusionCond; //区域入侵 + NET_DVR_FACEDETECTION_SEARCHCOND struFaceSnapCond; //人脸侦测条件 +}NET_DVR_AREA_SMARTSEARCH_COND_UNION, +*LPNET_DVR_AREA_SMARTSEARCH_COND_UNION; + + +//智能搜索参数 +typedef struct tagNET_DVR_SMART_SEARCH_PARAM +{ + BYTE byChan; //通道号 + BYTE bySearchCondType; //智能查找联合体NET_DVR_AREA_SMARTSEARCH_COND_UNION的索引 + /*0-移动侦测区域 ,1-越界侦测, 2-区域入侵, 3-人脸侦测 */ + WORD wChan; //通道号, 该字段是对byChan的扩展,使用该字段后byChan可以不再使用 + NET_DVR_TIME struStartTime; //录像开始的时间 + NET_DVR_TIME struEndTime; //录像停止的时间 + NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //智能查找条件 + BYTE bySensitivity; //移动侦测搜索灵敏度,1 >80% 2 40%~80% 3 1%~40% + BYTE byRes2[11]; +}NET_DVR_SMART_SEARCH_PARAM, *LPNET_DVR_SMART_SEARCH_PARAM; + +typedef struct tagNET_DVR_SMART_SEARCH_PARAM_V40 +{ + DWORD dwSize; //结构体大小 + NET_DVR_STREAM_INFO struIDInfo; //通道信息 + BYTE bySearchCondType; //智能查找联合体索引 0-侦测区域, 1-越界侦测, 2-区域入侵,3-人脸侦测, 4-车牌检测 + BYTE bySensitivity; //侦测区域动态分析灵敏度,1-100 + BYTE byRes1[2]; + NET_DVR_TIME_EX struStartTime; + NET_DVR_TIME_EX struEndTime; + NET_DVR_AREA_SMARTSEARCH_COND_UNION uSmartSearchCond; //智能查找条件 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区,byISO8601为1时有效 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区,byISO8601为1时有效 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区,byISO8601为1时有效 + BYTE byRes2[251]; +}NET_DVR_SMART_SEARCH_PARAM_V40,*LPNET_DVR_SMART_SEARCH_PARAM_V40; + + + +typedef struct tagNET_DVR_SMART_SEARCH_RET +{ + NET_DVR_TIME struStartTime; //移动侦测报警开始的时间 + NET_DVR_TIME struEndTime; //事件停止的时间 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[59]; +}NET_DVR_SMART_SEARCH_RET, *LPNET_DVR_SMART_SEARCH_RET; + +// IPSAN 文件目录查找 +typedef struct tagNET_DVR_IPSAN_SERACH_PARAM +{ + NET_DVR_IPADDR struIP; // IPSAN IP地址 + WORD wPort; // IPSAN 端口 + BYTE byRes[10]; // 保留字节 +}NET_DVR_IPSAN_SERACH_PARAM, *LPNET_DVR_IPSAN_SERACH_PARAM; + +typedef struct tagNET_DVR_IPSAN_SERACH_RET +{ + BYTE byDirectory[128]; // 返回的文件目录 + BYTE byRes[20]; +}NET_DVR_IPSAN_SERACH_RET, *LPNET_DVR_IPSAN_SERACH_RET; + +//DVR设备参数 +typedef struct +{ + DWORD dwSize; + BYTE sDVRName[NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ...... + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 低8位,高8位见byHighIPChanNum + BYTE byZeroChanNum; //零通道编码个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN搜索 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE byEsataUseage; //Esata的默认用途,0-默认备份,1-默认录像 + BYTE byIPCPlug; //0-关闭即插即用,1-打开即插即用 + BYTE byStorageMode; //0-盘组模式,1-磁盘配额, 2抽帧模式, 3-自动 + BYTE bySupport1; //能力,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + WORD wDevType;//设备型号 + BYTE byDevTypeName[DEV_TYPE_NAME_LEN];//设备型号名称 + BYTE bySupport2; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport2 & 0x1, 表示是否支持扩展的OSD字符叠加(终端和抓拍机扩展区分) + BYTE byAnalogAlarmInPortNum; //模拟报警输入个数 + BYTE byStartAlarmInNo; //模拟报警输入起始号 + BYTE byStartAlarmOutNo; //模拟报警输出起始号 + BYTE byStartIPAlarmInNo; //IP报警输入起始号 + BYTE byStartIPAlarmOutNo; //IP报警输出起始号 + BYTE byHighIPChanNum; //数字通道个数,高8位 + BYTE byEnableRemotePowerOn;//是否启用在设备休眠的状态下远程开机功能,0-不启用,1-启用 + WORD wDevClass; //设备大类备是属于哪个产品线,0 保留,1-50 DVR,51-100 DVS,101-150 NVR,151-200 IPC,65534 其他,具体分类方法见《设备类型对应序列号和类型值.docx》 + BYTE byRes2[6]; //保留 +}NET_DVR_DEVICECFG_V40, *LPNET_DVR_DEVICECFG_V40; + +typedef struct +{ + DWORD dwSize; + BYTE sDVRName[NET_DEV_NAME_LEN]; //DVR名称 + DWORD dwDVRID; //DVR ID,用于遥控器 //V1.4(0-99), V1.5(0-255) + DWORD dwRecycleRecord; //是否循环录像,0:不是; 1:是 + //以下不可更改 + BYTE sSerialNumber[SERIALNO_LEN]; //序列号 + DWORD dwSoftwareVersion; //软件版本号,高16位是主版本,低16位是次版本 + DWORD dwSoftwareBuildDate; //软件生成日期,0xYYYYMMDD + DWORD dwDSPSoftwareVersion; //DSP软件版本,高16位是主版本,低16位是次版本 + DWORD dwDSPSoftwareBuildDate; // DSP软件生成日期,0xYYYYMMDD + DWORD dwPanelVersion; // 前面板版本,高16位是主版本,低16位是次版本 + DWORD dwHardwareVersion; // 硬件版本,高16位是主版本,低16位是次版本 + BYTE byAlarmInPortNum; //DVR报警输入个数 + BYTE byAlarmOutPortNum; //DVR报警输出个数 + BYTE byRS232Num; //DVR 232串口个数 + BYTE byRS485Num; //DVR 485串口个数 -- + BYTE byNetworkPortNum; //网络口个数 + BYTE byDiskCtrlNum; //DVR 硬盘控制器个数 + BYTE byDiskNum; //DVR 硬盘个数 + BYTE byDVRType; //DVR类型, 1:DVR 2:ATM DVR 3:DVS ......-- + BYTE byChanNum; //DVR 通道个数 + BYTE byStartChan; //起始通道号,例如DVS-1,DVR - 1 + BYTE byDecordChans; //DVR 解码路数 + BYTE byVGANum; //VGA口的个数 -- + BYTE byUSBNum; //USB口的个数 + BYTE byAuxoutNum; //辅口的个数 + BYTE byAudioNum; //语音口的个数 + BYTE byIPChanNum; //最大数字通道数 -- + BYTE byZeroChanNum; //零通道编码个数 + BYTE bySupport; //能力,位与结果为0表示不支持,1表示支持, + //bySupport & 0x1, 表示是否支持智能搜索 + //bySupport & 0x2, 表示是否支持备份 + //bySupport & 0x4, 表示是否支持压缩参数能力获取 + //bySupport & 0x8, 表示是否支持多网卡 + //bySupport & 0x10, 表示支持远程SADP + //bySupport & 0x20, 表示支持Raid卡功能 + //bySupport & 0x40, 表示支持IPSAN搜索 + //bySupport & 0x80, 表示支持rtp over rtsp + BYTE byEsataUseage; //Esata的默认用途,0-默认备份,1-默认录像 + BYTE byIPCPlug; //0-关闭即插即用,1-打开即插即用 + BYTE byStorageMode; //0-盘组模式,1-磁盘配额,2抽帧模式 + BYTE bySupport1; //能力,位与结果为0表示不支持,1表示支持 + //bySupport1 & 0x1, 表示是否支持snmp v30 + //bySupport1 & 0x2, 支持区分回放和下载 + //bySupport1 & 0x4, 是否支持布防优先级 + //bySupport1 & 0x8, 智能设备是否支持布防时间段扩展 + //bySupport1 & 0x10, 表示是否支持多磁盘数(超过33个) + //bySupport1 & 0x20, 表示是否支持rtsp over http + WORD wDevType;//设备型号扩展 + BYTE byDevTypeName[NET_DEV_TYPE_NAME_LEN];//设备型号名称 + BYTE bySupport2; //能力集扩展,位与结果为0表示不支持,1表示支持 + //bySupport2 & 0x1, 表示是否支持扩展的OSD字符叠加(终端和抓拍机扩展区分) + BYTE byAnalogAlarmInPortNum; //模拟报警输入数目 + BYTE byStartAlarmInNo; //模拟报警输入起始号 + BYTE byStartAlarmOutNo; //模拟报警输出起始号 + BYTE byStartIPAlarmInNo; //IP报警输入起始号 + BYTE byStartIPAlarmOutNo; //IP报警输出起始号 + BYTE byHighIPChanNum; //数字通道个数,高8位 + BYTE byEnableRemotePowerOn;//是否启用在设备休眠的状态下远程开机功能,0-不启用,1-启用 + BYTE byRes[256]; //保留 +}NET_DVR_DEVICECFG_V50, *LPNET_DVR_DEVICECFG_V50; +#define MAX_ZEROCHAN_NUM 16 +//零通道压缩配置参数 +typedef struct tagNET_DVR_ZEROCHANCFG +{ + DWORD dwSize; //结构长度 + BYTE byEnable; //0-停止零通道编码,1-表示启用零通道编码 + BYTE byRes1[3]; //保留 + DWORD dwVideoBitrate; //视频码率 0-保留 1-16K(保留) 2-32K 3-48k 4-64K 5-80K 6-96K 7-128K 8-160k 9-192K 10-224K 11-256K 12-320K + // 13-384K 14-448K 15-512K 16-640K 17-768K 18-896K 19-1024K 20-1280K 21-1536K 22-1792K 23-2048K + //最高位(31位)置成1表示是自定义码流, 0-30位表示码流值(MIN-32K MAX-8192K)。 + DWORD dwVideoFrameRate; //帧率 0-全部; 1-1/16; 2-1/8; 3-1/4; 4-1/2; 5-1; 6-2; 7-4; 8-6; 9-8; 10-10; 11-12; 12-16; 13-20, //V2.0增加14-15, 15-18, 16-22; + BYTE byRes2[32]; //保留 +}NET_DVR_ZEROCHANCFG, *LPNET_DVR_ZEROCHANCFG; + +//零通道缩放参数 +typedef struct tagNET_DVR_ZERO_ZOOMCFG +{ + DWORD dwSize; //结构长度 + NET_VCA_POINT struPoint; //画面中的坐标点 + BYTE byState; //现在的状态,0-缩小,1-放大 + BYTE byPreviewNumber; //预览数目,0-1画面,1-4画面,2-9画面,3-16画面 该参数只读 + BYTE byPreviewSeq[MAX_WINDOW_V30];//画面通道信息 该参数只读 + BYTE byRes[30]; //保留 +}NET_DVR_ZERO_ZOOMCFG, *LPNET_DVR_ZERO_ZOOMCFG; + +#define DESC_LEN_64 64 +typedef struct tagNET_DVR_SNMPCFG +{ + DWORD dwSize; //结构长度 + BYTE byEnable; //0-禁用SNMP,1-表示启用SNMP + BYTE byRes1[3]; //保留 + WORD wVersion; //snmp 版本 v1 = 1, v2 =2, v3 =3,设备目前不支持 v3 + WORD wServerPort; //snmp消息接收端口,默认 161 + BYTE byReadCommunity[NAME_LEN]; //读共同体,最多31,默认"public" + BYTE byWriteCommunity[NAME_LEN];//写共同体,最多31 字节,默认 "private" + BYTE byTrapHostIP [DESC_LEN_64]; //自陷主机ip地址描述,支持IPV4 IPV6和域名描述 + WORD wTrapHostPort; // trap主机端口 + BYTE byTrapName[NAME_LEN]; + BYTE byRes2[70]; //保留 +}NET_DVR_SNMPCFG, *LPNET_DVR_SNMPCFG; + +typedef struct tagNET_DVR_SNMPv3_USER +{ + BYTE byUserName[NAME_LEN]; // 用户名 + BYTE bySecLevel; // 安全级别 0-保留 1-无校验 2-无授权校验 3-授权校验 + BYTE byAuthtype; // 认证类型 0-MD5认证 1-SHA认证 2: none + BYTE byPrivtype; // 0: DES; 1: AES; 2: none; + BYTE byRes[5]; + BYTE byAuthpass[PASSWD_LEN]; // 认证密码 + BYTE byPrivpass[PASSWD_LEN]; // 加密密码 +}NET_DVR_SNMPv3_USER, *LPNET_DVR_SNMPv3_USER; + +// snmpv30 +typedef struct tagNET_DVR_SNMPCFG_V30 +{ + DWORD dwSize; //结构长度 + BYTE byEnableV1; //0-禁用SNMP V1,1-表示启用SNMP V1 + BYTE byEnableV2; //0-禁用SNMP V2,1-表示启用SNMP V2 + BYTE byEnableV3; //0-禁用SNMP V3,1-表示启用SNMP V3 + BYTE byRes1[3]; + WORD wServerPort; //snmp消息接收端口,默认 161 + BYTE byReadCommunity[NAME_LEN]; //读共同体,最多31,默认"public" + BYTE byWriteCommunity[NAME_LEN]; //写共同体,最多31 字节,默认 "private" + BYTE byTrapHostIP [DESC_LEN_64]; //自陷主机ip地址描述,支持IPV4 IPV6和域名描述 + WORD wTrapHostPort; // trap主机端口 + BYTE byRes2[2]; + NET_DVR_SNMPv3_USER struRWUser; // 读写用户 + NET_DVR_SNMPv3_USER struROUser; // 只读用户 + BYTE byTrapName[NAME_LEN]; +}NET_DVR_SNMPCFG_V30, *LPNET_DVR_SNMPCFG_V30; + +#define PROCESSING 0 //正在处理 +#define PROCESS_SUCCESS 100 //过程完成 +#define PROCESS_EXCEPTION 400 //过程异常 +#define PROCESS_FAILED 500 //过程失败 +#define PROCESS_QUICK_SETUP_PD_COUNT 501 //一键配置至少3块硬盘 + +#define SOFTWARE_VERSION_LEN 48 +#define NET_SDK_DEVICE_MODEL_LEN 24 //设备型号长度 +typedef struct tagNET_DVR_SADPINFO +{ + NET_DVR_IPADDR struIP; // 设备IP地址 + WORD wPort; // 设备端口号 + WORD wFactoryType; // 设备厂家类型 + char chSoftwareVersion[SOFTWARE_VERSION_LEN]; + char chSerialNo[16]; // 序列号 + WORD wEncCnt; // 编码通道个数 + BYTE byMACAddr[MACADDR_LEN]; // MAC 地址 + NET_DVR_IPADDR struSubDVRIPMask; // DVR IP地址掩码 + NET_DVR_IPADDR struGatewayIpAddr; // 网关 + NET_DVR_IPADDR struDnsServer1IpAddr; /* 域名服务器1的IP地址 */ + NET_DVR_IPADDR struDnsServer2IpAddr; /* 域名服务器2的IP地址 */ + BYTE byDns; + BYTE byDhcp; + BYTE szGB28181DevID[DEV_ID_LEN]; //GB28181协议接入时的设备ID,用于IPC以GB28181协议接入 + BYTE byActivated;//0-无效,1-已激活,2-未激活 + BYTE byDeviceModel[NET_SDK_DEVICE_MODEL_LEN/*24*/];//设备型号 + BYTE byRes[101]; // 保留字节 +}NET_DVR_SADPINFO, *LPNET_DVR_SADPINFO; + +#define MAX_SADP_NUM 256 // 搜索到设备最大数目 +typedef struct tagNET_DVR_SADPINFO_LIST +{ + DWORD dwSize; // 结构大小 + WORD wSadpNum; // 搜索到设备数目 + BYTE byRes[6]; // 保留字节 + NET_DVR_SADPINFO struSadpInfo[MAX_SADP_NUM]; // 搜索 +}NET_DVR_SADPINFO_LIST, *LPNET_DVR_SADPINFO_LIST; + +typedef struct tagNET_DVR_SADP_VERIFY +{ + char chPassword[PASSWD_LEN]; + NET_DVR_IPADDR struOldIP; + WORD wOldPort; + BYTE byRes[62]; +}NET_DVR_SADP_VERIFY, *LPNET_DVR_SADP_VERIFY; + +/*******************************备份接口 begin********************************/ +//获取备份设备信息接口定义 +#define DESC_LEN_32 32 //描述字长度 +#define MAX_NODE_NUM 256 //节点个数 + +typedef struct tagNET_DVR_DESC_NODE +{ + int iValue; + BYTE byDescribe[DESC_LEN_32]; //描述字段 + DWORD dwFreeSpace; //获取磁盘列表专用,单位为M + BYTE byRes[12]; //保留 +}NET_DVR_DESC_NODE, *LPNET_DVR_DESC_NODE; + +typedef struct tagNET_DVR_DISKABILITY_LIST +{ + DWORD dwSize; //结构长度 + DWORD dwNodeNum; //能力结点个数 + NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; //描述参数 +}NET_DVR_DISKABILITY_LIST, *LPNET_DVR_DISKABILITY_LIST; + +//备份进度列表 +#define BACKUP_SUCCESS 100 //备份完成 +#define BACKUP_CHANGE_DEVICE 101 //备份设备已满,更换设备继续备份 + +#define BACKUP_SEARCH_DEVICE 300 //正在搜索备份设备 +#define BACKUP_SEARCH_FILE 301 //正在搜索录像文件 +#define BACKUP_SEARCH_LOG_FILE 302 //正在搜索日志文件 +#define BACKUP_CHANGE_DISK 303 //正在更换光盘 + +#define BACKUP_EXCEPTION 400 //备份异常 +#define BACKUP_FAIL 500 //备份失败 + +#define BACKUP_TIME_SEG_NO_FILE 501 //时间段内无录像文件 +#define BACKUP_NO_RESOURCE 502 //申请不到资源 +#define BACKUP_DEVICE_LOW_SPACE 503 //备份设备容量不足 +#define BACKUP_DISK_FINALIZED 504 //刻录光盘封盘 +#define BACKUP_DISK_EXCEPTION 505 //刻录光盘异常 +#define BACKUP_DEVICE_NOT_EXIST 506 //备份设备不存在 +#define BACKUP_OTHER_BACKUP_WORK 507 //有其他备份操作在进行 +#define BACKUP_USER_NO_RIGHT 508 //用户没有操作权限 +#define BACKUP_OPERATE_FAIL 509 //操作失败 +#define BACKUP_NO_LOG_FILE 510 //硬盘中无日志 + +//备份过程接口定义 +typedef struct tagNET_DVR_BACKUP_NAME_PARAM +{ + DWORD dwFileNum; //文件个数 + NET_DVR_FINDDATA_V30 struFileList[MAX_RECORD_FILE_NUM]; //文件列表 + BYTE byDiskDes[DESC_LEN_32]; //备份磁盘描述 + BYTE byWithPlayer; //是否备份播放器 + BYTE byContinue; /*是否继续备份 0不继续 1继续*/ + BYTE byRes[34]; //保留 +}NET_DVR_BACKUP_NAME_PARAM, *LPNET_DVR_BACKUP_NAME_PARAM; + +typedef struct tagNET_DVR_BACKUP_TIME_PARAM +{ + LONG lChannel; //按时间备份的通道 + NET_DVR_TIME struStartTime; //备份的起始时间 + NET_DVR_TIME struStopTime; //备份的终止时间 + BYTE byDiskDes[DESC_LEN_32]; //备份磁盘描述 + BYTE byWithPlayer; //是否备份播放器 + BYTE byContinue; //是否继续备份 0不继续 1继续 + BYTE byDrawFrame; //0 不抽帧 1 抽帧 + BYTE byUseBackCfgParam; //使用备份配置中的参数,0-无效,1-启用(启用后,通道号无效),2-不启用 + DWORD dwStreamType; //备份码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 + BYTE byRes[28]; // 保留字节 +}NET_DVR_BACKUP_TIME_PARAM, *LPNET_DVR_BACKUP_TIME_PARAM; +/********************************* end *******************************************/ + +typedef enum _COMPRESSION_ABILITY_TYPE_ +{ + COMPRESSION_STREAM_ABILITY = 0, //码流压缩类型 + MAIN_RESOLUTION_ABILITY = 1, //主码流压缩分辨率 + SUB_RESOLUTION_ABILITY = 2, //子码流压缩分辨率 + EVENT_RESOLUTION_ABILITY = 3, //事件压缩参数分辨率 + FRAME_ABILITY = 4, //帧率能力 + BITRATE_TYPE_ABILITY = 5, //位率类型能力 + BITRATE_ABILITY = 6, //位率上限 + THIRD_RESOLUTION_ABILITY = 7, //三码流压缩分辨率 + STREAM_TYPE_ABILITY = 8, //码流类型 + PIC_QUALITY_ABILITY = 9, //图像质量 + INTERVAL_BPFRAME_ABILITY = 10, //BP帧间隔 + VIDEO_ENC_ABILITY = 11, //视频编码能力 + AUDIO_ENC_ABILITY = 12, //音频编码能力 + VIDEO_ENC_COMPLEXITY_ABILITY = 13, //视频编码复杂度能力 + FORMAT_ABILITY = 14, //封装格式能力 +}COMPRESSION_ABILITY_TYPE; + +//能力列表 +typedef struct tagNET_DVR_ABILITY_LIST +{ + DWORD dwAbilityType; //能力类型 COMPRESSION_ABILITY_TYPE + BYTE byRes[32]; //保留字节 + DWORD dwNodeNum; //能力结点个数 + NET_DVR_DESC_NODE struDescNode[MAX_NODE_NUM]; //描述参数 +}NET_DVR_ABILITY_LIST, *LPNET_DVR_ABILITY_LIST; + +#define MAX_ABILITYTYPE_NUM 12 //最大能力项 +// 压缩参数能力列表 +typedef struct tagNET_DVR_COMPRESSIONCFG_ABILITY +{ + DWORD dwSize; //结构长度 + DWORD dwAbilityNum; //能力类型个数 + NET_DVR_ABILITY_LIST struAbilityNode[MAX_ABILITYTYPE_NUM]; //描述参数 +}NET_DVR_COMPRESSIONCFG_ABILITY, *LPNET_DVR_COMPRESSIONCFG_ABILITY; +/********************************9000RH begin****************************************/ +#define SUPPORT_PD_NUM 16 +#define SUPPORT_ARRAY_NUM 8 +#define SUPPORT_VD_NUM 128 +#define SUPPORT_PD_NUM_ 16 +#define SUPPORT_PD_NUM_PARTTWO 8 + +typedef enum tagRAID_MODE +{ + RAID0 = 1, + RAID1, + RAID10, + RAID1E, + RAID5, + RAID6, + RAID50, + JBOD, + RAID60 +}RAID_MODE; + +typedef enum tagHD_SUPPORT_TYPE +{ + HD_TYPE_SATA = 0x01, + HD_TYPE_PATA = 0x02, + HD_TYPE_SAS = 0x04, + HD_TYPE_ATAPI = 0x08, + HD_TYPE_TAPE = 0x10, + HD_TYPE_SES = 0x20 +}HD_SUPPORT_TYPE; + +// 按位表示 位为0表示不支持 1表示支持 +typedef enum tagSUPPORT_RAID_TYPE +{ + RAID0_ABILITY = 0x0001, + RAID1_ABILITY = 0x0002, + RAID10_ABILITY = 0x0004, + RAID1E_ABILITY = 0x0008, + RAID5_ABILITY = 0x0010, + RAID6_ABILITY = 0x0020, + RAID50_ABILITY = 0x0040, + JBOD_ABILITY = 0x0080, + RAID60_ABILITY = 0x0100 +}SUPPORT_RAID_TYPE; + +// 物理磁盘 +typedef struct tagNET_DVR_PHY_DISK_INFO +{ + WORD wPhySlot; // 硬盘槽位 + BYTE byType; // 硬盘信息;0 普通,1全局热备,2-阵列热备 3-阵列盘 + BYTE byStatus; // 硬盘状态; 0-正常 1-降级 2-已删除 3-磁盘丢失 4-下线 5-次正常 6-外来 7-异常 8-SMART状态异常 9-休眠 10-有坏块,11-SMR硬盘不支持阵列功能,0xff-不存在 + BYTE byMode[40]; // 硬盘类型 字符串 + DWORD dwHCapacity; // 磁盘总量高32位 单位kb + DWORD dwLCapacity; // 磁盘总量低32位 + BYTE byArrrayName[MAX_NAMELEN]; + WORD wArrayID; // 所属阵列ID + BYTE byArrayInformation; // 是否含有阵列信息:0 否,1是 + BYTE byRes[101]; // 保留字节 +}NET_DVR_PHY_DISK_INFO, *LPNET_DVR_PHY_DISK_INFO; + +typedef struct tagNET_DVR_PHY_DISK_LIST +{ + DWORD dwSize; + DWORD dwCount; + NET_DVR_PHY_DISK_INFO struPhyDiskInfo[SUPPORT_PD_NUM]; +}NET_DVR_PHY_DISK_LIST, *LPNET_DVR_PHY_DISK_LIST; + +typedef enum tagBGA_TYPE +{ + BGA_REBUILD = 0x01, // 重建 + BGA_CONSISTENCY_FIX = 0x02, // 一致性检查并修复 + BGA_CONSISTENCY_CHECK = 0x04, // 一致性检查 + BGA_INIT_QUICK = 0x08, // 初始化(快) + BGA_INIT_BACK = 0x10, // 初始化(完全) + BGA_MIGRATION = 0x20, // 迁移 + BGA_INIT_FORE = 0x40, // 初始化 + BGA_COPYBACK = 0x80 // 回迁 +}BGA_TYPE; + +typedef enum tagBGA_STATE +{ + BGA_STATE_NONE = 0, // 无后台任务 + BGA_STATE_RUNNING, // 后台任务正在运行 + BGA_STATE_ABORTED, // 后台任务取消 + BGA_STATE_PAUSED // 后台任务暂停 +}BGA_STATE; +typedef struct tagNET_DVR_BGA_INFO +{ + BYTE byBga; // 后台任务及类型 + BYTE byBgaState; /*函数返回值--后台任务状态*/ + WORD wBgaPercentage; /*函数返回值--后台任务执行百分比*/ + BYTE byRes[4]; // 保留字节 +}NET_DVR_BGA_INFO, *LPNET_DVR_BGA_INFO; + +// 阵列信息 +typedef struct tagNET_DVR_ARRAY_INFO +{ + WORD wArrayID; // 阵列ID + BYTE byRaidMode; // raid模式 参照RAID_MODE + BYTE byStatus; // 0-在线 1-磁盘丢失 2-下线 3-降级 4-异常 5-次正常 6-外来盘 7-已删除 8-SMART状态异常 0xff-不存在 + DWORD dwHCapacity; // 阵列容量高32位 + DWORD dwLCapacity; // 阵列容量低32位 + DWORD dwHFreeSpace; // 阵列剩余空间高32位 + DWORD dwLFreeSpace; // 阵列剩余空间高32位 + BYTE byArrayName[MAX_NAMELEN]; // 阵列名称 + BYTE byPDCount; // 物理磁盘数目 + BYTE bySpareCount; // 热备数目 + BYTE byRes1[2]; + WORD wPDSlots[SUPPORT_PD_NUM]; // 物理磁盘索引 + WORD wSparePDSlots[SUPPORT_PD_NUM]; // 热备磁盘索引 + NET_DVR_BGA_INFO struBgaInfo; // 后台任务运行状态 + WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //物理磁盘索引扩展,0表示无效 + WORD wSparePDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; // 热备磁盘索引扩展,0表示无效 + BYTE byRes2[48]; // 保留字节 +}NET_DVR_ARRAY_INFO, *LPNET_DVR_ARRAY_INFO; + + +typedef struct tagNET_DVR_ARRAY_LIST +{ + DWORD dwSize; // 结构体大小 + DWORD dwCount; // 阵列个数 + NET_DVR_ARRAY_INFO struArrayInfo[SUPPORT_ARRAY_NUM]; +}NET_DVR_ARRAY_LIST, *LPNET_DVR_ARRAY_LIST; + +//虚拟磁盘信息 +typedef struct tagNET_DVR_VD_INFO +{ + WORD wSlot; //虚拟磁盘槽位 + BYTE byStatus; // 状态0-正常 1-降级 2-已删除 3-磁盘丢失 4-下线 5-次正常 6-外来 7-异常 8-SMART状态异常 0xff-不存在 + BYTE byRaidMode; // Raid 模式 参照 RAID_MODE + WORD wArrayID; // 所属阵列ID + BYTE byRepair; // 是否需要修复 0 不需要 1需要 + BYTE byUsage; //LUN卷的使用方式 0-IPSAN 1-FCSAN 2-DVR网盘 3-NAS 4-录像卷 + BYTE byArrayName[MAX_NAMELEN]; + BYTE byName[MAX_NAMELEN]; // 虚拟磁盘名名称 + DWORD dwHCapacity; // 虚拟磁盘容量高32位 + DWORD dwLCapacity; // 虚拟磁盘容量低32位 + DWORD dwHFreeSpace; // 虚拟磁盘剩余空间高32位 + DWORD dwLFreeSpace; // 虚拟磁盘剩余空间低32位 + NET_DVR_BGA_INFO struBgaInfo; // 后台运行状态 + DWORD dwBlockSize; //最小存储单元块大小 + NET_DVR_IPADDR struWarrantIP; // 授权的DVR网盘IP + char szArrayGroup[NAME_LEN]; //使用的阵列名称组,以逗号隔开,为空则使用默认阵列 + BYTE byRes[20]; +}NET_DVR_VD_INFO, *LPNET_DVR_VD_INFO; + +typedef struct tagNET_DVR_VD_LIST +{ + DWORD dwSize; // 结构体大小 + DWORD dwCount; // 虚拟磁盘个数 + NET_DVR_VD_INFO struVDInfo[SUPPORT_VD_NUM]; //虚拟磁盘数组 +}NET_DVR_VD_LIST, *LPNET_DVR_VD_LIST; + +typedef struct tagNET_DVR_ADAPTER_VERSION +{ + WORD wMajorVersion; + WORD wMinorVersion; + WORD wRevisionNumber; + WORD wBuildNumber; +}NET_DVR_ADAPTER_VERSION, *LPNET_DVR_ADAPTER_VERSION; + +typedef struct tagNET_DVR_VD_SLOT +{ + WORD wVDSlot; + BYTE byAlloc; // 是否已经分配 + BYTE byRes[5]; + DWORD dwHVDSlotSize; // 虚拟磁盘空间大小高32位 + DWORD dwLVDSlotSize; // 虚拟磁盘空间大小低32位 +}NET_DVR_VD_SLOT, *LPNET_DVR_VD_SLOT; + +typedef struct tagNET_DVR_ARRAY_SPACE_ALLOC_INFO +{ + BYTE byVDSlotCount; /*current number of slots in DG*/ + BYTE byRes1[3]; // 保留字节 + NET_DVR_VD_SLOT struVDSlots[SUPPORT_VD_NUM]; +}NET_DVR_ARRAY_SPACE_ALLOC_INFO, *LPNET_DVR_ARRAY_SPACE_ALLOC_INFO; + +typedef struct tagNET_DVR_RAID_ADAPTER_INFO +{ + DWORD dwSize; // 结构体大小 + NET_DVR_ADAPTER_VERSION struVersion; // 适配器版本号 + BYTE bySlotCount; //适配器槽位数 + BYTE bySupportMigrate; // 迁移(1-支持 0-不支持) + BYTE bySupportExpand; // 扩容 (1-支持 0-不支持) + BYTE bySupportRebuild; // 是否支持重建阵列 (1、支持 0-不支持) + WORD wSlotSupportType; // 按位表示 HD_SUPPORT_TYPE + WORD wSupportRaidType; // 支持Raid 类型 按位表示 + BYTE byAutoRebuild; // 0 不自动重建 1自动重建 可设 + BYTE byRes[27]; // 保留字节 +}NET_DVR_RAID_ADAPTER_INFO, *LPNET_DVR_RAID_ADAPTER_INFO; + +typedef struct tagNET_DVR_OPERATE_ARRAY_PARAM +{ + //是否一键创建 如果为一键创建,则创建时时候的之需要array名称,而不需要其他参数 + // 其他参数有设备自行创建 + BYTE byRaidMode; // 创建/迁移时Raid的类型 + BYTE byPDCount; // 物理磁盘数目 + WORD wArrayID; // 迁移或者重建时需要指出阵列ID + WORD wPDSlots[SUPPORT_PD_NUM];// 物理磁盘 + BYTE byName[MAX_NAMELEN]; // array 名称 + BYTE byInitMode; //初始化方式 + BYTE byRes1; + WORD wPDSlotsPartTwo[SUPPORT_PD_NUM_PARTTWO]; //物理磁盘信息 + BYTE byRes2[2]; +}NET_DVR_OPERATE_ARRAY_PARAM, *LPNET_DVR_OPERATE_ARRAY_PARAM; + + +#define INIT_QUICK 0 /*快速初始化*/ +#define INIT_FULLFOREGROUND 1 /*完全初始化(前台)*/ +#define INIT_FULLBACKGROUND 2 /*完全初始化(后台)*/ + +typedef struct tagNET_DVR_OPERATE_VD_PARAM +{ + WORD wArrayID; // 阵列ID + BYTE bySlot; // 创建虚拟磁盘指定槽位 + BYTE byInitType; // 创建虚拟磁盘时初始化类型 0 - 快速初始化 1 - 前台完全初始化 2 - 后台完全初始化 + DWORD dwHCapacity; // 虚拟磁盘大小高32位 + DWORD dwLCapacity; // 虚拟磁盘大小低32位 + BYTE byName[MAX_NAMELEN]; // 虚拟磁盘名称 + BYTE byRes2[16]; // 保留字节 +}NET_DVR_OPERATE_VD_PARAM, *LPNET_DVR_OPERATE_VD_PARAM; + + +typedef struct tagNET_DVR_SPARE_DISK_PARAM +{ + WORD wPDSlot; // 物理磁盘槽位 + WORD wArrayID; // 所属的阵列 + BYTE bySpareType; // 热备类型 1-全局热备 2 指定阵列 当为指定阵列的时候需要指出所属阵列的ID + BYTE byRes[7]; // 保留字节 +}NET_DVR_SPARE_DISK_PARAM, *LPNET_DVR_SPARE_DISK_PARAM; + +/********************************9000RH End****************************************/ + + +#define MATRIX_MAXDECSUBSYSTEMCHAN 4//视频综合平台解码子系统通道号 + +//获取解码子系统关联信息 +typedef struct tagNET_DVR_DECSUBSYSTEMJIONSTATUS +{ + BYTE byJoinStatus;//关联状态,0-没有关联,1-已经关联 + BYTE byJoinSubSystem;//所关联子系统槽位号 + BYTE byJoinDispNum;//所关联显示通道号 + BYTE byJoinSubWindowNum;//所关联子窗口号 + BYTE byRes[4]; +}NET_DVR_DECSUBSYSTEMJIONSTATUS,LPNET_DVR_DECSUBSYSTEMJIONSTATUS; + +typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO +{ + BYTE bySubSystemType;//子系统类型,0-无,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分子系统,6-报警子系统 + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,0~79,子系统类型是3或4时可用 + NET_DVR_DECSUBSYSTEMJIONSTATUS struDecSub [MATRIX_MAXDECSUBSYSTEMCHAN]; + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) + BYTE byRes[7]; +}NET_DVR_SINGLESUBSYSTEMJOININFO,LPNET_DVR_SINGLESUBSYSTEMJOININFO; + +typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO +{ + DWORD dwSize; + NET_DVR_SINGLESUBSYSTEMJOININFO struSingleSubSystemJoinInfo[MAX_SUBSYSTEM_NUM];//80 + BYTE byRes[8]; +}NET_DVR_ALLDECSUBSYSTEMJOININFO, *LPNET_DVR_ALLDECSUBSYSTEMJOININFO; + +//2010-04-13 增加NAT功能相关配置 +typedef struct tagNET_DVR_NATASSOCIATECFG +{ + DWORD dwSize; + NET_DVR_NETCFG_V30 struNatIpAddress[2];//NAT IP地址 + BYTE byNATEnable;//是否启用NAT功能,0-不启用,非0-启用 + BYTE byNATCfgMode; //NAT配置模式,0-手动分配,1-自动分配 + BYTE byRes[62]; +}NET_DVR_NATASSOCIATECFG, *LPNET_DVR_NATASSOCIATECFG; + +//2010-06-01 视频综合平台报警配置 +typedef struct tagNET_DVR_TEMPERATUREALARMCFG +{ + BYTE byEnableTemperatureAlarm;//使能温度超限报警,0-报警,1-不报警 + BYTE byRes1[3]; + int iTemperatureUpLimited; //精确到小数点后两位,如1234表示温度12.34度 + int iTemperatureDownLimited; + NET_DVR_HANDLEEXCEPTION_V30 struTempHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRes2[32]; +}NET_DVR_TEMPERATUREALARMCFG, *LPNET_DVR_TEMPERATUREALARMCFG; + +typedef struct tagNET_DVR_BOARDALARMCFG +{ + BYTE byEnablePullAlarm;//热插拔报警使能,1-报警,0-不报警 + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struBoardHandleType; /* 处理方式 */ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRes2[32]; +}NET_DVR_BOARDALARMCFG, *LPNET_DVR_BOARDALARMCFG; + + +typedef struct tagNET_DVR_VIDEOPLATFORMALARMCFG +{ + DWORD dwSize; + NET_DVR_TEMPERATUREALARMCFG struTempAlarmCfg; + NET_DVR_BOARDALARMCFG struBoardAlarmCfg; + NET_DVR_HANDLEEXCEPTION_V30 struHandleException[MAX_EXCEPTIONNUM];//0-风扇异常,1-子系统异常,2-IP地址冲突,3-网线断,4-非法访问,5-光纤异常,6-前面板异常 + BYTE byRes[32]; +}NET_DVR_VIDEOPLATFORMALARMCFG,*LPNET_DVR_VIDEOPLATFORMALARMCFG; +//2010-05-17 +typedef struct tagNET_DVR_CODESPLITTERASSOCIATE +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; /*编码器IP地址*/ + WORD wPort; //编码器端口号 + BYTE byRes1[6]; + BYTE sUserName[NAME_LEN]; /* 用户名(32) */ + BYTE sPassword[PASSWD_LEN]; /*密码 (16)*/ + BYTE byChan;//编码器通道号 + BYTE byRes2[15]; +} NET_DVR_CODESPLITTERASSOCIATE, *LPNET_DVR_CODESPLITTERASSOCIATE; + +//2010-06-01 视频综合平台报警上传结构 +typedef struct tagNET_DVR_MATRIXSUBSYSTEMINFO +{ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 + BYTE byRes [14]; +} NET_DVR_MATRIXSUBSYSTEMINFO, *LPNET_DVR_MATRIXSUBSYSTEMINFO; + +typedef struct tagNET_DVR_VIDEOPLATFORM_ALRAMINFO +{ + DWORD dwSize; //结构体大小 + BYTE byAlarmType; // 0-拔出子板,1-插入子板,2-温度超上限报警,3-温度超下限报警,4-风扇状态异常,5-子系统异常,6-非法访问,7-光纤异常报警,8-前面板异常报警 + BYTE byBoardNum; //子板号,从1起,B10不支持该字段,无效,置为0xff + BYTE byRes1[2]; + BYTE bySubSystemChan[8]; //子板槽位号,一个子板中有8个子系统,其分别对应的槽位号,子系统异常时,bySubSystemChan[0]表示对应子系统序号 + int iTemperature; //温度超限报警时有用,温度值 + BYTE byMainboardSeq;//温度超限报警时有用,0-非主板,1-主板 + BYTE byRes2[3]; + BYTE byFanSequence[32];//异常风扇,byFanSequence[i] = 1表示风扇i+1异常,byFanSequence[i] = 0表示风扇i+1正常 + NET_DVR_MATRIXSUBSYSTEMINFO struInputNote;// 光纤异常报警时使用,输入结点 + NET_DVR_MATRIXSUBSYSTEMINFO struOutputNote;//光纤异常报警时使用,输出结点 + BYTE byRes3[68]; +}NET_DVR_VIDEOPLATFORM_ALRAMINFO,*LPNET_DVR_VIDEOPLATFORM_ALRAMINFO; + +/***************************审讯DVR begin *****************************/ +#define MAX_INQUEST_PIP_NUM 3 //单通道显示的画中画数目 +#define MAX_INQUEST_CDRW_NUM 4 //最大刻录机数目 +#define MAX_INQUEST_PIP_NUM_EX 16 //审讯机画中画最大个数 + +typedef struct +{ + DWORD dwSize; + DWORD dwNum; //刻录机的数量 + DWORD dwRwSelectPara[MAX_CHANNUM_V30];// 是否选中该光驱 + DWORD dwModeSelect; //0表示循环刻录模式 1表示并行刻录模式(默认模式) + BYTE byRes[24]; //保留 + DWORD dwStartCDRW; //DVR 本地已经开始刻录 + DWORD dwHdExcp; //硬盘有异 常 + DWORD dwInterval; //时间间隔,10分钟(0)、20分钟(1)、30分钟(2) + char sLable[64]; //光盘名称 +}NET_DVR_INQUEST_CDRW_CFG, *LPNET_DVR_INQUEST_CDRW_CFG; + +typedef struct +{ + char sFileName[36]; //文件名 + DWORD dwFileLen; //文件长度 +}NET_DVR_INQUEST_FILEINFO, *LPNET_DVR_INQUEST_FILEINFO; + +typedef struct +{ + DWORD dwFileNum; // 需要刻录或者删除的文件数,最多一次20个 + NET_DVR_INQUEST_FILEINFO struFileInfo[MAX_RECORD_FILE_NUM]; + //下面两个参数在表示刻录的文件时使用 + DWORD dwCDIndex; //刻录机的索引:1:选择1号刻录机;2:选择2号刻录机; 3:3号刻录机,4:4号刻录机,5:所有刻录机 + DWORD bFinalizeDisc; // 0=刻录完之后不封盘;1=刻录完之后封盘 +}NET_DVR_INQUEST_FILES, *LPNET_DVR_INQUEST_FILES; + +typedef struct +{ + DWORD dwEnable; //刻录机状态是否有效,0-无效,1-有效 + DWORD dwStatus; /* 当dwType=0时, + 0-光盘正常,1-无光盘或光盘异常, + 当dwType=1或2时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足, + 4-异常导致审讯终止(81不支持) + 当dwType=3时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足 + 当dwType=4时, + 0-刻录正常,1-无光盘或光盘异常, + 2-光盘已封盘(81不支持),3-光盘空间不足 + 当dwType=5时, + 0-光盘正常, 1-无光盘或光盘异常, + 2-光盘已封盘(81不支持) + 当dwType=6或7时, + 0-刻录正常, 1-无光盘或光盘异常, + 2-光盘已封盘(81不支持), 3-光盘空间不足*/ + DWORD dwVolumn; //光盘容量,单位M + DWORD dwFreeSpace; //光盘剩余容量,单位M + DWORD dwTimeLeft; // 光盘剩余时间,单位秒 + BYTE byCDType; // 光盘类型 + BYTE byRes[3]; //保留字节 +}NET_DVR_INQUEST_CDRW, *LPNET_DVR_INQUEST_CDRW; + +typedef struct +{ +/*运行状态:0-审讯开始, +1-审讯过程中刻录,2-审讯停止, +3-刻录审讯文件, +4-备份(事后备份和本地备份) +5-空闲 +6-初始化硬盘 + 7-恢复审讯*/ + DWORD dwType; + NET_DVR_INQUEST_CDRW strCDRWNum[MAX_INQUEST_CDRW_NUM]; //数组0表示刻录机1 + NET_DVR_TIME_EX struInquestStartTime; //审讯开始的时间点 + BYTE byRes[16]; //保留 +}NET_DVR_INQUEST_CDRW_STATUS, *LPNET_DVR_INQUEST_CDRW_STATUS; + +typedef struct +{ + BYTE byPipChan; //画中画显示的通道 0xFF关闭 + BYTE byRes[3]; //保留字节 + WORD wTopLeftX; //画中画的x坐标 + WORD wTopLeftY; //画中画的Y坐标 +}NET_DVR_INQUEST_PIP_PARAM, *LPNET_DVR_INQUEST_PIP_PARAM; + +typedef struct +{ + BYTE byBaseChan; //显示画中画所在的通道 + BYTE byBackChan; //显示画中画背景通道 + BYTE byPIPMode; /*是否开启, + 0 当前窗口无小画面 + 1 当前窗口有1个小画面 + 2 当前窗口有2个小画面 + 3 当前窗口有3个小画面 + */ + BYTE byRes; //保留字节 + NET_DVR_INQUEST_PIP_PARAM strPipPara[MAX_INQUEST_PIP_NUM]; //画面位置的参数 +}NET_DVR_INQUEST_PIP_STATUS, *LPNET_DVR_INQUEST_PIP_STATUS; + +//V40扩展,将画中画个数扩展为32个 +typedef struct tagNET_DVR_INQUEST_PIP_PARAM_V40 +{ + BYTE byPipChan; /*画中画显示的通道 0xFF关闭*/ + BYTE byRes1[3]; + WORD wTopLeftX; /*画中画的x坐标*/ + WORD wTopLeftY; /*画中画的Y坐标*/ + WORD wHeight; /*画中画的高 */ + WORD wWidth; /*画中画的宽 */ + BYTE byRes2[32]; +}NET_DVR_INQUEST_PIP_PARAM_V40, *LPNET_DVR_INQUEST_PIP_PARAM_V40; + +typedef struct tagNET_DVR_INQUEST_PIP_STATUS_V40 +{ + NET_DVR_STRUCTHEAD struStructHead; + BYTE byBaseChan; /*显示画中画所在的通道*/ + BYTE byBackChan; /*显示画中画背景通道*/ + BYTE byPIPMode; /*是否开启, 0 当前窗口无小画面 + 1 当前窗口有1个小画面 + 2 当前窗口有2个小画面 + 3 当前窗口有3个小画面 + 4 当前窗口有4个小画面 + 5 当前窗口有5个小画面 + 6 当前画面有6个小画面 + 7 当前窗口有7个小画面 + 8 当前窗口有8个小画面 + 9 当前窗口有9个小画面 + 255 当前窗口关闭预览画面*/ + BYTE byPipCount; /*小画面的个数*/ + BYTE byPicShowMode; /*画面显示模式,0-画中画,1-画面均分2-画面拼接*/ + BYTE byRes[31]; /*保留*/ + NET_DVR_INQUEST_PIP_PARAM_V40 strPipPara[MAX_INQUEST_PIP_NUM_EX]; /*画面位置的参数*/ +}NET_DVR_INQUEST_PIP_STATUS_V40, *LPNET_DVR_INQUEST_PIP_STATUS_V40; + +typedef struct +{ + BYTE sSecretKey[16]; /*码流加密密钥*/ + BYTE byRes[64]; /*保留字节*/ +}NET_DVR_INQUEST_SECRET_INFO, *LPNET_DVR_INQUEST_SECRET_INFO; + + +/***************************审讯DVR end *****************************/ + + +/********************************接口参数结构(end)*********************************/ +#define MAX_BIGSCREENNUM 100//最多大屏拼接数 + +typedef struct tagNET_DVR_SINGLESCREENCFG +{ + BYTE byScreenSeq;//屏幕序号,0xff表示不用此屏,64-T解码器第一个表示主屏 + BYTE bySubSystemNum;//解码子系统槽位号,解码器此值没有用 + BYTE byDispNum;//解码子系统上对应显示通道号,64-T解码器中该值表示解码器的显示通道号 + BYTE byRes[9]; +}NET_DVR_SINGLESCREENCFG, *LPNET_DVR_SINGLESCREENCFG; + +typedef struct tagNET_DVR_BIGSCREENCFG +{ + DWORD dwSize; + BYTE byEnable;//大屏拼接使能,0-不使能,1-使能 + BYTE byModeX;/*大屏拼接模式*/ + BYTE byModeY; + BYTE byMainDecodeSystem;//综合平台的解码板中该值表示主屏槽位号,64-T解码器中该值表示解码通道号 + BYTE byMainDecoderDispChan;//主屏所用显示通道号,1.1netra版本新增,netra解码器有两个显示通道,都能够作为主屏。64-T中该值无效 + BYTE byVideoStandard; //大屏每个子屏制式相同 1:NTSC,2:PAL + BYTE byRes1[2]; + DWORD dwResolution; //大屏每个子屏分辨率相同 + //大屏拼接从屏幕信息 + NET_DVR_SINGLESCREENCFG struFollowSingleScreen[MAX_BIGSCREENNUM]; + //起始坐标必须为基准坐标的整数倍 + WORD wBigScreenX; //大屏在电视墙中起始X坐标 + WORD wBigScreenY; //大屏在电视墙中起始Y坐标 + BYTE byRes2[12]; +}NET_DVR_BIGSCREENCFG, *LPNET_DVR_BIGSCREENCFG; + + +#define DECODEPIC_LEFTADJUST 1 /*图像左移*/ +#define DECODEPIC_RIGHTADJUST 2 /*图像右移*/ +#define DECODEPIC_UPADJUST 3 /*图像上移*/ +#define DECODEPIC_DOWNADJUST 4 /*图像下移*/ +#define DECODEPIC_REDUCEADJUST 5 /*图像缩小*/ +#define DECODEPIC_FULL_SCREEN_ADJUST 6 /*图像全屏*/ +#define DECODEPIC_CANCEL_FULL_SCREEN_ADJUST 7 /*图像取消全屏显示*/ +#define DECODEPIC_AUTOADJUST 8 /* 图像自动调整 */ +#define DECODEPIC_HEIGHTADJUST 9 /* 图像高度调整 */ +#define DECODEPIC_WIDTHADJUST 10 /* 图像宽度调整 */ + +#define MAX_UNITEDMATRIX_NUM 8//级联中最多视频综合平台数量 +#define MAX_SUBDOMAIN_NUM 4//级联中最多子域数量 +typedef struct tagNET_DVR_SUBSERVERINFO +{ + BYTE bySequence;//序号,对于子域,是子域号,对于视频综合平台,是平台号,0表示无此平台\子域 + BYTE byBelongSubDomain;//对于平台有效,表示属于哪个子域 + BYTE byRes1[6]; + DWORD dwMaxIpcNums;//连接的最多IPC数量 + NET_DVR_IPADDR struSubMatrixIP; /*IP地址*/ + WORD wSubMatrixPort; /*子系统端口号*/ + BYTE byRes2[6]; +}NET_DVR_SUBSERVERINFO, *LPNET_DVR_SUBSERVERINFO; + +typedef struct tagNET_DVR_UNITEDMATRIXINFO +{ + DWORD dwSize; + NET_DVR_SUBSERVERINFO struDomainInfo; + NET_DVR_SUBSERVERINFO struSubDomainInfo[MAX_SUBDOMAIN_NUM];//子域信息 + NET_DVR_SUBSERVERINFO struMatrixInfo[MAX_UNITEDMATRIX_NUM];//视频综合平台信息 + BYTE byRes[32]; +}NET_DVR_UNITEDMATRIXINFO, *LPNET_DVR_UNITEDMATRIXINFO; + +typedef struct tagNET_DVR_REGCALLBACKPARAM +{ + char sDeviceID[NAME_LEN];//设备ID串 + char sPassword[PASSWD_LEN]; + BYTE sSerialNumber[SERIALNO_LEN]; /* 设备序列号 */ + DWORD dwDeviceType;//设备类型 + BYTE nStatus;// 上下线状态(0下线,1上线) + /* net type, 0: unknow; 1: 2G wireless networks; 2: 3G wireless networks; 3: line networks */ + BYTE byNetType; + BYTE byRes[14]; +}NET_DVR_REGCALLBACKPARAM, *LPNET_DVR_REGCALLBACKPARAM; + +typedef struct tagNET_DVR_LOGONREPONSEPARAM +{ + //心跳时间间隔,单位:秒, 5的倍数,180秒以内。默认是15秒。 + WORD wHeartbeatTime; + BYTE byOvertimes;// 设备心跳超时次数,默认是3次 + BYTE byRes[13]; +}NET_DVR_LOGONREPONSEPARAM, *LPNET_DVR_LOGONREPONSEPARAM; + + +typedef struct tagNET_DVR_PREVIEWPARAM +{ + BYTE byTransProtol; //传输协议,0-TCP, 1-UDP + BYTE byTransMode; ///* 传输码流模式 0-主码流 1-子码流*/ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + WORD wUdpPort; + BYTE bySupportQos;//是否启用QOS,1-启用,0-不启用 + //是否是NAT预览请求,0-否,1-是(只需byTransMode字段) + BYTE byNatRequest; + BYTE byPreviewType;// 0-普通预览 1-延时预览 + BYTE byRes[7]; +}NET_DVR_PREVIEWPARAM, *LPNET_DVR_PREVIEWPARAM; +typedef struct tagNET_DVR_DEVICENATINFO +{ + NET_DVR_IPADDR struPuIp; //PU端外网IP地址 + WORD wOuterPort;/*PU外网端口*/ + WORD wInterPort;//PU发送视频的本地端口 + DWORD nSessionID;//CMS分配的sessionID + BYTE byRes[4]; +}NET_DVR_DEVICENATINFO, *LPNET_DVR_DEVICENATINFO; + + +typedef struct tagNET_DVR_PREVIEWCALLBACKPARAM +{ + LONG lChannel; + BYTE nLinkProtocol; + BYTE nTransMode; + BYTE byPreviewType; //0-普通预览 1-延时预览 + BYTE byRes[5]; + DWORD nSessionID;//CMS分配的sessionID +}NET_DVR_PREVIEWCALLBACKPARAM, *LPNET_DVR_PREVIEWCALLBACKPARAM; + +//回放 +typedef struct tagNET_DVR_PLAYBACKREQUESTPARAM +{ + BYTE byPlayBackMode; /* 回放下载模式 1-按名字 2-按时间 */ + BYTE byRes1[3]; + union + { + char sFileName [100]; /* 回放的文件名 */ + struct + { + LONG lChannel; /*回放的通道号*/ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ + BYTE byRes[48]; + }struPlayBackbyTime; + }playbackmode; + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + BYTE byRes2[2]; + DWORD dwSessionID;//CMS分配的sessionID,输出参数 + BYTE byRes3[16]; +}NET_DVR_PLAYBACKREQUESTPARAM, *LPNET_DVR_PLAYBACKREQUESTPARAM; + +//2010-10-06 +typedef struct tagNET_DVR_PLAYBACKCALLBACKPARAM +{ + BYTE byPlayBackMode; /* 回放下载模式 1-按名字 2-按时间 */ + BYTE byRes1[3]; + union + { + char sFileName [100]; /* 回放的文件名 */ + struct + { + LONG lChannel; /*回放的通道号*/ + NET_DVR_TIME struStartTime; /* 按时间回放的开始时间 */ + NET_DVR_TIME struStopTime; /* 按时间回放的结束时间 */ + BYTE byRes[48]; + }struPlayBackbyTime; + }playbackmode; + DWORD nSessionID;//CMS分配的sessionID + BYTE byRes2[44]; +}NET_DVR_PLAYBACKCALLBACKPARAM, *LPNET_DVR_PLAYBACKCALLBACKPARAM; + +typedef struct tagNET_DVR_VOICEREQUESETPARAM +{ + BYTE nVoiceChannel; //对讲通道号 + BYTE byRes1[3]; + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + BYTE byRes2[10]; +}NET_DVR_VOICEREQUESTPARAM, *LPNET_DVR_VOICEREQUESTPARAM; + +typedef struct tagNET_DVR_ALARMSETUPREQUESETPARAM +{ + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + BYTE byRes[2]; +}NET_DVR_ALARMSETUPREQUESTPARAM, *LPNET_DVR_ALARMSETUPREQUESTPARAM; + +typedef struct tagNET_DVR_GPSALARMINFO +{ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + NET_DVR_TIME_EX struGpsTime; /*GPS上传的时间*/ + DWORD dwLongitude; /* 经度*/ + DWORD dwLatitude; /* 纬度*/ + int iTimeZone; /*时区,用分钟数表示,+60代表东1区,+480代表东8区,-60代表西区,-480代表西8区,该字段和GPSTime构成一个完整的时间描述*/ + DWORD dwDirection; /*车辆方向=实际方向(以度为单位,正北方向为,顺时针方向计算)*100*/ + WORD wSatellites; /*卫星数量*/ + WORD wPrecision; /*精度*/ + DWORD dwHeight; /*高度:厘米,预留*/ + DWORD dwGPSSeq; /*GPS序号,GPS补传时要用到*/ + WORD wSpeed;//速度,单位,km/h + /* direction[0]:'E'or'W'(东经/西经), direction[1]:'N'or'S'(北纬/南纬)*/ + char sDirection[2]; + BYTE byLocateMode;/*定位模式(初值0),1,自主定位,2,差分3,估算,4,数据无效,65,有效定位,78,无效定位*/ + BYTE byRes[3]; +}NET_DVR_GPSALARMINFO, *LPNET_DVR_GPSALARMINFO; + +//图片信息上传 +typedef struct tagNET_DVR_PICINFO +{ + DWORD dwSize; //结构长度 + BYTE byChanIndex; //通道号 + BYTE byRes1[3]; //保留 + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + BYTE byAbsTime[32]; //绝对时间点, yyyymmddhhmmssxxx, + DWORD dwPicLen; //图片长度 + BYTE byRes2[32]; + BYTE *pPicBuffer; +}NET_DVR_PICTUREINFO, *LPNET_DVR_PICTUREINFO; + +//平台参数 +typedef struct tagNET_DVR_CMSPARAM +{ + DWORD dwSize; + NET_DVR_IPADDR struCmsAddr; + WORD wCmsPort; + BYTE byRes1[2]; + BYTE sDeviceID[NAME_LEN]; + BYTE byPassword[PASSWD_LEN]; + NET_DVR_IPADDR struPicServerAddr; + WORD wPicServerPort; + WORD wCmsUdpPort;//CMS用于UDP外网查询的端口 + BYTE byRes2[12]; +}NET_DVR_CMSPARAM, *LPNET_DVR_CMSPARAM; + +///拨号功能 +#define DIALPASSWD_LEN 32 //拨号密码长度 + +typedef struct tagNET_DVR_QOSPARAM +{ + WORD wMaxBitUL; /* the maximum number of kbits/s in up-link traffic */ + WORD wMaxBitDL; /* the maximum number of kbits/s in down-link traffic */ + BYTE byTrafficClass; /* 0: conversationnal; 1: streaming; 2: interactive;3: background; 4: subscribed value(default) */ + BYTE byRes[7]; +}NET_DVR_QOSPARAM, *LPNET_DVR_QOSPARAM; + + +typedef struct tagNET_DVR_PPPDPARAM +{ + BYTE byDialNum[NAME_LEN]; /* dial number, eg. "#777" */ + BYTE byUserName[NAME_LEN]; /* user name, eg. "card" */ + BYTE byPassword[DIALPASSWD_LEN]; /* password, eg. "card" */ + BYTE byApn[NAME_LEN]; /* access point name, eg. "cmnet" */ + NET_DVR_IPADDR struLocalIp;/* local IP address */ + NET_DVR_IPADDR struRemoteIp;/* remote IP address */ + WORD wMtuSize; /* max transfer unit of ppp interface */ + BYTE byVerifyProtocal; /* IPCP verify protocal: 0: auto; 1: CHAP; 2: PAP */ + BYTE byRes[25]; +}NET_DVR_PPPDPARAM, *LPNET_DVR_PPPDPARAM; + +#define MAX_PHONE_NUM 32//最长号码长度 + +typedef struct tagNET_DVR_DIALPARAM +{ + DWORD dwSize; + BYTE bEnable3G; /* 0: disable; 1: enable 3g */ + BYTE byDialMethod; /* dial methold: 0: auto dial; 1: manual dial; */ + BYTE bySwitchMethod; /* switch methold: 0: auto switch;1:3G优先,2: manual switch to 2G; 3: manual switch to 3G; */ + BYTE byEnaAlarmInDial; /* 使能报警输入触发拨号; 0: disable; 1: enable */ + BYTE byRes1[10]; + WORD wOffLineTime; /* auto off line when no connection exist,单位:分钟,范围:5~65535分钟 */ + NET_DVR_PPPDPARAM struPppdParam; + NET_DVR_QOSPARAM struQosParam; + BYTE byUimNumber[MAX_PHONE_NUM]; + BYTE byRes2[24]; +}NET_DVR_DIALPARAM, *LPNET_DVR_DIALPARAM; + +typedef struct tagNET_DVR_DIALREQUEST +{ + BYTE byConnNum; /*网卡序号*/ + BYTE byNetType; /* 指定获得某个网络的默认拨号参数,设置时此参数没用。0:自动;1:CDMA;2:EVDO;3:WCDMA;4:TD-SCDMA */ + BYTE byRes[6]; +} NET_DVR_DIALREQUEST, *LPNET_DVR_DIALREQUEST; + + +/* UIM card information */ +typedef enum +{ + UIM_UNKNOWN = 0, + UIM_VALID = 1, + UIM_NOVALID = 4, + UIM_ROAM = 11, + UIM_NOEXIST = 255 +}UIM_INFO; + +/* real 3g mode */ +typedef enum +{ + /* evdo */ + RMODE_CDMA1X = 12, + RMODE_EVDO = 14, + RMODE_CDMAHYBRID = 18, + /* wcdma */ + RMODE_GSM = 21, + RMODE_GPRS = 22, + RMODE_EDGE = 23, + RMODE_WCDMA = 24, + RMODE_HSDPA = 25, + RMODE_HSUPA = 26, + RMODE_HSPA = 27, + /* tdscdma */ + RMODE_TGSM = 31, + RMODE_TGPRS = 32, + RMODE_TEDGE = 33, + RMODE_TDSCDMA = 34, + RMODE_TDHSDPA = 35, + RMODE_TDHSUPA = 36, + RMODE_TDHSPA = 37 +}REAL_MODE; + +typedef struct tagNET_DVR_DIALSTATUS +{ + BYTE byRealMode; /* REAL_MODE ,real 3g mode networks */ + BYTE byUimCard; /* UIM_INFO ,UIM card information */ + BYTE byRes1[6]; + DWORD dwSignal; /* signal RSSI */ + DWORD dwDialStatus; /* dial status */ + NET_DVR_IPADDR struLocalIp; /* wireless networks IP address */ + NET_DVR_IPADDR struRemoteIp; /* wireless networks gateway */ + NET_DVR_IPADDR struNetMask; /* wireless networks netmask */ + NET_DVR_IPADDR struDns; /* wireless networks DNS */ + BYTE byRes2[16]; +}NET_DVR_DIALSTATUS, *LPNET_DVR_DIALSTATUS; + +//短信功能 +#define MAX_ALLOWLIST_NUM 8 //最大允许名单数 +#define NET_SDK_MAX_ALLOWLIST_NUM_32 32 //最大允许名单数 + +#define HARDDISKFULL_EXCEPTION 0x0 /*硬盘满*/ +#define HARDDISKERROR_EXCEPTION 0x1 /*硬盘错*/ +#define ETHERNETBROKEN_EXCEPTION 0x2 /*网线断*/ +#define IPADDRCONFLICT_EXCEPTION 0x3 /*IP地址冲突*/ +#define ILLEGALACCESS_EXCEPTION 0x4 /*非法访问*/ +#define VI_EXCEPTION 0x5 /*视频信号异常*/ +#define VS_MISMATCH_EXCEPTION 0x6 /*输入/输出视频制式不匹配 */ +#define VIDEOCABLELOSE_EXCEPTION 0x7 /*视频无信号*/ +#define AUDIOCABLELOSE_EXCEPTION 0x8 /*音频无信号*/ +#define ALARMIN_EXCEPTION 0x9 /*报警输入*/ +#define MASKALARM_EXCEPTION 0xa /*遮挡报警*/ +#define MOTDET_EXCEPTION 0xb /*移动侦测*/ +#define RECORDING_EXCEPTION 0xc /*录像异常*/ +#define WIRELESS_EXCEPTION 0xd /*PIR报警*/ +#define PIR_EXCEPTION 0xe /*无线报警*/ +#define CALLHELP_EXCEPTION 0xf /*呼救报警*/ + +#define AUDIO_DETECTION_EXCEPTION 0x10 /*音频异常侦测报警*/ +#define SCENECHANGE_DETECTION_EXCEPTION 0x11 /*场景侦测报警*/ +#define DEFOCUS_DETECTION_EXCEPTION 0x12 /*虚焦侦测报警*/ +#define FACE_DETECTION_ENTRANCE_EXCEPTION 0x13 /*人脸侦测报警*/ +#define LINE_DETECTION_ENTRANCE_EXCEPTION 0x14 /*越界侦测报警*/ +#define FIELD_DETECTION_ENTRANCE_EXCEPTION 0x15 /*区域入侵侦测报警*/ +#define REGION_EXITING_EXCEPTION 0x16 /*离开区域侦测报警*/ +#define REGION_ENTRANCE_EXCEPTION 0x17 /*进入区域报警*/ +#define LOITERING_EXCEPTION 0x18 /*人员徘徊侦测报警*/ +#define GROUP_EXCEPTION 0x19 /*人员聚集侦测报警*/ +#define RAPIDMOVE_EXCEPTION 0x1a /*快速移动侦测报警*/ +#define PARKING_EXCEPTION 0x1b /*停车侦测报警*/ +#define UNATTENDEDBAGGAGE_EXCEPTION 0x1c /*物品遗留侦测报警*/ +#define ATTENDEDBAGGAGE_EXCEPTION 0x1d /*物品拿取侦测报警*/ +#define DATATRAFFIC_EXCESS 0x1e /*流量超额*/ +#define VOLTAGEINSTABLE_EXCEPTION 0x1f /*电源电压异常报警*/ +#define ALL_EXCEPTION 0xff /*所有事件,根据事件联动方式判断是否开启短信联动*/ + + +#define PHONECFG_RECEIVE_SMS 0x0 /* 支持接收报警短信 */ +#define PHONECFG_SMS_CONTROL 0x1 /* 支持短信控制上下线 */ +#define PHONECFG_CALL_CONTROL 0x2 /* 支持呼叫控制上线 */ +#define PHONECFG_SMS_REBOOT 0x3 /*支持短信重启*/ +#define PHONECFG_DOOR_CONTROL 0x4 /* 支持门操作控制*/ +#define PHONECFG_SMS_GET_DAIL_STATUS 0x5 /* 支持短信获取拨号状态*/ + + +typedef struct tagNET_DVR_PHONECFG +{ + BYTE byAllowList[MAX_PHONE_NUM]; + BYTE byPhonePerssion[32]; /*按字节表示是否使能该号码的某功能,具体位代表的含义 + 见PHONECFG_RECEIVE_SMS等定义 */ + BYTE byAlarmHandler[32]; /*按字节表示是否使能对某个报警类型的短信发送*/ + BYTE byRes[128]; +} NET_DVR_PHONECFG, *LPNET_DVR_PHONECFG; + +typedef struct tagNET_DVR_SMSRELATIVEPARAM +{ + DWORD dwSize; + BYTE bEnableSmsAlarm; /* 0: disable; 1: enable 3g */ + BYTE byRes1[7]; + NET_DVR_PHONECFG struAllowList[MAX_ALLOWLIST_NUM]; + BYTE byRes2[32]; +}NET_DVR_SMSRELATIVEPARAM, *LPNET_DVR_SMSRELATIVEPARAM; + +typedef struct tagNET_DVR_PHONECFG_V50 +{ + BYTE byAllowList[MAX_PHONE_NUM]; + BYTE byPhonePerssion[32]; /*按字节表示是否使能该号码的某功能,具体位代表的含义 + 见PHONECFG_RECEIVE_SMS等定义 */ + BYTE byAlarmHandler[32]; /*按字节表示是否使能对某个报警类型的短信发送(门禁主机暂时用不到)*/ + BYTE byAcsPassword[16]; /*开门命令*/ + BYTE byName[NAME_LEN/*32*/]; /*姓名*/ + BYTE byRes[80]; +} NET_DVR_PHONECFG_V50, *LPNET_DVR_PHONECFG_V50; + +typedef struct tagNET_DVR_SMSRELATIVEPARAM_V50 +{ + DWORD dwSize; + BYTE bEnableSmsAlarm; /* 0: disable; 1: enable 3g */ + BYTE byRes1[7]; + NET_DVR_PHONECFG_V50 struAllowList[NET_SDK_MAX_ALLOWLIST_NUM_32]; + BYTE byRes2[32]; +}NET_DVR_SMSRELATIVEPARAM_V50, *LPNET_DVR_SMSRELATIVEPARAM_V50; + +#define NET_SDK_MONITOR_ID_LEN 64 //布防点ID长度 + +typedef struct tagNET_DVR_ACS_EVENT_COND +{ + DWORD dwSize; + DWORD dwMajor; //报警主类型,参考事件上传宏定义,0-全部 + DWORD dwMinor; //报警次类型,参考事件上传宏定义,0-全部 + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struEndTime; //结束时间 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byName[NAME_LEN]; //持卡人姓名 + BYTE byPicEnable; //是否带图片,0-不带图片,1-带图片 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(struStartTime和struEndTime的时间) + BYTE byRes2[2]; //保留 + DWORD dwBeginSerialNo; //起始流水号(为0时默认全部) + DWORD dwEndSerialNo; //结束流水号(为0时默认全部) + DWORD dwIOTChannelNo; //IOT通道号,0-无效 + WORD wInductiveEventType; //归纳事件类型,0-无效,其他值参见2.2章节,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE bySearchType; //搜索方式:0-保留,1-按事件源搜索(此时通道号为非视频通道号),2-按布防点ID搜索 + BYTE byEventAttribute; //事件属性:0-未定义,1-合法事件,2-其它 + char szMonitorID[NET_SDK_MONITOR_ID_LEN/*64*/]; //布防点ID(由设备序列号、通道类型、编号组成,例如门禁点:设备序列号+“DOOR”+门编号) + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes[140]; //保留 +}NET_DVR_ACS_EVENT_COND, *LPNET_DVR_ACS_EVENT_COND; + +typedef struct tagNET_DVR_ACS_EVENT_DETAIL +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号(mac地址),为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byAllowListNo; //允许名单单号,1-8,为0无效 + BYTE byReportChannel; //报告上传通道,1-布防上传,2-中心组1上传,3-中心组2上传,为0无效 + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号(楼层编号),为0无效 + DWORD dwVerifyNo; //多重卡认证序号,为0无效 + DWORD dwAlarmInNo; //报警输入号,为0无效 + DWORD dwAlarmOutNo; //报警输出号,为0无效 + DWORD dwCaseSensorNo; //事件触发器编号 + DWORD dwRs485No; //RS485通道号,为0无效 + DWORD dwMultiCardGroupNo; //群组编号 + WORD wAccessChannel; //人员通道号 + BYTE byDeviceNo; //设备编号,为0无效(有效范围1-255) + BYTE byDistractControlNo;//分控器编号,为0无效 + DWORD dwEmployeeNo; //工号,为0无效 + WORD wLocalControllerID; //就地控制器编号,0-门禁主机,1-64代表就地控制器 + BYTE byInternetAccess; //网口ID:(1-上行网口1,2-上行网口2,3-下行网口1) + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 0xff-无 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,为0无效 + BYTE bySwipeCardType;//刷卡类型,0-无效,1-二维码 + BYTE byEventAttribute; //事件属性:0-未定义,1-合法认证,2-其它 + DWORD dwSerialNo; //事件流水号,为0无效 + BYTE byChannelControllerID; //通道控制器ID,为0无效,1-主通道控制器,2-从通道控制器 + BYTE byChannelControllerLampID; //通道控制器灯板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIRAdaptorID; //通道控制器红外转接板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIREmitterID; //通道控制器红外对射ID,为0无效(有效范围1-255) + DWORD dwRecordChannelNum; //录像通道数目 + char *pRecordChannelData;//录像通道,大小为sizeof(DWORD)* dwRecordChannelNum + BYTE byUserType; //人员类型:0-无效,1-普通人(主人),2-来宾(访客),3-禁止名单人,4-管理员 + BYTE byCurrentVerifyMode; //读卡器当前验证方式:0-无效,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码, + //13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码,30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜,34-人脸或刷卡或密码或虹膜 + BYTE byAttendanceStatus; //考勤状态:0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班 + BYTE byStatusValue; //考勤状态值 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID)(对于设备来说,如果使用了工号(人员ID)字段,byEmployeeNo一定要传递,如果byEmployeeNo可转换为dwEmployeeNo,那么该字段也要传递;对于上层平台或客户端来说,优先解析byEmployeeNo字段,如该字段为空,再考虑解析dwEmployeeNo字段) + BYTE byRes1; //保留 + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //人脸抓拍测温是否温度异常:1-是,0-否 + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 + BYTE byRes[36]; +}NET_DVR_ACS_EVENT_DETAIL, *LPNET_DVR_ACS_EVENT_DETAIL; + +typedef struct tagNET_DVR_ACS_EVENT_CFG +{ + DWORD dwSize; + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME struTime; //时间 + BYTE sNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + NET_DVR_ACS_EVENT_DETAIL struAcsEventInfo; //详细参数 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 + char *pPicData; + WORD wInductiveEventType; //归纳事件类型,0-无效,其他值参见2.2章节,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(struTime的时间) + BYTE byRes1; + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 + BYTE byRes[36]; +}NET_DVR_ACS_EVENT_CFG, *LPNET_DVR_ACS_EVENT_CFG; + +typedef struct tagNET_DVR_SMSLISTINFO +{ + DWORD dwSize; + DWORD dwTotalSmsNum;//短信条数 + BYTE byRes[8]; + BYTE *pSmsParam; + DWORD dwBufLen;//所分配指针长度,输入参数 +}NET_DVR_SMSLISTINFO, *LPNET_DVR_SMSLISTINFO; + +typedef struct tagNET_DVR_SMSPARAM +{ + DWORD dwIndex; /* the index of sms */ + BYTE byStatus; /* read yet or not */ + BYTE byRes[7]; + NET_DVR_TIME_EX struRecvTime; /* sms receive time */ +}NET_DVR_SMSPARAM, *LPNET_DVR_SMSPARAM; + +#define MAX_SMSCONTENT_LEN 140//短信内容长度 +typedef struct tagNET_DVR_SMSCONTENT +{ + BYTE byPhoneNum[MAX_PHONE_NUM]; + BYTE byMsg[MAX_SMSCONTENT_LEN]; +}NET_DVR_SMSCONTENT, *LPNET_DVR_SMSCONTENT; + +//pin码配置 +typedef enum +{ + CPIN_READY = 1, + CPIN_PIN = 2, + CPIN_PUK = 3, + CPIN_PIN2 = 4, + CPIN_PUK2 = 5 +}PIN_READY; + +typedef struct tagNET_DVR_PINSTATUS +{ + DWORD dwSize; + BYTE byStatus; /* PIN status, defination see enum: PIN_READY */ + BYTE byPinTimes; /* remain input PIN times */ + BYTE byPukTimes; /* remain input PUK times */ + BYTE bEnableLock; /* now the PIN locking function is enabled or not: 0, not enabled lock; 1, lock enabled */ + BYTE byRes[4]; +}NET_DVR_PINSTATUS, *LPNET_DVR_PINSTATUS; + +typedef enum +{ + PIN_ENABLE = 1, + PIN_DISABLE = 2, + PIN_VERIFY = 3, + PUK_VERIFY = 4, + PIN_CHANGE = 5 +}PIN_CMD; +#define MAX_PIN_LEN 12 //PIN码最大长度 +typedef struct tagNET_DVR_PINCODEPARAM +{ + DWORD dwSize; + BYTE byPinCmd; /* PIN command, defination see enum: PIN_CMD */ + BYTE byRes1[3]; + BYTE byPinCode[MAX_PIN_LEN]; /* pin/puk code */ + BYTE byNewPinCode[MAX_PIN_LEN]; /* new pin code */ + BYTE byRes2[16]; +}NET_DVR_PINCODEPARAM, *LPNET_DVR_PINCODEPARAM; + + +//图片质量 +typedef struct +{ + /* 0=CIF, 1=QCIF, 2=D1 3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6=VGA*/ + WORD wPicSize; + WORD wPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ + //抓图图片处理方式,1-上传中心,2-设备本地保存,3-上传中心同时设备本地保存 + BYTE byPicTackleMode; + BYTE byRes[11]; +}NET_DVR_PUSHJPEGPARA, *LPNET_DVR_PUSHJPEGPARA; + + +#define COM_PUSHALARM 0x1200 //设备基本报警信息上传,推模式设备使用 +#define COM_PUSHALARM_V30 0x1201 //设备基本报警信息上传v30,推模式设备使用 +typedef struct tagNET_DVR_PUSHALARMINFO +{ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问*/ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + DWORD dwAlarmOutputNumber[MAX_ALARMOUT];/*触发的输出端口,哪一位为1表示对应哪一个输出*/ + DWORD dwAlarmRelateChannel[MAX_CHANNUM];/*触发的录像通道,哪一位为1表示对应哪一路录像, dwAlarmRelateChannel[0]对应第1个通道*/ + DWORD dwChannel[MAX_CHANNUM];/*dwAlarmType为2或3,6时,表示哪个通道,dwChannel[0]对应第1个通道*/ + DWORD dwDiskNumber[MAX_DISKNUM];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]位对应第1个硬盘*/ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + BYTE byRes[4]; +}NET_DVR_PUSHALARMINFO, *LPNET_DVR_PUSHALARMINFO; + +typedef struct +{ + DWORD dwAlarmType;/*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化 12-阵列异常 */ + DWORD dwAlarmInputNumber;/*报警输入端口*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30];/*触发的输出端口,为1表示对应输出*/ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30];/*触发的录像通道,为1表示对应录像, dwAlarmRelateChannel[0]对应第1个通道*/ + BYTE byChannel[MAX_CHANNUM_V30];/*dwAlarmType为2或3,6,9,10时,表示哪个通道,dwChannel[0]对应第1个通道*/ + BYTE byDiskNumber[MAX_DISKNUM_V30];/*dwAlarmType为1,4,5时,表示哪个硬盘, dwDiskNumber[0]对应第1个硬盘*/ + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + BYTE byRes[7]; +}NET_DVR_PUSHALARMINFO_V30, *LPNET_DVR_PUSHALARMINFO_V30; + +//2011-04-20 +//启动控制 +typedef struct tagNET_DVR_MB_AUTOWORKPARA +{ + /*当前启动控制方式 0: 预留, 1: 延时关机, 2: 自动开关机*/ + BYTE byCurPowerCtrlType; + BYTE byRes[3]; + NET_DVR_SCHEDTIME struWorkTime[MAX_DAYS][2]; +}NET_DVR_MB_AUTOWORKPARA, *LPNET_DVR_MB_AUTOWORKPARA; + +typedef struct tagNET_DVR_MB_POWERCTRLPARA +{ + DWORD dwSize; + DWORD dwHaltDelay; /* 关机延迟时间,单位min */ + NET_DVR_MB_AUTOWORKPARA struAutoWorkPara;/*启动控制相关参数设置*/ + BYTE byEnableUnderVoltProtect; /*是否开启欠压保护*/ + BYTE byUnderVoltPercent; /*欠压保护百分比,有85、90、95三个有效值*/ + BYTE byRes[34]; +}NET_DVR_MB_POWERCTRLPARA, *LPNET_DVR_MB_POWERCTRLPARA; +/*注:1)、关机延迟时间, 可选时间为 0,5分钟,10分钟 ,20分钟 25分钟 30分钟 35分钟 40分钟 ,45 分钟 50分钟 ,60分钟 ,60*2分钟 ,60*3 60 *4 60*5 60*6 */ + +//自动备份 +typedef struct tagNET_DVR_MB_AUTOBACKUPPARA +{ + DWORD dwSize; + BYTE byEnableAutoBackup; /* 是否开启自动备份 0 关闭 ,1 开启 */ + BYTE byRes1[3]; + BYTE byBackupChannel[MAX_CHANNUM_V30]; /*需要备份的通道*/ + BYTE byBackupDays[MAX_CHANNUM_V30];/*备份天数*/ + /* 备份文件类型 + {0,ALL_RECORD_TYPE,全部}, + {1,TIMING_REC,定时}, + {2,MOTION_DETECT_REC,移动侦测 }, + {3,ALARM_REC,报警 }, + {4,MANUAL_REC,手动录像}*/ + BYTE byBackupFileType[MAX_CHANNUM_V30]; + NET_DVR_SCHEDTIME struBackupTime[MAX_CHANNUM_V30][2]; /* 自动备份时间段*/ + BYTE byRes2[36]; /* 保留字节*/ +}NET_DVR_MB_AUTOBACKUPPARA, *LPNET_DVR_MB_AUTOBACKUPPARA; + + +typedef struct tagNET_DVR_MB_GPSPARA +{ + DWORD dwSize; + BYTE byEnableGPS; /*是否启用GPS */ + BYTE byGpsInterface;/*gps接收接口0-rs232, 1-rs485, 2-frontpanel, 3-lcd */ + BYTE bySpeedUnit; /*速度单位,0:公里/小时,1 :英里/小时*/ + BYTE byEnableRetrieve; /* 盲区补发(1启用,0不启用) */ + int iAdjustTime;/*时区*/ + BYTE byEnableAdjustTime;/*是否启用GPS校时, 1-启用, 0-不启动*/ + BYTE byRes1[5]; + WORD wGpsUploadInterval; /* GPS上传间隔, 秒*/ + BYTE byGpsOsdChannel[MAX_CHANNUM_V30];/*OSD 显示,每字节代表一路 */ + DWORD dwSpeedLimit; /* 限速报警*/ + NET_DVR_HANDLEEXCEPTION_V30 struGpsAlarm; + BYTE byRes2[36]; +}NET_DVR_MB_GPSPARA, *LPNET_DVR_MB_GPSPARA; +/*注:1)、当单位为公里/小时 时范围为(0 ,965);当采用英里/小时做单位的时候 ,最大速度范围为:0-600*/ + +#define SENSOR_IN_NUMBER 8 +typedef struct tagNET_DVR_MB_SENSORINPARA +{ + DWORD dwSize; + BYTE byTriggerType[SENSOR_IN_NUMBER];/*行车状态相关触发的联动,只用后4个,分别代表刹车、左转、右转、倒车,0-高电平,1-低电平*/ + BYTE byTriggerChannel [SENSOR_IN_NUMBER]; + BYTE byOsdDisplay [MAX_CHANNUM_V30];/*OSD显示,每位代表一路*/ + BYTE byRes[32]; +}NET_DVR_MB_SENSORINPARA, *LPNET_DVR_MB_SENSORINPARA; + + +typedef struct tagNET_DVR_ACCELERATIONCFG +{ + DWORD dwMaxXAcc; /* X轴加速度报警值 ,该取值为实际数值乘以10,最小为0*/ + DWORD dwMaxYAcc; /* Y轴加速度报警值 ,该取值为实际数值乘以10.最小为0*/ + DWORD dwMaxZAcc; /* Z轴加速度报警值, 该取值为实际数值乘以10,最小为0*/ + BYTE byRes[4]; +}NET_DVR_ACCELERATIONCFG,*LPNET_DVR_ACCERATIONCFG; + +typedef struct tagNET_DVR_GSENSORPARA +{ + DWORD dwSize; + NET_DVR_ACCELERATIONCFG struAccelerationCfg; + BYTE byModuleSelect;/*模块选择:0内置/1外置*/ + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struHandleException; + BYTE byRes2[24]; /*保留扩展字节*/ +}NET_DVR_GSENSORPARA, *LPNET_DVR_GSENSORPARA; + +typedef struct tagNET_DVR_MB_DOWNLOADSVRPARA +{ + DWORD dwSize; + NET_DVR_IPADDR struDownloadSvrIp; /* 自动下载服务器地址 */ + BYTE byRes[64]; +}NET_DVR_MB_DOWNLOADSVRPARA,*LPNET_DVR_MB_DOWNLOADSVRPARA; + +/* 车牌识别的相关参数*/ +typedef struct tagNET_DVR_PLATERECOG_PARA +{ + DWORD dwSize; + BYTE byPrMode; /* 车牌识别的模式, 静态图像0/动态视频1 */ + BYTE byPrScene; /* 车牌识别的场景, 低速场景0/高速场景1 */ + BYTE byPrDetRect; /* 0:全屏幕;1:中心区域 */ + BYTE byPrPicQuality; /* 车牌识别返回的图片质量, 0:最低/3:最高 */ + BYTE byPrPicMode;/*车牌识别返回的图片分辨率: JPEG_MODE_D1, JPEG_MODE_CIF, JPEG_MODE_QCIF */ + BYTE byPlateOsdDisplay; /* 车牌OSD是否显示 0:不显示/1:显示 */ + BYTE byPrProvCharIndex; /* 车牌识别省份首汉字对应的索引 */ + BYTE byPrProvCharIndex1; /* 车牌识别常见首汉字1对应的索引 */ + BYTE byPrProvCharIndex2; /* 车牌识别常见首汉字2对应的索引 */ + BYTE byRes[7]; +}NET_DVR_PLATERECOG_PARA, *LPNET_DVR_PLATERECOG_PARA; + + +/* 动态取证系统,限速设置参数的结构*/ +typedef struct tagNET_DVR_SPEEDLMT_PARA +{ + BYTE bStartMaxSpeedLimit; /* 开启高速限制 */ + BYTE bStartMinSpeedLimit; /* 开启低速限制 */ + BYTE byRes[6]; + DWORD dwMaxSpeedLimit; /* 最高限速 */ + DWORD dwMinSpeedLimit; /* 最低限速 */ +}NET_DVR_SPEEDLMT_PARA, *LPNET_DVR_SPEEDLMT_PARA; + +/* 动态取证系统,车牌比对参数的结构*/ +typedef struct tagNET_DVR_PLATECHECK_PARA +{ + BYTE bAlarmWhenChecked; /* 稽查成功是否报警 */ + BYTE bInformWhenChecked; /* 稽查成功是否对话框提示 */ + BYTE byRes[6]; + NET_DVR_IPADDR struBlockFtpServer; /* 禁止名单FTP服务器地址 */ +}NET_DVR_PLATECHECK_PARA, *LPNET_DVR_PLATECHECK_PARA; + +typedef struct tagNET_DVR_ENFORCESYS_PARA +{ + DWORD dwSize; + NET_DVR_SPEEDLMT_PARA struSpeedLmtPara; /*限速设置*/ + NET_DVR_PLATECHECK_PARA struPlateCheckPara; /*车牌比对*/ + BYTE bySelPeccType; /*是否选择违章类型*/ + BYTE byEnfOptHabit; /*取证操作习惯, 0:长按取证;1:短按两次取证*/ + /*预览帧率调节模式分三种: + A 关闭 adjPrevFpsMode=0 + 以固定高帧率(25FPS)预览 + B 标准 adjPrevFpsMode=1 + 以固定低帧率(6FPS)预览 + C 自适应 adjPrevFpsMode=2 + 根据GPS速度信息动态调整预览帧率, + 3秒无有效GPS的情况下,以固定高帧率预览*/ + BYTE byAdjPrevFpsMode; + BYTE byRes1; + NET_DVR_IPADDR struUploadServerIp; //上传服务器地址 + WORD wUploadServerPort; + BYTE byRes2[18]; +}NET_DVR_ENFORCESYS_PARA, *LPNET_DVR_ENFORCESYS_PARA; + +typedef struct tagNET_DVR_PUSHMODEPARAM +{ + //直连模式下UDP预览模式,1-同端口多路流,2-一端口一路流 + BYTE byUdpPreviewMode; + //语音对讲工作模式,0-语音对讲,1-语音转发(SDK不进行语音的采集和播放) + BYTE byVoiceWorkMode; + BYTE byRes[18]; +}NET_DVR_PUSHMODEPARAM, *LPNET_DVR_PUSHMODEPARAM; + +#define MAX_ALARMHOST_ALARMIN_NUM 512//网络报警主机最大报警输入口数 +#define MAX_ALARMHOST_ALARMOUT_NUM 512//网络报警主机最大报警输出口数 + +#define ALARMHOST_MAX_AUDIOOUT_NUM 32//网络报警主机最大语音输出数 +#define ALARMHOST_MAX_ELECTROLOCK_NUM 32//网络报警主机最大电锁数 +#define ALARMHOST_MAX_MOBILEGATE_NUM 32//网络报警主机最大移动门数 +#define ALARMHOST_MAX_SIREN_NUM 8 // 最大警号数目 +#define MAX_ALARMHOST_SUBSYSTEM 32//报警主机最大子系统数 +#define ALARMHOST_DETECTOR_SERIAL_LEN 9//报警主机关联探测器序列号长度 +#define ALARMHOST_DETECTOR_SERIAL_LEN_V50 16 //报警主机关联探测器序列号V50长度 +#define MAX_DETECTOR_NUM 128//最大关联探测器数 +#define MAX_DETECTOR_NUM_V51 256 //最大关联探测器数 +#define MAX_REPEATER_NUM 16 //最大中继器数 +#define MAX_OUTPUT_MODULE_NUM 64 //最大输出模块数 +#define MAX_ELECTRIC_LOCK_NUM 64 //最大电锁数量 + +//传感器类型 +typedef enum tagSENSOR_TYPE +{ + SENSOR_TYPE_NONE = 0, // 无 + SENSOR_TYPE_TEMPERATURE = 1, // 温度 + SENSOR_TYPE_HUMIDITY , // 湿度 + SENSOR_TYPE_WINDSPEED, // 风速 + SENSOR_TYPE_GAS, // 气体 + SENSOR_AC_VOLTAGE, // 交流电压 + SENSOR_AC_CURRENT, // 交流电流 + SENSOR_DC_VOLTAGE, // 直流电压 + SENSOR_DC_CURRENT, // 直流电流 + SENSOR_WATER_PRESSURE, // 水压 + SENSOR_PRESSURE_TRANSMITTER, // 压力变送器 + SENSOR_FLOW_TRANSMITTER, // 流量变送器 + SENSOR_WATER_LEAKAGE, // 漏水传感器 + SENSOR_INTERGRATED_TEMPERATURE_DETECTOR,//一体化温变 + SENSOR_ISOLATION_TEMPERATURE_DETECTOR, //隔离式温变 + SENSOR_RESIDUAL_CHLORINE, //在线余氯仪 + SENSOR_TYPE_AC_TERMINAL = 16, // AC端子 + SENSOR_TYPE_AC_SOCKET = 17, // AC插座 + SENSOR_TYPE_HUMITURE, // 温湿度 + SENSOR_TYPE_FLOW, // 流量 + SENSOR_LIQUID_LEVEL, // 液位 + SENSOR_TYPE_ARC, // 电弧 + SENSOR_TYPE_UNKNOW = 255 // 未定义 +}SENSOR_TYPE; + +typedef struct tagNET_DVR_SENSOR_INFO +{ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 传感器名称 + BYTE byEnable; // 是否启用 + BYTE byValid; // 是否有效 传感器正常不正常(该参数只能获取不能个配置) + BYTE byType; // 模拟量类型 参照SENSOR_TYPE + BYTE byAlarmMode;//报警模式,五种,15-HHHH、14-HHHL、12-HHLL、8HLLL、0-LLLL,即:1111(上上上上),1110(上上上下),1100(上上下下),1000(上下下下),0000(下下下下) + float fMeasureHigh; // 量程上限 + float fMeasureLow; // 量程下限 + float fAlarm1; //报警限1,报警限1-4 依次增大 + float fAlarm2; //报警限2 + float fAlarm3; //报警限3 + float fAlarm4; //报警限4 + DWORD dwOsdCfg; //模拟量字符叠加,按位表示0-15对应视频通道1-16 + float fSensitive; // 灵敏度表示当实时值的变化超过灵敏度的范围时,则表示实时值发生了变化,否则认为没有发生变化。如:灵敏度为0.1,则表示前后检测的两个值之差大于0.1时,则认为数据发生变化大于0.1,需要上传。如果为1,则表示变化超过1时上报。 + BYTE bySensorStandard; //传感器规格,0- 0~20mA,1- 0~5V,2- 0~2.5Mpa,3- 0~1.6Mpa,4- 0~5m + BYTE byChan; //模拟量通道号 + BYTE byRes3[114]; // 保留字节 +}NET_DVR_SENSOR_INFO, *LPNET_DVR_SENSOR_INFO; + +typedef struct tagNET_DVR_SIREN_PARAM +{ + DWORD dwSize; // 结构大小 + BYTE byName[NAME_LEN]; // 名称 + WORD wDelay; // 输出延迟 单位为秒, 范围 0~5599s 0表示一直有输出 + BYTE byRes1[2]; + DWORD dwOverallEventJointSirenOn; //全局事件联动警号输出开启,事件类型按位表示,bit0-主机防拆, bit1-全局键盘紧急报警,bit2-交流电断电,bit3-电池电压低,bit4-电话线掉线,bit5-有线网络异常,bit6-无线网络异常, bit7-键盘485断线,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwSubsystemEventJointSirenOn[MAX_ALARMHOST_SUBSYSTEM/*32*/];//子系统事件联动警号输出开启。数组下标表示子系统号,每一个元素按位表示事件类型,bit0-紧急报警 + BYTE byRes2[448]; // 保留字节   +}NET_DVR_SIREN_PARAM, *LPNET_DVR_SIREN_PARAM; + +typedef struct tagNET_DVR_AIR_CONDITION_PARAM +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 0--关机 1--开机 + BYTE byMode; // 空调模式 + BYTE byTemperature; // 温度,具体值表示 通常为16-30度 + BYTE byAirConditionNo; // 空调编号 + BYTE byRes[8]; // 保留字节 +}NET_DVR_AIR_CONDITION_PARAM, *LPNET_DVR_AIR_CONDITION_PARAM; + +typedef enum tagDETECTOR_TYPE +{ + PANIC_BUTTON = 0, // 紧急按钮 + MAGNETIC_CONTACT, // 门磁 + SMOKE_DETECTOR, // 烟感探测器 + ACTIVE_INFRARED_DETECTOR, // 主动红外探测器 + PASSIVE_INFRARED_DETECTOR, // 被动红外探测器 + GLASS_BREAK_DETECTOR, // 玻璃破碎探测器 + VIBRATION_DETECTOR, // 震动探测器 + DUAL_TECHNOLOGY_PIR_DETECTOR, // 双鉴探测器 + TRIPLE_TECHNOLOGY_PIR_DETECTOR, // 三技术探测器 + HUMIDITY_DETECTOR, // 湿度探测器 + TEMPERATURE_DETECTOR, // 温感探测器 + COMBUSTIBLE_GAS_DETECTOR, // 可燃气体探测器 + DYNAMIC_SWITCH, //随动开关 + CONTROL_SWITCH, //控制开关 + SMART_LOCK, //智能锁 + WATER_DETECTOR, //水浸探测器 + DISPLACEMENT_DETECTOR, //位移探测器 + SINGLE_INFRARED_DETECTOR, //单体门磁探测器 + SINGLE_ZONE_MODULE, //无线单防区模块 + CURTAIN_INFRARED_DETECTOR, //幕帘红外人体探测器19 + UNKNOWN,//未知20 + DOORBELL_SWITCH=21, //门铃开关21 + MEDICAL_HELP_BUTTON, //医疗求助按钮 + OUTDOOR_DUAL_TECH, //室外双鉴传感器 + + OTHER_DETECTOR = 0xffff // 其它探测器 +}DETECTOR_TYPE; + +typedef struct tagNET_DVR_ALARMIN_PARAM +{ + DWORD dwSize; + BYTE byName[NAME_LEN]; + WORD wDetectorType; // DETECTOR_TYPE + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 ,12-超时防区,13-紧急防区,0xff-无 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 + DWORD dwParam; // 防区参数 延时防区延时多长时间, 动环报警主机和自助行报警主机的延时时间通过这个参数来设置 , 具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*布防时间时间段*/ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byAssociateSirenOut[8]; // 警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE bySensitivityParam;//防区灵敏度参数, 0-10ms、1-250ms、2-500ms、3-750ms + BYTE byArrayBypass;//是否加入旁路组,0-不支持组旁路,1-支持组旁路 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byModuleStatus; //模块状态 1-在线 2-离线 + WORD wModuleAddress; //模块地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //模块通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byModuleType; //模块类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器, 7-1门就地控制器、8-2门就地控制器、9-4门就地控制器、10-8防区无线、11-键盘、12-8防区有线、13-扩展防区 + WORD wZoneIndex; //防区号,该参数只能获取 + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效,1-常开,2-常闭 + BYTE byZoneResistor; //防区电阻,单位千欧 0-无效 1--2.2 ,2--3.3,3--4.7,4--5.6 , 5--8.2 ,0xff-自定义 + float fZoneResistorManual;/*防区手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byZoneResistor为0xff时有效*/ + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byZoneSignalType; //防区信号传输类型(只读),0-有线防区,1-无线防区 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byAssociateLampOut[8];// 警灯输出 数组0 表示警灯1 值为1表示输出 0 表示不输出 + WORD wTimeOut; //超时时间,秒 + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byRes3[8]; // 保留字节 +}NET_DVR_ALARMIN_PARAM, *LPNET_DVR_ALARMIN_PARAM; + +typedef struct tagNET_DVR_ALARMIN_PARAM_V50 +{ + DWORD dwSize; + BYTE byName[NAME_LEN]; + WORD wDetectorType; // DETECTOR_TYPE + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区 ,12-超时防区,13-紧急防区,14-燃气防区,0xff-无 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 + DWORD dwParam; // 防区参数 延时防区延时多长时间, 动环报警主机和自助行报警主机的延时时间通过这个参数来设置 , 具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT];/*布防时间时间段*/ + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byAssociateSirenOut[8]; // 警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE bySensitivityParam;//防区灵敏度参数, 0-10ms、1-250ms、2-500ms、3-750ms + BYTE byArrayBypass;//是否加入旁路组,0-不支持组旁路,1-支持组旁路 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byModuleStatus; //模块状态 1-在线 2-离线 + WORD wModuleAddress; //模块地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //模块通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byModuleType; //模块类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器, 7-1门就地控制器、8-2门就地控制器、9-4门就地控制器、10-8防区无线、11-键盘、12-8防区有线、13-扩展防区 + WORD wZoneIndex; //防区号,该参数只能获取 + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效,1-常开,2-常闭 + BYTE byZoneResistor; //防区电阻,单位千欧 0-无效 1--2.2 ,2--3.3,3--4.7,4--5.6 , 5--8.2 ,0xff-自定义 + float fZoneResistorManual;/*防区手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byZoneResistor为0xff时有效*/ + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN_V50]; //探测器序列号,只读 + BYTE byZoneSignalType; //防区信号传输类型(只读),0-有线防区,1-无线防区 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + WORD wTimeOut; //超时时间,秒 + BYTE byAssociateLampOut[8];// 警灯输出 数组0 表示警灯1 值为1表示输出 0 表示不输出 + BYTE byVoiceFileName[32]; //语音文件名 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 + BYTE byRelativeChannel[RELATIVE_CHANNEL_LEN];// 关联的通道号,0表示无效,一个byte字节表示一个通道号 + BYTE byDetectorVersion[VERSION_INFO_LEN]; //探测器版本,只读 + BYTE byDetectorMAC[MACADDR_LEN]; //探测器MAC地址,只读 + BYTE byLinkageAlarmType; //关联报警类型:1-火警,2-监管,3-联动,4-屏蔽,5-故障 + BYTE byRes3[465]; // 保留字节 +}NET_DVR_ALARMIN_PARAM_V50, *LPNET_DVR_ALARMIN_PARAM_V50; + +#define MAX_MAX_ALARMIN_NUM 64 /* 批量获取最大防区数*/ +typedef struct tagNET_DVR_MULTI_ALARMIN_COND +{ + DWORD dwSize; + int iZoneNo[MAX_MAX_ALARMIN_NUM]; //防区号,从0开始,小于0表示无效 + BYTE byRes[256]; +}NET_DVR_MULTI_ALARMIN_COND, *LPNET_DVR_MULTI_ALARMIN_COND; + +typedef struct tagNET_DVR_SINGLE_ALARMIN_PARAM +{ + DWORD dwSize; + WORD wZoneNo; //防区号,该参数只能获取 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,12-超时防区,13-紧急防区14-燃气防区,0xff-无 + BYTE byName[NAME_LEN]; + WORD wDetectorType; // DETECTOR_TYPE + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效 1-常开 1-常闭 + BYTE byZoneSignalType; //防区信号传输类型,0-有线防区,1-无线防区 + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + WORD wTimeOut; //超时时间,秒 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 + BYTE byRes2[110]; // 保留字节 +}NET_DVR_SINGLE_ALARMIN_PARAM, *LPNET_DVR_SINGLE_ALARMIN_PARAM; + +typedef struct tagNET_DVR_SINGLE_ALARMIN_PARAM_V50 +{ + DWORD dwSize; + WORD wZoneNo; //防区号,该参数只能获取 + BYTE byJointSubSystem; //防区所属的子系统号,该参数只能获取 + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,12-超时防区,13-紧急防区14-燃气防区,0xff-无 + BYTE byName[NAME_LEN]; + WORD wDetectorType; // DETECTOR_TYPE + WORD wInDelay; //进入延时,0-255秒 + WORD wOutDelay; //退出延时,0-255秒 + BYTE byAlarmType; //报警器类型 0-无效 1-常开 1-常闭 + BYTE byZoneSignalType; //防区信号传输类型,0-有线防区,1-无线防区 + BYTE byDetectorSerialNo[ALARMHOST_DETECTOR_SERIAL_LEN]; //探测器序列号,只读 + BYTE byDisableDetectorTypeCfg; //探测是类型是否不可配,0-可配,1-不可配 + BYTE byTimeOutRange; // 超时时间范围,0:1~599s,1:1~65535s + BYTE byDetectorSignalIntensity; // 探测器信号强度(只读),0~100 + WORD wTimeOut; //超时时间,秒 + BYTE byTimeOutMethod; //超时防区计时方式:0-触发计时,1-恢复计时 + BYTE byAssociateFlashLamp;// 闪光灯输出 0-无效,1-不输出,2-输出 + BYTE byStayAwayEnabled;// 及时防区在家旁路使能 0-无效,1-不使能,2-使能 + BYTE bySilentModeEnabled;// 静音模式使能 0-无效,1-不使能,2-使能 + BYTE byRes3[2]; + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; // 报警输入关联报警输出 + BYTE byRes2[128]; // 保留字节 +}NET_DVR_SINGLE_ALARMIN_PARAM_V50, *LPNET_DVR_SINGLE_ALARMIN_PARAM_V50; + +typedef struct tagNET_DVR_ALARMIN_PARAM_LIST +{ + DWORD dwSize; + NET_DVR_SINGLE_ALARMIN_PARAM struSingleAlarmInParam[MAX_MAX_ALARMIN_NUM]; + BYTE byRes[128]; +}NET_DVR_ALARMIN_PARAM_LIST, *LPNET_DVR_ALARMIN_PARAM_LIST; + +typedef struct tagNET_DVR_ALARMIN_PARAM_LIST_V50 +{ + DWORD dwSize; + NET_DVR_SINGLE_ALARMIN_PARAM_V50 struSingleAlarmInParam[MAX_MAX_ALARMIN_NUM]; + BYTE byRes[128]; +}NET_DVR_ALARMIN_PARAM_LIST_V50, *LPNET_DVR_ALARMIN_PARAM_LIST_V50; + +typedef struct tagNET_DVR_ALARMOUT_PARAM +{ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 名称 + WORD wDelay; // 输出延迟 单位s, 范围:0~3599s 0 表示一直有输出 + WORD wTriggerIndex; //触发器号,该参数只能获取 + BYTE byAssociateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM]; //表示警号的报警输入通道 (多个报警输入同时触发一个警号输出)数组下标0表示报警输入1,依次类推 0-不 1- + BYTE byModuleType; //外接触发器类型,1-本地触发器, 2-4路触发器,3-8路触发器 4-单防区触发器,5-32路触发器,6-1门就地控制器、7-2门就地控制器、8-4门就地控制器,9-2路触发器,10-键盘,11-扩展触发器 + BYTE byModuleStatus; //外接触发器状态 1-在线 2-离线 + WORD wModuleAddress; //外接触发器地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byModuleChan; //外接触发器通道号,从1开始,最大值根据模块类型来决定,0xFF表示无效 + BYTE byWorkMode; //工作模式,1-联动,2-随动 + BYTE byAlarmOutMode; //输出模式,1-非脉冲模式,2-脉冲模式 + BYTE byTimeOn; //开时间 1~60s + BYTE byTimeOff; //关时间 1~60s + BYTE byDurationConstOutputEnable; //继电器常开使能 + BYTE byRes2[50]; //保留字节 +}NET_DVR_ALARMOUT_PARAM, *LPNET_DVR_ALARMOUT_PARAM; + +typedef struct tagNET_DVR_ALARMIN_SETUP +{ + BYTE byAssiciateAlarmIn[MAX_ALARMHOST_ALARMIN_NUM];//报警输入通道 数组下标0对应报警输入口1,依次类推 + BYTE byRes[100];//保留字节 +}NET_DVR_ALARMIN_SETUP, *LPNET_DVR_ALARMIN_SETUP; + +typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS +{ + DWORD dwSize; + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,(最大支持512个报警输入口查询),0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口报警状态,(最大支持512个报警输入口查询),0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM];//报警输出口状态,(最大支持512个报警输出口查询),0-对应报警输出口无报警,1-对应报警输出口有报警 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; // 旁路状态 数组下标表示0对应报警输入口1 0-表示报警输入口没有旁路 1-表示报警输入口旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM]; //子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口故障状态,0-对应报警输入口处于正常状态,1-对应报警输入口处于故障状态 + BYTE byRes[56]; // 保留字节 +}NET_DVR_ALARMHOST_MAIN_STATUS, *LPNET_DVR_ALARMHOST_MAIN_STATUS; + +typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS_V40 +{ + DWORD dwSize; + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区布防状态,(最大支持512个防区查询),0-对应防区处于撤防状态,1-对应防区处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警状态,(最大支持512个防区查询),0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器状态,(最大支持512个触发器查询),0-对应触发器无报警,1-对应触发器有报警 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //旁路状态 数组下标表示0对应防区1 0-表示防区没有旁路 1-表示防区旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统布防状态,0-对应子系统处于撤防状态,1-对应子系统处于布防状态 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区故障状态,0-对应防区处于正常状态,1-对应防区处于故障状态 + BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警记忆状态, 0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区防拆状态,0-对应防区无报警,1-对应防区有报警 + BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统启用状态,0-无效,1-对应子系统未启用,2-对应子系统启用 + BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //子系统布放状态,0-无效,1-外出布防,2-即时布防,3-在家布防 + BYTE byRes[448]; //保留字节 +}NET_DVR_ALARMHOST_MAIN_STATUS_V40, *LPNET_DVR_ALARMHOST_MAIN_STATUS_V40; + +typedef struct tagNET_DVR_ALARMHOST_MAIN_STATUS_V51 +{ + DWORD dwSize; + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区布防状态,(最大支持512个防区查询),0xff-无效,0-对应防区处于撤防状态,1-对应防区处于布防状态,2-对应防区处于布防中 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警状态(触发状态),(最大支持512个防区查询),0xff-无效,0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器状态,(最大支持512个触发器查询),0xff-无效,0-对应触发器无报警,1-对应触发器有报警,2-未关联,3-离线,4-心跳异常 + BYTE byBypassStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区旁路状态,数组下标表示0对应防区1,0xff-无效,0-表示防区没有旁路 1-表示防区旁路 + BYTE bySubSystemGuardStatus[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统布防状态,0xff-无效,0-对应子系统处于撤防状态,1-对应子系统处于布防状态,2-对应子系统处于布防中 + BYTE byAlarmInFaultStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区故障状态,0xff-无效,0-对应防区处于正常状态,1-对应防区处于故障状态 + BYTE byAlarmInMemoryStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区报警记忆状态(报警状态), 0xff-无效,0-对应防区当前无报警,1-对应防区当前有报警 + BYTE byAlarmInTamperStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区防拆状态,0xff-无效,0-对应防区无报警,1-对应防区有报警 + BYTE byEnableSubSystem[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统启用状态,0-无效,1-对应子系统未启用,2-对应子系统启用 + BYTE bySubSystemGuardType[MAX_ALARMHOST_SUBSYSTEM]; //子系统布防类型,0-无效,1-外出布防,2-即时布防,3-在家布防 + BYTE bySubSystemAlarm[MAX_ALARMHOST_SUBSYSTEM]; //子系统报警状态,0-无效,1-正常,2-报警 + BYTE byAlarmOutCharge[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器电量状态,(最大支持512个触发器查询),0-无效,1-正常,2-电量低 + BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器防拆状态,(最大支持512个触发器查询),0-无效,1-防拆,2-无防拆 + BYTE byAlarmInShieldedStatus[MAX_ALARMHOST_ALARMIN_NUM]; //防区屏蔽状态,0-无效,1-屏蔽,2-非屏蔽 + BYTE byAlarmOutLinkage[MAX_ALARMHOST_ALARMOUT_NUM]; //触发器联动事件类型,(最大支持512个触发器查询),0-无效,1-报警,2-布防,3-撤防,4-手动控制 + BYTE byRes[512]; //保留字节 +}NET_DVR_ALARMHOST_MAIN_STATUS_V51, *LPNET_DVR_ALARMHOST_MAIN_STATUS_V51; + +typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS +{ + DWORD dwSize; + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; // 警号输出状态 0-警号处于无报警状态,1-警号处于有报警状态 + BYTE byRes[92]; // 保留字节 +}NET_DVR_ALARMHOST_OTHER_STATUS, *LPNET_DVR_ALARMHOST_OTHER_STATUS; + +typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS_V50 +{ + DWORD dwSize; + //对于DS-PEA系列一键式紧急报警产品,数组下标0对应警灯状态,数组下标1对应电锁状态,数组下标2开始对应警号输出状态 + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //警号输出状态,0xff-无效,0-警号处于无报警状态,1-警号处于有报警状态,2-未关联,3-离线,4-心跳异常 + BYTE byDetetorPower[MAX_DETECTOR_NUM]; //探测器电量状态,0xff-无效,电量值为0-100,默认电量小于20为欠压状态 + BYTE byDetetorConnection[MAX_DETECTOR_NUM]; //探测器连接状态,0xff-无效,0-表示未注册,1-表示不在线, 2-表示在线,3-心跳异常 + BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //警号电量状态,0-无效,1-正常,2-欠压 + BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //警号防拆状态,0-无效,1-防拆,2-无防拆 + BYTE byPowerStausEnabled[MAX_DETECTOR_NUM / 8]; //探测器电量状态是否有效,按位表示,0-无效,1-有效 + BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM / 8]; //探测器电量状态,按位表示,0-正常,1-电量低 + BYTE byDetetorPowerType; //探测器电量的表示类型,0-按照电量值表示,使用byDetetorPower 字段,1-按照电量状态表示,使用byPowerStausEnabled和byDetetorPowerStatus字段 + BYTE byRes[975]; //保留字节 +}NET_DVR_ALARMHOST_OTHER_STATUS_V50, *LPNET_DVR_ALARMHOST_OTHER_STATUS_V50; + +typedef struct tagNET_DVR_ALARMHOST_OTHER_STATUS_V51 +{ + DWORD dwSize; + //对于DS-PEA系列一键式紧急报警产品,数组下标0对应警灯状态,数组下标1对应电锁状态,数组下标2开始对应警号输出状态 + BYTE bySirenStatus[ALARMHOST_MAX_SIREN_NUM]; //警号输出状态,0xff-无效,0-警号处于无报警状态,1-警号处于有报警状态,2-未关联,3-离线 + BYTE byDetetorPower[MAX_DETECTOR_NUM_V51]; //探测器电量,0xff-无效,电量值为0-100,默认电量小于20为欠压状态,byDetetorPowerType为0时有效 + BYTE byDetetorConnection[MAX_DETECTOR_NUM_V51]; //探测器连接状态,0xff-无效,0-表示未注册,1-表示不在线, 2-表示在线 + BYTE bySirenPower[ALARMHOST_MAX_SIREN_NUM]; //警号电量状态,0-无效,1-正常,2-欠压 + BYTE bySirenTamperStatus[ALARMHOST_MAX_SIREN_NUM]; //警号防拆状态,0-无效,1-防拆,2-无防拆 + BYTE byPowerStausEnabled[MAX_DETECTOR_NUM_V51 / 8]; //探测器电量状态是否有效,按位表示,0-无效,1-有效 + BYTE byDetetorPowerStatus[MAX_DETECTOR_NUM_V51 / 8]; //探测器电量状态,按位表示,0-正常,1-电量低 + BYTE byDetetorPowerType; //探测器电量的表示类型,0-按照电量值表示,使用byDetetorPower 字段,1-按照电量状态表示,使用byPowerStausEnabled和byDetetorPowerStatus字段 + BYTE byRes2[3]; + BYTE byRepeaterStatus[MAX_REPEATER_NUM]; //中继器状态,0-无效,1-离线,2-在线,3-未关联 + BYTE byRepeaterTamperStatus[MAX_REPEATER_NUM / 8]; //中继器防拆状态,按位表示,0-对应中继器无报警,1-对应中继器有报警 + BYTE byAlarmOutTamperStatus[MAX_ALARMHOST_ALARMOUT_NUM / 8]; //报警输出(继电器)防拆状态,按位表示,0-对应报警输出无报警,1-对应报警输出有报警 + BYTE byOutputModuleTamperStatus[MAX_OUTPUT_MODULE_NUM / 8]; //输出模块防拆状态,按位表示,0-对应输出模块无报警,1-对应输出模块有报警 + BYTE byElectricLockStatus[MAX_ELECTRIC_LOCK_NUM]; //电锁状态 0-关闭,1 –打开,为确保兼容性,第一个电锁的状态在bySirenStatus第0位也需要填写 + BYTE byRes[274]; //保留字节 +}NET_DVR_ALARMHOST_OTHER_STATUS_V51, *LPNET_DVR_ALARMHOST_OTHER_STATUS_V51; + + +//使能状态配置 +typedef struct tagNET_DVR_ALARMHOST_ENABLECFG +{ + DWORD dwSize; + BYTE byAudioOutEnable[ALARMHOST_MAX_AUDIOOUT_NUM];//语音输出使能,0-禁能,1-使能 + BYTE byElectroLockEnable[ALARMHOST_MAX_ELECTROLOCK_NUM];//电锁使能,0-禁能,1-使能 + BYTE byMobileGateEnable[ALARMHOST_MAX_MOBILEGATE_NUM];//移动门使能,0-禁能,1-使能 + BYTE bySirenEnable[ALARMHOST_MAX_SIREN_NUM];//警号使能, 0-禁能,1-使能 + BYTE bySerialPurpose;//串口用途,0-用于级联报警主机,1-用于PTZ控制 + BYTE byRes[63]; +}NET_DVR_ALARMHOST_ENABLECFG, *LPNET_DVR_ALARMHOST_ENABLECFG; + +typedef struct tagNET_DVR_ALARMHOST_ABILITY +{ + DWORD dwSize; // 结构体大小 + WORD wTotalAlarmInNum; // 报警输入口总数(防区),包括级联 + WORD wLocalAlarmInNum; // 本地报警输入口 + WORD wExpandAlarmInNum; // 可扩展的报警输入口 + WORD wTotalAlarmOutNum; // 报警输出口总数 (设备支持的总数) + WORD wLocalAlarmOutNum; // 本地报警输出口个数 + WORD wExpandAlarmOutNum; // 可扩展的报警输出口 + WORD wTotalRs485Num; // 报警输出口总数 (设备支持的总数) + WORD wLocalRs485Num; // 本地485口数 + WORD wExpandRs485Num; // 可扩展的485口数 + WORD wFullDuplexRs485Num; // 全双工的485口数 + WORD wTotalSensorNum; // 模拟量最大个数 (设备支持的总数) + WORD wLocalSensorNum; // 本地模拟量个数 + WORD wExpandSensorNum; // 可扩展的模拟量个数 + WORD wAudioOutNum; //语音输出个数 + WORD wGatewayNum; //门禁个数 + WORD wElectroLockNum; //电锁个数 + WORD wSirenNum; // 主机警号数目 + WORD wSubSystemNum; // 可划分子系统数目 + WORD wNetUserNum; // 网络用户数 + WORD wKeyboardNum; // 键盘数 + WORD wOperatorUserNum; // 操作用户数 + BYTE bySupportDetector;//是否支持常开、常闭探测器,1-支持,0-不支持 + BYTE bySupportSensitivity;//是否支持防区灵敏度,1-支持,0-不支持 + BYTE bySupportArrayBypass;//是否支持组旁路,1-支持,0-不支持 + BYTE bySupportAlarmInDelay;//是否支持防区延迟,1-支持,0-不支持 + //如果bySupportAlarmInDelay为1时,表示客户端应该使用NET_DVR_ALARMIN_PARAM 中的dwParam来设置延时时间,动环报警主机和自助行报警主机使用这种配置延时方式; + //如果bySupportAlarmInDelay为0时,表示通过NET_DVR_ALARMSUBSYSTEMPARAM 中的wEnterDelay 、wExitDelay 来设置 + BYTE bySupportAlarmInType[16];//支持的防区类型,数组0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区15-无 + BYTE byTelNum; //支持电话个数 + BYTE byCenterGroupNum; //中心组个数 + BYTE byGPRSNum; //GPRS中心数,最多4个 + BYTE byNetNum; //网络中心数,最多4个 + BYTE byAudioNum; //音频个数 + BYTE by3GNum; //3G模块个数 + BYTE byAnalogVideoChanNum; //模拟视频通道个数 + BYTE byDigitalVideoChanNum; //数字视频通道个数 + BYTE bySubSystemArmType; //子系统布防类型,0-表示不支持,1-表示支持。bit0-普通布防(注:网络小主机只支持普通布防,在能力集中加这个字段的时候网络小主机已经发布,所以网络小主机中该字段为0,所以用0表示支持,1表示不支持。对外接口中SDK内部会做兼容),bit1-即时布防,bit2-留守布防。 + BYTE byPublicSubSystemNum; //公共子系统个数 + DWORD dwSupport1; //按位表示,结果非0表示支持,0表示不支持 + // bit0: 是否支持子系统内配置警号输出时间,如果支持则警号输出时间在每个子系统内配置,如果不支持,警号时间在警号参数配置里面设置 + // bit1: 是否支持事件触发报警输出开启 + // bit2: 是否支持事件触发报警输出关闭 + // bit3: 是否支持子系统使能 + // bit4; 是否支持防区布防 + // bit5; 是否支持子系统自动布撤防 + // bit6: 是否支持具体故障关联声音输出 + // bit7: 是否支持故障状态查询 + // bit8: 是否支持子系统扩展配置 + // bit9: 是否支持钥匙防区操作子系统 + // bit10: 是否支持"键盘提示成功发送报告"配置 + // bit11: 是否支持导入导出参数配置 + // bit12: 是否支持LED屏幕参数配置 + // bit13: 是否支持故障关联本地故障灯输出 + DWORD dwSubSystemEvent; //子系统事件,按位表示,0表示不支持,非0表示支持,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆 + DWORD dwOverallEvent; //全局事件,按位表示,0表示不支持,非0表示支持,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常,bit5-硬盘故障,bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线,bit8-WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwFaultType; //设备支持的故障类型,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-主键盘掉线,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常 + BYTE byPublicSubsystemAssociateSubsystemNum; //公共子系统可关联的子系统个数 + BYTE byOverallKeyboard; //全局键盘个数 + WORD wSafetyCabinSupport; //防护舱控制器能力,按位表示,结果非0表示支持,0表示不支持 + //bit0: 是否支持防护舱控制器工作模式配置 + //bit1: 是否支持人信号传感器类型配置 + //bit2: 是否支持幕帘传感器参数配置(探测延迟时间、人状态变化响应时间) + //bit3: 是否支持红外对射传感器参数配置(滤波) + //bit4: 是否支持防护舱使用超时时间配置 + BYTE by485SlotNum; //485虚拟槽位号 + BYTE bySubSystemAttributeAbility; // 值恒为1,禁止1号子系统关闭使能 + WORD wKeyboardAddrNum; // 键盘地址数 + BYTE byAlarmLampNum; //警灯数目 + BYTE byRes[117]; // 保留字节 +}NET_DVR_ALARMHOST_ABILITY, *LPNET_DVR_ALARMHOST_ABILITY; + +#define MAX_485CHAN 256 //485通道号 +#define MAX_485SLOT 256 //485槽位号 +typedef struct tagNET_DVR_485_SLOT_LIST_INFO +{ + DWORD dwSize; + BYTE byAll; //0-不是全部获取,1-全部获取 + BYTE byres[3]; + BYTE byIndex[MAX_485SLOT]; //485槽位号 + BYTE byRes[64]; //保留 +}NET_DVR_485_SLOT_LIST_INFO,* LPNET_DVR_485_SLOT_LIST_INFO; + +typedef struct tagNET_DVR_485LIST_INFO +{ + DWORD dwSize; + BYTE byAll; //0-不是全部获取,1-全部获取 + BYTE byres[3]; + BYTE byIndex[MAX_485CHAN]; //485通道号 下标表示通道号,值0-表示不使用,1表示使用 + BYTE byRes[64]; //保留 +}NET_DVR_485LIST_INFO,*LPNET_DVR_485LIST_INFO; + +typedef struct tagNET_DVR_ALARM_RS485CFG +{ + DWORD dwSize; // 结构体大小 + BYTE sDeviceName[NAME_LEN]; // 前端设备名称 + WORD wDeviceType; // 前端设备类型,通过NET_DVR_GetDeviceTypeList获取 + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byDataBit; // 数据有几位:0-5位,1-6位,2-7位,3-8位 + BYTE byStopBit; // 停止位:0-1位,1-2位 + BYTE byParity; //是否校验:0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol; // 是否流控:0-无,1-软流控,2-硬流控 + BYTE byDuplex; // 0 - 半双工1- 全双工 只有通道1可以是全双工其他都只能是半双工 + BYTE byWorkMode; // 工作模式 0-控制台 1-透明通道,2-梯控,3-读卡器,4-门禁安全模块,0xfe-自定义,0xff-禁用 + BYTE byChannel; //485通道号 + BYTE bySerialType; //串口类型: 0--485, 1--232 + BYTE byMode; //模式 0-连接读卡器 1-连接客户端 2-连接扩展模块 3-连接门禁主机 4-连接梯控主机 0xff-禁用 + BYTE byOutputDataType; //0-无效,1-输出卡号,2-输出工号 + BYTE byAddress; //串口地址 + BYTE byStairsOutputDataType; //0-无效,1-输出楼层号,2-输出卡号,当byMode为梯控主机时有效 + BYTE byRes[32]; // 保留字节 +}NET_DVR_ALARM_RS485CFG, *LPNET_DVR_ALARM_RS485CFG; + +#define MAX_DEVICE_PROTO_NUM 256 +#define MAX_DEVICE_TYPE_NUM 256 + +// 485前端设备支持协议列表 +typedef struct tagNET_DVR_DEVICE_PROTO_LIST +{ + DWORD dwSize; // 结构体大小 + DWORD dwProtoNum; // 协议个数 + NET_DVR_PROTO_TYPE struProtoType[MAX_DEVICE_PROTO_NUM]; // 协议类型 + BYTE byRes[12]; // 保留字节 +}NET_DVR_DEVICE_PROTO_LIST, *LPNET_DVR_DEVICE_PROTO_LIST; + +typedef struct tagNET_DVR_DEVICE_TYPE +{ + DWORD dwType; + BYTE byDescribe[DESC_LEN]; +}NET_DVR_DEVICE_TYPE, *LPNET_DVR_DEVICE_TYPE; + +typedef struct tagNET_DVR_DEVICE_TYPE_LIST +{ + DWORD dwSize; // 结构体大小 + DWORD dwTypeNum; // 类型个数 + NET_DVR_DEVICE_TYPE struDeviceType[MAX_DEVICE_TYPE_NUM]; + BYTE byRes[12]; +}NET_DVR_DEVICE_TYPE_LIST, *LPNET_DVR_DEVICE_TYPE_LIST; + +#define MAX_ALARMHOST_VIDEO_CHAN 64 +typedef struct tagNET_DVR_ALARM_DEVICE_USER +{ + DWORD dwSize; // 结构体大小 + BYTE sUserName[NAME_LEN]; // 用户名 + BYTE sPassword[PASSWD_LEN]; // 密码 + NET_DVR_IPADDR struUserIP; /* 用户IP地址(为0时表示允许任何地址) */ + BYTE byMACAddr[MACADDR_LEN]; /* 物理地址 */ + BYTE byUserType; // 0-普通用户(操作员) 1-管理员用户 2-安装员用户 3-制造商用户 + BYTE byAlarmOnRight; // 布防权限 + BYTE byAlarmOffRight; // 撤防权限 + BYTE byBypassRight; // 旁路权限 + BYTE byOtherRight[MAX_RIGHT]; // 其他权限 + // 0 -- 日志权限 + // 1 -- 重启关机 + // 2 -- 参数设置权限 + // 3 -- 参数获取权限 + // 4 -- 恢复默认参数权限 + // 5 -- 警号输出权限 + // 6 -- PTZ 控制权限 + // 7 -- 远程升级权限 + // 8 -- 远程预览 + // 9 -- 远程手动录像 + // 10 -- 远程回放 + // 11 -- 消警 + // 12 -- 强制布防 + // 13 -- 永久旁路 + // 14 -- 添加更改个人授权代码 + // 15 -- 调试模式 + BYTE byNetPreviewRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以预览的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetRecordRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以录像的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetPlaybackRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以回放的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + BYTE byNetPTZRight[MAX_ALARMHOST_VIDEO_CHAN/8]; // 远程可以PTZ的通道,按位表示各通道(bit0-channel 1),1-有权限,0-无权限 + //BYTE byPriority; // 优先级,0xff-无,0--低,1--中,2--高 + //无(表示不支持优先级的设置) + //低(默认权限:包括远程回放,远程查看日志和状态,远程关机/重启) + //中(包括远程控制云台,远程手动录像,远程回放,语音对讲和远程预览,本地备份,本地/远程关机/重启) + //高(管理员) + BYTE sOriginalPassword[PASSWD_LEN]; // 原始密码 + BYTE sKeypadPassword[PASSWD_LEN]; // 键盘密码 + BYTE byUserEnabled; // 用户是否开启使用:0-无效,1-开启,2-不开启 + BYTE byRes2[135]; // 保留字节 +}NET_DVR_ALARM_DEVICE_USER, *LPNET_DVR_ALARM_DEVICE_USER; + +typedef struct tagNET_DVR_KEYBOARD_USER +{ + DWORD dwSize; // 结构体大小 + DWORD dwID; // 键盘用户ID + BYTE byDefanceArea[MAX_ALARMHOST_ALARMIN_NUM]; //防区权限 按数组下标表示 最大支持512个防区 0 - 无权限 1- 有权限 + BYTE byRes[560]; // 保留字节 +}NET_DVR_KEYBOARD_USER, *LPNET_DVR_KEYBOARD_USER; + +typedef struct tagNET_DVR_OPERATE_USER +{ + DWORD dwSize; // 结构体大小 + BYTE sUserName[NAME_LEN]; // 用户名 + BYTE sPassword[PASSWD_LEN]; // 密码 + BYTE bySubSystemPermission;/*0-安装员权限 操作员权限(所有子系统)如下: 1-单布防,无布防报告,不能旁路 2-单撤防,无撤防报告,不能旁路 3-布撤防,无布撤防报告,不能旁路 + 4-单布防,有布//防报告,不能旁路 5-单撤防,有撤防报告,不能旁路 6-布撤防,有布撤防报告,不能旁路 7-单布防,无布撤防报告,允许旁路 + 8-单撤防,无布撤防报告,允许旁路 9-布撤防,无布撤防报告,允许旁路 10-单布防,有布防报告,允许旁路 11-单撤防,有撤防报告,允许旁路 1 + 2-布撤防,有布撤防报告,允许旁路*/ + BYTE byRes[63]; // 保留字节 +}NET_DVR_OPERATE_USER, *LPNET_DVR_OPERATE_USER; + +typedef struct tagNET_DVR_GATEWAY_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byName[NAME_LEN]; // 门禁名称 + BYTE byEnable; // 是否启用 + BYTE byLocalEnable; // 本地是否启用 + WORD wDelayTime; // 开启延时时间 单位为秒0-65535 0为一直开启 + BYTE byLockWorkMode;//电锁工作模式,0-通电启动,1-断电启动 + BYTE byRes[31]; // 保留字节 +}NET_DVR_GATEWAY_CFG, *LPNET_DVR_GATEWAY_CFG; + +typedef struct tagNET_DVR_SENSOR_ALARM +{ + DWORD dwSize; // 结构体大小 + DWORD dwAbsTime; // 绝对时标信息 OSD显示信息 + BYTE byName[NAME_LEN]; // sensor 名称 + BYTE bySensorChannel; // 模拟量通道 + BYTE byType; // 模拟量类型 + BYTE byAlarmType; // 1-上4、2-上3、3-上2、4-上1、5-下1、6-下2、7-下3、8-下4 和当前模式有关 + // 例如当为1000时,有上1下1,2,3报警四种报警 + BYTE byAlarmMode; //报警模式,五种,-HHHH、-HHHL、-HHLL、HLLL、-LLLL, 作为平台报警程度判断功能,即:1111(上上上上),1110(上上上下),1100(上上下下),1000(上下下下),0000(下下下下) + float fValue; // 但前模拟量的值 + float fOriginalValue; //原始电流电压值,保留小数点后三位,具体值表示电流还是电压根据NET_DVR_SENSOR_INFO的bySensorStandard类型 + BYTE byRes2[28]; // 保留字节 +}NET_DVR_SENSOR_ALARM, *LPNET_DVR_SENSOR_ALARM; + +#define PROTOCOL_VERTION_LEN 32 + +typedef struct tagNET_DVR_RS485_PROTOCOL_VERSION +{ + DWORD dwSize; + BYTE byProtocleVersion[PROTOCOL_VERTION_LEN];//RS485协议库版本信息 + BYTE byRes[128]; +}NET_DVR_RS485_PROTOCOL_VERSION, *LPNET_DVR_RS485_PROTOCOL_VESRION; + + +typedef struct +{ + /*预留,目前报警主机的报警没有类型(布防网络序,监听主机序)*/ + DWORD dwAlarmType; + /*数组0对应第1个输入端口*/ + BYTE byAlarmInputNumber[MAX_ALARMHOST_ALARMIN_NUM]; + BYTE byRes[160]; +}NET_DVR_ALARMHOST_ALARMINFO,*LPNET_DVR_ALARMHOST_ALARMINFO; +// 开关量报警上传 +typedef struct tagNET_DVR_SWITCH_ALARM +{ + DWORD dwSize; + BYTE byName[NAME_LEN]; // switch 名称 + WORD wSwitchChannel; // 开关量通道, 0-255 + BYTE byAlarmType; // 报警类型 0--正常,1--短路,2--断路,3-异常 + BYTE byRes[41]; // 保留字节 +}NET_DVR_SWITCH_ALARM, *LPNET_DVR_SWITCH_ALARM; + +typedef union tagNET_DVR_ALARMHOST_EXCEPTION_PARAM +{ + DWORD dwUnionSize[20]; // 联合体大小 +}NET_DVR_ALARMHOST_EXCEPTION_PARAM, *LPNET_DVR_ALARMHOST_EXCEPTION_PARAM; + +typedef struct tagNET_DVR_ALARMHOST_EXCEPTION_ALARM +{ + DWORD dwSize; // 结构体大小 + // 异常参数 1-设备防拆报警 2-设备防拆后后恢复正常 3-主电源掉电报警 4-主电源掉电后恢复正常 5-内部通信故障报警 + // 6-内部通信故障后恢复正常 7-电话线断线 8-电话线断线恢复 9-自检失败报警 10-自检失败后恢复正常 + // 11蓄电池欠压 12蓄电池电压恢复正常,13-蓄电池故障;14-MBUS模块掉线;15-MBUS模块掉线恢复;16-键盘掉线; + //17-键盘掉线恢复;18-设备被移动;19-设备被移动复位 20-485外设线路断报警 21-485外设线路断后恢复正常 + //25-子板1插上,26-子板1拔出, 27-子板2插上,28-子板2拔出 + DWORD dwExceptionType; + BYTE byRes[36]; // 保留 +}NET_DVR_ALARMHOST_EXCEPTION_ALARM, *LPNET_DVR_ALARMHOST_EXCEPTION_ALARM; + +//自助行拨号参数配置及启用方式配置 +#define MAX_CENTERNUM 4 //G1,G2 G3 G4或者N1,N2,N3,N4或者T1,T2,T3,T4 +typedef struct tagNET_DVR_PHONECENTERDIALCFG +{ + BYTE sCenterName[NAME_LEN]; + BYTE byPhoneNum[MAX_PHONE_NUM/*32*/]; //中心号码 + BYTE byRepeatCall; //重复拨号次数,1~15次 + BYTE byPstnProtocol; //通信协议,0-CID; + BYTE byDialDelay; //拨号延时,最大150s, 0-150 + BYTE byPstnTransMode; //传输方式,0-DTMF 5/S,1-DTMF 10/S; + BYTE byEnable; //使能,0-关闭,1-启用 + BYTE byRes1[5]; + BYTE byReceiverId[6]; //接收机识别账号; + BYTE byRes2[32]; +}NET_DVR_PHONECENTERDIALCFG, *LPNET_DVR_PHONECENTERDIALCFG; + +typedef struct tagNET_DVR_ALARMHOSTDIALCFG +{ + DWORD dwSize; + NET_DVR_PHONECENTERDIALCFG struPhoneCenterParam[MAX_CENTERNUM];//主中心参数 + WORD wReportPeriod; //测试报告上传周期,小时,(最大值支持7天,即168小时), 范围;1-168 + WORD wFirstReportTime; //从设备启动到第一条测试报告上传,1~3600分钟 + BYTE byReportValid; //0-不启用测试报告上传 1-启用测试报告上传 + BYTE byRes[19]; +}NET_DVR_ALARMHOSTDIALCFG, *LPNET_DVR_ALARMHOSTDIALCFG; + +typedef struct tagNET_DVR_ALARMHOSTDIALSETUPMODE +{ + DWORD dwSize; + BYTE byEnableMode;//启用方式,0:不启用,1:一直启用,2:网线断启用,正常时关闭; + BYTE byCallType; //上传中心方式,1-单中心,2-双中心,3,一报一备 + BYTE byRes1[14]; +}NET_DVR_ALARMHOSTDIALSETUPMODE, *LPNET_DVR_ALARMHOSTDIALSETUPMODE; + +#define MAX_PU_CHAN_NUM 512 + +typedef struct tagNET_DVR_PU_CHAN_INFO +{ + NET_DVR_IPADDR struIpAddr; // ip地址 + WORD wPort; // 端口 + WORD wChannel; // 通道 + BYTE byRes[24]; // +}NET_DVR_PU_CHAN_INFO, *LPNET_DVR_PU_CHAN_INFO; + +typedef struct tagNET_DVR_PU_CHAN_LIST +{ + DWORD dwSize; // 结构体 + DWORD dwNum; // 前端通道个数 + NET_DVR_PU_CHAN_INFO struPuChanInfo[MAX_PU_CHAN_NUM]; +}NET_DVR_PU_CHAN_LIST, *LPNET_DVR_PU_CHAN_LIST; + +#define MAX_ALARM_CAM_NUM 32 // 报警触发CAM最大个数 + +typedef struct tagNET_DVR_PTZ_CTRL +{ + BYTE byEnable; // 是否启用PTZ控制 + BYTE byType; // PTZ 控制的类型 1- 预置点 2 -巡航 3- + BYTE byPtzNo; // ptz 控制的预置点 巡航 号 + BYTE byRes[5]; // 保留字节 +}NET_DVR_PTZ_CTRL, *LPNET_DVR_PTZ_CTRL; + +typedef struct tagNET_DVR_ALARM_CAM_INFO +{ + DWORD dwCamID; // 触发的CAM通道操作 + DWORD dwRecordTime; // 触发录像时间 单位为s -1表示一直录像 0 表示不录像 + DWORD dwMonID; // 触发Cam到Mon号显示 + DWORD dwResidentTime; // 轮巡停留时间单位为s -1表示一直停留 0 表示不停留 + NET_DVR_PTZ_CTRL struPtzCtrl; // PTZ控制信息 + BYTE byAlarmOffMode; // 报警切换上墙取消模式 0-立即取消,1-自动取消,2-手动取消 立即取消,报警取消时立即取消解码上墙 自动取消,报警取消时等待一定时间后取消解码上墙,我们约定是20秒 手动取消,用户通过手动的方式取消 + BYTE byDevType; // 当设备为智能设备时,生效表示智能报警设备取流源 1-解码卡 2-编码卡 + BYTE byDecChan; // 当为解码通道为解码通道号 + BYTE byRes[17]; // 保留字节 +}NET_DVR_ALARM_CAM_INFO, *LPNET_DVR_ALARM_CAM_INFO; + +typedef struct tagNET_DVR_ALARM_CAM_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用报警触发CAM联动 设备默认不启用 + BYTE byRes[7]; // 保留字节 + DWORD dwNum; // 触发CAM联动的个数 即取数组的前几个有效处理 + NET_DVR_ALARM_CAM_INFO struAlarmCam[MAX_ALARM_CAM_NUM]; +}NET_DVR_ALARM_CAM_CFG, *LPNET_DVR_ALARM_CAM_CFG; + +#define MAX_GATEWAY_NUM 8 // 最大门禁个数 +typedef struct tagNET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM +{ + DWORD dwSize; + BYTE byEnterDoor[8]; // 下标表示门禁号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 + BYTE byExitDoor[8]; // 下标表示门禁号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 + BYTE byAlarmIn[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //关联报警输入,下标表示报警输入号,元素数值表示关联信息,0表示不关联, 1-8表示关联的音频号 + BYTE byRes[128]; +}NET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM, *LPNET_DVR_ALARMHOST_AUDIO_ASSOCIATE_ALARM; + +//数据上传下载(语音上传下载的扩展) +typedef struct tagNET_DVR_UPLOAD_PARAM +{ + DWORD dwSize; + BYTE byUploadType; /*上传方式,1-根据文件名绝对地址读取数据文件上传, 2-从缓冲区读取数据上传*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:上传语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) + BYTE byAudioType; //语音格式,0-wave + char sFileName[260]; //数据文件的全路径 + char *lpBuffer; //数据缓冲区 + DWORD dwBufferSize; //缓冲区大小 + BYTE byRes2[128]; +}NET_DVR_UPLOAD_PARAM, *LPNET_DVR_UPLOAD_PARAM; + +typedef void (CALLBACK *DATADOWNLOAD)(LONG nDownloadHandle, DWORD dwDataType, void* pBuffer, DWORD dwBufSize, void *pUser); +typedef struct tagNET_DVR_ALARMHOST_PARAM +{ + DWORD dwSize; + BYTE byDownType; /*下载的数据保存方式,1-根据文件名绝对地址保存数据, 2-通过回调函数获取数据*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:下载语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) + BYTE byRes1; + char sFileName[260]; //数据文件的全路径 + DATADOWNLOAD lpDataCallBack; //下载时的回调函数句柄 + void* pUserData; //用户数据,将在回调函数中传回 + BYTE byRes2[128]; +}NET_DVR_DOWNLOAD_PARAM, *LPNET_DVR_DOWNLOAD_PARAM; + + +typedef struct tagNET_DVR_ALARMHOST_DOWNLOAD_PARAM +{ + DWORD dwSize; + BYTE byDownType; /*下载的数据保存方式,1-根据文件名绝对地址保存数据, 2-通过回调函数获取数据*/ + BYTE byDataType; //数据类型:1-音频数据 + BYTE byDataNum; //数据编号,如:下载语音,则该参数表示语音号,增加三条语音号(晕倒、多人、人脸遮挡) + BYTE byRes1; + char sFileName[260]; //数据文件的全路径 + DATADOWNLOAD lpDataCallBack; //下载时的回调函数句柄 + void* pUserData; //用户数据,将在回调函数中传回 + BYTE byRes2[128]; +}NET_DVR_ALARMHOST_DOWNLOAD_PARAM, *LPNET_DVR_ALARMHOST_DOWNLOAD_PARAM; + +//LED屏幕参数 +typedef struct tagNET_DVR_LED_SCREEN_CFG +{ + DWORD dwSize; + BYTE sLEDName[NAME_LEN/*32*/]; // LED屏幕名称 + BYTE byTransMode; // 现只支持串口通讯 1-串口通信 + BYTE byProtocolType; // 协议类型,对应LED屏的厂家 + BYTE byLEDColor; // 1-单色, 2-双色, 3-256级灰度双基色, 4- 全彩色(目前只用单色) + BYTE byDataPolarity; // 数据极性 .0-负极,1-正极 + BYTE byOEPolarity; // 0-低有效 1-高有效 + BYTE byScanMode; // 1-1/16, 2-1/8, 3-1/4, 4-1/2, 5-静态 + BYTE byRes1[2]; + //屏幕宽度和高度最小是16*16点,间隔是8个点 + WORD wLEDWidth; // 16~2048 + WORD wLEDHeight; // 16~2048 + BYTE byRes2[64]; +}NET_DVR_LED_SCREEN_CFG, *LPNET_DVR_LED_SCREEN_CFG; + +//LED屏显内容 +#define MAX_CONTENT_LEN 512 +typedef struct tagNET_DVR_LED_CONTENT_CFG +{ + DWORD dwSize; + BYTE sLEDContent[MAX_CONTENT_LEN]; // LED屏幕显示内容 + BYTE byContentAct; // 1-静态,2-快速打出,3-向左移动,4-向右移动, 5-向上移动, 6-向下移动 + BYTE byContentSpeed; // 1-24(1最快,24最慢) + BYTE byContentStayTime; // 0-127.5s(精度0.5s, SDK传送时候*2,即传送数值0-255,设备端在使用的时候需除以2) + BYTE byRes[33]; +}NET_DVR_LED_CONTENT_CFG, *LPNET_DVR_LED_CONTENT_CFG; + +//LED定时开关机 +#define LED_TIMER_NUM 3 // LED开机、关机时间组数 +#define TIME_SEGMENT_A_DAY 48 // 时间段个数,一天24小时,半小时一个段 + +typedef struct tagNET_DVR_SWITCH_TIME +{ + BYTE byValid; // 该组定时时间是否有效,时间是成对设置的 + BYTE byRes[3]; + NET_DVR_TIME_EX struTimeOn; // 开机时间 + NET_DVR_TIME_EX struTimeOff; // 关机时间 +}NET_DVR_SWITCH_TIME, *LPNET_DVR_SWITCH_TIME; + + +typedef struct tagNET_DVR_LED_SWITCH_TIME +{ + DWORD dwSize; + NET_DVR_SWITCH_TIME struTimer[LED_TIMER_NUM /*3*/]; //定时开关机时间,结构体中只有小时和分钟两个参数有效,每组开机时间要早于该组的关机时间,但比前一组的关机时间要晚,例如:struTimer[0]的关机时间是10:00那么,struTimer[0]的开机时间须设置为10:00之前, struTimer[1]的开机时间须设置为10::00以后。 + BYTE byRes[64]; +}NET_DVR_LED_SWITCH_TIME, *LPNET_DVR_LED_SWITCH_TIME; + +//分时亮度调节 +typedef struct tagNET_DVR_LED_BRIGHTNESS_STEP +{ + DWORD dwSize; + BYTE byValid; //分时亮度调节是否有效 + BYTE byRes1[3]; + BYTE byBrightnessStep[TIME_SEGMENT_A_DAY /*48*/]; //将全天24个小时分为48个时段,每30分钟一个时段,用48个字节表示每个时段的亮度级别,亮度共16级,用0~15表示。 + BYTE byRes2[48]; +}NET_DVR_LED_BRIGHTNESS_STEP, *LPNET_DVR_LED_BRIGHTNESS_STEP; + +typedef struct tagNET_DVR_LED_STATUS +{ + DWORD dwSize; + BYTE bySwitchState; //1-开机状态 2-关机状态 + BYTE byBrightness; //亮度值,范围0-15 + BYTE byRes[62]; +}NET_DVR_LED_STATUS, *LPNET_DVR_LED_STATUS; + +//2010-12-28 高清解码卡能力集 begin +//新的解码卡服务器能力集 +#define MAX_DECODE_CARD_NUM 6 //最多高清解码卡数 +/********************高清解码卡输出模式宏定义********************/ +typedef enum _HD_DISPLAY_FORMAT +{ + HD_DISPLAY_FORMAT_INVALID = 0x00000000, + HD_DISPLAY_FORMAT_CVBS = 0x00000001, + HD_DISPLAY_FORMAT_DVI = 0x00000002, + HD_DISPLAY_FORMAT_VGA = 0x00000004, + HD_DISPLAY_FORMAT_HDMI = 0x00000008, + HD_DISPLAY_FORMAT_YPbPr = 0x00000010 +}HD_DISPLAY_FORMAT,*LPHD_DISPLAY_FORMAT; + +/********************高清解码卡输出模式宏定义********************/ +typedef struct tagNET_DVR_DECCARD_ABILITY /*高清解码卡能力集*/ +{ + BYTE byCardType; //解码卡类型(0:MD,1:MD+,2:HD) + BYTE byDecNums; //解码通道数 + BYTE byDispNums; //显示通道数 + BYTE byDecStartIdx; //首个解码通道在所有解码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 + BYTE byDispResolution[80]; //输出模式支持的分辨率 + BYTE byDispFormat[8]; //支持的输出模式(按HD_DISPLAY_FORMAT) + BYTE byWindowMode[4][8]; //支持的窗口模式(比如1,2,4,9,16)) + BYTE byRes[35]; +} NET_DVR_DECCARD_ABILITY,*LPNET_DVR_DECCARD_ABILITY; + +typedef struct tagNET_DVR_DECODESVR_ABILITY +{ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 解码卡数 */ + BYTE byStartChan; /* 起始通道号 */ + BYTE byRes1[2]; + NET_DVR_DECCARD_ABILITY struDecCardAbility[MAX_DECODE_CARD_NUM]; + BYTE byRes2[64]; +}NET_DVR_DECODESVR_ABILITY, *LPNET_DVR_DECODESVR_ABILITY; + +typedef struct tagNET_MATRIX_DEV_CHAN_INFO +{ + NET_DVR_IPADDR struIP; //DVR IP地址 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byUsedSlotNum; //是否使用槽位号,0-不使用,1-使用 + BYTE bySlotNum;//槽位号 + BYTE byRes[68]; + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 +}NET_MATRIX_DEV_CHAN_INFO,*LPNET_MATRIX_DEV_CHAN_INFO; + +typedef struct tagNET_MATRIX_PU_STREAM_CFG +{ + DWORD dwSize; + NET_DVR_STREAM_MEDIA_SERVER_CFG struStreamMediaSvrCfg; + NET_MATRIX_DEV_CHAN_INFO struDevChanInfo; +} NET_MATRIX_PU_STREAM_CFG,LPNET_MATRIX_PU_STREAM_CFG; + +/*camera配置单元结构*/ +typedef struct tagNET_DVR_MATRIX_CAMERACFG +{ + DWORD dwGlobalIndex;//全局编号 + DWORD dwInterIndex;//局部编号 + BYTE sCamName[NAME_LEN]; + NET_MATRIX_PU_STREAM_CFG struPuStreamCfg; +} NET_DVR_MATRIX_CAMERACFG,*LPNET_DVR_MATRIX_CAMERACFG; + +typedef struct tagNET_DVR_MATRIX_CAMERALIST +{ + DWORD dwSize; + BYTE byRes[12]; + DWORD dwCamNum;//CAM数量 + BYTE *pBuffer; + DWORD dwBufLen;//所分配指针长度,输入参数 +} NET_DVR_MATRIX_CAMERALIST,*LPNET_DVR_MATRIX_CAMERALIST; + +typedef struct tagNET_DVR_DISP_CHAN_INFO +{ + NET_DVR_IPADDR struIP; /* 解码器 IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byDispChannel; /* 显示通道号 */ + BYTE byUsedSlotNum; //是否使用槽位号,0-使用,1-不使用 + BYTE bySlotNum;//槽位号 + BYTE byRes[7]; + BYTE sUserName[NAME_LEN]; /*登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /*密码 */ +}NET_DVR_DISP_CHAN_INFO,*LPNET_DVR_DISP_CHAN_INFO; + +/*monitor配置单元结构*/ +typedef struct tagNET_DVR_MATRIX_MONITORCFG +{ + DWORD dwGlobalIndex;//全局编号 + DWORD dwInterIndex; + BYTE sMonName[NAME_LEN]; + NET_DVR_DISP_CHAN_INFO struDispChanCfg; +} NET_DVR_MATRIX_MONITORCFG,*LPNET_DVR_MATRIX_MONITORCFG; + +typedef struct tagNET_DVR_MATRIX_MONITORLIST +{ + DWORD dwSize; + BYTE byRes[12]; + DWORD dwMonNum;//MON数量 + BYTE *pBuffer; + DWORD dwBufLen;//所分配指针长度,输入参数 +} NET_DVR_MATRIX_MONITORLIST,*LPNET_DVR_MATRIX_MONITORLIST; + +#define MAX_SUBMATRIX_NUM 8//级联中子最多从系统数量 +typedef struct tagNET_DVR_SUBMATRIXINFO +{ + BYTE byMainMatrix;//是否是主系统,1-是,0-否 + BYTE bySubMatrixSequence;//级联子视频综合平台系统序号 + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 + BYTE byRes1[9]; + NET_DVR_IPADDR struSubMatrixIP; /*IP地址(可修改)*/ + WORD wSubMatrixPort; /*子系统端口号(可修改)*/ + BYTE byRes2[6]; + NET_DVR_IPADDR struSubMatrixIPMask; /*IP地址掩码*/ + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码 (此参数只能获取)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) + BYTE byRes3[16]; +}NET_DVR_SUBMATRIXINFO, *LPNET_DVR_SUBMATRIXINFO; + +typedef struct tagNET_DVR_ALLUNITEDMATRIXINFO +{ + DWORD dwSize; + NET_DVR_SUBMATRIXINFO struSubMatrixInfo[MAX_SUBMATRIX_NUM]; + BYTE byRes2[32]; +}NET_DVR_ALLUNITEDMATRIXINFO, *LPNET_DVR_ALLUNITEDMATRIXINFO; + +#define MAX_GATEWAYTRUNKNUM 1024 //级联视频综合平台中最大路由干线数 + +typedef struct tagNET_DVR_MATRIXGATEWAYNOTE +{ + WORD wTrunkInToOutAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + WORD wTrunkOutToInAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1,双向光纤时用到此值 + BYTE byRes[4]; + NET_DVR_MATRIXSUBSYSTEMINFO struInputNote; + NET_DVR_MATRIXSUBSYSTEMINFO struOutputNote; +}NET_DVR_MATRIXGATEWAYNOTE, *LPNET_DVR_MATRIXGATEWAYNOTE; + +typedef struct tagNET_DVR_MATRIXGATEWAYINFO +{ + DWORD dwSize; + NET_DVR_MATRIXGATEWAYNOTE struGatewayNote[MAX_GATEWAYTRUNKNUM]; + BYTE byRes [32]; +}NET_DVR_MATRIXGATEWAYINFO, *LPNET_DVR_MATRIXGATEWAYINFO; + +typedef struct tagNET_DVR_MATRIXCODESYSTEMINFO +{ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 + BYTE byChan;//编码通道 + BYTE byRes [13]; +}NET_DVR_MATRIXCODESYSTEMINFO,*LPNET_DVR_MATRIXCODESYSTEMINFO; +typedef struct tagNET_DVR_MATRIXDECODESYSTEMINFO +{ + BYTE byMatrixNum;//视频综合平台号 + BYTE bySubSystemNum;//子系统槽位号 + BYTE byDispChan;//显示通道 + BYTE bySubDispChan;//显示通道子通道号 + BYTE byRes [12]; +}NET_DVR_MATRIXDECODESYSTEMINFO,*LPNET_DVR_MATRIXDECODESYSTEMINFO; + +typedef struct tagNET_DVR_MATRIXSWITCH +{ + NET_DVR_MATRIXCODESYSTEMINFO struInputNote; + NET_DVR_MATRIXDECODESYSTEMINFO struOutputNote; + BYTE byRes[32]; +}NET_DVR_MATRIXSWITCH, *LPNET_DVR_MATRIXSWITCH; + +typedef enum { + ENC_CARD = 0, + DEC_CARD, + SD_DEC_CARD, + FPGA_CARD, + CS_CARD, + ALERTOR_CARD, + NAT_0, + NAT_1, + VCA_CARD, + VGA_DEC_CARD, + VGA_ENC_CARD, + ERR_CARD, +} DEV_TYPE; + +typedef struct tagNET_DVR_MATRIXSWITCHCTRL +{ + DWORD dwCamId;//摄像机全局编号 + DWORD dwMonId;//显示器全局编号 + BYTE bySubWindowNum;//显示器对应子窗口号 + BYTE bySwitchType;/*切换类型,0:正常切换,1:报警触发切换,2:报警取消,0xff:表示此MON上所有报警全部取消*/ + WORD wAlarmType;//报警设备类型,1:报警主机,2:智能设备 + DWORD dwResidentTime;/* 显示驻留时间,0xFFFFFFFF 时 为常驻情况,保持显示*/ + BYTE byVcaDevType;//当报警设备类型是"智能设备"时,按DEV_TYPE类型 + BYTE byWallNo;//墙号 + BYTE byRes[18]; +}NET_DVR_MATRIXSWITCHCTRL, *LPNET_DVR_MATRIXSWITCHCTRL; + +typedef struct tagNET_DVR_MATRIXDATABASE +{ + //配置文件类型,1-域数据库配置文件,2-子域数据库配置文件,3-平台数据库配置文件,4-场景配置文件,0xff最后一次失败的数据库语句 + DWORD dwDevType; + DWORD dwParam; //参数,代表域号、子域号、平台号,场景配置文件时此值无用 + BYTE byFileType;//文件类型,1-sql语句,2-db语句,3-场景配置文件 + BYTE byRes [3]; +} NET_DVR_MATRIXDATABASE, *LPNET_DVR_MATRIXDATABASE; + +typedef struct tagNET_DVR_SUBSYSTEMINFO_V40 +{ +/*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统, + 9-V6子系统,10-转码子系统,11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板,14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-音频子系统,0-NULL(此参数只能获取)*/ + BYTE bySubSystemType; + //子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) + BYTE byChan; + BYTE byLoginType;//注册类型,1-直连,2-DNS,3-花生壳 + BYTE bySlotNum ;//槽位号,此参数只能获取 + BYTE byRes1[4]; + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + WORD wSubSystemPort; //子系统端口号(可修改) + BYTE byRes2[6]; + BYTE sUserName[NAME_LEN]; /* 用户名 (此参数只能获取)*/ + BYTE sPassword[PASSWD_LEN]; /*密码(可修改)*/ + char sDomainName[MAX_DOMAIN_NAME];//域名(可修改) + char sDnsAddress[MAX_DOMAIN_NAME];/*DNS域名或IP地址*/ + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) + BYTE byBelongBoard;//所属子板号,从1开始,0xff表示无效 + BYTE byInterfaceType;//接口类型,0-无类型,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,10-3GSDI, 11-VGA/DVI自适应,12-HDTVI,13-HDBaseT,14-DP,15-DVIT,16-TVI,17-VSCREEN,18-miniDP,0xff-无效 + BYTE byInterfaceNums;//接口个数,0xff表示无效 + BYTE byInterfaceStartNum;//接口起始号,0xff表示无效 + BYTE byDeviceName[20];//子系统名称 + BYTE byAudioChanNums; //音频通道个数 + BYTE byAudioChanStartNum; //音频通道起始号 + BYTE byAudioChanType;//音频通道类型,0-无效,1-音频输入,2-音频输出 + BYTE byRes3[33]; +}NET_DVR_SUBSYSTEMINFO_V40, *LPNET_DVR_SUBSYSTEMINFO_V40; + +#define MAX_SUBSYSTEM_NUM_V40 120 +typedef struct tagNET_DVR_ALLSUBSYSTEMINFO_V40 +{ + DWORD dwSize; + NET_DVR_SUBSYSTEMINFO_V40 struSubSystemInfo[MAX_SUBSYSTEM_NUM_V40]; + BYTE byRes[8]; +}NET_DVR_ALLSUBSYSTEMINFO_V40, *LPNET_DVR_ALLSUBSYSTEMINFO_V40; + +typedef struct tagNET_DVR_SUBSYSTEM_BASIC_INFO +{ + DWORD dwSize; + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-Fpga解码子系统,9-Fpga子系统,10-转码子系统,11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板, 14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-信号接入子系统,0-NULL(此参数只能获取)*/ + BYTE bySubSystemType; + //子系统通道数,对于码分子系统,代表485串口数量(此参数只能获取) + BYTE bySubSystemNo;//子系统号,此参数只能获取 + BYTE byInterfaceType;//接口类型,0-无类型,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YprPb, 9-VGA/HDMI/DVI自适应,10-3GSDI, 11-VGA/DVI自适应,12-HDTVI,13-HDBaseT,14-DP,15-DVIT,0xff-无效 + BYTE byRes1; + DWORD dwChan; + NET_DVR_IPADDR struSubSystemIP; /*IP地址(可修改)*/ + NET_DVR_IPADDR struSubSystemIPMask;//子网掩码 + NET_DVR_IPADDR struGatewayIpAddr; /* 网关地址 */ + WORD wSubSystemPort; //子系统端口号(可修改) + BYTE byRes2[6]; + BYTE sSerialNumber[SERIALNO_LEN];//序列号(此参数只能获取) + BYTE byBelongBoard;//所属子板号,从1开始,0xff表示无效,但当byBelongBoardH不为0时该字段可以为0xff + BYTE byBelongBoardH; //所属子板号高位 + BYTE byRes3[2]; + BYTE byDeviceName[20];//子系统名称 + DWORD dwStartChanNo;//起始通道号 + BYTE byDevNo; //设备号 + BYTE byRes4[63]; +}NET_DVR_SUBSYSTEM_BASIC_INFO, *LPNET_DVR_SUBSYSTEM_BASIC_INFO; + +typedef struct NET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE +{ + DWORD dwSize; + DWORD dwErrorCode; //错误 + BYTE byDevNo; //设备号 + BYTE bySubSystemNo;//子系统号 + BYTE byRes[30]; +} NET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE,*LPNET_DVR_SUBSYSTEM_BASIC_INFO_RESPONSE; + +typedef struct NET_DVR_CAMERA_INFO_RESPONSE +{ + DWORD dwErrorCode; //错误 + DWORD dwCamId; /*cam 的统一编号*/ + BYTE byRes[4]; +} NET_DVR_CAMERA_INFO_RESPONSE,*LPNET_DVR_CAMERA_INFO_RESPONSE; + +typedef struct NET_DVR_MONITOR_INFO_RESPONSE +{ + DWORD dwErrorCode; //错误 + DWORD dwMonId; /*mon 的统一编号*/ + BYTE byRes[4]; +} NET_DVR_MONITOR_INFO_RESPONSE, *LPNET_DVR_MONITOR_INFO_RESPONSE; + +typedef struct tagNET_DVR_AUDIO_INFO +{ + DWORD dwSize; + BYTE byAudioChanType;//音频通道类型,1-音频输入,2-音频输出 + BYTE byRes1[3]; + DWORD dwAudioNo; //音频号(1字节设备号+1字节子板号+2字节音频口号) + BYTE byRes2[16]; +}NET_DVR_AUDIO_INFO, *LPNET_DVR_AUDIO_INFO; + + +typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO_V40 +{ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统,0-NULL(此参数只能获取)*/ + BYTE bySubSystemType; + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,0~79,子系统类型是3或4时可用 + NET_DVR_DECSUBSYSTEMJIONSTATUS struDecSub [MATRIX_MAXDECSUBSYSTEMCHAN]; + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) + BYTE bySlotNum ;//槽位号,此参数只能获取 + //子系统类型为1的时可用,0-未关联,1-D1,2-720,3-1080 + BYTE byDecodeAbility; + BYTE byUsedTrunk; + BYTE byRes[64]; +}NET_DVR_SINGLESUBSYSTEMJOININFO_V40,LPNET_DVR_SINGLESUBSYSTEMJOININFO_V40; + +typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO_V40 +{ + DWORD dwSize; + NET_DVR_SINGLESUBSYSTEMJOININFO_V40 struSingleSubSystemJoinInfo[MAX_SUBSYSTEM_NUM_V40]; + BYTE byRes[48]; +}NET_DVR_ALLDECSUBSYSTEMJOININFO_V40, *LPNET_DVR_ALLDECSUBSYSTEMJOININFO_V40; + +#define MAX_OPTICALFIBER_NUM 16 +typedef struct tagNET_DVR_SUBSYSTEM_ABILITY +{ +/*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统, + 10-转码子系统,11-X86服务器子系统,板, 14- X86业务服务板,15-多相机拼接子系统, 16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,0-NULL(此参数0-NULL(此参数只能获取)*/ + BYTE bySubSystemType; + BYTE byChanNum;//子系统通道数 + BYTE byStartChan;//子系统起始通道数 + BYTE bySlotNum ;//槽位号 + BYTE byRes1[4]; + union + { + BYTE byRes[200]; + struct + { + BYTE byDecode; //是否是带解码功能的智能板,1-是,0-否 + BYTE byNeedPreAllocDec; //是否需要预分配解码资源,1-是,0-否 + BYTE byVACType; //智能子系统类型,0-普通型,1-增强型 + BYTE byRes[197]; + }struVACSystemAbility; + struct + { + BYTE byVGANums;//VGA显示通道个数(从1开始) + BYTE byBNCNums;//BNC显示通道个数(从9开始) + BYTE byHDMINums;//HDMI显示通道个数(从25开始) + BYTE byDVINums;//DVI显示通道个数(从29开始) + BYTE byLayerNums ;//大屏拼接中,做主屏时所支持图层数 + BYTE bySpartan;//畅显功能,0-不支持,1-支持 + BYTE byDecType; //解码子系统类型,0-普通型,1-增强型(普通型分屏时前4窗口需使用自身资源,增强型无此限制,增强型最多可被其他子系统借16路D1解码资源 + //增强型被大屏关联为子屏后资源可被借用,普通型则不能被借用) + //2-智能关联解码子系统,3-转码关联解码子系统(智能和转码关联子系统不能用于解码上墙) + BYTE byOutputSwitch;//是否支持HDMI/DVI互相切换,0-不支持,1-支持 + BYTE bySDINums;//SDI显示通道个数(从33开始) + BYTE byRes1[38]; + BYTE byDecoderType ; //解码板是否支持多厂家码流解码,0-不支持,1-支持 + BYTE byRes2[152]; + }struDecoderSystemAbility; + struct + { + BYTE byCoderType;//编码器类型,0-标清,1-高清, 2-模拟高清 + BYTE byOptical;//光端机接入,0-否,1-是 + BYTE byOpticalSubChan; //每个光口信道数 + BYTE bySupportAVSeparate;//是否支持音视频分离,0-不支持,1-支持 + BYTE byRes[196]; + }struCoderSystemAbility; + struct + { + WORD wTrunkAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + BYTE byOpticalFiberNum;//光纤条数 + BYTE byRes[197]; + }struInputSystemAbility; + struct + { + WORD wTrunkAbility;//干线带宽,按D1的标准衡量,如4表示支持4个D1 + BYTE byOpticalFiberNum;//光纤条数 + BYTE byRes[197]; + }struOutputSystemAbility; + struct + { + BYTE by485Num;//码分子系统中485数量 + BYTE bySlotNum;//每个485槽位数 + BYTE byRes[198]; + }struCodeSpitterSystemAbility; + struct + { + WORD wAlarmInNums; + WORD wAlarmOutNums; + /* 标识报警盒是否连接, 1表示已连接, 为0 表示未连接 */ + BYTE byAlarmBoxEnable[4][8]; + BYTE bySupportContact; /* 视频综合平台内部报警联动,0-不支持,1-支持 */ + BYTE byRes[163]; + }struAlarmHostSystemAbility; + struct + { + BYTE byOpticalFiberNum;//光纤条数 + BYTE byRes1[3]; + //光纤带宽,按D1的标准衡量,如4表示支持4个D1 + WORD wTrunkAbility[MAX_OPTICALFIBER_NUM/*16*/]; + BYTE byRes2[164]; + }struInOutputSystemAbility; + struct + { + BYTE bySupportRingProtocol; //是否支持环网协议 + BYTE bySupportRingNums; //支持环网数量 + BYTE bySupportPortNums; //支持的端口数量 + BYTE byRes[1]; + DWORD dwPortSupportRingProto; //每个端口是否支持环网协议,按位算,1~32位分别表示1~32端口,0-不支持,1-表示支持 + BYTE byRes2[192]; + } struFiberSwitchSystemAbility; + }struAbility; +}NET_DVR_SUBSYSTEM_ABILITY, *LPNET_DVR_SUBSYSTEM_ABILITY; + +typedef struct tagNET_DVR_VIDEOPLATFORM_ABILITY_V40 +{ + DWORD dwSize; + BYTE byCodeSubSystemNums;//编码子系统数量 + BYTE byDecodeSubSystemNums;//解码子系统数量 + BYTE bySupportNat;//是否支持NAT,0-不支持,1-支持 + BYTE byInputSubSystemNums;//级联输入子系统数量 + BYTE byOutputSubSystemNums;//级联输出子系统数量 + BYTE byCodeSpitterSubSystemNums;//码分子系统数量 + BYTE byAlarmHostSubSystemNums;//报警子系统数量 + BYTE bySupportBigScreenNum;//所支持最多组成大屏的个数 + BYTE byVCASubSystemNums;//智能子系统数量 + BYTE byV6SubSystemNums;//V6子系统数量 + BYTE byV6DecoderSubSystemNums;//V6解码子系统数量 + BYTE bySupportBigScreenX;/*大屏拼接的模式:m×n*/ + BYTE bySupportBigScreenY; + BYTE bySupportSceneNums;//支持场景模式的个数 + BYTE byVcaSupportChanMode;//智能支持的通道使用模式,0-使用解码通道,1-使用显示通道及子通道号 + BYTE bySupportScreenNums;//所支持的大屏的屏幕最大个数 + BYTE bySupportLayerNums;//所支持的图层数,0xff-无效 + BYTE byNotSupportPreview;//是否支持预览,1-不支持,0-支持 + BYTE byNotSupportStorage;//是否支持存储,1-不支持,0-支持 + BYTE byUploadLogoMode;//上传logo模式,0-上传给解码通道,1-上传给显示通道 + NET_DVR_SUBSYSTEM_ABILITY struSubSystemAbility[MAX_SUBSYSTEM_NUM_V40]; + BYTE by485Nums;//485串口个数 + BYTE by232Nums;//232串口个数 + BYTE bySerieStartChan;//起始通道 + BYTE byScreenMode;//大屏模式,0-主屏由客户端分配,1-主屏由设备端分配 + BYTE byDevVersion;//设备版本,0-B10/B11/B12,1-B20 + BYTE bySupportBaseMapNums;//所支持的底图数,底图号从1开始 + WORD wBaseLengthX;//每个屏大小的基准值,B20使用 + WORD wBaseLengthY; + BYTE bySupportPictureTrans; //是否支持图片回显,0-不支持,1-支持 + BYTE bySupportPreAllocDec; //是否支持智能解码资源预分配,0-不支持,1-支持 + BYTE bySupportDecAutoManage; //是否支持解码资源管理 + BYTE byTranDevSubSystemNums; //转码子系统数量 + BYTE byFiberSwitchNums; //网络光纤子系统数量 + BYTE byRes2[625]; +}NET_DVR_VIDEOPLATFORM_ABILITY_V40, *LPNET_DVR_VIDEOPLATFORM_ABILITY_V40; + +typedef struct tagNET_DVR_VIDEOPLATFORM_ABILITY +{ + DWORD dwSize; + BYTE byCodeSubSystemNums;//编码子系统数量 + BYTE byDecodeSubSystemNums;//解码子系统数量 + BYTE bySupportNat;//是否支持NAT,0-不支持,1-支持 + BYTE byInputSubSystemNums;//级联输入子系统数量 + BYTE byOutputSubSystemNums;//级联输出子系统数量 + BYTE byCodeSpitterSubSystemNums;//码分子系统数量 + BYTE byAlarmHostSubSystemNums;//报警子系统数量 + BYTE bySupportBigScreenNum;//所支持最多大屏拼接数量 + BYTE byVCASubSystemNums;//智能子系统数量 + BYTE byRes1[11]; + NET_DVR_SUBSYSTEM_ABILITY struSubSystemAbility[MAX_SUBSYSTEM_NUM]; + BYTE by485Nums;//485串口个数 + BYTE by232Nums;//485串口个数 + BYTE bySerieStartChan;//起始通道 + BYTE byRes2[637]; +}NET_DVR_VIDEOPLATFORM_ABILITY, *LPNET_DVR_VIDEOPLATFORM_ABILITY; +//获取能力集接口 + +//模式A +typedef struct tagNET_DVR_HOLIDATE_MODEA +{ + BYTE byStartMonth; // 开始月 从1开始 + BYTE byStartDay; // 开始日 从1开始 + BYTE byEndMonth; // 结束月 + BYTE byEndDay; // 结束日 + BYTE byRes[4]; // 保留字节 +}NET_DVR_HOLIDATE_MODEA, *LPNET_DVR_HOLIDATE_MODEA; + +typedef struct tagNET_DVR_HOLIDATE_MODEB +{ + BYTE byStartMonth; // 从1开始 + BYTE byStartWeekNum; // 第几个星期 从1开始 + BYTE byStartWeekday; // 星期几 + BYTE byEndMonth; // 从1开始 + BYTE byEndWeekNum; // 第几个星期 从1开始 + BYTE byEndWeekday; // 星期几 + BYTE byRes[2]; // 保留字节 +}NET_DVR_HOLIDATE_MODEB, *LPNET_DVR_HOLIDATE_MODEB; + +typedef struct tagNET_DVR_HOLIDATE_MODEC +{ + WORD wStartYear; // 年 + BYTE byStartMon; // 月 + BYTE byStartDay; // 日 + WORD wEndYear; // 年 + BYTE byEndMon; // 月 + BYTE byEndDay; // 日 +}NET_DVR_HOLIDATE_MODEC, *LPNET_DVR_HOLIDATE_MODEC; + +typedef union tagNET_DVR_HOLIDATE_UNION +{ + // 联合体大小 12字节 + DWORD dwSize[3]; + NET_DVR_HOLIDATE_MODEA struModeA; // 模式A + NET_DVR_HOLIDATE_MODEB struModeB; // 模式B + NET_DVR_HOLIDATE_MODEC struModeC; // 模式C +}NET_DVR_HOLIDATE_UNION, *LPNET_DVR_HOLIDATE_UNION; + +typedef enum tagHOLI_DATE_MODE +{ + HOLIDATE_MODEA = 0, + HOLIDATE_MODEB, + HOLIDATE_MODEC +}HOLI_DATE_MODE; + +typedef struct tagNET_DVR_HOLIDAY_PARAM +{ + BYTE byEnable; // 是否启用 + BYTE byDateMode; // 日期模式 0-模式A 1-模式B 2-模式C + BYTE byRes1[2]; // 保留字节 + NET_DVR_HOLIDATE_UNION uHolidate; // 假日日期 + BYTE byName[NAME_LEN]; // 假日名称 + BYTE byRes2[20]; // 保留字节 +}NET_DVR_HOLIDAY_PARAM, *LPNET_DVR_HOLIDAY_PARAM; + +#define MAX_HOLIDAY_NUM 32 + +typedef struct tagNET_DVR_HOLIDAY_PARAM_CFG +{ + DWORD dwSize; // 结构体大小 + NET_DVR_HOLIDAY_PARAM struHolidayParam[MAX_HOLIDAY_NUM]; // 假日参数 + DWORD byRes[40]; // 保留参数 +}NET_DVR_HOLIDAY_PARAM_CFG, *LPNET_DVR_HOLIDAY_PARAM_CFG; + +// 假日报警处理方式 +typedef struct tagNET_DVR_HOLIDAY_HANDLE +{ + DWORD dwSize; // 结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_TIMESEGMENT_V30]; // 布防时间段 + BYTE byRes2[240]; // 保留字节 +}NET_DVR_HOLIDAY_HANDLE, *LPNET_DVR_HOLIDAY_HANDLE; + +typedef struct tagNET_DVR_HOLIDAY_HANDLE_COND +{ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + DWORD dwSMDHandleType; //简易智能假日布防类型 0-音频异常侦测,1-虚焦侦测,2-场景变更侦测 + BYTE byRes2[32]; // 保留字节 +}NET_DVR_HOLIDAY_HANDLE_COND, *LPNET_DVR_HOLIDAY_HANDLE_COND; + +typedef struct tagNET_DVR_HOLIDAY_RECORD +{ + DWORD dwSize; + NET_DVR_RECORDDAY struRecDay; // 录像参数 + NET_DVR_RECORDSCHED struRecordSched[MAX_TIMESEGMENT_V30]; // 录像时间段 + BYTE byRes[20]; // 保留字节 +}NET_DVR_HOLIDAY_RECORD, *LPNET_DVR_HOLIDAY_RECORD; + +#define MAX_LINK_V30 128 + +typedef struct tagNET_DVR_ONE_LINK +{ + NET_DVR_IPADDR struIP; // 客户端IP + LONG lChannel; // 通道号 + BYTE byRes[32]; // 保留字节 +}NET_DVR_ONE_LINK, *LPNET_DVR_ONE_LINK; + +typedef struct tagNET_DVR_LINK_STATUS +{ + DWORD dwSize; // 结构体大小 + WORD wLinkNum; // 连接的数目 + BYTE byRes1[2]; // 保留字节 + NET_DVR_ONE_LINK struOneLink[MAX_LINK_V30]; // 连接的客户端信息 + BYTE byRes[32]; // 保留字节 +}NET_DVR_LINK_STATUS, *LPNET_DVR_LINK_STATUS; + +#define MAX_BOND_NUM 2 + +typedef struct tagNET_DVR_ONE_BONDING +{ + BYTE byMode; // 工作模式0 - 网络容错 1 - 负载均衡 + BYTE byUseDhcp; // 是否使能dhcp + BYTE byMasterCard; // 指定哪张网卡为主网卡 + BYTE byStatus; // BONDING的状态 0 - 异常 1-正常 只能获取不能设置 + BYTE byBond[MAX_NETWORK_CARD];// byBond[0]== 1 表示使用eh0 0表示不使用eh0 + NET_DVR_ETHERNET_V30 struEtherNet; // 网卡参数 + NET_DVR_IPADDR struGatewayIpAddr; // 网关地址 + BYTE byEnableDNS; //DNS使能, 0-关闭,1-打开 + BYTE byBondMode; //绑定方式, 0-无效,1-主备模式,2-轮转模式,3-XOR模式,4-广播模式,5-802.3ad模式,6-T1b模式,7-虚拟化模式 + BYTE byRes1[2]; + BYTE byBond2[MAX_NETWORK_CARD_EX/*12*/];// byBond2[0]== 1 表示使用eh4 0表示不使用eh4,基于byBond扩展 + BYTE byRes[4];// 保留字节 +}NET_DVR_ONE_BONDING, *LPNET_DVR_ONE_BONDING; + +typedef struct tagNET_DVR_NETWORK_BONDING +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; // 是否启用bonding功能 + BYTE byNum; // Bonding网卡的个数 + BYTE byRes1[2]; // 保留字节 + NET_DVR_ONE_BONDING struOneBond[MAX_BOND_NUM]; + BYTE byRes2[40]; // 保留字节 +}NET_DVR_NETWORK_BONDING, *LPNET_DVR_NETWORK_BONDING; + + +// 磁盘配额 +typedef struct tagNET_DVR_DISK_QUOTA +{ + BYTE byQuotaType; // 磁盘配额类型,1 - 按容量 2-按比例,3-按时间 + BYTE byRes1[5]; // 保留字节 + WORD wStoragePeriod; //录像存储周期,单位天,配额类型为按时间时有效 + DWORD dwHCapacity; // 分配的磁盘容量高32位 单位MB + DWORD dwLCapacity; // 分配的磁盘容量低32位 单位MB + DWORD dwHUsedSpace; // 已使用的磁盘大小高32位 单位MB + DWORD dwLUsedSpace; // 已使用的磁盘大小低32位 单位MB + BYTE byQuotaRatio; // 分配的磁盘比例,单位:% + BYTE byRes2[21]; // 保留字节 +}NET_DVR_DISK_QUOTA, *LPNET_DVR_DISK_QUOTA; + +typedef struct tagNET_DVR_DISK_QUOTA_CFG +{ + DWORD dwSize; // 结构体大小 + NET_DVR_DISK_QUOTA struPicQuota; // 图片配额 + NET_DVR_DISK_QUOTA struRecordQuota; // 录像配额 + NET_DVR_DISK_QUOTA struAddInfoQuota; // 附加信息配额 (用于云存储服务器,目前支持的附加信息有:热度图、客流量) + BYTE byRes[12]; //保留字节 +}NET_DVR_DISK_QUOTA_CFG, *LPNET_DVR_DISK_QUOTA_CFG; + +typedef struct tagNET_DVR_DISK_QUOTA_V60 +{ + BYTE byQuotaType; // 磁盘配额类型,1 - 按容量 2-按比例,3-按时间 + BYTE byRes1[5]; // 保留字节 + WORD wStoragePeriod; //录像存储周期,单位天,配额类型为按时间时有效 + DWORD dwHCapacity; // 分配的磁盘容量高32位 单位MB + DWORD dwLCapacity; // 分配的磁盘容量低32位 单位MB + DWORD dwHUsedSpace; // 已使用的磁盘大小高32位 单位MB + DWORD dwLUsedSpace; // 已使用的磁盘大小低32位 单位MB + BYTE byQuotaRatio; // 分配的磁盘比例,单位:% + BYTE byRes2[23]; // 保留字节 +}NET_DVR_DISK_QUOTA_V60, *LPNET_DVR_DISK_QUOTA_V60; + +typedef struct tagNET_DVR_DISK_QUOTA_CFG_V60 +{ + DWORD dwSize; // 结构体大小 + NET_DVR_DISK_QUOTA_V60 struPicQuota; // 图片配额 + NET_DVR_DISK_QUOTA_V60 struRecordQuota; // 录像配额 + NET_DVR_DISK_QUOTA_V60 struAddInfoQuota; // 附加信息配额 (用于云存储服务器,目前支持的附加信息有:热度图、客流量) + NET_DVR_DISK_QUOTA_V60 struPubInfoFile; // 发布信息文件配额百分比 + BYTE byRes[256]; //保留字节字节 +}NET_DVR_DISK_QUOTA_CFG_V60, *LPNET_DVR_DISK_QUOTA_CFG_V60; + + +typedef struct tagNET_DVR_TIMING_CAPTURE +{ + NET_DVR_JPEGPARA struJpegPara; // 定时抓图图片质量 + DWORD dwPicInterval; // 定时抓图时间间隔,单位s 1-1s 2-2s 3-3s 4-4s 5-5s + // 6-10m 7-30m 8-1h 9-12h 10-24h + BYTE byRes[12]; // 保留字节 +}NET_DVR_TIMING_CAPTURE, *LPNET_DVR_TIMING_CAPTURE; + +typedef struct tagNET_DVR_REL_CAPTURE_CHAN +{ + BYTE byChan[16]; // 按位表示 + BYTE byRes[20]; // 保留字节 +}NET_DVR_REL_CAPTURE_CHAN, *LPNET_DVR_REL_CAPTURE_CHAN; + +#define MAX_PIC_EVENT_NUM 32 +#define MAX_ALARMIN_CAPTURE 16 + +typedef struct tagNET_DVR_REL_CAPTURE_CHAN_V40 +{ + DWORD dwMaxRelCaptureChanNum; //最大可触发的关联通道数-只读属性 + DWORD dwChanNo[MAX_CHANNUM_V40]; //触发的关联抓图通道号,按值表示,采用紧凑型排列,0xffffffff表示后续无效 + BYTE byRes[32]; +}NET_DVR_REL_CAPTURE_CHAN_V40, *LPNET_DVR_REL_CAPTURE_CHAN_V40; + +typedef struct tagNET_DVR_EVENT_CAPTURE_V40 +{ + NET_DVR_JPEGPARA struJpegPara; // 事件抓图图片质量 + DWORD dwPicInterval; // 事件抓图时间间隔 单位为秒 + NET_DVR_REL_CAPTURE_CHAN_V40 struRelCaptureChan[MAX_PIC_EVENT_NUM]; // 数组下标 0 移动侦测触发抓图 1 视频遮挡触发抓图 2 视频丢失触发抓图,数组3表示PIR报警抓图,数组4表示无线报警抓图,数组5表示呼救报警抓图,数组6表示智能抓图 + NET_DVR_REL_CAPTURE_CHAN_V40 struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 报警输入触发抓图,下标0 代表报警输入1 依次类推 + DWORD dwMaxGroupNum; //设备支持的最大报警输入组数,每组16个报警输入 + BYTE byCapTimes; //抓图张数 + BYTE byRes[59]; +}NET_DVR_EVENT_CAPTURE_V40, *LPNET_DVR_EVENT_CAPTURE_V40; + + +typedef struct tagNET_DVR_EVENT_CAPTURE +{ + NET_DVR_JPEGPARA struJpegPara; // 事件抓图图片质量 + DWORD dwPicInterval; // 事件抓图时间间隔 单位为秒 1-1s 2-2s 3-3s 4-4s 5-5s + // 6-10m 7-30m 8-1h 9-12h 10-24h + /* + 数组下标 0 移动侦测触发抓图 1 视频遮挡触发抓图,2 视频丢失触发抓图,数组3表示PIR报警抓图, + 数组4表示无线报警抓图,数组5表示呼救报警抓图,数组6表示智能抓图,数组7 表示人脸侦测抓图, + 数组8 表示-越界侦测侦测抓图,数组9 表示区域入侵侦测抓图,数组10表示场景变更侦测抓图, + 数组11-进入区域侦测,数组12-离开区域侦测,数组13-徘徊侦测,数组14-人员聚集侦测,数组15-快速运动侦测, + 数组16-停车侦测,数组17-物品遗留侦测,数组18-物品拿取侦测。 + */ + NET_DVR_REL_CAPTURE_CHAN struRelCaptureChan[MAX_PIC_EVENT_NUM]; + NET_DVR_REL_CAPTURE_CHAN struAlarmInCapture[MAX_ALARMIN_CAPTURE]; // 报警输入触发抓图,下标0 代表报警输入1 依次类推 + BYTE byCapTimes; //抓图张数 + BYTE byRes[59]; +}NET_DVR_EVENT_CAPTURE, *LPNET_DVR_EVENT_CAPTURE; + +typedef struct tagNET_DVR_JPEG_CAPTURE_CFG_V40 +{ + DWORD dwSize; //结构体长度 + NET_DVR_TIMING_CAPTURE struTimingCapture; + NET_DVR_EVENT_CAPTURE_V40 struEventCapture; + BYTE byStreamType;//抓图码流类型 0-主码流,1-子码流 + BYTE byRes3[19]; // 保留字节 +}NET_DVR_JPEG_CAPTURE_CFG_V40, *LPNET_DVR_JPEG_CAPTURE_CFG_V40; + +typedef struct tagNET_DVR_JPEG_CAPTURE_CFG +{ + DWORD dwSize; // 结构体大小 + NET_DVR_TIMING_CAPTURE struTimingCapture; + NET_DVR_EVENT_CAPTURE struEventCapture; + BYTE byStreamType;//抓图码流类型 0-主码流,1-子码流 + BYTE byRes3[19]; // 保留字节 +}NET_DVR_JPEG_CAPTURE_CFG, *LPNET_DVR_JPEG_CAPTURE_CFG; + +typedef struct tagNET_DVR_CAPTURE_DAY +{ + BYTE byAllDayCapture; // 是否全天抓图 + BYTE byCaptureType; // 抓图类型:0-定时抓图,1-移动侦测抓图,2-报警抓图,3-移动侦测或报警抓图,4-移动侦测和报警抓图,6-智能报警抓图,7-智能侦测抓图,8-全部事件 ,39-离线测温抓图,40-防区报警,41-紧急求助,42业务咨询 43-废气排放显示 44-灰度报警 + BYTE byRes[2]; +}NET_DVR_CAPTURE_DAY, *LPNET_DVR_CAPTURE_DAY; + +typedef struct tagNET_DVR_CAPTURE_SCHED +{ + NET_DVR_SCHEDTIME struCaptureTime; // 抓图时间段 + BYTE byCaptureType; // 抓图类型:0-定时抓图,1-移动侦测抓图,2-报警抓图,3-移动侦测或报警抓图,4-移动侦测和报警抓图,6-智能报警抓图,7-智能侦测抓图,8-全部事件 ,39-离线测温抓图 ,40-防区报警,41-紧急求助,42业务咨询 43-废气排放显示 44-灰度报警 + BYTE byRes[3]; // 保留字节 +}NET_DVR_CAPTURE_SCHED, *LPNET_DVR_CAPTURE_SCHED; + +// 通道抓图计划 +typedef struct tagNET_DVR_SCHED_CAPTURECFG +{ + DWORD dwSize; // 结构体 + BYTE byEnable; // 是否抓图 + BYTE byRes1[3]; // 保留字节 + NET_DVR_CAPTURE_DAY struCaptureDay[MAX_DAYS]; // 全天抓图计划 + NET_DVR_CAPTURE_SCHED struCaptureSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; // 时间段抓图布防计划 + NET_DVR_CAPTURE_DAY struCaptureHoliday; // 假日抓图计划 + NET_DVR_CAPTURE_SCHED struHolidaySched[MAX_TIMESEGMENT_V30]; // 时间段假日抓图布防计划 + DWORD dwRecorderDuration; // 抓图保存最长时间 0xffffffff表示该值无效 + DWORD dwDelayTime; /* 抓图延时时间 0- 无延时, 1-3秒, 2-4秒, 3-5秒, 4-10秒, 5-30秒, 6-60秒, 7- 120秒,8-300秒*/ + BYTE byRes[36]; // 保留字节 +}NET_DVR_SCHED_CAPTURECFG, *LPNET_DVR_SCHED_CAPTURECFG; + + +typedef struct tagNET_DVR_FLOW_TEST_PARAM +{ + DWORD dwSize; //结构大小 + LONG lCardIndex; //网卡索引 + DWORD dwInterval; //设备上传流量时间间隔, 单位:100ms + BYTE byRes[8]; //保留字节 +}NET_DVR_FLOW_TEST_PARAM, *LPNET_DVR_FLOW_TEST_PARAM; + +typedef struct tagNET_DVR_FLOW_INFO +{ + DWORD dwSize; //结构大小 + DWORD dwSendFlowSize; //发送流量大小,单位kbps + DWORD dwRecvFlowSize; //接收流量大小,单位kbps + BYTE byRes[20]; //保留 +}NET_DVR_FLOW_INFO, *LPNET_DVR_FLOW_INFO; + +// 录像标签 +#define LABEL_NAME_LEN 40 +typedef struct tagNET_DVR_RECORD_LABEL +{ + DWORD dwSize; // 结构体大小 + NET_DVR_TIME struTimeLabel; // 标签的时间 + BYTE byQuickAdd; // 是否快速添加 快速添加时标签名称无效 + BYTE byRes1[3]; // 保留字节 + BYTE sLabelName[LABEL_NAME_LEN]; // 标签的名称 长度为40字节 + BYTE byRes2[40]; // 保留字节 +}NET_DVR_RECORD_LABEL, *LPNET_DVR_RECORD_LABEL; + +#define LABEL_IDENTIFY_LEN 64 +typedef struct tagNET_DVR_LABEL_IDENTIFY +{ + BYTE sLabelIdentify[LABEL_IDENTIFY_LEN]; // 64字节标识 + BYTE byRes[8]; // 保留字节 +}NET_DVR_LABEL_IDENTIFY, *LPNET_DVR_LABEL_IDENTIFY; + +#define MAX_DEL_LABEL_IDENTIFY 20// 删除的最大标签标识个数 + +typedef struct tagNET_DVR_DEL_LABEL_PARAM +{ + DWORD dwSize; // 结构体大小 + BYTE byMode; // 按位表示,0x01表示按标识删除 + BYTE byRes1; + WORD wLabelNum; // 标签数目 + NET_DVR_LABEL_IDENTIFY struIndentify[MAX_DEL_LABEL_IDENTIFY]; // 标签标识 + BYTE byRes2[160]; //保留字节 +}NET_DVR_DEL_LABEL_PARAM, *LPNET_DVR_DEL_LABEL_PARAM; + +typedef struct tagNET_DVR_MOD_LABEL_PARAM +{ + NET_DVR_LABEL_IDENTIFY struIndentify; //要修改的标签标识 + BYTE byRes1[24]; + BYTE sLabelName[LABEL_NAME_LEN]; //修改后的标签名称 + BYTE byRes2[40]; +}NET_DVR_MOD_LABEL_PARAM, *LPNET_DVR_MOD_LABEL_PARAM; + +// 标签搜索结构体 +typedef struct tagNET_DVR_FIND_LABEL +{ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 查找的通道 + NET_DVR_TIME struStartTime; // 开始时间 + NET_DVR_TIME struStopTime; // 结束时间 + BYTE sLabelName[LABEL_NAME_LEN]; // 录像标签名称 如果标签名称为空,则搜索起止时间所有标签 + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[34]; // 保留字节 +}NET_DVR_FIND_LABEL, *LPNET_DVR_FIND_LABEL; + +// 标签信息结构体 +typedef struct tagNET_DVR_FINDLABEL_DATA +{ + BYTE sLabelName[LABEL_NAME_LEN]; // 标签名称 + NET_DVR_TIME struTimeLabel; // 标签时间 + NET_DVR_LABEL_IDENTIFY struLabelIdentify; // 标签标识 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[29]; // 保留字节 +}NET_DVR_FINDLABEL_DATA, *LPNET_DVR_FINDLABEL_DATA; + +#define CARDNUM_LEN_V30 40 +//国家枚举 +typedef enum _COUNTRY_INDEX_ +{ + COUNTRY_NONSUPPORT = 0, //0-算法库不支持牌识国家 + /*五大洲 一共有235国家和地区 */ + /*欧洲 48个国家和地区 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + COUNTRY_CZE = 1, //Czech Republic 捷克共和国 + COUNTRY_FRA = 2, //France 法国 + COUNTRY_DEU = 3, //Germany 德国 + COUNTRY_ESP = 4, //Spain 西班牙 + COUNTRY_ITA = 5, //Italy 意大利 + COUNTRY_NLD = 6, //Netherlands 荷兰 + COUNTRY_POL = 7, //Poland 波兰 + COUNTRY_SVK = 8, //Slovakia 斯洛伐克 + COUNTRY_BLR = 9, //Belarus 白俄罗斯 + COUNTRY_MDA = 10, //Moldova 摩尔多瓦 + COUNTRY_RUS = 11, //Russia 俄罗斯 + COUNTRY_UKR = 12, //Ukraine 乌克兰 + COUNTRY_BEL = 13, //Belgium 比利时 + COUNTRY_BGR = 14, //Bulgaria 保加利亚 + COUNTRY_DNK = 15, //Denmark 丹麦 + COUNTRY_FIN = 16, //Finland 芬兰 + COUNTRY_GBR = 17, //United Kingdom 英国 + COUNTRY_GRC = 18, //Greece 希腊 + COUNTRY_HRV = 19, //Croatia 克罗地亚 + COUNTRY_HUN = 20, //Hungary 匈牙利 + COUNTRY_ISR = 21, //Israel 以色列(亚洲) + COUNTRY_LUX = 22, //Luxembourg 卢森堡 + COUNTRY_MKD = 23, //Macedonia 马其顿共和国 + COUNTRY_NOR = 24, //Norway 挪威 + COUNTRY_PRT = 25, //Portuga 葡萄牙 + COUNTRY_ROU = 26, //Romania 罗马尼亚 + COUNTRY_SRB = 27, //Serbia 塞尔维亚 + COUNTRY_AZE = 28, //Azerbaijan 阿塞邦疆共和国(亚洲) + COUNTRY_GEO = 29, //Georgia 格鲁吉亚(亚洲) + COUNTRY_KAZ = 30, //Kazakhstan 哈萨克斯坦(亚洲) + COUNTRY_LTU = 31, //Lithuania 立陶宛共和国 + COUNTRY_TKM = 32, //Turkmenistan 土库曼斯坦(亚洲) + COUNTRY_UZB = 33, //Uzbekistan 乌兹别克斯坦(亚洲) + COUNTRY_LVA = 34, //Latvia 拉脱维亚 + COUNTRY_EST = 35, //Estonia 爱沙尼亚 + COUNTRY_ALB = 36, //Albania 阿尔巴尼亚 + COUNTRY_AUT = 37, //Austria 奥地利 + COUNTRY_BIH = 38, //Bosnia and Herzegovina 波斯尼亚和黑塞哥维那 + COUNTRY_IRL = 39, //Ireland 爱尔兰 + COUNTRY_ISL = 40, //Iceland 冰岛 + COUNTRY_VAT = 41, //Vatican 梵蒂冈 + COUNTRY_MLT = 42, //Malta 马耳他 + COUNTRY_SWE = 43, //Sweden 瑞典 + COUNTRY_CHE = 44, //Switzerland 瑞士 + COUNTRY_CYP = 45, //Cyprus 塞浦路斯 + COUNTRY_TUR = 46, //Turkey 土耳其 + COUNTRY_SVN = 47, //Slovenia 斯洛文尼亚 + COUNTRY_MTG = 48, //Montenegro 黑山共和国 + COUNTRY_KOV = 49, //Kosovo 科索沃 + COUNTRY_ADR = 50, //Andorra 安道尔 + COUNTRY_ARM = 51, //Armenia 亚美尼亚(亚洲) + COUNTRY_MON = 52, //Monaco 摩纳哥 + COUNTRY_LIE = 53, //Liechtenstein 列支敦士登 + COUNTRY_SMO = 54, //San Marino 圣马力诺 + COUNTRY_ORN = 55, //Aland 奥兰(芬兰自治区) + COUNTRY_RES2 = 56, //保留字段 + COUNTRY_RES3 = 57, //保留字段 + COUNTRY_RES4 = 58, //保留字段 + /*亚洲 48个国家 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + COUNTRY_CHI = 59, //China 中国 + COUNTRY_IBN = 60, //In bahrain 巴林 + COUNTRY_SKR = 61, //South Korea 韩国 + COUNTRY_LEB = 62, //Lebanon 黎巴嫩 + COUNTRY_NEP = 63, //Nepal 尼泊尔 + COUNTRY_THA = 64, //Thailand 泰国 + COUNTRY_PAK = 65, //Pakistan 巴基斯坦 + COUNTRY_EMI = 66, //The united Arab emirates 阿拉伯联合酋长国 + COUNTRY_BHU = 67, //Bhutan 不丹 + COUNTRY_OMA = 68, //Oman 阿曼 + COUNTRY_KOR = 69, //North Korea 朝鲜 + COUNTRY_PHI = 70, //The Philippines 菲律宾 + COUNTRY_CAM = 71, //Cambodia 柬埔寨 + COUNTRY_QAT = 72, //Qatar 卡塔尔 + COUNTRY_KYR = 73, //Kyrgyzstan 吉尔吉斯斯坦 + COUNTRY_MAL = 74, //The maldives 马尔代夫 + COUNTRY_MLY = 75, //Malaysia 马来西亚 + COUNTRY_MOG = 76, //Mongolia 蒙古 + COUNTRY_ARA = 77, //Saudi Arabia 沙特阿拉伯 + COUNTRY_BRU = 78, //brunei 文莱 + COUNTRY_LAO = 79, //Laos 老挝 + COUNTRY_JAP = 80, //Japan 日本 + COUNTRY_RES19 = 81, //保留字段 + COUNTRY_PAS = 82, //Palestinian state 巴勒斯坦国 + COUNTRY_TAJ = 83, //Tajikistan 塔吉克斯坦 + COUNTRY_KUW = 84, //Kuwait 科威特 + COUNTRY_SYR = 85, //Syria 叙利亚 + COUNTRY_IND = 86, //India 印度 + COUNTRY_ISA = 87, //Indonesia 印度尼西亚 + COUNTRY_AFG = 88, //Afghanistan 阿富汗 + COUNTRY_LAN = 89, //Sri Lanka 斯里兰卡 + COUNTRY_IRQ = 90, //Iraq 伊拉克 + COUNTRY_VIE = 91, //Vietnam 越南 + COUNTRY_IRA = 92, //Iran 伊朗 + COUNTRY_YEM = 93, //yemen 也门 + COUNTRY_JOR = 94, //Jordan 约旦 + COUNTRY_BUR = 95, //Burma 缅甸 + COUNTRY_SIK = 96, //Sikkim 锡金 + COUNTRY_BAN = 97, //Bangladesh 孟加拉国 + COUNTRY_SGA = 98, //Singapore 新加坡 + COUNTRY_EAT = 99, //East timor 东帝汶(已宣布独立,但世界上许多国家不承认) + COUNTRY_RES5 = 100, //保留字段 + COUNTRY_RES6 = 101, //保留字段 + COUNTRY_RES7 = 102, //保留字段 + COUNTRY_RES8 = 103, //保留字段 + /*非洲 60个国家和地区*/ + COUNTRY_EGT = 104, //Egypt 埃及 + COUNTRY_LIY = 105, //Libya 利比亚 + COUNTRY_SUA = 106, //Sudan 苏丹 + COUNTRY_TUN = 107, //Tunisia 突尼斯 + COUNTRY_ALG = 108, //Algeria 阿尔及利亚 + COUNTRY_MCC = 109, //Morocco 摩洛哥 + COUNTRY_ETH = 110, //Ethiopia 埃塞俄比亚 + COUNTRY_ERI = 111, //Eritrea 厄立特里亚 + COUNTRY_SDE = 112, //Somalia Democratic 索马里 + COUNTRY_DJI = 113, //Djibouti 吉布提 + COUNTRY_KEN = 114, //Kenya 肯尼亚 + COUNTRY_TAI = 115, //Tanzania 坦桑尼亚 + COUNTRY_UGA = 116, //Uganda 乌干达 + COUNTRY_RWA = 117, //Rwanda 卢旺达 + COUNTRY_BUD = 118, //Burundi 布隆迪 + COUNTRY_SEY = 119, //Seychelles 塞舌尔 + COUNTRY_CHA = 120, //Chad 乍得 + COUNTRY_CEA = 121, //Central African 中非 + COUNTRY_CON = 122, //Cameroon 喀麦隆 + COUNTRY_EQG = 123, //Equatorial Guinea赤道几内亚 + COUNTRY_GAB = 124, //Gabon 加蓬 + COUNTRY_TCO = 125, //the Congo 刚果共和国(即:刚果(布)) + COUNTRY_DRC = 126, //Democratic Republic of the Congo 刚果民主共和国(即:刚果(金)) + COUNTRY_STP = 127, //Sao Tome and Principe 圣多美和普林西比 + COUNTRY_MAN = 128, //Mauritania 毛里塔尼亚 + COUNTRY_WSA = 129, //Western Sahara 西撒哈拉(撒拉威) + COUNTRY_SEL = 130, //Senegal 塞内加尔 + COUNTRY_TGA = 131, //the Gambia 冈比亚 + COUNTRY_MAI = 132, //Mali 马里 + COUNTRY_BUF = 133, //Burkina Faso 布基纳法索 + COUNTRY_GUI = 134, //Guinea 几内亚 + COUNTRY_GUB = 135, //Guinea-Bissau 几内亚比绍 + COUNTRY_CAV = 136, //Cape Verde 佛得角 + COUNTRY_SLE = 137, //Sierra Leone 塞拉利昂 + COUNTRY_LIR = 138, //Liberia 利比里亚 + COUNTRY_IVC = 139, //Ivory Coast 科特迪瓦 + COUNTRY_GHA = 140, //Ghana 加纳 + COUNTRY_TGO = 141, //Togo 多哥 + COUNTRY_BEN = 142, //Benin 贝宁 + COUNTRY_NIG = 143, //Niger 尼日尔 + COUNTRY_ZAB = 144, //Zambia 赞比亚 + COUNTRY_ANG = 145, //Angola 安哥拉 + COUNTRY_ZBE = 146, //Zimbabwe 津巴布韦 + COUNTRY_MAW = 147, //Malawi 马拉维 + COUNTRY_MOQ = 148, //Mozambique 莫桑比克 + COUNTRY_BOT = 149, //Botswana 博茨瓦纳 + COUNTRY_NAM = 150, //Namibia 纳米比亚 + COUNTRY_SAF = 151, //South Africa 南非 + COUNTRY_SWD = 152, //Swaziland 斯威士兰 + COUNTRY_LES = 153, //Lesotho 莱索托 + COUNTRY_MAG = 154, //Madagasca 马达加斯加 + COUNTRY_UOC = 155, //Union of Comoros 科摩罗 + COUNTRY_MAT = 156, //Mauritius 毛里求斯 + COUNTRY_NGE = 157, //Nigeria 尼日利亚 + COUNTRY_SSD = 158, //South Sudan 南苏丹 + COUNTRY_SAH = 159, //Saint Helena 圣赫勒拿(英国海外省) + COUNTRY_MYT = 160, //Mayotte 马约特(法国海外省) + COUNTRY_REN = 161, //Reunion 留尼旺(法国海外省) + COUNTRY_CAI = 162, //Canary Islands 加那利群岛(西班牙海外领土) + COUNTRY_AZO = 163, //AZORES 亚速尔群岛(北大西洋非洲西海岸(葡萄牙)) + COUNTRY_MAD = 164, //Madeira 马德拉群岛(北大西洋非洲西海岸(葡萄牙)) + COUNTRY_RES9 = 165, //保留字段 + COUNTRY_RES10 = 166, //保留字段 + COUNTRY_RES11 = 167, //保留字段 + COUNTRY_RES12 = 168, //保留字段 + /*美洲 55个国家和地区*/ + COUNTRY_CAD = 169, //Canada 加拿大 + COUNTRY_GRE = 170, //Greenland Nuuk 格陵兰(丹麦王国的海外自治领土) + COUNTRY_PIE = 171, //Pierre and Miquelon 圣皮埃尔和密克隆(法国海外领土) + COUNTRY_USA = 172, //United States 美国 + COUNTRY_BER = 173, //Bermuda 百慕大(英国海外领土) + COUNTRY_MEX = 174, //Mexico 墨西哥 + COUNTRY_GUA = 175, //Guatemala 危地马拉 + COUNTRY_BLI = 176, //Belize 伯利兹 + COUNTRY_SAR = 177, //El Salvador 萨尔瓦多 + COUNTRY_HOR = 178, //Honduras 洪都拉斯 + COUNTRY_NIC = 179, //Nicaragua 尼加拉瓜 + COUNTRY_COR = 180, //Costa Rica 哥斯达黎加 + COUNTRY_PAN = 181, //Panama 巴拿马 + COUNTRY_TBM = 182, //The Bahamas 巴哈马 + COUNTRY_TCI = 183, //The Turks and Caicos Islands 特克斯群岛和凯科斯群岛(英国海外领土) + COUNTRY_CUB = 184, //Cuba 古巴 + COUNTRY_JAM = 185, //Jamaica 牙买加 + COUNTRY_CAY = 186, //Cayman Islands 开曼群岛(英国海外领土) + COUNTRY_HAT = 187, //Haiti 海地 + COUNTRY_TDO = 188, //The Dominican 多米尼加 + COUNTRY_PUR = 189, //Puerto Rico 波多黎各(美国海外领土) + COUNTRY_VIL = 190, //The United States Virgin Islands美属维尔京群岛 + COUNTRY_BVI = 191, //The British Virgin Islands 英属维尔京群岛 + COUNTRY_ATV = 192, //Anguilla The Valley 安圭拉(英国海外领土) + COUNTRY_ANB = 193, //Antigua and Barbuda 安提瓜和巴布达 + COUNTRY_CSM = 194, //Collectivité de Saint-Martin 法属圣马丁(法国海外领土) + COUNTRY_ACY = 195, //Autonomous country 荷属圣马丁(荷兰王国的自治国 ) + COUNTRY_SBY = 196, //Saint-Barthélemy 圣巴泰勒米岛(法国海外领土) + COUNTRY_SKN = 197, //Saint Kitts and Nevis 圣基茨和尼维斯 + COUNTRY_MOT = 198, //Montserrat 蒙特塞拉特(英国海外领土) + COUNTRY_GLP = 199, //Guadeloupe 瓜德罗普(法国海外领土) + COUNTRY_DOM = 200, //Dominica 多米尼克 + COUNTRY_MTE = 201, //Martinique 马提尼克(法国海外领土) + COUNTRY_LUC = 202, //St. Lucia 圣卢西亚 + COUNTRY_SVG = 203, //Saint Vincent and the Grenadines 圣文森特和格林纳丁斯 + COUNTRY_GRD = 204, //Grenada 格林纳达 + COUNTRY_BAR = 205, //Barbados 巴巴多斯 + COUNTRY_TRT = 206, //Trinidad and Tobago 特立尼达和多巴哥 + COUNTRY_CUR = 207, //Cura?ao 库拉索(荷兰王国的一个自治国) + COUNTRY_ARB = 208, //Aruba 阿鲁巴(荷兰王国的一个自治国) + COUNTRY_NEA = 209, //Netherlands Antilles 荷属安的列斯 + COUNTRY_COL = 210, //Colombia 哥伦比亚 + COUNTRY_VEN = 211, //Venezuela 委内瑞拉 + COUNTRY_GUY = 212, //Guyana 圭亚那 + COUNTRY_SUR = 213, //Suriname 苏里南 + COUNTRY_FRN = 214, //Guyane Francaise 法属圭亚那 + COUNTRY_ECU = 215, //Ecuador 厄瓜多尔 + COUNTRY_PER = 216, //Peru 秘鲁 + COUNTRY_BOL = 217, //Bolivia 玻利维亚 + COUNTRY_PAR = 218, //Paraguay 巴拉圭 + COUNTRY_CLE = 219, //Chile 智利 + COUNTRY_BRA = 220, //Brazil 巴西 + COUNTRY_UGY = 221, //Uruguay 乌拉圭 + COUNTRY_ARG = 222, //Argentina 阿根廷 + COUNTRY_RES13 = 223, //保留字段 + COUNTRY_RES14 = 224, //保留字段 + COUNTRY_RES15 = 225, //保留字段 + COUNTRY_RES16 = 226, //保留字段 + /*大洋洲 25个国家和地区 */ + COUNTRY_ATN = 227, //Australien 澳大利亚 + COUNTRY_NED = 228, //Neuseeland 新西兰 + COUNTRY_PNG = 229, //Papua New Guinea 巴布亚新几内亚 + COUNTRY_SAN = 230, //Salomonen 所罗门群岛 + COUNTRY_VAU = 231, //Vanuatu 瓦努阿图 + COUNTRY_NCN = 232, //New Caledonia 新喀里多尼亚(法国的海外属地) + COUNTRY_PAU = 233, //Palau 帕劳 + COUNTRY_FSM = 234, //Federated States of Micronesia 密克罗尼西亚联邦 + COUNTRY_MRI = 235, //Marshall Island 马绍尔群岛 + COUNTRY_CNM = 236, //Commonwealth of the Northern Mariana Islands 北马里亚纳群岛(美国的海外属地) + COUNTRY_TEG = 237, //The Territory of Guahan 关岛(美国的海外属地) + COUNTRY_NUR = 238, //Nauru 瑙鲁 + COUNTRY_KIB = 239, //Kiribati 基里巴斯 + COUNTRY_FID = 240, //Fidschi 斐济群岛 + COUNTRY_TNG = 241, //Tonga 汤加 + COUNTRY_TUV = 242, //Tuvalu 图瓦卢 + COUNTRY_WEF = 243, //Wallis et Futuna 瓦利斯和富图纳(法国的海外属地) + COUNTRY_TIS = 244, //The Independent State of Samoa 萨摩亚 + COUNTRY_EAS = 245, //Eastern Samoa 美属萨摩亚 + COUNTRY_TOE = 246, //Tokelau 托克劳(新西兰) + COUNTRY_NUE = 247, //Niue 纽埃(新西兰) + COUNTRY_TCD = 248, //The Cook Islands 库克群岛(新西兰) + COUNTRY_PFP = 249, //Polynésie fran?aiseFrench Polynesia 法属波利尼西亚 + COUNTRY_PID = 250, //Pitcairn Islands 皮特凯恩群岛(英国的海外属地) + COUNTRY_HAW = 251, //Hawaii State 夏威夷(美国的海外属地) + COUNTRY_RES17 = 252, //保留字段 + COUNTRY_INVALID = 0xfd, //字段无效,需要使用扩展字段CRIndex(_CR_INDEX_) + COUNTRY_UNRECOGNIZED = 0xfe, //Unrecognized 无法识别 + COUNTRY_ALL = 0xff, //ALL 全部 +}COUNTRY_INDEX; + +// 国家 / 区域枚举 +typedef enum _CR_INDEX_ +{ + CR_NONSUPPORT = 0, //0-算法库不支持牌识国家 + /*五大洲 一共有235国家和地区 */ + /*欧洲 48个国家和地区 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + CR_CZE = 1, //Czech Republic 捷克共和国 + CR_FRA = 2, //France 法国 + CR_DEU = 3, //Germany 德国 + CR_ESP = 4, //Spain 西班牙 + CR_ITA = 5, //Italy 意大利 + CR_NLD = 6, //Netherlands 荷兰 + CR_POL = 7, //Poland 波兰 + CR_SVK = 8, //Slovakia 斯洛伐克 + CR_BLR = 9, //Belarus 白俄罗斯 + CR_MDA = 10, //Moldova 摩尔多瓦 + CR_RUS = 11, //Russia 俄罗斯 + CR_UKR = 12, //Ukraine 乌克兰 + CR_BEL = 13, //Belgium 比利时 + CR_BGR = 14, //Bulgaria 保加利亚 + CR_DNK = 15, //Denmark 丹麦 + CR_FIN = 16, //Finland 芬兰 + CR_GBR = 17, //United Kingdom 英国 + CR_GRC = 18, //Greece 希腊 + CR_HRV = 19, //Croatia 克罗地亚 + CR_HUN = 20, //Hungary 匈牙利 + CR_ISR = 21, //Israel 以色列(亚洲) + CR_LUX = 22, //Luxembourg 卢森堡 + CR_MKD = 23, //Macedonia 马其顿共和国 + CR_NOR = 24, //Norway 挪威 + CR_PRT = 25, //Portuga 葡萄牙 + CR_ROU = 26, //Romania 罗马尼亚 + CR_SRB = 27, //Serbia 塞尔维亚 + CR_AZE = 28, //Azerbaijan 阿塞邦疆共和国(亚洲) + CR_GEO = 29, //Georgia 格鲁吉亚(亚洲) + CR_KAZ = 30, //Kazakhstan 哈萨克斯坦(亚洲) + CR_LTU = 31, //Lithuania 立陶宛共和国 + CR_TKM = 32, //Turkmenistan 土库曼斯坦(亚洲) + CR_UZB = 33, //Uzbekistan 乌兹别克斯坦(亚洲) + CR_LVA = 34, //Latvia 拉脱维亚 + CR_EST = 35, //Estonia 爱沙尼亚 + CR_ALB = 36, //Albania 阿尔巴尼亚 + CR_AUT = 37, //Austria 奥地利 + CR_BIH = 38, //Bosnia and Herzegovina 波斯尼亚和黑塞哥维那 + CR_IRL = 39, //Ireland 爱尔兰 + CR_ISL = 40, //Iceland 冰岛 + CR_VAT = 41, //Vatican 梵蒂冈 + CR_MLT = 42, //Malta 马耳他 + CR_SWE = 43, //Sweden 瑞典 + CR_CHE = 44, //Switzerland 瑞士 + CR_CYP = 45, //Cyprus 塞浦路斯 + CR_TUR = 46, //Turkey 土耳其 + CR_SVN = 47, //Slovenia 斯洛文尼亚 + CR_MTG = 48, //Montenegro 黑山共和国 + CR_KOV = 49, //Kosovo 科索沃 + CR_ADR = 50, //Andorra 安道尔 + CR_ARM = 51, //Armenia 亚美尼亚(亚洲) + CR_MON = 52, //Monaco 摩纳哥 + CR_LIE = 53, //Liechtenstein 列支敦士登 + CR_SMO = 54, //San Marino 圣马力诺 + CR_ORN = 55, //Aland 奥兰(芬兰自治区) + CR_RES2 = 56, //保留字段 + CR_RES3 = 57, //保留字段 + CR_RES4 = 58, //保留字段 + /*亚洲 48个国家 其中 塞浦路斯(Cyprus)属于亚欧两洲交界国家*/ + CR_CHI = 59, //China 中国 + CR_IBN = 60, //In bahrain 巴林 + CR_SKR = 61, //South Korea 韩国 + CR_LEB = 62, //Lebanon 黎巴嫩 + CR_NEP = 63, //Nepal 尼泊尔 + CR_THA = 64, //Thailand 泰国 + CR_PAK = 65, //Pakistan 巴基斯坦 + CR_EMI = 66, //The united Arab emirates 阿拉伯联合酋长国 + CR_BHU = 67, //Bhutan 不丹 + CR_OMA = 68, //Oman 阿曼 + CR_KOR = 69, //North Korea 朝鲜 + CR_PHI = 70, //The Philippines 菲律宾 + CR_CAM = 71, //Cambodia 柬埔寨 + CR_QAT = 72, //Qatar 卡塔尔 + CR_KYR = 73, //Kyrgyzstan 吉尔吉斯斯坦 + CR_MAL = 74, //The maldives 马尔代夫 + CR_MLY = 75, //Malaysia 马来西亚 + CR_MOG = 76, //Mongolia 蒙古 + CR_ARA = 77, //Saudi Arabia 沙特阿拉伯 + CR_BRU = 78, //brunei 文莱 + CR_LAO = 79, //Laos 老挝 + CR_JAP = 80, //Japan 日本 + CR_RES19 = 81, //保留字段 + CR_PAS = 82, //Palestinian state 巴勒斯坦国 + CR_TAJ = 83, //Tajikistan 塔吉克斯坦 + CR_KUW = 84, //Kuwait 科威特 + CR_SYR = 85, //Syria 叙利亚 + CR_IND = 86, //India 印度 + CR_ISA = 87, //Indonesia 印度尼西亚 + CR_AFG = 88, //Afghanistan 阿富汗 + CR_LAN = 89, //Sri Lanka 斯里兰卡 + CR_IRQ = 90, //Iraq 伊拉克 + CR_VIE = 91, //Vietnam 越南 + CR_IRA = 92, //Iran 伊朗 + CR_YEM = 93, //yemen 也门 + CR_JOR = 94, //Jordan 约旦 + CR_BUR = 95, //Burma 缅甸 + CR_SIK = 96, //Sikkim 锡金 + CR_BAN = 97, //Bangladesh 孟加拉国 + CR_SGA = 98, //Singapore 新加坡 + CR_EAT = 99, //East timor 东帝汶(已宣布独立,但世界上许多国家不承认) + CR_RES5 = 100, //保留字段 + CR_RES6 = 101, //保留字段 + CR_RES7 = 102, //保留字段 + CR_RES8 = 103, //保留字段 + /*非洲 60个国家和地区*/ + CR_EGT = 104, //Egypt 埃及 + CR_LIY = 105, //Libya 利比亚 + CR_SUA = 106, //Sudan 苏丹 + CR_TUN = 107, //Tunisia 突尼斯 + CR_ALG = 108, //Algeria 阿尔及利亚 + CR_MCC = 109, //Morocco 摩洛哥 + CR_ETH = 110, //Ethiopia 埃塞俄比亚 + CR_ERI = 111, //Eritrea 厄立特里亚 + CR_SDE = 112, //Somalia Democratic 索马里 + CR_DJI = 113, //Djibouti 吉布提 + CR_KEN = 114, //Kenya 肯尼亚 + CR_TAI = 115, //Tanzania 坦桑尼亚 + CR_UGA = 116, //Uganda 乌干达 + CR_RWA = 117, //Rwanda 卢旺达 + CR_BUD = 118, //Burundi 布隆迪 + CR_SEY = 119, //Seychelles 塞舌尔 + CR_CHA = 120, //Chad 乍得 + CR_CEA = 121, //Central African 中非 + CR_CON = 122, //Cameroon 喀麦隆 + CR_EQG = 123, //Equatorial Guinea赤道几内亚 + CR_GAB = 124, //Gabon 加蓬 + CR_TCO = 125, //the Congo 刚果共和国(即:刚果(布)) + CR_DRC = 126, //Democratic Republic of the Congo 刚果民主共和国(即:刚果(金)) + CR_STP = 127, //Sao Tome and Principe 圣多美和普林西比 + CR_MAN = 128, //Mauritania 毛里塔尼亚 + CR_WSA = 129, //Western Sahara 西撒哈拉(撒拉威) + CR_SEL = 130, //Senegal 塞内加尔 + CR_TGA = 131, //the Gambia 冈比亚 + CR_MAI = 132, //Mali 马里 + CR_BUF = 133, //Burkina Faso 布基纳法索 + CR_GUI = 134, //Guinea 几内亚 + CR_GUB = 135, //Guinea-Bissau 几内亚比绍 + CR_CAV = 136, //Cape Verde 佛得角 + CR_SLE = 137, //Sierra Leone 塞拉利昂 + CR_LIR = 138, //Liberia 利比里亚 + CR_IVC = 139, //Ivory Coast 科特迪瓦 + CR_GHA = 140, //Ghana 加纳 + CR_TGO = 141, //Togo 多哥 + CR_BEN = 142, //Benin 贝宁 + CR_NIG = 143, //Niger 尼日尔 + CR_ZAB = 144, //Zambia 赞比亚 + CR_ANG = 145, //Angola 安哥拉 + CR_ZBE = 146, //Zimbabwe 津巴布韦 + CR_MAW = 147, //Malawi 马拉维 + CR_MOQ = 148, //Mozambique 莫桑比克 + CR_BOT = 149, //Botswana 博茨瓦纳 + CR_NAM = 150, //Namibia 纳米比亚 + CR_SAF = 151, //South Africa 南非 + CR_SWD = 152, //Swaziland 斯威士兰 + CR_LES = 153, //Lesotho 莱索托 + CR_MAG = 154, //Madagasca 马达加斯加 + CR_UOC = 155, //Union of Comoros 科摩罗 + CR_MAT = 156, //Mauritius 毛里求斯 + CR_NGE = 157, //Nigeria 尼日利亚 + CR_SSD = 158, //South Sudan 南苏丹 + CR_SAH = 159, //Saint Helena 圣赫勒拿(英国海外省) + CR_MYT = 160, //Mayotte 马约特(法国海外省) + CR_REN = 161, //Reunion 留尼旺(法国海外省) + CR_CAI = 162, //Canary Islands 加那利群岛(西班牙海外领土) + CR_AZO = 163, //AZORES 亚速尔群岛(北大西洋非洲西海岸(葡萄牙)) + CR_MAD = 164, //Madeira 马德拉群岛(北大西洋非洲西海岸(葡萄牙)) + CR_RES9 = 165, //保留字段 + CR_RES10 = 166, //保留字段 + CR_RES11 = 167, //保留字段 + CR_RES12 = 168, //保留字段 + /*美洲 55个国家和地区*/ + CR_CAD = 169, //Canada 加拿大 + CR_GRE = 170, //Greenland Nuuk 格陵兰(丹麦王国的海外自治领土) + CR_PIE = 171, //Pierre and Miquelon 圣皮埃尔和密克隆(法国海外领土) + CR_USA = 172, //United States 美国 + CR_BER = 173, //Bermuda 百慕大(英国海外领土) + CR_MEX = 174, //Mexico 墨西哥 + CR_GUA = 175, //Guatemala 危地马拉 + CR_BLI = 176, //Belize 伯利兹 + CR_SAR = 177, //El Salvador 萨尔瓦多 + CR_HOR = 178, //Honduras 洪都拉斯 + CR_NIC = 179, //Nicaragua 尼加拉瓜 + CR_COR = 180, //Costa Rica 哥斯达黎加 + CR_PAN = 181, //Panama 巴拿马 + CR_TBM = 182, //The Bahamas 巴哈马 + CR_TCI = 183, //The Turks and Caicos Islands 特克斯群岛和凯科斯群岛(英国海外领土) + CR_CUB = 184, //Cuba 古巴 + CR_JAM = 185, //Jamaica 牙买加 + CR_CAY = 186, //Cayman Islands 开曼群岛(英国海外领土) + CR_HAT = 187, //Haiti 海地 + CR_TDO = 188, //The Dominican 多米尼加 + CR_PUR = 189, //Puerto Rico 波多黎各(美国海外领土) + CR_VIL = 190, //The United States Virgin Islands美属维尔京群岛 + CR_BVI = 191, //The British Virgin Islands 英属维尔京群岛 + CR_ATV = 192, //Anguilla The Valley 安圭拉(英国海外领土) + CR_ANB = 193, //Antigua and Barbuda 安提瓜和巴布达 + CR_CSM = 194, //Collectivité de Saint-Martin 法属圣马丁(法国海外领土) + CR_ACY = 195, //Autonomous country 荷属圣马丁(荷兰王国的自治国 ) + CR_SBY = 196, //Saint-Barthélemy 圣巴泰勒米岛(法国海外领土) + CR_SKN = 197, //Saint Kitts and Nevis 圣基茨和尼维斯 + CR_MOT = 198, //Montserrat 蒙特塞拉特(英国海外领土) + CR_GLP = 199, //Guadeloupe 瓜德罗普(法国海外领土) + CR_DOM = 200, //Dominica 多米尼克 + CR_MTE = 201, //Martinique 马提尼克(法国海外领土) + CR_LUC = 202, //St. Lucia 圣卢西亚 + CR_SVG = 203, //Saint Vincent and the Grenadines 圣文森特和格林纳丁斯 + CR_GRD = 204, //Grenada 格林纳达 + CR_BAR = 205, //Barbados 巴巴多斯 + CR_TRT = 206, //Trinidad and Tobago 特立尼达和多巴哥 + CR_CUR = 207, //Cura?ao 库拉索(荷兰王国的一个自治国) + CR_ARB = 208, //Aruba 阿鲁巴(荷兰王国的一个自治国) + CR_NEA = 209, //Netherlands Antilles 荷属安的列斯 + CR_COL = 210, //Colombia 哥伦比亚 + CR_VEN = 211, //Venezuela 委内瑞拉 + CR_GUY = 212, //Guyana 圭亚那 + CR_SUR = 213, //Suriname 苏里南 + CR_FRN = 214, //Guyane Francaise 法属圭亚那 + CR_ECU = 215, //Ecuador 厄瓜多尔 + CR_PER = 216, //Peru 秘鲁 + CR_BOL = 217, //Bolivia 玻利维亚 + CR_PAR = 218, //Paraguay 巴拉圭 + CR_CLE = 219, //Chile 智利 + CR_BRA = 220, //Brazil 巴西 + CR_UGY = 221, //Uruguay 乌拉圭 + CR_ARG = 222, //Argentina 阿根廷 + CR_RES13 = 223, //保留字段 + CR_RES14 = 224, //保留字段 + CR_RES15 = 225, //保留字段 + CR_RES16 = 226, //保留字段 + /*大洋洲 25个国家和地区 */ + CR_ATN = 227, //Australien 澳大利亚 + CR_NED = 228, //Neuseeland 新西兰 + CR_PNG = 229, //Papua New Guinea 巴布亚新几内亚 + CR_SAN = 230, //Salomonen 所罗门群岛 + CR_VAU = 231, //Vanuatu 瓦努阿图 + CR_NCN = 232, //New Caledonia 新喀里多尼亚(法国的海外属地) + CR_PAU = 233, //Palau 帕劳 + CR_FSM = 234, //Federated States of Micronesia 密克罗尼西亚联邦 + CR_MRI = 235, //Marshall Island 马绍尔群岛 + CR_CNM = 236, //Commonwealth of the Northern Mariana Islands 北马里亚纳群岛(美国的海外属地) + CR_TEG = 237, //The Territory of Guahan 关岛(美国的海外属地) + CR_NUR = 238, //Nauru 瑙鲁 + CR_KIB = 239, //Kiribati 基里巴斯 + CR_FID = 240, //Fidschi 斐济群岛 + CR_TNG = 241, //Tonga 汤加 + CR_TUV = 242, //Tuvalu 图瓦卢 + CR_WEF = 243, //Wallis et Futuna 瓦利斯和富图纳(法国的海外属地) + CR_TIS = 244, //The Independent State of Samoa 萨摩亚 + CR_EAS = 245, //Eastern Samoa 美属萨摩亚 + CR_TOE = 246, //Tokelau 托克劳(新西兰) + CR_NUE = 247, //Niue 纽埃(新西兰) + CR_TCD = 248, //The Cook Islands 库克群岛(新西兰) + CR_PFP = 249, //Polynésie fran?aiseFrench Polynesia 法属波利尼西亚 + CR_PID = 250, //Pitcairn Islands 皮特凯恩群岛(英国的海外属地) + CR_HAW = 251, //Hawaii State 夏威夷(美国的海外属地) + CR_RES17 = 252, //保留字段 + CR_RES18 = 253, //保留字段 + CR_UNRECOGNIZED = 0xfe, //Unrecognized 无法识别 + CR_ALL = 0xff, //ALL 全部 + + //下面是新增的区域 + CR_TAIWAN = 256, //Taiwan(China) 台湾(中国) +}CR_INDEX; + +//阿拉伯联合酋长国区域枚举 +typedef enum _EMI_AREA_ +{ + EMI_AREA_UNKNOWN = 0, //不支持区域识别 + EMI_AREA_AD, //阿布扎比 + EMI_AREA_FJR, //富查伊哈 + EMI_AREA_DB, //迪拜 + EMI_AREA_RAK, //哈伊马角 + EMI_AREA_AM, //阿治曼 + EMI_AREA_SJ, //沙迦 + EMI_AREA_UMW, //乌姆盖万 + EMI_AREA_OTHER = 0xff, //未识别(但是设备支持该算法,由于环境等原因导致未识别) +} EMI_AREA; + +typedef struct tagNET_DVR_FIND_PICTURE_PARAM +{ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 通道号 + /* 查找的图片类型:0定时抓图1 移动侦测抓图 2 报警抓图, + 3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 , + 9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测, + 0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, + 0x13-进入区域侦测,0x14-离开区域侦测,0x15-徘徊侦测, + 0x16-人员聚集侦测,0x17-快速运动侦测,0x18-停车侦测, + 0x19-物品遗留侦测,0x1a-物品拿取侦测, 0x1b-车牌侦测, + 0x1c-混行检测,0x1d-取证事件,0x1e-火点检测,0x1f-防破坏检测, + 0x20-船只检测,0x21-测温预警,0x22-测温报警, 0x23测差报警, + 0x24违停检测,0x25-人脸抓拍,0x26-离线测温报警,0x2a-起身检测, + 0x2b-折线攀高,0x2c-如厕超时,0x2d-安全帽检测,0x2e-周界抓拍, + 0x2f-人体目标抓拍,0x30-人脸抓拍建模, 0x31-混合目标检测, + 0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询,0x35-非法摆摊, + 0x36-人员密度(人数预警),0x37-离岗检测,0x38-人数异常检测, + 0x39-剧烈运动检测, 0x3a-违停, 0x3b-逆行,0x3c-压线,0x3d-机占非,0x3e-变道,0x3f-掉头,0x40-行人检测,0x41-路障, + 0x42-抛洒物,0x43-浓雾检测,0x44-施工,0x45-拥堵,0x46-交通事故检测, 0x47-侧方停车,0x48-手动触发报警, + 0x49-玩手机检测,0x4b-司机驾驶行为,0x4c-高级辅助驾驶,0x4d-挖沙船检测报警, + 0x52-排队检测人数,0x53-排队检测时长,0x54-车辆布防(包括手动布防,日常布防以及平台布防), 0x55-定时唤醒抓拍, 0x56-废气排放显示, + 0x57-灰度报警, 0x58-振动侦测,0x59-人员奔跑,0x5a-人员滞留,0x5b-间距异常,0x5c-人员倒地,0x5d-抽烟检测,0x5e-卡口,0x5f-闯禁令, + 0x60-占用应急车道,0x61-大车占道,0x62-禁止名单,0x63-占用专用车道,0x64-烟雾检测,0x65-ReID,0x66-通道定时抓图事件, + 0x67-AI开放平台事件,0x68-甲烷检测浓度异常,0x69-甲烷检测光强异常,0x70-通道定时抓图,0x71-传感器事件,0x72-紫光电子检测, + 0x73-设备电源状态上报,0xff- 全部类型*/ + BYTE byFileType; + BYTE byNeedCard; // 是否需要卡号 + /* + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂, + 8-贵,9-琼,10-冀,11-豫,12-黑,13-鄂,14-湘, + 15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青, + 22-鲁,23-晋,24-陕,25-沪,26-川,27-台,28-津, + 29-藏,30-港,31-新,32-云,33-浙,34-皖,0xff-全部 + */ + BYTE byProvince; //省份索引值 + BYTE byEventType; // 事件类型:0保留,1-交通事件;2-违章取证;3-其他事件 + BYTE sCardNum[CARDNUM_LEN_V30]; // 卡号 + NET_DVR_TIME struStartTime;//查找图片的开始时间 + NET_DVR_TIME struStopTime;// 查找图片的结束时间 + //ITC3.7 新增 + DWORD dwTrafficType; //图片检索生效项 参考 VCA_OPERATE _TYPE + DWORD dwVehicleType; //车辆类型 参考 VCA_VEHICLE_TYPE + //违规检测类型参考 VCA_ILLEGAL_TYPE 当前不支持复选 + DWORD dwIllegalType; + BYTE byLaneNo; //车道号(1~99) + BYTE bySubHvtType ;//0-保留,1-机动车(机动车子类型中支持车牌检索,省份检索),2-非机动车,3-行人 + BYTE bySubDriveType; //驾驶子类型 + //当byFileType为0x4b-司机驾驶行为时,含义为司机驾驶行为类型,具体定义:0-保留、1-抽烟、2-接打电话、3-疲劳驾驶、4-分神提醒、5-驾驶员异常、6-未系安全带、7-红外阻断墨镜、8-双手脱离方向盘、9-单手脱离方向盘、10-驾驶员身份异常、11-超时驾驶、12-驾驶员变更 + //当byFileType为0x4c-高级辅助驾驶时,含义为高级辅助驾驶类型,具体定义:0-保留、1-前向碰撞、2-车道偏离(左)、3-车道偏离(右)、4-车距过近、5-行人防撞、6-盲区检测(右后方)、7-盲区检测(左后方)、8-盲区检测(后方) + BYTE byRes2;//保留字节 + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byRegion; // 区域索引值 0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS), 4-中东(Middle East),0xff-所有 + BYTE byCountry; // 国家索引值,参照:COUNTRY_INDEX + BYTE byArea; //地区 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 +}NET_DVR_FIND_PICTURE_PARAM, *LPNET_DVR_FIND_PICTURE_PARAM; + +//PC NVR的文件搜索条件 +typedef struct tagNET_DVR_FIND_FILE_PCNVR +{ + DWORD dwSize; //结构体大小 + NET_DVR_IPADDR struIpAddr; //IP地址 + WORD wIpPort; //端口号 + BYTE byRes[2]; //保留字节 + char sDomainName[MAX_DOMAIN_NAME]; //域名(暂时没用) + char sSerial[SERIALNO_LEN]; //序列号 + + DWORD lChannel; //通道号 + DWORD dwFileType; //录象文件类型0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发, + //3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像 + DWORD dwIsLocked; //是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo; //是否使用卡号 + BYTE sCardNumber[CARDNUM_LEN_V30]; //卡号 + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struStopTime; //结束时间 +}NET_DVR_FILE_COND_PCNVR, *LPNET_DVR_FILE_COND_PCNVR; + +//PCNVR的录像搜索结果文件 +typedef struct tagNET_DVR_FINDDATA_PCNVR +{ + char sFileName[100];//文件名 + NET_DVR_TIME struStartTime;//文件的开始时间 + NET_DVR_TIME struStopTime;//文件的结束时间 + DWORD dwFileSize;//文件的大小 + char sCardNum[CARDNUM_LEN_V30]; + BYTE byLocked;//9000设备支持,1表示此文件已经被锁定,0表示正常的文件 + BYTE byFileType; //文件类型 + BYTE byRes[2]; +}NET_DVR_FINDDATA_PCNVR, *LPNET_DVR_FINDDATA_PCNVR; + +#define PICTURE_NAME_LEN 64 +#define PICTURE_INFO_MAX_SIZE 640*960*1.5 + +typedef struct +{ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor ;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + BYTE byRecogResult ;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byRes[12]; +}NET_DVR_FIND_PICTURE,*LPNET_DVR_FIND_PICTURE; + +#define MAX_RECORD_PICTURE_NUM 50 // 最大备份图片张数 + +typedef struct tagNET_DVR_BACKUP_PICTURE_PARAM +{ + DWORD dwSize; // 结构体大小 + DWORD dwPicNum; + NET_DVR_FIND_PICTURE struPicture[MAX_RECORD_PICTURE_NUM]; + BYTE byDiskDes[DESC_LEN_32]; + BYTE byWithPlayer; + BYTE byContinue; /*是否继续备份 0不继续 1继续*/ + BYTE byRes[34]; +}NET_DVR_BACKUP_PICTURE_PARAM, *LPNET_DVR_BACKUP_PICTURE_PARAM; + +typedef struct +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCompressType; //待获取的压缩参数类型1,主码流2,子码流3,事件 + BYTE byRes[15]; //保留 + NET_DVR_COMPRESSIONCFG_V30 struCurrentCfg; //当前压缩参数配置 +}NET_DVR_COMPRESSION_LIMIT, *LPNET_DVR_COMPRESSION_LIMIT; + +#define STEP_READY 0 //准备升级 +#define STEP_RECV_DATA 1 //接收升级包数据 +#define STEP_UPGRADE 2 //升级系统 +#define STEP_BACKUP 3 //备份系统 +#define STEP_SEARCH 255 //搜索升级文件 + +typedef struct tagNET_DVR_VIDEO_EFFECT +{ + DWORD dwBrightValue; //亮度[0,255] + DWORD dwContrastValue; //对比度[0,255] + DWORD dwSaturationValue; //饱和度[0,255] + DWORD dwHueValue; //色调[0,255] + DWORD dwSharpness; //锐度[0,255] + DWORD dwDenoising; //去噪[0,255] + BYTE byRes[12]; +}NET_DVR_VIDEO_EFFECT, *LPNET_DVR_VIDEO_EFFECT; + +typedef struct tagNET_DVR_VIDEO_INPUT_EFFECT +{ + DWORD dwSize; //结构体大小 + WORD wEffectMode; //模式 0-标准 1-室内 2-弱光 3-室外 255-自定义 + BYTE byRes1[146]; //保留 + NET_DVR_VIDEO_EFFECT struVideoEffect; //视频效果参数 + BYTE byRes2[60]; //保留 +}NET_DVR_VIDEO_INPUT_EFFECT, *LPNET_DVR_VIDEO_INPUT_EFFECT; + + +typedef struct tagNET_DVR_VIDEOPARA_V40 +{ + DWORD dwChannel; // 通道号 + DWORD dwVideoParamType; // 视频参数类型 0-亮度 1-对比度 2-饱和度 3-色度 4-锐度 5-去噪 + DWORD dwVideoParamValue; //对应的视频参数值,范围依据能力集 + BYTE byRes[12]; +}NET_DVR_VIDEOPARA_V40, *LPNET_DVR_VIDEOPARA_V40; + +typedef struct tagNET_DVR_DEFAULT_VIDEO_COND +{ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; // 通道号 + DWORD dwVideoMode; // 模式 + BYTE byRes[32]; // 保留 +}NET_DVR_DEFAULT_VIDEO_COND, *LPNET_DVR_DEFAULT_VIDEO_COND; + +typedef struct tagNET_DVR_ENCODE_JOINT_PARAM +{ + DWORD dwSize; // 结构体大小 + BYTE byJointed; // 0 没有关联 1 已经关联 + BYTE byDevType; // 被关联的设备类型 1 代表智能设备 + BYTE byRes1[2]; // 保留字节 + NET_DVR_IPADDR struIP; // 关联的被取流设备IP地址 + WORD wPort; // 关联的被取流设备端口号 + WORD wChannel; // 关联的被取流设备通道号 + BYTE byRes2[20]; // 保留字节 +}NET_DVR_ENCODE_JOINT_PARAM, *LPNET_DVR_ENCODE_JOINT_PARAM; + +typedef struct tagNET_DVR_VCA_CHAN_WORKSTATUS +{ + BYTE byJointed; // 0-没有关联 1-已经关联 + BYTE byRes1[3]; + NET_DVR_IPADDR struIP; // 关联的取流设备IP地址 + WORD wPort; // 关联的取流设备端口号 + WORD wChannel; // 关联的取流设备通道号 + BYTE byVcaChanStatus; // 0 - 未启用 1 - 启用 + BYTE byRes2[19]; // 保留字节 +}NET_DVR_VCA_CHAN_WORKSTATUS, *LPNET_DVR_VCA_CHAN_WORKSTATUS; + +typedef struct tagNET_DVR_VCA_DEV_WORKSTATUS +{ + DWORD dwSize; // 结构体大小 + BYTE byDeviceStatus; // 设备的状态0 - 正常工作 1- 不正常工作 + BYTE byCpuLoad; // CPU使用率0-100 分别代表使用百分率 + NET_DVR_VCA_CHAN_WORKSTATUS struVcaChanStatus[MAX_VCA_CHAN]; + DWORD dwRes[40]; // 保留字节 +}NET_DVR_VCA_DEV_WORKSTATUS, *LPNET_DVR_VCA_DEV_WORKSTATUS; + +typedef struct tagNET_DVR_VGA_DISP_CHAN_CFG_V40 +{ + DWORD dwSize; + BYTE byAudio; /*音频是否开启*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVgaResolution; /*分辨率,从能力集获取*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + DWORD dwWindowMode; /*画面模式,能力集获取*/ + BYTE byJoinDecChan[MAX_WINDOWS];/*各个子窗口关联的解码通道*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ + /*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ + BYTE byUnionType; + union + { + BYTE byRes[160]; + struct + { + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ + BYTE byJoinDecoderId[MAX_WINDOWS]; + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此//分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通 + //道都分配给此解码通道 + BYTE byDecResolution; + BYTE byRes[143]; + }struVideoPlatform; + struct + { + BYTE byRes[160]; + }struNotVideoPlatform; + }struDiff; + BYTE byRes[120]; +}NET_DVR_VGA_DISP_CHAN_CFG_V40,*LPNET_DVR_VGA_DISP_CHAN_CFG_V40; + +typedef struct tagNET_DVR_V6SUBSYSTEMPARAM +{ + BYTE bySerialTrans;//是否透传,0-否,1-是 + BYTE byRes[35]; +}NET_DVR_V6SUBSYSTEMPARAM, *LPNET_DVR_V6SUBSYSTEMPARAM; + + + + +typedef struct tagNET_DVR_CORRECT_DEADPIXEL_PARAM +{ + DWORD dwSize; + DWORD dwCommand; //命令:0-进入坏点模式,1-添加坏点,2-保存坏点,3-退出坏点 + DWORD dwDeadPixelX; //坏点X坐标 + DWORD dwDeadPixelY; //坏点Y坐标 + BYTE byRes[12]; //保留 +}NET_DVR_CORRECT_DEADPIXEL_PARAM, *LPNET_DVR_CORRECT_DEADPIXEL_PARAM; + +#define MAX_REDAREA_NUM 6 //最大红绿灯区域个数 + +typedef struct tagNET_DVR_CORRECT_PARAMS +{ + BYTE byYellowIntervalTime;//黄灯的间隔时间,单位是秒(s) + BYTE byDigTrafficLight;//是否是交通数字黄灯,0-不是,1-是 + BYTE byRes[2]; +}NET_DVR_CORRECT_PARAMS,*LPNET_DVR_CORRECT_PARAMS; + +typedef struct tagNET_DVR_REDAREACFG +{ + DWORD dwSize; + DWORD dwCorrectEnable; //是否开启校正功能,0-关闭,1-开启 + DWORD dwCorrectLevel; //校正级别,1(校正度最低)-10(校正度最高),默认为5 + DWORD dwAreaNum; //校正区域个数 + NET_VCA_RECT struLaneRect[MAX_REDAREA_NUM]; //校正区域 + NET_DVR_CORRECT_PARAMS struCorrectParam[MAX_REDAREA_NUM/*6*/]; //校正区域属性和校正区域对应 + BYTE byRes2[8]; //保留 +}NET_DVR_REDAREACFG, *LPNET_DVR_REDAREACFG; + +typedef struct tagNET_DVR_HISTORICDATACFG +{ + DWORD dwSize; + DWORD dwTotalNum; //历史数据个数 + BYTE byRes[16]; +}NET_DVR_HISTORICDATACFG, *LPNET_DVR_HISTORICDATACFG; + + +#define INQUEST_MESSAGE_LEN 44 //审讯重点标记信息长度 +#define INQUEST_MAX_ROOM_NUM 2 //最大审讯室个数 +#define MAX_RESUME_SEGMENT 2 //支持同时恢复的片段数目 + +typedef struct tagNET_DVR_INQUEST_ROOM +{ + BYTE byRoomIndex; //审讯室编号 + BYTE byFileType; //0-审讯文件,1-开庭上传文件 + BYTE byMode; /* 0 使用已有常规配置; 非0,按照mode值, 1-电影 2-画中画1 3-画中画2 4-双画面 5-三画面1 6-三画面2 7-四画面1 8-四画面2 */ + BYTE byQuick; /* 是否为快速配置, 1-快速配置(不配置参数到flash),0-常规配置(配置参数到Flash) , 仅在mode 非 0 有效*/ + BYTE byRes[20]; //保留 +}NET_DVR_INQUEST_ROOM, *LPNET_DVR_INQUEST_ROOM; + +typedef struct tagNET_DVR_INQUEST_MESSAGE +{ + char sMessage[INQUEST_MESSAGE_LEN]; //重点标记信息 + BYTE byRes[46]; //保留 +}NET_DVR_INQUEST_MESSAGE, *LPNET_DVR_INQUEST_MESSAGE; + +typedef struct tagNET_DVR_INQUEST_SENSOR_DEVICE +{ + WORD wDeviceType; //数据采集设备型号:0-无 1-米乐 2-镭彩 3-优力 4-佳盟 5-永控、6-垅上、7-维纳斯达 + WORD wDeviceAddr; //数据采集设备地址 + BYTE byRes[28]; //保留 +}NET_DVR_INQUEST_SENSOR_DEVICE, *LPNET_DVR_INQUEST_SENSOR_DEVICE; + +typedef struct tagNET_DVR_INQUEST_SENSOR_INFO +{ + NET_DVR_INQUEST_SENSOR_DEVICE struSensorDevice[INQUEST_MAX_ROOM_NUM]; + DWORD dwSupportPro; //支持协议类型,按位表示, 新版本走能力集,不再扩展此字段 + //0x1:米乐 0x2:镭彩 0x4:优力 + BYTE byRes[120]; //保留 +}NET_DVR_INQUEST_SENSOR_INFO, *LPNET_DVR_INQUEST_SENSOR_INFO; + +typedef struct tagNET_DVR_INQUEST_ROOM_INFO +{ + char szCDName[NAME_LEN]; //光盘名称,单室双刻光盘名称是一样的 + union + { + BYTE byBitRate; // byCalcType为0时有效,(0-32、1-48、2-64、3-80、4-96、5-128、 + //6-160、7-192、8-224、9-256、10-320、11-384、12-448、 + //13-512、14-640、15-768、16-896前16个值保留)17-1024、18-1280、19-1536、 + //20-1792、21-2048、22-3072、23-4096、24-8192 + BYTE byInquestTime; // byCalcType为1时有效,0-1小时, 1-2小时,2-3小时,3-4小时, 4-6小时,5-8小时,6-10小时,7-12小时 + //8-16小时, 9-20小时,10-22小时,11-24小时 + }uCalcMode; + BYTE byCalcType; //刻录计算类型0-按码率 1-按时间 + BYTE byAutoDelRecord; // 是否自动删除录像,0-不删除,即结束时保存录像 1-删除 + BYTE byAlarmThreshold; // 声音报警阀值 + BYTE byInquestChannelResolution; //审讯通道分辨率,0:720P,1:1080P,2:CIF,3:4CIF,4:WD1,5-VGA + BYTE byAutoOpenTray; //是否自动弹仓 0-否,1-是 + BYTE byCDPrintEnabled; //恢复完成后,是否使能光盘封面打印功能 0-否 1-开启 + BYTE byRes[9]; +}NET_DVR_INQUEST_ROOM_INFO, *LPNET_DVR_INQUEST_ROOM_INFO; + +typedef struct tagNET_DVR_INQUEST_SYSTEM_INFO +{ + DWORD dwRecordMode; //刻录模式:1 单室双刻模式 2 单室轮刻模式 3 双室双刻模式(修改需要重启设备) + DWORD dwWorkMode; //工作模式:0 标准模式 1 通用模式(保留,目前只有标准模式) + DWORD dwResolutionMode; //设备分辨率,0:标清 1:D1 2:720P 3:1080P(高清审讯机不用此字段) + NET_DVR_INQUEST_SENSOR_INFO struSensorInfo; //温湿度传感器配置 + NET_DVR_INQUEST_ROOM_INFO struInquestRoomInfo[INQUEST_MAX_ROOM_NUM]; + BYTE byEnableHashCheck; //是否启用对光盘数据HASH值校验 0-无意义,1-不启用,2-启用 + BYTE byEnableInitCD; //是否启用初始化光盘 0-无意义,1-不启用,2-启用 + BYTE byCDProcessingMode; //1.存盘模式 2-出盘模式 存盘模式:刻录完成的光盘归档到出盘桶上;刻录失败的光盘,机械臂将坏盘直接通过中间的出盘位置弹出。出盘模式:将刻录好的光盘从中间的出盘位置出盘,刻录失败的光盘放到出盘桶里 + BYTE byRes[21]; //保留 +}NET_DVR_INQUEST_SYSTEM_INFO, *LPNET_DVR_INQUEST_SYSTEM_INFO; + +typedef struct _NET_DVR_INQUEST_ALARM_ +{ + DWORD dwSize; + DWORD dwAlarmType; /*报警类型 0-光盘满 1-光盘错误 2-审讯超时提醒*/ + BYTE byTrayNo; /*光驱号*/ + BYTE byRes[3]; + DWORD dwInquestTime; /*已审讯时间,当dwAlarmType=2时有效,单位:秒*/ + DWORD dwNotifyChannel; /*审讯时间超时提醒通道号*/ + BYTE byRes1[244]; +}NET_DVR_INQUEST_ALARM, *LPNET_DVR_INQUEST_ALARM; + +typedef struct _NET_DVR_VIDEO_PARKING_POLE_ALARM_ +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_V30 struTime; //触发时间 + BYTE byParkingNum[32]; //车位编号 + BYTE byAlarmType; //报警类型,0-未知,1-镜头遮挡报警,2-按钮报警,3-非法占用报警,4-车位状态变化 + BYTE byVehicleEnterState; //车辆进入状态,0-未知,1-进入,2-离开 + BYTE byRes[78]; +}NET_DVR_VIDEO_PARKING_POLE_ALARM, *LPNET_DVR_VIDEO_PARKING_POLE_ALARM; + +typedef struct tagNET_DVR_INQUEST_RESUME_SEGMENT +{ + NET_DVR_TIME struStartTime; //事件起始时间 + NET_DVR_TIME struStopTime; //事件终止时间 + BYTE byRoomIndex; //审讯室编号,从1开始 + BYTE byDriveIndex; //刻录机编号,从1开始 + WORD wSegmetSize; //本片断的大小, 单位M + DWORD dwSegmentNo; //本片断在本次审讯中的序号,从1开始 + BYTE byRes[24]; //保留 +}NET_DVR_INQUEST_RESUME_SEGMENT, *LPNET_DVR_INQUEST_RESUME_SEGMENT; + +typedef struct tagNET_DVR_INQUEST_RESUME_EVENT +{ + DWORD dwResumeNum; //需恢复的事件个数 + NET_DVR_INQUEST_RESUME_SEGMENT struResumeSegment[MAX_RESUME_SEGMENT]; + BYTE byResumeMode; //恢复模式,0-单光盘恢复,1-双光盘恢复 + BYTE byCDPrintEnbled; //恢复完成后,是否使能光盘封面打印功能 0-否 1-开启 + BYTE byRes[198]; //保留 +}NET_DVR_INQUEST_RESUME_EVENT, *LPNET_DVR_INQUEST_RESUME_EVENT; + +typedef struct tagNET_DVR_INQUEST_DEVICE_VERSION +{ +BYTE byMainVersion; /*基线主版本. + 0 : 未知 + 1 : 8000审讯DVR + 次版本: 1 : 8000HD-S + 2 : 8100审讯DVR + 次版本: 1 : 审讯81SNL + 2 : 审讯81SH + 3 : 审讯81SFH + 3 : 8608高清审讯机NVR + 次版本: 1 : DS-8608SN-SP + 2 : DS-8608SN-ST +*/ +BYTE bySubVersion; //基线次版本 +BYTE byUpgradeVersion; //升级版本,未升级为0 +BYTE byCustomizeVersion; //定制版本,非定制为0 +BYTE byRes[60]; //保留 +}NET_DVR_INQUEST_DEVICE_VERSION, *LPNET_DVR_INQUEST_DEVICE_VERSION; + +typedef struct tagNET_DVR_DISK_RAID_INFO +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //磁盘Raid是否禁用 + BYTE bySleepStatus; //0-无效, 1-休眠,2-不休眠 + BYTE byRes[34]; //保留字节 +}NET_DVR_DISK_RAID_INFO, *LPNET_DVR_DISK_RAID_INFO; + + +typedef struct tagNET_DVR_SYNCHRONOUS_IPC +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用:为前端IPC同步设备参数 + BYTE byRes[7]; //保留 +}NET_DVR_SYNCHRONOUS_IPC, *LPNET_DVR_SYNCHRONOUS_IPC; + +typedef struct tagNET_DVR_IPC_PASSWD +{ + DWORD dwSize; //结构体大小 + char sOldPasswd[PASSWD_LEN]; //IPC的旧密码,传给DVR让DVR验证 + char sNewPasswd[PASSWD_LEN]; //IPC的新密码 + BYTE byRes[32]; +}NET_DVR_IPC_PASSWD, *LPNET_DVR_IPC_PASSWD; + +//通过获取DVR的网络状态:单位bps +typedef struct tagNET_DEVICE_NET_USING_INFO +{ + DWORD dwSize; //结构体大小 + DWORD dwPreview; //预览 + DWORD dwPlayback; //回放 + DWORD dwIPCModule; //IPC接入 + DWORD dwNetDiskRW; //网盘读写 + BYTE res[32]; +}NET_DVR_DEVICE_NET_USING_INFO, *LPNET_DVR_DEVICE_NET_USING_INFO; + +//通过DVR设置前端IPC的IP地址 +typedef struct tagNET_DVR_IPC_NETCFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_IPADDR struIP; //IPC的IP地址 + WORD wPort; //IPC的端口 + char res[126]; +}NET_DVR_IPC_NETCFG, *LPNET_DVR_IPC_NETCFG; + +//按时间锁定 +typedef struct tagNET_DVR_TIME_LOCK +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME strBeginTime; + NET_DVR_TIME strEndTime; + DWORD dwChannel; //通道号, 0xff表示所有通道 + DWORD dwRecordType; //录像类型: 0xffffffff-全部,0-定时录像,1-移动侦测,2-报警触发,3-报警触发或移动侦测,4-报警触发和移动侦测,5-命令触发,6-手动录像,7-智能录像(同文件查找) + DWORD dwLockDuration; //锁定持续时间,单位秒,0xffffffff表示永久锁定 + NET_DVR_TIME_EX strUnlockTimePoint; //加锁时有效,当dwLockDuration不为永久锁定时,锁定持续的时间到此时间点就自动解锁 + BYTE byRes[4]; +}NET_DVR_TIME_LOCK, *LPNET_DVR_TIME_LOCK; + +typedef struct tagNET_DVR_LOCK_RETURN +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME strBeginTime; + NET_DVR_TIME strEndTime; + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效,0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区, byISO8601为1时有效 + BYTE byRes[17]; +}NET_DVR_LOCK_RETURN, *LPNET_DVR_LOCK_RETURN; + +//67DVS +//证书下载类型 +typedef enum +{ + UPGRADE_CERT_FILE = 0, + UPLOAD_CERT_FILE = 1, + TRIAL_CERT_FILE = 2, + CONFIGURATION_FILE = 3, + UPLOAD_RECORD_FILE = 4 , //上传录像文件 + SCENE_CONFIGURATION_FILE = 5, //场景配置文件上传 + UPLOAD_PICTURE_FILE = 6, //上传图片文件 + UPLOAD_VIOLATION_FILE = 7, //上传违法字典文件 + UPLOAD_TG_FILE = 8, //上传TG(Timing Generator)文件(用于T1测试) + UPLOAD_DATA_TO_DB = 9, //上传文件到视图库 + UPLOAD_BACKGROUND_PIC = 10, //上传背景图片 + UPLOAD_CALIBRATION_FILE = 11, //上传标定文件 + UPLOAD_TME_FILE = 12, //上传出入口管理文件 + + //UPLOAD_TME_FILE = 12, //上传出入口管理文件 + UPLOAD_VEHICLE_BLOCKALLOWLIST_FILE = 13, + UPLOAD_PICTURE_TO_CLOUD = 15, //上传图片到云存储 + UPLOAD_VIDEO_FILE = 16, //上传视频文件 + UPLOAD_SCREEN_FILE = 17, //上传屏幕服务器文件 + UPLOAD_PUBLISH_MATERIAL = 18, //上传信息发布静态素材文件 + UPLOAD_PUBLISH_UPGRADE_FILE = 19, //上传信息发升级文件 + UPLOAD_RING_FILE = 20, //上传铃音文件 + UPLOAD_ENCRYPT_CERT = 21, //上传加密证书 + UPLOAD_THERMOMETRIC_FILE = 22, //上传测温标定文件 + UPLOAD_SUBBRAND_FILE = 23, //上传车辆子品牌文件 + UPLOAD_LED_CHECK_FILE = 24, //上传LED校正文件 + BATCH_UPLOAD_PICTURE_FILE = 25, //批量上传图片文件 + UPLOAD_EDID_CFG_FILE = 26, //上传EDID配置文件 + UPLOAD_PANORAMIC_STITCH = 27,//上传全景自动拼接配置文件 + UPLOAD_BINOCULAR_COUNTING = 28,//上传垂直客流矫正表 + UPLOAD_AUDIO_FILE = 29, //上传语音文件 + UPLOAD_PUBLISH_THIRD_PARTY_FILE = 30, //上传第三方文件 + UPLOAD_DEEPEYES_BINOCULAR = 31,//上传TX1双目矫正表 + UPLOAD_CERTIFICATE_BLOCKLIST = 32, //上传身份证禁止名单 + UPLOAD_HD_CAMERA_CORRECT_TABLE = 33,//上传2400W矫正表 + UPLOAD_FD_DATA = 35,//导入人脸数据到人脸库 + UPLOAD_FACE_DATA = 36,//导入人脸图片数据到人脸库 + UPLOAD_FACE_ANALYSIS_DATA = 37,//导入图片数据到设备识别图片目标 + UPLOAD_FILEVOLUME_DATA = 38,//上传文件卷数据文件(目前只有CVR中实现) + IMPORT_DATA_TO_FACELIB = 39,//导入人脸数据(人脸图片+图片附件信息 到设备人脸库) + UPLOAD_LEFTEYE_4K_CALIBFILE = 40,//左眼、4K相机标定内参数据上传(针对三目教育录播相机) + UPLOAD_SECURITY_CFG_FILE = 41,//配置文件安全导入 + UPLOAD_RIGHT_CONTROLLER_AUDIO = 42, //上传权限控制器音频文件 + UPLOAD_MODBUS_CFG_FILE = 43, //导入Modbus协议配置文件 + UPLOAD_NOTICE_VIDEO_DATA = 44, //公告视频下发 + UPLOAD_RS485_PROTOCOL_DLL_FILE = 45, //导入RS485协议动态库文件 + UPLOAD_PIC_BY_BUF = 46,//按图片缓存导入图片文件 + UPLOAD_CLIENT_CALIBFILE = 47,//客户标定文件导入(.pto格式文件) + UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W = 48,//3200W矫正表(.cal格式文件) + UPLOAD_DOOR_CONTENT = 49, //上传单元门口联系人信息 + UPLOAD_ASR_CONTROL_FILE = 50, //语音识别控制文件上传 + UPLOAD_APP_FILE = 51,//上传HEOP APP文件 + UPLOAD_AI_ALGORITHM_MODEL = 52, //AI开放平台,主动上传算法模型到设备 + UPLOAD_PUBLISH_PROGRAM_THUMBNAIL = 53, //上传信息发布节目缩略图 + UPLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 54, //上传信息发布模板缩略图 + UPLOAD_AI_PICTURE = 55,//AI开放平台,图片任务,下发图片为二进制格式 + UPLOAD_OFFLINE_CAPTURE_INFO = 56, //离线采集用户列表导入 + UPLOAD_FONT_TYPE_DLL_FILE = 57, //字体库导入 + UPLOAD_CLIENT_CALIBFILE_FILE = 58, //客户标定文件导入(.pto格式文件,带通道) + UPLOAD_HD_CAMERA_CORRECT_TABLE_3200W_FILE = 59, //3200W矫正表(.cal格式文件,带通道) + IMPORT_DATA_TO_HBDLIB = 60, /*导入人体数据到人体库(人体图片+图片附件信息 到设备人体库)*/ + UPLOAD_SCENE_FILE = 61, //导入场景文件 + UPLOAD_RATIOSTITCHING_FILE = 62, // 导入倍率拼接文件 + UPLOAD_LENS_PARAM_FILE = 63, // 导入镜头参数文件 + UPLOAD_CUSTOMAUDIO_FILE = 64, //导入自定义音频素材文件 + UPLOAD_VIDEOWALL_MATERIAL_FILE = 65 //导入电视墙窗口素材文件 +}NET_SDK_UPLOAD_TYPE; + +typedef enum +{ + NET_SDK_DOWNLOAD_CERT = 0, //下载证书 + NET_SDK_DOWNLOAD_IPC_CFG_FILE = 1,//下载IPC配置文件 + NET_SDK_DOWNLOAD_BASELINE_SCENE_PIC = 2, //下载基准场景图片 + NET_SDK_DOWNLOAD_VQD_ALARM_PIC = 3, //下载VQD报警图片 + NET_SDK_DOWNLOAD_CONFIGURATION_FILE = 4, //下载配置文件 + NET_SDK_DOWNLOAD_SCENE_CONFIGURATION_FILE = 5, //下载场景配置文件 + NET_SDK_DOWNLOAD_FILE_FORM_DB = 6, //从视图库中下载 + // NET_SDK_DOWNLOAD_TME_FILE = 7 //下载出入口管理文件 + + NET_SDK_DOWNLOAD_TME_FILE = 7, //下载出入口管理文件 + NET_SDK_DOWNLOAD_VEHICLE_BLOCKALLOWLIST_FILE = 8, //下载名单配置文件 + NET_SDK_DOWNLOAD_GUID_FILE = 9, //下载GUID文件 + NET_SDK_DOWNLOAD_FILE_FORM_CLOUD = 10, //从云存储下载图片 + NET_SDK_DOWNLOAD_PICTURE = 11, //下载图片 + NET_SDK_DOWNLOAD_VIDEO = 12, //下载视频 + NET_DVR_DOWNLOAD_SCREEN_FILE = 13, //下载屏幕服务器文件 + NET_SDK_DOWNLOAD_PUBLISH_MATERIAL = 14, //下载信息发布静态素材文件 + NET_SDK_DOWNLOAD_THERMOMETRIC_FILE = 15,//下载测温标定文件 + NET_SDK_DOWNLOAD_LED_CHECK_FILE = 16,//下载LED校正文件 + NET_SDK_DOWNLOAD_VEHICLE_INFORMATION = 17,//车辆信息导出 + NET_SDK_DOWNLOAD_CERTIFICATE_BLOCKLIST_TEMPLET = 18, //下载身份证禁止名单模板 + NET_SDK_DOWNLOAD_LOG_FILE = 19, //日志导出 + NET_SDK_DOWNLOAD_FILEVOLUME_DATA = 20,//下载文件卷数据文件(目前只有CVR设备支持) + NET_SDK_DOWNLOAD_FD_DATA = 21,//导出指定人脸库的数据 + NET_SDK_DOWNLOAD_SECURITY_CFG_FILE = 22,//配置文件安全导出 + NET_SDK_DOWNLOAD_PUBLISH_SCHEDULE = 23, //日程导出 + NET_SDK_DOWNLOAD_RIGHT_CONTROLLER_AUDIO = 24, //下载权限控制器音频文件 + NET_SDK_DOWNLOAD_MODBUS_CFG_FILE = 25, //导出Modbus协议配置文件 + NET_SDK_DOWNLOAD_RS485_PROTOCOL_DLL_FILE = 26, //导出RS485协议动态库文件 + NET_SDK_DOWNLOAD_CLUSTER_MAINTENANCE_LOG = 27, //集群维护日志导出 + NET_SDK_DOWNLOAD_SQL_ARCHIVE_FILE = 28, //归档数据库记录导出 + NET_SDK_DOWNLOAD_SUBWIND_STREAM = 29,//导出子窗口码流 + NET_SDK_DOWNLOAD_DEVTYPE_CALIBFILE = 30,//型号标定文件导出(.cal格式文件) + NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE = 31,// 2400W/3200W矫正表导出(.cal格式文件) + NET_SDK_DOWNLOAD_CLIENT_CALIBFILE = 32,//客户标定文件导出(.pto格式文件) + NET_SDK_DOWNLOAD_FOUE_CAMERAS_PICTURES = 33,//四通道图片包导出(.tar格式文件) + NET_SDK_DOWNLOAD_DOOR_CONTENT = 34, //下载门口联系人信息 + NET_SDK_DOWNLOAD_PUBLISH_MATERIAL_THUMBNAIL = 35, //下载信息发布静态素材缩略图 + NET_SDK_DOWNLOAD_PUBLISH_PROGRAM_THUMBNAIL = 36, //下载信息发布节目缩略图 + NET_SDK_DOWNLOAD_PUBLISH_TEMPLATE_THUMBNAIL = 37, //下载信息发布模板缩略图 + NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_MAIN = 38,//黑光矫正表文件(主分区) + NET_SDK_DOWNLOAD_DARK_FIGHTER_X_CORRECT_TABLE_BACKUP = 39,//黑光矫正表文件(备份分区) + NET_SDK_DOWNLOAD_OFFLINE_CAPTURE_INFO_TEMPLATE = 40, //下载采集用户列表模板 + NET_SDK_DOWNLOAD_CAPTURE_DATA = 41, //下载离线采集数据 + NET_SDK_DOWNLOAD_HD_CAMERA_CORRECT_TABLE_FILE = 42, // 2400W/3200W矫正表导出(.cal格式文件, 带通道) + NET_SDK_DOWNLOAD_CLIENT_CALIBFILE_FILE = 43, //客户标定文件导出(.pto格式文件, 带通道) + NET_SDK_DOWNLOAD_FOUR_CAMERAS_PICTURES_FILE = 44, //四通道图片包导出(.tar格式文件, 带通道) + NET_SDK_DOWNLOAD_SCENE_FILE = 45, //导出场景文件 + NET_SDK_DOWNLOAD_OPEN_SOURCE_CERT = 46, //导出开源合规证书 + NET_SDK_DOWNLOAD_RATIOSTITCHING_FILE = 47, //导出倍率拼接文件 + NET_SDK_DOWNLOAD_LENS_PARAM_FILE = 48, // 导出镜头参数文件 + NET_SDK_DOWNLOAD_SELECT_DEVTYPE_CALIBFILE = 49, //导出指定型号标定文件(.cal格式文件) + NET_SDK_DOWNLOAD_VIDEOWALL_MATERIAL_FILE = 50, //导出电视墙窗口素材文件 +}NET_SDK_DOWNLOAD_TYPE; + +//下载状态 +typedef enum +{ + NET_SDK_DOWNLOAD_STATUS_SUCCESS = 1, //下载成功 + NET_SDK_DOWNLOAD_STATUS_PROCESSING, //正在下载 + NET_SDK_DOWNLOAD_STATUS_FAILED, //下载失败 + NET_SDK_DOWNLOAD_STATUS_UNKOWN_ERROR, //未知错误 + NET_SDK_DOWNLOAD_STATUS_RESOURCE, //内存不足 + NET_SDK_DOWNLOAD_STATUS_GUIDFILE_EXPORT_FAIL //GUID文件导出失败 +}NET_SDK_DOWNLOAD_STATUS; + +//下载控制命令类型 +typedef enum tagNET_SDK_DOWNLOAD_CONTROL_TYPE_ENUM +{ + ENUM_DOWNLOAD_CONTROL_ERR = -1, + ENUM_DOWNLOAD_CONTROL_QOS = 1 //流控 +}NET_SDK_DOWNLOAD_CONTROL_TYPE_ENUM; + +typedef struct tagNET_DVR_PANORAMIC_STITCH_UPLOAD +{ + DWORD dwSize; + DWORD dwChannel;// 通道号 + BYTE byRes[128]; +}NET_DVR_PANORAMIC_STITCH_UPLOAD, *LPNET_DVR_PANORAMIC_STITCH_UPLOAD; + +typedef struct NET_DVR_FD_DATA_COND +{ + DWORD dwSize; + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //人脸库ID + char szCheckCode[NET_SDK_CHECK_CODE_LEN/*128*/]; //校验码 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + char szLoginPassword[PASSWD_LEN/*16*/]; //登录密码 + BYTE byRes[111]; +}NET_DVR_FD_DATA_COND, *LPNET_DVR_FD_DATA_COND; + +typedef struct NET_DVR_UPLOAD_FACE_DATA +{ + DWORD dwSize; + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/]; //人脸库ID + BYTE byFDLibType; //人脸库类型0-保留;1-禁止名单;2-允许名单 + BYTE byRes1[3]; + char szCustomInfo[NET_SDK_FDPIC_CUSTOM_INFO_LEN/*96*/]; //人脸库图片自定义信息 + BYTE byRes[512]; +}NET_DVR_UPLOAD_FACE_DATA, *LPNET_DVR_UPLOAD_FACE_DATA; + +typedef struct NET_DVR_UPLOAD_FACE_DATA_OUT +{ + char szPicID[NET_SDK_MAX_PICID_LEN/*256*/]; //图片ID + BYTE byRes[128]; +}NET_DVR_UPLOAD_FACE_DATA_OUT, *LPNET_DVR_UPLOAD_FACE_DATA_OUT; + +typedef struct NET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT +{ + DWORD dwSize; + DWORD dwPID;//图片ID + DWORD dwFaceAnalysisNum;//识别出的人脸区域个数 + NET_VCA_RECT struVcaRect[NET_DVR_MAX_FACE_ANALYSIS_NUM]; //识别出来的人脸目标,紧凑排列 + BYTE byRes[128]; +}NET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT, *LPNET_DVR_UPLOAD_FACE_ANALYSIS_DATA_OUT; + +typedef struct NET_DVR_SECURITY_CFG_FILE_COND +{ + DWORD dwSize; + char szSecretKey[NET_SDK_SECRETKEY_LEN/*128*/];//校验密钥 + BYTE byRes[128]; +}NET_DVR_SECURITY_CFG_FILE_COND, *LPNET_DVR_SECURITY_CFG_FILE_COND; + +typedef struct tagNET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM_ +{ + DWORD dwSize; + BYTE byType; //日志类型,0-全部,1-精简,2-默认 + BYTE byRes[255]; +}NET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM, *LPNET_DVR_DOWNLOAD_CLUSTER_MAINTENANCE_LOG_PARAM; + + +typedef struct tagNET_DVR_BONJOUR_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byEnableBonjour; // Bonjour使能 0 :开启 1:关闭 + BYTE byRes1[3]; + BYTE byFriendlyName[MAX_DOMAIN_NAME]; // 服务名 + BYTE byRes2[128]; +}NET_DVR_BONJOUR_CFG, *LPNET_DVR_BONJOUR_CFG; + +typedef struct tagNET_DVR_SOCKS_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byEnableSocks; // 使能 0:关闭 1:开启 + BYTE byVersion; // SOCKS版本 4:SOCKS4 5:SOCKS5 + WORD wProxyPort; // 代理端口,默认1080 + BYTE byProxyaddr[MAX_DOMAIN_NAME]; // 代理IP地址,可以是域名 + BYTE byUserName[MAX_DOMAIN_NAME]; // 用户名 SOCKS才用 + BYTE byPassword[NAME_LEN]; // 密码SOCKS5才用 + BYTE byLocalAddr[MAX_LOCAL_ADDR_LEN]; //不使用socks代理的网段,格式为"ip/netmask;ip/netmask;…" + BYTE byRes[128]; +}NET_DVR_SOCKS_CFG, *LPNET_DVR_SOCKS_CFG; + + + +typedef struct tagNET_DVR_QOS_CFG +{ + DWORD dwSize; + BYTE byManageDscp; // 管理数据的DSCP值 [0-63] + BYTE byAlarmDscp; // 报警数据的DSCP值 [0-63] + BYTE byVideoDscp; // 视频数据的DSCP值 [0-63],byFlag为0时,表示音视频 + BYTE byAudioDscp; // 音频数据的DSCP值 [0-63],byFlag为1时有效 + BYTE byFlag; // 0:音视频合一,1:音视频分开 + BYTE byEnable; + BYTE byRes[126]; +}NET_DVR_QOS_CFG, *LPNET_DVR_QOS_CFG; + +typedef struct tagNET_DVR_HTTPS_CFG +{ + DWORD dwSize; + WORD wHttpsPort; // HTTPS端口 + BYTE byEnable; // 使能 0:关闭 1:开启 + BYTE byRes[125]; +}NET_DVR_HTTPS_CFG, *LPNET_DVR_HTTPS_CFG; + +//证书相关 +typedef struct tagNET_DVR_CERT_NAME +{ + BYTE byCountry[MAX_COUNTRY_NAME_LEN]; //国家代号 CN等 + BYTE byState[MAX_DOMAIN_NAME]; //洲或省 + BYTE byLocality[MAX_DOMAIN_NAME]; //地区 + BYTE byOrganization[MAX_DOMAIN_NAME]; //组织 + BYTE byUnit[MAX_DOMAIN_NAME]; //单位 + BYTE byCommonName[MAX_DOMAIN_NAME]; + BYTE byEmail[MAX_DOMAIN_NAME]; + BYTE byRes[128]; +}NET_DVR_CERT_NAME, *LPNET_DVR_CERT_NAME ; + +typedef struct tagNET_DVR_CERT_ADDITION_PARAM +{ + DWORD dwSize; + char csCustomID[64]; //用户自定义ID + BYTE byRes1[2]; + BYTE byCertificateMode;//wCertType为1-Certificate时有效,0-自签名证书,1-证书和私钥方式 + BYTE byPrivateKeyMode;// byCertificateMode为1-证书和私钥方式时有效 0-独立key 1-PKCS#12 + BYTE byPassword[64]; //密码,当PrivateKeyMode为0时为私钥的密码,为1时为PKCS#12的密码 + BYTE byRes[128]; +}NET_DVR_CERT_ADDITION_PARAM, *LPNET_DVR_CERT_ADDITION_PARAM; + + +typedef struct tagNET_DVR_CERT_PARAM +{ + DWORD dwSize; + WORD wCertFunc; //证书种类,0-802.1x(应用于WIFI接入证书),1-HTTPS, 3-ieee802.1x(应用于有线LAN接入认证) + WORD wCertType; //证书类型,0-CA,1-Certificate,2-私钥文件 + BYTE byFileType; //证书文件类型,0-PEM,1-PFX + BYTE byRes1[2];//保留字节 + BYTE byAddition;//是否使用附加结构体,0-不使用;1-使用 + NET_DVR_CERT_ADDITION_PARAM * pStruAdditionParam;//附加信息结构体指针 + BYTE byRes[28]; +}NET_DVR_CERT_PARAM, *LPNET_DVR_CERT_PARAM; + +#define UPLOAD_CERTIFICATE 1 //上传证书 + + +typedef struct tagNET_DVR_CERT_INFO +{ + DWORD dwSize; + NET_DVR_CERT_PARAM struCertParam; //证书参数 + DWORD dwValidDays; //有效天数,类型为自签名时有效 + BYTE byPasswd[NAME_LEN]; //私钥密码 + NET_DVR_CERT_NAME struCertName; // 证书名称 + NET_DVR_CERT_NAME struIssuerName; // 证书发行者名称(自签名证书信息获取时有效) + NET_DVR_TIME_EX struBeginTime; //证书创建时间(自签名证书信息获取时有效) + NET_DVR_TIME_EX struEndTime; //证书截止时间(自签名证书信息获取时有效) + BYTE serialNumber[NAME_LEN]; //证书标识码(自签名证书信息获取时有效) + BYTE byVersion; + BYTE byKeyAlgorithm; //加密类型 0-RSA 1-DSA + BYTE byKeyLen; //加密长度 0-512 1-1024、 2-2048 + BYTE bySignatureAlgorithm; //签名算法类型(自签名证书信息获取时有效) + BYTE byRes[128]; +}NET_DVR_CERT_INFO, *LPNET_DVR_CERT_INFO; + + +//channel record status +//***通道录像状态*****// +typedef struct tagNET_DVR_CHANS_RECORD_STATUS +{ + BYTE byValid; //是否有效 + /*(只读)录像类型:0: 不在录像;1:在录像 2-空闲 + 3-无连接 4-无输入视频 5-未加载 6-存档中 7-回传中 + 8-用户名或密码错 9-未验证,10-存档中和录像中 11-录像回传中和录像中 12-token认证失败*/ + BYTE byRecord; + WORD wChannelNO; //通道号 + DWORD dwRelatedHD; //关联磁盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes[7]; //保留字节 +}NET_DVR_CHANS_RECORD_STATUS, *LPNET_DVR_CHANS_RECORD_STATUS; + + +typedef struct tagNET_DVR_IP_ALARM_GROUP_NUM +{ + DWORD dwSize; + DWORD dwIPAlarmInGroup; //IP通道报警输入组数 + DWORD dwIPAlarmInNum; //IP通道报警输入个数 + DWORD dwIPAlarmOutGroup; //IP通道报警输出组数 + DWORD dwIPAlarmOutNum; //IP通道报警输出个数 + BYTE byRes[64]; +}NET_DVR_IP_ALARM_GROUP_NUM, *LPNET_DVR_IP_ALARM_GROUP_NUM; +//****NVR end***// + +typedef struct tagNET_DVR_CHAN_GROUP_RECORD_STATUS +{ + DWORD dwSize; //结构体大小 + NET_DVR_CHANS_RECORD_STATUS struChanStatus[MAX_CHANNUM_V30]; //一组64个 +}NET_DVR_CHAN_GROUP_RECORD_STATUS, *LPNET_DVR_CHAN_GROUP_RECORD_STATUS; + + +typedef struct tagNET_DVR_RECTCFG +{ + WORD wXCoordinate; /*矩形左上角起始点X坐标*/ + WORD wYCoordinate; /*矩形左上角Y坐标*/ + WORD wWidth; /*矩形宽度*/ + WORD wHeight; /*矩形高度*/ +}NET_DVR_RECTCFG, *LPNET_DVR_RECTCFG; +/*窗口信息*/ +typedef struct tagNET_DVR_WINCFG +{ + DWORD dwSize; + BYTE byVaild; + BYTE byInputIdx; /*输入源索引*/ + BYTE byLayerIdx; /*图层,0为最底层*/ + BYTE byTransparency; //透明度,0~100 + NET_DVR_RECTCFG struWin;//目的窗口(相对显示墙) + WORD wScreenHeight;//大屏高 + WORD wScreenWidth;//大屏宽 + BYTE byRes[20]; +}NET_DVR_WINCFG, *LPNET_DVR_WINCFG; + +#define MAX_LAYERNUMS 32 + +typedef struct tagNET_DVR_ALLWINCFG +{ + DWORD dwSize; + NET_DVR_WINCFG struWinCfg[MAX_LAYERNUMS]; + BYTE byRes2[24]; +}NET_DVR_ALLWINCFG, *LPNET_DVR_ALLWINCFG; + +typedef struct tagNET_DVR_SCREENZOOM +{ + DWORD dwSize; + DWORD dwScreenNum;//大屏号 + NET_DVR_POINT_FRAME struPointFrame; + BYTE byLayer;//图层号 + BYTE byRes[11]; +}NET_DVR_SCREENZOOM, *LPNET_DVR_SCREENZOOM; + +//2011-04-18 +/*摄像机信息,最多9999个,从1开始 */ +typedef struct tagNET_MATRIX_CAMERAINFO +{ + DWORD dwGlobalCamId; /* cam的全局编号*/ + BYTE sCamName[NAME_LEN]; /*cam的名称*/ + DWORD dwMatrixId; /*cam对应矩阵的编号*/ + DWORD dwLocCamId; /*cam对应矩阵的内部编号*/ + BYTE byValid; /*是否有效,0-否,1-是*/ + BYTE byPtzCtrl; /* 是否可控,0-否,1-是*/ + BYTE byUseType; //*使用类型,0-不作为干线使用,1-BNC,2-SP3,3-V6光纤,4-其他光纤*/ + BYTE byUsedByTrunk;//当前使用状态,0-没有被使用,1-被干线使用 + BYTE byTrunkReq; /*摄像机分辨率,以D1为单位:1 - 1个D1,2- 2个D1,作为干线使用时,指的是干线的带宽*/ + BYTE byRes1[3]; + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ + BYTE byRes2[20]; +}NET_MATRIX_CAMERAINFO, *LPNET_MATRIX_CAMERAINFO; + +/*显示器信息,最多2048个*/ +typedef struct tagNET_MATRIX_MONITORINFO +{ + DWORD dwGloalMonId; /*mon 的统一编号*/ + BYTE sMonName[NAME_LEN]; + DWORD dwMatrixId; /*mon所在矩阵的编号*/ + DWORD dwLocalMonId; /*mon的内部编号*/ + BYTE byValid; /*是否有效,0-否,1-是*/ + BYTE byTrunkType; /*使用类型,0-不作为干线使用,1-BNC,2-SP3,3-V6光纤,4-其他光纤*/ + BYTE byUsedByTrunk;//当前使用状态,0-没有被使用,1-被干线使用 + BYTE byTrunkReq; /*分辨率, 以D1为单位:1- 1个D1,2- 2个D1,作为干线使用时,指的是干线的带宽*/ + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ + BYTE byRes[20]; +}NET_MATRIX_MONITORINFO, *LPNET_MATRIX_MONITORINFO; + +typedef struct tagNET_MATRIX_DIGITALMATRIX +{ + NET_DVR_IPADDR struAddress; /*设备为数字设备时的IP信息*/ + WORD wPort; + BYTE byNicNum; /*0 - eth0, 1 - eth1, 考虑双网口如何通信加入绑定的网口*/ + BYTE byRes[69]; +}NET_MATRIX_DIGITALMATRIX, *LPNET_MATRIX_DIGITALMATRIX; +typedef struct tagNET_MATRIX_ANALOGMATRIX +{ + BYTE bySerPortNum; /*连接的串口号 0xff-环通接入*/ + BYTE byMatrixSerPortType;/* 矩阵接入网关的串口与模拟矩阵的键盘口(键盘协议)连接还是与矩阵通信口(矩阵协议)连接 ,0 --- 矩阵协议通讯口 1 --- 键盘通讯口*/ + BYTE byRes1[2]; + NET_DVR_SINGLE_RS232 struRS232; //232串口参数 环通接入时此参数无效 + BYTE byRes2[200]; +}NET_MATRIX_ANALOGMATRIX, *LPNET_MATRIX_ANALOGMATRIX; + +typedef union tagNET_MATRIX_UNION +{ + NET_MATRIX_DIGITALMATRIX struDigitalMatrix; + NET_MATRIX_ANALOGMATRIX struAnalogMatrix; +}NET_MATRIX_UNION, *LPNET_MATRIX_UNION; +/*矩阵配置信息,最多20个*/ +typedef struct tagNET_MATRIX_MATRIXINFO +{ + DWORD dwSize; + DWORD dwMatrixId; /*矩阵编号*/ + BYTE sDevName[NAME_LEN]; + BYTE byCtrlType; /*指通讯方式是串口通信, 还是网络通信*/ + BYTE byProtocolType;/*设置通信控制协议*/ + BYTE byRes1[6]; /*预留*/ + NET_MATRIX_UNION struMatrixUnion; + DWORD dwMaxPortsIn; /*矩阵输入数*/ + DWORD dwMaxPortsOut;/*矩阵输出数*/ + BYTE sUserName[NAME_LEN]; /*登录用户名*/ + BYTE sPassword[PASSWD_LEN]; /*登录密码*/ + NET_DVR_TIME struInstallTime;//安装时间 + BYTE sPurpose[NAME_LEN];/*用途描述*/ + BYTE byRes2[20]; /*预留*/ +}NET_MATRIX_MATRIXINFO, *LPNET_MATRIX_MATRIXINFO; + + +typedef struct tagNET_DVR_MATRIXLIST +{ + DWORD dwSize; + BYTE byRes[12]; + DWORD dwMatrixNum;//设备返回的矩阵数量 + BYTE *pBuffer;//矩阵信息缓冲区 + DWORD dwBufLen;//所分配指针长度,输入参数 +}NET_DVR_MATRIXLIST,*LPNET_DVR_MATRIXLIST; + +/*串口配置信息*/ +typedef struct tagNET_MATRIX_UARTPARAM +{ + DWORD dwSize; + BYTE byPortName[NAME_LEN]; + WORD wUserId; /*用户编号,当连接设备为键盘时,绑定一个用户,用于权限管理*/ + BYTE byPortType; /*串口类型,三种0-RS232/1-RS485/2-RS422*/ + BYTE byFuncType; /*串口连接的设备的类型0-空闲,1-键盘,2-用作透明通道(485串口不可配置成透明通道),3-模拟矩阵*/ + BYTE byProtocolType; /*串口支持的协议类型, 当连接键盘设备时需要该信息,获取键盘支持协议的编号及描述符*/ + BYTE byBaudRate; + BYTE byDataBits; + BYTE byStopBits; /*停止位*/ + BYTE byParity; /*校验*/ + BYTE byFlowCtrl; /*流控,软件流控,无流控*/ + BYTE byRes[22]; /*预留*/ +}NET_MATRIX_UARTPARAM, *LPNET_MATRIX_UARTPARAM; + +//最多256个用户,1~256 +typedef struct tagNET_MATRIX_USERPARAM +{ + DWORD dwSize; + BYTE sUserName[NAME_LEN]; + BYTE sPassword[PASSWD_LEN/*16*/]; + BYTE byRole;/*用户角色:0-管理员,1-操作员;只有一个系统管理员,255个操作员*/ + BYTE byLevel; /*统一级别,用于操作级别管理,1- 255*/ + BYTE byRes[18]; +}NET_MATRIX_USERPARAM, *LPNET_MATRIX_USERPARAM; + +//最多255个资源组 +typedef struct tagNET_MATRIX_RESOURSEGROUPPARAM +{ + DWORD dwSize; + BYTE byGroupName[NAME_LEN]; + BYTE byGroupType;/*0-摄像机CAM组,1-显示器MON组*/ + BYTE byRes1; + WORD wMemNum; + DWORD dwGlobalId[512]; + BYTE byRes2[20]; +}NET_MATRIX_RESOURCEGROUPPARAM,*LPNET_MATRIX_RESOURSEGROUPPARAM; + +//最多255个用户组 +typedef struct tagNET_MATRIX_USERGROUPPARAM +{ + DWORD dwSize; + BYTE sGroupName[NAME_LEN]; + WORD wUserMember[255]; /*包含的用户成员*/ + WORD wResorceGroupMember[255]; /*包含的资源组成员*/ + BYTE byPermission[32];//权限,数组0-ptz权限、切换权限、查询权限 + BYTE byRes[20]; +} NET_MATRIX_USERGROUPPARAM, *LPNET_MATRIX_USERGROUPPARAM; + +typedef struct tagNET_MATRIX_TRUNKPARAM +{ + DWORD dwSize; + DWORD dwTrunkId; + BYTE sTrunkName[NAME_LEN]; + DWORD dwSrcMonId; + DWORD dwDstCamId; + BYTE byTrunkType; /*使用类型 1-BNC,2-SP3光纤高清,3-SP3光纤D1, 4-V6光纤,5-其他光纤*/ + BYTE byAbility; /*表示光纤的带宽,可以传输几路*/ + BYTE bySubChan; /*针对光纤干线而言,表示子通道号*/ + BYTE byLevel; /* 干线级别 1-255*/ + WORD wReserveUserID; //预留的用户ID: 1~256 ,0表示释放预留 + BYTE byRes[18]; +} NET_MATRIX_TRUNKPARAM, *LPNET_MATRIX_TRUNKPARAM; + +typedef struct tagNET_DVR_MATRIX_TRUNKLIST +{ + DWORD dwSize; + BYTE byRes[12]; + DWORD dwTrunkNum;//设备返回的干线数量 + BYTE *pBuffer;//干线信息缓冲区 + DWORD dwBufLen;//所分配指针长度,输入参数 +}NET_DVR_MATRIX_TRUNKLIST,*LPNET_DVR_MATRIX_TRUNKLIST; + +#define MATRIX_PROTOCOL_NUM 20 //支持的最大矩阵协议数 +#define KEYBOARD_PROTOCOL_NUM 20 //支持的最大键盘协议数 +typedef struct tagNET_DVR_PROTO_TYPE_EX +{ + WORD wType; /*ipc协议值*/ + WORD wCommunitionType; /*0:模拟 1:数字 2:兼容模拟、数字*/ + BYTE byDescribe[DESC_LEN]; /*协议描述字段*/ +}NET_DVR_PROTO_TYPE_EX, LPNET_DVR_PROTO_TYPE_EX; + +typedef struct tagNET_DVR_MATRIXMANAGE_ABIILITY +{ + DWORD dwSize; + DWORD dwMaxCameraNum;//最大Camera数量 + DWORD dwMaxMonitorNum;//最大显示器数量 + WORD wMaxMatrixNum;//最大矩阵数量 + WORD wMaxSerialNum;//串口数量 + WORD wMaxUser;//最大用户数 + WORD wMaxResourceArrayNum;//最大资源组数 + WORD wMaxUserArrayNum;//最大用户组数 + WORD wMaxTrunkNum;//最大干线数 + BYTE nStartUserNum;//起始用户号 + BYTE nStartUserGroupNum;//起始用户组号 + BYTE nStartResourceGroupNum;//起始资源组号 + BYTE nStartSerialNum;//起始串口号 + DWORD dwMatrixProtoNum; /*有效的矩阵协议数目,从0开始*/ + NET_DVR_PROTO_TYPE_EX struMatrixProto[MATRIX_PROTOCOL_NUM];/*最大协议列表长度*/ + DWORD dwKeyBoardProtoNum; /*有效的键盘协议数目,从0开始*/ + NET_DVR_PROTO_TYPE_EX struKeyBoardProto[KEYBOARD_PROTOCOL_NUM];/*最大协议列表长度*/ + BYTE byDelMonitorLongCfg; //是否支持删除monitor长连接配置 + BYTE byDelCamonitorLongCfg;//是否支持删除camera长连接配置 + BYTE byAudioSwitchContorl;//是否支持音频开关控制 + BYTE byRes[29]; +} NET_DVR_MATRIXMANAGE_ABILITY, *LPNET_DVR_MATRIXMANAGE_ABILITY; + + +//人脸抓拍规则(单条) +typedef struct tagNET_VCA_SINGLE_FACESNAPCFG +{ + BYTE byActive; //是否激活规则:0-否,1-是 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + //人脸自动ROI开关使能 + BYTE byAutoROIEnable;//0-关闭,1-开启 + BYTE byRes[2]; //保留 + /********* IPC5.1.7 新增参数 End 2014-03-21***********/ + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struVcaPolygon; //人脸识别区域 +}NET_VCA_SINGLE_FACESNAPCFG, *LPNET_VCA_SINGLE_FACESNAPCFG; + +//人脸抓拍规则参数 +typedef struct tagNET_VCA_FACESNAPCFG +{ + DWORD dwSize; + BYTE bySnapTime; //单个目标人脸的抓拍次数0-10 + BYTE bySnapInterval; //抓拍间隔,单位:帧 + BYTE bySnapThreshold; //抓拍阈值,0-100 + BYTE byGenerateRate; //目标生成速度,范围[1, 5] + BYTE bySensitive; //目标检测灵敏度,范围[1, 5] + BYTE byReferenceBright; //2012-3-27参考亮度[0,100] + BYTE byMatchType; //2012-5-3比对报警模式,0-目标消失后报警,1-实时报警 + BYTE byMatchThreshold; //2012-5-3实时比对阈值,0~100 + NET_DVR_JPEGPARA struPictureParam; //图片规格结构 + NET_VCA_SINGLE_FACESNAPCFG struRule[MAX_RULE_NUM]; //人脸抓拍规则 + //人脸曝光最短持续时间(两个字节) + WORD wFaceExposureMinDuration;//范围(1~3600秒,默认60)生效于自动模式下 + //人脸曝光模式 + BYTE byFaceExposureMode;//1-关闭,2-开启,0-自动(根据人脸判断) + BYTE byBackgroundPic;//背景图上传使能 0-默认值(开启),1-禁止 + DWORD dwValidFaceTime; //有效人脸最短持续时间,单位:秒 + DWORD dwUploadInterval; //人脸抓拍统计数据上传间隔时间,单位:秒,默认900秒 + DWORD dwFaceFilteringTime;//人脸停留时间过滤,默认5秒,范围0-100秒。0秒表示不过滤 + BYTE bySceneID; //场景号,目前支持1~4场景,0为无效 + BYTE byInvalCapFilterEnable;//无效抓拍过滤使能,0为关闭,1为开启,默认为0 + BYTE byInvalCapFilterThreshold;//无效抓拍过滤阈值,0~100,当byInvalCapFilterEnable为1时生效 + BYTE byRes2[81]; +}NET_VCA_FACESNAPCFG, *LPNET_VCA_FACESNAPCFG; + +typedef struct tagNET_DVR_FIRMWARE_VERSION_IFNO +{ + DWORD dwSize;//结构体大小 + char szFirmwareVersion[LEN_PROPERTY/*128*/]; //主控版本属性 只读 + BYTE byRes2[128]; +}NET_DVR_FIRMWARE_VERSION_IFNO, *LPNET_DVR_FIRMWARE_VERSION_IFNO; + + +//人脸表情 +typedef enum tagFACE_EXPRESSION_GROUP_ENUM +{ + ENUM_EXPRESSION_GROUP_SURPRISED = 1, //惊讶 + ENUM_EXPRESSION_GROUP_PANIC = 2, //害怕 + ENUM_EXPRESSION_GROUP_DISGUUSTED = 3, //厌恶 + ENUM_EXPRESSION_GROUP_HAPPY = 4, //高兴 + ENUM_EXPRESSION_GROUP_SAD = 5, //难过 + ENUM_EXPRESSION_GROUP_ANGRY = 6, //愤怒 + ENUM_EXPRESSION_GROUP_POKER = 7, //中性 + ENUM_EXPRESSION_GROUP_ALL = 0xfe, //全部 + ENUM_EXPRESSION_GROUP_UNKNOW = 0xff //未知,算法支持未检出 +}FACE_EXPRESSION_GROUP_ENUM; + +typedef struct tagNET_DVR_LLI_PARAM +{ + float fSec;//秒[0.000000,60.000000] + BYTE byDegree;//度:纬度[0,90] 经度[0,180] + BYTE byMinute;//分[0,59] + BYTE byRes[6]; +}NET_DVR_LLI_PARAM, *LPNET_DVR_LLI_PARAM; + +typedef struct tagNET_DVR_LLPOS_PARAM +{ + BYTE byLatitudeType;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType;//经度类型,0-东经,1-西经 + BYTE byRes1[2]; + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + BYTE byRes[16]; +}NET_DVR_LLPOS_PARAM, *LPNET_DVR_LLPOS_PARAM; + +//人脸抓拍附加信息结构体 +typedef struct tagNET_VCA_FACESNAP_ADDINFO +{ + //人脸矩形框,该坐标为人脸小图(头肩照)中人脸的坐标 + NET_VCA_RECT struFacePicRect; + int iSwingAngle;//旋转角, -90~90度 + int iTiltAngle;//俯仰角, -90~90度 + DWORD dwPupilDistance;//瞳距,范围为:最小值为10像素,最大值为当前分辨率宽度/1.6 + BYTE byBlockingState;//目标遮挡状态, 0-表示“未知”(算法不支持),1~无遮挡,2~瞬时轻度遮挡,3~持续轻度遮挡,4~严重遮挡 + BYTE byFaceSnapThermometryEnabled;//人脸抓拍测温使能 1-开启 0-关闭 + BYTE byIsAbnomalTemperature;//人脸抓拍测温是否温度异常 1-是 0-否 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + NET_DVR_TIME_EX struEnterTime; // 最佳抓拍下进入时间 + NET_DVR_TIME_EX struExitTime; // 最佳抓拍下离开时间 + float fFaceTemperature; // 人脸温度( - 20.0℃~150.0℃,精确到小数点后1位。其中0xffff(65535)表示无效,开启隐藏温度值功能时返回) + float fAlarmTemperature;// 测温报警警阈值(精确到小数点后1位) + DWORD dwThermalPicLen;//热成像图片长度 + BYTE *pThermalPicBuff;// 热成像图片指针 + BYTE szCustomChanID[65];// 自定义布防点通道号 string max.len = 64 + BYTE byRes1[3];// 保留字节 + NET_DVR_LLPOS_PARAM struLLPos;//设备经纬度位置信息 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "faceCapture") +#else + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "faceCapture") + BYTE byRes2[4]; +#endif + DWORD dwEventNotificationAlertLen;//长度对应EventNotificationAlert JSON Block("eventType": "faceCapture")数据长度 + BYTE byRes[340];// 保留字节 +}NET_VCA_FACESNAP_ADDINFO, *LPNET_VCA_FACESNAP_ADDINFO; + +//人脸抓拍结果 +typedef struct tagNET_VCA_FACESNAP_RESULT +{ + DWORD dwSize; // 结构大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwFacePicID; //人脸图ID + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_TARGET_INFO struTargetInfo;//报警目标信息 + NET_VCA_RECT struRect; //人脸子图区域 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwFacePicLen; //人脸子图的长度,为0表示没有图片,大于0表示有图片 + DWORD dwBackgroundPicLen; //背景图的长度,为0表示没有图片,大于0表示有图片(保留) + BYTE bySmart; //IDS设备返回0(默认值),Smart Functiom Return 1 + BYTE byAlarmEndMark;//报警结束标记0-保留,1-结束标记(该字段结合人脸ID字段使用,表示该ID对应的下报警结束,主要提供给NVR使用,用于判断报警结束,提取识别图片数据中,清晰度最高的图片) + BYTE byRepeatTimes; //重复报警次数,0-无意义 + BYTE byUploadEventDataType;//人脸图片数据长传方式:0-二进制数据,1-URL + NET_VCA_HUMAN_FEATURE struFeature; //人体属性 + float fStayDuration; //停留画面中时间(单位: 秒) + char sStorageIP[16]; //存储服务IP地址 + WORD wStoragePort; //存储服务端口号 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + /*人脸子图图片质量评估等级,0-低等质量,1-中等质量,2-高等质量, + 新增人脸抓拍质量评分机制与原有的人脸评分区别: + 原有的人脸评分是在人脸抓拍中实现,目的是确保一次人脸抓拍中获取最好的图像效果,是一个相对图像质量的评分;新增人脸抓拍质量评分机制是针对已经抓拍完成的人脸图片,使用图像算法对图像中人脸,人眼,肩宽等相对重要的信息进行分析,按照统一的标准对人脸图片效果质量进行评分*/ + BYTE byFacePicQuality; + BYTE byUIDLen; // 上传报警的标识长度 + BYTE byLivenessDetectionStatus;// 活体检测状态:0-保留,1-未知(检测失败),2-非真人人脸,3-真人人脸,4-未开启活体检测 + /*附加信息标识位(即是否有NET_VCA_FACESNAP_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ + BYTE byAddInfo; + BYTE *pUIDBuffer; //标识指针 + //附加信息指针,指向NET_VCA_FACESNAP_ADDINFO结构体 + BYTE *pAddInfoBuffer; + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + BYTE* pBuffer1; //人脸子图的图片数据 + BYTE* pBuffer2; //背景图的图片数据(保留,通过查找背景图接口可以获取背景图) +}NET_VCA_FACESNAP_RESULT, *LPNET_VCA_FACESNAP_RESULT; + +typedef struct tagNET_VCA_SUB_PROCIMG_V50 +{ + DWORD dwImageLen; //图片数据长度 + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + NET_VCA_POINT struLeftEyePoint; //左眼位置 + NET_VCA_POINT struRightEyePoint; //右眼位置 + BYTE byDistance; //两眼间距 + BYTE bySex; + BYTE byRes1; + BYTE byEyeGlass; + NET_VCA_RECT struPosRect; //人脸位置区域 + BYTE byRes[20]; //保留 + BYTE *pImage; //图片数据 +}NET_VCA_SUB_PROCIMG_V50, *LPNET_VCA_SUB_PROCIMG_V50; + +typedef struct tagNET_DVR_FACE_DETECTION +{ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + DWORD dwBackgroundPicLen; //背景图的长度,为0表示没有图片,大于0表示有图片 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_VCA_RECT struFacePic[MAX_FACE_PIC_NUM/*30*/];//人脸子图区域 + BYTE byFacePicNum;//子图数量 + BYTE byUploadEventDataType;//图片数据长传方式:0-二进制数据,1-URL + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes[249]; + BYTE* pBackgroundPicpBuffer; //背景图的图片数据 +}NET_DVR_FACE_DETECTION,*LPNET_DVR_FACE_DETECTION; + +typedef struct tagNET_DVR_UPGRADE_PARAM +{ + DWORD dwUpgradeType; + char *sFileName; + void *pInbuffer; + DWORD dwBufferLen; + char *pUnitIdList[64]; +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64)) + char *sCustomURL; +#else + char *sCustomURL; + BYTE byRes2[4]; +#endif + DWORD dwCustomURLLen; + BYTE byRes[100]; +}NET_DVR_UPGRADE_PARAM, *LPNET_DVR_UPGRADE_PARAM; + + +typedef struct tagNET_VCA_FD_PROCIMG_RESULT_V50 +{ + DWORD dwSize; //结构大小 + DWORD dwImageId; //大图ID + BYTE byRes[20]; //保留 + DWORD dwSubImageNum; //人脸子图张数 + NET_VCA_SUB_PROCIMG_V50 struProcImg[MAX_TARGET_NUM]; //单张子图信息 +}NET_VCA_FD_PROCIMG_RESULT_V50, *LPNET_VCA_FD_PROCIMG_RESULT_V50; + +//虚焦侦测结果 +typedef struct tagNET_DVR_DEFOCUS_ALARM +{ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes1[2]; //保留字节 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes[49]; // 保留字节 +}NET_DVR_DEFOCUS_ALARM, *LPNET_DVR_DEFOCUS_ALARM; + +//大雾侦测结果 +typedef struct tagNET_DVR_DENSEFOGDETECTION_ALARM +{ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byFogLevel; //雾的等级,0-无雾~薄雾 ,1-薄雾~中雾, 2-大雾~浓雾, 3-浓雾及以上 + BYTE byRes[259]; // 保留字节 +}NET_DVR_DENSEFOGDETECTION_ALARM, *LPNET_DVR_DENSEFOGDETECTION_ALARM; + +typedef struct tagNET_DVR_AUDIOEXCEPTION_ALARM +{ + DWORD dwSize; /*结构长度*/ + BYTE byAlarmType;//报警类型,1-音频输入异常,2-音频输入突变(声强陡升),3-声强陡降,4-音频丢失 + BYTE byRes1; + WORD wAudioDecibel;//声音强度(音频输入突变时用到) + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes[62]; // 保留字节 +}NET_DVR_AUDIOEXCEPTION_ALARM, *LPNET_DVR_AUDIOEXCEPTION_ALARM; + +typedef struct tagNET_BUTTON_DOWN_EXCEPTION_ALARM +{ + DWORD dwSize; /*结构长度*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + BYTE byRes[64]; // 保留字节 +}NET_BUTTON_DOWN_EXCEPTION_ALARM, *LPNET_BUTTON_DOWN_EXCEPTION_ALARM; + +typedef struct tagNET_VCA_FD_IMAGE_CFG +{ + DWORD dwWidth; //灰度图像数据宽度 + DWORD dwHeight; //灰度图像高度 + DWORD dwImageLen; //灰度图像数据长度 + BYTE byRes[20]; //保留 + BYTE *pImage; //灰度图像数据 +}NET_VCA_FD_IMAGE_CFG, *LPNET_VCA_FD_IMAGE_CFG; + +typedef struct tagNET_VCA_FD_PROCIMG_CFG +{ + DWORD dwSize; //结构大小 + BYTE byEnable; //是否激活规则; + BYTE bySensitivity; //检测灵敏度,[0,5] + BYTE byRes1[22]; //保留字节 + NET_VCA_SIZE_FILTER struSizeFilter; //尺寸过滤器 + NET_VCA_POLYGON struPolygon; //多边形 + NET_VCA_FD_IMAGE_CFG struFDImage; //图片信息 + BYTE byRes2[20]; //保留 +}NET_VCA_FD_PROCIMG_CFG, *LPNET_VCA_FD_PROCIMG_CFG; + +typedef struct tagNET_VCA_SUB_PROCIMG +{ + DWORD dwImageLen; //图片数据长度 + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + BYTE byRes[20]; //保留 + BYTE *pImage; //图片数据 +}NET_VCA_SUB_PROCIMG, *LPNET_VCA_SUB_PROCIMG; + +typedef struct tagNET_VCA_FD_PROCIMG_RESULT +{ + DWORD dwSize; //结构大小 + DWORD dwImageId; //大图ID + BYTE byRes[20]; //保留 + DWORD dwSubImageNum; //人脸子图张数 + NET_VCA_SUB_PROCIMG struProcImg[MAX_TARGET_NUM]; //单张子图信息 +}NET_VCA_FD_PROCIMG_RESULT, *LPNET_VCA_FD_PROCIMG_RESULT; + +typedef struct tagNET_VCA_PICMODEL_RESULT +{ + DWORD dwImageLen; //图片数据长度 + DWORD dwModelLen; //模型数据长度 + BYTE byRes[20]; //保留 + BYTE *pImage; //人脸图片数据指针 + BYTE *pModel; //模型数据指针 +}NET_VCA_PICMODEL_RESULT, *LPNET_VCA_PICMODEL_RESULT; + +typedef struct tagNET_VCA_REGISTER_PIC +{ + DWORD dwImageID; //大图ID + DWORD dwFaceScore; //人脸评分,0-100 + NET_VCA_RECT struVcaRect; //人脸子图区域 + BYTE byRes[20]; //保留 +}NET_VCA_REGISTER_PIC, *LPNET_VCA_REGISTER_PIC; + +#define MAX_HUMAN_PICTURE_NUM 10 //最大照片数 +#define MAX_HUMAN_BIRTHDATE_LEN 10 //最大出生年月长度 + +typedef struct tagNET_DVR_AREAINFOCFG +{ + WORD wNationalityID; //国籍 + WORD wProvinceID; //省 + WORD wCityID; //市 + WORD wCountyID; //县 + /* + if (dwCode != 0) dwCode 赋值参照 “全国各省份城市列表.txt” + else dwCode 赋值解析参照 PROVINCE_CITY_IDX + */ + DWORD dwCode; +}NET_DVR_AREAINFOCFG, *LPNET_DVR_AREAINFOCFG; + +typedef struct tagNET_VCA_HUMAN_ATTRIBUTE +{ + BYTE bySex; //性别:0-男,1-女,0xff-未知 + BYTE byCertificateType; //证件类型:0-身份证,1-警官证,2-特种证,3-护照,4-其他,0xff-未知 + BYTE byBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //出生年月,如:201106 + BYTE byName[NAME_LEN]; //姓名 + NET_DVR_AREAINFOCFG struNativePlace; //籍贯参数 + BYTE byCertificateNumber[NAME_LEN]; //证件号 + /* + dwPersonInfoExtendLen && pPersonInfoExtend 对应URL(/ISAPI/System/Video/inputs/channels//faceContrast/personInfoExtend)表示的 PersonInfoExtendList XML Block + 意义所在:平台中心管理的时候,导入picture数据的自定义信息,在设备检测匹配报警后,携带作为匹配信息一并上传;平台中心管理匹配; + */ + DWORD dwPersonInfoExtendLen;// 人员标签信息扩展长度 + BYTE *pPersonInfoExtend; //人员标签信息扩展信息 + BYTE byGroup;//如传入0xff表示未知 + BYTE byRes2[3]; //保留字节 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE* pThermalData;//热成像图片指针 +#else + BYTE* pThermalData;//热成像图片指针 + BYTE byRes3[4];//保留字节 +#endif +}NET_VCA_HUMAN_ATTRIBUTE, *LPNET_VCA_HUMAN_ATTRIBUTE; + +typedef struct tagNET_VCA_HUMANATTRIBUTE_COND +{ + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byCertificateType; //证件类型:0-不启用,1-身份证,2-警官证 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byName[NAME_LEN]; //姓名 + NET_DVR_AREAINFOCFG struNativePlace; //籍贯参数 + BYTE byCertificateNumber[NAME_LEN]; //证件号 + BYTE byRes[20]; +}NET_VCA_HUMANATTRIBUTE_COND, *LPNET_VCA_HUMANATTRIBUTE_COND; + + +typedef struct tagNET_VCA_BLOCKLIST_INFO +{ + DWORD dwSize; //结构大小 + DWORD dwRegisterID; //名单注册ID号(只读) + DWORD dwGroupNo; //分组号 + BYTE byType; //名单标志:0-全部,1-允许名单,2-禁止名单 + BYTE byLevel; //禁止名单等级,0-全部,1-低,2-中,3-高 + BYTE byRes1[2]; //保留 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark[NAME_LEN]; //备注信息 + DWORD dwFDDescriptionLen;//人脸库描述数据长度 + BYTE *pFDDescriptionBuffer;//人脸库描述数据指针 + DWORD dwFCAdditionInfoLen;//抓拍库附加信息长度 + BYTE *pFCAdditionInfoBuffer;//抓拍库附加信息数据指针(FCAdditionInfo中包含相机PTZ坐标、GPS信息) + DWORD dwThermalDataLen;//热成像图片长度,仅人脸比对事件上报支持 +}NET_VCA_BLOCKLIST_INFO, *LPNET_VCA_BLOCKLIST_INFO; + +typedef struct tagNET_VCA_BLOCKLIST_PARA +{ + DWORD dwSize; //结构大小 + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本参数 + DWORD dwRegisterPicNum; //禁止名单图个数 + NET_VCA_PICMODEL_RESULT struRegisterPic[MAX_HUMAN_PICTURE_NUM]; //禁止名单图片信息 + BYTE byRes[40]; //保留 +}NET_VCA_BLOCKLIST_PARA, *LPNET_VCA_BLOCKLIST_PARA; + +typedef struct tagNET_VCA_BLOCKLIST_COND +{ + LONG lChannel; //通道号 + DWORD dwGroupNo; //分组号 + BYTE byType; //名单标志:0-全部,1-允许名单,2-禁止名单 + BYTE byLevel; //禁止名单等级,0-全部,1-低,2-中,3-高 + BYTE byRes1[2]; //保留 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRes[20]; +}NET_VCA_BLOCKLIST_COND, *LPNET_VCA_BLOCKLIST_COND; + +typedef struct tagNET_VCA_BLOCKLIST_PIC +{ + DWORD dwSize; //结构大小 + DWORD dwFacePicNum; //人脸图个数 + BYTE byRes[20]; //保留 + NET_VCA_PICMODEL_RESULT struBlockListPic[MAX_HUMAN_PICTURE_NUM]; //单张照片信息 +}NET_VCA_BLOCKLIST_PIC, *LPNET_VCA_BLOCKLIST_PIC; + +typedef struct tagNET_VCA_FIND_PICTURECOND +{ + LONG lChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE byRes[12]; //保留 +}NET_VCA_FIND_PICTURECOND, *LPNET_VCA_FIND_PICTURECOND; + +#define MAX_FACE_PIC_LEN 6144 //最大人脸图片数据长度 +typedef struct tagNET_VCA_SUB_SNAPPIC_DATA +{ + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + NET_DVR_TIME struSnapTime; //抓拍时间 + DWORD dwSimilarity; //相似度 + BYTE byRes[16]; //保留 + char sPicBuf[MAX_FACE_PIC_LEN]; //图片数据 +}NET_VCA_SUB_SNAPPIC_DATA, *LPNET_VCA_SUB_SNAPPIC_DATA; + +typedef struct tagNET_VCA_ADVANCE_FIND +{ + DWORD dwFacePicID; //人脸图片ID + BYTE byRes[36]; +}NET_VCA_ADVANCE_FIND, *LPNET_VCA_ADVANCE_FIND; + +typedef struct tagNET_VCA_NORMAL_FIND +{ + DWORD dwImageID; //大图ID + DWORD dwFaceScore; //人脸评分 + NET_VCA_RECT struVcaRect; //人脸子图区域 + BYTE byRes[20]; +}NET_VCA_NORMAL_FIND, *LPNET_VCA_NORMAL_FIND; + +typedef union tagNET_VCA_FIND_SNAPPIC_UNION +{ + NET_VCA_NORMAL_FIND struNormalFind; //普通检索 + NET_VCA_ADVANCE_FIND struAdvanceFind; //高级检索 +}NET_VCA_FIND_SNAPPIC_UNION, *LPNET_VCA_FIND_SNAPPIC_UNION; + +typedef enum _VCA_FIND_SNAPPIC_TYPE_ +{ + VCA_NORMAL_FIND = 0x00000000, //普通检索 + VCA_ADVANCE_FIND = 0x00000001 //高级检索 +}VCA_FIND_SNAPPIC_TYPE; + +typedef struct tagNET_VCA_FIND_PICTURECOND_ADVANCE +{ + LONG lChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE byThreshold; //阈值,0-100 + BYTE byRes[23]; //保留 + VCA_FIND_SNAPPIC_TYPE dwFindType;//检索类型,详见VCA_FIND_SNAPPIC_TYPE + NET_VCA_FIND_SNAPPIC_UNION uFindParam; //检索参数 +}NET_VCA_FIND_PICTURECOND_ADVANCE, *LPNET_VCA_FIND_PICTURECOND_ADVANCE; + +typedef struct tagNET_VCA_FACESNAP_INFO_ALARM +{ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwSnapFacePicID; //抓拍人脸图ID + DWORD dwSnapFacePicLen; //抓拍人脸子图的长度,为0表示没有图片,大于0表示有图片 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byFaceScore; //人脸评分,指人脸子图的质量的评分,0-100 + BYTE bySex;//性别,0-未知,1-男,2-女,0xff-算法支持,但是没有识别出来 + BYTE byGlasses;//是否带眼镜,0-未知,1-是,2-否,3-戴墨镜, 0xff-算法支持,但是没有识别出来 + /* + 识别人脸的段范围[byRes1-byDeviation,byRes1+byDeviation] + */ + BYTE byRes1;//0-表示“未知”(算法不支持),0xff-算法支持,但是没有识别出来 + BYTE byDeviation;//误差值 + BYTE byGroup;//若传入0xff表示未知 + /*人脸子图图片质量评估等级,0-低等质量,1-中等质量,2-高等质量, + 该质量评估算法仅针对人脸子图单张图片,具体是通过姿态、清晰度、遮挡情况、光照情况等可影响人脸识别性能的因素综合评估的结果*/ + BYTE byFacePicQuality; + BYTE byRes; + DWORD dwUIDLen; // 上传报警的标识长度 + BYTE *pUIDBuffer; //标识指针 + float fStayDuration; //停留画面中时间(单位: 秒) + BYTE *pBuffer1; //抓拍人脸子图的图片数据 +}NET_VCA_FACESNAP_INFO_ALARM, *LPNET_VCA_FACESNAP_INFO_ALARM; + +typedef struct tagNET_VCA_BLOCKLIST_INFO_ALARM +{ + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本信息 + DWORD dwBlockListPicLen; //禁止名单人脸子图的长度,为0表示没有图片,大于0表示有图片 + DWORD dwFDIDLen;// 人脸库ID长度 + BYTE *pFDID; //人脸库Id指针 + DWORD dwPIDLen;// 人脸库图片ID长度 + BYTE *pPID; //人脸库图片ID指针 + WORD wThresholdValue; //人脸库阈值[0,100] + BYTE byIsNoSaveFDPicture;//0-保存人脸库图片,1-不保存人脸库图片, 若开启了导入图片或者建模时不保存原图功能时,该字段返回1,此时人脸库图片将不再返回 + BYTE byRealTimeContrast;//是否实时报警 0-实时 1-非实时 + BYTE *pBuffer1; //禁止名单人脸子图的图片数据 +}NET_VCA_BLOCKLIST_INFO_ALARM, *LPNET_VCA_BLOCKLIST_INFO_ALARM; + +typedef struct tagNET_VCA_FACESNAP_MATCH_ALARM +{ + DWORD dwSize; // 结构大小 + float fSimilarity; //相似度,[0.001,1] + NET_VCA_FACESNAP_INFO_ALARM struSnapInfo; //抓拍信息 + NET_VCA_BLOCKLIST_INFO_ALARM struBlockListInfo; //禁止名单信息 + char sStorageIP[16]; //存储服务IP地址 + WORD wStoragePort; //存储服务端口号 + BYTE byMatchPicNum; //匹配图片的数量,0-保留(老设备这个值默认0,新设备这个值为0时表示后续没有匹配的图片信息) + BYTE byPicTransType;//图片数据传输方式: 0-二进制;1-url + DWORD dwSnapPicLen;//设备识别抓拍图片长度 + BYTE *pSnapPicBuffer;//设备识别抓拍图片指针 + NET_VCA_RECT struRegion;//目标边界框,设备识别抓拍图片中,人脸子图坐标 + DWORD dwModelDataLen;//建模数据长度 + BYTE *pModelDataBuffer;// 建模数据指针 + BYTE byModelingStatus;// 建模状态 + BYTE byLivenessDetectionStatus;//活体检测状态:0-保留,1-未知(检测失败),2-非真人人脸,3-真人人脸,4-未开启活体检测 + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,0xff无效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,0xff无效*/ + BYTE byMask; //抓拍图是否戴口罩,0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE bySmile; //抓拍图是否微笑,0-保留,1-未知,2-不微笑,3-微笑 + BYTE byContrastStatus; //比对结果,0-保留,1-比对成功,2-比对失败 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 +}NET_VCA_FACESNAP_MATCH_ALARM, *LPNET_VCA_FACESNAP_MATCH_ALARM; + +typedef struct tagNET_VCA_BLOCKLIST_INFO_ALARM_LOG +{ + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本信息 + DWORD dwBlockListPicID; //禁止名单人脸子图ID,用于查找图片 + BYTE byRes[20]; // 保留字节 +}NET_VCA_BLOCKLIST_INFO_ALARM_LOG, *LPNET_VCA_BLOCKLIST_INFO_ALARM_LOG; + +typedef struct tagNET_VCA_FACESNAP_INFO_ALARM_LOG +{ + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwSnapFacePicID; //抓拍人脸图ID + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + BYTE byRes[20]; // 保留字节 +}NET_VCA_FACESNAP_INFO_ALARM_LOG, *LPNET_VCA_FACESNAP_INFO_ALARM_LOG; + +typedef struct tagNET_VCA_FACESNAP_MATCH_ALARM_LOG +{ + DWORD dwSize; // 结构大小 + float fSimilarity; //相似度,[0.001,1] + NET_VCA_FACESNAP_INFO_ALARM_LOG struSnapInfoLog; //抓拍信息 + NET_VCA_BLOCKLIST_INFO_ALARM_LOG struBlockListInfoLog; //禁止名单信息 + BYTE byRes[60]; // 保留字节 +}NET_VCA_FACESNAP_MATCH_ALARM_LOG, *LPNET_VCA_FACESNAP_MATCH_ALARM_LOG; + +typedef struct tagNET_VCA_FACEMATCH_PICCOND +{ + DWORD dwSize; // 结构大小 + DWORD dwSnapFaceID; //抓拍人脸子图ID + DWORD dwBlockListID; //匹配的禁止名单ID + DWORD dwBlockListFaceID; //比对的禁止名单人脸子图ID + BYTE byRes[20]; // 保留字节 +}NET_VCA_FACEMATCH_PICCOND, *LPNET_VCA_FACEMATCH_PICCOND; + +typedef struct tagNET_VCA_FACEMATCH_PICTURE +{ + DWORD dwSize; // 结构大小 + DWORD dwSnapFaceLen; //抓拍人脸子图长度 + DWORD dwBlockListFaceLen; //比对的禁止名单人脸子图长度 + BYTE byRes[20]; //保留字节 + BYTE *pSnapFace; //抓拍人脸子图的图片数据 + BYTE *pBlockListFace; //比对的禁止名单人脸子图数据 +}NET_VCA_FACEMATCH_PICTURE, *LPNET_VCA_FACEMATCH_PICTURE; + +typedef struct tagNET_VCA_BLOCKLIST_FASTREGISTER_PARA +{ + DWORD dwSize; //结构大小 + NET_VCA_BLOCKLIST_INFO struBlockListInfo; //禁止名单基本参数 + DWORD dwImageLen; //图像数据长度 + BYTE byRes[124]; //保留 + BYTE *pImage; //图像数据 +}NET_VCA_BLOCKLIST_FASTREGISTER_PARA, *LPNET_VCA_BLOCKLIST_FASTREGISTER_PARA; + +/*******PJ01C20170209084超脑录播NVS软件功能开发定制项目专用******/ +//单帧画面人数统计结果上传 +typedef struct tagNET_DVR_FRAMES_PEOPLE_COUNTING +{ + DWORD dwSize; // 结构体大小 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; // 绝对时标 + DWORD dwPeopleCountingNum; //画面中的人数统计数量 + DWORD dwPicLen; //设备识别抓拍的全景图片数据长度 + BYTE *pPicBuffer; //设备识别抓拍的全景图片数据指针 + BYTE byRes[512]; // 保留字节 +}NET_DVR_FRAMES_PEOPLE_COUNTING, *LPNET_DVR_FRAMES_PEOPLE_COUNTING; +/*******PJ01C20170209084超脑录播NVS软件功能开发定制项目专用******/ + +//单个分区配置 +typedef struct tagNET_VCA_SINGLE_PATH +{ + BYTE byActive; // 是否可用,0-否,1-是 + BYTE byType; //0-存储抓拍,1-存储禁止名单比对报警,2-存储抓拍和禁止名单比对报警,0xff-无效 + BYTE bySaveAlarmPic; //是否用于保存断网的报警图片,0-否,1-是 + BYTE byRes1[5]; //保留 + DWORD dwDiskDriver; //盘符号,从0开始 + DWORD dwLeftSpace; //预留容量(单位为G) + BYTE byRes2[8]; //保留 +}NET_VCA_SINGLE_PATH, *LPNET_VCA_SINGLE_PATH; + +//存储路径设置 +typedef struct tagNET_VCA_SAVE_PATH_CFG +{ + DWORD dwSize; //结构大小 + NET_VCA_SINGLE_PATH struPathInfo[MAX_DISKNUM_V30]; //单个分区 + BYTE byRes[40]; //保留 +}NET_VCA_SAVE_PATH_CFG, *LPNET_VCA_SAVE_PATH_CFG; + +typedef struct tagNET_DVR_DEV_ACCESS_CFG +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; //接入设备的IP地址 + WORD wDevicePort; //端口号 + BYTE byEnable; //是否启用,0-否,1-是 + BYTE byRes1; //保留 + BYTE sUserName[NAME_LEN]; //接入设备的登录帐号 + BYTE sPassword[PASSWD_LEN]; //接入设备的登录密码 + BYTE byRes2[60]; +}NET_DVR_DEV_ACCESS_CFG,*LPNET_DVR_DEV_ACCESS_CFG; + +/********************************智能人脸识别 end****************************/ +//分辨率 +#define MAKE_RESOLUTION(_interlace_, _width_, _height_, _fps_) \ + (((_interlace_)<<28) \ + |((((_width_)>>3)&0x1ff)<<19)| \ + ((((_height_)>>1)&0x7ff)<<8)| \ +((_fps_)&0xff)) +#define GET_RES_INTERLACE(_res_) \ +(((_res_)>>28)&0x1) +#define GET_RES_WIDTH(_res_) \ +((((_res_)>>19)&0x1ff)<<3) +#define GET_RES_HEIGHT(_res_) \ +((((_res_)>>8)&0x7ff)<<1) +#define GET_RES_FPS(_res_) \ +((_res_)&0xff) + +#define NOT_AVALIABLE MAKE_RESOLUTION (0,0,0,0) +#define SVGA_60HZ MAKE_RESOLUTION(0, 800, 600, 60) +#define SVGA_75HZ MAKE_RESOLUTION(0, 800, 600, 75) +#define XGA_60HZ MAKE_RESOLUTION(0, 1024, 768, 60) +#define XGA_75HZ MAKE_RESOLUTION(0, 1024, 768, 75) +#define SXGA_60HZ MAKE_RESOLUTION(0, 1280, 1024, 60) +#define SXGA2_60HZ MAKE_RESOLUTION(0, 1280, 960, 60) +#define _720P_24HZ MAKE_RESOLUTION(0, 1280, 720, 24) +#define _720P_25HZ MAKE_RESOLUTION(0, 1280, 720, 25) +#define _720P_30HZ MAKE_RESOLUTION(0, 1280, 720, 30) +#define _720P_60HZ MAKE_RESOLUTION(0, 1280, 720, 60) +#define _720P_50HZ MAKE_RESOLUTION(0, 1280, 720, 50) +#define _1080I_60HZ MAKE_RESOLUTION(1, 1920, 1080, 60) +#define _1080I_50HZ MAKE_RESOLUTION(1, 1920, 1080, 50) +#define _1080P_60HZ MAKE_RESOLUTION(0, 1920, 1080, 60) +#define _1080P_50HZ MAKE_RESOLUTION(0, 1920, 1080, 50) +#define _1080P_30HZ MAKE_RESOLUTION(0, 1920, 1080, 30) +#define _1080P_25HZ MAKE_RESOLUTION(0, 1920, 1080, 25) +#define _1080P_24HZ MAKE_RESOLUTION(0, 1920, 1080, 24) +#define UXGA_60HZ MAKE_RESOLUTION(0, 1600, 1200, 60) +#define UXGA_30HZ MAKE_RESOLUTION(0, 1600, 1200, 30) +#define WSXGA_60HZ MAKE_RESOLUTION(0, 1680, 1050, 60) +#define WUXGA_60HZ MAKE_RESOLUTION(0, 1920, 1200, 60) +#define WUXGA_30HZ MAKE_RESOLUTION(0, 1920, 1200, 30) +#define WXGA_60HZ MAKE_RESOLUTION(0, 1360, 768, 60) +#define SXGA_PLUS_60HZ MAKE_RESOLUTION(0, 1400, 1050, 60) +#define VGA_MODE_3840x2160_30HZ MAKE_RESOLUTION(0, 3840, 2160, 30) +#define VGA_MODE_3840x2160_60HZ MAKE_RESOLUTION(0, 3840, 2160, 60) + + + +//显示通道画面分割模式 +#define MAX_WINDOWS_NUM 12 //画面分割模式的数量 +#define MAX_SUPPORT_RES 32 +#define MAX_DISPNUM_V41 32 +#define MAX_SDI_RES 16 //SDI显示通道最大支持分辨率数 + +typedef struct tagNET_DVR_DISPWINDOWMODE +{ + BYTE byDispChanType;//显示通道类型:0-BNC, 1-VGA, 2-HDMI, 3-DVI 4-SDI + BYTE byDispChanSeq;//显示通道序号,从1开始,如果类型是VGA,则表示第几个VGA + BYTE byRes[2]; + BYTE byDispMode[MAX_WINDOWS_NUM/*12*/]; +}NET_DVR_DISPWINDOWMODE, *LPNET_DVR_DISPWINDOWMODE; + +typedef struct tagNET_DVR_DISPINFO +{ + BYTE byChanNums;//通道个数 + BYTE byStartChan;//起始通道 + BYTE byRes[2]; + DWORD dwSupportResolution[MAX_SUPPORT_RES/*32*/];//支持分辨率 +}NET_DVR_DISPINFO, *LPNET_DVR_DISPINFO; + +//大屏拼接信息 +typedef struct tagNET_DVR_SCREENINFO +{ + BYTE bySupportBigScreenNums;//最多大屏拼接数量 + BYTE byStartBigScreenNum;//大屏拼接起始号 + BYTE byMaxScreenX;//大屏拼接模式 + BYTE byMaxScreenY; + BYTE byRes[8]; +}NET_DVR_SCREENINFO, *LPNET_DVR_SCREENINFO; + +typedef struct tagNET_DVR_SDI_INFO +{ + BYTE byChanNums;//通道个数 + BYTE byStartChan;//起始通道 + BYTE byRes[2]; + DWORD dwSupportResolution[MAX_SDI_RES/*16*/];//支持分辨率 +}NET_DVR_SDI_INFO,*LPNET_DVR_SDI_INFO; + +typedef struct tagNET_DVR_MATRIX_ABILITY_V41 +{ + DWORD dwSize; + BYTE byDspNums;//DSP个数 + BYTE byDecChanNums;//解码通道数 + BYTE byStartChan;//起始解码通道 + BYTE byRes1[5]; + NET_DVR_DISPINFO struVgaInfo;//VGA显示通道信息 + NET_DVR_DISPINFO struBncInfo;//BNC显示通道信息 + NET_DVR_DISPINFO struHdmiInfo;//HDMI显示通道信息 + NET_DVR_DISPINFO struDviInfo;//DVI显示通道信息 + NET_DVR_DISPWINDOWMODE struDispMode[MAX_DISPNUM_V41/*32*/]; + NET_DVR_SCREENINFO struBigScreenInfo; + BYTE bySupportAutoReboot; //是否支持自动重启,0-不支持,1-支持 + BYTE byRes2[3]; + NET_DVR_SDI_INFO struSDIInfo;//SDI显示通道信息 + BYTE byRes3[48]; +} NET_DVR_MATRIX_ABILITY_V41, *LPNET_DVR_MATRIX_ABILITY_V41; + +//显示通道配置 +#define MAX_WINDOWS 16 +#define MAX_WINDOWS_V41 36 + +#define STARTDISPCHAN_VGA 1 +#define STARTDISPCHAN_BNC 9 +#define STARTDISPCHAN_HDMI 25 +#define STARTDISPCHAN_DVI 29 + +typedef union tagNET_DVR_VIDEO_PLATFORM +{ + BYTE byRes[160]; + struct + { + /*各个子窗口对应解码通道所对应的解码子系统的槽位号(对于视频综合平台中解码子系统有效)*/ + //如果综合平台支持自动分配解码资源,此参数不需要填充 + BYTE byJoinDecoderId[MAX_WINDOWS_V41]; + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通道都分配给此解码通道 + BYTE byDecResolution[MAX_WINDOWS_V41]; + NET_DVR_RECTCFG struPosition; //显示通道在电视墙中位置 + BYTE byRes[80]; + }struVideoPlatform; + struct + { + BYTE byRes[160]; + }struNotVideoPlatform; +}NET_DVR_VIDEO_PLATFORM, LPNET_DVR_VIDEO_PLATFORM; + + +typedef struct tagNET_DVR_MATRIX_VOUTCFG +{ + DWORD dwSize; + BYTE byAudio; /*音频是否开启*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byDispChanType; /*显示通道类型:0-BNC,1-VGA,2-HDMI,3-DVI,4-YPbPr(解码卡服务器DECODER_SERVER专用)*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + DWORD dwResolution;//分辨率 + DWORD dwWindowMode; /*画面模式,能力集获取*/ + BYTE byJoinDecChan[MAX_WINDOWS_V41];/*各个子窗口关联的解码通道,设备支持解码资源自动分配时此参数不用填充*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0---真实显示,1---缩放显示( 针对BNC )*/ + BYTE byUnionType;/*区分共用体,0-视频综合平台内部解码器显示通道配置,1-其他解码器显示通道配置*/ + NET_DVR_VIDEO_PLATFORM struDiff; + DWORD dwDispChanNum; //显示输出号,此参数在全部获取时有效 + WORD wLEDWidth; //LED分辨率宽,0为无效 + WORD wLEDHeight; //LED分辨率高,0为无效 + BYTE byEnableVideoEffect; //显示效果使能, 0-不使能, !0-使能 + BYTE byRes[3]; //保留字段 + NET_DVR_VIDEOEFFECT struVideoEffect; //显示效果 + BYTE byRes2[60]; +}NET_DVR_MATRIX_VOUTCFG,*LPNET_DVR_MATRIX_VOUTCFG; + +/*解码器设备状态*/ +typedef struct tagNET_DVR_DISP_CHAN_STATUS_V41 +{ + BYTE byDispStatus; /*显示状态:0:未显示,1:启动显示*/ + BYTE byBVGA; /*0-BNC,1-VGA, 2-HDMI,3-DVI,4-SDI 0xff-无效*/ + BYTE byVideoFormat; /*视频制式,1:NTSC,2:PAL,0-NON*/ + BYTE byWindowMode; /*画面模式*/ + BYTE byJoinDecChan[MAX_WINDOWS_V41]; /*各个子画面关联的解码通道*/ + BYTE byFpsDisp[MAX_WINDOWS_V41]; /*每个子画面的显示帧率*/ + BYTE byScreenMode; /*屏幕模式0-普通 1-大屏*/ + BYTE byRes1[3]; + DWORD dwDispChan; /*获取全部显示通道状态时有效,设置时可填0*/ + BYTE byRes2[24]; +}NET_DVR_DISP_CHAN_STATUS_V41, *LPNET_DVR_DISP_CHAN_STATUS_V41; + +/*解码器设备状态*/ +typedef struct tagNET_DVR_DECODER_WORK_STATUS_V41 +{ + DWORD dwSize; + NET_DVR_MATRIX_CHAN_STATUS struDecChanStatus[32]; /*解码通道状态*/ + /*显示通道状态*/ + NET_DVR_DISP_CHAN_STATUS_V41 struDispChanStatus[MAX_DISPNUM_V41/*32*/]; + BYTE byAlarmInStatus[32]; /*报警输入状态*/ + BYTE byAlarmOutStatus[32]; /*报警输出状态*/ + BYTE byAudioInChanStatus; /*语音对讲状态*/ + BYTE byRes[127]; +}NET_DVR_DECODER_WORK_STATUS_V41,*LPNET_DVR_DECODER_WORK_STATUS_V41; +/*******************************文件回放-远程回放设置*******************************/ +typedef struct tagNET_DVR_MATRIX_DEC_REMOTE_PLAY_V41 +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号 */ + BYTE byReserve; + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ + NET_DVR_TIME StartTime; + NET_DVR_TIME StopTime; + char sFileName[128]; + BYTE byRes[64]; /*保留*/ +}NET_DVR_MATRIX_DEC_REMOTE_PLAY_V41, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_V41; + + +#define MAX_BIGSCREENNUM_SCENE 100 +#define MAX_LAYERNUMS 32 + +//显示通道配置结构 +typedef struct tagNET_DVR_RECTCFG_SCENE +{ + WORD wXCoordinate; /*矩形左上角起始点X坐标*/ + WORD wYCoordinate; /*矩形左上角Y坐标*/ + WORD wWidth; /*矩形宽度*/ + WORD wHeight; /*矩形高度*/ +}NET_DVR_RECTCFG_SCENE, *LPNET_DVR_RECTCFGSCENE; + +typedef struct tagNET_DVR_SCENEDISPCFG +{ + BYTE byEnable;//是否启用,0-不启用,1-启用 + BYTE bySoltNum;//槽位号 + BYTE byRes1[2]; + BYTE byDispChanNum; + BYTE byAudio; /*音频是否开启,0-否,1-是*/ + BYTE byAudioWindowIdx; /*音频开启子窗口*/ + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + BYTE byWindowMode; /*画面模式,从能力集获取*/ + BYTE byEnlargeStatus; /*是否处于放大状态,0:不放大,1:放大*/ + BYTE byEnlargeSubWindowIndex;//放大的子窗口号 + BYTE byScale; /*显示模式,0-真实显示,1-缩放显示( 针对BNC )*/ + DWORD dwResolution;//分辨率 + BYTE byJoinDecChan[MAX_WINDOWS_V41];/*各个子窗口关联的解码通道*/ + BYTE byJoinDecoderId[MAX_WINDOWS_V41];/*槽位号*/ + //显示窗口所解视频分辨率,1-D1,2-720P,3-1080P,设备端需要根据此//分辨率进行解码通道的分配,如1分屏配置成1080P,则设备会把4个解码通道都分配给此解码通道 + BYTE byDecResolution[MAX_WINDOWS_V41]; + BYTE byRow;//大屏所在的行的序号 + BYTE byColumn;//大屏所在的列的序号 + BYTE byRes2[5]; + NET_DVR_RECTCFG struDisp; //电视墙显示位置 +} NET_DVR_SCENEDISPCFG,*LPNET_DVR_SCENEDISPCFG; + +typedef struct tagDEV_CHAN_INFO_SCENE +{ + NET_DVR_IPADDR struIP; /* DVR IP地址 */ + WORD wDVRPort; /* 端口号 */ + BYTE byChannel; /* 通道号,对于9000等设备的IPC接入,通道号从33开始 */ + BYTE byTransProtocol; /* 传输协议类型0-TCP,1-UDP ,2-MCAST,3-RTP*/ + BYTE byTransMode; /* 传输码流模式 0-主码流 1-子码流*/ + BYTE byFactoryType; /*前端设备厂家类型*/ + BYTE byDeviceType; //设备类型,1-IPC,2- ENCODER + BYTE byRes[5]; + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ +} NET_DVR_DEV_CHAN_INFO_SCENE,*LPNET_DVR_DEV_CHAN_INFO_SCENE; + +/*流媒体服务器基本配置*/ +typedef struct tagSTREAM_MEDIA_SERVER_CFG_SCENE +{ + BYTE byValid; /*是否启用流媒体服务器取流,0表示无效*/ + BYTE byRes1[3]; + NET_DVR_IPADDR struDevIP; /*流媒体服务器地址*/ + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型0-TCP,1-UDP */ + BYTE byRes2[5]; +}NET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE; + +typedef struct tagPU_STREAM_CFG_SCENE +{ + NET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE streamMediaServerCfg; + NET_DVR_DEV_CHAN_INFO_SCENE struDevChanInfo; +}NET_DVR_PU_STREAM_CFG_SCENE,*LPNET_DVR_PU_STREAM_CFG_SCENE; + +typedef struct tagNET_DVR_CYC_SUR_CHAN_ELE_SCENE +{ + BYTE byEnable; /* 是否启用 0-否 1-启用*/ + BYTE byRes[3]; + NET_DVR_STREAM_MEDIA_SERVER_CFG_SCENE struStreamMediaSvrCfg; + NET_DVR_DEV_CHAN_INFO_SCENE struDecChanInfo; /*轮巡解码通道信息*/ +}NET_DVR_CYC_SUR_CHAN_ELE_SCENE,*LPNET_DVR_CYC_SUR_CHAN_ELE_SCENE; + +//轮巡解码结构 +typedef struct tagNET_DVR_MATRIX_LOOP_DECINFO_SCENE +{ + WORD wPoolTime; /*轮询间隔*/ + BYTE byRes1[2]; + NET_DVR_CYC_SUR_CHAN_ELE_SCENE struChanArray[MAX_CYCLE_CHAN/*16*/]; + BYTE byRes2[4]; +} NET_DVR_MATRIX_LOOP_DECINFO_SCENE,*LPNET_DVR_MATRIX_LOOP_DECINFO_SCENE; + +//单个解码通道配置结构体 +typedef struct tagNET_DVR_DECODECHANCFG_SCENE/*struct size : 2064*/ +{ + BYTE byDecodeEnable;//解码起停标志,0-停止,1-启用动态解码,2-启用轮巡解码 + BYTE bySlotNum;//槽位号 + BYTE byDecChan; + BYTE byJointAllDecodeChan; //是否关联解码通道 0-不关联,1-关联 + BYTE byJointSlotNum; //关联的槽位号(解码板的槽位号) + BYTE byJointChanNum; //关联的通道号(解码板通道号) + BYTE byRes[2]; + union + { + NET_DVR_PU_STREAM_CFG_SCENE struSceneDynamicDecCfg; + NET_DVR_MATRIX_LOOP_DECINFO_SCENE struSceneCycDecCfg; + } struDecCfg; +}NET_DVR_DECODECHANCFG_SCENE,*LPNET_DVR_DECODECHANCFG_SCENE; + +typedef struct tagNET_DVR_BIGSCREENCFG_SCENE +{ + BYTE byAllValid; /*漫游使能标志 */ + BYTE byAssociateBaseMap;//关联的底图序号,0代表不关联 + BYTE byEnableSpartan;//大屏畅显使能,1-开,0-关 + BYTE byRes; + NET_DVR_WINCFG struWinCfg[MAX_LAYERNUMS]; + NET_DVR_BIGSCREENCFG struBigScreen; +}NET_DVR_BIGSCREENCFG_SCENE, *LPNET_DVR_BIGSCREENCFG_SCENE; + +typedef struct tagNET_DVR_MATRIX_SCENECFG +{ + DWORD dwSize; + BYTE sSceneName[NAME_LEN]; + BYTE byBigScreenNums;//大屏的个数,最大值通过能力集获取 + BYTE byRes1[3]; + WORD wDecChanNums;//场景中解码通道的个数 + WORD wDispChanNums;//场景中显示通道的个数 + BYTE byRes2[12]; + BYTE *pBigScreenBuffer;//大屏配置缓冲区, byBigScreenNums×sizeof(NET_DVR_BIGSCREENCFG_SCENE) + BYTE *pDecChanBuffer;//解码通道配置缓冲区, wDecChanNums×sizeof(NET_DVR_DECODECHANCFG_SCENE) + BYTE *pDispChanBuffer;//显示通道配置缓冲区, wDispChanNums×sizeof(NET_DVR_SCENEDISPCFG) +}NET_DVR_MATRIX_SCENECFG, *LPNET_DVR_MATRIX_SCENECFG; + + + +typedef struct tagNET_DVR_BIGSCREENASSOCIATECFG +{ + DWORD dwSize; + BYTE byEnableBaseMap;//使能底图显示 + BYTE byAssociateBaseMap;//关联的底图序号,0代表不关联 + BYTE byEnableSpartan;//大屏畅显使能,1-开,0-关 + BYTE byRes[21]; +} NET_DVR_BIGSCREENASSOCIATECFG, *LPNET_DVR_BIGSCREENASSOCIATECFG; +/*******************************窗口设置*******************************/ +#define MAX_WIN_COUNT 224 //支持的最大开窗数 + +typedef struct tagNET_DVR_SCREEN_WINCFG +{ + DWORD dwSize; + BYTE byVaild; + BYTE byInputType; //见CAM_MDOE + WORD wInputIdx; /*输入源索引*/ + DWORD dwLayerIdx; /*图层,0为最底层*/ + NET_DVR_RECTCFG struWin; //目的窗口(相对显示墙) + BYTE byWndIndex; //窗口号 + BYTE byCBD; //0-无,1-带背景,2-不带背景 + BYTE bySubWnd; //0不是,1是 + BYTE byRes1; + DWORD dwDeviceIndex;//设备序号 + BYTE byRes2[16]; +}NET_DVR_SCREEN_WINCFG, *LPNET_DVR_SCREEN_WINCFG; + +typedef struct tagNET_DVR_WINLIST +{ + DWORD dwSize; + WORD wScreenSeq; //设备序号 + BYTE byRes[10]; + DWORD dwWinNum; //设备返回的窗口数量 + BYTE *pBuffer; //窗口信息缓冲区,最大为224*sizeof(NET_DVR_WINCFG) + DWORD dwBufLen; //所分配指针长度 +}NET_DVR_WINLIST,*LPNET_DVR_WINLIST; + +#define MAX_LAYOUT_COUNT 16 //最大布局数 +typedef struct tagNET_DVR_LAYOUTCFG +{ + DWORD dwSize; + BYTE byValid; //布局是否有效 + BYTE byRes1[3]; + BYTE byLayoutName[NAME_LEN/*32*/]; //布局名称 + NET_DVR_SCREEN_WINCFG struWinCfg[MAX_WIN_COUNT/*224*/]; //布局内窗口参数 + BYTE byRes2[16]; +}NET_DVR_LAYOUTCFG, *LPNET_DVR_LAYOUTCFG; + +typedef struct tagNET_DVR_LAYOUT_LIST +{ + DWORD dwSize; + NET_DVR_LAYOUTCFG struLayoutInfo[MAX_LAYOUT_COUNT/*16*/]; //所有布局 + BYTE byRes[4]; +}NET_DVR_LAYOUT_LIST, *LPNET_DVR_LAYOUT_LIST; + +#define MAX_CAM_COUNT 224 +#define MAX_CAM_COUNT_V50 512 + +typedef enum tagNET_DVR_CAM_MODE +{ + NET_DVR_UNKNOW = 0,//无效 + NET_DVR_CAM_BNC, + NET_DVR_CAM_VGA, + NET_DVR_CAM_DVI, + NET_DVR_CAM_HDMI, + NET_DVR_CAM_IP, + NET_DVR_CAM_RGB, + NET_DVR_CAM_DECODER, + NET_DVR_CAM_MATRIX, + NET_DVR_CAM_YPBPR, + NET_DVR_CAM_USB, + NET_DVR_CAM_SDI, + NET_DVR_CAM_HDI, + NET_DVR_CAM_DP, //此类型视频综合平台不返回 + NET_DVR_CAM_HDTVI, + NET_DVR_CAM_JOINT, //拼接信号源 + NET_DVR_CAM_HDBASET, + NET_DVR_CAM_DVIT, //DVI双链路,此类型视频综合平台不返回 + NET_DVR_CAM_FUSION, //多IPC拼接 + NET_DVR_CAM_VSCREEN, //虚拟屏 + NET_DVR_CAM_FIBER, //光纤 + NET_DVR_CAM_3GSDI, //3G-SDI + NET_DVR_CAM_DISTRIBUTED_IP, //分布式网络源 + NET_DVR_CAM_JONIT_X86,// x86拼接子系统的拼接通道 + NET_DVR_CAM_TVI, //TVI信号源 +}NET_DVR_CAM_MODE; + +typedef struct tagNET_DVR_INPUTSTREAMCFG +{ + DWORD dwSize ; + BYTE byValid; + BYTE byCamMode; //信号输入源类型,见NET_DVR_CAM_MODE + WORD wInputNo; //信号源序号0-224 + BYTE sCamName[NAME_LEN] ; //信号输入源名称 + NET_DVR_VIDEOEFFECT struVideoEffect; //视频参数 + NET_DVR_PU_STREAM_CFG struPuStream; //ip输入时使用 + WORD wBoardNum ; //信号源所在的板卡号 + WORD wInputIdxOnBoard; //信号源在板卡上的位置 + DWORD dwResolution;//分辨率 + BYTE byVideoFormat;//视频制式,见VIDEO_STANDARD + BYTE byStatus; //信号源状态,0-字段无效 1-有信号 2-无信号 3-异常 + BYTE sGroupName[NAME_LEN/*32*/]; //网络信号源分组 组名 + BYTE byJointMatrix; // 关联矩阵 ,0-不关联 1-关联 + BYTE byRes; +}NET_DVR_INPUTSTREAMCFG, *LPNET_DVR_INPUTSTREAMCFG; + +typedef struct tagNET_DVR_INPUTSTREAM_LIST +{ + DWORD dwSize; + NET_DVR_INPUTSTREAMCFG struInputStreamInfo[MAX_CAM_COUNT]; //所有信号源 + BYTE byRes[4]; +}NET_DVR_INPUTSTREAM_LIST, *LPNET_DVR_INPUTSTREAM_LIST; + +/*******************************输出参数配置*******************************/ +/*输出通道管理*/ +typedef struct tagNET_DVR_OUTPUTPARAM +{ + DWORD dwSize; + BYTE byMonMode; /*输出连接模式,1-BNC,2-VGA,3-DVI,4-HDMI*/ + BYTE byRes1[3]; + DWORD dwResolution; /*分辨率,根据能力集获取所支持的进行设置*/ + NET_DVR_VIDEOEFFECT struVideoEffect; /*输出通道视频参数配置*/ + BYTE byRes2[32]; +}NET_DVR_OUTPUTPARAM, *LPNET_DVR_OUTPUTPARAM; + +typedef struct tagNET_DVR_OUTPUTCFG +{ + DWORD dwSize; + BYTE byScreenLayX; //大屏布局-横坐标 + BYTE byScreenLayY; //大屏布局-纵坐标 + WORD wOutputChanNum; //输出通道个数,0表示设备支持的最大输出通道个数,最大个数从能力集获取,其他值表示实际输出通道个数 + BYTE byRes1[4]; + NET_DVR_OUTPUTPARAM struOutputParam; /*输出通道视频参数配置*/ + BYTE sWallName[16]; //电视墙名称 + BYTE byRes2[8]; +}NET_DVR_OUTPUTCFG, *LPNET_DVR_OUTPUTCFG; + +/*******************************能力集*******************************/ +#define SCREEN_PROTOCOL_NUM 20 //支持的最大大屏控制器协议数 +//多屏服务器能力集 +typedef struct tagNET_DVR_SCREENSERVER_ABILITY +{ + DWORD dwSize; /*结构长度*/ + BYTE byIsSupportScreenNum; /*所支持大屏控制器的数目*/ + BYTE bySerialNums; //串口个数 + BYTE byMaxInputNums; + BYTE byMaxLayoutNums; + BYTE byMaxWinNums; + BYTE byRes1[19]; + BYTE byMaxScreenLayX;//大屏布局-最大横坐标大屏数 + BYTE byMaxScreenLayY;//大屏布局-最大纵坐标大屏数 + WORD wMatrixProtoNum; /*有效的大屏协议数目*/ + NET_DVR_PROTO_TYPE struScreenProto[SCREEN_PROTOCOL_NUM];/*最大协议列表*/ + BYTE byRes2[24]; +}NET_DVR_SCREENSERVER_ABILITY, *LPNET_DVR_SCREENSERVER_ABILITY; + +//多屏控制器能力集 +typedef struct tagNET_DVR_SCREENCONTROL_ABILITY +{ + DWORD dwSize; /*结构长度*/ + BYTE byLayoutNum; /* 布局个数*/ + BYTE byWinNum; /*屏幕窗口个数*/ + BYTE byOsdNum; /*OSD个数*/ + BYTE byLogoNum; /*Logo个数*/ + BYTE byInputStreamNum; //输入源个数 ---设备支持最大输入通道个数(包括本地输入源和网络输入源) + BYTE byOutputChanNum; //输出通道个数---设备支持最大输出通道个数 + BYTE byCamGroupNum; /*分组个数*/ + BYTE byPlanNum; /*预案个数*/ + BYTE byRes1[5]; + BYTE byIsSupportPlayBack; /*是否支持回放*/ + BYTE byMatrixInputNum; //支持输入矩阵最大个数 + BYTE byMatrixOutputNum; //支持输出矩阵最大个数 + NET_DVR_DISPINFO struVgaInfo;//VGA输出信息 + NET_DVR_DISPINFO struBncInfo;//BNC输出信息 + NET_DVR_DISPINFO struHdmiInfo;//HDMI输出信息 + NET_DVR_DISPINFO struDviInfo;//DVI输出信息 + BYTE byMaxUserNums;//支持用户数 + BYTE byPicSpan; //底图跨度,一张底图最多可覆盖的屏幕数 + WORD wDVCSDevNum; //分布式大屏控制器最大设备数 + WORD wNetSignalNum; //最大网络输入源个数 + WORD wBaseCoordinateX;//基准坐标 + WORD wBaseCoordinateY; + BYTE byExternalMatrixNum; //最大外接矩阵个数 + BYTE byRes2[49]; +}NET_DVR_SCREENCONTROL_ABILITY, *LPNET_DVR_SCREENCONTROL_ABILITY; + +/*******************************输入信号状态*******************************/ +typedef struct tagNET_DVR_ANALOGINPUTSTATUS +{ + DWORD dwLostFrame; /*视频输入丢帧数*/ + BYTE byHaveSignal; /*是否有视频信号输入*/ + BYTE byVideoFormat; /*视频制式,1:NTSC,2:PAL,0:无*/ + BYTE byRes[46]; +} NET_DVR_ANALOGINPUTSTATUS, *LPNET_DVR_ANALOGINPUTSTATUS; + +typedef union tagNET_DVR_INPUTSTATUS_UNION +{ + NET_DVR_MATRIX_CHAN_STATUS struIpInputStatus; + NET_DVR_ANALOGINPUTSTATUS struAnalogInputStatus; +} NET_DVR_INPUTSTATUS_UNION, *LPNET_DVR_INPUTSTATUS_UNION; + +typedef struct tagNET_DVR_INPUTSTATUS +{ + WORD wInputNo; /*信号源序号*/ + BYTE byInputType; //见NET_DVR_CAM_MODE + BYTE byRes1[9]; + NET_DVR_INPUTSTATUS_UNION struStatusUnion; + BYTE byRes2[16]; +} NET_DVR_INPUTSTATUS, *LPNET_DVR_INPUTSTATUS; + +typedef struct tagNET_DVR_SCREENINPUTSTATUS +{ + DWORD dwSize; + BYTE byRes[12]; + DWORD dwNums; //设备返回的输入源状态的数量 + BYTE *pBuffer; //缓冲区 + DWORD dwBufLen; //所分配指针长度,输入参数 +}NET_DVR_SCREENINPUTSTATUS,*LPNET_DVR_SCREENINPUTSTATUS; + +typedef struct tagNET_DVR_SCREENALARMCFG +{ + DWORD dwSize; + BYTE byAlarmType; //报警类型,1-子板拔出,2-子板插入,3-子系统状态异常,4-子系统恢复恢复 5-输入源异常 6-温度报警 7-FPGA版本不匹配 8-预案开始 9-预案结束 10-解码板断网 11-解码板IP地址冲突,12-风扇异常 + BYTE byBoardType; // 1-输入板 2-输出板 ,3-主板,4-背板,报警类型为1,2,3,6的时候使用 + BYTE bySubException; //输入异常时具体子异常 1- 分辨率正常改变 2-输入端口类型改变3-分辨率错误4-分辨率改变导致解码资源不足,关闭该输入源对应窗口。5-分辨率改变,导致已开窗的缩放比例不在1/8到8倍范围。6-分辨率恢复正常,7-分辨率改变导致输出板数据量超限,设备关闭窗口 + BYTE byRes1; + WORD wStartInputNum; // 异常输入源(异常起点) + WORD wEndInputNum; // 异常输入源(异常终点) + BYTE byRes2[16]; +}NET_DVR_SCREENALARMCFG, *LPNET_DVR_SCREENALARMCFG; + +typedef struct tagNET_DVR_MATRIX_CFG +{ + BYTE byValid; //判断是否是模拟矩阵(是否有效) + BYTE byCommandProtocol; //模拟矩阵的指令(4种) + BYTE byScreenType; //保留 + BYTE byRes1; + BYTE byScreenToMatrix[32]; //模拟矩阵的输出与屏幕的对应关系 + BYTE byRes2[4]; +}NET_DVR_MATRIX_CFG, *LPNET_DVR_MATRIX_CFG; + +typedef struct tagNET_DVR_DIGITALSCREEN +{ + NET_DVR_IPADDR struAddress;/*设备为数字设备时的IP信息*/ + WORD wPort; //通道号 + BYTE byRes[26]; //保留 +}NET_DVR_DIGITALSCREEN, *LPNET_DVR_DIGITALSCREEN; +typedef struct tagNET_DVR_ANALOGSCREEN +{ + BYTE byDevSerPortNum; /*连接设备的串口号*/ + BYTE byScreenSerPort; /*连接大屏的串口号*/ + BYTE byRes[130]; + NET_DVR_MATRIX_CFG struMatrixCfg; +}NET_DVR_ANALOGSCREEN, *LPNET_DVR_ANALOGSCREEN; + +typedef union tagNET_DVR_SCREEN_UNION +{ + NET_DVR_DIGITALSCREEN struDigitalScreen; + NET_DVR_ANALOGSCREEN struAnalogScreen; +}NET_DVR_SCREEN_UNION, *LPNET_DVR_SCREEN_UNION; +typedef struct tagNET_DVR_SCREEN_SCREENINFO +{ + DWORD dwSize; + BYTE byValid; //是否有效 + BYTE nLinkMode; //连接方式,0-串口,1-网口 + BYTE byDeviceType; //设备型号,能力集获取 + BYTE byScreenLayX; //大屏布局-横坐标 + BYTE byScreenLayY; //大屏布局-纵坐标 + BYTE byRes1[3]; + BYTE sUserName[NAME_LEN]; /*登录用户名*/ + BYTE sPassword[PASSWD_LEN]; /*登录密码*/ + BYTE sDevName[NAME_LEN]; /*设备名称*/ + NET_DVR_SCREEN_UNION struScreenUnion; + BYTE byInputNum; // 输入源个数 + BYTE byOutputNum; // 输出源个数 + BYTE byCBDNum; //CBD个数 + BYTE byRes2[29]; +} NET_DVR_SCREEN_SCREENINFO, *LPNET_DVR_SCREEN_SCREENINFO; + +/*******************************底图上传*******************************/ +typedef struct tagNET_DVR_BASEMAP_CFG +{ + BYTE byScreenIndex; //屏幕的序号 + BYTE byMapNum; /*被分割成了多少块 */ + BYTE res[2]; + WORD wSourWidth; /* 原图片的宽度 */ + WORD wSourHeight; /* 原图片的高度 */ +}NET_DVR_BASEMAP_CFG, LPNET_DVR_BASEMAP_CFG; + + +typedef struct tagNET_DVR_PICCFG +{ + DWORD dwSize; //大小 + BYTE byUseType; //1-底图,2-GIF图片,3-CAD图片 4-输出口图片 + BYTE bySequence;//序号 + BYTE byOverlayEnabled; //图片叠加使能,是否在上传图片包含图片叠加参数 1-包含叠加参数,0-不包含 + BYTE byRes[1]; + NET_DVR_BASEMAP_CFG struBasemapCfg; //底图参数对合码器设备无效 + BYTE sPicName[NAME_LEN];//图片名称 + DWORD dwVideoWall; //墙号(1字节墙号(对于合码器,该值固定为1即可)+1字节通道输出(合码通道号)+2字节窗口号) + BYTE byFlash; //图片闪烁使能,1-闪烁,0-不闪烁 + BYTE byTranslucent; //图片半透明使能,1-半透明,0-不半透明 + BYTE byShowEnabled; //图片显示使能,1-显示,0-隐藏 + BYTE byPictureType; //图片类型,1-bmp,2-jpg,3-png,…… + BYTE byRes2[24]; +}NET_DVR_PICTURECFG, *LPNET_DVR_PICTURECFG; + +/*******************************OSD*******************************/ +#define MAX_OSDCHAR_NUM 256 +typedef struct tagNET_DVR_OSDCFG +{ + DWORD dwSize; + BYTE byValid; /*是否有效 0无效 1有效*/ + BYTE byDispMode; //显示模式,1-透明,2-半透明,3-覆盖三种模式 + BYTE byFontColorY; /*字体颜色Y,0-255*/ + BYTE byFontColorU; /*字体颜色U,0-255*/ + BYTE byFontColorV; /*字体颜色V,0-255*/ + BYTE byBackColorY; /*背景颜色Y,0-255*/ + BYTE byBackColorU; /*背景颜色U,0-255*/ + BYTE byBackColorV; /*背景颜色V,0-255*/ + WORD wXCoordinate; /*OSD在屏幕左上角位置x*/ + WORD wYCoordinate; /*OSD在屏幕左上角位置y*/ + WORD wWidth; /*OSD宽度*/ + WORD wHeight; /*OSD高度*/ + DWORD dwCharCnt; /*字符的个数*/ + WORD wOSDChar[MAX_OSDCHAR_NUM]; /*OSD字符内容*/ + BYTE byRes[32]; +}NET_DVR_OSDCFG, *LPNET_DVR_OSDCFG; + + +/*******************************获取串口信息*******************************/ +typedef struct tagNET_DVR_SERIAL_CONTROL +{ + DWORD dwSize ; + BYTE bySerialNum; // 串口个数 + BYTE byRes1[3]; + BYTE bySerial[32]; + BYTE byRes2[32]; +}NET_DVR_SERIAL_CONTROL, *LPNET_DVR_SERIAL_CONTROL; + +/*******************************屏幕控制*******************************/ +//屏幕输入源控制 +typedef enum tagINPUT_INTERFACE_TYPE +{ + INTERFACE_VGA = 0, + INTERFACE_SVIDEO, // 2046NL不支持,2046NH支持 + INTERFACE_YPBPR, + INTERFACE_DVI , + INTERFACE_BNC , + INTERFACE_DVI_LOOP,//(环通) 2046NH不支持,2046NL支持 + INTERFACE_BNC_LOOP, //(环通) 2046NH不支持,2046NL.支持 + INTERFACE_HDMI, + INTERFACE_IP, + INTERFACE_USB, + INTERFACE_SDI, + INTERFACE_DP, + INTERFACE_HDBASET +}INPUT_INTERFACE_TYPE; +typedef struct tagNET_DVR_INPUT_INTERFACE_CTRL +{ + BYTE byInputSourceType; //见INPUT_INTERFACE_TYPE + BYTE byRes[15]; +}NET_DVR_INPUT_INTERFACE_CTRL, *LPNET_DVR_INPUT_INTERFACE_CTRL; +//显示单元颜色控制 +typedef struct tagNET_DVR_DISPLAY_COLOR_CTRL +{ + BYTE byColorType; //1-亮度 2-对比度 3-饱和度 4-清晰度 + char byScale; //-1 、0、+1三个值 + BYTE byRes[14]; +}NET_DVR_DISPLAY_COLOR_CTRL, *LPNET_DVR_DISPLAY_COLOR_CTRL; +//显示单元位置控制 +typedef struct tagNET_DVR_DISPLAY_POSITION_CTRL +{ + BYTE byPositionType; //1-水平位置 2-垂直位置, + char byScale; //-1 、0、+1三个值 + BYTE byRes[14]; +}NET_DVR_DISPLAY_POSITION_CTRL, *LPNET_DVR_DISPLAY_POSITION_CTRL; + + +/*******************************屏幕控制V41*******************************/ +typedef struct tagNET_DVR_RECTCFG_EX +{ + DWORD dwXCoordinate; /*矩形左上角起始点X坐标*/ + DWORD dwYCoordinate; /*矩形左上角Y坐标*/ + DWORD dwWidth; /*矩形宽度*/ + DWORD dwHeight; /*矩形高度*/ + BYTE byRes[4]; +}NET_DVR_RECTCFG_EX, *LPNET_DVR_RECTCFG_EX; + +/*******************************预案管理*******************************/ +#define MAX_PLAN_ACTION_NUM 32 //预案动作个数 +#define DAYS_A_WEEK 7 //一周7天 +#define MAX_PLAN_COUNT 16 //预案个数 + + +typedef enum +{ + NET_DVR_SWITCH_LAYOUT = 1, // 布局切换 默认 + NET_DVR_SCREEN_POWER_OFF, // 关闭大屏幕显示 + NET_DVR_SCREEN_POWER_ON, // 打开大屏幕显示 + NET_DVR_SWITCH_BASEMAP //底图切换 +}NET_DVR_PLAN_OPERATE_TYPE; + +/*预案项信息*/ +typedef struct tagNET_DVR_PLAN_INFO +{ + BYTE byValid; // 该项是否有效 + BYTE byType; // 见定义NET_DVR_PLAN_OPERATE_TYPE + WORD wLayoutNo; // 布局号 + BYTE byScreenStyle; //屏幕型号,开关机所用,1是低亮,2是高亮 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,底图切换时有效 + BYTE byRes1[2]; + DWORD dwDelayTime; // 一个项的运行时间, 单位秒 + DWORD dwSerialNo; //串口号,屏幕控制时使用 + DWORD dwBaseMapWndNo; //底图窗口号,底图切换时有效 + DWORD dwBaseMapNo; //底图号,底图切换时有效;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入号(1字节设备号+1字节子板号+2字节显示输入序号) + BYTE byRes2[20]; +} NET_DVR_PLAN_INFO, *LPNET_DVR_PLAN_INFO; + +typedef struct tagNET_DVR_CYCLE_TIME +{ + BYTE byValid; + BYTE byRes[3]; + NET_DVR_TIME_EX struTime; +}NET_DVR_CYCLE_TIME, *LPNET_DVR_CYCLE_TIME; +/*预案管理*/ +typedef struct tagNET_DVR_PLAN_CFG +{ + DWORD dwSize; + BYTE byValid; // 该预案是否有效 + BYTE byWorkMode; // 预案工作模式 1表示手动,2自动,3预案循环 + BYTE byWallNo; //电视墙号,从1开始 + BYTE byPlanNo; //预案号,获取预案列表时有效,0-无效或不支持 + BYTE byPlanName[NAME_LEN/*32*/]; //预案名称 + NET_DVR_TIME_EX struTime; // 工作模式为自动时使用 + NET_DVR_CYCLE_TIME struTimeCycle[DAYS_A_WEEK/*7*/]; /*循环时间,周期为一个星期,年、月、日三个参数不使用。如:struTimeCycle[0]中的byValid的值是1,表示星期天执行该预案。星期取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推*/ + DWORD dwWorkCount; // 预案内容执行次数 + NET_DVR_PLAN_INFO strPlanEntry[MAX_PLAN_ACTION_NUM/*32*/]; // 预案执行的内容 + DWORD dwPlanNo; //4字节预案号,客户端统一使用4字节的预案号,单字节的预案号不再使用 + BYTE byRes2[60]; +}NET_DVR_PLAN_CFG, *LPNET_DVR_PLAN_CFG; + + +/*******************************获取设备状态*******************************/ +/*预案列表*/ +typedef struct tagNET_DVR_PLAN_LIST +{ + DWORD dwSize; + DWORD dwPlanNums; //设备输入信号源数量 + BYTE *pBuffer; //指向dwInputSignalNums个NET_DVR_PLAN_CFG结构大小的缓冲区 + BYTE byWallNo; //墙号,从1开始 + BYTE byRes1[2]; + DWORD dwBufLen; //所分配缓冲区长度,输入参数(大于等于dwInputSignalNums个NET_DVR_PLAN_CFG结构大小) + BYTE byRes2[64]; +} NET_DVR_PLAN_LIST,*LPNET_DVR_PLAN_LIST; + + +/*******************************预案控制*******************************/ +//该结构体可作为通用控制结构体 +typedef struct tagNET_DVR_CONTROL_PARAM +{ + DWORD dwSize; + BYTE sDeviceID[NAME_LEN]; //被控设备的设备ID + WORD wChan; //被控通道 + BYTE byIndex; //控制索引,根据命令确定具体表示什么索引 + BYTE byRes1; + DWORD dwControlParam; + BYTE byMandatoryAlarm; //1-使能 0-不使能 + BYTE byRes2; + WORD wZoneIndex; //防区号 + BYTE byOperatorCode[16]; //回控码 + DWORD dwPlanNo; //4字节预案号,客户端统一使用4字节的预案号,单字节的预案号不再使用 + BYTE byRes3[8]; +}NET_DVR_CONTROL_PARAM, *LPNET_DVR_CONTROL_PARAM; + +/*******************************获取设备状态*******************************/ +typedef struct tagNET_DVR_DEVICE_RUN_STATUS +{ + DWORD dwSize; + DWORD dwMemoryTotal; //内存总量,单位Kbyte + DWORD dwMemoryUsage; //内存使用量,单位Kbyte + BYTE byCPUUsage; //CPU使用率,0-100 + BYTE byMainFrameTemp; //机箱温度,单位:摄氏度 + BYTE byBackPanelTemp; //背板温度,单位:摄氏度 + BYTE byRes1; + BYTE byLeftDecResource[32]; //各解码板剩余解码资源,以解D1分辨率资源为单位,byLeftDecResource[i],表示槽位号i解码板剩余资源,0xff表示无效(非解码板或没插板子) + float fNetworkFlow; //网络流量,单位:KB/s,归一化处理,保留小数点后两位 + BYTE byRes2[88]; +}NET_DVR_DEVICE_RUN_STATUS, *LPNET_DVR_DEVICE_RUN_STATUS; + +// 91系列HD-SDI高清DVR 相机信息 +typedef struct tagNET_DVR_ACCESS_CAMERA_INFO +{ + DWORD dwSize; + char sCameraInfo[32]; // 前端相机信息 + BYTE byInterfaceType; // 前端接入接口类型,1:VGA, 2:HDMI, 3:YPbPr 4:SDI 5:FC + BYTE byRes1[3]; + DWORD dwChannel; + BYTE byRes[24]; +}NET_DVR_ACCESS_CAMERA_INFO, *LPNET_DVR_ACCESS_CAMERA_INFO; + +typedef struct tagNET_DVR_AUDIO_INPUT_PARAM +{ + BYTE byAudioInputType; //音频输入类型,0-mic in,1-line in + BYTE byVolume; //volume,[0-100] + BYTE byEnableNoiseFilter; //是否开启声音过滤-关,-开 + BYTE byres[5]; +}NET_DVR_AUDIO_INPUT_PARAM, *LPNET_DVR_AUDIO_INPUT_PARAM; + +typedef struct tagNET_DVR_CAMERA_DEHAZE_CFG +{ + DWORD dwSize; + BYTE byDehazeMode; //0-不启用,1-自动模式,2-开 + BYTE byLevel; //等级,0-100 + BYTE byRes[6]; +}NET_DVR_CAMERA_DEHAZE_CFG, *LPNET_DVR_CAMERA_DEHAZE_CFG; + +typedef struct tagNET_DVR_INPUT_SIGNAL_LIST +{ + DWORD dwSize; + DWORD dwInputSignalNums; //设备输入信号源数量 + BYTE *pBuffer; //指向dwInputSignalNums个NET_DVR_INPUTSTREAMCFG结构大小的缓冲区 + BYTE byRes1[3]; + DWORD dwBufLen; //所分配缓冲区长度,输入参数(大于等于dwInputSignalNums个NET_DVR_INPUTSTREAMCFG结构大小) + BYTE byRes2[64]; +} NET_DVR_INPUT_SIGNAL_LIST,*LPNET_DVR_INPUT_SIGNAL_LIST; + +// 安全拔盘状态 +#define PULL_DISK_SUCCESS 1 // 安全拔盘成功 +#define PULL_DISK_FAIL 2 // 安全拔盘失败 +#define PULL_DISK_PROCESSING 3 // 正在停止阵列 +#define PULL_DISK_NO_ARRAY 4 // 阵列不存在 +#define PULL_DISK_NOT_SUPPORT 5 // 不支持安全拔盘 + +// 扫描阵列状态 +#define SCAN_RAID_SUC 1 // 扫描阵列成功 +#define SCAN_RAID_FAIL 2 // 扫描阵列失败 +#define SCAN_RAID_PROCESSING 3 // 正在扫描阵列 +#define SCAN_RAID_NOT_SUPPORT 4 // 不支持阵列扫描 + +// 设置前端相机类型状态 +#define SET_CAMERA_TYPE_SUCCESS 1 // 成功 +#define SET_CAMERA_TYPE_FAIL 2 // 失败 +#define SET_CAMERA_TYPE_PROCESSING 3 // 正在处理 + +//9000 2.2 +typedef struct tagNET_DVR_RECORD_TIME_SPAN_INQUIRY +{ + DWORD dwSize; //结构体大小 + BYTE byType; //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像 + BYTE byRes[63]; //保留 +}NET_DVR_RECORD_TIME_SPAN_INQUIRY, *LPNET_DVR_RECORD_TIME_SPAN_INQUIRY; + +typedef struct tagNET_DVR_RECORD_TIME_SPAN +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME strBeginTime; //开始时间 + NET_DVR_TIME strEndTime; //结束时间 + BYTE byType; //0 正常音视频录像, 1图片通道录像, 2ANR通道录像, 3抽帧通道录像 + BYTE byRes[35]; //保留 +}NET_DVR_RECORD_TIME_SPAN, *LPNET_DVR_RECORD_TIME_SPAN; + +typedef struct tagNET_DVR_DRAWFRAME_DISK_QUOTA_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byPicQuota; //图片百分比 [0%, 30%] + BYTE byRecordQuota; //普通录像百分比 [20%, 40%] + BYTE byDrawFrameRecordQuota; //抽帧录像百分比 [30%, 80%] + BYTE byRes[61]; //保留字节 +}NET_DVR_DRAWFRAME_DISK_QUOTA_CFG, *LPNET_DVR_DRAWFRAME_DISK_QUOTA_CFG; + +typedef struct tagNET_DVR_NAT_PORT +{ + WORD wEnable; //该端口是否使能映射 + WORD wExtPort; //映射的外部端口号 + BYTE byRes[12]; //保留 +}NET_DVR_NAT_PORT, *LPNET_DVR_NAT_PORT; + +typedef struct tagNET_DVR_NAT_CFG +{ + DWORD dwSize; //结构体大小 + WORD wEnableUpnp; //UPNP功能是否启用 + WORD wEnableNat; //UPNP端口映射(NAT)功能是否启用(保留,与wEnableUpnp保持一致) + NET_DVR_IPADDR struIpAddr; //NAT路由器LAN IP地址 + NET_DVR_NAT_PORT struHttpPort; //web server http端口映射配置 + NET_DVR_NAT_PORT struCmdPort; //命令端口映射配置(8000) + NET_DVR_NAT_PORT struRtspPort; //rtsp端口映射配置 + BYTE byFriendName[64]; //服务名 + BYTE byNatType; //UPNP端口映射类型,0-手动,1-自动 + BYTE byRes1[3]; //保留 + NET_DVR_NAT_PORT struHttpsPort; //https端口映射配置 + NET_DVR_NAT_PORT struSDKOverTLSPort; //SDKOverTLS端口映射配置 + NET_DVR_NAT_PORT struRtspsPort; //Rtsps端口映射配置 + BYTE byres[44]; //保留 +}NET_DVR_NAT_CFG, *LPNET_DVR_NAT_CFG; + +typedef struct +{ + DWORD dwEnabled; //该端口是否被使能映射 + WORD wInternalPort; //映射前的端口 + WORD wExternalPort; //映射后的端口 + DWORD dwStatus; /*端口映射状态 + 0 未生效 + 1 未生效:映射源端口与目的端口需一致 + 2 未生效: 映射端口号已被使用 + 3 生效 + */ + NET_DVR_IPADDR struNatExternalIp; //映射后的外部地址 + NET_DVR_IPADDR struNatInternalIp; //NAT路由器LAN IP地址 + BYTE byRes[16]; //保留 +}NET_DVR_UPNP_PORT_STATE, *LPNET_DVR_UPNP_PORT_STATE; + + +typedef struct +{ + NET_DVR_UPNP_PORT_STATE strUpnpPort[UPNP_PORT_NUM]; //端口映射状态,数组0 web server端口 数组1 管理端口 数组2 rtsp端口 + BYTE byRes[200]; //保留 +}NET_DVR_UPNP_NAT_STATE, *LPNET_DVR_UPNP_NAT_STATE; + +typedef struct tagNET_DVR_PLAYCOND +{ + DWORD dwChannel; + NET_DVR_TIME struStartTime; + NET_DVR_TIME struStopTime; + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byStreamType ; //码流类型,0-主码流 1-子码流 2-码流三 + BYTE byStreamID[STREAM_ID_LEN]; + BYTE byCourseFile; //课程文件0-否,1-是 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byVODFileType; // 下载录像文件,文件格式 0-PS码流格式,1-3GP格式 + BYTE byRes[26]; //保留 +}NET_DVR_PLAYCOND, *LPNET_DVR_PLAYCOND; + +typedef struct tagNET_DVR_ATMFINDINFO +{ + BYTE byTransactionType; //交易类型 0-全部,1-查询, 2-取款, 3-存款, 4-修改密码,5-转账, 6-无卡查询 7-无卡存款, 8-吞钞 9-吞卡 10-自定义 + BYTE byRes[3] ; //保留 + DWORD dwTransationAmount ; //交易金额 ; +} NET_DVR_ATMFINDINFO, *LPNET_DVR_ATMFINDINFO ; + +typedef union tagNET_DVR_SPECIAL_FINDINFO_UNION +{ + BYTE byLenth[8] ; + NET_DVR_ATMFINDINFO struATMFindInfo; //ATM查询 +}NET_DVR_SPECIAL_FINDINFO_UNION, *LPNET_DVR_SPECIAL_FINDINFO_UNION; + + +typedef struct tagNET_DVR_FILECOND_V40 +{ + LONG lChannel; + DWORD dwFileType;/*不带卡号录象文件类型0xff-全部,0-定时录像,1-移动侦测,2-报警触发,3-报警触发或移动侦测,4-报警触发和移动侦测,5-命令触发,6-手动录像, + 7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件,15-越界侦测,16-区域入侵,17-声音异常,18-场景变更侦测,19-智能侦测(越界侦测|区域入侵|人脸侦测|声音异常|场景变更侦测), + 20-人脸侦测, 21-信号量,22-回传,23-回迁录像,24-遮挡,25-pos录像,26-进入区域侦测, 27-离开区域侦测,28-徘徊侦测,29-人员聚集侦测,30-快速运动侦测,31-停车侦测,32-物品遗留侦测,33-物品拿取侦测, + 34-火点侦测,35-防破坏检测,36-船只检测,37-测温预警,38-测温报警,39-打架斗殴报警,40-起身检测,41-瞌睡检测,42-温差报警,43-离线测温报警,44-防区报警,45-紧急求助,46-业务咨询,47-起身检测,48-折线攀高,49-如厕超时,50-奔跑检测,51-滞留检测,52-人脸抓拍, 53-非法摆摊, 54-目标识别, + 55-剧烈运动,56-离岗检测,57-起立,58-人数变化,59-违停, 60-逆行,61-压线,62-机占非,63-变道,64-掉头,65-行人检测,66-路障,67-抛洒物,68-浓雾检测,69-施工,70-拥堵,71-交通事故检测, 72-侧方停车,73-手动触发报警,74-交通违章,75-挖沙船检测报警 76-废气排放显示77-灰度报警,78-振动侦测, + 79-烟雾检测,80-通道定时录像事件,81-AI开放平台事件,82-传感器事件,83-紫光电子检测,84-设备电源状态上报 +*/ + DWORD dwIsLocked; + DWORD dwUseCardNo;//是否带ATM信息进行查询:0-不带ATM信息,1-按交易卡号查询,2-按交易类型查询,3-按交易金额查询,4-按卡号、交易类型及交易金额的组合查询 5-按课程名称查找,此时卡号表示课程名称 + BYTE sCardNumber[CARDNUM_LEN_OUT]; + NET_DVR_TIME struStartTime; + NET_DVR_TIME struStopTime; + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byFindType; //0:查询普通卷,1:查询存档卷 + BYTE byQuickSearch; //0:普通查询,1:快速(日历)查询 + BYTE bySpecialFindInfoType ; //专有查询条件类型 0-无效, 1-带ATM查询条件 + DWORD dwVolumeNum; //存档卷号 + BYTE byWorkingDeviceGUID[GUID_LEN]; //工作机GUID,通过获取N+1得到 + NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo ; //专有查询条件 + BYTE byStreamType; //0-同一个时间段只返回一种录像,优先级顺序为:主码流、子码流、三码流,1-子码流,2-三码流,3-主码流,254-双码流搜索(优先返回主码流录像,没有主码流录像时返回子码流录像) + BYTE byAudioFile; //音频文件 0-非音频文件,1-音频文件 + BYTE byRes2[30]; //保留 +}NET_DVR_FILECOND_V40, *LPNET_DVR_FILECOND_V40; + +//录像文件查找条件结构V50 +typedef struct tagNET_DVR_FILECOND_V50 +{ + NET_DVR_STREAM_INFO struStreamID; //流ID或通道号 + NET_DVR_TIME_SEARCH_COND struStartTime; //开始时间 + NET_DVR_TIME_SEARCH_COND struStopTime; //结束时间 + BYTE byFindType; //0-查询普通卷,1-查询存档卷 2-查询N+1录像文件 + BYTE byDrawFrame; //是否抽帧 0-不抽帧 1-抽帧 + BYTE byQuickSearch; //0-普通查询,1-快速(日历)查询 + BYTE byStreamType; //0-主码流,1-子码流,2-3码流,0xff-全部 + DWORD dwFileType; // 文件类型 + DWORD dwVolumeNum; //存档卷号,byFindType为1时有效 + BYTE byIsLocked; //是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + BYTE byNeedCard; //是否需要查询卡,0-不需要 1-需要 + BYTE byOnlyAudioFile; //音频文件 0-视频文件 1-音频文件 + BYTE bySpecialFindInfoType; //0-无效, 1-带ATM查询条件 + char szCardNum[32]; //卡号,byNeedCard为1时有效 + char szWorkingDeviceGUID[16]; //工作机GUID,通过获取N+1得到,byFindType为2时有效 + NET_DVR_SPECIAL_FINDINFO_UNION uSpecialFindInfo; //专有查询条件联合体 + DWORD dwTimeout; //查找超时时间(指定NET_DVR_FindNextFile_V30/NET_DVR_FindNextFile_V40/NET_DVR_FindNextFile_V50接口的超时时间返回);单位:毫秒,不填写(默认为0时),接口行为跟以前一样 ;有效值:0, [5000 – 15000] + BYTE byRes[252]; +}NET_DVR_FILECOND_V50, *LPNET_DVR_FILECOND_V50; + +typedef struct +{ + BYTE sAESKey[16]; /*码流加密密钥*/ + BYTE byRes[64]; /*保留字节*/ +}NET_DVR_AES_KEY_INFO, *LPNET_DVR_AES_KEY_INFO; + +typedef struct +{ + NET_DVR_IPADDR struIP; //IP地址 + BYTE byRes[128]; //保留 +}NET_DVR_POE_CFG, *LPNET_DVR_POE_CFG; + +#define MAX_PRO_PATH 256 //最大协议路径长度 + +typedef struct +{ + DWORD dwSize; //结构体大小 + DWORD dwEnabled; //是否启用该协议0 不启用 1 启用 + char sProtocalName[DESC_LEN]; //自定义协议名称, 16位 + BYTE byRes1[64]; //保留,用于协议名称扩展 + DWORD dwEnableSubStream; //子码流是否启用0 不启用 1 启用 + + BYTE byMainProType; //主码流协议类型 1 RTSP + BYTE byMainTransType; //主码流传输类型 0:Auto 1:udp 2:rtp over rtsp + WORD wMainPort; //主码流端口 + char sMainPath[MAX_PRO_PATH]; //主码流路径 + + BYTE bySubProType; //子码流协议类型 1 RTSP + BYTE bySubTransType; //子码流传输类型 0:Auto 1:udp 2:rtp over rtsp + WORD wSubPort; //子码流端口 + char sSubPath[MAX_PRO_PATH]; //子码流路径 + + BYTE byRes2[200]; //保留 +}NET_DVR_CUSTOM_PROTOCAL, *LPNET_DVR_CUSTOM_PROTOCAL; + + +//B10能支持PSIA设备 +//循环上墙结构体(实时) +typedef struct +{ + DWORD dwEnable; /* 是否启用 0-否 1-启用*/ + BYTE byType; //设备类型 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES + BYTE byRes[3]; //保留 + NET_DVR_STREAM_MEDIA_SERVER_CFG streamMediaServerCfg; + NET_DVR_DEV_CHAN_INFO struDevChanInfo; /* 轮循解码通道信息 */ + BYTE sRtspUrl[128];//流地址 +}NET_DVR_MATRIX_CHAN_INFO_EX,*LPNET_DVR_MATRIX_CHAN_INFO_EX; + +typedef struct +{ + DWORD dwSize; + DWORD dwPoolTime; /*轮询间隔*/ + NET_DVR_MATRIX_CHAN_INFO_EX struchanConInfo[MAX_CYCLE_CHAN_V30]; + BYTE byRes[16]; +}NET_DVR_MATRIX_LOOP_DECINFO_EX,*LPNET_DVR_MATRIX_LOOP_DECINFO_EX; + +//实时预览上墙结构体 +typedef struct +{ + DWORD dwSize; + BYTE byType; //设备类型 0: DEV_SDK 1:DEV_DAHUA 2:DEV_EHOME 3:DEV_OTHERES + BYTE byRes[3]; //保留 + NET_DVR_STREAM_MEDIA_SERVER_CFG struStreamMediaSvrCfg; + NET_DVR_DEV_CHAN_INFO struDevChanInfo; + BYTE sRtspUrl[128];//流地址 +}NET_DVR_PU_STREAM_CFG_EX,*LPNET_DVR_PU_STREAM_CFG_EX; + +typedef struct tagNET_DVR_MATRIX_TRUNKCFG +{ + DWORD dwGlobalIndex; //主键 + DWORD dwInterIndex; //本地全局编号 + BYTE sTrunkName[NAME_LEN]; + BYTE byType; //设备类型1-bnc, 2-SP3, 3-V6 + BYTE byDir; //干线方向 1-输入2-输出 + BYTE byAbility; //干线能力,D1衡量 + BYTE bySubsys; //子系统ID + BYTE byChan; //通道ID + BYTE byRes[255]; //预留 +} NET_DVR_MATRIX_TRUNKCFG,*LPNET_DVR_MATRIX_TRUNKCFG; + +typedef struct tagNET_DVR_DECSUBSYSTEMJIONSTATUS_V41 +{ + BYTE byJoinStatus;//关联状态,0-没有关联,1-已经关联,通过其他字段判断被自己关联或被其他子系统关联,2-被占用,byDecodeAbility大于1时有效,3-被大屏主屏关联,4-被大屏子屏关联 + BYTE byJoinSubSystem;// 所关联或占用的子系统槽位号 + BYTE byJoinDispNum;// 所关联或占用的显示通道号 + BYTE byJoinSubWindowNum;// 所关联或占用的子窗口号 + BYTE byDecodeAbility; //解码通道的当前解码能力,0-未关联,1-D1,2-720,3-1080 + BYTE byRes[15]; +}NET_DVR_DECSUBSYSTEMJIONSTATUS_V41,LPNET_DVR_DECSUBSYSTEMJIONSTATUS_V41; + +typedef struct tagNET_DVR_SINGLESUBSYSTEMJOININFO_V41 +{ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-V6解码子系统,9-V6子系统,0-NULL(此参数只能获取)*/ + BYTE bySubSystemType; + BYTE byConnectStatus;//级联系统关联状态,1-连接正常,2-连接断开 + BYTE byMatrixNum;//级联视频综合平台号,子系统类型是3或4时可用 + BYTE bySubSystemNum;//级联子系统槽位号,子系统类型是3或4时可用 + NET_DVR_DECSUBSYSTEMJIONSTATUS_V41 struSubSystem[MAX_DECODECHANNUM]; + BYTE byBindStatus;//绑定状态,0-没有绑定,1-已经绑定(大屏拼接时用到) + BYTE bySlotNum ;//槽位号,此参数只能获取 + BYTE byUsedTrunk;//是否被干线使用,0-未被使用,1-被使用 + BYTE byRes[65]; +}NET_DVR_SINGLESUBSYSTEMJOININFO_V41,LPNET_DVR_SINGLESUBSYSTEMJOININFO_V41; + +typedef struct tagNET_DVR_ALLDECSUBSYSTEMJOININFO_V41 +{ + DWORD dwSize; + NET_DVR_SINGLESUBSYSTEMJOININFO_V41 struSingleSubSystemJoinInfo[MAX_SUBSYSTEM_NUM_V40]; + BYTE byRes[48]; +}NET_DVR_ALLDECSUBSYSTEMJOININFO_V41,*LPNET_DVR_ALLDECSUBSYSTEMJOININFO_V41; + +//////////子系统配置///////////// +#define MAX_ALARMHOSTKEYBOARD 64 //网络报警主机最大键盘数 +typedef struct tagNET_DVR_PUBLIC_SUB_SYSTEM +{ + //关联子系统号,按位表示,bit0表示该公共子系统关联子系统1. + DWORD dwJointSubSystem; + BYTE byRes[16]; +}NET_DVR_PUBLIC_SUB_SYSTEM, *LPNET_DVR_PUBLIC_SUB_SYSTEM; + +typedef struct tagNET_DVR_NOAMAL_SUB_SYSTEM +{ + //表示被哪些公共子系统关联,按位表示,bit0 表示,该子系统.被关联到公共子系统1 + DWORD dwBeJoinedSubSystem; + BYTE byRes[16]; +}NET_DVR_NOAMAL_SUB_SYSTEM, *LPNET_DVR_NOAMAL_SUB_SYSTEM; + +typedef union tagNET_DVR_JOINT_SUB_SYSTEM +{ + // byPublicAttributeEnable为0时使用该变量 + NET_DVR_NOAMAL_SUB_SYSTEM struNormalSubSystem; + //byPublicAttributeEnable为1时使用该变量 + NET_DVR_PUBLIC_SUB_SYSTEM struPublicSubSystem; + BYTE byRes[20]; +}NET_DVR_JOINT_SUB_SYSTEM,*LPNET_DVR_JOINT_SUB_SYSTEM; + +#define MAX_SUBSYSTEM_ID_LEN 16 //子系统ID最大长度 + +//////////GPRS参数配置///////////// +#define ACCOUNTNUM_LEN 6 +#define ACCOUNTNUM_LEN_32 32 +#define ACCOUNTNUM_LEN_V40 9 +#define APN_NAME_LEN 32 +#define APN_USERNAME_LEN 24 +#define APN_USERPASSWORD_LEN 16 + +typedef struct tagNET_DVR_ALARMSUBSYSTEMPARAM +{ + DWORD dwSize; + WORD wEnterDelay; //进入延时,单位:秒, 范围:10-150 动环报警主机和自助行报警主机的延时时间在 NET_DVR_ALARMIN_PARAM 中的dwParam来设置延时时间 + //具体用哪种设置方式通过能力集中的bySupportAlarmInDelay字段来区别 + WORD wExitDelay;//退出延时,单位:秒, 范围10-300 + BYTE byHostageReport; //挟持报告,0禁能 1使能 + BYTE bySubsystemEnable; //子系统使能 + BYTE byKeyToneOfArmOrDisarm; // 成功发送布撤防报告是否键盘提示,0-键盘不提示 1-键盘输出提示音 + BYTE byKeyToneOfManualTestReport; //成功发送测试报告是否键盘提示,0-键盘不提示 1-键盘输出提示音 + WORD wDelayTime; //警号输出延时,当能力集中dwSupport1中的bit0位为1时,使用该参数设置警号输出时间。bit0为0时,使用NET_DVR_SIREN_PARAM中的wDelay参数设置警号输出时间 + BYTE byEnableAlarmInDelay;//0--不启用(使用子系统延时),1--启用(使用防区延时),默认不启用 + BYTE byPublicAttributeEnable; //是否为公共子系统 + NET_DVR_JOINT_SUB_SYSTEM struJointSubSystem; + BYTE byKeyZoneArm; //是否支持钥匙防区对子系统进行布防操作 + BYTE byKeyZoneArmReport; //是否支持钥匙防区对子系统布防时发送布防报告 + BYTE byKeyZoneDisarm; //是否支持钥匙防区对子系统进行撤防操作 + BYTE byKeyZoneDisarmReport; //是否支持钥匙防区对子系统进行撤防操作时发送撤防报告 + BYTE bySubSystemID[MAX_SUBSYSTEM_ID_LEN]; //子系统ID + BYTE byKeyZoneArmReportEnable; //钥匙防区上传布防报告使能 0-禁能 1-使能 + BYTE byKeyZoneArmEnable; //钥匙防区使能, 0 -禁能 1-使能 + BYTE byOneKeySetupAlarmEnable; //一键布防使能 + BYTE bySingleZoneSetupAlarmEnable; //单防区布撤防使能 + BYTE byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9) + BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //中心帐号 + BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //中心账号V40,使用此字段时sCenterAccount无效 + BYTE byRes2[565]; // 保留字节 +}NET_DVR_ALARMSUBSYSTEMPARAM, *LPNET_DVR_ALARMSUBSYSTEMPARAM; + +typedef struct tagNET_DVR_REMIND_TIME//8 +{ + BYTE byEnable;//是否启用本次提醒 0-不启用,1-启用 + BYTE byHour;//0~24 + BYTE byMinute;//0~60 + BYTE bySecond;//0~60 +}NET_DVR_REMIND_TIME,*LPNET_DVR_REMIND_TIME; + +//子系统参数配置扩展 +#define MAX_KEYBOARD_USER_NUM 256 +typedef struct tagNET_DVR_SUBSYSTEM_PARAM_EX +{ + DWORD dwSize; + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; //布撤防时间 + BYTE byAlarmInAdvance; // 布撤防提前提示时间0~45分 + BYTE byRes1[3]; + BYTE byJointAlarmIn[MAX_ALARMHOST_ALARMIN_NUM / 8];//按位,表示子系统关联的报警输入通道号,0-不加入,1-加入 + BYTE byJointKeyboard[MAX_ALARMHOSTKEYBOARD/*64*/ / 8];//按位,表示支持的键盘号,0-不加入,1-加入 + BYTE byJointOpetaterUser[MAX_KEYBOARD_USER_NUM/8];//按位表示,bit0表示键盘操作用户1 ,0-不关联 1-关联 + NET_DVR_REMIND_TIME struAlarmRemindTime[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/];//MAX_TIMESEGMENT_V30表示每天最多支持8个提醒 + BYTE byJointNetUser[NET_SDK_MAX_NET_USER_NUM / 8];//关联网络用户(按位表示,bit0表示网络用户1;0-不关联 1-关联) + BYTE byRes2[280]; // 保留字节 +}NET_DVR_SUBSYSTEM_PARAM_EX, *LPNET_DVR_SUBSYSTEM_PARAM_EX; + + +typedef struct tagNET_DVR_ALARMHOST_PRINTER_CFG +{ + DWORD dwSize; + BYTE byPrinterEnable; //是否启用打印机 + BYTE byPrintTime; //是否打印时间 + BYTE byFaultDetect; //是否检测打印机故障 + BYTE byRes1; + DWORD dwAlarmInfo; //报警信息,按位表示。bit0-防区报警,bit1-防区报警恢复,bit2-紧急报警,bit-3挟持报警 + DWORD dwDeviceInfo; //设备信息,按位表示。bit0-交流电断电、bit1-交流电断电恢复,bit2-蓄电池欠压、bit3-蓄电池欠压恢复,bit4-电话线断线、bit5-电话线断线恢复,bit6-测试报告、bit7-防拆、bit8-防拆恢复、bit9-485设备掉线、bit10-485设备掉线恢复、bit11-无线网络异常、bit12-无线网络恢复正常、bit13-有线网络异常、bit14-有线网络恢复正常、bit15-扩展总线异常、bit17-扩展总线恢复正常、bit17-硬盘故障、bit18-硬盘故障恢复、bit19-键盘锁定 + DWORD dwOperateInfo; //操作信息,按位表示。bit0-布防、bit1-撤防、bit2-消警、bit3-旁路、bit4-旁路恢复、bit5-进入编程、bit6-退出编程、bit7-主机复位 + BYTE byRes2[256]; // 保留字节 +}NET_DVR_ALARMHOST_PRINTER_CFG, *LPNET_DVR_ALARMHOST_PRINTER_CFG; + +typedef struct tagNET_DVR_ALARMHOST_NETPARAM +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; + WORD wPort; + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 + BYTE byRes1[1]; + BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //域名,GPRS参数配置、网络参数配置时该字段均有效 + BYTE byReportProtocol; //1-private 2-NAL2300, 3-Ehome + BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //协议为NAL2300时有效 + BYTE byRes2[7]; //GPRS的域名解析是在固定的服务器上进行的,所以不需要给解析服务器的信息预留一些字段 +}NET_DVR_ALARMHOST_NETPARAM, *LPNET_DVR_ALARMHOST_NETPARAM; + +typedef struct tagNET_DVR_REGISTER_RS485CFG +{ + DWORD dwSize; // 结构体大小 + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 + BYTE byRes[2]; + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byRes1[124]; // 保留字节 +}NET_DVR_REGISTER_RS485CFG, *LPNET_DVR_REGISTER_RS485CFG; + +typedef struct tagNET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG +{ + DWORD dwSize; + NET_DVR_ALARMHOST_NETPARAM struNetCenter[MAX_CENTERNUM]; //中心 GPRS网络相关参数的配置 + BYTE byAPNName[APN_NAME_LEN/*32*/]; + BYTE byAPNUserName[APN_USERNAME_LEN/*24*/]; + BYTE byAPNPassWord[APN_USERPASSWORD_LEN/*16*/]; + BYTE byReconnTime; //重连时间,连接失效后启用重连的时间,10秒为单位,取值范围1-30 + BYTE byOverTime; //超时时间,超过OverTime时间没有收到有效数据则重连,范围1-254,单位30秒 + BYTE byDetectLinkTime; // //探测链路是否还保持,范围1-30,单位10s + BYTE byRes1; + BYTE bySIMNum[NAME_LEN/*32*/]; //SIM卡号(手机号) + NET_DVR_IPADDR struSIMIP; //登陆网络后网络给分配的IP地址,只能获取 + BYTE byRes2[64]; +}NET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG, *LPNET_DVR_ALARMHOST_WIRELESS_NETWORK_CFG; + + +//////////网络参数配置///////////// +typedef struct tagNET_DVR_ALARMHOST_NETCFG +{ + DWORD dwSize; + NET_DVR_ALARMHOST_NETPARAM struNetCenter[MAX_CENTERNUM]; + BYTE byRes1[32]; +}NET_DVR_ALARMHOST_NETCFG, *LPNET_DVR_ALARMHOST_NETCFG; + +//////////积木上传方式///////////// +#define MAX_REPORTCHAN_NUM 4 +#define MAX_CENTERGROUP_NUM 16 +typedef struct tagNET_DVR_ALARMHOST_REPORTCENTER_CFG +{ + DWORD dwSize; + BYTE byValid; //是否启用 + BYTE byRes[3]; //保留1 + BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警通道, 1-T1、2-T2、 3-N1、 4-N2、5-G1、 6-G2 + BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //向指定中心组发送失败报告,用数组下标表示是哪个中心组,0-不选择、1-选择 + BYTE byDataType; //1-报警数据 2-非报警数据 3-所有数据 + BYTE byRes2[15]; //保留2 +}NET_DVR_ALARMHOST_REPORTCENTER_CFG, *LPNET_DVR_ALARMHOST_REPORTCENTER_CFG; + +#define MAX_EVENT_NUM 32//网络报警主机最大事件数 +typedef struct tagNET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40 +{ + DWORD dwSize; + BYTE byValid; //是否启用 + BYTE byDataType; //1-所有报警数据 2-所有非报警数据 3-所有数据,4-防区报警报告,5-非防区报警报告 + BYTE byRes[2]; //保留1 + BYTE byChanAlarmMode[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警通道, 1-T1、2-T2、 3-N1、 4-N2、5-G1、 6-G2、7-N3、 8-N4、9-CMK-4G、10-CMK-NET(如果设备支持3G,G1,G2表示3G模块,如果不支持,表示GPRS模块,一款设备中3G模块和GPRS模块只会出现一种) + BYTE byDealFailCenter[MAX_CENTERGROUP_NUM/*16*/]; //向指定中心组发送失败报告,用数组下标表示是哪个中心组,0-不选择、1-选择 + BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM]; //防区报告类型,0-不上传,1-上传 + BYTE byNonZoneReport[MAX_EVENT_NUM]; //非防区报警报告, 每一个元素表示一种事件类型,0-不上传,1-上传,byNonZoneReport[0]-软防区报告 byNonZoneReport[1]-系统状态报告 byNonZoneReport[2]-取消报告 byNonZoneReport[3]-测试报告 byNonZoneReport[4]-布防报告 byNonZoneReport[5]-撤防报告 byNonZoneReport[6]-挟持报告 byNonZoneReport[7]-报警恢复报告 byNonZoneReport[8]-旁路报告 byNonZoneReport[9]-旁路恢复报告。byNonZoneReport[10]-探测器连接状态报告(上线、离线)。byNonZoneReport[11]-探测器电量状态报告(电压正常、欠压)byNonZoneReport[12]-视频报警报告 + BYTE byAlarmNetCard[MAX_REPORTCHAN_NUM/*4*/]; //中心组报警网卡中心,0-主网卡中心1,1-主网卡中心2,2-扩展网卡中心1,3-扩展网卡中心2(报警通道为N1、N2、N3、N4时有效) + BYTE byRes2[252]; //保留2 +}NET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40, *LPNET_DVR_ALARMHOST_REPORT_CENTER_CFG_V40; + + +//////////防护舱状态上传///////////// +typedef struct tagNET_DVR_ALARMHOST_SAFETYCABINSTATE +{ + DWORD dwSize; + BYTE byEnterButton; //进门按钮状态 0-不按下 1-按钮按下 + BYTE byExitButton; //出门按钮状态 0-不按下 1-按钮按下 + BYTE byDoorState; //门状态 0-门关闭 1-门打开 + BYTE byLockState; //锁状态 0-锁关 1-锁开 + BYTE byUrgencyButton; //紧急按钮状态 0-不按下 1-按钮按下 + BYTE byManState; //人状态 0-没人 1-有人 + BYTE byAbnormal; //异常状态 0-正常 1-异常(防护舱使用超时上传异常) + BYTE byLightState; //灯光状态 0-关 ,1-开 + BYTE byFanState; //风扇状态 0-关,1-开 + BYTE byFollow; //尾随进入状态 0-无尾随,1-有尾随 + BYTE byFighting; //打斗状态 0-无打斗,1-有打斗 + BYTE byFaint; //晕倒状态 0-无晕倒,1-有人晕倒 + BYTE byManyPerson; //多人状态 0-无多人进舱,1-多人进舱 + BYTE byRes[59]; //保留 +}NET_DVR_ALARMHOST_SAFETYCABINSTATE,*LPNET_DVR_ALARMHOST_SAFETYCABINSTATE; + +/////////警号输出口,警号状态上传///////////// +typedef struct tagNET_DVR_ALARMHOST_ALARMOUTSTATUS +{ + DWORD dwSize; + BYTE byName[32]; //报警输出口名称或警号名称 + BYTE byAlarmType; //1-报警输出口状态, 2-警号状态 + WORD wChan; //如果是报警输出口状态,该值的范围为0-511;如果是警号状态,范围1-8(防护舱只有1个警号输出) + BYTE byAlarmStatus; //报警状态 0-无报警 1-有报警 + BYTE byRes[32]; +}NET_DVR_ALARMHOST_ALARMOUTSTATUS,*LPNET_DVR_ALARMHOST_ALARMOUTSTATUS; + +//////////语音上传下载///////////// +typedef struct tagNET_DVR_AUDIO_PARAM +{ + DWORD dwSize; + BYTE byAudioFormat; //音频格式,1-G711,2-G722 + BYTE byRes1; + WORD wChannels; // number of channels (i.e. mono, stereo...) + DWORD dwSamplesPerSec; //采样率 + BYTE byRes2[20]; //保留 + DWORD dwAudioSize; //音频长度大小,压缩后的大小 +}NET_DVR_AUDIO_PARAM,*LPNET_DVR_AUDIO_PARAM; + +//预览V40接口 +typedef struct tagNET_DVR_PREVIEWINFO +{ + LONG lChannel;//通道号 + DWORD dwStreamType; // 码流类型,0-主码流,1-子码流,2-码流3,3-码流4, 4-码流5,5-码流6,7-码流7,8-码流8,9-码流9,10-码流10 + DWORD dwLinkMode;// 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP ,6- HRUDP(可靠传输) ,7-RTSP/HTTPS + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + DWORD bBlocked; //0-非阻塞取流, 1-阻塞取流, 如果阻塞SDK内部connect失败将会有5s的超时才能够返回,不适合于轮询取流操作. + DWORD bPassbackRecord; //0-不启用录像回传,1启用录像回传 + BYTE byPreviewMode;//预览模式,0-正常预览,1-延迟预览 + BYTE byStreamID[STREAM_ID_LEN/*32*/];//流ID,lChannel为0xffffffff时启用此参数 + BYTE byProtoType; //应用层取流协议,0-私有协议,1-RTSP协议,2-SRTP码流加密(对应此结构体中dwLinkMode 字段,支持如下方式, 为1,表示udp传输方式,信令走TLS加密,码流走SRTP加密,为2,表示多播传输方式,信令走TLS加密,码流走SRTP加密) + BYTE byRes1; + BYTE byVideoCodingType; //码流数据编解码类型 0-通用编码数据 1-热成像探测器产生的原始数据(温度数据的加密信息,通过去加密运算,将原始数据算出真实的温度值) + DWORD dwDisplayBufNum; //播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1 + BYTE byNPQMode; //NPQ是直连模式,还是过流媒体 0-直连 1-过流媒体 + BYTE byRecvMetaData; //是否接收metadata数据,设备是否支持该功能通过GET /ISAPI/System/capabilities 中DeviceCap.SysCap.isSupportMetadata是否存在且为true + BYTE byDataType; //数据类型,0-码流数据,1-音频数据 + BYTE byRes[213]; +}NET_DVR_PREVIEWINFO, *LPNET_DVR_PREVIEWINFO; + +//连接类型枚举 +typedef enum _NET_DVR_LINK_KIND_ +{ + ENUM_LINK_PREVIEW = 1, //预览 + ENUM_LINK_PLAYBACK, //回放,下载 + ENUM_LINK_VOICEPLAY //语音对讲/转发 +}NET_DVR_LINK_KIND; + +//连接地址结构体,RTSP取流时存在一个句柄创建多个端口通信的情况 +typedef struct tagNET_DVR_LINK_ADDR +{ + NET_DVR_IPADDR_UNION uLocalIP; //本地IP地址 + WORD wLocalPort[10]; //本地端口号 + BYTE byLocalPortNum; //本地端口数 + BYTE byRes1[3]; + NET_DVR_IPADDR_UNION uDevIP; //设备IP地址 + WORD wDevPort[10]; //设备端口号 + BYTE byDevPortNum; //设备端口数 + BYTE byRes2[3]; + BYTE byRes[80]; +}NET_DVR_LINK_ADDR, *LPNET_DVR_LINK_ADDR; + +//中心智能设备取流 +typedef struct tagNET_DVR_PREVIEWINFO_SPECIAL +{ + char sURL[1024]; //取流URL,对应/ISAPI/SDT/Management/Region/ID返回的取流URL,部分设备返回的URL不合法,需要增加用户名密码节点,其中用户名和密码信息来自deviceUser和devicePassword节点 + //示例:rtsp://admin:abcd12345@10.7.37.2:554/Streaming/Channels/101?transportmode=unicast + DWORD dwLinkMode;// 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP + HWND hPlayWnd;//播放窗口的句柄,为NULL表示不播放图象 + DWORD bBlocked; //0-非阻塞取流, 1-阻塞取流, 如果阻塞SDK内部connect失败将会有5s的超时才能够返回,不适合于轮询取流操作. + DWORD dwDisplayBufNum; //播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1 + BYTE byRes[64]; +}NET_DVR_PREVIEWINFO_SPECIAL, *LPNET_DVR_PREVIEWINFO_SPECIAL; + + +//事件触发报警输出 + +typedef struct tagNET_DVR_TRIGGER_EVENT +{ + DWORD dwSize; + DWORD dwOverallEventTriggerAlarmoutOn; //全局事件触发报警输出开启,按位或,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常 ,bit5-硬盘故障, bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线 ,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwOverallEventTriggerAlarmoutOff; //全局事件触发报警输出开启,按位或,bit0-交流电掉电,bit1-电池电压低,bit2-电话线掉线,bit3-有线网络异常,bit4-无线网络异常 ,bit5-硬盘故障, bit6-3G/4G信号异常, bit7-(模块链接)第三方主机掉线 ,bit8- WIFI通信故障,bit9-RF信号干扰故障 + DWORD dwSubSystemEventTriggerAlarmoutOn[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统事件触发报警输出开启,dwSubSystemEvent[0]表示子系统1,dwSubSystemEvent[2]表示子系统2,具体的子系统个数从能力集获取(wSubSystem),每个子系统的事件按位表示,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆,bit6-报警恢复,bit7-防区防拆,bit8-防区防拆恢复 + DWORD dwSubSystemEventTriggerAlarmoutOff[MAX_ALARMHOST_SUBSYSTEM/*32*/]; //子系统事件触发报警输出关闭,wSubSystemEvent[0]表示子系统1,dwSubSystemEvent[2]表示子系统2,具体的子系统个数从能力集获取(wSubSystem),每个子系统的事件按位表示,bit0-进入延时,bit1-退出延时,bit2-布防,bit3-撤防,bit4-报警,bit5-消除报警记忆,bit6-报警恢复,bit7-防区防拆,bit8-防区防拆恢复 + BYTE byRes[128]; +}NET_DVR_TRIGGER_EVENT, *LPNET_DVR_TRIGGER_EVENT; + +//故障处理配置 +typedef struct tagNET_DVR_ALARMHOST_FAULT_CFG +{ + DWORD dwSize; + DWORD dwCheckFault; //是否检测故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,bit9- FPGA故障,bit10- 模拟量故障, bit11-防区扩展板异常,bit12-WIFI通信故障,bit13-RF信号干扰故障,具体支持的故障类型从能力集获取 + DWORD dwOverallFaultJointLED; //故障关联全局键盘指示灯输出 bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,具体支持的故障类型从能力集获取 + DWORD dwOverallFaultJointSound; //故障关联全局键盘声音输出 bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常,具体支持的故障类型从能力集获取 + DWORD dwSubSystemFaultJointLED[MAX_ALARMHOST_SUBSYSTEM]; /*故障关联子系统键盘指示灯输出,dwSubSystemFaultJointLED[0]表示子系统1的关联信息。dwSubSystemFaultJointLED[0]的每一位表示一中故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常; dwSubSystemFaultJointLED[1]表示子系统2,以此类推*/ + DWORD dwSubSystemFaultJointSound[MAX_ALARMHOST_SUBSYSTEM];/*故障关联子系统键盘声音输出(声音在键盘上输出)dwSubSystemFaultJointLED[0]表示子系统1的关联信息。dwSubSystemFaultJointSound [0]的每一位表示一中故障,bit0-交流电断电,bit1-蓄电池欠压,bit2-主机防拆开,bit3-电话线掉线,bit4-485设备异常,bit5-网络故障,bit6-无线异常,bit7-扩展总线异常,bit8-硬盘异常; dwSubSystemFaultJointSound [1]表示子系统2,以此类推*/ + DWORD dwFaultJointFaultLight;//故障关联故障灯输出 + BYTE byRes[60]; +}NET_DVR_ALARMHOST_FAULT_CFG, *LPNET_DVR_ALARMHOST_FAULT_CFG; + +typedef struct tagNET_DVR_LIST_INFO +{ + DWORD dwSize; + BYTE byIndex; //子系统号,0xff表示所有子系统 + BYTE byRes[63]; //保留 +}NET_DVR_LIST_INFO, *LPNET_DVR_LIST_INFO; + +#define CID_CODE_LEN 4 +#define DEV_SERIAL_LEN 9 +typedef enum tagNET_DVR_ALARMHOST_REPORT_TYPE +{ + NET_DVR_DEFENCE_ALARM = 1, //防区报警 + NET_DVR_VIDEO_ALARM, //视频报警 + NET_DVR_VIRTUAL_DEFENCE_ALARM, //软防区报警 + NET_DVR_HOSTAGE_ALARM, //挟持报警 + NET_DVR_KNOCK_DOWN_ALARM, //防拆报警 + NET_DVR_OPERATE_ALARM, //操作报告 + NET_DVR_OHTER_ABNORMAL_ALARM //异常报告 +}NET_DVR_ALARMHOST_REPORT_TYPE; + + +typedef enum tagNET_DVR_ALARMHOST_CID_MAIN_TYPE +{ + CID_ENTER = 1000, /*触发报告的基数*/ + CID_EXIT = 3000 /*恢复报告的基数*/ +}NET_DVR_ALARMHOST_CID_MAIN_TYPE; + + +typedef enum tagNET_DVR_ALARMHOST_CID_MINOR_TYPE +{ + CID_MEDICAL_ALARM = 100, /*救护报警*/ + CID_ALARM = 103, /*报警*/ + CID_FIRE_ALARM = 110, /*火警*/ + CID_ABDUCT_REPORT = 121, /*挟持报告*/ + CID_SILENT_24 = 122, /*24小时无声*/ + CID_AUDIO_24 = 123, /*24小时有声*/ + CID_AUXILIARY_24 = 124, /*24小时辅助*/ + CID_SHOCK_24 = 125, /*24小时震动*/ + CID_OVERTIME_ALARM = 126, /*超时报警*/ + CID_EMERGENCE_CALL_HELP = 129, /*紧急报警求助*/ + CID_BURGLARY_ALARM = 130, /*盗窃报警*/ + CID_PERIMETER_ALARM = 131, /*周界*/ + CID_INNET_ALARM = 132, /*内部防区*/ + CID_ENTER_EXIT = 134, /*出入*/ + CID_DEVICE_OPEN = 137, /*设备防拆*/ + CID_ZONE_BUS_BREAK = 141, /*总线开路*/ + CID_ZONE_BUS_SHORT = 142, /*总线短路*/ + CID_MOTION_ALARM = 148, /*移动报警*/ + CID_GAS_LEAKAGE = 151, /*燃气泄漏*/ + CID_ZONE_EARLY_WARNING = 207, /*防区预警*/ + CID_AC_LOSS = 301, /*交流掉电*/ + CID_LOW_BATT_VOL = 302, /*蓄电池电压低*/ + CID_DEV_RESET = 305, /*主机复位*/ + CID_MBUS_MODEL_FAULT = 333, /*扩展模块故障*/ + CID_PRINTER_FAIL = 336, /*打印机掉线*/ + CID_LOW_EXPANDER_VOL = 338, /*扩展模块电压低*/ + CID_EXPANDER_OPEN = 341, /*扩展模块被拆*/ + CID_EXPANDER_AC_POWER_DOWN = 342, /*扩展模块交流电掉电*/ + CID_WIRELESS_REPEATER_TAMPERED = 343, /*无线中继器防拆触发*/ + CID_WIRELESS_SIREN_TAMPERED = 344, /*无线警号防拆触发*/ + CID_WIRELESS_SIREN_DISCONNECTED = 345, /*无线警号掉线*/ + CID_LINE_LOSS = 354, /*电话线通讯失败*/ + CID_BUS_LOSS = 382, /*扩展总线模块掉线*/ + CID_DETECTOR_OPEN = 383, /*防区感应器被拆*/ + CID_ZONE_OPEN_CIRCUIT = 386, /*防区开路提醒*/ + CID_ZONE_SHORT_CIRCUIT = 387, /*防区短路提醒*/ + CID_GUARD = 401, /*布防撤防*/ + CID_GUARD_AUTO = 403, /*自动布撤防*/ + CID_CANCEL_ARM = 406, /*消警*/ + CID_GUARD_IMME = 408, /*即时布撤防*/ + CID_KEY_ZONE_GUARD = 409, /*钥匙防区布撤防*/ + CID_GUARD_STAY = 441, /*留守布撤防*/ + CID_FORCED_ARM = 442, /*强制布防*/ + CID_AUTOCTRL_TRIG = 443, /*定时开/关触发器*/ + CID_ONETOUCH_AWAY_ARMING = 444, /*一键外出布防*/ + CID_ONETOUCH_STAY_ARMING = 445, /*一键留守布防*/ + CID_CARD_ARMING_OR_DISARMING = 446, /*刷卡布撤防*/ + CID_LATE_TO_DISARM = 452, /*迟到撤防*/ + CID_AUTOGUARD_FAIL = 455, /*自动布防失败*/ + CID_AOPEN_TRIG_FAIL = 460, /*定时开启触发器失败*/ + CID_ACLOSE_TRIG_FAIL = 461, /*定时关闭触发器失败*/ + CID_AUTOUNGUARD_FAIL = 462, /*自动撤防失败*/ + CID_BYPASS = 570, /*旁路事件*/ + CID_GROUP_BYPASS = 574, /*组旁路*/ + CID_MANUAL_TEST_RPT = 601, /*手动测试报告*/ + CID_AUTO_TEST_RPT = 602, /*定时测试报告*/ + CID_PHONE_CONNET_TEST = 617, /*电话链路测试*/ + CID_ENTER_PROG = 627, /*进入编程*/ + CID_EXIT_PROG = 628, /*退出编程*/ + CID_FIELD_DETECTION = 759, /*区域入侵*/ + CID_LINE_DETECTION = 773, /*跨界报警*/ + CID_PIR_ALARM = 774, /*PIR报警*/ + CID_SOUND_INTENSITY_RISE = 775, /*声强陡升报警*/ + CID_SOUND_INTENSITY_DROP = 776, /*声强陡降报警*/ + CID_AUDIO_INPUT_EXCEPTION = 777, /*音频输入异常报警*/ + CID_SOFT_INSTAND = 810, /*软防区紧急报警*/ + CID_SOFT_FIRE = 811, /*软防区火警*/ + CID_SOFT_MOBS = 812, /*软防区匪警mobster*/ + CID_KEYPAD_LOCKED = 862, /*键盘锁定*/ + CID_ABSENCE_ALARM = 863, /*值守离岗*/ + CID_KEY_FAIL = 910, /*键盘掉线*/ + CID_TRIGGER_FAIL = 911, /*键盘总线上触发器掉线*/ + CID_GPK_FAIL = 912, /*键盘总线上GP/K掉线*/ + CID_MODULE_FAIL = 913, /*键盘总线上MN/K掉线*/ + CID_WIRELESS_DETECTOR_FAIL = 914, /*无线探测器掉线*/ + CID_WIRELESS_DETECTOR_BATTERY_LOW = 915,/*无线探测器欠压/电量恢复正常*/ + CID_EXPANDER_DISCONNECT = 916, /*扩展模块掉线*/ + CID_WIRELESS_REPEATER_DISCONNECT = 917, /*无线中继器掉线*/ + CID_RADAR_TRANS_FAULT = 918, /*雷达信号异常*/ + CID_WIRELESS_SIREN_LOW_BATTERY = 919, /*无线警号电量低*/ + CID_WRIE_LESS_NET = 920, /*无线网络故障*/ + CID_SIM_FAULT = 921, /*SIM卡故障*/ + CID_WIFI_ABNORMAL = 922, /*WIFI通信异常/恢复正常*/ + CID_RF_ABNORMAL = 923, /*RF信号异常/恢复正常*/ + CID_DATE_TRAFFIC_OVERFLOW = 924, /*流量超额*/ + CID_IPADDR_CONFLICT = 930, /*IP冲突*/ + CID_ETHERNET_BROKEN = 931, /*网线断*/ + CID_GROUP_OUT_RP = 932, /*组间通讯失败*/ + CID_GROUP_IN_RP = 933, /*通道通讯失败*/ + CID_MOTION_DECTECT = 940, /*移动侦测报警开始/结束*/ + CID_MASK_ALARM = 941, /*遮挡报警开始/结束*/ + CID_VI_LOST = 942, /*视频丢失开始/结束*/ + CID_VS_MISMATCH = 943, /*输入/输出视频制式不匹配*/ + CID_VI_EXCEPTION = 944, /*视频输入异常/恢复正常*/ + CID_HD_FULL = 945, /*硬盘满/恢复正常*/ + CID_HD_ERROR = 946, /*硬盘错/恢复正常*/ + CID_PIC_SEND_FAILED = 947, /*图片上传失败*/ + CID_KEY_LOCKED = 948, /*键盘锁定*/ + CID_NETWORK_CAMERA_DISCONNECT = 949, /*IPC断开连接*/ + CID_DUTY_CHECKING = 960, /*值守查岗*/ + CID_POST_RESPONSE = 961, /*值守应答*/ + CID_ZONE_BUS_SEARCH = 970, /*总线搜索*/ + CID_ZONE_BUS_REGIST = 971, /*总线注册*/ + CID_GUARD_DELAY_OP = 972, /*自动布撤防延时操作*/ + CID_GUARD_SINGLE = 973, /*单防区布撤防*/ + CID_SINGLE_ZONE_CLEARED = 974, /*单防区消警*/ + CID_ZONE_ASSOCIATED_DETECTOR = 975, /*防区添加/删除探测器*/ + CID_ZONE_CONSULTING = 976, /*业务咨询*/ + CID_EXPANDER_DELETED = 977, /*删除扩展模块*/ + CID_WIRELESS_REPEATER_DELETED = 978, /*删除无线中继器*/ + CID_WIRELESS_SIREN_DELETED = 979, /*删除无线警号*/ +}NET_DVR_ALARMHOST_CID_MINOR_TYPE; + +typedef enum tagNET_DVR_ALARMHOST_CID_ALL_MINOR_TYPE +{ + CID_TYPE_MEDICAL_ALARM = 1100, /*个人救护报警*/ + CID_TYPE_MEDICAL_ALARM_RESET = 3100, /*个人救护报警恢复*/ + CID_TYPE_ALARM = 1103, /*即时报警*/ + CID_TYPE_ALARM_RESET = 3103, /*即时报警恢复*/ + CID_TYPE_FIRE_ALARM = 1110, /*火警报警*/ + CID_TYPE_FIRE_ALARM_RESET = 3110, /*火警报警恢复*/ + CID_TYPE_ABDUCT_REPORT = 1121, /*挟持报告*/ + CID_TYPE_SILENT_24 = 1122, /*24小时无声报警*/ + CID_TYPE_SILENT_24_RESET = 3122, /*24小时无声报警恢复*/ + CID_TYPE_AUDIO_24 = 1123, /*24小时有声报警*/ + CID_TYPE_AUDIO_24_RESET = 3123, /*24小时有声报警恢复*/ + CID_TYPE_AUXILIARY_24 = 1124, /*24小时辅助报警*/ + CID_TYPE_AUXILIARY_24_RESET = 3124, /*24小时辅助报警恢复*/ + CID_TYPE_SHOCK_24 = 1125, /*24小时震动报警*/ + CID_TYPE_SHOCK_24_RESET = 3125, /*24小时震动报警恢复*/ + CID_TYPE_TIMEOUT = 1126, /*超时报警*/ + CID_TYPE_TIMEOUT_RESET = 3126, /*超时报警恢复*/ + CID_TYPE_EMERGENCE_CALL_HELP = 1129, /*紧急求助报警*/ + CID_TYPE_EMERGENCE_CALL_HELP_RESET = 3129, /*紧急求助报警恢复*/ + CID_TYPE_BURGLARY_ALARM = 1130, /*盗窃报警*/ + CID_TYPE_BURGLARY_ALARM_RESET = 3130, /*盗窃报警恢复*/ + CID_TYPE_PERIMETER_ALARM = 1131, /*周界报警*/ + CID_TYPE_PERIMETER_ALARM_RESET = 3131, /*周界报警恢复*/ + CID_TYPE_INNET_ALARM = 1132, /*内部延时报警*/ + CID_TYPE_INNET_ALARM_RESET = 3132, /*内部延时报警恢复*/ + CID_TYPE_ENTER_EXIT = 1134, /*延时报警*/ + CID_TYPE_ENTER_EXIT_RESET = 3134, /*延时报警恢复*/ + CID_TYPE_DEVICE_OPEN = 1137, /*设备防拆报警*/ + CID_TYPE_DEVICE_OPEN_RESET = 3137, /*设备防拆报警恢复*/ + CID_TYPE_ZONE_BUS_BREAK = 1141, /*总线开路报警*/ + CID_TYPE_ZONE_BUS_BREAK_RESET = 3141, /*总线开路报警恢复*/ + CID_TYPE_ZONE_BUS_SHORT = 1142, /*总线短路报警*/ + CID_TYPE_ZONE_BUS_SHORT_RESET = 3142, /*总线短路报警恢复*/ + CID_TYPE_MOTION_ALARM = 1148, /*设备移动报警*/ + CID_TYPE_MOTION_ALARM_RESET = 3148, /*设备移动报警恢复*/ + CID_TYPE_GAS_LEAKAGE_ALARM = 1151, /*燃气泄漏报警*/ + CID_TYPE_GAS_LEAKAGE_ALARM_RESET = 3151, /*燃气泄漏报警恢复*/ + CID_TYPE_ZONE_EARLY_WARNING = 1207, /*防区预警*/ + CID_TYPE_ZONE_EARLY_WARNING_RESET = 3207, /*防区预警恢复*/ + CID_TYPE_AC_LOSS = 1301, /*交流电掉电*/ + CID_TYPE_AC_LOSS_RESET = 3301, /*交流电恢复*/ + CID_TYPE_LOW_BATT_VOL = 1302, /*蓄电池电压低*/ + CID_TYPE_LOW_BATT_VOL_NORMAL = 3302, /*蓄电池电压正常*/ + CID_TYPE_DEV_RESET = 1305, /*主机复位*/ + CID_TYPE_MBUS_MODEL_FAULT = 1333, /*扩展模块故障*/ + CID_TYPE_MBUS_MODEL_RESET = 3333, /*扩展模块恢复*/ + CID_TYPE_PRINTER_OFF = 1336, /*打印机掉线*/ + CID_TYPE_PRINTER_ON = 3336, /*打印机恢复*/ + CID_TYPE_EXTEND_MODULE_VOL_LOW = 1338, /*扩展模块电压低*/ + CID_TYPE_EXTEND_MODULE_VOL_NORMAL = 3338, /*扩展模块电压正常*/ + CID_TYPE_EXTEND_MODULE_REMOVE = 1341, /*扩展模块防拆触发*/ + CID_TYPE_EXTEND_MODULE_RECOVER = 3341, /*扩展模块防拆恢复*/ + CID_TYPE_EXTEND_MODULE_AC_LOSS = 1342, /*扩展模块交流电掉电*/ + CID_TYPE_EXTEND_MODULE_AC_LOSS_RESET = 3342, /*扩展模块交流电恢复*/ + CID_TYPE_WIRELESS_REPEATER_TAMPER = 1343, /*无线中继器防拆触发*/ + CID_TYPE_WIRELESS_REPEATER_RESTORE = 3343, /*无线中继器防拆恢复*/ + CID_TYPE_WIRELESS_SIREN_TAMPER = 1344, /*无线警号防拆触发*/ + CID_TYPE_WIRELESS_SIREN_RESTORE = 3344, /*无线警号防拆恢复*/ + CID_TYPE_WIRELESS_SIREN_DISCONNECT = 1345, /*无线警号掉线*/ + CID_TYPE_WIRELESS_SIREN_CONNECT = 3345, /*无线警号掉线恢复*/ + CID_TYPE_LINE_LOSS = 1354, /*电话线断开*/ + CID_TYPE_LINE_LOSS_RESET = 3354, /*电话线连接*/ + CID_TYPE_BUS_LOSS = 1382, /*扩展总线模块掉线*/ + CID_TYPE_BUS_LOSS_RESET = 3382, /*扩展总线模块掉线恢复*/ + CID_TYPE_SENSOR_TAMPER = 1383, /*防区感应器防拆*/ + CID_TYPE_SENSOR_TAMPER_RESET = 3383, /*防区感应器防拆恢复*/ + CID_TYPE_ZONE_OPEN_CIRCUIT_ALARM = 1386, /*防区开路提醒*/ + CID_TYPE_ZONE_SHORT_CIRCUIT_ALARM = 1387, /*防区短路提醒*/ + CID_TYPE_DISARM = 1401, /*撤防*/ + CID_TYPE_ARM = 3401, /*外出布防*/ + CID_TYPE_DISARM_AUTO = 1403, /*自动撤防*/ + CID_TYPE_ARM_AUTO = 3403, /*自动布防*/ + CID_TYPE_CANCEL_ARM = 1406, /*消警*/ + CID_TYPE_ARM_IMME = 3408, /*即时布防*/ + CID_TYPE_KEY_ZONE_ARM = 1409, /*钥匙防区撤防*/ + CID_TYPE_KEY_ZONE_DISARM = 3409, /*钥匙防区布防*/ + CID_TYPE_GUARD_STAY = 3441, /*留守布防*/ + CID_TYPE_FORCED_ARM = 3442, /*强制布防*/ + CID_TYPE_AUTOCTRL_TRIG_ON = 1443, /*定时开触发器*/ + CID_TYPE_AUTOCTRL_TRIG_OFF = 3443, /*定时关触发器*/ + CID_TYPE_LATE_TO_DISARM = 1452, /*迟到撤防*/ + CID_TYPE_AUTOGUARD_FAIL = 1455, /*自动布撤防失败*/ + CID_TYPE_AOPEN_TRIG_FAIL = 1460, /*定时开启触发器失败*/ + CID_TYPE_ACLOSE_TRIG_FAIL = 1461, /*定时关闭触发器失败*/ + CID_TYPE_AUTOUNGUARD_FAIL = 1462, /*自动撤防失败*/ + CID_TYPE_BYPASS = 1570, /*旁路*/ + CID_TYPE_BYPASS_RESET = 3570, /*旁路恢复*/ + CID_TYPE_GROUP_BYPASS = 1574, /*子系统组旁路*/ + CID_TYPE_GROUP_BYPASS_RESET = 3574, /*子系统组旁路恢复*/ + CID_TYPE_MANUAL_TEST_RPT = 1601, /*手动测试报告*/ + CID_TYPE_AUTO_TEST_RPT = 1602, /*定时测试报告*/ + CID_TYPE_LINE_TEST = 1617, /*电话链路测试*/ + CID_TYPE_ENTER_PROG = 1627, /*进入编程*/ + CID_TYPE_EXIT_PROG = 1628, /*退出编程*/ + CID_TYPE_FIELD_DETECTION = 1759, /*区域入侵*/ + CID_TYPE_FIELD_DETECTION_RESET = 3759, /*区域入侵恢复*/ + CID_TYPE_LINE_DETECTION = 1773, /*跨界报警*/ + CID_TYPE_LINE_DETECTION_RESET = 3773, /*跨界报警恢复*/ + CID_TYPE_PIR_ALARM = 1774, /*PIR报警*/ + CID_TYPE_PIR_ALARM_RESET = 3774, /*PIR报警恢复*/ + CID_TYPE_SOUND_INTENSITY_RISE = 1775, /*声强陡升报警*/ + CID_TYPE_SOUND_INTENSITY_RISE_RESET = 3775, /*声强陡升报警恢复*/ + CID_TYPE_SOUND_INTENSITY_DROP = 1776, /*声强陡降报警*/ + CID_TYPE_SOUND_INTENSITY_DROP_RESET = 3776, /*声强陡降报警恢复*/ + CID_TYPE_AUDIO_INPUT_EXCEPTION = 1777, /*音频输入异常报警*/ + CID_TYPE_AUDIO_INPUT_EXCEPTION_RESET = 3777, /*音频输入异常报警恢复*/ + CID_TYPE_SOFT_INSTAND = 1810, /*软防区紧急报警*/ + CID_TYPE_SOFT_FIRE = 1811, /*软防区火警*/ + CID_TYPE_SOFT_MOBS = 1812, /*软防区匪警*/ + CID_TYPE_KEYPAD_LOCK = 1862, /*键盘锁定*/ + CID_TYPE_KEYPAD_UNLOCK = 3862, /*键盘解锁*/ + CID_TYPE_ABSENCE_ALARM = 1863, /*值守离岗*/ + CID_TYPE_KEY_FAIL = 1910, /*键盘掉线*/ + CID_TYPE_KEY_RESET = 3910, /*键盘恢复*/ + CID_TYPE_TRIGGER_FAIL = 1911, /*键盘总线上触发器掉线*/ + CID_TYPE_TRIGGER_RESET = 3911, /*键盘总线上触发器恢复*/ + CID_TYPE_GPK_FAIL = 1912, /*键盘总线上GP/K掉线*/ + CID_TYPE_GPK_RESET = 3912, /*键盘总线上GP/K恢复*/ + CID_TYPE_MODULE_FAIL = 1913, /*键盘总线上MN/K掉线*/ + CID_TYPE_MODULE_RESET = 3913, /*键盘总线上MN/K恢复*/ + CID_TYPE_WIRELESS_DETECTOR_FAIL = 1914, /*无线探测器掉线*/ + CID_TYPE_WIRELESS_DETECTOR_RESET = 3914, /*无线探测器掉线恢复*/ + CID_TYPE_WIRELESS_DETECTOR_BATTERY_LOW = 1915, /*无线探测器电压低*/ + CID_TYPE_WIRELESS_DETECTOR_BATTERY_NORMAL = 3915, /*无线探测器电压正常*/ + CID_TYPE_EXTEND_MODULE_LOSS = 1916, /*扩展模块掉线*/ + CID_TYPE_EXTEND_MODULE_LOSS_RESET = 3916, /*扩展模块掉线恢复*/ + CID_TYPE_WIRELESS_REPEATER_DISCONNECT = 1917, /*无线中继器掉线*/ + CID_TYPE_WIRELESS_REPEATER_CONNECT = 3917, /*无线中继器掉线恢复*/ + CID_TYPE_RADAR_TRANS_FAULT = 1918, /*雷达信号异常*/ + CID_TYPE_RADAR_TRANS_RESET = 3918, /*雷达信号异常恢复*/ + CID_TYPE_WRIELESS_SIREN_LOW_BATTERY = 1919, /*无线警号电量低*/ + CID_TYPE_NORMAL_WRIELESS_SIREN_BATTERY = 3919, /*无线警号电量正常*/ + CID_TYPE_WRIELESS_NET_FAULT = 1920, /*无线网络故障*/ + CID_TYPE_WRIELESS_NET_RESET = 3920, /*无线网络故障恢复*/ + CID_TYPE_SIM_FAULT = 1921, /*SIM卡异常*/ + CID_TYPE_SIM_RESET = 3921, /*SIM卡异常恢复*/ + CID_TYPE_WIFI_ABNORMAL = 1922, /*WIFI通信异常*/ + CID_TYPE_WIFI_NORMAL = 3922, /*WIFI通信恢复正常*/ + CID_TYPE_RF_ABNORMAL = 1923, /*RF信号异常*/ + CID_TYPE_RF_NORMAL = 3923, /*RF信号正常*/ + CID_TYPE_DATE_TRAFFIC_OVERFLOW = 1924, /*流量超额*/ + CID_TYPE_IPADDR_CONFLICT = 1930, /*IP冲突*/ + CID_TYPE_IPADDR_NORMAL = 3930, /*IP正常*/ + CID_TYPE_ETHERNET_BROKEN = 1931, /*有线网络故障*/ + CID_TYPE_ETHERNET_NORMAL = 3931, /*有线网络故障恢复*/ + CID_TYPE_MOTION_DECTECT_START = 1940, /*移动侦测报警开始*/ + CID_TYPE_MOTION_DECTECT_STOP = 3940, /*移动侦测报警结束*/ + CID_TYPE_MASK_ALARM_START = 1941, /*遮挡报警开始*/ + CID_TYPE_MASK_ALARM_STOP = 3941, /*遮挡报警结束*/ + CID_TYPE_VI_LOST_START = 1942, /*视频信号丢失*/ + CID_TYPE_VI_LOST_STOP = 3942, /*视频信号恢复*/ + CID_TYPE_VS_MISMATCH = 1943, /*输入/输出视频制式不匹配*/ + CID_TYPE_VS_MATCH = 3943, /*输入/输出视频制式恢复正常*/ + CID_TYPE_VI_EXCEPTION = 1944, /*视频输入异常*/ + CID_TYPE_VI_NORMAL = 3944, /*视频输入恢复正常*/ + CID_TYPE_HD_FULL = 1945, /*硬盘满*/ + CID_TYPE_HD_FREE = 3945, /*硬盘空闲*/ + CID_TYPE_HD_ERROR = 1946, /*硬盘异常*/ + CID_TYPE_HD_RESET = 3946, /*硬盘恢复正常*/ + CID_TYPE_PIC_SEND_FAILED = 1947, /*图片上传失败*/ + CID_TYPE_SENDING_EMAIL_FAILED = 1948, /*邮件发送失败*/ + CID_TYPE_NETWORK_CAMERA_DISCONNECT = 1949, /*IPC断开连接*/ + CID_TYPE_NETWORK_CAMERA_CONNECT = 3949, /*IPC恢复连接*/ + CID_TYPE_DUTY_CHECKING = 1960, /*值守查岗*/ + CID_TYPE_POST_RESPONSE = 1961, /*值守应答*/ + CID_TYPE_ZONE_BUS_SEARCH = 1970, /*总线搜索*/ + CID_TYPE_ZONE_BUS_REGIST = 1971, /*总线注册*/ + CID_TYPE_GUARD_SINGLE_ARM = 1973, /*单防区撤防*/ + CID_TYPE_GUARD_SINGLE_DISARM = 3973, /*单防区布防*/ + CID_TYPE_SINGLE_ZONE_ALARM_CLEARED = 1974, /*单防区消警*/ + CID_TYPE_ZONE_ASSOCIATED_DETECTOR_DEL = 1975, /*删除探测器*/ + CID_TYPE_ZONE_ASSOCIATED_DETECTOR_ADD = 3975, /*添加探测器*/ + CID_TYPE_ZONE_CONSULT = 1976, /*业务咨询*/ + CID_TYPE_ZONE_CONSULT_STOP = 3976, /*业务咨询结束*/ + CID_TYPE_EXTEND_MODULE_DEL = 1977, /*删除扩展模块*/ + CID_TYPE_EXTEND_MODULE_ADD = 3977, /*添加扩展模块*/ + CID_TYPE_WIRELESS_REPEATER_DEL = 1978, /*删除无线中继器*/ + CID_TYPE_WIRELESS_REPEATER_ADD = 3978, /*添加无线中继器*/ + CID_TYPE_WIRELESS_SIREN_DEL = 1979, /*删除无线警号*/ + CID_TYPE_WIRELESS_SIREN_ADD = 3979 /*添加无线警号*/ +}NET_DVR_ALARMHOST_CID_ALL_MINOR_TYPE; + + +typedef struct tagNET_DVR_CID_ALARM +{ + DWORD dwSize; + BYTE sCIDCode[CID_CODE_LEN/*4*/]; //CID事件号 + BYTE sCIDDescribe[NAME_LEN/*32*/]; //CID事件名 + NET_DVR_TIME_EX struTriggerTime; //触发报警的时间点 + NET_DVR_TIME_EX struUploadTime; //上传报警的时间点 + BYTE sCenterAccount[ACCOUNTNUM_LEN/*6*/]; //中心帐号 + BYTE byReportType; //见定义NET_DVR_ALARMHOST_REPORT_TYPE + BYTE byUserType; //用户类型,0-网络用户 1-键盘用户,2-手机用户,3-系统用户 + BYTE sUserName[NAME_LEN/*32*/]; //网络用户用户名 + WORD wKeyUserNo; //键盘用户号 0xFFFF表示无效 + BYTE byKeypadNo; //键盘号 0xFF表示无效 + BYTE bySubSysNo; //子系统号 0xFF表示无效 + WORD wDefenceNo; //防区号 0xFFFF表示无效 + BYTE byVideoChanNo; //视频通道号 0表示无效,表示设备自带的默认视频通道号 + BYTE byDiskNo; //硬盘号 0xFF表示无效 + WORD wModuleAddr; //模块地址 0xFFFF表示无效 + BYTE byCenterType; //0-无效, 1-中心账号(长度6),2-扩展的中心账号(长度9) + BYTE byRelativeChannel; //外接的视频通道号,0表示无效,字节表示通道号 + BYTE sCenterAccountV40[ACCOUNTNUM_LEN_32/*32*/]; //中心账号V40,使用此字段时sCenterAccount无效 + BYTE byDevSerialNo[DEV_SERIAL_LEN]; /*产品序列号*/ + BYTE byRepeaterNo; //中继器号,为0无效 + WORD wRemoteCtrllerUserNo; //遥控器用户号,为0无效 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE standardCIDcode; //标准CID码 + BYTE byRes2[11]; +}NET_DVR_CID_ALARM, *LPNET_DVR_CID_ALARM; + +typedef struct tagNET_DVR_ALARMHOST_MODULE_CFG +{ + DWORD dwSize; + BYTE byModuleType; //1-防区,2-触发器 3-防区触发器 + BYTE byZoneType; //防区类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区,6-单防区触发器,0xff表示该参数无效 + BYTE byTriggerType; //触发器类型,1-本地触发器, 2-4路触发器,3-8路触发器,4-单防区触发器,0xff表示该参数无效 + BYTE byRes1[1]; + char sModelInfo[MODULE_INFO_LEN]; //模块信息 + char sDeviceVersionInfo[VERSION_INFO_LEN]; /* 版本信息*/ + BYTE byRes[188]; +} NET_DVR_ALARMHOST_MODULE_CFG, *LPNET_DVR_ALARMHOST_MODULE_CFG; + + +#define MAX_DECODE_CARD_SUPPORTDISPNUMS 8//每个解码卡最多支持的显示通道数 +#define MAX_SUPPORT_RES 32 +typedef struct tagNET_DVR_DECCARD_ABILITY_V41 /*高清解码卡能力集*/ +{ + BYTE byCardType; //解码卡类型(0:MD,1:MD+,2:HD) + BYTE byDecNums; //解码通道数 + BYTE byDispNums; //显示通道数 + BYTE byDecStartIdx; //首个解码通道在所有解码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 + BYTE byRes1[3]; + DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + BYTE byDispFormat[MAX_DECODE_CARD_SUPPORTDISPNUMS]; //支持的输出模式(按HD_DISPLAY_FORMAT中的枚举) + BYTE byWindowMode[MAX_DECODE_CARD_SUPPORTDISPNUMS][12]; //支持的窗口模式(比如1,2,4,9,16)) + BYTE byRes2[36]; +} NET_DVR_DECCARD_ABILITY_V41,*LPNET_DVR_DECCARD_ABILITY_V41; + +#define MAX_DECODE_CARD_NUM 6 //最多高清解码卡数 +typedef struct tagNET_DVR_DECODESVR_ABILITY_V41 +{ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 解码卡数 */ + BYTE byStartChan; /* 起始通道号 */ + BYTE byRes1[2]; + NET_DVR_DECCARD_ABILITY_V41 struDecCardAbility[MAX_DECODE_CARD_NUM]; + BYTE byRes2[64]; +}NET_DVR_DECODESVR_ABILITY_V41, *LPNET_DVR_DECODESVR_ABILITY_V41; + +// 流录像状态 +typedef struct tagNET_DVR_STREAM_RECORD_STATUS +{ + DWORD dwSize; + BYTE byRecord; //(只读)录像类型, 0:不在录像,1:在录像 2-空闲 + //3-无连接 4-无输入视频 5-未加载 6-存档中 + //7-回传中 8-用户名或密码错 9-未验证 + //10-存档中和录像中 11-录像回传中和录像中12-token认证失败 + //13-当前条件不满足录像计划条件 14-通道接入异常(见通道状态) 15-硬盘满 + //16-硬盘错 17-无硬盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes1[2]; //保留字节 + DWORD dwRelatedHD; //关联磁盘 + BYTE byRes2[8]; //保留字节 +}NET_DVR_STREAM_RECORD_STATUS, *LPNET_DVR_STREAM_RECORD_STATUS; + +#define CHAN_NO_LEN 24 + +typedef struct tagNET_DVR_DIRECT_CONNECT_CHAN_INFO +{ + BYTE byEnable; //是否启用 + BYTE byProType; //协议类型,0-私有协议(default), (需要从设备获取能力) + BYTE byZeroChan; //是否是零通道,0-不是,1-是 + BYTE byPriority; //优先级 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byDomain[MAX_DOMAIN_NAME]; //设备域名 + NET_DVR_IPADDR struIP; //IP地址 + WORD wDVRPort; //端口号 + BYTE byStreamType; //主码流:0; 子码流:1 + BYTE byOnline; //只读,0-不在线 1-在线 + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //协议类型,0-TCP,1-UDP,2-多播 + BYTE byLocalBackUp; //本地备份: 0-不启用CVR本地备份,1-启用CVR本地备份--即回放时的流一份在录像卷,一份在存档卷(本地备份) + WORD wDirectLastTime; //导播持续时间 + BYTE byChanNo[CHAN_NO_LEN]; //通道编号--用于VAG取流 +}NET_DVR_DIRECT_CONNECT_CHAN_INFO, *LPNET_DVR_DIRECT_CONNECT_CHAN_INFO; + +typedef struct tagNET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 +{ + BYTE byEnable; //是否启用 + BYTE byProType; //协议类型,0-私有协议(default), 1-松下协议,2-索尼, 3-大华 (需要从设备获取能力) + BYTE byZeroChan; //是否是零通道,0-不是,1-是 + BYTE byRes1; //保留字段,置0 + BYTE sUserName[NAME_LEN]; //用户名 + BYTE sPassword[PASSWD_LEN]; //密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //前端IP或者域名,需要设备 解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + WORD wDVRPort; //端口号 + BYTE byStreamType; //主码流:0; 子码流:1 + BYTE byOnline; //只读,0-不在线 1-在线 + DWORD dwChannel; //通道号 + BYTE byTransProtocol; //传输协议类型,0-TCP,1-UDP 2-多播 + BYTE byLocalBackUp; //本地备份,0-不启用CVR本地备份,1-启用CVR本地备份--即录像时的流一份在录像卷,一份在存档卷(本地备份) + BYTE byRes2[2]; //保留字段,置0 + BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //协议类型为VAG时,对应的VAG通道编号 + BYTE byRes[340]; +}NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40, *LPNET_DVR_DIRECT_CONNECT_CHAN_INFO_V40; + + +typedef struct tagNET_DVR_PU_STREAM_URL_CFG +{ + BYTE byEnable; + BYTE byRes[3]; + BYTE byStreamMediaIP[64];//流媒体IP + WORD wStreamMediaPort; //流媒体端口 + BYTE byTransmitType; //流媒体传输协议 0- TCP 1- UDP + BYTE byRes1[33]; + BYTE byDevIP[64]; //设备IP + WORD wDevPort; //设备端口 + BYTE byChannel; //通道号 + BYTE byTransMode; //传输模式 0-主码流 1- 子码流 + BYTE byProType; + //厂家类型 0-私有 1-大华 2-汉邦 3-郎驰 4-蓝色星际 NET_DVR_GetIPCProtoList接口获取 + //VQD流媒体下只支持 0,1方式;直连支持 0,1,2,3,4 + BYTE byTransProtocol; //传输协议类型0-TCP, 1-UDP, 2-多播方式, 3-RTP + BYTE byRes3[2]; + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byRes2[28]; //预留 +}NET_DVR_PU_STREAM_URL_CFG, *LPNET_DVR_PU_STREAM_URL_CFG; + +typedef struct tagNET_DVR_PU_STREAM_URL_CFG_V40 +{ + BYTE byEnable; + BYTE byRes[3]; + BYTE byStreamMediaIP[64];//流媒体IP + WORD wStreamMediaPort; //流媒体端口 + BYTE byTransmitType; //流媒体传输协议 0- TCP 1- UDP + BYTE byRes1; + BYTE byDevIP[64]; //设备IP + WORD wDevPort; //设备端口 + BYTE byChannel; //通道号 + BYTE byTransMode; //传输模式 0-主码流 1- 子码流 + BYTE byProType; + //厂家类型 0-海康 1-大华 2-汉邦 3-郎驰 4-蓝色星际 NET_DVR_GetIPCProtoList接口获取 + //VQD流媒体下只支持 0,1方式;直连支持 0,1,2,3,4 + BYTE byTransProtocol; //传输协议类型0-TCP, 1-UDP 2-多播方式 + BYTE byRes3[2]; + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byRes2[308]; //预留 +}NET_DVR_PU_STREAM_URL_CFG_V40, *LPNET_DVR_PU_STREAM_URL_CFG_V40; + +typedef struct tagNET_DVR_STREAM_URL_V40 +{ + BYTE byEnable; + BYTE byStreamType; //主子码流 + BYTE byLocalBackUp; //是否本地备份 + BYTE byRes; + BYTE strURL[URL_LEN_V40]; //流媒体URL,可以级联 + DWORD dwProtocalType; //IPC协议类型值,可以通过获取IPC协议列表得到 + BYTE sUserName[NAME_LEN]; //设备登陆用户名 + BYTE sPassWord[PASSWD_LEN]; // 设备登陆密码 + BYTE byAddress[MAX_DOMAIN_NAME]; //流来源IP或者域名,需要解析 解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + WORD wIPPort; //流来源对应的端口号 + WORD wChanNo; //流来源设备IP通道号 + BYTE byVAGChanNo[MAX_VAG_CHANNO_LEN]; //流来源通道编号,用于VAG功能 + BYTE byRes1[88]; +}NET_DVR_STREAM_URL_V40, *LPNET_DVR_STREAM_URL_V40; + +typedef union tagNET_DVR_STREAM_TYPE_UNION +{ + NET_DVR_DIRECT_CONNECT_CHAN_INFO struChanInfo; //IP通道信息 类型值为0 + NET_DVR_PU_STREAM_URL struStreamUrl; //通过流媒体到url取流,类型值为4 + NET_DVR_PU_STREAM_URL_CFG struStreamUrlCfg; //通过流媒体到指定布防设备上取流,类型值为6 +}NET_DVR_STREAM_TYPE_UNION, *LPNET_DVR_STREAM_TYPE_UNION; + +typedef union tagNET_DVR_STREAM_TYPE_V40_UNION +{ + NET_DVR_DIRECT_CONNECT_CHAN_INFO_V40 struChanInfo; //IP通道信息,类型值为0 + NET_DVR_PU_STREAM_URL struPuStreamUrl; //通过流媒体到url取流,类型值为4 + NET_DVR_PU_STREAM_URL_CFG_V40 struStreamUrlCfg; //通过流媒体到组合url取流,类型值为6 + NET_DVR_RTSP_PROTOCAL_CFG struRtspCfg; //由标准RTSP接入取流 类型值7 + NET_DVR_STREAM_URL_V40 struStreamUrlV40; //通过流媒体(支持级联方式)向流来源取流,类型值为8 +}NET_DVR_STREAM_TYPE_V40_UNION, *LPNET_DVR_STREAM_TYPE_V40_UNION; + + +typedef struct tagNET_DVR_STREAM_MODE_TYPE +{ + BYTE byGetStreamType; //取流方式,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流, 3.通过IPServer找到设备,再通过流媒体去设备的流 4-通过流媒体由URL去取流 + BYTE byRes[3]; // 保留字节 + NET_DVR_STREAM_TYPE_UNION uGetStream; // 不同取流方式结构体 +}NET_DVR_STREAM_MODE_TYPE, *LPNET_DVR_STREAM_MODE_TYPE; + +// 流来源信息 +typedef struct tagNET_DVR_STREAM_SRC_INFO +{ + DWORD dwSize; + NET_DVR_STREAM_MODE_TYPE struStreamSrcInfo; +}NET_DVR_STREAM_SRC_INFO,*LPNET_DVR_STREAM_SRC_INFO; + +typedef struct tagNET_DVR_STREAM_SRC_INFO_V40 +{ + DWORD dwSize; + BYTE byGetStreamType; //取流方式,0-直接从设备取流,1-从流媒体取流、2-通过IPServer获得ip地址后取流, 3.通过IPServer找到设备,再通过流媒体去设备的流 4-通过流媒体由URL去取流 6-通过流媒体到指定布防设备上取流 + BYTE byRes1[3]; // 保留字节 + NET_DVR_STREAM_TYPE_V40_UNION uGetStream; // 不同取流方式结构体 + BYTE byMonitorName[128];/*布防点名称(支持中文,大小写字母,数字,下划线等非特殊字符,编码格式根据登录返回的byCharEncodeType字段判断, + 目前CVR中英文版本不一样,有不同选择,中文CVR要求布防点名称为gbk,英文版本CVR要求布防点名称为iso8859-1,如“A号楼_布防点1”)*/ + BYTE byRes[384]; // 保留字节 +}NET_DVR_STREAM_SRC_INFO_V40,*LPNET_DVR_STREAM_SRC_INFO_V40; + + +// 流录像信息 +typedef struct +{ + DWORD dwSize; + NET_DVR_RECORD_V30 struRecordInfo; +}NET_DVR_STREAM_RECORD_INFO, *LPNET_DVR_STREAM_RECORD_INFO; + +// 按流ID对时间段加锁 +typedef struct tagNET_DVR_STREAM_TIME_LOCK +{ + DWORD dwSize; // 结构体大小 + NET_DVR_TIME strBeginTime; // 开始时间 + NET_DVR_TIME strEndTime; // 结束时间 + NET_DVR_STREAM_INFO struStreamInfo; // 流信息 + DWORD dwRecordType; // 录像类型: 0xffffffff-全部,-定时录像,-移动侦测,-报警触发,-报警触发或移动侦测,-报警触发和移动侦测,-命令触发,-手动录像,-智能录像(同文件查找) + DWORD dwLockDuration; // 锁定持续时间,单位秒,0xffffffff表示永久锁定 + NET_DVR_TIME_EX strUnlockTimePoint; // 加锁时有效,当dwLockDuration不为永久锁定时,锁定持续的时间到此时间点就自动解锁 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效,0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14,+表示东区, byISO8601为1时有效 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 30, 45,+表示东区, byISO8601为1时有效 + BYTE byRes[1]; +}NET_DVR_STREAM_TIME_LOCK, *LPNET_DVR_STREAM_TIME_LOCK; + +//回放抽帧接口 开始抽帧命令 NET_DVR_START_DRAWFRAME,对应的控制结构体 +typedef struct tagNET_DVR_VOD_DRAWFRAME_PARA +{ + NET_DVR_TIME_EX struTime; + /* + dwDrawType只有设备支持选择性抽帧时,参数才有效果,抽帧方式有: + 0:只传I帧 + 1:丢1/2 P帧(只有svc码流支持) + 2:丢3/4P帧 (只有svc码流支持) + 3:传1/2 I帧(只传I帧,且每2个I帧传一个。) + 4:传1/4 I振(只传I帧,且每4个I帧传一个。) + 5:传1/8 I帧(只传I帧,且每8个I帧传一个。) + */ + DWORD dwDrawType; + BYTE byRes[128]; +}NET_DVR_VOD_DRAWFRAME_PARA, *LPNET_DVR_VOD_DRAWFRAME_PARA; + +// 按ID+时间回放结构体 +typedef struct tagNET_DVR_VOD_PARA +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struIDInfo; + NET_DVR_TIME struBeginTime; + NET_DVR_TIME struEndTime; + HWND hWnd; + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byVolumeType; //0-普通录像卷 1-存档卷 + BYTE byVolumeNum; //卷号,目前指存档卷号 + BYTE byStreamType; //码流类型 0-主码流, 1-子码流,2-码流三,3-延时摄影码流 + DWORD dwFileIndex; //存档卷上的录像文件索引,搜索存档卷录像时返回的值 + BYTE byAudioFile; //音频文件0-否,1-是 + BYTE byCourseFile; //课程文件0-否,1-是 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byUseAsyn; //0-使用同步IO,1-使用异步IO + BYTE byRes2[19]; +}NET_DVR_VOD_PARA, *LPNET_DVR_VOD_PARA; + +typedef struct tagNET_DVR_VOD_PARA_V50 +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struIDInfo; + NET_DVR_TIME_V50 struBeginTime; + NET_DVR_TIME_V50 struEndTime; + HWND hWnd; + BYTE byDrawFrame; //0:不抽帧,1:抽帧 + BYTE byVolumeType; //0-普通录像卷 1-存档卷 + BYTE byVolumeNum; //卷号,目前指存档卷号 + BYTE byStreamType; //码流类型 0-主码流, 1-子码流,2-码流三,3-延时摄影码流 + DWORD dwFileIndex; //存档卷上的录像文件索引,搜索存档卷录像时返回的值 + BYTE byAudioFile; //回放音频文件,0-不回放音频文件,1-仅回放音频文件 + BYTE byCourseFile; //回放课程文件0-否,1-是 + BYTE byPlayMode; //播放方式0-正放,1-倒放 + BYTE byLinkMode; //连接方式0-TCP,1-AdaptiveUDP + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byOptimalStreamType; //是否按最优码流类型回放 0-否,1-是(对于双码流设备,某一段时间内的录像文件与指定码流类型不同,则返回实际码流类型的录像) + BYTE byDisplayBufNum; //设置播放缓冲帧数,当为0时,默认为3帧,hWnd不为空时有效 + BYTE byNPQMode; //NPQ是直连模式,还是过流媒体 0-直连 1-过流媒体 + BYTE sUserName[NAME_LEN/*32*/]; //二次认证用户名 + BYTE sPassword[PASSWD_LEN/*16*/]; //二次认证密码 + BYTE byRemoteFile; //回放远程文件0-否,1-是 + BYTE byUseAsyn; //0-使用同步IO,1-使用异步IO + BYTE byRes2[201]; + BYTE byHls; //HLS回放,0-否,1-是 + char* pSavedFileName; //下载时,保存的录像文件路径,byDownload为1时有效,长度超过256将会被截断 +}NET_DVR_VOD_PARA_V50, *LPNET_DVR_VOD_PARA_V50; + +// 手动录像 +typedef struct tagNET_DVR_MANUAL_RECORD_PARA +{ + NET_DVR_STREAM_INFO struStreamInfo; + DWORD lRecordType; + BYTE byRes[32]; +}NET_DVR_MANUAL_RECORD_PARA, *LPNET_DVR_MANUAL_RECORD_PARA; + + +// CABAC码流压缩性能选项,开启可提高20%,只有模拟通道可以用 +typedef struct tagNET_DVR_STREAM_CABAC +{ + DWORD dwSize; //结构体大小 + BYTE byCabacEnable; //码流压缩性能选项值0 不提升 1 提升 + BYTE byRes1[31]; //保留 +}NET_DVR_STREAM_CABAC, *LPNET_DVR_STREAM_CABAC; + +#define MAX_IOSPEED_GROUP_NUM 4 //IO测速组个数 +#define MAX_IOOUT_NUM 4 //最大IO输出口个数 +#define MAX_IOIN_NUM 8 //最大IO输入口个数 +#define MAX_RELAY_NUM 12 //继电器控制设备最大数 2013-11-04 +#define MAX_VEHICLE_TYPE_NUM 8 //车辆信息管控最大数2013-11-04 +#define MAX_IOIN_NUMEX 10 //最大IO输入口个数(扩展) +#define MAX_ITC_LANE_NUM 6 //最大车道个数 +#define MAX_LANEAREA_NUM 2 //单车道最大区域个数 +#define ITC_MAX_POLYGON_POINT_NUM 20 //检测区域最多支持20个点的多边形 +#define MAX_ITC_SERIALCHECK_NUM 8 //串口校验类型个数 +#define MAX_LIGHT_NUM 6 //最大交通灯数 +#define MAX_VIDEO_INTERVAL_NUM 2 //最大抓拍间隔数 +#define MAX_VIDEO_DETECT_LIGHT_NUM 12 //视频检测的最大检测区域 +#define MAX_CALIB_RECOG_NUM 2 //标定区域个数 +#define MAX_RS485_NUM 12 //485口最大支持数 +#define MAX_MOBILE_POLYGON_NUM 3 //移动布防支持最大牌识区域个数 +#define MAX_MOBILE_DETECTLINE_NUM 3 //移动布防支持最大违规检测线个数 +#define MAX_IOOUT_K_NUM 8 //K系列最大IO输出口个数 + +//IO输出口参数(3.1版本(含)之后) +typedef struct tagNET_ITC_IOOUT_PARAM +{ + DWORD dwSize; + BYTE byDefaultStatus;//IO默认状态:0-低电平,1-高电平 + BYTE byIOOutStatus;//IO起效时状态:0-低电平,1-高电平,2-脉冲 + BYTE byMode; //闪光灯工作方式,按位表示,0-表示工作,1-表示不工作,bit0-视频,bit1-卡口,bit2-违章 + BYTE byIOWorkMode;//IO输出口工作模式:0-闪光灯,1-偏振镜, 2-常亮灯 + DWORD dwTimeDelay;//IO有效持续时间,单位us + WORD wAheadTime;//输出IO提前时间,单位us + BYTE byFreqMulti; //倍频,数值范围[1,15] + BYTE byDutyRate; //占空比,[0,40%] + BYTE byDetectBrightness;/*自动检测亮度使能闪光灯0-不检测;1-检测*/ + BYTE byBrightnessThreld;/*使能闪光灯亮度阈值,范围[0,100],高于阈值闪*/ + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 + BYTE byStartHour; //开始时间-小时,取值范围0-23 + BYTE byStartMinute; //开始时间-分,取值范围0-59 + BYTE byEndHour; //结束时间-小时,取值范围0-23 + BYTE byEndMinute; //结束时间-分,取值范围0-59 + BYTE byAutoPlateBrightness;// 车牌亮度自动使能闪光灯 0-不启用 1-启用 + BYTE byIncrBrightEnable;//是否启用增亮模式(常亮灯模式下) + BYTE byIncrBrightPercent;//增量百分比,0~100%(启用增亮模式下生效) + WORD wIncrBrightTime;//增亮时间,单位为毫秒(启用增亮模式下生效) + BYTE byBrightness;//亮度值;0~100(常亮灯模式下) + BYTE byEnvironBright;//环境照度值;0~100(闪光灯模式下生效,该参数只读)环境照度值代表着闪光灯所处环境的亮度值,客户可以拿该值作为参考,去配置相应的亮度阈值。 + WORD wDelayCaptureTime;//延时抓拍时间1~1000ms(启用增亮模式下生效) +}NET_ITC_IOOUT_PARAM, *LPNET_ITC_IOOUT_PARAM; + +typedef enum _ITC_TRIGGERMODE_TYPE_ +{ + ITC_POST_IOSPEED_TYPE = 0x1, //IO测速(卡口) + ITC_POST_SINGLEIO_TYPE = 0x2, //单IO触发(卡口) + ITC_POST_RS485_TYPE = 0x4, //RS485车检器触发(卡口) + ITC_POST_RS485_RADAR_TYPE = 0x8, //RS485雷达触发(卡口) + ITC_POST_VIRTUALCOIL_TYPE = 0x10, //虚拟线圈触发(卡口) + ITC_POST_HVT_TYPE_V50 = 0x20, //混行卡口视频触发V50 + ITC_POST_MPR_TYPE = 0x40, //多帧识别(卡口)(Ver3.7) + ITC_POST_PRS_TYPE = 0x80, //视频检测触发配置 + ITC_EPOLICE_IO_TRAFFICLIGHTS_TYPE = 0x100, //IO红绿灯(电警) + ITC_EPOLICE_RS485_TYPE = 0x200, //RS485车检器电警触发(电警) + ITC_POST_HVT_TYPE = 0x400, //混行卡口视频触发(卡口) + ITC_PE_RS485_TYPE = 0x10000, //RS485车检器卡式电警触发(卡式电警) + ITC_VIDEO_EPOLICE_TYPE = 0x20000, //视频电警触发(卡式电警) + ITC_VIA_VIRTUALCOIL_TYPE = 0x40000, //VIA触发配置 + ITC_POST_IMT_TYPE = 0x80000, //智慧布防配置 + IPC_POST_HVT_TYPE = 0x100000, //IPC支持的HVT + ITC_POST_MOBILE_TYPE = 0x200000, //移动交通触发模式 + ITC_REDLIGHT_PEDESTRIAN_TYPE = 0x400000, //行人闯红灯触发 + ITC_NOCOMITY_PEDESTRIAN_TYPE = 0x800000 //不礼让行人触发 +}ITC_TRIGGERMODE_TYPE; + +//能力集接口的输出参数,对应pOutBuf参数 +typedef struct tagNET_ITC_TRIGGERMODE_ABILITY +{ + DWORD dwSize; + DWORD dwTriggerType; //触发类型,按位表示,定义ITC_TRIGGERMODE_ABILITY定义,根据输入的能力类型不同,此处返回的触发类型也不同 + BYTE byRes[16]; +}NET_ITC_TRIGGERMODE_ABILITY, *LPNET_ITC_TRIGGERMODE_ABILITY; + +typedef struct tagNET_ITC_INTERVAL_PARAM +{ + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + BYTE byRes1[3]; + WORD wInterval[MAX_INTERVAL_NUM];//连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byRes[8]; +}NET_ITC_INTERVAL_PARAM, *LPNET_ITC_INTERVAL_PARAM; + +//牌识参数 +typedef struct tagNET_ITC_PLATE_RECOG_PARAM +{ + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写*/ + BYTE byEnable; //是否启用该区域牌识,0-否,1-是 + DWORD dwRecogMode; + /*识别的类型, + bit0-背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + bit1-大车牌识别或小车牌识别:0-小车牌识别,1-大车牌识别 ; + bit2-车身颜色识别:0-不采用车身颜色识别,在背向识别或小车牌识别时禁止启用,1-车身颜色识别; + bit3-农用车识别:0-不采用农用车识别,1-农用车识别; + bit4-模糊识别:0-不采用模糊识别,1-模糊识别; + bit5-帧定位或场定位:0-帧定位,1-场定位; + bit6-帧识别或场识别:0-帧识别,1-场识别; + bit7-晚上或白天:0-白天,1-晚上 + bit8-摩托车识别:0-不采用摩托车识别,1-摩托车识别; + bit9-场景模式:0-电警/多帧,1-卡口; + bit10-微小车牌:0-不启用,1-启用微小车牌识别(像素60~80) + bit11-安全带检测:0-不启用,1-启用安全带检测 + bit12-民航车牌识别: 0-不启用,1-开启民航车牌识别 + bit13-车牌过渡倾斜处理: 0-不启用,1-开启过渡倾斜处理(PRS) + bit14-超大车牌识别: 0-不启用,1-开启超大车牌识别(PRS) + bit15-遮阳板检测:0-不启用,1-启用遮阳板检测 + bit16-黄标车检测:0-不启用,1-启用黄标车检测 + bit17-危险品车辆检测:0-不启用,1-启用危险品车辆检测 + bit18-使馆车牌识别:0-不启用,1-启用使馆车牌识别 + bit19-车辆子品牌识别:0-不启用,1-启用车辆子品牌识别 + bit20-打电话识别:0-不启用,1-启用 + bit21-车窗悬挂物识别:0-不启用,1-启用 + */ + BYTE byVehicleLogoRecog;//车标识别 0-不启用,1-启用 + /* + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂,8-贵,9-琼,10-冀,11-豫, + 12-黑,13-鄂,14-湘,15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青,22-鲁, + 23-晋,24-陕,25-沪,26-川,27-台,28-津,29-藏,30-港,31-新,32-云,33-浙, + 34-皖,0xff-全部 + */ + BYTE byProvince;//省份索引值 + BYTE byRegion;// 区域索引值 0-保留,1-欧洲,2-俄语区域, 3-欧洲&俄罗斯(EU&CIS),4-中东(Middle East) + BYTE byCountry;//国家索引,参照枚举COUNTRY_INDEX(不支持“COUNTRY_ALL = 0xff,//ALL 全部”) + WORD wPlatePixelWidthMin;//车牌像素识别宽度最小值(单位是像素)当前推荐范围[130,500] + WORD wPlatePixelWidthMax;//车牌像素识别宽度最大值(单位是像素)当前推荐范围[130,500] + BYTE byRes[24]; +}NET_ITC_PLATE_RECOG_PARAM, *LPNET_ITC_PLATE_RECOG_PARAM; + +//多边型结构体 +typedef struct tagNET_ITC_POLYGON +{ + DWORD dwPointNum; //有效点 大于等于3,若是3点在一条线上认为是无效区域,线交叉认为是无效区域 + NET_VCA_POINT struPos[ITC_MAX_POLYGON_POINT_NUM]; //多边形边界点,最多20个 +}NET_ITC_POLYGON, *LPNET_ITC_POLYGON; + +typedef struct tagNET_ITC_PLATE_RECOG_REGION_PARAM +{ + BYTE byMode; //区域类型,0-矩形,1-多边形 + BYTE byRes1[3]; + union + { + NET_VCA_RECT struRect; //矩形区域 + NET_ITC_POLYGON struPolygon; //多边形区域 + }uRegion; + BYTE byRes[16]; //保留 +}NET_ITC_PLATE_RECOG_REGION_PARAM, *LPNET_ITC_PLATE_RECOG_REGION_PARAM; + +//单组IO测速参数 +typedef struct tagNET_ITC_SINGLE_IOSPEED_PARAM +{ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byTrigCoil1; //第一线圈关联IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byCoil1IOStatus;//第一线圈IO输入口状态,0-下降沿(默认),1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byTrigCoil2; //第二线圈关联IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byCoil2IOStatus;//第二线圈IO输入口状态,0-下降沿(默认),1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE byTimeOut;//超时时间(默认10),单位s + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + DWORD dwDistance;//线圈距离(默认1000),单位:厘米 + BYTE byCapSpeed;//起拍速度(默认30),单位km/h + BYTE bySpeedLimit;//限速值(默认60),单位km/h + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySnapTimes1; //线圈1抓拍次数(默认不抓拍),0-不抓拍,非0-连拍次数,最大5次 + BYTE bySnapTimes2; //线圈2抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5次 + BYTE byBigCarSpeedLimit; //大车车速限制值 + BYTE byBigCarSignSpeed;//标志限速(大车),单位km/h(3.7Ver) + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wInterval1[MAX_INTERVAL_NUM];//线圈1连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + WORD wInterval2[MAX_INTERVAL_NUM];//线圈2连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口(可以同时关联多个),数组0表示IO输出口1,数组1表示IO输出口2,以此类推,0-不关联,1-关联 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byCarSignSpeed;//标志限速,单位km/h(3.7Ver) + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识参数(可用牌识区域1个,保留一个) + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE byLowSpeedCapEn; //是否启用低速抓拍,0-否,1-是 + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 + BYTE byRes[27]; +}NET_ITC_SINGLE_IOSPEED_PARAM, *LPNET_ITC_SINGLE_IOSPEED_PARAM; + +//卡口IO测速参数 +typedef struct tagNET_ITC_POST_IOSPEED_PARAM +{ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLE_IOSPEED_PARAM struSingleIOSpeed[MAX_IOSPEED_GROUP_NUM]; //单个IO测速组参数 + BYTE byRes[32]; +}NET_ITC_POST_IOSPEED_PARAM, *LPNET_ITC_POST_IOSPEED_PARAM; + +//单IO参数 +typedef struct tagNET_ITC_SINGLEIO_PARAM +{ + BYTE byDefaultStatus;//IO触发默认状态:0-低电平,1-高电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byEnable;//单IO使能标志0-不启用,1-启用 (Remark:在能力返回支持 bySupport&0x20,表示是否支持单IO触发界面IO使能配置 时生效) + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识参数 + BYTE byRes[24]; +}NET_ITC_SINGLEIO_PARAM, *LPNET_ITC_SINGLEIO_PARAM; + +//单IO触发参数 +typedef struct tagNET_ITC_POST_SINGLEIO_PARAM +{ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLEIO_PARAM struSingleIO[MAX_IOIN_NUMEX]; //单个IO触发参数 +}NET_ITC_POST_SINGLEIO_PARAM, *LPNET_ITC_POST_SINGLEIO_PARAM; + +typedef struct tagNET_ITC_LANE_PARAM +{ + BYTE byEnable; //是否启用该车道,0-不启用,1-启用 + BYTE byRelatedDriveWay;//关联的车道号 + WORD wDistance; //线圈距离,计算速度 + WORD wTrigDelayTime; //触发延迟时间(默认200),单位:毫秒 + BYTE byTrigDelayDistance; //触发延迟距离(默认0),单位:分米 + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySignSpeed;//标志限速,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byOverlayDriveWay; //OSD叠加的车道号 + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byCartSignSpeed;//标志限速(大车),单位km/h + BYTE byCartSpeedLimit;//限速值(大车),单位km/h + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE byLowSpeedCapEn; //是否启用低速抓拍,0-否,1-是 + BYTE byEmergencyCapEn; //是否启用应急车道抓拍,0-否,1-是 + BYTE byRes[9]; +}NET_ITC_LANE_PARAM, *LPNET_ITC_LANE_PARAM; + +//卡口RS485车检器触发参数 +typedef struct tagNET_ITC_POST_RS485_PARAM +{ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byTriggerSpareMode; //触发备用模式,0-默认,1-卡口虚拟线圈模式,2-卡口混合车道模式 + BYTE byFaultToleranceTime;//容错时间(单位:分钟),用于检测车检器是否正常的最大时间 + BYTE byRes1; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 + BYTE byRes[32]; +}NET_ITC_POST_RS485_PARAM, *LPNET_ITC_POST_RS485_PARAM; + +typedef struct tagNET_ITC_RADAR_PARAM +{ + BYTE byRadarType; //雷达类型,0-无雷达,1-安道雷雷达,2-奥利维亚,3-川速微波4,雷达接IO扩展盒(此参数在卡口虚拟线圈、混行卡口界面中使用,卡口RS485雷达不使用),0xff-其它类型 + BYTE byLevelAngle; //与水平线所成角度,默认为25°(0到90度) + WORD wRadarSensitivity; //雷达灵敏度 + WORD wRadarSpeedValidTime;//雷达速度有效时间(0~2000] ,0表示不支持 + BYTE byRes1[2]; + float fLineCorrectParam;//线性矫正参数[0.0~2.0] + int iConstCorrectParam;//常量矫正参数[-100~100] + BYTE byRes2[8]; +}NET_ITC_RADAR_PARAM, *LPNET_ITC_RADAR_PARAM; + +typedef struct tagNET_ITC_RS485_ACCESS_INFO_COND //条件结构 +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwTriggerModeType; + BYTE byAssociateRS485No;//关联的RS485号 1~5 (唯一值) + // BYTE byModeType; //0~预留,1~雷达,2~车检器,3~信号灯检测器 + BYTE byRes[15]; +}NET_ITC_RS485_ACCESS_INFO_COND,*LPNET_ITC_RS485_ACCESS_INFO_COND; + +typedef struct tagNET_ITC_RADAR_INFO_PARAM +{ + NET_ITC_RADAR_PARAM struRadarParam;//24 + BYTE byAssociateLaneNo;//关联的车道号1~99 (这个值可以在不同RS485口重复) + BYTE byRes[103]; +}NET_ITC_RADAR_INFO_PARAM, *LPNET_ITC_RADAR_INFO_PARAM; + +typedef union tagNET_ITC_ACCESS_DEVINFO_PARAM_UNION +{ + BYTE uLen[128]; + NET_ITC_RADAR_INFO_PARAM struRadarInfoParam;//雷达参数配置 +}NET_ITC_ACCESS_DEVINFO_PARAM_UNION, *LPNET_ITC_ACCESS_DEVINFO_PARAM_UNION; + +typedef struct tagNET_ITC_RS485_ACCESS_CFG //144 配置结构 +{ + DWORD dwSize; + BYTE byModeType;//0~预留,bit1~雷达,bit2~车检器,bit3~信号灯检测器 + BYTE byRes[3]; + NET_ITC_ACCESS_DEVINFO_PARAM_UNION uITCAccessDevinfoParam; //64 + BYTE byRes1[12]; +}NET_ITC_RS485_ACCESS_CFG,*LPNET_ITC_RS485_ACCESS_CFG; + +//2013-07-09 雷达关联车道扩展 +typedef struct tagNET_ITC_RS485_ACCESS_INFO +{ + DWORD dwSize; + NET_ITC_RADAR_PARAM struRadar[MAX_ITC_LANE_NUM];//多车道雷达信息 + //根据能力集开发显示,不支持的默认为0,不显示 (有几个车道支持几个) + BYTE byRes[20]; +}NET_ITC_RS485_ACCESS_INFO, *LPNET_ITC_RS485_ACCESS_INFO; + + +//卡口RS485雷达触发参数 +typedef struct tagNET_ITC_POST_RS485_RADAR_PARAM +{ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byRes1[3]; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 + NET_ITC_RADAR_PARAM struRadar; //雷达参数 + BYTE byRes[32]; +}NET_ITC_POST_RS485_RADAR_PARAM, *LPNET_ITC_POST_RS485_RADAR_PARAM; + +typedef struct tagNET_ITC_VTLANE_PARAM +{ + BYTE byRelatedDriveWay;//关联的车道号 + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE bySignSpeed;//标志限速,单位km/h + BYTE bySpeedLimit;//限速值,单位km/h + BYTE bySnapTimes; //抓拍次数(默认1),0-不抓拍,非0-连拍次数,最大5 + BYTE byBigCarSignSpeed;///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLowSpeedLimit;/*限低速,单位km/h*/ + BYTE byBigCarLowSpeedLimit; /*大车限低速,单位km/h*/ + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + NET_VCA_LINE struLine; //车道线 +}NET_ITC_VTLANE_PARAM, *LPNET_ITC_VTLANE_PARAM; + +typedef struct tagNET_ITC_VTCOIL_INFO +{ + NET_VCA_RECT struLaneRect; /*虚拟线圈区域*/ + BYTE byTrigFlag; //触发标志,0-车头触发;1-车尾触发;2-车头/车尾都触发 + BYTE byTrigSensitive; //触发灵敏度,1-100 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口(可以同时关联多个),数组0表示IO输出口1,数组1表示IO输出口2,以此类推,0-不关联,1-关联 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + BYTE byEnableRadar; //是否启用雷达测速,0-否,1-是 + NET_ITC_VTLANE_PARAM struLane; //关联的车道参数 + //车道用途类型,详见ITC_LANE_USEAGE_TYPE,使用1和8两种类型(3.7Ver) + BYTE byUseageType; + //车辆行驶方向,详见ITC_LANE_CAR_DRIVE_DIRECT(3.7Ver) + BYTE byCarDriveDirect; + BYTE byRes[30]; +}NET_ITC_VTCOIL_INFO, *LPNET_ITC_VTCOIL_INFO; + +//卡口虚拟线圈触发参数 +typedef struct tagNET_ITC_POST_VTCOIL_PARAM +{ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byIsDisplay; //视频中是否显示虚拟线圈,0-不显示,1-显示 + BYTE byLoopPos; //晚间触发线圈的偏向(默认10) + BYTE byPolarLenType; /*偏振镜类型,0:不加偏振镜;1:加施耐德偏振镜。*/ + BYTE byDayAuxLightMode; /*白天辅助照明模式,0:无辅助照明;1:LED灯照明;2:闪光灯照明*/ + BYTE byVideoLaneNO; //视频参考亮度的参考车道号 + BYTE byVideoLowTh; /*视频参考亮度低阈值初始化值(默认40)*/ + BYTE byVideoHighTh; /*视频参考亮度高阈值初始化值(默认55)*/ + BYTE byRecordMode; //录像标志:0-不录像,1-录像 + BYTE bySnapMode;//抓拍模式:0-频闪模式;1-爆闪模式 + /*测速方式:0-不测速,0x1-雷达测速,0x2-视频测速*/ + BYTE bySpeedDetector; + BYTE byRes2; + WORD wResolutionX;/* 设备当前分辨率宽*/ + WORD wResolutionY;/* 设备当前分辨率高*/ + DWORD dwDayInitExp; /*视频白天曝光时间的初始值2000*/ + DWORD dwDayMaxExp; /*视频白天曝光时间的最大值20000*/ + DWORD dwNightExp; /*晚间视频曝光时间的设置值3000*/ + DWORD dwSnapExp; /*抓拍曝光时间*/ + BYTE byDayInitGain; /*视频白天增益的初始值200*/ + BYTE byDayMaxGain; /*视频白天增益的最大值400*/ + BYTE byNightGain; /*晚间视频增益*/ + BYTE bySnapGain; /*抓拍增益*/ + DWORD dwSceneMode; //场景模式, 详见SCENE_MODE + NET_DVR_GEOGLOCATION struGeogLocation; //地址位置(默认浙江) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_VTCOIL_INFO struVtCoil[MAX_VL_NUM]; //虚拟线圈参数 + NET_ITC_RADAR_PARAM struRadar; //雷达参数 + NET_VCA_LINE struLine; //右车道线 + //违规检测类型,按位表示,详见ITC_VIOLATION_DETECT_TYPE,0-不启用,1-启用(3.7Ver) + DWORD dwVioDetectType; + BYTE byDebugMode; /*调试模式,0-不启用,1-启用*/ + BYTE byRes[11]; +}NET_ITC_POST_VTCOIL_PARAM, *LPNET_ITC_POST_VTCOIL_PARAM; + +//单组IO红绿灯参数 +typedef struct tagNET_ITC_SINGLE_IOTL_PARAM +{ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byLightIO; //红绿灯IO,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byTrafficLight; //红绿灯有效状态0-高电平红灯,低电平绿灯;1-高电平绿灯,低电平红灯 + BYTE byTrigIO;//触发的IO号,0-IO1,1-IO2,2-IO3,3-IO4,4-IO5,5-IO6 + BYTE byTrigIOStatus;//触发IO口的状态(默认0),0-下降沿,1-上升沿,2-上升沿和下降沿,3-高电平,4-低电平 + BYTE byRelatedDriveWay;//关联的车道号 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE byRedSnapTimes; //红灯抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE byGreenSnapTimes; //绿灯抓拍次数,0-不抓拍,非0-连拍次数,最大5次 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + BYTE byRes1; + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wRedInterval[MAX_INTERVAL_NUM];//红灯连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + WORD wGreenInterval[MAX_INTERVAL_NUM];//绿灯连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE byRes2[3]; + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //牌识区域参数 + BYTE byRes[32]; +}NET_ITC_SINGLE_IOTL_PARAM, *LPNET_ITC_SINGLE_IOTL_PARAM; + +//电警IO红绿灯参数 +typedef struct tagNET_ITC_EPOLICE_IOTL_PARAM +{ + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_SINGLE_IOTL_PARAM struSingleIOTL[MAX_IOSPEED_GROUP_NUM]; //单组IO红绿灯参数 + BYTE byRes[32]; +}NET_ITC_EPOLICE_IOTL_PARAM, *LPNET_ITC_EPOLICE_IOTL_PARAM; + +typedef enum _ITC_SERIAL_PROTOCOL_ +{ + ITC_PROTOCOL_UNKNOW = 0, /*未知*/ + ITC_SINGLE_COIL_PROTOCOL_MODE1 = 1, /*单线圈车检器协议模式1(显示为:单_进1_出1_延1_1),到达、离开、离开延时抓拍,离开牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE1 = 2, /*双线圈车检器协议模式1(显示为:双_进1_出1_出2_1),到达1、离开1、离开2抓拍,离开1牌识,上传3张车辆图片和车牌结果(默认)*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE2 = 3, /*双线圈车检器协议模式2(显示为:双_出1_出2_延2_1),离开1、离开2、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE3 = 4, /*双线圈车检器协议模式3(显示为:双_进2_出1_延2_1),进入2、离开1、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE4 = 5, /*双线圈车检器协议模式4(显示为:双/三_进2_出2_延2_1),到达2、离开2、离开2延时抓拍,离开1牌识,上传3张车辆图片和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE5 = 6, /*双线圈车检器协议模式5(显示为:双/三_进2_出2_延2_2),到达2、离开2、离开2延时抓拍,到达2、离开1均牌识,上传3张车辆图片和置信度高的车牌结果(默认)*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE6 = 7, /*双线圈车检器协议模式6(显示为:双/三_进1_出2_延2_2),到达1、离开2、离开2延时抓拍,到达1、离开1均牌识,上传3张车辆图片和置信度高的车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE7 = 8, /*双线圈车检器协议模式7(显示为:双_进1_出1_延2_1),到达1、离开1、离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,闯红灯到达1、离开1、离开2延时)和车牌结果*/ + ITC_DOUBLE_COIL_PROTOCOL_MODE8 = 9, /*双线圈车检器协议模式8(显示为:双_进1_出1_延2_2),到达1、离开1、离开2延时抓拍,到达1、离开1均牌识,上传车辆图片(卡口离开1,闯红灯到达1、离开1、离开2延时)和置信度高的车牌结果(默认)*/ + ITC_SINGLE_COIL_PROTOCOL_MODE2 = 10, /*单线圈车检器协议模式2(显示为:单_进1_出1_延1_2),到达、离开、离开延时抓拍,到达、离开均牌识,上传车辆图片(卡口离开,闯红灯到达、离开、离开延时)和置信度高的车牌结果(默认)*/ + ITC_OTHER_PROTOCOL = 0xff /*其它车检器协议(用于老demo参数配置,3.3之后版本关联的demo和控件均不支持此值)*/ +}ITC_SERIAL_PROTOCOL; + +//正常过车逻辑抓拍类型 +typedef enum _ITC_NORMAL_PASS_SERIAL_PROTOCOL_ +{ + ITC_NORMAL_PASS_SERIAL_UNKNOW = 0, //未知 + ITC_NORMAL_PASS_PROTOCOL_MODE1 = 1, //单线圈,离开抓拍,牌识上传(默认) + ITC_NORMAL_PASS_PROTOCOL_MODE2 =2, //单线圈,到达、离开抓拍,均牌识,仅上传离开车辆图片和置信度高的车牌结果 + ITC_NORMAL_PASS_PROTOCOL_MODE3 =3, //双线圈,离开1抓拍,牌识上传(默认) + ITC_NORMAL_PASS_PROTOCOL_MODE4 =4, //双线圈,到达1、离开1抓拍,均牌识,仅上传离开1车辆图片和置信度高的车牌结果 + ITC_NORMAL_PASS_PROTOCOL_MODE5 =5, //双线圈,到达2、离开1抓拍,均牌识,仅上传离开1车辆图片和置信度高的车牌结果 +}ITC_NORMAL_PASS_SERIAL_PROTOCOL; + +//逆行违规逻辑抓拍类型 +typedef enum _ITC_INVERSE_SERIAL_PROTOCOL_ +{ + ITC_INVERSE_SERIAL_UNKNOW = 0, //未知 + ITC_INVERSE_PROTOCOL_MODE1 = 1, //不抓拍 + ITC_INVERSE_PROTOCOL_MODE2 =2, //到达1连抓2张、离开2抓拍,到达1两张均牌识,上传3张车辆图片和置信度高的车牌结果 + ITC_INVERSE_PROTOCOL_MODE3 =3, //到达1、离开2抓拍,到达1牌识,上传2张车辆图片和车牌结果 +}ITC_INVERSE_SERIAL_PROTOCOL; + +//超速违规逻辑抓拍类型 +typedef enum _ITC_SPEED_SERIAL_PROTOCOL_ +{ + ITC_SPEED_SERIAL_UNKNOW = 0, //未知 + ITC_SPEED_PROTOCOL_MODE1 = 1, //不抓拍 + ITC_SPEED_PROTOCOL_MODE2 =2, //双/三线圈,离开1,离开2,离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,超速离开1、离开2、离开2延时)和车牌结果 + ITC_SPEED_PROTOCOL_MODE3 =3, //双/三线圈,离开1,离开2,离开2延时抓拍,离开1牌识,上传车辆图片(卡口离开1,超速离开1、离开2)和车牌结果 +}ITC_SPEED_SERIAL_PROTOCOL; + +//车检器参数 +typedef struct tagNET_ITC_SERIAL_INFO +{ + BYTE bySerialProtocol; //车检器协议类型,详见ITC_SERIAL_PROTOCOL + BYTE byIntervalType; //间隔类型(默认按时间),0-时间起效,1-距离起效 + WORD wInterval;//连拍间隔时间(单位ms)或连拍间隔距离(单位分米),当byIntervalType为0时,表示间隔时间,当byIntervalType为1时,表示距离 + BYTE byNormalPassProtocol; //正常过车抓拍协议类型,详见ITC_NORMAL_PASS_SERIAL_PROTOCOL + BYTE byInverseProtocol; //逆行抓拍协议类型,详见ITC_INVERSE_SERIAL_PROTOCOL + BYTE bySpeedProtocol; //超速抓拍协议类型,详见ITC_SPEED_SERIAL_PROTOCOL + BYTE byRes[9]; +}NET_ITC_SERIAL_INFO, *LPNET_ITC_SERIAL_INFO; + +typedef struct tagNET_ITC_EPOLICE_LANE_PARAM +{ + BYTE byEnable; //是否启用该车道,0-不启用,1-启用 + BYTE byRelatedDriveWay;//关联的车道号 + WORD wDistance; //线圈距离,单位厘米 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE bySignSpeed;//标志限速(卡式电警模式有效),单位km/h + BYTE bySpeedLimit;//限速值(卡式电警模式有效),单位km/h + BYTE byOverlayDriveWay; //OSD叠加的车道号 + NET_ITC_SERIAL_INFO struSerialInfo; //车检器参数 + BYTE byRelatedIOOut[MAX_IOOUT_NUM]; //关联的IO输出口,可以同时关联多个 + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE bySerialType; //车检器类型,0-私有车检器,1-私有OEM车检器,2-其他车检器 + BYTE byRelatedIOOutEx;//第0位表示IO输出口1,以此类推,0-不关联,1-关联 支持关联到8个(兼容byRelatedIOOut字段) + BYTE bySnapPicPreRecord; //抓拍图片预录时间点;0-默认值(第二张图片),1-第一张图片,2-第二张图片,3-第三张图片 + NET_ITC_PLATE_RECOG_REGION_PARAM struPlateRecog[MAX_LANEAREA_NUM]; //车道牌识参数 + BYTE byBigCarSignSpeed; ///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE byRedTrafficLightChan;//红灯通道号:1~16(红绿灯检测器) + BYTE byYellowTrafficLightChan;//黄灯通道号:1~16(红绿灯检测器) + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byRes3[11]; +}NET_ITC_EPOLICE_LANE_PARAM, *LPNET_ITC_EPOLICE_LANE_PARAM; + +//电警/卡式电警RS485车检器触发参数 +typedef struct tagNET_ITC_EPOLICE_RS485_PARAM +{ + BYTE byRelatedLaneNum;//关联的车道个数 + BYTE byTrafficLightSignalSrc;//交通灯信号来源 0~车检器 1~红绿灯检测器 + BYTE byRes1[2]; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_EPOLICE_LANE_PARAM struLane[MAX_ITC_LANE_NUM]; //关联的车道参数 + BYTE byRes[32]; +}NET_ITC_EPOLICE_RS485_PARAM, *LPNET_ITC_EPOLICE_RS485_PARAM; + +//车道属性参数结构 +typedef struct tagNET_ITC_LANE_LOGIC_PARAM +{ + BYTE byUseageType; //车道用途类型,详见ITC_LANE_USEAGE_TYPE + BYTE byDirectionType; //车道方向类型,详见ITC_LANE_DIRECTION_TYPE + BYTE byCarDriveDirect; //车辆行驶方向,详见ITC_LANE_CAR_DRIVE_DIRECT + BYTE byRes[33]; //保留 +}NET_ITC_LANE_LOGIC_PARAM, *LPNET_ITC_LANE_LOGIC_PARAM; + +//视频电警线结构 +typedef struct tagNET_ITC_LINE +{ + NET_VCA_LINE struLine; //线参数 + BYTE byLineType; //线类型,详见ITC_LINE_TYPE + BYTE byRes[7]; +}NET_ITC_LINE, *LPNET_ITC_LINE; + +typedef struct tagNET_ITC_SNAPMODE_PARAM +{ + BYTE byVehicleCapMode;//机动车抓拍模式,0-频闪模式;1-爆闪模式 + BYTE byNoVehicleCapMode;//非机动车抓拍模式,0-频闪模式;1-爆闪模式 + BYTE byPasserCapMode;//行人抓拍模式,0-频闪模式;1-爆闪模式 + BYTE byRes[29]; +}NET_ITC_SNAPMODE_PARAM, *LPNET_ITC_SNAPMODE_PARAM; + +//size = 128 +typedef struct tagNET_ITC_HVT_EC_PARAM +{ + DWORD dwCapShutter; //抓拍快门0~65535 + WORD wCapGain; //抓拍增益0~100 + BYTE byRes[2]; + DWORD dwDayTimeVideoShutter; //白天曝光时间最大值 + WORD wDayTimeVideoGain; //白天增益最大值 + WORD wNightVideoGain; //晚上增益最大值 + DWORD wNightVideoShutter; //晚上曝光时间最大值 + BYTE byRes1[108]; +}NET_ITC_HVT_EC_PARAM, *LPNET_ITC_HVT_EC_PARAM; + +typedef struct tagNET_ITC_LANE_HVT_PARAM +{ + BYTE byLaneNO; //关联的车道号 1~255(用于叠加和上传) + BYTE bySignSpeed; //标志限速,单位km/h 0~255 70 + BYTE bySpeedLimit; //限速值,单位km/h 0~255 80 实际起效 + BYTE byBigCarSignSpeed;///*大车标志限速,单位km/h*/ + BYTE byBigCarSpeedLimit;/*大车限速值,单位km/h*/ + BYTE bySpeedCapEn; //是否启用超速抓拍,0-否,1-是 + BYTE byCaptureCount;//抓拍张数1~5(正常) + BYTE byRelatedIOOut; /*关联的IO输出口(可以同时关联多个),按位表示IO输出口,第0位表示IO输出口1,以此类推,0-不关联,1-关联*/ + BYTE byFlashMode; /*闪光灯闪烁模式,0-同时闪,1-轮流闪*/ + BYTE byEnableRadar; //是否启用雷达测速,0-否,1-是 + BYTE byChangeLaneEnable; //违章变道抓拍使能,0-关闭,1-开启 + BYTE byChangeLaneCapNo; //违章变道抓拍张数2-3 + DWORD dwCapTarget; //抓拍类型 bit0 表示机动车 bit1 表示非机动车 bit2 表示行人 0~表示不选择 1~表示选择 + NET_ITC_INTERVAL_PARAM struInterval; //抓拍间隔参数 + BYTE byRes3[24]; + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性,用byUseageType和byCarDriveDirect + NET_ITC_LINE struLeftLaneLine; //左车道线,线类型为虚线、实线、单黄线和双黄线 + NET_ITC_LINE struRightLaneLine; //右车道线,线类型为虚线、实线、单黄线和双黄线 + NET_ITC_POLYGON struPlateRecog; //牌识区域参数 + NET_ITC_POLYGON struTraceArea; //视频触发焦点区域 + NET_VCA_LINE struForwardTrigLine; //正向触发线:一条线段,关心端点位置,目前只支持水平配置,接口按线段的两个端点保存。(一般配置为正向车辆的最佳触发位置) + NET_VCA_LINE struBackwardTrigLine; //背向触发线:一条线段,关心端点位置,目前只支持水平配置,接口按线段的两个端点保存(一般配置为背向车辆的最佳触发位置) + NET_VCA_LINE struLeftTrigLine; //左边触发线:一条线段,关心端点位置,目前只支持垂直配置,接口按线段的两个端点保存(一般配置为从左边进入车辆的最佳触发位置) + NET_VCA_LINE struRightTrigLine; //右边触发线:一条线段,关心端点位置,目前只支持垂直配置,接口按线段的两个端点保存(一般配置为从右边进入车辆的最佳触发位置) + BYTE byRes4[60]; +}NET_ITC_LANE_HVT_PARAM, *LPNET_ITC_LANE_HVT_PARAM; + +typedef struct tagNET_ITC_POST_HVT_PARAM +{ + BYTE byLaneNum;//识别的车道个数,1-6 + BYTE bySceneMode;//0-未知1-城区道路;2-小区出入口 + BYTE byRoadExpBright;//路面期望亮度(视频曝光参数调整的依据之一。在无机动车时,依据此亮度期望值,调整视频曝光参数) + BYTE byPlateExpBright;//车牌期望亮度(视频曝光参数调整的依据之一。在有机动车通过并识别到车牌时,依据此亮度期望值,对视频曝光参数调整) + NET_ITC_POLYGON struDetectArea; //视频检测区域 + NET_ITC_SNAPMODE_PARAM struCapMode;//抓拍模式 + NET_ITC_HVT_EC_PARAM struEcParam; //曝光控制参数 + NET_ITC_LANE_HVT_PARAM struLaneParam[MAX_ITC_LANE_NUM]; //单车道属性 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_DVR_GEOGLOCATION struGeogLocation; //地址位置(默认浙江) + BYTE byRes[324]; +}NET_ITC_POST_HVT_PARAM, *LPNET_ITC_POST_HVT_PARAM; + +/*************************MPR触发模式 begin 2013-12-07****************/ +typedef struct tagNET_ITC_LANE_MPR_PARAM +{ + BYTE byLaneNO; + union + { + BYTE uLen[4]; + struct + { + BYTE byIONo;//IO号[1, byIoInNum+1] 最小从1开始,最大值根据接口能力返回NET_DVR_SNAP_ABILITY的字段byIoInNum + BYTE byTriggerType;//0-下降沿,1-上升沿 + BYTE byRes1[2]; + }struIO;//IO模式下生效 + struct + { + BYTE byRelateChan;//关联车检器通道号[1,16] + BYTE byRes2[3]; + }struRS485; + }uTssParamInfo; + BYTE byCarDriveDirect; //车辆行驶方向 ITC_LANE_CAR_DRIVE_DIRECT + BYTE byRes[58]; + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPEtypedef struct tagNET_ITS_PICTURE_INFO + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byRes1[255]; +}NET_ITC_LANE_MPR_PARAM,*LPNET_ITC_LANE_MPR_PARAM; + +typedef struct tagNET_ITC_POST_MPR_PARAM +{ + BYTE byEnable; + BYTE byLaneNum; + BYTE bySourceType;//0-MPR触发(视频触发),1-关联IO触发(地感线圈),2-关联RS485的触发信号 + BYTE byPicUploadType;//图片上传类型,0~全部上传,1-正向上传,2-背向上传 + BYTE byRoadType;//模式选择 0-出入口,1-城市道路,2-自定义,3-报警输入,4-卡口, 5-治安布防(该模式下可以检测车辆比较混乱且没有车道线的场景) + BYTE byRes2; + WORD wCustomDelayTime;//自定义抓拍延时时间(在byRoadType为 "自定义"的时候生效),范围在[0,15000]ms + BYTE byRes[56]; + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 + NET_ITC_LANE_MPR_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; + char szSceneName[NAME_LEN/*32*/]; //场景名称 + NET_VCA_LINE struSnapLine;//抓拍线,在相机的架设方式为侧装,配置这个参数生效(即4.5中NET_DVR_CAMERA_SETUPCFG结构体中byErectMethod字段为1时 ) + BYTE byRes1[392]; +}NET_ITC_POST_MPR_PARAM,*LPNET_ITC_POST_MPR_PARAM; +/*************************MPR触发模式 end 2013-12-07****************/ + +typedef struct tagNET_DVR_VIA_LANE_PARAM +{ + BYTE byLaneNO; //关联车道号 + BYTE byRes[63]; //保留 + NET_ITC_LANE_LOGIC_PARAM struLogicParam; //车道属性参数 + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + BYTE byRes1[300]; //保留 +} NET_DVR_VIA_LANE_PARAM,*LPNET_DVR_VIA_LANE_PARAM; + +typedef struct tagNET_DVR_VIA_VTCOIL_PARAM +{ + BYTE byEnable; //使能 0-不开启 1-开启 + BYTE byLaneNum; //车道数 + BYTE byRes[62]; //保留 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_DVR_VIA_LANE_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 + BYTE byRes1[624];//保留 +}NET_DVR_VIA_VTCOIL_PARAM,*LPNET_DVR_VIA_VTCOIL_PARAM; + +//配置条件接口 +typedef struct tagNET_DVR_TRIGGER_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + DWORD dwTriggerMode;//触发方式,参考 ITC_TRIGGERMODE_TYPE + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + BYTE byRes[63]; //保留留 +}NET_DVR_TRIGGER_COND,*LPNET_DVR_TRIGGER_COND; + +typedef struct tagNET_ITC_LANE_IMT_PARAM +{ + BYTE byLaneNO;//叠加车道号 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byRes[146]; + NET_ITC_LINE struLaneLine;//车道线 + BYTE byRes1[256]; +}NET_ITC_LANE_IMT_PARAM,*LPNET_ITC_LANE_IMT_PARAM; + +typedef struct tagNET_ITC_POST_IMT_PARAM +{ + BYTE byEnable; + BYTE byLaneNum; + BYTE bySnapMode; //抓拍类型;0~机动车,1~机非人 + BYTE byRes[61]; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最右边车道的边界线) + NET_ITC_LANE_IMT_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; + BYTE byRes1[1584]; +}NET_ITC_POST_IMT_PARAM,*LPNET_ITC_POST_IMT_PARAM; + +typedef struct tagNET_ITC_LANE_PRS_PARAM +{ + BYTE byLaneNO; + union + { + BYTE uLen[4]; + struct + { + BYTE byIONo;//IO号[1,4] + BYTE byTriggerType;//0-下降沿,1-上升沿 + BYTE byRes1[2]; + }struIO;//IO模式下生效 + struct + { + BYTE byRelateChan;//关联车检器通道号[1,16] + BYTE byRes2[3]; + }struRS485; + }uTssParamInfo; + BYTE byRes[59]; + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byRes2[3]; + NET_ITC_LINE struTrigLine;//触发线 + BYTE byRes1[228]; +}NET_ITC_LANE_PRS_PARAM,*LPNET_ITC_LANE_PRS_PARAM; + + +typedef struct tagNET_ITC_POST_PRS_PARAM +{ + BYTE byEnable; + BYTE byLaneNum; + BYTE bySourceType;//0-视频检测,1-关联IO触发(地感线圈),2-关联RS485的触发信号 + BYTE bySnapMode;//0-全景图,1-全景图+特写 + BYTE byCapMode;//bySourceType为0视频检测时使用,0-频闪模式;1-爆闪模式 + BYTE byNoPlatCarCap;//是否启用无车牌抓拍 0-不启用 1-启用 + BYTE bySceneMode;//场景模式:0-普通出入口场景、1-收费站模式场景(车辆停留时间较长)、2-地下停车场出入口场景(白天黑夜均较暗) + BYTE byRes[57]; + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 + NET_ITC_LANE_PRS_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; + BYTE byRes1[440]; +}NET_ITC_POST_PRS_PARAM,*LPNET_ITC_POST_PRS_PARAM; + +typedef struct tagNET_IPC_LANE_HVT_PARAM +{ + BYTE byLaneNO; + BYTE byCarDriveDirect; //车辆行驶方向 ITC_LANE_CAR_DRIVE_DIRECT + BYTE byRes[62]; + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_POLYGON struPlateRecog;//牌识区域 + BYTE byRes1[256]; +} NET_IPC_LANE_HVT_PARAM,*LPNET_IPC_LANE_HVT_PARAM; + +typedef struct _NET_ITC_PARKING_DETECTION_ +{ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byRes; //保留字节 + WORD wDuration;//检测时间间隔,单位:s + WORD wAlarmIntervalTime;//上传时间间隔,单位:s + BYTE byRes1[58]; //保留字节 +}NET_ITC_PARKING_DETECTION, *LPNET_ITC_PARKING_DETECTION; + +typedef struct tagNET_IPC_POST_HVT_PARAM +{ + BYTE byEnable; + BYTE byLaneNum; + BYTE byEnhancedMode; //增强模式,0-不启用,1-启用 + BYTE byPicRecognition; //车辆报警图片二次识别,0-不启用,1-启用 + BYTE byRes[60]; + NET_ITC_LINE struLaneBoundaryLine;//车道边界线(最左边车道的左边界线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog;//牌识参数 40 + NET_IPC_LANE_HVT_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; + char szSceneName[NAME_LEN/*32*/]; //场景名称 + NET_VCA_LINE struSnapLine;//抓拍线,抓在相机的架设方式为侧装,配置这个参数生效(即4.5中NET_DVR_CAMERA_SETUPCFG结构体中byErectMethod字段为1时 ) + NET_ITC_PARKING_DETECTION struParkingDetection; //停车检测参数 + BYTE byRes1[328]; +} NET_IPC_POST_HVT_PARAM,*LPNET_IPC_POST_HVT_PARAM; + +//抓拍机4.0新增 +typedef struct tagNET_ITC_LANE_HVT_PARAM_V50 +{ + BYTE byLaneNO; //关联的车道号1~255(用于叠加和上传) + BYTE byFlashMode; //闪光灯闪烁模式,0-同时闪,1-轮流闪 + BYTE bySignSpeed; //小车标志限高速,单位km/h + BYTE bySpeedLimit; //小车限高速值,单位km/h + BYTE bySignLowSpeed; //小车标志限底速,单位km/h + BYTE byLowSpeedLimit; //小车限底速值,单位km/h + BYTE byBigCarSignSpeed; //大车标志限高速,单位km/h(新交规) + BYTE byBigCarSpeedLimit; //大车限高速值,单位km/h(新交规) + BYTE byBigCarSignLowSpeed; //大车标志限底速,单位km/h + BYTE byBigCarLowSpeedLimit; //大车限底速值,单位km/h + BYTE bySnapTimes; //卡口抓拍张数,1~3 + BYTE byDriveLineSnapTime;// 压线抓拍张数 1~3 + BYTE byHighSpeedSnapTime;// 超高速抓拍张数1~3 + BYTE byLowSpeedSnapTime;// 超低速抓拍张数1~3 + BYTE byBanSnapTime;// 违反禁令抓拍张数 1~3 + BYTE byReverseSnapTime;//逆行抓拍张数 1~3 + BYTE byRelatedDriveWay; //关联车道号,用于匹配车检器 + BYTE byLaneType; //车道类型,0-未配置、1-高速公路、2-城市快速路、0xff-其他道路 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号byRelatedDriveWay对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byRes1[27]; + BYTE byChangeLaneEnable; //违章变道抓拍使能,0-关闭,1-开启 + BYTE byChangeLaneCapNo; //违章变道抓拍张数2-3 + //目前仅使用第一个车道的,以后可能会扩展为多车道分别配置 + //类型, 按位表示,0-不启用,1-启用参考 ITC_VIOLATION_DETECT_TYPE + DWORD dwVioDetectType; + DWORD dwRelatedIOOut; //关联的IO输出口(可以同时关联多个),按位表示IO输出口,第0位表示IO输出口1,以此类推,0-不关联,1-关联 + NET_ITC_LINE struTrigLine; //触发线,目前仅使用第一个车道的,以后可能会扩展为多车道分别配置 + NET_ITC_LINE struLineLeft; //左车道线 + NET_ITC_POLYGON struPlateRecog; //牌识区域 + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性,用byUseageType和byCarDriveDirect + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) + BYTE byRes2[280]; +}NET_ITC_LANE_HVT_PARAM_V50, *LPNET_ITC_LANE_HVT_PARAM_V50; + +typedef struct tagNET_ITC_POST_HVT_PARAM_V50 +{ + BYTE byLaneNum; //识别的车道个数,1-6 + BYTE byCapType; //抓拍类型,0-机、非、人(默认),1-机动车 + BYTE byCapMode; //抓拍方式,0-视频抽帧,1-打断抓拍,2-混合模式, + BYTE bySecneMode; //场景模式,0-城区道路(默认),1-小区出入口,2-高速公路 + BYTE bySpeedMode; //测速模式,0-无测速,1-雷达测速,2-视频测速 + BYTE byLineRuleEffect; //触发规则线有效性,每一位代表一条触发线,0-无效;1-有效。bit0-左触发线;bit1-右触发线;bit2-视频检测区域 + BYTE byRes1[78]; + NET_ITC_LINE struLeftTrigLine; //左触发线(一条垂直线) + NET_ITC_LINE struRigtTrigLine; //右触发线(一条垂直线) + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的右车道线) + NET_ITC_POLYGON struDetectArea; //视频检测区域 + NET_DVR_GEOGLOCATION struGeogLocation; //地理位置(默认浙江省)计算时区 + NET_ITC_LANE_HVT_PARAM_V50 struLaneParam[MAX_ITC_LANE_NUM/*6*/]; //单车道属性 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + BYTE byRes2[260]; +} NET_ITC_POST_HVT_PARAM_V50, *LPNET_ITC_POST_HVT_PARAM_V50; + + +//车道参数 +typedef struct tagNET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM +{ + BYTE byRelatedDriveWay;//关联的车道号 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byPedestriansNum;//行人数量阈值:范围1-100,默认值1 + BYTE byVehicleSpeed;//车辆速度阈值:范围0-100,默认值0 + DWORD dwVehicleInterval; //跟车检测阈值:范围0-65536,默认值0 + BYTE byPedesDetRule; //行人检测规则;代表行人检测区域中行人行驶方向; 0~向左, 1~向右。 + BYTE byRes[3]; + NET_ITC_LINE struLaneLine;//车道线 + NET_ITC_LINE struStopLine;//停止线 + NET_ITC_POLYGON struPlateRecog; //牌识区域 + BYTE byRes1[280]; +} NET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM, +*LPNET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM; + +//不礼让行人参数 +typedef struct tagNET_ITC_NOCOMITY_PEDESTRIAN_PARAM +{ + BYTE byEnable; //使能 + BYTE byLaneNum;// 关联车道总数:范围1-3,默认值3 + BYTE byRes[74]; + NET_ITC_LINE struLaneBoundaryLine;//车道右边界线 + NET_ITC_LINE struTriggerLine;//不礼让行人触发线 + NET_ITC_POLYGON struPedesDetRecog;//行人检测区域 + NET_ITC_LANE_NOCOMITY_PEDESTRIAN_PARAM struLaneParam[MAX_ITC_LANE_NUM/*6*/]; //车道参数 + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + BYTE byRes1[400]; +}NET_ITC_NOCOMITY_PEDESTRIAN_PARAM, +*LPNET_ITC_NOCOMITY_PEDESTRIAN_PARAM; + +//单个IO接入信号灯参数 +typedef struct tagNET_ITC_SINGLE_IO_LIGHT_PARAM +{ + BYTE byLightType; //交通灯导向类型,0-左转灯,1-直行灯,2-右转灯 + BYTE byRelatedIO; //关联的IO口号 + BYTE byRedLightState; //红灯电平状态,0-高电平红灯,1-低电平红灯 + BYTE byRes[17]; +}NET_ITC_SINGLE_IO_LIGHT_PARAM, *LPNET_ITC_SINGLE_IO_LIGHT_PARAM; + +//IO接入信号灯参数 +typedef struct tagNET_ITC_IO_LIGHT_PARAM +{ + NET_ITC_SINGLE_IO_LIGHT_PARAM struIOLight[MAX_LIGHT_NUM]; //单个IO接入信号灯参数 + BYTE byRes[8]; +}NET_ITC_IO_LIGHT_PARAM, *LPNET_ITC_IO_LIGHT_PARAM; + +//单个485接入信号灯参数 +typedef struct tagNET_ITC_SINGLE_RS485_LIGHT_PARAM +{ + BYTE byLightType; //交通灯导向类型,0-左转灯,1-直行灯,2-右转灯 + BYTE byRelatedLightChan; //关联的红绿灯检测器通道号 + BYTE byInputLight; //接入的信号灯类型,0-接红灯,1-接绿灯 + BYTE byRelatedYLightChan; //关联的黄灯检测器通道号 + BYTE byRes[16]; +}NET_ITC_SINGLE_RS485_LIGHT_PARAM, *LPNET_ITC_SINGLE_RS485_LIGHT_PARAM; + +//485接入信号灯参数 +typedef struct tagNET_ITC_RS485_LIGHT_PARAM +{ + NET_ITC_SINGLE_RS485_LIGHT_PARAM struRS485Light[MAX_LIGHT_NUM]; //单个485接入信号灯参数 + BYTE byRes[8]; +}NET_ITC_RS485_LIGHT_PARAM, *LPNET_ITC_RS485_LIGHT_PARAM; + +typedef struct tagNET_POS_PARAM +{ + WORD wLeft; + WORD wTop; + WORD wRight; + WORD wBottom; +}NET_POS_PARAM, *LPNET_POS_PARAM; + +//单组视频检测交通信号灯参数结构 +typedef struct tagNET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM +{ + BYTE byLightNum; //交通灯个数 + BYTE byStraightLight; //是否有直行标志灯,0-否 ,1-是 + BYTE byLeftLight; //是否有左转标志灯,0-否,1-是 + BYTE byRightLight; //是否有右转标志灯,0-否,1-是 + BYTE byRedLight;//是否有红灯,0-否,1-是 + BYTE byGreenLight; //是否有绿灯,0-否,1-是 + BYTE byYellowLight; //是否有黄灯,0-否,1-是 + BYTE byYellowLightTime;//取值范围(0~10s)(ITC3.7Ver) + NET_POS_PARAM struLightRect; //交通灯区域 + BYTE byRes[24]; +}NET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM, *LPNET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM; + + +//视频检测交通信号灯参数结构(最大可有12个区域检测,488字节) +typedef struct tagNET_ITC_VIDEO_DETECT_LIGHT_PARAM +{ + NET_ITC_SINGLE_VIDEO_DETECT_LIGHT_PARAM struTrafficLight[MAX_VIDEO_DETECT_LIGHT_NUM]; //单个视频检测信号灯参数 + BYTE byRes[8]; +}NET_ITC_VIDEO_DETECT_LIGHT_PARAM, *LPNET_ITC_VIDEO_DETECT_LIGHT_PARAM; + +//交通信号灯接入参数 +typedef union tagNET_ITC_LIGHT_ACCESSPARAM_UNION +{ + DWORD uLen[122]; + NET_ITC_IO_LIGHT_PARAM struIOLight; //IO接入信号灯参数 + NET_ITC_RS485_LIGHT_PARAM struRS485Light; //485接入信号灯参数 + NET_ITC_VIDEO_DETECT_LIGHT_PARAM struVideoDelectLight; //视频检测信号灯参数 +}NET_ITC_LIGHT_ACCESSPARAM_UNION, *LPNET_ITC_LIGHT_ACCESSPARAM_UNION; + +//交通信号灯参数结构 +typedef struct tagNET_ITC_TRAFFIC_LIGHT_PARAM +{ + BYTE bySource; //交通信号灯接入源,0-IO接入,1-RS485接入 + BYTE byRes1[3]; + NET_ITC_LIGHT_ACCESSPARAM_UNION struLightAccess;//信号灯接入参数 + BYTE byRes[32]; +}NET_ITC_TRAFFIC_LIGHT_PARAM, *LPNET_ITC_TRAFFIC_LIGHT_PARAM; + +//违规检测线参数结构 +typedef struct tagNET_ITC_VIOLATION_DETECT_LINE +{ + NET_ITC_LINE struLaneLine; //车道线参数 + NET_ITC_LINE struStopLine; //停止线参数 + NET_ITC_LINE struRedLightLine; //闯红灯触发线参数 + NET_ITC_LINE struCancelLine; //直行触发位置取消线 + NET_ITC_LINE struWaitLine; //待行区停止线参数 + NET_ITC_LINE struRes[8]; +}NET_ITC_VIOLATION_DETECT_LINE, *LPNET_ITC_VIOLATION_DETECT_LINE; + +//行人闯红灯参数 +typedef struct tagNET_ITC_REDLIGHT_PEDESTRIAN_PARAM +{ + BYTE byEnable; //使能 + BYTE bySnapNumTimes; //抓拍张数:1-3,默认3张 + BYTE byPedesDir; //行人方向:0~正向,1~背向,2~双向 + BYTE byDelayTime; //延时时间1-5s + BYTE byStackTargetEnble;//叠加目标框(即抓拍第一张图片上框住闯红灯的行人),0~不叠加,1~叠加 + BYTE byCalibRecogCtrl;//标定区域控制;0~移除标定区域,1~添加标定区域 + BYTE byRes1[2]; + NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //交通信号灯参数 + NET_ITC_LINE struStopLine;//停止线 + NET_ITC_POLYGON struCalibRecog[MAX_CALIB_RECOG_NUM/*2*/];//标定区域 + BYTE byRes[440]; +}NET_ITC_REDLIGHT_PEDESTRIAN_PARAM, +*LPNET_ITC_REDLIGHT_PEDESTRIAN_PARAM; + +typedef struct tagNET_ITC_POST_MOBILE_PARAM +{ + BYTE byEnable; + BYTE bySceneMode;//场景模式 0-高速公路 1-城市道路 + /*抓拍类型 + bit0-卡口,bit1-大车占道,bit2-压硬路肩 + */ + WORD wExpressWayCapType;//高速公路 + /*抓拍类型 + bit0-卡口,bit1-机占非,bit2-占用专用车道 + */ + WORD wUrbanRoadCapType;//城市道路 + BYTE byCapNum;//抓拍张数 [2,3] + BYTE byRecordEnable;//违章录像使能 0-关闭,1-开启 + DWORD dwPreRecordTime;//录像预录时间(s) + DWORD dwOverRecordTime;//录像超时时间(s) + NET_ITC_LANE_LOGIC_PARAM struLane; //车道属性 + NET_ITC_POLYGON struPolygon[MAX_MOBILE_POLYGON_NUM/*3*/]; //牌识区域参数 + NET_ITC_VIOLATION_DETECT_LINE struLine[MAX_MOBILE_DETECTLINE_NUM/*3*/]; //违规检测线 + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的右车道线) + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) + BYTE byRes[256]; +}NET_ITC_POST_MOBILE_PARAM,*LPNET_ITC_POST_MOBILE_PARAM; + +typedef union tagNET_ITC_TRIGGER_PARAM_UNION +{ + DWORD uLen[1070]; //参数 + NET_ITC_POST_IOSPEED_PARAM struIOSpeed; //(卡口)IO测速参数 + NET_ITC_POST_SINGLEIO_PARAM struSingleIO; //(卡口)单IO参数 + NET_ITC_POST_RS485_PARAM struPostRs485; //(卡口)RS485车检器参数 + NET_ITC_POST_RS485_RADAR_PARAM struPostRadar; //(卡口)RS485雷达参数 + NET_ITC_POST_VTCOIL_PARAM struVtCoil; //(卡口)虚拟线圈参数 + NET_ITC_POST_HVT_PARAM struHvt; //(卡口)混行卡口参数 + NET_ITC_EPOLICE_IOTL_PARAM struIOTL; //(电警)IO红绿灯参数 + NET_ITC_EPOLICE_RS485_PARAM struEpoliceRs485; //(电警)RS485车检器触发参数 + NET_ITC_EPOLICE_RS485_PARAM struPERs485; //(卡式电警)RS485车检器触发参数 + NET_ITC_POST_MPR_PARAM struPostMpr; //多帧检测触发(MPR) + NET_DVR_VIA_VTCOIL_PARAM struViaVtCoil; //(VIA)视频检测参数 + NET_ITC_POST_IMT_PARAM struPostImt;//智慧布防触发 + NET_ITC_POST_PRS_PARAM struPostPrs;//视频检测触发 + NET_IPC_POST_HVT_PARAM struIpcHvt;//(IPC) 混行卡口参数 + NET_ITC_POST_HVT_PARAM_V50 struHvtV50; /*(卡口)混行卡口参数V50*/ + NET_ITC_POST_MOBILE_PARAM struPostMobile;// 移动交通触发模式 + NET_ITC_NOCOMITY_PEDESTRIAN_PARAM struNoComityPed;//不礼让行人参数 + NET_ITC_REDLIGHT_PEDESTRIAN_PARAM struRedLightPed;//行人闯红灯参数 +}NET_ITC_TRIGGER_PARAM_UNION, *LPNET_ITC_TRIGGER_PARAM_UNION; + +//单个触发参数结构 +typedef struct tagNET_ITC_SINGLE_TRIGGERCFG +{ + BYTE byEnable; //是否启用该触发模式,0-否,1-是 + BYTE byRes1[3]; + DWORD dwTriggerType; //触发类型,详见ITC_TRIGGERMODE_TYPE + NET_ITC_TRIGGER_PARAM_UNION uTriggerParam; //触发参数 + BYTE byRes[64]; +}NET_ITC_SINGLE_TRIGGERCFG, *LPNET_ITC_SINGLE_TRIGGERCFG; + +//触发参数结构 +typedef struct tagNET_ITC_TRIGGERCFG +{ + DWORD dwSize; //结构长度 + NET_ITC_SINGLE_TRIGGERCFG struTriggerParam; //单个触发参数 + BYTE byRes[32]; +}NET_ITC_TRIGGERCFG, *LPNET_ITC_TRIGGERCFG; + + +//违规检测类型宏定义 +typedef enum _ITC_VIOLATION_DETECT_TYPE_ +{ + ITC_VIOLATION_POST = 0x01, //卡口抓拍 + ITC_VIOLATION_DRIVELINE = 0x02,//压车道线抓拍 + ITC_VIOLATION_REVERSE = 0x04,//逆行抓拍 + ITC_VIOLATION_REDLIGHT = 0x08,//闯红灯抓拍 + ITC_VIOLATION_DIRECTION = 0x10,//不按导向行驶抓拍 + ITC_VIOLATION_INTERSECTION_CONGEST = 0x20,//路口滞留抓拍 + ITC_VIOLATION_NONDRIVEWAY = 0x40, //机占非抓拍 + ITC_VIOLATION_CHANGELANE = 0x80, //违法变道 + ITC_VIOLATION_BAN = 0x100, //违法禁令 + ITC_VIOLATION_INTERSECTION_PARK=0x200,//红灯越线 + ITC_VIOLATION_GREEN_PARK=0x400,//绿灯停车 + ITC_VIOLATION_HIGH_SPEED = 0x800, /*超速*/ + ITC_VIOLATION_LOW_SPEED = 0x1000, /*低速*/ + ITC_VIOLATION_EMERGENCY = 0x2000, /*占用应急车道*/ + ITC_VIOLATION_TURN_AROUND = 0x8000,/*违法掉头*/ + ITC_VIOLATION_CONGESTION = 0x10000 /*拥堵*/ +}ITC_VIOLATION_DETECT_TYPE; + + +//违规检测参数结构 +typedef struct tagNET_ITC_VIOLATION_DETECT_PARAM +{ + DWORD dwVioDetectType; //违规检测类型, 按位表示, 详见ITC_VIOLATION_DETECT_TYPE ,0-不启用,1-启用 + BYTE byDriveLineSnapTimes; //压车道线抓拍张数,2-3 + BYTE byReverseSnapTimes; //逆行抓拍,2-3 + WORD wStayTime; //机占非停留时间(该时间后抓拍),单位s + BYTE byNonDriveSnapTimes;//机占非抓拍张数2-3 + BYTE byChangeLaneTimes;//违法变道抓拍张数 2-3 + BYTE bybanTimes;//违法禁令抓拍张数2-3 + BYTE byDriveLineSnapSen;// 压线灵敏度(0~100)(3.7Ver) + WORD wSnapPosFixPixel; //第2,3张抓拍位置最小偏移(违反信号灯时起效)(单位:像素) 命名需改进 + BYTE bySpeedTimes;//违法超速抓拍张数2-3(3.8Ver) + BYTE byTurnAroundEnable;//违章掉头使能 0~关闭 1~开启 + BYTE byThirdPlateRecogTime;//第三张牌识时间 0~180s + BYTE byPostSnapTimes;//卡口抓拍张数,1-2张 + BYTE byRes1[18]; + WORD wStopLineDis; //电警第2张违规图片与停止线的最短距离,[0,300]单位(像素) + BYTE byRes[14]; +}NET_ITC_VIOLATION_DETECT_PARAM, *LPNET_ITC_VIOLATION_DETECT_PARAM; + +//关联车道方向类型定义 +typedef enum _ITC_RELA_LANE_DIRECTION_TYPE_ +{ + ITC_RELA_LANE_DIRECTION_UNKNOW = 0, //其它 + ITC_RELA_LANE_EAST_WEST = 1, //从东向西 + ITC_RELA_LANE_WEST_EAST = 2, //从西向东 + ITC_RELA_LANE_SOUTH_NORTH = 3, //从南向北 + ITC_RELA_LANE_NORTH_SOUTH = 4, //从北向南 + ITC_RELA_LANE_EASTSOUTH_WESTNORTH = 5, //从东南向西北 + ITC_RELA_LANE_WESTNORTH_EASTSOUTH = 6, //从西北向东南 + ITC_RELA_LANE_EASTNORTH_WESTSOUTH = 7, //从东北向西南 + ITC_RELA_LANE_WESTSOUTH_EASTNORTH = 8 //从西南向东北 +} ITC_RELA_LANE_DIRECTION_TYPE; + + +//车道用途类型定义 +typedef enum _ITC_LANE_USEAGE_TYPE_ +{ + ITC_LANE_USEAGE_UNKNOW = 0, //未知 + ITC_LANE_CARRIAGEWAY = 1, //正常车道 + ITC_LANE_BUS = 2, //公交车专用道 + ITC_LANE_FAST = 3, //快车道 + ITC_LANE_SLOW = 4, //慢车道 + ITC_LANE_MOTOR = 5, //摩托车道 + ITC_LANE_NONMOTOR = 6, //非机动车道 + ITC_LANE_REVERSE_LANE = 7, //反向车道 + ITC_LANE_BAN_TRUCKS = 8, // 禁止货车车道 + ITC_LANE_MIX = 9, //混合车道 + ITC_LANE_EMERGENCY = 10, //应急车道 + ITC_LANE_BAN_LEFT = 11, // 禁左车道 + ITC_LANE_BAN_RIGHT = 12 // 禁右车道 +}ITC_LANE_USEAGE_TYPE; + +//车道方向类型定义 +typedef enum _ITC_LANE_DIRECTION_TYPE_ +{ + ITC_LANE_DIRECTION_UNKNOW = 0, //未知 + ITC_LANE_LEFT = 1, //左转 + ITC_LANE_STRAIGHT = 2, //直行 + ITC_LANE_LEFT_STRAIGHT = 3, //左转+直行 + ITC_LANE_RIGHT = 4, //右转 + ITC_LANE_LEFT_RIGHT = 5, //左转+右转 + ITC_LANE_RIGHT_STRAIGHT = 6, //右转+直行 + ITC_LANE_LEFT_RIGHT_STRAIGHT = 7, //左转+右转+直行 + ITC_LANE_LEFT_WAIT = 9, //左转待行 + ITC_LANE_STRAIGHT_WAIT = 10, //直行待行 + ITC_LANE_FORWARD = 11, //正向行驶 + ITC_LANE_BACKWARD = 12, //背向行驶 + ITC_LANE_BOTHWAY = 13, //双向行驶 + ITC_LANE_STRAIGHT_WAIT_RIGHT = 14 //直行待行 + 右转 +}ITC_LANE_DIRECTION_TYPE; + +//车辆行驶方向类型定义 +typedef enum _ITC_LANE_CAR_DRIVE_DIRECT_ +{ + ITC_LANE_DRIVE_UNKNOW = 0, //未知 + ITC_LANE_DRIVE_UP_TO_DOWN = 1, //从上往下行驶(下行) + ITC_LANE_DRIVE_DOWN_TO_UP = 2 //从下往上行驶(上行) +}ITC_LANE_CAR_DRIVE_DIRECT; + +//线类型定义 +typedef enum _ITC_LINE_TYPE_ +{ + ITC_LINT_UNKNOW = 0, //未知 + ITC_LINE_WHITE = 1, //车道间的白实线 + ITC_LINE_STOP = 2, //车道停止线 + ITC_LINE_SINGLE_YELLOW = 3, //单黄线 + ITC_LINE_DOUBLE_YELLOW = 4, //双黄线 + ITC_LINE_GUARD_RAIL = 5, //车道线上有护栏 + ITC_LINE_NO_CROSS = 6, //车辆无法跨越的车道线 + ITC_LINE_DOTTED = 7 //虚线 +}ITC_LINE_TYPE; + + +//单个车道视频电警触发参数结构 +typedef struct tagNET_ITC_LANE_VIDEO_EPOLICE_PARAM +{ + BYTE byLaneNO; //关联的车道号 + BYTE bySensitivity; //线圈灵敏度,[1,100] + BYTE byEnableRadar;//启用雷达测试0-不启用,1-启用 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + NET_ITC_LANE_LOGIC_PARAM struLane; //车道参数 + NET_ITC_VIOLATION_DETECT_PARAM struVioDetect; //违规检测参数 + NET_ITC_VIOLATION_DETECT_LINE struLine; //违规检测线 + NET_ITC_POLYGON struPlateRecog; //牌识区域参数 + BYTE byRecordEnable;//闯红灯周期录像标志,0-不录像,1-录像 + BYTE byRecordType;//闯红灯录像类型,0-预录,1-延时录像 + BYTE byPreRecordTime;//闯红灯录像片段预录时间(默认0),单位:秒 + BYTE byRecordDelayTime;//闯红灯录像片段延时时间(默认0),单位:秒 + BYTE byRecordTimeOut;//闯红灯周期录像超时时间(秒) + BYTE byCarSpeedLimit; //车速限制值,单位km/h + BYTE byCarSignSpeed;//标志限速,单位km/h + BYTE bySnapPicPreRecord; //抓拍图片预录时间点;0-默认值(第二张图片),1-第一张图片,2-第二张图片,3-第三张图片 + NET_ITC_INTERVAL_PARAM struInterval;//抓拍间隔参数(20byte) + BYTE byRes[36]; +}NET_ITC_LANE_VIDEO_EPOLICE_PARAM, *LPNET_ITC_LANE_VIDEO_EPOLICE_PARAM; + +//视频电警触发参数结构 +typedef struct tagNET_ITC_VIDEO_EPOLICE_PARAM +{ + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byLaneNum; //识别的车道个数 + BYTE byLogicJudge;//闯红灯违规判断逻辑,设置值为:0-按方向,1-按车道 + BYTE byRes1; + NET_ITC_PLATE_RECOG_PARAM struPlateRecog; //牌识参数 + NET_ITC_TRAFFIC_LIGHT_PARAM struTrafficLight; //交通信号灯参数 + NET_ITC_LANE_VIDEO_EPOLICE_PARAM struLaneParam[MAX_ITC_LANE_NUM]; //单车道参数 + NET_ITC_LINE struLaneBoundaryLine; //车道边界线(最右边车道的边界线) + NET_ITC_LINE struLeftLine; //左转弯分界线 + NET_ITC_LINE struRightLine; //右转弯分界线 + NET_ITC_LINE struTopZebraLine; //上部斑马线 + NET_ITC_LINE struBotZebraLine; //下部斑马线 + BYTE byRes[32]; +}NET_ITC_VIDEO_EPOLICE_PARAM, *LPNET_ITC_VIDEO_EPOLICE_PARAM; + +typedef union tagNET_ITC_VIDEO_TRIGGER_PARAM_UNION +{ + DWORD uLen[1150]; + NET_ITC_VIDEO_EPOLICE_PARAM struVideoEP; //视频电警参数 +}NET_ITC_VIDEO_TRIGGER_PARAM_UNION, *LPNET_ITC_VIDEO_TRIGGER_PARAM_UNION; + +typedef struct tagNET_ITC_VIDEO_TRIGGER_PARAM +{ + DWORD dwSize; + DWORD dwMode; //触发模式,详见ITC_TRIGGERMODE_TYPE + NET_ITC_VIDEO_TRIGGER_PARAM_UNION uVideoTrigger; //触发模式参数 + BYTE byRes[32]; +}NET_ITC_VIDEO_TRIGGER_PARAM, *LPNET_ITC_VIDEO_TRIGGER_PARAM; + +typedef struct tagNET_DVR_STATUS_DETECTCFG +{ + DWORD dwSize; //结构长度 + BYTE byEnableTrigIODetect; //开启触发IO状态检测,1-是,0-否 + BYTE byEnableFlashOutDetect; //开启同步输出状态检测,1-是,0-否 + BYTE byEnableRS485Detect; //开启RS485接收状态检测,1-是,0-否 + BYTE byEnableTrafficLightDetect;//开启交通灯状态检测,1-是,0-否 + BYTE byRes[28]; +}NET_DVR_STATUS_DETECTCFG, *LPNET_DVR_STATUS_DETECTCFG; + +typedef enum _ITC_STATUS_DETECT_TYPE_ +{ + ITC_STATUS_DETECT_NULL = 0, //未知 + ITC_STATUS_DETECT_TRIGGERIO, //触发IO + ITC_STATUS_DETECT_FLASHOUT, //同步输出 + ITC_STATUS_DETECT_RS485, //RS485 + ITC_STATUS_DETECT_TRIGGERTYPE, //触发类型(保留) + ITC_STATUS_DETECT_TRAFFICLIGHT_COLOR, //交通灯(区分颜色) + ITC_STATUS_DETECT_TRAFFICLIGHT_TURN //交通灯(区分转向) +}ITC_STATUS_DETECT_TYPE; + +typedef struct tagNET_ITC_TRIGGERIO_INFO +{ + BYTE byTriggerIOIndex[MAX_IOIN_NUM]; //触发IO号 + BYTE byRes[40]; +}NET_ITC_TRIGGERIO_INFO, *LPNET_ITC_TRIGGERIO_INFO; + +typedef struct tagNET_ITC_FLASHOUT_INFO +{ + BYTE byFlashOutIndex[MAX_IOOUT_K_NUM]; //同步输出号 + BYTE byRes[40]; +}NET_ITC_FLASHOUT_INFO, *LPNET_ITC_FLASHOUT_INFO; + +typedef struct tagNET_ITC_SERIAL_CHECKINFO +{ + BYTE bySerialIndex[MAX_ITC_SERIALCHECK_NUM]; //485串口校验结果,0-无效,1-有效, bySerialIndex[0]表示正确的头, bySerialIndex[1]表示正确的尾 + BYTE byRes[40]; +}NET_ITC_SERIAL_CHECKINFO, *LPNET_ITC_SERIAL_CHECKINFO; + +typedef struct tagNET_ITC_TRIGGERTYPE_INFO +{ + BYTE byTrigTypeIndex; //触发类型值 + BYTE byRes[47]; +}NET_ITC_TRIGGERTYPE_INFO, *LPNET_ITC_TRIGGERTYPE_INFO; + +//视频电警 +typedef struct tagNET_ITC_TRAFFIC_LIGHT_COLOR +{ + BYTE byLeftLight;//左转灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byRightLight; //右转灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byStraightLight; //直行灯,0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byRes[45]; +}NET_ITC_TRAFFIC_LIGHT_COLOR, *LPNET_ITC_TRAFFIC_LIGHT_COLOR; + +//非视频电警 +typedef struct tagNET_ITC_TRAFFIC_LIGHT_TURN +{ + BYTE byLightType[MAX_ITC_LANE_NUM];// 0 表示无效,1为红灯 2为绿灯 3 黄灯 4灯都不亮 + BYTE byRes[42]; +} NET_ITC_TRAFFIC_LIGHT_TURN, *LPNET_ITC_TRAFFIC_LIGHT_TURN; + +typedef union tagNET_ITC_STATUS_UNION +{ + BYTE uLen[48]; //参数 + NET_ITC_TRIGGERIO_INFO struTrigIO; //触发IO口号 + NET_ITC_FLASHOUT_INFO struFlashOut; //同步输出 + NET_ITC_SERIAL_CHECKINFO struSerial; //串口 + NET_ITC_TRIGGERTYPE_INFO struTrigType; //触发类型(保留) + NET_ITC_TRAFFIC_LIGHT_COLOR struTrafficLightColor; //交通灯(区分颜色)对应类型ITC_STATUS_DETECT_TRAFFICLIGHT_COLOR + NET_ITC_TRAFFIC_LIGHT_TURN struTrafficLightTurn;//交通灯(区分转向)对应类型ITC_STATUS_DETECT_TRAFFICLIGHT_TURN +}NET_ITC_STATUS_UNION, *LPNET_ITC_STATUS_UNION; + +typedef struct tagNET_ITC_STATUS_DETECT_RESULT +{ + ITC_STATUS_DETECT_TYPE dwStatusType;//状态检测类型,详见ITC_STATUS_DETECT_TYPE + NET_ITC_STATUS_UNION uStatusParam; //状态检测结果 + DWORD dwHoldTime; //灯亮持续时间(保留),单位:ms + BYTE byRes[32]; +}NET_ITC_STATUS_DETECT_RESULT, *LPNET_ITC_STATUS_DETECT_RESULT; + +typedef struct tagNET_DVR_SETUPALARM_PARAM +{ + DWORD dwSize; + BYTE byLevel; //布防优先级,0-一等级(高),1-二等级(中),2-三等级(低) + BYTE byAlarmInfoType; //上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 + BYTE byRetAlarmTypeV40; //0--返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, 1--设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO + BYTE byRetDevInfoVersion; //CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 + BYTE byRetVQDAlarmType; //VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM + //1-表示人脸侦测报警扩展(INTER_FACE_DETECTION),0-表示原先支持结构(INTER_FACESNAP_RESULT) + BYTE byFaceAlarmDetection; + //Bit0- 表示二级布防是否上传图片: 0-上传,1-不上传 + //Bit1- 表示开启数据上传确认机制;0-不开启,1-开启 + //Bit6- 表示雷达检测报警(eventType:radarDetection)是否开启实时上传;0-不开启,1-开启(用于web插件实时显示雷达目标) + BYTE bySupport; + //断网续传类型 + //bit0-车牌检测(IPC) (0-不续传,1-续传) + //bit1-客流统计(IPC) (0-不续传,1-续传) + //bit2-热度图统计(IPC) (0-不续传,1-续传) + //bit3-人脸抓拍(IPC) (0-不续传,1-续传) + //bit4-人脸对比(IPC) (0-不续传,1-续传) + BYTE byBrokenNetHttp; + WORD wTaskNo; //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) + BYTE byDeployType; //布防类型:0-客户端布防,1-实时布防 + BYTE bySubScription; //订阅,按位表示,未开启订阅不上报 //占位 + //Bit7-移动侦测人车分类是否传图;0-不传图(V30上报),1-传图(V40上报) + BYTE byRes1[2]; + BYTE byAlarmTypeURL;//bit0-表示人脸抓拍报警上传(INTER_FACESNAP_RESULT);0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) + //bit1-表示EVENT_JSON中图片数据长传类型;0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断) + //bit2 - 人脸比对(报警类型为COMM_SNAP_MATCH_ALARM)中图片数据上传类型:0 - 二进制传输,1 - URL传输 + //bit3 - 异常行为检测(报警类型为COMM_ALARM_RULE)中图片数据上传类型:0 - 二进制传输,1 - URL传输,本字段设备是否支持,对应软硬件能力集中节点是否返回且为true + BYTE byCustomCtrl;//Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传 +}NET_DVR_SETUPALARM_PARAM, *LPNET_DVR_SETUPALARM_PARAM; + +typedef struct tagNET_DVR_SETUPALARM_PARAM_V50 +{ + DWORD dwSize; + BYTE byLevel; //布防优先级,0-一等级(高),1-二等级(中),2-三等级(低) + BYTE byAlarmInfoType; //上传报警信息类型(抓拍机支持),0-老报警信息(NET_DVR_PLATE_RESULT),1-新报警信息(NET_ITS_PLATE_RESULT)2012-9-28 + BYTE byRetAlarmTypeV40; //0--返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO, 1--设备支持NET_DVR_ALARMINFO_V40则返回NET_DVR_ALARMINFO_V40,不支持则返回NET_DVR_ALARMINFO_V30或NET_DVR_ALARMINFO + BYTE byRetDevInfoVersion; //CVR上传报警信息回调结构体版本号 0-COMM_ALARM_DEVICE, 1-COMM_ALARM_DEVICE_V40 + BYTE byRetVQDAlarmType; //VQD报警上传类型,0-上传报报警NET_DVR_VQD_DIAGNOSE_INFO,1-上传报警NET_DVR_VQD_ALARM + //1-表示人脸侦测报警扩展(INTER_FACE_DETECTION),0-表示原先支持结构(INTER_FACESNAP_RESULT) + BYTE byFaceAlarmDetection; + //Bit0- 表示二级布防是否上传图片: 0-上传,1-不上传 + //Bit1- 表示开启数据上传确认机制;0-不开启,1-开启 + //Bit6- 表示雷达检测报警(eventType:radarDetection)是否开启实时上传;0-不开启,1-开启(用于web插件实时显示雷达目标) + BYTE bySupport; + //断网续传类型 + //bit0-车牌检测(IPC) (0-不续传,1-续传) + //bit1-客流统计(IPC) (0-不续传,1-续传) + //bit2-热度图统计(IPC) (0-不续传,1-续传) + //bit3-人脸抓拍(IPC) (0-不续传,1-续传) + //bit4-人脸对比(IPC) (0-不续传,1-续传) + //bit5-JSON报警透传(IPC) (0-不续传,1-续传) + //bit6-热度图按人员停留时间统计数据上传事件(0-不续传,1-续传) + //bit7-热度图按人数统计数据上传事件的确认机制(0-不续传,1-续传) + BYTE byBrokenNetHttp; + WORD wTaskNo; //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应 同时 下发任务结构 NET_DVR_VEHICLE_RECOG_COND中的字段dwTaskNo对应) + BYTE byDeployType; //布防类型:0-客户端布防,1-实时布防 + BYTE bySubScription; //订阅,按位表示,未开启订阅不上报 //占位Bit7-移动侦测人车分类是否传图;0-不传图(V30上报),1-传图(V40上报) + //断网续传响应类型V60版本 + //bit0-AID事件(COMM_ALARM_AID_V41) (0-不续传,1-续传) + //bit1-TFS事件(COMM_ALARM_TFS) (0-不续传,1-续传) + //bit2-TPS统计过车事件(COMM_ALARM_TPS_STATISTICS) (0-不续传,1-续传) + //bit3-异常行为检测(COMM_ALARM_RULE) (0-不续传,1-续传) + BYTE byBrokenNetHttpV60; + BYTE byRes1; + BYTE byAlarmTypeURL;//bit0-表示人脸抓拍报警上传(INTER_FACESNAP_RESULT);0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断,同时设备需要支持URL的相关服务,当前是”云存储“) + //bit1-表示EVENT_JSON中图片数据长传类型;0-表示二进制传输,1-表示URL传输(设备支持的情况下,设备支持能力根据具体报警能力集判断) + //bit2 - 人脸比对(报警类型为COMM_SNAP_MATCH_ALARM)中图片数据上传类型:0 - 二进制传输,1 - URL传输 + //bit3 - 异常行为检测(报警类型为COMM_ALARM_RULE)中图片数据上传类型:0 - 二进制传输,1 - URL传输,本字段设备是否支持,对应软硬件能力集中节点是否返回且为true + BYTE byCustomCtrl;//Bit0- 表示支持副驾驶人脸子图上传: 0-不上传,1-上传 + BYTE byRes4[128]; +}NET_DVR_SETUPALARM_PARAM_V50, *LPNET_DVR_SETUPALARM_PARAM_V50; + +typedef struct tagNET_ITC_VIDEO_TRIGGER_COND +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwTriggerMode; //视频触发模式类型,详见ITC_TRIGGERMODE_TYPE + BYTE byRes[16]; +}NET_ITC_VIDEO_TRIGGER_COND, *LPNET_ITC_VIDEO_TRIGGER_COND; + +//条件结构 +typedef struct tagNET_ITC_FTP_TYPE_COND +{ + DWORD dwChannel;//通道号 + BYTE byWorkMode; // 0-FTP1(主FTP),1-FTP2(备FTP) + BYTE byRes[7]; +}NET_ITC_FTP_TYPE_COND, *LPNET_ITC_FTP_TYPE_COND; + +//配置结构 +typedef struct tagNET_ITC_FTP_CFG +{ + DWORD dwSize; + BYTE byEnable; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 + // 控制unionServer是使用实际地址还是域名 + WORD wFTPPort; /*端口*/ + union + { + struct + { + BYTE szDomain[MAX_DOMAIN_NAME];//服务器地址,域名 + BYTE byRes1[80]; + }struDomain; + struct + { + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 + } struAddrIP; + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 + BYTE szUserName[NAME_LEN]; /*用户名*/ + BYTE szPassWORD[PASSWD_LEN]; /*密码*/ + BYTE byRes4; // 0-FTP1(主FTP),1-FTP2(备FTP) + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, + 1 = 使用1级目录,2=使用2级目录, + 3 = 使用3级目录,4=使用4级目录*/ + BYTE byIsFilterCarPic;/*车牌小图是否上传,0-上传,1-不上传*/ + BYTE byUploadDataType;//0-全部,1-卡口,2-违章 (单FTP时默认选择全部,双FTP时支持卡口,违章的选择) + NET_DVR_PICTURE_NAME struPicNameRule;/* 图片命名规则 */ + BYTE byTopDirMode; /*一级目录, 0x1 = 使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE bySubDirMode; /*二级目录, 0x1 =使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE byThreeDirMode; /*三级目录, 0x1 = 使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + BYTE byFourDirMode; /*四级目录, 0x1 =使用设备名, + 0x2 = 使用设备号,0x3 =使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月), + 0x6=使用时间(年月日),0x7=违规类型,0x8=方向,0x9=地点, + 0xa=通道名,0xb=通道号,0xc=车道号0xff=自定义*/ + /*图片命名自定义 当PICNAME_ITEM_CUSTOM 时 生效*/ + BYTE szPicNameCustom[MAX_CUSTOMDIR_LEN];// (3.7Ver 生效) + BYTE szTopCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义一级目录*/ + BYTE szSubCustomDir[MAX_CUSTOMDIR_LEN];/*自定义二级目录*/ + BYTE szThreeCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义三级目录*/ + BYTE szFourCustomDir[MAX_CUSTOMDIR_LEN]; /*自定义四级目录*/ + BYTE byRes3[900]; //满足12级扩展预留 支持透传 +}NET_ITC_FTP_CFG, *LPNET_ITC_FTP_CFG; + +typedef struct tagNET_DVR_LATITUDE_PARAM +{ + BYTE byDegree;//度[0,179] + BYTE byMinute;//分[0,59] + BYTE bySec;//秒[0,59] + BYTE byRes; +}NET_DVR_LATITUDE_PARAM, *LPNET_DVR_LATITUDE_PARAM; + +typedef struct tagNET_DVR_LONGITUDE_PARAM +{ + BYTE byDegree;//度[0,179] + BYTE byMinute;//分[0,59] + BYTE bySec;//秒[0,59] + BYTE byRes; +}NET_DVR_LONGITUDE_PARAM, *LPNET_DVR_LONGITUDE_PARAM; + +typedef struct tagNET_DVR_GPS_DATACFG +{ + DWORD dwSize; + BYTE byGpsDataMode;//GPS数据获取 0-自动,1-手动 + BYTE byLongitudeType;//经度 0-东经,1-西经 + BYTE byLatitudeType;//纬度 0-南纬,1-北纬 + BYTE byRes; + NET_DVR_LATITUDE_PARAM struLatitude; /*纬度*/ + NET_DVR_LONGITUDE_PARAM struLongitude; /*经度*/ + BYTE byRes1[128]; +}NET_DVR_GPS_DATACFG,*LPNET_DVR_GPS_DATACFG; + +typedef enum _VCA_DATABASE_TYPE_ +{ + DATABASE_NULL = 0, //未知 + DATABASE_SNAP, //抓拍数据库 + DATABASE_FACE //人脸数据库 +}VCA_DATABASE_TYPE; + +typedef struct tagNET_VCA_DATABASE_PARAM +{ + DWORD dwSize; + DWORD dwDataBaseID; //数据库ID(设备生成,添加时无效,修改和删除时有效) + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + BYTE byDataBaseName[NAME_LEN]; //数据库名称 + BYTE byAttribute[64]; //数据库属性 + BYTE byRes[20]; +}NET_VCA_DATABASE_PARAM, *LPNET_VCA_DATABASE_PARAM; + +typedef struct tagNET_VCA_FIND_DATABASE_COND +{ + DWORD dwDataBaseType; //数据库类型,详见VCA_DATABASE_TYPE + BYTE byRes[12]; //保留 +}NET_VCA_FIND_DATABASE_COND, *LPNET_VCA_FIND_DATABASE_COND; + +typedef struct tagNET_VCA_DELETE_DATABASE_COND +{ + DWORD dwSize; + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + BYTE byRes[64]; //保留 +}NET_VCA_DELETE_DATABASE_COND, *LPNET_VCA_DELETE_DATABASE_COND; + +typedef struct tagNET_VCA_INQUIRE_SNAPDB_COND +{ + DWORD dwChannel;//通道号 + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + BYTE byRes[12]; //保留 +}NET_VCA_INQUIRE_SNAPDB_COND, *LPNET_VCA_INQUIRE_SNAPDB_COND; + +typedef struct tagNET_VCA_INQUIRE_SNAPRECORD_RESULT +{ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_DVR_TIME struSnapTime; //抓拍时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 +}NET_VCA_INQUIRE_SNAPRECORD_RESULT, *LPNET_VCA_INQUIRE_SNAPRECORD_RESULT; + +typedef union tagNET_VCA_DELETE_SNAPRECORD_COND_UNION +{ + NET_VCA_INQUIRE_SNAPDB_COND struAttribute; //人员信息(批量删除) + DWORD dwRecordID; //记录ID(单条删除) +}NET_VCA_DELETE_SNAPRECORD_COND_UNION, *LPNET_VCA_DELETE_SNAPRECORD_COND_UNION; + +typedef enum _VCA_DELETE_RECORD_TYPE_ +{ + DELETE_RECORD_SINGLE = 0, //单条删除 + DELETE_RECORD_BATCH //批量删除 +}VCA_DELETE_RECORD_TYPE; + +typedef struct tagNET_VCA_DELETE_SNAPRECORD_COND +{ + VCA_DELETE_RECORD_TYPE dwDeleteType; //删除记录类型 + NET_VCA_DELETE_SNAPRECORD_COND_UNION uDeleteCond; //删除参数 + BYTE byRes[40]; //保留 +}NET_VCA_DELETE_SNAPRECORD_COND, *LPNET_VCA_DELETE_SNAPRECORD_COND; + +typedef enum _VCA_SEARCH_DATABASE_TYPE_ +{ + VCA_NORMAL_SEARCH_DATABASE = 0x00000000, //普通检索 + VCA_ADVANCE_SEARCH_DATABASE = 0x00000001 //高级检索 +}VCA_SEARCH_DATABASE_TYPE; + +typedef struct tagNET_VCA_ADVANCE_SEARCH_DATABASE_COND +{ + DWORD dwDataBaseType; //数据库类型,详见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwFacePicID; //人脸图片ID + BYTE byRes[36]; +}NET_VCA_ADVANCE_SEARCH_DATABASE_COND, *LPNET_VCA_ADVANCE_SEARCH_DATABASE_COND; + +typedef union tagNET_VCA_SEARCH_DATABASE_COND_UNION +{ + DWORD uLen[25]; + NET_VCA_REGISTER_PIC struNormalFind; //普通检索 + NET_VCA_ADVANCE_SEARCH_DATABASE_COND struAdvanceFind; //高级检索 +}NET_VCA_SEARCH_DATABASE_COND_UNION, *LPNET_VCA_SEARCH_DATABASE_COND_UNION; + +typedef struct tagNET_VCA_SEARCH_DATABASE_PARAM +{ + DWORD dwSearchType; //检索类型,详见VCA_SEARCH_DATABASE_TYPE + NET_VCA_SEARCH_DATABASE_COND_UNION uSearchCond; //检索参数 + BYTE byRes[16]; +}NET_VCA_SEARCH_DATABASE_PARAM, *LPNET_VCA_SEARCH_DATABASE_PARAM; + +typedef struct tagNET_VCA_SEARCH_SNAPDB_COND +{ + DWORD dwChannel; //通道 + DWORD dwDataBaseID; //数据库ID + NET_DVR_TIME struStartTime;//开始时间 + NET_DVR_TIME struStopTime;//结束时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; //检索参数 + DWORD dwMaxSearchNum; //最大检索条数 + WORD wThreshold; //阈值,0-100 + BYTE byRes[78]; //保留 +}NET_VCA_SEARCH_SNAPDB_COND, *LPNET_VCA_SEARCH_SNAPDB_COND; + +typedef struct tagNET_VCA_SEARCH_SNAPRECORD_RESULT +{ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_DVR_TIME struSnapTime;//抓拍时间 + BYTE bySex; //性别:0-不启用,1-男,2-女 + BYTE byRes1[3]; //保留 + BYTE byStartBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //起始出生年月,如:201106 + BYTE byEndBirthDate[MAX_HUMAN_BIRTHDATE_LEN]; //截止出生年月,如201106 + BYTE byAttribute1[NAME_LEN]; //属性1 + BYTE byAttribute2[NAME_LEN]; //属性2 + float fSimilarity; //相似度,[0.001,1] + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 +}NET_VCA_SEARCH_SNAPRECORD_RESULT, *LPNET_VCA_SEARCH_SNAPRECORD_RESULT; + +typedef struct tagNET_VCA_DATARECORD_INFO +{ + DWORD dwSize; //结构体大小 + DWORD dwRecordID; //记录ID,添加时无效,修改时有效 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + NET_VCA_REGISTER_PIC struRegisterPic; //人员图片信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + BYTE byRes[32]; //保留 +}NET_VCA_DATARECORD_INFO, *LPNET_VCA_DATARECORD_INFO; + +typedef struct tagNET_VCA_FAST_DATARECORD_INFO +{ + DWORD dwSize; //结构体大小 + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + DWORD dwImageLen; //图像数据长度 + BYTE byRes[80]; //保留 + BYTE *pImage; //图像数据 +}NET_VCA_FAST_DATARECORD_INFO, *LPNET_VCA_FAST_DATARECORD_INFO; + +typedef struct tagNET_VCA_INQUIRE_DATARECORD_RESULT +{ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 +}NET_VCA_INQUIRE_DATARECORD_RESULT, *LPNET_VCA_INQUIRE_DATARECORD_RESULT; + +typedef struct tagNET_VCA_SEARCH_DATARECORD_RESULT +{ + DWORD dwSize; //结构体大小 + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + NET_VCA_HUMAN_ATTRIBUTE struAttribute; //人员信息 + BYTE byRemark1[NAME_LEN]; //备注信息1 + BYTE byRemark2[64]; //备注信息2 + float fSimilarity; //相似度,[0.001,1] + DWORD dwFacePicID; //人脸图ID + DWORD dwFacePicLen; //人脸图数据长度 + BYTE byRes[80]; //保留 + BYTE *pFacePic; //人脸图数据 +}NET_VCA_SEARCH_DATARECORD_RESULT, *LPNET_VCA_SEARCH_DATARECORD_RESULT; + +typedef struct tagNET_VCA_DATARECORD_COND +{ + DWORD dwDataBaseID; //数据库ID + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息 + BYTE byRes[80]; //保留 +}NET_VCA_DATARECORD_COND, *LPNET_VCA_DATARECORD_COND; + +typedef union tagNET_VCA_DELETE_RECORD_COND_UNION +{ + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息(批量删除) + DWORD dwRecordID; //记录ID(单条删除) +}NET_VCA_DELETE_RECORD_COND_UNION, *LPNET_VCA_DELETE_RECORD_COND_UNION; + +typedef struct tagNET_VCA_DELETE_RECORD_COND +{ + VCA_DELETE_RECORD_TYPE dwDeleteType; //删除记录类型 + NET_VCA_DELETE_RECORD_COND_UNION uDeleteCond; //删除参数 + BYTE byRes[40]; //保留 +}NET_VCA_DELETE_RECORD_COND, *LPNET_VCA_DELETE_RECORD_COND; + +typedef struct tagNET_VCA_SEARCH_FACEDB_COND +{ + DWORD dwDataBaseID; //数据库ID + NET_VCA_HUMANATTRIBUTE_COND struAttribute; //人员信息 + NET_VCA_SEARCH_DATABASE_PARAM struSearchParam; //检索参数 + DWORD dwMaxSearchNum; //最大检索条数 + WORD wThreshold; //阈值,0-100 + BYTE byRes[78]; //保留 +}NET_VCA_SEARCH_FACEDB_COND, *LPNET_VCA_SEARCH_FACEDB_COND; + +typedef struct tagNET_VCA_FIND_MATCHPIC_COND +{ + DWORD dwSize; + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + BYTE byRes[64]; //保留 +}NET_VCA_FIND_MATCHPIC_COND, *LPNET_VCA_FIND_MATCHPIC_COND; + +typedef struct tagNET_VCA_FIND_MATCHPIC_RESULT +{ + DWORD dwSize; + DWORD dwDataBaseType; //数据库类型,见VCA_DATABASE_TYPE + DWORD dwDataBaseID; //数据库ID + DWORD dwRecordID; //记录ID + DWORD dwPicLen; //图片长度 + BYTE byRes[64]; //保留 + BYTE *pPicBuffer; //图片数据指针 +}NET_VCA_FIND_MATCHPIC_RESULT, *LPNET_VCA_FIND_MATCHPIC_RESULT; + +typedef struct tagNET_DVR_REMOTECONTROL_ALARM_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + WORD wDealyTime; //延迟时间,单位s + BYTE byRes[30]; +}NET_DVR_REMOTECONTROL_ALARM_PARAM, *LPNET_DVR_REMOTECONTROL_ALARM_PARAM; + +typedef struct tagNET_DVR_REMOTECONTROL_STUDY_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[16]; +}NET_DVR_REMOTECONTROL_STUDY_PARAM, *LPNET_DVR_REMOTECONTROL_STUDY_PARAM; + +typedef struct tagNET_DVR_WIRELESS_ALARM_STUDY_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byIndex; //无线报警序号,1-8 + BYTE byRes[15]; +}NET_DVR_WIRELESS_ALARM_STUDY_PARAM, *LPNET_DVR_WIRELESS_ALARM_STUDY_PARAM; + +#define MAX_AUX_ALARM_NUM 8 //最大辅助报警个数 +#define MAX_WIRELESS_ALARM_NUM 8 //最大无线报警个数 +typedef enum _IPC_AUX_ALARM_TYPE_ +{ + IPC_AUXALARM_UNKNOW = 0, //未知 + IPC_AUXALARM_PIR = 1, //PIR报警 + IPC_AUXALARM_WIRELESS = 2, //无线报警 + IPC_AUXALARM_CALLHELP = 3 //呼救报警 +}IPC_AUX_ALARM_TYPE; + +typedef struct tagNET_DVR_AUDIO_LIMIT_ALARM_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byRes1[3]; + DWORD dwDecibelLimit; //分贝告警阀值 + NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //异常处理方式 + BYTE byRes2[24]; +}NET_IPC_AUDIO_LIMIT_ALARM_CFG,*LPNET_IPC_AUDIO_LIMIT_ALARM_CFG; + +typedef struct tagNET_DVR_BUTTON_DOWN_ALARM_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struHandleException; //异常处理方式 + BYTE byRes2[24]; +}NET_IPC_BUTTON_DOWN_ALARM_CFG,*LPNET_IPC_BUTTON_DOWN_ALARM_CFG; + +typedef struct tagNET_IPC_PIR_ALARMCFG +{ + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes[64]; +}NET_IPC_PIR_ALARMCFG, *LPNET_IPC_PIR_ALARMCFG; + +typedef struct tagNET_IPC_PIR_ALARMCFG_EX +{ + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; + BYTE byRes[1464]; +}NET_IPC_PIR_ALARMCFG_EX, *LPNET_IPC_PIR_ALARMCFG_EX; + +//呼救报警 +typedef struct tagNET_IPC_CALLHELP_ALARMCFG +{ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byRes1[3]; + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes[64]; +}NET_IPC_CALLHELP_ALARMCFG, *LPNET_IPC_CALLHELP_ALARMCFG; + +typedef struct tagNET_IPC_SINGLE_WIRELESS_ALARMCFG +{ + BYTE byAlarmName[NAME_LEN]; /* 报警名称 */ + BYTE byAlarmHandle; /* 是否处理 0-不处理 1-处理*/ + BYTE byID; //无线报警ID,1-8 + BYTE byRes1[2]; + NET_DVR_HANDLEEXCEPTION_V30 struAlarmHandleType; /* 处理方式 */ + BYTE byRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道,为1表示触发该通道 + BYTE byRes[32]; +}NET_IPC_SINGLE_WIRELESS_ALARMCFG, *LPNET_IPC_SINGLE_WIRELESS_ALARMCFG; + +typedef struct tagNET_IPC_WIRELESS_ALARMCFG +{ + NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm[MAX_WIRELESS_ALARM_NUM]; //单个无线报警参数 + BYTE byRes[32]; +}NET_IPC_WIRELESS_ALARMCFG, *LPNET_IPC_WIRELESS_ALARMCFG; + +typedef union tagNET_IPC_AUX_ALARMCFG_UNION +{ + DWORD uLen[472]; + NET_IPC_PIR_ALARMCFG_EX struPIRAlarm; //PIR报警参数 + NET_IPC_WIRELESS_ALARMCFG struWirelessAlarm; //无线报警参数 + NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //呼救报警参数 +}NET_IPC_AUX_ALARMCFG_UNION, *LPNET_IPC_AUX_ALARMCFG_UNION; + +typedef struct tagNET_IPC_SINGLE_AUX_ALARMCFG +{ + BYTE byAlarmType; //报警器类型,详见IPC_AUX_ALARM_TYPE + BYTE byRes1[3]; + NET_IPC_AUX_ALARMCFG_UNION uAlarm; //报警参数 + BYTE byRes[16]; +}NET_IPC_SINGLE_AUX_ALARMCFG, *LPNET_IPC_SINGLE_AUX_ALARMCFG; + +typedef struct tagNET_IPC_AUX_ALARMCFG +{ + DWORD dwSize; + NET_IPC_SINGLE_AUX_ALARMCFG struAlarm[MAX_AUX_ALARM_NUM]; //报警参数 + BYTE byRes[64]; +}NET_IPC_AUX_ALARMCFG, *LPNET_IPC_AUX_ALARMCFG; + +typedef union tagNET_IPC_AUXALARM_UPLOAD_UNION +{ + DWORD uLen[66]; + NET_IPC_PIR_ALARMCFG struPIRAlarm; //PIR报警参数 + NET_IPC_SINGLE_WIRELESS_ALARMCFG struWirelessAlarm; //无线报警参数 + NET_IPC_CALLHELP_ALARMCFG struCallHelpAlarm; //呼救报警参数 +}NET_IPC_AUXALARM_UPLOAD_UNION, *LPNET_IPC_AUXALARM_UPLOAD_UNION; + +typedef struct tagNET_IPC_AUXALARM_RESULT +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byAlarmType; //报警器类型,详见IPC_AUX_ALARM_TYPE + BYTE byRes1[3]; + NET_IPC_AUXALARM_UPLOAD_UNION struAuxAlarm; //报警结果参数 + BYTE byDeviceID[NAME_LEN];/*设备的ID串*/ + BYTE byRes[32]; +}NET_IPC_AUXALARM_RESULT, *LPNET_IPC_AUXALARM_RESULT; + +typedef struct tagNET_DVR_PREVIEW_DISPLAYCFG +{ + DWORD dwSize; // 结构体大小 + BYTE byCorrectMode; //校正模式,0-软件校正,1-芯片校正 + BYTE byMountType; //安装类型,0-吸顶,1-桌面,2-墙面 + /* + 0-模式1:鱼眼+全景+3PTZ (与原有非实时模式一致); + 1-模式2:鱼眼+4PTZ(与原有实时模式一致); + 2-模式3:鱼眼(主)+鱼眼(子)+3PTZ; + 3-模式4:全景展开(主码流+子码流); + 4-模式5:4PTZ; + 5-模式6:鱼眼; + 6-模式7: 经纬度全景展开模式; + 7-模式8: 4PTZ融合模式; + */ + BYTE byRealTimeOutput; //实时输出,0 -不启用,1- 启用 + BYTE byRes[61]; +}NET_DVR_PREVIEW_DISPLAYCFG, *LPNET_DVR_PREVIEW_DISPLAYCFG; + +typedef struct tagNET_DVR_REMOTECONTROL_PTZ_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwPTZCommand; //PTZ控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + DWORD dwSpeed; //控制的速度,取值范围[0,7] + DWORD dwStop; //停止动作或开始动作:0-开始;1-停止 + BYTE byRes[32]; +}NET_DVR_REMOTECONTROL_PTZ_PARAM, *LPNET_DVR_REMOTECONTROL_PTZ_PARAM; + +typedef struct tagNET_DVR_PRESET_POINT_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwPTZPresetCmd; //预置点控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + DWORD dwPresetIndex; //预置点的序号(从1开始),最多支持255个预置点 + WORD wZoomCoordinate;///<预置点窗口Zoom值 + BYTE byRes[30]; +}NET_DVR_PRESET_POINT_PARAM, *LPNET_DVR_PRESET_POINT_PARAM; + +typedef struct tagNET_DVR_PTZ_CRUISE_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwPTZCruiseCmd; //巡航控制命令 + NET_VCA_POINT struVcaPoint; //预览界面点坐标 + WORD wCruiseRoute; //巡航路径,最多支持32条路径(序号从1开始) + WORD wCruisePoint; //巡航点,最多支持32个点(序号从1开始) + WORD wInput; //不同巡航命令时的值不同,预置点(最大255)、时间(最大255)、速度(最大40) + WORD wZoomCoordinate;///<预置点窗口Zoom值 + BYTE byRes[32]; +}NET_DVR_PTZ_CRUISE_PARAM, *LPNET_DVR_PTZ_CRUISE_PARAM; + +typedef struct tagNET_DVR_WPS_PARAM +{ + DWORD dwSize; + BYTE byEnableWps; //启用WPS,0-否,1-是 + BYTE byRes[31]; +}NET_DVR_WPS_PARAM, *LPNET_DVR_WPS_PARAM; + +typedef struct tagNET_DVR_PIN_PARAM +{ + DWORD dwSize; + BYTE byPIN[8]; //PIN码 + BYTE byRes[32]; +}NET_DVR_PIN_PARAM, *LPNET_DVR_PIN_PARAM; + +typedef struct tagNET_DVR_WPS_CONNECT_PARAM_ +{ + DWORD dwSize; + BYTE byConnectType; //WPS连接方式,0-PBC,1-AP PIN + BYTE byRes1[3]; + BYTE byPIN[8]; //PIN码(WPS连接方式为AP PIN时有效) + BYTE byEssid[IW_ESSID_MAX_SIZE]; //essid(WPS连接方式为AP PIN时有效) + BYTE byRes[32]; +}NET_DVR_WPS_CONNECT_PARAM, *LPNET_DVR_WPS_CONNECT_PARAM; + +typedef struct tagNET_DVR_DECODER_JOINT_PARAM +{ + DWORD dwSize; // 结构体大小 + BYTE byJointed; // 0 没有关联 1 已经关联 + BYTE byRes1[3]; // 保留字节 + NET_DVR_IPADDR struIP; // 被关联解码器的IP地址 + WORD wPort; // 被关联解码器的端口号 + WORD wChannel; // 被关联解码器的解码通道号 + BYTE sDeviceName[NAME_LEN]; //被关联解码器的设备名称 + BYTE sChanName[NAME_LEN]; //被关联解码器的解码通道名称 + BYTE byRes2[32]; // 保留字节 +}NET_DVR_DECODER_JOINT_PARAM, *LPNET_DVR_DECODER_JOINT_PARAM; + +typedef struct tagNET_DVR_PIC_VIEW_PARAM +{ + DWORD dwSize; + NET_DVR_IPADDR struCuIp; //CU端IP地址 + WORD wPort;/*CU端口*/ + BYTE bySourceIndex; //信号源通道号 + BYTE byRes[29]; +}NET_DVR_PIC_VIEW_PARAM, *LPNET_DVR_PIC_VIEW_PARAM; + +#define DVCS_DEVICEID_LEN 16 +//2012-03-13图片回显注册消息回调 +typedef struct tagNET_DVR_PICVIEW_CALLBACKPARAM +{ + DWORD dwUserID; + BYTE sDeviceID[DVCS_DEVICEID_LEN]; + LONG nPicViewHandle; //回显句柄 + WORD wSignalIndex; //信号源索引 + WORD wHeadLen; //文件头长度 私有的码流文件头都是40 + BYTE byHeadBuf[100]; //文件头 + BYTE byRes2[32]; +}NET_DVR_PICVIEW_CALLBACKPARAM, *LPNET_DVR_PICVIEW_CALLBACKPARAM; + +#define DEVICEID_LEN 32 + +typedef struct tagNET_DVR_DEVICEID_INFO +{ + DWORD dwSize; + DWORD dwDeviceIndex; //设备序号 + BYTE byWallNo; //墙号,从1开始 + BYTE byRes1[27]; + DWORD dwChan; //通道号 + DWORD dwInputSignalIndex; //信号源索引,集中式大屏控制器使用 + BYTE byRes2[60]; +}NET_DVR_DEVICEID_INFO, *LPNET_DVR_DEVICEID_INFO; + + +typedef struct tagNET_DVR_SINGLE_NETPARAM +{ + DWORD dwSize; + BYTE byUseDhcp; //是否启用DHCP 0xff-无效 0-不启用 1-启用 + BYTE byRes1[3]; + NET_DVR_IPADDR struDevIP; // 设备IP地址 + NET_DVR_IPADDR struSubnetMask; // 设备子网掩码 + NET_DVR_IPADDR struGateway; // 设备网关 + WORD wDevPort; // 设备端口号 + BYTE byMACAddr[MACADDR_LEN]; // MAC 地址(只能获取) + BYTE byRes2[16]; +} NET_DVR_SINGLE_NETPARAM, *LPNET_DVR_SINGLE_NETPARAM; + +typedef struct tagNET_DVR_CHAN_INFO +{ + DWORD dwSize; + BYTE byValid; //0-无效 1-有效 + BYTE byRes1[3]; + BYTE sChanName[NAME_LEN]; //通道名称 + NET_DVR_COLOR struVideoColor; //信号源颜色 + WORD wResolutionX; //当前分辨率---宽 + WORD wResolutionY; //当前分辨率---高 + BYTE byRes2[40]; +} NET_DVR_CHAN_INFO, *LPNET_DVR_CHAN_INFO; + +//编码子设备信息 +typedef struct tagNET_DVR_CODEDEV_INFO +{ + NET_DVR_CHAN_INFO struChanInfo[MAX_CHANNUM/*16*/];/*设备通道信息*/ +} NET_DVR_CODEDEV_INFO, *LPNET_DVR_CODEDEV_INFO; + +//解码子设备信息 +typedef struct tagNET_DVR_DECODEDEV_INFO +{ + BYTE byRes[1408]; +} NET_DVR_DECODEDEV_INFO, *LPNET_DVR_DECODEDEV_INFO; + +//网络信号源信息 +typedef struct tagNET_DVR_NETSIGNAL_INFO +{ + DWORD dwSize; + BYTE byDevName[NAME_LEN/*32*/];//网络信号源名称 + NET_DVR_PU_STREAM_CFG struPuStream; + BYTE byValid; //是否有效,0-无效,删除时设为0 1-有效,添加和修改时设为1/ + BYTE byRes1[3]; //保留 + BYTE sGroupName[NAME_LEN/*32*/];//网络信号源所在组的组名,网络信号源根据这个组名来分类 + WORD wResolutionX; //当前分辨率---宽 + WORD wResolutionY; //当前分辨率---高 + BYTE byRes2[24]; +}NET_DVR_NETSIGNAL_INFO, *LPNET_DVR_NETSIGNAL_INFO; + +typedef struct tagNET_DVR_NETSIGNALDEV_INFO +{ + NET_DVR_NETSIGNAL_INFO struDevInfo; + BYTE byRes1[816]; +}NET_DVR_NETSIGNALDEV_INFO, *LPNET_DVR_NETSIGNALDEV_INFO; + +typedef union tagNET_DVR_DIFFDEV_INFO +{ + NET_DVR_CODEDEV_INFO struCodeDevInfo; //编码设备信息 + NET_DVR_DECODEDEV_INFO struDecodeDevInfo; //解码设备信息 + NET_DVR_NETSIGNALDEV_INFO struNetSignalInfo; //网络信号源信息 +} NET_DVR_DIFFDEV_INFO, *LPNET_DVR_DIFFDEV_INFO; + +/*注册设备信息*/ +typedef enum tagNET_DVCS_DEVICE_TYPE +{ + NET_DVR_BNC_PROC = 1, /* BNC处理器 */ + NET_DVR_RGB_PROC, /* RGB处理器 */ + NET_DVR_STP_PROC, /* 转码处理器 */ + NET_DVR_DISP_PROC, /* 显示处理器 */ + NET_DVR_NETSIGNAL, //网络信号源 + NET_DVR_SDI_PROC, //SDI处理器 + NET_DVR_BIW_PROC, //8路BNC处理器 + NET_DVR_DON_PROC, //显示处理器 + NET_DVR_TVI_PROC, //TVI处理器 + NET_DVR_DI2_PROC, //2路DVI输入处理器 + NET_DVR_DO2_PROC, //2路DVI输出设备 + NET_DVR_UHDI_PROC, //DP/HDMI 1路4K超高清输入设备 + NET_DVR_YI2_PROC, //两路YPbPr输入板 + NET_DVR_HI2_PROC, // HDMI输入节点(2路) + NET_DVR_VI2_PROC, // VGA输入节点(2路) + NET_DVR_SI2_PROC, // SDI输入节点(2路) + NET_DVR_HO2_PROC, // HDMI输出节点(2路) + NET_DVR_S24G_PROC, // C20N专用千兆交换机(24路) + NET_DVR_S24X_PROC // C20N专用万兆交换机(24路) +}NET_DVCS_DEVICE_TYPE; + +typedef struct tagNET_DVR_SINGLE_DEV_INFO +{ + DWORD dwSize; + DWORD dwSoftVersion; /*设备软件版本号(只能获取) 最高8位为主版本号,次高8位为次版本号,低16位为修复版本号*/ + DWORD dwSoftwareBuildDate; //版本编译日期Build, 0xYYYYMMDD + BYTE byUseInSys; /*是否在系统中使用*/ + BYTE byDevStatus; /*设备当前状态,0-下线,1-上线(只能获取)*/ + BYTE byDeviceType; /*设备类型(只能获取) 见DEVICE_TYPE*/ + BYTE byRes1[17]; + BYTE sDevName[NAME_LEN]; /*设备名称*/ + NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET]; /*设备网络参数*/ + BYTE sSerialNumber[SERIALNO_LEN]; /*设备序列号*/ + NET_DVR_DIFFDEV_INFO struSubDevInfo; /*设备信息*/ + DWORD dwDeviceIndex; //设备序号,相对于C20N或Y10等设备的全局编号 + DWORD dwSubBoardNo; //分布式设备所属的子板编号,相对于C20N或Y10等设备的全局编号,从1开始,为0时该字段无效,子板编号默认为1 + BYTE bySubSysNo; //分布式设备所属的子板上的子系统编号,相对于子板全局,从1开始,为0时该字段无效,子系统号默认为1 + BYTE byRes3[3]; + WORD wStartAudioTalkChanNo; //分布式设备上语音对讲的起始通道号 + WORD wAudioTalkChanNum; //分布式设备上语音对讲通道号的数量 + BYTE byRes2[36]; +} NET_DVR_SINGLE_DEV_INFO, *LPNET_DVR_SINGLE_DEV_INFO; + +typedef struct tagNET_DVR_DEVLIST +{ + DWORD dwSize; + DWORD dwDevNums;//设备返回的分布式子设备数量 + BYTE *pBuffer; + BYTE byRes1[3]; + DWORD dwBufLen;//所分配指针长度,输入参数 + BYTE byRes2[64]; +} NET_DVR_DEVLIST,*LPNET_DVR_DEVLIST; + +typedef struct tagNET_DVR_DEV_BASE_INFO +{ + DWORD dwSize; + BYTE byEnable; /*是否在系统中使用*/ + BYTE byDeviceType; /*设备类型(只能获取)*/ + BYTE byRes1[2]; + BYTE sDevName[NAME_LEN]; /*设备名称*/ + BYTE byRes2[24]; +} NET_DVR_DEV_BASE_INFO,*LPNET_DVR_DEV_BASE_INFO; + +/*网络配置信息*/ +typedef struct tagNET_DVR_NETPARAM +{ + DWORD dwSize; + NET_DVR_SINGLE_NETPARAM struEtherNet[MAX_ETHERNET];//以太网口 + BYTE byRes[64]; +} NET_DVR_NETPARAM, *LPNET_DVR_NETPARAM; + +// 绑定屏幕和设备关系(16个字节) +typedef struct tagNET_DVR_DISP_SCREEN +{ + DWORD dwSize; + WORD wScreenID; // 屏幕ID号, ID号从1开始 + BYTE byWallNo; // 电视墙号 + BYTE byRes1; // 保留1 + DWORD dwDeviceIndex; // 输出设备序号 + BYTE byRes2[16]; // 保留2 +}NET_DVR_DISP_SCREEN, *LPNET_DVR_DISP_SCREEN; + +// 屏幕控制 +typedef struct tagNET_DVR_TEXTSHOW +{ + DWORD dwSize; + BYTE byShowText;//是否显示文字,1-显示文字,0-不显示文字 + BYTE byRes[35]; +}NET_DVR_TEXTSHOW, *LPNET_DVR_TEXTSHOW; + +typedef struct tagNET_DVR_SCREENLIST +{ + DWORD dwSize; + BYTE byWallNo; //电视墙号,从1开始 + BYTE byRes[11]; + DWORD dwScreenNums;//设备返回的映射显示屏数量 + BYTE *pBuffer; + DWORD dwBufLen;//所分配指针长度,输入参数 +} NET_DVR_SCREENLIST,*LPNET_DVR_SCREENLIST; + +typedef struct tagNET_DVR_OPERATE_DEVICE +{ + DWORD dwSize; + DWORD dwSubCommand; //设置设备的命令,1-设备开始升级,2-停止升级 + DWORD dwDeviceIndex;//设备序号 + BYTE byRes[44]; +}NET_DVR_OPERATE_DEVICE, *LPNET_DVR_OPERATE_DEVICE; + +//设备升级 +typedef struct tagNET_DVR_UPGRADE_STATE +{ + DWORD dwProgress; // 0-100 + BYTE byState; //升级进度:1-升级完成 2-正在升级 3-升级失败 + BYTE byRes2[31]; +}NET_DVR_UPGRADE_STATE, *LPNET_DVR_UPGRADE_STATE; +typedef void (CALLBACK *DVCS_UPGRADESTATE_CB)(LONG nUpgradeHandle, BYTE *pBuffer, DWORD dwBufSize, void* pUser); + +typedef enum +{ + NET_DVR_DATA_BMP = 0, + NET_DVR_START_CALLBACK, + NET_DVR_STREAM_SYSHEAD, + NET_DVR_STREAM_DATA +}PIC_PREVIEW_DATATYPE; + +typedef struct tagNET_DVR_START_PIC_VIEW_INFO +{ + DWORD dwSize; + DWORD dwSignalIndex; //信号源序号,该参数用于大屏控制器,其他设备该值设为0 + DWORD dwDeviceIndex;//设备序号 + BYTE byRes1[12]; + BYTE byChanIndex; //通道号 + BYTE byRes2[3]; + //视频综合平台回显参数 + DWORD dwScreenNum; //大屏序号:从零开始 + DWORD dwLayer; //图层号:从零开始 + DWORD dwResolution;//回显分辨率,1-QCIF,2-CIF,3-D1 + BYTE byFrame;//帧率,单位:帧/秒 + BYTE bySupportStreamView; //客户端是否支持码流回显,0-不支持,1-支持 + BYTE byRes3[14]; +}NET_DVR_START_PIC_VIEW_INFO, *LPNET_DVR_START_PIC_VIEW_INFO; + +typedef struct tagNET_DVR_DVCS_STATE_ALARM +{ + DWORD dwSize; + BYTE byAlarmType; // 报警类型,1-设备上线,2-设备离线 3-服务器上线 4-服务器离线 5-管理员登陆 6-预案开始,7-预案结束,8-分辨率变化,9-图像切割失败,10-设备资源不足,11-温度异常 12-窗口大小与信号源分辨率不符合*/ + BYTE byDeviceType; // 设备类型 见定义NET_DVCS_DEVICE_TYPE */ + BYTE byWallNo; // 墙号,从1开始, 0表示无效 + BYTE byDeviceChanIndex; // 设备通道号,0表示无效,其他值表示通道号 + DWORD dwDeviceIndex; // 设备序号, 0表示无效 + WORD wResolutionX; // 分辨率-宽 0表示无效 + WORD wResolutionY; // 分辨率-高 0表示无效 + WORD wTemperature; // 设备温度 单位:摄氏度, 0表示无效 + BYTE byRes[86]; +}NET_DVR_DVCS_STATE_ALARM, *LPNET_DVR_DVCS_STATE_ALARM; + +typedef struct tagNET_DVR_PIC_ADJUST +{ + DWORD dwSize; + BYTE bySubCommand; //见宏定义DECODEPIC_LEFTADJUST等 + BYTE byScale; //调整的量值 + BYTE byPictureProportion; //图像缩放比例 0-无效 1-4:3, 2-16:9 + BYTE byRes[29]; +}NET_DVR_PIC_ADJUST, *LPNET_DVR_PIC_ADJUST; + +typedef struct tagNET_DVR_PICTURE_PARAM +{ + DWORD dwSize; + BYTE byControlCommand; //切换命令,1-显示,2-隐藏,3-全部删除(针对GIF图片 ) + BYTE byUseType; //图片类型,1-OSD 2-底图,3-GIF + BYTE byWallNo; //电视墙墙号,从1开始 + BYTE byPictureNo; //图片序号 + BYTE byRes[64]; +}NET_DVR_PICTURE_PARAM, *LPNET_DVR_PICTURE_PARAM; + +// 76SP设备POE通道添加方式配置 +typedef struct tagNET_DVR_POE_CHANNEL_ADD_MODE +{ + DWORD dwSize; //结构体大小 + BYTE byAddMode; //添加方式 0: 即插即用 1: 手动添加 + BYTE byRes1[127]; //保留 +}NET_DVR_POE_CHANNEL_ADD_MODE, *LPNET_DVR_POE_CHANNEL_ADD_MODE; + +#define MAX_ESATA_NUM 16 +#define MAX_MINISAS_NUM 96 + +typedef struct tagNET_DVR_ESATA_MINISAS_USAGE +{ + DWORD dwSize; + BYTE byESATAUsage[MAX_ESATA_NUM]; // 数组索引表示第几个eSATA,0:默认备份 1:默认录像 + BYTE byMiniSASUsage[MAX_MINISAS_NUM]; // 数组索引表示第几个miniSAS,0:默认备份 1:默认录像 + BYTE byRes[32]; +}NET_DVR_ESATA_MINISAS_USAGE, *LPNET_DVR_ESATA_MINISAS_USAGE; + +#define MAX_DISK_NUM 128 + +typedef struct tagNET_DVR_BACKUP_LOG_PARAM +{ + DWORD dwSize; + BYTE byDiskDesc[DESC_LEN_32]; //备份磁盘描述 + BYTE byHardDisk[MAX_DISK_NUM]; //需备份的硬盘号,备份几个取前几个 + BYTE byBackupHardDiskNum; //需备份的硬盘个数 + BYTE byContinue; //是否继续备份,0-不继续,1-继续 + BYTE byAllLogBackUp ; /*是否全部备份,0-按磁盘号备份,1-备份所有日志,当为1时,需备份的磁盘号和硬盘个数无效*/ + BYTE byRes[29]; +}NET_DVR_BACKUP_LOG_PARAM, *LPNET_DVR_BACKUP_LOG_PARAM; + +typedef struct tagNET_DVR_DIGITAL_CHANNEL_STATE +{ + DWORD dwSize; + BYTE byDigitalAudioChanTalkState[MAX_CHANNUM_V30]; //表示数字语音通道的对讲状态 0-未使用,1-使用中, 0xff无效 + BYTE byDigitalChanState[MAX_CHANNUM_V30]; /*数字通道的连接状态 byDigitalChanErrState[0] + 表示第一个数字通道,具体值表示状态码,祥见NET_SDK_DIGITAL_CHANNEL_STATUS,以此类推,0表示无效*/ + BYTE byDigitalAudioChanTalkStateEx[MAX_CHANNUM_V30*3]; //表示数字语音通道的对讲状态,从第MAX_CHANNUM_V30+1 到第MAX_CHANNUM_V30*4个, 0-未使用,1-使用中, 0xff无效 + BYTE byDigitalChanStateEx[MAX_CHANNUM_V30*3]; /*数字通道的连接状态 byDigitalChanErrStateEx[0]表示第从第MAX_CHANNUM_V30+1个个数字通道,具体值表示状态码,祥见NET_SDK_DIGITAL_CHANNEL_STATUS,以此类推,0表示无效*/ + BYTE byAnalogChanState[MAX_ANALOG_CHANNUM];//表示模拟通道是否启用,0-禁用,1-启用 + BYTE byRes[32]; +}NET_DVR_DIGITAL_CHANNEL_STATE, *LPNET_DVR_DIGITAL_CHANNEL_STATE; + +//数字通道状态 +typedef enum +{ + NET_SDK_DC_STATUS_CONNECTED = 1, //已连接 + NET_SDK_DC_STATUS_CONNECTING, //正在连接 + NET_SDK_DC_STATUS_BAND_WIDTH_EXCEED, //超过系统带宽 + NET_SDK_DC_STATUS_DOMAIN_ERROR, //域名错误 + NET_SDK_DC_STATUS_CHANNEL_ERROR, //通道号错误 + NET_SDK_DC_STATUS_ACCOUNT_ERROR, //用户名或密码错误 + NET_SDK_DC_STATUS_STREAM_TYPE_NOT_SUPPORT, //流类型不支持 + NET_SDK_DC_STATUS_CONFLICT_WITH_DVR, //和设备IP地址冲突 + NET_SDK_DC_STATUS_CONFLICT_WITH_IPC, //和IPC IP地址冲突 + NET_SDK_DC_STATUS_NETWORK_UNREACHBALE, //网络不可达 + NET_SDK_DC_STATUS_IPC_NOT_EXIST, //IP通道未接入 + NET_SDK_DC_STATUS_IPC_EXCEPTION, //IP通道异常 + NET_SDK_DC_STATUS_OTHER_ERROR, //其他错误 + NET_SDK_DC_STATUS_RESOLUTION_NOT_SUPPORT, //IPC分辨率不支持 + NET_SDK_DC_STATUS_IPC_LAN_ERR = 15, //IPC语言与NVR语言不匹配 + NET_SDK_DC_STATUS_USER_LOCKED = 16, //用户被锁定 + NET_SDK_DC_STATUS_NOT_ACTIVATED = 17, //设备未激活 + NET_SDK_DC_STATUS_USER_NOT_EXIST = 18, //用户不存在 + NET_SDK_DC_STATUS_IPC_UNREGISTERED = 19, //IP通道对应设备未注册(GB28181协议接入) + NET_SDK_DC_STATUS_POE_PORT_DETECTING = 20, //POE通道检测中 + NET_SDK_DC_STATUS_RESOURCE_EXCEED = 21, /* IPC分辨率,码率超过限制*/ + NET_SDK_DC_STATUS_NEED_TO_REPAIR = 22, /* 子码流断连,需要重连*/ + NET_SDK_DC_STATUS_ACTIVATING = 23, /* IPC正在激活 */ + NET_SDK_DC_STATUS_TOKEN_AUTHENTCATE_FAILED = 24 /* token认证失败 */ +}NET_SDK_DIGITAL_CHANNEL_STATUS; + +/*************************************ITS****************************/ +#define VERSION_LEN 32 //版本长度 +#define MAX_OVERLAP_ITEM_NUM 50 //最大字符叠加种数 +#define ITS_MAX_DEVICE_NUM 32 //最大设备个数 + +//终端基本信息 +typedef struct tagNET_ITS_BASEINFO +{ + DWORD dwSize; + BYTE byMainVer[VERSION_LEN]; // 算法主流程版本 + BYTE byMprVer[VERSION_LEN]; // 多帧识别库版本 + BYTE byBvtVer[VERSION_LEN]; // 背向视频库版本 + BYTE byLptVer[VERSION_LEN]; // 视频库版本 + BYTE byTvdVer[VERSION_LEN]; // 违章检测库版本 + BYTE byTldVer[VERSION_LEN]; // 信号灯检测库版本 + BYTE byRes[252]; // 预留字段 +}NET_ITS_BASEINFO,*LPNET_ITS_BASEINFO; + +//图片合成参数 +typedef struct tagNET_ITS_IMGMERGE_CFG +{ + DWORD dwSize; + BYTE byIsMerge; //是否需要合成(0:不合成;1:合成) + BYTE byCloseupProportion;//特写图比例 1-原始分辨率大小,2-宽高为原始分辨率两倍,以此类推(1~8) + BYTE byRes1[2]; + DWORD dwOneMergeType; //抓拍单张图合成方式(可能会截取特写图) + /************************************************************************/ + /* 201 两张图片上下排列合成,合成后图片宽为单张图的1倍,高为2倍 */ + /* 202 两张图片左右排列合成,合成后图片宽为单张图的2倍,高为1倍 */ + /* 203 上下合成,特写在最上边. */ + /* 204 上下合成,特写在最下边. */ + /* 205 左右合成,特写在最右边。 */ + /* 206 左右合成,特写在最左边 */ + /* 207 品字合成,特写图在上边 */ + /* 208 倒品字合成,特写图在下边 */ + /* 209 唱字形,左边1张为特写 */ + /* 210 反唱字形,右边1张为特写 */ + /* 301 三张图片上下排列合成,合成后图片宽为单张图的1倍,高为3倍 */ + /* 302 三张图片左右排列合成,合成后图片宽为单张图的3倍,高为1倍 */ + /* 303 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右下;合成后图片宽为单张图的2倍,高为2倍 */ + /* 304 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右下;合成后图片宽为单张图的1倍,高为1倍 */ + /* 305 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左上;合成后图片宽为单张图的2倍,高为2倍 */ + /* 306 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左上;压缩图片分辨率,合成后图片宽为单张图的1倍,高为1倍 */ + /* 307 三张图片"品"字型排列合成 */ + /* 308 三张图片倒"品"字型排列合成 */ + /* 309 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左下;合成后图片宽为单张图的2倍,高为2倍 */ + /* 310 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在左下;合成后图片宽为单张图的1倍,高为1倍 */ + /* 311 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右上;合成后图片宽为单张图的2倍,高为2倍 */ + /* 312 从三张图片中取一幅车牌特写区域,组成四张图片;四张图片"田"字型合成, + 特写在右上;压缩图片分辨率,合成后图片宽为单张图的1倍,高为1倍 */ + + /* 313 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:特写图、场景图、场景图、场景图 */ + /* 314 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、特写图、场景图、场景图 */ + /* 315 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、场景图、特写图、场景图 */ + /* 316 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片横"一"字型合成, + 顺序为:场景图、场景图、场景图、特写图 */ + /* 317 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:特写图、场景图、场景图、场景图 */ + /* 318 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、特写图、场景图、场景图 */ + /* 319 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、场景图、特写图、场景图 */ + /* 320 从三张图片中取一幅车牌特写区域,组成四张图片; + 四张图片竖"1"字型合成, + 顺序为:场景图、场景图、场景图、特写图 */ + /************************************************************************/ + DWORD dwTwoMergeType; //抓拍两张图合成方式 + DWORD dwThreeMergeType; //抓拍三张图合成方式 + DWORD dwJpegQuality; //压缩质量(0~100) + DWORD dwCloseupIndex; //特写图抓拍第几张 + DWORD dwMerageMaxSize; //合成图片大小的上限,300-10240(单位KB) + WORD wCloseupDeviation; // 特写图偏移量(50~图片高度),单位:像素 + BYTE byRes[30]; +}NET_ITS_IMGMERGE_CFG,*LPNET_ITS_IMGMERGE_CFG; + +//交通数据主机 +typedef struct tagNET_ITS_TRAFFIC_DATA_HOST +{ + NET_DVR_IPADDR struHostAddr; // 远程主机IP + WORD wHostPort; // 远程主机Port + BYTE byRes1[2]; + DWORD dwDataType; // 上传远程主机的数据类型(定义见下),按位表示 + BYTE bySuspendUpload; // 是否暂停数据上传:0-正常上传;1-暂停上传 + BYTE byUploadStrategy; // 上传策略:0-最新数据优先上传;1-按照通行时间上传 + WORD wUploadInterval; // 上传间隔时间(ms,1~2000),该参数只对历史数据有效 + DWORD dwUploadTimeOut; //上传超时时间 + BYTE byRes[24]; +}NET_ITS_TRAFFIC_DATA_HOST,*LPNET_ITS_TRAFFIC_DATA_HOST; + +//数据上传参数 +typedef struct tagNET_ITS_UPLOAD_CFG +{ + DWORD dwSize; + NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost1; //接收交通数据主机1 + NET_ITS_TRAFFIC_DATA_HOST struRemoteDataHost2; //接收交通数据主机2 +}NET_ITS_UPLOAD_CFG,*LPNET_ITS_UPLOAD_CFG; + +typedef struct tagNET_DVR_SYSTEM_TIME +{ + WORD wYear; //年 + WORD wMonth; //月 + WORD wDay; //日 + WORD wHour; //时 + WORD wMinute; //分 + WORD wSecond; //秒 + WORD wMilliSec; //毫秒 + BYTE byRes[2]; +}NET_DVR_SYSTEM_TIME, *LPNET_DVR_SYSTEM_TIME; + +//交通数据主机状态信息 +typedef struct tagNET_ITS_TRAFFIC_DATA_INFO +{ + DWORD dwDataQuantity; //数据总量 + DWORD dwDataRsendQuantity; //未发送数量(需要上传交通数据主机的) + NET_DVR_SYSTEM_TIME struStartTime; //未发送数据的最早时间 + NET_DVR_SYSTEM_TIME struEndTime; //未发送数据的最晚时间 + NET_DVR_IPADDR struDataHost; //接收交通数据主机 +}NET_ITS_TRAFFIC_DATA_INFO, *LPNET_ITS_TRAFFIC_DATA_INFO; + +//终端工作状态 +typedef struct tagNET_ITS_WORKSTATE +{ + DWORD dwSize ; + BYTE byDevName[NAME_LEN]; // 设备名称 + DWORD dwRunTime; // 系统运行时间,单位s + NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //支持两台主机(数据上传配置的主机) + DWORD dwMemoryUsage; // 内存占用率(如果内存占用率为30%,此处填30) + DWORD dwCpuUsage; // cpu占用率(如果cpu占用率为30%,此处填30) + DWORD dwDevTemperature; // 本机温度 + DWORD dwDeviceStatic; // 设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态 + NET_DVR_CHANNELSTATE_V30 struChanStatic[MAX_CHANNUM_V30]; //通道的状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警输入口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byAudioInChanStatus[8]; //表示语音通道的状态 0-未使用,1-使用中,数组0表示第1个语音通道 + BYTE byRes[36]; //保留 +}NET_ITS_WORKSTATE, *LPNET_ITS_WORKSTATE; + +//出入口交通配置获取参数 +typedef struct tagNET_ITS_ECT_WORKSTATE_COMMAND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byRes[256]; //保留 +}NET_ITS_ECT_WORKSTATE_COMMAND, *LPNET_ITS_ECT_WORKSTATE_COMMAND; + +typedef struct tagNET_ITS_ECTWORKSTATE +{ + DWORD dwSize ; + BYTE byDevName[NAME_LEN]; // 设备名称 + DWORD dwRunTime; // 系统运行时间,单位s + NET_ITS_TRAFFIC_DATA_INFO struTrafficDataInfo[2]; //支持两台主机(数据上传配置的主机) + DWORD dwMemoryUsage; // 内存占用率(如果内存占用率为30%,此处填30) + DWORD dwCpuUsage; // cpu占用率(如果cpu占用率为30%,此处填30) + DWORD dwDevTemperature; // 本机温度 + DWORD dwDeviceStatic; // 设备的状态,0-正常,1-CPU占用率太高,超过85%,2-硬件错误,例如串口死掉 + NET_DVR_DISKSTATE struHardDiskStatic[MAX_DISKNUM_V30]; //硬盘状态 + BYTE byAlarmInStatic[MAX_ALARMIN_V30]; //报警输入口的状态,0-没有报警,1-有报警 + BYTE byAlarmOutStatic[MAX_ALARMOUT_V30]; //报警输出端口的状态,0-没有输出,1-有报警输出 + DWORD dwLocalDisplay; //本地显示状态,0-正常,1-不正常 + BYTE byRes[256]; //保留 +}NET_ITS_ECTWORKSTATE, *LPNET_ITS_ECTWORKSTATE; + +// 图片信息(后续会加入码流) +typedef struct tagNET_ITS_PICTURE_INFO +{ + DWORD dwDataLen; //媒体数据长度 + // 0:车牌图;1:车辆图;2:合成图; 3:特写图;4:二直图;5:码流;6:人脸子图(主驾驶);7:人脸子图(副驾驶)成图;8-非机动车;9-行人;10-称重原始裸数据;11-目标图;12-主驾驶室图 ;13-副驾驶室图;14-人脸图抠小图 + //15 - 自定义图片(用户自己上传进行违法检测的图片) + BYTE byType; + // 0-数据直接上传; 1-云存储服务器URL(3.7Ver)原先的图片数据变成URL数据,图片长度变成URL长度 + BYTE byDataType; + BYTE byCloseUpType;//特写图类型,0-保留,1-非机动车,2-行人 + BYTE byPicRecogMode; //图片背向识别:0-正向车牌识别,1-背向识别(尾牌识别) ; + DWORD dwRedLightTime; //经过的红灯时间 (s) + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 + NET_VCA_RECT struPlateRect; //车牌位置,当byType为8-非机动车;9-行人时,表示人体坐标 + NET_VCA_RECT struPlateRecgRect; //牌识区域坐标,当图片类型为12-主驾驶室图13-副驾驶室图是,该坐标为驾驶员坐标 + BYTE *pBuffer; //数据指针 + DWORD dwUTCTime;//UTC时间定义 + BYTE byCompatibleAblity; //兼容能力字段 0表示无效,1表示有效; bit0-表示dwUTCTime字段有效 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes2[4]; //保留 +}NET_ITS_PICTURE_INFO, *LPNET_ITS_PICTURE_INFO; + + +typedef struct tagNET_ITS_ILLEGAL_INFO +{ + BYTE byIllegalInfo[MAX_ILLEGAL_LEN/*64*/];// 违章类型信息(字符格式) + BYTE byRes[256]; +}NET_ITS_ILLEGAL_INFO,*LPNET_ITS_ILLEGAL_INFO; + + +// 检测结果 +typedef struct tagNET_ITS_PLATE_RESULT +{ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成;接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到) + BYTE byFeaturePicNo; //闯红灯电警,取第几张图作为特写图,0xff-表示不取 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + //车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + //该节点已不再使用,使用下面的byYellowLabelCar和byDangerousVehicles判断是否黄标车和危险品车 + BYTE byVehicleAttribute; + WORD wIllegalType; //违章类型采用国标定义 + BYTE byIllegalSubType[8]; //违章子类型 + BYTE byPostPicNo; //违章时取第几张图片作为卡口图,0xff-表示不取 + //通道号(有效,报警通道号和所在设备上传报警通道号一致,在后端和所接入的 通道号一致) + BYTE byChanIndex; + WORD wSpeedLimit; //限速上限(超速时有效) + BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndex表示真实通道号。 + /*车辆方位布防标志,0~为普通车牌识别报警, + 1~为车辆位置布防触发报警(即通过PUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json触发)。 + 2~为车辆智能布防触发报警(包含多预置点及GPS车辆布防)(即通过PUT /ISAPI/Traffic/channels//vehicleMonitor//startTask触发, + 但在unarmedVehicleDetectionEnable(非目标车辆检测使能)为true时,只上报车辆检测报警,无车辆智能布防报警,因此该字段取值为0,而不是2)。 + 3~为手动车辆布防触发报警(/ISAPI/Traffic/channels//manualVehicleMonitor?format=json) + 4~为日常布防(复用车辆检测配置)可通过车辆检测能力中区分是否支持日常车辆布防, + (即通过/ISAPI/Traffic/channels//vehicleDetect/capabilities中isSupportDailyVehicleMonitor判断,日常车辆布防时,设备不仅会上报ANPR报警还会实时上报vehicleMonitor车辆布防报警) + 若不返回该字段则代表为普通车辆检测 + */ + BYTE byVehiclePositionControl; + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,1-上行(反向),2-下行(正向),3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byDetectType; //检测方式,1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 + //当wIllegalType参数为空时,使用该参数。若wIllegalType参数为有值时,以wIllegalType参数为准,该参数无效。 + DWORD dwCustomIllegalType; //违章类型定义(用户自定义) + /*为0~数字格式时,为老的违章类型,wIllegalType、dwCustomIllegalType参数生效,赋值国标违法代码。 + 为1~字符格式时,pIllegalInfoBuf参数生效。老的违章类型,wIllegalType、dwCustomIllegalType参数依然赋值国标违法代码*/ + BYTE* pIllegalInfoBuf; //违法代码字符信息结构体指针;指向NET_ITS_ILLEGAL_INFO + BYTE byIllegalFromatType; //违章信息格式类型; 0~数字格式, 1~字符格式 + BYTE byPendant;// 0-表示未知,1-车窗有悬挂物,2-车窗无悬挂物 + BYTE byDataAnalysis; //0-数据未分析, 1-数据已分析 + BYTE byYellowLabelCar; //0-表示未知, 1-非黄标车,2-黄标车 + BYTE byDangerousVehicles; //0-表示未知, 1-非危险品车,2-危险品车 + //以下字段包含Pilot字符均为主驾驶,含Copilot字符均为副驾驶 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + //0-开闸,1-未开闸 (专用于历史数据中相机根据名单匹配后,是否开闸成功的标志);当byAlarmDataType为0-实时数据时 0-未开闸 1-开闸 + BYTE byBarrierGateCtrlType; + BYTE byAlarmDataType;//0-实时数据,1-历史数据 + NET_DVR_TIME_V30 struSnapFirstPicTime;//端点时间(ms)(抓拍第一张图片的时间) + DWORD dwIllegalTime;//违法持续时间(ms) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[6]; //图片信息,单张回调,最多6张图,由序号区分 +}NET_ITS_PLATE_RESULT, *LPNET_ITS_PLATE_RESULT; + +//出入口车辆抓拍数据上传 +typedef struct tagNET_ITS_GATE_VEHICLE +{ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 默认0 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据)默认 1 抓拍类型下图片数据 控制后续接收延时操作 + BYTE byPicNo; //连拍的图片组上传图片序号(接收到图片组数量后,表示接收完成。 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到)标示前后相机抓拍图片 + BYTE byRes; //标记为预留 + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes1; //保留 + BYTE byAlarmReason[MAX_ALARMREASON_LEN]; //自定义报警类型 默认为中文 + WORD wBackList; //标记为是否报警数据 0 表示为正常过车数据 1 表示禁止名单 + WORD wSpeedLimit; //限速上限(超速时有效)km/h + DWORD dwChanIndex; //通道号 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 含速度 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + BYTE byDir; //显示方向,0-其它 1 入场,2 出场 + BYTE byDetectType; //检测方式, 0-其他 1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 + BYTE byRes2[2]; + BYTE byCardNo[MAX_ID_LEN]; // 卡号 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[4]; //图片信息,单张回调,最多4张图,由序号区分 + //2013-11-19 出入口车辆抓拍数据上传(监听方式)新增参数 + BYTE bySwipeTime[MAX_TIME_LEN];//增加刷卡时间 时间格式为yyyymmddhh24missfff + BYTE byRes3[224]; +}NET_ITS_GATE_VEHICLE, *LPNET_ITS_GATE_VEHICLE; + +//出入口人脸识别 +typedef struct tagNET_ITS_GATE_FACE +{ + DWORD dwSize; //结构体长度 + BYTE byGroupNum; //图片组数量(一个行人相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成。 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE byFeaturePicNo; //连抓时取第几张图作为特写图,0xff-表示不取 + BYTE byRes; //保留 + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byDir; //显示方向,0-其他 1 入场, 2 出场 + DWORD dwChanIndex; //通道号 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + NET_VCA_FACESNAP_RESULT struFaceInfo; //人脸抓拍数据 + BYTE byRes2[256]; //预留 +}NET_ITS_GATE_FACE, *LPNET_ITS_GATE_FACE; + +//停车场数据上传 +typedef struct _tagNET_ITS_PARK_VEHICLE_ +{ + DWORD dwSize; //结构长度 + BYTE byGroupNum; //图片组数量(单次轮询抓拍的图片数量) + BYTE byPicNo; //连拍的图片组上传图片序号(接收到图片组数量后,表示接收完成 + //接收超时不足图片组数量时,根据需要保留或删除) + BYTE byLocationNum; //单张图片所管理的车位数 + BYTE byParkError; //停车异常,0-正常 1 异常 + BYTE byParkingNo[MAX_PARKNO_LEN];//车位编号 + BYTE byLocationStatus; //车位车辆状态,0-无车,1有车 + BYTE bylogicalLaneNum;//逻辑车位号,0-3,一个相机最大能管4个车位 (0代表最左边,3代表最右边) + WORD wUpLoadType;//第零位表示:0~轮巡上传、1~变化上传 + BYTE byRes1[4]; //保留字节 + DWORD dwChanIndex; //通道号数字通道 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[MAX_ID_LEN]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN]; //设备编号 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量 + //,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[2]; //图片信息,单张回调,最多2张图,由序号区分 + BYTE byRes2[256]; +}NET_ITS_PARK_VEHICLE, *LPNET_ITS_PARK_VEHICLE; + +//交通取证报警 +typedef struct tagNET_DVR_TFS_ALARM +{ + DWORD dwSize; //结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + DWORD dwIllegalType; //违章类型,采用国标定义,当dwIllegalType值为0xffffffff时使用byIllegalCode + DWORD dwIllegalDuration; //违法持续时间(单位:秒) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + BYTE byMonitoringSiteID[MONITORSITE_ID_LEN];//显示点编号(路口编号、内部编号) + BYTE byDeviceID[DEVICE_ID_LEN]; //设备编号 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + NET_DVR_SCENE_INFO struSceneInfo; //场景信息 + NET_DVR_TIME_EX struBeginRecTime; //录像开始时间 + NET_DVR_TIME_EX struEndRecTime; //录像结束时间 + NET_DVR_AID_INFO struAIDInfo; //交通事件信息 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + DWORD dwPicNum; //图片数量 + NET_ITS_PICTURE_INFO struPicInfo[8]; //图片信息,最多8张 + BYTE bySpecificVehicleType; //具体车辆种类 参考识别结果类型VTR_RESULT + BYTE byLaneNo; //关联车道号 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + NET_DVR_TIME_V30 struTime;//手动定位,当前时间。 + DWORD dwSerialNo;//序号; + BYTE byVehicleAttribute;//车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + BYTE byRes2[2]; //保留 + BYTE byIllegalCode[ILLEGAL_LEN/*32*/];//违法代码扩展,当dwIllegalType值为0xffffffff;使用这个值 + WORD wCountry; // 国家索引值,参照枚举COUNTRY_INDEX + BYTE byRegion; //区域索引值,0-保留,1-欧洲(Europe Region),2-俄语区域(Russian Region),3-欧洲&俄罗斯(EU&CIS) , 4-中东(Middle East),0xff-所有 + BYTE byCrossLine;//是否压线停车(侧方停车),0-表示未知,1-不压线,2-压线 + BYTE byParkingSerialNO[SERIAL_NO_LEN/*16*/];//泊车位编号 + BYTE byCrossSpaces;//是否跨泊车位停车(侧方停车),0-表示未知,1-未跨泊车位停车,2-跨泊车位停车 + BYTE byAngledParking;//是否倾斜停车(侧方停车), 0-表示未知,1-未倾斜停车,2-倾斜停车 + BYTE byAlarmValidity;//报警置信度,可以输出驶入驶出的置信度,范围0-100;置信度越高,事件真实性越高 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 + DWORD dwXmlLen;//XML报警信息长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block +#else + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block + BYTE byRes3[4]; +#endif + BYTE byVehicleHeadTailStatus;//车头车尾状态 0-保留 1-车头 2-车尾 + BYTE byBrokenNetHttp; //断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[30]; //保留 +}NET_DVR_TFS_ALARM,*LPNET_DVR_TFS_ALARM; + +typedef struct tagNET_DVR_SOFTWARE_SERVICE_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byThirdStreamEnabled; //是否开启三码流配置:0-否,1-是 + BYTE bySubStreamEnabled; //是否开启子码流配置:0-否,1-是 + BYTE byRes[254]; +}NET_DVR_SOFTWARE_SERVICE_CFG, *LPNET_DVR_SOFTWARE_SERVICE_CFG; + +typedef struct tagNET_ITS_ECT_BLOCKLIST +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE bylogicalLaneNo;//逻辑车道号 + BYTE byRes1[3]; + BYTE byLaneName[NAME_LEN];//车道名称 32 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + BYTE byRes2[256]; // 保留字节 +}NET_ITS_ECT_BLOCKLIST, *LPNET_ITS_ECT_BLOCKLIST; + +//IPC通道参数配置 +typedef struct tagNET_ITS_IPC_CHAN_CFG +{ + DWORD dwSize; + BYTE byCameraType; //相机种类,0-布防用相机;1-线圈触发相机;2-视频分析用相机,3-一体机 + BYTE byRes1[3]; //保留 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDirectionNo; //显示方向编号,0-无,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其他 + BYTE byMonitorInfo[48]; //显示点信息描述 + BYTE byRes2[15]; //保留 +}NET_ITS_IPC_CHAN_CFG, *LPNET_ITS_IPC_CHAN_CFG; + +//单个设备信息 +typedef struct tagNET_ITS_SINGLE_DEVICE_INFO +{ + DWORD dwDeviceType; //设备类型:0-终端,1-相机,2-补光灯,3-车检器,4-线圈1,5-线圈2,6-线圈3,7-红绿灯检测器,8-机柜, + //9-雷达,10-道闸,11-出入口控制机(票箱),12-LED显示屏,13-远距离读卡器,14-近距离读卡器,15-红外扫描枪, + //16-票据打印机,17-节点管理器(诱导服务器相关) , 18-机柜检测仪 + DWORD dwDirID; //方向编号 + DWORD dwLaneID; //车道编号 + DWORD dwDeviceState; //设备状态 0正常 非0 异常(参考设备异常代码表) + BYTE byDeviceName[32]; //设备名称 + BYTE byDeviceID[48]; //设备编号,一般用序列号,车检器用地址 + NET_DVR_TIME_V30 struTriggerTime;//触发时间 + BYTE byRelateChan; //关联通道号(传感器是1~8 AC端子1~4 AC插座1~2) + BYTE byRes[3]; +}NET_ITS_SINGLE_DEVICE_INFO,*LPNET_ITS_SINGLE_DEVICE_INFO; + +//路口信息 +typedef struct tagNET_ITS_ROADINFO +{ + DWORD dwSize; + DWORD dwChannel; //通道号,0xffffffff表示终端,其它表示对应的相机 + BYTE byTriggerMode; // 0:线圈触发; 1:视频触发 + BYTE byRes1[3]; + DWORD dwDeviceNum; //实际设备个数 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byRoadInfo[48]; //显示点信息 + NET_ITS_SINGLE_DEVICE_INFO struSingleDevice[ITS_MAX_DEVICE_NUM]; + BYTE byRes[16]; +}NET_ITS_ROADINFO,*LPNET_ITS_ROADINFO; + +//单个车道路况信息 +typedef struct tagNET_ITS_TRAFFIC_DRIVE_CHAN +{ + BYTE byDriveChan; //车道号 + BYTE byRes1[3]; // 预留 + WORD wCarFlux; //汽车流量数 + WORD wPasserbyFlux; //行人流量数 + WORD wShayFlux; //二轮车流量数 + float fAverOccpancy; //平均车道占有率百分比 + WORD wAverSpeed; //平均车速(km/h) + WORD wAverCarDis; //平均车距(单位待定) + BYTE byRes2[16]; // 预留 +}NET_ITS_TRAFFIC_DRIVE_CHAN,*LPNET_ITS_TRAFFIC_DRIVE_CHAN; + +typedef struct tagNET_ITS_TRAFFIC_COLLECT +{ + DWORD dwSize; //结构大小 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byLaneNum; //车道总数 + BYTE byDir; //显示方向 + BYTE byDetectType; //检测方式1-地感线圈、2-视频触发、3、多帧识别、4雷达触发 + BYTE byRes1; //预留 + DWORD dwChannel; //通道号 + NET_DVR_SYSTEM_TIME struStartTime; //统计开始时间 + DWORD dwSamplePeriod; //统计时间,单位秒 + NET_ITS_TRAFFIC_DRIVE_CHAN struDriveChan[6]; //交通流量数据,每个相机支持6个车道 + BYTE byRes2[24]; //预留 +}NET_ITS_TRAFFIC_COLLECT,*LPNET_ITS_TRAFFIC_COLLECT; + +typedef struct tagNET_ITS_OVERLAPCFG_COND +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwConfigMode; //配置模式,0-终端,1-前端(直连前端或终端接前端) + BYTE byPicModeType;//0-表示小图(独立图),1-表示大图(合成图) + /* + 0表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) + */ + BYTE byRelateType; + BYTE byRes[14]; +}NET_ITS_OVERLAPCFG_COND, *LPNET_ITS_OVERLAPCFG_COND; + +typedef enum ITS_OVERLAP_ITEM_TYPE +{ + OVERLAP_ITEM_NULL = 0, //0-未知 + OVERLAP_ITEM_SITE, //1-地点 + OVERLAP_ITEM_ROADNUM, //2-路口编号 + OVERLAP_ITEM_INSTRUMENTNUM, //3-设备编号 + OVERLAP_ITEM_DIRECTION, //4-方向编号 + OVERLAP_ITEM_DIRECTIONDESC, //5-方向 + OVERLAP_ITEM_LANENUM, //6-车道号 + OVERLAP_ITEM_LANEDES, //7-车道 + OVERLAP_ITEM_CAPTIME, //8-抓拍时间(不带毫秒) + OVERLAP_ITEM_CAPTIME_MILLSECOND, //9-抓拍时间(带毫秒) + OVERLAP_ITEM_PLATENUM, //10-车牌号 + OVERLAP_ITEM_CARCOLOR, //11-车身颜色 + OVERLAP_ITEM_CARTYPE, //12-车辆类型 + OVERLAP_ITEM_CARBRAND, //13-车辆品牌 + OVERLAP_ITEM_CARSPEED, //14-车辆速度 + OVERLAP_ITEM_SPEEDLIMIT, //15-限速标志 + OVERLAP_ITEM_CARLENGTH, //16-车辆长度1~99m + OVERLAP_ITEM_ILLEGALNUM, //17-违法代码(违法代码叠加应该没用的,应该直接叠加违法信息,比如正常、低速、超速、逆行、闯红灯、占道、压黄线等) + OVERLAP_ITEM_MONITOR_INFO, //18-显示点信息 + OVERLAP_ITEM_ILLEGALDES, //19-违法行为 + OVERLAP_ITEM_OVERSPEED_PERCENT, //20-超速比 + OVERLAP_ITEM_RED_STARTTIME, //21-红灯开始时间 + OVERLAP_ITEM_RED_STOPTIME, //22-红灯结束时间 + OVERLAP_ITEM_RED_DURATION, //23-红灯已亮时间 + OVERLAP_ITEM_SECUNITY_CODE, //24-防伪码 + OVERLAP_ITEM_CAP_CODE, //25-抓拍编号 + OVERLAP_ITEM_SEATBELT, //26-安全带 + OVERLAP_ITEM_MONITOR_ID, //27-显示点编号 + OVERLAP_ITEM_SUN_VISOR, //28-遮阳板 + OVERLAP_ITEM_LANE_DIRECTION, //29-车道行驶方向 + OVERLAP_ITEM_LICENSE_PLATE_COLOR, // 30-车牌颜色 + OVERLAP_ITEM_SCENE_NUMBER, //31-场景编号 + OVERLAP_ITEM_SCENE_NAME, //32-场景名称 + OVERLAP_ITEM_YELLOW_SIGN_CAR, //33-黄标车 + OVERLAP_ITEM_DANGEROUS_CAR, //34-危险品车 + OVERLAP_ITEM_CAR_SUBBRAND, //35-车辆子品牌 + OVERLAP_ITEM_CAR_DIRECTION, //36-车辆方向 + OVERLAP_ITEM_PENDANT, //37-车窗悬挂物 + OVERLAP_ITEM_CALL, //38-打电话 + OVERLAP_ITEM_CAR_VALIDITY, //39-置信度 + OVERLAP_ITEM_CAR_COUNTRY, //40-国家 + OVERLAP_ITEM_CAR_PLATE_TYPE, //41-车牌类型,参考车牌类型枚举 + OVERLAP_ITEM_CAR_PLATE_SIZE, //42-车牌尺寸 + OVERLAP_ITEM_CAR_PLATE_COLOR, //43-车牌颜色 + OVERLAP_ITEM_CAR_PLATE_CATEGORY, //44-车牌附加信息 + OVERLAP_ITEM_ACCIDENT, //45-交通事故 + OVERLAP_ITEM_SMOKING, //46-吸烟 + OVERLAP_ITEM_HELMET, //47-戴头盔 + OVERLAP_ITEM_MANNED, //48-载人 + OVERLAP_ITEM_HUMAN, //49-人体属性 + OVERLAP_ITEM_PLAYMOBILEPHONE, //50-玩手机 + OVERLAP_ITEM_ADR //51- ADR车牌: 欧洲国家车辆有的会挂双牌,需要显示第二个车牌号,用ADR车牌叠加项表示 +}ITS_OVERLAP_ITEM_TYPE; + +//字符叠加每一条信息结构体 +typedef struct tagNET_ITS_OVERLAP_SINGLE_ITEM_PARAM +{ + BYTE byRes1[2]; // 保留 + BYTE byItemType; //类型,详见OVERLAP_ITEM_TYPE + BYTE byChangeLineNum; //叠加项后的换行数[0-10](默认0) + BYTE bySpaceNum; //叠加项后的空格数[0-255](默认0) + BYTE byRes2[2]; + BYTE byEnablePos; //是否启用坐标显示 + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + BYTE byRes[8]; +}NET_ITS_OVERLAP_SINGLE_ITEM_PARAM, *LPNET_ITS_OVERLAP_SINGLE_ITEM_PARAM; + +typedef struct tagNET_ITS_OVERLAP_ITEM_PARAM +{ + NET_ITS_OVERLAP_SINGLE_ITEM_PARAM struSingleItem[MAX_OVERLAP_ITEM_NUM]; //单条字符参数 + DWORD dwLinePercent; //叠加行百分比(0-100),(默认100) + DWORD dwItemsStlye; //叠加方式:0-横排,1-竖排(默认横排) + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wCharStyle; //字体类型,0-宋体1-魏体(默认) + WORD wCharSize; //字符大小,0--16x16,1--32x32,2-48x48,3--64x64 (默认),8x128(Ver3.7) + WORD wCharInterval; //字符间距,[0~16],可设单位:像素(默认) + BYTE byRes1[2]; + DWORD dwForeClorRGB; //前景色的RGB值bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00FFFFFF-白) + DWORD dwBackClorRGB; //背景色的RGB值,只对图片外叠加有效bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00000000-黑) + BYTE byColorAdapt; //颜色是否自适应0-否1-是 + //(Ver3.7 新增) + // 参数补零使能 0-补零, 1-不补零(详细注释)速度,限速值 不足3位补0 + BYTE byParamFillZeroEnble; + BYTE byPlateLeftCornerEnable;// 车牌小图叠加左上角使能 0-不叠加, 1-叠加 + BYTE byRes2; + WORD wStartSPicPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartSPicPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //OSD叠加位置 0-图片内,1-图片上边缘,2-图片下边缘(合成图专用的是上边缘外)(V3.7) + BYTE byOsdLocate; + BYTE byRes[23]; +}NET_ITS_OVERLAP_ITEM_PARAM, *LPNET_ITS_OVERLAP_ITEM_PARAM; + +//叠加项具体信息 +typedef struct tagNET_ITS_OVERLAP_INFO_PARAM +{ + BYTE bySite[128]; //地点描述 + BYTE byRoadNum[32]; //路口编号 + BYTE byInstrumentNum[32]; //设备编号 + BYTE byDirection[32]; //方向编号 + BYTE byDirectionDesc[32]; //方向描述 + BYTE byLaneDes[32]; //车道描述 + BYTE byRes1[32]; //保留 + BYTE byMonitoringSite1[44]; //显示点1信息 + BYTE byMonitoringSite2[32]; //显示点2信息 + BYTE byRes[64]; //保留 +}NET_ITS_OVERLAP_INFO_PARAM, *LPNET_ITS_OVERLAP_INFO_PARAM; + +typedef struct tagNET_ITS_OVERLAP_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byRes1[3]; + NET_ITS_OVERLAP_ITEM_PARAM struOverLapItem; //字符串参数 + NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //字符串内容信息 + BYTE byRes[32]; +}NET_ITS_OVERLAP_CFG, *LPNET_ITS_OVERLAP_CFG; + +//字符叠加每一条信息结构体 +typedef struct tagNET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50 +{ + BYTE byRes1[2]; // 保留 + BYTE byItemType; //类型,详见OVERLAP_ITEM_TYPE + BYTE byChangeLineNum; //叠加项后的换行数[0-10](默认0) + BYTE bySpaceNum; //叠加项后的空格数[0-255](默认0) + BYTE byRes2[2]; + BYTE byEnablePos; //是否启用坐标显示 + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //自定义类型;与byItemType参数对应。可将byItemType参数类型自定义名称。若自定义内容为空,便默认以byItemType参数中的类型命名。 + BYTE byItemTypeCustom[32]; + BYTE byRes[8]; +}NET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50, *LPNET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50; + +typedef struct tagNET_ITS_OVERLAP_ITEM_PARAM_V50 +{ + NET_ITS_OVERLAP_SINGLE_ITEM_PARAM_V50 struSingleItem[MAX_OVERLAP_ITEM_NUM]; //单条字符参数 + DWORD dwLinePercent; //叠加行百分比(0-100),(默认100) + DWORD dwItemsStlye; //叠加方式:0-横排,1-竖排(默认横排) + WORD wStartPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wCharStyle; //字体类型,0-宋体1-魏体(默认) + WORD wCharSize; //字符大小,0--16x16,1--32x32,2-48x48,3--64x64 (默认),8x128(Ver3.7) + WORD wCharInterval; //字符间距,[0~16],可设单位:像素(默认) + BYTE byRes1[2]; + DWORD dwForeClorRGB; //前景色的RGB值bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00FFFFFF-白) + DWORD dwBackClorRGB; //背景色的RGB值,只对图片外叠加有效bit0-1:(B) bit2-3:(G) bit4-5:(G) (默认x00000000-黑) + BYTE byColorAdapt; //颜色是否自适应0-否1-是 + //(Ver3.7 新增) + // 参数补零使能 0-补零, 1-不补零(详细注释)速度,限速值 不足3位补0 + BYTE byParamFillZeroEnble; + BYTE byPlateLeftCornerEnable;// 车牌小图叠加左上角使能 0-不叠加, 1-叠加 + BYTE byRes2; + WORD wStartSPicPosTop; //起始上坐标,只对图片内部叠加有效[0~2448](默认0) + WORD wStartSPicPosLeft; //起始左坐标,只对图片内部叠加有效[0~2448](默认0) + //OSD叠加位置 0-图片内,1-图片上边缘,2-图片下边缘(合成图专用的是上边缘外)(V3.7) + BYTE byOsdLocate; + BYTE byRes[63]; +}NET_ITS_OVERLAP_ITEM_PARAM_V50, *LPNET_ITS_OVERLAP_ITEM_PARAM_V50; + +typedef struct tagNET_ITS_OVERLAP_CFG_V50 +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byRes1[3]; + NET_ITS_OVERLAP_ITEM_PARAM_V50 struOverLapItemV50; //字符串参数 + NET_ITS_OVERLAP_INFO_PARAM struOverLapInfo; //字符串内容信息 + BYTE byRes[120]; +}NET_ITS_OVERLAP_CFG_V50, *LPNET_ITS_OVERLAP_CFG_V50; + +#define MAX_PTZCRUISE_POINT_NUM 32 //最大支持32个巡航点 + + +//预置点信息 +typedef struct tagNET_DVR_PRESET_INFO +{ + DWORD dwSize; + DWORD dwPresetNum; //预置点个数 + DWORD dwGroupNum; //组数 + BYTE byRes[8]; +}NET_DVR_PRESET_INFO, *LPNET_DVR_PRESET_INFO; + +//输入参数 +typedef struct tagNET_DVR_PRESET_COND +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwGroupNO; //组号 + BYTE byRes[8]; +}NET_DVR_PRESET_COND, *LPNET_DVR_PRESET_COND; + +//输出参数 +typedef struct tagNET_DVR_PRESETCFG +{ + DWORD dwSize; + DWORD dwPresetIndex; //预置点序号 + NET_VCA_POINT struVcaPoint; //预置点坐标 + WORD wZoomCoordinate; ///<预置点窗口Zoom值 + BYTE byRes[30]; +}NET_DVR_PRESETCFG, *LPNET_DVR_PRESETCFG; + +//获取巡航路径的数目 +typedef struct tagNET_DVR_PTZCRUISE_INFO +{ + DWORD dwSize; + DWORD dwPtzCruiseNum; //路径个数 + DWORD dwGroupNum; //组数 + BYTE byRes[8]; +}NET_DVR_PTZCRUISE_INFO, *LPNET_DVR_PTZCRUISE_INFO; + +//输入参数: +typedef struct tagNET_DVR_PTZCRUISE_COND +{ + DWORD dwSize; + DWORD dwChannel; + DWORD dwGroupNO; //组号 + BYTE byRes[8]; +}NET_DVR_PTZCRUISE_COND, *LPNET_DVR_PTZCRUISE_COND; + +//输出参数 +typedef struct tagNET_DVR_PTZCRUISE_POINTCFG +{ + DWORD dwSize; + DWORD dwPresetIndex; //预置点序号 + NET_VCA_POINT struVcaPoint; //预置点坐标 + BYTE byDwell; //停留时间 + BYTE bySpeed; //速度 + WORD wZoomCoordinate;///<预置点窗口Zoom值 + BYTE byRes[28]; +}NET_DVR_PTZCRUISE_POINTCFG, *LPNET_DVR_PTZCRUISE_POINTCFG; + +typedef struct tagNET_DVR_PTZCRUISECFG +{ + DWORD dwSize; + DWORD dwCruiseRoute; //巡航路径序号 + NET_DVR_PTZCRUISE_POINTCFG struCruisePoint[MAX_PTZCRUISE_POINT_NUM]; //最大支持32个巡航点 + BYTE byRes[32]; +}NET_DVR_PTZCRUISECFG, *LPNET_DVR_PTZCRUISECFG; + +//模式结构 +typedef struct tagNET_DVR_MOTION_TRACK_CFG +{ + DWORD dwSize; + BYTE byEnableTrack; //启用,0-否,1-是 + BYTE byRes[63]; +}NET_DVR_MOTION_TRACK_CFG, *LPNET_DVR_MOTION_TRACK_CFG; + +//一天的定时计划 +typedef struct tagNET_DVR_DAY_SCHEDULE +{ + BYTE byWorkMode ; //0-全天开,1-全天关,2-定时 + BYTE byRes1[3] ; + NET_DVR_SCHEDTIME struTime[MAX_TIMESEGMENT_V30/*8*/]; //时间段 + BYTE byRes2[8]; //保留 +}NET_DVR_DAY_SCHEDULE ,*LPNET_DVR_DAY_SCHEDULE; + +//定时智能参数结构 +typedef struct tagNET_DVR_SCHEDULE_AUTO_TRACK_CFG +{ + DWORD dwSize; //结构长度 + BYTE byEnableTrack; //启用:0- 否,1- 是 + BYTE byRes1[3] ; + NET_DVR_DAY_SCHEDULE struSchedule[MAX_DAYS/*7*/]; //定时智能时间段,不在这8个时间段内的时间,默认定时智能关闭 + BYTE byRes2[128]; +}NET_DVR_SCHEDULE_AUTO_TRACK_CFG,*LPNET_DVR_SCHEDULE_AUTO_TRACK_CFG; + +typedef struct tagNET_DVR_I_FRAME +{ + DWORD dwSize; //结构长度 + BYTE sStreamID[STREAM_ID_LEN/*32*/] ; //流ID + DWORD dwChan; //被控通道号 + BYTE byStreamType; //0-主码流,1-子码流,2-码流3,3-码流4,4-码流5 + BYTE byRes[63]; +} NET_DVR_I_FRAME, *LPNET_DVR_I_FRAME; + +typedef struct tagNET_DVR_REBOOT_TIME +{ + BYTE byDate; //星期几,1-7代表星期一到星期日 + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE byRes1; + BYTE byRebootMode; //0-按周重启,1-按月重启(此参数只能获取,不能设置) + BYTE byDisabled; // 0-启用 1-禁用 + BYTE byRes[10]; //保留 +}NET_DVR_REBOOT_TIME,*LPNET_DVR_REBOOT_TIME; + +typedef struct tagNET_DVR_AUTO_REBOOT_CFG +{ + DWORD dwSize; + NET_DVR_REBOOT_TIME struRebootTime; +}NET_DVR_AUTO_REBOOT_CFG,*LPNET_DVR_AUTO_REBOOT_CFG; + +#define NET_DVR_GPS_FINDING 0 //正在查找 +#define NET_DVR_GPS_RECV 1 //接收数据 +#define NET_DVR_GPS_OVER 2 //查找结束 +#define NET_DVR_GPS_EXCEPTION 3 //接收异常 +typedef struct tagNET_DVR_MENU_OUTPUT_MODE +{ + DWORD dwSize; + BYTE byMenuOutputMode; //非同源设备:0-Auto 1-主CVBS 2-HDMI 3-VGA 同源设备:0-Auto 1-主CVBS 2-HDMI/VGA + BYTE byRes[63]; +}NET_DVR_MENU_OUTPUT_MODE, *LPNET_DVR_MENU_OUTPUT_MODE; + +typedef struct tagNET_DVR_MB_IPADDR +{ + NET_DVR_IPADDR struIP; //IP地址 + WORD wPort; //端口号 + BYTE byRes[2]; +}NET_DVR_MB_IPADDR,*LPNET_DVR_MB_IPADDR; + +typedef struct tagNET_DVR_MB_WVSPARA +{ + NET_DVR_MB_IPADDR struWVSAddr; + BYTE byPuid[NAME_LEN]; //设备id + BYTE byPassword[PASSWD_LEN]; //密码 + BYTE byRes[8]; +}NET_DVR_MB_WVSPARA, *LPNET_DVR_MB_WVSPARA; + +typedef struct tagNET_DVR_MB_EHOMEPARA +{ + NET_DVR_MB_IPADDR struEHomeAddr; + BYTE byPuid[NAME_LEN]; //设备id +}NET_DVR_MB_EHOMEPARA, *LPNET_DVR_MB_EHOMEPARA; + +typedef struct tagNET_DVR_MB_PLATFORMPARA +{ + DWORD dwSize; + BYTE byNetEnvironment;/*网络环境,0-wireless,1-3G,2-wLan,3-lan*/ + BYTE byCurPlatForm; /*< 当前平台0 - WVS, 1 - E家, 2 - 推模式 */ + BYTE byRes1[2]; + NET_DVR_MB_WVSPARA struWVSPara; /*车载平台(平台登入)*/ + NET_DVR_MB_EHOMEPARA struMbEHpara;/*E家平台车载平台不设置设备登入密码 */ + BYTE byRes2[64]; +}NET_DVR_MB_PLATFORMPARA, *LPNET_DVR_MB_PLATFORMPARA; + +typedef struct tagNET_DVR_MB_GPS_STATUS +{ + BYTE byGPSModule; /*gps模块, 0: 不存在, 1: 正常*/ + BYTE byPositionStatus; /*gps定位状态, 0: 定位失败, 1: 定位成功*/ + BYTE bySignalStrength; /*信号强度, 0: 弱, 1: 正常, 2: 强*/ + BYTE byres[5]; +}NET_DVR_MB_GPS_STATUS, *LPNET_DVR_MB_GPS_STATUS; + +typedef struct tagNET_DVR_MB_GSENSOR_STATUS +{ + BYTE byGsensorModule; /*g-sensor模块, 0: not exist, 1: 内置, 2: 外置*/ + BYTE byCurAccX[10]; /*当前X轴加速度*/ + BYTE byCurAccY[10]; /*当前Y轴加速度*/ + BYTE byCurAccZ[10]; /*当前Z轴加速度*/ + BYTE byRefAccX[10]; /* X轴加速度标定值*/ + BYTE byRefAccY[10]; /* Y轴加速度标定值*/ + BYTE byRefAccZ[10]; /* Z轴加速度标定值*/ + BYTE byres[3]; +}NET_DVR_MB_GSENSOR_STATUS, *LPNET_DVR_MB_GSENSOR_STATUS; + +#define IP_ADDR_LEN 16 +#define IW_ESSID_MAX_SIZE 32 + +typedef struct tagNET_DVR_MB_WIFI_STATUS +{ + BYTE byEnableWiFi; /* 无线, 0 关, 1 开 */ + BYTE byWiFiConnectStatus; /* WIFI状态, 0: 连接失败, 1: 连接成功 2: 无模块*/ + BYTE bySignalStrength; /* 信号强度, 0 弱, 1 正常, 2 强 */ + BYTE byIPaddress[IP_ADDR_LEN]; /*WIFI 设备 ip*/ + BYTE byEssid[IW_ESSID_MAX_SIZE]; /*无线接入点essid*/ + BYTE byres[5]; +}NET_DVR_MB_WIFI_STATUS,*LPNET_DVR_MB_WIFI_STATUS; + +typedef struct tagNET_DVR_MB_PLATFORM_STATUS +{ + BYTE byCurPlat; /*当前平台, 0: wvs, 1: ivms, 2: 推模式(net_3g_sdk)*/ + BYTE byLoginStatus; /*login 状态, 0: login failed, 1: login success*/ + BYTE byExceptionInfo; /*异常信息*/ + /* + WVS :exception info: + 0: 连接服务器失败 + 1: 注册中 + 2: 用户名密码错误 + 3: 注册超时 + 4: 心跳超时 + 5: 注册成功 + iVMS :exception info: + 0未注册 + 1注册中 + 2注册连接出错 + 3注册超时 + 4长时间没有心跳,连接中断 + 5重新注册 + 6 CMS中注册设备数量已经超过限定的台数 + 7 CMS中注册通道数量已经超过限定通道数 + 8设备在WEB管理中心中没有配置 + 9CMS和WEB管理中心通信失败 + 10登录未知错误 + 11注册成功 + 推模式 :exception info: + 0未注册 + 1: 注册中 + 2: 重复注册 + 3: 注册连接失败 + 4: 服务器IP变化 + 5: 注册成功 + 6: 用户注销 + 7: 心跳超时 + */ + BYTE byres[5]; +}NET_DVR_MB_PLATFORM_STATUS, *LPNET_DVR_MB_PLATFORM_STATUS; + + +typedef struct tagNET_DVR_MB_MOBILEDEV_STATUS +{ + DWORD dwSize; /*结构大小*/ + union + { + NET_DVR_MB_GPS_STATUS struGPSStatus; + NET_DVR_MB_GSENSOR_STATUS struGSensorStatus; + NET_DVR_MB_WIFI_STATUS struWiFiStatus; + NET_DVR_MB_PLATFORM_STATUS struPlatformStatus; + }mobileStatus; +}NET_DVR_MB_MOBILEDEV_STATUS, *LPNET_DVR_MB_MOBILEDEV_STATUS; + +#define NET_DVR_GPS_STATUS 0 +#define NET_DVR_GSENSOR_STATUS 1 +#define NET_DVR_WIFI_STATUS 2 +#define NET_DVR_PLATFORM_STATUS 3 + +//GPS点信息结构 +typedef struct tagNET_DVR_GPS_INFO +{ + /* 经纬度为S*100 */ + BYTE byDirection[2]; /*direction[0]0or1(东经/西经), direction[1]:0or1(北纬/南纬) */ + BYTE bySvs; /* satellite vehicles(初值0):有效定位星数 */ + BYTE byLocateMode; /* 定位模式(初值0):仅NMEA0183 3.00版本输出,0=自主定位,1=差分,2=估算,3=数据无效 */ + WORD wHDOP; /* 水平精度因子,度量GPS精确度,0.5-99.9,6以内定位精度高,20以上需丢弃,这里存储的是乘以10以后的整数 */ + WORD wHeight; /* 高度 */ + DWORD dwLatitude; /*纬度latitude = 实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwLongitude; /*经度longitude =实际度*3600*100+实际分*60*100+实际秒*100 */ + DWORD dwVehicleSpeed; /* mobile speed =实际速度*100000 实际单位kph*/ + DWORD dwVehicleDirection; /* mobile direction= 实际方向*100,实际数值是方向角,正北为0度,顺时针 */ + BYTE byRes[8]; // 保留 +}NET_DVR_GPS_INFO,*LPNET_DVR_GPS_INFO; //32字节 + +//GPS状态上传 +typedef struct _NET_DVR_GPS_STATUS_ALARM_ +{ + DWORD dwSize; + NET_DVR_TIME_V30 struGPSTime; //GPS 采样时间,采用本地时间 + NET_DVR_GPS_INFO struGPSInfo; //GPS坐标点 + BYTE byRetransFlag; //0-本条 GPS 为实时包;1-本条 GPS 为重传包 + BYTE byNeedsResponse; //回应标记,0:不需回应包,1:需回应包 + BYTE byType;//上报类型 0-无人机 + BYTE byBatteryRemaining;//剩余电量:-1--100; -1表示出错 + int iRollAngle;//俯仰角度,范围-pi - +pi,实际值*100 + int iPitchAngle;//机头朝向角度,范围-pi - +pi,实际值*100 + WORD wRelativeHeight;//相对高度,单位:厘米 + WORD wVerticalSpeed;//垂直速度,单位:厘米/小时 + BYTE byRes2[160]; //保留 +}NET_DVR_GPS_STATUS_ALARM, *LPNET_DVR_GPS_STATUS_ALARM; + +//GPS关联时间 +typedef struct tagNTE_DVR_GPS_DATA +{ + NET_DVR_GPS_INFO struGPSInfo; //GPS坐标点 + NET_DVR_TIME struTime; //GPS坐标对应的时间点,UTC时间 + BYTE byRes[12]; // 保留 +}NET_DVR_GPS_DATA,*LPNET_DVR_GPS_DATA; + +//GPS查找条件结构 +typedef struct tagNET_DVR_GET_GPS_DATA_PAPAM +{ + DWORD dwCmdType; //0-按时间段查找GPS数据,1-按时间点查找GPS数据 + union + { + struct + { + NET_DVR_TIME struBeginTime; //GPS数据查找起始时间 + NET_DVR_TIME struEndTime; //GPS数据查找结束时间 + DWORD dwInterval; //GPS点时间间隔,单位秒 + BYTE byRes[76]; // 保留 + }TimeSeg; + struct + { + NET_DVR_TIME struTimePoint; //GPS数据查找起始时间单位秒 + BYTE byRes[104]; // 保留 + }TimePoint; + }GpsDataParam; +}NET_DVR_GET_GPS_DATA_PARAM,*LPNET_DVR_GET_GPS_DATA_PARAM; + +#define NET_SDK_MAX_CARD_LEN 32 //最大卡号长度 + +//标签信息上传 +typedef struct _NET_DVR_TAG_INFO_ALARM_ +{ + DWORD dwSize; + BYTE byCardNo[NET_SDK_MAX_CARD_LEN/*32*/]; //卡号 + int iRssi;//接收信号强度,范围-100 - +100 + BYTE byIndexCode[64];//平台index code,相当于设备编号 + NET_DVR_TIME_V30 struAcquisitionTime;//获取时间 + BYTE byRFIDInfo[32]; //卡片ID + BYTE byRFIDInfoLen; //卡片ID长度 + BYTE byVoltageLow; //1表示低电压,0表示正常 + BYTE byAlarmFlag; //(通知平台服务器)是否需要报警,1需要,0不需要 + BYTE byDirection; //0表示忽略,1表示入,2表示出,3-255保留 + BYTE byRes[48]; //保留 +}NET_DVR_TAG_INFO_ALARM, *LPNET_DVR_TAG_INFO_ALARM; + + +typedef struct tagNET_DVR_SDKLOCAL_CFG +{ + BYTE byEnableAbilityParse; //使用能力集解析库,0-不使用,1-使用,默认不使用 + BYTE byVoiceComMode; //对讲模式,0-使用对讲库(默认),1-使用windows api模式 + BYTE byLoginWithSimXml; //登录时使用模拟能力,0-不使用,1-使用,默认不使用 + BYTE byCompatibleType; + BYTE byRes[380]; + BYTE byProtectKey[128]; //默认设置为0 +}NET_DVR_SDKLOCAL_CFG, *LPNET_DVR_SDKLOCAL_CFG; + +typedef struct tagNET_DVR_LOCAL_ABILITY_PARSE_CFG +{ + BYTE byEnableAbilityParse; //使用能力集解析库,0-不使用,1-使用,默认不使用 + BYTE byRes[127]; +}NET_DVR_LOCAL_ABILITY_PARSE_CFG, *LPNET_DVR_LOCAL_ABILITY_PARSE_CFG; + +typedef struct tagNET_DVR_LOCAL_TALK_MODE_CFG +{ + BYTE byTalkMode; //对讲模式,0-使用对讲库(默认),1-使用windows api模式 + BYTE byRes[127]; +}NET_DVR_LOCAL_TALK_MODE_CFG, *LPNET_DVR_LOCAL_TALK_MODE_CFG; + + +typedef struct tagNET_DVR_LOCAL_PROTECT_KEY_CFG +{ + BYTE byProtectKey[128]; //默认设置为0 + BYTE byRes[128]; +}NET_DVR_LOCAL_PROTECT_KEY_CFG, *LPNET_DVR_LOCAL_PROTECT_KEY_CFG; + +typedef struct tagNET_DVR_SIMXML_LOGIN +{ + BYTE byLoginWithSimXml; //登录时使用模拟能力校正结构体能力字段,0-不使用,1-使用 + BYTE byRes[127]; +}NET_DVR_SIMXML_LOGIN, *LPNET_DVR_SIMXML_LOGIN; + +//报警回调配置参数 +typedef struct +{ /*控制JSON透传报警(即COMM_VCA_ALARM)的JSON格式。 + 0~新JSON格式,参考4.1.4; + 1~旧JSON格式,参考4.1.5 + */ + BYTE byVcaAlarmJsonType; + BYTE byRes[63]; +}NET_DVR_MESSAGE_CALLBACK_PARAM_V51,*LPNET_DVR_MESSAGE_CALLBACK_PARAM_V51; + +typedef enum tagNET_SDK_LOCAL_CFG_TYPE +{ + NET_SDK_LOCAL_CFG_TYPE_TCP_PORT_BIND = 0, //本地TCP端口绑定配置,对应结构体NET_DVR_LOCAL_TCP_PORT_BIND_CFG + NET_SDK_LOCAL_CFG_TYPE_UDP_PORT_BIND, //本地UDP端口绑定配置,对应结构体NET_DVR_LOCAL_UDP_PORT_BIND_CFG + NET_SDK_LOCAL_CFG_TYPE_MEM_POOL, //内存池本地配置,对应结构体NET_DVR_LOCAL_MEM_POOL_CFG + NET_SDK_LOCAL_CFG_TYPE_MODULE_RECV_TIMEOUT, //按模块配置超时时间,对应结构体NET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG + NET_SDK_LOCAL_CFG_TYPE_ABILITY_PARSE, //是否使用能力集解析库,对应结构体NET_DVR_LOCAL_ABILITY_PARSE_CFG + NET_SDK_LOCAL_CFG_TYPE_TALK_MODE, //对讲模式,对应结构体NET_DVR_LOCAL_TALK_MODE_CFG + NET_SDK_LOCAL_CFG_TYPE_PROTECT_KEY, //密钥设置,对应结构体NET_DVR_LOCAL_PROTECT_KEY_CFG + NET_SDK_LOCAL_CFG_TYPE_CFG_VERSION, //用于测试版本头的设备端兼容情NET_DVR_LOCAL_MEM_POOL_CFG况, 只有在设置参数时才起作用。 + NET_SDK_LOCAL_CFG_TYPE_RTSP_PARAMS, //rtsp参数配置,对于结构体NET_DVR_RTSP_PARAMS_CFG + NET_SDK_LOCAL_CFG_TYPE_SIMXML_LOGIN, //在登录时使用模拟能力补充support字段, 对应结构NET_DVR_SIMXML_LOGIN + NET_SDK_LOCAL_CFG_TYPE_CHECK_DEV, //心跳交互间隔时间 + NET_SDK_LOCAL_CFG_TYPE_SECURITY, //SDK本次安全配置, + NET_SDK_LOCAL_CFG_TYPE_EZVIZLIB_PATH, //配置萤石云通信库地址, + NET_SDK_LOCAL_CFG_TYPE_CHAR_ENCODE, //13.配置字符编码相关处理回调 + NET_SDK_LOCAL_CFG_TYPE_PROXYS, //设置获取代 + NET_DVR_LOCAL_CFG_TYPE_LOG, //日志参数配置 NET_DVR_LOCAL_LOG_CFG + NET_DVR_LOCAL_CFG_TYPE_STREAM_CALLBACK, //码流回调参数配置 NET_DVR_LOCAL_STREAM_CALLBACK_CFG + NET_DVR_LOCAL_CFG_TYPE_GENERAL, //通用参数配置 NET_DVR_LOCAL_GENERAL_CFG + NET_DVR_LOCAL_CFG_TYPE_PTZ, //PTZ是否接收设备返回配置 + NET_DVR_LOCAL_CFG_MESSAGE_CALLBACK_V51, //报警V51回调相关本地配置,对应结构体为NET_DVR_MESSAGE_CALLBACK_PARAM_V51 。(仅对NET_DVR_SetDVRMessageCallBack_V51以上版本有效) + NET_SDK_LOCAL_CFG_CERTIFICATION, //配置和证书相关的参数,对应结构体结构体NET_DVR_LOCAL_CERTIFICATION + NET_SDK_LOCAL_CFG_PORT_MULTIPLEX, //端口复用,对应结构体NET_DVR_LOCAL_PORT_MULTI_CFG + NET_SDK_LOCAL_CFG_ASYNC, //异步配置,对应结构体NET_DVR_LOCAL_ASYNC_CFG + NET_SDK_P2P_LOGIN_2C, + NET_SDK_P2P_LOGIN_2B, + NET_SDK_P2P_LOGOUT, + NET_SDK_AUDIOCAST_CFG //配置广播采样率 ,对应结构体NET_LOCAL_AUDIOCAST_CFG +}NET_SDK_LOCAL_CFG_TYPE; + +typedef enum tagNET_SDK_EXCEPTION_CALLBACK_TYPE +{ + NET_SDK_EXCEPTION_CALLBACK_BY_POOL = 0, //通过线程池异常回调 + NET_SDK_EXCEPTION_CALLBACK_DIRECTLY = 1, //直接异常回调给上层 +}NET_SDK_EXCEPTION_CALLBACK_TYPE; + +typedef struct tagNET_DVR_LOCAL_GENERAL_CFG +{ + BYTE byExceptionCbDirectly; //0-通过线程池异常回调,1-直接异常回调给上层 + BYTE byNotSplitRecordFile; //回放和预览中保存到本地录像文件不切片 0-默认切片,1-不切片 + BYTE byResumeUpgradeEnable; //断网续传升级使能,0-关闭(默认),1-开启 + BYTE byAlarmJsonPictureSeparate; //控制JSON透传报警数据和图片是否分离,0-不分离,1-分离(分离后走COMM_ISAPI_ALARM回调返回) + BYTE byRes[4]; //保留 + UINT64 i64FileSize; //单位:Byte + DWORD dwResumeUpgradeTimeout; //断网续传重连超时时间,单位毫秒 + BYTE byAlarmReconnectMode; //0-独立线程重连(默认) 1-线程池重连 + BYTE byStdXmlBufferSize; //设置ISAPI透传接收缓冲区大小,1-1M 其他-默认 + BYTE byMultiplexing; //0-普通链接(非TLS链接)关闭多路复用,1-普通链接(非TLS链接)开启多路复用 + BYTE byFastUpgrade; //0-正常升级,1-快速升级 + BYTE byAlarmPrealloc; //0-不预分配。其他值为预分配大小,最大64,单位兆 + BYTE byRes1[231]; //预留 +}NET_DVR_LOCAL_GENERAL_CFG, *LPNET_DVR_LOCAL_GENERAL_CFG; + +typedef struct tagNET_SDK_P2P_SERVER_2C +{ + BYTE byPlatformType; //0-国内 1-国外 2-test2 + BYTE byRes1[3]; + char *pAppID; //APP ID + char *pAuthAddr; //认证服务器IP地址 + char *pPlatformAddr; //平台服务IP地址 + char *pUserName; //账号 + char *pPassword; //密码 + BYTE byRes[40]; +} NET_SDK_P2P_SERVER_2C, *LPNET_DVR_P2P_SERVER_2C; + +typedef struct tagNET_SDK_P2P_SERVER_2B +{ + BYTE byPlatformType; //0-国内 1-国外 2-test2 + BYTE byRes1[3]; + char *pAppID; //APP ID + char *pAuthAddr; //认证服务器IP地址 + char *pPlatformAddr; //平台服务IP地址 + char *pToken; //Token + BYTE byRes[44]; +} NET_SDK_P2P_SERVER_2B, *LPNET_DVR_P2P_SERVER_2B; + +typedef struct tagNET_DVR_LOCAL_ASYNC_CFG +{ + BOOL bEnable; //异步配置使能,true-开启 + BYTE byRes[60]; +}NET_DVR_LOCAL_ASYNC_CFG, *LPNET_DVR_LOCAL_ASYNC_CFG; + +typedef struct tagNET_DVR_LOCAL_STREAM_CALLBACK_CFG +{ + BYTE byPlayBackEndFlag; //0-不回调回放结束标记,1-回调回放结束标记 + BYTE byRes[255]; //保留 +}NET_DVR_LOCAL_STREAM_CALLBACK_CFG, *LPNET_DVR_LOCAL_STREAM_CALLBACK_CFG; + +typedef void(CALLBACK *LOGCALLBACK)(char *pContent, unsigned int dwInputLen, int wLogLevel, void *pData); + +typedef struct tagNET_DVR_LOCAL_LOG_CFG +{ + WORD wSDKLogNum; + LOGCALLBACK fnCB; //日志回调 + void *pUserData; //用户指针 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE byRes[238]; //保留 +#else + BYTE byRes[246]; //保留 +#endif +}NET_DVR_LOCAL_LOG_CFG, *LPNET_DVR_LOCAL_LOG_CFG; + +typedef int(CALLBACK * CHAR_ENCODE_CONVERT)(char * pInput, DWORD dwInputLen, DWORD dwInEncodeType, char *pOutput, DWORD dwOutputLen, DWORD dwOutEncodeType); + +typedef struct tagNET_DVR_LOCAL_BYTE_ENCODE_CONVERT +{ + CHAR_ENCODE_CONVERT fnCharConvertCallBack; + BYTE byRes[256]; +}NET_DVR_LOCAL_BYTE_ENCODE_CONVERT, *LPNET_DVR_LOCAL_BYTE_ENCODE_CONVERT; + +typedef struct tagNET_DVR_LOCAL_SECURITY +{ + BYTE bySecurityLevel;//私有协议通信模式, //0-兼容模式(默认),允许所有的SDK登录协议通过,1-安全模式(MD5), 允许RSA和MD5登录,开启校验2-安全模式(RSA)RSA登录,开启校验 + BYTE byRes[255]; +}NET_DVR_LOCAL_SECURITY, *LPNET_DVR_LOCAL_SECURITY; + +typedef struct tagNET_DVR_LOCAL_CHECK_DEV +{ + DWORD dwCheckOnlineTimeout; //巡检时间间隔,单位ms 最小值为30s,最大值120s。为0时,表示用默认值(120s) + DWORD dwCheckOnlineNetFailMax; //由于网络原因失败的最大累加次数;超过该值SDK才回调用户异常,为0时,表示使用默认值1 + BYTE byRes[256]; +}NET_DVR_LOCAL_CHECK_DEV,*LPNET_DVR_LOCAL_CHECK_DEV; + +typedef struct tagNET_DVR_LOCAL_PTZ_CFG +{ + BYTE byWithoutRecv; //0-接收设备返回,1-不接收设备返回 + BYTE byRes[63]; +}NET_DVR_LOCAL_PTZ_CFG, *LPNET_DVR_LOCAL_PTZ_CFG; + +typedef struct tagNET_DVR_LOCAL_CFG_VERSION +{ + BYTE byVersion; //版本信息 + BYTE byRes[63]; //保留 +}NET_DVR_LOCAL_CFG_VERSION, *LPNET_DVR_LOCAL_CFG_VERSION; + +typedef struct tagNET_DVR_LOCAL_TCP_PORT_BIND_CFG +{ + WORD wLocalBindTcpMinPort; //本地绑定Tcp最小端口 + WORD wLocalBindTcpMaxPort; //本地绑定Tcp最大端口 + BYTE byRes[60]; //保留 +}NET_DVR_LOCAL_TCP_PORT_BIND_CFG, *LPNET_DVR_LOCAL_TCP_PORT_BIND_CFG; + + +typedef struct tagNET_DVR_LOCAL_UDP_PORT_BIND_CFG +{ + WORD wLocalBindUdpMinPort; //本地绑定Udp最小端口 + WORD wLocalBindUdpMaxPort; //本地绑定Udp最大端口 + BYTE byRes[60]; //保留 +}NET_DVR_LOCAL_UDP_PORT_BIND_CFG, *LPNET_DVR_LOCAL_UDP_PORT_BIND_CFG; + + +typedef struct tagNET_DVR_LOCAL_MEM_POOL_CFG +{ + DWORD dwAlarmMaxBlockNum; //报警模块内存池最多向系统申请的内存块(block)个数,每个block为64MB, 超过这个上限则不向系统申请,0表示无上限 + DWORD dwAlarmReleaseInterval; //报警模块空闲内存释放的间隔,单位秒,为0表示不释放 + DWORD dwObjectReleaseInterval; //对象申请模块空闲内存释放的间隔,单位秒,为0表示不释放 + BYTE byRes[508]; //保留 +}NET_DVR_LOCAL_MEM_POOL_CFG, *LPNET_DVR_LOCAL_MEM_POOL_CFG; + +typedef struct tagNET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG +{ + DWORD dwPreviewTime; //预览模块超时时间 + DWORD dwAlarmTime; //报警模块超时时间 + DWORD dwVodTime; //回放模块超时时间 + DWORD dwElse; //其他模块 + BYTE byRes[512]; //保留 +}NET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG, *LPNET_DVR_LOCAL_MODULE_RECV_TIMEOUT_CFG; + +#define MAX_CERTIFICATE_ISSUER_LEN 64 //证书颁发者长度 +#define MAX_CERTIFICATE_VALIDITY_LEN 128 //证书有效时间长度 +#define MAX_CERTIFICATE_SUBJECT_LEN 64 //证书持有者长度 +typedef struct tagNET_DVR_CETTIFICATE_INFO +{ + DWORD dwSize; + char szIssuer[MAX_CERTIFICATE_ISSUER_LEN]; //证书颁发者 + char szSubject[MAX_CERTIFICATE_SUBJECT_LEN]; //证书持有者 + NET_DVR_TIME struStartTime; + NET_DVR_TIME struEndTime; + BYTE byRes1[1024]; +}NET_DVR_CETTIFICATE_INFO, *LPNET_DVR_CETTIFICATE_INFO; + +typedef BOOL(CALLBACK *fnCertVerifyResultCallBack) (DWORD uiResult, LPNET_DVR_CETTIFICATE_INFO lpCertificateInfo, char *pUserData); + +#define MAX_FILE_PATH_LEN 256 //文件路径长度 +typedef struct tagNET_DVR_LOCAL_CERTIFICATION +{ + char szLoadPath[MAX_FILE_PATH_LEN]; + fnCertVerifyResultCallBack fnCB; + void* pUserData; + BYTE byRes[64]; +}NET_DVR_LOCAL_CERTIFICATION, *LPNET_DVR_LOCAL_CERTIFICATION; + +typedef struct tagNET_DVR_LOCAL_PORT_MULTI_CFG +{ + BOOL bEnable; //端口复用使能,true-开启 + BYTE byRes[60]; +}NET_DVR_LOCAL_PORT_MULTI_CFG, *LPNET_DVR_LOCAL_PORT_MULTI_CFG; + +typedef struct tagNET_DVR_RTSP_PARAMS_CFG +{ + DWORD dwMaxBuffRoomNum; //rtp over udp排序开辟的最大缓冲区个数,0为无效,使用默认值20 + //一个缓冲区开辟内存为10K多一点,缓冲区个数越多,处理乱序的能力则越强,流畅性越好,延时也越大 + BYTE byUseSort; //是否开启rtp over udp排序, 0-不开启 1-开启 + BYTE byRes[123]; +}NET_DVR_RTSP_PARAMS_CFG, *LPNET_DVR_RTSP_PARAMS_CFG; + +typedef struct tagNET_DVR_OPTICAL_CHANNEL_BIND +{ + WORD wChannelIndex; //光口号(0-7) + WORD wSubChannel; //光口子通道号,取值范围从能力集获取 + BYTE byBind; //0-不绑定或清除绑定,1-绑定 + BYTE byRes[3]; +}NET_DVR_OPTICAL_CHANNEL_BIND,*LPNET_DVR_OPTICAL_CHANNEL_BIND; + +typedef struct tagNET_DVR_OPTICAL_CHANNEL_CFG +{ + DWORD dwSize; + NET_DVR_OPTICAL_CHANNEL_BIND struBindVideo;//视频绑定 + NET_DVR_OPTICAL_CHANNEL_BIND struBindAudio;//音频绑定 + BYTE byRes[16]; //保留 +}NET_DVR_OPTICAL_CHANNEL_CFG,*LPNET_DVR_OPTICAL_CHANNEL_CFG; + +typedef struct tagNET_DVR_OPTICAL_INFO +{ + DWORD dwSize; + BYTE bySlotNum;//编码子系统槽位号 + BYTE byChannel; //编码通道号 + BYTE byRes[18]; +}NET_DVR_OPTICAL_INFO,*LPNET_DVR_OPTICAL_INFO; + +//音频切换 +typedef struct tagNET_DVR_AUDIO_SURCHAN_CFG +{ + DWORD dwSize; + BYTE byStatus; //音频是否开启,1-开,0-关 + BYTE byRes1[3]; + //以下参数当byStatus == 1时有效 + DWORD dwSubWinNum; //关联的子窗口号 + DWORD dwSurChanNum; /*布防通道号 */ + NET_DVR_IPADDR struIpaddr; /*布防通道地址 */ + WORD wPort; /*布防通道端口 */ + BYTE byRes2[14]; +}NET_DVR_AUDIO_SURCHAN_CFG, *LPNET_DVR_AUDIO_SURCHAN_CFG; + +//端口聚合 +#define MAX_ETHERNET_PORT_NUM 8//每条链路最大端口数 +typedef struct tagNET_DVR_ETHERNET_CHANNEL_INFO +{ + DWORD dwSize; + BYTE byConverge[MAX_ETHERNET_PORT_NUM]; + //byConverge[i] = j表示将第i个端口加入到第j条链路,j的取值为1-8,j=0表示移除 + BYTE byRes[32]; +}NET_DVR_ETHERNET_CHANNEL_INFO,*LPNET_DVR_ETHERNET_CHANNEL_INFO; + +//畅显 +typedef struct tagNET_DVR_SPARTAN_INFO +{ + DWORD dwSize; + BYTE bySpartanStatus; //0-畅显关,1-畅显开 + BYTE byRes[31]; +}NET_DVR_SPARTAN_INFO,*LPNET_DVR_SPARTAN_INFO; + +typedef struct tagNET_DVR_IPADDR_FILTERCFG +{ + DWORD dwSize; + BYTE byEnable; //启用IP地址过滤,0-否,1-是 + BYTE byFilterType; //过滤类型,0-禁用,1-允许 + BYTE byRes[18]; + BYTE byIPAddr[1024]; //IP地址信息,格式192.168.1.2;192.168.1.3 +}NET_DVR_IPADDR_FILTERCFG, *LPNET_DVR_IPADDR_FILTERCFG; + +typedef struct tagNET_DVR_LOGO_OVERLAYCFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-否,1-是 + BYTE byRes1[3]; + DWORD dwCoordinateX; //图片显示区域X坐标 + DWORD dwCoordinateY; //图片显示区域Y坐标 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + BYTE byLogoName[16];//Logo名称 +}NET_DVR_LOGO_OVERLAYCFG,*LPNET_DVR_LOGO_OVERLAYCFG; + + +typedef struct tagNET_DVR_INVALID_DISK_PARAM +{ + NET_DVR_STRUCTHEAD struStructHead; + DWORD dwDiskNo; // 磁盘号 + BYTE byDelAll; // 0-删除dwDiskNo 1-删除全部无效磁盘 + BYTE byres[31]; +}NET_DVR_INVALID_DISK_PARAM, *LPNET_DVR_INVALID_DISK_PARAM; + + +typedef struct tagNET_DVR_INVALID_MOUNT_DISK_PARAM +{ + NET_DVR_STRUCTHEAD struStructHead; + DWORD dwDiskNo; // 磁盘号 + BYTE byres[32]; +}NET_DVR_MOUNT_DISK_PARAM, *LPNET_DVR_MOUNT_DISK_PARAM; + +// 长连接回调类型 +typedef enum +{ + NET_SDK_CALLBACK_TYPE_STATUS = 0, // 回调状态值 + NET_SDK_CALLBACK_TYPE_PROGRESS, // 回调进度值 + NET_SDK_CALLBACK_TYPE_DATA // 回调数据内容 +}NET_SDK_CALLBACK_TYPE; + + +// 回调类型为NET_SDK_CALLBACK_TYPE_STATUS时的状态值 +typedef enum +{ + NET_SDK_CALLBACK_STATUS_SUCCESS = 1000, // 成功 + NET_SDK_CALLBACK_STATUS_PROCESSING, // 处理中 + NET_SDK_CALLBACK_STATUS_FAILED, // 失败 + NET_SDK_CALLBACK_STATUS_EXCEPTION, // 异常 + NET_SDK_CALLBACK_STATUS_LANGUAGE_MISMATCH, //(IPC配置文件导入)语言不匹配 + NET_SDK_CALLBACK_STATUS_DEV_TYPE_MISMATCH, //(IPC配置文件导入)设备类型不匹配 + NET_DVR_CALLBACK_STATUS_SEND_WAIT, // 发送等待 +}NET_SDK_CALLBACK_STATUS_NORMAL; + + +//一键配置通用状态 +#define NET_SDK_OKC_STATUS_SUCCESS 1000 //一键配置成功 +#define NET_SDK_OKC_STATUS_FAILED 1002 //一键配置失败 + +//一键配置CVR状态 +#define NET_SDK_OKC_STATUS_START_CONFIG 1003 //开始配置 +#define NET_SDK_OKC_CHECK_HD 1004 //检测磁盘 +#define NET_SDK_OKC_INIT_HD 1005 //初始化磁盘 +#define NET_SDK_OKC_CREATE_RAID_OR_SINGLE_DISK 1006 //创建阵列或者单盘模式 +#define NET_SDK_OKC_INIT_CVR_SERVICE 1007 //初始化CVR服务 +#define NET_SDK_OKC_CREATE_RECORD_VOLUME 1008 //创建录像卷 + +//以下为一键配置失败的状态码——part1 +#define NET_SDK_OKC_ERR_LOAD_CONF_FAILED 1009 //加载配置文件失败 +#define NET_SDK_OKC_ERR_NOT_SUPPORT_RAID_LEVLE 1010 //不支持此种类型的raid +#define NET_SDK_OKC_ERR_CONFIGURATION_CONFLICT 1011 //系统已经存在raid或存储池 +#define NET_SDK_OKC_ERR_GET_DISK_INFO_FAILED 1012 //获取磁盘信息失败 +#define NET_SDK_OKC_ERR_CHECK_DISK_FAILED 1013 //检测磁盘失败 +#define NET_SDK_OKC_ERR_INIT_DISK_FAILED 1014 //初始化磁盘失败 +#define NET_SDK_OKC_ERR_DISK_CAPACITY_SMALL 1015 //磁盘总容量不足 +#define NET_SDK_OKC_ERR_BOTH_SV_NS 1016 //同时存在SV盘和NS盘 +#define NET_SDK_OKC_ERR_CREATE_RAID_FAILED 1017 //创建raid失败 +#define NET_SDK_OKC_ERR_GET_RAID_FAILED 1018 //获取raid失败 +#define NET_SDK_OKC_ERR_CREATE_SPARE_FAILED 1019 //创建热备盘失败 +#define NET_SDK_OKC_ERR_CREATE_STORAGE_POOL_FAILED 1020 //创建存储池失败 +#define NET_SDK_OKC_ERR_GET_POOL_INFO_FAILED 1021 //获取存储池信息失败 +#define NET_SDK_OKC_ERR_CREATE_LUN_FAILED 1022 //创建lun卷失败 +#define NET_SDK_OKC_ERR_GET_LUN_INFO_FAILED 1023 //获取lun信息失败 +#define NET_SDK_OKC_ERR_CREATE_BACKUP_FAILED 1024 //创建预留卷失败 +#define NET_SDK_OKC_ERR_GET_BACKUP_FAILED 1025 //获取预留卷失败 +#define NET_SDK_OKC_ERR_CREATE_PRIVATE_LUN_FAILED 1026 //创建私有卷失败 +#define NET_SDK_OKC_ERR_CREATE_RV_FAILED 1027 //创建录像卷失败 +#define NET_SDK_OKC_ERR_CREATE_ARCH_RV_FAILED 1028 //创建存档卷失败 +#define NET_SDK_OKC_ERR_START_CVR_SERVICE_FAILED 1029 //开启CVR服务失败 + +//一键配置SAN状态 +#define NET_SDK_OKC_CREATING_ARRAY 1030 //创建阵列阶段 +#define NET_SDK_OKC_CREATING_STORAGE_POOL 1031 //创建存储池阶段 +#define NET_SDK_OKC_CREATING_LUN_VOL 1032 //创建逻辑卷阶段 +#define NET_SDK_OKC_CREATING_ISCSI 1033 //创建ISCSI阶段 +#define NET_SDK_OKC_ERR_HOT_SPARE_CONFICT 1034 //已存在热备盘 +#define NET_SDK_OKC_ERR_STORAGE_POOL_CONFICT 1035 //已存在存储池 +#define NET_SDK_OKC_ERR_RAID_CONFLICT 1036 //系统已经存在阵列 +#define NET_SDK_OKC_ERR_OPEN_ISCSI_FAILED 1037 //开启ISCSI失败 +#define NET_SDK_OKC_ERR_DEVICE_NOSUPPORT_SAN 1038 //设备不支持san + +//以下为一键配置失败的状态码——part2 +#define NET_SDK_OKC_ERR_SAPRE_NUM_EXCEED 1101 //热备盘个数过多 +#define NET_SDK_OKC_ERR_CREATE_PIC_VOLUME_FAILED 1102 //创建图片卷失败 + +typedef enum +{ + NET_SDK_GET_NEXT_STATUS_SUCCESS = 1000, // 成功读取到数据,客户端处理完本次数据后需要再次调用NET_DVR_RemoteConfigGetNext获取下一条数据 + NET_SDK_GET_NETX_STATUS_NEED_WAIT, // 需等待设备发送数据,继续调用NET_DVR_RemoteConfigGetNext函数 + NET_SDK_GET_NEXT_STATUS_FINISH, // 数据全部取完,此时客户端可调用NET_DVR_StopRemoteConfig结束长连接 + NET_SDK_GET_NEXT_STATUS_FAILED, // 出现异常,客户端可调用NET_DVR_StopRemoteConfig结束长连接 +}NET_SDK_GET_NEXT_STATUS; + +// 用户调用SendwithRecv接口时,接口返回的状态 +typedef enum +{ + NET_SDK_CONFIG_STATUS_SUCCESS = 1000, // 成功读取到数据,客户端处理完本次数据后需要再次调用NET_DVR_SendWithRecvRemoteConfig获取下一条数据 + NET_SDK_CONFIG_STATUS_NEEDWAIT, // 配置等待,客户端可重新NET_DVR_SendWithRecvRemoteConfig + NET_SDK_CONFIG_STATUS_FINISH, // 数据全部取完,此时客户端可调用NET_DVR_StopRemoteConfig结束 + NET_SDK_CONFIG_STATUS_FAILED, // 配置失败,客户端可重新NET_DVR_SendWithRecvRemoteConfig下发下一条 + NET_SDK_CONFIG_STATUS_EXCEPTION, // 配置异常,此时客户端可调用NET_DVR_StopRemoteConfig结束 +}NET_SDK_SENDWITHRECV_STATUS; + +//导入配置文件错误码 +typedef enum tagNET_SDK_IPC_CFG_FILE_ERR_CODE +{ + NET_SDK_IPC_CFG_FILE_NO_ERR = 0, /* 没出错 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_INVALID = 1, /* 通道ID非法 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_CHANNEL_DUPLICATE, /* 通道ID重复 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_INVALID, /* 通道IP或域名非法 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_DUPLICATE, /* 通道IP或域名重复 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_IP_CONFLICT_WITH_LOCAL, /* 通道IP与本地IP冲突 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PROTOCOL_INVALID, /* 协议错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PORT_INVALID, /* 管理端口错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_DEVICE_CHANNEL_ERR, /* 设备通道号错误 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_USER_NAME_ERR, /* 用户名含非法字符 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_PASSWD_ERR, /* 密码含非法字符 */ + NET_SDK_IPC_CFG_FILE_ERR_CODE_TRANSPORT_PROTOCOL_INVALID /*传输协议错误*/ +}NET_SDK_IPC_CFG_FILE_ERR_CODE; + +//IPC升级错误码 +typedef enum +{ + NET_SDK_UPGRADE_IPC_INVALID = 0, //无效通道或未选择该通道升级 + NET_SDK_UPGRADE_IPC_SUCCESS, //升级成功 + NET_SDK_UPGRADE_IPC_OFFLINE, //IPC不在线 + NET_SDK_UPGRADE_IPC_NOT_SUPPORT, //IPC不支持升级命令 + NET_SDK_UPGRADE_IPC_LANGUAGE_MISMATCH, //语言不匹配 + NET_SDK_UPGRADE_IPC_WRITE_FLASH_FAILED, //写flsh失败 + NET_SDK_UPGRADE_IPC_OTHER_ERROR //其他错误 +}NET_SDK_UPGRADE_IPC_ERR_CODE; + +typedef enum +{ + NET_SDK_REMOTE_CONFIG_STATUS_SUCCESS = 1001,//录播主机一键发布成功 + NET_SDK_REMOTE_CONFIG_STATUS_FAILED, //录播主机一键发布失败 + NET_SDK_REMOTE_CONFIG_STATUS_PROCESSING //录播主机一键发布正在获取 +}NET_SDK_REMOTE_CONFIG_STATUS; + +#define MAX_CODE_CARD_SUPPORTDISPNUMS 8//每个编码卡最多支持的显示通道数 +#define MAX_SUPPORT_RES 32 + +typedef enum _BOARD_TYPE +{ + DS4004HC_BOARD =2, //4004HC + DS4008HC_BOARD =3, //4008HC + DS4016HC_BOARD =4, //4016HC + DS4001HF_BOARD =5, //4001HF + DS4004HF_BOARD =6, //4004HF + DS4002MD_BOARD =7, //4002MD + DS4004MD_BOARD =8, //4004MD + DS4016HCS_BOARD =9, //4016HCS + DS4004HC_PLUS_BOARD =13, //4004HC+ + DS4008HC_PLUS_BOARD =14, //4008HC+ + DS4016HC_PLUS_BOARD =15, //4016HC+ + DS4008HF_BOARD =16, //4008HF + DS4008MD_BOARD =17, //4008MD + DS4008HS_BOARD =18, //4008HS + DS4016HS_BOARD =19, //4016HS + + DS4108HCV_BOARD =20, //4108HCV + DS4116HCV_BOARD =21, //4116HCV + DS5016HC_BOARD =22, //5016HC + + DS4208HFV_BOARD =23, //4208HFV + DS4216HC_BOARD =24, //4216HC + DS4216HFV_BOARD =25, //4216HFV + + DS5008HF_BOARD =26, //5008HF + DS5116HF_BOARD =27, //5116HF + + DS5216HC_BOARD =28, //5216HC + DS5208HF_BOARD =29, //5208HF + DS5216HF_BOARD =30, //5216HF + + DS4101HD_BOARD =31, //4101HD + DS4102HD_BOARD =32, //4102HD + DS4104HD_BOARD =33, //4104HD + + DS4002MD_PLUS_BOARD =34, //4002MD+ + DS4004MD_PLUS_BOARD =35, //4004MD+ + + DS4204HFV_BOARD =36, //4204HFV + DS4308HCV_BOARD =37, //4308HCV + DS4308HFV_BOARD =38, //4308HFV + DS4316HCV_BOARD =39, //4316HCV + DS4316HFV_BOARD =40, //4316HFV + DS4304HD_BOARD =41, //4304HD + DS4304HFH_BOARD =42, //4304HFH + DS4304HFV_BOARD =43, //4304HFV + DS4302HFH_BOARD =44, //4302HFH + DS5316HF_BOARD =45, //5316HF + DS4308HW_BOARD =46, //4308HW + DS4316HW_BOARD =47, //4316HW + DS4308MD_BOARD =48, //4308MD + UNKNOWN_BOARD_TYPE =0xffffffff, +}BOARD_TYPE; + +typedef struct tagNET_DVR_CODECARD_ABILITY /*高清编码卡能力集*/ +{ + BYTE byCardType; //编码卡类型(按BOARD_TYPE中的枚举) + BYTE byCodeNums; //编码通道数 + BYTE byDispNums; //显示通道数 + BYTE byCodeStartIdx; //首个编码通道在所有编码通道中的索引 + BYTE byDispStartIdx; //首个显示通道在所有显示通道中的索引 + BYTE byRes1[3]; + DWORD dwVgaSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwHdmiSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwDviSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + DWORD dwYpbprSupportResolution[MAX_SUPPORT_RES/*32*/];//支持的分辨率 + BYTE byDispFormat[MAX_CODE_CARD_SUPPORTDISPNUMS]; //支持的输出模式(按HD_DISPLAY_FORMAT中的枚举) + BYTE byWindowMode[MAX_CODE_CARD_SUPPORTDISPNUMS][12]; //支持的窗口模式(比如1,2,4,9,16)) + BYTE byRes2[36]; +}NET_DVR_CODECARD_ABILITY,*LPNET_DVR_CODECARD_ABILITY; + +#define MAX_CODE_CARD_NUM 8 //最多高清编码卡数 +typedef struct tagNET_DVR_CODESVR_ABILITY +{ + DWORD dwSize; /* 结构体大小 */ + BYTE byCardNums; /* 编码卡数 */ + BYTE byStartChan; /* 起始通道号 */ + BYTE byRes1[2]; + NET_DVR_CODECARD_ABILITY struCodeCardAbility[MAX_CODE_CARD_NUM]; + BYTE byRes2[64]; +}NET_DVR_CODESVR_ABILITY, *LPNET_DVR_CODESVR_ABILITY; + +typedef struct tagNET_DVR_CODER_SERVER_OUTPUT_CFG +{ + DWORD dwSize; + BYTE byDispChanType; /*显示通道类型:0-BNC,1-VGA,2-HDMI,3-DVI*/ //此参数只能获取 + BYTE byVedioFormat; /*1:NTSC,2:PAL,0-NULL*/ + BYTE byRes1[2]; + DWORD dwResolution; //分辨率 + DWORD dwWindowMode; /*画面模式,支持模式从能力集获取*/ + BYTE byRes2[64]; +}NET_DVR_CODER_SERVER_OUTPUT_CFG,*LPNET_DVR_CODER_SERVER_OUTPUT_CFG; + +typedef struct tagNET_DVR_DISPLAY_START_INFO +{ + DWORD dwSize; + DWORD dwDisplayChan; //显示通道号 + DWORD dwCodeChan; //编码通道号 + DWORD dwWinNum; //窗口号,从1起 + BYTE byEnableAudio; //开启音频,0-关,1-开 + BYTE byRes[31]; +}NET_DVR_DISPLAY_START_INFO,*LPNET_DVR_DISPLAY_START_INFO; + +typedef struct tagNET_DVR_CODER_WINDOW_INFO +{ + DWORD dwSize; + DWORD dwDisplayChan;//显示通道号 + DWORD dwWinNum; //窗口号,从1开始 + BYTE byRes[16]; +}NET_DVR_CODER_WINDOW_INFO,*LPNET_DVR_CODER_WINDOW_INFO; + +typedef struct tagNET_DVR_WINDOW_STATUS +{ + DWORD dwSize; //结构大小 + DWORD dwCodeChan; /*编码通道号*/ + BYTE byDisplay; /*是否输出,0-否,1-是*/ + BYTE byAudio; /*音频是否开启,0-否,1-是*/ + BYTE byRes[30]; +}NET_DVR_WINDOW_STATUS,*LPNET_DVR_WINDOW_STATUS; + +typedef struct tagNET_DVR_RECORD_LOCK_PERCENTAGE +{ + DWORD dwSize; //结构体大小 + BYTE byPercentage; //百分比,取值范围[0,100] + BYTE byRes[31]; //保留 +}NET_DVR_RECORD_LOCK_PERCENTAGE, *LPNET_DVR_RECORD_LOCK_PERCENTAGE; + +typedef struct tagNET_DVR_UPDATE_RECORD_INFO +{ + DWORD dwSize; //结构体大小 + NET_DVR_STREAM_INFO struStreasmInfo; //流ID + DWORD dwBeginTime; //录像总的开始时间 + DWORD dwEndTime; //录像总的结束时间 + BYTE byRes[32]; //保留 +}NET_DVR_UPDATE_RECORD_INFO, *LPNET_DVR_UPDATE_RECORD_INFO; + +typedef struct tagNET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA +{ + NET_DVR_STREAM_INFO struStreamInfo; + DWORD dwCmdType; //外部触发类型 + DWORD dwRecordTimeLen; //录像持续时间,单位:秒 + BYTE byEventID[MAX_EVENTID_LEN]; //事件ID,作为附加信息 + DWORD dwLockDuration; //锁定持续时间,单位:秒,0xffffffff- 永久锁定,0- 不锁 + BYTE byBackUp; //是否存档,0-不存档,1-存档 + BYTE byPreRecord; //是否预录,0-不预录,1-预录 + BYTE byRes[122]; +}NET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA, *LPNET_DVR_CMD_TRIGGER_PERIOD_RECORD_PARA; + +typedef struct tagNET_DVR_LOCK_FILE_BY_NAME_PARA +{ + BYTE byFileName[NAME_LEN]; // 录像文件名,老协议只传32个文件名 + DWORD dwLockDuration; // 锁定持续时间,单位秒,0xffffffff表示永久锁定 + BYTE byRes[512]; +}NET_DVR_LOCK_FILE_BY_NAME_PARA, *LPNET_DVR_LOCK_FILE_BY_NAME_PARA; + + +typedef struct tagNET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,……(自定义码流类型需通过GET /ISAPI/Streaming/channels//customStream获取当前通道已经添加的所有自定义码流ID。自定义码流为6~10,其索引值就是6~10) + BYTE byRes[32]; +}NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND, *LPNET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND; + + +typedef struct tagNET_DVR_MULTI_STREAM_COMPRESSIONCFG +{ + DWORD dwSize; + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + NET_DVR_COMPRESSION_INFO_V30 struStreamPara; //码流压缩参数 + DWORD dwResolution; //当分辨率索引小于255时和byResolution保持一致,大于255时以该字段返回索引值判断。 + BYTE byRes[76]; +}NET_DVR_MULTI_STREAM_COMPRESSIONCFG, *LPNET_DVR_MULTI_STREAM_COMPRESSIONCFG; + +typedef struct tagNET_DVR_PUSHALARMINFO_V40 +{ + DWORD dwAlarmType; /*0-信号量报警,1-硬盘满,2-信号丢失,3-移动侦测,4-硬盘未格式化,5-读写硬盘出错,6-遮挡报警,7-制式不匹配, 8-非法访问, 9-视频信号异常,10-录像异常 11- 智能场景变化 12-阵列异常 */ + union + { + BYTE byRes[300]; + struct + { + DWORD dwAlarmInputNumber; /*按位,第0位对应第0个输入端口,dwAlarmType为0时需要设置*/ + BYTE byAlarmOutputNumber[MAX_ALARMOUT_V30]; /*按位,第0位对应第0个输出端口, */ + BYTE byAlarmRelateChannel[MAX_CHANNUM_V30]; /*按位,第0位对应第0个通道*/ + BYTE byRes1[97]; + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ + BYTE byRes2[7]; + }struIOAlarm; + struct + { + BYTE byStreamID[STREAM_ID_LEN]; // ID信息 + BYTE byRes1[132]; + BYTE byChannel[MAX_CHANNUM_V30]; /*按位,0x2表示第1通道,第1位对应第1个通道(从通道1开始),dwAlarmType为2或3, 6,9,10时需要设置, */ + BYTE byRes2[33]; + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ + BYTE byRes3[7]; + }struStreamIDorChannel; + struct + { + BYTE byRes1[228]; + BYTE byDiskNumber[MAX_DISKNUM_V30]; /*按位,第0位对应第0个硬盘,dwAlarmType为1,4,5时需要设置*/ + BYTE byDeviceID[NAME_LEN]; /*设备的ID串*/ + BYTE byRes2[7]; + }struDiskAlarm; + }uAlarmInfo; +}NET_DVR_PUSHALARMINFO_V40, *LPNET_DVR_PUSHALARMINFO_V40; + +typedef struct tagNET_DVR_RECORD_PACK +{ + NET_DVR_STRUCTHEAD struStruceHead; + DWORD dwPackageInterval; // 打包时间间隔 ,时间单位:分钟 + BYTE byRes[32]; // 保留 +}NET_DVR_RECORD_PACK,*LPNET_DVR_RECORD_PACK; + +#define NET_DVR_FIND_NAS_DIRECTORY 6161 //查找NAS目录 +#define NET_DVR_NAS_FINDING 0 //正在查找 +#define NET_DVR_NAS_RECV 1 //接收数据 +#define NET_DVR_NAS_OVER 2 //查找结束 +#define NET_DVR_NAS_EXCEPTION 3 //接收异常 +typedef struct tagNET_DVR_NET_DISK_SERACH_PARAM +{ + NET_DVR_IPADDR struIP; // IP地址 + WORD wPort; // IP端口 + BYTE byRes[10]; // 保留字节 +}NET_DVR_NET_DISK_SERACH_PARAM, *LPNET_DVR_NET_DISK_SERACH_PARAM; + + +typedef struct tagNET_DVR_NET_DISK_SERACH_RET +{ + BYTE byDirectory[128]; // 返回的文件目录 + BYTE byRes[20]; +}NET_DVR_NET_DISK_SERACH_RET, *LPNET_DVR_NET_DISK_SERACH_RET; + +typedef struct tagNET_DVR_WD1_CFG +{ + NET_DVR_STRUCTHEAD struStruceHead; + BYTE byWD1Enable; //WD1使能开关 0 关闭 1 开启 + BYTE byRes[31]; //保留 +}NET_DVR_WD1_CFG, *LPNET_DVR_WD1_CFG; + +typedef struct tagNET_DVR_FTPCFG_V40 +{ + NET_DVR_STRUCTHEAD struStruceHead; + BYTE byEnableFTP; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byProtocolType; /*协议类型 0-FTP,1-SFTP*/ + WORD wFTPPort; /*端口*/ + union + { + struct + { + BYTE szDomain[64]; //服务器地址,可以使IPv4 IPv6或是域名 + BYTE byRes1[80]; + }struDomain; + struct + { + NET_DVR_IPADDR struIp; /*IP地址:IPv4 IPv6地址, 144字节*/ + }struAddrIP; + }unionServer; //使用联合体结构,防止既是IP地址又是域名的情况 + BYTE szUserName[32]; /*用户名*/ + BYTE szPassWORD[16]; /*密码*/ + BYTE szTopCustomDir[64]; /*自定义一级目录*/ + BYTE szSubCustomDir[64]; /*自定义二级目录*/ + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, 1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月),0x6-使用自定义 ,0x7=违规类型,0x8=方向,0x9=地点*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名,0x2=使用通道号 0x3=使用时间(年月日), + 0x4=使用车道号,0x5-使用自定义, 0x6=违规类型,0x7=方向,0x8=地点,0x9 = 车位编号*/ + BYTE byType; /* 0-主服务器,1-备服务器*/ + BYTE byEnableAnony; /*启用匿名 0-否 1是*/ + BYTE byAddresType; /*0 使用IPV4、IPV6 1- 使用域名*/ + BYTE byFTPPicType; //0-保留,1-停车场抓拍图片命名规则 + BYTE byPicArchivingInterval; //图片归档间隔[1~30],0表示关闭 + NET_DVR_PICTURE_NAME_EX struPicNameRule; /* 图片命名规则: + byFTPPicType ==1的时候,自数组内的命名规则是停车场抓拍图片命名规则*/ + BYTE byPicNameRuleType; //图片命令规则类型;0~默认类型,1~图片前缀名定义(启用struPicNameRule中的byPicNamePrefix字段) + BYTE byRes[203]; /*保留*/ +}NET_DVR_FTPCFG_V40, *LPNET_DVR_FTPCFG_V40; + +typedef struct tagNET_DVR_FTP_TYPE +{ + BYTE byType; // 0-主服务器,1-备服务器 + BYTE byRes[3]; +}NET_DVR_FTP_TYPE, *LPNET_DVR_FTP_TYPE; + +//FTP服务器测试参数结构体 +typedef struct +{ + DWORD dwSize; + BYTE byEnableFTP; /*是否启动ftp上传功能,0-否,1-是*/ + BYTE byProtocolType; /*协议类型 0-FTP,1-SFTP*/ + WORD wFTPPort; /*端口*/ + union + { + BYTE byRes[144]; + struct + { + BYTE szDomain[MAX_DOMAIN_NAME]; //服务器地址,可以使IPv4 IPv6或是域名 + BYTE byRes1[80]; + }struDomain; + struct + { + NET_DVR_IPADDR struIp; /*IP地址:IPv4 IPv6地址, 144字节*/ + }struAddrIP; + }unionServer; //使用联合体结构,防止既是IP地址又是域名的情况 + + BYTE szUserName[NAME_LEN]; /*用户名*/ + BYTE szPassWORD[PASSWD_LEN]; /*密码*/ + BYTE szTopCustomDir[MAX_CUSTOM_DIR]; /*自定义一级目录*/ + BYTE szSubCustomDir[MAX_CUSTOM_DIR]; /*自定义二级目录*/ + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录, 1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址, + 0x4=使用显示点,0x5=使用时间(年月),0x6-使用自定义 ,0x7=违规类型, + 0x8=方向,0x9=地点*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名,0x2=使用通道号 0x3=使用时间(年月日), + 0x4=使用车道号,0x5-使用自定义, 0x6=违规类型,0x7=方向,0x8=地点, + 0x9 = 车位编号*/ + BYTE byType; /* 0-主服务器,1-备服务器*/ + BYTE byEnableAnony; /*启用匿名 0-否 1是*/ + BYTE byAddresType; /*0 使用IPV4、IPV6 1- 使用域名*/ + + BYTE byRes2[198]; +}NET_DVR_FTP_SERVER_TEST_PARA, *LPNET_DVR_FTP_SERVER_TEST_PARA; + +#define NET_SDK_ACCESS_KEY_LEN 64 //访问密码长度 +#define NET_SDK_SECRET_KEY_LEN 64 //加密密码长度 + +//服务器测试结构体 +typedef struct tagNET_DVR_SERVER_TEST_PARA +{ + DWORD dwSize; + union + { + BYTE byRes[740]; + struct + { + NET_DVR_NTPPARA struNtpPara; /*NTP服务器测试参数80字节*/ + BYTE byRes1[660]; + }struNtpPara; + struct + { + NET_DVR_SINGLE_NET_DISK_INFO_V40 struNasPara; /*NAS服务器测试参数480字节*/ + BYTE byRes1[260]; + }struNasPara; + struct + { + NET_DVR_FTP_SERVER_TEST_PARA struFtpPara; /*FTP服务器测试参数528字节*/ + BYTE byRes1[212]; + }struFtpPara; + struct + { + NET_DVR_EMAILCFG_V30 struEmailPara; /*Email服务器测试参数660字节*/ + BYTE byRes1[80]; + }struEmailPara; + struct + { + NET_DVR_IPADDR struIp; /*IP冲突测试参数24字节*/ + BYTE byRes1[716]; + }struIpPara; + struct + { + NET_DVR_IPADDR struIPAdder; + WORD wPort; //端口号 + BYTE byRes2[2]; + char szUser[CLOUD_NAME_LEN/*48*/]; //用户名 + char szPassword[CLOUD_PASSWD_LEN/*48*/]; // 密码 + NET_DVR_POOLPARAM struPoolInfo[16];// 数组0表示卡口图片数据池,数组1表示违章图片数据池,数组2表示车辆侦测数据池(IPC/D) + BYTE byProtocolType;//云存储协议版本,0- 1.0版本,1- 2.0版本 + BYTE byRes3[3]; + char szAccessKey[NET_SDK_ACCESS_KEY_LEN/*64*/]; //访问密码 + char szSecretKey[NET_SDK_SECRET_KEY_LEN/*64*/]; //加密密码 + BYTE byRes1[354]; + }struCloudStoragePara; + struct + { + BYTE byPhoneNum[MAX_PHONE_NUM/*32*/]; + BYTE byRes1[708]; + }struPhoneNumPara;//短信测试 + }unionServerPara; + BYTE byRes2[800]; +}NET_DVR_SERVER_TEST_PARA, *LPNET_DVR_SERVER_TEST_PARA; + +typedef struct tagNET_DVR_GOP_INFO //获取GOP索引信息结构体,建立连接时使用 +{ + DWORD dwSize; //结构体大小 + LONG lChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struEndTime; //结束时间 + BYTE byRes[256]; // 保留字节 +}NET_DVR_GOP_INFO, *LPNET_DVR_GOP_INFO; + +typedef struct tagNET_DVR_GOP_INFO_RET +{ + NET_DVR_TIME_V30 struGopTime; //Gop信息时间点 + DWORD dwDuration; //信息持续时间 + DWORD dwDataSize; //指针pBuf大小 + BYTE byRes[128]; + char* pBuf;//Gop信息块 +}NET_DVR_GOP_INFO_RET, *LPNET_DVR_GOP_INFO_RET; + +typedef struct tagNET_DVR_GOP_INFO_PASSBACK //智能数据信息回填 +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_V30 struTime; //开始时间,当数据类型为智能元数据时,表示的开始时间,当为缩略图时,表示的是图片时间 + DWORD dwDuration; //信息持续时间,仅当数据类型为智能元数据时有效 + DWORD dwMetaDataSize; //数据源的大小 + DWORD dwPicDataSize; //图片数据大小 + char* pMetaDataBuffer; //智能元数据缓冲区 + char* pPicDataBuf; //图片缓冲区 + BYTE byRes[32]; +}NET_DVR_GOP_INFO_PASSBACK, *LPNET_DVR_GOP_INFO_PASSBACK; + +typedef struct tagNET_DVR_SINGLEWALLPARAM +{ + DWORD dwSize; + BYTE byEnable; + BYTE byRes1[3]; + DWORD dwWallNum;//电视墙输出号 + //坐标须为基准坐标的整数倍(128×128),宽度和高度值不用设置,即为基准值 + NET_DVR_RECTCFG struRectCfg; + BYTE byRes2[36]; +}NET_DVR_SINGLEWALLPARAM, *LPNET_DVR_SINGLEWALLPARAM; + +/*窗口信息*/ +typedef struct tagNET_DVR_WALLWINCFG +{ + DWORD dwSize; + BYTE byEnable; + BYTE byRes1[7]; + DWORD dwWinNum;//窗口号 + DWORD dwLayerIndex;//窗口相对应的图层号 + NET_DVR_RECTCFG struWinPosition;//目的窗口(相对显示墙) + DWORD dwDeviceIndex;//分布式大屏控制器设备序号 + WORD wInputIndex;//输入信号源 + BYTE byRes2[14]; +}NET_DVR_WALLWINCFG, *LPNET_DVR_WALLWINCFG; + +typedef struct tagNET_DVR_WALL_INDEX +{ + DWORD dwSize; + BYTE byWallNo; //电视墙序号,从1开始 + BYTE bySceneNo; //场景序号 + BYTE byRes1[2]; + DWORD dwDeviceID; //分布式子设备ID + DWORD dwWindowNo; //窗口序号/信号源序号 + BYTE byRes2[32]; +}NET_DVR_WALL_INDEX, *LPNET_DVR_WALL_INDEX; + +typedef struct tagNET_DVR_WALLWINPARAM +{ + DWORD dwSize; + BYTE byTransparency; //使能透明度,0-关,非0-开 + BYTE byWinMode;//窗口分屏模式,能力集获取 + BYTE byEnableSpartan;//畅显使能,0-关,1-开 + BYTE byDecResource; //为窗口分配的解码资源,1-D1,2-720P,3-1080P + BYTE byWndShowMode; //窗口显示模式,0-此字段不用,1-子窗口模式,2-子窗口全屏模式 + BYTE byEnabledFeature; //是否启用场景特写,0-不启用,!0-启用 + BYTE byFeatureMode; //特写模式,启用场景特写时有效,0-无效,1-“1+5”模式 + BYTE byRes1; + DWORD dwAmplifyingSubWndNo; //全屏子窗口号(1字节墙号+1字节子窗口号+2字节窗口号) + //当byWndShowMode为2时有效,表示当前全屏显示的子窗口 + BYTE byWndTopKeep; //窗口置顶保持,0-不保持,1-保持 + BYTE byWndOpenKeep; //窗口打开保持,0-不保持,1-保持 + BYTE byRes[22]; +}NET_DVR_WALLWINPARAM, *LPNET_DVR_WALLWINPARAM; + +typedef struct tagNET_DVR_WALLSCENECFG +{ + DWORD dwSize; + BYTE sSceneName[NAME_LEN]; //场景名称 + BYTE byEnable; //场景是否有效,0-无效,1-有效 + BYTE bySceneIndex; //场景号,只能获取。获取所有场景时使用该参数 + BYTE byRes [78]; +}NET_DVR_WALLSCENECFG, *LPNET_DVR_WALLSCENECFG; + +typedef struct tagNET_DVR_WALLWIN_INFO +{ + DWORD dwSize; + DWORD dwWinNum; //窗口号 + DWORD dwSubWinNum;//子窗口号 + DWORD dwWallNo; //墙号 + BYTE byRes[12]; +}NET_DVR_WALLWIN_INFO,*LPNET_DVR_WALLWIN_INFO; + +typedef struct tagNET_DVR_WALL_WIN_STATUS +{ + DWORD dwSize ; + BYTE byDecodeStatus; /*当前解码状态:0:未启动,1 :已启动*/ + BYTE byStreamType; /*码流类型*/ + BYTE byPacketType; /*打包方式*/ + BYTE byFpsDecV; /*视频解码帧率*/ + BYTE byFpsDecA; /*音频解码帧率*/ + BYTE byRes1[7]; + DWORD dwDecodedV; /*解码的视频帧*/ + DWORD dwDecodedA; /*解码的音频帧*/ + WORD wImgW; /*当前码流源的图像大小*/ + WORD wImgH; + BYTE byStreamMode ; //码流源(此参数对视频综合平台有效):1-网络,2-综合平台内部编码子系统,3-屏幕服务器,0xff-无效 + BYTE byRes2[31]; +}NET_DVR_WALL_WIN_STATUS, *LPNET_DVR_WALL_WIN_STATUS; + +typedef struct tagNET_DVR_WININDEX_INFO +{ + DWORD dwWinIndex; //窗口号 + DWORD dwSubWinIndex;//子窗口号 + BYTE byType ;//资源类型,1-解码,2-回显 + BYTE byWallNo ; //墙号 + BYTE byRes[6]; +}NET_DVR_WININDEX_INFO, *LPNET_DVR_WININDEX_INFO; + +typedef struct tagNET_DVR_ASSOCIATEDDEV_CHAN_INFO +{ + DWORD dwSize ; + BYTE sAddress[MAX_DOMAIN_NAME];//ip地址,或是域名 + WORD wDVRPort; /* 端口号 */ + WORD wChannel; /* 通道号 */ + BYTE sUserName[NAME_LEN]; /* 布防主机登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 布防主机密码 */ + BYTE byRes[24]; +}NET_DVR_ASSOCIATEDDEV_CHAN_INFO,*LPNET_DVR_ASSOCIATEDDEV_CHAN_INFO; + +typedef struct tagNET_DVR_WALLOUTPUTPARAM +{ + DWORD dwSize; + DWORD dwResolution; //分辨率 + NET_DVR_VIDEOEFFECT struRes; + BYTE byVideoFormat; //视频制式,见VIDEO_STANDARD + BYTE byDisplayMode;/*输出连接模式,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,0xff-无效*/ + BYTE byBackgroundColor; //背景色,0-无效,不支持背景色,1-红,2-绿,3-蓝,4-黄,5-紫,6-青,7-黑,8-白,0xff-自定义 + BYTE byUseEDIDResolution; //是否使用EDID分辨率,0-不使用,1-使用 + WORD wLEDWidth; //LED屏输出分辨率宽 + WORD wLEDHeight; //LED屏输出分辨率高 + NET_DVR_RGB_COLOR struBackColor;//背景色,byBackgroundColor为0xff时有效 + BYTE byLinkStatus;//输出口连接状态,0-无效,1-接入显示器,2-未接入显示器 + BYTE byRes2[51]; +}NET_DVR_WALLOUTPUTPARAM, *LPNET_DVR_WALLOUTPUTPARAM; + +#define MAX_UNITEDMATRIX_NUM 8 //级联中最多视频综合平台数量 + +typedef struct NET_DVR_SUBMATRIXSYSTEMINFO +{ + //平台号,0表示无此平台 + DWORD dwSequence; + BYTE sAddress[MAX_DOMAIN_NAME];//ip地址,或是域名 + WORD wSubMatrixPort; /*子系统端口号*/ + BYTE byRes1[6]; + BYTE sUserName[NAME_LEN]; /*用户名*/ + BYTE sPassword[PASSWD_LEN]; /*密码 */ + BYTE byRes2[36]; +}NET_DVR_SUBMATRIXSYSTEMINFO,*LPNET_DVR_SUBMATRIXSYSTEMINFO; + +typedef struct tagNET_DVR_UNITEDMATRIXSYSTEMINFO +{ + DWORD dwSize; + //视频综合平台信息 + NET_DVR_SUBMATRIXSYSTEMINFO struMatrixInfo[MAX_UNITEDMATRIX_NUM]; + BYTE byRes[32]; +}NET_DVR_UNITEDMATRIXSYSTEMINFO,*LPNET_DVR_UNITEDMATRIXSYSTEMINFO; + +typedef struct tagNET_DVR_SUBSTREAM_SWITCH_CFG +{ + BYTE byAutoSwitchEnable; //子码流自动切换,0 - 不启用,1 - 启用 + BYTE byRes1[3]; + WORD wSubWndWidth; //子窗口宽度设定值,byAutoSwitchEnable为1时有效 + WORD wSubWndHeight; //子窗口高度设定值,byAutoSwitchEnable为1时有效 +}NET_DVR_SUBSTREAM_SWITCH_CFG, *LPNET_DVR_SUBSTREAM_SWITCH_CFG; + +typedef struct tagNET_DVR_WALL_CFG +{ + DWORD dwSize; + BYTE byTransparency;//透明度,0-100,0为不透明 + BYTE byWinStaticMode; //窗口解码停止显示模式,1-清屏(之前的清屏后是黑色),2-显示最后一帧图像 + BYTE byStreamFailedMode; //取流失败显示模式,1-“无网络视频信号”,2-显示最后一帧图像,3-连接异常,4-清屏 + BYTE byEnabledOverlayLogo; //解码能力不足时是否叠加LOGO以提示用户,0-不叠加,!0-叠加 + NET_DVR_SUBSTREAM_SWITCH_CFG struSubStreamSwitch; //子码流切换 + BYTE byLEDShowMode; //LED窗口显示模式,0-普通模式,1-平铺模式 + BYTE byLowLatencyMode; //低延时模式,0-普通模式,1-低延时模式 + BYTE byRes[50]; +}NET_DVR_WALL_CFG, *LPNET_DVR_WALL_CFG; + +typedef struct tagNET_DVR_LEDDISPLAYINFO +{ + DWORD dwSize; + BYTE byAddressType; //0-实际ipv4 ipv6地址 1-域名 + BYTE byRes1[3]; + // 控制unionServer是使用实际地址还是域名 + union + { + struct + { + BYTE szDomain[MAX_DOMAIN_NAME/*64*/];//服务器地址,域名 + BYTE byRes1[80]; + }struDomain; + struct + { + NET_DVR_IPADDR struIp;/*IP地址*/ //IPv4 IPv6地址, 144字节 + } struAddrIP; + }unionServer; //使用联合体结构,通过byAddressType字段表示是IP地址还是域名 64 + char szDisplayInfo[MAX_LEDDISPLAYINFO_LEN/*1024*/]; + BYTE byRes[128]; +}NET_DVR_LEDDISPLAYINFO,*LPNET_DVR_LEDDISPLAYINFO; + + +typedef struct tagNET_DVR_LOW_LIGHT_CFG +{ + DWORD dwSize; + BYTE byLowLightLimt; /* 低照度电子快门: 0-关,1-开 */ + BYTE byLowLightLimtLevel; + /*球机0-关,1-慢快门*2,2-慢快门*3,3-慢快门*4,4-慢快门*6,5-慢快门*8,6-慢快门*12,7-慢快门*16, + 8-慢快门*24,9-慢快门*32,10-慢快门*48,11-慢快门*64,12-慢快门*96,13-慢快门*128,14-慢快门*256, + 15-慢快门*512, 16-慢快门*1.25, 17-慢快门*1.5 */ + BYTE byRes[66]; +}NET_DVR_LOW_LIGHT_CFG, *LPNET_DVR_LOW_LIGHT_CFG; + +typedef struct tagNET_DVR_FOCUSMODE_CFG +{ + DWORD dwSize; + BYTE byFocusMode; /* 聚焦模式,0-自动,1-手动,2-半自动 */ + BYTE byAutoFocusMode; /* 自动聚焦模式,0-关,1-模式A,2-模式B,3-模式AB,4-模式C 自动聚焦模式,需要在聚焦模式为自动时才显示*/ + WORD wMinFocusDistance; /* 最小聚焦距离,单位CM, 0-自动,0xffff-无穷远 */ + BYTE byZoomSpeedLevel; /* 变倍速度,为实际取值,1-3 */ + BYTE byFocusSpeedLevel; /* 聚焦速度,为实际取值,1-3 */ + BYTE byOpticalZoom; /* 光学变倍,0-255 */ + BYTE byDigtitalZoom; /* 数字变倍,0-255 */ + float fOpticalZoomLevel; /* 光学变倍(倍率值) [1,32], 最小间隔0.5 ,内部设备交互的时候*1000 */ + DWORD dwFocusPos;/* dwFocusPos 是focus值(聚焦值),范围为[0x1000,0xC000],这个值是sony坐标值,使用这个值是为了对外统一,保证不同的镜头对外focus值都转换在这个范围内 (手动聚焦模式下下应用)*/ + BYTE byFocusDefinitionDisplay;// 聚焦清晰度显示,0~不显示,1~显示, 开启会在码流上显示当前镜头目标的清晰度值,用于帮助客户调焦使相机抓拍能够达到最清晰的效果,该清晰度越大代表着越清晰,清晰度范围为:0~100.0000 + BYTE byFocusSensitivity; //聚焦灵敏度,范围[0,2],聚焦模式为自动、半自动时生效 + BYTE byRes1[2]; + DWORD dwRelativeFocusPos;//相对focus值,其低16位表示聚焦值,0~4000;高16位代表当前聚焦值获取时的温度值 + BYTE byRes[48]; +}NET_DVR_FOCUSMODE_CFG, *LPNET_DVR_FOCUSMODE_CFG; + +typedef struct tagNET_DVR_INFRARE_CFG +{ + DWORD dwSize; + BYTE byIrControlMode; /* 红外球机配置-控制模式:0-自动,1-手动 */ + BYTE byIrBrightness; /* 红外球机配置-红外亮度:0-100 */ + BYTE byIrSensitivity; /* 红外球机配置-红外灯灵敏度:0-100 */ + BYTE byIrTrigMode; /* 触发模式 0-机芯触发,1-光敏触发 自动模式下生效*/ + BYTE byIrBrightnessLimit;/* 亮度限制 如果此值为80,表示的意义是当前红外灯的亮度为原先根据自动策略计算出的亮度值×80% 自动模式下生效*/ + BYTE byRes[63]; +}NET_DVR_INFRARE_CFG, *LPNET_DVR_INFRARE_CFG; + +typedef struct tagNET_DVR_AEMODECFG +{ + DWORD dwSize; + int iIrisSet; /* 光圈,为实际取值*100的值,0-关 */ + int iGainSet; /* 快球增益,曝光补偿,为实际取值*100的值,有可能是负值 */ + int iGainLimit;/* 增益限制,曝光补偿,为实际取值*100的值,有可能是负值 */ + int iExposureCompensate; /* 曝光补偿,为实际取值*100的值,比如1050代表10.5dB, -750代表-7.5dB */ + BYTE byExposureModeSet; /* 球机的曝光模式,0-手动模式,1-自动曝光,2-光圈优先,3-快门优先,4-增益优先 */ + BYTE byShutterSet; /* 快门,0-关,1-自动x1,2-自动x2,3-自动x4,4-自动x8,5-自动x16,6-自动x32,7-自动x64,8-自动x128,9-1/1,10-1/2, + 11-1/3,12-1/4,13-1/6,14-1/8,15-1/12,16-1/15,17-1/25,18-1/30,19-1/50,20-1/60,21-1/75, + 22-1/90,23-1/100,24-1/120,25-1/125,26-1/150,27-1/180,28-1/200,29-1/215,30-1/250,31-1/300, + 32-1/350,33-1/425,34-1/500,35-1/600,36-1/725,37-1/1000,38-1/1250,39-1500,40-1/1750,41-1/2000, + 42-1/2500,43-3000,44-1/3500,45-1/4000,46-1/6000,47-1/10000,48-1/30000,49-1/100000,50-1/175, + 51-1/195,52-1/225,53-1/230 */ + BYTE byImageStabilizeLevel; /* 防抖动等级: 0-3 */ + BYTE byCameraIrCorrect; /* 红外校正: 0-自动,1-开,2,关 */ + BYTE byHighSensitivity; /* 高灵敏度设置: 0-关,1-开 */ + BYTE byInitializeLens; /* 初始化镜头: 0-关,1-开 */ + BYTE byChromaSuppress; /* 色彩抑制 :0-255*/ + BYTE byMaxShutterSet; //最大快门值;索引值与byShutterSet相同(在自动曝光、光圈优先模式下生效) + BYTE byMinShutterSet; //最小快门值;索引值与byShutterSet相同(在自动曝光、光圈优先模式下生效) + BYTE byMaxIrisSet; //最大光圈限制值(自动曝光、快门优先模式) [0,100] ; + BYTE byMinIrisSet; //最小光圈限制值(自动曝光、快门优先模式) [0,100] ; + BYTE byExposureLevel;//曝光等级(曝光模式为自动、光圈优先、快门优先情况有效),等级1-5 默认4,兼容老版本SDK配置新设备时,保留字节为0的情况,所以这个字节为0时,也默认为曝光等级为1 + BYTE byRes[60]; +}NET_DVR_AEMODECFG, *LPNET_DVR_AEMODECFG; + +typedef struct tagNET_DVR_FLASH_CFG +{ + DWORD dwSize; + DWORD dwChan;//通道号 + DWORD dwInNumbers;//进入人数 + DWORD dwOutNumbers;//离开人数 + DWORD dwStartTime;//开始时间秒数 + DWORD dwEndTime;//结束时间秒数 + DWORD dwEhomeFlag;// + DWORD dwAlarmFlag;// + BYTE byRes[1024]; +}NET_DVR_FLASH_CFG, *LPNET_DVR_FLASH_CFG; + +typedef struct tagNET_DVR_EXTERNAL_MATRIX_CFG +{ + DWORD dwSize; + BYTE byValid; // 有效时为设置,无效时为删除 + BYTE byRes1[3]; + BYTE sMatrixName[NAME_LEN/*32*/]; // 矩阵的名称 + DWORD dwMatrixID; // 矩阵的ID号,只能获取 + WORD wMatrixInputChanNum; // 矩阵的输入通道数目 + WORD wMatrixOutputChanNum; // 矩阵的输出通道数目 + WORD wMatrixOutputChanRef[MAX_CAM_COUNT]; //// 设备输入和矩阵输出的绑定关系,数组下标表示控制器设备输入通道号,元素的值表示矩阵的输出通道号, + //元素值大于0 表示绑定矩阵输出通道,元素值为0时表示不绑定,屏幕服务器为屏幕索引号和矩阵输出的绑定关系 + BYTE byMatrixChanType;// 矩阵的通道类型1-BNC、2-VGA、3-RGB、4-DVI + BYTE byMatrixProtocol; // 矩阵所用协议1、ZT1.0、2.ZT2.0、3.Extron、4.Creator + BYTE byMatrixType; //1-模拟矩阵,2-数字矩阵 + BYTE byRes2; + NET_MATRIX_UNION struMatrixUnion; + BYTE byRes3[128]; +}NET_DVR_EXTERNAL_MATRIX_CFG, *LPNET_DVR_EXTERNAL_MATRIX_CFG; + +typedef struct tagNET_DVR_EXTERNAL_MATRIX_CFG_V50 +{ + DWORD dwSize; + BYTE byValid; // 有效时为设置,无效时为删除 + BYTE byRes1[3]; + BYTE sMatrixName[NAME_LEN/*32*/]; // 矩阵的名称 + DWORD dwMatrixID; // 矩阵的ID号,只能获取 + WORD wMatrixInputChanNum; // 矩阵的输入通道数目 + WORD wMatrixOutputChanNum; // 矩阵的输出通道数目 + WORD wMatrixOutputChanRef[MAX_CAM_COUNT_V50]; //// 设备输入和矩阵输出的绑定关系,数组下标表示控制器设备输入通道号,元素的值表示矩阵的输出通道号, + //元素值大于0 表示绑定矩阵输出通道,元素值为0时表示不绑定,屏幕服务器为屏幕索引号和矩阵输出的绑定关系 + BYTE byMatrixChanType;// 矩阵的通道类型1-BNC、2-VGA、3-RGB、4-DVI + BYTE byMatrixProtocol; // 矩阵所用协议1、ZT1.0、2.ZT2.0、3.Extron、4.Creator + BYTE byMatrixType; //1-模拟矩阵,2-数字矩阵 + BYTE byRes2; + NET_MATRIX_UNION struMatrixUnion; + BYTE byRes3[128]; +}NET_DVR_EXTERNAL_MATRIX_CFG_V50, *LPNET_DVR_EXTERNAL_MATRIX_CFG_V50; + + +#define MAX_INPUTNUMS 1024 +#define MAX_OUTPUTNUMS 256 +typedef struct tagNET_DVR_ASSOCIATE_INPUT_PARAM +{ + BYTE byEnable; + BYTE byRes1[3]; + DWORD dwDeviceIndex;//分布式大屏控制器设备序号 + WORD wInputIndex;//输入信号源 + BYTE byRes2[18]; +}NET_DVR_ASSOCIATE_INPUT_PARAM, *LPNET_DVR_ASSOCIATE_INPUT_PARAM; + +typedef struct tagNET_DVR_ASSOCIATE_OUTPUT_PARAM +{ + BYTE byEnable; + BYTE byWallNo; //墙号,从1开始 + BYTE byRes1[2]; + DWORD dwOutputIndex; //输出显示屏的序号 + BYTE byRes2[20]; +}NET_DVR_ASSOCIATE_OUTPUT_PARAM,*LPNET_DVR_ASSOCIATE_OUTPUT_PARAM; + +typedef struct tagNET_DVR_VCS_USER_INFO +{ + DWORD dwSize; + BYTE sUserName[NAME_LEN]; // 用户名,最大16字节 + BYTE sPassWord[PASSWD_LEN]; // 密码 + NET_DVR_IPADDR struUserIP; // 用户IP地址(为0时表示允许任何地址) + BYTE byMacAddr[MACADDR_LEN]; // 物理地址 + BYTE byPriority; // 优先级,1-管理员,2-操作员 ,管理员具有任何权限,操作员没有"管理用户"的权限 + BYTE byRes1; + DWORD dwRight;/*远程操作权限,按位表示,0-不支持,1-支持,各32位代表的权限类型*/ + //bit0-获取设置基本参数 + //bit1-显示屏管理 + //bit2-窗口管理 + //bit3-信号源管理 + //bit4-布局管理 + //bit5-预案管理 + //bit6-底图管理 + //bit7-OSD管理 + //bit8-回显权限 + //bit9-报警布防 + //bit10-远程升级 + //bit11-恢复默认设置 + //bit12-导入导出配置配置文件 + //bit13-日志查询 + //bit14-远程重启 + //bit15-屏幕区域管理 + NET_DVR_ASSOCIATE_INPUT_PARAM struInputParam[MAX_INPUTNUMS/*1024*/]; + NET_DVR_ASSOCIATE_OUTPUT_PARAM struOutputParam[MAX_OUTPUTNUMS/*256*/]; + NET_DVR_RECTCFG_EX struManageRegion; //屏幕管理区域 + BYTE byWallNo; //开启屏幕管理区域的墙号,对只支持单墙的设备,此字段无效 + BYTE byRes2[3]; + BYTE sLoginPassword[PASSWD_LEN/*16*/]; /* 登陆密码*/ + BYTE byRes[88];} NET_DVR_VCS_USER_INFO, *LPNET_DVR_VCS_USER_INFO; + +typedef struct tagNET_DVR_STREAM_MEDIA_SERVER_CFG_V41 +{ + BYTE byValid; //是否启用,0-否,1-是 + BYTE byRes1[3]; + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名 + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ + BYTE byRes2[69]; +}NET_DVR_STREAM_MEDIA_SERVER_CFG_V41,*LPNET_DVR_STREAM_MEDIA_SERVER_CFG_V41; + +//设备通道信息 +typedef struct tagNET_DVR_DEV_CHAN_INFO_V41 +{ + BYTE byAddress[MAX_DOMAIN_NAME]; //设备域名 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 + BYTE byUseZeroChan; //是否使用零通道,0-否,1-是 + BYTE byRes; + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 +}NET_DVR_DEV_CHAN_INFO_V41,*LPNET_DVR_DEV_CHAN_INFO_V41; + +typedef struct tagNET_DVR_DEV_CHAN_INFO_EX +{ + BYTE byChanType; //通道类型,0-普通通道,1-零通道,2-流ID,3-本地输入源,4-虚拟屏服务器通道,5-拼接通道,6-屏幕服务器,7-分布式网络源,8-多相机融合通道,9-网络输入源 + BYTE byStreamId[STREAM_ID_LEN]; //流ID,当byChanType=2、9时,该字段用于指定流或者网络ipc的ID号 + BYTE byRes1[3]; + DWORD dwChannel; //通道号,通道类型为普通通道,零通道,本地输入源,虚拟屏服务器通道,拼接通道,屏幕服务器,分布式网络源时填此字段 + BYTE byRes2[24]; + BYTE byAddress[MAX_DOMAIN_NAME]; //设备域名 + WORD wDVRPort; //端口号 + BYTE byChannel; //通道号,dwChannel不为0时此字段无效 + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byFactoryType; /*前端设备厂家类型,通过接口获取*/ + BYTE byDeviceType; //设备类型(视频综合平台智能板使用),1-解码器(此时根据视频综合平台能力集中byVcaSupportChanMode字段来决定是使用解码通道还是显示通道),2-编码器 + BYTE byDispChan;//显示通道号,智能配置使用 + BYTE bySubDispChan;//显示通道子通道号,智能配置时使用 + BYTE byResolution; //; 1-CIF 2-4CIF 3-720P 4-1080P 5-500w大屏控制器使用,大屏控制器会根据该参数分配解码资源 + BYTE byRes[2]; + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 +}NET_DVR_DEV_CHAN_INFO_EX,*LPNET_DVR_DEV_CHAN_INFO_EX; + +typedef struct tagNET_DVR_STREAM_MEDIA_SERVER +{ + BYTE byValid; //是否启用,0-否,1-是 + BYTE byRes1[3]; + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名 + WORD wDevPort; /*流媒体服务器端口*/ + BYTE byTransmitType; /*传输协议类型 0-TCP,1-UDP*/ + BYTE byRes2[5]; +}NET_DVR_STREAM_MEDIA_SERVER,*LPNET_DVR_STREAM_MEDIA_SERVER; + +typedef struct tagNET_DVR_DEV_DDNS_INFO +{ + BYTE byDevAddress[MAX_DOMAIN_NAME]; //域名(IPServer或hiDDNS时可填序列号或者别名) + BYTE byTransProtocol; //传输协议类型0-TCP,1-UDP, 2-MCAST + BYTE byTransMode; //传输码流模式 0-主码流 1-子码流 + BYTE byDdnsType; //域名服务器类型,0-IPServer 1-Dyndns 2-PeanutHull(花生壳),3- NO-IP, 4- hiDDNS + BYTE byRes1; + BYTE byDdnsAddress[MAX_DOMAIN_NAME]; //DDNS服务器地址 + WORD wDdnsPort; //DDNS服务器端口号 + BYTE byChanType; //0-普通通道,1-零通道,2-流ID + BYTE byFactoryType; //前端设备厂家类型,通过接口获取 + DWORD dwChannel; //通道号 + BYTE byStreamId[STREAM_ID_LEN]; //流ID + BYTE sUserName[NAME_LEN]; //布防主机登陆帐号 + BYTE sPassword[PASSWD_LEN]; //布防主机密码 + WORD wDevPort; //前端设备通信端口 + BYTE byRes2[2]; +}NET_DVR_DEV_DDNS_INFO,*LPNET_DVR_DEV_DDNS_INFO; + +typedef struct tagNET_DVR_DEC_STREAM_DEV_EX +{ + NET_DVR_STREAM_MEDIA_SERVER struStreamMediaSvrCfg; + NET_DVR_DEV_CHAN_INFO_EX struDevChanInfo; +}NET_DVR_DEC_STREAM_DEV_EX,*LPNET_DVR_DEC_STREAM_DEV_EX; + + +//DDNS方式取流 +typedef struct tagNET_DVR_DEC_DDNS_DEV +{ + NET_DVR_DEV_DDNS_INFO struDdnsInfo; + NET_DVR_STREAM_MEDIA_SERVER struMediaServer; +}NET_DVR_DEC_DDNS_DEV,*LPNET_DVR_DEC_DDNS_DEV; + +typedef union tagNET_DVR_DEC_STREAM_MODE +{ + NET_DVR_DEC_STREAM_DEV_EX struDecStreamDev; + NET_DVR_PU_STREAM_URL struUrlInfo; + NET_DVR_DEC_DDNS_DEV struDdnsDecInfo; + BYTE byRes[300]; +}NET_DVR_DEC_STREAM_MODE,*LPNET_DVR_DEC_STREAM_MODE; + +typedef struct tagNET_DVR_PU_STREAM_CFG_V41 +{ + DWORD dwSize; + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 + BYTE byRes1[2]; + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 + DWORD dwDecDelayTime;//解码延时时间,单位:毫秒 + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 + BYTE byRes2[48]; +}NET_DVR_PU_STREAM_CFG_V41,*LPNET_DVR_PU_STREAM_CFG_V41; + +typedef struct tagNET_DVR_MATRIX_CHAN_INFO_V41 +{ + BYTE byEnable; //是否启用,0-否,1-是 + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ + BYTE byRes[2]; + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 +}NET_DVR_MATRIX_CHAN_INFO_V41,*LPNET_DVR_MATRIX_CHAN_INFO_V41; + +typedef struct tagNET_DVR_MATRIX_LOOP_DECINFO_V41 +{ + DWORD dwSize; + DWORD dwPoolTime; /*轮巡间隔*/ + NET_DVR_MATRIX_CHAN_INFO_V41 struchanConInfo[MAX_CYCLE_CHAN_V30]; + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 + BYTE byRes[3]; + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 +}NET_DVR_MATRIX_LOOP_DECINFO_V41, *LPNET_DVR_MATRIX_LOOP_DECINFO_V41; + +typedef struct tagNET_DVR_MATRIX_DEC_CHAN_INFO_V41 +{ + DWORD dwSize; + BYTE byStreamMode;/*取流模式,0-无效,1-通过IP或域名取流,2-通过URL取流,3-通过动态域名解析向设备取流*/ + BYTE byRes1[3]; + NET_DVR_DEC_STREAM_MODE uDecStreamMode;//取流信息 + DWORD dwPlayMode; /* 0-动态解码 1-循环解码 2-按时间回放 3-按文件回放 */ + NET_DVR_TIME StartTime; /* 按时间回放开始时间 */ + NET_DVR_TIME StopTime; /* 按时间回放停止时间 */ + BYTE sFileName[128]; /* 按文件回放文件名 */ + DWORD dwGetStreamMode; /*取流模式:1-主动,2-被动*/ + NET_DVR_MATRIX_PASSIVEMODE struPassiveMode; + BYTE byRes2[32]; +}NET_DVR_MATRIX_DEC_CHAN_INFO_V41,*LPNET_DVR_MATRIX_DEC_CHAN_INFO_V41; + +typedef struct tagNet_DVR_IP_ADDRESS +{ + BYTE byDevAddress[MAX_DOMAIN_NAME]; /*设备IP地址*/ + WORD wDevPort; //设备端口 + BYTE byres[134]; +}NET_DVR_IP_ADDRESS, *LPNET_DVR_IP_ADDRESS; + +typedef struct tagNet_DVR_DDNS_ADDRESS +{ + BYTE byDevAddress[MAX_DOMAIN_NAME]; /*DDNS域名*/ + BYTE byDevDdns[MAX_DOMAIN_NAME]; /*设备地址*/ + BYTE byDdnsType; //域名服务器类型,0-IPServer 1-Dyndns 2-PeanutHull(花生壳),//3- NO-IP, 4- hiDDNS + BYTE byRes1[3]; + WORD wDevPort; //设备端口 + WORD wDdnsPort; //域名服务器端口 + BYTE byres[64]; +}NET_DVR_DDNS_ADDRESS, *LPNET_DVR_DDNS_ADDRESS; + +typedef struct tagNet_DVR_PLAY_BACK_BY_TIME +{ + NET_DVR_TIME StartTime; + NET_DVR_TIME StopTime; +}NET_DVR_PLAY_BACK_BY_TIME, *LPNET_DVR_PLAY_BACK_BY_TIME; + +typedef struct tagNet_DVR_MATRIX_DEC_REMOTE_PLAY_EX +{ + DWORD dwSize; + DWORD dwDecChannel; //解码通道号 + BYTE byAddressType; //设备地址类型,0-IP,1-DDNS + BYTE byChannelType; //通道类型,0-普通通道,1-零通道,2-流ID + BYTE byres[2]; + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwChannel; /* 设备通道号 */ + BYTE byStreamId[STREAM_ID_LEN]; //流ID,此参数在通道类型为流ID时有效 + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ + union + { + BYTE byRes[200]; + NET_DVR_IP_ADDRESS struIpAddr; + NET_DVR_DDNS_ADDRESS struDdnsAddr; + }unionAddr; + + union + { + BYTE byRes[128]; + NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //按时间回放时文件信息 + char sFileName[128]; //按文件名回放时文件信息 + }unionPlayBackInfo; +}NET_DVR_MATRIX_DEC_REMOTE_PLAY_EX, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_EX; + +typedef struct tagNET_DVR_MATRIX_DEC_REMOTE_PLAY_V50 +{ + DWORD dwSize; + DWORD dwDecChannel; //解码通道号 + BYTE byAddressType; //设备地址类型,0-IP,1-DDNS,2-URL + BYTE byChannelType; //通道类型,0-普通通道,1-零通道,2-流ID + BYTE byStreamEncrypt; //是否进行码流加密处理,0-不支持,1-支持 + BYTE byRes1[1]; + BYTE sUserName[NAME_LEN]; /* 用户名 */ + BYTE sPassword[PASSWD_LEN]; /* 密码 */ + DWORD dwChannel; /* 设备通道号 */ + BYTE byStreamId[STREAM_ID_LEN]; //流ID,此参数在通道类型为流ID时有效 + DWORD dwPlayMode; /* 0-按文件 1-按时间*/ + union + { + BYTE byRes[200]; + NET_DVR_IP_ADDRESS struIpAddr; //IP地址,byAddressType为0时有效 + NET_DVR_DDNS_ADDRESS struDdnsAddr; //DDNS地址,byAddressType为1时有效 + }unionAddr; + union + { + BYTE byRes[128]; + NET_DVR_PLAY_BACK_BY_TIME struPlayBackByTime; //按时间回放时文件信息 + BYTE sFileName[128]; //按文件名回放时文件信息 + }unionPlayBackInfo; + NET_DVR_PU_STREAM_URL struURL; //取流URL,byAddressType为2时有效 + BYTE sStreamPassword[STREAM_PASSWD_LEN]; //码流加密密码,需敏感信息加密 + BYTE byRes2[116]; +}NET_DVR_MATRIX_DEC_REMOTE_PLAY_V50, *LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_V50; + +typedef struct tagNET_DVR_DISPLAY_EFFECT_CFG +{ + DWORD dwSize; + NET_DVR_COLOR struColor; //显示相关参数/ + BYTE byRes[32]; +}NET_DVR_DISPLAY_EFFECT_CFG,*LPNET_DVR_DISPLAY_EFFECT_CFG; + +//获取干线状态 +typedef struct tagNET_DVR_TRUNK_USE_STATE +{ + DWORD dwSize; + DWORD dwTrunkID; //干线ID + WORD wReserveUserID; //预留的用户ID: 1~256 ,0表示释放预留 + BYTE byStatus; //1-空闲,2-占用,3-复用 */ + BYTE byRes1; + BYTE byUserId[256]; //数组下标表示用户ID号,数组元素的值表示是否使用干线。如:byUserID[0] 的值为1,表示用户ID为0的用户正在使用,byUserID[0] 的值为0表示用户ID为0的用户没有使用这条干线 + BYTE byRes2[64]; +}NET_DVR_TRUNK_USE_STATE, *LPNET_DVR_TRUNK_USE_STATE; + + +//PTZ控制参数 +typedef struct tagNET_DVR_PTZ_CTRL_INFO +{ + DWORD dwSize; + DWORD dwCtrlDelayTime; //PTZ控制持续时间,指PTZ控制后在dwCtrlDelayTime时间内,其他同级别或低级别用户对其操作无效。单位:秒 + BYTE byRes[64]; +}NET_DVR_PTZ_CTRL_INFO, *LPNET_DVR_PTZ_CTRL_INFO; + +//显示路径 +#define MAX_MATRIX_CASCADE 32 +typedef struct tagNET_DVR_MATRIX_ROUTE_INFO +{ + DWORD dwSize; + DWORD dwCamNo; + DWORD dwMonNo; + DWORD dwSubWin; + DWORD dwUserId; + DWORD dwTrunkId[MAX_MATRIX_CASCADE/*32*/];//trunkId成员对应级联级数从1到32,从CAM端开始,trunkId[0]表示第一级级联,trunkId[1]表示第二级级联, trunkId[i] = 0 表示无干线 + BYTE byRes[64]; /* 预留 */ +}NET_DVR_MATRIX_ROUTE_INFO, *LPNET_DVR_MATRIX_ROUTE_INFO; + + +//获取PTZ状态 +typedef struct tagNET_DVR_PTZ_STATUS +{ + DWORD dwSize; + DWORD dwUserID; //1~256,0 表示无用户 + DWORD dwStatus; // PTZ控制状态0-停止、1-运行 + DWORD dwRestTime; //剩余时间 + BYTE byRes[64]; +}NET_DVR_PTZ_STATUS, *LPNET_DVR_PTZ_STATUS; + +typedef struct tagNET_DVR_SAFETYCABIN_WORK_MODE +{ + DWORD dwSize; + BYTE byWorkMode; //工作模式,0-无人门常开,1-无人门常锁 + BYTE byFaintToUnlock; //晕倒报警一定时间后外部可以开锁:0-否,1-是 + BYTE byOvertimeToUnlock; //使用超时后外部按钮是否可以开锁:0-否,1-是 + BYTE byRes[13]; +}NET_DVR_SAFETYCABIN_WORK_MODE,*LPNET_DVR_SAFETYCABIN_WORK_MODE; + +typedef struct tagNET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG +{ + DWORD dwSize; + BYTE bySensorType; //传感器类型,0-红外对射型,1-幕帘传感器 + BYTE bySensitivity; //传感器敏感度,范围:0-100% + BYTE byDevUseTimeout; //防护舱使用超时时间,单位:分,范围:5-30,默认超时15min,超时后通过布防通道上传报警 + BYTE byRes1; + WORD wCurtainDelayTime; //幕帘传感器探测延时时间,单位:秒,范围:0-10 + WORD wCurtainResponseTime; //幕帘人状态变化控制器响应时间,单位:秒,范围:0-300 + WORD wFaintToEmergencyTime; //晕倒告警生效时间,单位:秒,范围:10-300 + BYTE byFollowDetectorSensitivity; //尾随检测灵敏度,范围:0-100% + BYTE byManyPersonSensitivity; //多人检测灵敏度,范围:0-100% + BYTE byRes2[28]; //保留 +}NET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG,*LPNET_DVR_SAFETYCABIN_PERSON_SIGNAL_CFG; + +typedef struct tagNET_DVR_ETHERNET_IPV6_COND +{ + DWORD dwSize; + BYTE byMACAddr[MACADDR_LEN]; //网卡的物理地址 + BYTE byRes[64]; //保留 +}NET_DVR_ETHERNET_IPV6_COND,*LPNET_DVR_ETHERNET_IPV6_COND; + +typedef struct tagNET_DVR_ETHERNET_IPV6_CFG +{ + DWORD dwSize; + BYTE byState; //IPv6状态,0-路由分配,1-自动设置 + BYTE byRes1[3]; + BYTE byIPv6[MAX_IPV6_LEN]; //IPv6地址 + BYTE byRes[64]; //保留 +}NET_DVR_ETHERNET_IPV6_CFG,*LPNET_DVR_ETHERNET_IPV6_CFG; + +typedef struct +{ + BYTE byHour;//0~24 + BYTE byMinute;//0~60 + BYTE bySecond;//0~60 + BYTE byRes; + WORD wMilliSecond; //0~1000 + BYTE byRes1[2]; +}NET_DVR_DAYTIME,*LPNET_DVR_DAYTIME; + +typedef struct +{ + NET_DVR_DAYTIME struStartTime; //开始时间 + NET_DVR_DAYTIME struStopTime; //结束时间 +}NET_DVR_SCHEDULE_DAYTIME, *LPNET_DVR_SCHEDULE_DAYTIME; + +typedef struct +{ + BYTE byObjectSize;//占比参数(0~100) + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ + BYTE byRes[6]; +}NET_DVR_DNMODE, *LPNET_DVR_DNMODE; + +typedef struct +{ + BYTE byAreaNo;//区域编号(IPC- 1~8) + BYTE byRes[3]; + NET_VCA_RECT struRect;//单个区域的坐标信息(矩形) size = 16; + NET_DVR_DNMODE struDayNightDisable;//关闭模式 + NET_DVR_DNMODE struDayModeParam;//白天模式 + NET_DVR_DNMODE struNightModeParam;//夜晚模式 + BYTE byRes1[8]; +}NET_DVR_MOTION_MULTI_AREAPARAM, *LPNET_DVR_MOTION_MULTI_AREAPARAM; + +typedef struct +{ + BYTE byDayNightCtrl;//日夜控制 0~关闭,1~自动切换,2~定时切换(默认关闭) + BYTE byAllMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭,全部区域的灵敏度范围*/ + BYTE byRes[2];// + NET_DVR_SCHEDULE_DAYTIME struScheduleTime;//切换时间 16 + NET_DVR_MOTION_MULTI_AREAPARAM struMotionMultiAreaParam[MAX_MULTI_AREA_NUM];//最大支持24个区域 + BYTE byRes1[60]; +}NET_DVR_MOTION_MULTI_AREA,*LPNET_DVR_MOTION_MULTI_AREA; //1328 + +typedef struct +{ + BYTE byMotionScope[64][96]; /*侦测区域,0-96位,表示64行,共有96*64个小宏块,目前有效的是22*18,为1表示是移动侦测区域,0-表示不是*/ + BYTE byMotionSensitive; /*移动侦测灵敏度, 0 - 5,越高越灵敏,0xff关闭*/ + BYTE byRes[3]; +}NET_DVR_MOTION_SINGLE_AREA, *LPNET_DVR_MOTION_SINGLE_AREA; + +typedef struct +{ + NET_DVR_MOTION_SINGLE_AREA struMotionSingleArea; //普通模式下的单区域设 + NET_DVR_MOTION_MULTI_AREA struMotionMultiArea; //专家模式下的多区域设置 +}NET_DVR_MOTION_MODE_PARAM, *LPNET_DVR_MOTION_MODE_PARAM; + +typedef struct +{ + NET_DVR_MOTION_MODE_PARAM struMotionMode; //(5.1.0新增) + BYTE byEnableHandleMotion; /* 是否处理移动侦测 0-否 1-是*/ + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ + BYTE byConfigurationMode; //0~普通,1~专家(5.1.0新增) + BYTE byKeyingEnable; //启用键控移动侦测 0-不启用,1-启用 + /* 异常处理方式 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000: 抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; //实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0 - dwRelRecordChan -1有效,如果中间遇到0xffffffff,则后续无效*/ + BYTE byDiscardFalseAlarm; //启用去误报 0-无效,1-不启用,2-启用 + BYTE byRes[127]; //保留字节 +}NET_DVR_MOTION_V40,*LPNET_DVR_MOTION_V40; + +typedef struct +{ + DWORD dwEnableHideAlarm; /* 是否启动遮挡报警,0-否,1-低灵敏度,2-中灵敏度,3-高灵敏度*/ + WORD wHideAlarmAreaTopLeftX; /* 遮挡区域的x坐标 */ + WORD wHideAlarmAreaTopLeftY; /* 遮挡区域的y坐标 */ + WORD wHideAlarmAreaWidth; /* 遮挡区域的宽 */ + WORD wHideAlarmAreaHeight; /*遮挡区域的高*/ + /* 信号丢失触发报警输出 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byRes[64]; //保留 +}NET_DVR_HIDEALARM_V40,*LPNET_DVR_HIDEALARM_V40; //遮挡报警 + +typedef struct +{ + DWORD dwEnableVILostAlarm; /* 是否启动信号丢失报警 ,0-否,1-是*/ + /* 信号丢失触发报警输出 */ + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + /*0x1000:抓图上传到云*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40]; /*触发报警输出号,按值表示,采用紧凑型排列,从下标0 - dwRelAlarmOut -1有效,如果中间遇到0xffffffff,则后续无效*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + BYTE byVILostAlarmThreshold; /*信号丢失报警阈值,当值低于阈值,认为信号丢失,取值0-99*/ + BYTE byRes[63]; //保留 +}NET_DVR_VILOST_V40,*LPNET_DVR_VILOST_V40; //信号丢失报警 + +typedef struct +{ + NET_DVR_COLOR struColor[MAX_TIMESEGMENT_V30];/*图象参数(第一个有效,其他三个保留)*/ + NET_DVR_SCHEDTIME struHandleTime[MAX_TIMESEGMENT_V30];/*处理时间段(保留)*/ +}NET_DVR_VICOLOR, *LPNET_DVR_VICOLOR; + +typedef struct +{ + DWORD dwSize; + BYTE sChanName[NAME_LEN]; + DWORD dwVideoFormat; /* 只读 视频制式 1-NTSC 2-PAL */ + NET_DVR_VICOLOR struViColor;// 图像参数按时间段设置 + //显示通道名 + DWORD dwShowChanName; // 预览的图象上是否显示通道名称,0-不显示,1-显示 + WORD wShowNameTopLeftX; /* 通道名称显示位置的x坐标 */ + WORD wShowNameTopLeftY; /* 通道名称显示位置的y坐标 */ + //隐私遮挡 + DWORD dwEnableHide; /* 是否启动遮挡 ,0-否,1-是*/ + NET_DVR_SHELTER struShelter[MAX_SHELTERNUM]; + //OSD + DWORD dwShowOsd;// 预览的图象上是否显示OSD,0-不显示,1-显示 + WORD wOSDTopLeftX; /* OSD的x坐标 */ + WORD wOSDTopLeftY; /* OSD的y坐标 */ + BYTE byOSDType; /* OSD类型(主要是年月日格式) */ + /* 0: XXXX-XX-XX 年月日 */ + /* 1: XX-XX-XXXX 月日年 */ + /* 2: XXXX年XX月XX日 */ + /* 3: XX月XX日XXXX年 */ + /* 4: XX-XX-XXXX 日月年*/ + /* 5: XX日XX月XXXX年 */ + /*6: xx/xx/xxxx(月/日/年) */ + /*7: xxxx/xx/xx(年/月/日) */ + /*8: xx/xx/xxxx(日/月/年)*/ + BYTE byDispWeek; /* 是否显示星期 */ + BYTE byOSDAttrib; /* OSD属性:透明,闪烁 */ + /* 0: 不显示OSD */ + /* 1: 透明,闪烁 */ + /* 2: 透明,不闪烁 */ + /* 3: 不透明,闪烁 */ + /* 4: 不透明,不闪烁 */ + BYTE byHourOSDType; /* OSD小时制:0-24小时制,1-12小时制 */ + BYTE byFontSize; //16*16(中)/8*16(英),1-32*32(中)/16*32(英),2-64*64(中)/32*64(英) 3-48*48(中)/24*48(英) 4-24*24(中)/12*24(英) 5-96*96(中)/48*96(英) 6-128*128(中)/64*128(英) 7-80*80(中)/40*80(英) 8-112*112(中)/56*112(英) 0xff-自适应(adaptive) + BYTE byOSDColorType; //0-默认(黑白);1-自定义;2-勾边 + /*当对齐方式选择国标模式时,可以分别对右下角、左下角两个区域做字符叠加。 + 右下角区域: + 共支持6行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V30/ NET_DVR_GET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第0至第5个下标的值。叠加字符的方式为从下到上的方式。 + 左下角区域: + 共支持2行字符叠加,可以通过NET_DVR_SET_SHOWSTRING_V3/ NET_DVR_GET_SHOWSTRING_V30字符叠加接口,对应NET_DVR_SHOWSTRINGINFO结构体数组中的第6和第7个下标的值。叠加字符的方式为从下到上的方式。 + */ + BYTE byAlignment;//对齐方式 0-自适应,1-右对齐, 2-左对齐,3-国标模式,4-全部右对齐(包含叠加字符、时间以及标题等所有OSD字符),5-全部左对齐(包含叠加字符、时间以及标题等所有OSD字符) + BYTE byOSDMilliSecondEnable;//视频叠加时间支持毫秒;0~不叠加, 1-叠加 + NET_DVR_VILOST_V40 struVILost; //视频信号丢失报警(支持组) + NET_DVR_VILOST_V40 struAULost; /*音频信号丢失报警(支持组)*/ + NET_DVR_MOTION_V40 struMotion; //移动侦测报警(支持组) + NET_DVR_HIDEALARM_V40 struHideAlarm; //遮挡报警(支持组) + NET_DVR_RGB_COLOR struOsdColor;//OSD颜色 + DWORD dwBoundary; //边界值,左对齐,右对齐以及国标模式的边界值,0-表示默认值,单位:像素;在国标模式下,单位修改为字符个数(范围是,0,1,2) + NET_DVR_RGB_COLOR struOsdBkColor; //自定义OSD背景色 + BYTE byOSDBkColorMode; //OSD背景色模式,0-默认,1-自定义OSD背景色 + BYTE byUpDownBoundary; //上下最小边界值选项,单位为字符个数(范围是,0,1,2),国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byLeftRightBoundary; //左右最小边界值选项,单位为字符个数(范围是,0,1,2), 国标模式下无效。byAlignment=3该字段无效,通过dwBoundary进行边界配置,.byAlignment不等于3的情况下, byUpDownBoundary/byLeftRightBoundary配置成功后,dwBoundary值将不生效 + BYTE byAngleEnabled;//OSD是否叠加俯仰角信息,0~不叠加, 1-叠加 + WORD wTiltAngleTopLeftX; /* 俯仰角信息显示位置的x坐标 */ + WORD wTiltAngleTopLeftY; /* 俯仰角信息显示位置的y坐标 */ + BYTE byRes[108]; +}NET_DVR_PICCFG_V40,*LPNET_DVR_PICCFG_V40; + +typedef struct // +{ + DWORD dwSize; + BYTE byWorkType;// 0-自适应, 1-定时模式 + BYTE byRes[3]; + //定时模式参数 + NET_DVR_SCHEDULE_DAYTIME struDayNightScheduleTime;//日夜定时切换模式(白天时间) + NET_DVR_CAMERAPARAMCFG_EX struSelfAdaptiveParam; //自适应参数 + NET_DVR_CAMERAPARAMCFG_EX struDayIspAdvanceParam;//白天参数 + NET_DVR_CAMERAPARAMCFG_EX struNightIspAdvanceParam;//夜晚参数 + BYTE byRes1[512]; +}NET_DVR_ISP_CAMERAPARAMCFG,*LPNET_DVR_ISP_CAMERAPARAMCFG; + +typedef struct +{ + DWORD dwSize; + BYTE byIrLampServer;//红外灯设置 0~禁用,1~启用 + BYTE bytelnetServer;//telnet设置 0~禁用,1~启用 + BYTE byABFServer;//ABF设置 0~启用,1~禁用 + BYTE byEnableLEDStatus;//状态指示灯控制 0~禁用,1~启用 + BYTE byEnableAutoDefog;//自动除雾控制 0~启用,1~禁用 + BYTE byEnableSupplementLight;//补光灯控制0-启用,1-禁用 + BYTE byEnableDeicing;//除冰功能 0-关闭,1-开启 + BYTE byEnableVisibleMovementPower;// 可见光机芯电源开关 0-关闭,1-开启 + BYTE byEnableThermalMovementPower;// 热成像机芯电源开关 0-关闭,1-开启 + BYTE byEnablePtzPower;// 云台电源开关 0-关闭,1-开启 + BYTE byPowerSavingControl;// 低功耗策略 0-保留 1-休眠模式 2-低功耗模式 低功耗模式下 可见光机芯电源、热成像机芯电源、云台电源控制生效 + BYTE byCaptureWithSupplimentLightEnabled;//启用抓拍补光使能 0-关闭,1-开启 + BYTE byRes[244]; +}NET_DVR_DEVSERVER_CFG,*LPNET_DVR_DEVSERVER_CFG; + +typedef struct tagNET_DVR_GBT28181_ACCESS_CFG +{ + DWORD dwSize; + BYTE byEnable;//28181协议使能 0-关闭 1-开启 + BYTE byTransProtocol;//传输协议:0-UDP、1-TCP、默认0-UDP + WORD wLocalSipPort;//1024-65535(IPC设备端) + char szServerID[MAX_SERVERID_LEN];//服务器ID:64字节字符串,仅限数字 + char szServerDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// 服务器域 + char szSipServerAddress[MAX_SIPSERVER_ADDRESS_LEN] ;// SIP服务器地址支持域名和IP地址 + WORD wServerSipPort;//服务器SIP端口:1024-65535 + BYTE byProtocolVersion;//协议版本 0-GB/T28181-2011(仅支持UDP),1-GB/T28181-2015(支持TCP,UDP),2-GB/T28181-2016 + BYTE byTCPConnectMod; //TCP连接模式,使用TCP传输协议时有效,0-无效,1-主动模式,2-被动模式 + char szSipUserName[MAX_SERVERNAME_LEN];//SIP用户名称:64字节字符串(第三方SIP终端请求IPC服务时使用) + char szSipAuthenticateID[MAX_AUTHENTICATEID_LEN];//SIP用户认证ID:64字节字符串 + char szSipAuthenticatePasswd[MAX_AUTHENTICATEPASSWD_LEN];//SIP用户认证密码:32字节字符串(IPC设备注册到SIP服务器时使用) + DWORD dwRegisterValid;//注册有效期:单位秒,默认3600; + BYTE byHeartbeatInterval;//心跳间隔:单位秒,默认10秒; + BYTE byMaxHeartbeatTimeOut;//最大心跳超时次数:默认3次; + BYTE byStreamType;// 取流类型0~主码流,1~子码流,2~3码流 + BYTE byDeviceStatus; //设备是否在线状态,0-保留,1-在线,2-离线 + DWORD dwRegisterInterval;//注册间隔:注册失败后再次注册的时间间隔,范围60-600s,默认60s + DWORD dwAutoAllocChannelID ; //是否自动分配通道ID,按位表示,0为手动配置,1为自动分配,bit1-自动分配编码通道ID,bit2-自动分配报警输入通道,bit3-自动分配解码通道ID + char szDeviceDomain[MAX_SIPSERVER_ADDRESS_LEN] ;// 设备域 + BYTE byRes4[116]; +}NET_DVR_GBT28181_ACCESS_CFG,*LPNET_DVR_GBT28181_ACCESS_CFG; + +//GBT28181协议的设备编码通道配置 +typedef struct tagNET_DVR_GBT28181_CHANINFO_CFG +{ + DWORD dwSize; + char szVideoChannelNumID[MAX_COMPRESSIONID_LEN];//设备视频通道编码ID:64字节字符串,仅限数字 + BYTE byRes[256]; +}NET_DVR_GBT28181_CHANINFO_CFG,*LPNET_DVR_GBT28181_CHANINFO_CFG; + +//GBT28181协议的报警输入通道配置 条件结构 +typedef struct tagNET_DVR_ALARMIN_INFO +{ + NET_DVR_STREAM_INFO struStreamInfo; + DWORD dwAlarmInChannel;//报警输入通道号 + BYTE byRes[32]; //保留 +}NET_DVR_ALARMIN_INFO, *LPNET_DVR_ALARMIN_INFO; + +//GBT28181协议的报警输入通道配置 配置结构 +typedef struct tagNET_DVR_GBT28181_ALARMINCFG +{ + DWORD dwSize; + char szAlarmInNumID[MAX_COMPRESSIONID_LEN];//设备报警输入编码ID(每一路报警输入不同):20字节字符串,仅限数字 + BYTE byRes[256]; +}NET_DVR_GBT28181_ALARMINCFG,*LPNET_DVR_GBT28181_ALARMINCFG; + +typedef struct tagNET_DVR_CAMERA_SETUPCFG +{ + DWORD dwSize; + WORD wSetupHeight; //架设高度[0,20],单位:米 + BYTE byLensType; //镜头焦距类型,0-未知,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm + BYTE bySetupHeightUnit;// 架设高度单位0~M,1~CM + DWORD dwSceneDis; //图像下边缘位置与相机之间的水平距离,单位:厘米 + float fPitchAngle;//相机俯仰角度[-180°, 180°], + float fInclineAngle;//相机倾斜角度[-180°,180°] + float fRotateAngle;//相机旋转角度[-180°,180°] + WORD wVideoDetCoefficient; //视频测试系数[0,300](3.6新增) + BYTE byErectMethod; //架设方式0-正装,1-侧装(3.6新增) + BYTE byCameraViewAngle;//摄像机安装视野角度(0-垂直,1-倾斜,默认0-垂直) + DWORD dwHorizontalDistance;//摄像机与出入口水平距离:范围1-1000,默认30,单位cm,注意摄像机角度为倾斜时该项有效 + BYTE byDetailLensType;//范围1-100,默认28,单位0.1mm + BYTE byRes[3]; + float fHorFieldAngle; //相机水平视场角角度[0°, 360°](抓拍机) + float fVerFieldAngle; //相机垂直视场角角度[0°, 360°](抓拍机),鹰眼范围-90°-90° + float fLableSetupHeight; //标签到架设相机的高度[0,100],单位:米 + float fMaxViewRadius;//最大可视半径,0~10000.00米,默认5000米. + BYTE byRes1[16]; +}NET_DVR_CAMERA_SETUPCFG, *LPNET_DVR_CAMERA_SETUPCFG; + +//起止日期段参数结构体 +typedef struct tagNET_DVR_SCHEDDATE +{ + BYTE byStartMonth; //起始(月) + BYTE byStartDay; //起始(日) + BYTE byStopMonth; //结束(月) + BYTE byStopDay; //结束(日) +}NET_DVR_SCHEDDATE,*LPNET_DVR_SCHEDDATE; + +//时控输出参数 +typedef struct tagNET_DVR_OUTPUT_SCHEDULE +{ + NET_DVR_SCHEDTIME struTime; //时间段 + BYTE byState; //0–关闭, 1–开启 + BYTE byRes[11]; //保留 +} NET_DVR_OUTPUT_SCHEDULE ,*LPNET_DVR_OUTPUT_SCHEDULE; + +//单条时控输出规则参数 +typedef struct tagNET_DVR_ONE_OUTPUT_SCHEDULE_RULE +{ + BYTE byEnable; //是否启用规则,0-否,1-是 + BYTE byRes1[3]; //保留 + NET_DVR_SCHEDDATE struDate; //日期区段 + NET_DVR_OUTPUT_SCHEDULE struOutputSchedule[MAX_TIMESEGMENT_V30]; //最多支持8个时间段的时控输出 + BYTE byRes2[16]; //保留 +}NET_DVR_ONE_OUTPUT_SCHEDULE_RULE,*LPNET_DVR_ONE_OUTPUT_SCHEDULE_RULE; + +//时控输出规则参数 +typedef struct tagNET_DVR_OUTPUT_SCHEDULE_RULECFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_ONE_OUTPUT_SCHEDULE_RULE struOutputRule[MAX_RULE_NUM]; //最多支持8个日期区段的规则配置 + BYTE byRes[64]; //保留 +}NET_DVR_OUTPUT_SCHEDULE_RULECFG,*LPNET_DVR_OUTPUT_SCHEDULE_RULECFG; + +//交通统计报警参数 +typedef struct tagNET_DVR_TPS_ALARMCFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用交通统计报警上传 + BYTE byRes1[3]; // + DWORD dwInterval;//统计间隔时间(单位:分钟) + BYTE byRes[248]; +}NET_DVR_TPS_ALARMCFG, *LPNET_DVR_TPS_ALARMCFG; + +typedef struct tagNET_DVR_DOWNLOAD_ALARM_RECORD_COND +{ + DWORD dwSize; + WORD wAlarmRecordID; //报警录像ID(用于查询录像,仅当byResultType为2时有效) + BYTE byRes[130]; +}NET_DVR_DOWNLOAD_ALARM_RECORD_COND, *LPNET_DVR_DOWNLOAD_ALARM_RECORD_COND; + +typedef struct tagNET_DVR_CABINET_AlARM_PARAMCFG +{ + char sCabinetName[NAME_LEN]; + BYTE byAssociateIO;//1-4,0xff, 其中1-4表示具体的IO通道号,0xff表示不启用 + BYTE byCabinetState;//0~低电平,1~高电平 + BYTE byAlarmIntervalTime;//取值范围1-60,单位:秒 + BYTE byRes1[25]; +}NET_DVR_CABINET_AlARM_PARAMCFG, *LPNET_DVR_CABINET_AlARM_PARAMCFG; + +typedef struct tagNET_DVR_CABINET_CFG +{ + DWORD dwSize; + BYTE byEnable;//0~不启用,1~启用 + BYTE byRes[3]; + NET_DVR_CABINET_AlARM_PARAMCFG struCabinetCfg[MAX_CABINET_COUNT]; + BYTE byRes1[84]; +} NET_DVR_CABINET_CFG, *LPNET_DVR_CABINET_CFG; + +typedef struct tagNET_ITS_GATE_LANE_CFG +{ + BYTE byGateSiteID[MAX_ID_LEN]; //出入口编号 + BYTE byGateInfo[MAX_ID_LEN]; //出入口信息描述 + BYTE byLaneName[NAME_LEN]; //车道名称 + BYTE byValid; //是否启用 0 表示未启用,1表示启用 + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃 逻辑车道) + BYTE byRelativeIoNum; //逻辑车道号关联的输出口编号 + BYTE byDirection; //方向编号; 0 -其他 1 入场 2 出场 3 双向 + BYTE byLprMode; //牌识放行配置0 全部进1 除禁止名单进2 允许名单进 + BYTE byCardMode; //卡片放行配置0 全部进1 除禁止名单进2 允许名单进 + BYTE byGateLaneMode;//出入口放行配置模式 0-全部进 1-只有牌识匹配放行2 只有刷卡匹配放//行 3-牌识或卡片有一个匹配则放行 4-牌识且卡片同时匹配则放行 5-全不进 + //2013-11-19 新增参数 + BYTE byCharge;//是否收费 0-不收费,1-收费 + BYTE byChargeMode;//收费类型 0-车牌收费,1-卡号收费 + BYTE byRes1; + BYTE byLedRelativeIndex[MAX_INDEX_LED];//LED 索引 (1~255) 紧凑排列,0表示无效,不解析后面的数据 + BYTE byGateRelativeIndex;//出入口控制机相对索引 + BYTE byFarRrRelativeIndex;// 远距离读卡器相对索引 + BYTE byRes[82]; //预留 +}NET_ITS_GATE_LANE_CFG, *LPNET_ITS_GATE_LANE_CFG; + +typedef struct tagNET_ITS_IPC_CHAN_LANE_CFG +{ + DWORD dwSize; + BYTE byIpcType; //0-无,1-车牌抓拍,2-人脸抓拍,3-视频安防相机 + BYTE byRes[135]; + NET_ITS_GATE_LANE_CFG struGateLane[4]; //车道配置结构体 +}NET_ITS_IPC_CHAN_LANE_CFG, *LPNET_ITS_IPC_CHAN_LANE_CFG; + +//设备远程控制 +typedef struct tagNET_ITS_REMOTE_COMMAND +{ + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes; //预留 + DWORD dwCode; //命令码 0x0 开闸 0x1 关闸,其它待扩展 + BYTE byRes1[128]; +}NET_ITS_REMOTE_COMMAND,*LPNET_ITS_REMOTE_COMMAND; + +typedef struct tagNET_ITS_REMOTE_CONTROL_ +{ + DWORD dwSize; + NET_ITS_REMOTE_COMMAND struRemoteCommand; //远程命令结构 +}NET_ITS_REMOTE_CONTROL,*LPNET_ITS_REMOTE_CONTROL; + +//长连接获取通道状态 +typedef struct tagNET_ITS_ECT_CHANNELSTATE +{ + DWORD dwSize; + BYTE byRecordStatic; //通道是否在录像,0-不录像,1-录像 + BYTE bySignalStatic; //连接的信号状态,0-正常,1-信号丢失 + BYTE byHardwareStatic;//通道硬件状态,0-正常,1-异常,例如DSP死掉 + BYTE byChannelArmState; //接入IPC的布防状态 + DWORD dwChannel; //通道号 + DWORD dwBitRate;//实际码率 + DWORD dwLinkNum;//客户端连接的个数 + NET_DVR_IPADDR struClientIP[MAX_LINK];//客户端的IP地址 + DWORD dwIPLinkNum;//如果该通道为IP接入,那么表示IP接入当前的连接数 + BYTE byExceedMaxLink; // 是否超出了128路连接数 0 - 未超出, 1-超出 + BYTE byRes[139]; // 保留字节 +}NET_ITS_ECT_CHANNELSTATE, *LPNET_ITS_ECT_CHANNELSTATE; + +//外接灯 +typedef struct tagNET_DVR_PARK_EXTERNAL_SUBINFO +{ + BYTE byEnable; //0 ~ 不开启 1 ~ 开启 + BYTE byFlicker;//0 ~ 不闪烁 1 ~ 闪烁 + BYTE byIOState;//0 ~ 低电平 1 ~ 高电平 (外置灯起效) + BYTE byLampColor;// 0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) + BYTE byRes[4]; +}NET_DVR_PARK_EXTERNAL_SUBINFO, *LPNET_DVR_PARK_EXTERNAL_SUBINFO; + +typedef struct tagNET_DVR_PARK_INLAY_SUBINFO +{ + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byLampColor;//0-灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) + BYTE byRes[21]; +}NET_DVR_PARK_INLAY_SUBINFO, *LPNET_DVR_PARK_INLAY_SUBINFO; + +typedef struct tagNET_DVR_PARKINFO +{ + NET_DVR_PARK_EXTERNAL_SUBINFO struNormalParkIOState;//有车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struNormalNoParkIOState;//无车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialParkIOState;//特殊车位有车io电平状态 + NET_DVR_PARK_EXTERNAL_SUBINFO struSpecialNoParkIOState;//特殊车位无车io电平状态 + BYTE byRes[32]; +}NET_DVR_PARKINFO, *LPNET_DVR_PARKINFO; + +typedef struct tagNET_DVR_EXTERNAL_LAMP_CTRL_MODE +{ + NET_DVR_PARKINFO struParkInfo[MAX_PARKING_NUM];/*外接灯的情况下车位信息,一个通道最大4个车位 (从左到右车位 数组0~3)*/ + BYTE byRes[32]; +}NET_DVR_EXTERNAL_LAMP_CTRL_MODE, *LPNET_DVR_EXTERNAL_LAMP_CTRL_MODE; + +typedef struct tagNET_DVR_INLAY_LAMP_CTRL_MODE +{ + NET_DVR_PARK_INLAY_SUBINFO struLampStateCtrl[MAX_PARKING_STATUS]; + BYTE byRes[96]; +}NET_DVR_INLAY_LAMP_CTRL_MODE, *LPNET_DVR_INLAY_LAMP_CTRL_MODE; + +typedef struct tagNET_DVR_LAMP_INFO //8 +{ + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁(车位指示灯闪烁) + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (车位指示灯颜色) + BYTE byRes[5]; +}NET_DVR_LAMP_INFO, *LPNET_DVR_LAMP_INFO; + +//内置外置灯模式 +typedef struct tagNET_DVR_PARKLAMP_CTRL_MODE//size == 72 +{ + //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 + NET_DVR_LAMP_INFO struLampInfo[MAX_PARKING_STATUS/*8*/]; + //关联车位灯(0-内置灯, 1-外置灯1, 2-外置灯2, 3-外置灯3) + BYTE byLampType; + BYTE byRes[7]; +}NET_DVR_PARKLAMP_CTRL_MODE, *LPNET_DVR_PARKLAMP_CTRL_MODE; + +typedef struct tagNET_DVR_LAMP_PARAM //4 +{ + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byLampColor;//0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 + BYTE byRes[3]; +}NET_DVR_LAMP_PARAM, *LPNET_DVR_LAMP_PARAM; + +//内置外置灯模式 +typedef struct tagNET_DVR_EXTERNAL_PARKLAMP //size == 56 +{ + //车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 + NET_DVR_LAMP_PARAM struLampParam[MAX_PARKING_STATUS/*8*/]; + //关联车位灯(0-内置灯, 1-外置灯1, 2-外置灯2, 3-外置灯3) + BYTE byLampType; + BYTE byRes[7]; +}NET_DVR_EXTERNAL_PARKLAMP, *LPNET_DVR_EXTERNAL_PARKLAMP; + +/*内置灯加外置灯模式下 内置灯控制结构子信息 */ +typedef struct tagNET_DVR_BUILTIN_PARKLAMP +{ + BYTE byEnable; //0~不开启 1 ~开启 + BYTE byFlicker; //0~不闪烁 1 ~闪烁 + BYTE byLampColor; //0- 灭 1-红 2-绿 3-黄 4-蓝 5-品红 6-青 7-白色 (内置灯起效) + BYTE byRes[5]; +}NET_DVR_BUILTIN_PARKLAMP, *LPNET_DVR_BUILTIN_PARKLAMP; + +/* 混合控制模式结构 */ +typedef struct tagNET_DVR_MIXLAMP_CTRL_MODE +{ + NET_DVR_EXTERNAL_PARKLAMP struExternalParkLamp[MAX_PARKING_NUM/*4*/];//外置灯 按照车位号进行区分,一个通道最大4个车位 (从左到右车位 数组0~3) + NET_DVR_BUILTIN_PARKLAMP struBuiltInParkLamp[MAX_PARKING_STATUS/*8*/];//内置灯 按照车位状态区分,车位状态 0代表无车,1代表有车,2代表压线(优先级最高), 3特殊车位 +}NET_DVR_MIXLAMP_CTRL_MODE, *LPNET_DVR_MIXLAMP_CTRL_MODE; + +/* 单控外接灯控制模式结构 */ +typedef struct tagNET_DVR_SINGLELAMP_CTRL_MODE //单外置灯模式是不区分车位信息,显示当前车位状态中,等级最好的状态(压线>特殊车位>有无车状态) +{ + NET_DVR_PARK_EXTERNAL_SUBINFO struExternLampStateCtrl[MAX_PARKING_STATUS/*4*/];//外置灯 按照车位号进行区分,一个通道最大4个车位 (从左到右车位 数组0~3) + BYTE byLampType; /* 1-外置灯1,2-外置灯2,3-外置灯3*/ + BYTE byRes[23]; +}NET_DVR_SINGLELAMP_CTRL_MODE, *LPNET_DVR_SINGLELAMP_CTRL_MODE; + +typedef union tagNET_DVR_LAMP_CTRL_MODE_UNION +{ + BYTE uLen[288]; + NET_DVR_INLAY_LAMP_CTRL_MODE struInlayLampCtrlMode;/*内置灯控制模式结构*/ + NET_DVR_EXTERNAL_LAMP_CTRL_MODE struExternalLampCtrlMode;/*外接灯控制模式结构*/ + NET_DVR_PARKLAMP_CTRL_MODE struParkLampCtrlMode[MAX_PARKING_NUM/*4*/];/*内置外置灯模式,一个通道最大4个车位 (从左到右车位 数组0~3) 当模式为内外置灯的时候生效*/ + //车位检测相机内外置灯,混合控制模式(区分与上面内外置灯模式,该模式下内置灯不作为外置灯使用(内置外置灯模式下,内置灯作为外置灯使用)); + //混合控制模式下,内置灯显示当前显示车位状态中,优先级最高的车位状态(压线>特殊车位>有无车状态)关联灯的状态 + NET_DVR_MIXLAMP_CTRL_MODE struMixLampCtrlMode; + //单外置灯模式是不区分车位信息,显示当前车位状态中,等级最好的状态(压线>特殊车位>有无车状态) + NET_DVR_SINGLELAMP_CTRL_MODE struSingleExternalLampCtrlMode; +}NET_DVR_LAMP_CTRL_MODE_UNION, *LPNET_DVR_LAMP_CTRL_MODE_UNION;/*灯控制模式联合体*/ + +typedef struct tagNET_DVR_LAMP_CTRL_INFO +{ + DWORD dwSize; + BYTE byLampCtrlMode;/*控灯模式:1代表内置灯,2代表外接灯,3代表内外置灯,4代表混合灯模式(内置灯只做高优先级指示灯),5-代表单外置灯模式*/ + BYTE byCtrlChannelIndex;/*交替控制通道号(33~48)*/ + BYTE byRes[2]; + NET_DVR_LAMP_CTRL_MODE_UNION uLampCtrlMode;/*灯控制模式联合体*/ + BYTE byRes2[32]; +}NET_DVR_LAMP_CTRL_INFO, *LPNET_DVR_LAMP_CTRL_INFO; + +//车位属性配置(默认都是normal) +typedef struct tagNET_DVR_PARKSPACE_INFO +{ + BYTE byParkSpaceAttribute; //0~普通车位 1~特殊车位 + BYTE byRes[23]; +}NET_DVR_PARKSPACE_INFO, *LPNET_DVR_PARKSPACE_INFO; + +typedef struct tagNET_DVR_PARKSPACE_ATTRIBUTE +{ + DWORD dwSize; + NET_DVR_PARKSPACE_INFO struParkSpaceInfo[MAX_PARKING_NUM];//一个通道最大4个车位 (从左到右车位 数组0~3) + BYTE byRes[64]; +}NET_DVR_PARKSPACE_ATTRIBUTE, *LPNET_DVR_PARKSPACE_ATTRIBUTE; + +//指示灯外控 +typedef struct tagNET_DVR_LAMP_STATE +{ + BYTE byFlicker;//0~不闪烁 1 ~闪烁 + BYTE byParkingIndex;//车位号1~3 + BYTE byRes1[2]; + DWORD dwIONo;//1~IO1;2~IO2;4~IO3; + BYTE byRes2[8]; +}NET_DVR_LAMP_STATE, *LPNET_DVR_LAMP_STATE; + +typedef struct tagNET_DVR_LAMP_EXTERNAL_CFG +{ + DWORD dwSize; + BYTE byEnable; //外控使能 0~不启用 1~启用 + BYTE byRes1[3]; + NET_DVR_LAMP_STATE struLampStateCtrl;//指示灯外控 + BYTE byRes2[32]; +}NET_DVR_LAMP_EXTERNAL_CFG, *LPNET_DVR_LAMP_EXTERNAL_CFG; + +//车位强制抓图 一个通道最多四车位 +typedef struct tagNET_DVR_COMPEL_CAPTURE +{ + DWORD dwSize; + BYTE byParkIndex;/*车位序号从左到右 (0-表示当前有几个车位,就上传几张图片)1,2,3,4*/ + BYTE byRes[63]; +}NET_DVR_COMPEL_CAPTURE, *LPNET_DVR_COMPEL_CAPTURE; + +//外控报警结构 +typedef struct tagNET_DVR_EXTERNAL_CONTROL_ALARM +{ + DWORD dwSize; + DWORD dwChannelNo; + NET_DVR_LAMP_STATE struLampStateCtrl;//指示灯外控状态 + NET_DVR_TIME struExternalBeginTime;/*外控开始时间*/ + BYTE byRes1[64]; +}NET_DVR_EXTERNAL_CONTROL_ALARM, *LPNET_DVR_EXTERNAL_CONTROL_ALARM; + +/* 设备类型 */ +typedef enum tagEXTERNAL_DEVICES_TYPE +{ + DEVICES_TYPE_RES1 = 0, //保留1 + DEVICES_TYPE_FAR_SCR = 1, //远距离读卡器 + DEVICES_TYPE_ENTRANCE_CONTROL = 2, //出入口控制机 + DEVICES_TYPE_WJ_LED_DEV = 3, //外接LED + DEVICES_TYPE_NJ_LED_DEV = 4, //内接LED + DEVICES_TYPE_VEH_DETECT_DEV = 5, //车检器设备 + DEVICES_TYPE_DZ_DEV = 6, //道闸 + DEVICES_TYPE_PX_SCR_DEV = 7, //票箱读卡器 + DEVICES_TYPE_KJ_SCR_DEV = 8, //卡机读卡器 + DEVICES_TYPE_FKJ_DEV = 9, //发卡机 + DEVICES_TYPE_SKJ_DEV = 10, //收卡机 + DEVICES_TYPE_HDD_DEV = 11, //硬盘(裸盘 1G) + DEVICES_TYPE_DZ_LOCK = 12, //道闸锁闸状态,0表示未锁闸,1表示锁闸 + DEVICES_TYPE_PAPER_PRINTER = 13, //纸票打印机 + DEVICES_TYPE_PAPER_SCANNERS = 14, //纸票扫描仪 + DEVICES_TYPE_IPC_ALARM = 15 //IPC布防状态 +}EXTERNAL_DEVICES_TYPE; + +/* 设备状态 */ +typedef enum tagEXTERNAL_DEVICES_STATUS +{ + /* 通用设备状态码 0~19*/ + DEVICES_STATUS_NORMAL = 0, //状态正常 + DEVICES_STATUS_ABNORMAL = 1, //状态异常 + + /* 发卡机设备状态码 20~39*/ + DEVICES_STATUS_TOO_LESS_CARD = 20, //发卡机少卡 + DEVICES_STATUS_NO_CARD = 21, //发卡机无卡 + DEVICES_STATUS_SENDCARD_ERROR = 22, //预发卡错误 + DEVICES_STATUS_CARD_BLOCKED = 23, //堵卡 + DEVICES_STATUS_CARD_FULL = 24, //回收仓卡满 + + + /* 道闸设备状态码 40~60*/ + DEVICES_STATUS_OPENING = 40, //道闸正在开 + DEVICES_STATUS_CLOSING = 41, //道闸正在关 + DEVICES_STATUS_OPENED = 42, //道闸开到位 + DEVICES_STATUS_CLOSED = 43, //道闸关到位 + DEVICES_STATUS_NOSIGNAL = 44, //道闸无信号 + DEVICES_STATUS_LOCK= 45, //锁闸 + + /* 纸票打印机状态 61~90*/ + PP_STATUS_OFFLINE = 61, //脱机 + PP_STATUS_PRINT_HEADER_UP, // 打印头抬起 + PP_STATUS_FEED_BUTTON_FEEDING, //正在用进纸键进纸 + PP_STATUS_ONLINE_WAITING, //联机等待 + PP_STATUS_FEED_BUTTON_ENABLE, //按键进纸使能为开 + PP_STATUS_JAMR_PAPER_ERROR, //卡纸错误 + PP_STATUS_CUT_PAPER_ERROR, //切刀错误 + PP_STATUS_AUTO_FEED_ERROR, //自动上纸错误 + PP_STATUS_EXIT_RECOVERY_ERROR, //有可恢复错误 + PP_STATUS_EXIT_AUTO_RECOVERY_ERROR, //有可自动恢复错误 + PP_STATUS_PULL_PAPER_ERROR, //拉纸错误 + PP_STATUS_LESS_PAPER , //纸将尽 + PP_STATUS_NO_PAPER, //无纸 + PP_STATUS_PRINT_FAIL, //打印失败 + PP_STATUS_PRINTING, //正在打印 +}EXTERNAL_DEVICES_STATUS; + +/* 外接设备控制类型 */ +typedef enum tagEXTERNAL_DEVICESCTRL_TYPE +{ + DEVICES_CTRL_RES = 0, //预留(不去区分具体控制类型) + DEVICES_CTRL_REMOTE = 1, //遥控器控制,当前仅外设为道闸时支持通过遥控器开闸 +}EXTERNAL_DEVICESCTRL_TYPE; + + +typedef struct tagNET_DVR_GATE_ALARMINFO +{ + DWORD dwSize; + //0x1车辆非法侵入报警 + //0x2道闸超时未关报警 + //0x3车辆压线圈超时报警 + //0x4发卡报警(无卡) + //0x5发卡报警(少卡) + //0x6发卡报警(发卡异常) + BYTE byAlarmType; + BYTE byExternalDevType;//外接设备类型(EXTERNAL_DEVICES_TYPE) + BYTE byExternalDevStatus;//外接设备类型(EXTERNAL_DEVICES_STATUS) + BYTE byExternalDevCtrlType;//外接设备控制类型(EXTERNAL_DEVICESCTRL_TYPE) + NET_DVR_TIME_V30 struAlarmTime;//报警时间 + union + { + BYTE uLen[128]; + struct + { + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + /*车辆类型0-保留 1-固定车,2-临时车,3-预订车,4-联检车,5-授权车*/ + BYTE byVehicleType; + BYTE byRes1[111]; + }struVehicleInfo;//当struAlarmType为(0x1车辆非法侵入报警) + }uAlarmInfo; + BYTE byRes2[64]; //预留 +}NET_DVR_GATE_ALARMINFO, *LPNET_DVR_GATE_ALARMINFO; + +typedef struct tagNET_DVR_ALARMWIRELESSINFO +{ + BYTE byDeviceID[NAME_LEN]; //设备ID + float fDataTraffic; /* 已用流量,单位:MB,小数点后两位*/ + BYTE bySignalIntensity; /* 信号强度,0~100*/ + BYTE byRes[127]; +}NET_DVR_ALARMWIRELESSINFO, *LPNET_DVR_ALARMWIRELESSINFO; + +typedef struct tagNET_DVR_VOLTAGE +{ + int iPhaseAVol; //A相电压 + int iPhaseBVol; //B相电压 + int iPhaseCVol; //C相电压 + int iAveragePhaseVol; //相电压平均值 +}NET_DVR_VOLTAGE, *LPNET_DVR_VOLTAGE; + +typedef struct _tagNET_DVR_LINE_VOLTAGE +{ + int iLineVolAB; //AB线电压 + int iLineVolBC; //BC线电压 + int iLineVolCA; //CA线电压 + int iAverageLineVol; //线电压平均值 +} NET_DVR_LINE_VOLTAGE,*LPNET_DVR_LINE_VOLTAGE; + + +//电流 +typedef struct tagNET_DVR_CURRENT +{ + int iPhaseACurrent; //A相电流 + int iPhaseBCurrent; //B相电流 + int iPhaseCCurrent; //C相电流 + BYTE byRes[4]; +}NET_DVR_CURRENT, *LPNET_DVR_CURRENT; + +//功率 +typedef struct tagNET_DVR_POWER +{ + int iPhaseAPower; //A相功率 + int iPhaseBPower; //B相功率 + int iPhaseCPower; //C相功率 + int iSysTotalPower; //系统总功率 +}NET_DVR_POWER, *LPNET_DVR_POWER; + +//功率因数 +typedef struct tagNET_DVR_POWER_FACTOR +{ + int iPhaseAPowerFactor; //A相功率因数 + int iPhaseBPowerFactor; //B相功率因数 + int iPhaseCPowerFactor; //C相功率因数 + int iTotalPowerFactor; //总功率因数 +}NET_DVR_POWER_FACTOR, *LPNET_DVR_POWER_FACTOR; + +//频率 +typedef struct tagNET_DVR_FREQUENCY +{ + int iPhaseAFrequency; //A相频率 + int iPhaseBFrequency; //B相频率 + int iPhaseCFrequency; //C相频率 + BYTE byRes[4]; +}NET_DVR_FREQUENCY, *LPNET_DVR_FREQUENCY; + +//负载率 +typedef struct tagNET_DVR_LOAD_FACTOR +{ + int iPhaseALoadFactor; //A相负载率 + int iPhaseBLoadFactor; //B相负载率 + int iPhaseCLoadFactor; //C相负载率 + BYTE byRes[4]; +} NET_DVR_LOAD_FACTOR, *LPNET_DVR_LOAD_FACTOR; + +//UPS状态 +typedef struct tagNET_DVR_ALARMHOST_UPS_STATE +{ + NET_DVR_VOLTAGE struInputVoltage; //输入电压 + NET_DVR_VOLTAGE struBypassVoltage; //旁路电压 + NET_DVR_VOLTAGE struOutputVoltage; //输出电压 + int iRectifierVol; //整流器电压 + int iInverterVol; //逆变器电压 + + NET_DVR_CURRENT struInputCurrent; //输入电流 + NET_DVR_CURRENT struBypassCurrent; //旁路电流 + NET_DVR_CURRENT struOutputCurrent; //输出电流 + int iInverterCurrent; //逆变器电流 + + NET_DVR_FREQUENCY struInputFrequency; //输入频率 + NET_DVR_FREQUENCY struBypassFrequency; //旁路频率 + NET_DVR_FREQUENCY struOutputFrequency; //输出频率 + int iInverterFre; //逆变器频率 + + NET_DVR_POWER struInputPower; //输入功率 + NET_DVR_POWER struBypassPower; //旁路功率 + NET_DVR_POWER struOutputPower; //输出功率 + NET_DVR_POWER struComplexPower; //复功率 + + int iNormalPower; //标称功率 + int iPowerFacter; //功率因数 + + NET_DVR_LOAD_FACTOR struBatteryLoadFactor; //电池负载率 + int iBatteryEstimated; //电池备份时间(min) + int iBatteryTemperature; //电池温度 + int iBatteryVoltage; //电池电压 + + + BYTE byRectifierState; //整流器运行状态/*1正常 2异常*/ + BYTE byInverterState; //逆变器运行状态/*1正常 2异常*/ + BYTE byChargeState; //充电器运行状态/*1正常 2异常*/ + BYTE byBatteryState; //电池运行状态/*1正常 2异常*/ + BYTE byAutoBypassState; //自动旁路状态/*1正常 2异常*/ + BYTE byRes2[247]; +} NET_DVR_ALARMHOST_UPS_STATE, *LPNET_DVR_ALARMHOST_UPS_STATE; + +//开关电源状态 +typedef struct tagNET_DVR_ALARMHOST_SWITCH_POWER_STATE +{ + NET_DVR_VOLTAGE struACVoltage; //交流电压 + int iDCConvertVoltage; //DC转换器电压 + NET_DVR_CURRENT struACCurrent; //交流电流 + int iTotalCurrent; //负载总电流 + int iBattery1Temperature; //电池1温度 + int iBattery2Temperature; //电池2温度 + int iBattery1Current; //电池1电流 + int iBattery2Current; //电池2电流 + int iBattery3Current; //电池3电流 + int iBattery4Current; //电池4电流 + int iBatteryTestVoltage; //电池测试电压 + int iRectifierOutputVoltage; //整流模块输出电压 + int iRectifierOutputCurrent; //整流模块输出电流 + int iDCOutputVoltage; //直流输出电压 + BYTE byRes[432]; +} NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE, +*LPNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE; + +//气体探测器状态 +typedef struct tagNET_DVR_ALARMHOST_GAS_DETECTOR_STATE +{ + int iSF6; //SF6,单位ppm + int iFlow; //流量,ml/min + int iTemperature; //温度,单位摄氏度 + int iO2; //氧气,单位% + int iHumidity; //湿度,单位% + BYTE byRes[492]; +} NET_DVR_ALARMHOST_GAS_DETECTOR_STATE, +*LPNET_DVR_ALARMHOST_GAS_DETECTOR_STATE; + +//温湿度传感器状态 +typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE +{ + int iTemperature; //温度,单位摄氏度 + int iHumidity; //湿度,单位% + BYTE byRes[504]; +} NET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE, *LPNET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE; + +//空调状态 +typedef struct tagNET_DVR_ALARMHOST_AIRCONDITION_STATE +{ + int iTemperature; //温度,单位摄氏度 + int iHumidity; //湿度,单位% + BYTE byRunState; //运行状态 1-正常,2-停机 + BYTE byRes[503]; +} NET_DVR_ALARMHOST_AIRCONDITION_STATE, *LPNET_DVR_ALARMHOST_AIRCONDITION_STATE; + + +//电量表状态 +typedef struct tagNET_DVR_ALARMHOST_ELECTRICITY_STATE +{ + int iDCVoltage; //直流电压 + int iDCCurrent; //直流电流 + NET_DVR_VOLTAGE struPhaseVoltage; //相电压 + NET_DVR_LINE_VOLTAGE struLineVoltage; //线电压 + NET_DVR_CURRENT struCurrent[4]; //电流,struCurrent[0]表示第1路, 以此类推 + int iAverageCurrent; //平均电流 + int iNeutralCurrent; //中线电流 + NET_DVR_POWER struActivePower[4]; //有功功率 struActivePower[0]表示第一路有功功率,以此类推 + NET_DVR_POWER struReactivePower[4]; //无功功率 struReactivePower[0]表示第一路无功功率,以此类推 + NET_DVR_POWER struApparentPower[4]; //视在功率 struApprentPower[0]表示第一路视在功率,以此类推 + NET_DVR_POWER_FACTOR struPowerFactor[4]; //功率因数,struPowerFactor[0]表示第一路功率因数,以此类推 + NET_DVR_FREQUENCY struFrequency; //频率 + BYTE byRes[128]; +}NET_DVR_ALARMHOST_ELECTRICITY_STATE, *LPNET_DVR_ALARMHOST_ELECTRICITY_STATE; + +//变电器温显表状态 +typedef struct tagNET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE +{ + int iPhaseATemperature; //A相温度 + int iPhaseBTemperature; //B相温度 + int iPhaseCTemperature; //C相温度 + int iPhaseDTemperature; //D相温度 + BYTE byRes[496]; +}NET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE, *LPNET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE; + +//水位传感器 +typedef struct tagNET_DVR_ALARMHOST_WATERLEVEL_SENSOR +{ + LONG iWaterLevel; //水位 + BYTE byRes[508]; +}NET_DVR_ALARMHOST_WATERLEVEL_SENSOR, *LPNET_DVR_ALARMHOST_WATERLEVEL_SENSOR; + +//扬尘噪声传感器 +typedef struct tagNET_DVR_ALARMHOST_DUSTNOISE_SENSOR +{ + LONG iDust; //扬尘 + LONG iNoise; //噪声 + LONG iPM25; //PM2.5 + BYTE byRes[500]; +}NET_DVR_ALARMHOST_DUSTNOISE_SENSOR, *LPNET_DVR_ALARMHOST_DUSTNOISE_SENSOR; + +//环境采集仪 +typedef struct tagNET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER +{ + LONG iAmmoniaNitrogen; //氨氮 + LONG iCOD; //COD + LONG iPH; //PH + LONG iOxygen; //氧气 + LONG iSulfurDioxide; //二氧化硫 + LONG iSoot; //烟尘 + LONG iFluoride; //氟化物 + LONG iPollutedWater; //污水 + LONG iTotalPhosphorus; //总磷 + LONG iExhaust; //废气 + LONG iNitrogenOxides; //氮氧化物 + LONG iFlueGasTemperature;//烟气温度 + LONG iFlueGasPressure; //烟气压力 + LONG iDustThickness; /*粉尘浓度*/ + LONG iAirCleanLevel; /*空气洁净度等级*/ + LONG iPm10Thickness; /*PM10浓度*/ + BYTE byRes[448]; +}NET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER, *LPNET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER; + +//风速传感器状态 +typedef struct +{ + int iWindSpeed; /*风速*/ + BYTE byRes[508]; +}NET_DVR_WIND_SPEED_STATE, *LPNET_DVR_WIND_SPEED_STATE; + +//通用扩展输出模块状态(48路,每位表示1路,0表示关,1表示开) +typedef struct +{ + BYTE byOutPutState1; /*output1-8*/ + BYTE byOutPutState2; /*output9-16*/ + BYTE byOutPutState3; /*output17-24*/ + BYTE byOutPutState4; /*output25-32*/ + BYTE byOutPutState5; /*output33-40*/ + BYTE byOutPutState6; /*output41-48*/ + BYTE Res[506]; +}NET_DVR_GENERATE_OUTPUT_STATE, *LPNET_DVR_GENERATE_OUTPUT_STATE; + +//浸水传感器状态 +typedef struct +{ + int iWaterLogVal; /* 泄露位置,100倍*/ + int iLeakResist1; /*第一路漏水电阻*/ + int iTotolResist1; /*第一路总电阻*/ + int iLeakResist2; /*第二路漏水电阻*/ + int iTotolResist2; /*第二路总电阻*/ + BYTE byWaterLogAlarm; /* 泄漏报警1:正常,2:告警*/ + BYTE byLeakAlarm1; /*第一路漏水告警1:正常,2:告警*/ + BYTE byFaultAlarm1; /*第一路故障告警1:正常,2:告警*/ + BYTE byLeakAlarm2; /*第二路漏水告警1:正常,2:告警*/ + BYTE byFaultAlarm2; /*第二路故障告警1:正常,2:告警*/ + BYTE byRes[487]; +}NET_DVR_SOAK_STATE, *LPNET_DVR_SOAK_STATE; + +//太阳能控制器状态 +typedef struct +{ + int iChangerVolInput; /*充电设备输入电压*/ + int iChangerCurInput; /*充电设备输入电流*/ + int iChangerPwInput; /*充电设备输入功率*/ + int iChangerVolOutput; /*充电设备输出电压*/ + int iChangerCurOutput; /*充电设备输出电流*/ + int iChangerPwOutput; /*充电设备输出功率*/ + int iDischangerVolOutput; /*放电设备输出电压*/ + int iDischangerCurOutput; /*放电设备输出电流*/ + int iDischangerPwOutput; /*放电设备输出功率*/ + int iDevTemperatrue; /*设备内温度*/ + BYTE byBatteryVolState; /*蓄电池电压状态1:正常,2:异常*/ + BYTE byBatteryTmpState; /*蓄电池温度状态1:正常,2:异常*/ + BYTE byChangerVolInputState; /*充电设备输入电压状态1:正常,2:异常*/ + BYTE byChangerRunState; /*充电设备运行状态1:正常,2:待机*/ + BYTE byChangerChgState; /*充电设备充电状态1:正常,2:异常*/ + BYTE byBatteryVolFlt; /*蓄电池电压故障1:正常,2:告警*/ + BYTE byBatteryTmpFlt; /*蓄电池温度异常1:正常,2:告警*/ + BYTE byBatteryResistanceFlt; /*蓄电池内阻异常1:正常,2:告警*/ + BYTE byVolRcgFlt; /*额定电压识别错误1:正常,2:告警*/ + BYTE byChangerVolInputFlt; /*充电设备输入电压异常1:正常,2:告警*/ + BYTE byChangerMosShort; /*充电MOS管短路1:正常,2:告警*/ + BYTE byChangerAntiOrMosShort; /*充电或防反MOS管短路1:正常,2:告警*/ + BYTE byChangerAntiShort; /*防反MOS管短路1:正常,2:告警*/ + BYTE byInputOverCur; /*输入过流1:正常,2:告警*/ + BYTE byLoadOverCur; /*负载过流1:正常,2:告警*/ + BYTE byLoadShort; /*负载短路1:正常,2:告警*/ + BYTE byLoadMosShort; /*负载MOS管短路1:正常,2:告警*/ + BYTE byChangerFlt; /*充电设备故障1:正常,2:告警*/ + BYTE byRes[454]; +}NET_DVR_SOLAR_POWER_STATE, *LPNET_DVR_SOLAR_POWER_STATE; + +//SF6报警主机状态 +typedef struct +{ + int iSf6Thick1; /*第一点SF6浓度*/ + int iO2Thick1; /*第一点氧气浓度*/ + int iTemprature1; /*第一点温度*/ + int iHumidity1; /*第一点湿度*/ + int iSf6Thick2; /*第二点SF6浓度*/ + int iO2Thick2; /*第二点氧气浓度*/ + int iTemprature2; /*第二点温度*/ + int iHumidity2; /*第三点湿度*/ + int iSf6Thick3; /*第三点SF6浓度*/ + int iO2Thick3; /*第三点氧气浓度*/ + int iTemprature3; /*第三点温度*/ + int iHumidity3; /*第三点湿度*/ + int iSf6Thick4; /*第四点SF6浓度*/ + int iO2Thick4; /*第四点氧气浓度*/ + int iTemprature4; /*第四点温度*/ + int iHumidity4; /*第四点湿度*/ + int iSf6Thick5; /*第五点SF6浓度*/ + int iO2Thick5; /*第五点氧气浓度*/ + int iTemprature5; /*第五点温度*/ + int iHumidity5; /*第五点湿度*/ + int iSf6Thick6; /*第六点SF6浓度*/ + int iO2Thick6; /*第六点氧气浓度*/ + int iTemprature6; /*第六点温度*/ + int iHumidity6; /*第六点湿度*/ + int iSf6Thick7; /*第七点SF6浓度*/ + int iO2Thick7; /*第七点氧气浓度*/ + int iTemprature7; /*第七点温度*/ + int iHumidity7; /*第七点湿度*/ + int iSf6Thick8; /*第八点SF6浓度*/ + int iO2Thick8; /*第八点氧气浓度*/ + int iTemprature8; /*第八点温度*/ + int iHumidity8; /*第八点湿度*/ + int iSf6Thick9; /*第九点SF6浓度*/ + int iO2Thick9; /*第九点氧气浓度*/ + int iTemprature9; /*第九点温度*/ + int iHumidity9; /*第九点湿度*/ + int iSf6Thick10; /*第十点SF6浓度*/ + int iO2Thick10; /*第十点氧气浓度*/ + int iTemprature10; /*第十点温度*/ + int iHumidity10; /*第十点湿度*/ + int iSf6Thick11; /*第十一点SF6浓度*/ + int iO2Thick11; /*第十一点氧气浓度*/ + int iTemprature11; /*第十一点温度*/ + int iHumidity11; /*第十一点湿度*/ + int iSf6Thick12; /*第十二点SF6浓度*/ + int iO2Thick12; /*第十二点氧气浓度*/ + int iTemprature12; /*第十二点温度*/ + int iHumidity12; /*第十二点湿度*/ + BYTE byFanState1; /*风机状态1 1:运行,2:停止*/ + BYTE byFanState2; /*风机状态2 1:运行,2:停止*/ + BYTE byFanState3; /*风机状态3 1:运行,2:停止*/ + BYTE byFanState4; /*风机状态4 1:运行,2:停止*/ + BYTE byFanState5; /*风机状态5 1:运行,2:停止*/ + BYTE byFanState6; /*风机状态6 1:运行,2:停止*/ + BYTE byFanState7; /*风机状态7 1:运行,2:停止*/ + BYTE byFanState8; /*风机状态8 1:运行,2:停止*/ + BYTE byFanState9; /*风机状态9 1:运行,2:停止*/ + BYTE byFanState10; /*风机状态10 1:运行,2:停止*/ + BYTE byFanState11; /*风机状态11 1:运行,2:停止*/ + BYTE byFanState12; /*风机状态12 1:运行,2:停止*/ + BYTE byRes[308]; +}NET_DVR_SF6_ALARMHOST_STATE, *LPNET_DVR_SF6_ALARMHOST_STATE; + +//称重仪状态 +typedef struct +{ + int iWeight; /*称重值,1000倍*/ + BYTE byRes[508]; +}NET_DVR_WEIGHT_STATE, *LPNET_DVR_WEIGHT_STATE; + +//气象采集系统状态 +typedef struct +{ + int iAirTemperature; /* 空气温度*/ + DWORD dwAirHumidity; /* 空气湿度*/ + DWORD dwWindSpeed; /* 风速*/ + DWORD dwWindDirection; /* 风向*/ + DWORD dwIlluminationIntensity; /* 光照强度*/ + DWORD dwCO2; /* co2浓度*/ + DWORD dwPM25; /* PM2.5浓度*/ + DWORD dwAirPressure; /* 大气压力*/ + int iSoilTemperature; /* 土壤温度*/ + DWORD dwSoilHumidity; /* 土壤湿度*/ + DWORD dwRainFall; /*降雨量*/ + BYTE byIsRainSnow; /* 雨雪情况,1-无雨雪,2-有雨雪*/ + BYTE byRes[467]; +}NET_DVR_WEATHER_STATION_STATE, *LPNET_DVR_WEATHER_STATION_STATE; + +//水质显示仪状态 +typedef struct +{ + DWORD dwTurbidity; /* 浊度值*/ + DWORD dwChlorine; /* 余氯值*/ + DWORD dwPH; /* PH 值*/ + BYTE byRes[500]; +}NET_DVR_WATER_QLT_STATE, *LPNET_DVR_WATER_QLT_STATE; + +//燃气显示系统状态 +typedef struct +{ + int iNatrualGasThick; /* 天然气浓度*/ + BYTE byRes[508]; +}NET_DVR_FUEL_GAS_DETE_STATE, *LPNET_DVR_FUEL_GAS_DETE_STATE; + +//消防主机设备 +typedef struct tagNET_DVR_FIRE_ALARM_STATUS +{ + BYTE byFireAlarm[MAX_FIRE_ALARM_ZONE][MAX_FIRE_ALARM_POINT_ZONE]; //火点状态参数位,1-正常,2-告警 + BYTE byRes[128]; //保留位 +}NET_DVR_FIRE_ALARM_STATUS, *LPNET_DVR_FIRE_ALARM_STATUS; + +typedef union tagNET_DVR_EXTERNAL_DEVICE_STATE_UNION +{ + NET_DVR_ALARMHOST_UPS_STATE struUpsState; //UPS状态 + NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_STATE struSwitchPowerState;//开关电源状态 + NET_DVR_ALARMHOST_GAS_DETECTOR_STATE struGasDetectorState;//气体检测系统状态 + NET_DVR_ALARMHOST_TEMP_HUMI_SENSOR_STATE struTempHumiSensorState;//温湿度传感器状态 + NET_DVR_ALARMHOST_AIRCONDITION_STATE struAirConditionState;//空调状态 + NET_DVR_ALARMHOST_ELECTRICITY_STATE struElectricityState;//电量表状态 + NET_DVR_ALARMHOST_TRANSFORMER_TEMP_STATE struTransformerTempState; //变电器状态 + NET_DVR_ALARMHOST_WATERLEVEL_SENSOR struWaterLevelSensor;//水位传感器 + NET_DVR_ALARMHOST_DUSTNOISE_SENSOR struDustNoiseSensor;//扬尘噪声传感器 + NET_DVR_ALARMHOST_ENVIRONMENTAL_LOGGER struEnvironmentLogger;//环境采集仪 + NET_DVR_WIND_SPEED_STATE struWindSpeedState; //风速传感器状态 + NET_DVR_GENERATE_OUTPUT_STATE struGenerateOutputState; //通用扩展输出模块状态(48路,每位表示1路) + NET_DVR_SOAK_STATE struSoakState; //浸水传感器状态 + NET_DVR_SOLAR_POWER_STATE struSolarPowerState; //太阳能控制器状态 + NET_DVR_SF6_ALARMHOST_STATE struSF6AlarmHostState; //SF6报警主机状态 + NET_DVR_WEIGHT_STATE struWeightState; //称重仪状态 + NET_DVR_WEATHER_STATION_STATE struWeatherStationState; //气象采集系统状态 + NET_DVR_WATER_QLT_STATE struWaterQltState; //水质显示仪状态 + NET_DVR_FUEL_GAS_DETE_STATE struFuelGasDeteState; //燃气显示系统状态 + NET_DVR_FIRE_ALARM_STATUS struFireAlarmStatus; //消防主机设备状态 + BYTE byRes[512]; +} NET_DVR_EXTERNAL_DEVICE_STATE_UNION, *LPNET_DVR_EXTERNAL_DEVICE_STATE_UNION; + +typedef struct tagNET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE +{ + DWORD dwSize; + BYTE byDevType; //1-UPS,2-开关电源,3-气体检测系统,4-温湿度传感器,5-空调,6-电量表,7-变电器状态, 8-水位传感器、9-扬尘噪声传感器、10-环境采集仪、11-风速传感器状态、12-通用扩展输出模块状态、13-浸水传感器状态、14-太阳能控制器状态、15-SF6报警主机状态、16-称重仪状态、17-气象采集系统状态、18-水质检测仪状态、19-燃气显示系统状态、20-消防主机状态 + BYTE byRes1[3]; + NET_DVR_EXTERNAL_DEVICE_STATE_UNION struDevState; + BYTE byRes2[32]; +} NET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE, *LPNET_DVR_ALARMHOST_EXTERNAL_DEVICE_STATE; + +//通用扩展输出模块控制(48路,每位表示1路) +typedef struct +{ + DWORD dwSize; + BYTE byOutPutState1; /*output1-8*/ + BYTE byOutPutState2; /*output9-16*/ + BYTE byOutPutState3; /*output17-24*/ + BYTE byOutPutState4; /*output25-32*/ + BYTE byOutPutState5; /*output33-40*/ + BYTE byOutPutState6; /*output41-48*/ + BYTE byOperateType; //操作类型,0-无效,1-开,2-关 + BYTE Res[65]; +}NET_DVR_GENERATE_OUTPUT_CTRL, *LPNET_DVR_GENERATE_OUTPUT_CTRL; + +//UPS报警限值 +typedef struct tagNET_DVR_ALARMHOST_UPS_LIMIT_VALUE +{ + int iInputVolHigh; //越限输入电压值(高值) + int iInputVolLow; //越限输入电压值(低值) + int iInputFreHigh; //越限输入频率值(高值) + int iInputFreLow; //越限输入频率值(低值) + int iOutputVolHigh; //越界输出电压值(高值) + int iOutputVolLow; //越界输出电压值(低值) + int iBatteryVoltageLow; //电池低电压限值 + int iBatterySurplus; //电池后备时间低 限值 + int iBatteryTemperatureHigh;//电池温度高限值 + BYTE byRes[64]; //保留 +}NET_DVR_ALARMHOST_UPS_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_UPS_LIMIT_VALUE; + +//温湿度传感器限值 +typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE +{ + int iTemperatureHighLimit; //温度高限值,单位摄氏度 + int iTemperatureLowLimit; //温度低限值,单位摄氏度 + int iHumidityHighLimit; //湿度高限值,单位% + int iHumidityLowLimit; //湿度低限值,单位% + BYTE byRes[84]; +} NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE; + +typedef union tagNET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION +{ + NET_DVR_ALARMHOST_UPS_LIMIT_VALUE struUpsLimitValue; + NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_LIMIT_VALUE struTempHumidityLimitValue; +}NET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION,*LPNET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION; + +typedef struct tagNET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE +{ + DWORD dwSize; + BYTE byDevType; //1-UPS,2-温湿度传感器 + BYTE byRes1[3]; + NET_DVR_EXTERNAL_DEVICE_LIMIT_VALUE_UNION struAlarmValue; + BYTE byRes2[32]; +}NET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE, *LPNET_DVR_ALARMHOST_EXTERNAL_DEVICE_LIMIT_VALUE; + +#define ALARMHOST_ALARMOUT_NUM 64 //触发器个数 +#define MAX_OSD_UNIT_LEN 8 //OSD单位长度 +typedef struct tagNET_DVR_ALARMHOST_SENSOR_JOINT_CFG +{ + DWORD dwSize; + BYTE bySensorJointAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM/*512*/];//模拟量联动触发器,0-不联动,1-联动 + BYTE bySensorJointSiren[ALARMHOST_MAX_SIREN_NUM/*8*/];//模拟量联动警号 + BYTE bySensorAlarmTypeJointAlarmOut[ALARMHOST_ALARMOUT_NUM/*64*/];//模拟量按类型联动触发器,该字段是bySensorJointAlarmOut的扩展。数组下标表示触发器号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:1bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE bySesorAlarmTypeJointSiren[ALARMHOST_MAX_SIREN_NUM]; //模拟量按类型联动警号,该字段是bySensorJointSiren的扩展。数组下标表示警号序号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE byChan; //通道号 + BYTE byRes[55]; +}NET_DVR_ALARMHOST_SENSOR_JOINT_CFG, *LPNET_DVR_ALARMHOST_SENSOR_JOINT_CFG; + +//UPS报警信息上传 +typedef struct tagNET_DVR_ALARMHOST_UPS_ALARMINFO +{ + BYTE byAlarmType;/*报警类型:1.A相输入电压越限 2.B相输入电压越限 3.C相输入电压越限 4.A相输出电压越限5.B相输出电压越限 6.C相输出电压越限7.A相输入频率越限 8.B相输入频率越限9.C相输入频率越限10.整流器电压越限报警 11.过载报警 12.电池电压低报警 13.电池后备时间超低报警 14.电池温度超高报警 15.逆变器关闭报警 16.自动旁路开报警 17.整流器故障报警 18.逆变器故障报警 19.充电器故障报警 20.电池故障报警 21.自动旁路故障报警 */ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 + BYTE byRes1; //保留 + int iAlarmValue;//报警值 + BYTE byRes2[64]; //保留 +}NET_DVR_ALARMHOST_UPS_ALARMINFO, *LPNET_DVR_ALARMHOST_UPS_ALARMINFO; + +//开关电源报警上传 +typedef struct tagNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO +{ + BYTE byAlarmType; /*报警类型:1-电池测试失败 2-AC-DC转换器故障,3-输入线/相电压AB/A越限,4-输入线/相电压BC/B越限,5-输入线/相电压CA/C越限,6-输出电流A越限,7-输出电流B越限,8-输出电流C越限,9整流模块故障,10-风扇故障,11-直流电压越限*/ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 + BYTE byRes1; + int iAlarmValue; //报警值 + BYTE byRes2[64]; +}NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO, +*LPNET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO; + +//气体检测系统报警 +typedef struct tagNET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO +{ + BYTE byAlarmType; /*报警类型:1- SF6气体含量异常,2-氧气含量异常,3-温度值异常,4-湿度值异常,5-流量*/ + BYTE byChanNo; //485通道号,从1开始 + BYTE bySlotNo; //485虚拟槽位号 + BYTE byRes1; + int iAlarmValue; //报警值 + BYTE byRes2[64]; +}NET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO, +*LPNET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO; + + +//温湿度传感器报警 +typedef struct tagNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO +{ + BYTE byAlarmType; //1-温度异常,2-湿度异常 + BYTE byChanNo; //485通道号 + BYTE bySlotNo; //485槽位号 + BYTE byRes1; + int iAlarmValue; //报警值 + BYTE byRes2[64]; +} NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO, *LPNET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO; + +typedef union tagNET_DVR_485_DEVICE_ALARM_UNION +{ + NET_DVR_ALARMHOST_UPS_ALARMINFO struUPSAlarm; //UPS报警 + NET_DVR_ALARMHOST_SWITCH_POWER_SUPPLY_ALARMINFO struSwitchPowerAlarm; //开关电源报警 + NET_DVR_ALARMHOST_GAS_DETECT_SYS_ALARMINFO struGasDetectSystemAlarm; //气体检测系统报警 + NET_DVR_ALARMHOST_TEMP_HUMIDITY_SENSOR_ALARMINFO struTempHumiditySensorAlarm; //温湿度传感器报警 + BYTE byRes[72]; +} NET_DVR_485_DEVICE_ALARM_UNION, *LPNET_DVR_485_DEVICE_ALARM_UNION; + +//485外接设备报警信息 +typedef struct tagNET_DVR_485_EXTERNAL_DEVICE_ALARMINFO +{ + DWORD dwSize; + BYTE byAlarmType; //1-UPS报警,2-开关电源报警,3-气体检测系统报警,4-温湿度传感器报警 + BYTE byRes1[3]; + NET_DVR_485_DEVICE_ALARM_UNION struAlarmInfo; + BYTE byRes2[16]; +} NET_DVR_485_EXTERNAL_DEVICE_ALARMINFO, *LPNET_DVR_485_EXTERNAL_DEVICE_ALARMINFO; + +typedef struct tagNET_DVR_ALARMHOST_RS485_SLOT_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE sDeviceName[NAME_LEN]; // 前端设备名称 + WORD wDeviceType; // 前端设备类型ALARM_FRONT_DEVICE _TYPE + WORD wDeviceProtocol; // 前端设备协议 通过获取协议列表获取 + WORD wAddress; //设备地址 + BYTE byChannel; //485通道号 + BYTE bySlotChan; //槽位号 + BYTE byRes[60]; // 保留字节 +}NET_DVR_ALARMHOST_RS485_SLOT_CFG, *LPNET_DVR_ALARMHOST_RS485_SLOT_CFG; + +//走廊模式 +typedef struct tagNET_DVR_CORRIDOR_MODE +{ + DWORD dwSize; + BYTE byEnableCorridorMode; //是否启用走廊模式 0~不启用, 1~启用 + BYTE byMirrorMode; //镜像方式,0 关闭;1 左右;2 上下;3 中间 + BYTE byRes[126]; +}NET_DVR_CORRIDOR_MODE, *LPNET_DVR_CORRIDOR_MODE; + +//人脸侦测 +typedef struct tagNET_DVR_DETECT_FACE +{ + DWORD dwSize; + BYTE byEnableDetectFace; //是否启用 0~不启用, 1~启用 + BYTE byDetectSensitive; //灵敏度 10个等级 1~10 + BYTE byEnableDisplay; /*启用移动侦测高亮显示,0-否,1-是*/ + BYTE byRes; + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; /*处理方式*/ + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间 */ + DWORD dwMaxRelRecordChanNum; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum; //报警触发的录象通道数 实际支持数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; /* 报警触发的录象通道*/ + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + WORD wDuration; //报警持续时间 5s 能力集 + BYTE byRes1[30]; +}NET_DVR_DETECT_FACE, *LPNET_DVR_DETECT_FACE; + +typedef struct tagNET_DVR_MUL_STREAM_CHANNEL_GROUP +{ + DWORD dwSize; // 结构体大小 + DWORD dwGroup ; //组号 + NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; //多码流配置 + BYTE byRes[64] ; +}NET_DVR_MUL_STREAM_CHANNEL_GROUP,*LPNET_DVR_MUL_STREAM_CHANNEL_GROUP; + +typedef struct tagNET_DVR_CHANNEL_GROUP +{ + DWORD dwSize; // 结构体大小 + DWORD dwChannel; //通道号 + DWORD dwGroup; //组号 + BYTE byID; //设备区域设置ID + BYTE byRes1[3]; + DWORD dwPositionNo; //场景位置索引号,IPC是0,IPD是从1开始 + BYTE byRes[56]; +}NET_DVR_CHANNEL_GROUP, *LPNET_DVR_CHANNEL_GROUP; + + +typedef struct tagNET_DVR_TIME_DETECTION +{ + NET_DVR_SCHEDTIME struSchedTime; //时间 + BYTE byDetSceneID;//检测场景号[1,4],IPC默认是0 + BYTE byRes[15]; +}NET_DVR_TIME_DETECTION,*LPNET_DVR_TIME_DETECTION; + +//抓拍触发模式支持关联布防时间段和上传中心条件 +typedef struct tagNET_DVR_GUARD_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + /* + 0表示无效, + 1表示关联 抓拍VIA模式(视频触发抓拍 IPC使用); + 2 表示关联 抓拍 HVT 模式 (混卡IPC使用) + */ + BYTE byRelateType; + BYTE byGroupNo; //组号 + BYTE byRes[62]; +}NET_DVR_GUARD_COND,*LPNET_DVR_GUARD_COND; + +//抓拍触发模式支持关联布防时间段和上传中心 +typedef struct tagNET_DVR_GUARD_CFG +{ + DWORD dwSize; + //布防时间 + NET_DVR_TIME_DETECTION struAlarmSched[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //本组内实际触发的录象通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30]; //报警触发的录象通道(0xffff ffff表示后续无效) + NET_DVR_TIME_DETECTION struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + BYTE byDirection;//触发方向:0-保留;1-全部;2-正向;3-反向 + BYTE byRes[87]; +}NET_DVR_GUARD_CFG,*LPNET_DVR_GUARD_CFG; + +//抓拍图片参数配置扩展条件结构 +typedef struct tagNET_DVR_SNAPINFO_COND_ +{ + DWORD dwSize; + DWORD dwChan; + /* + 0 表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) + */ + BYTE byRelateType; + BYTE byRes[63]; //保留 +}NET_DVR_SNAPINFO_COND, *LPNET_DVR_SNAPINFO_COND; + + +//抓拍图片参数配置 +typedef struct tagNET_DVR_SNAPINFOCFG +{ + DWORD dwSize; + BYTE byCurPicType;//0-表示的图片质量,1-表示图片大小 + BYTE byPicQuality;//图片质量[1,100] + BYTE byRes1[2]; + DWORD dwPicSize;//图片大小[64k,2048k] + BYTE byRes2[128]; +}NET_DVR_SNAPINFOCFG,*LPNET_DVR_SNAPINFOCFG; + +//ptz方式 +typedef enum _PTZ_TRACK_MODE_ +{ + PTZ_TRACK_MODE_ALWAYS = 1, //一直 + PTZ_TRACK_MODE_BYTIME = 2, //指定时间 + PTZ_TRACK_MODE_NEXT = 3, //下一目标 +}PTZ_TRACK_MODE; + +//ptz参数 +typedef struct _NET_DVR_PTZ_TRACK_PARAM_ +{ + DWORD dwSize; //结构体大小 + BYTE byTrackMode; //方式,参考PTZ_TRACK_MODE + BYTE byLinkageTarget; //联动目标0-默认,1-球机1,2-球机2…..依次类推 + BYTE byAutoTrackEnable;//使能 0-自动开启,1-自动关闭(枪球设备才支持自动关闭功能,故在此特殊扩展) + BYTE byRes1; //保留 + DWORD dwTrackTime; //时间, + //当模式为PTZ_TRACK_MODE_ALWAYS,此字段无效 + //当模式为PTZ_TRACK MODE_BYTIME时,范围[1,60],默认10秒 + //当模式为PTZ_TRACK MODE_NEXT时,范围[1,10],默认2秒 + BYTE byRes2[256]; //保留 +}NET_DVR_PTZ_TRACK_PARAM,*LPNET_DVR_PTZ_TRACK_PARAM; + +typedef struct tagNET_VCA_TRAVERSE_PLANEPARAM +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byEnableDualVca;// 启用支持智能后检索 0-不启用,1-启用 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + NET_VCA_TRAVERSE_PLANE struAlertParam[MAX_ALERTLINE_NUM]; //警戒线参数 + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD byRelRecordChan[MAX_CHANNUM_V30];//触发录像的通道号 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + BYTE byRes2[100]; +}NET_VCA_TRAVERSE_PLANE_DETECTION, *LPNET_VCA_TRAVERSE_PLANE_DETECTION; + + +typedef struct tagNET_VCA_FIELDDETECION +{ + DWORD dwSize; + BYTE byEnable; //使能,是否开启 + BYTE byEnableDualVca;// 启用支持智能后检索 0-不启用,1-启用 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + NET_VCA_INTRUSION struIntrusion[MAX_INTRUSIONREGION_NUM];//每个区域的参数设置 + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //布防时间 + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD byRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //假日布防时间 + BYTE byRes2[100]; +}NET_VCA_FIELDDETECION, *LPNET_VCA_FIELDDETECION; + +typedef struct tagNET_DVR_ROI_DETECT_NUM +{ + DWORD dwSize; + DWORD dwGroup; + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + DWORD dwRoiFixNum; //固定区域总数,确定后续再次获取的组号 + DWORD dwRoiFixID[MAX_ROIDETECT_NUM];//IPC现在支持4个,球机现在支持24个 + BYTE szFixRoiName[MAX_ROIDETECT_NUM][NAME_LEN];//固定ROI区域名称 + DWORD dwRoiTrackNum; //自动区域总数,确定后续再次获取的组号 + DWORD dwRoiTrackID[MAX_ROIDETECT_NUM];//IPC现在支持4个,球机现在支持24个 + BYTE byRes[320]; +}NET_DVR_ROI_DETECT_NUM, *LPNET_DVR_ROI_DETECT_NUM; + +typedef enum _DETECT_ROI_TYPE_ +{ + DETECT_FIX_ROI = 0, //检测ROI固定区域 + DETECT_TRACK_ROI = 1 //检测ROI 自动区域 +}DETECT_ROI_TYPE; +//条件参数 +typedef struct tagNET_DVR_ROI_DETECT_COND +{ + DWORD dwSize; + DWORD dwRoiID; //区域检测号 一个PTZ支持4个 + NET_DVR_MULTI_STREAM_COMPRESSIONCFG_COND struMultiStreamCfg; //多码流配置 + BYTE byRoiDetectType; // DECTECT_ROI_TYPE 的值 + BYTE byRoiDetectTrackType;//固定区域时,该字段无效;区域时,1~人脸侦测(IPC),2~移动物体,3-车牌 + BYTE byRes[30]; +}NET_DVR_ROI_DETECT_COND,*LPNET_DVR_ROI_DETECT_COND; + +//配置参数 +//ROI固定区域模式 区域编码功能 +typedef struct tagNET_DVR_ROI_FIX_RECT_CFG +{ + BYTE byEnableFixRoi; // ROI固定区域模式 是否启用 0~不启用, 1~启用 + BYTE byImageQualityLevel; //图像质量提升等级 1~6 + BYTE byRes[2]; + BYTE szFixRoiName[NAME_LEN]; + NET_VCA_RECT struRoiRect; //ROI区域 + BYTE byRes1[468]; +}NET_DVR_ROI_FIX_RECT_CFG, *LPNET_DVR_ROI_FIX_RECT_CFG; + +//ROI自动模式 区域编码功能 +typedef struct tagNET_DVR_ROI_TRACK_RECT_CFG +{ + BYTE byEnableTrackRoi; // ROI自动模式 是否启用 0~不启用, 1~启用 + BYTE byImageQualityLevel; //图像质量提升等级 1~6 + BYTE byModeType;// 0 ~ 无, 1~人脸模式(移动和静止的物体), 2~移动物体(移动的物体), 3-车牌 + BYTE byRes[509]; +}NET_DVR_ROI_TRACK_RECT_CFG, *LPNET_DVR_ROI_TRACK_RECT_CFG; + +typedef union tagNET_DVR_ROI_DETECT_UNION +{ + DWORD uLen[128]; + NET_DVR_ROI_FIX_RECT_CFG strRoiFixRectCfg;//固定区域模式 + NET_DVR_ROI_TRACK_RECT_CFG strRoiTrackRectCfg;//自动模式 +}NET_DVR_ROI_DETECT_UNION,*LPNET_DVR_ROI_DETECT_UNION; + +typedef struct tagNET_DVR_ROI_DETECT_CFG +{ + DWORD dwSize; //560 + DWORD dwStreamType; //码流类型,0-主码流,1-子码流,2-事件类型,3-码流3,…… + BYTE byRoiDetectType; // DECTECT_ROI_TYPE 的值 + BYTE byRes[3]; + NET_DVR_ROI_DETECT_UNION uRoiDetectInfo; //ROI检测区域 + BYTE byRes1[36]; +}NET_DVR_ROI_DETECT_CFG, *LPNET_DVR_ROI_DETECT_CFG; + +//虚焦侦测 +typedef struct tagNET_VCA_DEFOCUSPARAM +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE bySensitiveLevel;// 1-100,默认50,灵敏度越高,越容易报警 + BYTE byRes1[2]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + BYTE byRes2[24]; +}NET_VCA_DEFOCUSPARAM,*LPNET_VCA_DEFOCUSPARAM; + +typedef struct tagNET_PTZ_INFO_EX +{ + float fPan;//P值 精确到小数点后3位 范围[0,360.000] + float fTilt; //Z值 精确到小数点后3位 范围[-90.000,90.000] + float fVisibleZoom;//可见光zoom 精确到小数点后1位 不会超过[0,10000.0] + DWORD dwVisibleFocus;//可见光focus[0,65535] + float fThermalZoom;//热成像zoom 精确到小数点后1位 不会超过[0,10000.0] + DWORD dwThermalFocus;//热成像focus[0,65535] +}NET_PTZ_INFO_EX, *LPNET_PTZ_INFO_EX; + +//IPC5.1.0 +typedef struct tagNET_DVR_PRESET_NAME +{ + DWORD dwSize; + WORD wPresetNum; //预置点编号 + BYTE byRes1[2]; //字节对齐 + char byName[NAME_LEN]; + WORD wPanPos;//水平参数 如果获取到的数据大于360默认减去360 + WORD wTiltPos;//垂直参数 如果获取到的数据大于360默认减去360 + WORD wZoomPos;//变倍参数如果获取到的数据大于360默认减去360 + BYTE byRes2; + BYTE byPTZPosExEnable; /*是否启用PTZ坐标扩展,0~不启用,PTZ坐标值以wPanPos、wTiltPos、wZoomPos为准。1~启用,PTZ坐标值以struPtzPosEx为准*/ + NET_PTZ_INFO_EX struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值) + BYTE byRes[32]; +}NET_DVR_PRESET_NAME, *LPNET_DVR_PRESET_NAME; + +typedef struct +{ + NET_DVR_SCHEDTIME struSchedTime; //时间 + WORD wAction; ///< 定时动作具体动作 + WORD wActionNum; ///< 特殊动作子编号,如预置点,巡航,花样,报警输出,日夜切换, + BYTE byres[12]; +}NET_DVR_SCHEDTASK,* LPNET_DVR_SCHEDTASK; + +//定时任务 +typedef struct tagNET_DVR_TIME_TASK +{ + DWORD dwSize; + BYTE byTaskEnable; ///< 使能 1-开,0-关 + BYTE byRes[3]; ///< 字节对齐 + NET_DVR_SCHEDTASK struTask[MAX_DAYS][MAX_SCH_TASKS_NUM]; ///< 7天,每天10时间段 + DWORD dwParkTime; ///< 守望时间 5s-720s + BYTE byRes1[64]; +}NET_DVR_TIME_TASK,*LPNET_DVR_TIME_TASK; + +//条件结构体 +typedef struct tagNET_DVR_CHANNEL_INDEX +{ + DWORD dwSize; // 结构体大小 + DWORD dwChannel ; //通道号 + DWORD dwIndex ; //索引号 + BYTE byRes[64] ; +}NET_DVR_CHANNEL_INDEX, *LPNET_DVR_CHANNEL_INDEX; + +typedef struct tagNET_DVR_AUDIO_NAME +{ + DWORD dwSize; // 结构体大小 + char cName[NAME_LEN] ; //名称 + BYTE byRes[64]; +}NET_DVR_AUDIO_NAME, *LPNET_DVR_AUDIO_NAME; + +//登录设备参数 +typedef struct tagNET_DVR_LOGIN_DEVICE_PARAM_ +{ + DWORD dwSize; //结构体大小 + BYTE byMobileDev; //设备种类, 0- 非移动设备, 1 - 移动设备 + BYTE byRes[63]; //保留 +}NET_DVR_LOGIN_DEVICE_PARAM, *LPNET_DVR_LOGIN_DEVICE_PARAM; + +typedef enum RECV_DATA_TYPE +{ + ENUM_RECV_ERRCODE = 0x0, //返回错误码 +} RECV_DATA_TYPE; + +//码流输出模式 +typedef enum tagFISHEYE_STREAM_OUTPUT_MODE_ +{ + FISHEYE_STREAM_MODE_FISHEYE = 1, //鱼眼模式 + FISHEYE_STREAM_MODE_PTZ = 2, //PTZ模式 + FISHEYE_STREAM_MODE_PANORAMA = 3 //全景模式 +}FISHEYE_STREAM_OUTPUT_MODE; + +//回调数据类型枚举 +typedef enum _CALLBACK_TYPE_DATA_ENUM_ +{ + ENUM_FISHEYE_STREAM_STATUS = 1, //鱼眼码流输出状态 + ENUM_FISHEYE_PTZPOS = 2, //ptz通道当前所处鱼眼模式下的坐标 + ENUM_FISHEYE_REALTIME_OUTPUT = 3 //实时输出模式 +}CALLBACK_TYPE_DATA_ENUM; + +//鱼眼码流状态 +typedef struct tagNET_DVR_FISHEYE_STREAM_STATUS_ +{ + DWORD dwSize; //结构体大小 + BYTE byStreamMode; //码流输出模式,参见FISHEYE_STREAM_OUTPUT_MODE + BYTE byRes[63]; //保留 +}NET_DVR_FISHEYE_STREAM_STATUS,*LPNET_DVR_FISHEYE_STREAM_STATUS; + +//长连接回调数据结构体 +typedef struct tagNET_DVR_CALLBACK_TYPE_DATA +{ + DWORD dwChannel; //通道号 + DWORD dwDataType; //参见CALLBACK_TYPE_DATA_ENUM + DWORD dwDataLen; //数据长度 + BYTE* pData; //数据,当dwTypeData为 ENUM_FISHEYE_STREAM_STATUS,其对应为NET_DVR_FISHEYE_STREAM_STATUS + BYTE byRes[64]; //保留 +}NET_DVR_CALLBACK_TYPE_DATA,*LPNET_DVR_CALLBACK_TYPE_DATA; + +//鱼眼ptz拖动参数 +typedef struct tagNET_DVR_DRAG_POS_PARAM +{ + DWORD dwChannel; //通道号 + DWORD dwPtzChannel; //当dwChannel所指通道模式为FISHEYE_STREAM_MODE_FISHEYE(鱼眼模式时),此值为其拖动所联动的ptz通道。当dwChannel通道模式为非鱼眼时,置为0即可 + NET_VCA_POINT struToPoint; //拖动画面要跳转到的目标点,目标点位置相对于预览画面的左上角 + NET_VCA_POINT struOriPoint; //拖动操作起始点,此点为当次拖动操作开始时,鼠标指针相对于预览画面左上角的位置 + BYTE byRes[56]; //保留 +}NET_DVR_DRAG_POS_PARAM,*LPNET_DVR_DRAG_POS_PARAM; + +//平台查询诊断服务器的状态 +typedef struct tagNET_DVR_QUERY_STATUS +{ + DWORD dwSize; + BYTE byCpuLoad; //CPU资源占用情况, 取值范围:0-100 + BYTE byMemLoad; //Memory资源占用情况,取值范围:0-100 + WORD wAbility; //诊断服务器能力集,大于0 + WORD wRemainAbility;//诊断服务器剩余能力,取值范围:大于 0 剩余布防点的个数 + WORD wTotalPlanNum; //最多64个计划> + WORD wCurPlanNum; //当前计划数 最多64个计划> + BYTE byRes[62]; //保留 +}NET_DVR_QUERY_STATUS, *LPNET_DVR_QUERY_STATUS; + +typedef struct tagNET_DVR_MONITOR_VQDCFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用 + BYTE byDevType; //设备类型:0-非云台设备,1-带云台设备 + BYTE bySignalPoint; //信号丢失阀值,0-100 + BYTE byBlurPoint; //图像模糊阀值,0-100 + BYTE byLumaPoint; //图像过亮阀值,0-100 + BYTE byChromaPoint; //图像偏色阀值,0-100 + BYTE bySnowPoint; //噪声干扰阀值,0-100 + BYTE byStreakPoint; //条纹干扰阀值,0-100 + BYTE byFreezePoint; //画面冻结阀值,0-100 + BYTE byPTZPoint; //云台失控阀值,0-100 + BYTE byMonitorDel; //布防点删除 0-不删除, 1-删除 + BYTE byContrastThreshold; //对比度异常阈值,0-100 + BYTE byMonoThreshold; //黑白图像阈值,0-100 + BYTE byShakeThreshold; //视频抖动阈值,0-100 + BYTE byFlashThreshold; //视频剧变阈值,0-100 + BYTE byCoverThreshold; //视频遮挡阈值,0-100 + BYTE bySceneThreshold; //场景变更阈值,0-100 + BYTE byDarkThreshold; //图像过暗阈值,0-100 + BYTE byRes[46]; +}NET_DVR_MONITOR_VQDCFG, *LPNET_DVR_MONITOR_VQDCFG; + +//诊断结果 +typedef struct tagNET_DVR_DIAGNOSIS_UPLOAD +{ + DWORD dwSize; + char sStreamID[STREAM_ID_LEN]; ///< 流ID,长度小于32个字节 + char sMonitorIP[64]; ///< 布防点ip + DWORD dwChanIndex; ///< 布防点通道号 + DWORD dwWidth; ///< 图像宽度 + DWORD dwHeight; ///< 图像高度 + NET_DVR_TIME struCheckTime; ///< 检测时间(合并日期和时间字段),格式:2012-08-06 13:00:00 + BYTE byResult; ///0-未检测 1-正常 2-异常 3-登录失败 4-取流异常 + BYTE bySignalResult; ///< 视频丢失检测结果 0-未检测 1-正常 2-异常 + BYTE byBlurResult; ///< 图像模糊检测结果,0-未检测 1-正常 2-异常 + BYTE byLumaResult; ///< 图像过亮检测结果,0-未检测 1-正常 2-异常 + BYTE byChromaResult; ///< 偏色检测结果,0-未检测 1-正常 2-异常 + BYTE bySnowResult; ///< 噪声干扰检测结果,0-未检测 1-正常 2-异常 + BYTE byStreakResult; ///< 条纹干扰检测结果,0-未检测 1-正常 2-异常 + BYTE byFreezeResult; ///< 画面冻结检测结果,0-未检测 1-正常 2-异常 + BYTE byPTZResult; ///< 云台检测结果,0-未检测 1-正常 2-异常 + BYTE byContrastResult; //对比度异常检测结果,0-未检测,1-正常,2-异常 + BYTE byMonoResult; //黑白图像检测结果,0-未检测,1-正常,2-异常 + BYTE byShakeResult; //视频抖动检测结果,0-未检测,1-正常,2-异常 + char sSNapShotURL[256]; ///<图片URL地址 + BYTE byFlashResult; //视频剧变检测结果,0-未检测,1-正常,2-异常 + BYTE byCoverResult; //视频遮挡检测结果,0-未检测,1-正常,2-异常 + BYTE bySceneResult; //场景变更检测结果,0-未检测,1-正常,2-异常 + BYTE byDarkResult; //图像过暗检测结果,0-未检测,1-正常,2-异常 + BYTE byStreamType; //码流类型,0-无效,1-未知,2-国标类型,3-非国标类型 + BYTE byRes2[59]; +}NET_DVR_DIAGNOSIS_UPLOAD, *LPNET_DVR_DIAGNOSIS_UPLOAD; + +typedef struct tagNET_DVR_DOWN_LOAD_REQUEST ///< 这个数据结构是平台发送到诊断服务器的 +{ + NET_DVR_STREAM_INFO struStreamInfo; + char sSnapShotURL[256]; ///< 诊断抓图URL,长度小于256个字节 + BYTE byRes[32]; +}NET_DVR_DOWN_LOAD_REQUEST, *LPNET_DVR_DOWN_LOAD_REQUEST; + +typedef struct tagNET_DVR_VQD_RESULT_INFO ///< 这个数据结构是诊断服务器返回给平台的 +{ + DWORD dwSize; + char sStreamID[32]; ///<流ID(布防点ID),长度小于32个字节 + DWORD dwPicLength; ///图片长度 + BYTE byStatus; ///< 设置结果:0-成功,1-数据有误,2-图片不存在,3-获取图片失败 + BYTE byRes[31]; + char *pSnapShot; ///< 诊断抓图,是一块图片缓存数据(700k) +}NET_DVR_VQD_RESULT_INFO, *LPNET_DVR_VQD_RESULT_INFO; + +typedef struct tagNET_DVR_PLAN_VQD_CFG +{ + DWORD dwSize; + BYTE sPlanID[PLAN_ID_LEN]; ///< 计划id,长度小于32个字节 + NET_DVR_SCHEDTIME struDetectTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; ///< 检测时间 + BYTE byPlanMode; ///0:即时计划,1:周期计划 + BYTE byRes1;// + BYTE byCheckFlag; ///< 是否检测,0-不检测,1-检测 + BYTE bySignal; ///<视频丢失 是否检测,0-不检测,1-检测 + BYTE byBlur; ///< 图像模糊 是否检测,0-不检测,1-检测 + BYTE byLuma; ///< 图像过亮是否检测,0-不检测,1-检测 + BYTE byChroma; ///< 偏色检测 是否检测,0-不检测,1-检测 + BYTE bySnow; ///<噪声干扰 是否检测,0-不检测,1-检测 + BYTE byStreak; ///<条纹干扰 是否检测,0-不检测,1-检测 + BYTE byFreeze; ///<画面冻结是否检测,0-不检测,1-检测 + BYTE byPTZ; ///<云台是否检测,0-不检测,1-检测 + BYTE byEnablePlanRound; ///计划循环是否开启 + BYTE byContrast; //对比度异常是否检测,0-不检测,1-检测 + BYTE byMono; //黑白图像是否检测,0-不检测,1-检测 + BYTE byShake; //视频抖动是否检测,0-不检测,1-检测 + BYTE byFlash; //视频剧变是否检测,0-不检测,1-检测 + BYTE byCover; //视频遮挡是否检测,0-不检测,1-检测 + BYTE byScene; //场景变更是否检测,0-不检测,1-检测 + BYTE byDark; //图像过暗是否检测,0-不检测,1-检测 + BYTE byRes[13]; +}NET_DVR_PLAN_VQD_CFG, *LPNET_DVR_PLAN_VQD_CFG; + + +typedef struct tagNET_DVR_TEST_SPOTCFG +{ + DWORD dwSize; + BYTE byStepCount; //总步数 + BYTE byStepIndex; //当前第几步 + BYTE byRes[14]; +}NET_DVR_TEST_SPOTCFG, *LPNET_DVR_TEST_SPOTCFG; + +//第三方IPC列表 +typedef enum tagNET_DVR_IPC_ENUM +{ + ENUM_BUSINESS_INVALID = -1, + + ENUM_BUSINESS_HIKVISION = 0, + ENUM_BUSINESS_PANASONIC, + ENUM_BUSINESS_SONY, + ENUM_BUSINESS_AXIS, + ENUM_BUSINESS_SANYO, + ENUM_BUSINESS_BOSCH, + ENUM_BUSINESS_ZAVIO, + ENUM_BUSINESS_GRANDEYE, + ENUM_BUSINESS_PROVIDEO, + ENUM_BUSINESS_ARECONT, // 9 + ENUM_BUSINESS_ACTI, + ENUM_BUSINESS_PELCO, + ENUM_BUSINESS_VIVOTEK, + ENUM_BUSINESS_INFINOVA, + ENUM_BUSINESS_DAHUA, //14 + + ENUM_BUSINESS_HIK_STD_H264 = 0x20, + ENUM_BUSINESS_HIK_STD_MPEG4, + ENUM_BUSINESS_SUNELL , //景阳 + ENUM_BUSINESS_ATEME , + ENUM_BUSINESS_LAUNCH, //朗驰 + ENUM_BUSINESS_YAAN, //雅安 + ENUM_BUSINESS_BLUESKY, //蓝色星际 + ENUM_BUSINESS_BLUESKYLIMIT,//蓝色星际LIMIT + ENUM_BUSINESS_TDWY, //天地伟业 + ENUM_BUSINESS_HBGK, //汉邦高科 + ENUM_BUSINESS_SANTACHI, //金三立 + ENUM_BUSINESS_HIGHEASY, //恒忆 + ENUM_BUSINESS_SAMSUNG, + + ENUM_BUSINESS_URL_RTSP = 0x40, /* url类型取流 */ + ENUM_BUSINESS_ONVIF, + + ENUM_MAX_BUSINESS_TYPE, //最大厂商类型 +} NET_DVR_IPC_ENUM, *LPNET_DVR_IPC_ENUM; + +//后端传显统一后第三方IPC列表 +typedef enum tagNET_DVR_IPC_ENUM_UNIFY +{ + ENUM_IPC_PROTOCOL_INVALID = -1, + ENUM_IPC_PROTOCOL_HIKVISION = 0, //海康威视 + ENUM_IPC_PROTOCOL_PANASONIC , //松下 + ENUM_IPC_PROTOCOL_SONY , //索尼 + + ENUM_IPC_PROTOCOL_AXIS = 4, //安讯士 + ENUM_IPC_PROTOCOL_SANYO , //三洋 + ENUM_IPC_PROTOCOL_BOSCH , //博世 + ENUM_IPC_PROTOCOL_ZAVIO , //ZAVIO + ENUM_IPC_PROTOCOL_GRANDEYE , //GRANDEYE + ENUM_IPC_PROTOCOL_PROVIDEO , //创视 + ENUM_IPC_PROTOCOL_ARECONT , //爱锐康特 + ENUM_IPC_PROTOCOL_ACTI , //大卫通 + ENUM_IPC_PROTOCOL_PELCO , //帕尔高 + ENUM_IPC_PROTOCOL_VIVOTEK , //晶睿通讯 + ENUM_IPC_PROTOCOL_DAHUA , //大华 + ENUM_IPC_PROTOCOL_SAMSUNG , //三星 + + ENUM_IPC_PROTOCOL_PSIA = 17, //PSIA + ENUM_IPC_PROTOCOL_ONVIF , //ONVIF + ENUM_IPC_PROTOCOL_BRICKCOM , //金砖通信 + ENUM_IPC_PROTOCOL_GB28181 , //GB28181 + + ENUM_IPC_PROTOCOL_CANON = 23 , //佳能 + + ENUM_IPC_PROTOCOL_HUINT = 32, //HUINT + ENUM_IPC_PROTOCOL_INFINOVA , //英飞拓 + ENUM_IPC_PROTOCOL_HIK_STD_H264, //海康标准264 + ENUM_IPC_PROTOCOL_HIK_STD_MPEG4 , //海康标准MPEG4 + ENUM_IPC_PROTOCOL_SUNELL , //景阳 + ENUM_IPC_PROTOCOL_ATEME , //安特姆 + ENUM_IPC_PROTOCOL_LAUNCH , //郎驰 + ENUM_IPC_PROTOCOL_YAAN, //亚安 + ENUM_IPC_PROTOCOL_BLUESKY , //蓝色星际 + ENUM_IPC_PROTOCOL_BLUESKYLIMIT , //蓝色星际LIMIT + ENUM_IPC_PROTOCOL_TDWY , //天地伟业 + ENUM_IPC_PROTOCOL_HBGK , //汉邦高科 + ENUM_IPC_PROTOCOL_SANTACHI, //金三立 + ENUM_IPC_PROTOCOL_HIGHEASY, //恒亿 + ENUM_IPC_PROTOCOL_HANBANG , //汉邦高科 + ENUM_IPC_PROTOCOL_SAMSUNG_3120 , //三星3120 + ENUM_IPC_PROTOCOL_SAMSUNG_3080 , //三星3080 + ENUM_IPC_PROTOCOL_SAMSUNG_2000, //三星2000 + ENUM_IPC_PROTOCOL_SAMSUNG_5200 , //三星5200 + ENUM_IPC_PROTOCOL_JINGYUAN , //警院 + ENUM_IPC_PROTOCOL_VIDEOTREC , //动力盈科 + ENUM_IPC_PROTOCOL_CHENOVA , //上海诚丰 + ENUM_IPC_PROTOCOL_FENGHUO , //烽火 + ENUM_IPC_PROTOCOL_ZB_5301 , //浙江贝尔5301 + ENUM_IPC_PROTOCOL_ZB_5401 , //浙江贝尔5401 + ENUM_IPC_PROTOCOL_HAIXIN, //海信 + ENUM_IPC_PROTOCOL_ZHONGYINGXIN , //中瀛鑫 + ENUM_IPC_PROTOCOL_AVUN , //信诺安达 + ENUM_IPC_PROTOCOL_GOVTY , //广州吉田 + ENUM_IPC_PROTOCOL_SAE , //艾里克 + ENUM_IPC_PROTOCOL_DONGFANGWANGLI, //东方网力 + ENUM_IPC_PROTOCOL_CHANGHONG, //长虹 + ENUM_IPC_PROTOCOL_H3C , //华三 + ENUM_IPC_PROTOCOL_BAIAN , //百安 + ENUM_IPC_PROTOCOL_HAT , //华安泰 + ENUM_IPC_PROTOCOL_YUANYE, //远业 + ENUM_IPC_PROTOCOL_HIKCARD , //海康板卡 + ENUM_IPC_PROTOCOL_HAIXINCAP , //海信抓拍机 + ENUM_IPC_PROTOCOL_WENANCAP , //文安抓拍机 + ENUM_IPC_PROTOCOL_XUNMEI , //讯美 + ENUM_IPC_PROTOCOL_BAIWO , //佰沃 + ENUM_IPC_PROTOCOL_APD , //安普达 + ENUM_IPC_PROTOCOL_REACHDEV , //锐取 + ENUM_IPC_PROTOCOL_XUNMEI_DAHUA , //讯美大华OEM + ENUM_IPC_PROTOCOL_HUANGHE, //黄河设备 + ENUM_IPC_PROTOCOL_LIANCHEN , //联宸 + ENUM_IPC_PROTOCOL_CHENGYE, //诚业 + ENUM_IPC_PROTOCOL_VISIONDIGI , //威乾 + ENUM_IPC_PROTOCOL_HENGHE , //恒河 + ENUM_IPC_PROTOCOL_KODAK , //科达 + ENUM_IPC_PROTOCOL_AIRONIX, //奥尼克斯 + ENUM_IPC_PROTOCOL_LG, //乐金 + ENUM_IPC_PROTOCOL_HASEE , //神州 + ENUM_IPC_PROTOCOL_8000ME , //8000ME + ENUM_IPC_PROTOCOL_POVITEL , //普天博威 + ENUM_IPC_PROTOCOL_YIVIEW, //亿维 + ENUM_IPC_PROTOCOL_TIANYUE , //天跃 + ENUM_IPC_PROTOCOL_HOWELL , //浩维 + ENUM_IPC_PROTOCOL_WAPA, //波粒 + ENUM_IPC_PROTOCOL_SANLE , //三乐 + ENUM_IPC_PROTOCOL_HIKCARD_ENCRYPTION, //加密海康板卡 + ENUM_IPC_PROTOCOL_JUNSDA , //宙视达 + ENUM_IPC_PROTOCOL_LIYUAN , //立元 + ENUM_IPC_PROTOCOL_XINCHAN , //信产 + ENUM_IPC_PROTOCOL_BITE , //比特 + ENUM_IPC_PROTOCOL_MEIAN, //美安 + ENUM_IPC_PROTOCOL_ROSEEK, //锐势 + ENUM_IPC_PROTOCOL_AEBELL , //美电贝尔 + ENUM_IPC_PROTOCOL_JSL_ST , //金三立ST + ENUM_IPC_PROTOCOL_VIMICRO, //中星微电子 + ENUM_IPC_PROTOCOL_UNIVIEW, //宇视 + + ENUM_IPC_PROTOCOL_TYPE, //最大厂商类型 +}NET_DVR_IPC_ENUM_UNIFY, *LPNET_DVR_IPC_ENUM_UNIFY; + + + +typedef struct tagNET_DVR_MRD_SEARCH_PARAM +{ + DWORD dwSize; // 结构体大小 + NET_DVR_STREAM_INFO struStreamInfo; // 布防点 + WORD wYear; // 年 + BYTE byMonth; // 月 + BYTE byDrawFrame; // 0-不抽帧 1-抽帧 + BYTE byStreamType; //0-主码流 1-子码流 + BYTE byLocalOrUTC; //0-设备本地时区 1-UTC + BYTE byRes[30]; +}NET_DVR_MRD_SEARCH_PARAM, *LPNET_DVR_MRD_SEARCH_PARAM; + +typedef struct tagNET_DVR_MRD_SEARCH_RESULT +{ + DWORD dwSize; // 结构体大小 + BYTE byRecordDistribution[LEN_32]; // 录像分布,byRecordDistribution[0]=1表示1日存在录像,byRecordDistribution[0]=0表示没有录像, + //byRecordDistribution[1]表示2日,以此类推 + BYTE byHasEventRecode[LEN_31]; //事件录像 0-无事件录像,1-有事件录像 + BYTE byRes; //保留 +}NET_DVR_MRD_SEARCH_RESULT, *LPNET_DVR_MRD_SEARCH_RESULT; + + +typedef struct tagNET_DVR_ACCESS_DEVICE_INFO +{ + DWORD dwSize; // 结构体大小 + BYTE byGroup; // 组号,每组可获取 64个通道,从0开始, 0表示第1组,以此类推 + BYTE byProType; //协议类型,0-私有协议,1-松下协议,2-索尼 + BYTE byAccessMode; //接入模式,0-IP地址,1-域名 + BYTE byRes1; //保留字段,置0 + char szUserName[NAME_LEN]; //用户名 + char szPassword[PASSWD_LEN]; //密码 + char szDomain[MAX_DOMAIN_NAME]; //设备域名 + NET_DVR_IPADDR struIP; //IP地址 + WORD wPort; // 端口号 + BYTE szGB28181DevID[DEV_ID_LEN]; //GB28181协议接入时的设备服务器ID + BYTE byRes2[2]; //保留字段,置0 +}NET_DVR_ACCESS_DEVICE_INFO, *LPNET_DVR_ACCESS_DEVICE_INFO; + +typedef struct tagNET_DVR_ACCESS_DEVICE_CHANNEL_INFO +{ + DWORD dwSize; // 结构体大小 + DWORD dwTotalChannelNum; //设备总通道个数,设备不在线时返回0,byChannel无效 + BYTE byChannel[MAX_CHANNUM_V30]; /*byChannel[i]为0表示第(byGroup+1)*(i-1)通道未接入到NVR, + 为1表示该通道已接入到NVR byGroup在NET_DVR_ACCESS_DEVICE_INFO中*/ + BYTE byRes[32]; //保留 +}NET_DVR_ACCESS_DEVICE_CHANNEL_INFO, *LPNET_DVR_ACCESS_DEVICE_CHANNEL_INFO; + +typedef struct tagNET_DVR_PREVIEW_SWITCH_COND +{ + DWORD dwSize; //组号 + BYTE byGroup; //组号,每组可配置64个画面 + BYTE byVideoOutType; /*视频输出接口类型,0-主CVBS,1-HDMI 2-VGA 3-辅助输出一 + 4-辅助输出二 5-辅助输出三 6-辅助输出四, 7-辅助HDMI, 8-扩展HDMI1, + 9-扩展HDMI2, 10-扩展HDMI3, 11-扩展HDMI4, 12-非同源VGA1, + 13-非同源VGA2,14-非同源VGA3,15-非同源VGA4,16-同源VGA, 17-主LCD,18-辅助VGA,19-辅助LCD*/ + BYTE byGetDefaultPreviewSet;//是否获取预设,0-否,1-是;若为是时,byPreviewNumber字段有效 + BYTE byPreviewNumber;//预览数目,0-1画面,1-4画面,2-9画面,3-16画面, 4-6画面, 5-8画面6-25画面,7-32画面, 8-36画面 0xfb-自定义分屏4, 0xfc-自定义分屏3, 0xfd-自定义分屏2, 0xfe-自定义分屏1,0xff:最大画面 +}NET_DVR_PREVIEW_SWITCH_COND, *LPNET_DVR_PREVIEW_SWITCH_COND; + +typedef struct tagNET_DVR_PREVIEW_SWITCH_CFG +{ + DWORD dwSize; // 版本管理及结构体大小 + WORD wSwitchSeq[MAX_WINDOW_V40];/*bySwitchSeq [i]=6,表示第(组号*64+i+1)个窗口 + 显示第六通道,为0xff表示该窗口不显示*/ + BYTE byPreviewNumber;/*预览数目,0-1画面,1-4画面,2-9画面,3-16画面, 4-6画面, 5-8画面,6-25画面,7-32画面, 8-36画面, 9-64画面 + 0xff:最大画面*/ + BYTE byEnableAudio;//是否声音预览,0-不预览,1-预览 + BYTE bySwitchTime;//切换时间,0-不切换,1-5s,2-10s,3-20s,4-30s, 5-60s 6-120s,7-300s + BYTE bySameSource ; //是否同源,当视频输出口类型为非同源VGA1-非同源VGA4时有效 + BYTE byRes[32]; //保留 +}NET_DVR_PREVIEW_SWITCH_CFG,* LPNET_DVR_PREVIEW_SWITCH_CFG; + +typedef struct tagNET_DVR_USER_COND +{ + char szUserName[NAME_LEN]; + BYTE byRes[48]; +}NET_DVR_USER_COND, *LPNET_DVR_USER_COND; + +typedef struct tagNET_DVR_USER_RIGHT_CFG +{ + DWORD dwSize; + BYTE byAddMonitoringPointRight; // 添加布防点(前端设备)权限0-无 1-有 + BYTE byModMonitoringPointRight; // 修改布防点(前端设备)权限0-无 1-有 + BYTE byDelMonitoringPointRight; // 添加布防点(前端设备)权限0-无 1-有 + BYTE bySetRecordPlanRight; // 制定录像策略权限0-无 1-有 + BYTE byDelRecordPlanRight; // 删除录像策略权限0-无 1-有 + BYTE byEnableOrDisableRecordPlanRight; // 启用和禁用录像计划权限0-无 1-有 + BYTE byManualRecordRight; // 启动和停止手动录像权限0-无 1-有 + BYTE bySetAlarmRecordRight; // 报警录像设定权限0-无 1-有 + BYTE byRecordBackupRight; // 录像存档权限0-无 1-有 + BYTE byRecordDownloadRight; // 录像下载权限0-无 1-有 + BYTE byRecordDeleteRight; // 录像删除权限0-无 1-有(保留) + BYTE byDelBackupRecordRight; // 删除存档录像权限0-无 1-有(保留) + BYTE bySetBackupVolumeRight; // 设置存档卷权限0-无 1-有 + BYTE byRecordPlayBackRight; // 录像回放权限0-无 1-有 DWORD dwZoneIndex + BYTE byLogDeleteRight; // 日志清空权限0-无 1-有(保留) + BYTE byLogDownloadRight; // 日志下载权限0-无 1-有(保留) + BYTE byAddUserRight; // 添加用户权限0-无 1-有 + BYTE byDelUserRight; // 删除用户权限0-无 1-有 + BYTE byModUserRight; // 修改用户权限0-无 1-有 + BYTE byAllocUserRight; // 用户权限分配权限0-无 1-有 + BYTE byRes[128]; +}NET_DVR_USER_RIGHT_CFG, *LPNET_DVR_USER_RIGHT_CFG; + +typedef struct tagNET_DVR_MACHINE_MAX_NUM_CFG +{ + DWORD dwSize; + DWORD dwMaxNum; // 最大备机数目 + BYTE byRes[32]; +}NET_DVR_MACHINE_MAX_NUM_CFG, *LPNETDVR_MACHINE_MAX_NUM_CFG; + +//配置N+1设备工作机模式,NVR需要这步,CVR不需要 +typedef struct tagNET_DVR_N_PLUS_ONE_WORK_MODE_CFG +{ + DWORD dwSize ; + BYTE byWorkMode; //0-工作机 1-备机 + BYTE byRes[127]; //保留 +}NET_DVR_N_PLUS_ONE_WORK_MODE_CFG, *LPNET_DVR_N_PLUS_ONE_WORK_MODE_CFG; + +typedef struct tagNET_DVR_ADD_PARAM +{ + NET_DVR_IPADDR struIP; // 设备IP + char szPassword[PASSWD_LEN]; //备机密码,需简易加密 + BYTE byAddType; // 0-(工作机上)添加备机,1-(备机上)添加工作机 + BYTE byDisableBackup; //备份功能使能开关 0-开启1-关闭 CVR默认开启 +}NET_DVR_ADD_PARAM, *LPNET_DVR_ADD_PARAM; + +typedef struct tagNET_DVR_DEL_PARAM +{ + NET_DVR_IPADDR struIP; // 设备IP + BYTE byDelType; // 0-删除指定的机器(备机或工作机)1-全删 +}NET_DVR_DEL_PARAM, *LPNET_DVR_DEL_PARAM; + +typedef union tagNET_DVR_NPO_PARAM_UNION +{ + NET_DVR_ADD_PARAM struAddParam; //添加信息 + NET_DVR_DEL_PARAM struDelParam; //删除信息 +}NET_DVR_NPO_PARAM_UNION, *LPNET_DVR_NPO_PARAM_UNION; + +// N+1模式设备参数 +typedef struct tagNET_DVR_N_PLUS_ONE_DEVICE_PARAM +{ + DWORD dwSize; + NET_DVR_NPO_PARAM_UNION unionParam; + BYTE byType; /* 0-添加,对应unionParam中的struAddParam 1-删除,对应unionParam中的struDelParam 2-添加且用户名生效,对应unionParam中的struAddParam 和szUserName*/ + BYTE byRes[3]; + char szUserName[NAME_LEN]; //用户名 + BYTE byRes2[220]; // 保留 +}NET_DVR_N_PLUS_ONE_DEVICE_PARAM, *LPNET_DVR_N_PLUS_ONE_DEVICE_PARAM; + +// 数据回迁 +typedef struct tagNET_DVR_DATA_CALLBACK_CFG +{ + DWORD dwSize; + BYTE byEnable; // 0-不启用数据回迁 1-启用数据回迁 + BYTE byDelData; // 当byEnable为1是有效 0-不删除备机录像数据 1-删除备机录像数据 + BYTE byRes[30]; +}NET_DVR_DATA_CALLBACK_CFG, *LPNET_DVR_DATA_CALLBACK_CFG; + +typedef struct tagNET_DVR_HD_STATUS +{ + DWORD dwSize; + BYTE bySleepStatus;/*休眠状态0-不休眠 1-休眠*/ + BYTE byRes[127]; +}NET_DVR_HD_STATUS, *LPNET_DVR_HD_STATUS; + +typedef struct tagNET_DVR_RAID_BTS_CFG +{ + DWORD dwSize; + BYTE bySpeed; /*0-高速 1-中速 2-低速*/ + BYTE byRes[127]; +}NET_DVR_RAID_BTS_CFG, *LPNET_DVR_RAID_BTS_CFG; + +typedef struct tagNET_DVR_LUN_CLONE +{ + DWORD dwSize; + DWORD dwSrcLunID; // 源LUN ID + DWORD dwDstLunID; // 目的LUN ID + BYTE byRes[32]; +}NET_DVR_LUN_CLONE, *LPNET_DVR_LUN_CLONE; + +typedef struct tagNET_DVR_LUN_EXPAND +{ + DWORD dwSize; + DWORD dwLunID; // LUN ID + DWORD dwHSize; // 扩展的大小高32位 + DWORD dwLSize; // 扩展的大小低32位 + char szArrayIDGroup[NAME_LEN]; // 使用的阵列ID组,以逗号隔开,为空则为默认 + char szNewLunName[MAX_NAMELEN]; // 新LUN名 + BYTE byRes[32]; +}NET_DVR_LUN_EXPAND, *LPNET_DVR_LUN_EXPAND; + + +typedef struct tagNET_DVR_DVR_NET_DISK_MODIFY +{ + DWORD dwSize; + char szOldDvrNetDiskName[MAX_NAMELEN]; // 原DVR网盘共享名 + char szNewDvrNetDiskName[MAX_NAMELEN]; // 新DVR网盘共享名 + NET_DVR_IPADDR struWarrantIP; // 新授权的DVR网盘IP + BYTE byRes[32]; +}NET_DVR_DVR_NET_DISK_MODIFY, *LPNET_DVR_DVR_NET_DISK_MODIFY; + + +typedef struct tagNET_DVR_NAS_PARAM +{ + DWORD dwSize; + DWORD dwLunID; // LUN ID + BYTE byRes[32]; +}NET_DVR_NAS_PARAM, *LPNET_DVR_NAS_PARAM; + +typedef struct tagNET_DVR_ISCSI_PARAM +{ + DWORD dwSize; + DWORD dwTargetID; // iSCSI服务的Target ID + DWORD dwLunID; // LUN ID + DWORD dwAccessMode; //读写方式 0-读写 1-同步读写 2-只读 3-智能只读; + NET_DVR_IPADDR struClientIP; // 客户端IP,0.0.0.0为所以IP + BYTE byRes[32]; +}NET_DVR_ISCSI_PARAM, *LPNET_DVR_ISCSI_PARAM; + +typedef struct tagNET_DVR_FC_PARAM +{ + DWORD dwSize; + DWORD dwStoreLunID; // 存储LUN ID + DWORD dwLogicLunID; // 逻辑LUN ID,-1表示自动生成 + DWORD dwHbaID; // 光纤通道号 + DWORD dwAccessMode; //读写方式 0-读写 1-同步读写 2-只读 3-智能只读; + char szClientWWWPN[NAME_LEN]; // 客户光纤卡 + BYTE byRes[32]; +}NET_DVR_FC_PARAM, *LPNET_DVR_FC_PARAM; + + +// 逻辑卷 60字节 +typedef struct tagNET_DVR_LUN_PARAM +{ + DWORD dwHCapacity; // 逻辑卷大小高32位 + DWORD dwLCapacity; // 逻辑卷大小低32位 + char szName[MAX_NAMELEN]; // 逻辑卷名称 + DWORD dwBlockSize; // 逻辑卷的最小存储单元块大小 + char szArrayIDGroup[NAME_LEN]; //使用的阵列ID组,以逗号隔开,为空则使用默认阵列 +}NET_DVR_LUN_PARAM, *LPNET_DVR_LUN_PARAM; + +typedef struct tagNET_DVR_DVR_PARAM_ +{ + DWORD dwHCapacity; // DVR网盘大小高32位 + DWORD dwLCapacity; // DVR网盘大小低32位 + char szName[MAX_NAMELEN]; // DVR网盘名称 + DWORD dwBlockSize; // 逻辑卷的最小存储单元块大小 + NET_DVR_IPADDR struWarrantIP; // 授权的DVR网盘IP + char szArrayIDGroup[NAME_LEN]; //使用的阵列ID组,以逗号隔开,为空则使用默认阵列 +}NET_DVR_DVR_PARAM, *LPNET_DVR_DVR_PARAM; + +typedef union tagNET_DVR_VD_UNION +{ + BYTE byUnionLen[256]; // 联合体大小 + NET_DVR_OPERATE_VD_PARAM struHikVDParam; // 虚拟磁盘 + NET_DVR_LUN_PARAM struLunParam; // 逻辑卷 + NET_DVR_DVR_PARAM struDvrParam; // DVR网盘 +}NET_DVR_VD_UNION, *LPNET_DVR_VD_UNION; + +typedef struct tagNET_DVR_OPERATE_VD_PARAM_EX +{ + BYTE byVDType; //虚拟磁盘类型:0-私有虚拟磁盘 1-逻辑卷 2-DVR网盘 + BYTE byRes1[3]; + NET_DVR_VD_UNION uVDParam; + BYTE byRes2[32]; +}NET_DVR_OPERATE_VD_PARAM_EX, *LPNET_DVR_OPERATE_VD_PARAM_EX; + +typedef struct tagNET_DVR_CVR_ALARM +{ + char szFirstType[NAME_LEN]; //主类型,不能为空 + char szFirstIndex[NAME_LEN]; //主类型编号 + char szSecondType[NAME_LEN]; //次类型,可以为空 + NET_DVR_TIME struTime; //报警时间 + BYTE byStatus; //状态 0-正常 非0-不正常,不同类型值表示意义不同,见下表 + BYTE byAlarmLevel; //报警级别 + BYTE byRes1[2]; + char szSecondIndex[NAME_LEN]; //次类型编号,可以为空 + char szThirdType[NAME_LEN]; //第三类型,可以为空 + char szThirdIndex[NAME_LEN]; //第三类型编号 + char szFourthType[NAME_LEN]; //第四类型,可以为空 + char szFourthIndex[NAME_LEN]; //第四类型编号 + BYTE byRes2[92]; //保留 +}NET_DVR_CVR_ALARM, *LPNET_DVR_CVR_ALARM; + +typedef struct tagNET_DVR_WORKING_DEVICE_INFO +{ + NET_DVR_IPADDR struIP; //设备IP + BYTE byLinkStatus; //连接状态 0-连接失败1-连接成功 + BYTE byWorkStatus; //工作状态 0-正常1-异常 + BYTE byBacupStatus; //备份状态0-不在备份1-正在备份 + BYTE bySyncProgress; //录像同步进度,0表示未开始,100表示同步完成 + NET_DVR_TIME_EX struSyncBeginTime; //同步开始时间 + NET_DVR_TIME_EX struSyncEndTime; //同步结束时 + char szSerialNumber[SERIALNO_LEN] ; //设备序列号 + DWORD dwSoftwareVersion ; //设备软件版本 + BYTE byWorkingDeviceGUID[GUID_LEN]; //工作机GUID,非字符串,用于备机上搜索工作机录像 + char szDevTypeName[DEV_TYPE_NAME_LEN]; //设备类型名称 + WORD wDevType; //设备类型值 +}NET_DVR_WORKING_DEVICE_INFO, *LPNET_DVR_WORKING_DEVICE_INFO; + +typedef struct tagNET_DVR_REDUNDANT_DEVICE_INFO +{ + NET_DVR_IPADDR struIP; //设备IP + BYTE byWorkStatus; //工作状态 0-正常1-异常 + BYTE byBackupStatus; //备份状态0-不在布防 1-正在布防2-正在备份中2-正在同步 + WORD wBackupPort; //备份端口 +}NET_DVR_REDUNDANT_DEVICE_INFO, *LPNET_DVR_REDUNDANT_DEVICE_INFO; + +typedef struct tagNET_DVR_WORKING_DEVICE_INFO_V50 +{ + NET_DVR_WORKING_DEVICE_INFO struWorkingDeviceInfo; //工作机信息 + char szUserName[NAME_LEN]; //用户名 + BYTE byRes[32]; +}NET_DVR_WORKING_DEVICE_INFO_V50, *LPNET_DVR_WORKING_DEVICE_INFO_V50; + +typedef struct tagNET_DVR_REDUNDANT_DEVICE_INFO_V50 +{ + NET_DVR_REDUNDANT_DEVICE_INFO struRedundantDeviceInfo; //备机信息 + char szUserName[NAME_LEN]; //用户名 + BYTE byRes[32]; +}NET_DVR_REDUNDANT_DEVICE_INFO_V50, *LPNET_DVR_REDUNDANT_DEVICE_INFO_V50; + +typedef union tagNET_DVR_NPO_DEV_INFO_UNION +{ + BYTE byUnionLen[512]; //联合体长度 + NET_DVR_WORKING_DEVICE_INFO struWorkingDeviceInfo; //工作机信息 + NET_DVR_REDUNDANT_DEVICE_INFO struRedundantDeviceInfo; //备机信息 + NET_DVR_WORKING_DEVICE_INFO_V50 struWorkingDeviceInfoV50; //工作机信息V50 + NET_DVR_REDUNDANT_DEVICE_INFO_V50 struRedundantDeviceInfoV50; //备机信息V50 +}NET_DVR_NPO_DEV_INFO_UNION, *LPNET_DVR_NPO_DEV_INFO_UNION; + + +typedef struct tagNET_DVR_N_PLUS_ONE_DEVICE_INFO +{ + DWORD dwSize; + NET_DVR_NPO_DEV_INFO_UNION unionDevInfo; + BYTE byType; /*类型 0-工作机,对应unionDevInfo中的struWorkingDeviceInfo 1-备机,对应unionDevInfo中的struRedundantDeviceInfo + 2-工作机V50,对应unionDevInfo中的struWorkingDeviceInfoV50 3-备机V50,对应unionDevInfo中的struRedundantDeviceInfoV50*/ + BYTE byRes[127]; +}NET_DVR_N_PLUS_ONE_DEVICE_INFO, *LPNET_DVR_N_PLUS_ONE_DEVICE_INFO; + +//ipc升级参数 +typedef struct tagNET_DVR_UPGRADE_IPC_PARAM +{ + NET_DVR_STREAM_INFO struStreamInfo[MAX_CHANNUM_V30]; // 64个布防点 + char szFileName[260]; // 升级文件名 +}NET_DVR_UPGRADE_IPC_PARAM, *LPNET_DVR_UPGRADE_IPC_PARAM; + + +typedef struct tagNET_DVR_UPGRADE_IPC_ERR_INFO_SINGLE +{ + NET_DVR_STREAM_INFO struStreamInfo; //布防点 + WORD wErrCode; //对应错误码 + BYTE byRes[30]; //保留 +}NET_DVR_UPGRADE_IPC_ERR_INFO_SINGLE, *LPNET_DVR_UPGRADE_IPC_ERR_INFO_SINGLE; + +typedef struct tagNET_DVR_UPGRADE_IPC_ERR_INFO +{ + NET_DVR_UPGRADE_IPC_ERR_INFO_SINGLE struErrInfoSingle[MAX_CHANNUM_V30]; +}NET_DVR_UPGRADE_IPC_ERR_INFO, *LPNET_DVR_UPGRADE_IPC_ERR_INFO; + +//IPC配置文件导入 +typedef struct tagNET_DVR_IPC_CFG_FILE_PARAM +{ + char szFileName[260]; // 配置文件名 + BYTE byRes[32]; +}NET_DVR_IPC_CFG_FILE_PARAM, *LPNET_DVR_IPC_CFG_FILE_PARAM; + +typedef struct tagNET_DVR_IPC_CFG_FILE_ERR_INFO_SINGLE +{ + WORD wRow; //出错的行,0表示没出错,1表示第1行出错,以此类推 + WORD wErrCode; //错误码 + BYTE byRes[32]; +}NET_DVR_IPC_CFG_FILE_ERR_INFO_SINGLE, *LPNET_DVR_IPC_CFG_FILE_ERR_INFO_SINGLE; + +typedef struct tagNET_DVR_IPC_CFG_FILE_ERR_INFO +{ + NET_DVR_IPC_CFG_FILE_ERR_INFO_SINGLE struErrInfoSingle[MAX_CHANNUM_V30]; +}NET_DVR_IPC_CFG_FILE_ERR_INFO, *LPNET_DVR_IPC_CFG_FILE_ERR_INFO; + +typedef struct tagNET_DVR_TRANSFER_SWITCH +{ + DWORD dwEnable; + BYTE byRes[64]; +}NET_DVR_TRANSFER_SWITCH, *LPNET_DVR_TRANSFER_SWITCH; + +typedef struct tagNET_DVR_PTZ_PATTERN +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwPatternCmd; //云台操作命令码,详见下面定义 + DWORD dwPatternID; //云台ID(删除所有时无效) + BYTE byRes[64]; +}NET_DVR_PTZ_PATTERN, *LPNET_DVR_PTZ_PATTERN; + +typedef struct tagNET_DVR_PTZ_PARKACTION_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byOneTouchSwitch;//一键开关, 0-不启用,1-启用 (和wActionType组合使用) + BYTE byRes1[2]; + DWORD dwParkTime; //守望等待时间,单位s + WORD wActionType; //守望动作类型,0-自动扫描,1-帧扫描,2-随机扫描,3-巡航扫描,4-花样扫描,5-预置点,6-全景扫描,7-垂直扫描, 8-区域扫描 + WORD wID; //ID号(巡航扫描、预置点、花样扫描的ID) + BYTE byRes[128]; +}NET_DVR_PTZ_PARKACTION_CFG, *LPNET_DVR_PTZ_PARKACTION_CFG; + +typedef struct tagNET_DVR_PTZ_MANUALTRACE +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + NET_VCA_POINT struPoint; //定位坐标 + BYTE byTrackType; //类型0、非自动取证(普通取证) 1、高速道路 2、城市道路(手动取证)3、静态取证 + BYTE byLinkageType;//联动动作: 0-手动 1-联动不 + BYTE byRes[2]; + NET_VCA_POINT struPointEnd;/*定位坐标终点*/ + NET_DVR_TIME_V30 struTime;//手动定位,当前时间。 + DWORD dwSerialNo;//序号; + BYTE byRes1[36]; +}NET_DVR_PTZ_MANUALTRACE, *LPNET_DVR_PTZ_MANUALTRACE; + +typedef enum tagVQD_TYPE +{ + VQD_BLUR_FLAG = 0x00000001, //图像模糊 + VQD_LUMA_FLAG = 0x00000002,//亮度异常 + VQD_CHROMA_FLAG = 0x00000004,//图像偏色 + VQD_SNOW_FLAG = 0x00000008,//雪花干扰 + VQD_STREAK_FLAG = 0x00000010,//条纹干扰 + VQD_FREEZE_FLAG = 0x00000020,//画面冻结 + VQD_SIGLOSE_FLAG = 0x00000040,//信号丢失 + VQD_PTZ_FLAG = 0x00000080//云台失控 +}VQD_TYPE; + +typedef struct tagNET_DVR_VQD_LOOP_DIAGNOSE_CFG +{ + DWORD dwSize ; //结构体大小 + BYTE byEnable; // 诊断使能 0 :关闭,开启 1:开启 + BYTE byRes1[3] ; //保留 + BYTE byVQDTypeEnable[32]; //VQD诊断模式,0 --不启用 1--启用 每种诊断类型对应有灵敏度,灵敏度的下标与诊断类型的下标一致 + /*数组0 图像模糊 数组1 亮度异常 数组2 图像偏色*/ + /*数组3 雪花干扰 数组4 条纹干扰 数组5 画面冻结*/ + /*数组6 信号丢失 数组7 云台失控*/ + BYTE byThresholdValue[32] ; //阈值0~100,不同诊断模式有各自对应的阈值 + NET_DVR_HANDLEEXCEPTION_V40 struAlarmHandleType; //报警处理方式 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; + NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; //假日布防时间段 + BYTE byRes[324]; //保留 +}NET_DVR_VQD_LOOP_DIAGNOSE_CFG, *LPNET_DVR_VQD_LOOP_DIAGNOSE_CFG; + + +typedef struct tagNET_DVR_VQD_DIAGNOSE_EXCEPTION_INFO +{ + DWORD dwChannelNO; //通道号 + DWORD dwVQDType; // VQD诊断类型 + NET_DVR_TIME struDiagnoseTime; //诊断时间 + BYTE byScoreValue; //分数值 ,百分制 + BYTE byRes[27]; +}NET_DVR_VQD_DIAGNOSE_EXCEPTION_INFO,*LPNET_DVR_VQD_DIAGNOSE_EXCEPTION_INFO; + + +typedef struct tagNET_DVR_VQD_DIAGNOSE_INFO +{ + DWORD dwSize ; //结构体大小 + NET_DVR_VQD_DIAGNOSE_EXCEPTION_INFO struVQDDiagnoseExceptionInfo ; //诊断异常信息结构体 +}NET_DVR_VQD_DIAGNOSE_INFO, *LPNET_DVR_VQD_DIAGNOSE_INFO; + +typedef struct tagNET_DVR_DEC_RESOURCE_LIST +{ + DWORD dwSize; + BYTE byDecStatus[MAX_SUBSYSTEM_NUM_V40/*120*/]; + //解码资源状态列表,byDecStatus[i]表示槽位号i的子系统状态,0-无效,1-空闲,2-普通解码(包括普通解码上墙和大屏主从屏),3-智能解码 + BYTE byRes[32]; +}NET_DVR_DEC_RESOURCE_LIST,*LPNET_DVR_DEC_RESOURCE_LIST; + +typedef struct tagNET_DVR_DEC_APPLICANT_INFO +{ + DWORD dwSize; + DWORD dwDecResource; /*申请的解码资源,以分辨率衡量,0-DCIF 1-CIF, 2-QCIF, 3-4CIF, 4-2CIF 5(保留), + 6-QVGA(320*240), 7-QQVGA(160*120), 16-VGA(640*480), 17-UXGA(1600*1200), 18-SVGA (800*600), + 19-HD720p(1280*720),20-XVGA, 21-HD900p, 27-HD1080i, 28-2560*1920, 29-1600*304, 30-2048*1536, + 31-2448*2048,32-2448*1200,33-2448*800,34-XGA(1024*768),35-SXGA(1280*1024),36-WD1(960*576/960*480), + 37-1080i,38-WXGA(1440*900),39-HD_F(1920*1080/1280*720),40-HD_H(1920*540/1280*360),41-HD_Q(960*540/630*360)*/ + DWORD dwChannel; //智能通道号 + NET_DVR_IPADDR struIP; //申请者IP + WORD wPort; //申请者端口号(智能分析仪通讯端口) + BYTE byRes[18]; +}NET_DVR_DEC_APPLICANT_INFO,*LPNET_DVR_DEC_APPLICANT_INFO; + +typedef struct tagNET_DVR_DEC_RESOURCE_INFO +{ + DWORD dwSize; + DWORD dwSlotNum; //槽位号,此参数做释放解码资源和登陆解码子系统校验用 + NET_DVR_IPADDR struIP; //解码子系统IP地址 + WORD wPort; //端口号 + BYTE byRes1[2]; + DWORD dwDecChan; //解码通道号 + BYTE sUserName[NAME_LEN]; /* 解码子系统登陆帐号 */ + BYTE sPassword[PASSWD_LEN]; /* 解码子系统登陆密码 */ + BYTE byRes2[32]; +}NET_DVR_DEC_RESOURCE_INFO,*LPNET_DVR_DEC_RESOURCE_INFO; + +typedef struct tagNET_DVR_DEC_CHAN_COND +{ + DWORD dwSize; + DWORD dwSlotNum; //槽位号,填申请解码资源时返回的槽位号 + DWORD dwDecChan; //解码通道号 + BYTE byRes[16]; +}NET_DVR_DEC_CHAN_COND,*LPNET_DVR_DEC_CHAN_COND; + +typedef struct tagNET_DVR_DEC_YUV_CFG +{ + DWORD dwSize; + BYTE byEnable; //关联使能,0-无关联,1-关联 + BYTE byRes1[3]; + //byEnable = 1时以下参数有效 + DWORD dwYUVAddress[3]; //YUV输出地址 + WORD wWidth; //YUV输出宽 + WORD wHeight; //YUV输出高 + BYTE byEnableAudio; //使能音频,0-不启用,1-启用 + BYTE byRes2[3]; + DWORD dwAudioAddr; //音频输出地址 + BYTE byRes3[16]; +}NET_DVR_DEC_YUV_CFG,*LPNET_DVR_DEC_YUV_CFG; + +typedef struct tagNET_DVR_INPUT_INFO +{ + DWORD dwSize; + BYTE byChanType; //接入类型,1-本地模拟量通道,2-本地开关量通道,3-485通道,4-网络通道 + BYTE byRes1[3]; + DWORD dwChanNo; //通道号,设备通道号,支持byChanType所有类型 + DWORD dwSubChanNo; //槽位号,485槽位号,在byChanType为3-485通道时有效,表示通道号下的子通道号 + DWORD dwVariableNo; //变量编号,当byChanType为2-本地开关量通道时(1-输入,2-输出) + BYTE byRemoteType; //获取变量类型,0-全部类型,1-遥信,2-遥测 + BYTE byLinkageIPCType; //联动IPC配置类型:0-默认,1-按变量号配置,2-按通道号配置 + BYTE byLinkageTriggerType; //联动触发器配置类型:0-默认,1-按变量号配置,2-按通道号配置 + BYTE byRes2[57]; +}NET_DVR_INPUT_INFO, *LPNET_DVR_INPUT_INFO; + +typedef struct tagNET_DVR_ALARM_VARIABLE_CFG +{ + DWORD dwSize; + WORD wVariableIndex; //变量编号,只能获取 + WORD wVariableType; //变量类型 1-模拟量 2-开关量,只能获取 + BYTE sDescribe[NAME_LEN];//变量描述 + BYTE byLimitLineType; //报警限值配置类型,0-不支持报警限值配置,1-两限值配置(即上限、下限),2-四限值配置 + BYTE byRemoteType; //变量远动系统类型:0-全部类型,1-遥信,2遥测 + BYTE byOsdEnabled; //变量是否支持OSD叠加:0-默认,1-支持,2-不支持 + BYTE byRes[29]; //保留 +}NET_DVR_ALARM_VARIABLE_CFG, *LPNET_DVR_ALARM_VARIABLE_CFG; + + +//模拟量点号相关参数 +typedef struct tagNET_DVR_ALARM_SENSOR_POINT_CFG +{ + int nMeasureHigh; // 量程上限 外部值*1000传入 可以为负数 + int nMeasureLow; // 量程下限 外部值*1000传入 + BYTE byAlarmMode; // 报警模式,五种,-HHHH、-HHHL、-HHLL、HLLL、-LLLL, + // 即:1111(上上上上),1110(上上上下),1100(上上下下),1000(上下下下),0000(下下下下) + BYTE byRes1[3]; + int nAlarmValue[4]; // 报警限 + DWORD dwOsdCfg; // 模拟量字符叠加,按位表示0-15对应视频通道1-16 + DWORD dwSensitive; // 灵敏度范围10~1000。外部 float*1000。 灵敏度表示当实时值的变化超过灵敏度的范围时,则表示实时值发生了变化,否则认为没有发生变化。如:灵敏度为0.1,则表示前后检测的两个值之差大于0.1时,则认为数据发生变化,需要上传。如果为1,则表示变化超过1时上报。 + DWORD dwIPChanOsd; // 数字通道叠加模拟量字符,按位表示,0~31对应数字通道1-32 + char szOSDUnit[MAX_OSD_UNIT_LEN]; //OSD叠加单位 + BYTE byRes[16]; +}NET_DVR_ALARM_SENSOR_POINT_CFG,*LPNET_DVR_ALARM_SENSOR_POINT_CFG; + +//开关量点号相关参数或485遥信信号 +typedef struct tagNET_DVR_ALARM_SWITCH_POINT_CFG +{ + DWORD dwIPCChanOsd;//支持osd开关量叠加的IPC通道信息,按位表示,0~31对应数字通道1-32 + BYTE byRes[60]; +}NET_DVR_ALARM_SWITCH_POINT_CFG,*LPNET_DVR_ALARM_SWITCH_POINT_CFG; + +//模拟量点号相关参数或485遥测信号 +typedef union tagNET_DVR_ALARM_POINT_PARAM_UNION +{ + BYTE byLength[64]; //联合体长度为64 + NET_DVR_ALARM_SENSOR_POINT_CFG struSensor; //模拟量(或485遥测信号)相关参数 + NET_DVR_ALARM_SWITCH_POINT_CFG struSwitch; //开关量(或485遥信信号)相关参数 +}NET_DVR_ALARM_POINT_PARAM_UNION,*LPNET_DVR_ALARM_POINT_PARAM_UNION; + +//点号信息 +typedef struct tagNET_DVR_ALARM_POINT_CFG +{ + DWORD dwSize; + DWORD dwPointNo; //点号 + BYTE sPointDescribe[NAME_LEN]; //点号描述 + NET_DVR_ALARM_POINT_PARAM_UNION struPointParam; //当变量类型为模拟量或485遥信信号时,使用结构体struSensor,当变量类型为开关量或485遥信信号时,使用结构体struSwitch + BYTE byPointType; //点号类型,1-模拟量,2-开关量 + BYTE byChanType; //接入类型,1-本地模拟量通道,2-本地开关量通道,3-485通道,4-网络通道 + BYTE byRes1[2]; + DWORD dwChanNo; //通道号 + DWORD dwSubChanNo; //槽位号 + DWORD dwVariableNo; //变量编号,当byChanType为开关量时(1-输入信号,2-输出信号) + BYTE byRes[16]; //保留 +}NET_DVR_ALARM_POINT_CFG, *LPNET_DVR_ALARM_POINT_CFG; + +//历史数据查询 +typedef struct _NET_DVR_SEARCH_CONDITION +{ + DWORD dwSize; + BYTE byMajorType; //查询方式,1-全部,2-按时间, 3-按类型,4-时间+类型 + BYTE byMinorType; //1-点号,2-通道+槽位+变量号 + BYTE byRes1[2]; + NET_DVR_TIME struStartTime; //起始时间 + NET_DVR_TIME struStopTime; //结束时间 + BYTE byChanType; //通道类型,1-模拟量,2-485通道,3-网络通道,0xff表示无效 + BYTE byRes2[3]; + DWORD dwChanNo; //通道号,从1开始,0xffffffff表示无效 + DWORD dwSubChanNo; //槽位号,从1开始,0xffffffff表示无效 + DWORD dwVariableNo; //变量号,从1开始,0xffffffff表示无效 + DWORD dwPointNo; //点号,0xffffffff表示无效 + BYTE byRes3[32]; //保留 +}NET_DVR_SEARCH_CONDITION, *LPNET_DVR_SEARCH_CONDITION; + +typedef struct _NET_DVR_HISTORY_DATA +{ + DWORD dwSize; + NET_DVR_TIME struTime; //时间点 + BYTE byChanType; //通道类型,1-模拟量,2-485通道,3-网络通道,0xff表示无效 + BYTE byRes1[3]; + DWORD dwChanNo; //通道号,从1开始,0xffffffff表示无效 + DWORD dwSubChanNo; //槽位号,从1开始,0xffffffff表示无效 + DWORD dwVariableNo; //变量号,从1开始,0xffffffff表示无效 + DWORD dwPointNo; //点号,0xffffffff表示无效 + int iData; //历史数据 + BYTE byDataType; //0-正常数据,1-越上限数据,2-越下限数据 + BYTE byRes2[31]; +}NET_DVR_HISTORY_DATA, *LPNET_DVR_HISTORY_DATA; + +typedef struct tagNET_DVR_ALARMHOST_ALARM_MODE_CFG +{ + DWORD dwSize; + BYTE byDataUploadMode; //1-按通道上传,2-按显示点上传 + BYTE byRes[31]; +}NET_DVR_ALARMHOST_ALARM_MODE_CFG,*LPNET_DVR_ALARMHOST_ALARM_MODE_CFG; + + +typedef struct tagNET_DVR_ALARMHOST_POINT_VALUE +{ + BYTE byChanType; //接入类型,1-本地模拟量通道,2-本地开关量通道,3-485通道,4-网络通道 + BYTE byPointType; //点类型,1-遥测(模拟量),2-遥信(开关量) + BYTE byRes1[2]; //保留 + DWORD dwChanNo; //485通道号,0xffffffff表示无效,通道类型为1时:表示本地模拟量通道号,通道类型为2时表示本地开关量通道号,通道类型为3时表示485通道号。 + DWORD dwSubChanNo; //槽位号, 0xffffffff表示无效,通道类型为3时使用 + DWORD dwVariableNo; //变量编号,0xffffffff表示无效 + DWORD dwPointNo; //104点号,0xffffffff表示无效 + int iValue; //显示点的值,表示低32位 + int iValueEx; //显示点的值,表示高32位 + BYTE byRes[12]; +}NET_DVR_ALARMHOST_POINT_VALUE,*LPNET_DVR_ALARMHOST_POINT_VALUE; + +typedef union tagNET_DVR_ALARMHOST_DATA_UNION +{ + BYTE byLength[40]; + NET_DVR_ALARMHOST_POINT_VALUE struPointValue; //显示点实时数据 +}NET_DVR_ALARMHOST_DATA_UNION,*LPNET_DVR_ALARMHOST_DATA_UNION; + +typedef struct tagNET_DVR_ALARMHOST_DATA_UPLOAD +{ + DWORD dwSize; + BYTE byDataType; //数据类型,1-显示点实时数据上传 + BYTE byRes1[3]; + NET_DVR_ALARMHOST_DATA_UNION struAlarmData; + BYTE byRes2[32]; +}NET_DVR_ALARMHOST_DATA_UPLOAD, *LPNET_DVR_ALARMHOST_DATA_UPLOAD; + +typedef struct tagNET_DVR_INPUTVOLUME +{ + DWORD dwSize; /*结构长度*/ + BYTE byAudioInputChan;//音频输入通道号 + BYTE byRes[63]; // 保留字节 +}NET_DVR_INPUTVOLUME, *LPNET_DVR_INPUTVOLUME; + +typedef struct tagNET_DVR_AUDIOOUT_VOLUME +{ + DWORD dwSize; + BYTE byAudioOutVolume;// 输出音量等级:归一化为0-100; + BYTE byRes[63]; +}NET_DVR_AUDIOOUT_VOLUME,*LPNET_DVR_AUDIOOUT_VOLUME; + +typedef struct tagNET_DVR_FUZZY_UPGRADE +{ + DWORD dwSize; + char sUpgradeInfo[MAX_UPGRADE_INFO_LEN]; + BYTE byRes[64]; +}NET_DVR_FUZZY_UPGRADE,*LPNET_DVR_FUZZY_UPGRADE; + +typedef struct tagNET_DVR_RS485_WORK_MODE +{ + DWORD dwSize; + BYTE byWorkMode; //工作模式,0-控制台,1-私有透明通道,2-透明通道 + BYTE byRes[31]; +}NET_DVR_RS485_WORK_MODE, *LPNET_DVR_RS485_WORK_MODE; + +typedef struct tagNET_DVR_TRANSPARENT_CLIENT_SINGLE +{ + BYTE byEnable; //使能透明通道,0-不使能,1-使能 + BYTE byRes1[3]; + NET_DVR_IPADDR struIP; //远程设备IP地址 + WORD wPort; //远程设备端口 + BYTE byRes2[18]; +}NET_DVR_TRANSPARENT_CLIENT_SINGLE, *LPNET_DVR_TRANSPARENT_CLIENT_SINGLE; + +typedef struct tagNET_DVR_TRANSPARENT_SERVER_SINGLE +{ + BYTE byEnable; //使能透明通道,0-不使能,1-使能 + BYTE byRes1[3]; + NET_DVR_IPADDR struIP; //允许接入的远程设备IP + BYTE byRes2[16]; +}NET_DVR_TRANSPARENT_SERVER_SINGLE, *LPNET_DVR_TRANSPARENT_SERVER_SINGLE; + +typedef struct tagNET_DVR_TRANSPARENT_CLIENT_MODE +{ + NET_DVR_TRANSPARENT_CLIENT_SINGLE struClientSingle[MAX_TRANSPARENT_CHAN_NUM]; + BYTE byRes[320]; +}NET_DVR_TRANSPARENT_CLIENT_MODE, *LPNET_DVR_TRANSPARENT_CLIENT_MODE; + +typedef struct tagNET_DVR_TRANSPARENT_SERVER_MODE +{ + WORD wPort; //本地监听的端口号,和RS485口一一对应 + BYTE byRes1[2]; + NET_DVR_TRANSPARENT_SERVER_SINGLE struServerSingle[MAX_TRANSPARENT_ACCESS_NUM]; + BYTE byRes2[332]; +}NET_DVR_TRANSPARENT_SERVER_MODE, *LPNET_DVR_TRANSPARENT_SERVER_MODE; + +typedef union tagNET_DVR_TRANSPARENT_CHAN_WORK_MODE_UNION +{ + BYTE byRes[512]; + NET_DVR_TRANSPARENT_CLIENT_MODE struClientMode; //客户端模式参数 + NET_DVR_TRANSPARENT_SERVER_MODE struServerMode; //服务器模式参数 +}NET_DVR_TRANSPARENT_CHAN_WORK_MODE_UNION, *LPNET_DVR_TRANSPARENT_CHAN_WORK_MODE_UNION; + +typedef struct tagNET_DVR_TRANSPARENT_CHAN_CFG +{ + DWORD dwSize; + BYTE byWorkMode; //工作模式,1-客户端模式,2-服务器模式 + BYTE byRes[3]; + NET_DVR_TRANSPARENT_CHAN_WORK_MODE_UNION struTransparentPara; +}NET_DVR_TRANSPARENT_CHAN_CFG, *LPNET_DVR_TRANSPARENT_CHAN_CFG; + +typedef struct tagNET_DVR_NAKED_DATA_INFO +{ + char sSocketIP[128]; + WORD wSocktPort; + BYTE byRes[258]; +}NET_DVR_NAKED_DATA_INFO, *LPNET_DVR_NAKED_DATA_INFO; + +typedef enum tagNAKED_DATA_TYPE +{ + NAKED_DATA_TYPE_NOT_DEFINED = 0, //未定义 + NAKED_DATA_TYPE_POS_INFO //接收的是Pos信息 +}NAKED_DATA_TYPE; + + +typedef struct tagNET_DVR_NAKED_DATA_PARAM +{ + WORD wPort; //IP端口号,对于Pos信息接收,该值为0,则使用默认端口7050 + BYTE byRes[130]; //保留字节 +}NET_DVR_NAKED_DATA_PARAM, *LPNET_DVR_NAKED_DATA_PARAM; + +#define UPLOAD_POS_INFO 1001 //上传Pos信息 + +typedef struct tagNET_DVR_POS_INFO +{ + NET_DVR_STRUCTHEAD struVerHead; //版本头 + DWORD dwChannelNum; //通道号 + BYTE byRes[60]; +}NET_DVR_POS_INFO, *LPNET_DVR_POS_INFO; + + +#define MAX_IGNORE_STRING_NUM 4 +#define FILTERRULE_NUM 4 +#define MAX_POS_FILTER_DATA_LEN 128 + +typedef struct tagNET_DVR_POS_OSD_REGION +{ + NET_VCA_POINT struStart; //起点坐标 + NET_VCA_POINT struEnd; //终点坐标 +}NET_DVR_POS_OSD_REGION, *LPNET_DVR_POS_OSD_REGION; + + +typedef struct +{ + DWORD dwDelayTime; /*delay time(5-3600s)*/ + BYTE byPrevOsd; /*overlay osd on preview*/ + BYTE byRes1[3]; /*preserve*/ + NET_DVR_POS_OSD_REGION struOsdPosInfo; /*overlay osd rect info*/ + BYTE byRes[64]; /*preserve*/ +}NET_DVR_POS_ACTION, *LPNET_DVR_POS_ACTION; + +typedef struct +{ + BYTE sData[MAX_POS_FILTER_DATA_LEN];/*交易开始标志,目前最大为32,只有anyCharacter为否时才生效*/ + BYTE byExclusive; //是否包含标志本身 0-包含 1-不包含 + BYTE byFlagType; //标志类型:0-字符串;1-十六进制 + BYTE byRes[2]; /*保留*/ +}NET_DVR_GENERIC_START, *LPNET_DVR_GENERIC_START; + +typedef struct +{ + BYTE sData[MAX_POS_FILTER_DATA_LEN];/*交易结束标志,目前最大为32*/ + BYTE byExclusive; //是否包含标志本身 0-包含 1-不包含 + BYTE byFlagType; //标志类型:0-字符串;1-十六进制 + BYTE byRes[6]; +} NET_DVR_GENERIC_END, *LPNET_DVR_GENERIC_END; + +typedef struct +{ + BYTE sData[MAX_POS_FILTER_DATA_LEN];/*数据标志,目前最大为32*/ + BYTE byFlagType; //标志类型:0-字符串;1-十六进制 + BYTE byRes[3]; +}NET_DVR_GENERIC_DATA_CFG, *LPNET_DVR_GENERIC_DATA_CFG; + +typedef struct +{ + BYTE sData[MAX_POS_FILTER_DATA_LEN];/*忽略的字符,目前最大为32*/ +}NET_DVR_IGNORE_STRING, *LPNET_DVR_IGNORE_STRING; + +typedef struct +{ + BYTE byCaseSensitive;/*是否区分大小写,0->不区分,1->区分*/ + BYTE byRes1[7]; + NET_DVR_GENERIC_START struTransactionStart;/*交易开始*/ + NET_DVR_GENERIC_END struTransactionEnd;/*交易结束*/ + NET_DVR_GENERIC_DATA_CFG struLineDeli;/*行间隔符*/ + NET_DVR_IGNORE_STRING struIgnoreString[MAX_IGNORE_STRING_NUM];/*忽略字符串,目前为4个*/ + BYTE byRes[40]; //保留 +}NET_DVR_POS_GENERIC, *LPNET_DVR_GENERIC; + +typedef struct +{ + DWORD dwPosAddr; //pos地址编号 + BYTE byRes[948]; +}NET_DVR_POS_AVE, *LPNET_DVR_AVE; + +#define SERIAL_NUM_LEN 8 +typedef struct tagNET_DVR_POS_NUCLEUS/*size 952byte*/ +{ + char szEmployeeNo[SERIAL_NUM_LEN];//员工编号,如1(备注:标题e) + char szTerminalNo[SERIAL_NUM_LEN];// Pos机编号,如1(备注:标题t) + char szShiftNo[SERIAL_NUM_LEN]; //轮班(备注:标题s) + BYTE byRes[928]; +}NET_DVR_POS_NUCLEUS, *LPNET_DVR_POS_NUCLEUS; +typedef union _NET_DVR_POS_PROTOCOL_UNION +{ + BYTE byLenth[952]; //用于表示联合体长度,无实际意义 + NET_DVR_POS_GENERIC struGeneric; + NET_DVR_POS_AVE struAve; + NET_DVR_POS_NUCLEUS struNUCLEUS; +}NET_DVR_POS_PROTOCOL_UNION,*LPNET_DVR_POS_PROTOCOL_UNION; + +typedef enum tagNET_DVR_CHARSET_ENUM //编码方式 +{ + ENUM_UTF8 =0, + ENUM_GB2312, + ENUM_LATIN1, + ENUM_LATIN2, + ENUM_LATIN3, + ENUM_LATIN4, + ENUM_CYRILLIC, + ENUM_ARABIC, + ENUM_GREEK, + ENUM_HEBREW, + ENUM_TURKISH, + ENUM_NORDIC, + ENUM_THAI, + ENUM_LATIN7, + ENUM_LATIN8, + ENUM_LATIN9, + ENUM_LATIN10, + ENUM_CENTRAL_EUROPEAN, + ENUM_CYRILLIC_SCRIPT, + ENUM_HEBREW_DOS862 +}NET_DVR_CHARSET_ENUM, *LPNET_DVR_CHARSET_ENUM; + + +typedef struct +{ + DWORD dwSize; + BYTE byEnable; //规则使能 + BYTE byCharSetType; //编码方式0-UTF-8,1-GB2312 + BYTE byRes1; //保留 + BYTE byProtocolType;//协议类型,1->generic text协议(universal Protocol), 2->AVE VSI-ADD 3->AVE Vnet,4-EPSON(该类型无需处理pos协议参数), 5-NUCLEUS + //6- Gilbarco(配置对应结构体NET_DVR_POS_GENERIC),7- NCR(配置对应结构体NET_DVR_POS_GENERIC) + NET_DVR_POS_PROTOCOL_UNION uPosProtocol; //POS协议 + BYTE byRes[32]; //保留 +}NET_DVR_POS_FILTER_CFG, *LPNET_DVR_POS_FILTER_CFG; + +typedef struct tagNET_DVR_NET_SNIFF /*网络侦听结构体 312byte*/ +{ + BYTE byEnableSourcePort; //是否启用对数据源端口过滤 0-不启用,1-启用 + BYTE byEnableDestAddr; //是否启用对目标IP地址进行过滤 0-不启用,1-启用 + BYTE byEnableDestPort; //是否启用对目标地址的端口号进行过滤 + BYTE byRes1; //保留 + BYTE bySourceIpAddr[MAX_DOMAIN_NAME]; //数据源地址 + BYTE byDestinationIpAddr[MAX_DOMAIN_NAME]; //数据发送目标地址 + WORD wSourcePort; //数据源端口号 + WORD wDestinationPort; //数据发送目标端口号 + BYTE byRes[16]; //保留 +}NET_DVR_NET_SNIFF, *LPNET_DVR_NET_SNIFF; + +typedef struct +{ + WORD wNetPort; /*device net port*/ + BYTE byRes[2]; +}NET_DVR_NET_RECEIVE, *LPNET_DVR_NET_RECEIVE; + +typedef struct tagNET_DVR_MONITOR_INFO /*监听*/ +{ + WORD wPort; //监听端口号 + BYTE byRes1[2]; + NET_DVR_IPADDR struRestrictRemoteIP;//保留限制远程访问IP + BYTE byRes[164]; +}NET_DVR_MONITOR_INFO, *LPNET_DVR_MONITOR_INFO; + +typedef union tagNET_DVR_POS_CONNECTMODE_UNION +{ + BYTE byLen[312]; //联合体长度,无实际意义 + NET_DVR_NET_RECEIVE struNetRecv; //网络接受模式 + NET_DVR_MONITOR_INFO struTcpMonitor; //网络监听模式 + NET_DVR_SINGLE_RS232 struRS232; //串口方式 + NET_DVR_MONITOR_INFO struUdpMonitor; //网络监听-UDP模式 + NET_DVR_NET_SNIFF struSniff; //网络侦听模式 + NET_DVR_ADDRESS struMcast; //多播模式 + NET_DVR_USB_RS232 struUSBRS232; //USB转串口方式 +}NET_DVR_POS_CONNECTMODE_UNION, *LPNET_DVR_POS_CONNECTMODE_UNION; + + +//DVR与POS连接方式配置结构体 +typedef struct tagNET_DVR_CONNECT_POS_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byConnectMode; //连接模式:0->网络监听(TCP),1->网络接受,2->串口接收3-网络监听(UDP),4-网络侦听,5-多播 + BYTE byRes1[3]; //保留 + NET_DVR_POS_CONNECTMODE_UNION uPosConnMode; //连接模式配置 + BYTE byRes[64]; +}NET_DVR_CONNECT_POS_CFG, *LPNET_DVR_CONNECT_POS_CFG; + +typedef struct tagNET_DVR_CHAN_FILTER_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byFilterID; //POS过滤规则ID + BYTE byFontSize; //字号大小,0-- 8*16 1--16*32 2--32*64 + BYTE byShowPosInfo; //码流中是否叠加pos信息 + BYTE byOverlayMode; //叠加方式,0-滚屏,1-翻页 + DWORD dwDelayTime; /*delay time(5-3600s)*/ + NET_DVR_POS_OSD_REGION struOsdPosInfo; /*overlay osd rect info*/ + NET_DVR_RGB_COLOR struOsdColor; //OSD颜色 + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + //异常处理方式中报警输出号与组号绑定,即组号为0时,表示关联的报警输出号范围为1-64,当组号为1时,表示关联的报警输出号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组 当前的及组内后续的报警出号无效 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //本组内关联的录象通道数 + DWORD dwRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + //关联的录像通道号与组号绑定,即组号为0时,表示关联的通道号范围为1-64,当组号为1时,表示关联的通道号范围为65-128, 且是组内紧凑排列,如果遇到0xffffffff表示本组内后续的关联通道号无效 + DWORD dwTimeOut; /*time Out(5-3600s)*/ //数据超时指在多长时间接收不到POS数据即判定一次数据包的结束。 + BYTE byRes[60]; //保留 +}NET_DVR_CHAN_FILTER_CFG, *LPNET_DVR_CHAN_FILTER_CFG; + +#define MAX_LAN_ENCODE_LEN 32 //语言编码格式最大长度 +typedef struct tagNET_DVR_DEVICE_LAN_ENCODE +{ + DWORD dwSize; + BYTE byLanEncode[MAX_LAN_ENCODE_LEN]; //设备语言编码格式 + BYTE byRes[28]; +}NET_DVR_DEVICE_LAN_ENCODE, *LPNET_DVR_DEVICE_LAN_ENCODE; + +typedef struct tagNET_DVR_SCENECHANGE_DETECTION +{ + DWORD dwSize; + BYTE byEnable; //使能,是否开启 0~不开启,1~开启 + BYTE bySensitiveLevel;// 1-100,默认50,灵敏度越高,越容易报警 + BYTE byRes1[2]; + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD dwRelRecordChan[MAX_CHANNUM_V30];//触发录像通道 + //报警触发的录象通道(四字节的通道号,初始值是 0xffffffff) + BYTE byRes2[128]; +}NET_DVR_SCENECHANGE_DETECTION,*LPNET_DVR_SCENECHANGE_DETECTION; + +typedef struct tagNET_DVR_SCENECHANGE_DETECTION_RESULT +{ + DWORD dwSize; // 结构大小 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes[126]; // 保留字节 +}NET_DVR_SCENECHANGE_DETECTION_RESULT,*LPNET_DVR_SCENECHANGE_DETECTION_RESULT; + +typedef enum +{ + PREVIEW_MOD = 0, + ALARM_MOD, + PLAYBACK_MOD, + MAX_TYPE +}MODULE_TYPE; + +//车位信息 +typedef struct tagNET_DVR_PARK_INFO +{ + char sPlateNo[MAX_PlATE_NO_LEN]; //车牌号码 + char sParkIndex[MAX_PlATE_NO_LEN]; //车位编号 + BYTE byRes[64]; +}NET_DVR_PARK_INFO, *LPNET_DVR_PARK_INFO; + + +typedef struct tagNET_DVR_CROSSLINE_ALARM +{ + DWORD dwSize; + NET_VCA_DEV_INFO struDevInfo; + NET_DVR_TIME_EX struTriggerTime;/*触发时间*/ + NET_DVR_PARK_INFO struParkInfo; //车位信息 + BYTE byRes1[128]; +}NET_DVR_CROSSLINE_ALARM, *LPNET_DVR_CROSSLINE_ALARM; + +typedef struct tagNET_DVR_STREAM_SRC_CFG +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamID; //流信息 + NET_DVR_STREAM_SRC_INFO struStreamSrcInfo; //流源信息 +}NET_DVR_STREAM_SRC_CFG,*LPNET_DVR_STREAM_SRC_CFG; + +typedef struct tagNET_DVR_ENCODEINFO +{ + BYTE byFormatType; //封装类型,1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP, 9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byVideoEncType;//视频编码类型,0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,0xff-无效 + WORD wWidth; //图像宽度 + WORD wHeight; //图像高度 + BYTE byRes1[2]; + DWORD dwVideoBitrate; //视频码率,单位Kbps + DWORD dwVideoFrameRate; //帧率,200起表示小于1帧/秒的状态,其余值表示实际帧率值,200-1/2,201-1/4,202-1/8,203-1/16 + BYTE byAudioEncType;//音频编码类型,0-G722,1-G711_U,2-G711_A,5-MPEG2,6-G726,7-AAC,0xff-无效 + BYTE byRes2[15]; +}NET_DVR_ENCODEINFO, *LPNET_DVR_ENCODEINFO; + + +typedef struct tagNET_DVR_TRANSSTATUS +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo;//流ID、转码通道信息 + BYTE byMode;//转码模式,1-主动转码,2-被动转码 + BYTE byLinkNums;//连接数 + BYTE byPassiveTransMode; //被动转码模式,0-无效,1-实时流,2-文件流 + BYTE byRes; + NET_DVR_ADDRESS struDstIPInfo[MAX_LINK];//目标转码ip地址 + BYTE byTransResource;//所使用的转码资源数,按D1计算 + BYTE byRes1[15]; + NET_DVR_ENCODEINFO struSrcEncodeInfo;//源编码信息 + NET_DVR_ENCODEINFO struDstEncodeInfo[MAX_LINK /*6*/];//目标编码信息 + BYTE byRes2[36]; +}NET_DVR_TRANSSTATUS, *LPNET_DVR_TRANSSTATUS; + +typedef struct tagNET_DVR_TRANSDEVICE_STATUS +{ + DWORD dwSize; + DWORD dwTotalResource;//全部转码资源,以D1为单位计算 + DWORD dwIdleResource;//剩余转码资源,以D1为单位计算 + BYTE byCpuLoad;//CPU利用率 + BYTE byRes[67]; +}NET_DVR_TRANSDEVICE_STATUS, *LPNET_DVR_TRANSDEVICE_STATUS; + +typedef struct tagNET_DVR_DEV_WORK_MODE +{ + DWORD dwSize; + BYTE byWorkMode; //1-通道模式,2-流ID模式 + BYTE byDisplayMode; //0-普通,1-畅显 + BYTE byEnableVcaDec; //是否启用智能解码,0-不启用,非0-启用 + BYTE byRes[61]; +}NET_DVR_DEV_WORK_MODE,*LPNET_DVR_DEV_WORK_MODE; + + +typedef struct tagNET_DVR_PASSIVETRANSINFO +{ + DWORD dwSize; + BYTE byStreamType;// 码流类型,0-主码流,1-子码流 + BYTE byLinkMode;// 0:TCP方式,1:UDP方式(保留) + BYTE byPassiveTransMode; //被动转码模式,1-实时流,2-文件流 + BYTE byRes1[5]; + BYTE byDataType;//缓冲区类型,1-SDP,2-码流头 + BYTE byRes2; + WORD wDataLength;//数据长度 + char *pBuffer;//缓冲区 + BYTE byRes3[32]; // 保留 +}NET_DVR_PASSIVETRANSINFO, *LPNET_DVR_PASSIVETRANSINFO; + +typedef struct tagNET_DVR_BASEMAP_CONTROL_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否显示,1-显示,0-隐藏 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,3-底图轮训 + BYTE byBaseMapCircleNo; //底图轮训参数编号,byBaseMapType为3时有效 + BYTE byRes1; + DWORD dwBaseMapNo; //底图号;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入口号(1字节矩阵号+1字节子板号+1字节输入口号+1字节保留) + BYTE byRes2[64]; +}NET_DVR_BASEMAP_CONTROL_CFG,*LPNET_DVR_BASEMAP_CONTROL_CFG; + +typedef struct tagNET_DVR_VIRTUAL_SCREEN_CFG +{ + DWORD dwSize; + DWORD dwResolution; //分辨率,MAKE_RESOLUTION宏定义的值,从电视墙能力获取支持的分辨率值 + BYTE byRes[64]; +}NET_DVR_VIRTUAL_SCREEN_CFG, *LPNET_DVR_VIRTUAL_SCREEN_CFG; + +typedef struct tagNET_DVR_BASEMAP_WINCFG +{ + DWORD dwSize; + BYTE byEnable; + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 + BYTE byRes1[6]; + NET_DVR_RECTCFG_EX struWinPosition;//目的窗口(相对显示墙),底图窗口的起始坐标和大小必须是基准坐标的整数倍 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 + BYTE byRes2[36]; +}NET_DVR_BASEMAP_WINCFG, *LPNET_DVR_BASEMAP_WINCFG; + +typedef struct tagNET_DVR_BASEMAP_PIC_INFO +{ + DWORD dwSize; + BYTE sPicName[NAME_LEN];//图片名称 + BYTE byUsed; //是否已存在,0-不存在,1-存在 + BYTE byRes[31]; +}NET_DVR_BASEMAP_PIC_INFO,*LPNET_DVR_BASEMAP_PIC_INFO; + +typedef struct tagNET_DVR_MATRIX_LOGO_INFO +{ + DWORD dwSize; + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头,图片大小超限,限100K,高和宽须是32的倍数 + BYTE byRes[32]; +}NET_DVR_MATRIX_LOGO_INFO,*LPNET_DVR_MATRIX_LOGO_INFO; + +typedef struct tagNET_DVR_MATRIX_LOGO_CFG +{ + DWORD dwSize; + BYTE byExist; //logo是否存在,0-不存在,1-存在(此参数只能获取) + BYTE byRes1[3]; + DWORD dwLogoSize;//LOGO大小,包括BMP的文件头(此参数只能获取) + BYTE byLogoName[NAME_LEN]; //logo名称 + DWORD dwLogoNo; //logo编号(获取所有logo信息时有效) + BYTE byRes2[28]; +}NET_DVR_MATRIX_LOGO_CFG,*LPNET_DVR_MATRIX_LOGO_CFG; + +typedef struct tagNET_DVR_WIN_LOGO_CFG +{ + DWORD dwSize; + DWORD dwLogoNo; //logo号 + BYTE byEnable; //logo是否显示,1-显示,0-隐藏 + BYTE byRes1[3]; + DWORD dwCoordinateX; //图片显示区域X坐标 + DWORD dwCoordinateY; //图片显示区域Y坐标 + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[34]; //保留 +}NET_DVR_WIN_LOGO_CFG,*LPNET_DVR_WIN_LOGO_CFG; + + +typedef struct tagNET_DVR_BIG_SCREEN_AUDIO_CFG +{ + DWORD dwSize; + DWORD dwWinIndex; //窗口号,从1开始,0表示底图 + BYTE byEnable; //是否打开音频,1-打开音频,0-关闭音频 + BYTE byRes[31]; +}NET_DVR_BIG_SCREEN_AUDIO_CFG, *LPNET_DVR_BIG_SCREEN_AUDIO_CFG; + +typedef struct tagNET_DVR_WIN_ZOOM_STATUS +{ + DWORD dwSize; + BYTE byZoomStatus; //0-正常状态,1-放大状态 + BYTE byRes1[3]; + NET_DVR_POINT_FRAME struPointFrame; //放大区域,当byZoomStatus为1时有效 + BYTE byRes2[32]; +}NET_DVR_WIN_ZOOM_STATUS,NET_DVR_WIN_ZOOM_STATUS; + +typedef struct tagNET_DVR_RESUME_INITRACKPOS_CFG +{ + DWORD dwSize; // 结构大小 + DWORD dwChannel;; // 通道号 + BYTE byRes[16]; // 保留字节 +}NET_DVR_RESUME_INITRACKPOS_CFG,*LPNET_DVR_RESUME_INITRACKPOS_CFG; + +typedef struct tagNet_DVR_TEST_SELFCHECK_RESULT +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE bySelfCheckStatus; //自检状态值 0-未开始,1-成功,2-失败,3-自检中 + BYTE byRes[23]; //保留字节 +}NET_DVR_TEST_SELFCHECK_RESULT, *LPNET_DVR_TEST_SELECHECK_RESULT; + + +typedef struct tagNET_DVR_TEST_COMMAND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byTestCommand[MAX_TEST_COMMAND_NUM]; + //0-表示不开启测试, 1-表示开启测试 + //数组下标0 开启老化测试程序 + //数组下标1 红外灯进入测试模式 + //数组下标2 ICR老化测试,0表示关闭,1表示开启,可以与bit0 组合,如0000_0001(只开启巡航老化)、0000_0101(同时开启巡航和ICR老化)、0000_0100(只开启ICR老化) + //数组下标3 -球机pt自矫正功能状态,0表示球机自矫正功能未清除,1表示球机自矫正功能已清除 + //数组下标4 花样扫描测试程序,0表示关闭,1表示开启 + //数组下标5 电子罗盘校正程序,0表示关闭,1表示开启 + WORD wICRIntervalTime;//icr间隔时间(byTestCommand 数组下表2内的值为1时,ICR开关间隔时间,单位秒) + BYTE byElectronicCompassState;//罗盘状态返回, 0-正常, 1-不正常 + BYTE byRes1[1]; + float fDeviceTem; //设备机芯温度,精确度0.001 + BYTE byTemp[9]; //用于多个温敏设备, 下标0-全景的温敏, 标1-4:全景1的4个sensor的温敏, 标5-8:全景2的4个sensor的温敏,目前用于鹰眼全景 + BYTE byRes[3]; //保留字节 +}NET_DVR_TEST_COMMAND, *LPNET_DVR_TEST_COMMAND; + +typedef struct tagNET_DVR_AGING_TRICK_SCAN +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byAging; // 表示设置的参数 为老化前工具还是老化后工具, 0-老化前、1-老化后 + BYTE byWriteReadEnalbe; //读写指令使能,0-设置读指令, 1-设置写指令 + BYTE byRes[126]; //保留字节 +}NET_DVR_AGING_TRICK_SCAN, *LPNET_DVR_AGING_TRICK_SCAN; + +#define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //清除花样扫描参数设置 +typedef struct tagNET_DVR_IPC_PARAM_TYPE +{ + DWORD dwSize; + DWORD dwParamType; //参数类型,按位表示 + // #define IPC_PARAM_AGING_TRICK_SCAN 0x00000001 //清除花样扫描参数设置 + BYTE byRes[32]; +}NET_DVR_IPC_PARAM_TYPE, *LPNET_DVR_IPC_PARAM_TYPE; + +typedef struct tagNET_DVR_ECCENTRIC_CORRECT_STATE +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byEccentricCorrectState; // 偏心矫正状态,0-校正失败、1-校正成功、2-校正中 + BYTE byRes[127]; //保留字节 +}NET_DVR_ECCENTRIC_CORRECT_STATE, *LPNET_DVR_ECCENTRIC_CORRECT_STATE; + + + +#define MAX_DEVMODULE_NUM 8 +typedef struct tagNET_DVR_TEST_DEVMODULE_CFG +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byDevFanModuleType[MAX_DEVMODULE_NUM]; //测试的设备类型 + // 0-不开启测试,1-开启测试 + // bit0-测试风扇1 + // bit1-测试风扇2 + BYTE byDevHeaterModuleType[MAX_DEVMODULE_NUM]; //测试的设备类型 + // 0-不开启测试,1-开启测试 + // bit0-测试加热器1 + // bit1-测试加热器2 + BYTE byRes[22]; //保留字节 +}NET_DVR_TEST_DEVMODULE_CFG, *LPNET_DVR_TEST_DEVMODULE_CFG; + +//出入口条件 +typedef struct tagNET_DVR_BARRIERGATE_COND +{ + BYTE byLaneNo;//车道号(0-表示无效值(设备需要做有效值判断),1-车道1) + BYTE byRes[3]; +}NET_DVR_BARRIERGATE_COND,*LPNET_DVR_BARRIERGATE_COND; + +typedef struct tagNET_DVR_VEHICLE_CONTROL +{ + BYTE byGateOperateType;//0-无操作,1-开道闸 + BYTE byRes1 ; + WORD wAlarmOperateType;//0-无操作,bit0-继电器输出报警 bit1-布防上传报警 bit3-告警主机上传(可复选)(0-表示关,1-表示开) + BYTE byRes2[8]; +}NET_DVR_VEHICLE_CONTROL,*LPNET_DVR_VEHICLE_CONTROL; + +typedef struct tagNET_DVR_RELAY_PARAM +{ + BYTE byAccessDevInfo;//0-不接入设备,1-开道闸、2-关道闸、3-停道闸、4-报警信号、5-常亮灯 + BYTE byRes[3]; +}NET_DVR_RELAY_PARAM,*LPNET_DVR_RELAY_PARAM; + +//出入口配置 +typedef struct tagNET_DVR_ENTRANCE_CFG +{ + DWORD dwSize; + BYTE byEnable ;// 使能0-表示关闭,1-表示打开 + BYTE byBarrierGateCtrlMode;//0-相机自动控制,1-平台外部控制 + BYTE byRes1[2]; + DWORD dwRelateTriggerMode;//关联触发模式 参考ITC_TRIGGERMODE_TYPE + /*0x00: 不做匹配*/ + /*0x01: 车牌匹配(带车牌颜色)*/ + /*0x02: 车牌匹配(不带车牌颜色)*/ + /*0x04: 卡号匹配*/ + DWORD dwMatchContent; //异常处理,异常处理方式的"或"结果 + NET_DVR_RELAY_PARAM struRelayRelateInfo[MAX_RELAY_NUM/*12*/];//继电器关联配置信息(一个继电器只能控制一个接入设备) 数组0表示继电器1 数组1表示继电器2 依次类推 12 + BYTE byGateSingleIO[MAX_IOIN_NUM/*8*/]; //单个IO触发参数,单个IO触发参数,数组0表示IO1,数组1表示IO2,依次类推 ; 具体数组值的含义(0-无,1-道闸开到位,2-道闸关到位,3-消防报警) + //车辆信息管控 + //数组0表示临时车辆配置的模式 + //数组1-禁止名单车辆的模式, + //数组2-允许名单车辆的模式 + NET_DVR_VEHICLE_CONTROL struVehicleCtrl[MAX_VEHICLE_TYPE_NUM/*8*/];//车辆信息管控 + BYTE byNotCloseCarFollow;//启用跟车不落闸使能,0~为不启用,1~启用 + BYTE byParkingDetectEnabled;//启用驻车检测使能,0~为不启用,1~启用 + BYTE byParkingDetectJudgeTime;//驻车检测判断时间,单位秒 + BYTE byRes2[61]; +}NET_DVR_ENTRANCE_CFG,*LPNET_DVR_ENTRANCE_CFG; +////////////////////////////出入口参数配置 end/////////////////////////////// + +// 道闸控制 +typedef struct tagNET_DVR_BARRIERGATE_CFG +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byLaneNo; //道闸号(0-表示无效值(设备需要做有效值判断),1-道闸1) + /* + 若老的平台不支持byUnlock字段,该字段将赋值为0,通过“0-关闭道闸,1-开启道闸,2-停止道闸”中的任何一种操作皆可进行解锁。 + 若新平台支持byUnlock字段,需byUnlock字段赋值为1,并结合4~解锁道闸来进行解锁。byUnlock字段赋值为1后,“0-关闭道闸,1-开启道闸,2-停止道闸”操作将不可用于解锁。 + */ + BYTE byBarrierGateCtrl;//0-关闭道闸,1-开启道闸,2-停止道闸 3-锁定道闸,4~解锁道闸 + BYTE byEntranceNo;//出入口编号 [1,8] + BYTE byUnlock;//启用解锁使能,0~为不启用,1~启用 + BYTE byRes[12]; +}NET_DVR_BARRIERGATE_CFG, *LPNET_DVR_BARRIERGATE_CFG; + +//出入口名单的数据同步 +typedef struct tagNET_DVR_VEHICLE_CONTROL_LIST_INFO +{ + DWORD dwSize; + DWORD dwChannel;//通道号0xff - 全部通道(ITC 默认是1) + DWORD dwDataIndex;//数据流水号(平台维护的数据唯一值,客户端操作的时候,该值不会起效。该值主要用于数据增量同步) + char sLicense[MAX_LICENSE_LEN]; //车牌号码 + BYTE byListType;//名单属性(名单)0-允许名单,1-禁止名单 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 + BYTE byRes[21]; + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struStopTime;//有效结束时间 + //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0)2014-03-03 + char sOperateIndex[MAX_OPERATE_INDEX_LEN]; + BYTE byRes1[224]; // 保留字节 +} NET_DVR_VEHICLE_CONTROL_LIST_INFO,*LPNET_DVR_VEHICLE_CONTROL_LIST_INFO; + +//数据全部获取接口 (长连接获取) +typedef struct tagNET_DVR_VEHICLE_CONTROL_COND +{ + DWORD dwChannel;//通道号0xffffffff - 全部通道(ITC 默认是1) + DWORD dwOperateType;//操作类型,参照VCA_OPERATE _TYPE。(可复选) + char sLicense[MAX_LICENSE_LEN];//车牌号码 + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + BYTE byListType;//名单属性0-允许名单,1-禁止名单,0xff-全部 + //2014-02-25 + BYTE byRes1[3]; + DWORD dwDataIndex;//数据流水号 + BYTE byRes[116]; +}NET_DVR_VEHICLE_CONTROL_COND,*LPNET_DVR_VEHICLE_CONTROL_COND; + +//名单数据需要同步报警 +typedef struct +{ + DWORD dwSize; + DWORD dwDataIndex;//数据流水号(这个值返回设备当前接收到的数据的最后一个数据流水号,平台同步的时候从下一个流水号开始同步) + char sOperateIndex[MAX_OPERATE_INDEX_LEN]; //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0) 2014-03-03 + BYTE byRes[32]; +}NET_DVR_VEHICLE_CONTROL_LIST_DSALARM, *LPNET_DVR_VEHICLE_CONTROL_LIST_DSALARM; + +//车辆报警 +typedef struct tagNET_DVR_VEHICLE_CONTROL_ALARM +{ + DWORD dwSize; + BYTE byListType; //名单属性0-允许名单,1-禁止名单,2-临时名单 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 + BYTE byRes1; + char sLicense[MAX_LICENSE_LEN];//车牌号码 + char sCardNo[MAX_CARDNO_LEN]; // 卡号 + NET_DVR_TIME_V30 struAlarmTime; //报警时间 + DWORD dwChannel; //设备通道号,如果直连的是IPC,则为ipc通道号;如果连的DVR\nvr,则为DVR\NVR的通道号 + DWORD dwPicDataLen; //图片数据大小,0表示无图片,不为0是表示后面带图片数据 + BYTE byPicType; //图片类型,0-JPEG + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes3[2]; + char *pPicData; + BYTE byRes2[48]; +}NET_DVR_VEHICLE_CONTROL_ALARM,*LPNET_DVR_VEHICLE_CONTROL_ALARM; + +//消防报警 +typedef struct tagNET_DVR_FIRE_ALARM +{ + DWORD dwSize; + NET_DVR_TIME_V30 struAlarmTime;//报警时间 + BYTE byRes[128]; +}NET_DVR_FIRE_ALARM,*LPNET_DVR_FIRE_ALARM; + +//清除设备车牌禁止名单数据库信息 +typedef struct +{ + DWORD dwSize; + DWORD dwDelType;//删除条件类型,删除条件类型,参照VCA_OPERATE _TYPE。(可复选) + char sLicense[16]; //车牌号码 + char sCardNo[48]; // 卡号 + BYTE byPlateType; //车牌类型 + BYTE byPlateColor; //车牌颜色 + BYTE byOperateType; //删除操作类型(0-条件删除,0xff-删除全部) + //2014-02-25 + BYTE byListType;//名单属性0-允许名单,1-禁止名单 2014-03-03 + DWORD dwDataIndex;//数据流水号 + //操作数(平台同步表流水号不会重复,用于增量更新,代表同步到同步表的某一条记录了,存在相机内存,重启后会清0)2014-03-03 + char sOperateIndex[MAX_OPERATE_INDEX_LEN]; + BYTE byRes[24]; +} NET_DVR_VEHICLE_CONTROL_DELINFO, *LPNET_DVR_VEHICLE_CONTROL_DELINFO; + +//常亮灯功能 +typedef struct tagNET_DVR_GATELAMP_INFO +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byLaneNo; //道闸号(0-表示无效值(设备需要做有效值判断),1-道闸1) + BYTE byBrightlampCtrl;//0-关闭常亮灯,1-开启常亮灯 + BYTE byRes[14]; +}NET_DVR_GATELAMP_INFO,*LPNET_DVR_GATELAMP_INFO; + + +//SDI矩阵1.0 +#define MATRIX_MAX_OUTPUT_NUM 256 //矩阵最大输出通道个数 +typedef struct tagNET_DVR_MATRIX_BASE_CFG +{ + DWORD dwSize; + DWORD dwValidInputNum; //有效的输入通道数 + DWORD dwValidOutputNum; //有效的输出通道数 + BYTE byRes[64]; +}NET_DVR_MATRIX_BASE_CFG, *LPNET_DVR_MATRIX_BASE_CFG; + +typedef struct tagNET_DVR_MATRIX_SWITCH_INFO +{ + DWORD dwSize; + DWORD dwInputChan; //输入通道号,为0表示取消和指定输出的关联关系 + DWORD dwOutputChan; //要切换到的输出通道号, (屏幕服务器为屏幕索引号(1字节设备号+1字节保留+2字节屏幕索引号)), 0xffffffff表示切换到所有输出 + DWORD dwMatrixID; //矩阵ID号 + BYTE byRes[28]; +}NET_DVR_MATRIX_SWITCH_INFO, *LPNET_DVR_MATRIX_SWITCH_INFO; + +typedef struct tagNET_DVR_IO_RELATION_INFO +{ + DWORD dwSize; + DWORD dwIORelation[MATRIX_MAX_OUTPUT_NUM]; //输出通道关联的输入通道, dwIORelation[i] = j表示输出通道(i + 1)和输入通道j关联, + //dwIORelation[i] = 0表示输出通道i + 1未关联输入通道 + BYTE byRes[256]; +}NET_DVR_IO_RELATION_INFO, *LPNET_DVR_IO_RELATION_INFO; + + +//批量接口配置 +typedef struct tagNET_DVR_EXTERNAL_DEVCOND +{ + DWORD dwSize; + BYTE byExternalDevTpye;//0-其他(保留),1-远距离读头设备,2-出入口控制机,3-led屏 0xff-全部信息(长连接获取时使用) + BYTE byRelativeIndex;//0-其他(保留),索引(相对于接入类型) 范围 1~8 Led的相对索引范围是(1~255) 0xff-全部信息(长连接获取时使用) + // BYTE byLaneID;// 逻辑车道号 + BYTE byRes[30]; +}NET_DVR_EXTERNAL_DEVCOND,*LPNET_DVR_EXTERNAL_DEVCOND; + +typedef struct tagNET_DVR_EXTERNAL_DEVCFG +{ + DWORD dwSize; + BYTE byExternalDevTpye;//0-其他,1-远距离读头设备,2-出入口控制机,3-led屏 + BYTE byRes2[3]; + char sDevName[MAX_DEVNAME_LEN]; + union + { + BYTE byUnionLen[656]; + struct + { + NET_DVR_IPADDR struDevIP;//DEV IP地址 144 + WORD wDevPort;//设备端口 + BYTE byRes[510]; + }struRrReader;//远距离读头设备 + struct + { + BYTE byRs485No; //RS485编号(外接设备类型一样,该编号可以重复;类型不一样,该编号互斥) + BYTE byDevCtrlCode;//拨码地址,用于区分设备(1-255) + BYTE byAutoIssuedData;//是否自动下发卡片数据 0-不自动下发,1-自动下发 + BYTE byOfflineDetEnable;//离线检测 0-关闭,1-开启 + BYTE byDetCycle;//检测周期(0~60 单位 s) + BYTE byRes[651]; + }struGateway;//出入口控制机 + struct + { + BYTE byExternalMode;//0-RS485,1-网络 + BYTE byRes[3]; + NET_DVR_IPADDR struDevIP;//DEV IP地址 144 (在byExternalMode == 1 时生效) + WORD wDevPort;//设备端口(在byExternalMode == 1 时生效) + BYTE byRs485No; //RS485编号(外接设备类型一样,该编号可以重复;类型不一样,该编号互斥) + BYTE byDevCtrlCode;//拨码地址,用于区分设备(1-255) + //led屏通过控制卡控制显示的,不同的控制卡类型支持的显示方式不同 + BYTE byCtrlCardType;//控制卡类型 0-保留(无效值) 1- EQ2013 + BYTE byLedScreenType;//屏类型 0-单色屏 1-双色屏 + BYTE byLedScreenUse;//屏用途0-其它 1-区位屏 2-提示屏 3-收费屏 + BYTE byLedDisplayMode;//屏幕字体显示方式: 1 "立即显示", 2 "左移" ,3 "右移" ,4 "上移", 5 "下移" + char sLedCustomInfo[MAX_LED_INFO];//屏幕字体显示信息 + //led屏是由控制卡控制的,led屏可以根据项目实际使用更换大小,此时需要终端通知控制卡目前使用的屏宽和屏高 + DWORD dwLedScreenH;//显示屏组成高度上需要的LED点数 + DWORD dwLedScreenW;//显示屏组成宽度上需要的LED点数 + BYTE byRes1[236]; + }struLed;//led屏 + }uExternalDevInfo; //由byExternalMode 值来决定哪个有效 + BYTE byRes[128]; +}NET_DVR_EXTERNAL_DEVCFG, *LPNET_DVR_EXTERNAL_DEVCFG; + +//长连接获取配置 +typedef struct tagNET_DVR_EXTERNAL_DEVSTATUS//远距离读头设备 +{ + DWORD dwSize; + char sDevName[MAX_DEVNAME_LEN];//设备名称 + BYTE byExternalDevTpye;//0-其他(保留),1-远距离读头设备,2-出入口控制机,3-led屏 0xff-全部信息(长连接获取时使用) + BYTE byRelativeIndex;//0-其他(保留),相对索引(相对于接入类型能) 范围 1~8 0xff-全部信息(长连接获取时使用) + BYTE byOnline;//0-不在线,1-在线 + BYTE byRes[125]; +}NET_DVR_EXTERNAL_DEVSTATUS,*LPNET_DVR_EXTERNAL_DEVSTATUS; + +//终端出入口检测配置 +typedef struct tagNET_DVR_ENTRANCEDET_CFG +{ + DWORD dwSize; //结构长度 + //离线检测开启时,如果检测到设备在线,则由终端匹配卡片信息,并发送道闸控制指令给出入口控制机;否则由出入口控制机自身匹配控制道闸 + BYTE byOfflineDetEnable;//离线检测 0-关闭,1-开启 + BYTE byDetCycle;//检测周期(0~60 单位 s) + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) + BYTE byRes[61]; +}NET_DVR_ENTRANCEDET_CFG,*LPNET_DVR_ENTRANCEDET_CFG; + +//终端出入口控制(控制接口 下发卡片信息) +typedef struct tagNET_DVR_ENTRANCEDEV_COMMAND +{ + DWORD dwSize; //结构长度 + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) + BYTE byManualIssuedData;//手动数据下发 0-关闭,1-开启 + BYTE byRes[62]; +}NET_DVR_ENTRANCEDEV_COMMAND,*LPNET_DVR_ENTRANCEDEV_COMMAND; + +//终端出入口控制(控制接口 清空下发卡片信息) +typedef struct tagNET_DVR_ENISSUED_DATADEL +{ + DWORD dwSize; //结构长度 + BYTE byDevCtrlCode;//出入口控制机拨码地址,用于区分设备(1-255) + BYTE byRes[27]; +}NET_DVR_ENISSUED_DATADEL,*LPNET_DVR_ENISSUED_DATADEL; + +//出入口过车收费明细(监听方式) +typedef struct _tagNET_ITS_PASSVEHICLE_COST_ITEM +{ + DWORD dwSize; //结构长度 + DWORD dwPassVehicleID; //过车序号与出入口数据的过车序号相关联 + BYTE byIntime[MAX_TIME_LEN]; //入场时间格式为yyyymmddhh24missfff + BYTE byOuttime[MAX_TIME_LEN]; //出场时间格式为yyyymmddhh24missfff + BYTE byCardNo[MAX_CARD_LEN]; //卡号 + BYTE byPlateInfo[MAX_LICENSE_LEN]; //车牌号码 + float fPayCost; //收费金额(单位元) + BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //操作人员名称 + BYTE byVehicleType; //车辆类型 0-小型车 2 大型车 + BYTE byRes1[3]; //预留字段1 + DWORD dwPayRuleID; // 收费规则流水号 + DWORD dwFreeRuleID; // 减免规则流水号 + BYTE byRes2[256]; // 预留字段2 +}NET_ITS_PASSVEHICLE_COST_ITEM, *LPNET_ITS_PASSVEHICLE_COST_ITEM; + +//出入口交接班数据(监听方式) +typedef struct _tagNET_ITS_HANDOVER_INFO +{ + DWORD dwSize; //结构长度 + BYTE byOperatorName[MAX_OPERATORNAME_LEN]; //操作人员名称 + BYTE byOperatorCard[MAX_CARD_LEN]; //操作人员卡号 + BYTE byStartTime[MAX_TIME_LEN];//上班时间格式形如yyyymmddhh24miss + BYTE byEndTime[MAX_TIME_LEN]; //下班时间格式形如yyyymmddhh24miss + float fTotal_Pay; //本次上班期间总的收费金额(单位元) + DWORD dwTotal_Records; //本次上班期间总的过车收费的记录条数 + BYTE byRes[64]; //预留 +}NET_ITS_HANDOVER_INFO, *LPNET_ITS_HANDOVER_INFO; + + +typedef struct tagNET_DVR_CURTRIGGERMODE //(3.7Ver) +{ + DWORD dwSize; + DWORD dwTriggerType; //触发类型,详见ITC_TRIGGERMODE_TYPE + BYTE byRes[24]; +}NET_DVR_CURTRIGGERMODE, *LPNET_DVR_CURTRIGGERMODE; + + + +typedef struct tagNET_DVR_TEMP_HUMI +{ + DWORD dwSize; // 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + int iHumidity; // 湿度,整数部分:val/1000,小数部分:val%1000 + int iTemp; // 温度,整数部分:val/1000,小数部分:val%100 + BYTE byRes[8]; // 保留字节 +}NET_DVR_TEMP_HUMI, *LPNET_DVR_TEMP_HUMI; + + +typedef struct tagNET_DVR_ALARMSOUNDMODE_CFG +{ + DWORD dwSize; // 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + DWORD dwSoundMode; // 报警模式: 0提醒模式;1警报模式;2静音模式 + BYTE byRes[12]; // 保留字节 +}NET_DVR_ALARMSOUNDMODE_CFG, *LPNET_DVR_ALARMSOUNDMODE_CFG; + +typedef struct tagNET_DVR_SECURITYMODE +{ + DWORD dwSize;// 内容长度 && 版本(用于后期扩展) + DWORD dwChannel; // 通道号,默认1 + DWORD dwMode; // 安全模式: 1启用,码流加密;2不启用,码流不加密 + char szRandCode[6]; //设备出厂的"随机验证码" + BYTE byRes[6]; // 保留字节 +}NET_DVR_SECURITYMODE, *LPNET_DVR_SECURITYMODE; + +typedef struct tagNET_DVR_MOBILE_CAPTUREPIC_CFG +{ + DWORD dwSize; + BYTE byPreviewFpsAdjMode; /* 预览帧率调节模式:0-不调节,标准帧率预览,1-标准低帧率预览,2-根据GPS速度进行帧率调节 */ + BYTE bySelPeccType; /* 是否选择违章类型 */ + BYTE byOptHabit; /* 取证操作习惯, 0:长按取证;1:短按两次取证 */ + BYTE byEnablePeccRec; /* 1: 使能违章录像抓取, 0: 禁止违章录像抓取 */ + BYTE byPicSize; /*0=CIF,1=QCIF,2=D1,3=UXGA(1600x1200), 4=SVGA(800x600), 5=HD720p(1280x720),6-VGA,7-XVGA,8-HD900p,9-HD1080,10-2560*1920,11-1600*304,12-2048*1536,13-2448*2048,14-2448*1200,15-2448*800,16-XGA(1024*768),17-SXGA(1280*1024),18-WD1(960*576/960*480),19-1080i */ + BYTE byPicQuality; /* 图片质量系数 0-最好 1-较好 2-一般 */ + BYTE byRes[62]; +}NET_DVR_MOBILE_CAPTUREPIC_CFG,*LPNET_DVR_MOBILE_CAPTUREPIC_CFG; + +typedef struct tagNET_DVR_CMS_PARAM +{ + DWORD dwSize; + NET_DVR_IPADDR struAddr; // 平台服务器IP + WORD wServerPort; // 平台服务器侦听端口, + BYTE bySeverProtocolType; //平台协议类型 1-私有,2-Ehome + BYTE byStatus; //设备注册到该平台的状态,1-未注册,2-已注册 + BYTE sDeviceId[NAME_LEN/*32*/]; //设备ID,由平台提供 + char sPassWord[PASSWD_LEN]; //密码 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE sPlatformEhomeVersion[NAME_LEN];//平台EHOME协议版本 + /********* IPC5.1.7 新增参数 end 2014-03-21***********/ + BYTE byNetWork; //网络类型:0- 无意义,1-自动,2-有线网络优先,3-有线网络,4-3G网络(无线网络),5-有线网络1,6-有线网络2 + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 + BYTE byProtocolVersion; //协议版本 0 - 无意义, 1 – v2.0,2 – v4.0,3-v2.6 + BYTE byRes1; + BYTE sDomainName[MAX_DOMAIN_NAME/*64*/]; //平台服务器域名,byAddressType为2时有效 + BYTE byEnable; //0-关闭,1-开启 + BYTE byRes[139]; // 保留字节 +}NET_DVR_CMS_PARAM, *LPNET_DVR_CMS_PARAM; + +//条件结构 +typedef struct tagNET_DVR_HEATMAP_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 + BYTE byRes[63]; +}NET_DVR_HEATMAP_COND, *LPNET_DVR_HEATMAP_COND; + +typedef struct tagNET_DVR_HEATMAP_PARAM +{ + BYTE byTargetTrackEnable;//目标:0-关闭,1-开启,默认0-关闭 + BYTE bySensitivity; //灵敏度参数,范围1-100,默认50 + BYTE byBackgroundUpdateRate;//背景更新速度:范围1-100,默认50 + BYTE bySceneChangeLevel;//场景变化等级:范围1-100,默认50 + BYTE byMinTargetSize;//最小目标尺寸:范围1-100,默认50 + /* + 0- 默认上传类型:COMM_UPLOAD_HEATMAP_RESULT; + 1- 上传类型:COMM_UPLOAD_HEATMAP_RESULT_PDC 和 COMM_UPLOAD_HEATMAP_RESULT_DURATION; + */ + BYTE byUploadHeatMapResultType; + BYTE byDayReport; + BYTE byWeekReport; + float fConfidence;//置信度[0.00,100.00] + BYTE byMonthReport; + BYTE byYearReport; + BYTE byRes[6]; +}NET_DVR_HEATMAP_PARAM, *LPNET_DVR_HEATMAP_PARAM; + +#define MAX_HEATMAPREGION_NUM 8 + +//热度图检测配置结构 +typedef struct tagNET_DVR_HEATMAP_CFG +{ + DWORD dwSize; + BYTE byEnable; //使能,是否开启 + BYTE byRes[3]; + NET_VCA_POLYGON struRegion[MAX_HEATMAPREGION_NUM/*8*/];//区域范围 + NET_DVR_HEATMAP_PARAM struHeatMap ; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + //布防时间 + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS/*7*/][MAX_TIMESEGMENT_V30/*8*/]; + BYTE byRes1[512]; +}NET_DVR_HEATMAP_CFG, *LPNET_DVR_HEATMAP_CFG; + +//热度图报警上传 +typedef struct tagNET_DVR_HEATMAP_RESULT +{ + DWORD dwSize; + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + DWORD dwMaxHeatMapValue;//最大热度值 + DWORD dwMinHeatMapValue;//最小热度值 + DWORD dwTimeHeatMapValue;// (时间热度值)平均热度值 + WORD wArrayLine;//图片像素点行值 + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在) + BYTE* pBuffer; //热度图片像素点数据信息 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cStartTimeDifferenceH; /*开始时间与UTC的时差(小时),-12 ... +14,+表示东区*/ + char cStartTimeDifferenceM; /*开始时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + char cStopTimeDifferenceH; /*结束时间与UTC的时差(小时),-12 ... +14, +表示东区*/ + char cStopTimeDifferenceM; /*结束时间与UTC的时差(分钟),-30, 30, 45,+表示东区*/ + BYTE byArrayUnitType; //矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),1-byte,2-short,4-int + BYTE byRes1[2]; + DWORD dwTotalTime;//停留时间总和,单位秒,按人员停留时间报警时上传 + BYTE byRes[112]; +}NET_DVR_HEATMAP_RESULT,*LPNET_DVR_HEATMAP_RESULT; + +//热度图报警查找 条件结构体 +typedef struct tagNET_DVR_HEATMAP_QUERY_COND +{ + DWORD dwSize; + DWORD dwChannel ;//通道号 + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + BYTE byReportType;//0-无效值,1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byDetSceneID;//检测场景号[1],球机当前支持1个场景, IPC默认是0 + BYTE byHeatMapInfoType;//0~获取空间热度图片方式,1~获取空间热度矩阵信息方式,2~获取空间热度图片和空间热度矩阵信息 + BYTE byStatisticalModel;//统计模式 0s-保留(默认),1-停留时间,2-按人数统计) + BYTE byRes[124]; +}NET_DVR_HEATMAP_QUERY_COND,*LPNET_DVR_HEATMAP_QUERY_COND; + +//热度图报警查找 +typedef struct tagNET_DVR_HEATMAP_INFO +{ + DWORD dwSize; + NET_DVR_TIME_EX struStartTime;/*间隔开始时间*/ + NET_DVR_TIME_EX struEndTime; /*间隔结束时间*/ + DWORD dwHeatMapPicLen; /*空间热度图片长度(当含有图片的时候,该字段为非0,没有图片的时候,该字段为0)*/ + BYTE* pBuffer; //热度图片数据信息 + DWORD dwTimeHeatMapValue ; //时间热度值(含有空热度图的时候,该字段不需要传值) + DWORD dwHeatMapMaxValue;//检测区域最高热度点人员活动时间(s)(空间热度图时有效) + DWORD dwHeatMapMinValue;//检测区域最低热度点人员活动时间(s) (空间热度图时有效) + WORD wArrayLine;//图片像素点行值 (上传热度矩阵信息时生效) + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在)(上传热度矩阵信息时生效) + BYTE* pArrayBuffer;//热度矩阵数据信息(矩阵数据的透传,信息长度为wArrayLine* wArrayColumn*单元数据类型长度(例如byArrayUnitType为1表示为int型,这里就要乘以4个字节)) + BYTE byArrayUnitType;//矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),0~byte,1~int;(当设备有返回矩阵信息时生效) + BYTE byRes[107]; +}NET_DVR_HEATMAP_INFO,*LPNET_DVR_HEATMAP_INFO; + + +typedef struct tagNET_DVR_PDC_QUERY_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struEndTime; //结束时间 + BYTE byReportType; //0-无效值,1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byEnableProgramStatistics; //是否按节目统计,0-否,1-是 + BYTE byTriggerPeopleCountingData;//触发客流统计数据的使能, 0-否,1-是 + BYTE byMultiChannelSearch;//多通道查询使能, 0-否,1-是(pSearchChannel 、dwSearchChannelNum有效) + DWORD dwPlayScheduleNo; //按节目统计时关联的日程号 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes1[3]; + DWORD dwSearchChannelNum; //查询通道数目 + char* pSearchChannel; //查询通道号,大小为sizeof(DWORD)* dwSearchChannelNum + BYTE byChild;//只检测儿童, 0-否,1-是 + BYTE byMinTimeInterva;// 最小时间间隔,0-无效,1-15分钟, 2-30分钟, 3一小时, 4-天, 5-周, 6-月 + BYTE byStatisticType;//统计类型,0-无效值,1-进入人数,2-离开人数,3-全部,4-进入离开重复人数,5-人脸属性(需要下发具体支持的人脸属性),0-无效值表示不进行统计类型的条件查询,相当于保留字节。全部表示统计类型为进入和离开(不包括经过)。 + BYTE byFaceExpression;//参见FACE_EXPRESSION_GROUP_ENUM + BYTE byGender;//性别,1-男,2-女,3-全部,0xff-算法支持,但是没有识别出来 + BYTE byMask;//是否戴口罩 0-表示“未知”(算法不支持),1-不戴,2-戴,3-全部,0xff-算法支持的,但是没有识别出来 + BYTE byGroup;//段 + BYTE byGlasses; /*是否带眼镜,0-未知,1-是,2-否,3-戴墨镜, 4 - 全部, 0xff-算法支持,但是没有识别出来*/ + BYTE byRes[96]; +}NET_DVR_PDC_QUERY_COND,*LPNET_DVR_PDC_QUERY_COND; + +typedef struct tagNET_DVR_PROGRAM_INFO +{ + DWORD dwProgramNo; //节目编号 + BYTE sProgramName[NAME_LEN]; //节目名称 + BYTE byRes[16]; +}NET_DVR_PROGRAM_INFO, *LPNET_DVR_PROGRAM_INFO; +typedef struct tagNET_DVR_POSINFO_OVERLAY +{ + DWORD dwSize; + BYTE byEnable;// Pos信息叠加,0-不叠加,1-叠加 + BYTE byBackpackEnanble;//是否叠加背包信息是否叠加,0-不叠加,1-叠加 + BYTE bySexEnanble;//是否叠加性别信息是否叠加,0-不叠加,1-叠加 + BYTE byCarryEnanble;//是否叠加拎东西信息是否叠加,0-不叠加,1-叠加 + BYTE byRideEnanble;//是否叠加骑车信息是否叠加,0-不叠加,1-叠加 + BYTE byMaskEnanble;//是否叠加带口罩信息是否叠加,0-不叠加,1-叠加 + BYTE byHatEnanble;//是否叠加戴帽子信息是否叠加,0-不叠加,1-叠加 + BYTE bySleeveEnanble;//是否叠加长短袖情况,0-不叠加,1-叠加 + BYTE byPantsTypeEnanble;//是否叠加裤子属性信息是否叠加,0-不叠加,1-叠加 + BYTE byHairEnanble;//是否叠加长短发信息是否叠加,0-不叠加,1-叠加 + BYTE byGlassesEnanble;//是否叠加戴眼镜信息是否叠加,0-不叠加,1-叠加 + BYTE byResEnanble;//是否叠加信息是否叠加,0-不叠加,1-叠加 + BYTE byHeightEnanble;//是否叠加身高信息是否叠加,0-不叠加,1-叠加 + BYTE byRes[511]; +}NET_DVR_POSINFO_OVERLAY, *LPNET_DVR_POSINFO_OVERLAY; + +typedef struct tagNET_DVR_PDC_RESULT +{ + DWORD dwSize; + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + DWORD dwEnterNum; //进入人数 + DWORD dwLeaveNum; //离开人数 + NET_DVR_PROGRAM_INFO struProgramInfo; //节目信息 + DWORD dwPeoplePassing; //经过人数 + BYTE byRes1[8]; //保留字节 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes3[3]; //保留字节 + DWORD dwDuplicatePeople; // 重复人数 + DWORD dwExpressionUnknown; //表情未知 + DWORD dwPokerFace; //表情中性 + DWORD dwHappy; //表情高兴 + DWORD dwSurprised; //表情惊讶 + DWORD dwDisgusted; //表情厌恶 + DWORD dwSad; //表情难过 + DWORD dwAngry; //表情愤怒 + DWORD dwContemptuous; //表情轻蔑 + DWORD dwPanic; //表情害怕 + DWORD dwGenderUnknown; //性别未知 + DWORD dwFemale; //性别女 + DWORD dwMale; //性别男 + DWORD dwMaskUnknown; //面具未知 + DWORD dwMaskYes; //戴面具 + DWORD dwMaskNo; //不戴面具 + DWORD dwGlassUnknown; //眼镜未知 + DWORD dwGlassYes; //戴眼镜 + DWORD dwGlassNo; //不戴眼镜 + DWORD dwSunglasses; //墨镜 + BYTE byRes[104]; +}NET_DVR_PDC_RESULT, *LPNET_DVR_PDC_RESULT; + + +typedef struct tagNET_DVR_MOBILE_PLATE_RECOGCFG +{ + DWORD dwSize; + BYTE byDefaultCHN[MAX_CHJC_NUM]; /*设备运行省份的汉字简写 3 */ + BYTE byTimeOsd;// 时间信息叠加 0 - 不叠加, 1- 叠加 + BYTE byRecogResultOsd;//识别结果叠加 0 - 不叠加, 1- 叠加 + BYTE byRecogHint;//识别成功提示 0 - 不提示, 1- 提示 + BYTE byRecogDir;//识别方向 0: 正向, 1: 背向 + BYTE byRecogEnv;//识别环境 0: 白天, 1: 晚上 + BYTE byRecogPlateType;//0-小车牌识别,1-大车牌识别 + BYTE byUploadPlate;//是否上传车牌 0 -不上传, 1-上传 + BYTE byRes[62]; +}NET_DVR_MOBILE_PLATE_RECOGCFG,*LPNET_DVR_MOBILE_PLATE_RECOGCFG; + +typedef struct tagNET_DVR_MOBILE_RADAR_CFG +{ + DWORD dwSize; + BYTE byEnableRadar; /* 0:不开启雷达 1:开启雷达 */ + BYTE byEnableAlarm; /* 0:不开启报警 1:开启报警 */ + WORD wOverSpeed; /* 范围为20~250 */ + BYTE bySpeedUnits; /* 0:公里/小时 1:英里/小时 */ + BYTE bydirection; /* 0:反向(雷达与车相向) 1:正向(雷达与车反向) */ + BYTE byMeasureMode; /* 0:静态 (雷达状态) 1:动态 (雷达状态)*/ + BYTE byTargetType; /* 0:最快(雷达测速车辆最快) 1:最近(雷达测速车辆最近)*/ + BYTE bySensitivity; /* 灵敏度[0,100] */ + BYTE byCaptureNum; /* 抓拍张数[0,255] */ + BYTE byUploadPlate; /*是否上传超速抓拍图片 0-不上传,1-上传*/ + BYTE byRes[61]; +}NET_DVR_MOBILE_RADAR_CFG,*LPNET_DVR_MOBILE_RADAR_CFG; + +typedef struct tagNET_DVR_MOBILE_LOCALPLATECHK_CFG +{ + DWORD dwSize; + BYTE byCheck; /* 稽查任务是否进行禁止名单稽查 0-稽查,1-不稽查*/ + BYTE byCheckAlarm;/* 稽查成功报警 0-不报警,1-报警*/ + BYTE byCheckHint; /* 稽查成功提示 (软件提示) 0-不提示,1-提示*/ + BYTE byUploadUnlicensedCar; /*是否上传非法车信息 0-不上传,1-上传*/ + BYTE byRes[64]; +}NET_DVR_MOBILE_LOCALPLATECHK_CFG,*LPNET_DVR_MOBILE_LOCALPLATECHK_CFG; + +typedef struct tagNET_DVR_VEHICLE_CHECK +{ + DWORD dwSize; + DWORD dwChannel;//通道号0xff - 全部通道(默认是1,代表一个通道) + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息 + WORD wIllegalType; //违章类型采用国标定义 (参考附件) + BYTE byRes[2]; + char sIllegalTypeInfo[128];// 违规类型信息(128) + NET_DVR_TIME_V30 struIllegalTime;//违规时间 + BYTE byIllegalVehicleNum;//车辆违法次数 + BYTE byRes1[3]; + char sCustomInfo[64];//自定义信息 + BYTE byRes2[128]; // 保留字节 +}NET_DVR_VEHICLE_CHECK,*LPNET_DVR_VEHICLE_CHECK; + +typedef enum _LONG_CFG_SEND_DATA_TYPE_ENUM_ +{ + ENUM_DVR_VEHICLE_CHECK = 1, //禁止名单车辆数据稽查类型 + ENUM_MSC_SEND_DATA = 2, //屏幕控制器数据类型 + ENUM_ACS_SEND_DATA = 3, //门禁主机数据类型 + ENUM_TME_CARD_SEND_DATA = 4, //停车场(出入口控制机)卡片数据类型 + ENUM_TME_VEHICLE_SEND_DATA = 5, //停车场(出入口控制机)车辆数据类型 + ENUM_DVR_DEBUG_CMD = 6, //调试命令信息 + ENUM_DVR_SCREEN_CTRL_CMD =7, //屏幕互动命令类型 + ENUM_CVR_PASSBACK_SEND_DATA = 8, //CVR获取布防点回传任务可执行性 + ENUM_ACS_INTELLIGENT_IDENTITY_DATA = 9, //智能身份识别终端数据类型 + ENUM_VIDEO_INTERCOM_SEND_DATA = 10, //可视对讲数据类型 + ENUM_SEND_JSON_DATA = 11 //透传JSON数据 +}LONG_CFG_SEND_DATA_TYPE_ENUM; + +typedef enum _LONG_CFG_RECV_DATA_TYPE_ENUM_ +{ + ENUM_DVR_ERROR_CODE = 1, //错误码 + ENUM_MSC_RECV_DATA=2, //屏幕控制器数据类型 + ENUM_ACS_RECV_DATA=3 //门禁主机数据类型 +}LONG_CFG_RECV_DATA_TYPE_ENUM; + +typedef struct tagNET_DVR_WIPER_CONTINUEWORK_PARAM +{ + BYTE byWorkTimeInterval;//工作时间间隔(单位:秒)[2s~60s] + BYTE byRes[3]; + DWORD dwContinueWorkTime;//持续工作时间(单位:秒)[2min~24h]界面显示按分钟单位 + BYTE byRes1[8]; +}NET_DVR_WIPER_CONTINUEWORK_PARAM,*LPNET_DVR_WIPER_CONTINUEWORK_PARAM; + +typedef union tagNET_DVR_WIPERMODE_PARAM_UNION +{ + BYTE uLen[16]; + //当byWiperWorkMode = 1时生效 + NET_DVR_WIPER_CONTINUEWORK_PARAM struWiperContinueWorkParam; +}NET_DVR_WIPERMODE_PARAM_UNION,*LPNET_DVR_WIPERMODE_PARAM_UNION; + +typedef struct tagNET_DVR_WIPERINFO_CFG +{ + DWORD dwSize; + //雨刷工作模式 + //0-单次模式,1-持续模式(针对配置结构NET_DVR_ROTATE_OPERATE_PARAM),2-智能模式,0xff-关闭 + BYTE byWiperWorkMode; + BYTE byRes1; + WORD wSensitivity;//降雨灵敏度 + BYTE byRes[20]; + NET_DVR_WIPERMODE_PARAM_UNION ustruWiperModeParam; +}NET_DVR_WIPERINFO_CFG,*LPNET_DVR_WIPERINFO_CFG; + +//保存自动对焦参数 +typedef struct tagNET_DVR_AUTOFOCUS_TESTCFG +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[24]; // 保留字节 +}NET_DVR_AUTOFOCUS_TESTCFG,*LPNET_DVR_AUTOFOCUS_TESTCFG; + + +typedef struct tagNET_DVR_VIDEO_OUT_CFG +{ + BYTE byDisplayMode; //显示模式,1-标准,2-冷色,3-暖色,0xff-自定义 + BYTE byBrightnessLevel; // 亮度值0-100 + BYTE byContrastLevel; // 对比度0-100 + BYTE bySharpnessLevel; // 锐度0-100 + BYTE bySaturationLevel; // 饱和度0-100 + BYTE byHueLevel; // 色调0-100 + BYTE byImageMode; // 图像模式,0-正常模式,1-夜模式1,2-夜模式2,3-夜模式3,4-日照模式1,5-日照模式2,6-日照模式3 + BYTE byRes[5]; // 保留 +}NET_DVR_VIDEO_OUT_CFG, *LPNET_DVR_VIDEO_OUT_CFG; +//色温 +typedef struct tagNET_DVR_COLOR_TEMPERATURE_CFG +{ + BYTE byRed; //红色, 0-100 + BYTE byGreen; //绿色, 0-100 + BYTE byBlue; //蓝色,0-100 + BYTE byRedOffset; //红色偏移,0-100 + BYTE byGreenOffset; //绿色偏移,0-100 + BYTE byBlueOffset; //蓝色偏移,0-100 + BYTE byRes[6]; +}NET_DVR_COLOR_TEMPERATURE_CFG, *LPNET_DVR_COLOR_TEMPERATURE_CFG; + +typedef struct tagNET_DVR_ADC_CFG +{ + BYTE byGainR; //增益R, 0-100 + BYTE byGainG; //增益G,0-100 + BYTE byGainB; //增益B,0-100 + BYTE byOffsetR; //偏移量R,0-100 + BYTE byOffsetG; //偏移量G,0-100 + BYTE byOffsetB; //偏移量B,0-100 + BYTE byRes[6]; +}NET_DVR_ADC_CFG, *LPNET_DVR_ADC_CFG; + +typedef struct tagNET_DVR_SCREEN_EDGE_CFG +{ + BYTE byEnable; //是否启用屏幕边缘 0-不启用 1-启用 + BYTE byLeftEdge; //左边缘,0-100 + BYTE byRightEdge; //右边缘,0-100 + BYTE byTopEdge; //上边缘,0-100 + BYTE byLowerEdge; //下边缘,0-100 + BYTE byRes[7]; +}NET_DVR_SCREEN_EDGE_CFG, *LPNET_DVR_SCREEN_EDGE_CFG; + +typedef struct tagNET_DVR_SCREEN_DISPLAY_CFG +{ + DWORD dwSize; + BYTE byCfgType; /*设置的参数类型,获取时此参数无效,0-无效,1-背光参数,2-视频参数,3-色温参数,4-ADC参数,5-屏幕边缘参数*/ + BYTE byBackLight; //背光 0~100 + BYTE byRes1[2]; + NET_DVR_VIDEO_OUT_CFG struVideoOutCfg; //视频参数(画面模式) + NET_DVR_COLOR_TEMPERATURE_CFG struColorTempCfg; //色温参数 + NET_DVR_ADC_CFG struAdcCfg; //ADC参数 + NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //屏幕边缘参数 + BYTE byRes[32]; +}NET_DVR_SCREEN_DISPLAY_CFG, *LPNET_DVR_SCREEN_DISPLAY_CFG; +//模拟遥控类型 +typedef enum tagNET_DVR_SCREEN_REMOTE_CTRL_TYPE +{ + REMOTE_CTRL_POWERSUPPLY_OPEN = 1,//1-电源开 + REMOTE_CTRL_POWERSUPPLY_CLOSE = 2,//2-电源关 + REMOTE_CTRL_SIGNALSOURCE,//3-信号源 + REMOTE_CTRL_MENU,//4-菜单 + REMOTE_CTRL_DETERMINATION,//5-确定 + REMOTE_CTRL_ON,//6-上 + REMOTE_CTRL_UNDER,//7-下 + REMOTE_CTRL_LEFT,//8-左 + REMOTE_CTRL_RIGHT,//9-右 + REMOTE_CTRL_INFO,//10-INFO + REMOTE_CTRL_RETURN,// 11-返回上一层 + REMOTE_CTRL_NUM, //12-数字键盘 +}SCREEN_REMOTE_CTRL_TYPE; + +//模拟遥控按键 +typedef struct tagNET_DVR_SIMULATE_SCREEN_REMOTE_CTRL +{ + DWORD dwSize; + BYTE byControlType; //1-电源开,2-电源关,3-信号源,4-菜单,5-确定,6-上,7-下,8-左,9-右, 10-INFO, 11-返回上一层,12-数字按键,13-开关一体按键 + BYTE byControlParam; //操作参数,操作类型为12时,表示按键值(0-9),其他操作时此参数无效 + BYTE byRes[14]; +}NET_DVR_SIMULATE_SCREEN_REMOTE_CTRL,*LPNET_DVR_SIMULATE_SCREEN_REMOTE_CTRL; + +//屏幕信号源配置 +typedef struct tagNET_DVR_SCREEN_SIGNAL_CFG +{ + DWORD dwSize; + BYTE bySignalSourceType; //输入源索引,见枚举 NET_DVR_CAM_MODE + BYTE byNoSignalPic; //无信号画面模式,1-蓝屏,2-黑屏,3-LOGO画面 + BYTE byRes[14]; +}NET_DVR_SCREEN_SIGNAL_CFG, *LPNET_DVR_SCREEN_SIGNAL_CFG; + +//屏幕拼接配置 +typedef struct tagNET_DVRSCREEN_SPLICE_CFG +{ + DWORD dwSize; + BYTE bySpliceIndex; //自拼接屏号,0就是没有拼接,其他值表示自拼接屏的屏号。例如拼接0101~0202这4块屏,则这4块屏的bySpliceIndex必须相同,且非0. + BYTE bySpliceX; //屏幕在自拼接屏中的行位置 + BYTE bySpliceY; //屏幕在自拼接屏中的列位置 + BYTE byWidth; //拼接规模宽,以屏幕为单位 + BYTE byHeight; //拼接规模高,以屏幕为单位 + BYTE byRes[11]; +}NET_DVR_SCREEN_SPLICE_CFG, *LPNET_DVR_SCREEN_SPLICE_CFG; + +//风扇工作方式配置 +typedef struct tagNET_DVR_SCREEN_FAN_WORK_MODE_CFG +{ + DWORD dwSize; + BYTE byWorkMode; //1-常开,2-自动 + BYTE byTemperatureLimitValue; //风扇开启的温度阀值,工作模式为自动时该参数有效。 + BYTE byRes[14]; +}NET_DVR_SCREEN_FAN_WORK_MODE_CFG, *LPNET_DVR_SCREEN_FAN_WORK_MODE_CFG; + +//VGA信号配置 +typedef struct tagNET_DVR_SCREEN_VGA_CFG +{ + DWORD dwSize; + BYTE byEnableAutoAdjust; //是否自动调整,0-否,1-是,当自动调整启用时以下参数无效 + BYTE byHorizontalPosition; //水平位置 0-100 + BYTE byVerticalPosition; //垂直位置 0-100 + BYTE byClock; //时钟 ,0-100 + BYTE byPhase; //相位,0-100 + BYTE byRes[11]; +}NET_DVR_SCREEN_VGA_CFG, *LPNET_DVR_SCREEN_VGA_CFG; + +//屏幕菜单配置 +typedef struct tagNET_DVR_SCREEN_MENU_CFG +{ + DWORD dwSize; + BYTE byMenuLanguage; //语言,1-中文,2-英文 + BYTE byTransparency; //透明度 0-不透明,1-低,2-中,3-高 + BYTE byDuration; //持续时间,0-常开,1-5秒,2-15秒,3-30秒 + BYTE byRes[13]; +}NET_DVR_SCREEN_MENU_CFG, *LPNET_DVR_SCREEN_MENU_CFG; + +//画中画 +typedef struct tagNET_DVR_PIP_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用画中画 0-不启用 1-启用 + BYTE bySubWindowSource; //子画面信号源,参考枚举NET_DVR_CAM_MODE + BYTE bySubWindowBorderColor; //子画面边框颜色, 1-蓝色,2-黑色 + BYTE byRes1; + NET_DVR_RECTCFG struPosition; //子画面位置,屏幕总大小为100*100 + BYTE byRes2[12]; +}NET_DVR_PIP_CFG, *LPNET_DVR_PIP_CFG; + +//透雾配置 +typedef struct tagNET_DVR_DEFOG_LCD +{ + DWORD dwSize; + BYTE byDefogEnable; //开启透雾开关,0~关闭,1~开启 + BYTE byDefogModel; //透雾模式,0~自动去雾,1~手动去雾 + BYTE byDefogLevel; //透雾强度等级,1-7个等级,默认等级为4。等级1为0.5;等级2为0.55;等级3为0.60;等级4为0.65;等级5为0.70;等级6为0.75;等级7为0.80。(去雾模式为手动去雾时,可配置去雾强度等级) + BYTE byRes[33]; +}NET_DVR_DEFOG_LCD,*LPNET_DVR_DEFOG_LCD; + +//屏幕维墙 +typedef struct tagNET_DVR_SCREEN_WALL_CFG +{ + DWORD dwSize; + BYTE byEnable; //状态开关。0-为关闭;1-为开启 + BYTE byRes[35]; +}NET_DVR_SCREEN_WALL_CFG, *LPNET_DVR_SCREEN_WALL_CFG; + +//屏幕位置 +typedef struct tagNET_DVR_SCREEN_POS_CFG +{ + DWORD dwSize; + BYTE byScreenRowNum;//屏幕行号。 + BYTE byScreenColNum;//屏幕列号。 + BYTE byRes[34]; +}NET_DVR_SCREEN_POS_CFG, *LPNET_DVR_SCREEN_POS_CFG; + +typedef struct tagNET_DVR_VIDEO_AUDIOIN_CFG +{ + DWORD dwSize; //结构体的长度 + DWORD dwChanNo; //视音频通道号, 绑定且启用后,被绑定的语音对讲通道则作为该通道的音频源 + BYTE byEnable; //是否启用语音对讲作为音频输入源 0-不启用 1-启用 + BYTE byRes[31]; //保留 +}NET_DVR_VIDEO_AUDIOIN_CFG, *LPNET_DVR_VIDEO_AUDIOIN_CFG; + +typedef struct _NET_DVR_VCA_DETION_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byRes1[3]; + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + NET_DVR_HANDLEEXCEPTION_V40 struHandleException; //异常处理方式 + DWORD dwMaxRelRecordChanNum ; //报警触发的录象通道 数(只读)最大支持数量 + DWORD dwRelRecordChanNum ; //报警触发的录象通道 数 实际支持的数量 + DWORD dwRelRecordChan[MAX_CHANNUM_V30/*64*/];//触发录像通道号 + BYTE byEnablePreset[MAX_CHANNUM_V30]; + BYTE byPresetNo[MAX_CHANNUM_V30]; + BYTE byEnableCruise[MAX_CHANNUM_V30]; + BYTE byCruiseNo[MAX_CHANNUM_V30]; + BYTE byEnablePtzTrack[MAX_CHANNUM_V30]; + BYTE byPTZTrack[MAX_CHANNUM_V30]; + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30/*8*/]; //假日布防时间 + BYTE byRes[224];; +}NET_DVR_VCA_DETION_CFG, *LPNET_DVR_VCA_DETION_CFG; + +typedef struct tagNET_DVR_VCA_DETECTION_CFG_V40 +{ + DWORD dwSize; //结构体大小 + BYTE byEnable;//使能 + BYTE byRes1[3]; + NET_DVR_SCHEDTIME struAlarmSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; + DWORD dwHandleType; //异常处理,异常处理方式的"或"结果 + /*0x00: 无响应*/ + /*0x01: 显示器上警告*/ + /*0x02: 声音警告*/ + /*0x04: 上传中心*/ + /*0x08: 触发报警输出*/ + /*0x10: 触发JPRG抓图并上传Email*/ + /*0x20: 无线声光报警器联动*/ + /*0x40: 联动电子地图(目前只有PCNVR支持)*/ + /*0x200: 抓图并上传FTP*/ + DWORD dwMaxRelAlarmOutChanNum ; //触发的报警输出通道数(只读)最大支持数量 + DWORD dwRelAlarmOut[MAX_ALARMOUT_V40/*4128*/]; //* 实际触发的报警输出号,按值表示,采用紧凑型排列,从下标0开始顺序读取,如果遇到0xffffffff则后续无效*/ + /*触发的录像通道*/ + DWORD dwMaxRecordChanNum; //设备支持的最大关联录像通道数-只读 + DWORD dwRelRecordChan[MAX_CHANNUM_V40/*512*/]; /* 实际触发录像通道,按值表示,采用紧凑型排列,从下标0开始顺序读取,如果遇到0xffffffff,则后续无效*/ + DWORD dwEnablePresetChanNum; //当前已启用预置点的数目 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40/*512*/]; //启用的预置点信息,当dwEnablePresetChanNum不为0时,数组下标0-(dwEnablePresetChanNum -1)有效,当为0时,表示未启用预置点 + BYTE byRes2[516]; /*保留*/ + DWORD dwEnableCruiseChanNum; //当前已启用巡航的通道数目 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40/*512*/]; //启用巡航功能通道的信息,当dwEnableCruiseChanNum不为0时,数组下标0-( dwEnableCruiseChanNum -1)有效,当为0时,表示未启用巡航 + DWORD dwEnablePtzTrackChanNum; //当前已启云台通道数目 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40/*512*/]; //调用云台的通道信息,当dwEnablePtzTrackChanNum不为0时,数组下标0-(dwEnablePresetChanNum -1)有效,当为0时,表示未启用云台 + NET_DVR_SCHEDTIME struHolidayTime[MAX_TIMESEGMENT_V30]; //假日布防时间 + BYTE byRes[224]; +}NET_DVR_VCA_DETECTION_CFG_V40, *LPNET_DVR_VCA_DETECTION_CFG_V40; + +typedef struct tagNET_DVR_CLOUD_STORAGE_CFG +{ + DWORD dwSize; //结构体大小; + BYTE byEnableCS; //开启云存储服务 0-关闭 1-开启 + BYTE byRes[511]; //保留 +} NET_DVR_CLOUD_STORAGE_CFG, *LPNET_DVR_CLOUD_STORAGE_CFG; + + +typedef struct tagNET_DVR_CHANS_RECORD_STATUS_CFG +{ + DWORD dwSize ; //结构体大小 + BYTE byValid; //是否有效 + /*(只读)录像类型,0: 不在录像;1:在录像 2-空闲 + 3-无连接 4-无输入视频 5-未加载 6-存档中 7-回传中 + 8-用户名或密码错 9-未验证,10-存档中和录像中 11-录像回传中和录像中*/ + BYTE byRecord; + DWORD dwRelatedHD; //关联磁盘 + BYTE byOffLineRecord; //断网录像功能 0-关闭 1-开启 + BYTE byRes[63]; //保留字节 +}NET_DVR_CHAN_RECORD_STATUS_CFG, *LPNET_DVR_CHAN_RECORD_STATUS_CFG; + +#define MAX_CAMERAID_LEN 64 +typedef struct tagNET_DVR_UPLOAD_RECORD_INFO +{ + DWORD dwSize; + DWORD dwRecordType; //录像类型 0- 定时录像,1- 移动侦测录像,2- 报警录像,3- 报警或移动侦测录像,4- 报警和移动侦测录像, 5- 命令触发,6- 手动录像,7- 震动报警,8- 环境触发报警,9- 智能报警,10- 回传录像 + BYTE sCameraID[MAX_CAMERAID_LEN]; //camera id; + NET_DVR_TIME_EX struStartTime; //录像开始时间 + NET_DVR_TIME_EX struStopTime; //录像结束时间 + DWORD dwStoragePoolID; //存储池ID + BYTE byFormatType ; //封装类型:1-裸流,2-RTP封装,3-PS封装,4-TS封装,5-私有,6-FLV,7-ASF,8-3GP,9-RTP+PS(国标:GB28181),0xff-无效 + BYTE byVideoEncType ; //视频编码类型:0-私有264,1-标准h264,2-标准mpeg4,7-M-JPEG,8-MPEG2,0xfe- 自动(和源一致),0xff-无效 + BYTE byAudioEncType; //音频编码类型:0-G722,1-G711_U,2-G711_A,5-MP2L2,6-G726,7-AAC,0xfe- 自动(和源一致),0xff-无效 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[120]; +}NET_DVR_UPLOAD_RECORD_INFO,*LPNET_DVR_UPLOAD_RECORD_INFO; + +//补光灯参数配置 条件结构体 +typedef struct tagNET_DVR_IOOUT_COND +{ + DWORD dwSize; + BYTE bySyncOutputNo;//同步输出号(0-F1,1-F2,2-F3) + BYTE byRes[63]; +}NET_DVR_IOOUT_COND,*LPNET_DVR_IOOUT_COND; + +//补光灯参数配置 +typedef struct tagNET_DVR_IOOUT_CFG +{ + DWORD dwSize; + BYTE byWorkMode;// 0-报警输出,1-频闪灯(默认) + BYTE byRes1[3]; + union + { + BYTE byUnionLen[128]; + struct + { + BYTE byDefaultState;//默认状态 0-低电平(默认),1-高电平 + BYTE byWorkState;//生效状态 0-低电平(默认),1-高电平,2-脉冲 + BYTE byFreqMulti;//倍频,数值范围[1,15] + BYTE byDutyRatio;//占空比,[0,40%] + BYTE byRes[3]; + BYTE byFlashLightEnable; //设置闪光灯时间使能:0-关;1-开 + NET_DVR_SCHEDTIME struFlashLightTime;//启用闪光灯时间 + BYTE byRes1[116]; + }struStrobeLamp; // 频闪灯 时有效 + }uWorkModeInfo; + BYTE byRes2[128]; +}NET_DVR_IOOUT_CFG,*LPNET_DVR_IOOUT_CFG; + +//信号灯同步参数 +typedef struct tagNET_DVR_SIGNAL_SYNCCFG +{ + DWORD dwSize; + WORD wPhase;//相位(0~360) + BYTE byLineLock;//电源同步 0-否,1-是 + BYTE byRes[125]; +}NET_DVR_SIGNAL_SYNCCFG,*LPNET_DVR_SIGNAL_SYNCCFG; + +// 萤石EZVIZ接入参数结构体 +typedef struct +{ + DWORD dwSize; + BYTE byEnable;// 启用EZVIZ接入 0~禁用,1~启用 + /********* IPC5.1.7 新增参数 Begin 2014-03-21***********/ + BYTE byDeviceStatus; //设备是否在线状态,0-保留,1-在线,2-离线 + BYTE byAllowRedirect; //是否允许重定向,0-保留,1-是,2-否,0表示保持不变,兼容老SDK接新设备的情况 + BYTE byDomainName[MAX_DOMAIN_NAME]; //域名服务器地址 + BYTE byRes1; + BYTE byVerificationCode[NET_SDK_MAX_VERIFICATION_CODE_LEN/*32*/];//萤石云验证码 + BYTE byNetMode; //网络模式,0-无意义,1-自动,2-有线网络优先,3-有线网络(默认),4-无线网络 + BYTE byOfflineStatus; //设备离线具体状态: 0-保留,1-萤石注册验证码无效。该字段为只读,且当DeviceStatus为2时生效。 + BYTE byEnableTiming;// 启用EZVIZ校时 0~禁用,1~启用 + BYTE byRes2; + BYTE byOperateCode[NET_SDK_MAX_OPERATE_CODE_LEN]; //操作码,用户绑定设备时使用 + BYTE byRes[344]; +}NET_DVR_EZVIZ_ACCESS_CFG,*LPNET_DVR_EZVIZ_ACCESS_CFG; + +typedef struct tagNET_DVR_ALARM_RELATE_COND +{ + DWORD dwSize; + /* + 0表示移动侦测, + 1表示视频遮挡, + 2表示视频丢失, + 3表示PIR报警, + 4表示无线报警, + 5表示呼救报警, + 6表示智能抓图, + 7表示人脸侦测, + 8表示越界侦测侦测, + 9表示区域入侵侦测, + 10表示场景变更侦测, + 11 表示异常侦测, + 0xff 表示报警输入 + */ + BYTE byAlarmType; + //联动动作 0-无效,1-抓图上传FTP,2-Jpeg抓图上传Email + BYTE byRelateActType; + BYTE byRes[2]; + //报警输入号或者通道号或者无线编号 + //(当byAlarmType ==0xff时,dwChannel表示的是报警输入号) + //(当byAlarmType ==4时,dwChannel表示的是无线编号) + DWORD dwChannel; + BYTE byRes1[64]; +}NET_DVR_ALARM_RELATE_COND,*LPNET_DVR_ALARM_RELATE_COND; + +typedef struct tagNET_DVR_ALARM_RELATE_CFG +{ + DWORD dwSize; + DWORD dwMaxRelateChanNum ; //触发的报警关联通道数(只读)最大支持数量 + //dwRelateChan的初始值是0xffffffff;数组内填写是实际的通道号; + DWORD dwRelateChan[MAX_CHANNUM_V40/*512*/]; + BYTE byRes1[256]; +}NET_DVR_ALARM_RELATE_CFG,*LPNET_DVR_ALARM_RELATE_CFG; + +typedef struct tagNET_DVR_PTZ_BASICPARAMCFG +{ + DWORD dwSize; + BYTE byProportionalPan; //启用比例变倍配置 0-否,1-是 + BYTE byPresetFreezing; //启用预置点视频冻结 0-否,1-是 + BYTE byPresetSpeed;//预置点速度等级 1--8,默认4 + BYTE byKeyboardCtrlSpeed;//手控速度等级0-低,1-中,2-高 + BYTE byAutoScanSpeed;//扫描速度等级:1--40,默认28 + BYTE byZoomingSpeed;//变倍速度:1--3,默认3 + BYTE byManualControlSpeed;//手控速度模式:0-兼容,1-行人,2-非机动车,3-机动车,4-自适应 + BYTE byPTZMotionTrack;//启用运动(锁定云台操作) 0-默认(开启),1-关闭 + BYTE byRes[124]; +}NET_DVR_PTZ_BASICPARAMCFG,*LPNET_DVR_PTZ_BASICPARAMCFG; + +typedef struct tagNET_DVR_PTZ_OSDCFG +{ + DWORD dwSize; + BYTE byZoomStatus; //镜头倍数显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPtStatus; //方位角显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPresetStatus;//预置点标题显示:1-2秒、2-5秒、3-10秒、0xff-常关、0-常开,默认2秒 + BYTE byPositionDisplayFormat;//方位角显示格式 0-按照PT显示(例 P179|T-02),1-按照方位显示(SE123|T-02) + BYTE byRes[124]; +}NET_DVR_PTZ_OSDCFG,*LPNET_DVR_PTZ_OSDCFG; + +typedef struct tagNET_DVR_PTZ_POWEROFFMEMCFG +{ + DWORD dwSize; + BYTE byResumeTimePoint; //掉电记忆模式:Oxff-禁用、1-30秒、2-60秒、3-300秒、4-600秒,默认30秒 + BYTE byRes[127]; +}NET_DVR_PTZ_POWEROFFMEMCFG,*LPNET_DVR_PTZ_POWEROFFMEMCFG; + +typedef struct tagNET_DVR_PTZ_LIMITCOND +{ + DWORD dwSize; + DWORD dwChan; //通道号 + BYTE byLimitMode; //限位模式 0-保留,1-键控限位,2-扫描限位 + BYTE byRes[63]; +}NET_DVR_PTZ_LIMITCOND, *LPNET_DVR_PTZ_LIMITCOND; + +typedef struct tagNET_DVR_PTZ_LIMITCFG +{ + DWORD dwSize; + BYTE byEnable;//启用使能,0-否,1-是 + BYTE byLimitStatus; //限位状态 0-未限位,1-已限位(不可编辑) + BYTE byRes[122]; +}NET_DVR_PTZ_LIMITCFG,*LPNET_DVR_PTZ_LIMITCFG; + +typedef struct tagNET_DVR_PTZ_LIMITCTRL +{ + DWORD dwSize; + DWORD dwChan;//通道号 + BYTE byLimitMode; //限位模式 0-保留,1-键控限位,2-扫描限位 + BYTE byWorkMode ;//0-设置,1-清除 + BYTE byRes[122]; +}NET_DVR_PTZ_LIMITCTRL,*LPNET_DVR_PTZ_LIMITCTRL; + +typedef struct tagNET_DVR_PTZ_LOCKCFG +{ + DWORD dwSize; + BYTE byWorkMode ;//云台锁定控制 0-解锁,1-锁定 + BYTE byRes[123]; +}NET_DVR_PTZ_LOCKCFG,*LPNET_DVR_PTZ_LOCKCFG; + +typedef struct tagNET_DVR_PTZLOCKINFO_COND +{ + DWORD dwSize; + DWORD dwChannel ;//通道号 + BYTE byRes[64]; +}NET_DVR_PTZLOCKINFO_COND,*LPNET_DVR_PTZLOCKINFO_COND; + +typedef struct tagNET_DVR_PTZLOCKINFO +{ + DWORD dwSize; + DWORD dwRemainingSec ;//剩余秒数 + BYTE byRes[128]; //保留字节 +}NET_DVR_PTZLOCKINFO, *LPNET_DVR_PTZLOCKINFO; + +typedef struct tagNET_DVR_CRUISEPOINT_COND +{ + DWORD dwSize; + DWORD dwChan;//通道号 + WORD wRouteNo;//巡航路径号 + BYTE byRes[30]; +}NET_DVR_CRUISEPOINT_COND,*LPNET_DVR_CRUISEPOINT_COND; + +typedef struct +{ + WORD wPresetNo; //预置点 + WORD wDwell; //停留时间 + BYTE bySpeed; //速度 + BYTE bySupport256PresetNo;//兼容之前的 第256号预置点是否生效 + BYTE byRes[6]; +}NET_DVR_CRUISEPOINT_PARAM,*LPNET_DVR_CRUISEPOINT_PARAM; + +typedef struct +{ + DWORD dwSize; + // 最大支持128个巡航点 + NET_DVR_CRUISEPOINT_PARAM struCruisePoint[MAX_CRUISE_POINT_NUM]; + BYTE Res[64]; //保留 +}NET_DVR_CRUISEPOINT_V40, *LPNET_DVR_CRUISEPOINT_V40; + +typedef struct +{ + DWORD dwSize; + // 最大支持256个巡航点 + NET_DVR_CRUISEPOINT_PARAM struCruisePoint[MAX_CRUISEPOINT_NUM_V50]; + BYTE Res[64]; //保留 +}NET_DVR_CRUISEPOINT_V50, *LPNET_DVR_CRUISEPOINT_V50; + + +typedef struct tagNET_DVR_TEST_VERSION_HEAD +{ + DWORD dwSize; + DWORD dwParam1; + BYTE byParam2; + BYTE byRes[31]; +}NET_DVR_TEST_VERSION_HEAD, *LPNET_DVR_TEST_VERSION_HEAD; + +typedef struct tagNET_DVR_TEST_VERSION_HEAD_V1 +{ + DWORD dwSize; + DWORD dwParam1; + BYTE byParam2; + BYTE byRes[31]; + DWORD dwParam1_1; + BYTE byParam1_2; + BYTE byRes1[31]; +}NET_DVR_TEST_VERSION_HEAD_V1, *LPNET_DVR_TEST_VERSION_HEAD_V1; + +typedef struct tagNET_DVR_TEST_VERSION_HEAD_V2 +{ + DWORD dwSize; + DWORD dwParam1; + BYTE byParam2; + BYTE byRes[31]; + DWORD dwParam1_1; + BYTE byParam1_2; + BYTE byRes1[31]; + DWORD dwParam2_1; + BYTE byParam2_2; + BYTE byRes2[31]; +}NET_DVR_TEST_VERSION_HEAD_V2, *LPNET_DVR_TEST_VERSION_HEAD_V2; + +#define MAX_DISPLAY_NUM 512 //最大显示输出个数 +#define MAX_LEDCONTENT_NUM 512 //虚拟LED字符串最大长度 +#define MAX_PPT_CHAN 128 //PPT长度 + +typedef struct tagNET_DVR_VIDEOWALLDISPLAYMODE +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byRes1[3]; + NET_DVR_RECTCFG_EX struRect;//坐标范围,依据基准坐标计算出支持的拼控模式 + BYTE sName[NAME_LEN]; //电视墙名称 + BYTE byRes2[100]; +}NET_DVR_VIDEOWALLDISPLAYMODE, *LPNET_DVR_VIDEOWALLDISPLAYMODE; + +typedef struct tagNET_DVR_DISPLAYPARAM +{ + DWORD dwDisplayNo;//显示输出号 + BYTE byDispChanType;/*输出连接模式,1-BNC,2-VGA,3-HDMI,4-DVI,5-SDI, 6-FIBER, \ + 7-RGB, 8-YPrPb, 9-VGA/HDMI/DVI自适应,10-3GSDI,11-VGA/DVI自适应,12-HDBaseT,13-HDTVI, 14-TVI,0xff-无效*/ + + BYTE byRes[11]; +}NET_DVR_DISPLAYPARAM,*LPNET_DVR_DISPLAYPARAM; + +typedef struct tagNET_DVR_DISPLAYCFG +{ + DWORD dwSize; + NET_DVR_DISPLAYPARAM struDisplayParam[MAX_DISPLAY_NUM/*512*/] ; + BYTE byRes[128]; +}NET_DVR_DISPLAYCFG,*LPNET_DVR_DISPLAYCFG; + +typedef struct tagNET_DVR_VIDEOWALLDISPLAYPOSITION +{ + DWORD dwSize; + BYTE byEnable; + BYTE byCoordinateType;//坐标类型。0-基准坐标,1-实际坐标 + BYTE byRes1[2]; + //墙号,1字节墙号(高字节,对于合码器设备,为合码通道号)+3字节保留 + DWORD dwVideoWallNo; + DWORD dwDisplayNo;//显示输出号 + //坐标须为基准坐标的整数倍(1920*1920),宽度和高度值不用设置,即为基准值 + NET_DVR_RECTCFG_EX struRectCfg; + BYTE byRes2[64]; +}NET_DVR_VIDEOWALLDISPLAYPOSITION,*LPNET_DVR_VIDEOWALLDISPLAYPOSITION; + +/*窗口信息*/ +typedef struct tagNET_DVR_VIDEOWALLWINDOWPOSITION +{ + DWORD dwSize; + BYTE byEnable; //窗口使能,0-不使能,1-使能 + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 + BYTE byRes1[6]; + DWORD dwWindowNo;//窗口号 + DWORD dwLayerIndex;//窗口相对应的图层号,图层号到最大即置顶,置顶操作 + NET_DVR_RECTCFG_EX struRect; //目的窗口统一坐标(相对显示墙),获取或按统一坐标设置时有效 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 + BYTE byRes2[36]; +}NET_DVR_VIDEOWALLWINDOWPOSITION,*LPNET_DVR_VIDEOWALLWINDOWPOSITION; + +typedef struct tagNET_DVR_VIDEO_WALL_INFO +{ + DWORD dwSize; + //窗口号:1字节墙号(对于合码器设备,为合码通道号)+1字节保留+2字节窗口号 + DWORD dwWindowNo; + DWORD dwSceneNo;//场景号 + DWORD dwDestWallNo; //目的墙号 + DWORD dwDestSceneNo;//目的场景号 + BYTE byRes[12]; +}NET_DVR_VIDEO_WALL_INFO,*LPNET_DVR_VIDEO_WALL_INFO; + +typedef struct tagNET_DVR_VIRTUALLED_PARAM +{ + DWORD dwSize; + BYTE byEnable; //使能 + BYTE byDispMode; //显示模式,1-透明,2-半透明,3-覆盖 + BYTE byWndOperateMode; //窗口操作模式,0-统一坐标,1-分辨率坐标 + BYTE byType; //虚拟LED类型,0-文本,1-时间 + BYTE byDirection; //虚拟LED方向,0-水平方向,1-垂直方向 + BYTE byTimeType; //时间类型,byType为1时有效,0-无效,1-只显示时间,2-显示日期和时间 + BYTE byDateFormat; //日期显示格式,byTimeType为2时有效 + //0-无效,1-XXXX-XX-XX(年月日),2-XX-XX-XXXX(月日年),3-XX-XX-XXXX(日月年),4-XXXX年XX月XX日,5-XX月XX日XXXX年,6-XX日XX月XXXX年 + BYTE byTimeFormat; //时间显示格式,byTimeType不为零时有效 + //0-无效,1-H:MM:SS,2-HH:MM:SS + NET_DVR_RGB_COLOR struContentColor; //字体颜色 + NET_DVR_RGB_COLOR struBackColor; //背景颜色 + NET_DVR_RECTCFG_EX struRect; + DWORD dwContentNum; //文本内容长度,byType为0时有效 + BYTE byLedContent[MAX_LEDCONTENT_NUM/*512*/]; //文本内容,byType为0时有效 + BYTE byMoveMode; //移动模式,1-普通;2-平滑;3-静止 + BYTE byFontSize; //字体大小,1-1倍,2-2倍,3-4倍 + BYTE byMoveDirection; //移动方向,0-默认(从左到右),1-从左到右,2-从右到左,3-从上到下,4-从下到上,动态虚拟LED时有效 + BYTE byMoveSpeed; //移动速度,1-速度1,2-速度2,动态虚拟LED时有效 + NET_DVR_RECTCFG_EX struResolution; //目的窗口分辨率坐标,获取或按分辨率坐标设置有效 + DWORD dwXCoordinate; //LED区域左上角X坐标(统一坐标),获取或按分辨率坐标设置有效 + DWORD dwYCoordinate; //LED区域左上角Y坐标(统一坐标),获取或按分辨率坐标设置有效 + BYTE byHourFormat; //时间制式,byTimeType不为零时有效,0-无效,1-12小时制,2-24小时制 + BYTE byAMFormat; //AM格式,byHourFormat为1时有效,0-无效,1-AM,2-上午 + BYTE byPMFormat; //PM格式,byHourFormat为1时有效,0-无效,1-PM,2-下午 + BYTE byAlignmentX; //水平对齐方式,byDirection为0时有效,0-无效,1-左对齐,2-居中对齐,3-右对齐 + BYTE byAlignmentY; //垂直对齐方式,byDirection为1时有效,0-无效,1-顶端对齐,2-居中对齐,3-底端对齐 + BYTE byFontType; //字体类型,0-默认,1-宋体,2-黑体,3-楷体,255-自定义 + BYTE byRes2[90]; +}NET_DVR_VIRTUALLED_PARAM,*LPNET_DVR_VIRTUALLED_PARAM; + +typedef struct tagNET_DVR_IMAGE_CUT_MODE +{ + DWORD dwSize; + BYTE byCutMode; //图像切割模式,1-4:3,2-16:9 + BYTE byRes[31]; +}NET_DVR_IMAGE_CUT_MODE,*LPNET_DVR_IMAGE_CUT_MODE; + +typedef struct tagNET_DVR_USING_SERIALPORT +{ + DWORD dwSize ; + DWORD dwSerialPort; //当前使用串口号 + BYTE byProtocolType; //串口协议类型,1-LCD-S1 , 2-LCD-S2 , 3-LCD-L1 , 4-LCD-DLP, 5-LCD-S3 , 6-LCD-D20,7-LCD-L2,8-LCD-Z1,9-LCD-D20/D,10-LCD-D20/S,11-LCD-D20/P,12-LCD-D20/T,13-LCD-D20/F,14-LCD-D20/DF,15-LCD-D20/FS,16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+ + BYTE byRes[31]; +}NET_DVR_USING_SERIALPORT,*LPNET_DVR_USING_SERIALPORT; + +typedef struct tagNET_DVR_VIDEOWALLSCENECFG +{ + DWORD dwSize; + BYTE sSceneName[NAME_LEN];//场景名称 + BYTE byEnable;//场景是否有效 1-有效,0-无效 + BYTE bySceneIndex; //场景号,只能获取。获取所有场景时使用该参数 + BYTE byRes [78]; +}NET_DVR_VIDEOWALLSCENECFG, *LPNET_DVR_VIDEOWALLSCENECFG; + +typedef struct tagNET_DVR_SCENE_CONTROL_INFO +{ + DWORD dwSize; + NET_DVR_VIDEO_WALL_INFO struVideoWallInfo; //电视墙信息 + DWORD dwCmd; //场景控制命令,1-场景模式切换(如果要切换的是当前场景,则不进行切换),2-初始化场景(将此场景的配置清空,如果是当前场景,则同时对当前场景进行清屏操作),3-强制切换(无论是否是当前场景,强制切换),4-保存当前模式到某场景 5-删除场景 ,6-场景复制 + BYTE byRes[4]; +}NET_DVR_SCENE_CONTROL_INFO, *LPNET_DVR_SCENE_CONTROL_INFO; + +typedef struct tagNET_DVR_SHOW_CONTROL_INFO +{ + DWORD dwSize; + DWORD dwDisplayNo; //显示输出口号,0xffffffff表示对所用输出口进行操作 + BYTE byEnable; //使能显示,0-不显示,1-显示 + BYTE byChanType; //显示的通道类型,1-显示通道号,2-虚拟屏号 + BYTE byRes1[2]; + DWORD dwWallNo; //墙号,1字节墙号(高位)+3字节保留,显示屏幕序号时有效 + BYTE byRes2[56]; +}NET_DVR_SHOW_CONTROL_INFO,*LPNET_DVR_SHOW_CONTROL_INFO; + +typedef struct tagNET_DVR_BUF_INFO +{ + void* pBuf; //缓冲区指针 + DWORD nLen; //缓冲区长度 +}NET_DVR_BUF_INFO, *LPNET_DVR_BUF_INFO; + +typedef struct tagNET_DVR_IN_PARAM +{ + NET_DVR_BUF_INFO struCondBuf; //条件缓冲区 + NET_DVR_BUF_INFO struInParamBuf; //参数缓冲区 + DWORD dwRecvTimeout; //接收数据超时时间,单位:ms,置0采用接口默认超时 + BYTE byRes[32]; +}NET_DVR_IN_PARAM,LPNET_DVR_IN_PARAM; + +typedef struct tagNET_DVR_OUT_PARAM +{ + NET_DVR_BUF_INFO struOutBuf; //输出参数缓冲区 + void* lpStatusList; //状态缓冲区 + BYTE byRes[32]; +}NET_DVR_OUT_PARAM,LPNET_DVR_OUT_PARAM; + +typedef struct tagNET_DVR_AUDIO_CHAN_INFO +{ + DWORD dwSize; + DWORD dwChannel; //音频通道号组合(1字节设备号+1字节子板号+2字节音频通道号) + BYTE byRes[48]; +}NET_DVR_AUDIO_CHAN_INFO, *LPNET_DVR_AUDIO_CHAN_INFO; + +typedef struct tagNET_DVR_AUDIO_CHAN_CFG +{ + DWORD dwSize; + BYTE sChanName[NAME_LEN]; //音频通道名称 + BYTE byEnable; //音频是否开启, 0-关, 1-开 + BYTE byAudioSwitchType; //音频切换方式,1-按前端源方式,2-按窗口解码源方式 + BYTE byRes[2]; + NET_DVR_PU_STREAM_CFG_V41 struAudioSrcInfo; //音频源信息 byAudioSwitchType为1时有效 + DWORD dwWindowNo; //子窗口号(1字节墙号+1字节子窗口号+2字节窗口号),byAudioSwitchType为2时有效 + BYTE byRes2[28]; +}NET_DVR_AUDIO_CHAN_CFG, *LPNET_DVR_AUDIO_CHAN_CFG; + +#define MAX_SUBBOARD_NUM 42 //集中式大屏设备板数目 +#define MAX_SINGLE_BOARD_EXCEPTION_NUM 16 //单板最大并发异常数 +typedef struct tagNET_DVR_MAINBOARD_SERIAL_CFG +{ + DWORD dwSize; + BYTE bySerialWorkMode; //串口工作模式,1-RS484,2-RS232 + BYTE byFunType; //串口功能,1-键盘控制,2-屏幕控制,3-透明通道模式 4-PTZ控制 5-矩阵控制 6-控制台 + BYTE byDataBit;// 数据有几位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + DWORD dwBaudRate;//波特率0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + WORD wProtocol;//串口协议,不同串口功能对应串口协议不一样 + BYTE byVariable ; //串口是否可变,1-不可变 2-可变 (只获取) + BYTE byGateWayEnable; //是否用于网关,0-不用于网关,!0用于网关 + BYTE byRes[30]; +}NET_DVR_MAINBOARD_SERIAL_CFG, *LPNET_DVR_MAINBOARD_SERIAL_CFG; + +typedef struct tagNET_DVR_SUBBOARD_INFO +{ + DWORD dwSize; + BYTE byBoardType; //类型,0-主板,1-DVI-I输入,2-YPbPr输入,3-BNC输入,4-SDI输入, 5-DVI双链路输入, 6-普通解码板输入, 7-DVI-I输出, 8-SDI输出, 9-增强型解码板输入,10-DP输入,11-HDTVI输入,12-HDBaseT输出,13-HDMI输入,14-HDBaseT,15-DVI-T输入,16-HDMI输出,17-HDMI-HD输入 ,18-HDMI-UHD输入 , 19-DP_UHD输入,0xff-未知类型 //类型,0-主板,1-DVI-I输入,2-YPbPr输入,3-BNC输入,4-SDI输入, 5-DVI双链路输入, 6-普通解码板输入, 7-DVI-I输出, 8-SDI输出, 9-增强型解码板输入,10-DP输入,11-HDTVI输入,12-HDBaseT输出,13-HDMI输入,14-HDBaseT,15-DVI-T输入,16-HDMI输出,17-HDMI-HD输入 ,18-HDMI-UHD输入 , 19-DP_UHD输入,0xff-未知类型 + BYTE byInterfaceNum; //接口数 + BYTE byStatus; //状态,0-异常, 1-正常 + BYTE bySyncStatus; // 超高清板同步状态,0-未启用同步, 1-启用同步 + DWORD dwSlotNo; //所在槽位号 + BYTE byRes2[32]; +}NET_DVR_SUBBOARD_INFO, *LPNET_DVR_SUBBOARD_INFO; + +typedef struct tagNET_DVR_DEVICE_SUBBOARD_INFO +{ + DWORD dwSize; + BYTE byBackBoardType; //背板类型, 1-4U, 2-8U, 3-13U, 0xff-未知类型 + BYTE bySoltNum; //槽位数目 + BYTE byBoardNum; //有效数目 + BYTE byRes1[1]; + NET_DVR_SUBBOARD_INFO struSubBoadInfo[MAX_SUBBOARD_NUM]; //前byBoardNum项有效 + BYTE byRes2[32]; +}NET_DVR_DEVICE_SUBBOARD_INFO, *LPNET_DVR_DEVICE_SUBBOARD_INFO; + +typedef struct tagNET_DVR_DEVICE_BOARD_EXCEPINFO +{ + DWORD dwSize; + BYTE byExceptNum; //异常项数 + BYTE byRes1[3]; + BYTE byMajor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; //主类型 + WORD wMinor[MAX_SINGLE_BOARD_EXCEPTION_NUM]; //次类型 + BYTE byRes2[32]; +}NET_DVR_DEVICE_BOARD_EXCEPINFO, *LPNET_DVR_DEVICE_BOARD_EXCEPINFO; + + +typedef struct tagNET_DVR_LINEARSCAN +{ + DWORD dwSize; + DWORD dwChan; //通道号 + BYTE byLinearScanType; //限位类型,0-保留,1-左边界设置,2-右边界设置 + BYTE byRes[63]; +}NET_DVR_LINEARSCAN, *LPNET_DVR_LINEARSCAN; + +//码流附加信息 +typedef struct tagNET_DVR_STREAM_ATTACHINFO_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byStreamWithVca; //码流中叠加智能信息,可供进行后检索。0-不叠加,1-叠加 + BYTE byRes[127]; //保留 +}NET_DVR_STREAM_ATTACHINFO_CFG,*LPNET_DVR_STREAM_ATTACHINFO_CFG; + +typedef struct tagNET_DVR_SUBSYSTEM_NETCFG +{ + DWORD dwSize; + BYTE byDefaultRoute; //默认路由,0表示struEtherNet[0],1表示struEtherNet[1] + BYTE byNetworkCardNum; //设备实际可配置的网卡数目 + BYTE byRes1[2]; //保留 + NET_DVR_ETHERNET_MULTI struEtherNet [MAX_NETWORK_CARD]; //以太网口 + BYTE byRes2[128]; +}NET_DVR_SUBSYSTEM_NETCFG, *LPNET_DVR_SUBSYSTEM_NETCFG; + +//配置清除 +typedef struct tagNET_DVR_CLEARCTRL +{ + DWORD dwSize; + DWORD dwChan;//通道号 + BYTE byAllPreset; //清除所有的预置点:0-否,1-是 + BYTE byAllPatrols; //清除所有的巡航路径:0-否,1-是 + BYTE byAllPatterms; //清除所有的花样扫描:0-否,1-是 + BYTE byAllPrivacyMasks; //清除所有的隐私块:0-否,1-是 + BYTE byAllPTZLimited; //清除所有的限位设置:0-否,1-是 + BYTE byAllScheduledTasks; //清除所有的定时任务:0-否,1-是 + BYTE byAllParkAction; //清除所有的守望:0-否,1-是 + BYTE byRes[125]; +}NET_DVR_CLEARCTRL, *LPNET_DVR_CLEARCTRL; + +//云台优先配置信息 +typedef struct tagNET_DVR_PTZ_PRIORITIZECFG +{ + DWORD dwSize; + BYTE byPTZPrioritize; //云台优先:0-Rs485,1-网络,默认网络 + BYTE byRes[3]; + DWORD dwDelay; //延时:2---200秒 + BYTE byRes1[124]; +}NET_DVR_PTZ_PRIORITIZECFG, *LPNET_DVR_PTZ_PRIORITIZECFG; + +//零方位角控制 +typedef struct tagNET_DVR_INITIALPOSITIONCTRL +{ + DWORD dwSize; + DWORD dwChan;//通道号 + BYTE byWorkMode ;//0-设置,1-清除 + BYTE byRes[127]; +}NET_DVR_INITIALPOSITIONCTRL,*LPNET_DVR_INITIALPOSITIONCTRL; + +//隐私遮蔽参数 +typedef struct tagNET_DVR_PRIVACY_MASKS_COND +{ + DWORD dwSize; + DWORD dwChan; //通道号 + BYTE byRegionalID; //区域ID号 1~24 + //删除当前ID对应的隐私遮蔽信息 0-保留,1-删除 (WriteOnly) + BYTE byDelPrivacyMaskCfg; + BYTE byRes[62]; +}NET_DVR_PRIVACY_MASKS_COND, *LPNET_DVR_PRIVACY_MASKS_COND; + +typedef struct tagNET_DVR_PRIVACY_MASKS_CFG +{ + DWORD dwSize; + BYTE byEnable;//是否启用 0-否,1-是 + //隐私遮蔽区域配置参数是否显示 0-否,1-是 (ReadOnly) + BYTE byPrivacyMaskCfgEnable; + BYTE byColorType; //0-保留,1-灰、2-红、3-绿、4-蓝、5-橙、6-黄、0xff-马赛克 + BYTE byActiveZoomRatio;//屏蔽倍率:1--100 + char sPrivacyMaskName[NAME_LEN/*32*/];//遮挡区域名称,只使用16个字节 + NET_VCA_POLYGON struRegion;//区域范围 + //当前区域坐标是否有效 0-否,1-是 (针对单个区域设置区域坐标信息,和单场景下的多区域设置区域坐标信息) + BYTE byCurrentRegionEnable; + //当前倍率使用字段 0- byActiveZoomRatio ;1- fActiveZoomRatio(支持能力节点curActiveZoomRatioType) + BYTE byCurZoomRatio ; + BYTE byRes[2]; + float fActiveZoomRatio; //屏蔽倍率(精确到小数点1位):[1.0-100.0] + BYTE byRes1[120]; +}NET_DVR_PRIVACY_MASKS_CFG, *LPNET_DVR_PRIVACY_MASKS_CFG; + +//全局使能 +typedef struct tagNET_DVR_PRIVACY_MASKS_ENABLECFG +{ + DWORD dwSize; + BYTE byEnable;//启用使能,0-否,1-是 + BYTE byRes[127]; +}NET_DVR_PRIVACY_MASKS_ENABLECFG,*LPNET_DVR_PRIVACY_MASKS_ENABLECFG; + +//智能运动配置信息 +typedef struct tagNET_DVR_SMARTTRACKCFG +{ + DWORD dwSize; + BYTE byEnable;//启动使能 0-否,1-是 + BYTE byRes[3]; + DWORD dwDuration;//持续时间:0--300秒,默认300秒 + BYTE byRes1[124]; +}NET_DVR_SMARTTRACKCFG,*LPNET_DVR_SMARTTRACKCFG; + +//倍率 +typedef struct tagNET_DVR_ZOOMRATIOCTRL +{ + DWORD dwSize; + DWORD dwChan;//通道号 + BYTE byRes[128]; +}NET_DVR_ZOOMRATIOCTRL,*LPNET_DVR_ZOOMRATIOCTRL; + + +//拨码开关信息 +typedef struct tagNET_DVR_DIAL_SWITCH_CFG +{ + DWORD dwSize; + DWORD dwSwitchState;//拨号开关状态 + BYTE byRes[28]; +}NET_DVR_DIAL_SWITCH_CFG,*LPNET_DVR_DIAL_SWITCH_CFG; + +typedef struct tagNET_ALARM_RECORDFILE_LOSS //录像丢失报警子结构 +{ + NET_DVR_TIME_EX struInspectStart; //巡检开始时间 + NET_DVR_TIME_EX struInspectEnd; //巡检结束时间 + NET_DVR_IPADDR struIP; //录像丢失对应通道的IP地址 + DWORD dwChanNo; //通道号 + DWORD dwIDIndex; //编码器ID + BYTE sName[STREAM_ID_LEN]; //编码器名称 + NET_DVR_TIME_EX struLossStartTime; //录像丢失开始时间 + NET_DVR_TIME_EX struLossEndTime; //录像丢失结束时间 + DWORD dwLostNum; //录像丢失个数 0xffffffff表示全部丢失 + BYTE byRes[240]; +} NET_ALARM_RECORDFILE_LOSS, *LPNET_ALARM_RECORDFILE_LOSS; + +typedef struct tagNET_ALARM_STREAM_EXCEPTION //取流异常报警 子结构 +{ + NET_DVR_IPADDR struIP; //发生视频异常通道的IP地址 + DWORD dwChanNo; //通道号 + DWORD dwIDIndex; //编码器ID + BYTE sName[STREAM_ID_LEN]; //编码器名称 + BYTE byExceptionCase; //异常原因,0-数据写入异常 1-网络接收异常 + BYTE byRes[307]; //保留 +} NET_ALARM_STREAM_EXCEPTION, *LPNET_ALARM_STREAM_EXCEPTION; + + +typedef struct tagNET_ALARM_RESOURCE_USAGE //资源使用报警 子结构 +{ + BYTE byLevel; //使用情况,严重程度递增: 0-正常,1-一级告警上限 2-二级告警上限 3-三级告警上限 + BYTE byRes[491]; //保留 +}NET_ALARM_RESOURCE_USAGE, *LPNET_ALARM_RESOURCE_USAGE; + +typedef struct tagNET_ALARM_RECORD_EXCEPTION //录像异常报警 子结构 +{ + BYTE byReason; //异常原因 0-录像卷满 1-录像卷异常 2-无可用lun卷 + BYTE byRes1[3]; //保留 + BYTE sVolumeName[MAX_VOLUMENAME_LEN]; + DWORD dwVolumeID; //录像卷ID(硬盘号) + BYTE byRes[452]; //保留 +}NET_ALARM_RECORD_EXCEPTION, *LPNET_ALARM_RECORD_EXCEPTION; + +typedef union tagNET_ALARM_CVR_SUBINFO_UNION //CVR报警子结构 +{ + BYTE byLen[492]; //联合体长度 + NET_ALARM_RECORDFILE_LOSS struRecordLost; //录像丢失 + NET_ALARM_STREAM_EXCEPTION struStreamException; //取流异常 + NET_ALARM_RESOURCE_USAGE struResourceUsage; //资源使用 + NET_ALARM_RECORD_EXCEPTION struRecordException; //录像异常 +}NET_ALARM_CVR_SUBINFO_UNION, *LPNET_ALARM_CVR_SUBINFO_UNION; + +#define MAX_VARIABLE_DATA_NUM 65535 //最大可变数据个数 + +typedef struct tagNET_DVR_ALARMINFO_DEV_V40 +{ + DWORD dwAlarmType; //报警子类型 0-编码器(通道)信号量报警;1-私有卷二损坏;2- NVR服务退出;3-编码器状态异常;4-系统时钟异常;5-录像卷剩余容量过低;6-编码器(通道)移动侦测报警; + //7-编码器(通道)遮挡报警; 8-录像丢失报警; 9-视频实时显示报警; 10-资源使用率告警; 11- CVR自动修复异常, 12-录像异常 + NET_DVR_TIME struTime; + NET_ALARM_CVR_SUBINFO_UNION uSubAlarmInfo; //报警信息子结构 报警类型为8,9,10,11,12时该联合体有效 + BYTE byRes[256]; + DWORD dwNumber; //可变数据个数 + WORD *pNO; //当类型为0、3、6、7时,可能会有通道号;当类型为5时,可能会有磁盘号。可表示的值范围为0~65535 +}NET_DVR_ALARMINFO_DEV_V40, *LPNET_DVR_ALARMINFO_DEV_V40; + +typedef struct tagNET_DVR_CONTROL_START_CFG //一键开始控制信息 +{ + BYTE byUseDefine; //使用自定义, 0-使用默认,1-使用自定义 + BYTE byRes1; + WORD wCourseIndex; //课程索引 + BYTE byRes[128]; +}NET_DVR_CONTROL_START_CFG, *LPNET_DVR_CONTROL_START_CFG; + +typedef struct tagNET_DVR_CONTROL_DELAY_CFG//一键延长录像控制信息 +{ + BYTE byUseDefine; //使用自定义, 0-使用默认,1-使用自定义 + BYTE byRes1; + WORD wDelayTime; //录像延长时间<继续录像时间以此为准>,单位s + BYTE byRes[128]; +}NET_DVR_CONTROL_DELAY_CFG, *LPNET_DVR_CONTROL_DELAY_CFG; + +typedef union tagNET_DVR_CONTROL_INFO_UNION //控制信息联合体 +{ + BYTE byLen[132]; //联合体长度 + NET_DVR_CONTROL_START_CFG struStartCfg; //一键开始 + NET_DVR_CONTROL_DELAY_CFG struDelayCfg; //一键延迟 +}NET_DVR_CONTROL_INFO_UNION, *LPNET_DVR_CONTROL_INFO_UNION; + +typedef struct tagNET_DVR_RECORDING_CONTROL_CFG_ +{ + DWORD dwSize; //结构体大小 + WORD wCmdType; //控制命令类型,0-一键开始,1-一键结束,2-一键暂停,3-一键恢复,4-一键延长,5-一键开始屏蔽 6-一键停止屏蔽 + BYTE byRes1 [2]; //保留 + NET_DVR_CONTROL_INFO_UNION struControlInfo; //控制信息,具体使用结合控制命令类型 + BYTE byRes[256]; //保留 +}NET_DVR_RECORDING_CONTROL_CFG, *LPNET_DVR_RECORDING_CONTROL_CFG; + +typedef struct tagNET_DVR_RECORDING_HOST_CFG +{ + DWORD dwSize; //结构体大小 + DWORD dwOneKeyDelayTime; //一键本地延迟时间 录像继续录的时间 单位 S + BYTE byDirectedMode; //导播模式,0-自动导播,1手动导播,2-半自动导播 + BYTE byClassroomType; //教室类型,0-无效,1-主教室,2-从教室 + BYTE byCourseDataStorageEnabled;//课堂数据统计是否存储在硬盘, 0-不存储,1-存储 + BYTE byElectronicEnlargeMode;//是否使用电子放大导播, 0-不使用,1-使用 + BYTE byRes[124]; //保留 +}NET_DVR_RECORDING_HOST_CFG, *LPNET_DVR_RECORDING_HOST_CFG; + +typedef struct tagNET_DVR_STATISTIC_DATA_COND +{ + DWORD dwSize; + DWORD dwTypeTarget; //统计对象类型,详见TARGET_TYPE + NET_DVR_TIME struStartTime;//开始统计时间 + NET_DVR_TIME struStopTime;//结束统计时间 + BYTE byRes[280]; +}NET_DVR_STATISTIC_DATA_COND, *LPNET_DVR_STATISTIC_DATA_COND; + +typedef struct tagNET_DVR_STATISTIC_DATA_CFG +{ + DWORD dwSize; + DWORD dwTypeTarget; //统计对象类型,详见TARGET_TYPE + NET_DVR_TIME struStartTime;//事件开始时间 + NET_DVR_TIME struStopTime;//事件结束时间 + BYTE byRes[300]; +}NET_DVR_STATISTIC_DATA_CFG, *LPNET_DVR_STATISTIC_DATA_CFG; + +//typedef enum +//{ +// NET_SDK_ALL_TARGET = 0, //统计所有对象 +// NET_SDK_PPT_TARGET_ALARM, //PPT报警 +// NET_SDK_PPT_TARGET_VIEW, //PPT视图 +// NET_SDK_STU_SINGLE_ALARM, //单个学生报警 +// NET_SDK_STU_SINGLE_VIEW, //单个学生视图 +// NET_SDK_SUT_MULT_ALARM, //多个学生报警 +// NET_SDK_STU_MULT_VIEW, //多个学生视图 +// NET_SDK_STU_TEACHER_VIEW, //师生互动视图 +// NET_SDK_TEA_UP_DOWN_ALARM, //教师上下讲台 +// NET_SDK_TEA_START_VIEW, //教师授课视图 +// NET_SDK_BLA_WRITE_ALARM, //书写板书报警 +// NET_SDK_BLA_WRITE_VIEW, //书写板书视图 +// NET_SDK_TEA_FULL_VIEW, //教师全景视图 +// NET_SDK_TEA_START_ALARM, //教师开始授课报警 +// NET_SDK_TEA_WALK_ALARM, //教师走动报警 +// NET_SDK_TEA_LEFT_ALARM, //教师离开报警 +// NET_SDK_TEA_RUN_ALARM, //教师奔跑报警 +// NET_SDK_TEA_MULT_ALARM //教师多人报警 +//}TARGET_TYPE; + +typedef struct tagNET_DVR_AUTO_TRACK_CFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_DIRECT_CONNECT_CHAN_INFO struSDIInfo[MAX_CHANNUM_V30] ; + //SDI通道,设备端实际的流返回形式是模拟通道,而控制前端使用IP通道。 + BYTE byCameraType[MAX_CHANNUM_V30]; //通道接入的相机类型,值为 0-无意义,1-老师聚焦,2-学生聚焦,3-老师全景,4-学生全景,5-多媒体,6-教师定位,7-学生定位,8-板书定位,9-板书相机, 0xff-未接入 + BYTE byRes[64]; //保留 +}NET_DVR_AUTO_TRACK_CFG, *LPNET_DVR_AUTO_TRACK_CFG; + +typedef struct tagNET_DVR_PUBLISH_FTP_CFG +{ + BYTE byProtocolType; //协议类型 0-FTP,1-SFTP + BYTE byRes1; //保留 + WORD wFTPPort; //端口 + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + BYTE szUserName[NAME_LEN/*32*/]; //用户名<加密> + BYTE szPassWord[PASSWD_LEN/*16*/]; //密码<加密> + BYTE szCustomDir[128]; //发布目录,支持目录结构 + BYTE byRes[12]; //保留 +} NET_DVR_PUBLISH_FTP_CFG, *LPNET_DVR_PUBLISH_FTP_CFG; + +typedef struct tagNET_DVR_PUBLISH_HTTP_CFG +{ + BYTE strUrl[256]; //发布的URL地址信息 +}NET_DVR_PUBLISH_HTTP_CFG, *LPNET_DVR_PUBLISH_HTTP_CFG; + +typedef struct tagNET_DVR_PUBLISH_FTP_CFG_DIR +{ + BYTE byProtocolType; //协议类型 0-FTP,1-SFTP + BYTE byRes1; //保留 + WORD wFTPPort; //端口 + BYTE byAddress[MAX_DOMAIN_NAME]; //IP或者域名,需要设备解析 + //解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 + BYTE szUserName[NAME_LEN/*32*/]; //用户名<加密> + BYTE szPassWord[PASSWD_LEN/*16*/]; //密码<加密> + BYTE byDirLevel; /*0 = 不使用目录结构,直接保存在根目录,1 = 使用1级目录,2=使用2级目录*/ + BYTE byTopDirMode; /* 一级目录,0x1 = 使用设备名,0x2 = 使用设备号,0x3 = 使用设备ip地址 0xff=使用自定义*/ + BYTE bySubDirMode; /*二级目录,0x1=使用通道名称,0x2=使用通道号,0x3=使用课程名称,0x4-使用授课日期,0xff-使用自定义*/ + BYTE byRes2; + BYTE byTopCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*自定义一级目录*/ + BYTE bySubCustomDir[MAX_CUSTOMDIR_LEN/*32*/];/*自定义二级目录*/ + BYTE byRes[72]; //保留 +}NET_DVR_PUBLISH_FTP_CFG_DIR, *LPNET_DVR_PUBLISH_FTP_CFG_DIR; + + +typedef union tagNET_DVR_PUBLISH_ADD_UNION +{ + BYTE byLen[256]; //联合体长度 + NET_DVR_PUBLISH_HTTP_CFG struHttpCfg; //http地址信息 + NET_DVR_PUBLISH_FTP_CFG struFtpCfg; //ftp地址信息 + NET_DVR_PUBLISH_FTP_CFG_DIR struDirFtpCfg; //按目录方式的FTP +}NET_DVR_PUBLISH_ADD_UNION, *LPNET_DVR_PUBLISH_ADD_UNION; + +typedef struct tagNET_DVR_CHAN_RECORD_PUBLISH_INFO //通道录像发布信息 +{ + BYTE byPublish; //是否发布,0-不发布, 1-发布 + BYTE byRes1[3]; + DWORD dwStreamType; //一键发布码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 + BYTE byRes[12]; //保留 +}NET_DVR_RECORD_PUBLISH_INFO,*LPNET_DVR_RECORD_PUBLISH_INFO; + + +typedef struct tagNET_DVR_PUBLISH_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byPublishType; //发布方式,0-http,1-ftp,2-Dir FTP + BYTE byRes1[3]; //保留 + NET_DVR_PUBLISH_ADD_UNION struPublishAddr; //一键发布地址信息 + NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //通道录像发布信息 struChanPublis[0]表示通道1对应录像发布信息 + NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //导播通道录像发布信息 + BYTE byUploadTime; //是否启动定时ftp上传功能 0-无意义,1-不启动,2-启用 + BYTE byTimerMode; //0-无意义,1-按课表定时上传最近一节课的录像,2-按时间点方式上传前24小时录像 + BYTE byUploadStartHour; //按时间定时上传起始时间 时 + BYTE byUoploadStartMin; //按时间定时上传 开始时间 分 + BYTE byRes[1020]; //保留 +}NET_DVR_PUBLISH_CFG, *LPNET_DVR_PUBLISH_CFG; + +typedef struct tagNET_DVR_ONEKEY_PUBLISH_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byUseDefine; //使用自定义 0-使用默认发布配置信息,1-使用自定义发布配置信息 + BYTE byRes1[3]; + NET_DVR_RECORD_PUBLISH_INFO struChanPublish[MAX_CHANNUM_V30]; //通道录像发布信息 struChanPublis[0]表示通道1对应录像发布信息 + NET_DVR_RECORD_PUBLISH_INFO struDirectChanPublish; //导播通道录像发布信息 + NET_DVR_TIME_EX struStartTime; //课程开始时间 + NET_DVR_TIME_EX struEndTime; //课程结束时间 + BYTE bySchedulePublish; //是否按课表发布,0不按课表发布1按课表发布 + BYTE sFileName[COURSE_NAME_LEN/*32*/]; //发布文件名称 + BYTE byRes[31]; +}NET_DVR_ONEKEY_PUBLISH_CFG,*LPNET_DVR_ONEKEY_PUBLISH_CFG; + +typedef struct tagNET_DVR_COURSE_RECORDING_INFO +{ + DWORD dwSize; + char sCourseName[COURSE_NAME_LEN/*32*/]; + char sInstructorName[INSTRUCTOR_NAME_LEN/*16*/]; + char sCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; + BYTE byIndex; //课程索引 + BYTE byRes[15]; +}NET_DVR_COURSE_RECORDING_INFO, *LPNET_DVR_COURSE_RECORDING_INFO; + +typedef struct tagNET_DVR_EACH_LESSON_INFO_ +{ + NET_DVR_SCHEDTIME struSchedTime ; //课程起止时间 + WORD wCourseIndex ; //课程索引 + WORD wSessionIndex ; //节次 + BYTE byRes[4] ; //保留 +}NET_DVR_EACH_LESSON_INFO,*LPNET_DVR_EACH_LESSON_INFO ; +// 流录像状态 +typedef struct tagNET_DVR_CURRICULUM_CFG //课表计划 按年月日配置 +{ + DWORD dwSize ; //结构体大小 + NET_DVR_EACH_LESSON_INFO struLessonInfo[MAX_TIMESEGMENT_V40/*16*/] ; //每节课信息 + BYTE byRes[256] ; //保留 +}NET_DVR_CURRICULUM_CFG, *LPNET_DVR_CURRICULUM_CFG; + +typedef struct tagNET_DVR_DATE_ +{ + WORD wYear; //年 + BYTE byMonth; //月 + BYTE byDay; //日 +}NET_DVR_DATE,*LPNET_DVR_DATE; + +typedef struct _NET_DVR_PPT_DETECT_CFG_ +{ + DWORD dwSize ; + BYTE byEnablePPTDetect; //是否启用PPT检测 + BYTE byPptDetLevel; //灵敏度 + BYTE byEnablePartScreen; //是否配置部分区域 + BYTE byRes1; + WORD wX; //区域坐标 + WORD wY; + WORD wWidth; + WORD wHeight; + DWORD dwChangePixelNum;//像素点检测阈值[0,1000](ps : 一幅图像有多少像素在变化) + BYTE byRes[28]; +}NET_DVR_PPT_DETECT_CFG,*LPNET_DVR_PPT_DETECT_CFG; + +typedef struct _NET_DVR_SCREEN_SWITCH_ +{ + DWORD dwSize; + BYTE byRes[64]; //保留 +}NET_DVR_SCREEN_SWITCH, *LPNET_DVR_SCREEN_SWITCH; + +typedef struct _NET_DVR_PPT_CHANNEL_CFG_ +{ + DWORD dwSize ; + BYTE byChan[MAX_PPT_CHAN]; + BYTE byRes[32]; +}NET_DVR_PPT_CHANNEL_CFG,*LPNET_DVR_PPT_CHANNEL_CFG; + +typedef struct tagNET_DVR_BACKUP_RECORD_INFO +{ + BYTE byEnable; //是否启用 + BYTE byRes[11]; + //备份码流类型,按位表示 + //&0x1-表示主码流 + //&0x2-表示子码流 + //&0x4-表示码流三 + DWORD dwStreamType; +}NET_DVR_BACKUP_RECORD_INFO, *LPNET_DVR_BACKUP_RECORD_INFO; + +typedef struct tagNET_DVR_BACKUP_RECORD_PARAM +{ + DWORD dwSize ; + NET_DVR_BACKUP_RECORD_INFO struChanBackUp[MAX_CHANNUM_V30/*64*/]; //需要备份的通道,数组下标对应相应的通道号 + NET_DVR_BACKUP_RECORD_INFO struDirectedChanBackUp; //导播通道备份信息 + BYTE byRes[256]; // 保留字节 +}NET_DVR_BACKUP_RECORD_PARAM, *LPNET_DVR_BACKUP_RECORD_PARAM; + +//室内机编号 +typedef struct tagNET_DVR_INDOOR_UNIT_DEVICEID +{ + SHORT wFloorNumber; //层号 + WORD wRoomNumber; //房间号 + WORD wDevIndex; //室内机编号,0-10 + BYTE byRes[122]; //保留 +}NET_DVR_INDOOR_UNIT_DEVICEID,*LPNET_DVR_INDOOR_UNIT_DEVICEID; + +//门口机编号 +typedef struct tagNET_DVR_OUTDOOR_UNIT_DEVICEID +{ + WORD wPeriod; //期号, 范围[0,9] + WORD wBuildingNumber; //楼号 + WORD wUnitNumber; //单元号 + SHORT wFloorNumber; //层号 + WORD wDevIndex; //门口机序号,每一层中门口机的序号唯一,从0开始 + BYTE byRes[118]; //保留 +}NET_DVR_OUTDOOR_UNIT_DEVICEID,*LPNET_DVR_OUTDOOR_UNIT_DEVICEID; + +//围墙机编号 +typedef struct tagNET_DVR_OUTDOOR_FENCE_DEVICEID +{ + WORD wPeriod; //期号, 范围[0,9] + WORD wDevIndex; //围墙机序号,每一层中门口机的序号唯一,从0开始 + BYTE byRes[124]; //保留 +}NET_DVR_OUTDOOR_FENCE_DEVICEID,*LPNET_DVR_OUTDOOR_FENCE_DEVICEID; + +//管理机编号 +typedef struct tagNET_DVR_MANAGE_UNIT_DEVICEID +{ + WORD wPeriod; //期号,范围[0,9] + WORD wDevIndex; //管理机序号,每一期中管理机的序号唯一,从0开始 + BYTE byRes[124]; //保留 +}NET_DVR_MANAGE_UNIT_DEVICEID,*LPNET_DVR_MANAGE_UNIT_DEVICEID; + +//可视对讲设备编号联合体 +typedef union tagNET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION +{ + BYTE byLen[128] ; //联合体大小 + NET_DVR_INDOOR_UNIT_DEVICEID struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struOutdoorUnit; //门口机/门禁智能设备 + NET_DVR_MANAGE_UNIT_DEVICEID struManageUnit; //管理机 + NET_DVR_OUTDOOR_FENCE_DEVICEID struFenceUnit; //围墙机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struVillaOutdoorUnit; //别墅门口机 + NET_DVR_OUTDOOR_UNIT_DEVICEID struAgainConfirmUnit; //二次确认机 +}NET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION,*LPNET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION; + +//设备编号参数结构体 +typedef struct tagNET_DVR_VIDEO_INTERCOM_DEVICEID_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机 4-围墙机,5-别墅门口机,6-二次确认机,7-门禁智能设备,8-4200客户端, 9-APP,10-交互终端,11-IPC设备,12-解码器设备,13-模拟室内机 + BYTE byIsAutoReg; //是否自动注册,0-否,1-是 + BYTE byRes1[2]; //保留 + NET_DVR_VIDEO_INTERCOM_UNIT_DEVICEID_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 +}NET_DVR_VIDEO_INTERCOM_DEVICEID_CFG,*LPNET_DVR_VIDEO_INTERCOM_DEVICEID_CFG; + +//权限密码类型 +typedef enum tagPRIVILEGE_PASSWORD_TYPE_ENUM +{ + ENUM_PRIVILEGE_PASSWORD_ENGINEERING = 1, //工程密码 + ENUM_PRIVILEGE_PASSWORD_SETUPALARM = 2, //布/撤防密码 + ENUM_PRIVILEGE_PASSWORD_HOUSEHOLDER_UNLOCK = 3, //户主开锁密码 + ENUM_PRIVILEGE_PASSWORD_ANTI_HIJACKING = 4, //防劫持密码 + ENUM_PRIVILEGE_PASSWORD_PUBLIC1 = 5, //公共密码1 + ENUM_PRIVILEGE_PASSWORD_PUBLIC2 = 6, //公共密码2 + ENUM_PRIVILEGE_PASSWORD_PUBLIC3 = 7, //公共密码3 + ENUM_PRIVILEGE_PASSWORD_SENDCARD = 8//发卡密码 +}PRIVILEGE_PASSWORD_TYPE_ENUM; + +//权限密码信息 +typedef struct tagNET_DVR_PRIVILEGE_PASSWORD_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byPwdType; //密码类型,参考PRIVILEGE_PASSWORD_TYPE_ENUM + BYTE byRes1[3]; //保留 + BYTE byOldPassword[PASSWD_LEN]; //旧密码 + BYTE byNewPassword[PASSWD_LEN]; //新密码 + BYTE byRes2[128]; //保留 +}NET_DVR_PRIVILEGE_PASSWORD_CFG,*LPNET_DVR_PRIVILEGE_PASSWORD_CFG; + + +//室内机操作时间配置 +typedef struct tagNET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG +{ + DWORD dwMaxMonitoringTime; //最大显示时间,范围[10,60]秒 + DWORD dwMaxRingTime; //最大振铃时间,范围[15,60]秒 + DWORD dwCallForwardingTime; //呼叫转移超时时间,范围[0,20]秒 + DWORD dwRingDurationTime; //响铃超时时间,范围[30,60]秒,默认30秒 + BYTE byRes[112];//保留 +}NET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG; + +//室外机操作时间配置 +typedef struct tagNET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG +{ + DWORD dwMaxMessageTime; //最大留言时间,范围[30,60]秒 + DWORD dwMaxTalkTime; //最大通话时间,范围[90,120]秒 + BYTE byRes[120]; //保留 +}NET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG; + +//管理机操作时间配置 +typedef struct tagNET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG +{ + DWORD dwMaxMonitoringTime; //最大显示时间,范围[10,60]秒 + DWORD dwMaxRingTime; //最大振铃时间,范围[15,60]秒 + DWORD dwMaxTalkTime; //最大通话时间,单位s + BYTE byRes[116]; //保留 +}NET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG,*LPNET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG; + +//可视对讲操作时间联合体 +typedef union tagNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION +{ + BYTE byLen[128]; //联合体大小 + NET_DVR_INDOOR_UNIT_OPERATION_TIME_CFG struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_OPERATION_TIME_CFG struOutdoorUnit; //门口机/围墙机/别墅门口机/二次确认机 + NET_DVR_MANAGE_UNIT_OPERATION_TIME_CFG struManageUnit; //管理机 +}NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION,*LPNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION; + +//可视对讲操作时间配置 +typedef struct tagNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 +}NET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG,*LPNET_DVR_VIDEO_INTERCOM_OPERATION_TIME_CFG; + +//室内机关联的网络设备 +typedef struct tagNET_DVR_INDOOR_UNIT_RELATEDEV +{ + NET_DVR_IPADDR struOutdoorUnit; //主门口机IP + NET_DVR_IPADDR struManageUnit; //管理机IP + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + NET_DVR_IPADDR struAgainUnit; //二次确认机IP + BYTE byOutDoorType; //主门口机类型,0保留,1-主单元门口机,2-主别墅门口机 + BYTE byOutInConnectMode; //门口机与室内分机组网模式:1-门口机与室内分机同一局域网,2-门口机与室内分机不同局域网; + BYTE byIndoorConnectMode; //室内主机与室内分机组网模式:1-通过无线网卡、2-通过有线网卡; + BYTE byRes1; + NET_DVR_IPADDR struIndoorUnit; //室内主机IP + BYTE byManageCenterID[32]; //标准sip模式下使用,管理中心ID,支持数字,字母,@和. + BYTE byRes[268]; //保留 +}NET_DVR_INDOOR_UNIT_RELATEDEV,*LPNET_DVR_INDOOR_UNIT_RELATEDEV; + +//门口机相关联的网络设备 +typedef struct tagNET_DVR_OUTDOOR_UNIT_RELATEDEV +{ + NET_DVR_IPADDR struMainOutdoorUnit; //主门口机IP,副门口机时有效 + NET_DVR_IPADDR struManageUnit; //管理机IP + NET_DVR_IPADDR struSIPServer; //SIP服务器IP,副门口机时无效 + BYTE byManageCenterID[32]; //标准sip模式下使用,管理中心ID,支持数字,字母,@和. + BYTE byRes[560]; //保留 +}NET_DVR_OUTDOOR_UNIT_RELATEDEV,*LPNET_DVR_OUTDOOR_UNIT_RELATEDEV; + +//二次确认机相关联的网络设备 +typedef struct tagNET_DVR_AGAIN_RELATEDEV +{ + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + NET_DVR_IPADDR struCenterAddr; //中心平台IP + WORD wCenterPort; //中心平台端口 + BYTE byRes1[2]; + NET_DVR_IPADDR struIndoorUnit; //室内主机IP + NET_DVR_IPADDR struAgainAddr; //主二次确认机IP(副二次确认机配置该字段) + BYTE byRes[444];//保留 +}NET_DVR_AGAIN_RELATEDEV,*LPNET_DVR_AGAIN_RELATEDEV; + + +//管理机相关联的网络设备 +typedef struct tagNET_DVR_MANAGE_UNIT_RELATEDEV +{ + NET_DVR_IPADDR struSIPServer; //SIP服务器IP + BYTE byRes[880]; //保留 +}NET_DVR_MANAGE_UNIT_RELATEDEV,*LPNET_DVR_MANAGE_UNIT_RELATEDEV; + + +//可视对讲关联网络设备参数结构体 +typedef union tagNET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION +{ + DWORD dwRes[256] ; //联合体大小 + NET_DVR_INDOOR_UNIT_RELATEDEV struIndoorUnit; //室内机 + NET_DVR_OUTDOOR_UNIT_RELATEDEV struMainOutdoorUnit; //门口机/围墙机/门禁智能设备 + NET_DVR_MANAGE_UNIT_RELATEDEV struManageUnit; //管理机 + NET_DVR_OUTDOOR_UNIT_RELATEDEV struVillaUnit; //别墅门口机 + NET_DVR_AGAIN_RELATEDEV struAgainUnit; //二次确认机 +}NET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION,*LPNET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION; + +//关联网络设备参数结构体 +typedef struct tagNET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-门禁智能设备 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_UNIT_RELATEDEV_UNION uVideoIntercomUnit; //取值参考byUnitType + BYTE byRes2[128]; //保留 +}NET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG,*LPNET_DVR_VIDEO_INTERCOM_RELATEDEV_CFG; + +typedef struct tagNET_DVR_CONTROL_GATEWAY +{ + DWORD dwSize; //结构体大小 + DWORD dwGatewayIndex; //门禁序号,从1开始 + BYTE byCommand; //操作命令,0-关闭,1-打开,2-常开(通道状态),3-恢复(普通状态) + BYTE byLockType; //锁类型,0-普通(以前默认都为0),1-智能锁 + WORD wLockID; //锁ID,从1开始(远程开门口机锁时,0表示门口机本机控制器上接的锁、1表示外接控制器上接的锁) + BYTE byControlSrc[NAME_LEN]; //操作发起源信息 + BYTE byControlType; //开锁类型,1-显示,2-通话 + BYTE byRes3[3]; + BYTE byPassword[PASSWD_LEN]; //锁密码,当byLockType为智能锁时有效 + BYTE byRes2[108]; //保留 +}NET_DVR_CONTROL_GATEWAY,*LPNET_DVR_CONTROL_GATEWAY; + + +//公告图片信息结构体 +typedef struct tagNET_DVR_NOTICE_PIC +{ + BYTE* pPicData; //图片指针 + DWORD dwPicDataLen; //图片数据长度 + BYTE byRes[32]; //保留 +}NET_DVR_NOTICE_PIC,*LPNET_DVR_NOTICE_PIC; + +//公告数据 +typedef struct tagNET_DVR_NOTICE_DATA +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //公告时间 + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 + BYTE byNoticeTheme[MAX_NOTICE_THEME_LEN];//公告主题 + BYTE byNoticeDetail[MAX_NOTICE_DETAIL_LEN]; //公告详情 + BYTE byLevel; //公告等级,1-广告类信息;2-物业信息;3-报警类信息;4-通知类信息 + BYTE byPicNum; //公告图片数量 + BYTE byRes1[2]; //保留 + NET_DVR_NOTICE_PIC struNoticePic[MAX_NOTICE_PIC_NUM]; //公告图片 + BYTE byRes2[128]; //保留 +}NET_DVR_NOTICE_DATA,*LPNET_DVR_NOTICE_DATA; + +//操作权限验证参数 +typedef struct tagNET_DVR_OPERATION_AUTH +{ + DWORD dwSize; //结构体大小 + BYTE byPassword[PASSWD_LEN]; //验证密码 + BYTE byRes[128]; //保留 +}NET_DVR_OPERATION_AUTH,*LPNET_DVR_OPERATION_AUTH; + +//开锁类型 +typedef enum tagUNLOCK_TYPE_ENUM +{ + ENUM_UNLOCK_PASSWORD = 1, //密码开锁 + ENUM_UNLOCK_HIJACKING = 2, //劫持开锁 + ENUM_UNLOCK_CARD = 3, //刷卡开锁 + ENUM_UNLOCK_HOUSEHOLDER = 4, //户主开锁 + ENUM_UNLOCK_CENTER_PLATFORM = 5, //中心平台开锁 + ENUM_UNLOCK_BLUETOOTH = 6, //蓝牙开锁 + ENUM_UNLOCK_QR_CODE = 7, //二维码开锁 + ENUM_UNLOCK_FACE = 8, //人脸开锁 + ENUM_UNLOCK_FINGERPRINT = 9, //指纹开锁 + ENUM_UNLOCK_DYNAMIC_CODE = 10 //动态权限码开锁 +}UNLOCK_TYPE_ENUM; + + +//防区类型,和产品线确认,此定义没有使用,使用的是DETECTOR_TYPE +// typedef enum tagALARM_ZONE_TYPE_ENUM +// { +// ENUM_ALARM_ZONE_SMOKE = 1, //烟感 +// ENUM_ALARM_ZONE_GAS = 2, //煤气 +// ENUM_ALARM_ZONE_INFRARED = 3, //红外 +// ENUM_ALARM_ZONE_MAGNETIC = 4, //门磁 +// ENUM_ALARM_ZONE_MANUAL = 5 //手动 +// }ALARM_ZONE_TYPE_ENUM; + +//开锁记录 +typedef struct tagNET_DVR_UNLOCK_RECORD_INFO +{ + BYTE byUnlockType; //开锁方式,参考UNLOCK_TYPE_ENUM + BYTE byRes1[3]; //保留 + BYTE byControlSrc[NAME_LEN]; //操作发起源信息,刷卡开锁时为卡号,蓝牙开锁时为萤石的APP账号,二维码开锁时为访客的手机号,其余情况下为设备编号 + DWORD dwPicDataLen; //图片数据长度 + BYTE* pImage; //图片指针 + DWORD dwCardUserID; //持卡人ID + SHORT nFloorNumber;//刷卡开锁时有效,为楼层号 + WORD wRoomNumber; //操作发起源附加信息,刷卡开锁时有效,为房间号, + WORD wLockID; //(对于门口机,0-表示本机控制器上接的锁、1-表示外接控制器上接的锁) + BYTE byRes2[2]; + BYTE byLockName[LOCK_NAME_LEN]; //刷卡开锁时有效,锁名称,对应门参数配置中门名称 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byMask; //是否带口罩:0-保留,1-未知,2-未戴口罩,3-戴口罩 + BYTE byRes[135]; //保留 +}NET_DVR_UNLOCK_RECORD_INFO,*LPNET_DVR_UNLOCK_RECORD_INFO; + +//公告信息阅读回执 +typedef struct tagNET_DVR_NOTICEDATA_RECEIPT_INFO +{ + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 + BYTE byRes[224]; //保留 +}NET_DVR_NOTICEDATA_RECEIPT_INFO,*LPNET_DVR_NOTICEDATA_RECEIPT_INFO; + +//认证记录(设备未实现) +typedef struct tagNET_DVR_AUTH_INFO +{ + BYTE byAuthResult; //认证结果:0-无效,1-认证成功,2-认证失败 + BYTE byAuthType; //认证方式:0-无效,1-指纹,2-人脸 + BYTE byRes1[2]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + DWORD dwPicDataLen; //图片数据长度(当认证方式byAuthType为人脸时有效) + BYTE* pImage; //图片指针(当认证方式byAuthType为人脸时有效) + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN/*32*/]; //工号(人员ID + BYTE byRes[180]; //保留 +}NET_DVR_AUTH_INFO, *LPNET_DVR_AUTH_INFO; + +//车牌信息上传 +typedef struct tagNET_DVR_UPLOAD_PLATE_INFO +{ + char sLicense[MAX_LICENSE_LEN]; //车牌号码 + BYTE byColor; //车牌颜色,参考结构VCA_PLATE_COLOR + BYTE byRes[239]; //保留 +}NET_DVR_UPLOAD_PLATE_INFO, *LPNET_DVR_UPLOAD_PLATE_INFO; + +typedef struct tagNET_DVR_SEND_CARD_INFO +{ + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byRes[224]; //保留 +}NET_DVR_SEND_CARD_INFO, *LPNET_DVR_SEND_CARD_INFO; + +//门磁状态上报 +typedef struct tagNET_DVR_MAGNETIC_DOOR_STATUS +{ + BYTE byMagneticDoorStatus; //门磁状态 1-打开 2-关闭 + BYTE byRes[255]; //保留 +} NET_DVR_MAGNETIC_DOOR_STATUS, *LPNET_DVR_MAGNETIC_DOOR_STATUS; + +//可视对讲事件记录信息联合体 +typedef union tagNET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON +{ + BYTE byLen[256]; //联合体大小 + NET_DVR_UNLOCK_RECORD_INFO struUnlockRecord; //开锁记录 + NET_DVR_NOTICEDATA_RECEIPT_INFO struNoticedataReceipt; //公告信息阅读回执 + NET_DVR_AUTH_INFO struAuthInfo; //认证记录(设备未实现) + NET_DVR_UPLOAD_PLATE_INFO struUploadPlateInfo; //车牌信息上传 + NET_DVR_SEND_CARD_INFO struSendCardInfo; //门口机发卡,对应设备处于发卡状态,刷卡时上传该事件 + NET_DVR_MAGNETIC_DOOR_STATUS struMagneticDoorStatus; //门磁状态 +}NET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON,*LPNET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON; + +//可视对讲事件记录 +typedef struct tagNET_DVR_VIDEO_INTERCOM_EVENT +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //时间 + BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byEventType; //事件信息类型,1-开锁记录,2-公告信息阅读回执,3-认证记录,4-车牌信息上传,5非法卡刷卡事件,6-门口机发卡记录(需要启动门口机发卡功能,刷卡时才会上传该事件),7-口罩检测事件,8-门磁状态记录 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1[2]; //保留 + NET_DVR_VIDEO_INTERCOM_EVENT_INFO_UINON uEventInfo; //事件信息,具体内容参考byEventType取值 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE byRes2[252]; //保留 +}NET_DVR_VIDEO_INTERCOM_EVENT,*LPNET_DVR_VIDEO_INTERCOM_EVENT; + + +//防区报警信息 +typedef struct tagNET_DVR_ZONE_ALARM_INFO +{ + BYTE byZoneName[NAME_LEN]; //防区名称 + DWORD dwZonendex; //防区号 + BYTE byZoneType; //防区类型,参考DETECTOR_TYPE + BYTE byRes[219]; //保留 +}NET_DVR_ZONE_ALARM_INFO,*LPNET_DVR_ZONE_ALARM_INFO; + +//锁报警信息 +typedef struct tagNET_DVR_LOCK_ALARM_INFO +{ + DWORD dwLockID; //锁ID,从0开始 + BYTE byRes[252]; //保留字节 +}NET_DVR_LOCK_ALARM_INFO, *LPNET_DVR_LOCK_ALARM_INFO; + +typedef union tagNET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION +{ + BYTE byLen[256]; //联合体大小 + NET_DVR_ZONE_ALARM_INFO struZoneAlarm; //防区报警 + NET_DVR_LOCK_ALARM_INFO struLockAlarm; //锁报警信息 +}NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION,*LPNET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION; + + +//可视对讲报警信息联合体 +typedef struct tagNET_DVR_VIDEO_INTERCOM_ALARM +{ + DWORD dwSize; //结构体大小 + NET_DVR_TIME_EX struTime; //报警时间 + BYTE byDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byAlarmType; //报警类型,1-防区报警,2-防拆报警,3-劫持报警,4-多次密码开锁失败报警,5-门没开,6-门没关 7-SOS 、8-通话对讲,9-智能锁劫持指纹报警, 10-智能锁劫持密码报警,11-智能锁撬门报警,12-智能锁门锁锁定报警,13-智能锁电量不足报警 ,14-禁止名单报警,15-智能锁掉线 + //,16-门禁安全模块防拆报警,17-设备开始对讲,18-设备停止对讲, 19-取消SOS ,20-未佩戴口罩报警 21-消防输入报警 22-消防输入恢复 23-门磁被外力打开,24-卫生间报警,25-取消卫生间报警,26-换药提醒,27-人脸测温报警,28-取消换药提醒 + BYTE byRes1[3]; //保留 + NET_DVR_VIDEO_INTERCOM_ALARM_INFO_UNION uAlarmInfo; //报警信息,具体内容参考字段byAlarmType取值 + WORD wLockID; //(0-表示门口机本机控制器上接的锁、1-表示外接控制器上接的锁)(报警类型为5和6时有效) + BYTE byRes3[2]; //保留 + DWORD dwIOTChannelNo; //IOT通道号 + BYTE byRes2[248]; //保留 +}NET_DVR_VIDEO_INTERCOM_ALARM,*LPNET_DVR_VIDEO_INTERCOM_ALARM; + +typedef struct tagNET_DVR_PEOPLE_REGION +{ + BYTE byID;//区域ID + BYTE byNumber;//区域中的人员数量 0-表示区域中没有人员 + BYTE byDressType;//着装类型 0-未知,1-法袍、2-徽章、3-制服 + BYTE byRes; + NET_VCA_RECT struRegion; + DWORD dwPicLen;//检测图片长度 (0表示没有长度) + char* pPicBuffer;//具体的图片数据 + BYTE byRes1[24];//保留(预留后期扩展区域属性) +}NET_DVR_PEOPLE_REGION,*LPNET_DVR_PEOPLE_REGION; + +typedef struct tagNET_DVR_PEOPLE_DETECTION_RESULT +{ + DWORD dwSize; + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备信息 + NET_DVR_PEOPLE_REGION struPeopleRegion[MAX_PEOPLE_DETECTION_NUM/*8*/]; + /*人员检测报警类型 + (0- 未知, + (1- 审讯室内打架斗殴报警 + (2- 审讯人员瞌睡检测报警 + (3- 被审讯人员起身检测报警 + (4- 审判人员检测) + */ + BYTE byPeopleAlarmType; + BYTE byRes[255]; +}NET_DVR_PEOPLE_DETECTION_RESULT,*LPNET_DVR_PEOPLE_DETECTION_RESULT; + +typedef struct tagNET_DVR_SUPPLEMENTLIGHT +{ + BYTE byEnable;//使能 0-关,1-开 + BYTE byMode;//补光灯模式 0-自动,1-定时 + BYTE byHighBeamBrightness;//远光灯亮度[0,10] + BYTE byLowBeamBrightness;//近光灯亮度[0,10] + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 + WORD wFilteringTime;//过滤时间(s)[0,120] + BYTE byBrightness;//补光灯亮度[0,10](当支持该参数时, byHighBeamBrightness、byLowBeamBrightness不生效) + BYTE bySensitivity;//补光灯灵敏度[0,7],默认4(当byMode为自动时生效) + BYTE byBrightnessRegulatMode;// 亮度调节模式,0-手动,1-自动(当为自动时byBrightness不生效) + BYTE byMaxBrightness;//补光灯最大亮度(仅亮度调节模式为自动时生效),[0,100],默认50 + BYTE byRes[58]; +}NET_DVR_SUPPLEMENTLIGHT,*LPNET_DVR_SUPPLEMENTLIGHT; + +typedef struct tagNET_DVR_EXTERNALDEVICE +{ + DWORD dwSize;//结构体大小 + NET_DVR_SUPPLEMENTLIGHT struSupplementLight;//补光灯结构信息 + BYTE byRes[512]; +}NET_DVR_EXTERNALDEVICE,*LPNET_DVR_EXTERNALDEVICE; +typedef struct tagNET_DVR_TEMPERATURE_TRIGGER_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChan;//通道号 + DWORD dwPreset;//预置点号 + BYTE byRes[256]; +}NET_DVR_TEMPERATURE_TRIGGER_COND, *LPNET_DVR_TEMPERATURE_TRIGGER_COND; +//(球机支持,软件实现,补光灯是设计在设备内部的) +typedef struct tagNET_DVR_BUILTIN_SUPPLEMENTLIGHT +{ + DWORD dwSize;//结构体大小 + BYTE byMode;//补光灯模式 0-定时,1-开启,2-关闭,3-自动(非光敏,算法画面识别) + BYTE byBrightnessLimit;//亮度限制[0,100] + BYTE bySupplementLightMode;//补光灯类型,0~白光模式,1~混合模式 + BYTE byMixedLightRegulatMode;//混合补光灯亮度调节模式,0~自动,1~手动,当bySupplementLightMode = 1时生效 + BYTE byLrLightBrightness;//红外亮度控制[0,100],当byMixedLightRegulatMode = 1时生效。 + BYTE byHighLrLightBrightness;// 远光红外光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byHighBrightnessLimit;// 远光白光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byLowLrLightBrightness;// 近光红外光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 + BYTE byLowBrightnessLimit;//近光白光亮度配置[0,100],当byMixedLightRegulatMode = 1时生效 + BYTE byWhiteLightBrightness;// 白光灯亮度 + BYTE byIrLightbrightnessLimit;//混光球机,红外亮度限制 + BYTE byWhiteLightbrightnessLimit;//混光球机,白光亮度限制 + BYTE byRes1[252]; +}NET_DVR_BUILTIN_SUPPLEMENTLIGHT,*LPNET_DVR_BUILTIN_SUPPLEMENTLIGHT; +typedef struct tagNET_DVR_OIS_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byMode; //是否光学防抖:0-关闭,1-普通,2-专家 + BYTE byOISLevel; //光学防抖等级,0-低,1-中,2-高 + BYTE byOISSensitivity;//光学防抖灵敏度,0-低,1-中,2-高 + BYTE byRes[125]; +}NET_DVR_OIS_CFG, *LPNET_DVR_OIS_CFG; + +typedef struct tagNET_DVR_MACFILTER_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否开启MAC地址过滤:0-否,1-是 + BYTE byPermissionType; //MAC地址过滤类型,0-禁止,1-允许 + BYTE byRes1[2]; + BYTE szMacAddress[MAC_ADDRESS_NUM][MACADDR_LEN]; + BYTE byRes[128]; +}NET_DVR_MACFILTER_CFG, *LPNET_DVR_MACFILTER_CFG; + +typedef struct tagNET_DVR_EAGLEFOCUSING_SENCE +{ + BYTE byRuleType;//规则类型,0-线 + BYTE bySceneID;//场景ID,0-保留, 1是表示场景1,2表示场景2,其余依次类推 + WORD wRate;//倍率,50-100 + NET_VCA_POLYGON struRegion;// 区域范围 + BYTE bySpotNum;//在标定线上取多少个点进行标定,3-5,默认3 + BYTE byRes[127]; +}NET_DVR_EAGLEFOCUSING_SENCE, *LPNET_DVR_EAGLEFOCUSING_SENCE; + +typedef struct tagNET_DVR_EAGLEFOCUSING_CALCFG +{ + DWORD dwSize; + BYTE byEnabled;//是否开启标定:0-中止标定,1-开始标定(该节点设置时有效,获取时无效) + BYTE byRes1[3]; + NET_DVR_EAGLEFOCUSING_SENCE struEagleFoucsing[MAX_SENCE_NUM/*16*/]; + BYTE byRes[512]; +}NET_DVR_EAGLEFOCUSING_CALCFG, *LPNET_DVR_EAGLEFOCUSING_CALCFG; + +typedef struct tagNET_DVR_EAGLEFOCUSING_CTRL +{ + DWORD dwSize; + BYTE byEnable;//使能:0-关闭鹰视聚焦,1-开启鹰视聚焦 + BYTE byHeightCompensationEnable;//高度补偿使能 + BYTE byHeightCompensationValue;//高度补偿值, 范围1-5,默认3,一个值代表0.5米 + BYTE byRes[509]; +}NET_DVR_EAGLEFOCUSING_CTRL, *LPNET_DVR_EAGLEFOCUSING_CTRL; + +typedef struct tagNET_DVR_SMARTCALIBRATION_REGION +{ + BYTE byRuleID;//规则编号 + BYTE byMode;//0-default Mode,1-pix Mode,2-actual Mode + BYTE byStrategy;//过滤策略 0-area(面积),1-widthHeight(宽高) () + BYTE byPriority;//优先级 0-默认值, 1-低,2-中,3-高 + NET_VCA_POLYGON struMaxTargetSize;//最大目标尺寸 + NET_VCA_POLYGON struMinTargetSize;//最小目标尺寸 +}NET_DVR_SMARTCALIBRATION_REGION, *LPNET_DVR_SMARTCALIBRATION_REGION; + +#define RULE_REGION_MAX 128 +typedef struct tagNET_DVR_SMARTCALIBRATION_CFG +{ + DWORD dwSize;//结构体大小 + /* SmartType: + 0-linedetection, + 1-fielddetection, + 2-regionEntrance, + 3-regionExiting, + 4-loitering, + 5-rapidMove, + 6-parking, + 7-unattendedBaggage, + 8-attendedBaggage + */ + BYTE bySmartType;//智能类型 + BYTE byRes[3]; + NET_DVR_SMARTCALIBRATION_REGION strRegion[RULE_REGION_MAX/*128*/]; + BYTE byRes1[128]; +}NET_DVR_SMARTCALIBRATION_CFG, *LPNET_DVR_SMARTCALIBRATION_CFG; + +typedef struct tagNET_DVR_SMARTCALIBRATION_COND +{ + DWORD dwSize;//结构体大小 + /* SmartType: + 0-linedetection, + 1-fielddetection, + 2-regionEntrance, + 3-regionExiting, + 4-loitering, + 5-rapidMove, + 6-parking, + 7-unattendedBaggage, + 8-attendedBaggage + */ + BYTE bySmartType;//智能类型 + BYTE byRes[3]; + DWORD dwChannel;//通道号 + BYTE byRes1[128]; +}NET_DVR_SMARTCALIBRATION_COND, *LPNET_DVR_SMARTCALIBRATION_COND; + +typedef struct tagNET_DVR_SMARTCALIBRATION_REGION_CFG +{ + DWORD dwSize;//结构体大小 + NET_DVR_SMARTCALIBRATION_REGION strRegion[RULE_REGION_MAX/*128*/]; + BYTE byRes1[128]; +}NET_DVR_SMARTCALIBRATION_REGION_CFG, *LPNET_DVR_SMARTCALIBRATION_REGION_CFG; + + +typedef struct tagNET_DVR_OSD_BATTERY_POWER_CFG +{ + DWORD dwSize; + NET_VCA_POINT struOSDBatteryPower;//客流统计显示OSD显示左上角坐标 + BYTE byOSDBatteryPower;//电池电量OSD叠加显示使能, 0-否,1-是 + BYTE byRes[63]; +}NET_DVR_OSD_BATTERY_POWER_CFG, *LPNET_DVR_OSD_BATTERY_POWER_CFG; + +#define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 +#define CARD_PARAM_VALID 0x00000002 //有效期参数 +#define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 +#define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 +#define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 +#define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 +#define CARD_PARAM_GROUP 0x00000040 //所属群组参数 +#define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 +#define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 +#define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 + +typedef struct tagNET_DVR_VALID_PERIOD_CFG +{ + BYTE byEnable; //使能有效期,0-不使能,1使能 + BYTE byBeginTimeFlag; //是否限制起始时间的标志,0-不限制,1-限制 + BYTE byEnableTimeFlag; //是否限制终止时间的标志,0-不限制,1-限制 + BYTE byTimeDurationNo; //有效期索引,从0开始(时间段通过SDK设置给锁,后续在制卡时,只需要传递有效期索引即可,以减少数据量) + NET_DVR_TIME_EX struBeginTime; //有效期起始时间 + NET_DVR_TIME_EX struEndTime; //有效期结束时间 + BYTE byTimeType; //时间类型:0-设备本地时间(默认),1-UTC时间(对于struBeginTime,struEndTime字段有效) + BYTE byRes2[31]; +}NET_DVR_VALID_PERIOD_CFG, *LPNET_DVR_VALID_PERIOD_CFG; + +typedef struct tagNET_DVR_CARD_CFG +{ + DWORD dwSize; + DWORD dwModifyParamType; + // 需要修改的卡参数,设置卡参数时有效,按位表示,每位代表一种参数,1为需要修改,0为不修改 + // #define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 + // #define CARD_PARAM_VALID 0x00000002 //有效期参数 + // #define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 + // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 + // #define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 + // #define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 + // #define CARD_PARAM_GROUP 0x00000040 //所属群组参数 + // #define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 + // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 + // #define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,默认普通卡 + BYTE byLeaderCard; //是否为首卡,1-是,0-否 + BYTE byRes1; + DWORD dwDoorRight; //门权限,按位表示,1为有权限,0为无权限,从低位到高位表示对门1-N是否有权限 + NET_DVR_VALID_PERIOD_CFG struValid; //有效期参数 + DWORD dwBelongGroup; //所属群组,按位表示,1-属于,0-不属于,从低位到高位表示是否从属群组1-N + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + BYTE byCardRightPlan[MAX_DOOR_NUM][MAX_CARD_RIGHT_PLAN_NUM]; //卡权限计划,取值为计划模板编号,同个门不同计划模板采用权限或的方式处理 + DWORD dwMaxSwipeTime; //最大刷卡次数,0为无次数限制 + DWORD dwSwipeTime; //已刷卡次数 + WORD wRoomNumber; //房间号 + SHORT wFloorNumber; //层号 + BYTE byRes2[20]; +}NET_DVR_CARD_CFG, *LPNET_DVR_CARD_CFG; + +typedef struct _NET_DVR_CARD_CFG_COND +{ + DWORD dwSize; + DWORD dwCardNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 + BYTE byCheckCardNo; //设备是否进行卡号校验,0-不校验,1-校验 + BYTE byRes1[3]; + WORD wLocalControllerID; //就地控制器序号,表示往就地控制器下发离线卡参数,0代表是门禁主机 + BYTE byRes2[2]; + DWORD dwLockID; //锁ID + BYTE byRes3[20]; +}NET_DVR_CARD_CFG_COND, *LPNET_DVR_CARD_CFG_COND; + +typedef struct _NET_DVR_CARD_CFG_SEND_DATA +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + DWORD dwCardUserId; //持卡人ID + BYTE byRes[12]; +}NET_DVR_CARD_CFG_SEND_DATA, *LPNET_DVR_CARD_CFG_SEND_DATA; + +typedef struct tagNET_DVR_CARD_USER_INFO_CFG /*对应配置结构体*/ +{ + DWORD dwSize; + BYTE sUsername[NAME_LEN]; /* 用户名*/ + BYTE byAssociateNetUser; //关联的网络用户编号 + BYTE byRes2[255]; //byRes2[0]--网络报警主机用作用户号 +}NET_DVR_CARD_USER_INFO_CFG, *LPNET_DVR_CARD_USER_INFO_CFG; + +#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //门状态周计划参数 +#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //读卡器周计划参数 +#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //卡权限周计划参数 +#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //门状态假日计划参数 +#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //读卡器假日计划参数 +#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //卡权限假日计划参数 +#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //门状态假日组参数 +#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //读卡器验证方式假日组参数 +#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //卡权限假日组参数 +#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //门状态计划模板参数 +#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //读卡器验证方式计划模板参数 +#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //卡权限计划模板参数 +#define ACS_PARAM_CARD 0x00001000 //卡参数 +#define ACS_PARAM_GROUP 0x00002000 //群组参数 +#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //反潜回参数 +#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //事件及卡号联动参数 +#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //密码开门使能参数 +#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //人数统计参数 +#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //禁止名单图片参数 +#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //身份证禁止名单参数 +#define ACS_PARAM_EXAM_INFO 0x00100000 //考试信息参数 +#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //考生信息参数 +#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //升级设备人脸建模失败记录 + +typedef struct tagNET_DVR_ACS_PARAM_TYPE +{ + DWORD dwSize; + DWORD dwParamType; //参数类型,按位表示 + //#define ACS_PARAM_DOOR_STATUS_WEEK_PLAN 0x00000001 //门状态周计划参数 + //#define ACS_PARAM_VERIFY_WEEK_PALN 0x00000002 //读卡器周计划参数 + //#define ACS_PARAM_CARD_RIGHT_WEEK_PLAN 0x00000004 //卡权限周计划参数 + //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_PLAN 0x00000008 //门状态假日计划参数 + //#define ACS_PARAM_VERIFY_HOLIDAY_PALN 0x00000010 //读卡器假日计划参数 + //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_PLAN 0x00000020 //卡权限假日计划参数 + //#define ACS_PARAM_DOOR_STATUS_HOLIDAY_GROUP 0x00000040 //门状态假日组参数 + //#define ACS_PARAM_VERIFY_HOLIDAY_GROUP 0x00000080 //读卡器验证方式假日组参数 + //#define ACS_PARAM_CARD_RIGHT_HOLIDAY_GROUP 0x00000100 //卡权限假日组参数 + //#define ACS_PARAM_DOOR_STATUS_PLAN_TEMPLATE 0x00000200 //门状态计划模板参数 + //#define ACS_PARAM_VERIFY_PALN_TEMPLATE 0x00000400 //读卡器验证方式计划模板参数 + //#define ACS_PARAM_CARD_RIGHT_PALN_TEMPLATE 0x00000800 //卡权限计划模板参数 + //#define ACS_PARAM_CARD 0x00001000 //卡参数 + //#define ACS_PARAM_GROUP 0x00002000 //群组参数 + //#define ACS_PARAM_ANTI_SNEAK_CFG 0x00004000 //反潜回参数 + //#define ACS_PAPAM_EVENT_CARD_LINKAGE 0x00008000 //事件及卡号联动参数 + //#define ACS_PAPAM_CARD_PASSWD_CFG 0x00010000 //密码开门使能参数 + //#define ACS_PARAM_PERSON_STATISTICS_CFG 0x00020000 //人数统计参数 + //#define ACS_PARAM_BLOCKLIST_PICTURE 0x00040000 //禁止名单图片参数 + //#define ACS_PARAM_ID_BLOCKLIST 0x00080000 //身份证禁止名单参数 + //#define ACS_PARAM_EXAM_INFO 0x00100000 //考试信息参数 + //#define ACS_PARAM_EXAMINEE_INFO 0x00200000 //考生信息参数 + //#define ACS_PARAM_FAILED_FACE_INFO 0x00400000 //升级设备人脸建模失败记录 + WORD wLocalControllerID; //就地控制器序号[1,64],0代表门禁主机 + BYTE byRes[30]; +}NET_DVR_ACS_PARAM_TYPE, *LPNET_DVR_ACS_PARAM_TYPE; + +typedef struct tagNET_DVR_VIDEO_INTERCOM_IOIN_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byIOUseType; //用途,0-禁用,1-开门按钮,2-门状态,0xff-自定义 + BYTE byRes[63]; // 保留字节 +}NET_DVR_VIDEO_INTERCOM_IOIN_CFG, *LPNET_DVR_VIDEO_INTERCOM_IOIN_CFG; + +typedef struct tagNET_DVR_VIDEO_INTERCOM_IOOUT_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byIOUseType; //用途,0-禁用,1-电锁,0xff-自定义 + BYTE byRes[63]; // 保留字节 +}NET_DVR_VIDEO_INTERCOM_IOOUT_CFG, *LPNET_DVR_VIDEO_INTERCOM_IOOUT_CFG; + +typedef struct tagNET_DVR_ELEVATORCONTROL_CFG +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byRes1; //保留 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byRes[63]; // 保留字节 +}NET_DVR_ELEVATORCONTROL_CFG, *LPNET_DVR_ELEVATORCONTROL_CFG; + +typedef struct tagNET_DVR_ELEVATORCONTROL_CFG_V40 +{ + DWORD dwSize; // 结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byRes1; //保留 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byRes2; //保留 + WORD wServerPort; //梯控服务器端口号,当网卡协议类型为1-私有 时有效 + NET_DVR_IPADDR struServerIP; //梯控服务器IP,当网卡协议类型为1-私有 时有效 + BYTE byRes[256]; // 保留字节 +}NET_DVR_ELEVATORCONTROL_CFG_V40, *LPNET_DVR_ELEVATORCONTROL_CFG_V40; + +typedef struct tagNET_DVR_ELEVATORCONTROL_CFG_V50 +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用梯控,0-否,1-是 + BYTE byNegativeFloor; //负楼层层数 + BYTE byInterfaceType; //接口类型,0-无,1-RS485,2-网口 + BYTE byRS485Protocol; //RS485协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为1时有效 + BYTE byNetworkType; //网口协议类型,0-未知,1-私有,0xff-自定义,当byInterfaceType取值为2时有效 + BYTE byElevatorControlType; //梯控器类型:0-无效,1-DS-K2201,2-DS-K2210,0xff-自定义 + WORD wServerPort; //梯控服务器端口号,当网卡协议类型为1-私有 时有效 + NET_DVR_IPADDR struServerIP; //梯控服务器IP,当网卡协议类型为1-私有 时有效 + BYTE sUserName[NET_DVR_LOGIN_USERNAME_MAX_LEN]; //用户名,当网卡协议类型为1-私有 时有效(只能设置,不能获取) + BYTE sPassword[NET_DVR_LOGIN_PASSWD_MAX_LEN]; //密码,当网卡协议类型为1-私有 时有效(只能设置,不能获取) + BYTE byRes[256]; //保留字节 +}NET_DVR_ELEVATORCONTROL_CFG_V50, *LPNET_DVR_ELEVATORCONTROL_CFG_V50; + +typedef struct tagNET_DVR_ROOM_CUSTOM_COND +{ + DWORD dwSize; + DWORD dwRoomNumber; //房间数目(设置时有效) + BYTE byRes[128]; +}NET_DVR_ROOM_CUSTOM_COND, *LPNET_DVR_ROOM_CUSTOM_COND; + +typedef struct tagNET_DVR_ROOM_CUSTOM_CFG +{ + DWORD dwSize; + DWORD dwFormerRoomNo; //原房间号 + DWORD dwCustomRoomNo; //自定义序号 + BYTE byRes[128]; +}NET_DVR_ROOM_CUSTOM_CFG, *LPNET_DVR_ROOM_CUSTOM_CFG; + +typedef struct tagNET_DVR_ROOM_CUSTOM_STATUS +{ + DWORD dwSize; + DWORD dwFormerRoomNo; //原房间号 + BYTE byStatus; //下发状态:0-无效,1-失败,2-处理中,3-成功 + BYTE byRes[127]; +}NET_DVR_ROOM_CUSTOM_STATUS, *LPNET_DVR_ROOM_CUSTOM_STATUS; + +typedef struct tagNET_DVR_VIDEOINTERCOM_STREAM +{ + DWORD dwSize; + BYTE byVisDevID[MAX_NAMELEN]; // 可视对讲设备编号,即长号,设备类型为IPC时全部为0 + BYTE byDeviceName[NAME_LEN]; //设备名称 + BYTE bySourceType; //视频源类型,0无意义,1-IPC、2-DVR/DVS/NVR、3-门口机、4-围墙机、5-二次确认机 + BYTE byRes[255]; //保留 +}NET_DVR_VIDEOINTERCOM_STREAM, LPNET_DVR_VIDEOINTERCOM_STREAM; + +#define UNLOCK_PASSWORD_LEN 8 //解除密码长度 +#define LOCAL_CONTROLLER_NAME_LEN 32//就地控制器名称长度 +typedef struct tagNET_DVR_DOOR_CFG +{ + DWORD dwSize; + BYTE byDoorName[DOOR_NAME_LEN]; //门名称 + BYTE byMagneticType; //门磁类型,0-常闭,1-常开 + BYTE byOpenButtonType; //开门按钮类型,0-常闭,1-常开 + BYTE byOpenDuration; //开门持续时间,1-255s(楼层继电器动作时间) + BYTE byAccessibleOpenDuration; //特殊群体卡开门持续时间,1-255s + BYTE byMagneticAlarmTimeout; //门磁检测超时报警时间,0-255s,0表示不报警 + BYTE byEnableDoorLock; //是否启用闭门回锁,0-否,1-是 + BYTE byEnableLeaderCard; //是否启用首卡常开功能,0-否,1-是 + BYTE byLeaderCardMode; //首卡模式,0-不启用首卡功能,1-首卡常开模式,2-首卡授权模式(使用了此字段,则byEnableLeaderCard无效) + DWORD dwLeaderCardOpenDuration; //首卡常开持续时间,1-1440min + BYTE byStressPassword[STRESS_PASSWORD_LEN]; //胁迫密码 + BYTE bySuperPassword[SUPER_PASSWORD_LEN]; //超级密码 + BYTE byUnlockPassword[UNLOCK_PASSWORD_LEN]; //解除码NET_DVR_LOCAL_CONTROLLER_STATUS + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 + BYTE byRes1; + WORD wLocalControllerID; //只读,就地控制器序号,1-64,0代表未注册 + WORD wLocalControllerDoorNumber; //只读,就地控制器的门编号,1-4,0代表未注册 + WORD wLocalControllerStatus; //只读,就地控制器在线状态:0-离线,1-网络在线,2-环路1上的RS485串口1,3-环路1上的RS485串口2,4-环路2上的RS485串口1,5-环路2上的RS485串口2,6-环路3上的RS485串口1,7-环路3上的RS485串口2,8-环路4上的RS485串口1,9-环路4上的RS485串口2(只读) + BYTE byLockInputCheck; //是否启用门锁输入检测(1字节,0不启用,1启用,默认不启用) + BYTE byLockInputType; //门锁输入类型(1字节,0常闭,1常开,默认常闭) + BYTE byDoorTerminalMode; //门相关端子工作模式(1字节,0防剪防短,1普通,默认防剪防短) + BYTE byOpenButton; //是否启用开门按钮(1字节,0是,1否,默认是) + BYTE byLadderControlDelayTime; //梯控访客延迟时间,1-255min + BYTE byRes2[43]; +}NET_DVR_DOOR_CFG, *LPNET_DVR_DOOR_CFG; + +typedef struct tagNET_DVR_VIS_DEV_INFO +{ + DWORD dwSize; + BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byRes[64]; //保留 +}NET_DVR_VIS_DEV_INFO,*LPNET_DVR_VIS_DEV_INFO; + +typedef struct tagNET_DVR_VIS_REGISTER_INFO +{ + DWORD dwSize; + DWORD dwID; //ID + BYTE szDevNumber[MAX_DEV_NUMBER_LEN]; //设备编号 + BYTE byMACAddr[MACADDR_LEN]; //mac地址 + BYTE byRes1[2]; //保留 + BYTE sSerialNumber[SERIALNO_LEN]; //设备序列号 + NET_DVR_IPADDR struDevIP; //设备IP地址 + NET_DVR_TIME_EX struRegisterTime; //注册时间 + BYTE byRegisterType; //注册类型,0-保留、1-门口机,2-管理机、3-室内机、4-围墙机、5-别墅门口机、6-二次确认机、7-8700客户端、8-4200客户端 + BYTE byRes[127]; //保留 +}NET_DVR_VIS_REGISTER_INFO,*LPNET_DVR_VIS_REGISTER_INFO; + +typedef struct tagNET_DVR_CALLER_INFO +{ + DWORD dwSize; //结构体大小 + WORD wBuildingNo; //楼号 + SHORT wFloorNo; //层号 + BYTE byZoneNo; //期号 + BYTE byUnitNo; //单元号 + BYTE byDevNo; //设备编号 + BYTE byDevType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-8700客户端,8-4200客户端,9-APP, 10- 门铃机,11-VOIP客户端,12-布防点IPC设备 + BYTE byLockNum;//锁数量0-按照老的逻辑走,其他值-代表实际锁的数量 + BYTE byHighDevNo; // 设备编号高8位,用于支持1-9999的范围 + BYTE byRes1[2]; // 保留 + BYTE byVoipNo[16]; // VOIP客户端号码 byDevType:为11时有效 + BYTE byRes[80]; // 保留 +}NET_DVR_CALLER_INFO,*LPNET_DVR_CALLER_INFO; + +typedef struct tagNET_DVR_CALL_STATUS +{ + DWORD dwSize; //结构体大小 + BYTE byCallStatus; //获取通话状态,1-无呼叫、2-响铃、3-正在通话 + BYTE byRes[127]; +}NET_DVR_CALL_STATUS, *LPNET_DVR_CALL_STATUS; + +#define MAX_SERVER_DEVICE_NUMBER 16 //最大设备数量 + +typedef struct tagNET_DVR_SERVER_DEVICE_CFG +{ + BYTE byDeviceName[NAME_LEN]; //设备名称 + BYTE byDeviceType; ////设备类型,1-门口机,2-管理机,3-室内机 + BYTE byDeviceID; //门口机编号 + BYTE byLockNum; //锁数量0-按照老的逻辑走,其他值-代表实际锁的数量 + BYTE byRes[5]; //保留 +}NET_DVR_SERVER_DEVICE_CFG,*LPNET_DVR_SERVER_DEVICE_CFG; + +typedef struct tagNET_DVR_SERVER_DEVICE_INFO +{ + DWORD dwSize; //结构体大小 + DWORD dwDeviceNum; //设备数 + NET_DVR_SERVER_DEVICE_CFG struDeviceCfg[MAX_SERVER_DEVICE_NUMBER]; //设备信息 + BYTE byRes[200]; //保留 +}NET_DVR_SERVER_DEVICE_INFO,*LPNET_DVR_SERVER_DEVICE_INFO; + +typedef struct tagNET_DVR_VIDEO_CALL_PARAM +{ + DWORD dwSize; + DWORD dwCmdType; //信令类型 0-请求呼叫,1-取消本次呼叫,2-接听本次呼叫 3-拒绝本地来电呼叫 4-被叫响铃超时 5-结束本次通话,6-设备正在通话中,7-客户端正在通话中,8室内机不在线 + WORD wPeriod; //期号, 范围[0,9] + WORD wBuildingNumber; //楼号 + WORD wUnitNumber; //单元号 + SHORT wFloorNumber; //层号 + WORD wRoomNumber; //房间号 + WORD wDevIndex; //设备编号 + BYTE byUnitType; //设备类型,1-门口机,2-管理机,3-室内机,4-围墙机,5-别墅门口机,6-二次确认机,7-8700客户端,8-4200客户端,9-APP + BYTE byRes[115]; //保留 +}NET_DVR_VIDEO_CALL_PARAM,*LPNET_DVR_VIDEO_CALL_PARAM; + +#define MAX_SCREEN_ADDRESS_LEN 16 //特征码最大长度 +#define MAX_DAY_TIME_POINT 8 //每天最大时间点个数 +#define MAX_TIME_POINT 16 //每年最大时间点个数 + +typedef struct tagNET_DVR_DEV_IP_INFO +{ + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassWord[PASSWD_LEN]; //密码 + NET_DVR_IPADDR struIPAddr; //IP地址 + WORD wPort; //端口号 + BYTE byRes[24]; +}NET_DVR_DEV_IP_INFO, *LPNET_DVR_DEV_IP_INFO; + +typedef union tagNET_DVR_SCREEN_BASE_INFO +{ + BYTE byScreenAddress[MAX_SCREEN_ADDRESS_LEN]; //屏幕特征码,设备添加方式为0时有效 + NET_DVR_DEV_IP_INFO struIPInfo; //屏幕ip地址信息 + BYTE byRes[100]; +}NET_DVR_SCREEN_BASE_INFO,*LPNET_DVR_SCREEN_BASE_INFO; + +typedef struct tagNET_DVR_SCREEN_INDEX_CFG +{ + DWORD dwSize; + BYTE byEnbale; //使能,0-不使能,1-使能 + BYTE byDevAddType; //设备添加方式,0-按特征码(服务器和屏幕使用串口通信),1-按IP地址(服务器和屏幕使用网络通信) + BYTE byRes1[2]; + NET_DVR_SCREEN_BASE_INFO struScreenBaseInfo; //屏幕设备基本信息 + BYTE byRes[32]; +}NET_DVR_SCREEN_INDEX_CFG,*LPNET_DVR_SCREEN_INDEX_CFG; + +//模拟遥控器参数 +typedef struct tagNET_DVR_SIMULATE_REMOTE_CTRL +{ + BYTE byControlType; //1-电源开,2-电源关,3-信号源,4-菜单,5-确定,6-上,7-下,8-左,9-右, 10-INFO, 11-返回上一层,12-数字按键 + BYTE byControlParam; //操作参数,操作类型为12时,表示按键值(0-9),其他操作时此参数无效 + BYTE byRes[14]; +}NET_DVR_SIMULATE_REMOTE_CTRL, *LPNET_DVR_SIMULATE_REMOTE_CTRL; + +//屏幕维墙参数 +typedef struct tagNET_DVR_SCREEN_WALL_CTRL +{ + BYTE byEnable; //状态开关。0-为关闭;1-为开启 + BYTE byRes[15]; +}NET_DVR_SCREEN_WALL_CTRL, *LPNET_DVR_SCREEN_WALL_CTRL; + +//区域放大还原参数 +typedef struct tagNET_DVR_AREA_ZOOM_CFG +{ + BYTE byCmd; //区域放大还原指令,1-放大,2-还原 + BYTE byRes[3]; + NET_DVR_RECTCFG struArea; //需要放大的区域,以1920*1920作为屏幕总大小,还原时此参数无效 +}NET_DVR_AREA_ZOOM_CFG, *LPNET_DVR_AREA_ZOOM_CFG; + +typedef union tagNET_DVR_SCREEN_CONTROL_PARAM +{ + NET_DVR_INPUT_INTERFACE_CTRL struInputCtrl; + NET_DVR_DISPLAY_COLOR_CTRL struDisplayCtrl; + NET_DVR_DISPLAY_POSITION_CTRL struPositionCtrl; + NET_DVR_SIMULATE_REMOTE_CTRL struSimulateRemoteCrtl; //模拟遥控按键 + NET_DVR_SCREEN_WALL_CTRL struScreenWallCtrl; //屏幕维墙参数 + NET_DVR_AREA_ZOOM_CFG struZoomArea; //区域放大还原参数 + BYTE byRes[16]; +}NET_DVR_SCREEN_CONTROL_PARAM, *LPNET_DVR_SCREEN_CONTROL_PARAM; + +typedef struct tagNET_DVR_SCREEN_CONTROL +{ + DWORD dwSize; + DWORD dwCommand ; /* 控制方法 1-开 2-关 3-屏幕输入源选择 4-显示单元颜色控制 5-显示单元位置控制*/ + BYTE byProtocol; //串口协议类型,1:LCD-S1,2:LCD-S2 + BYTE byRes1[3]; + NET_DVR_SCREEN_CONTROL_PARAM struControlParam; + BYTE byRes2[52]; +}NET_DVR_SCREEN_CONTROL, *LPNET_DVR_SCREEN_CONTROL; + +typedef struct tagNET_DVR_SCREEN_CONTROL_V41 +{ + DWORD dwSize; + BYTE bySerialNo; //串口号 + BYTE byRes[2]; + BYTE byProtocol; // 串口协议类型 1-LCD-S1,2-LCD-S2,3-LCD-L1,4-LCD-DLP,5-LCD-S3,6-LCD-D20,7-LCD-L2,8-LCD-Z1, + //9-LCD-D20/D,10-LCD-D20/S,11-LCD-D20/P,12-LCD-D20/T,13-LCD-D20/F,14-LCD-D20/DF,15-LCD-D20/FS, + //16-LCD-D20/FP,17-LCD-D20/FT,18-LCD-D5022,19-LCD-D5032,20-LCD-D5042+,21-LCD-D20/Z 0xff-无效,使用预先绑定的协议类型 + DWORD dwCommand ; /* 控制方法 1-开 2-关 3-屏幕输入源选择 4-显示单元颜色控制 5-显示单元位置控制,6-模拟遥控按键,7-显示屏幕状态, + 8-显示屏幕特征码(此命令矩形区域起始坐标设为(0,0),宽高均设为0xffffffff), 9-屏幕维墙,10-恢复屏幕默认参数,11-显示IP(此命令矩形区域起始坐标设为(0,0),宽高均设为0xffffffff),12-屏幕USB升级 13-区域放大还原*/ + NET_DVR_SCREEN_CONTROL_PARAM struControlParam; + BYTE byWallNo; // 电视墙号 + BYTE byDevNo; //设备号 + BYTE bySubboardNo; //子板号 + BYTE byRes1; + NET_DVR_RECTCFG_EX struRect;//根据坐标进行计算,基准坐标 + BYTE byRes2[28]; +}NET_DVR_SCREEN_CONTROL_V41, *LPNET_DVR_SCREEN_CONTROL_V41; + +typedef struct tagNET_DVR_MSC_SPLICE_CFG +{ + DWORD dwSize; + BYTE bySpliceNo; //拼接屏号 + BYTE byWallNo; //电视墙号 + BYTE byEnable; //是否使能,0-否,1-是 + BYTE byRes1[1]; + NET_DVR_RECTCFG_EX struRectCfg; //需要进行拼接的区域,获取的时候此参数填0 + BYTE byRes2[32]; +}NET_DVR_MSC_SPLICE_CFG,*LPNET_DVR_MSC_SPLICE_CFG; + +typedef struct tagNET_DVR_MSC_SCREEN_INTERFACE_CFG +{ + DWORD dwSize; + BYTE byInterfaceType; //输入源索引,见枚举 INPUT_INTERFACE_TYPE + BYTE byNoSignalPic; //无信号画面模式,1-蓝屏,2-黑屏,3-LOGO画面 + BYTE byRes[30]; +}NET_DVR_MSC_SCREEN_INTERFACE_CFG,*LPNET_DVR_MSC_SCREEN_INTERFACE_CFG; + +//背光参数 +typedef struct tagNET_DVR_MSC_SCREEN_BACKLIGHT_CFG +{ + DWORD dwSize; + BYTE byBacklight; //背光,0-100 + BYTE byRes[15]; +}NET_DVR_MSC_SCREEN_BACKLIGHT_CFG,*LPNET_DVR_MSC_SCREEN_BACKLIGHT_CFG; + +//画中画参数 +typedef struct tagNET_DVR_MSC_SCREEN_PIP_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用画中画 0-不启用 1-启用 + BYTE bySubWindowSource; //子画面信号源,参考枚举INPUT_INTERFACE_TYPE + BYTE bySubWindowBorderColor; //子画面边框颜色, 1-蓝色,2-黑色 + BYTE byRes1; + NET_DVR_RECTCFG_EX struPosition; //子画面位置,屏幕总大小为1920*1920 + BYTE byRes2[16]; +}NET_DVR_MSC_SCREEN_PIP_CFG,*LPNET_DVR_MSC_SCREEN_PIP_CFG; + +typedef struct tagNET_DVR_SCREEN_WORK_STATE +{ + DWORD dwSize; + BYTE byFanStatus;//风扇状态,0-关,1-开 + BYTE byFanExceptionStatus; //风扇异常状态,0-不支持,1-正常,2-异常 + BYTE byRes1[2]; + DWORD dwWorkingHours; //累积工作时长,单位:小时 + BYTE byVersion[VERSION_LEN];//软件版本号 + int iTemperature; //板卡温度,精确到个位,单位:摄氏度 + BYTE byTempState; //板卡温度状态,0-不支持,1-正常,2-异常 + BYTE byRes[31]; +}NET_DVR_SCREEN_WORK_STATE,*LPNET_DVR_SCREEN_WORK_STATE; + +//开机logo参数 +typedef struct tagNET_DVR_BOOT_LOGO_CFG +{ + DWORD dwSize; + BYTE byEnable; //开机是否显示logo,0-不显示,1-显示 + BYTE byRes[31]; +}NET_DVR_BOOT_LOGO_CFG,*LPNET_DVR_BOOT_LOGO_CFG; +//音频参数 +typedef struct tagNET_DVR_LCD_AUDIO_CFG +{ + DWORD dwSize; + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //音量大小,0-100 + char byBalance; //声道平衡,-50-+50 + BYTE byRes[33]; +}NET_DVR_LCD_AUDIO_CFG, *LPNET_DVR_LCD_AUDIO_CFG; + +//屏幕参数联合体 +typedef union tagNET_DVR_MSC_SCREEN_PARAM +{ + NET_DVR_MSC_SCREEN_INTERFACE_CFG struInterfaceCfg; //输入源参数 + NET_DVR_SCREEN_FAN_WORK_MODE_CFG struFanWorkMode; //风扇工作模式参数 + NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGA信号参数 + NET_DVR_SCREEN_MENU_CFG struMenuCfg; //屏幕菜单参数 + NET_DVR_VIDEO_OUT_CFG struOutEffectCfg; //显示效果参数 + NET_DVR_COLOR_TEMPERATURE_CFG struColorTemperatureCfg; //色温参数 + NET_DVR_ADC_CFG struAdcCfg; //ADC参数 + NET_DVR_SCREEN_EDGE_CFG struScreenEdgeCfg; //屏幕边缘参数 + NET_DVR_MSC_SCREEN_BACKLIGHT_CFG struBacklight; //背光参数 + NET_DVR_MSC_SCREEN_PIP_CFG struPicInPicCfg; //画中画参数 + NET_DVR_DEFOG_LCD struDefog; //去雾参数 + NET_DVR_SCREEN_WORK_STATE struWorkState; //屏幕工作状态 + NET_DVR_BOOT_LOGO_CFG struBootLogoCfg; //开始显示logo参数 + NET_DVR_LCD_AUDIO_CFG struAudioCfg; //音频参数 + BYTE byRes[256]; +}NET_DVR_MSC_SCREEN_PARAM,*LPNET_DVR_MSC_SCREEN_PARAM; + +typedef struct tagNET_DVR_MSC_SCREEN_PARAM_CFG +{ + DWORD dwSize; + BYTE byParamType; //参数类型,1-输入源参数,2-风扇工作模式参数,3-VGA信号参数,4-屏幕菜单参数,5-显示效果参数,6-色温参数,7-ADC参数,8-屏幕边缘参数,9-背光参数,10-画中画参数,11-透雾参数,12-屏幕工作状态(只能获取),13-开机LOGO是否显示参数 14-音频参数 + BYTE byRes1[3]; + NET_DVR_MSC_SCREEN_PARAM struParam; //屏幕参数 + BYTE byRes2[32]; +}NET_DVR_MSC_SCREEN_PARAM_CFG,*LPNET_DVR_MSC_SCREEN_PARAM_CFG; + +typedef struct tagNET_DVR_MSC_SCREEN_REMOTE_CFG +{ + DWORD dwSize; + BYTE byWallNo; //电视墙号 + BYTE byRes1[3]; + NET_DVR_RECTCFG_EX struRectCfg; //屏幕区域 + NET_DVR_MSC_SCREEN_PARAM_CFG struScreenParam; //配置的屏幕参数 + BYTE byRes2[32]; +}NET_DVR_MSC_SCREEN_REMOTE_CFG,*LPNET_DVR_MSC_SCREEN_REMOTE_CFG; + +typedef struct tagNET_DVR_MSC_SCREEN_PARAM_COND +{ + DWORD dwSize; + BYTE byWallNo; //电视墙号 + BYTE byParamType; //参数类型,1-输入源参数,2-风扇工作模式参数,3-VGA信号参数,4-屏幕菜单参数,5-显示效果参数,6-色温参数,7-ADC参数,8-屏幕边缘参数,9-背光参数,10-画中画参数,11-透雾参数,12-屏幕工作状态(只能获取),13-开机LOGO是否显示参数 14-音频参数 + BYTE byRes1[2]; + NET_DVR_RECTCFG_EX struRectCfg; //屏幕区域 + BYTE byRes2[32]; +}NET_DVR_MSC_SCREEN_PARAM_COND,*LPNET_DVR_MSC_SCREEN_PARAM_COND; + +typedef struct tagNET_DVR_SWITCH_DAY_TIME +{ + BYTE byEnable; //是否启用该时间点,0-不启用,1-启用 + BYTE bySwitchType; //开关机类型,0-关机,1-开机 + BYTE byRes1[2]; + NET_DVR_DAYTIME struTimePoint; //开关机时间点 + BYTE byRes2[8]; +}NET_DVR_SWITCH_DAY_TIME,*LPNET_DVR_SWITCH_DAY_TIME; + +typedef struct tagNET_DVR_SWITCH_TIME_POINT +{ + BYTE byEnable; //是否启用该时间点,0-不启用,1-启用 + BYTE bySwitchType; //开关机类型,0-关机,1-开机 + BYTE byRes1[2]; + NET_DVR_SYSTEM_TIME struTimePoint; //开关机时间点 + BYTE byRes2[16]; +}NET_DVR_SWITCH_TIME_POINT,*LPNET_DVR_SWITCH_TIME_POINT; + +typedef struct tagNET_DVR_TIME_SWITCH_CFG +{ + DWORD dwSize; + NET_DVR_SWITCH_DAY_TIME struSwitchDayTime[MAX_DAYS][MAX_DAY_TIME_POINT]; //周开关机计划 + NET_DVR_SWITCH_TIME_POINT struSwitchTimePoint[MAX_TIME_POINT]; //按时间点开关机参数 + BYTE byRes1[3]; + BYTE byEnable;//是否启用定时开关机,0-不启用,1-启用 + BYTE byRes[60]; +}NET_DVR_TIME_SWITCH_CFG,*LPNET_DVR_TIME_SWITCH_CFG; + +typedef struct tagNET_DVR_VIDEO_WALL_AREA +{ + DWORD dwSize; + BYTE byWallNo; //电视墙号 + BYTE byRes1[3]; + NET_DVR_RECTCFG_EX struRect; //屏幕范围 + BYTE byRes2[32]; +}NET_DVR_VIDEO_WALL_AREA, *LPNET_DVR_VIDEO_WALL_AREA; + +typedef struct tagNET_DVR_DELAY_TIME +{ + DWORD dwSize; + DWORD dwDelayTime; //延时时间,0-3000,单位:ms + BYTE byRes[32]; +}NET_DVR_DELAY_TIME,*LPNET_DVR_DELAY_TIME; + +//双目标定类型 +typedef enum _BV_CALIBRATION_TYPE_ENUM_ +{ + ENUM_BV_CALIBRATION_NONE = 0, //未标定 + ENUM_BV_CALIBRATION_DIRECT = 1, //双目直接标定 + ENUM_BV_CALIBRATION_SAMPLE = 2, //双目样本标定 +} BV_CALIBRATION_TYPE_ENUM; + + +//样本标定点 +typedef struct tagNET_DVR_BV_SAMPLE_CALIB_POINT +{ + BYTE byCalibPtID; //标定点ID,范围[1,5]。表示此点在双目标定过程中的序号 + BYTE byRes1[3]; //保留 + NET_VCA_POINT struPoint; //标定点坐标 + BYTE byRes2[16]; //保留 +}NET_DVR_BV_SAMPLE_CALIB_POINT,*LPET_DVR_BV_SAMPLE_CALIB_POINT; + +//开始样本标定输入参数 +typedef struct tagNET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM +{ + DWORD dwCameraHeight; //摄像机高度,单位cm + DWORD dwHumanHeight; //人体身高,单位cm + BYTE byRes[248]; //保留 +}NET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM; + +//设置样本标定输入参数 +typedef struct tagNET_DVR_BV_SAMPLE_CALIB_SET_PARAM +{ + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint; //标定点。即当人员保持直立行走,人脸出现在特定画面区域中时,此点表示对象两眼连线的中点。 + BYTE byRes[228]; //保留 +}NET_DVR_BV_SAMPLE_CALIB_SET_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_SET_PARAM; + +//结束样本标定输入参数 +typedef struct tagNET_DVR_BV_SAMPLE_CALIB_END_PARAM +{ + BYTE byRes[256]; //保留 +}NET_DVR_BV_SAMPLE_CALIB_END_PARAM,*LPNET_DVR_BV_SAMPLE_CALIB_END_PARAM; + +//样本标定输入参数联合体 +typedef union tagNET_DVR_BV_SAMPLE_CALIB_PARAM_UNION +{ + BYTE byRes[256]; //保留 + NET_DVR_BV_SAMPLE_CALIB_BEGIN_PARAM struCalibBegin; //开始标定输入参数 + NET_DVR_BV_SAMPLE_CALIB_SET_PARAM struCalibSet; //设置标定输入参数 + NET_DVR_BV_SAMPLE_CALIB_END_PARAM struCalibEnd; //结束标定输入参数 +}NET_DVR_BV_SAMPLE_CALIB_PARAM_UNION,*LPNET_DVR_BV_SAMPLE_CALIB_PARAM_UNION; + +//样本标定命令枚举 +typedef enum _BV_SAMPLE_CALIB_CMD_ENUM +{ + ENUM_BV_SAMPLE_CALIB_BEGIN = 1, //开始标定 + ENUM_BV_SAMPLE_CALIB_SETTING = 2, //设置参数 + ENUM_BV_SAMPLE_CALIB_END = 3 //结束标定 +}BV_SAMPLE_CALIB_CMD_ENUM; + +//样本标定结构体 +typedef struct tagNET_DVR_BV_SAMPLE_CALIBRATION +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byCommand; //标定命令,参见BV_SAMPLE_CALIB_CMD _ENUM + BYTE byRes1[3]; //保留 + NET_DVR_BV_SAMPLE_CALIB_PARAM_UNION uCalibParam; //标定输入参数,取值依赖于字段byCommand + BYTE byRes2[256] ; //保留 +}NET_DVR_BV_SAMPLE_CALIBRATION,*LPNET_DVR_BV_SAMPLE_CALIBRATION; + + +//双目样本标定信息 +typedef struct tagNET_DVR_BV_SAMPLE_CALIB_CFG +{ + DWORD dwSize; //结构体大小 + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], + float fInclineAngle; //摄像机倾斜角度[-20°,20°] + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPoint[MAX_SAMPLE_NUM]; //标定点组 + NET_DVR_BV_SAMPLE_CALIB_POINT struCalibPointEx[MAX_SAMPLE_NUM_EX/*7*/]; //标定点组扩展 + BYTE byRes[60]; //保留 +}NET_DVR_BV_SAMPLE_CALIB_CFG,*LPNET_DVR_BV_SAMPLE_CALIB_CFG; + +//双目图像校正参数结构体 +typedef struct tagNET_DVR_BINOC_RECTIFY_PARAM +{ + float fCamInternalMatrix[3][3]; //相机内参矩阵,包括焦距及主点坐标 + float fDistCoeffs[8]; //镜头畸变系数 + float fRotateMatrix[3][3]; //校正后的旋转矩阵 + float fProjectMatrix[3][4]; //校正后的投影矩阵 + BYTE byRes[64]; //保留 +}NET_DVR_BINOC_RECTIFY_PARAM, *LPNET_DVR_BINOC_RECTIFY_PARAM; + +//左右相机校正参数 +typedef struct _tagNET_DVR_BV_CORRECT_PARAM +{ + DWORD dwSize; //结构大小 + float fReprojectMatrix[4][4]; //重投影矩阵 + NET_DVR_BINOC_RECTIFY_PARAM struLCamParam; //左相机校正参数 + NET_DVR_BINOC_RECTIFY_PARAM struRCamParam; //右相机校正参数 + BYTE byLensType; //镜头焦距类型,0-未知,1-8mm,2-12mm,3-16mm,4-25mm,5-35mm,6-50mm,7-4mm,8-6mm,9-2.0mm,10-2.8mm,11-4.3mm + BYTE byRes1[3]; //保留 + /*RotateMatrix 是双目标定后左相机相对于右相机的旋转矩阵, + TransMatrix是平移矩阵, + RotateMatrix和TransMatrix联合起来描述的是左相机相对于右相机的位置关系*/ + float fRotateMatrix[3][3]; //旋转矩阵 + float fTransMatrix[3]; //平移矩阵 + DWORD dwOriImgWidth; //原始标定图像的宽(如果是1920*1080分辨率的图像,则为1920) + DWORD dwOriImgHeight; //原始标定图像的高(如果是1920*1080分辨率的图像,则为1080) + BYTE byRes[196]; //保留 +} NET_DVR_BV_CORRECT_PARAM,*LPNET_DVR_BV_CORRECT_PARAM; + +//输出视频类型 +typedef struct tagNET_DVR_OUTPUT_VIDEO_TYPE +{ + DWORD dwSize; //结构大小 + BYTE byType; //输出视频类型,1-拼接图,2-深度图 + BYTE byRes[63]; //保留 +}NET_DVR_OUTPUT_VIDEO_TYPE,*LPNET_DVR_OUTPUT_VIDEO_TYPE; + +#define MAX_CHECK_485CHAN 64 //485自检设备通道号个数 + +typedef struct tagNET_DVR_DEVICE_SELF_CHECK_STATE +{ + DWORD dwSize; + DWORD dwRS485Chan[MAX_CHECK_485CHAN];//RS485通断情况有问题的通道号,值表示通道号,位表示槽位号 + DWORD dwSensorChan[4];//模拟量无效的通道号,按位表示 + BYTE byRes[32]; // 保留字节 +}NET_DVR_DEVICE_SELF_CHECK_STATE, *LPNET_DVR_DEVICE_SELF_CHECK_STATE; + +//设置完全获取出厂值 +typedef struct tagNET_DVR_COMPLETE_RESTORE_INFO_ +{ + DWORD dwSize ; //结构体长度 + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_COMPLETE_RESTORE_INFO, *LPNET_DVR_COMPLETE_RESTORE_INFO; + +typedef struct tagNET_DVR_UPLOAD_PICTURE_INFO +{ + DWORD dwSize; + DWORD dwChannel; //图片对应的通道号 + BYTE byPictureType;//图片格式,0-bmp,1-jpeg,2-PNG 3-SWF 4-GIF + BYTE byRes1[3]; + NET_DVR_TIME_V30 struTime; //图片生成时间 + char* sPictureBuffer;//图片缓冲区 + DWORD dwPictureLength;//图片长度 + DWORD dwPicMangeNo; //图片管理号 + BYTE sPicName[NAME_LEN]; //图片名称 + BYTE byUseType; //图片使用类型:0-屏保图片 1-开机logo图片 + BYTE byRes[91]; +}NET_DVR_UPLOAD_PICTURE_INFO,*LPNET_DVR_UPLOAD_PICTURE_INFO; + +#define MAX_UPLOADFILE_URL_LEN 240 + +typedef struct tagNET_DVR_UPLOAD_FILE_RET +{ + BYTE sUrl[MAX_UPLOADFILE_URL_LEN] ; //url + BYTE byRes[260]; +} NET_DVR_UPLOAD_FILE_RET,*LPNET_DVR_UPLOAD_FILE_RET; + +typedef struct tagNET_DVR_FACE_EXTRA_INFO +{ + NET_VCA_RECT struVcaRect[MAX_FACE_PIC_NUM]; //人脸子图坐标信息 + BYTE byRes[64]; +}NET_DVR_FACE_EXTRA_INFO, *LPNET_DVR_FACE_EXTRA_INFO; +typedef union tagNET_DVR_PIC_EXTRA_INFO_UNION +{ + BYTE byUnionLen[544]; //联合体长度,无实际意义 + NET_DVR_FACE_EXTRA_INFO struFaceExtraInfo; //人脸侦测信息 +}NET_DVR_PIC_EXTRA_INFO_UNION, *LPNET_DVR_PIC_EXTRA_INFO_UNION; + +typedef struct tagNET_DVR_FIND_PICTURE_V40 //查找结果结构体 +{ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor ;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byFileType ; //文件类型, :0定时抓图1 移动侦测抓图 2 报警抓图3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 ,9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测,0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, 0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询 + BYTE byRecogResult ;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + BYTE byRes1[2]; // 保留字节 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + float fFaceSnapTemperature; // 人脸抓拍温度信息,精确到小数点后1位 ,(浮点数 + 100) * 10 取正数传输),单位固定为摄氏度(℃)。当byFileType为0x25-人脸抓拍时有效,其余情况下该字段为0值 + BYTE byRes[68]; // 保留字节 + NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //图片附件信息 +}NET_DVR_FIND_PICTURE_V40,*LPNET_DVR_FIND_PICTURE_V40; + +typedef struct tagNET_DVR_FIND_PICTURE_V50 //查找结果结构体 +{ + char sFileName[PICTURE_NAME_LEN];//图片名 + NET_DVR_TIME struTime;//图片的时间 + DWORD dwFileSize;//图片的大小 + char sCardNum[CARDNUM_LEN_V30]; //卡号 + BYTE byPlateColor;//参考结构 VCA_PLATE_COLOR + BYTE byVehicleLogo;//参考结构 VLR_VEHICLE_CLASS + BYTE byFileType; //文件类型, :0定时抓图1 移动侦测抓图 2 报警抓图3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 ,9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警,\ + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测,0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, 0x70-通道定时抓图 + BYTE byRecogResult;//识别结果参考结构VTR_RESULT + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码 + BYTE byEventSearchStatus; //连续图片表示同一查找结果的时候,0-表示后面没有图片信息,1-表示后面还有图片信息。总共图片信息包括最后一张状态为0的图片。 + NET_DVR_ADDRESS struAddr; //图片所在的地址信息,图片下载时用到 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14 + char cTimeDifferenceM; //与UTC的时差(分钟),-30,0, 30, 45 + BYTE byRes[253]; // 保留字节 + NET_DVR_PIC_EXTRA_INFO_UNION uPicExtraInfo; //图片附件信息 +}NET_DVR_FIND_PICTURE_V50, *LPNET_DVR_FIND_PICTURE_V50; + + +typedef struct tagNET_DVR_THUMBNAILS_COND +{ + DWORD dwSize; // 结构体大小 + NET_DVR_STREAM_INFO struStreamInfo; //流信息 + BYTE bySearchDataType; // 查找数据类型 0-I帧数据(CVR 一路的情况下,1s最多28个I帧),1-图片数据 + BYTE byRes[3]; // 保留字节 + NET_DVR_TIME_V30 struStartTime; //查找开始时间 + NET_DVR_TIME_V30 struStopTime; // 查找结束时间 + DWORD dwIntervalTime; //间隔时间,单位秒,范围:0~24*60*60,若查找结束时间等于查找开始时间,则填0,填其他值无效 + BYTE byRes1[512]; // 保留字节 +}NET_DVR_THUMBNAILS_COND, *LPNET_DVR_THUMBNAILS_COND; + +typedef struct tagNET_DVR_THUMBNAILS_RESULT //查找结果结构体 +{ + BYTE byResultDataType; // 查找结果数据类型0-I帧数据(CVR 一路的情况下,1s最多28个I帧),1-系统头数据, 2-图片数据 + BYTE byIFrameType; // I帧类型,0-数据帧,1-参考帧(本数据只需送入播放库,但是不需要转为图片显示) + BYTE byRes1[2]; // 保留字节 + NET_DVR_TIME_SEARCH struTime; //数据时间 + BYTE byRes[252]; // 保留字节 + DWORD dwFileSize; //数据大小 + char* pBuffer; //数据信息(数据类型和条件结构体中NET_DVR_THUMBNAILS_RESULT 的字段 byResultDataType 值相关) +}NET_DVR_THUMBNAILS_RESULT, *LPNET_DVR_THUMBNAILS_RESULT; + +typedef struct tagNET_DVR_REGIONENTRANCE_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byAlarmConfidence; // 报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; // 录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 +}NET_DVR_REGIONENTRANCE_REGION, *LPNET_DVR_REGIONENTRANCE_REGION; + +typedef struct tagNET_DVR_REGION_ENTRANCE_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + BYTE byRes1[1]; + NET_DVR_REGIONENTRANCE_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_REGION_ENTRANCE_DETECTION,*LPNET_DVR_REGION_ENTRANCE_DETECTION; + +typedef struct tagNET_DVR_SMART_REGION_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwRegion; //区域ID号 +}NET_DVR_SMART_REGION_COND, *LPNET_DVR_SMART_REGION_COND; + +typedef struct tagNET_DVR_ENTRANCE_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byDetectionTarget; + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 +}NET_DVR_ENTRANCE_REGION, *LPNET_DVR_ENTRANCE_REGION; + +typedef struct tagNET_DVR_DENSEFOGDETECTION_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE bySensitivity; //灵敏度参数,范围[0,100] + BYTE byRes[258]; +}NET_DVR_DENSEFOGDETECTION_CFG, *LPNET_DVR_DENSEFOGDETECTION_CFG; + +typedef struct tagNET_DVR_EVENT_TRIGGER +{ + DWORD dwSize;//结构体大小 + NET_DVR_HANDLEEXCEPTION_V41 struHandleException; //异常处理方式 + DWORD dwRelRecordChan[MAX_CHANNUM_V40]; //实际触发录像通道,按值表示,采用紧凑型排列,从下标0开始顺序读取,中间遇到0xffffffff则后续无效。 + NET_DVR_PRESETCHAN_INFO struPresetChanInfo[MAX_CHANNUM_V40]; //启用的预置点信息 + NET_DVR_CRUISECHAN_INFO struCruiseChanInfo[MAX_CHANNUM_V40]; //启用巡航功能通道的信息 + NET_DVR_PTZTRACKCHAN_INFO struPtzTrackInfo[MAX_CHANNUM_V40]; //调用云台的通道信息 + BYTE byDirection;//触发方向:0-保留;1-全部;2-正向;3-反向 + BYTE byRes2[255]; +}NET_DVR_EVENT_TRIGGER,*LPNET_DVR_EVENT_TRIGGER; + +typedef struct tagNET_DVR_EVENT_SCHEDULE +{ + DWORD dwSize;//结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; /*假日布防时间*/ + BYTE bySceneID[MAX_DAYS][MAX_TIMESEGMENT_V30];//场景号,目前支持1~4场景,0为无效。该场景号与布防时间中每个时间段一一对应。 + BYTE byRes[72]; +}NET_DVR_EVENT_SCHEDULE,*LPNET_DVR_EVENT_SCHEDULE; + +typedef struct tagNET_DVR_ANR_ARMING_HOST +{ + DWORD dwSize;//sizeof(NET_DVR_ANR_ ARMING_HOST) + NET_DVR_IPADDR struANRArmingHostIpAddr; //断网续传的主机IP地址 + WORD wANRAlarmHostPort; //断网续传的主机布防端口号 + BYTE byANRAlarmType;//断网续传连接类型, 0-SDK私有断网续传连接,1-ehome断网续传连接 + BYTE byConfirmMechanismEnabled;// 是否开启确认机制方式布防连接,0-保留,1-没有开启 2-开启 + BYTE byRes[512]; //保留字节 +}NET_DVR_ANR_ARMING_HOST, *LPNET_DVR_ANR_ARMING_HOST; + +typedef struct tagNET_DVR_REGIONEXITING_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byAlarmConfidence; //报警置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRecordConfidence; //录像置信度, 0-低,1-较低,2-较高,3-高 + BYTE byRes[60]; //保留 +}NET_DVR_REGIONEXITING_REGION, *LPNET_DVR_REGIONEXITING_REGION; + +typedef struct tagNET_DVR_REGION_EXITING_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byEnableHumanMisinfoFilter;// 启用人体去误报 0-不启用,1-启用 + BYTE byEnableVehicleMisinfoFilter;// 启用车辆去误报 0-不启用,1-启用 + BYTE byRes1[1]; + NET_DVR_REGIONEXITING_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_REGION_EXITING_DETECTION,*LPNET_DVR_REGION_EXITING_DETECTION; + +typedef struct tagNET_DVR_LOITERING_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + BYTE byRes[62]; //保留 +}NET_DVR_LOITERING_REGION, *LPNET_DVR_LOITERING_REGION; + +typedef struct tagNET_DVR_LOITERING_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_LOITERING_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_LOITERING_DETECTION,*LPNET_DVR_LOITERING_DETECTION; + +typedef struct tagNET_DVR_GROUPDETECTION_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE byObjectOccup; //占比,范围[1-100] + BYTE bySensitivityLevel; //灵敏度,范围1-100,默认65 + BYTE byDurationTime; //持续时间,范围1-600秒,默认3秒 + BYTE byFilterTime; //过滤时间,范围1-10分钟(表示,触发报警后,在此时间内不再触发报警) + BYTE byMinTriggerNumber; //最低触发人数,范围2-50人,默认5人 + BYTE byLinkageTime; //联动球机检测时间,范围5-30秒,默认5秒(枪机触发后,联动球机转到触发报警的位置后停留的时间,该配置不区分枪机球机是否同一个账户登录,可以不同) + BYTE byRes[58]; //保留 +}NET_DVR_GROUPDETECTION_REGION, *LPNET_DVR_GROUPDETECTION_REGION; +typedef struct tagNET_DVR_POS_HIDDEN_INFORMATION +{ + char szKeyWord[KEY_WORD_NUM/*3*/][KEY_WORD_LEN/*128*/]; + BYTE byRes[128]; +}NET_DVR_POS_HIDDEN_INFORMATION, *LPNET_DVR_POS_HIDDEN_INFORMATION; + +typedef struct tagNET_DVR_HIDDEN_INFORMATION_CFG +{ + DWORD dwSize; + BYTE byFuncType;//0-Pos功能 + BYTE Res1[3]; + NET_DVR_POS_HIDDEN_INFORMATION struPosInfo; + BYTE byRes[1024]; +}NET_DVR_HIDDEN_INFORMATION_CFG, *LPNET_DVR_HIDDEN_INFORMATION_CFG; + +typedef struct tagNET_DVR_GROUP_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_GROUPDETECTION_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_GROUP_DETECTION,*LPNET_DVR_GROUP_DETECTION; + +typedef struct tagNET_DVR_RAPIDMOVE_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + /* + 检测目标,可支持多选,具体定义为: + 0~所有目标(表示不锁定检测目标,所有目标都将进行检测) + 0x01 ~ 人, + 0x02 ~ 车, + 0x04 ~ 其他, + 该字段支持多选,按位取值,例如3表示1+2. + */ + BYTE byDetectionTarget; + BYTE byRes[62]; //保留 +}NET_DVR_RAPIDMOVE_REGION, *LPNET_DVR_RAPIDMOVE_REGION; + +typedef struct tagNET_DVR_RAPIDMOVE_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_RAPIDMOVE_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_RAPIDMOVE_DETECTION,*LPNET_DVR_RAPIDMOVE_DETECTION; + +typedef struct tagNET_DVR_PARKING_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + BYTE byRes[62]; //保留 +}NET_DVR_PARKING_REGION, *LPNET_DVR_PARKING_REGION; + +typedef struct tagNET_DVR_PARKING_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_PARKING_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_PARKING_DETECTION,*LPNET_DVR_PARKING_DETECTION; + +typedef struct tagNET_DVR_UNATTENDED_BAGGAGE_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + WORD wTimeThreshold;//时间阈值,范围[5-3600], 单位:s + BYTE byTimeThresholdMode;//(只写字段,用于兼容区域)0-字段byTimeThreshold生效,1-字段wTimeThreshold生效 + BYTE byRes[59]; //保留留 +}NET_DVR_UNATTENDED_BAGGAGE_REGION, *LPNET_DVR_UNATTENDED_BAGGAGE_REGION; + +typedef struct tagNET_DVR_UNATTENDED_BAGGAGE_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_UNATTENDED_BAGGAGE_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_UNATTENDED_BAGGAGE_DETECTION,*LPNET_DVR_UNATTENDED_BAGGAGE_DETECTION; + +typedef struct tagNET_DVR_ATTENDED_BAGGAGE_REGION +{ + NET_VCA_POLYGON struRegion;//区域范围 + BYTE bySensitivity; //灵敏度参数,范围[1-100] + BYTE byTimeThreshold; //时间阈值,范围[0-10],单位:s + WORD wTimeThreshold;//时间阈值,范围[5-3600], 单位:s + BYTE byTimeThresholdMode;//(只写字段,用于兼容区域)0-字段byTimeThreshold生效,1-字段wTimeThreshold生效 + BYTE byRes[59]; //保留 +}NET_DVR_ATTENDED_BAGGAGE_REGION, *LPNET_DVR_ATTENDED_BAGGAGE_REGION; + +typedef struct tagNET_DVR_ATTENDED_BAGGAGE_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_ATTENDED_BAGGAGE_REGION struRegion[MAX_REGION_NUM]; + BYTE byRes2[128]; +}NET_DVR_ATTENDED_BAGGAGE_DETECTION,*LPNET_DVR_ATTENDED_BAGGAGE_DETECTION; + +typedef struct tagNET_DVR_REGION_CLIP_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + DWORD dwStreamType; //码流类型:0- 主码流,1- 子码流,2- 第三码流 + BYTE byRes[8]; +}NET_DVR_REGION_CLIP_COND, *LPNET_DVR_REGION_CLIP_COND; + +typedef struct tagNET_DVR_REGION_CLIP_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRes1[3]; + WORD wResolutionWidth; //分辨率的长 + WORD wResolutionHeight; //分辨率的宽 + NET_VCA_POLYGON struRegion[MAX_REGION_NUM]; + BYTE byRes2[64]; +}NET_DVR_REGION_CLIP_CFG, *LPNET_DVR_REGION_CLIP_CFG; + +#define MAX_DIALNUM_LENGTH 32 +typedef struct tagNET_DVR_WIRELESSDIAL_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否启用无线拨号:0-否,1- 是 + BYTE byDialMode; // 0-自动(Auto)、1-手动(Manual),默认自动,手动模式下可设置拨号计划、下线时间、手动拨号 + BYTE byNetworkMode; //0-自动,1-4G优先,2-3G优先,3-手动切换2G,4-手动切换3G,5-手动切换4G,6-有线优先 + BYTE byRes1; + BYTE byDialNum[MAX_DIALNUM_LENGTH]; //拨号号码 + BYTE byUserName[NAME_LEN]; //用户名 + BYTE byPassword[NAME_LEN]; //密码 + BYTE byAPNName[NAME_LEN]; //APN + BYTE byUIMCardNum[NAME_LEN]; //手机号码 + BYTE byVerifProtocol; // 0-自动(Auto),1-CHAP,2-PAP + BYTE byRes2; + WORD wMTU; //MTU + DWORD dwOffineTime; //下线时间,30-65535,单位秒,手动模式下有效 + BYTE byNetAPN[NAME_LEN]; //私有专网APN字段配置 + BYTE byEnabled4G; //是否开启4G功能:0-否,1- 是 + BYTE byEnabledDNS; //是否开启DNS功能:0-否,1- 是 + BYTE byRes3[30]; +}NET_DVR_WIRELESSDIAL_CFG, *LPNET_DVR_WIRELESSDIAL_CFG; + +typedef struct tagNET_DVR_WIRELESSDIAL_SCHEDULE +{ + DWORD dwSize;//结构体大小 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30]; /*布防时间*/ + NET_DVR_SCHEDTIME struHolidayAlarmTime[MAX_TIMESEGMENT_V30]; //假日布防时间段 + BYTE byRes[128]; +}NET_DVR_WIRELESSDIAL_SCHEDULE,*LPNET_DVR_WIRELESSDIAL_SCHEDULE; + +#define MAX_LENGTH_32 32 +typedef struct tagNET_DVR_WIRELESSDIAL_STATUS +{ + DWORD dwSize;//结构体大小 + BYTE byRealtimeMode[MAX_LENGTH_32]; //实时模式(CDMA 1x、EVDO、HYBRID、GSM、GPRS、EDGE、WCDMA、HSDPA、HSUPA、HSPA、TDSCDMA、TD-LTE、FDD-LTE) + BYTE byUIMStatus[MAX_LENGTH_32]; /*UIM状态(UNKNOWN-未知,VALID-有效,NOVALID-无效,ROAM-漫游,NOEXIST-不存在, + WRONGPINCODE-PIN码错误,NONETWORKSERVICE-无网络服务, + ONLYSUPPORTEMERGENCYCALL-网络仅支持紧急呼叫,PINCODELOCKED—PIN码锁定*/ + DWORD dwSignalQuality; //信号质量,1-5 + BYTE byDialStatus[MAX_LENGTH_32]; /*拨号状态码(disconnect-拨号断开,dialing-正在拨号,success-拨号成功,shmError-拨号异常, + certificationFailure-认证失败,invalidDialingCharacters-拨号字符无效, + networkTimeout –网络超时,wirelessModemError—无线模块错误,SIMError---SIM卡错误,,networkError-网络错误,unknown –未知错误)*/ + NET_DVR_IPADDR struIpAddr; //IP地址 + NET_DVR_IPADDR struIPMask; //掩码地址 + NET_DVR_IPADDR struGatewayIPMask; //网关地址 + NET_DVR_IPADDR struDnsServerIpAddr; //DNS地址 + BYTE byRes[256]; +}NET_DVR_WIRELESSDIAL_STATUS,*LPNET_DVR_WIRELESSDIAL_STATUS; + +typedef struct tagNET_DVR_WIRELESSDIAL_CONNECT +{ + DWORD dwSize;//结构体大小 + DWORD dwInterface; //网卡编号,1,2…… + BYTE byEnableConnect; //是否连网,0-断网,1-连网 + BYTE byRes[255]; +}NET_DVR_WIRELESSDIAL_CONNECT_PARAM,*LPNET_DVR_WIRELESSDIAL_CONNECT_PARAM; + + +typedef struct tagNET_DVR_LITESTORAGE +{ + DWORD dwSize;//结构体大小 + BYTE byEnable; /*使能 0-不启用,1-启用*/ + BYTE byStorageTime;/*存储时间 1-30 默认7天*/ + BYTE byLevel; //等级参数,0-无效值(保留),1-低,2-中(默认),3-高; + BYTE byRes; + float fCapacity;//可用SD卡录像空间,只读 + BYTE byDefLowStorageTime;// 低模式下推荐天数 只读 + BYTE byDefMediumStorageTime; // 中模式下推荐天数 只读 + BYTE byDefHighStorageTime; // 高模式下推荐天数 只读 + BYTE byRes1[61]; +}NET_DVR_LITESTORAGE,*LPNET_DVR_LITESTORAGE; + +typedef struct tagNET_DVR_CALIBRATION +{ + DWORD dwSize;//结构体大小 + NET_VCA_POLYGON struRegion;//标定区域 + BYTE byRes[64]; +}NET_DVR_CALIBRATION,*LPNET_DVR_CALIBRATION; + +typedef struct tagNET_DVR_STD_CONFIG +{ + void* lpCondBuffer; //[in]条件参数(结构体格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] lpCondBuffer指向的内存大小 + void* lpInBuffer; //[in]输入参数(结构体格式),设置时不为NULL,获取时为NULL + DWORD dwInSize; //[in] lpInBuffer指向的内存大小 + void* lpOutBuffer; //[out]输出参数(结构体格式),获取时不为NULL,设置时为NULL + DWORD dwOutSize; //[in] lpOutBuffer指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + void* lpXmlBuffer; //[in/out]byDataType = 1时有效,xml格式数据 + DWORD dwXmlSize; //[in/out]lpXmlBuffer指向的内存大小,获取时同时作为输入和输出参数,获取成功后会修改会实际长度,设置时表示实际长度,而不是整个内存大小 + BYTE byDataType; //[in]输入/输出参数类型,0-使用结构体类型lpInBuffer/lpOutBuffer有效,1-使用XML类型lpXmlBuffer有效 + BYTE byRes[23]; +}NET_DVR_STD_CONFIG,*LPNET_DVR_STD_CONFIG; + +typedef struct DWORDtagNET_DVR_STD_ABILITY +{ + void* lpCondBuffer; //[in]条件参数(码字格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] dwCondSize指向的内存大小 + void* lpOutBuffer; //[out]输出参数(XML格式),不为NULL + DWORD dwOutSize; //[in] lpOutBuffer指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + DWORD dwRetSize; //[out]获取到的数据长度(lpOutBuffer或者lpStatusBuffer指向的实际数据长度) + BYTE byRes[32]; //保留字节 +}NET_DVR_STD_ABILITY,*LPNET_DVR_STD_ABILITY; + +typedef struct tagNET_DVR_STD_CONTROL +{ + void* lpCondBuffer; //[in]条件参数(码字格式),例如通道号等.可以为NULL + DWORD dwCondSize; //[in] dwCondSize指向的内存大小 + void* lpStatusBuffer; //[out]返回的状态参数(XML格式),获取成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //[in] lpStatusBuffer指向的内存大小 + void* lpXmlBuffer; //[in/out]byDataType = 1时有效,xml格式数据 + DWORD dwXmlSize; //[in/out]lpXmlBuffer指向的内存大小,获取时同时作为输入和输出参数,获取成功后会修改会实际长度,设置时表示实际长度,而不是整个内存大小 + BYTE byDataType; //[in]输入/输出参数类型,0-使用结构体类型lpCondBuffer有效,1-使用XML类型lpXmlBuffer有效 + BYTE byRes[55]; +}NET_DVR_STD_CONTROL, *LPNET_DVR_STD_CONTROL; + +#define MAX_FILE_PATH_LEN 256 //文件路径长度 +typedef struct tagNET_DVR_MIME_UNIT +{ + //格式如下 + //Content-Disposition: form-data; name="upload"; filename="C:\Users\test\Desktop\11.txt" + //Content-Type: text/plain + char szContentType[32]; //对应Content-Type + char szName[MAX_FILE_PATH_LEN]; //对应name字段 + char szFilename[MAX_FILE_PATH_LEN]; //对应filename字段 + DWORD dwContentLen; //Content的长度,大小限制512K以内 + char* pContent; //数据指针 + BYTE bySelfRead; // 0-外界传入文件 1-内部读取数据(通过szFilename传递完整路径),下发数据时该字段生效,获取数据时无效 + BYTE byRes[15]; +}NET_DVR_MIME_UNIT, *LPNET_DVR_MIME_UNIT; + +typedef struct tagNET_DVR_MIME_DATA +{ + BYTE byContentType; //文件类型 0-无效, 1-json, 2-bmp + BYTE byRes1[3]; //保留 + void *lpContent; //文件内容,如果指针为空,表示无文件 + DWORD dwContentSize; //文件内容大小,大小限制为512k以内 + char sContentID[32]; //表单格式中Content-ID头域的值,与ISAPI报文中特定节点值一一对应 + BYTE byRes[512]; //保留 +}NET_DVR_MIME_DATA, *LPNET_DVR_MIME_DATA; + +typedef struct tagNET_DVR_XML_CONFIG_INPUT +{ + DWORD dwSize; //结构体大小 + void* lpRequestUrl; //请求信令,字符串格式 + DWORD dwRequestUrlLen; //请求信令长度,字符串长度 + void* lpInBuffer; //输入参数缓冲区,XML格式 + DWORD dwInBufferSize; //输入参数缓冲区大小 + DWORD dwRecvTimeOut; //接收超时时间,单位:ms,填0则使用默认超时5s + BYTE byForceEncrpt; //是否强制加密,0-否,1-是 + BYTE byNumOfMultiPart; //0-无效,其他值表示报文分段个数,非零时lpInBuffer传入的是NET_DVR_MIME_UNIT结构体数组的指针,该值即代表结构体个数 + BYTE byMIMEType; //0-无效,1-表示使用NET_DVR_MIME_UNIT结构体,2-表示使用NET_DVR_MIME_DATA结构体,该字段仅在byNumOfMultiPart有效时生效 + BYTE byRes1; + DWORD dwSendTimeOut; //发送超时时间,单位:ms,填0则使用默认超时5s + BYTE byRes[24]; +}NET_DVR_XML_CONFIG_INPUT, *LPNET_DVR_XML_CONFIG_INPUT; + +typedef struct tagNET_DVR_XML_CONFIG_OUTPUT +{ + DWORD dwSize; //结构体大小 + void* lpOutBuffer; //输出参数缓冲区,XML格式 + DWORD dwOutBufferSize; //输出参数缓冲区大小(内存大小) + DWORD dwReturnedXMLSize; //实际输出的XML内容大小 + void* lpStatusBuffer; //返回的状态参数(XML格式),获取命令成功时不会赋值,如果不需要,可以置NULL + DWORD dwStatusSize; //状态缓冲区大小(内存大小) +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + void* lpDataBuffer; //当byNumOfMultiPart>0时,配合报文结构体使用,存放透传数据内容,通过NET_DVR_MIME_UNIT的dwContentLen偏移访问 +#else + void* lpDataBuffer; //当byNumOfMultiPart>0时,配合报文结构体使用,存放透传数据内容,通过NET_DVR_MIME_UNIT的dwContentLen偏移访问 + BYTE byRes2[4]; +#endif + BYTE byNumOfMultiPart; //0-无效。 其他值表示报文分段个数,非零时lpInBuffer传入的是NET_DVR_MIME_UNIT结构体数组的指针,该值即代表结构体个数。 + BYTE byRes[23]; +}NET_DVR_XML_CONFIG_OUTPUT, *LPNET_DVR_XML_CONFIG_OUTPUT; + +typedef struct tagNET_DVR_FORM_DATA_CFG +{ + DWORD dwSize; //结构体大小 + void *lpBuffer; //数据缓冲区,指向NET_DVR_MIME_DATA结构体数组 + DWORD dwBufferSize; //数据缓冲区大小 + BYTE byNumOfMultiPart; // 0-无效,其他值表示报文分段个数,非零时lpBuffer传入的是NET_DVR_MIME_DATA结构体数组的指针,该值即代表结构体个数,限制最多为3个 + BYTE byRes[67]; //保留 +}NET_DVR_FORM_DATA_CFG, *LPNET_DVR_FORM_DATA_CFG; + +typedef struct tagNET_DVR_JSON_DATA_CFG +{ + DWORD dwSize; //结构体大小 + void *lpJsonData; //JSON报文 + DWORD dwJsonDataSize; //JSON报文大小 + void *lpPicData; //图片内容 + DWORD dwPicDataSize; //图片内容大小 + DWORD dwInfraredFacePicSize; //红外人脸图片数据大小,等于0时,代表无人脸图片数据(当JSON报文为当ResponseStatus(JSON)报文时,该字段无意义;当Inbound Data(JSON)报文中没有infraredFaceURL时,该字段需要带上二进制图片内容) + void* lpInfraredFacePicBuffer; //红外人脸图片数据缓存 + BYTE byRes[248]; //保留 +}NET_DVR_JSON_DATA_CFG, *LPNET_DVR_JSON_DATA_CFG; + +typedef struct tagNET_DVR_SIMPLE_DAYTIME +{ + BYTE byHour; //时 + BYTE byMinute; //分 + BYTE bySecond; //秒 + BYTE byRes; +}NET_DVR_SIMPLE_DAYTIME, *LPNET_DVR_SIMPLE_DAYTIME; + +typedef struct tagNET_DVR_TIME_SEGMENT +{ + NET_DVR_SIMPLE_DAYTIME struBeginTime; //开始时间点 + NET_DVR_SIMPLE_DAYTIME struEndTime; //结束时间点 +}NET_DVR_TIME_SEGMENT, *LPNET_DVR_TIME_SEGMENT; + +typedef struct tagNET_DVR_SINGLE_PLAN_SEGMENT +{ + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byDoorStatus; //门状态模式(梯控模式),0-无效,1-休眠,2-常开状态(自由),3-常闭状态(禁用),4-普通状态(门状态计划使用) + BYTE byVerifyMode; //验证方式,0-无效,1-刷卡,2-刷卡+密码(读卡器验证方式计划使用),3-刷卡,4-刷卡或密码(读卡器验证方式计划使用), 5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码(无先后顺序),10-人脸或指纹或刷卡或密码,11-人脸+指纹, + //12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹, + //27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码,30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜,34-人脸或刷卡或密码或虹膜 + BYTE byRes[5]; + NET_DVR_TIME_SEGMENT struTimeSegment; //时间段参数 +}NET_DVR_SINGLE_PLAN_SEGMENT, *LPNET_DVR_SINGLE_PLAN_SEGMENT; + +typedef struct tagNET_DVR_WEEK_PLAN_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byRes1[3]; + NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_DAYS][MAX_TIMESEGMENT_V30]; //周计划参数 + BYTE byRes2[16]; +}NET_DVR_WEEK_PLAN_CFG, *LPNET_DVR_WEEK_PLAN_CFG; + +typedef struct tagNET_DVR_HOLIDAY_PLAN_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byRes1[3]; + NET_DVR_DATE struBeginDate; //假日开始日期 + NET_DVR_DATE struEndDate; //假日结束日期 + NET_DVR_SINGLE_PLAN_SEGMENT struPlanCfg[MAX_TIMESEGMENT_V30]; //时间段参数 + BYTE byRes2[16]; +}NET_DVR_HOLIDAY_PLAN_CFG, *LPNET_DVR_HOLIDAY_PLAN_CFG; + +typedef struct tagNET_DVR_HOLIDAY_PLAN_COND +{ + DWORD dwSize; + DWORD dwHolidayPlanNumber; //假日计划编号 + WORD wLocalControllerID; //就地控制器序号[1,64] + BYTE byRes[106]; +}NET_DVR_HOLIDAY_PLAN_COND, *LPNET_DVR_HOLIDAY_PLAN_COND; + +typedef struct tagNET_DVR_WEEK_PLAN_COND +{ + DWORD dwSize; + DWORD dwWeekPlanNumber; //周计划编号 + WORD wLocalControllerID; //就地控制器序号[1,64] + BYTE byRes[106]; +}NET_DVR_WEEK_PLAN_COND, *LPNET_DVR_WEEK_PLAN_COND; + +typedef struct tagNET_DVR_HOLIDAY_GROUP_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,1-启用,0-不启用 + BYTE byRes1[3]; + BYTE byGroupName[HOLIDAY_GROUP_NAME_LEN]; //假日组名称 + DWORD dwHolidayPlanNo[MAX_HOLIDAY_PLAN_NUM]; //假日计划编号,就前填充,遇0无效 + BYTE byRes2[32]; +}NET_DVR_HOLIDAY_GROUP_CFG, *LPNET_DVR_HOLIDAY_GROUP_CFG; + +typedef struct tagNET_DVR_HOLIDAY_GROUP_COND +{ + DWORD dwSize; + DWORD dwHolidayGroupNumber; //假日组编号 + WORD wLocalControllerID; //就地控制器序号[1,64] + BYTE byRes[106]; +}NET_DVR_HOLIDAY_GROUP_COND, *LPNET_DVR_HOLIDAY_GROUP_COND; + +typedef struct tagNET_DVR_PLAN_TEMPLATE +{ + DWORD dwSize; + BYTE byEnable; //是否启用,1-启用,0-不启用 + BYTE byRes1[3]; + BYTE byTemplateName[TEMPLATE_NAME_LEN]; //模板名称 + DWORD dwWeekPlanNo; //周计划编号,0为无效 + DWORD dwHolidayGroupNo[MAX_HOLIDAY_GROUP_NUM]; //假日组编号,就前填充,遇0无效 + BYTE byRes2[32]; +}NET_DVR_PLAN_TEMPLATE, *LPNET_DVR_PLAN_TEMPLATE; + +typedef struct tagNET_DVR_PLAN_TEMPLATE_COND +{ + DWORD dwSize; + DWORD dwPlanTemplateNumber; //计划模板编号,从1开始,最大值从门禁能力集获取 + WORD wLocalControllerID; //就地控制器序号[1,64],0无效 + BYTE byRes[106]; +}NET_DVR_PLAN_TEMPLATE_COND, *LPNET_DVR_PLAN_TEMPLATE_COND; + +typedef struct tagNET_DVR_DOOR_STATUS_PLAN +{ + DWORD dwSize; + DWORD dwTemplateNo; //计划模板编号,为0表示取消关联,恢复默认状态(普通状态) + BYTE byRes[64]; +}NET_DVR_DOOR_STATUS_PLAN, *LPNET_DVR_DOOR_STATUS_PLAN; + +typedef struct tagNET_DVR_CARD_READER_PLAN +{ + DWORD dwSize; + DWORD dwTemplateNo; //计划模板编号,为0表示取消关联,恢复默认状态(刷卡开门) + BYTE byRes[64]; +}NET_DVR_CARD_READER_PLAN, *LPNET_DVR_CARD_READER_PLAN; + +typedef struct _tagNET_DVR_GROUP_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0-不启用,1-启用 + BYTE byRes1[3]; + NET_DVR_VALID_PERIOD_CFG struValidPeriodCfg; //群组有效期参数 + BYTE byGroupName[GROUP_NAME_LEN]; //群组名称 + BYTE byRes2[32]; +}NET_DVR_GROUP_CFG, *LPNET_DVR_GROUP_CFG; + +typedef struct tagNET_DVR_GROUP_COMBINATION_INFO +{ + BYTE byEnable; //是否启用该群组组合 + BYTE byMemberNum; //刷卡成员数量 + BYTE bySequenceNo; //群组刷卡次序号 + BYTE byRes; + DWORD dwGroupNo; //群组编号,0xffffffff表示远程开门,0xfffffffe表示超级密码 +}NET_DVR_GROUP_COMBINATION_INFO, *LPNET_DVR_GROUP_COMBINATION_INFO; + +typedef struct tagNET_DVR_MULTI_CARD_GROUP_CFG +{ + BYTE byEnable; //是否启用该多重卡组参数,0-不启用,1-启用 + BYTE byEnableOfflineVerifyMode; //是否启用主机离线时验证方式(超级密码代替远程开门) + BYTE byRes1[2]; + DWORD dwTemplateNo; //启用多重卡功能的计划模板编号 + NET_DVR_GROUP_COMBINATION_INFO struGroupCombination[GROUP_COMBINATION_NUM]; //群组组合参数 +}NET_DVR_MULTI_CARD_GROUP_CFG, *LPNET_DVR_MULTI_CARD_GROUP_CFG; + +typedef struct tagNET_DVR_MULTI_CARD_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用多重卡功能,0-不启用,1-启用 + BYTE bySwipeIntervalTimeout; //刷卡间隔超时时间,1-255s,默认10s + BYTE byRes1[2]; + NET_DVR_MULTI_CARD_GROUP_CFG struGroupCfg[MULTI_CARD_GROUP_NUM]; //群组刷卡参数 + BYTE byRes2[32]; +}NET_DVR_MULTI_CARD_CFG, *LPNET_DVR_MULTI_CARD_CFG; + +typedef struct tagNET_DVR_GROUP_COMBINATION_INFO_V50 +{ + BYTE byEnable; //是否启用该群组组合 + BYTE byMemberNum; //刷卡成员数量 + BYTE bySequenceNo; //群组刷卡次序号 + BYTE byRes; + DWORD dwGroupNo; //群组编号,0xffffffff表示远程开门,0xfffffffe表示超级密码 +}NET_DVR_GROUP_COMBINATION_INFO_V50, *LPNET_DVR_GROUP_COMBINATION_INFO_V50; + +typedef struct tagNET_DVR_MULTI_CARD_GROUP_CFG_V50 +{ + BYTE byEnable; //是否启用该多重卡组参数,0-不启用,1-启用 + BYTE byEnableOfflineVerifyMode; //是否启用主机离线时验证方式(超级密码代替远程开门),1-启用,0-不启用 + BYTE byRes1[2]; + DWORD dwTemplateNo; //启用多重卡功能的计划模板编号 + NET_DVR_GROUP_COMBINATION_INFO_V50 struGroupCombination[GROUP_COMBINATION_NUM]; //群组组合参数 +}NET_DVR_MULTI_CARD_GROUP_CFG_V50, *LPNET_DVR_MULTI_CARD_GROUP_CFG_V50; + +typedef struct tagNET_DVR_MULTI_CARD_CFG_V50 +{ + DWORD dwSize; + BYTE byEnable; //是否启用多重卡功能,0-不启用,1-启用 + BYTE bySwipeIntervalTimeout; //刷卡间隔超时时间,1-255s,默认10s + BYTE byRes1[2]; + NET_DVR_MULTI_CARD_GROUP_CFG_V50 struGroupCfg[NET_SDK_MULTI_CARD_GROUP_NUM_20]; //群组刷卡参数 + BYTE byRes2[32]; +}NET_DVR_MULTI_CARD_CFG_V50, *LPNET_DVR_MULTI_CARD_CFG_V50; + +//2014-12-03 T1测试状态结构体 +typedef struct +{ + DWORD dwSize;//结构体大小 + WORD wPort; //端口号 + //(设备通过端口控制(端口号设备端固定,上层不做配置),开始单独socket连接,单独交互T1测试内容,走XML格式) + //0- 关闭(关闭设备的连接线程,释放端口),1- 开启(设备内部单独起连接线程) + BYTE byPortState; + BYTE byRes[61]; //保留 +}NET_DVR_T1TEST_PARAMCFG,*LPNET_DVR_T1TEST_PARAMCFG; + +#define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 +#define CARD_PARAM_VALID 0x00000002 //有效期参数 +#define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 +#define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 +#define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 +#define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 +#define CARD_PARAM_GROUP 0x00000040 //所属群组参数 +#define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 +#define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 +#define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 +#define CARD_PARAM_EMPLOYEE_NO 0x00000400 //工号 +#define CARD_PARAM_NAME 0x00000800 //姓名 +#define CARD_PARAM_DEPARTMENT_NO 0x00001000 //部门编号 +#define CARD_SCHEDULE_PLAN_NO 0x00002000 //排班计划编号 +#define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //排班计划类型 +#define CARD_ROOM_NUMBER 0x00008000 //房间号 +#define CARD_SIM_NO 0x00010000 //SIM卡号(手机号) +#define CARD_FLOOR_NUMBER 0x00020000 //楼层号 +#define CARD_USER_TYPE 0x00040000 //用户类型 + +typedef struct tagNET_DVR_ANTI_SNEAK_CFG +{ + DWORD dwSize; + BYTE byEnable; //使能反潜回功能,1-使能,0-不使能 + BYTE byRes1[3]; + DWORD dwStartCardReaderNo; //反潜回起始读卡器编号 + BYTE byRes2[64]; +}NET_DVR_ANTI_SNEAK_CFG, *LPNET_DVR_ANTI_SNEAK_CFG; + +typedef struct tagNET_DVR_CARD_READER_ANTI_SNEAK_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 + BYTE byRes1[3]; + DWORD dwFollowUpCardReader[MAX_SNEAK_PATH_NODE]; //后续读卡器编号,为0表示不关注起始读卡器编号 + BYTE byRes2[32]; +}NET_DVR_CARD_READER_ANTI_SNEAK_CFG, *LPNET_DVR_CARD_READER_ANTI_SNEAK_CFG; + +typedef struct tagNET_DVR_PHONE_DOOR_RIGHT_CFG +{ + DWORD dwSize; + BYTE byOpenRight[MAX_DOOR_NUM_256]; //按数组表示,是否有开门权限,-无权限,-有权限 + BYTE byCloseRight[MAX_DOOR_NUM_256]; //按数组表示,是否有关门权限,-无权限,-有权限 + BYTE byNormalOpenRight[MAX_DOOR_NUM_256]; //按数组表示,是否有常开权限,-无权限,-有权限 + BYTE byNormalCloseRight[MAX_DOOR_NUM_256]; //按数组表示,是否有常闭权限,-无权限,-有权限 + BYTE byArmRight[MAX_ALARMHOST_ALARMIN_NUM]; //按数组表示,是否有布防权限,-无权限,-有权限 + BYTE byDisarmRight[MAX_ALARMHOST_ALARMIN_NUM]; //按数组表示,是否有撤防权限,-无权限,-有权限 + BYTE byRes[256]; //保留 +}NET_DVR_PHONE_DOOR_RIGHT_CFG,*LPNET_DVR_PHONE_DOOR_RIGHT_CFG; + +typedef struct tagNET_DVR_MULTI_DOOR_INTERLOCK_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用多门互锁功能,1-启用,0-不启用 + BYTE byRes1[3]; + DWORD dwMultiDoorGroup[MAX_MULTI_DOOR_INTERLOCK_GROUP][MAX_INTER_LOCK_DOOR_NUM]; //多门互锁组参数,取值为门编号 + BYTE byRes2[64]; +}NET_DVR_MULTI_DOOR_INTERLOCK_CFG, *LPNET_DVR_MULTI_DOOR_INTERLOCK_CFG; + +typedef struct tagNET_DVR_CARD_READER_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byCardReaderType; //读卡器类型,1-DS-K110XM/MK/C/CK,2-DS-K192AM/AMP,3-DS-K192BM/BMP,4-DS-K182AM/AMP,5-DS-K182BM/BMP,6-DS-K182AMF/ACF,7-韦根或485不在线,8- DS-K1101M/MK,9- DS-K1101C/CK,10- DS-K1102M/MK/M-A + //11- DS-K1102C/CK,12- DS-K1103M/MK,13- DS-K1103C/CK,14- DS-K1104M/MK,15- DS-K1104C/CK,16- DS-K1102S/SK/S-A,17- DS-K1102G/GK,18- DS-K1100S-B,19- DS-K1102EM/EMK,20- DS-K1102E/EK, + //21- DS-K1200EF,22- DS-K1200MF,23- DS-K1200CF,24- DS-K1300EF,25- DS-K1300MF,26- DS-K1300CF,27- DS-K1105E,28- DS-K1105M,29- DS-K1105C,30- DS-K182AMF,31- DS-K196AMF,32-DS-K194AMP + //33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C,35-DS-K1T105E/E-C/M/M-C/C/C-C,36-DS-K1T803F/MF/SF/EF,37-DS-K1A801F/MF/SF/EF,38-DS-K1107M/MK,39-DS-K1107E/EK, + //40-DS-K1107S/SK,41-DS-K1108M/MK,42-DS-K1108E/EK,43-DS-K1108S/SK,44-DS-K1200F,45-DS-K1S110-I,46-DS-K1T200M-PG/PGC,47-DS-K1T200M-PZ/PZC,48-DS-K1109H + BYTE byOkLedPolarity; //OK LED极性,0-阴极,1-阳极 + BYTE byErrorLedPolarity; //Error LED极性,0-阴极,1-阳极 + BYTE byBuzzerPolarity; //蜂鸣器极性,0-阴极,1-阳极 + BYTE bySwipeInterval; //重复刷卡间隔时间,单位:秒 + BYTE byPressTimeout; //按键超时时间,单位:秒 + BYTE byEnableFailAlarm; //是否启用读卡失败超次报警,0-不启用,1-启用 + BYTE byMaxReadCardFailNum; //最大读卡失败次数 + BYTE byEnableTamperCheck; //是否支持防拆检测,0-disable ,1-enable + BYTE byOfflineCheckTime; //掉线检测时间 单位秒 + BYTE byFingerPrintCheckLevel; //指纹识别等级,1-1/10误认率,2-1/100误认率,3-1/1000误认率,4-1/10000误认率,5-1/100000误认率,6-1/1000000误认率,7-1/10000000误认率,8-1/100000000误认率,9-3/100误认率,10-3/1000误认率,11-3/10000误认率,12-3/100000误认率,13-3/1000000误认率,14-3/10000000误认率,15-3/100000000误认率,16-Automatic Normal,17-Automatic Secure,18-Automatic More Secure + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 + BYTE byRes1; + WORD wLocalControllerID; //只读,就地控制器序号,1-64,0代表未注册 + WORD wLocalControllerReaderID; //只读,就地控制器的读卡器ID,0代表未注册 + WORD wCardReaderChannel; //只读,读卡器通信通道号,0韦根或离线,1-RS485A,2-RS485B + BYTE byRes[16]; +}NET_DVR_CARD_READER_CFG, *LPNET_DVR_CARD_READER_CFG; + +typedef struct tagNET_DVR_CARD_READER_CFG_V50 +{ + DWORD dwSize; + BYTE byEnable; //是否使能,1-使能,0-不使能 + BYTE byCardReaderType; //读卡器类型,1-DS-K110XM/MK/C/CK,2-DS-K192AM/AMP,3-DS-K192BM/BMP,4-DS-K182AM/AMP,5-DS-K182BM/BMP,6-DS-K182AMF/ACF,7-韦根或485不在线,8- DS-K1101M/MK,9- DS-K1101C/CK,10- DS-K1102M/MK/M-A,11- DS-K1102C/CK,12- DS-K1103M/MK,13- DS-K1103C/CK,14- DS-K1104M/MK,15- DS-K1104C/CK,16- DS-K1102S/SK/S-A,17- DS-K1102G/GK,18- DS-K1100S-B,19- DS-K1102EM/EMK,20- DS-K1102E/EK,21- DS-K1200EF,22- DS-K1200MF,23- DS-K1200CF,24- DS-K1300EF,25- DS-K1300MF,26- DS-K1300CF,27- DS-K1105E,28- DS-K1105M,29- DS-K1105C,30- DS-K182AMF,31- DS-K196AMF,32-DS-K194AMP,33-DS-K1T200EF/EF-C/MF/MF-C/CF/CF-C,34-DS-K1T300EF/EF-C/MF/MF-C/CF/CF-C,35-DS-K1T105E/E-C/M/M-C/C/C-C,36-DS-K1T803F/F-M/F-S/F-E,37-DS-K1A801F/F-M/F-S/F-E,38-DS-K1107M/MK,39-DS-K1107E/EK,40-DS-K1107S/SK,41-DS-K1108M/MK,42-DS-K1108E/EK,43-DS-K1108S/SK,44-DS-K1200F,45-DS-K1S110-I,46-DS-K1T200M-PG/PGC,47-DS-K1T200M-PZ/PZC,48-DS-K1109H + BYTE byOkLedPolarity; //OK LED极性,0-阴极,1-阳极 + BYTE byErrorLedPolarity; //Error LED极性,0-阴极,1-阳极 + BYTE byBuzzerPolarity; //蜂鸣器极性,0-阴极,1-阳极 + BYTE bySwipeInterval; //重复刷卡间隔时间,单位:秒 + BYTE byPressTimeout; //按键超时时间,单位:秒 + BYTE byEnableFailAlarm; //是否启用读卡失败超次报警,0-不启用,1-启用 + BYTE byMaxReadCardFailNum; //最大读卡失败次数 + BYTE byEnableTamperCheck; //是否支持防拆检测,0-disable ,1-enable + BYTE byOfflineCheckTime; //掉线检测时间 单位秒 + BYTE byFingerPrintCheckLevel; //指纹识别等级,1-1/10误认率,2-1/100误认率,3-1/1000误认率,4-1/10000误认率,5-1/100000误认率,6-1/1000000误认率,7-1/10000000误认率,8-1/100000000误认率,9-3/100误认率,10-3/1000误认率,11-3/10000误认率,12-3/100000误认率,13-3/1000000误认率,14-3/10000000误认率,15-3/100000000误认率,16-Automatic Normal,17-Automatic Secure,18-Automatic More Secure(目前门禁不支持) + BYTE byUseLocalController; //只读,是否连接在就地控制器上,0-否,1-是 + BYTE byRes1; + WORD wLocalControllerID; //只读,就地控制器序号, byUseLocalController=1时有效,1-64,0代表未注册 + WORD wLocalControllerReaderID; //只读,就地控制器的读卡器ID,byUseLocalController=1时有效,0代表未注册 + WORD wCardReaderChannel; //只读,读卡器通信通道号,byUseLocalController=1时有效,0韦根或离线,1-RS485A,2-RS485B + BYTE byFingerPrintImageQuality; //指纹图像质量,0-无效,1-低质量(V1),2-中等质量(V1),3-高质量(V1),4-最高质量(V1),5-低质量(V2),6-中等质量(V2),7-高质量(V2),8-最高质量(V2) + BYTE byFingerPrintContrastTimeOut; //指纹对比超时时间,0-无效,范围1-20代表:1s-20s,0xff-无限大 + BYTE byFingerPrintRecogizeInterval; //指纹连续识别间隔,0-无效,范围1-10代表:1s-10s,0xff-无延迟 + BYTE byFingerPrintMatchFastMode; //指纹匹配快速模式,0-无效,范围1-5代表:快速模式1-快速模式5,0xff-自动 + BYTE byFingerPrintModuleSensitive; //指纹模组灵敏度,0-无效,范围1-8代表:灵敏度级别1-灵敏度级别8 + BYTE byFingerPrintModuleLightCondition; //指纹模组光线条件,0-无效,1-室外,2-室内 + BYTE byFaceMatchThresholdN; //人脸比对阀值,范围0-100 + BYTE byFaceQuality; //人脸质量,范围0-100 + BYTE byFaceRecogizeTimeOut; //人脸识别超时时间,范围1-20代表:1s-20s,0xff-无限大 + BYTE byFaceRecogizeInterval; //人脸连续识别间隔,0-无效,范围1-10代表:1s-10s,0xff-无延迟 + WORD wCardReaderFunction; //只读,读卡器种类,按位表示:第1位-指纹,第二位-人脸,第三位-指静脉,第四位-虹膜 + BYTE byCardReaderDescription[CARD_READER_DESCRIPTION]; //读卡器描述 + WORD wFaceImageSensitometry; //只读,人脸图像曝光度,范围0-65535 + BYTE byLivingBodyDetect; //真人检测,0-无效,1-不启用,2-启用 + BYTE byFaceMatchThreshold1; //人脸1:1匹配阀值,范围0-100 + WORD wBuzzerTime; //蜂鸣时间,范围0s-5999s(0-代表长鸣) + BYTE byFaceMatch1SecurityLevel; //人脸1:1识别安全等级,0-无效,1-一般,2-较强,3-极强 + BYTE byFaceMatchNSecurityLevel; //人脸1:N识别安全等级,0-无效,1-一般,2-较强,3-极强 + BYTE byEnvirMode;//人脸识别环境模式,0-无效,1-室内,2-其他; + BYTE byLiveDetLevelSet;//活体检测阈值等级设置,0-无效,1-低,2-中,3-高; + BYTE byLiveDetAntiAttackCntLimit;//活体检测防攻击次数, 0-无效,1-255次(客户端、设备统一次数限制,根据能力级限制); + BYTE byEnableLiveDetAntiAttack;//活体检测防攻击使能,0-无效,1-不启用,2-启用 + BYTE bySupportDelFPByID;//只读,读卡器是否支持按手指ID删除指纹,0-无效,1-不支持,2-支持 + BYTE byFaceContrastMotionDetLevel;//人脸比对时移动侦测级别,0-无效,1-低,2-中,3-高,0xff-禁用 + BYTE byDayFaceMatchThresholdN; //白天人脸1:N匹配阀值,范围0-100 + BYTE byNightFaceMatchThresholdN; //夜晚人脸1:N匹配阀值,范围0-100 + BYTE byFaceRecogizeEnable; //人脸识别使能:0-无效,1-开启,2-关闭 + BYTE byBlockListMatchThreshold; //禁止名单匹配阀值,范围0-100 + BYTE byRes3; + BYTE byDefaultVerifyMode; //只读,读卡器默认验证方式(出厂默认),1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码 + DWORD dwFingerPrintCapacity;//只读,指纹容量 + DWORD dwFingerPrintNum;//只读,已存在指纹数量 + BYTE byEnableFingerPrintNum;//只读,指纹容量使能:0-不使能,1-使能(只有当该字段为1-使能时,dwFingerPrintCapacity和dwFingerPrintNum才有效) + BYTE byEnableReverseCardNo; //卡号翻转使能 0-不使能1-使能 + BYTE byRes2[2]; + DWORD dwIndependSwipeIntervals;//人员认证间隔(每个人单独计算间隔,区别于重复认证间隔); + BYTE byRes[224]; +}NET_DVR_CARD_READER_CFG_V50, *LPNET_DVR_CARD_READER_CFG_V50; + +typedef struct tagNET_DVR_FAILED_FACE_COND +{ + DWORD dwSize; + BYTE byRes[128]; //保留 +}NET_DVR_FAILED_FACE_COND, *LPNET_DVR_FAILED_FACE_COND; + +typedef struct tagNET_DVR_FAILED_FACE_INFO +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byErrorCode; //建模失败详细错误,0-无效,1-读取文件失败,2-打开文件失败,3-内存不足,4-注册人脸失败,5-眼间距太小,6-卡权限不存在 + BYTE byRes1[3]; + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes[92]; +}NET_DVR_FAILED_FACE_INFO, *LPNET_DVR_FAILED_FACE_INFO; + +typedef struct tagNET_DVR_FACE_PARAM_COND +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数可不设置) + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //人脸的读卡器是否有效,0-无效,1-有效(设置时该参数可不设置) + DWORD dwFaceNum; //设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + BYTE byFaceID; //人脸编号,有效值范围为1-2 0xff表示该卡所有人脸(设置时该参数可不设置) + BYTE byRes[127]; //保留 +}NET_DVR_FACE_PARAM_COND, *LPNET_DVR_FACE_PARAM_COND; + +typedef struct tagNET_DVR_FACE_PARAM_CFG +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸数据长度,设备端返回的即加密后的数据 + char* pFaceBuffer; //人脸数据指针 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发人脸的读卡器,按数组表示,从低位到高位表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFaceID; //人脸编号,有效值范围为1-2 + BYTE byFaceDataType; //人脸数据类型:0-模板(默认),1-图片 + BYTE byRes[126]; +}NET_DVR_FACE_PARAM_CFG, *LPNET_DVR_FACE_PARAM_CFG; + +typedef struct tagNET_DVR_FACE_PARAM_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //人脸读卡器状态,按字节表示,0-失败,1-成功,2-重试或人脸质量差,3-内存已满(人脸数据满),4-已存在该人脸,5-非法人脸ID + //,6-算法建模失败,7-未下发卡权限,8-未定义(保留),9-人眼间距小距小,10-图片数据长度小于1KB,11-图片格式不符(png/jpg/bmp),12-图片像素数量超过上限,13-图片像素数量低于下限,14-图片信息校验失败,15-图片解码失败,16-人脸检测失败,17-人脸评分失败 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为4时,表示已存在人脸对应的卡号 + DWORD dwCardReaderNo; //纹读卡器编号,可用于下发错误返回 + BYTE byTotalStatus; //下发总的状态,0-当前人脸未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) + BYTE byFaceID; //人脸编号,有效值范围为1-2 + BYTE byRes[130]; +}NET_DVR_FACE_PARAM_STATUS, *LPNET_DVR_FACE_PARAM_STATUS; + +typedef struct tagNET_DVR_FACE_PARAM_BYCARD +{ + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //人脸的读卡器信息,按数组表示 + BYTE byFaceID[MAX_FACE_NUM]; //需要删除的人脸编号,按数组下标,值表示0-不删除,1-删除该人脸 + BYTE byRes1[42]; //保留 +}NET_DVR_FACE_PARAM_BYCARD, *LPNET_DVR_FACE_PARAM_BYCARD; + +typedef struct tagNET_DVR_FACE_PARAM_BYREADER +{ + DWORD dwCardReaderNo; //按值表示,人脸读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的人脸信息,0-按卡号删除人脸信息,1-删除所有卡的人脸信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byRes[548]; //保留 +}NET_DVR_FACE_PARAM_BYREADER, *LPNET_DVR_FACE_PARAM_BYREADER; + +typedef union tagNET_DVR_DEL_FACE_PARAM_MODE +{ + BYTE uLen[588]; //联合体长度 + NET_DVR_FACE_PARAM_BYCARD struByCard; //按卡号的方式删除 + NET_DVR_FACE_PARAM_BYREADER struByReader; //按读卡器的方式删除 +}NET_DVR_DEL_FACE_PARAM_MODE, *LPNET_DVR_DEL_FACE_PARAM_MODE; + +typedef struct tagNET_DVR_FACE_PARAM_CTRL +{ + DWORD dwSize; + BYTE byMode; //删除方式,0-按卡号方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FACE_PARAM_MODE struProcessMode; //处理方式 + BYTE byRes[64]; //保留 +}NET_DVR_FACE_PARAM_CTRL, *LPNET_DVR_FACE_PARAM_CTRL; + +typedef struct tagNET_DVR_LOCAL_CONTROLLER_STATUS_COND +{ + DWORD dwSize; + WORD wLocalControllerID; //就地控制器序号(分控器序号),为0表示所有 + BYTE byRes[306]; +}NET_DVR_LOCAL_CONTROLLER_STATUS_COND, *LPNET_DVR_LOCAL_CONTROLLER_STATUS_COND; + +typedef struct tagNET_DVR_LOCAL_CONTROLLER_STATUS +{ + DWORD dwSize; + WORD wLocalControllerID; //就地控制器序号(分控器序号) + BYTE byLocalAntiDismantleStatus; //就地控制器防拆状态,0-关闭,1-开启 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byFireAlarm; //消防报警,0-正常,1-短接报警,2-断开报警 + BYTE bySerialNumber[SERIALNO_LEN]; //设备序列号 + BYTE byMagneticStatus[MAX_DOOR_NUM];// 门磁状态:0正常关闭,1正常开启,2破坏短路报警,3破坏断路报警,4异常报警 + BYTE byDoorLockStatus[MAX_DOOR_NUM]; //门锁状态,0正常关闭,1正常开启,2破坏短路报警,3破坏断路报警,4异常报警 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //读卡器在线状态,0-不在线,1-在线 + WORD wLocalControllerStatus; //只读,就地控制器在线状态(分控器在线状态):0-离线,1-网络在线,2-环路1上的RS485串口1,3-环路1上的RS485串口2,4-环路2上的RS485串口1,5-环路2上的RS485串口2,6-环路3上的RS485串口1,7-环路3上的RS485串口2,8-环路4上的RS485串口1,9-环路4上的RS485串口2(只读) + BYTE byRes2[122]; +}NET_DVR_LOCAL_CONTROLLER_STATUS, *LPNET_DVR_LOCAL_CONTROLLER_STATUS; + +typedef struct tagNET_DVR_ONLINE_LOCAL_CONTROLLER_CFG +{ + DWORD dwSize; + BYTE byLocalControllerName[LOCAL_CONTROLLER_NAME_LEN]; //就地控制器名称 + WORD wLocalControllerID; //就地控制器序号 + WORD wDevPort; // 设备端口号 + NET_DVR_IPADDR struDevIP; // 设备IP地址 + NET_DVR_IPADDR struSubnetMask; // 设备子网掩码 + NET_DVR_IPADDR struGateway; // 设备网关 + BYTE bySearchProgress; //搜索进度,0表示未开始,100表示同步完成 + BYTE byEffectData;//是否为有效数据,0表示有效,1表示设备只返回搜索进度,作为心跳包 + BYTE byRes[302]; +}NET_DVR_ONLINE_LOCAL_CONTROLLER_CFG, *LPNET_DVR_ONLINE_LOCAL_CONTROLLER_CFG; + +typedef struct tagNET_DVR_ACS_WORK_STATUS +{ + DWORD dwSize; + BYTE byDoorLockStatus[MAX_DOOR_NUM]; //门锁状态,0-关,1-开 + BYTE byDoorStatus[MAX_DOOR_NUM]; //门状态,1-休眠,2-常开状态,3-常闭状态,4-普通状态 + BYTE byMagneticStatus[MAX_DOOR_NUM]; //门磁状态,0-闭合,1-开启 + BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; ////事件触发器状态,0-无输入,1-有输入 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + BYTE byMultiDoorInterlockStatus; //多门互锁状态,0-关闭,1-开启 + BYTE byAntiSneakStatus; //反潜回状态,0-关闭,1-开启 + BYTE byHostAntiDismantleStatus; //主机防拆状态,0-关闭,1-开启 + BYTE byIndicatorLightStatus; //指示灯状态,0-掉线,1-在线 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM]; //读卡器在线状态,0-不在线,1-在线 + BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM]; //读卡器防拆状态,0-关闭,1-开启 + BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM]; //读卡器当前验证方式,1-刷卡,2-刷卡+密码,3-刷卡,4-刷卡或密码 + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //报警输入口报警状态,0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //报警输出口状态,0-对应报警输出口无报警,1-对应报警输出口有报警 + DWORD dwCardNum; //已添加的卡数量 + BYTE byRes2[32]; +}NET_DVR_ACS_WORK_STATUS, *LPNET_DVR_ACS_WORK_STATUS; + +typedef struct tagNET_DVR_ACS_WORK_STATUS_V50 +{ + DWORD dwSize; + BYTE byDoorLockStatus[MAX_DOOR_NUM_256]; //门锁状态(继电器开合状态),0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警 + BYTE byDoorStatus[MAX_DOOR_NUM_256]; //门状态(楼层状态),1-休眠,2-常开状态(自由),3-常闭状态(禁用),4-普通状态(受控) + BYTE byMagneticStatus[MAX_DOOR_NUM_256]; //门磁状态,0-正常关,1-正常开,2-短路报警,3-断路报警,4-异常报警 + BYTE byCaseStatus[MAX_CASE_SENSOR_NUM]; //事件触发器状态,0-无输入,1-有输入 + WORD wBatteryVoltage; //蓄电池电压值,实际值乘10,单位:伏特 + BYTE byBatteryLowVoltage; //蓄电池是否处于低压状态,0-否,1-是 + BYTE byPowerSupplyStatus; //设备供电状态,1-交流电供电,2-蓄电池供电 + BYTE byMultiDoorInterlockStatus; //多门互锁状态,0-关闭,1-开启 + BYTE byAntiSneakStatus; //反潜回状态,0-关闭,1-开启 + BYTE byHostAntiDismantleStatus; //主机防拆状态,0-关闭,1-开启 + BYTE byIndicatorLightStatus; //指示灯状态,0-掉线,1-在线 + BYTE byCardReaderOnlineStatus[MAX_CARD_READER_NUM_512]; //读卡器在线状态,0-不在线,1-在线 + BYTE byCardReaderAntiDismantleStatus[MAX_CARD_READER_NUM_512]; //读卡器防拆状态,0-关闭,1-开启 + BYTE byCardReaderVerifyMode[MAX_CARD_READER_NUM_512]; //读卡器当前验证方式,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码 + BYTE bySetupAlarmStatus[MAX_ALARMHOST_ALARMIN_NUM];//报警输入口布防状态,0-对应报警输入口处于撤防状态,1-对应报警输入口处于布防状态 + BYTE byAlarmInStatus[MAX_ALARMHOST_ALARMIN_NUM]; //按位表示报警输入口报警状态,0-对应报警输入口当前无报警,1-对应报警输入口当前有报警 + BYTE byAlarmOutStatus[MAX_ALARMHOST_ALARMOUT_NUM]; //按位表示报警输出口状态,0-对应报警输出口无报警,1-对应报警输出口有报警 + DWORD dwCardNum; //已添加的卡数量 + BYTE byFireAlarmStatus; //消防报警状态显示:0-正常、1-短路报警、2-断开报警 + BYTE byBatteryChargeStatus; //电池充电状态:0-无效;1-充电中;2-未充电 + BYTE byMasterChannelControllerStatus; //主通道控制器在线状态:0-无效;1-不在线;2-在线 + BYTE bySlaveChannelControllerStatus; //从通道控制器在线状态:0-无效;1-不在线;2-在线 + BYTE byAntiSneakServerStatus; //反潜回服务器状态:0-无效,1-未启用,2-正常,3-断开 + BYTE byRes3[3]; + DWORD dwAllowFaceNum; //已添加的允许名单人脸数量(通过能力集判断) + DWORD dwBlockFaceNum; //已添加的禁止名单人脸数量(通过能力集判断) + BYTE byRes2[108]; +}NET_DVR_ACS_WORK_STATUS_V50, *LPNET_DVR_ACS_WORK_STATUS_V50; + +typedef struct tagNET_DVR_CASE_SENSOR_CFG +{ + DWORD dwSize; + BYTE byHostBuzzer; //触发主机蜂鸣器,0-不触发,1-触发 + BYTE byRes1[3]; + BYTE byCardReaderBuzzer[MAX_CARD_READER_NUM]; //触发读卡器蜂鸣器,1-触发,0-不触发 + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; //关联触发的报警输出,1-关联,0-不关联 + BYTE byDoorOpen[MAX_DOOR_NUM]; //对门1-N关联门打开,0-不关联,1-关联(即打开) + BYTE byDoorClose[MAX_DOOR_NUM]; //对门1-N关联门关闭,0-不关联,1-关联(即关闭) + BYTE byRes2[64]; +}NET_DVR_CASE_SENSOR_CFG, *LPNET_DVR_CASE_SENSOR_CFG; + +typedef enum _ENUM_UPGRADE_TYPE +{ + ENUM_UPGRADE_DVR = 0, //普通设备升级 + ENUM_UPGRADE_ADAPTER = 1, //DVR适配器升级 + ENUM_UPGRADE_VCALIB = 2, //智能库升级 + ENUM_UPGRADE_OPTICAL = 3, //光端机升级 + ENUM_UPGRADE_ACS = 4, //门禁系统升级 + ENUM_UPGRADE_AUXILIARY_DEV = 5,//辅助设备升级 + ENUM_UPGRADE_LED = 6, //LED发送卡和接收卡升级 + ENUM_UPGRADE_INTELLIGENT = 7, //中心智能设备升级 + ENUM_UPGRADE_CUSTOM = 8 //自定义URL ISAPI登陆有效 +}ENUM_UPGRADE_TYPE; + +typedef struct tagNET_DVR_ACS_EVENT_INFO +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号,为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byAllowListNo; //允许名单单号,1-8,为0无效 + BYTE byReportChannel; //报告上传通道,1-布防上传,2-中心组1上传,3-中心组2上传,为0无效 + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号(楼层编号),为0无效(当接的设备为人员通道设备时,门1为进方向,门2为出方向) + DWORD dwVerifyNo; //多重卡认证序号,为0无效 + DWORD dwAlarmInNo; //报警输入号,为0无效 + DWORD dwAlarmOutNo; //报警输出号,为0无效 + DWORD dwCaseSensorNo; //事件触发器编号 + DWORD dwRs485No; //RS485通道号,为0无效 + DWORD dwMultiCardGroupNo; //群组编号 + WORD wAccessChannel; //人员通道号 + BYTE byDeviceNo; //设备编号,为0无效 + BYTE byDistractControlNo;//分控器编号,为0无效 + DWORD dwEmployeeNo; //工号,为0无效 + WORD wLocalControllerID; //就地控制器编号,0-门禁主机,1-64代表就地控制器 + BYTE byInternetAccess; //网口ID:(1-上行网口1,2-上行网口2,3-下行网口1) + BYTE byType; //防区类型,0:即时防区,1-24小时防区,2-延时防区 ,3-内部防区,4-钥匙防区 5-火警防区 6-周界防区 7-24小时无声防区 8-24小时辅助防区,9-24小时震动防区,10-门禁紧急开门防区,11-门禁紧急关门防区 0xff-无 + BYTE byMACAddr[MACADDR_LEN]; //物理地址,为0无效 + BYTE bySwipeCardType;//刷卡类型,0-无效,1-二维码 + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + DWORD dwSerialNo; //事件流水号,为0无效 + BYTE byChannelControllerID; //通道控制器ID,为0无效,1-主通道控制器,2-从通道控制器 + BYTE byChannelControllerLampID; //通道控制器灯板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIRAdaptorID; //通道控制器红外转接板ID,为0无效(有效范围1-255) + BYTE byChannelControllerIREmitterID; //通道控制器红外对射ID,为0无效(有效范围1-255) + BYTE byHelmet;//可选,是否戴安全帽:0-保留,1-未知,2-不戴安全, 3-戴安全帽 + BYTE byRes[3]; +}NET_DVR_ACS_EVENT_INFO, *LPNET_DVR_ACS_EVENT_INFO; + +typedef struct tagNET_DVR_ACS_EVENT_INFO_EXTEND +{ + DWORD dwFrontSerialNo; //事件流水号,为0无效(若该字段为0,平台根据dwSerialNo判断是否丢失事件;若该字段不为0,平台根据该字段和dwSerialNo字段共同判断是否丢失事件)(主要用于解决报警订阅后导致dwSerialNo不连续的情况) + BYTE byUserType; //人员类型:0-无效,1-普通人(主人),2-来宾(访客),3-禁止名单人,4-管理员 + BYTE byCurrentVerifyMode; //读卡器当前验证方式:0-无效,1-休眠,2-刷卡+密码,3-刷卡,4-刷卡或密码,5-指纹,6-指纹+密码,7-指纹或刷卡,8-指纹+刷卡,9-指纹+刷卡+密码,10-人脸或指纹或刷卡或密码,11-人脸+指纹,12-人脸+密码,13-人脸+刷卡,14-人脸,15-工号+密码,16-指纹或密码,17-工号+指纹,18-工号+指纹+密码,19-人脸+指纹+刷卡,20-人脸+密码+指纹,21-工号+人脸,22-人脸或人脸+刷卡,23-指纹或人脸,24-刷卡或人脸或密码,25-刷卡或人脸,26-刷卡或人脸或指纹,27-刷卡或指纹或密码,28-人脸或密码,29-工号+人脸+密码,30-刷卡或人脸或人脸+刷卡,31-人脸或指纹或密码,32-虹膜,33-人脸或指纹或刷卡或密码或虹膜,34-人脸或刷卡或密码或虹膜 + BYTE byCurrentEvent; //是否为实时事件:0-无效,1-是(实时事件),2-否(离线事件) + BYTE byPurePwdVerifyEnable; //设备是否支持纯密码认证, 0-不支持,1-支持 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID)(对于设备来说,如果使用了工号(人员ID)字段,byEmployeeNo一定要传递,如果byEmployeeNo可转换为dwEmployeeNo,那么该字段也要传递;对于上层平台或客户端来说,优先解析byEmployeeNo字段,如该字段为空,再考虑解析dwEmployeeNo字段) + BYTE byAttendanceStatus; //考勤状态:0-未定义,1-上班,2-下班,3-开始休息,4-结束休息,5-开始加班,6-结束加班 + BYTE byStatusValue; //考勤状态值 + BYTE byRes2[2]; + BYTE byUUID[NET_SDK_UUID_LEN/*36*/]; //UUID(该字段仅在对接萤石平台过程中才会使用) + BYTE byDeviceName[NET_DEV_NAME_LEN]; //设备序列号 + BYTE byRes[24]; +}NET_DVR_ACS_EVENT_INFO_EXTEND, *LPNET_DVR_ACS_EVENT_INFO_EXTEND; + +//扩展结构体信息V20 +typedef struct tagNET_DVR_ACS_EVENT_INFO_EXTEND_V20 +{ + BYTE byRemoteCheck; //是否需要远程核验(0-无效,1-不需要(默认),2-需要) + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //人脸抓拍测温是否温度异常:1-是,0-否 + BYTE byRes2; + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 + BYTE byAttendanceLabel[64]; //考勤自定义名称 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 + BYTE byRes[948]; +}NET_DVR_ACS_EVENT_INFO_EXTEND_V20, *LPNET_DVR_ACS_EVENT_INFO_EXTEND_V20; + +typedef struct tagNET_DVR_ACS_ALARM_INFO +{ + DWORD dwSize; + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME struTime; //时间 + BYTE sNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + NET_DVR_ACS_EVENT_INFO struAcsEventInfo; //详细参数 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 + char *pPicData; + WORD wInductiveEventType; //归纳事件类型,0-无效,客户端判断该值为非0值后,报警类型通过归纳事件类型区分,否则通过原有报警主次类型(dwMajor、dwMinor)区分 + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1; //保留字节 + DWORD dwIOTChannelNo; //IOT通道号 + char *pAcsEventInfoExtend; //byAcsEventInfoExtend为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND结构体 + BYTE byAcsEventInfoExtend; //pAcsEventInfoExtend是否有效:0-无效,1-有效 + BYTE byTimeType; //时间类型:0-设备本地时间,1-UTC时间(struTime的时间) + BYTE byRes2; //保留字节 + BYTE byAcsEventInfoExtendV20; //pAcsEventInfoExtendV20是否有效:0-无效,1-有效 + char *pAcsEventInfoExtendV20; //byAcsEventInfoExtendV20为1时,表示指向一个NET_DVR_ACS_EVENT_INFO_EXTEND_V20结构体 + BYTE byRes[4]; +}NET_DVR_ACS_ALARM_INFO, *LPNET_DVR_ACS_ALARM_INFO; + +#define JUDGE_MAX_VIDEOOUT_NUM 9 + +typedef struct tagNET_DVR_AUDIO_ACTIVATION_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用 + BYTE byRes1[3]; + DWORD dwChanNo; //语音激励的视频通道号 + BYTE bySensitivity; //灵敏度 1-100,灵敏度越高,表示较低的音量就能使能该音频输入激励功能;灵敏度越低,表示需要较高的音量才能使能该音频输入的激励功能 + BYTE byPriority; //优先级 0-优先级0,1-优先级1, 值越大级别越高 + WORD wDelayTime; //语音激励结束画面切换延迟时间,单位s, 超时后自动回到预置点1对应的画面 + BYTE byRes2; //保留 + BYTE byEnablePreset; //是否启用预置点 + WORD wPreset; //预置点 + WORD wBase; /*基准点编号*/ + BYTE byRes3[2]; + BYTE byVoChanNo[JUDGE_MAX_VIDEOOUT_NUM]; //语音激励是否输出到视频输出口。值0表示不输出,1-表示输出。下标表示通道顺序如下:0-VGA1,1-VGA2, 2-VGA3,3-VGA4,4-VGA5~10,5-HDMI1,6-HDMI2 + BYTE byRes[255]; //保留 +}NET_DVR_AUDIO_ACTIVATION_CFG,*LPNET_DVR_AUDIO_ACTIVATION_CFG; + +typedef struct tagNET_DVR_INFRARED_OUTPUT_CTRL_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byIROutPort; //红外输出索引,1-红外输出口1,2-红外输出口2 + BYTE byIRCmdIndex; //红外学码命令对应的索引; + BYTE byRes[254]; //保留 +}NET_DVR_INFRARED_OUTPUT_CTRL_CFG, *LPNET_DVR_INFRARED_OUTPUT_CTRL_CFG; + +#define MAX_IR_CMD_NAME_LEN 32 //红外输出命令名称长度 +#define MAX_IR_CMD_NUM 32 //红外命令个数 + +typedef struct tagNET_DVR_INFRARED_CMD_INFO //红外命令名称信息 +{ + char sCmdName[MAX_IR_CMD_NAME_LEN]; //红外命令名称 + BYTE byRes[8]; //保留 +} NET_DVR_INFRARED_CMD_INFO,*LPNET_DVR_INFRARED_CMD_INFO; + + +typedef struct tagNET_DVR_INFRARED_LEARN_CODE_CFG_ +{ + DWORD dwSize; //结构体大小 + BYTE sIROutName[MAX_IR_CMD_NAME_LEN]; //红外输出口名称 + NET_DVR_INFRARED_CMD_INFO struIRCmdInfo[MAX_IR_CMD_NUM]; //红外命令子信息 + BYTE byRes[256]; +} NET_DVR_INFRARED_CMD_NAME_CFG,*LPNET_DVR_INFRARED_CMD_NAME_CFG; + +typedef enum tagIR_LEARN_SEND_DATA_TYPE_ENUM +{ + ENUM_SENDDATA = 0x0, //发送数据 + ENUM_SEND_LEARN_IR_CMD_START, //发送红外学码 + ENUM_SEND_LEARN_IR_CMD_END = 0x2 //红外学码结束 +}IR_LEARN_SEND_DATA_TYPE_ENUM; + + +typedef struct tagNET_DVR_INFRARED_LEARN_INFO +{ + DWORD dwSize; //结构体大小 + BYTE byIROutPort; //红外输出索引,1-红外输出口1,2-红外输出口2 + BYTE byIRCmdIndex; //红外学码命令对应的索引 + BYTE byRes[30]; //保留 +} NET_DVR_INFRARED_LEARN_INFO, *LPNET_DVR_INFRARED_LEARN_INFO; + +typedef struct tagNET_DVR_INFRARED_LEARN_END +{ + DWORD dwSize; //结构体大小 + BYTE bySaveLearnInfo; //保存学码信息,0-保存,1-不保存 + BYTE byRes[255]; +} NET_DVR_INFRARED_LEARN_END,*LPNET_DVR_INFRARED_LEARN_END; + +#define MAX_VIDEOIN_TYPE_NUM 10 //最大支持的视频输入源类型 + +typedef struct tagNET_DVR_VIDEOIN_TYPE_INFO +{ + WORD wInType; //输入源类型 0-SDI,1-VGA, 2-HDMI,3-IP,4-PIP + WORD wInNum; //支持的输入个数 + WORD wStartNo; //输入对应的起始号 + BYTE byRes[6]; +}NET_DVR_VIDEOIN_TYPE_INFO, *LPNET_DVR_VIDEOIN_TYPE_INFO; + +typedef struct tagNET_DVR_TRIAL_SYSTEM_INFO +{ + DWORD dwSize ; //结构体大小 + BYTE byVideoInTypeNum ; //视频输入源类型个数 + BYTE byRes1[3]; + NET_DVR_VIDEOIN_TYPE_INFO struVideoIn[MAX_VIDEOIN_TYPE_NUM] ; //视频输入源 + BYTE byRes[512 ] ; //保留 +} NET_DVR_TRIAL_SYSTEM_INFO, *LPNET_DVR_TRIAL_SYSTEM_INFO; + +typedef struct tagNET_DVR_CASE_INFO +{ + DWORD dwSize; //结构体大小 + BYTE byCaseNo[CASE_NO_LEN]; //案件编号 + BYTE byCaseName[CASE_NAME_LEN]; //案件名称; + BYTE byLitigant1[LITIGANT_LEN]; //当事人1; + BYTE byLitigant2[LITIGANT_LEN]; //当事人2; + BYTE byChiefJudge[CHIEF_JUDGE_LEN];//审判长 + BYTE byCaseType; //案件类型;1-刑事案件、2-民事案件、3- sCaseTypeCustom生效 + BYTE byShowCaseInfoTime; /* 案件信息显示时间,单位秒, 取值范围1~30*/ + BYTE byRes1[2]; //保留 + char sCaseTypeCustom[NET_SDK_CASETYPE_LEN/*32*/];//自定义案件类型 + BYTE byRes[220]; //保留 +}NET_DVR_CASE_INFO, *LPNET_DVR_CASE_INFO; + +#define MICROPHONE_NUM 16 +#define FAN_NUM 8 +#define FPGA_NUM 8 +#define MAIN_BOARD 8 +#define LOCAL_INPUT_NUM 24 +#define LAMP_STATE_NAME 32 +#define LAMP_NAME 32 +#define FILE_NAME_LEN 32 +typedef struct _NET_DVR_REMOTE_PLAY_ +{ + DWORD dwSize; + BYTE byFileName[FILE_NAME_LEN]; //需要播放的文件名称 + BYTE byVideoOut[7]; //播放输出口 + BYTE byRes1[5]; + BYTE byType; // 0-无意义,1-开始播放,2-停止播放 + BYTE byRes[31]; //保留 +}NET_DVR_REMOTE_PLAY, *LPNET_DVR_REMOTE_PLAY; + +typedef struct _NET_DVR_TRIAL_MICROPHONE_STATUS +{ + DWORD dwSize ; + BYTE byMicrophoneStatus [MICROPHONE_NUM];//麦克风状态下标表示麦克风号0-供电,1-不供电 + BYTE byRes[32] ; //保留 +}NET_DVR_TRIAL_MICROPHONE_STATUS, *LPNET_DVR_TRIAL_MICROPHONE_STATUS; + +typedef struct _NET_DVR_TRIAL_HOST_STATUS +{ + DWORD dwSize ; + DWORD dwFanSpeed [FAN_NUM];//风扇转速 + WORD wMainBoardTemp[MAIN_BOARD]; //主板温度 + BYTE byFpgaTempWarn [FPGA_NUM]; //数组0-主板温度暂无报警状态,数组1-FPGA温度报警状态位,1-处于报警状态 0-处于无报警状态 + BYTE byRes[32] ; //保留 +}NET_DVR_TRIAL_HOST_STATUS, *LPNET_DVR_TRIAL_HOST_STATUS; + +typedef struct _NET_DVR_LOCAL_INPUT_INFO_ +{ + DWORD dwSize; + BYTE byChannelName[NAME_LEN] ; //通道名称 + BYTE byRes[32] ; //保留 +}NET_DVR_LOCAL_INPUT_INFO, *LPNET_DVR_LOCAL_INPUT_INFO; + +typedef struct tagNET_DVR_LAMP_STATUS +{ + BYTE byEnable; //是否启用 + BYTE byRes1[3]; + BYTE byLampName[LAMP_NAME]; //Lamp 名称,报警输出3、4口为Lamp1。报警5、6输出口为lamp2。 + BYTE byLampState1[LAMP_STATE_NAME]; //状态1对应名称, + BYTE byLampState2[LAMP_STATE_NAME]; //状态2对应名称 + BYTE byLampState3[LAMP_STATE_NAME]; //状态3对应名称 + BYTE byRes[32]; +}NET_DVR_LAMP_STATUS,*LPNET_DVR_LAMP_STATUS; + +typedef struct _NET_DVR_LAMP_OUT +{ + DWORD dwSize; + NET_DVR_LAMP_STATUS struLampInfo[2]; //数组0-表示lamp1,数组1表述lamp2 + BYTE byRes[256]; //保留 +}NET_DVR_LAMP_OUT, *LPNET_DVR_LAMP_OUT; + +typedef struct _NET_DVR_LAMP_CONTROL +{ + DWORD dwSize ; + BYTE byLampNo ; //Lamp编号,对应配置Lamp数组下标 + BYTE byLampStateNo ; //Lamp状态编号 0-无意义,1-状态1, 2-状态2, 3-状态3 对应LAMP输出口配置状态 + BYTE byRes[14] ; //保留 +}NET_DVR_LAMP_CONTROL, *LPNET_DVR_LAMP_CONTROL; + + +//实时信息 +typedef struct tagNET_DVR_TPS_PARAM +{ + BYTE byStart; // 开始码 + BYTE byCMD; // 命令号,01-进入指令,02-离开指令,03-拥堵状态指令(为03时,只有byLaneState和byQueueLen有效),04-多线圈状态(为04时,wLoopState和wStateMask有效,表示byLane车道上多个线圈的过车状态) + WORD wSpaceHeadway; //车头间距,以米来计算 + WORD wDeviceID; // 设备ID + WORD wDataLen; // 数据长度 + BYTE byLane; // 对应车道号 + BYTE bySpeed; // 对应车速(KM/H) + BYTE byLaneState; // 车道状态;0-无状态,1-畅通,2-拥挤,3-堵塞 + BYTE byQueueLen; // 堵塞状态下排队长度(比如50米) + WORD wLoopState; //线圈状态,第几位表示几号线圈状态。状态1-到达,0-离开,线圈编号从镜头由近到远依次增大,用户在解析时优先解析车道号,再解析线圈号,单个车道的线圈号是唯一的。 + WORD wStateMask; //线圈状态掩码,掩码位为1对应wLoopState状态位有效,为0表示无效 + DWORD dwDownwardFlow; //当前车道 从上到下车流量 + DWORD dwUpwardFlow; //当前车道 从下到上车流量 + BYTE byJamLevel; //拥堵等级,当byLaneState为3时有效,1-轻度,2-中度,3-重度 + BYTE byVehicleDirection; //0-未知,1-由上而下,2-由下而上 + BYTE byJamFlow; //拥堵新增流量,每新增一辆车就上报一次累计车辆的信息 + BYTE byChannelizationLane; //渠化车道号(渠化表示,车道数量变化的情况,一般为路口车道的数目) + BYTE byVehicleType; //车型识别:0- 未知,1- 客车(大型),2- 货车(大型),3- 轿车(小型),4- 非机动车 + BYTE byRes1[5]; //保留 + WORD wTimeHeadway; // 车头时距,以秒计算 +}NET_DVR_TPS_PARAM, *LPNET_DVR_TPS_PARAM; + +//TPS实时过车数据上传 +typedef struct tagNET_DVR_TPS_REAL_TIME_INFO +{ + DWORD dwSize; // 结构体大小 + DWORD dwChan;//通道号 + NET_DVR_TIME_V30 struTime; //检测时间 + NET_DVR_TPS_PARAM struTPSRealTimeInfo;// 交通参数统计信息 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE* pAddInfoBuffer; +#else + /*附加信息指针,指向NET_DVR_TPS_ADDINFO结构体*/ + BYTE* pAddInfoBuffer; + BYTE byRes2[4]; +#endif + /*附加信息标识(即是否有NET_DVR_TPS_ADDINFO结构体),0-无附加信息, 1-有附加信息。*/ + BYTE byAddInfoFlag; + BYTE byRes1[3]; // 保留 + DWORD dwDeviceIDEx; // 设备ID扩展 + BYTE byRes[8]; // 保留 +}NET_DVR_TPS_REAL_TIME_INFO, *LPNET_DVR_TPS_REAL_TIME_INFO; + +//统计信息 +typedef struct tagNET_DVR_TPS_LANE_PARAM +{ + BYTE byLane; // 对应车道号 + BYTE bySpeed; // 车道过车平均速度 + WORD wArrivalFlow; //到达流量 + DWORD dwLightVehicle; // 小型车数量 + DWORD dwMidVehicle; // 中型车数量 + DWORD dwHeavyVehicle; // 重型车数量 + DWORD dwTimeHeadway; // 车头时距,以秒计算 + DWORD dwSpaceHeadway; // 车头间距,以米来计算 + float fSpaceOccupyRation; // 空间占有率,百分比计算,浮点数*1000 + float fTimeOccupyRation; // 时间占有率,百分比计算,浮点数*1000 + BYTE byStoppingTimes; //平均停车次数 + BYTE byQueueLen; // 堵塞状态下排队长度(比如50米) + BYTE byFlag; //上传标识,0-表示T1时间的统计结果,1-表示T2时间的统计 + BYTE byVehicelNum; //区域车辆数 + WORD wDelay; //平均延误 + BYTE byRes1[6]; // 保留 + DWORD dwNonMotor; // 非机动车数量 +}NET_DVR_TPS_LANE_PARAM, *LPNET_DVR_TPS_LANE_PARAM; + +typedef struct tagNET_DVR_PANORAMA_LINKAGE +{ + DWORD dwSize; + BYTE byEnable;//0-关闭,1-开启 + BYTE byRes[127]; +}NET_DVR_PANORAMA_LINKAGE, *LPNET_DVR_PANORAMA_LINKAGE; + +// 交通参数统计信息 +typedef struct tagNET_DVR_TPS_STATISTICS_PARAM +{ + BYTE byStart; // 开始码 + BYTE byCMD; // 命令号, 08-定时成组数据指令 + BYTE byRes[2]; // 预留字节 + WORD wDeviceID; // 设备ID + WORD wDataLen; // 数据长度 + BYTE byTotalLaneNum; // 有效车道总数 + BYTE byRes2[3]; + DWORD dwDeviceIDEx; // 设备ID扩展 + BYTE byRes1[8]; + NET_DVR_TIME_V30 struStartTime; //统计开始时间 + DWORD dwSamplePeriod; //统计时间,单位秒 + NET_DVR_TPS_LANE_PARAM struLaneParam[MAX_TPS_RULE/*8*/]; +}NET_DVR_TPS_STATISTICS_PARAM, *LPNET_DVR_TPS_STATISTICS_PARAM; + +//TPS统计过车数据上传 +typedef struct tagNET_DVR_TPS_STATISTICS_INFO +{ + DWORD dwSize; // 结构体大小 + DWORD dwChan ;//通道号 + NET_DVR_TPS_STATISTICS_PARAM struTPSStatisticsInfo;// 交通参数统计信息 + DWORD dwJsonLen;//Json报警信息长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE* pJsonBuf; +#else + // Json报警信息指针,其JSON对应到EventNotificationAlert Json Block + BYTE* pJsonBuf; + BYTE byRes2[4]; +#endif + BYTE byJsonInfoFlag; //是否有Json透传数据,0-无,1-有 + BYTE byBrokenNetHttp; //断网续传标志位,0-不重传数据,1-重传数据 + BYTE byRes[114]; //保留 +}NET_DVR_TPS_STATISTICS_INFO, *LPNET_DVR_TPS_STATISTICS_INFO; + +#define DPC_CORRECT 1 //校正 +#define DPC_CORRECT_CANCEL 2 //取消校正 +#define DPC_CROSS_DISPALY_OPEN 3 //坏点检测十字叉显示开启 +#define DPC_CROSS_DISPALY_CLOSE 4 //坏点检测十字叉显示关闭 +#define DPC_POINT 5 //坏点校正坐标 +#define DPC_UP 6 //坏点校正坐标点向上偏移 +#define DPC_DOWN 7 //坏点校正坐标点向下偏移 +#define DPC_RIGHT 8 //坏点校正坐标点向右偏移 +#define DPC_LEFT 9 //坏点校正坐标点向左偏移 +#define DPC_ALL_CORRECT 10 //所有坏点校正 +#define DPC_SAVE 11 //坏点保存 + +typedef struct tagNET_DVR_DPC_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + WORD wCtrlType ;//参考宏定义 + /* + 手动校正:默认为手动校正模式,使用wCtrlType操作类型进行手动校正。 + 自动校正:设备将自动进行校正,无需再进行手动校正,此时wCtrlType、struPoint参数无效。 + */ + BYTE byDPCMode;//坏点校正模式:0-手动校正,1-自动校正 + BYTE byRes; + NET_VCA_POINT struPoint; /*输入的图像平面坐标,归一化到0-1*/ + BYTE byRes1[64]; +}NET_DVR_DPC_PARAM, *LPNET_DVR_DPC_PARAM; + +//非均匀性校正(FFC)手动模式 +typedef struct tagNET_DVR_FFC_MANUAL_INFO +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_FFC_MANUAL_INFO, *LPNET_DVR_FFC_MANUAL_INFO; + +//非均匀性校正(FFC)背景补偿 +typedef struct tagNET_DVR_FFC_BACKCOMP_INFO +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_FFC_BACKCOMP_INFO, *LPNET_DVR_FFC_BACKCOMP_INFO; + +//存储服务器开关状态 +typedef struct tagNET_DVR_STORAGE_SERVER_SWITCH_CFG +{ + DWORD dwSize; + /*存储图片开关;按位表示,0-关闭,1-开启 + 数组0-移动侦测抓图(暂不支持) + 数组1-报警抓图(暂不支持) + …… + */ + BYTE byPicEnable[MAX_PIC_SWITCH_STORAGE_SERVER]; + /*存储附加信息开关;按位表示,0-关闭,1-开启 + 数组0-热度图(暂不支持) + 数组1-客流量(暂不支持) + …… + */ + BYTE byAddInfoEnable[MAX_INFO_SWITCH_STORAGE_SERVER]; + BYTE byRes[324]; +} NET_DVR_STORAGE_SERVER_SWITCH_CFG, +*LPNET_DVR_STORAGE_SERVER_SWITCH_CFG; + +//强制停止取证 +typedef struct tagNET_DVR_FORCESTOP_FORENSICS_CFG +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_FORCESTOP_FORENSICS_CFG, *LPNET_DVR_FORCESTOP_FORENSICS_CFG; + +typedef struct tagNET_DVR_DEC_VCA_ALARM +{ + DWORD dwSize; + DWORD dwDisplayNo; //产生智能报警的显示通道号 + BYTE bySubWinNo; //产生智能报警的子窗口号 + BYTE byRes1[3]; + NET_DVR_TIME_V30 struTime; //产生报警时间 + NET_DVR_PU_STREAM_CFG_V41 struSourceInfo; //码流源信息 + BYTE *byAlarmPic; //报警图片缓冲区 + DWORD dwAlarmPicSize; //报警图片大小,单位:字节 + BYTE byRes2[64]; +}NET_DVR_DEC_VCA_ALARM, *LPNET_DVR_DEC_VCA_ALARM; + +typedef struct tagNET_DVR_DEC_VCA_ALARM_LOGO +{ + BYTE byEnableLogo; //是否叠加智能报警logo,0-不叠加,非0-叠加 + BYTE byFlash; //是否闪烁,0-不闪烁,非0-闪烁 + WORD wFlashTime; //闪烁时间,单位:秒,取值范围从解码器能力集获取 + DWORD dwLogoX; //logo X坐标,解码窗口总大小:1920*1920 + DWORD dwLogoY; //logo Y坐标 + BYTE byRes[32]; +}NET_DVR_DEC_VCA_ALARM_LOGO, *LPNET_DVR_DEC_VCA_ALARM_LOGO; + +typedef struct tagNET_DVR_DEC_VCA_ALARM_PIC +{ + BYTE byUploadPic; //智能报警时是否上传报警图片,0-不上传,非0-上传 + BYTE byOverlayTargetInfo; //报警图片是否叠加目标信息,0-不叠加,非0-叠加 + BYTE byOverlayRuleInfo; //报警图片是否叠加智能规则信息,0-不叠加,非0-叠加 + BYTE byPicQuality; //图片质量系数 0-最好 1-较好 2-一般 + /*图片大小 可以通过能力集获取 + 0-CIF, 1-QCIF, 2-D1, 3-UXGA(1600x1200), 4-SVGA(800x600),5-HD720p(1280x720), + 6-VGA, 7-XVGA, 8-HD900p, 9-HD1080, 10-2560*1920, + 11-1600*304, 12-2048*1536, 13-2448*2048, 14-2448*1200, 15-2448*800, + 16-XGA(1024*768), 17-SXGA(1280*1024),18-WD1(960*576/960*480), 19-1080i, 20-576*576, + 21-1536*1536, 22-1920*1920, 23-320*240, 24-720*720, 25-1024*768, + 26-1280*1280, 27-1600*600, 28-2048*768, 0xff-Auto(使用当前码流分辨率)*/ + BYTE byPicSize; + BYTE byRes[27]; +}NET_DVR_DEC_VCA_ALARM_PIC, *LPNET_DVR_DEC_VCA_ALARM_PIC; + +typedef struct tagNET_DVR_DEC_VCA_ALARM_CFG +{ + DWORD dwSize; + NET_DVR_DEC_VCA_ALARM_LOGO struAlarmLogo; //智能报警logo叠加参数 + NET_DVR_DEC_VCA_ALARM_PIC struAlarmPic; //智能报警图片参数 + BYTE byRes[64]; +}NET_DVR_VCA_ALARM_CFG, *LPNET_DVR_DEC_VCA_ALARM_CFG; + +#define MAX_OSD_LEN 64 //输出口OSD长度 +typedef struct tagNET_DVR_OUTPUT_PIC_INFO +{ + DWORD dwSize; + BYTE sPicName[NAME_LEN];//图片名称 + BYTE byUsed; //是否已存在,0-不存在,1-存在 + BYTE byRes[31]; +}NET_DVR_OUTPUT_PIC_INFO,*LPNET_DVR_OUTPUT_PIC_INFO; + +typedef struct tagNET_DVR_OUTPUT_PIC_CFG +{ + DWORD dwSize; + DWORD dwOutputPicNo; //图片序号 + BYTE byEnable; //logo是否显示,1-显示,0-隐藏 + BYTE byRes1[3]; + NET_DVR_RECTCFG_EX struRect;//logo位置,输出口范围总大小为1920*1920 + BYTE byFlash; //是否闪烁1-闪烁,0-不闪烁 + BYTE byTranslucent; //是否半透明1-半透明,0-不半透明 + BYTE byRes2[2]; //保留 + DWORD dwOutputPicWinNo; //输出口图片窗口号(1字节设备号+1字节输出口号+2字节输出口图片窗口号),获取全部时有效 + BYTE byRes3[28]; +}NET_DVR_OUTPUT_PIC_CFG,*LPNET_DVR_OUTPUT_PIC_CFG; + +typedef struct tagNET_DVR_OUTPUT_OSD_CFG +{ + DWORD dwSize; + BYTE byEnable; //OSD是否显示,0-不显示,1-显示 + BYTE byFontSize; //字体大小,1-大,2-中,3-小 + BYTE byOSDColor; //OSD颜色配置,0-默认, 1-黑,2-白,3-红,4-绿,5-蓝 + BYTE byRes1[1]; + BYTE byOsdContent[MAX_OSD_LEN]; //OSD内容 + NET_DVR_RECTCFG_EX struRect;//OSD位置,输出口范围总大小为1920*1920 + DWORD dwOsdWinNo; //输出口OSD窗口号(1字节设备号+1字节输出口号+2字节OSD窗口号),获取所有时有效 + BYTE byRes2[32]; //保留 +}NET_DVR_OUTPUT_OSD_CFG,*LPNET_DVR_OUTPUT_OSD_CFG; + +typedef struct tagNET_DVR_CHAN_RELATION_RESOURCE +{ + DWORD dwSize; + DWORD dwDisplayChan; //显示通道号(1字节设备号+1字节保留+2字节显示通道号) + BYTE byRelateAudio; //是否关联子窗口音频 + BYTE byRes1[3]; + DWORD dwSubWinNo; //关联音频的子窗口号(1字节电视墙号+1字节子窗口号+2字节窗口号) + DWORD dwChannel; //编码通道号,获取全部时有效 + BYTE byRes2[32]; +}NET_DVR_CHAN_RELATION_RESOURCE, *LPNET_DVR_CHAN_RELATION_RESOURCE; + +typedef struct tagNET_DVR_ALARM_CHAN_ABLITITY +{ + DWORD dwSize; + BYTE bySensorChan[64];//模拟量通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE byAlarmInChan[64];//报警输入通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE byAlarmOutChan[64];//报警输出通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE by485Chan[64];//485通道 下标表示通道号 0-表示不支持,1-表示支持 + BYTE byRes[128]; +}NET_DVR_ALARM_CHAN_ABLITITY, *LPNET_DVR_ALARM_CHAN_ABLITITY; + +typedef struct +{ + DWORD dwSize; + BYTE byOutScale[8];//下标表示主辅口号,0-表示不支持,1-表示12V,2-表示24V + BYTE byRes[16]; +}NET_DVR_OUT_SCALE_CFG, *LPNET_DVR_OUT_SCALE_CFG; + +typedef struct tagNET_DVR_MONITOR_LOCATION_COND +{ + DWORD dwSize; + DWORD dwChan; + /* + 0 表示关联 抓拍MPR模式(多帧触发抓拍 IPC使用) + 1 表示关联 抓拍 HVT 模式(混卡IPC使用) + */ + BYTE byRelateType; + BYTE byRes[63]; //保留 +}NET_DVR_MONITOR_LOCATION_COND, *LPNET_DVR_MONITOR_LOCATION_COND; + +typedef struct tagNET_DVR_MONITOR_LOCATION_CFG +{ + DWORD dwSize; + BYTE byMonitoringSiteID[MAX_ID_LEN/*48*/]; //显示点编号 + BYTE byDeviceID[MAX_ID_LEN/*48*/]; //设备编号 + BYTE byDirectionNo; //显示方向编号,0-无,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其他 + BYTE byRes1[3]; //保留 + BYTE byMonitorInfo[MONITORSITE_ID_LEN/*48*/]; //显示点信息描述 + BYTE byRes[128]; //保留 +}NET_DVR_MONITOR_LOCATION_CFG, *LPNET_DVR_MONITOR_LOCATION_CFG; + +typedef struct tagNET_DVR_REMOTECONTROL_COND +{ + DWORD dwSize; //结构大小 + DWORD dwChannel; //通道号 + BYTE byRes[64]; +}NET_DVR_REMOTECONTROL_COND, *LPNET_DVR_REMOTECONTROL_COND; + +typedef struct tagNET_DVR_REMOTECONTROL_STATUS_ +{ + DWORD dwSize; //结构大小 + BYTE byAlarmStatus;//布防状态,0-保留,1-撤防,2-布防 + BYTE byRes[3]; + WORD wAlarmDealyTime;//布防延迟时间,单位s + WORD wDisAlarmDealyTime;//撤防延迟时间,单位s + BYTE byRes1[64]; +} NET_DVR_REMOTECONTROL_STATUS, *LPNET_DVR_REMOTECONTROL_STATUS; + +typedef struct tagNET_DVR_SECURITY_CFG +{ + DWORD dwSize; + BYTE byCommuMode;//私有协议通信模式,0-兼容模式,1-安全模式 + BYTE byRes1[2]; + BYTE byWebAuthentication; //web认证配置 0-digest、1-basic、2-digest/basic;默认basic认证 + BYTE byRtspAuthentication; //rtsp认证配置 0-disable、1-basic、2-digest、3-digest/basic;默认basic认证 + BYTE byTelnetServer; //telnet设置 0~禁用,1~启用 + BYTE bySSHServer; //SSH设置 0~禁用(默认),1~启用 + BYTE byIllegalLoginLock; //开启登陆锁定, 0-启用(默认),1-禁用 + BYTE byStreamEncryption; //码流加密 0-不加密,1-加密 + BYTE byAntiAttack; //是否开启防攻击功能,0- 不启用,1-启用(socket延时5s关闭) + BYTE byRes[26]; +}NET_DVR_SECURITY_CFG,*LPNET_DVR_SECURITY_CFG; + +typedef struct tagNET_DVR_PASSWORD_MANAGE_CFG +{ + DWORD dwSize; + BYTE byRes[3]; + BYTE byLockCount; //对应用户名或IP被几次连续的错误密码登录后,对该用户进行锁定,0-不锁定,其他值为锁定的次数。 默认为0,例如1表示错误登录1次以后就锁定该用户名。 + DWORD dwLockTime; //锁定时间,表示错误后锁定的时间,单位:秒。不能为0,byLockCount不为0时,dwLockTime才有效 + BYTE byRes1[128]; //4字节对齐 +} NET_DVR_PASSWORD_MANAGE_CFG,*LPNET_DVR_PASSWORD_MANAGE_CFG; + + +typedef struct tagNET_DVR_UNLOCK_INFO +{ + DWORD dwSize; + BYTE byUnlockType; //0-无效, 1-按IP解锁,2-解锁所有IP + BYTE byIPVersion; //1-IPV4,2-IPV6,当byUnlockType为1时,该参数有效 + BYTE byRes1[2]; + NET_DVR_IPADDR struIPAddr; //IP地址 + BYTE byRes[64]; +} NET_DVR_UNLOCK_INFO,*LPNET_DVR_UNLOCK_INFO; + +typedef struct tagNET_DVR_LOCKED_INFO +{ + DWORD dwSize; + BYTE byIPType; //IP类型 0-无效,1-IPV4,2-IPV6 + BYTE byRes1[3]; + NET_DVR_IPADDR struIPAddress; + BYTE byRes[20]; +} NET_DVR_LOCKED_INFO,*LPNET_DVR_LOCKED_INFO; + + +typedef struct tagNET_DVR_VEHICLE_PARA +{ + BYTE sLicense[MAX_LICENSE_LEN]; + /*国家索引值 + 0-算法库不支持牌识国家,1-捷克共和国(CZ - Czech Republic),2-法国(FRA - France), + 3-德国(DE - Germany),4-西班牙(E - Spain), 5-意大利(IT - Italy),6-荷兰(NL - Netherlands),7-波兰(PL - Poland),8-斯洛伐克(SVK - Slovakia), 9-白俄罗斯(BY - Belorussia), 10-摩尔多瓦(MDA - Moldova),11-俄罗斯(RU - Russia),12-乌克兰(UA - Ukraine), + 169-加拿大(Canada), 172-美国(US), 227-澳大利亚(Australia), 0xfe-无法识别 + */ + BYTE byCountry; // 国家索引值 + + BYTE byRes[239]; +}NET_DVR_VEHICLE_PARA, *LPNET_DVR_VEHICLE_PARA; + +typedef struct tagNET_DVR_FACE_PIC_DATA_INFO +{ + DWORD dwImageLen; //图片大小 + NET_VCA_RECT struVcaRect; //子图在大图中的坐标位置,归一化坐标 + DWORD dwFaceScore; //相似度,取值范围0-100 + BYTE byVcaRectOnly; //是否只上传坐标:0-否;1-是 + BYTE byRes1[3]; + DWORD dwPID; //图片ID + DWORD dwFaceSearchNum;// 搜索人脸区域个数 + NET_VCA_RECT struMultiVcaRect[NET_DVR_MAX_FACE_SEARCH_NUM];//(多个)子图在大图中的坐标位置,归一化坐标, byVcaRectOnly=1时启用,紧凑排列 + BYTE byRes[136]; + BYTE *pImage; //其中图片要求为jpg格式 +}NET_DVR_FACE_PIC_DATA_INFO, *LPNET_DVR_FACE_PIC_DATA_INFO; + +typedef struct tagNET_DVR_BEHAVIOUR_COND +{ + DWORD dwSearchType; //搜索类型 + //&0x1 - 穿越警戒线 + //&0x2 - 区域入侵 + //&0x4 - 物品遗留 + //&0x8 - 物品拿取 + //&0x10 - 进入区域 + //&0x20 - 离开区域 + //&0x40 - 非法停车 + //&0x80 - 徘徊 + //&0x100 -人员聚集 + //&0x200 - 快速移动 + //&0x400 - 离岗检测 + //&0x800 - 人数变化 + //&0x1000 - 剧烈运动 + //&0x2000 - 人员奔跑 + //&0x4000 - 人员倒地 + //&0x8000 - 人员滞留 + //&0x10000 –态势分析 + //&0x20000 – 玩手机 + BYTE byHumanMisinfo;// 只获取人体误报信息 0-否,1-是 + BYTE byRes[251]; //保留 +}NET_DVR_BEHAVIOUR_COND, *LPNET_DVR_BEHAVIOUR_COND; + + +typedef union tagNET_DVR_SMARTSEARCH_PIC_UNION +{ + BYTE byLen[256]; //联合体长度 + NET_DVR_VEHICLE_PARA struVehiclePara; //车辆检测信息 + NET_VCA_HUMAN_FEATURE struHumaFeature; //人脸属性 + NET_DVR_FACE_PIC_DATA_INFO struHumaPic; //根据人脸子图信息查询(用于远程图片的以图索图功能) + NET_DVR_BEHAVIOUR_COND struBehaviourCond; //异常行为检测搜索条件 +}NET_DVR_SMARTSEARCH_PIC_UNION,*LPNET_DVR_SMARTSEARCH_PIC_UNION; + +typedef struct tagNET_DVR_SMART_SEARCH_PIC_PARA //智能图片搜索结构体 size 344 +{ + DWORD dwChanNo; //通道号 + DWORD byStreamID[STREAM_ID_LEN] ; //流ID信息,与dwChanNo相比,优先级较高,即当byStreamID不为空时,则使用流ID,为空的情况下使用dwChanNo字段 + NET_DVR_TIME_EX struStartTime; //录像开始的时间 + NET_DVR_TIME_EX struEndTime; //录像停止的时间 + WORD wSearchType; //智能查找类型 0-车辆检索 ,1-人脸属性, 2-以图索图 ,3-异常行为检测 + BYTE byRes1[2]; + NET_DVR_SMARTSEARCH_PIC_UNION uSmartSearchCond; //智能查找条件 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cStartTimeDifferenceH; //开始时间与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cStartTimeDifferenceM; //开始时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + char cStopTimeDifferenceH; //结束时间与UTC的时差(小时),-12 ... +14,正数表示东时区 + char cStopTimeDifferenceM; //结束时间与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[59]; +}NET_DVR_SMART_SEARCH_PIC_PARA, *LPNET_DVR_SMART_SEARCH_PIC_PARA; + +//人体特征识别结果 +typedef struct tagNET_DVR_FACE_SUB_PIC_INFO +{ + DWORD dwSimilarity; //相似度 0-100 + NET_VCA_RECT struVcaRect; //人脸区域,归一化坐标 + BYTE byRes2[236]; //保留 +}NET_DVR_FACE_SUB_PIC_INFO ,*LPNET_DVR_FACE_SUB_PIC_INFO; + + +typedef struct tagNET_DVR_BEHAVIOR_INFO +{ + NET_VCA_RECT struVcaRect; + WORD wPeopleNum; //区域人数,仅图片类型(NET_DVR_SMART_SEARCH_PIC_RET 中wPicType)为态势分析时有效 + BYTE byRes2[238]; //保留 +}NET_DVR_BEHAVIOR_INFO ,*LPNET_DVR_BEHAVIOR_INFO; + +typedef union tagNET_DVR_PIC_FEATURE_UNION +{ + BYTE byLen[256]; //联合体长度 + NET_DVR_PLATE_INFO struPlateInfo; //车辆检索信息 + NET_DVR_FACE_SUB_PIC_INFO struFaceSubInfo; //人脸子图信息 + NET_DVR_BEHAVIOR_INFO struBehavior; //异常行为检测对应的子图信息 +}NET_DVR_PIC_FEATURE_UNION,*LPNET_DVR_PIC_FEATURE_UNION; + +typedef struct tagNET_DVR_SMART_SEARCH_PIC_RET +{ + char sFileName[PICTURE_NAME_LEN];//文件名 + NET_DVR_TIME_EX struTime; //图片的抓图时间 + DWORD dwFileSize; //文件的大小 + WORD wPicType; //图片类型 0-车辆检索 ,1-人脸属性, 2-以图索图 ,3-穿越警戒线,4-区域入侵, 5-物品遗留, 6-物品拿取, 7-进入区域, 8-离开区域, 9-非法停车,10-徘徊,11-人员聚集,12-快速移动,13-人员奔跑,14-剧烈运动,15-人员倒地,16-人数异常,17-离岗检测,18-人员滞留,19-态势分析 20-玩手机 + BYTE byRes1[2]; //保留 + NET_DVR_PIC_FEATURE_UNION uPicFeature; //图片属性 + BYTE byISO8601; //是否是8601的时间格式,即时差字段是否有效0-时差无效,年月日时分秒为设备本地时间 1-时差有效 + char cTimeDifferenceH; //与UTC的时差(小时),-12 ... +14, 正数表示东时区 + char cTimeDifferenceM; //与UTC的时差(分钟),-30, 0, 30, 45,正数表示东时区 + BYTE byRes[29]; +}NET_DVR_SMART_SEARCH_PIC_RET, *LPNET_DVR_SMART_SEARCH_PIC_RET; + +typedef struct tagNET_DVR_T1TEST_SEND_DATA_BUZZER +{ + BYTE byHearSound; //是否听到声音 0-未听到,1-听到 + BYTE byRes[31]; //保留 +}NET_DVR_T1TEST_SEND_DATA_BUZZER,*LPNET_DVR_T1TEST_SEND_DATA_BUZZER; + + +typedef union NET_DVR_T1TEST_DATA_UNION +{ + BYTE byUnionLen[32]; + NET_DVR_T1TEST_SEND_DATA_BUZZER struBuzzer; //蜂鸣器 + NET_DVR_TIME_V30 struCurTime; //当前PC机时间 +}NET_DVR_T1TEST_DATA_UNION,*LPNET_DVR_T1TEST_DATA_UNION; + + +typedef struct tagNET_DVR_T1TEST_SEND_DATA +{ + DWORD dwSize; //结构体大小 + BYTE byDataType; //数据类型 0-蜂鸣器,1-pc本地时间 + BYTE byRes1[3]; + NET_DVR_T1TEST_DATA_UNION uSendData; //发送的数据内容 + BYTE byRes[64]; +}NET_DVR_T1TEST_SEND_DATA,*LPNET_DVR_T1TEST_SEND_DATA; + +typedef struct tagNET_DVR_PIC_MODEL_CFG //图像建模参数配置 +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用 + BYTE byRes[63]; +}NET_DVR_PIC_MODEL_CFG, *LPNET_DVR_PIC_MODEL_CFG; + +typedef struct tagNET_DVR_MOUSE_EVENT_PARAM //鼠标信息配置 +{ + DWORD dwSize; //结构体大小 + BYTE byMouseEvent; //鼠标事件类型, 0-鼠标左键单击,1-鼠标左键双击,2-鼠标右键,3-滚轮上滚,4-滚轮下滚 + BYTE byRes1[3]; //保留 + NET_VCA_POINT struPoint; //鼠标点位置坐标,归一化处理 + BYTE byRes[64]; //保留 +}NET_DVR_MOUSE_EVENT_PARAM, *LPNET_DVR_MOUSE_EVENT_PARAM; + +typedef struct tagNET_DVR_AUTO_LIMIT_WAVE_CFG +{ + BYTE byFBCEnable; //FBC开关 0-不开启,1-开启 + BYTE byMode; //模式, 0-快速, 1-普通,2-慢速 + BYTE byFilterQValue; //自适应滤波器Q值,单位Oct, 0-1/40,1-1/10, 默认值为1/40 Oct + BYTE byStaticFilterNum; //静态滤波器数量,取值范围0-12 + BYTE byRes[16]; +}NET_DVR_AUTO_LIMIT_WAVE_CFG,*LPNET_DVR_AUTO_LIMIT_WAVE_CFG; + +typedef struct _NET_DVR_DSP_PARAMETER_CFG +{ + BYTE byFBCEnable; //FBC开关 0-不开启,1-开启 + BYTE byVolume; //输入音量 取值范围0~255 + BYTE byRes[22]; +}NET_DVR_DSP_PARAMETER_CFG, *LPNET_DVR_DSP_PARAMETER_CFG; + + +typedef struct tagNET_DVR_MIX_AUDIOIN_CFG +{ + DWORD dwSize; //结构体大小 + DWORD dwHighPassFilter; //高通滤波器 取值范围 0-127, 具体索引代表含义以能力集为准 + DWORD dwNoiseMargin; //噪声门限,取值范围 0-127, 具体索引代表含义以能力集为准 + NET_DVR_AUTO_LIMIT_WAVE_CFG struLimitWave; //自动限波控制参数,当音频输入源为macIn时有效 + NET_DVR_DSP_PARAMETER_CFG struDSPParameter; //数字信号处理芯片参数 + BYTE byRes[40]; +}NET_DVR_MIX_AUDIOIN_CFG,*LPNET_DVR_MIX_AUDIOIN_CFG; + +typedef struct tagNET_DVR_MIX_AUDIOOUT_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byModulatorEnbale; //是否启用相位调制器 + BYTE byPostFilter; //Post Filter开关,0-关闭,1-开启,默认开启 + BYTE byLimitPressure; //输出压限开关 0-关闭,1-开启,默认开启 + BYTE byRes1; //保留 + WORD wModulatorValue; //相位调制量 取值范围 0-127, 具体索引代表含义以能力集为准,默认10 + WORD wTriggerTime; //压限触发时间,取值范围 0-127, 具体索引代表含义以能力集为准 + WORD wFreeTime; //压限释放时间,取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byCompressThreshold; //压缩门限 0-1X,1-2X,2-4X,3-8X X表示倍,比如2X表示2倍 + BYTE byCompressMode; //压缩方式,0-硬压缩,1-软压缩,默认为硬压缩 + BYTE byCompressRate; //压缩率 + BYTE byRecoveryGain; //回复增益 0-1X,1-2X,2-4X,3-8X + BYTE byOutputGain; //输出增益 0 ~100(负值) + BYTE byOutputMute; //输出静音,0-关闭,1-开启 + int iOutputGainEx; //输出增益扩展,返回正值为放大,负值为缩小 + BYTE bySoundQualityHanding; //音质处理,0-关闭,1-开启 + BYTE byRes[55]; +}NET_DVR_MIX_AUDIOOUT_CFG,*LPNET_DVR_MIX_AUDIOOUT_CFG; + +#define MAX_AUDIOOUT_PRO_TYPE 8 //音频输出处理方式 +typedef struct tagNET_DVR_VOLUME_CFG +{ + DWORD dwSize; //结构体大小 + WORD wVolume[MAX_AUDIOOUT_PRO_TYPE]; //音量大小 取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byPhantomPowerSupply; //是否使用幻象电源供电(音频输入通道为MIC时有效),0-无意义,1-不供电,2-供电 + BYTE byEnableAEC; //是否启用全局的回声消除,0-不启用,1-启用 + WORD wTalkVolume; //支持对讲的设备,对讲时音量大小 + BYTE byEnableFBC[MAX_AUDIOOUT_PRO_TYPE]; //是否启用FBC(啸叫抑制),0-不启用,1-启用 + WORD wVolumeEx[MAX_AUDIOOUT_PRO_TYPE]; //音量大小扩展 取值范围 0-127, 具体索引代表含义以能力集为准 + BYTE byRes[4]; //保留 +}NET_DVR_VOLUME_CFG,*LPNET_DVR_VOLUME_CFG; + +typedef struct tagNET_DVR_VIDEOOUT_RESOLUTION_CFG //视频输出口分辨率配置 +{ + DWORD dwSize; //结构体大小 + BYTE byResolution; //分辨率 0-1024x768, 1-1280x720, 2-1280x1024, 3-1680x1050, 4-1920x1080, 5-3840*2160 + BYTE byRes[63]; +}NET_DVR_VIDEOOUT_RESOLUTION_CFG, *LPNET_DVR_VIDEOOUT_RESOLUTION_CFG; + +typedef struct tagNET_DVR_ADDR_DOMAIN_INFO +{ + BYTE szDomainAddr[MAX_DOMAIN_NAME]; /* 主机IP地址或者域名,需要设备解析,解析方式为有字母存在且有'.'则认为是域名,否则为IP地址 */ + WORD wPort; + BYTE byRes[2]; +}NET_DVR_ADDR_DOMAIN_INFO,*LPNET_DVR_ADDR_DOMAIN_INFO; + +#define MAX_CENTERNUM_V40 6 //报警中心地址个数 + +//报警中心网络配置 +typedef struct tagNET_DVR_ALARMCENTER_NETCFG +{ + DWORD dwSize; + BYTE byAuxiliaryAlarmAddr[MAX_DOMAIN_NAME]; /* 辅报警主机IP地址或者域名,需要设备解析,解析方式为有字母存在且有’.’则认为是域名,否则为IP地址 */ + WORD wAuxiliaryAlarmPort; /* 辅报警主机端口号 */ + NET_DVR_ADDR_DOMAIN_INFO struHostAddr[MAX_CENTERNUM_V40]; //报警中心地址信息 + BYTE byRes[172]; +}NET_DVR_ALARMCENTER_NETCFG, *LPNET_DVR_ALARMCENTER_NETCFG; + +//报警联动参数结构 +typedef struct tagNET_DVR_ALARM_LINKAGE_PARAM +{ + DWORD dwSize; + WORD wChanRec; //联动录像的NVR通道,按位表示,例如最低位表示通道1,最高位表示通道16,二进制位的值:0-不录像,1-录像 + BYTE byRes1[2]; + WORD wRecTime[MAX_LINKAGE_CHAN_NUM]; //录像的时间,按字节表示,例如byRecTime[0]表示通道1的录像时间,byRecTime[15]表示通道16的录像时间 + WORD wChanPic; //联动抓图的NVR通道,按位表示,例如最低位表示通道1,最高位表示通道16,二进制位的值:0-不抓图,1-抓图 + BYTE byRes2[2]; + BYTE byPicNum[MAX_LINKAGE_CHAN_NUM]; //抓图的个数,按字节表示,例如byPicNum[0]表示通道1的抓图个数,byPicNum[15]表示通道16的抓图个数 + BYTE byTriggerEnabled[ALARMHOST_ALARMOUT_NUM];//变量联动触发器,0-不联动,1-联动 + BYTE bySensorJointAlarmOut[ALARMHOST_ALARMOUT_NUM];//遥信值按类型联动触发器,该值为byTriggerEnabled的扩充。数组下标表示触发器号,数组元素的值按位表示报警类型,各个类型间是"或"的关系。类型值定义:1bit0-限1;bit1-限2;bit2-限3;bit3-限4;bit4-故障 + BYTE byRes3[128]; //保留 +}NET_DVR_ALARM_LINKAGE_PARAM, *LPNET_DVR_ALARM_LINKAGE_PARAM; + + +//雷达调试报警上传 抓拍机4.0新增 +typedef struct tagNET_DVR_ALARM_RADARINFO +{ + DWORD dwSize; + DWORD dwRadarTriggerTimeSecond;//雷达触发时间,秒 + DWORD dwRadarTriggerTimeMSecond;//雷达触发时间,毫秒 + DWORD dwVedioTriggerTimeSecond;//视频触发时间,秒 + DWORD dwVedioTriggerTimeMSecond;//视频触发时间,毫秒 + DWORD dwVedioRadarDiffTimeMSecond;//雷达视频触发时间差,毫秒 + DWORD dwRadarSpeed;//雷达速度 + BYTE byRes[16]; +} NET_DVR_ALARM_RADARINFO, *LPNET_DVR_ALARM_RADARINFO; + +#define MAX_FINGER_PRINT_LEN 768 //最大指纹长度 +typedef struct tagNET_DVR_FINGER_PRINT_CFG +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发指纹的读卡器,按数组表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byRes1[30]; + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + BYTE byRes[64]; +}NET_DVR_FINGER_PRINT_CFG,*LPNET_DVR_FINGER_PRINT_CFG; + +typedef struct tagNET_DVR_FINGER_PRINT_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byTotalStatus; //下发总的状态,0-当前指纹未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) + BYTE byRes1; + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //非0表示错误信息byErrMsg有效,其值代表byErrMsg对应的读卡器编号(具体什么错误查看byCardReaderRecvStatus对应编号的值)。0时表示无错误信息 + BYTE byRes[24]; +}NET_DVR_FINGER_PRINT_STATUS,*LPNET_DVR_FINGER_PRINT_STATUS; + + +typedef struct tagNET_DVR_FINGER_PRINT_INFO_COND +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按数组表示 + DWORD dwFingerPrintNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 + BYTE byFingerPrintID; //手指编号,有效值范围为-10 0xff表示该卡所有指纹 + BYTE byCallbackMode; //设备回调方式,0-设备所有读卡器下完了范围,1-在时间段内下了部分也返回 + BYTE byRes1[26]; //保留 +}NET_DVR_FINGER_PRINT_INFO_COND,*LPNET_DVR_FINGER_PRINT_INFO_COND; + +typedef struct tagNET_DVR_FINGER_PRINT_CFG_V50 +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //需要下发指纹的读卡器,按数组表示,从低位到高位表示,0-不下发该读卡器,1-下发到该读卡器 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹,2-巡更指纹,3-超级指纹,4-解除指纹 + BYTE byRes1[30]; + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byLeaderFP[MAX_DOOR_NUM_256]; //对门是否有首次认证功能(按字节表示):0-无首次认证功能,1-有首次认证功能 + BYTE byRes[128]; +}NET_DVR_FINGER_PRINT_CFG_V50, *LPNET_DVR_FINGER_PRINT_CFG_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_STATUS_V50 +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus[MAX_CARD_READER_NUM_512]; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置,10-指纹读卡器版本过低(无法支持工号) + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹,2-巡更指纹,3-超级指纹,4-解除指纹 + BYTE byTotalStatus; //下发总的状态,0-当前指纹未下完所有读卡器,1-已下完所有读卡器(这里的所有指的是门禁主机往所有的读卡器下发了,不管成功与否) + BYTE byRecvStatus; //主机错误状态:0-成功,1-手指编号错误,2-指纹类型错误,3-卡号错误(卡号规格不符合设备要求),4-指纹未关联工号或卡号(工号或卡号字段为空),5-工号不存在,6-指纹数据长度为0,7-读卡器编号错误,8-工号错误 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //当byCardReaderRecvStatus为5时,表示已存在指纹对应的指纹读卡器编号,可用于下发错误返回。0时表示无错误信息 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byErrorEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的工号(人员ID) + BYTE byRes[128]; +}NET_DVR_FINGER_PRINT_STATUS_V50, *LPNET_DVR_FINGER_PRINT_STATUS_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_INFO_COND_V50 +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号(该字段获取时有效,设置时无效) + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器是否有效,0-无效,1-有效 + DWORD dwFingerPrintNum; //设置或获指纹数量,获取时置为0xffffffff表示获取所有指纹信息 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 0xff表示该卡所有指纹 + BYTE byCallbackMode; //设备回调方式,0-设备所有读卡器下完了返回,1-在时间段内下了部分也返回 + BYTE byRes2[2]; //保留 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes1[128]; //保留 +}NET_DVR_FINGER_PRINT_INFO_COND_V50, *LPNET_DVR_FINGER_PRINT_INFO_COND_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_BYCARD +{ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按数组表示 + BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //需要获取的指纹信息,按数组下标,值表示0-不删除,1-删除该指纹 + BYTE byRes1[34]; //保留 +}NET_DVR_FINGER_PRINT_BYCARD,*LPNET_DVR_FINGER_PRINT_BYCARD; + +typedef struct tagNET_DVR_FINGER_PRINT_BYREADER +{ + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的指纹信息,0-按卡号删除指纹信息,1-删除所有卡的指纹信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byRes[548]; //保留 +}NET_DVR_FINGER_PRINT_BYREADER,*LPNET_DVR_FINGER_PRINT_BYREADER; + +typedef union tagNET_DVR_DEL_FINGER_PRINT_MODE +{ + BYTE uLen[588]; //联合体长度 + NET_DVR_FINGER_PRINT_BYCARD struByCard; //按卡号的方式删除 + NET_DVR_FINGER_PRINT_BYREADER struByReader; //按读卡器的方式删除 +}NET_DVR_DEL_FINGER_PRINT_MODE,*LPNET_DVR_DEL_FINGER_PRINT_MODE; + +typedef struct tagNET_DVR_FINGER_PRINT_INFO_CTRL +{ + DWORD dwSize; + BYTE byMode; //删除方式,0-按卡号方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FINGER_PRINT_MODE struProcessMode; //处理方式 + BYTE byRes[64]; //保留 +}NET_DVR_FINGER_PRINT_INFO_CTRL,*LPNET_DVR_FINGER_PRINT_INFO_CTRL; + +typedef struct tagNET_DVR_FINGER_PRINT_BYCARD_V50 +{ + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEnableCardReader[MAX_CARD_READER_NUM_512]; //指纹的读卡器信息,按位表示 + BYTE byFingerPrintID[MAX_FINGER_PRINT_NUM/*10*/]; //需要删除的手指编号,按数组下标,值表示0-不删除,1-删除该指纹 + BYTE byRes1[2]; + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) +}NET_DVR_FINGER_PRINT_BYCARD_V50, *LPNET_DVR_FINGER_PRINT_BYCARD_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_BYREADER_V50 +{ + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byClearAllCard; //是否删除所有卡的指纹信息,0-按卡号(人员ID)删除指纹信息,1-删除所有卡(人员ID)的指纹信息 + BYTE byRes1[3]; //保留 + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) + BYTE byRes[516]; //保留 +}NET_DVR_FINGER_PRINT_BYREADER_V50, *LPNET_DVR_FINGER_PRINT_BYREADER_V50; + +typedef union tagNET_DVR_DEL_FINGER_PRINT_MODE_V50 +{ + BYTE uLen[588]; //联合体长度 + NET_DVR_FINGER_PRINT_BYCARD_V50 struByCard; //按卡号(人员ID)的方式删除 + NET_DVR_FINGER_PRINT_BYREADER_V50 struByReader; //按读卡器的方式删除 +}NET_DVR_DEL_FINGER_PRINT_MODE_V50, *LPNET_DVR_DEL_FINGER_PRINT_MODE_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_INFO_CTRL_V50 +{ + DWORD dwSize; + BYTE byMode; //删除方式,0-按卡号(人员ID)方式删除,1-按读卡器删除 + BYTE byRes1[3]; //保留 + NET_DVR_DEL_FINGER_PRINT_MODE_V50 struProcessMode; //处理方式 + BYTE byRes[64]; //保留 +}NET_DVR_FINGER_PRINT_INFO_CTRL_V50, *LPNET_DVR_FINGER_PRINT_INFO_CTRL_V50; + +typedef struct tagNET_DVR_FINGER_PRINT_INFO_STATUS_V50 +{ + DWORD dwSize; + DWORD dwCardReaderNo; //按值表示,指纹读卡器编号 + BYTE byStatus; //状态:0-无效,1-处理中,2-删除失败,3-成功 + BYTE byRes[63]; //保留 +}NET_DVR_FINGER_PRINT_INFO_STATUS_V50, *LPNET_DVR_FINGER_PRINT_INFO_STATUS_V50; + +typedef enum _ACS_DEV_SUBEVENT_ENUM_ +{ + EVENT_ACS_HOST_ANTI_DISMANTLE = 0, //主机防拆报警 + EVENT_ACS_OFFLINE_ECENT_NEARLY_FULL, //离线事件满90%报警 + EVENT_ACS_NET_BROKEN, //网络断开 + EVENT_ACS_NET_RESUME , //网络恢复 + EVENT_ACS_LOW_BATTERY, //蓄电池电压低 + EVENT_ACS_BATTERY_RESUME, //蓄电池电压恢复正常 + EVENT_ACS_AC_OFF, //交流电断电 + EVENT_ACS_AC_RESUME, //交流电恢复 + EVENT_ACS_SD_CARD_FULL, //SD卡存储满报警 + EVENT_ACS_LINKAGE_CAPTURE_PIC, //联动抓拍事件报警 + EVENT_ACS_IMAGE_QUALITY_LOW, //人脸图像画质低 + EVENT_ACS_FINGER_PRINT_QUALITY_LOW, //指纹图像画质低 + EVENT_ACS_BATTERY_ELECTRIC_LOW, //电池电压低(仅人脸设备使用) + EVENT_ACS_BATTERY_ELECTRIC_RESUME, //电池电压恢复正常(仅人脸设备使用) + EVENT_ACS_FIRE_IMPORT_SHORT_CIRCUIT, //消防输入短路报警 + EVENT_ACS_FIRE_IMPORT_BROKEN_CIRCUIT, //消防输入断路报警 + EVENT_ACS_FIRE_IMPORT_RESUME, //消防输入恢复 + EVENT_ACS_MASTER_RS485_LOOPNODE_BROKEN, //主控RS485环路节点断开 + EVENT_ACS_MASTER_RS485_LOOPNODE_RESUME, //主控RS485环路节点恢复 + EVENT_ACS_LOCAL_CONTROL_OFFLINE, //就地控制器掉线 + EVENT_ACS_LOCAL_CONTROL_RESUME, //就地控制器掉线恢复 + EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_BROKEN, //就地下行RS485环路断开 + EVENT_ACS_LOCAL_DOWNSIDE_RS485_LOOPNODE_RESUME, //就地下行RS485环路恢复 + EVENT_ACS_DISTRACT_CONTROLLER_ONLINE, //分控器在线 + EVENT_ACS_DISTRACT_CONTROLLER_OFFLINE, //分控器离线 + EVENT_ACS_FIRE_BUTTON_TRIGGER, //消防按钮触发 + EVENT_ACS_FIRE_BUTTON_RESUME, //消防按钮恢复 + EVENT_ACS_MAINTENANCE_BUTTON_TRIGGER, //维护按钮触发 + EVENT_ACS_MAINTENANCE_BUTTON_RESUME, //维护按钮恢复 + EVENT_ACS_EMERGENCY_BUTTON_TRIGGER, //紧急按钮触发 + EVENT_ACS_EMERGENCY_BUTTON_RESUME, //紧急按钮恢复 + EVENT_ACS_RES, + EVENT_ACS_SUBMARINEBACK_COMM_BREAK, //与反潜回服务器通信断开 + EVENT_ACS_SUBMARINEBACK_COMM_RESUME, //与反潜回服务器通信恢复 + EVENT_ACS_REMOTE_ACTUAL_GUARD, //远程实时布防 + EVENT_ACS_REMOTE_ACTUAL_UNGUARD, //远程实时撤防 + EVENT_ACS_MOTOR_SENSOR_EXCEPTION, //电机或传感器异常 + EVENT_ACS_CAN_BUS_EXCEPTION, //CAN总线异常 + EVENT_ACS_CAN_BUS_RESUME, //CAN总线恢复 + EVENT_ACS_GATE_TEMPERATURE_OVERRUN, //闸机腔体温度超限 + EVENT_ACS_IR_EMITTER_EXCEPTION, //红外对射异常 + EVENT_ACS_IR_EMITTER_RESUME, //红外对射恢复 + EVENT_ACS_LAMP_BOARD_COMM_EXCEPTION, //灯板通信异常 + EVENT_ACS_LAMP_BOARD_COMM_RESUME, //灯板通信恢复 + EVENT_ACS_IR_ADAPTOR_BOARD_COMM_EXCEPTION, //红外转接板通信异常 + EVENT_ACS_IR_ADAPTOR_BOARD_COMM_RESUME, //红外转接板通信恢复 + EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_ALARM, //通道控制器防拆报警 + EVENT_ACS_CHANNEL_CONTROLLER_DESMANTLE_RESUME, //通道控制器防拆报警恢复 + EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_ALARM, //通道控制器消防输入报警 + EVENT_ACS_CHANNEL_CONTROLLER_FIRE_IMPORT_RESUME, //通道控制器消防输入报警恢复 + EVENT_ACS_STAY_EVENT, //逗留事件 + EVENT_ACS_LEGAL_EVENT_NEARLY_FULL, //离线合法事件满90%报警 + EVENT_ACS_FIRE_IMPORT_ALARM = 52, //消防输入报警 + EVENT_ACS_NOMASK_ALARM, //未带口罩报警 + EVENT_ACS_FIREMATRIX_EVENT, //消防矩阵事件上传 + EVENT_ACS_HEALTH_INFO_ABNORMAL_LOCK, //健康信息异常锁定 + EVENT_ACS_HEALTH_INFO_ABNORMAL_UNLOCK, //健康信息异常解锁 + EVENT_ACS_IPC_EVENT //IPC事件上传 +}ACS_DEV_SUBEVENT_ENUM; + +typedef enum _ACS_ALARM_SUBEVENT_ENUM_ +{ + EVENT_ACS_ALARMIN_SHORT_CIRCUIT = 0, //防区短路报警 + EVENT_ACS_ALARMIN_BROKEN_CIRCUIT, //防区断路报警 + EVENT_ACS_ALARMIN_EXCEPTION, //防区异常报警 + EVENT_ACS_ALARMIN_RESUME, //防区报警恢复 + EVENT_ACS_CASE_SENSOR_ALARM, //事件输入报警 + EVENT_ACS_CASE_SENSOR_RESUME //事件输入恢复 +}ACS_ALARM_SUBEVENT_ENUM; + +typedef enum _ACS_DOOR_SUBEVENT_ENUM_ +{ + EVENT_ACS_LEADER_CARD_OPEN_BEGIN = 0, //首卡开门开始 + EVENT_ACS_LEADER_CARD_OPEN_END, //首卡开门结束 + EVENT_ACS_ALWAYS_OPEN_BEGIN , //常开状态开始 + EVENT_ACS_ALWAYS_OPEN_END, //常开状态结束 + EVENT_ACS_ALWAYS_CLOSE_BEGIN, //常关状态开始 + EVENT_ACS_ALWAYS_CLOSE_END, //常关状态结束 + EVENT_ACS_LOCK_OPEN, //门锁打开 + EVENT_ACS_LOCK_CLOSE, //门锁关闭 + EVENT_ACS_DOOR_BUTTON_PRESS, //开门按钮按下 + EVENT_ACS_DOOR_BUTTON_RELEASE, //开门按钮放开 + EVENT_ACS_DOOR_OPEN_NORMAL, //正常开门(门磁) + EVENT_ACS_DOOR_CLOSE_NORMAL , //正常关门(门磁) + EVENT_ACS_DOOR_OPEN_ABNORMAL, //门异常打开(门磁) + EVENT_ACS_DOOR_OPEN_TIMEOUT, //门打开超时(门磁) + EVENT_ACS_REMOTE_OPEN_DOOR, //远程开门 + EVENT_ACS_REMOTE_CLOSE_DOOR, //远程关门 + EVENT_ACS_REMOTE_ALWAYS_OPEN, //远程常开 + EVENT_ACS_REMOTE_ALWAYS_CLOSE, //远程常关 + EVENT_ACS_NOT_BELONG_MULTI_GROUP, //卡不属于多重认证群组 + EVENT_ACS_INVALID_MULTI_VERIFY_PERIOD, //卡不在多重认证时间段内 + EVENT_ACS_MULTI_VERIFY_SUPER_RIGHT_FAIL, //多重认证模式超级密码认证失败 + EVENT_ACS_MULTI_VERIFY_REMOTE_RIGHT_FAIL, //多重认证模式远程认证失败 + EVENT_ACS_MULTI_VERIFY_SUCCESS, //多重认证成功 + EVENT_ACS_MULTI_VERIFY_NEED_REMOTE_OPEN, //多重多重认证需要远程开门 + EVENT_ACS_MULTI_VERIFY_SUPERPASSWD_VERIFY_SUCCESS, //多重认证超级密码认证成功事件 + EVENT_ACS_MULTI_VERIFY_REPEAT_VERIFY_FAIL, //多重认证重复认证失败 + EVENT_ACS_MULTI_VERIFY_TIMEOUT, //多重认证超时失败 + EVENT_ACS_REMOTE_CAPTURE_PIC, //远程抓拍 + EVENT_ACS_DOORBELL_RINGING, //门铃响 + EVENT_ACS_SECURITY_MODULE_DESMANTLE_ALARM, //门控安全模块防拆报警 + EVENT_ACS_CALL_CENTER, //呼叫中心事件 + EVENT_ACS_FIRSTCARD_AUTHORIZE_BEGIN, //首卡授权开始 + EVENT_ACS_FIRSTCARD_AUTHORIZE_END, //首卡授权结束 + EVENT_ACS_DOORLOCK_INPUT_SHORT_CIRCUIT, //门锁输入短路报警 + EVENT_ACS_DOORLOCK_INPUT_BROKEN_CIRCUIT, //门锁输入断路报警 + EVENT_ACS_DOORLOCK_INPUT_EXCEPTION, //门锁输入异常报警 + EVENT_ACS_DOORCONTACT_INPUT_SHORT_CIRCUIT, //门磁输入短路报警 + EVENT_ACS_DOORCONTACT_INPUT_BROKEN_CIRCUIT, //门磁输入断路报警 + EVENT_ACS_DOORCONTACT_INPUT_EXCEPTION, //门磁输入异常报警 + EVENT_ACS_OPENBUTTON_INPUT_SHORT_CIRCUIT, //开门按钮输入短路报警 + EVENT_ACS_OPENBUTTON_INPUT_BROKEN_CIRCUIT, //开门按钮输入断路报警 + EVENT_ACS_OPENBUTTON_INPUT_EXCEPTION, //开门按钮输入异常报警 + EVENT_ACS_DOORLOCK_OPEN_EXCEPTION, //门锁异常打开 + EVENT_ACS_DOORLOCK_OPEN_TIMEOUT, //门锁打开超时 + EVENT_ACS_FIRSTCARD_OPEN_WITHOUT_AUTHORIZE, //首卡未授权开门失败 + EVENT_ACS_CALL_LADDER_RELAY_BREAK, //呼梯继电器断开 + EVENT_ACS_CALL_LADDER_RELAY_CLOSE, //呼梯继电器闭合 + EVENT_ACS_AUTO_KEY_RELAY_BREAK, //自动按键继电器断开 + EVENT_ACS_AUTO_KEY_RELAY_CLOSE, //自动按键继电器闭合 + EVENT_ACS_KEY_CONTROL_RELAY_BREAK, //按键梯控继电器断开 + EVENT_ACS_KEY_CONTROL_RELAY_CLOSE, //按键梯控继电器闭合 + EVENT_ACS_REMOTE_VISITOR_CALL_LADDER, //访客呼梯 + EVENT_ACS_REMOTE_HOUSEHOLD_CALL_LADDER, //住户呼梯 + EVENT_ACS_LEGAL_MESSAGE, //合法短信 + EVENT_ACS_ILLEGAL_MESSAGE, //非法短信 + EVENT_ACS_TRAILING, //尾随通行 + EVENT_ACS_REVERSE_ACCESS, //反向闯入 + EVENT_ACS_FORCE_ACCESS, //外力冲撞 + EVENT_ACS_CLIMBING_OVER_GATE, //翻越 + EVENT_ACS_PASSING_TIMEOUT, //通行超时 + EVENT_ACS_INTRUSION_ALARM, //误闯报警 + EVENT_ACS_FREE_GATE_PASS_NOT_AUTH, //闸机自由通行时未认证通过 + EVENT_ACS_DROP_ARM_BLOCK, //摆臂被阻挡 + EVENT_ACS_DROP_ARM_BLOCK_RESUME, //摆臂阻挡消除 + EVENT_ACS_REMOTE_CONTROL_CLOSE_DOOR, //遥控器关门 + EVENT_ACS_REMOTE_CONTROL_OPEN_DOOR, //遥控器开门 + EVENT_ACS_REMOTE_CONTROL_ALWAYS_OPEN_DOOR //遥控器常开门 +}ACS_DOOR_SUBEVENT_ENUM; + +typedef enum _ACS_CARD_READER_SUBEVENT_ENUM_ +{ + EVENT_ACS_STRESS_ALARM = 0, //胁迫报警 + EVENT_ACS_CARD_READER_DESMANTLE_ALARM, //读卡器防拆报警 + EVENT_ACS_LEGAL_CARD_PASS, //合法卡认证通过 + EVENT_ACS_CARD_AND_PSW_PASS, //刷卡加密码认证通过 + EVENT_ACS_CARD_AND_PSW_FAIL, //刷卡加密码认证失败 + EVENT_ACS_CARD_AND_PSW_TIMEOUT, //刷卡加密码认证超时 + EVENT_ACS_CARD_MAX_AUTHENTICATE_FAIL, //读卡器认证失败超次 + EVENT_ACS_CARD_NO_RIGHT, //卡未分配权限 + EVENT_ACS_CARD_INVALID_PERIOD, //卡当前时段无效 + EVENT_ACS_CARD_OUT_OF_DATE, //卡号过期 + EVENT_ACS_INVALID_CARD, //无此卡号 + EVENT_ACS_ANTI_SNEAK_FAIL, //反潜回认证失败 + EVENT_ACS_INTERLOCK_DOOR_NOT_CLOSE, //互锁门未关闭 + EVENT_ACS_FINGERPRINT_COMPARE_PASS, //指纹比对通过 + EVENT_ACS_FINGERPRINT_COMPARE_FAIL, //指纹比对失败 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_PASS, //刷卡加指纹认证通过 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_FAIL, //刷卡加指纹认证失败 + EVENT_ACS_CARD_FINGERPRINT_VERIFY_TIMEOUT, //刷卡加指纹认证超时 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_PASS, //刷卡加指纹加密码认证通过 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_FAIL, //刷卡加指纹加密码认证失败 + EVENT_ACS_CARD_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //刷卡加指纹加密码认证超时 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_PASS, //指纹加密码认证通过 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_FAIL, //指纹加密码认证失败 + EVENT_ACS_FINGERPRINT_PASSWD_VERIFY_TIMEOUT, //指纹加密码认证超时 + EVENT_ACS_FINGERPRINT_INEXISTENCE, //指纹不存在 + EVENT_ACS_FACE_VERIFY_PASS, //人脸认证通过 + EVENT_ACS_FACE_VERIFY_FAIL, //人脸认证失败 + EVENT_ACS_FACE_AND_FP_VERIFY_PASS, //人脸加指纹认证通过 + EVENT_ACS_FACE_AND_FP_VERIFY_FAIL, //人脸加指纹认证失败 + EVENT_ACS_FACE_AND_FP_VERIFY_TIMEOUT, //人脸加指纹认证超时 + EVENT_ACS_FACE_AND_PW_VERIFY_PASS, //人脸加密码认证通过 + EVENT_ACS_FACE_AND_PW_VERIFY_FAIL, //人脸加密码认证失败 + EVENT_ACS_FACE_AND_PW_VERIFY_TIMEOUT, //人脸加密码认证超时 + EVENT_ACS_FACE_AND_CARD_VERIFY_PASS, //人脸加刷卡认证通过 + EVENT_ACS_FACE_AND_CARD_VERIFY_FAIL, //人脸加刷卡认证失败 + EVENT_ACS_FACE_AND_CARD_VERIFY_TIMEOUT, //人脸加刷卡认证超时 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_PASS, //人脸加密码加指纹认证通过 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_FAIL, //人脸加密码加指纹认证失败 + EVENT_ACS_FACE_AND_PW_AND_FP_VERIFY_TIMEOUT, //人脸加密码加指纹认证超时 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_PASS, //人脸加刷卡加指纹认证通过 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_FAIL, //人脸加刷卡加指纹认证失败 + EVENT_ACS_FACE_AND_CARD_AND_FP_VERIFY_TIMEOUT, //人脸加刷卡加指纹认证超时 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_PASS, //工号加指纹认证通过 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_FAIL, //工号加指纹认证失败 + EVENT_ACS_EMPLOYEENO_AND_FP_VERIFY_TIMEOUT, //工号加指纹认证超时 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_PASS, //工号加指纹加密码认证通过 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_FAIL, //工号加指纹加密码认证失败 + EVENT_ACS_EMPLOYEENO_AND_FP_AND_PW_VERIFY_TIMEOUT, //工号加指纹加密码认证超时 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_PASS, //工号加人脸认证通过 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_FAIL, //工号加人脸认证失败 + EVENT_ACS_EMPLOYEENO_AND_FACE_VERIFY_TIMEOUT, //工号加人脸认证超时 + EVENT_ACS_FACE_RECOGNIZE_FAIL, //人脸识别失败 + EVENT_ACS_EMPLOYEENO_AND_PW_PASS, //工号加密码认证通过 + EVENT_ACS_EMPLOYEENO_AND_PW_FAIL, //工号加密码认证失败 + EVENT_ACS_EMPLOYEENO_AND_PW_TIMEOUT, //工号加密码认证超时 + EVENT_ACS_HUMAN_DETECT_FAIL, //真人检测失败 + EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_PASS, //人证比对通过 + EVENT_ACS_PEOPLE_AND_ID_CARD_COMPARE_FAIL, //人证比对失败 + EVENT_ACS_DOOR_OPEN_OR_DORMANT_FAIL, //门状态常闭或休眠状态认证失败 + EVENT_ACS_AUTH_PLAN_DORMANT_FAIL, //认证计划休眠模式认证失败 + EVENT_ACS_CARD_ENCRYPT_VERIFY_FAIL, //卡加密校验失败 + EVENT_ACS_SUBMARINEBACK_REPLY_FAIL, //反潜回服务器应答失败 + EVENT_ACS_PASSWORD_MISMATCH, //密码不匹配 + EVENT_ACS_EMPLOYEE_NO_NOT_EXIST, //工号不存在 + EVENT_ACS_COMBINED_VERIFY_PASS, //组合认证通过 + EVENT_ACS_COMBINED_VERIFY_TIMEOUT, //组合认证超时 + EVENT_ACS_VERIFY_MODE_MISMATCH, //认证方式不匹配 + EVENT_ACS_PSW_ERROR_OVER_TIMES, //密码认证超次 67 + EVENT_ACS_PSW_VERIFY_PASS, //密码认证通过 + EVENT_ACS_PSW_VERIFY_FAIL, //密码认证失败 + EVENT_ACS_ORCODE_VERIFY_PASS, //二维码认证通过 + EVENT_ACS_ORCODE_VERIFY_FAIL, //二维码认证失败 + EVENT_ACS_HOUSEHOLDER_AUTHORIZE_PASS, //户主授权认证通过 + EVENT_ACS_BLUETOOTH_VERIFY_PASS, //蓝牙认证通过 + EVENT_ACS_BLUETOOTH_VERIFY_FAIL, //蓝牙认证失败 74 + EVENT_ACS_INFORMAL_M1_CARD_VERIFY_FAIL, //非正规M1卡认证失败 + EVENT_ACS_CPU_CARD_ENCRYPT_VERIFY_FAIL, //CPU卡加密校验失败 + EVENT_ACS_NFC_DISABLE_VERIFY_FAIL, //NFC功能关闭验证失败 + EVENT_ACS_EM_CARD_RECOGNIZE_NOT_ENABLED, //EM卡识别未启用 + EVENT_ACS_M1_CARD_RECOGNIZE_NOT_ENABLED, //M1卡识别未启用 + EVENT_ACS_CPU_CARD_RECOGNIZE_NOT_ENABLED, //CPU卡识别未启用 + EVENT_ACS_ID_CARD_RECOGNIZE_NOT_ENABLED, //身份证识别未启用 + EVENT_ACS_CARD_SET_SECRET_KEY_FAIL, //卡灌装密钥失败 + EVENT_ACS_DESFIRE_CARD_ENCRYPT_VERIFY_FAIL, //Desfire卡加密校验失败 + EVENT_ACS_DESFIRE_CARD_RECOGNIZE_NOT_ENABLED, //Desfire卡识别未启用 + EVENT_ACS_IRIS_VERIFY_PASS, //虹膜认证通过 + EVENT_ACS_IRIS_VERIFY_FAIL, //虹膜认证失败 + EVENT_ACS_IRIS_BIOASSAY_FAIL, //虹膜活体检测失败 + EVENT_ACS_FELICA_CARD_RECOGNIZE_NOT_ENABLED, //Felica卡识别未启用 + EVENT_ACS_ORCODE_RECOGNIZE_PASS, //二维码识别成功(纯二维码事件,不带任何认证) + EVENT_ACS_VP_ANTI_SPOOFING_FAIL, //声纹活体检测失败 + EVENT_ACS_VP_VERIFY_FAIL, //声纹认证失败 + EVENT_ACS_ESD_OK, //ESD合格开门 + EVENT_ACS_ESD_NOT_OK_OPEN_DOOR, //ESD不合格但开门 + EVENT_ACS_ESD_NOT_OK, //ESD不合格不开门 + EVENT_ACS_ESD_OVERTIME //ESD检测超时 +}ACS_CARD_READER_SUBEVENT_ENUM; + +typedef struct tagNET_DVR_EVENT_LINKAGE_INFO +{ + WORD wMainEventType; //事件主类型,0-设备事件,1-报警输入事件,2-门事件,3-读卡器事件 + WORD wSubEventType; //事件次类型 + BYTE byRes[28]; +}NET_DVR_EVENT_LINKAGE_INFO,*LPNET_DVR_EVENT_LINKAGE_INFO; + +typedef union tagNET_DVR_EVETN_CARD_LINKAGE_UNION +{ + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + NET_DVR_EVENT_LINKAGE_INFO struEventLinkage; //事件联动时参数 + BYTE byMACAddr[MACADDR_LEN]; //物理MAC地址 + BYTE byEmployeeNo[NET_SDK_EMPLOYEE_NO_LEN]; //工号(人员ID) +}NET_DVR_EVETN_CARD_LINKAGE_UNION,*LPNET_DVR_EVETN_CARD_LINKAGE_UNION; + +typedef struct tagNET_DVR_EVENT_CARD_LINKAGE_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号 + BYTE byRes1[3]; + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按数组表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按数组表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按数组表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按数组表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按数组表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byRes3[29]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按数组表示,0-不联动,1-联动 + BYTE byRes[128]; //保留 +}NET_DVR_EVENT_CARD_LINKAGE_CFG,*LPNET_DVR_EVENT_CARD_LINKAGE_CFG; + +typedef struct tagNET_DVR_EVENT_LINKAGE_CARD_CFG_V50 +{ + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号, 2-MAC地址 + BYTE byRes1[3]; + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID。0xffffffff表示联动全部 + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按位表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按位表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按位表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byRes3[29]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按位表示,0-不联动,1-联动 + BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //关联报警输出关闭,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区布防,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区撤防,按字节表示,为0表示不关联,为1表示关联 + BYTE byRes[500]; //保留 +}NET_DVR_EVENT_CARD_LINKAGE_CFG_V50, *LPNET_DVR_EVENT_CARD_LINKAGE_CFG_V50; + +typedef struct tagNET_DVR_EVENT_LINKAGE_CARD_CFG_V51 +{ + DWORD dwSize; //结构体大小 + BYTE byProMode; //联动方式,0-事件,1-卡号,2-MAC地址,3-工号(人员ID) + BYTE byRes1[3]; + DWORD dwEventSourceID; //事件源ID,当主类型为设备事件时无效, 当主类型是门事件时为门编号;当主类型为读卡器事件时,为读卡器ID;当为报警输入事件时为防区报警输入ID或事件报警输入ID。0xffffffff表示联动全部 + NET_DVR_EVETN_CARD_LINKAGE_UNION uLinkageInfo; //联动方式参数 + BYTE byAlarmout[MAX_ALARMHOST_ALARMOUT_NUM]; //关联的报警输出号,按位表示,为0表示不关联,为1表示关联 + BYTE byRes2[32]; //保留 + BYTE byOpenDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动开门,0-不联动,1-联动 + BYTE byCloseDoor[MAX_DOOR_NUM_256]; //按位表示,是否联动关门,0-不联动,1-联动 + BYTE byNormalOpen[MAX_DOOR_NUM_256]; //按位表示,是否联动常开,0-不联动,1-联动 + BYTE byNormalClose[MAX_DOOR_NUM_256]; //按位表示,是否联动常关,0-不联动,1-联动 + BYTE byMainDevBuzzer; //主机蜂鸣器 0-不联动,1-联动输出 + BYTE byCapturePic; //是否联动抓拍,0-不联动抓拍,1-联动抓拍 + BYTE byRecordVideo; //是否联动录像,0-不联动录像,1-联动录像 + BYTE byMainDevStopBuzzer; //主机停止蜂鸣 0-不联动,1-联动输出 + WORD wAudioDisplayID; //联动语音播放ID:0-不联动,目前范围1-32 + BYTE byAudioDisplayMode; //联动语音播放模式:0-关闭,1-单次播放,2-循环播放 + BYTE byRes3[25]; //保留 + BYTE byReaderBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器蜂鸣器,按位表示,0-不联动,1-联动 + BYTE byAlarmOutClose[MAX_ALARMHOST_ALARMOUT_NUM]; //关联报警输出关闭,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInSetup[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区布防,按字节表示,为0表示不关联,为1表示关联 + BYTE byAlarmInClose[MAX_ALARMHOST_ALARMIN_NUM]; //关联防区撤防,按字节表示,为0表示不关联,为1表示关联 + BYTE byReaderStopBuzzer[MAX_CARD_READER_NUM_512]; //联动读卡器停止蜂鸣,按字节表示,0-不联动,1-联动 + BYTE byRes[512]; //保留 +}NET_DVR_EVENT_CARD_LINKAGE_CFG_V51, *LPNET_DVR_EVENT_CARD_LINKAGE_CFG_V51; + +typedef struct tagNET_DVR_EVENT_CARD_LINKAGE_COND +{ + DWORD dwSize; + DWORD dwEventID; //事件ID + WORD wLocalControllerID; //就地控制器序号[1,64] + BYTE byRes[106]; +}NET_DVR_EVENT_CARD_LINKAGE_COND, *LPNET_DVR_EVENT_CARD_LINKAGE_COND; + +typedef struct tagNET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM +{ + DWORD dwSize; + DWORD dwFileSize; //文件大小,单位:字节(上传音频文件时有效,下载音频文件时无效) + DWORD dwAudioID; //音频ID(0xffffffff代表上传/下载全部音频文件,目前设备仅支持全量上传/下载,不支持单个音频ID上传/下载) + BYTE byRes[256]; +}NET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM, *LPNET_DVR_RIGHT_CONTROLLER_AUDIO_PARAM; + +//客户标定文件结构体 +typedef struct tagNET_DVR_CLIENT_CALIBFILE_PARAM +{ + DWORD dwSize; + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 + BYTE byRes[22]; +}NET_DVR_CLIENT_CALIBFILE_PARAM, *LPNET_DVR_CLIENT_CALIBFILE_PARAM; + +typedef struct tagNET_DVR_RATIOSTITCHING_PARAM +{ + DWORD dwSize; + DWORD dwFileLen; //文件大小 + BYTE byChannel;// 多个senor拼接后通道号 + BYTE byRes[23]; +}NET_DVR_RATIOSTITCHING_PARAM, *LPNET_DVR_RATIOSTITCHING_PARAM; + +//电视墙素材文件 +typedef struct tagNET_DVR_VIDEOWALL_MATERIAL_COND +{ + DWORD dwSize; + BYTE byWallNo; //电视墙墙号,从1开始 + BYTE byWindowType; //窗口类型,0-图文窗口,1-字幕窗口 + BYTE byFileType; //文件类型,0-图片 + BYTE byRes1; //保留字节 + DWORD dwWindowNo; //窗口编号,从1开始 + DWORD dwMaterialNo; //素材编号,从1开始 + BYTE byRes[32]; +}NET_DVR_VIDEOWALL_MATERIAL_COND, *LPNET_DVR_VIDEOWALL_MATERIAL_COND; + +//3200W矫正表结构体 +typedef struct tagNET_DVR_CORRECT_TABLE_3200W_PARAM +{ + DWORD dwSize; + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 + BYTE byRes[22]; +}NET_DVR_CORRECT_TABLE_3200W_PARAM, *LPNET_DVR_CORRECT_TABLE_3200W_PARAM; + +//四通道抓图文件结构体 +typedef struct tagNET_DVR_FOUR_CAMERAS_PICTURES +{ + DWORD dwSize; + DWORD dwFileLen; //文件大小 + BYTE byChannel; //通道号 + BYTE byRes[23]; +}NET_DVR_FOUR_CAMERAS_PICTURES, *LPNET_DVR_FOUR_CAMERAS_PICTURES; + +// 导出指定型号标定文件结构体 +typedef struct tagNET_DVR_DEVTYPE_CALIBFILE_PARAM +{ + DWORD dwSize; + DWORD dwFileLen; //文件长度 + BYTE byChannel; //通道号 + BYTE byFileType; //0-3200W标定文件,1-800W标定文件 + BYTE byRes[22]; +}NET_DVR_DEVTYPE_CALIBFILE_PARAM, *LPNET_DVR_DEVTYPE_CALIBFILE_PARAM; + +typedef struct tagNET_DVR_ANTI_SNEAK_HOST_INFO +{ + NET_DVR_ADDRESS struDVRIP; //主机IP地址 + BYTE byIsStartAddr; //是否为开始地址,0-否,1-是 + BYTE byHostNo; //主机编号,1-8,主要用于读卡器顺序设置 + BYTE byRes[34]; //保留 +}NET_DVR_ANTI_SNEAK_HOST_INFO,*LPNET_DVR_ANTI_SNEAK_HOST_INFO; + +typedef struct tagNET_DVR_ANTI_SNEAK_HOST_READER_INFO +{ + BYTE byAntiSnealHostNo; //反潜回主机编号 + BYTE byRes[5]; //保留 + WORD wFollowUpCardReader; //该反潜回主机下的读卡器编号 +}NET_DVR_ANTI_SNEAK_HOST_READER_INFO, *LPNET_DVR_ANTI_SNEAK_HOST_READER_INFO; + +typedef struct tagNET_DVR_ANTI_SNEAK_MULTI_HOST_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 + BYTE byRes1[3]; + NET_DVR_ANTI_SNEAK_HOST_INFO struSneakHost[MAX_SNEAK_PATH_NODE]; //后续主机地址信息 + NET_DVR_ANTI_SNEAK_HOST_READER_INFO struStartReader; //起始读卡器编号 当该内容全为0时,表示不关注从哪个读卡器开始 + BYTE byRes2[128]; +}NET_DVR_ANTI_SNEAK_MULTI_HOST_CFG, *LPNET_DVR_ANTI_SNEAK_MULTI_HOST_CFG; + +typedef struct tagNET_DVR_ANTI_SNEAK_READER_CFG +{ + BYTE byEnable; //是否加入反潜回路径,1-加入,0-不加入 + BYTE byAntiSnealHostNo; //反潜回主机编号 + WORD wReaderID; //读卡器ID + NET_DVR_ANTI_SNEAK_HOST_READER_INFO struSneakReaderInfo[MAX_SNEAK_PATH_NODE]; //后续主机读卡器编号 + BYTE byRes2[8]; +}NET_DVR_ANTI_SNEAK_READER_CFG, *LPNET_DVR_ANTI_SNEAK_READER_CFG; + +typedef struct tagNET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG +{ + DWORD dwSize; + NET_DVR_ANTI_SNEAK_READER_CFG struReaderCfg[MAX_READER_ROUTE_NUM]; //读卡器信息 + BYTE byRes[128]; +}NET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG, *LPNET_DVR_ANTI_SNEAK_MULTI_HOST_READERS_CFG; + +typedef struct tagNET_DVR_ACS_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byRS485Backup; //是否启用下行RS485通信备份功能,0-不启用,1-启用 + BYTE byShowCapPic; //是否显示抓拍图片, 0-不显示,1-显示 + BYTE byShowCardNo; //是否显示卡号,0-不显示,1-显示 + BYTE byShowUserInfo; //是否显示用户信息,0-不显示,1-显示 + BYTE byOverlayUserInfo;//是否叠加用户信息,0-不叠加,1-叠加 + BYTE byVoicePrompt; //是否启用语音提示,0-不启用,1-启用 + BYTE byUploadCapPic; //联动抓拍是否上传图片,0-不上传,1-上传 + BYTE bySaveCapPic; //是否保存抓拍图片,0-不保存,1-保存 + BYTE byInputCardNo; //是否是否允许按键输入卡号,0-不允许,1-允许 + BYTE byEnableWifi; //是否启动wifi,0-不启动,1-启动 + BYTE byEnable3G4G; //3G4G使能,0-不使能,1-使能 + BYTE byProtocol;//读卡器通信协议类型,0-私有协议(默认),1-OSDP协议 + BYTE byRes[500]; +}NET_DVR_ACS_CFG, *LPNET_DVR_ACS_CFG; + +typedef struct tagNET_DVR_PLATFORM_VERIFY_CFG +{ + DWORD dwSize; + DWORD dwDoorNo; //门编号 + BYTE byResultType; //认证结果类型,0:非法,1:合法 + BYTE byRes1[3]; + BYTE byScreenDisplay[MAX_SCREEN_DISPLAY_LEN]; //LED屏幕显示,用于显示认证相关信息 + BYTE byRes[300]; // 保留字节 +}NET_DVR_PLATFORM_VERIFY_CFG, *LPNET_DVR_PLATFORM_VERIFY_CFG; + +typedef struct tagNET_DVR_PERSON_STATISTICS_CFG +{ + DWORD dwSize; + BYTE byEnableStatistics; //是否开启人数统计,0:不开启;1:开启; + BYTE byEnableOfflineStatistics; //是否开启离线人数统计,0:不开启;1:开启; + BYTE byCountSignalStatisticalStandard; //计数信号统计标准,0:无效;1:红外检测通行统计;2:认证数量统计 + BYTE byRes[605]; +}NET_DVR_PERSON_STATISTICS_CFG, *LPNET_DVR_PERSON_STATISTICS_CFG; + +typedef struct tagNET_DVR_ACS_SCREEN_DISPLAY_CFG +{ + DWORD dwSize; + DWORD dwFontSize; //字体大小,[1,10]; + DWORD dwRowSpacing; //行间距,单位:像素点; + DWORD dwColumnSpacing; //列间距,单位:像素点; + DWORD dwFirstRowPosition; //起始行位置在屏幕哪一个分块,0:0、 1:1/8:、 2:2/8、 3:3/8、 4:4/8、 5:5/8、 6:6/8:、 7:7/8; + BYTE byDegree; //字符显示方向角度,0-0度(正常),1-90度(侧着); + BYTE byScreenType; //屏幕类型,0-DC48270RS043_01T,1-DC80480B070_03T; + BYTE byRes[306]; +}NET_DVR_ACS_SCREEN_DISPLAY_CFG, *LPNET_DVR_ACS_SCREEN_DISPLAY_CFG; + +typedef struct tagNET_DVR_GATE_TIME_CFG +{ + DWORD dwSize; + DWORD dwHoldOnALarmTime; //延续报警器蜂鸣时间,单位ms + DWORD dwHoldOnGateOpenTime; //闸门收到关闭命令前继续保持打开状态时间,单位ms + DWORD dwPostponeIntrusionAlarmTime; //推迟触发闯入欺骗行为报警时间,单位ms + DWORD dwNoLaneAccessTimeLimitTime; //通道收到有效通行认证信号,但无人通行超时报警时间,单位s + DWORD dwSafetyZoneStayTime; //通道收到有效通行认证信号,乘客到达安全区后滞留通道超时报警时间,单位s + BYTE byIRTriggerTimeoutTime; //红外触发超时时间,单位:秒(0-255) + BYTE byRes[299]; +}NET_DVR_GATE_TIME_CFG, *LPNET_DVR_GATE_TIME_CFG; + + +typedef struct tagNET_DVR_CARD_PASSWD_CFG +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + DWORD dwErrorCode; //获取卡密码开门使能配置返回的错误码,成功为0,失败返回错误码 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) + BYTE byRes2[23]; +}NET_DVR_CARD_PASSWD_CFG, *LPNET_DVR_CARD_PASSWD_CFG; + +typedef struct tagNET_DVR_CARD_PASSWD_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + DWORD dwErrorCode; //发送卡密码开门使能配置返回的错误码,成功为0,失败返回错误码 + BYTE byRes2[24]; +}NET_DVR_CARD_PASSWD_STATUS, *LPNET_DVR_CARD_PASSWD_STATUS; + +//条件结构 +typedef struct tagNET_DVR_VEHICLE_RECOG_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byRes[64]; +} NET_DVR_VEHICLE_RECOG_COND, *LPNET_DVR_VEHICLE_RECOG_COND; + +//参数结构 +typedef struct tagNET_DVR_VEHICLE_RECOG_CFG +{ + DWORD dwSize; + //数据流水号 和(上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段sDataIndex对应) + char sDataIndex[DATA_INDEX_LEN]; + //任务处理号 和 (上传数据NET_DVR_VEHICLE_RECOG_RESULT中的字段dwTaskNo对应) + WORD wTaskNo; + BYTE byRes1[2]; + NET_VCA_RECT struPlateRect;//车牌位置 + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + /* + 车辆图片二次识别操作 + bit0-车牌识别:0-不启用识别,1-启用识别; + bit1-车辆类型识别:0-不启用识别,1-启用识别; + bit2-车身颜色识别:0-不启用识别,1-启用识别; + bit3-车辆品牌识别:0-不启用识别,1-启用识别; + bit4-遮挡板识别(主驾驶):0-不启用识别,1-启用识别; + bit5-安全带识别(主驾驶):0-不启用识别,1-启用识别; + bit6-遮挡板识别(副驾驶):0-不启用识别,1-启用识别; + bit7-安全带识别(副驾驶):0-不启用识别,1-启用识别; + bit8-车辆图片叠加使能:0-不启用识别,1-启用识别; + bit9-上传车辆图片使能(通过SDK):0-不启用识别,1-启用识别; + bit10-上传车辆图片使能(通过URL):0-不启用识别,1-启用识别; + bit11-黄标车:0-不启用识别,1-启用识别; + bit12-打手机:0-不启用识别,1-启用识别; + bit13-挂件:0-不启用识别,1-启用识别; + bit14-危险品车: 0-不启用识别,1-启用识别; + bit15-车辆天窗站人检测: 0-不启用识别,1-启用识别; + */ + DWORD dwRecogOperate; + /* + 车辆图片数据上传 + bit0-车牌图片:0-不上传,1-上传; + bit1-车辆图片:0-不上传,1-上传; + bit2-人脸子图(主驾驶):0-不上传,1-上传; + bit3-人脸子图(副驾驶):0-不上传,1-上传; + bit4-安全带子图(主驾驶):0-不上传,1-上传; + bit5-安全带子图(副驾驶):0-不上传,1-上传; + */ + DWORD dwDataUploadType; + DWORD dwPostID;//卡口ID。 + NET_DVR_TIME_V30 struPostTime;//过车时间 + DWORD dwJsonLen; //Json透传数据长度 + BYTE *pJsonBuffer;//Json数据指针,参考4.2.4Json数据格式 + BYTE byRes[107]; + BYTE byPicDataType;//图片数据类型,0-图片数据,1-URL + //图片数据 + //当byPicDataType == 0的时候,该字段内的数据无效,图片数据在结构体后面 + //当byPicDataType == 1的时候,是指定的图片的URL信息 + char sPicDataPath[256]; +}NET_DVR_VEHICLE_RECOG_CFG, *LPNET_DVR_VEHICLE_RECOG_CFG; + +typedef struct tagNET_DVR_VEHICLERECOG_TASK_RESULT +{ + DWORD dwSize; + //设备数据流水号,每次提交任务,设备会自行生成唯一的流水号返回给上层。 + char sDevDataIndex[MAX_DEV_DATAINDEX_LEN/*64*/]; + BYTE byRes[256]; +}NET_DVR_VEHICLERECOG_TASK_RESULT, *LPNET_DVR_VEHICLERECOG_TASK_RESULT; + +//条件结构 +typedef struct tagNET_DVR_VEHICLE_RECOG_TASK_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + char sDataIndex[DATA_INDEX_LEN];//数据流水号 全0的时候表示获取全部 + WORD wTaskNo;//任务处理号 值为0的时候表示全部任务 + /* + 任务状态 + bit0-完成状态的任务:0-不查询,1-查询; + bit1-执行中的任务:0-不查询,1-查询; + bit2-等待中的任务:0-不查询,1-查询; + */ + BYTE byTask; + BYTE byRes1; + //设备数据流水号查询,每次提交任务,设备会自行生成唯一的流水号。 + char sDevDataIndex[MAX_DEV_DATAINDEX_LEN/*64*/]; + BYTE byRes[60]; +}NET_DVR_VEHICLE_RECOG_TASK_COND, *LPNET_DVR_VEHICLE_RECOG_TASK_COND; + +//参数结构 +typedef struct tagNET_DVR_VEHICLE_RECOG_TASK_INFO +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + char sDataIndex[DATA_INDEX_LEN];//数据流水号 + WORD wTaskNo;//任务处理号 + WORD wTaskProgress;//任务执行进度(实际进度*1000) + BYTE byTaskState;//任务状态,0-等待中,1-执行中,2-完成 + BYTE byRes1[3]; + /* + 车辆图片二次识别操作 + bit0-车牌识别:0-不启用识别,1-启用识别; + bit1-车辆类型识别:0-不启用识别,1-启用识别; + bit2-车身颜色识别:0-不启用识别,1-启用识别; + bit3-车辆品牌识别:0-不启用识别,1-启用识别; + bit4-遮挡板识别(主驾驶):0-不启用识别,1-启用识别; + bit5-安全带识别(主驾驶):0-不启用识别,1-启用识别; + bit6-遮挡板识别(副驾驶):0-不启用识别,1-启用识别; + bit7-安全带识别(副驾驶):0-不启用识别,1-启用识别; + bit8-车辆图片叠加使能:0-不启用识别,1-启用识别; + bit9-上传车辆图片使能(通过SDK):0-不启用识别,1-启用识别; + bit10-上传车辆图片使能(通过URL):0-不启用识别,1-启用识别; + bit11-黄标车:0-不启用识别,1-启用识别; + bit12-打手机:0-不启用识别,1-启用识别; + bit13-挂件:0-不启用识别,1-启用识别; + bit14-危险品车: 0-不启用识别,1-启用识别; + bit15-车辆天窗站人检测: 0-不启用识别,1-启用识别; + */ + DWORD dwRecogOperate; + DWORD dwPostID;//卡口ID。 + NET_DVR_TIME_V30 struPostTime;//过车时间 + DWORD dwJsonLen; //Json透传数据长度(预留,JSON内容暂不实现) + BYTE *pJsonBuffer;//Json数据指针, (预留,JSON内容暂不实现) + BYTE byRes[104]; +}NET_DVR_VEHICLE_RECOG_TASK_INFO, *LPNET_DVR_VEHICLE_RECOG_TASK_INFO; + +typedef struct tagNET_DVR_VEHICLE_RECOG_RESULT +{ + DWORD dwSize; //结构 + //数据流水号 和(任务提交NET_DVR_VEHICLE_RECOG_CFG中的字段sDataIndex对应) + char sDataIndex[DATA_INDEX_LEN]; + //任务处理号 和 (任务提交NET_DVR_VEHICLE_RECOG_CFG中的字段wTaskNo对应) + WORD wTaskNo; + BYTE byRes[2]; + NET_VCA_RECT struPlateRect;//车牌位置 + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byColorDepth; //车身颜色深浅,参考 0-深色,1-浅色 + BYTE byColor; //车身颜色, 参考VCR_CLR_CLASS + BYTE byVehicleLogoRecog; //车辆主品牌 + BYTE byVehicleSubLogoRecog; //车辆子品牌 + BYTE byPilotSafebelt;//0-表示未知,1-不系安全带,2-系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-不系安全带,2-系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byVehicleModel;// 参考文档 车辆子品牌年款 + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" + BYTE byRes1[251]; + // 0-数据直接上传; 1-云存储服务器URL原先的图片数据变成URL数据,图片长度变成URL长度 + BYTE byDataType; + /* + 上传图片类型信息: + bit0-车辆图:0-不上传,1-上传; + bit1-车牌图:0-不上传,1-上传; + bit2-人脸子图(主驾驶):0-不上传,1-上传; + bit3-人脸子图(副驾驶):0-不上传,1-上传; + bit4-安全带识别(主驾驶):0-不上传,1-上传; + bit5-安全带识别(副驾驶):0-不上传,1-上传; + */ + DWORD dwPicType; //0:无图片信息;: 车辆图;:车牌图; + BYTE *pVehicleBuffer; //车辆图片数据指针 + DWORD dwVehicleBufferLen ;// 车辆图片数据长度 + BYTE *pPlateBuffer; //车牌图片数据指针 + DWORD dwPlateBufferLen ;// 车牌图片数据长度 + BYTE *pPilotFaceBuffer; //人脸子图(主驾驶)图片数据指针 + DWORD dwPilotFaceBufferLen ;// 人脸子图(主驾驶)图片数据长度 + BYTE *pCopilotFaceBuffer; //人脸子图(副驾驶)图片数据指针 + DWORD dwCopilotFaceBufferLen ;// 人脸子图(副驾驶)图片数据长度 + BYTE *pPilotSafebeltBuffer; //安全带识别(主驾驶)图片数据指针 + DWORD dwPilotSafebeltBufferLen ;// 安全带识别(主驾驶)图片数据长度 + BYTE *pCopilotSafebeltBuffer;// 安全带识别(副驾驶)图片数据指针 + DWORD dwCopilotSafebeltBufferLen ;// 安全带识别(副驾驶)图片数据长度 + NET_VCA_RECT struVehicleRect ;//车身矩形坐标 + NET_VCA_RECT struPilotRect ;//主驾驶矩形坐标 + NET_VCA_RECT struCopilotRect ;//副驾驶矩形坐标 + BYTE *pJsonBuffer;//Json数据指针,参考JSON数据格式 + DWORD dwJsonBufferLen;// Json数据长度 + DWORD dwPostID;//卡口ID + NET_DVR_TIME_V30 struPostTime;//过车时间 + BYTE Res2[56]; +}NET_DVR_VEHICLE_RECOG_RESULT, *LPNET_DVR_VEHICLE_RECOG_RESULT; + +#define MAX_ZONE_LINKAGE_CHAN_NUM 4 /* 防区关联最大通道数*/ + +typedef struct tagNET_DVR_CENTER_SERVER_CFG_ +{ + DWORD dwSize; + BYTE byAddressType; //0 - ipv4/ipv6地址,1 - 域名 + BYTE byRes1; + WORD wServerPort; //服务器端口 + union + { + struct + { + BYTE szDomain[MAX_DOMAIN_NAME]; + BYTE byRes2[80]; + }struDomain; //服务器域名 + struct + { + NET_DVR_IPADDR struIp; + }struAddrIP; //IP地址 + }unionServer;//使用联合体结构,通过byAddressType字段表示是IP地址还是域名 + WORD wInterval; //报警间隔时间,0-30s + BYTE byRes3[514]; +}NET_DVR_CENTER_SERVER_CFG,*LPNET_DVR_CENTER_SERVER_CFG; + +typedef struct tagNET_DVR_SINGLE_CHANNEL_LINKAGE_CFG_ +{ + BYTE byDDNSType; //域名服务器类型:0 - 无效,1 - IPServer(私有DNS),2 - hiDDNS + BYTE byRes1; + WORD wDDNSPort; //域名服务器端口号 + BYTE byServerAddr[MAX_DOMAIN_NAME]; //域名服务器地址 + BYTE byDevName[MAX_DOMAIN_NAME]; //设备名称 + BYTE byDevSerialNum[SERIALNO_LEN]; //设备序列号 + BYTE byAddressType; //0 - ipv4/ipv6地址,1 - 域名 + BYTE byRes2; + WORD wDevPort; //设备端口号 + union + { + struct + { + BYTE szDomain[MAX_DOMAIN_NAME]; + BYTE byRes2[80]; + }struDomain; //域名 + struct + { + NET_DVR_IPADDR struIp; + }struAddrIP; //IP地址 + }unionDevAddr;//使用联合体结构,通过byAddressType字段表示是IP地址还是域名 + BYTE sUserName[NAME_LEN/*32*/]; //用户名 + BYTE sPassword[PASSWD_LEN/*16*/];//密码 + DWORD dwChannel; //联动通道号 + BYTE byRes3[32]; +}NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG,*LPNET_DVR_SINGLE_CHANNEL_LINKAGE_CFG; + +typedef struct tagNET_DVR_REGION_CHANNEL_LINKAGE_CFG_ +{ + DWORD dwSize; + NET_DVR_SINGLE_CHANNEL_LINKAGE_CFG struLinkChannels[MAX_ZONE_LINKAGE_CHAN_NUM]; // 每个防区可以关联四个视频通道 + BYTE byRes[64]; +}NET_DVR_ZONE_CHANNEL_LINKAGE_CFG,*LPNET_DVR_ZONE_CHANNEL_LINKAGE_CFG; + +typedef struct tagNET_DVR_SINGLE_ASSOCIATED_CHAN_CFG +{ + BYTE byDevSerialNo[SERIALNO_LEN]; //设备序列号 + DWORD dwChannel; //联动通道号 + BYTE byRes[64]; +}NET_DVR_SINGLE_ASSOCIATED_CHAN_CFG, *LPNET_DVR_SINGLE_ASSOCIATED_CHAN_CFG; + +typedef struct tagNET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG +{ + WORD wZoneNo; + BYTE byRes1[2]; + NET_DVR_SINGLE_ASSOCIATED_CHAN_CFG struSingleChanCfg[MAX_ZONE_LINKAGE_CHAN_NUM]; + BYTE byRes2[64]; +}NET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG, *LPNET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG; + +typedef struct tagNET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG_LIST_ +{ + DWORD dwSize; + NET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG struAssociatedChanCfg[MAX_MAX_ALARMIN_NUM]; + BYTE byRes[64]; +}NET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG_LIST, *LPNET_DVR_ALARMIN_ASSOCIATED_CHAN_CFG_LIST; + +typedef struct tagNET_DVR_LCD_ALARM +{ + DWORD dwSize; + DWORD dwScreenID; //屏幕索引号 + BYTE byOnOffLine; //屏幕是否在线,0-离线,1-在线,当屏幕离线时,本结构后续参数无效 + BYTE byTempState; //板卡温度状态,0-正常,1-异常 + BYTE byFanState; //风扇状态,0-关,1-开 + BYTE byFanException; //风扇异常状态,0-不支持 1-正常,2-异常 + BYTE byTemperature; //屏幕板卡温度,单位:摄氏度 + BYTE byRes[27]; +}NET_DVR_LCD_ALARM, *LPNET_DVR_LCD_ALARM; + +//传感器上传信息 +typedef struct tagNET_DVR_SENSOR_INFO_UPLOAD +{ + DWORD dwSize; + NET_DVR_TIME_V30 struTime; + char szSensorName[MAX_SENSORNAME_LEN]; //传感器名称 + char szSensorChan[MAX_SENSORCHAN_LEN]; //传感器通道 + BYTE byReboot; //之前是否重启过(一般是重启的后的第一条数据带有这个标志)0-表示没有重启,1-有过重启 + BYTE byPowerSupply;//是否正常供电 0-不在供电,1-正在供电 + BYTE byStatusType;//设备状态:0:正常、1:异常、2、报警 + BYTE bySensorType;//参考传感器枚举类型SENSOR_TYPE + float fVoltageValue;//电压值; 精确到0.001 + float fCurrentValue;//电流值;精确到0.001 + float fActualValue;//模拟信号转换后的数值;精确到0.001 + char szDescription[MAX_DESCRIPTION_LEN /* 32*/]; //描述信息;当设备状态(byStatusType)为非0时生效。 + BYTE byRes1[128]; +}NET_DVR_SENSOR_INFO_UPLOAD,*LPNET_DVR_SENSOR_INFO_UPLOAD; + +//抓拍图片上传 +typedef struct tagNET_DVR_CAPTURE_UPLOAD +{ + DWORD dwSize; + NET_DVR_TIME_V30 struTime; + DWORD dwChannel;//通道号 + char szDevName[MAX_DEVNAME_LEN_EX]; + DWORD dwPicLen;//图片长度 + BYTE *pBuffer; //图片数据指针 + BYTE byRes[124]; +}NET_DVR_CAPTURE_UPLOAD,*LPNET_DVR_CAPTURE_UPLOAD; + +//全景联动到位上传 +typedef struct tagNET_DVR_PANORAMIC_LINKAGE +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byType;//图片类型,0-无意义,1-全景联动到位图片 + BYTE byRes1[3]; + BYTE byMACAddr[MACADDR_LEN]; //mac地址 + BYTE byRes2[2]; + NET_DVR_IPADDR struDevIP; //设备IP地址 + DWORD dwPicLen;//全景联动到位抓拍图片长度 + char *pPicBuff; //全景联动到位抓拍图片指针 + BYTE byRes[128]; +}NET_DVR_PANORAMIC_LINKAGE, *LPNET_DVR_PANORAMIC_LINKAGE; + +#define MAX_MASK_AREA_NUM 8 //马赛克区域个数 + +typedef struct tagNET_DVR_AREA_MASK_CFG //区域马赛克 +{ + DWORD dwSize; //结构体大小 + BYTE byEnable;//是否启用马赛克 0-否,1-是 + BYTE byMaskThick; //马赛克厚度 0-薄码,1-中码,2-厚码,薄码的区块大小为8*8,中码16*16,厚码32*32。默认为中码 + BYTE byAutoMask;//是否启用自动马赛克 0-否,1-是 + BYTE byRes1; + NET_VCA_RECT struRegion[MAX_MASK_AREA_NUM];//马赛克区域范围 + BYTE byRes[64]; +}NET_DVR_AREA_MASK_CFG, *LPNET_DVR_AREA_MASK_CFG; + +typedef struct tagNET_DVR_AUDIO_DIACRITICAL_CFG //音频变音 +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用变音 0-不启用,1-启用 + char byBassValue; //高低音值,范围为-12-12 值越大声音越细,反之越小,0-表示不变音 + BYTE byRes[62]; +}NET_DVR_AUDIO_DIACRITICAL_CFG, *LPNET_DVR_AUDIO_DIACRITICAL_CFG; + +typedef struct tagNET_DVR_RESOLUTION_SWITCH +{ + DWORD dwSize; + BYTE byResolutionType;//0-all,1-20:9,2-20:6,3-原始码流模式 + BYTE byRes[127]; +}NET_DVR_RESOLUTION_SWITCH, *LPNET_DVR_RESOLUTION_SWITCH; + +typedef struct tagNET_DVR_WIFI_DHCP_ADDR_CFG //wifi模式下DHCP范围配置 +{ + DWORD dwSize; + NET_DVR_IPADDR struStartAddr; //开始IP地址 + NET_DVR_IPADDR struEndAddr; //结束IP地址 + BYTE byRes[256]; +}NET_DVR_WIFI_DHCP_ADDR_CFG, *LPNET_DVR_WIFI_DHCP_ADDR_CFG; + + +typedef struct tagNET_DVR_WIFI_CLIENT_INFO //音频变音 +{ + DWORD dwSize; + NET_DVR_IPADDR struAddress; //IP地址 + BYTE byMACAddr [MACADDR_LEN]; + WORD wConnSpeed; //连接速度 单位KB + BYTE byRSSIValue; //接收到的信号强度,取值为负值,传输时不带赋值,范围为0~-110dbm,值越大,代表信号越强 + BYTE byRes1; //保留 + WORD wBandwidth; //网络带宽 单位KB + BYTE byRes[32]; +}NET_DVR_WIFI_CLIENT_INFO, *LPNET_DVR_WIFI_CLIENT_INFO; + +typedef struct tagNET_DVR_MULTISTREAM_RELATION_CHAN_CFG //多码流关联通道 +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //关联的编码通道号 + BYTE byRes[64]; +}NET_DVR_MULTISTREAM_RELATION_CHAN_CFG, *LPNET_DVR_MULTISTREAM_RELATION_CHAN_CFG; + +typedef struct +{ + BYTE byPort; //端口 + BYTE byMasterSlaveProperty; //端口主从属性 1-主 2-从 + BYTE byPortEthernetType; //端口类型,1-百兆端口,2-千兆端口 + BYTE byRes[9]; +}NET_DVR_RING_PORT_PROPERTY, *LPNET_DVR_RING_PORT_PROPERTY; +typedef struct +{ + DWORD dwSize; + BYTE byEnable; //是否启用, 0-不启用, !0-启用 + BYTE byProtoType; //协议类型, 1-光端机组网协议(私有),2-综合平台组网协议(私有),3-G8032协议(公有) + BYTE byBandWidth; //环网带宽类型,1-百兆,2-千兆 + BYTE byRes1; //保留字段 + NET_DVR_RING_PORT_PROPERTY struRingPort[PER_RING_PORT_NUM]; //环网端口 + BYTE byRes2[60]; //保留字段 +}NET_DVR_NS_RING_CFG, *LPNET_DVR_NS_RING_CFG; +typedef struct // +{ + DWORD dwSize; //结构体大小 + BYTE byStatus; //环网状态,1-正常 2-断开 + BYTE byMasterSlaveProperty ; //光纤板主从属性 1-主 2-从 + BYTE byRes[62]; //保留字段 +} NET_DVR_NS_RING_STATUS, *LPNET_DVR_NS_RING_STATUS; + +//火点检测报警 +typedef struct tagNET_DVR_FIREDETECTION_ALARM +{ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + WORD wPanPos; + WORD wTiltPos; + WORD wZoomPos; + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1; + DWORD dwPicDataLen;//报警抓拍图片长度 + BYTE *pBuffer; //数据指针 + NET_VCA_RECT struRect;//火点框 + NET_VCA_POINT struPoint ;//火点框内最高温度点坐标 + WORD wFireMaxTemperature ;//火点最高温度[300℃~4000℃] + WORD wTargetDistance ;//目标距离[100m ~ 10000m] + BYTE byStrategyType;//策略类型;0~任意报警,1~协同报警,2~多系统报警,3~指定火点报警,4~指定烟雾报警 + BYTE byAlarmSubType;//报警子类型。0~火点检测报警,1~烟雾检测报警,2~烟火报警 + /*是否启用PTZ坐标扩展, + 0~不启用,PTZ坐标值以wPanPos、wTiltPos、wZoomPos为准。 + 1~启用,PTZ坐标值以struPtzPosEx为准。但是新老PTZ都需返回。struPtzPosEx的值需转化为wPanPos、wTiltPos、wZoomPos值。 + */ + BYTE byPTZPosExEnable; + BYTE byRes2; + NET_PTZ_INFO struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值,精确到小数点后三位) + DWORD dwVisiblePicLen;//可见光图片长度 + BYTE *pVisiblePicBuf; //可见光图片数据指针 + // pSmokeBuf参数当byAlarmSubType报警子类型为1(烟雾检测报警)、2(烟火报警)时生效。 + BYTE *pSmokeBuf; //烟雾检测报警数据指针,指向一个NET_DVR_SMOKEDETECTION_ALARM结构体 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byRes3; + BYTE byFireScanWaitMode; //火点扫描等待模式 0-自动 1-手动 + DWORD dwVisibleChannel; //可见光通道通道号 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE byRes[49]; +} NET_DVR_FIREDETECTION_ALARM,*LPNET_DVR_FIREDETECTION_ALARM; + +//火点检测配置 +typedef struct tagNET_DVR_SMOKEDETECTION_CFG +{ + BYTE byEnable;//使能 + BYTE bySensitivity; //检测灵敏度: 1~100默认50 + BYTE byPatrolSensitivity; //巡航检测灵敏度: 1~100默认50 + BYTE byDoubleCheckSensitivity; //二次过滤灵敏度: 1~100默认50 + BYTE byRes[56]; +}NET_DVR_SMOKEDETECTION_CFG, *LPNET_DVR_SMOKEDETECTION_CFG; + +typedef struct tagNET_DVR_ALARMSTRATEGY_PARAM +{ + BYTE byStrategyType;//策略类型;0~任意报警,1~协同报警,2~多系统报警, 3~指定火点报警,4~指定烟雾报警 + BYTE byRes[15]; +}NET_DVR_ALARMSTRATEGY_PARAM, *LPNET_DVR_ALARMSTRATEGY_PARAM; + +typedef struct tagNET_DVR_FIREDETECTION_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE bySensitivity; //检测灵敏度: 1~100默认5s + BYTE byFireComfirmTime;//发现火点等待时间: 0-120秒 默认5s + BYTE byFireRegionOverlay;//码流叠加火点框: 0- 否,1- 是 + BYTE byDetectionMode;// 火点检测模式:0~二次判别,1~单帧检测。 + BYTE byFireFocusMode;//火点聚焦模式:0~自动模式,1~ 巡航模式。 + BYTE byFireZoomMode;//火点光学变倍模式:0~为自动模式,1~为手动模式。 + BYTE byFirezoomLevel;//火点光学变倍倍率,1~100。当光学变倍模式为手动模式时生效 + BYTE bySmokeFireEnabled; //烟火检测总使能:0—不启用,1-启用 + /* + 火点手动等待使能,为1时代表开启。开启后,火点等待时间参数byFireComfirmTime无效。 + 开启后,当设备发现火点时,云台一直停留在发现火点位置,可通过继续火点扫描命令解除该等待模式,继续火点扫描。 + 当火点手动等待使能为0时,设备为自动等待模式,该模式下可根据byFireComfirmTime字段所配置的等待时间进行火点等待,超过该等待时间后设备自动进行火点扫描。 + */ + BYTE byFireManualWaitEnabled;// 火点手动等待使能,0~为自动等待模式,1~手动等待模式 + BYTE byCancelRepeatedAlarmEnabled;// 取消重复报警使能 0-关闭 1-开启 + BYTE byApplicationSceneMode;//应用场景模式:0-保留,1-森林防火, 2-秸秆燃烧,3-城市制高点, 4-室内或周界 + DWORD dwInstallationHeight;// 安装高度 + BYTE byFireSourceDetection;// 火点搜索模式 0-动态火点 1-吸烟模式 + BYTE bySmokeAuxiliaryDetectionEnabled;// 烟雾辅助判断启用使能,检测模式是二次判别时生效 0-否 1-是 + BYTE byverificationSensitivity; //二次确认灵敏度,范围1~100s,默认50s + BYTE byFireAlgorithmMode; //火点算法模式,0:无效,1:模式识别-patternRecognition,:2:机器学习-machineLearning + BYTE byAgriculturalMachineryFilterEnabled; //农机过滤模块使能,0:不启用,1:启用 + BYTE byWaterReflectionEnabled; //水面阳光反射模块使能, 0:不启用,1:启用 + BYTE byPatrolSensitivity; //巡航检测灵敏度 (针对火点检测), 范围1~100s,默认50s + BYTE byRes[33]; + NET_DVR_ALARMSTRATEGY_PARAM struAlarmStrategy;//报警策略 + NET_DVR_SMOKEDETECTION_CFG struSmokeCfg;//烟雾检测配置 +}NET_DVR_FIREDETECTION_CFG,*LPNET_DVR_FIREDETECTION_CFG; + +typedef struct tagNET_DVR_THERMALPOWER_PARAM +{ + DWORD dwSize;//结构体大小 + BYTE byPowerSwitch;//开关使能,1为开启,0为关闭 + BYTE byRes[123]; +}NET_DVR_THERMALPOWER_PARAM, *LPNET_DVR_THERMALPOWER_PARAM; + +typedef struct tagNET_DVR_PTZABSOLUTEEX_CFG +{ + DWORD dwSize;//结构体大小 + NET_PTZ_INFO struPTZCtrl;//设备PTZF信息 + DWORD dwFocalLen;//焦距范围:0-100000MM + float fHorizontalSpeed;//水平转动速度:0.01-1000.00度/S + float fVerticalSpeed;//垂直转动速度:0.01-1000.00度/S + /*镜头变倍配置类型;absoluteZoom:通过变倍参数进行配置,选择为该类型时struPTZCtrl中的fZoom参数生效。focalLen:通过焦距参数进行配置,选择为该类型时,dwFocalLen参数生效。*/ + BYTE byZoomType;// 镜头变倍配置类型0~ absoluteZoom,1~ focalLen + BYTE byRes[123]; +}NET_DVR_PTZABSOLUTEEX_CFG, *LPNET_DVR_PTZABSOLUTEEX_CFG; + +#define MAX_PLAYLIST_NUM 50 //最大播放列表数目 +#define MAX_PLAYPLAN_NUM 50 //最大播放计划数目 + +#define MAX_LEN_256 256 +#define MAX_GROUP_RECORD_NUM 10 //最大记录个数 +typedef struct tagNET_DVR_AREA_MONITOR_COND +{ + DWORD dwSize; + DWORD dwAreaID; //区域ID + DWORD dwMonitorID; //当前开始获取的布防点编号,从1开始 + BYTE byIsNeedGroup; //是否查询关联分组信息 + BYTE byRes [127]; +}NET_DVR_AREA_MONITOR_COND,*LPNET_DVR_AREA_MONITOR_COND; + +typedef struct tagNET_DVR_DEL_MONITOR_COND +{ + DWORD dwSize; + BYTE byDelType; //删除类型,0-删除指定区域的所有布防点,1-删除指定区域的指定布防点 + DWORD dwAreaID; //区域ID + DWORD dwMonitorID; //布防点ID(当byDelType为0时无效,当byDelType为1时有效),从1开始 + BYTE byRes[64]; +}NET_DVR_DEL_MONITOR_COND,*LPNET_DVR_DEL_MONITOR_COND; + +typedef struct tagNET_DVR_BLOCKLIST_ALARM_COND +{ + DWORD dwSize; //结构体大小 + BYTE byType; //名单标志:- 全部,- 允许名单,- 禁止名单 + BYTE byRes1[3]; //保留 + DWORD dwFaceID; //人脸名单ID + DWORD dwMaxSnapNum; //最大抓拍张数,0-表示不限制 + BYTE byRes[256]; +}NET_DVR_BLOCKLIST_ALARM_COND, *LPNET_DVR_BLOCKLIST_ALARM_COND; + +typedef struct tagNET_DVR_STORAGE_RESOURCE_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwStorageID; //从当前编号开始获取剩余资源,从1开始 + BYTE byRes[64]; +}NET_DVR_STORAGE_RESOURCE_COND, *LPNET_DVR_STORAGE_RESOURCE_COND; + +typedef struct tagNET_DVR_BLOCKLIST_ALARM_RECORD +{ + DWORD dwSize; //结构体大小 + DWORD dwSnapFacePicID; //抓拍人脸ID + DWORD dwRegisterID; //名单注册ID号(只读) + DWORD dwGroupNo; //分组号 + BYTE byRes[128]; +}NET_DVR_BLOCKLIST_ALARM_RECORD, *LPNET_DVR_BLOCKLIST_ALARM_RECORD; + +typedef struct tagNET_DVR_BLOCKLIST_GROUP_INFO //名单分组信息 +{ + DWORD dwSize; //结构体大小 + DWORD dwGroupID; //分组编号(获取时有效,添加时无效),从1开始 + DWORD dwGroupNo; //名单分组号 + BYTE byGroupType; //分组类型,0-禁止名单分组,1-允许名单分组 + BYTE byRes1; + WORD wThreshold; //报警阈值,取值范围为0-1000 + DWORD dwListNum; //分组名单数 + BYTE szGroupName[NAME_LEN]; //分组名称 + BYTE szRemark[MAX_LEN_256]; + BYTE byStorageAddr[MAX_DOMAIN_NAME]; //存储IP地址信息 + WORD wStoragePort; //存储IP对应的端口号 + BYTE byRes[126]; +}NET_DVR_BLOCKLIST_GROUP_INFO, *LPNET_DVR_BLOCKLIST_GROUP_INFO; + + +typedef struct tagNET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD +{ + DWORD dwSize; //结构体大小 + DWORD dwGroupRecordID; //分组记录ID,修改和查询时有效,增加时无效,从1开始 + DWORD dwGroupNo; //名单分组号 + DWORD dwFaceDBID; //人脸库ID + DWORD dwFaceRecordID; //人脸记录ID + BYTE byAlarmLevel; //报警等级,0-high,1-medium,2-low + BYTE byRes1[3]; //保留 + NET_DVR_ADDR_DOMAIN_INFO struStorageAddr; //存储IP地址信息 + BYTE byRes[256]; +}NET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD,*LPNET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD; + +typedef struct tagNET_DVR_BLOCKLIST_GROUP_RECORD_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwRecordID; //从当前编号开始获取,从1开始 + BYTE byRes[64]; +}NET_DVR_BLOCKLIST_GROUP_RECORD_COND, *LPNET_DVR_BLOCKLIST_GROUP_RECORD_COND; + +typedef struct tagNET_DVR_BLOCKLIST_GROUP_RECORD_CFG //名单分组记录信息 +{ + DWORD dwSize; //结构体大小 + DWORD dwRecordNum; //记录总个数 + NET_DVR_SINGLE_BLOCKLIST_GROUP_RECORD struRecord[MAX_GROUP_RECORD_NUM]; //记录参数 + BYTE byRes[256]; +}NET_DVR_BLOCKLIST_GROUP_RECORD_CFG,*LPNET_DVR_BLOCKLIST_GROUP_RECORD_CFG; + +typedef struct tagNET_DVR_BLOCKLIST_GROUP_CFG //名单分组记录信息 +{ + DWORD dwSize; //结构体大小 + DWORD dwGroupNum; //分组总个数 + NET_DVR_BLOCKLIST_GROUP_INFO struGroup[MAX_GROUP_RECORD_NUM]; //记录参数 + BYTE byRes[256]; +}NET_DVR_BLOCKLIST_GROUP_CFG,*LPNET_DVR_BLOCKLIST_GROUP_CFG; + +typedef struct tagNET_DVR_BLOCKLIST_GROUP_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwGroupID; //从当前编号开始获取,从1开始 + BYTE byRes[64]; +}NET_DVR_BLOCKLIST_GROUP_COND, *LPNET_DVR_BLOCKLIST_GROUP_COND; + + + +typedef struct tagNET_DVR_SENSOR_VALUE +{ + float fMinValue; //最小值;精确到0.001,若为0xfffffffff表示查询所有 + float fMaxValue; //最大值;精确到0.001,若为0xfffffffff表示查询所有 + BYTE byRes[8]; +}NET_DVR_SENSOR_VALUE, *LPNET_DVR_SENSOR_VALUE; + +typedef struct tagNET_DVR_HISTORICAL_QUERY_PARAM //历史数据查询条件子结构 +{ + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + NET_DVR_SENSOR_VALUE struVoltageValue; //电压参数; 单位伏特 + NET_DVR_SENSOR_VALUE struCurrentValue; //电流参数; 单位毫安 + NET_DVR_SENSOR_VALUE struTemperatureValue;//温度参数,单位摄氏度 + NET_DVR_SENSOR_VALUE struHumidityValue;//湿度参数 + BYTE bySwitchStatus;//通电状态, 0~未通电,1~通电,0xff查询所有 + BYTE bySensorStatus; //传感器状态; 0-正常、1-异常、2-报警;0xff查询所有 + BYTE byRes[66]; +}NET_DVR_HISTORICAL_QUERY_PARAM, *LPNET_DVR_HISTORICAL_QUERY_PARAM; + +typedef struct tagNET_DVR_SENSOR_COND //条件结构 +{ + DWORD dwSize; + BYTE byQueryType; //查询方式;0~实时数据查询,1~历史数据查询 + BYTE byDeviceType; //设备类型;0~未知,1~模拟量传感器, 2~上电端子,3~上电插座,0xff表示查询所有 + BYTE byDeviceID; //设备ID;Analog(模拟量传感器)范围:1-8、Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2,0xff表示查询所有 + BYTE byRes1; + // INTER_HISTORICAL_QUERY_PARAM子结构,在byQueryType为1时生效 + NET_DVR_HISTORICAL_QUERY_PARAM struHistoricalQueryParam; //历史数据查询参数 + BYTE byRes[64]; +}NET_DVR_SENSOR_COND,*LPNET_DVR_SENSOR_COND; + +typedef struct tagNET_DVR_SENSOR_CFG//配置结构 +{ + DWORD dwSize; + BYTE byEnable; //当前查询的传感器是否使能,0-不使能,1-使能; + BYTE byDeviceType; //设备类型;0~未知,1~模拟量传感器, 2~上电端子,3~上电插座 + BYTE byDeviceID; //设备ID;Analog(模拟量传感器)范围:1-8、Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2 + BYTE byRes1; + NET_DVR_TIME_V30 struTime;//时间 + BYTE byIsFirst; //是否是启动后第一条数据(检测是否有重启),0-否, 1-是; + BYTE byIsSwitchOn; //是否通电,0-否, 1-是; + BYTE bySensorStatus; //传感器状态; 0-正常、1-异常、2-报警; + BYTE bySensorType; //传感器类型;参照 SENSOR_TYPE + float fVoltage; //电压;单位伏特,精确到0.001。若为0xff表示无效值 + float fCurrent; //电流;单位毫安,精确到0.001。若为0xff表示无效值 + float fTemperatureValue;//温度值;单位摄氏度,精确到0.001。若为0xff表示无效值 + float fHumidityValue;//湿度值,精确到0.001。若为0xff表示无效值 + BYTE bySensorName[SENSORNAME_LEN/*32*/]; //传感器名称 + BYTE byDescription[MAX_SENSORDESCR_LEN/*64*/]; //传感器数据的描述信息,statusType为正常时,description可以为空 + float fActualValue; //模拟信号转换后的数值;精确到0.0001 + BYTE byUnit[SENSORUNIT_LEN/*32*/]; //单位字符串 + BYTE byRes[220]; +}NET_DVR_SENSOR_CFG,*LPNET_DVR_SENSOR_CFG; + +typedef struct tagNET_DVR_SENSOR_SWITCH_COND +{ + DWORD dwSize;//结构体大小 + BYTE byDeviceType; //设备类型;0~未知, 1~上电端子Terminal,2~上电插座Socket + BYTE byDeviceID; //设备ID;Terminal(上电端子)范围:1-4、Socket(上电插座)范围:1-2 + BYTE bySwitch; //开关,0-断电, 1-上电,2-重启 + BYTE byRes[125]; +}NET_DVR_SENSOR_SWITCH_COND,*LPNET_DVR_SENSOR_SWITCH_COND; + +typedef struct tagNET_DVR_GB28181_SERVICE_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byServerID[DEV_ID_LEN]; //SIP服务器ID; + WORD wPort; //SIP服务器端口号 + BYTE byRes1[2]; //保留 + BYTE byAuthPasswd[PASSWD_LEN]; + DWORD dwRegisterValid; //存活期周期,单位:秒,默认:3600 + BYTE byMaxHeartbeatTimeOut; //最大心跳超时次数,默认:3次 + BYTE byAutoAddIpc; //是否启用自动添加ipc,0-不启用,1-启用 + BYTE byAuthPasswdEx[MAX_PASSWD_LEN_EX]; //密码扩展为64位,设置时,byAuthPasswdEx为非空,此参数有效,byAuthPasswd无效,获取时,byAuthPasswdEx和byAuthPasswd都返回 + BYTE byRes[190]; //保留 +}NET_DVR_GB28181_SERVICE_CFG,*LPNET_DVR_GB28181_SERVICE_CFG; +typedef struct tagNET_DVR_ACTIVATECFG +{ + DWORD dwSize; //结构体大小 + BYTE sPassword[PASSWD_LEN]; //初始密码 + BYTE byLoginMode; //0-Private 1-ISAPI + BYTE byHttps; //0-不使用https,1-使用https + BYTE byRes[106]; +}NET_DVR_ACTIVATECFG,*LPNET_DVR_ACTIVATECFG; + +typedef struct tagNET_DVR_IPDEVICE_ACTIVATE_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byMode; //0-按通道激活,1-按地址激活 + BYTE bySelfDefinePassword;//是否自定义密码,0-否,1-是,2-是,且为IPC的自定义密码 + BYTE sPassword[PASSWD_LEN];//自定义密码 + BYTE sUserName[NAME_LEN];//用户名 + BYTE byRes[78]; + union + { + BYTE byLen[512];//union大小 + struct + { + DWORD dwChannelNo;//通道号 + BYTE byRes[508]; + }struChannelInfo;//通道信息 + struct + { + NET_DVR_IPADDR struIp;//IP地址 + WORD wPort;//端口号 + BYTE sProtocolDesc[DESC_LEN];//协议类型 + BYTE byMacAddr[MACADDR_LEN];//mac地址 + BYTE byRes[344]; + }struAddrInfo;//IP地址,来自NET_DVR_SADPINFO + }unActivateDeviceInfo;//使用联合体结构,通过byMode字段表示是按通道还是按地址 +}NET_DVR_IPDEVICE_ACTIVATE_CFG,*LPNET_DVR_IPDEVICE_ACTIVATE_CFG; + +typedef struct tagNET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS_ +{ + DWORD dwSize; + BYTE byDigitalChanPasswordStatus[MAX_CHANNUM_V30*4];//0-保留,1-IPC未激活,2-风险密码,3-密码强度弱,4-密码强度中,5-密码强度强;byDigitalChanPasswordStatus[0]表示第一个数字通道 + BYTE byRes[1140]; +}NET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS, *LPNET_DVR_DIGITAL_CHANNEL_SECURITY_STATUS; + +typedef struct tagNET_DVR_CAMERACHAN_SERIALCFG +{ + DWORD dwSize; + DWORD dwBaudRate; //波特率(bps),0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200,11-38400,12-57600,13-76800,14-115.2k + BYTE byDataBit; //数据有几位:0-5位,1-6位,2-7位,3-8位 + BYTE byStopBit; //停止位:0-1位,1-2位 + BYTE byParity; //是否校验:0-无校验,1-奇校验,2-偶校验 + BYTE byFlowcontrol;// 是否流控:0-无,1-软流控,2-硬流控 + WORD wPTZProtocol; //控球协议类型,索引值 + BYTE byRes1[6]; + DWORD dwSerialPort; //串口号,最高位为0,表示前面板串口,最高位为1,表示后面板串口 + BYTE bySerialAddress; //串口地址0~255 + BYTE byRes[15]; +}NET_DVR_CAMERACHAN_SERIALCFG, *LPNET_DVR_CAMERACHAN_SERIALCFG; + +#define MAX_MATRIX_SUBBOARD_NUM 16 //综合平台最大子板数 +#define MAX_MATRIX_SUBBOARD_NUM_V51 32 //综合平台最大子板数 +#define MAX_BOARD_SUBSYSTEM_NUM 12 //每个子板最大系统数 +typedef struct tagNET_DVR_SUBSYSTEM_STATUS +{ + /*子系统类型,1-解码用子系统,2-编码用子系统,3-级联输出子系统,4-级联输入子系统,5-码分器子系统,6-报警主机子系统,7-智能子系统,8-Fpga解码子系统,9-Fpga子系统,10-转码子系统, + 11-X86服务器子系统,12-超高清输入子系统,13-X86中心服务板, 14- X86业务服务板 ,15-多相机拼接子系统,16-网络光纤交换子系统,17-X86拼接子系统,18-普通拼接子系统,19-音频子系统,0-NULL*/ + BYTE bySubSystemType; + BYTE bySubSystemNo; //子系统号,即所在子板上的编号 + BYTE byOnlineStatus; //网络连接状态, 1-在线 2-不在线 + BYTE byRes[49]; +}NET_DVR_SUBSYSTEM_STATUS, *LPNET_DVR_SUBSYSTEM_STATUS; + + +typedef struct tagNET_DVR_MATRIX_SUBBOARD +{ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态, 1-连接 2-断开 + BYTE byRes[2]; + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link 带宽 + DWORD dwTemperature; //子板温度 单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 + BYTE byRes2[16]; +}NET_DVR_MATRIX_SUBBOARD, *LPNET_DVR_MATRIX_SUBBOARD; +typedef struct tagNET_DVR_MATRIX_STATUS +{ + DWORD dwSize; + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0) 2-18U机箱 3-14U机箱 4-11U机箱 5-8U机箱 6-7U机箱 7-5U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 + BYTE byRes; + NET_DVR_MATRIX_SUBBOARD struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM]; + BYTE byRes2[48]; +}NET_DVR_MATRIX_STATUS, *LPNET_DVR_MATRIX_STATUS; + + +typedef struct tagNET_DVR_MATRIX_SUBBOARD_V50 +{ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态, 1-连接 2-断开 + BYTE byRes; + BYTE byTemperatureAlarm; //温度报警,0-此字段无效,1-温度正常,2-温度超上限报警,3-温度超下限报警 + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link 带宽 + DWORD dwTemperature; //子板温度 单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 + BYTE bySubboardModel[32]; //子板型号 + BYTE byRes1[32]; +}NET_DVR_MATRIX_SUBBOARD_V50, *LPNET_DVR_MATRIX_SUBBOARD_V50; + +typedef struct tagNET_DVR_MATRIX_STATUS_V50 +{ + DWORD dwSize; + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0) 2-18U机箱 3-14U机箱 4-11U机箱 5-8U机箱 6-7U机箱 7-5U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 + BYTE byLCDPanelStatus; //液晶面板连接状态,1-正常,2-异常 + NET_DVR_MATRIX_SUBBOARD_V50 struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM]; + DWORD dwFanSequence; //风扇编号,按位表示,最低位不使用,例如0xffffff04表示编号为1的风扇,当对应风扇被置位时,dwFanConnectStatus和dwFanOperationStatus的对应位才有效,否则认为无此编号的风扇 + DWORD dwFanConnectStatus; //风扇连接状态,按位表示,最低位不使用,例如0xffffff00表示编号为1的风扇连接正常,0xffffff04表示编号为1的风扇连接异常 + DWORD dwFanOperationStatus; //风扇运行状态,按位表示,最低位不使用,例如0xffffff00表示编号为1的风扇运行状态正常,0xffffff04表示编号为1的风扇运行异常 + BYTE byDeviceModel[32]; //设备型号 + BYTE byPowerNums; //电源数量 + BYTE byMainBoardNums; //主控数量 + BYTE byHotStandbyMode; // byMainBoardNums为2时,0-工作在M1槽位,1-工作在M2槽位 + BYTE byRes[29]; +}NET_DVR_MATRIX_STATUS_V50, *LPNET_DVR_MATRIX_STATUS_V50; + +typedef struct tagNET_DVR_MATRIX_SUBBOARD_V51 +{ + BYTE byBoardNo; //子板号 + BYTE byPcieConnectStatus; //pcie连接状态,1-连接,2-断开 + BYTE byRes1; + BYTE byTemperatureAlarm; //温度报警,0-此字段无效,1-温度正常,2-温度超上限报警,3-温度超下限报警 + DWORD dwHardwareVersion; //子板硬件版本 + DWORD dwPcieBandwidth; //pcie Link带宽 + DWORD dwTemperature; //子板温度,单位:摄氏度 + NET_DVR_SUBSYSTEM_STATUS struSubsystemStatus[MAX_BOARD_SUBSYSTEM_NUM]; //子系统状态 + BYTE bySubboardModel[32]; //子板型号 + BYTE byRes2[128]; +}NET_DVR_MATRIX_SUBBOARD_V51, *LPNET_DVR_MATRIX_SUBBOARD_V51; + +typedef struct tagNET_DVR_MATRIX_STATUS_V51 +{ + DWORD dwSize; + BYTE byMainFrameType; //机箱类型 1-18U机箱(V1.0),2-18U机箱,3-14U机箱,4-11U机箱,5-8U机箱,6-7U机箱 + BYTE bySoltNum; //槽位数 + BYTE byBoardNum; //子板数 + BYTE byLCDPanelStatus; //液晶面板连接状态,1-正常,2-异常 + NET_DVR_MATRIX_SUBBOARD_V51 struMatrixSubboard[MAX_MATRIX_SUBBOARD_NUM_V51]; + DWORD dwFanSequence; //风扇编号,按位表示,例如0x00000001表示设备只有一个风扇,编号为1,0x00000101表示设备有两个风扇,编号分别为1和9,当对应风扇编号被置位时,dwFanConnectStatus和dwFanOperationStatus的对应位才有效,否则认为无此编号的风扇 + DWORD dwFanConnectStatus; //风扇连接状态,按位表示,例如0x00000001表示编号为1的风扇连接状态异常,0x00000101表示编号为1和9的风扇连接状态均异常 + DWORD dwFanOperationStatus; //风扇运行状态,按位表示,例如0x00000001表示编号为1的风扇运行状态异常,0x00000101表示编号为1和9的风扇运行状态均异常 + BYTE byDeviceModel[32]; //设备型号 + BYTE byFanSpeed[32]; //风扇转速,按字节表示,例如byFanSpeed[0]表示编号为1的风扇的转速,转速等级范围为[1,3] + BYTE byMainMemUsed; //主控内存使用率,单位:百分比 + BYTE byMainCpuUsed; //主控CPU使用率,单位:百分比 + BYTE byNetwordUsed; //交换板网络使用率,单位:百分比 + BYTE byRes1; + DWORD dwMainSoftwareVer; //主控软件版本 + BYTE byPowerNums; //电源数量 + BYTE byMainBoardNums; //主控数量 + BYTE byHotStandbyMode; // byMainBoardNums为2时,0-工作在M1槽位,1-工作在M2槽位 + BYTE byRes2[125]; +}NET_DVR_MATRIX_STATUS_V51, *LPNET_DVR_MATRIX_STATUS_V51; + +typedef struct _NET_DVR_SUBWIND_INFO +{ + DWORD dwSize; + DWORD dwSubWndNo; //子窗口号 + BYTE byRes[8]; +} NET_DVR_SUBWIND_INFO, *LPNET_DVR_SUBWIND_INFO; + + +typedef struct tagNET_DVR_FUSION_SCALE +{ + DWORD dwSize; + WORD wWidth; //图像融合宽(横向图像数目) + WORD wHeight; //图像融合高(纵向图像数目) + BYTE byRes[32]; +}NET_DVR_FUSION_SCALE, *LPNET_DVR_FUSION_SCALE; + +typedef struct tagNET_DVR_FUSION_CFG +{ + DWORD dwSize; + BYTE byFusion; //是否融合,0-未融合或取消融合,非0-融合 + BYTE byUseHistoryMap; //是否使用历史融合映射表,0-不使用,非0-使用 + BYTE byRes[30]; +}NET_DVR_FUSION_CFG, *LPNET_DVR_FUSION_CFG; + +typedef struct tagNET_DVR_MULTIFUNCTION_SERIALCFG +{ + DWORD dwSize ; + BYTE byVariable ; //串口是否可变,1-不可变 2-可变 (只获取) + BYTE bySerialWorkMode; //工作模式,1-RS485, 2-RS232(只在可变情况下,修改工作模式) + BYTE byFunType; //串口功能, 1-键盘控制,2-屏幕控制,3-透明通道模式 4-PTZ控制 5-矩阵控制 6-控制台 + BYTE byDataBit;// 数据位 0-5位,1-6位,2-7位,3-8位; + BYTE byStopBit;// 停止位 0-1位,1-2位; + BYTE byParity;// 校验 0-无校验,1-奇校验,2-偶校验; + BYTE byFlowcontrol;// 0-无,1-软流控,2-硬流控 + BYTE byRes1 ; + DWORD dwBaudRate;//波特率0-50,1-75,2-110,3-150,4-300,5-600,6-1200,7-2400,8-4800,9-9600,10-19200, 11-38400,12-57600,13-76800,14-115.2k; + WORD wProtocol; //串口协议 不同串口功能对应串口协议不一样 + BYTE byRes[34]; +}NET_DVR_MULTIFUNCTION_SERIALCFG, *LPNET_DVR_MULTIFUNCTION_SERIALCFG; + +typedef struct tagNET_DVR_PTZ_3D_SPEED_CONTROL +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byPSpeed; // X轴控制速度 (取值1-64) + BYTE byTSpeed; // Y轴控制速度 (取值1-64) + BYTE byZSpeed; // Z速度 + BYTE byPDirect; // P方向, 1-左, 2-右 + BYTE byTDirect; // T方向, 1-上, 2-下 + BYTE byZDirect; //Z方向, 1-ZOOM+, 2-ZOOM- + BYTE byRes[18]; //保留字节 +}NET_DVR_PTZ_3D_SPEED_CONTROL, *LPNET_DVR_PTZ_3D_SPEED_CONTROL; + +//Sensor信息 +typedef struct tagNET_DVR_SENSOR_PARAM +{ + BYTE bySensorType;//SensorType:0-CCD,1-CMOS + BYTE byRes[31]; + float fHorWidth;//水平宽度 精确到小数点后两位 *10000 + float fVerWidth;//垂直宽度 精确到小数点后两位 *10000 + float fFold;//zoom=1没变时的焦距 精确到小数点后两位 *100 +}NET_DVR_SENSOR_PARAM,*LPNET_DVR_SENSOR_PARAM; + +//转向流量信息 +typedef struct tagNET_DVR_TURN_DIRECTION_PARAM +{ + BYTE byLine;//转向线编号 + BYTE byStatus;//转向线状态,0-未知,1-进入,2-离开 + BYTE byRes[38]; +}NET_DVR_TURN_DIRECTION_PARAM, *LPNET_DVR_TURN_DIRECTION_PARAM; +//停止线信息 +typedef struct tagNET_DVR_STOP_LINE_PARAM +{ + BYTE byStatus;//停止线状态,0-未知,1-进入,2-离开 + BYTE byRes[39]; +}NET_DVR_STOP_LINE_PARAM, *LPNET_DVR_STOP_LINE_PARAM; + +//TPS附加信息 +typedef struct tagNET_DVR_TPS_ADDINFO +{ + NET_DVR_LLPOS_PARAM struFirstLLPos;//车流量第一辆车的经纬度位置信息(byLaneState=3且byQueueLen>0时才返回) + NET_DVR_LLPOS_PARAM struLastLLPos;//车流量最后一辆车的经纬度位置信息(byLaneState=3且byQueueLen>0时才返回) + char sLicense[MAX_LICENSE_LEN/*16*/];//车牌号 + NET_DVR_TURN_DIRECTION_PARAM struTurnDirection;//转向流量信息 + NET_DVR_STOP_LINE_PARAM struStopLine;//停止线信息 + BYTE byRes[884]; +}NET_DVR_TPS_ADDINFO, *LPNET_DVR_TPS_ADDINFO; + +//车辆附加信息 +typedef struct tagNET_DVR_VEHICLE_ADDINFO +{ + NET_DVR_LLPOS_PARAM struLLPos;//车辆当前经纬度位置信息 + char sVehicleNo[LEN_64]; /*上传的车辆唯一标识,最大长度为64*/ + BYTE byVehicleMonitorTaskID[64];//车辆智能布防任务ID,64位字符串,创建任务时由上层下发给设备,上层确保ID唯一性 + BYTE byUUID[LEN_64]; //通用唯一识别码,64位字符串,设备确保唯一性,用于跨服务器关联同一次抓拍,vehicleMonitor,manualVehicleMonitor,dailyVehicleMonitor报警中的linkageANPRUUID有关 + BYTE byRes[832]; +}NET_DVR_VEHICLE_ADDINFO, *LPNET_DVR_VEHICLE_ADDINFO; + +//烟雾报警 +typedef struct tagNET_DVR_SMOKEDETECTION_ALARM +{ + NET_PTZ_INFO struPTZPos;//可见光设备PTZF位置 + NET_PTZ_INFO struThermalPTZPos;//热成像设备PTZF位置 + NET_DVR_LLPOS_PARAM struLLPos;//设备经纬度位置 + NET_VCA_RECT struSmokePos;//画面中烟雾区域位置 + BYTE byRes[256]; +}NET_DVR_SMOKEDETECTION_ALARM, *LPNET_DVR_SMOKEDETECTION_ALARM; + +//球机位置信息 +typedef struct +{ + float fPanPos;//水平参数,精确到小数点后1位 + float fTiltPos;//垂直参数,精确到小数点后1位 + float fZoomPos;//变倍参数,精确到小数点后1位 + BYTE byRes[16] ; +}NET_DVR_PTZPOS_PARAM, *LPNET_DVR_PTZPOS_PARAM; + +//GIS信息上传 +typedef struct tagNET_DVR_GIS_UPLOADINFO +{ + DWORD dwSize;//结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备 + float fAzimuth;//电子罗盘的方位信息;方位角[0.00°,360.00°) + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东度,1-西度 + BYTE byRes1[2] ; + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + float fHorizontalValue;//水平视场角,精确到小数点后面两位 + float fVerticalValue;//垂直视场角,精确到小数点后面两位 + float fVisibleRadius;//当前可视半径,精确到小数点后面两位 + float fMaxViewRadius;//最大可视半径,精确到小数点后面0位(预留处理) + NET_DVR_SENSOR_PARAM struSensorParam;//Sensor信息 + NET_DVR_PTZPOS_PARAM struPtzPos; //ptz坐标 + BYTE byRes[256]; +}NET_DVR_GIS_UPLOADINFO,*LPNET_DVR_GIS_UPLOADINFO; + +//防破坏报警信息上传 +typedef struct tagNET_DVR_VANDALPROOF_ALARM +{ + DWORD dwSize;//结构体大小 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo;//前端设备 + BYTE byRes[256]; +}NET_DVR_VANDALPROOF_ALARM,*LPNET_DVR_VANDALPROOF_ALARM; + +//集中布防参数配置 +typedef struct tagNET_DVR_CENTRALIZEDCTRL_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnable;//0-结束,1-开始 + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东经,1-西经 + BYTE byRes1; + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + DWORD dwTimeOut;//超时时间 [60s, 6*60*60s] + BYTE byControlType;//集中布防方式 0-强制布防,1-非强制布防 + BYTE byRes[127]; +}NET_DVR_CENTRALIZEDCTRL_CFG,*LPNET_DVR_CENTRALIZEDCTRL_CFG; + +//球机的GIS信息数据 +typedef struct tagNET_DVR_GIS_INFO +{ + DWORD dwSize;//结构体大小 + float fAzimuth;//电子罗盘的方位信息;方位角[0.00°,360.00°) + float fHorizontalValue;//水平视场角,精确到小数点后面两位 + float fVerticalValue;//垂直视场角,精确到小数点后面两位 + float fVisibleRadius;//当前可视半径,精确到小数点后面两位 + float fMaxViewRadius;//最大可视半径,精确到小数点后面0位(预留处理) + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东经,1-西经 + BYTE byPTZPosExEnable;//是否启用PTZ坐标扩展,0~不启用,PTZ坐标值以struPtzPos 为准。1~启用,PTZ坐标值以struPtzPosEx为准。 + BYTE byRes1; + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + NET_DVR_PTZPOS_PARAM struPtzPos; //ptz坐标 + NET_DVR_SENSOR_PARAM struSensorParam;//Sensor信息 + NET_PTZ_INFO struPtzPosEx;// ptz坐标扩展(支持高精度PTZ值,精确到小数点后三位) + float fMinHorizontalValue;//最小水平视场角,精确到小数点后面两位;0.0-360.00 + float fMaxHorizontalValue;//最大水平视场角,精确到小数点后面两位;0.0-360.00 + float fMinVerticalValue;//最小垂直视场角,精确到小数点后面两位;0.0-360.00 + float fMaxVerticalValue;//最大垂直视场角,精确到小数点后面两位;0.0-360.00 + BYTE byRes[220]; +}NET_DVR_GIS_INFO,*LPNET_DVR_GIS_INFO; + +//设备巡航模式 +typedef struct tagNET_DVR_CRUISE_PARAM +{ + DWORD dwSize;//结构体大小 + BYTE byCruiseMode;// 巡航模式,0~连续,1~预置点 + BYTE byRes[123]; +}NET_DVR_CRUISE_PARAM, *LPNET_DVR_CRUISE_PARAM; + +//获取设备环境温湿度信息结构体 +typedef struct tagNET_DVR_TEMP_HUMI_INFO +{ + DWORD dwSize; + NET_DVR_TIME_V30 struCurrentTime; // 当前时间 + float fTemperature;//设备环境温度,精确到小数点后两位,(-273 – 1000摄氏度) + float fHumidity;// 设备环境湿度,精确到小数点后两位。单位为:% + BYTE byRes[256]; +}NET_DVR_TEMP_HUMI_INFO, *LPNET_DVR_TEMP_HUMI_INFO; + +typedef struct tagNET_SDK_POINT_THERMOMETRY +{ + float fPointTemperature;/*点测温当前温度, 当标定为0-点时生效。精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为“点”的时候生效) + BYTE byRes[20]; +}NET_SDK_POINT_THERMOMETRY, *LPNET_SDK_POINT_THERMOMETRY; + + +typedef struct tagNET_SDK_REGION_THERMOMETRY +{ + float fMaxTemperature;//最高温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fMinTemperature;//最低温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fAverageTemperature;//平均温度,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + float fTemperatureDiff;//温差,精确到小数点后一位(-40-1000),(浮点数+100)*10 */ + NET_VCA_POLYGON struRegion;//区域、线(当规则标定类型为“框”或者“线”的时候生效) + BYTE byRes[20]; +}NET_SDK_REGION_THERMOMETRY, *LPNET_SDK_REGION_THERMOMETRY; + +typedef struct tagNET_SDK_MANUALTHERM_RULE +{ + BYTE byRuleID;//规则ID 0-表示无效,从1开始 (list内部判断数据有效性) + BYTE byEnable;//是否启用 + BYTE byRes1[2]; + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 + BYTE byRes2[3]; + NET_SDK_POINT_THERMOMETRY struPointTherm;//点测温,当标定为0-点时生效 + NET_SDK_REGION_THERMOMETRY struRegionTherm; //区域测温,当标定为1-框、2-线时生效。 + BYTE byRes[512]; +}NET_SDK_MANUALTHERM_RULE, *LPNET_SDK_MANUALTHERM_RULE; + +typedef struct tagNET_SDK_MANUAL_THERMOMETRY +{ + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 + DWORD dwRelativeTime; // 相对时标(只读) + DWORD dwAbsTime; // 绝对时标(只读) + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束(只读) + BYTE byRes1[6]; + NET_SDK_MANUALTHERM_RULE struRuleInfo; + BYTE byRes[512]; +}NET_SDK_MANUAL_THERMOMETRY, *LPNET_SDK_MANUAL_THERMOMETRY; + +typedef struct tagNET_SDK_MANUALTHERM_BASICPARAM +{ + DWORD dwSize; + WORD wDistance;//距离(m)[0, 10000] + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) + BYTE byRes1[1]; //保留 + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byRes[64]; //保留 +}NET_SDK_MANUALTHERM_BASICPARAM, *LPNET_SDK_MANUALTHERM_BASICPARAM; + +typedef struct tagNET_SDK_FIRESHIELDMASK_REGION +{ + DWORD dwSize; + BYTE byMaskID;//区域ID,1~24 + BYTE byEnabled;// 单个火点屏蔽区域使能,0~不启用,1~启用 + BYTE byShieldZoom;//屏蔽倍率,0~32倍。屏蔽大于等于该值的光学变倍。 + BYTE byMaskType;//屏蔽区域颜色类型,0-灰色,1-红色,2-黄色,3-蓝色,4-橙色,5-绿色,6-透明,7-半透明,8-马赛克 + BYTE byRegionType;//区域类型(预留)0-四边形 + BYTE byShowEnabled; //区域显示使能,该参数为只读,若该使能为false则上层不显示该区域相关信息。True为显示该区域相关信息 + BYTE byRes1[2]; //保留 + char szMaskName[NAME_LEN/*32*/];//屏蔽标题 + NET_VCA_POLYGON struRegion;//屏蔽区域 + BYTE byRes[32]; //保留 +}NET_SDK_FIRESHIELDMASK_REGION, *LPNET_SDK_FIRESHIELDMASK_REGION; + +#define MAX_FIRESHIELDMASK_REGION 24 +typedef struct tagNET_SDK_FIRESHIELDMASK_CFG +{ + DWORD dwSize; + BYTE byEnabled;// 火点区域屏蔽使能,0~不启用,1~启用 + BYTE byShieldAreaTransparency;//屏蔽区域透明度 0-不透明 1-透明 2-半透明 + BYTE byDisplayShieldAreaEnabled;//码流叠加屏蔽区域使能 + BYTE byRes1[1]; //保留 + NET_SDK_FIRESHIELDMASK_REGION struMaskRegion[MAX_FIRESHIELDMASK_REGION/*24*/];//火点屏蔽区域 + BYTE byRes[256]; //保留 +}NET_SDK_FIRESHIELDMASK_CFG, *LPNET_SDK_FIRESHIELDMASK_CFG; + +typedef struct tagNET_SDK_SMOKESHIELDMASK_REGION +{ + DWORD dwSize; + BYTE byMaskID;//区域ID,1~24 + BYTE byEnabled;// 单个烟雾屏蔽区域使能,0~不启用,1~启用 + BYTE byShieldZoom;//屏蔽倍率,0~32倍。屏蔽大于等于该值的光学变倍。 + BYTE byMaskType;//屏蔽区域颜色类型,0-灰色,1-红色,2-黄色,3-蓝色,4-橙色,5-绿色,6-透明,7-半透明,8-马赛克 + BYTE byRegionType;//区域类型(预留)0-四边形 + BYTE byShowEnabled;// 区域显示使能,该参数为只读,若该使能为false则上层不显示该区域相关信息。True为显示该区域相关信息 + BYTE byRes1[2]; //保留 + char szMaskName[NAME_LEN/*32*/];//屏蔽标题 + NET_VCA_POLYGON struRegion;//屏蔽区域 + BYTE byRes[32]; //保留 +}NET_SDK_SMOKESHIELDMASK_REGION, *LPNET_SDK_SMOKESHIELDMASK_REGION; + +#define MAX_SMOKESHIELDMASK_REGION 24 +typedef struct tagNET_SDK_SMOKESHIELDMASK_CFG +{ + DWORD dwSize; + BYTE byEnabled;// 烟雾区域屏蔽使能,0~不启用,1~启用 + BYTE byShieldAreaTransparency;//屏蔽区域透明度 0-不透明 1-透明 2-半透明 + BYTE byDisplayShieldAreaEnabled;//码流叠加屏蔽区域使能 + BYTE byRes1[1]; //保留 + NET_SDK_SMOKESHIELDMASK_REGION struMaskRegion[MAX_SMOKESHIELDMASK_REGION/*24*/];//烟雾屏蔽区域 + BYTE byRes[256]; //保留 +}NET_SDK_SMOKESHIELDMASK_CFG, *LPNET_SDK_SMOKESHIELDMASK_CFG; + +typedef struct tagNET_SDK_AREASCAN_CFG +{ + DWORD dwSize; + BYTE byScanState;//区域扫描当前设置状态,0为未设置,1为已设置(该参数为只读) + BYTE byRes[259]; //保留 +}NET_SDK_AREASCAN_CFG, *LPNET_SDK_AREASCAN_CFG; + +typedef struct tagNET_SDK_FIRESHIELDMASK_COND +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byRegionID;//区域ID,1~24. + BYTE byRes[127]; //保留 +}NET_SDK_FIRESHIELDMASK_COND, *LPNET_SDK_FIRESHIELDMASK_COND; + +typedef struct tagNET_SDK_SMOKESHIELDMASK_COND +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byRegionID;//区域ID,1~24. + BYTE byRes[127]; //保留 +}NET_SDK_SMOKESHIELDMASK_COND, *LPNET_SDK_SMOKESHIELDMASK_COND; + +//子罗盘关联防破坏参数 +typedef struct tagNET_DVR_VANDALPROOFALARM_CFG +{ + DWORD dwSize;//结构体大小 + BYTE bySensitivity;//灵敏度[1,100] (支持灵敏度配置,灵敏度值大,越容易触发,值越小,越难触发) + BYTE byUploadEnabled;//启用防破坏报警上传使能 0-不启用,1-启用 + BYTE byVoiceWarningEnabled;//启用防破坏报警语音提示使能 0-不启用,1-启用 + BYTE byEnable;// 启用检测防破坏报警 0-关闭,1-开始 + BYTE byRes[124]; +}NET_DVR_VANDALPROOFALARM_CFG,*LPNET_DVR_VANDALPROOFALARM_CFG; + +typedef struct tagNET_DVR_AZIMUTHINFO +{ + DWORD dwSize;//结构体大小 + float fDegree;//方位角度数(精确到小数点后两位) + BYTE byAzimuth; //方位角信息 0-东北,1-西北,2-东南,3-西南,4-东,5-西,6-南,7-北 + BYTE byRes[127]; +}NET_DVR_AZIMUTHINFO,*LPNET_DVR_AZIMUTHINFO; + +//电子罗盘矫正、指向正北控制条件结构 +typedef struct tagNET_DVR_COMPASS_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 + BYTE byRes[128]; +}NET_DVR_COMPASS_COND,*LPNET_DVR_COMPASS_COND; + +typedef struct tagNET_DVR_POSITION_CFG +{ + DWORD dwSize;//结构体大小 + BYTE bySoftWorkMode;//工作模式 0-自动,1-手动 + BYTE byRes[127]; +}NET_DVR_POSITION_CFG,*LPNET_DVR_POSITION_CFG; + +typedef struct tagNET_DVR_STREAMING_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChannel;//通道号 + BYTE byStreamType;//码流类型0-主码流,1-子码流,2-码流3 + BYTE byRes[127]; +}NET_DVR_STREAMING_COND,*LPNET_DVR_STREAMING_COND; + +//卫星定位参数配置 +typedef struct tagNET_DVR_SATELLITETIME_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnable;//卫星定位校时使能 0-不开启,1-开启 + BYTE byRes; + WORD wTimeInterval;//校时时间间隔(s) + BYTE byRes1[124]; +}NET_DVR_SATELLITETIME_CFG,*LPNET_DVR_SATELLITETIME_CFG; + +#define MAX_SIGNAL_JOINT_NUM 64 //最大的拼接规模 +typedef struct tagNET_DVR_SIGNAL_JOINT_CFG +{ + DWORD dwSize; + BYTE sCamName[NAME_LEN] ; //拼接后信号源名称 + BYTE byEnable; //使能,0-不使能 !0-使能 + BYTE byCamMode ; //拼接后信号源类型,NET_DVR_CAM_JOINT + BYTE byRows ; //拼接行数 + BYTE byColumns ; //拼接列数 + DWORD dwSignalNo[MAX_SIGNAL_JOINT_NUM]; //信号源号,前byRows* byColumns项有效 + DWORD dwJointNo; //拼接编号(获取有效) + DWORD dwSignalNoJoint; //拼接后的信号源号(获取有效) + BYTE byRes[64]; +} NET_DVR_SIGNAL_JOINT_CFG, *LPNET_DVR_SIGNAL_JOINT_CFG; + +typedef struct tagNET_DVR_SIGNAL_CUTPARAM +{ + DWORD dwSize; + DWORD dwSignalNo; //信号源号 + DWORD dwCutTop; //上方裁剪像素值,0代表还原 + DWORD dwCutBottom; //下方裁剪像素值,0代表还原 + DWORD dwCutLeft; //左边裁剪像素值,0代表还原 + DWORD dwCutRight; //右边裁剪像素值,0代表还原 + BYTE byRes2[32]; +} NET_DVR_SIGNAL_CUTPARAM, *LPNET_DVR_SIGNAL_CUTPARAM; + +typedef struct tagNET_DVR_WALL_RELATION_CFG +{ + DWORD dwSize; + BYTE byEnable; //关联, 0-不关联 !0-关联 + BYTE byRealWallNo ; //物理墙号 + BYTE byRes[14] ; +}NET_DVR_WALL_RELATION_CFG, *LPNET_DVR_WALL_RELATION_CFG; + + +typedef struct tagNET_DVR_INPUTSTREAMCFG_V40 +{ + DWORD dwSize ; + BYTE byValid ; // + BYTE byCamMode ;//见NET_DVR_CAM_MODE + WORD wInputNo ; //信号源序号 + BYTE sCamName[NAME_LEN] ; + NET_DVR_VIDEOEFFECT struVideoEffect ;//视频参数 + NET_DVR_PU_STREAM_CFG struPuStream ; //ip输入时使用 + WORD wBoardNum ; //信号源所在的板卡号,只能获取 + WORD wInputIdxOnBoard ; //信号源在板卡上的位置,只能获取 + DWORD dwResolution ;//分辨率 + BYTE byVideoFormat ;//视频制式,见VIDEO_STANDARD + BYTE byStatus; //信号源状态,0-字段无效 1-有信号 2-无信号 3-异常 + BYTE sGroupName[NAME_LEN/*32*/]; //网络信号源分组 组名 + BYTE byJointMatrix ; //关联矩阵,0-不关联 1-关联,当输入信号源为NET_DVR_CAM_BNC,NET_DVR_CAM_VGA,NET_DVR_CAM_DVI,NET_DVR_CAM_HDMI,中的一种时,该参数有效。 + BYTE byJointNo ; //拼接信号源的拼接编号(只能获取) + BYTE byColorMode; //色彩模式, 0-自定义 1-锐利 2-普通 3-柔和,当为自定义时,使用struVideoEffect设置 + BYTE byScreenServer; //关联屏幕服务器,0-不联,1-关联 + BYTE byDevNo; //设备号 + BYTE byRes1; + DWORD dwInputSignalNo; //输入信号源编号(新) + BYTE byVideoEnctype; //视频编码类型,0-默认,1-Smart264 + BYTE byAudioEnctype; //音频编码类,0-默认,1-AUDIO_G711_A,2-AUDIO_G711_U,3- AUDIO_G722_1 + BYTE byWallStatus; //信号源上墙状态,0-无效 1-有上墙 2- 无上墙 + BYTE byRes[117]; +}NET_DVR_INPUTSTREAMCFG_V40, *LPNET_DVR_INPUTSTREAMCFG_V40 ; + +typedef struct tagNET_DVR_AUDIO_CONTROL_INFO +{ + DWORD dwSize; + DWORD dwMonId;//显示器全局编号 + BYTE bySubWindowNum;//显示器对应子窗口号 + BYTE byWallNo; //墙号 + BYTE byEnable; //音频开关,0-关,1-开 + BYTE byRes[13]; +}NET_DVR_AUDIO_CONTROL_INFO,*LPNET_DVR_AUDIO_CONTROL_INFO; + + + +typedef struct tagNET_DVR_INPUTSTREAM_PTZCFG_PARAM +{ + DWORD dwSize; + WORD wPTZProtocol; //控球协议类型,索引值 + BYTE byRes[34]; +}NET_DVR_INPUTSTREAM_PTZCFG_PARAM, *LPNET_DVR_INPUTSTREAM_PTZCFG_PARAM; + +//公路货车轴型定义 参照《2016治超分类1133.xlsx》 +typedef enum +{ + AXLE_TYPE_UNKNOWN = 0x0000, //未知 + //2轴 + AXLE_TYPE_2AXLE_12 = 0x0200, //2轴载货汽车 + //3轴 + AXLE_TYPE_3AXLE_122_1 = 0x0300, //3轴中置轴挂车列车 + AXLE_TYPE_3AXLE_122_2, //3轴铰接列车 + AXLE_TYPE_3AXLE_15, //3轴载货汽车 + AXLE_TYPE_3AXLE_112, //3轴载货汽车 + //4轴 + AXLE_TYPE_4AXLE_125_1 = 0x0400, //4轴中置轴挂车列车 + AXLE_TYPE_4AXLE_152, //4轴中置轴挂车列车 + AXLE_TYPE_4AXLE_125_2, //4轴铰接列车 + AXLE_TYPE_4AXLE_1222, //4轴全挂汽车列车 + AXLE_TYPE_4AXLE_115, //4轴载货汽车 + //5轴 + AXLE_TYPE_5AXLE_155_1 = 0x0500, //5轴中置轴挂车列车 + AXLE_TYPE_5AXLE_1125_1, //5轴中置轴挂车列车 + AXLE_TYPE_5AXLE_155_2, //5轴铰链列车 + AXLE_TYPE_5AXLE_1125_2, //5轴铰链列车 + AXLE_TYPE_5AXLE_129, //5轴铰链列车 + AXLE_TYPE_5AXLE_1522, //5轴全挂汽车列车 + AXLE_TYPE_5AXLE_11222, //5轴全挂汽车列车 + //6轴 + AXLE_TYPE_6AXLE_159_1 = 0x0600, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_159_2, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_1155_1, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_1155_2, //6轴中置轴挂车列车 + AXLE_TYPE_6AXLE_159_3, //6轴铰链列车 + AXLE_TYPE_6AXLE_159_4, //6轴铰链列车 + AXLE_TYPE_6AXLE_1129, //6轴铰链列车 + AXLE_TYPE_6AXLE_11522_1, //6轴全挂车 + AXLE_TYPE_6AXLE_11522_2, //6轴全挂车 +}TRUCK_AXLE_MODEL; + +//收费公路车辆通行费车型分类 +typedef enum _TOOLWAY_VEHICLE_TYPE +{ + TOOLWAY_RESULT_OTHER = 0, //未知 + TOOLWAY_PASSENGER_VEHICLE_CLASS_1_MINI = 1, //1类客车微型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_1_SMALL = 2, //1类客车小型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_2_MIDDLE = 3, //2类客车中型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_2_TRAILER = 4, //2类客车乘用车列车 + TOOLWAY_PASSENGER_VEHICLE_CLASS_3_LARGR = 5, //3类客车大型 + TOOLWAY_PASSENGER_VEHICLE_CLASS_4_LARGR = 6, //4类客车大型 + TOOLWAY_GOODS_VEHICLE_CLASS_1 = 7, //1类货车2轴 + TOOLWAY_GOODS_VEHICLE_CLASS_2 = 8, //2类货车2轴 + TOOLWAY_GOODS_VEHICLE_CLASS_3 = 9, //3类货车3轴 + TOOLWAY_GOODS_VEHICLE_CLASS_4 = 10, //4类货车4轴 + TOOLWAY_GOODS_VEHICLE_CLASS_5 = 11, //5类货车5轴 + TOOLWAY_GOODS_VEHICLE_CLASS_6 = 12, //6类货车6轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_1 = 13, //1类作业车2轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_2 = 14, //2类作业车2轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_3 = 15, //3类作业车3轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_4 = 16, //4类作业车4轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_5 = 17, //5类作业车5轴 + TOOLWAY_MOTOR_VEHICLE_CLASS_6 = 18 //6类作业车大于等于6轴 +}TOOLWAY_VEHICLE_TYPE; + +//车辆称重 +typedef struct tagNET_DVR_VEHICLE_WEIGHT_RESULT_ +{ + BYTE byIsOverWeight; //是否超限 + BYTE byAxleNum; //轴数 + WORD wAxleModel; //参考 enum TRUCK_AXLE_MODEL,可以根据类型解析出轴的个数 + float fOverWeight; //超限重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fWeight; //车身重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fLimitWeight; //限制重量(吨),实际值扩大1000倍传输(实际值精确到小数点后三位) + float fAxleLen; //轴距(米),实际值扩大100倍传输(实际值精确到小数点后两位) + char sDevDescInfo[MAX_DEVDESC_LEN/*64*/]; //设备描述信息 + WORD wAxleWeight[MAX_TRUCK_AXLE_NUM/*10*/]; //车轴重量,单位千克(kg)第i个元素表示第i个轴重 + WORD wAxleDistance[MAX_TRUCK_AXLE_NUM/*10*/]; //车轴间距,单位毫米(mm).第i个元素表示第i轴和第i+1轴的间距 + DWORD dwLength; //车长,单位cm + DWORD dwWidth; //车宽,单位cm + DWORD dwHeight; //车高,单位cm + BYTE byTollwayVehicleType; //收费公路车型,参考TOOLWAY_VEHICLE_TYPE + BYTE byRes2[11]; //预留 +}NET_DVR_VEHICLE_WEIGHT_RESULT, *LPNET_DVR_VEHICLE_WEIGHT_RESULT; + +// 车牌检测结果 +typedef struct tagNET_DVR_PLATE_RESULT_V50 +{ + DWORD dwSize; //结构长度 + DWORD dwMatchNo; //匹配序号,由(车辆序号,数据类型,车道号)组成匹配码 + BYTE byGroupNum; //图片组数量(一辆过车相机多次抓拍的数量,代表一组图片的总数,用于延时匹配数据) + BYTE byPicNo; //连拍的图片序号(接收到图片组数量后,表示接收完成;接收超时不足图片组数量时,根据需要保留或删除) + BYTE bySecondCam; //是否第二相机抓拍(如远近景抓拍的远景相机,或前后抓拍的后相机,特殊项目中会用到) + BYTE byFeaturePicNo; //闯红灯电警,取第几张图作为特写图,0xff-表示不取 + BYTE byDriveChan; //触发车道号 + BYTE byVehicleType; //车辆类型,参考VTR_RESULT + BYTE byDetSceneID;//检测场景号[1,4], IPC默认是0 + //车辆属性,按位表示,0- 无附加属性(普通车),bit1- 黄标车(类似年检的标志),bit2- 危险品车辆,值:0- 否,1- 是 + //该节点已不再使用,使用下面的byYellowLabelCar和byDangerousVehicles判断是否黄标车和危险品车 + BYTE byVehicleAttribute; + WORD wIllegalType; //违章类型采用国标定义 + BYTE byIllegalSubType[8]; //违章子类型 + BYTE byPostPicNo; //违章时取第几张图片作为卡口图,0xff-表示不取 + BYTE byChanIndex; //通道号(保留) + WORD wSpeedLimit; //限速上限(超速时有效) + BYTE byChanIndexEx; //byChanIndexEx*256+byChanIndex表示真实通道号。 + BYTE byVehiclePositionControl; /*车辆位置布防标志,0~为普通车牌识别报警,1~为车辆位置布防触发报警 + (即通过PUT /ISAPI/Traffic/channels//vehiclePositionControl?format=json触发)*/ + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,1-上行(反向),2-下行(正向),3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南,8-其它 + BYTE byDetectType; //检测方式,1-地感触发,2-视频触发,3-多帧识别,4-雷达触发 + //关联车道方向类型,参考ITC_RELA_LANE_DIRECTION_TYPE + //该参数为车道方向参数,与关联车道号对应,确保车道唯一性。 + BYTE byRelaLaneDirectionType; + BYTE byCarDirectionType; //车辆具体行驶的方向,0表示从上往下,1表示从下往上(根据实际车辆的行驶方向来的区分),2表示未知 + //当wIllegalType参数为空时,使用该参数。若wIllegalType参数为有值时,以wIllegalType参数为准,该参数无效。 + DWORD dwCustomIllegalType; //违章类型定义(用户自定义) + /*为0~数字格式时,为老的违章类型,wIllegalType、dwCustomIllegalType参数生效,赋值国标违法代码。 + 为1~字符格式时,pIllegalInfoBuf参数生效。老的违章类型,wIllegalType、dwCustomIllegalType参数依然赋值国标违法代码*/ + BYTE* pIllegalInfoBuf; //违法代码字符信息结构体指针;指向NET_ITS_ILLEGAL_INFO + BYTE byIllegalFromatType; //违章信息格式类型; 0~数字格式, 1~字符格式 + BYTE byPendant;// 0-表示未知,1-车窗有悬挂物,2-车窗无悬挂物 + BYTE byDataAnalysis; //0-数据未分析, 1-数据已分析 + BYTE byYellowLabelCar; //0-表示未知, 1-非黄标车,2-黄标车 + BYTE byDangerousVehicles; //0-表示未知, 1-非危险品车,2-危险品车 + //以下字段包含Pilot字符均为主驾驶,含Copilot字符均为副驾驶 + BYTE byPilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byCopilotSafebelt;//0-表示未知,1-系安全带,2-不系安全带 + BYTE byPilotSunVisor;//0-表示未知,1-不打开遮阳板,2-打开遮阳板 + BYTE byCopilotSunVisor;//0-表示未知, 1-不打开遮阳板,2-打开遮阳板 + BYTE byPilotCall;// 0-表示未知, 1-不打电话,2-打电话 + //0-开闸,1-未开闸 (专用于历史数据中相机根据名单匹配后,是否开闸成功的标志) + BYTE byBarrierGateCtrlType; + BYTE byAlarmDataType;//0-实时数据,1-历史数据 + NET_DVR_TIME_V30 struSnapFirstPicTime;//端点时间(ms)(抓拍第一张图片的时间) + DWORD dwIllegalTime;//违法持续时间(ms) = 抓拍最后一张图片的时间 - 抓拍第一张图片的时间 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[6]; //图片信息,单张回调,最多6张图,由序号区分 + NET_DVR_VEHICLE_WEIGHT_RESULT struWeightResult; //车辆称重 + BYTE byRes[256]; //预留 +}NET_DVR_PLATE_RESULT_V50, *LPNET_DVR_PLATE_RESULT_V50; + + +typedef struct _NET_DVR_NORMAL_SCHEDTIME_ +{ + NET_DVR_SCHEDTIME struTime; + BYTE byAlarmType;//0-外出布防,1-留守布防,2-即时布防 + BYTE byRes[3]; +}NET_DVR_NORMAL_SCHEDTIME,*LPNET_DVR_NORMAL_SCHEDTIME; + +typedef struct tagNET_DVR_SUBSYSTEM_ALARM +{ + DWORD dwSize; + NET_DVR_NORMAL_SCHEDTIME struNormalSchedtime[MAX_DAYS][MAX_TIMESEGMENT_V30]; + //日常计划布防时间段 + BYTE byNormalSchedTimeOn; //日常计划是否启用 + BYTE byMandatoryAlarm;//0-非强制布防,1-强制布防 指当防区有问题是是否为旁路布防 + BYTE byRes[254]; +}NET_DVR_SUBSYSTEM_ALARM,*LPNET_DVR_SUBSYSTEM_ALARM; + + +#define MAX_ALLOWLIST_PHONE_NUM 16 + +typedef struct _NET_DVR_ALARM_PHONECFG +{ + DWORD dwSize; + BYTE byEnable;//是否启用 0-不启用,1-启用 + BYTE byRes1[3]; + BYTE byPhoneNumber[MAX_PHONE_NUM/*32*/]; + DWORD dwArmRight; //布防权限,按位,bit0为1表示对子系统1有布防权限,依此类推 + DWORD dwDisArmRight; //撤防权限,按位,bit0为1表示对子系统1有撤防权限,依此类推 + DWORD dwClearAlarmRight; //消警权限,按位,bit0为1表示对子系统1有消警权限,依此类推 + BYTE byZoneReport[MAX_ALARMHOST_ALARMIN_NUM/*512*/]; //防区报告类型,0-不上传,1-上传 + DWORD dwNonZoneReport; //非防区报警报告 bit0-软防区报告 bit1-系统状态报告 bit2-取消报告 bit3-测试报告,bit4-布防报告 bit5-撤防报告 bit6-挟持报告 bit7-报警恢复报告 bit8-旁路报告 bit9-旁路恢复报告,bit10-探测器连接状态报告(上线、离线),bit11-探测器电量状态报告(电压正常、欠压),bit12-视频报警报告 + BYTE byIntervalTime; //0-0s,1-10s,2-30s,3-1min,4-5min,5-10min,6-自定义(1~5999s) + BYTE byRes2; + WORD wDefineIntervalTime; //当byIntervalTime为6时有效,自定义时间(1~5999s) + BYTE byRes3[128]; +}NET_DVR_ALARM_PHONECFG, *LPNET_DVR_ALARM_PHONECFG; + +typedef struct tagNET_DVR_MODULE_INFO +{ + DWORD dwSize; + BYTE byModuleType; //外接触发器类型,1-键盘,2-触发器,3-防区 ,4-网络模块 + BYTE byKeyBoardType; //1-LCD,2-LED + BYTE byTriggerType; // 1-本地触发器, 2-4路触发器,3-8路触发器,4-单防区触发器,5-32路触发器 + BYTE byZoneType; //防区类型,1-本地防区,2-单防区,3-双防区,4-8防区,5-8路模拟量防区, 6-单防区触发器 + WORD wModuleAddress; //外接触发器地址,扩展模块从0~255,0xFFFF表示无效 + BYTE byRes2[2]; //保留 + char sModelInfo[32]; //模块信息 + char sDeviceVersionInfo[32]; //版本信息 + BYTE byRes[128]; //保留 +}NET_DVR_MODULE_INFO,*LPNET_DVR_MODULE_INFO; + +typedef struct tagNET_DVR_ALARMHOST_DETECTOR_INFO +{ + DWORD dwSize; + BYTE byDetectorSerialNo[16]; //探测器序列号 + DWORD dwAlarmIn; //防区号 + WORD wDetectorType; // 探测器类型,DETECTOR_TYPE + BYTE byRes[126]; //保留 +}NET_DVR_ALARMHOST_DETECTOR_INFO, *LPNET_DVR_ALARMHOST_DETECTOR_INFO; + +typedef struct tagNET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 +{ + BYTE byEnable;// 0- 否,1- 是 + BYTE byRes1[3]; + NET_DVR_SCHEDDATE struDate; + NET_DVR_OUTPUT_SCHEDULE struOutputSchedule[MAX_TIMESEGMENT_V30/*8*/]; + BYTE byTriggerIndex[MAX_ALARMHOST_ALARMOUT_NUM];//下标表示触发器号,值0-不启用,1-启用 + BYTE byRes2[64]; +}NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40,*LPNET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40; +//时控输出规则参数 +typedef struct tagNET_DVR_OUTPUT_SCHEDULE_RULECFG_V40 +{ + DWORD dwSize; //结构体大小 + NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 struOutputRule[MAX_RULE_NUM/*8*/]; //最多支持8个日期区段的规则配置,对于定时开/关触发器只需要使用一个日期区段就可以了 + BYTE byRes[64]; //保留 +}NET_DVR_OUTPUT_SCHEDULE_RULECFG_V40,*LPNET_DVR_OUTPUT_SCHEDULE_RULECFG_V40; + +//单个时控输出规则配置 +typedef struct tagNET_DVR_ONE_OUTPUT_SCH_RULECFG_V40 +{ + DWORD dwSize; + NET_DVR_ONE_OUTPUT_SCHEDULE_RULE_V40 struOutputRule; + BYTE byRes[256]; //保留 +}NET_DVR_ONE_OUTPUT_SCH_RULECFG_V40,*LPNET_DVR_ONE_OUTPUT_SCH_RULECFG_V40; + +typedef struct tagNET_DVR_ALARM_CAPTRUE_CFG +{ + DWORD dwSize; + BYTE byBeforeAlarmPic; //对应分辨率下可设置报警前图片最大数4CIF:10张,2CIF:20张,CIF:40张,QCIF:80张;WD1:10张,XVGA:10张,720P:10张,1080P:10张 + BYTE byAfterAlarmPic; //对应分辨率下可设置报警后图片最大数 4CIF:10张,2CIF:20张,CIF:40张,QCIF:80张;WD1:10张,XVGA:10张,720P:10张,1080P:10张 + WORD wInterval; //间隔时间 单位s + BYTE byResolution; //图片分辨率1-CIF,2-2CIF,3-4CIF,4-QCIF,5-WD1,6-VGA,7-XVGA,8-720P,9-1080P + BYTE byRes[63]; // 保留字节 +}NET_DVR_ALARM_CAPTRUE_CFG, *LPNET_DVR_ALARM_CAPTRUE_CFG; + +#define PRIOR_SCHEDTIME 30 + +typedef struct _NET_DVR_PRIOR_SCHEDTIME_ +{ + DWORD dwSize; + NET_DVR_SCHEDDATE struData; + NET_DVR_NORMAL_SCHEDTIME struOneDayTime[8]; + BYTE byEnable; //是否启用 0-不启用,1-启用 + BYTE byRes1[3]; + BYTE bySubSystem[32];//子系统,下标表示子系统号 0-不支持,1-支持 + BYTE byMandatoryAlarm;//0-非强制布防,1-强制布防 指当防区有问题是是否为旁路布防 + BYTE byRes[63]; +}NET_DVR_PRIOR_SCHEDTIME,*LPNET_DVR_PRIOR_SCHEDTIME; + +typedef struct tagNET_DVR_TAMPER_ALARMIN_PARAM +{ + DWORD dwSize; + BYTE byTamperType; // 0-无,1-常开,2-常闭 + BYTE byUploadAlarmRecoveryReport; //是否上传防区报警恢复报告,0-不上传,1-上传 + BYTE byRes1[2]; + BYTE byAssociateAlarmOut[MAX_ALARMHOST_ALARMOUT_NUM]; //防区关联触发器 BYTE byAssociateSirenOut[8]; //警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE byAssociateSirenOut[8]; //警号输出 数组0 表示警号1 值为1表示输出 0 表示不输出 + BYTE byTamperResistor; //防拆电阻,单位千欧 , 0-无效 1-2.2 ,2--3.3, 3-4.7 ,4-5.6 , 5-8.2 ,0xff-自定义 + BYTE byRes2[3]; + float fTamperResistorManual;/*防拆手动电阻,1.0-10.0,精确到小数点后一位,单位千欧,byTamperResistor为0xff时有效*/ + BYTE byRes3[36]; // 保留字节 +}NET_DVR_TAMPER_ALARMIN_PARAM, *LPNET_DVR_TAMPER_ALARMIN_PARAM; + + +typedef struct tagNET_DVR_REMOTECONTROLLER_PERMISSION_CFG +{ + DWORD dwSize; + BYTE byEnable; + BYTE byAssociateNetUser;//关联的网络用户编号 + WORD wRemoteCtrllerID;//遥控器号 从1开始 + BYTE sDevSn[16];/*产品序列号*/ + BYTE byArmRight; /*0-无布防权限,1-有布防权限*/ + BYTE byDisArmRight; /*0-无撤防权限,1-有撤防权限*/ + BYTE byArmReportRight; /*0-无传布防报告权限,1-有传布防报告权限*/ + BYTE byDisArmReportRight;/*0-无上传撤防报告权限,1-有上传撤防报告权限*/ + BYTE byClearAlarmRight; /*0-无消警权限,1-有消警权限*/ + BYTE bySubSystemID; /* 设备(遥控器)子系统号,1~8 */ + BYTE byKeyboardAddr; /* 接收键盘的地址,在配对时设置 */ + BYTE byEnableDel; //删除遥控器用户,0-禁用删除,1-启用删除 + BYTE byAlwaysOpenRight; /*是否允许常开:0-无效,1-不允许,2-允许*/ + BYTE byOpeningDirection; /*开门方向:0-无效,1-进门方向,2-出门方向*/ + BYTE byRes3[2]; + BYTE byName[NAME_LEN]; //遥控器名称 + BYTE byRes2[28]; +}NET_DVR_REMOTECONTROLLER_PERMISSION_CFG, *LPNET_DVR_REMOTECONTROLLER_PERMISSION_CFG; + + +typedef struct tagNET_DVR_KEYBOARD_CFG +{ + DWORD dwSize; + BYTE byEnableLock; //是否启用键盘锁定,0--不启用, 1--启用 + BYTE byErrorTimes; //输入键盘用户密码错误次数(锁定键盘) + WORD wLockTime; //锁定键盘时间,单位秒 + BYTE byRes[128]; +}NET_DVR_KEYBOARD_CFG, *LPNET_DVR_KEYBOARD_CFG; + + +typedef struct tagNET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND +{ + DWORD dwSize; + BYTE byCommOperatorNum[NAME_LEN/*32*/];//通信运营商号码 + BYTE byQueryCode[16];//业务查询代码 + BYTE byBusinessType;//业务类型 0-话费,1-流量 + BYTE byRes[35]; +}NET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND, *LPNET_DVR_ALARMHOST_WIRELESS_BUSINESS_COND; + +typedef struct tagNET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO +{ + DWORD dwSize; + BYTE by3GBusiness[1024];//3G业务通过短信查询 + BYTE byRes[32]; +}NET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO, *LPNET_DVR_ALARMHOST_WIRELESS_BUSINESS_INFO; + +typedef struct tagNET_DVR_PREVIEW_DELAY_CFG +{ + DWORD dwSize; + WORD wdelayTime;//延迟预览时间,单位:秒 + BYTE byRes[130]; +}NET_DVR_PREVIEW_DELAY_CFG, *LPNET_DVR_PREVIEW_DELAY_CFG; + +typedef struct tagNET_DVR_AUXILIARY_DEV_UPGRADE_PARAM +{ + DWORD dwSize; + DWORD dwDevNo; //设备号 + BYTE byDevType; //升级设备类型 0-键盘,1-机芯,2-网络模块,3-路由器 ,4-防区,5-RS485无线扩展模块,6-温控模块,7-电锁模块,8-网口供电模块 + BYTE byRes[131]; +}NET_DVR_AUXILIARY_DEV_UPGRADE_PARAM,*LPNET_DVR_AUXILIARY_DEV_UPGRADE_PARAM; + +typedef struct tagNET_DVR_CALL_ROOM_CFG +{ + DWORD dwSize; + SHORT nFloorNumber; //层号 + WORD wRoomNumber; //房间号 + BYTE byManageCenter; //是否呼叫管理中心 + BYTE byRes1[3]; + BYTE byCalledName[64]; //标准sip模式下有效,被叫用户名, 支持数字、字母、“@”和“.” + BYTE byRes[60]; +}NET_DVR_CALL_ROOM_CFG,*LPNET_DVR_CALL_ROOM_CFG; + +typedef struct tagNET_DVR_VIDEO_CALL_COND +{ + DWORD dwSize; + BYTE byRes[128]; +}NET_DVR_VIDEO_CALL_COND,*LPNET_DVR_VIDEO_CALL_COND; + +//审讯案件信息 +typedef struct tagNET_DVR_INQUEST_CASE_INFO +{ + DWORD dwSize; + BYTE sCaseNo[INQUEST_CASE_NO_LEN]; //案件编号 + BYTE sCaseName[INQUEST_CASE_NAME_LEN]; //案件名称; + BYTE sCustomInfo1[CUSTOM_INFO_LEN]; //自定义信息1; + BYTE sCustomInfo2[CUSTOM_INFO_LEN]; //自定义信息2; + BYTE sCustomInfo3[CUSTOM_INFO_LEN]; //自定义信息3 + BYTE byShowCaseInfoTime; /* 案件信息显示时间,单位秒, 取值范围1~60秒*/ + BYTE byShowCaseInfo; //案件开始是否显示案件信息,0-不显示,1-显示 + BYTE byPosition; //案件显示位置,0-左上,1-左下 + BYTE byRes1; //保留 + BYTE byCustomInfo4[CUSTOM_INFO_LEN]; //自定义信息4,案件编号有内容时该字段无效 + BYTE byCustomInfo5[CUSTOM_INFO_LEN]; //自定义信息5,案件名称有内容时该字段无效 + BYTE byRes[128]; //保留 +}NET_DVR_INQUEST_CASE_INFO, *LPNET_DVR_INQUEST_CASE_INFO; + +typedef struct tagNET_DVR_CASE_INFO_CTRL_PARA +{ + DWORD dwSize; + DWORD dwChannel;//审讯通道号 + BYTE byShowCaseInfoTime; //显示持续时间 + BYTE byRes[131]; +}NET_DVR_CASE_INFO_CTRL_PARAM, *LPNET_DVR_CASE_INFO_CTRL_PARA; + +typedef struct tagNET_DVR_INQUEST_USER_RIGHT_CFG +{ + DWORD dwSize; + /*数组0: 审讯记录删除权限*/ + BYTE byLocalRight[MAX_RIGHT]; /* 本地权限 */ + /*数组0: 远程音频预览权限*/ + BYTE byRemoteRight[MAX_RIGHT];/* 远程权限 */ + BYTE byNetAudioRight[MAX_CHANNUM_V40]; /* 远程音频预览权限,数组下标表示通道,值表示有无权限,0-无权限,1-有权限*/ + BYTE byRes[512*9]; //保留9种权限可扩展 +}NET_DVR_INQUEST_USER_RIGHT_CFG, *LPNET_DVR_INQUEST_USER_RIGHT_CFG; + +typedef struct tagNET_DVR_INQUEST_MIX_AUDIOIN_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用混音,0-不启用,1-启用 + BYTE byRes1[3]; //保留 + DWORD dwMixCnt; /*混音的通道数*/ + BYTE bySrcChan[MAX_MIX_CHAN_NUM]; /*数组下标表示混音通道号(模拟通道、IP通道),数值0表示不混,数值1表示混入*/ + BYTE byLineIn[MAX_LINE_IN_CHAN_NUM]; /*数组下标表示混入Line In通道号,数值0表示不混,数值1表示混入*/ + BYTE byMic[MAX_MIC_CHAN_NUM]; /*数组下标表示混入Mic通道号,数值0表示不混,数值1表示混入*/ + BYTE byMixAudioDelay; //混音延迟,单位:帧,范围0-63 + BYTE byRes2[127]; //保留 +}NET_DVR_INQUEST_MIX_AUDIOIN_CFG, *LPNET_DVR_INQUEST_MIX_AUDIOIN_CFG; + +typedef struct tagNET_DVR_FACECAPTURE_STATISTICS_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + NET_DVR_TIME_EX struStartTime; //开始时间 + BYTE byReportType; //统计报表类型:1-日报表,2-周报表,3-月报表,4-年报表 + BYTE byStatType; //数据类型统计:Bit0-段,Bit1-性别,Bit2-人数 + BYTE byEnableProgramStatistics; //是否按节目统计,0-否,1-是 + BYTE byRes1; + DWORD dwPlayScheduleNo; //按节目统计时关联的日程号 + BYTE byRes[120]; +}NET_DVR_FACECAPTURE_STATISTICS_COND,*LPNET_DVR_FACECAPTURE_STATISTICS_COND; + +typedef struct tagNET_DVR_FILECOND_MEDICAL +{ + LONG lChannel;//通道号 + DWORD dwFileType;//录象文件类型 + //不带卡号,0xff-全部,0-定时录像,1-移动侦测 ,2-报警触发,3-报警|移动侦测 4-报警&移动侦测 5-命令触发 6-手动录像,7-智能录像,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + //带卡号,0xff-全部,0-定时录像,1-移动侦测,2-接近报警,3-出钞报警,4-进钞报警,5-命令触发,6-手动录像,7-震动报警,8-环境报警,9-智能报警,10-PIR报警,11-无线报警,12-呼救报警,13-全部事件,14-智能交通事件 + DWORD dwIsLocked;//是否锁定 0-正常文件,1-锁定文件, 0xff表示所有文件 + DWORD dwUseCardNo;//是否使用卡号 + BYTE sCardNumber[32];//卡号 + NET_DVR_TIME_SEARCH_COND struStartTime;//开始时间 + NET_DVR_TIME_SEARCH_COND struStopTime;//结束时间 + char szPatientID[64]; + DWORD dwBigFileType; // 0为普通片段搜索,1为大文件搜索 + BYTE byRes[252]; +}NET_DVR_FILECOND_MEDICAL, *LPNET_DVR_FILECOND_MEDICAL; + +typedef struct tagNET_DVR_FIND_PICTURE_MEDICAL_PARAM +{ + DWORD dwSize; // 结构体大小 + LONG lChannel; // 通道号 + /* 查找的图片类型:0定时抓图1 移动侦测抓图 2 报警抓图, + 3 报警 | 移动侦测抓图 4 报警 & 移动侦测抓图 6 手动抓图 , + 9-智能图片,10- PIR报警,11- 无线报警,12- 呼救报警, + 0xa 预览时截图,0xd 人脸侦测, 0xe 越界侦测,0xf 入侵区域侦测, + 0x10 场景变更侦测, 0x11-设备本地回放时截图, 0x12-智能侦测, + 0x13-进入区域侦测,0x14-离开区域侦测,0x15-徘徊侦测, + 0x16-人员聚集侦测,0x17-快速运动侦测,0x18-停车侦测, + 0x19-物品遗留侦测,0x1a-物品拿取侦测, 0x1b-车牌侦测, + 0x1c-混行检测,0x1d-取证事件,0x1e-火点检测,0x1f-防破坏检测, + 0x20-船只检测,0x21-测温预警,0x22-测温报警, 0x23测差报警, 0x24违停检测,0x25-人脸抓拍,0x26-离线测温报警,0x2a-起身检测,0x2b-折线攀高,0x2c-如厕超时,0x2d-安全帽检测,0x2e-周界抓拍,0x2f-人体目标抓拍,0x30-人脸抓拍建模, 0x31-混合目标检测,0x32-防区报警, 0x33-紧急求助, 0x34-业务咨询,0x35-非法摆摊,0xff- 全部类型*/ + BYTE byFileType; + BYTE byNeedCard; // 是否需要卡号 + /* + 0-保留,1-澳,2-京,3-渝,4-闽,5-甘,6-粤,7-桂, + 8-贵,9-琼,10-冀,11-豫,12-黑,13-鄂,14-湘, + 15-吉,16-苏,17-赣,18-辽,19-蒙,20-宁,21-青, + 22-鲁,23-晋,24-陕,25-沪,26-川,27-台,28-津, + 29-藏,30-港,31-新,32-云,33-浙,34-皖,0xff-全部 + */ + BYTE byProvince; //省份索引值 + BYTE byRes1; //查找结果中是否要求返回人脸坐标信息,0-不返回,1-返回 + NET_DVR_TIME struStartTime;//查找图片的开始时间 + NET_DVR_TIME struStopTime;// 查找图片的结束时间 + char szPatientID[64]; + BYTE byRes[256]; +}NET_DVR_FIND_PICTURE_MEDICAL_PARAM, *LPNET_DVR_FIND_PICTURE_MEDICAL_PARAM; + +typedef struct tagNET_DVR_SEXGROUP_PARAM_ +{ + DWORD dwMale;//男(人数) + DWORD dwFemale;//女(人数) + BYTE byRes[64]; +}NET_DVR_SEXGROUP_PARAM,*LPNET_DVR_SEXGROUP_PARAM; + +typedef struct tagNET_DVR_FACECAPTURE_STATISTICS_RESULT_ +{ + DWORD dwSize; + NET_DVR_TIME_EX struStartTime;/*间隔开始时间*/ + NET_DVR_TIME_EX struEndTime;/*间隔结束时间*/ + BYTE byStatType;//数据类型统计:Bit0-段有效,Bit1-性别有效,Bit2-人数有效 + BYTE byRes[7]; + DWORD dwPeopleNum;//人数统计 + BYTE byRes2[80]; + NET_DVR_SEXGROUP_PARAM struSexGroupParam;//性别人数统计 + NET_DVR_PROGRAM_INFO struProgramInfo; //节目信息 + BYTE byRes1[76]; +}NET_DVR_FACECAPTURE_STATISTICS_RESULT,*LPNET_DVR_FACECAPTURE_STATISTICS_RESULT; + +//获取交通数据条件结构 +typedef struct tagNET_DVR_TRAFFIC_DATA_QUERY_COND_ +{ + DWORD dwSize; + /* + Bit0-通道有效 + Bit1-时间有效 + Bit2-车牌号有效 + Bit3-车牌类型有效 + Bit4-车牌颜色有效 + Bit5-车身颜色有效 + Bit6-车辆类型有效 + Bit7-车辆品牌有效 + Bit8-车道号有效 + Bit9-显示方向有效 + Bit10-最低速度有效 + Bit11-最高速度有效 + Bit12-数据类型有效 + Bit13-布防方式类型有效 + Bit14-违法取证有效 + Bit15-事件类型有效 + Bit16-取证类型有效 + */ + DWORD dwQueryCond;//查询条件 0表示无效,1表示有效 + DWORD dwChannel;//默认是1([1~32],bit0表示通道1,依次类推bit31表示通道32) + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + char sLicense[MAX_LICENSE_LEN/*16*/];//(设备支持模糊查询, GB2312编码) + /* + Bit0-未知(其他) + Bit1-标准民用车与特种车 + Bit2-02式民用车牌 + Bit3-武警车 + Bit4-警车 + Bit5-民用车双行尾牌 + Bit6-使馆车牌 + Bit7-农用车 + Bit8-摩托车 + */ + DWORD dwPlateType;//车牌类型(支持按位表示,可以复选) + /* + Bit0-未知(其他) + Bit1-黄色 + Bit2-白色 + Bit3-黑色 + Bit4-绿色 + Bit5-蓝色 + */ + DWORD dwPlateColor;//车牌颜色(支持按位表示,可以复选) + /* + Bit0-未知(其他) + Bit1-白色 + Bit2-银色 + Bit3-灰色 + Bit4-黑色 + Bit5-红色 + Bit6-深蓝色 + Bit7-蓝色 + Bit8-黄色 + Bit9-绿色 + Bit10-棕色 + Bit11-粉色 + Bit12-紫色 + Bit13-深灰色 + */ + DWORD dwVehicleColor;//车身颜色(支持按位表示,可以复选) + /* + Bit0-未知(其他) + Bit1-客车 + Bit2-大货车 + Bit3-轿车 + Bit4-面包车 + Bit5-小货车 + Bit6-行人 + Bit7-二轮车 + Bit8-三轮车 + Bit9-SUV/MPV + Bit10-中型客车 + */ + DWORD dwVehicleType;//车辆类型(支持按位表示,可以复选) + /** + Bit0-其他(保留) + Bit1-低速 + Bit2-超速 + Bit3-逆行 + Bit4-闯红灯 + Bit5-压车道线 + Bit6-不按导向 + Bit7-路口滞留 + Bit8-机占非 + Bit9-违法变道 + Bit10-不按车道 + Bit11-违反禁令 + Bit12-路口停车 + Bit13-绿灯停车 + Bit14-未礼让行人 + Bit15-违章停车 + Bit16-违章掉头 + Bit17-占用应急车道 + Bit18-未系安全带 + */ + DWORD dwIllegalType; + /** + Bit0-其他(保留) + Bit1-拥堵 + Bit2-停车 + Bit3-逆行 + Bit4-行人 + Bit5-抛洒物 + Bit6-烟雾 + Bit7-压线 + Bit8-禁止名单 + Bit9-超速 + Bit10-变道 + Bit11-掉头 + Bit12-机占非 + Bit13-加塞 + */ + DWORD dwEventType; + /** + Bit0-其他(保留) + Bit1-城市公路违法停车 + Bit2-高速公路违法停车 + Bit3-压线 + Bit4-逆行 + Bit5-违法变道 + Bit6-机占非 + */ + DWORD dwForensiceType; + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" (仅单选) + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byDirection;//显示方向,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南 + WORD wMinSpeed;//最低速度(0~999)单位km/h + WORD wMaxSpeed;//最高速度(0~999)单位km/h + BYTE byDataType;//数据类型 0-卡口数据,1-违法数据,2-交通事件,3-取证数据 (仅单选) + BYTE byExecuteCtrl;//布防 0-允许名单,1-禁止名单,0xff-其他 + BYTE byRes[254]; +}NET_DVR_TRAFFIC_DATA_QUERY_COND,*LPNET_DVR_TRAFFIC_DATA_QUERY_COND; + +//交通图片参数子结构 +typedef struct tagNET_DVR_TRAFFIC_PICTURE_PARAM_ +{ + NET_DVR_TIME_V30 struRelativeTime; //抓拍相对时标 + NET_DVR_TIME_V30 struAbsTime; //抓拍绝对时标 + char szPicName[PICTURE_NAME_LEN/*64*/]; + BYTE byPicType;//图片类型 0-车牌图,1-抓拍原图,2-合成图,3-特写图 + BYTE byRes[63]; +}NET_DVR_TRAFFIC_PICTURE_PARAM,*LPNET_DVR_TRAFFIC_PICTURE_PARAM; + +//交通数据结构体 +typedef struct tagNET_DVR_TRAFFIC_DATA_QUERY_RESULT_ +{ + DWORD dwSize; + DWORD dwChannel;//默认是1([1~32]) + char sLicense[MAX_LICENSE_LEN/*16*/]; + /* + Bit0-未知(其他) + Bit1-标准民用车与特种车 + Bit2-02式民用车牌 + Bit3-武警车 + Bit4-警车 + Bit5-民用车双行尾牌 + Bit6-使馆车牌 + Bit7-农用车 + Bit8-摩托车 + */ + DWORD dwPlateType;//车牌类型 + /* + Bit0-未知(其他) + Bit1-黄色 + Bit2-白色 + Bit3-黑色 + Bit4-绿色 + Bit5-蓝色 + */ + DWORD dwPlateColor;//车牌颜色 + /* + Bit0-未知(其他) + Bit1-白色 + Bit2-银色 + Bit3-灰色 + Bit4-黑色 + Bit5-红色 + Bit6-深蓝色 + Bit7-蓝色 + Bit8-黄色 + Bit9-绿色 + Bit10-棕色 + Bit11-粉色 + Bit12-紫色 + Bit13-深灰色 + */ + DWORD dwVehicleColor;//车身颜色 + /* + Bit0-未知(其他) + Bit1-客车 + Bit2-大货车 + Bit3-轿车 + Bit4-面包车 + Bit5-小货车 + Bit6-行人 + Bit7-二轮车 + Bit8-三轮车 + Bit9-SUV/MPV + Bit10-中型客车 + Bit11-机动车 + Bit12-非机动车 + Bit13-小型轿车 + Bit14-微型轿车 + Bit15-皮卡车 + Bit16-集装箱卡车 + Bit17-微卡,栏板卡 + Bit18-渣土车 + Bit19-吊车,工程车 + Bit20-油罐车 + Bit21-混凝土搅拌车 + Bit22-平板拖车 + Bit23-两厢轿车 + Bit24-三厢轿车 + Bit25-轿跑 + Bit26-小型客车 + */ + DWORD dwVehicleType;//车辆类型 + /** + Bit0-其他(保留) + Bit1-低速 + Bit2-超速 + Bit3-逆行 + Bit4-闯红灯 + Bit5-压车道线 + Bit6-不按导向 + Bit7-路口滞留 + Bit8-机占非 + Bit9-违法变道 + Bit10-不按车道 + Bit11-违反禁令 + Bit12-路口停车 + Bit13-绿灯停车 + Bit14-未礼让行人 + Bit15-违章停车 + Bit16-违章掉头 + Bit17-占用应急车道 + Bit18-未系安全带 + */ + DWORD dwIllegalType; + /** + Bit0-其他(保留) + Bit1-拥堵 + Bit2-停车 + Bit3-逆行 + Bit4-行人 + Bit5-抛洒物 + Bit6-烟雾 + Bit7-压线 + Bit8-禁止名单 + Bit9-超速 + Bit10-变道 + Bit11-掉头 + Bit12-机占非 + Bit13-加塞 + */ + DWORD dwEventType; + /** + Bit0-其他(保留) + Bit1-城市公路违法停车 + Bit2-高速公路违法停车 + Bit3-压线 + Bit4-逆行 + Bit5-违法变道 + Bit6-机占非 + */ + DWORD dwForensiceType; + WORD wVehicleLogoRecog; //车辆主品牌,参考"车辆主品牌.xlsx" + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byDirection;//显示方向,1-上行,2-下行,3-双向,4-由东向西,5-由南向北,6-由西向东,7-由北向南 + WORD wSpeed;//速度(0~999)单位km/h + BYTE byDataType;//数据类型: 0-卡口 1-违法 2-事件 3-取证 + BYTE byRes[253]; + NET_DVR_TRAFFIC_PICTURE_PARAM struTrafficPic[MAX_TRAFFIC_PICTURE_NUM/*8*/]; +}NET_DVR_TRAFFIC_DATA_QUERY_RESULT,*LPNET_DVR_TRAFFIC_DATA_QUERY_RESULT; + +//长连接获取交通流量条件结构 +typedef struct tagNET_DVR_TRAFFIC_FLOW_QUERY_COND_ +{ + DWORD dwSize; + /** + Bit0-通道有效 + Bit1-时间有效 + Bit2-车道号有效 + */ + DWORD dwQueryCond;//查询条件 0-无条件 + DWORD dwChannel;//默认是1([1~32],bit0表示通道1,依次类推bit31表示通道32) + DWORD dwResChan[10];//预留可扩展的通道号 + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byRes[255]; +}NET_DVR_TRAFFIC_FLOW_QUERY_COND,*LPNET_DVR_TRAFFIC_FLOW_QUERY_COND; + +//长连接获取交通流量结构 +typedef struct tagNET_DVR_TRAFFIC_FLOW_QUERY_RESULT_ +{ + DWORD dwSize; + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + DWORD dwChannel;//默认是1([1~32]) + DWORD dwFlow;//车流量 + BYTE byLaneNo;//车道号(0~255,0号车道 表示 车道号未知) + BYTE byRes[511]; +}NET_DVR_TRAFFIC_FLOW_QUERY_RESULT,*LPNET_DVR_TRAFFIC_FLOW_QUERY_RESULT; + +//图片参数 +typedef struct tagNET_DVR_PIC_INFO +{ + BYTE byPicType; //图片类型,0-jpg + BYTE byRes1[3]; //保留 + DWORD dwPicWidth; //图片宽度 + DWORD dwPicHeight; //图片高度 + DWORD dwPicDataLen; //图片数据大小 + char* byPicDataBuff; //图片数据缓冲区 + BYTE byRes2[32]; //保留 +}NET_DVR_PIC_INFO,*LPNET_DVR_PIC_INFO; + +typedef struct tagNET_DVR_VCA_RULE_COLOR_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnable; //规则是否启用, 0-不启用,1-启用 + BYTE byRuleID; //关联的规则ID + BYTE byColorBlockNo; //颜色块序号,从1开始 + BYTE byRes1; //保留 + NET_DVR_PIC_INFO struPicInfo; //图片颜色信息 + BYTE byRes[64]; +}NET_DVR_VCA_RULE_COLOR_CFG,*LPNET_DVR_VCA_RULE_COLOR_CFG; + +typedef struct tagNET_DVR_VCA_RULE_COLOR_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChannel; //通道号 + BYTE byRuleID; //关联的规则ID 0表示不关联 + BYTE byRes[127]; +}NET_DVR_VCA_RULE_COLOR_COND,*LPNET_DVR_VCA_RULE_COLOR_COND; + +//LLDP参数 +typedef struct tagNET_DVR_LLDP_PORT_CFG +{ + BYTE byCardNo; //卡号 + BYTE byPortNo; //端口号 + BYTE byEnabledTx; //使能发送lldp包,0-不使能,1-使能 + BYTE byEnabledRx; //使能接收lldp包,0-不使能,1-使能 + BYTE byRes[12]; +}NET_DVR_LLDP_PORT_CFG, *LPNET_DVR_LLDP_PORT_CFG; + +typedef struct tagNET_DVR_LLDP_CFG +{ + DWORD dwSize; + BYTE byEnabled; //使能LLDP功能,0-不使能,1-使能 + BYTE byRes1[3]; + DWORD dwHoldTime; //保持时间,单位:秒 + DWORD dwReiniTime; //重新初始化时间,单位:秒 + DWORD dwPacketTime; //打包时间,单位:秒 + NET_DVR_LLDP_PORT_CFG struLLDPPortCfg[MAX_PORT_NUM]; //各端口LLDP参数 + BYTE byRes2[32]; +}NET_DVR_LLDP_CFG, *LPNET_DVR_LLDP_CFG; + +//光纤收发器基本信息 +typedef struct tagNET_DVR_CARD_PORT_INFO +{ + DWORD dwPortNo; //端口号,0-无效 + BYTE byPortName[NAME_LEN]; //端口名 + BYTE byWorkMode; //工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byBandWidth; //带宽,1-100M,2-1G,3-10G + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byRes[13]; +}NET_DVR_CARD_PORT_INFO, *LPNET_DVR_CARD_PORT_INFO; + +typedef struct tagNET_DVR_NETMGR_CARD_INFO +{ + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + NET_DVR_IPADDR struIPAddr; //IP地址 + DWORD dwSlotNo; //网管卡槽位号(主槽位) + BYTE byStructureType; //结构类型,1-2U,2-4U + BYTE byRes1[3]; + NET_DVR_CARD_PORT_INFO struNetPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各网口信息 + BYTE byRes2[32]; +}NET_DVR_NETMGR_CARD_INFO, *LPNET_DVR_NETMGR_CARD_INFO; + +typedef struct tagNET_DVR_FUNC_CARD_INFO +{ + DWORD dwCardNo; //卡号,从1开始 + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + DWORD dwMainSlot; //主槽位,从1开始 + BYTE byStructureType; //结构类型,1-2U,2-4U + BYTE byRes1[3]; + NET_DVR_CARD_PORT_INFO struFuncPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口参数 + BYTE byRes2[32]; +}NET_DVR_FUNC_CARD_INFO, *LPNET_DVR_FUNC_CARD_INFO; + +typedef struct tagNET_DVR_FIBER_CONVERT_BASIC +{ + DWORD dwSize; + BYTE byPowerType; //电源类型,1-单电源,2-双电源 + BYTE byRes1[3]; + DWORD dwSlotNum; //网管卡槽位号(主槽位) + NET_DVR_NETMGR_CARD_INFO struNetCardInfo; //网管卡信息 + NET_DVR_FUNC_CARD_INFO struFuncCardInfo[MAX_FUNC_CARD_NUM]; //功能卡信息 + BYTE byRes2[64]; +}NET_DVR_FIBER_CONVERT_BASIC, *LPNET_DVR_FIBER_CONVERT_BASIC; + +//光纤收发器工作状态信息 +typedef struct tagNET_DVR_CARD_PORT_STATE +{ + BYTE byValid; //是否有效,0-无效,1-有效 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLinkState; //连接状态,0-未连接,1-已连接 + BYTE byRes1; + DWORD dwSendBytes; //发送的字节数 + DWORD dwRecvBytes; //接收数据包数 + DWORD dwRecvLostPackets; //接收丢包数 + DWORD dwRecvCrcErrPackets; //接收CRC校验错误包数 + DWORD dwRecvFragmentPackets; //接收碎片、冲突及过短字节包数(包长度均小于64字节) + BYTE byRes2[16]; +}NET_DVR_CARD_PORT_STATE, *LPNET_DVR_CARD_PORT_STATE; + +typedef struct tagNET_DVR_NET_CARD_STATE +{ + NET_DVR_CARD_PORT_STATE struNetPortState[MAX_SINGLE_CARD_PORT_NO]; //各端口状态 + BYTE byRes[64]; +}NET_DVR_NET_CARD_STATE, *LPNET_DVR_NET_CARD_STATE; + +typedef struct tagNET_DVR_FUNC_CARD_STATE +{ + BYTE byEnabled; //此结构是否有效,0-无效,1-有效 + BYTE byRes1[3]; + DWORD dwCardNo; //卡号 + NET_DVR_CARD_PORT_STATE struFuncCardPortState[MAX_SINGLE_CARD_PORT_NO]; + BYTE byRes[32]; +}NET_DVR_FUNC_CARD_STATE, *LPNET_DVR_FUNC_CARD_STATE; + +typedef struct tagNET_DVR_FIBER_CONVERT_STATE +{ + DWORD dwSize; + NET_DVR_NET_CARD_STATE struNetCardState; //网管卡状态 + NET_DVR_FUNC_CARD_STATE struFuncCardState[MAX_FUNC_CARD_NUM]; //功能卡状态 + BYTE byRes[32]; +}NET_DVR_FIBER_CONVERT_STATE, *LPNET_DVR_FIBER_CONVERT_STATE; + +//远端网管收发器1.0 基本信息 +typedef struct tagNET_DVR_NETMGR_CARD_INFO_V50 +{ + BYTE byMainSlotNo; //网管卡槽位号(主槽位) + BYTE byRes1[3]; + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + NET_DVR_IPADDR struIPAddr; //IP地址 + NET_DVR_IPADDR struMask; //子网掩码 + NET_DVR_IPADDR struGateway; //默认网关 + BYTE byMacAddr[6]; //MAC地址 + BYTE bySlotNums; //槽位数 + BYTE byStructureType; //结构类型,1-2U,2-4U + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 + BYTE byRes2[64]; +}NET_DVR_NETMGR_CARD_INFO_V50, *LPNET_DVR_NETMGR_CARD_INFO_V50; + +typedef struct tagNET_DVR_FUNC_CARD_INFO_V50 +{ + BYTE byCardNo; //接收卡卡号 + BYTE byMainSlotNo; //接收卡槽位号(主槽位) + BYTE byRes1[2]; + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySerialNo[SERIALNO_LEN]; //序列号 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byIsVerMismatch; //软件版本与网管卡中本地存储的软件版本是否一致,0-匹配,!0-不匹配 + BYTE byRes2[3]; + BYTE byNewestSoftwareVersion[VERSION_LEN]; //最新的软件版本,版本不匹配时有效 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + BYTE bySlotNums; //槽位数 + BYTE byStructureType; //结构类型,1-2U,2-4U + BYTE byRes3[2]; + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 + BYTE byRes4[64]; +}NET_DVR_FUNC_CARD_INFO_V50, *LPNET_DVR_FUNC_CARD_INFO_V50; + +typedef struct tagNET_DVR_REMOTE_SEND_CARD_INFO_V50 +{ + BYTE byCardNo; //卡号,发送机连接的接收卡的卡号 + BYTE byMainSlotNo; //槽位号,发送机连接的接收卡的主槽位号 + BYTE byRes1[2]; + BYTE byTypeName[NAME_LEN]; //型号名称 + BYTE bySoftwareVersion[VERSION_LEN]; //软件版本 + BYTE byIsVerMismatch; //软件版本与网管卡中本地存储的软件版本是否一致,0-匹配,!0-不匹配 + BYTE byRes2[3]; + BYTE byNewestSoftwareVersion[VERSION_LEN]; //最新的软件版本,版本不匹配时有效 + BYTE byHardwareVersion[VERSION_LEN]; //硬件版本 + NET_DVR_CARD_PORT_INFO struPortInfo[MAX_SINGLE_CARD_PORT_NO]; //各端口信息 + BYTE byRes3[64]; +}NET_DVR_REMOTE_SEND_CARD_INFO_V50, *LPNET_DVR_REMOTE_SEND_CARD_INFO_V50; + +typedef struct tagNET_DVR_FIBER_CONVERT_BASIC_V50 +{ + DWORD dwSize; + BYTE byPowerType; //电源类型,1-单电源,2-双电源 + BYTE byRes1[3]; + DWORD dwSlotNum; //机箱总槽位数 + NET_DVR_NETMGR_CARD_INFO_V50 struNetCardInfo; //网管卡信息 + NET_DVR_FUNC_CARD_INFO_V50 struFuncCardInfo[MAX_FUNC_CARD_NUM]; //接收卡信息 + NET_DVR_REMOTE_SEND_CARD_INFO_V50 struRemoteSendCardInfo[MAX_FUNC_CARD_NUM]; //发送机信息 + BYTE byRes2[64]; +}NET_DVR_FIBER_CONVERT_BASIC_V50, *LPNET_DVR_FIBER_CONVERT_BASIC_V50; + +//远端网管收发器1.0 状态信息 +typedef struct tagNET_DVR_CARD_PORT_STATE_V50 +{ + BYTE byPortNo; //端口号,从1开始 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLinkState; //连接状态,0-未连接,1-已连接 + BYTE byPortSpeed; //带宽,0-无效,1-自动,2-100M,3-1000M,4-10G + BYTE byPortDuplexMode; //端口双工模式,0-无效,1-自动,2-全双工,3-半双工 + BYTE byRes1[3]; + BYTE byPortName[NAME_LEN]; //端口名称 + DWORD dwSendBytes; //发送的字节数 + DWORD dwSendByteSpeed; //发送字节速率,单位:bps + DWORD dwSendPackets; //发送的字节数 + DWORD dwSendPacketSpeed; //发包速率,单位:个/秒 + DWORD dwRecvBytes; //接收的字节数 + DWORD dwRecvByteSpeed; //接收字节速率,单位:bps + DWORD dwRecvPackets; //接收的包数 + DWORD dwRecvPacketSpeed; //收包速率,单位:个/秒 + DWORD dwRecvLostPackets; //接收丢包数 + DWORD dwRecvCrcErrPackets; //接收CRC校验错误包数 + DWORD dwRecvFragmentPackets; //接收碎片、冲突及过短字节包数(包长度均小于64字节) + BYTE byRes2[48]; +}NET_DVR_CARD_PORT_STATE_V50, *LPNET_DVR_CARD_PORT_STATE_V50; + +typedef struct tagNET_DVR_NET_CARD_STATE_V50 +{ + BYTE byMainSlotNo; //网管卡主槽位号 + BYTE byRes1[3]; + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //网管卡端口状态 + BYTE byRes2[344]; +}NET_DVR_NET_CARD_STATE_V50, *LPNET_DVR_NET_CARD_STATE_V50; + +typedef struct tagNET_DVR_FUNC_CARD_STATE_V50 +{ + BYTE byCardNo; //接收卡卡号 + BYTE byMainSlotNo; //接收卡主槽位号 + BYTE byRes1[2]; + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //接收卡端口状态 + BYTE byRes2[64]; +}NET_DVR_FUNC_CARD_STATE_V50, *LPNET_DVR_FUNC_CARD_STATE_V50; + +typedef struct tagNET_DVR_REMOTE_SEND_CARD_STATE_V50 +{ + BYTE byCardNo; //发送机连接的接收卡的卡号 + BYTE byMainSlotNo; //发送机连接的接收卡的主槽位号 + BYTE byRes1[2]; + NET_DVR_CARD_PORT_STATE_V50 struPortState[MAX_SINGLE_CARD_PORT_NO]; //接收卡端口状态 + BYTE byRes[64]; +}NET_DVR_REMOTE_SEND_CARD_STATE_V50, *LPNET_DVR_REMOTE_SEND_CARD_STATE_V50; + +typedef struct tagNET_DVR_FIBER_CONVERT_STATE_V50 +{ + DWORD dwSize; + NET_DVR_NET_CARD_STATE_V50 struNetCardState; //网管卡状态 + NET_DVR_FUNC_CARD_STATE_V50 struFuncCardState[MAX_FUNC_CARD_NUM]; //接收卡状态 + NET_DVR_REMOTE_SEND_CARD_STATE_V50 struRemoteSendCardState[MAX_FUNC_CARD_NUM]; //发送机状态 + BYTE byRes[64]; +}NET_DVR_FIBER_CONVERT_STATE_V50, *LPNET_DVR_FIBER_CONVERT_STATE_V50; + +//光纤收发器拓扑信息 +typedef struct tagNET_DVR_FC_PORT_TOPOLOGY +{ + DWORD dwPortNo; //端口号,0-无效,非0为功能卡端口号 + BYTE byPortType; //端口类型,1-电口,2-光口,3-光电复用口 + BYTE byLocalWorkMode; //本地工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byLocalBandWidth; //本地带宽,1-100M,2-1G,3-10G + BYTE byRes1[1]; + BYTE byPeerTypeName[NAME_LEN]; //对端设备类型名称 + BYTE byPeerMac[MACADDR_LEN]; //对端MAC地址 + DWORD dwPeerPortNo; //对端端口号 + BYTE byPeerWorkMode; //对端工作模式,1-ACCESS,2-TRUNK,3-HYPRID + BYTE byPeerBandWidth; //对端带宽,1-100M,2-1G,3-10G + BYTE byRes2[30]; +}NET_DVR_FC_PORT_TOPOLOGY, *LPNET_DVR_FC_PORT_TOPOLOGY; + +typedef struct tagNET_DVR_FC_CARD_TOPOLOGY +{ + BYTE byEnable; //此结构体是否有效,0-无效,非0-有效 + BYTE byRes1[3]; + DWORD dwCardNo; //卡号,0-网管卡,大于0-功能卡 + DWORD dwSlotNum; //卡占用的槽位数 + BYTE byTypeName[NAME_LEN]; //卡类型名称 + BYTE byLocalMac[MACADDR_LEN]; //本地MAC地址 + NET_DVR_FC_PORT_TOPOLOGY struFCPortTopology[MAX_SINGLE_CARD_PORT_NO]; //各端口拓扑信息 + BYTE byRes[32]; +}NET_DVR_FC_CARD_TOPOLOGY, *LPNET_DVR_FC_CARD_TOPOLOGY; + +typedef struct tagNET_DVR_FIBER_CONVERT_TOPOLOGY +{ + DWORD dwSize; + NET_DVR_FC_CARD_TOPOLOGY struFCCardTopology[MAX_FC_CARD_NUM]; //各卡拓扑信息 + BYTE byRes[64]; +}NET_DVR_FIBER_CONVERT_TOPOLOGY, *LPNET_DVR_FIBER_CONVERT_TOPOLOGY; + +//光纤收发器端口注释信息 +typedef struct tagNET_DVR_FC_COND +{ + DWORD dwSize; + DWORD dwSlotNo; //槽位号 + DWORD dwPortNo; //端口号 + BYTE byRes[32]; +}NET_DVR_FC_COND, *LPNET_DVR_FC_COND; + +typedef struct tagNET_DVR_FC_PORT_REMARKS +{ + DWORD dwSize; + BYTE byLocalRemarks[MAX_REMARKS_LEN]; //本地端口注释信息 + BYTE byPeerRemarks[MAX_REMARKS_LEN]; //对端端口注释信息 + BYTE byRes[32]; +}NET_DVR_FC_PORT_REMARKS, *LPNET_DVR_FC_PORT_REMARKS; + +typedef enum _EN_FIBER_CONVERT_ALARM +{ + FC_OPTICAL_PORT_LOST = 1, + FC_ELECTRICAL_PORT_LOST, + FC_FUNC_CARD_LOST, + FC_CARD_DISCONNECTED, //卡断线告警 + FC_MAX_TEMP_LIMITED, //温度超上限告警 + FC_MIN_TEMP_LIMITED, //温度超下限告警 + FC_MAX_VOLTAGE_LIMITED, //电压超上限告警 + FC_MIN_VOLTAGE_LIMITED, //电压超下限告警 +}EN_FIBER_CONVERT_ALARM; + +typedef enum _EN_FIBER_CONVERT_NOTIFICATION +{ + FC_OPTICAL_PORT_CONNECTED = 1, + FC_ELECTRICAL_PORT_CONNECTED, + FC_FUNC_CARD_INSERT, + FC_CARD_CONNECTED, //卡上线通知 + FC_TEMP_RECOVERY, //温度恢复通知 + FC_VOLTAGE_RECOVERY, //电压恢复通知 +}EN_FIBER_CONVERT_NOTIFICATION; + +typedef struct tagNET_DVR_FIBER_CONVERT_ALARM +{ + DWORD dwSize; + DWORD dwEventType; //事件类型,1-告警,2-通知 + DWORD dwEvent; //具体事件,告警时参考枚举FIBER_CONVERT_ALARM,通知时参考枚举FIBER_CONVERT_NOTIFICATION + BYTE bySlotNum; //槽位号,当卡类型为发送机时,槽位号为该发送机连接的接收卡的槽位号,机箱告警及通知时无效 + BYTE byCardType; //卡类型,0-无效,1-网管卡,2-接收卡,3-发送机,4-机箱 + BYTE byPortNo; //端口号,从1开始,机箱告警及通知时无效 + BYTE byCurTemperature; //触发事件的温度,温度告警及通知时有效,单位:摄氏度 + WORD wCurVoltage; //触发事件的电压(实际电压*10),电压告警及通知时有效,单位:伏特 + BYTE byRes1[30]; +}NET_DVR_FIBER_CONVERT_ALARM, *LPNET_DVR_FIBER_CONVERT_ALARM; + +//交换机告警事件上传 +typedef enum _EN_SWITCH_CONVERT_ALARM +{ + SC_OPTICAL_PORT_LOST = 1, + SC_NETWORK_PORT_LOST, + SC_WIRELESS_SPEED_UP_EXCEPTION,//无线上行速率异常 + SC_WIRELESS_SHUTDOWN, //无线连接断开事件 + SC_DEVICE_POE_MAX, //POE-MAX告警 + SC_PORT_POE_POWER_OFF, //端口POE掉电告警 +}EN_SWITCH_CONVERT_ALARM; + +typedef enum _EN_SWICH_CONVERT_NOTIFICATION +{ + SC_OPTICAL_PORT_CONNECTED = 1, + SC_NETWORK_PORT_CONNECTED, + SC_DEVICE_POE_MAX_RECOVERY, //POE-MAX告警恢复 + SC_PORT_POE_POWER_ON, //端口POE上电通知 + SC_WIRELESS_CONNECTED, //无线连接事件 +}EN_SWITCH_CONVERT_NOTIFICATION; + +typedef struct tagNET_DVR_SWITCH_CONVERT_ALARM +{ + DWORD dwSize; + BYTE byPortNo; //接口索引,从1开始,表示索引低8位 + BYTE byPortNoEx; //接口索引,索引大于255时,该字段表示索引的高8位 + BYTE byRes1[2]; + DWORD dwEventType; //事件类型,1-告警,2-通知 + DWORD dwEvent; //具体事件,告警时参考枚举EN_SWITCH_CONVERT_ALARM,通知时参考枚举EN_SWITCH_CONVERT_NOTIFICATION + BYTE byRes2[32]; +}NET_DVR_SWITCH_CONVERT_ALARM, *LPNET_DVR_SWITCH_CONVERT_ALARM; + +typedef struct tagNET_DVR_SWITCH_LAMP_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnable; //规则是否启用, 0-不启用,1-启用 + BYTE byTriggerMode; // 1-持续触发,2-单次触发 + BYTE byUploadPic; //0-不上传图片,1-上传图片 + BYTE byRes1; //保留 + DWORD dwTimeInterval; //持续触发报警时间间隔,范围[0,3600],单位:秒 + NET_DVR_HANDLEEXCEPTION_V30 struHandleType;//处理方式 + BYTE byRelRecordChan[MAX_IVMS_IP_CHANNEL]; //报警触发的录象通道:1表示触发该通道;0表示不触发 + NET_DVR_SCHEDTIME struAlarmTime[MAX_DAYS][MAX_TIMESEGMENT_V30];//检测时间 + BYTE byRes[256]; +}NET_DVR_SWITCH_LAMP_CFG,*LPNET_DVR_SWITCH_LAMP_CFG; + +typedef struct tagNET_DVR_SWITCH_LAMP_ALARM +{ + DWORD dwSize;//结构体大小 + NET_VCA_DEV_INFO struDevInfo; //设备信息 + NET_DVR_TIME_EX struTime; //报警时间 + BYTE byLampStatus; //开关灯状态,0-已关闭 1-已打开 + BYTE byRes1[3]; //保留 + DWORD dwPicDataLen; //图片数据长度,非0表示有图片上传 + char* pPicData; //图片数据 + BYTE byRes[64]; +}NET_DVR_SWITCH_LAMP_ALARM,*LPNET_DVR_SWITCH_LAMP_ALARM; + +//防护舱级联配置 +typedef struct tagNET_DVR_RS485_CASCADE_CFG +{ + DWORD dwSize; + BYTE byDevAddr; //设备地址,0-主机,1-15为从机 + BYTE byRes[131]; +}NET_DVR_RS485_CASCADE_CFG,*LPNET_DVR_RS485_CASCADE_CFG; + +//私有关键信息上传配置 +typedef struct tagNET_DVR_PRIVATE_PROTOCOL_CFG +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; //消息上传的IP地址 + WORD wPort;//消息上传的端口号 + BYTE byEnable;//使能, 0-保留,1-不启用,2-启用 + BYTE byRes; + DWORD dwInterval;//消息上传间隔(0-无时间间隔限制,以设备为准; >=0,以秒为单位的时间间隔) + BYTE byServerType;//服务类型 0-无,1-公安 + BYTE byEcryptedSMSEnable;//0-不加密,1-加密 + BYTE byAlgorithm;//加密算法,0-无,1-RSA + BYTE byAcauisitionMode;//采集模式,0-基本信息,1-虚拟身份信息,2-基本信息+虚拟身份信息 + DWORD dwDistanceLimit;//距离限制,单位:m + BYTE byPKModeEnable;//PK模式使能, 0-保留,1-不启用,2-启用 + BYTE byMACAddrReductionEnable;//MAC地址还原使能, 0-保留,1-不启用,2-启用 + BYTE byRes1[214]; + char szIndexCode[MAX_INDEX_CODE_LEN]; + DWORD dwSecretKeyLen;//秘钥长度 + char szSecretKey[MAX_SECRETKEY_LEN/*512*/];//秘钥 +}NET_DVR_PRIVATE_PROTOCOL_CFG,*LPNET_DVR_PRIVATE_PROTOCOL_CFG; + +//调试命令 +typedef struct tagNET_DVR_DEBUG_CMD +{ + DWORD dwSize; + char szDebugCMD[MAX_DEBUGCMD_LEN/*1024*/]; + BYTE byRes[400]; +}NET_DVR_DEBUG_CMD,*LPNET_DVR_DEBUG_CMD; + +//调试信息 +typedef struct tagNET_DVR_DEBUG_INFO +{ + DWORD dwSize; + char szDebugInfo[MAX_DEBUGINFO_LEN/*1400*/]; + BYTE byRes[32]; +}NET_DVR_DEBUG_INFO,*LPNET_DVR_DEBUG_INFO; + + + +#define MAX_SSID_LEN 32 //SSID号长度 +#define MAX_WS_PASSWD_LEN 64 //密码长度 +typedef struct tagNET_DVR_WIRELESSSERVER +{ + DWORD dwSize;//结构体大小 + BYTE byWLanShare;//WLan热点使能 0-关闭,1-使能 + BYTE byBroadcastSSID;//SSID广播使能 0-关闭,1-使能 + BYTE bySecurityMode;//安全模式 0- not-encrypted,1-WPA,2-WPA2(暂时只支持2) + BYTE byAlgorithmType; //加密模式 1-TKIP,2-AES + char szSSID[MAX_SSID_LEN/*32*/];//SSID号信息 + char szPassWord[MAX_WS_PASSWD_LEN/*64*/]; + BYTE byDefaultPassword;//是否是默认密码 0-否,1-是 + BYTE byWifiApModeType;//启用WlanAP热点模式,0-关闭,1-开启,2-自动 + BYTE byRes[254]; +}NET_DVR_WIRELESSSERVER,*LPNET_DVR_WIRELESSSERVER; + +typedef struct tagNET_DVR_CONNECTDEV_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byRes[128]; +}NET_DVR_CONNECTDEV_COND,*LPNET_DVR_CONNECTDEV_COND; + +typedef struct tagNET_DVR_CONNECTDEV_CFG +{ + DWORD dwSize; + BYTE byID;//序列号 + BYTE byRes[1]; + BYTE byMACAddr[MACADDR_LEN/*6*/]; // 物理地址 + NET_DVR_IPADDR struDVRIP;//设备IP + NET_DVR_TIME struConnectTime;//接入时间 + BYTE byRes1[256]; +}NET_DVR_CONNECTDEV_CFG,*LPNET_DVR_CONNECTDEV_CFG; + +typedef struct tagNET_DVR_GIS_SERVER_INFO +{ + BYTE byUserName[NAME_LEN]; + BYTE byPassword[PASSWD_LEN]; + NET_DVR_IPADDR struServerIP; //GIS服务器IP地址 + WORD wPort; //GIS服务器端口 + BYTE byRes[30]; +}NET_DVR_GIS_SERVER_INFO, *LPNET_DVR_GIS_SERVER_INFO; + +typedef struct tagNET_DVR_BASEMAP_CONTROL_CFG_V40 +{ + DWORD dwSize; + BYTE byEnable; //是否显示,1-显示,0-隐藏 + BYTE byBaseMapType; //底图类型,1-图片底图,2-超高清输入底图,3-GIS底图 + BYTE byRes1[2]; + DWORD dwBaseMapNo; //底图号;底图类型为1时,此参数为图片序号,底图类型为2时此参数为超高清输入子系统输入口号(1字节矩阵号+1字节子板号+1字节输入口号+1字节保留) + NET_DVR_GIS_SERVER_INFO struGisServer; //GIS服务器信息,当底图类型为GIS底图时有效 + BYTE byRes2[64]; +}NET_DVR_BASEMAP_CONTROL_CFG_V40,*LPNET_DVR_BASEMAP_CONTROL_CFG_V40; + +typedef struct tagNET_DVR_VIDEO_IMG_DB_CFG +{ + DWORD dwSize; //NET_DVR_VIDEO_IMG_DB_CFG结构体大小 + INT64 i64Capacity; //视图库总容量,低位,单位:MB + INT64 i64UsedSpace; //只读,已用空间,低位,单位:MB + INT64 i64AvailableSpace; //只读,可用空间,低位,单位:MB + BYTE byRes[256]; //保留 +}NET_DVR_VIDEO_IMG_DB_CFG, *LPNET_DVR_VIDEO_IMG_DB_CFG; + +typedef struct tagNET_DVR_FILE_QUERY_INFO +{ + DWORD dwSize; //NET_DVR_FILE_QUERY_INFO结构体大小 + INT64 i64FileLen; //文件大小 + BYTE byRes[256]; //保留 +}NET_DVR_FILE_QUERY_INFO, *LPNET_DVR_FILE_QUERY_INFO; + +typedef struct tagNET_DVR_FILE_INFO_IN +{ + char szFileID[MAX_FILE_ID_LEN]; //上传之后,设备分配的文件ID + BYTE byRes[256]; +}NET_DVR_FILE_INFO_IN, *LPNET_DVR_FILE_INFO_IN; + +typedef struct tagNET_DOWNLOAD_CB_INFO +{ + DWORD dwType; //类型, 0-数据信息,1-单个图片信息(云存储批量下载),2-图片总体信息(云存储批量下载) + BYTE *pData; //数据指针 + DWORD dwDataLen; //数据长度 + void* pFileInfo; //文件信息结构体(云存储批量下载时有效) + DWORD dwFileInfoLen; //文件信息结构体长度(云存储批量下载时有效) + BYTE byRes[120]; //保留 +}NET_DOWNLOAD_CB_INFO, *LPNET_DOWNLOAD_CB_INFO; + +typedef BOOL (*DOWNLOAD_DATA_CB)( LONG lHandle, NET_DOWNLOAD_CB_INFO *pCBInfo, void *pUserData); + +typedef struct tagNET_DVR_DOWNLOAD_CB_PARAM +{ + DOWNLOAD_DATA_CB fnDownloadDataCB; //下载数据回调函数 + void *pUserData; //用户参数, 在fnPreviewDataCB回调出来 + INT64 i64Offset; //下载文件的偏移量,用于断点续传 + BYTE byRes[256]; +}NET_DVR_DOWNLOAD_CB_PARAM, *LPNET_DVR_DOWNLOAD_CB_PARAM; + +typedef struct tagNET_DVR_UPLOAD_DB_IN +{ + INT64 i64FileLen; //上传新文件,需要给出文件长度,文件续传可以不给 + BYTE byContinueUpload; //0-新文件上传,1-老文件续传,文件名必须给出 + BYTE byRes[255]; +}NET_DVR_UPLOAD_DB_IN, *LPNET_DVR_UPLOAD_DB_IN; + + +typedef struct tagNET_DVR_UPLOAD_DB_OUT +{ + char szFileID[MAX_FILE_ID_LEN]; //上传之后,设备分配的文件ID + BYTE byRes[256]; +}NET_DVR_UPLOAD_DB_OUT, *LPNET_DVR_UPLOAD_DB_OUT; + +typedef struct tagNET_DVR_SEND_PARAM_IN +{ + BYTE *pSendData; //发送的缓冲区,PicURL == 1 的时候,内存中存储的是 URL 字符串,byUploadModeling == 1 的时候,内存中存储的是 建模base64加密数据 + DWORD dwSendDataLen; //发送数据长度,PicURL == 1 的时候,表示的 URL 字符串的长度,byUploadModeling == 1 的时候,表示为建模数据base64后的加密长度 + NET_DVR_TIME_V30 struTime; //图片时间 + BYTE byPicType; //图片格式,1-jpg,2-bmp,3-png,4-SWF,5-GIF + BYTE byPicURL; //图片数据采用URL方式 0-二进制图片数据,1-图片数据走URL方式 + /*是否上传建模数据; + 0- 二进制图片数据方式(pSendData指向二进制图片数据, dwPicDataLen为图片二进制数据长度), + 1- 直接上传建模数据(pSendData指向建模base64加密数据, dwPicDataLen为建模数据base64后的加密长度)。 + 注:建模数据采用base64加密方式,选择为建模数据上传后,byPicURL 无需。 + 当”/ISAPI/Intelligent/channels//faceContrast/capabilities”能力中返回isSupportUploadModeling能力节点时,支持上传建模数据. */ + BYTE byUploadModeling; + BYTE byRes1; + DWORD dwPicMangeNo; //图片管理号 + BYTE sPicName[NAME_LEN]; //图片名称 + DWORD dwPicDisplayTime; //图片播放时长,单位秒 + BYTE *pSendAppendData; //发送图片的附加信息缓冲区,对应FaceAppendData 的XML描述; + DWORD dwSendAppendDataLen; //发送图片的附加信息数据长度 FaceAppendData XML的长度; + BYTE byRes[192]; +}NET_DVR_SEND_PARAM_IN, *LPNET_DVR_SEND_PARAM_IN; + + +typedef struct tagNET_DVR_DOWNLOAD_QOS +{ + DWORD dwMaxSpeed; //流控最大速度,单位kbps + BYTE byRes[256]; +}NET_DVR_DOWNLOAD_QOS, *LPNET_DVR_DOWNLOAD_QOS; + + +#define NET_SDK_MAX_FILE_NAME 100 //最大文件名称 + +typedef struct tagNET_DVR_UPLOAD_FILEVOLUME_PRARAM_ +{ + DWORD dwSize; + BYTE byFileType; //文件类型 0-录像,1-音频 + BYTE byFileVolnumeID; //文件卷ID(可以通过NET_DVR_GET_HDVOLUME_CFG 获取) + BYTE byArchive; //0-不归档,1-归档 + BYTE byRes1; + DWORD dwFileSize; //文件大小 + char szFileName[NET_SDK_MAX_FILE_NAME/*100*/]; //文件名称 + BYTE byRes[300]; +}NET_DVR_UPLOAD_FILEVOLUME_PRARAM, *LPNET_DVR_UPLOAD_FILEVOLUME_PRARAM; + +typedef struct tagNET_DVR_DOWNLOAD_FILEVOLUME_PARAM_ +{ + DWORD dwSize; + BYTE sUrl[MAX_UPLOADFILE_URL_LEN/*240*/]; //url + BYTE byRes[248]; + DOWNLOAD_DATA_CB fnDownloadDataCB; //下载数据回调函数 + void *pUserData; //用户参数, 在fnPreviewDataCB回调出来 +}NET_DVR_DOWNLOAD_FILEVOLUME_PARAM, *LPNET_DVR_DOWNLOAD_FILEVOLUME_PARAM; + + +//电影模式参数 +typedef struct tagNET_DVR_FILM_MODE_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byScreenType; //画面类型,0-单画面,1-两画面,2-画中画 + BYTE byRes[255]; //保留 +}NET_DVR_FILM_MODE_CFG, *LPNET_DVR_FILM_MODE_CFG; + +//导播策略配置 +typedef struct tagNET_DVR_DIRECTED_STRATEGY_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byDirectedStrategyType; //导播策略类型,0-常态导播策略,1-精品导播策略,2-精品导播1替2,3-精品导播策略1替3 + BYTE byRes[255]; //保留 +}NET_DVR_DIRECTED_STRATEGY_CFG, *LPNET_DVR_DIRECTED_STRATEGY_CFG; + +//边框子结构 +typedef struct NET_DVR_FRAME +{ + BYTE byFrameWide; /*边框宽度合法取值范围为[0,14],并且只能取偶数值*/ + BYTE byRed; /*边框颜色为RGB 模式,R,G,B,分别对应位于如下*/ + BYTE byGreen; + BYTE byBlue; + BYTE byRes[256]; +}NET_DVR_FRAME, *LPNET_DVR_FRAME; + +//配置画面边框 +typedef struct tagNET_DVR_FRAME_CFG +{ + DWORD dwSize; //结构体大小 + NET_DVR_FRAME struTopFrame; //上边框 + NET_DVR_FRAME struBottomFrame;//下边框 + NET_DVR_FRAME struLeftFrame; //左边框 + NET_DVR_FRAME struRightFrame; //右边框 + BYTE byFrameEnable; //叠加边框0-不叠加1-叠加边框 + BYTE byRes[256]; //保留 +}NET_DVR_FRAME_CFG, *LPNET_DVR_FRAME_CFG; + +//配置画面边框条件 +typedef struct tagNET_DVR_FRAME_COND +{ + DWORD dwSize; + DWORD dwPicNo;//画面编号 + BYTE byRes[256]; +}NET_DVR_FRAME_COND, *LPNET_DVR_FRAME_COND; + +//音频优化参数 +typedef struct tagNET_DVR_AUDIO_EFFECTIVE_CFG +{ + DWORD dwSize; //结构体大小 + DWORD dwCheckDelay; //检测时延,单位s,0表示不自动优化 + BYTE byThreshold; //阈值[0,100] + BYTE byVolumePercent;//音量 [0,100] + BYTE byPriority; //等级,[0,100] + BYTE byRes[301]; +}NET_DVR_AUDIO_EFFECTIVE_CFG, *LPNET_DVR_AUDIO_EFFECTIVE_CFG; + +//录制视频参数 +typedef struct tagNET_DVR_RECORD_VIDEO_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byExportType; //阈值0-MP4 1-AVI + BYTE byRes[255]; //保留字节 +} NET_DVR_RECORD_VIDEO_CFG, *LPNET_DVR_RECORD_VIDEO_CFG; + +//RTMP Cond +typedef struct tagNET_DVR_RTMP_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byStreamType; //码流类型,1-主码流,2-子码流,3-码流三 + BYTE byRes[303]; +}NET_DVR_RTMP_COND, *LPNET_DVR_RTMP_COND; + +//RTMP Cfg +typedef struct tagNET_DVR_RTMP_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用RTMP,0-不启用,1-启用 + BYTE byRes1[3]; + DWORD dwPacketLen; //RTMP包长 + char szURL[RTMP_URL_LEN]; //RTMP URL + BYTE byRes[256]; //保留字节 +}NET_DVR_RTMP_CFG, *LPNET_DVR_RTMP_CFG; + +//文件发布 +typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID + NET_DVR_TIME_EX struStartTime; //课程开始时间 + NET_DVR_TIME_EX struEndTime; //课程结束时间 + BYTE byCmdType; //发布命令类型 1--开始发布 2--取消发布 + BYTE byFileType; //发布文件类型 0—保留 1—定时课程 2—手动课程 + BYTE byRes[254]; +}NET_DVR_RECORDING_PUBLISH_FILE_CFG, *LPNET_DVR_RECORDING_PUBLISH_FILE_CFG; + +//文件发布进度条件 +typedef struct tagNET_DVR_PUBLISH_PROGRESS_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID + BYTE byRes[256]; +}NET_DVR_PUBLISH_PROGRESS_COND, *LPNET_DVR_PUBLISH_PROGRESS_COND; + +//文件发布进度参数 +typedef struct tagNET_DVR_PUBLISH_PROGRESS_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byPublishPercent; //发布百分比 0-100 + BYTE byPublishStatus; //发布状态 0-发布成功 1--正在发布 2--等待发布 3-连不上FTP 4--没有找到此文件 5--发布失败(其他错误) + BYTE byRes[302]; +}NET_DVR_PUBLISH_PROGRESS_CFG, *LPNET_DVR_PUBLISH_PROGRESS_CFG; + +//删除视图库中的文件 +typedef struct tagNET_DVR_BACKGROUND_PIC_COND +{ + DWORD dwSize; + char szFileID[MAX_ID_LEN_128/*128*/]; //上传之后,设备分配的文件ID, 指背景图片名 + BYTE byRes[256]; +}NET_DVR_BACKGROUND_PIC_COND, *LPNET_DVR_BACKGROUND_PIC_COND; + +//查询背景图片文件 +typedef struct tagNET_DVR_BACKGROUND_PIC_CFG +{ + DWORD dwSize; //结构体大小 + DWORD dwPicSize; //背景图片大小 + DWORD dwPicType; //图片类型,YUV:0 JPEG:1 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + BYTE byPicName[MAX_PIC_NAME_LEN/*128*/]; //图片名称 + BYTE byRes[128]; +}NET_DVR_BACKGROUND_PIC_CFG,*LPNET_DVR_BACKGROUND_PIC_CFG; + +typedef struct tagNET_DVR_BACKGROUND_PIC_INFO +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用背景图片叠加,0-否,1-是 + BYTE byRes1[3]; + BYTE byPicID[MAX_ID_LEN_128/*128*/]; + BYTE byRes[300]; //保留 +}NET_DVR_BACKGROUND_PIC_INFO,*LPNET_DVR_BACKGROUND_PIC_INFO; + + +//上传背景图片文件 +typedef struct tagNET_DVR_BACKGROUND_PIC_PRARAM +{ + DWORD dwSize; + DWORD dwChannel; //导播通道 + DWORD dwPicSize; //背景图片大小 + WORD wPicWidth; //图片宽 + WORD wPicHeight; //图片高 + char szPicName[MAX_PIC_NAME_LEN/*128*/]; //图片名称 + BYTE byPicType; //图片类型,YUV:0 JPEG:1 + BYTE byRes[303]; +}NET_DVR_BACKGROUND_PIC_PRARAM,*LPNET_DVR_BACKGROUND_PIC_PRARAM; + +//低功耗配置 +typedef struct tagNET_DVR_LOWPOWER +{ + DWORD dwSize;//结构体大小 + BYTE byMode;//补光灯模式 0-手动,1-定时 + BYTE byEnabled;//手动模式下的使能开关 0-关闭,1-开启 + BYTE byRes[6]; + NET_DVR_SCHEDULE_DAYTIME struSchedTime;//定时时间段 + BYTE byRes1[256]; +}NET_DVR_LOWPOWER,*LPNET_DVR_LOWPOWER; + +typedef struct tagNET_DVR_POINT +{ + DWORD dwX; //X轴坐标 + DWORD dwY; //Y坐标 +}NET_DVR_POINT, *LPNET_DVR_POINT; + +//变倍联动配置 +typedef struct tagNET_DVR_ZOOMLINKAGE +{ + DWORD dwSize;//结构体大小 + BYTE byEnable;//使能 0-关,1-开 + BYTE byRes[255]; +}NET_DVR_ZOOMLINKAGE,*LPNET_DVR_ZOOMLINKAGE; + +typedef struct tagNET_DVR_ONLINEUPGRADE_STATUS +{ + DWORD dwSize; + BYTE byUpgradeStatus;//0-未开始升级,1-正在升级,2-升级成功,3-包语言不匹配,4-写falsh失败,5-包类型不匹配,6-包版本不匹配,7-网络不可达,8-升级服务器出错, + //9-读取升级包文件出错,10-没有找到升级文件,11-升级文件有错,12-设备内存不足,0xff-未知错误 + BYTE byProgress; //升级进度,0~100 + BYTE byRes[250]; +}NET_DVR_ONLINEUPGRADE_STATUS,*LPNET_DVR_ONLINEUPGRADE_STATUS; + +typedef struct tagNET_DVR_FIRMWARECODE_COND +{ + DWORD dwSize; + DWORD dwStartIndex; //起始索引号 + DWORD dwMaxNum; //单次最大个数,32 + BYTE byRes[52]; +}NET_DVR_FIRMWARECODE_COND,*LPNET_DVR_FIRMWARECODE_COND; + +typedef struct tagNET_DVR_FIRMWARECODE +{ + WORD wIndex; + WORD wCodeLen; //识别码长度,上层应用开发的时候做一个判断,如果本字段大于128,请报错,提示用户更新工具/客户端版本 + BYTE byCode[MAX_IDCODE_LEN];//识别码 + BYTE byVersion[MAX_VERSIIN_LEN];//版本 + BYTE byRes[12]; +}NET_DVR_FIRMWARECODE,*LPNET_DVR_FIRMWARECODE; + +typedef struct tagNET_DVR_FIRMWARECODE_LIST +{ + DWORD dwSize; + DWORD dwValidCodeNum; //有效个数 + NET_DVR_FIRMWARECODE struCode[MAX_IDCODE_NUM]; + BYTE byRes[64]; +}NET_DVR_FIRMWARECODE_LIST,*LPNET_DVR_FIRMWARECODE_LIST; + +typedef struct tagNET_DVR_ONLINEUPGRADE_SERVER +{ + DWORD dwSize; + BYTE byConnectStatus; //0-未连接,1-已连接 + BYTE byRes[1019]; +}NET_DVR_ONLINEUPGRADE_SERVER,*LPNET_DVR_ONLINEUPGRADE_SERVER; + +typedef struct tagNET_DVR_ONLINEUPGRADE_VERSION_COND +{ + DWORD dwSize; + BYTE byCheckFromSvr; //是否需要从服务器检测,0-不需要,仅返回设备周期性检查的结果;1-需要,设备会即时连接服务器检测是否有新版本 + BYTE byRes[59]; +}NET_DVR_ONLINEUPGRADE_VERSION_COND,*LPNET_DVR_ONLINEUPGRADE_VERSION_COND; + +typedef struct tagNET_DVR_ONLINEUPGRADE_VERSION_RET +{ + DWORD dwSize; + BYTE byNewVersionAvailable; //是否有新版本,0-否,1-是 + BYTE byNewVersion[MAX_VERSIIN_LEN]; //新版本的版本号 + BYTE byChangeLog[SDK_LEN_2048]; //新版本更新的内容 + BYTE byRes[971]; +}NET_DVR_ONLINEUPGRADE_VERSION_RET,*LPNET_DVR_ONLINEUPGRADE_VERSION_RET; + +typedef struct tagNET_DVR_RECOMMEN_VERSION_COND +{ + DWORD dwSize; + BYTE byFirmwareCode[MAX_IDCODE_LEN]; + BYTE byFirmwareVersion[MAX_VERSIIN_LEN]; + BYTE byRes[60]; +}NET_DVR_RECOMMEN_VERSION_COND,*LPNET_DVR_RECOMMEN_VERSION_COND; + +typedef struct tagNET_DVR_RECOMMEN_VERSION_RET +{ + DWORD dwSize; + BYTE byRecommenUpgrade; //推荐升级,0-否,1-是 + BYTE byRes[123]; +}NET_DVR_RECOMMEN_VERSION_RET,*LPNET_DVR_RECOMMEN_VERSION_RET; + +//温湿度配置 +typedef struct tagNET_DVR_THSCREEN +{ + DWORD dwSize;//结构体大小 + BYTE byEnable;//启用定时使能 + BYTE byTHOSDDisplay;//温湿度显示OSD显示是否启用, 0-否,1-是 + BYTE byRes[2]; // 保留字节 + NET_VCA_POINT struTHOSDPoint;//温湿度显示OSD显示左上角坐标 + BYTE byTimingMode;//校时模式 0-手动,1-自动 + BYTE byRes1; + WORD wInterval;//校时定时模式下,间隔时间设置[1,10080]m + BYTE byRes2[254]; +}NET_DVR_THSCREEN,*LPNET_DVR_THSCREEN; + +typedef struct tagNET_DVR_SENSOR_ADJUSTMENT +{ + DWORD dwSize;//结构体大小 + BYTE byType;//调整模式:0-上下,1-左右,2-旋转,3-图像视场角,4-RGB调整, 5-亮度, 6-RGB_Ex调整 + BYTE bySensorNo;//Sensor 号[1,8] + BYTE byRes[2]; + int iAdjustMentRange;//调整幅度 [-100,100] 旋转的时候[-30,30] 图像视场角[-10,10] + BYTE byR;//RGB参数,R(红色),范围0-100 + BYTE byG;//RGB参数,G(绿色),范围0-100 + BYTE byB;//RGB参数,B(蓝色),范围0-100 + BYTE byRgbType;//RGB类型,0-保留,1-产线模式,2-手动模式 + BYTE byBrightness;//亮度,范围0-100,默认值50 + BYTE byRes1[3]; + WORD wRex;//RGB参数(扩展),R(红色),范围0-2048 + WORD wGex;//RGB参数(扩展),G(绿色),范围0-2048 + WORD wBex;//RGB参数(扩展),B(蓝色),范围0-2048 + BYTE byRes2[114]; +}NET_DVR_SENSOR_ADJUSTMENT,*LPNET_DVR_SENSOR_ADJUSTMENT; + +typedef struct tagNET_DVR_SENSOR_ADJUSTMENT_INFO +{ + DWORD dwSize;//结构体大小 + int iPan;//左右值 + int iTilt;//上下值 + int iRotation;//旋转值 + int iFieldAngle;//图像视场角值 + BYTE byR;//RGB参数,R(红色),范围0-100 + BYTE byG;//RGB参数,G(绿色),范围0-100 + BYTE byB;//RGB参数,B(蓝色),范围0-100 + BYTE byRgbType;//RGB类型,0-保留,1-产线模式,2-手动模式 + BYTE byBrightness;//亮度,范围0-100,默认值50 + BYTE byRes[3]; + WORD wRex;//RGB参数(扩展),R(红色),范围0-2048 + WORD wGex;//RGB参数(扩展),G(绿色),范围0-2048 + WORD wBex;//RGB参数(扩展),B(蓝色),范围0-2048 + BYTE byRes1[114]; +}NET_DVR_SENSOR_ADJUSTMENT_INFO,*LPNET_DVR_SENSOR_ADJUSTMENT_INFO; + +typedef struct tagNET_DVR_SENSOR_RESET +{ + DWORD dwSize;//结构体大小 + BYTE bySensorNo;//Sensor号[1,8];当Sensor No为0的时候,表示全部清除;其他情况下表示单个清除 + BYTE byRes[127]; +}NET_DVR_SENSOR_RESET,*LPNET_DVR_SENSOR_RESET; + +typedef struct tagNET_DVR_PANORAMAIMAGE +{ + DWORD dwSize;//结构体大小 + BYTE byFusionMode;//模式:0-原始图像,1-全景图像 + BYTE byPreviewMode;//模式:1-目标,2-固定显示 + BYTE byRes[126]; +}NET_DVR_PANORAMAIMAGE,*LPNET_DVR_PANORAMAIMAGE; + +typedef struct tagNET_DVR_RELOCATE_INFO +{ + DWORD dwSize;//结构体大小 + BYTE byTakeOverAddr[MAX_DOMAIN_NAME/*64*/]; //接管设备的地址 + WORD wPort ; //设备端口号 + BYTE byRes[254] ; //保留 +}NET_DVR_RELOCATE_INFO, *LPNET_DVR_RELOCATE_INFO; + +typedef struct tagNET_DVR_CONFERENCE_REGION +{ + DWORD dwSize; + BYTE byEnabled; //是否启用会议区域,0-否,1-是 + BYTE byRes1[3]; + NET_DVR_POINT struRegion[RECT_POINT_NUM]; //会议区域,矩形,起始点为左下角,顺时针方向 + DWORD dwOutputWidth; //单输出口基准宽,只能获取 + DWORD dwOutputHeight; //单输出口基准高,只能获取 + BYTE byRes2[32]; +}NET_DVR_CONFERENCE_REGION, *LPNET_DVR_CONFERENCE_REGION; + +typedef struct tagNET_DVR_TERMINAL_CALL_CFG +{ + DWORD dwSize; + BYTE byAnswerType; //会议呼叫响应方式,1-自动接听,2-自动拒接,3-手动接听 + BYTE byProtocolType; //使用的协议类型,1-SIP,2-H232 + BYTE byTransmissionProtocol; //传输协议类型,0-无效,1-TCP,2-UDP + BYTE byRes[29]; +}NET_DVR_TERMINAL_CALL_CFG, *LPNET_DVR_TERMINAL_CALL_CFG; + +typedef struct tagNET_DVR_TERMINAL_CALL_INFO +{ + BYTE byTermianlURL[MAX_URL_LEN]; + DWORD dwCallRate;//呼叫速率,范围为:32~6144,单位Kbps (连接速率) + BYTE byRes[124]; +}NET_DVR_TERMINAL_CALL_INFO, *LPNET_DVR_TERMINAL_CALL_INFO; + +typedef struct tagNET_DVR_TERMINAL_AUDIO_CTRL +{ + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //音量,非静音时有效,1-100 + BYTE byAudioInputDisabled; //禁止音频输入,0-允许音频输入,1-禁止音频输入 + BYTE byAudioInputVolume; //音频输入音量,允许音频输入时有效,1-100 + BYTE byRes[636]; +}NET_DVR_TERMINAL_AUDIO_CTRL, *LPNET_DVR_TERMINAL_AUDIO_CTRL; + +typedef struct tagNET_DVR_HOWLING_SUPPRESSION +{ + BYTE byEnabled; //是否使能啸叫抑制 + BYTE byHsSensibility; //啸叫抑制灵敏度 + BYTE byHsMode; //啸叫抑制模式,0-默认,1-慢速,2-快速 + BYTE byRes1; + DWORD dwHsTime; //啸叫抑制时间,单位:ms + BYTE byRes2[16]; +}NET_DVR_HOWLING_SUPPRESSION, *LPNET_DVR_HOWLING_SUPPRESSION; + +typedef struct tagNET_DVR_TERMINAL_INPUT_AUDIO +{ + DWORD dwChannel; //通道号 + BYTE byGainType; //增益类型,1-数字增益,2-模拟增益,3-两者 + BYTE byEnableSimulate; //是否启用模拟增益,0-否,1-是 + BYTE byVolumeSimulate; //模拟音量,启用时有效,1-100 + BYTE byEnableDigital; //是否启用数字增益,0-否,1-是 + BYTE byVolumeDigital; //数字音量,启用时有效,1-100 + BYTE byRes1[3]; + NET_DVR_HOWLING_SUPPRESSION struHsParam; //啸叫抑制参数 + BYTE byRes[604]; +}NET_DVR_TERMINAL_INPUT_AUDIO, *LPNET_DVR_TERMINAL_INPUT_AUDIO; + + +typedef union tagNET_DVR_TERMINAL_DETAIL_CTRL_PARAM +{ + BYTE byRes[640]; + NET_DVR_TERMINAL_CALL_INFO struCallInfo; + NET_DVR_TERMINAL_AUDIO_CTRL struAudioCtrl; + NET_DVR_TERMINAL_INPUT_AUDIO struInputAudio; +}NET_DVR_TERMINAL_DETAIL_CTRL_PARAM, *LPNET_DVR_TERMINAL_DETAIL_CTRL_PARAM; + +typedef struct tagNET_DVR_TERMINAL_CTRL_PARAM +{ + DWORD dwSize; + BYTE byOperateType; //操作类型,1-接听,2-拒接,3-呼叫,4-音频调节,5-挂断,6-双流开,7-双流关 + BYTE byRes1[3]; + NET_DVR_TERMINAL_DETAIL_CTRL_PARAM struCtrlParam; //具体控制参数 + BYTE byRes2[32]; +}NET_DVR_TERMINAL_CTRL_PARAM, *LPNET_DVR_TERMINAL_CTRL_PARAM; + +typedef struct tagNET_DVR_POS_INFO_OVERLAY +{ + DWORD dwSize; + BYTE byPosInfoOverlayEnable;// Pos信息码流叠加控制,0-不叠加,1-叠加 + BYTE byOverlayType;//0-叠加进入和离开,1-叠加进入、离开、PASS、ID、高度 + BYTE byRes[126]; +}NET_DVR_POS_INFO_OVERLAY, *LPNET_DVR_POS_INFO_OVERLAY; + + +typedef struct tagNET_DVR_CAMERA_WORK_MODE +{ + DWORD dwSize; + BYTE byWorkMode;//工作模式,0-正常模式,1-工厂标定模式 + BYTE byPreviewImageMode;//预览图像模式,0-左眼图像,1-右眼图像,2-左右叠加图像 + BYTE byRes[126]; +}NET_DVR_CAMERA_WORK_MODE, *LPNET_DVR_CAMERA_WORK_MODE; + +typedef struct tagNET_DVR_VCA_VERSION_LIST +{ + DWORD dwSize; //结构体长度 + NET_DVR_VCA_VERSION struVcaVersion[NET_SDK_VERSION_LIST_LEN/*64*/];//算法库版本信息 + BYTE byRes[128]; +}NET_DVR_VCA_VERSION_LIST, *LPNET_DVR_VCA_VERSION_LIST; + +typedef struct tagNET_DVR_SETUP_CALIB_COND +{ + DWORD dwSize; + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定,3-智能标定 + BYTE byRes1[3]; + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,当byCalibrateType为2时有效 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,当byCalibrateType为2时有效 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时有效 + NET_VCA_POLYGON struAutoCalibPolygon;//自动标定区域,当byCalibrateType为1时有效 + BYTE byIntelligentType;//标定的智能类型,0-保留, 1-客流,2-人体属性,3-异常行为检测;只有在标定客流时NET_DVR_SETUP_CALIB_RESULT返回的数据才有效 + BYTE byRes[127]; +}NET_DVR_SETUP_CALIB_COND, *LPNET_DVR_SETUP_CALIB_COND; + +typedef struct tagNET_DVR_SETUP_CALIB_RESULT +{ + DWORD dwSize; + BYTE byCalibrateType;//标定类型,0-未进行标定,1-自动标定,2-手动标定,3-智能标定 + BYTE byRes1[3]; + float fTiltAngle;//俯仰角,单位:度;俯仰角默认值:0;俯仰角范围:0-180度,当byCalibrateType为2时有效 + float fHeelAngle;//倾斜角,单位:度;倾斜角默认值:0;倾斜角范围:-90-90度,当byCalibrateType为2时有效 + float fHeight;//高度,高度单位:厘米;高度默认值300厘米:高度范围:200-500厘米,当byCalibrateType为2时有效 + NET_VCA_POLYGON struCountPolygon;//计数区域 + NET_DVR_PDC_ENTER_DIRECTION struEnterDirection; // 流量进入方向 + NET_VCA_LINE struLine;//检测线 + BYTE byRes[128]; +}NET_DVR_SETUP_CALIB_RESULT, *LPNET_DVR_SETUP_CALIB_RESULT; + +typedef struct tagNET_DVR_CALL_QUERY_COND +{ + DWORD dwSize; + BYTE bySearchID[MAX_SEARCH_ID_LEN]; //搜索标识符 + NET_DVR_TIME struStartTime; //搜索起始时间 + NET_DVR_TIME struEndTime; //搜索结束时间 + BYTE byCallType; //呼叫类型,1-已接,2-未接,3-已拨,4-所有类型 + BYTE byRes1[3]; + DWORD dwMaxResults; //本次查找最多返回个数 + DWORD dwSearchPos; //查找起始索引 + BYTE byRes2[32]; +}NET_DVR_CALL_QUERY_COND, *LPNET_DVR_CALL_QUERY_COND; + +typedef struct tagNET_DVR_CALL_QUERY_SINGLE +{ + DWORD dwSize; + BYTE byCallType; //呼叫类型,1-已接,2-未接,3-已拨 + BYTE byRes1[3]; + BYTE byTerminalName[TERMINAL_NAME_LEN]; //终端名 + BYTE byAddressURL[MAX_URL_LEN]; //对端URL地址 + NET_DVR_TIME struStartTime; //呼叫开始时间 + NET_DVR_TIME struEndTime; //呼叫结束时间 + BYTE byRes2[32]; +}NET_DVR_CALL_QUERY_SINGLE, *LPNET_DVR_CALL_QUERY_SINGLE; + + +typedef enum tagCALL_QUERY_RESULT_STATUS +{ + CALL_QUERY_RESULT_OK = 0, //成功查询所有 + CALL_QUERY_RESULT_FAIL, //查询失败,未知错误 + CALL_QUERY_RESULT_MORE, //成功查询 还有更多没有返回 + CALL_QUERY_RESULT_NOMATCH, //没有查询到匹配的 + CALL_QUERY_RESULT_PARAMERROR, //查询条件参数错误 + CALL_QUERY_RESULT_INVALIDTIME, //查询条件时间无效 + CALL_QUERY_RESULT_TIMEOUT, //查询超时 +}CALL_QUERY_RESULT_STATUS; + +typedef struct tagNET_DVR_CALL_QUERY_RESULT +{ + DWORD dwSize; + BYTE bySearchID[MAX_SEARCH_ID_LEN]; //搜索标识符 + BYTE byStatus; //查询状态 参考CALL_QUERY_RESULT_STATUS结构体 + BYTE byRes[3]; //保留 + DWORD dwCount; //实际查询到的结果个数 + BYTE *pResults; //结果内容,dwCount个NET_DVR_CALL_QUERY_SINGLE,需要调用者预先分屏好内存 + BYTE byRes2[32]; +}NET_DVR_CALL_QUERY_RESULT, *LPNET_DVR_CALL_QUERY_RESULT; + +typedef struct tagNET_DVR_CONFERENCE_CALL_INFO +{ + BYTE byConferenceID[MAX_ID_LEN]; //会议ID + BYTE byConferenceName[NAME_LEN]; //会议名称 + NET_DVR_TIME struStartTime; //会议开始时间 + NET_DVR_TIME struEndTime; //会议结束时间 + BYTE byRes[512]; +}NET_DVR_CONFERENCE_CALL_INFO, *LPNET_DVR_CONFERENCE_CALL_INFO; + +typedef union tagNET_DVR_CALL_INFO +{ + BYTE byRes[640]; + NET_DVR_TERMINAL_CALL_INFO struTerminalCallInfo; //终端点对点呼叫信息 + NET_DVR_CONFERENCE_CALL_INFO struConferenceCallInfo; //会议呼叫信息 +}NET_DVR_CALL_INFO, *LPNET_DVR_CALL_INFO; + +typedef struct tagNET_DVR_CONFERENCE_CALL_ALARM +{ + DWORD dwSize; + BYTE byAlarmType; //报警类型,1-会议呼叫, 2-呼叫状态切换,3-终端提问 + BYTE byCallType; //呼叫类型,报警类型为1时有效,1-终端点对点呼叫,2-会议呼叫 + BYTE byAutoAnswer; //是否已自动接听,0-否,1-是 + BYTE byCallStatusSwitch; //呼叫状态切换类型,当报警类型为2时有效,1-开始呼叫,2-呼叫成功,3-呼叫结束,4-对端挂断 + NET_DVR_CALL_INFO struCallInfo; //呼叫信息 + BYTE byRes2[32]; +}NET_DVR_CONFERENCE_CALL_ALARM, *LPNET_DVR_CONFERENCE_CALL_ALARM; + +typedef struct tagNET_DVR_TERMINAL_INPUT_CFG +{ + DWORD dwSize; + DWORD dwInputNo; //作为视频会议输入的输入口编号 + BYTE byStreamType;//码流类型:0-主码流,1-子码流,2-三码流 + BYTE byRes[31]; +}NET_DVR_TERMINAL_INPUT_CFG, *LPNET_DVR_TERMINAL_INPUT_CFG; + +typedef struct tagNET_DVR_AUDIO_STATUS +{ + BYTE byMute; //是否静音,0-否,1-是 + BYTE byVolume; //会议音量,1-100,非静音时有效 + BYTE byAudioInputDisabled; //禁用音频输入,0-否,1-是 + BYTE byAudioInputVolume; //音频输入音量,1-100,允许音频输入时有效 + BYTE byRes[32]; +}NET_DVR_AUDIO_STATUS, *LPNET_DVR_AUDIO_STATUS; + +typedef struct tagNET_DVR_TERMINAL_CONFERENCE_STATUS +{ + DWORD dwSize; + BYTE byConferenceState; //会议状态,0-空闲,1-忙碌(会议中),2-呼叫中,3-被呼叫中 + BYTE byConferenceType; //会议类型,1-点对点,2-MCU发起会议 + BYTE byDualStreamEnabled; //是否开启双流,0-未开启,1-开启 + BYTE byMicPowerEnabled; //麦克风电源是否开启,0-未开启,1-开启 + DWORD dwInputNo; //使用的音频输入口号 + NET_DVR_CALL_INFO struCallInfo; //会议信息 + NET_DVR_AUDIO_STATUS struAudioStatus; //音频相关状态 + BYTE byRes2[32]; +}NET_DVR_TERMINAL_CONFERENCE_STATUS, *LPNET_DVR_TERMINAL_CONFERENCE_STATUS; + +//终端注册GK信息 +typedef struct tagNET_DVR_TERMINAL_GK_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用 + BYTE byRegisterState; //注册状态,0-未注册,1-已注册,只读 + BYTE byRes1[2]; + NET_DVR_IPADDR struGKIP; //GK IP + WORD wGKPort; //GK端口号 + BYTE byRes2[2]; + BYTE byRegisterName[REGISTER_NAME_LEN]; //终端注册到GK的名字 + BYTE byPassword[PASSWD_LEN]; //终端注册到GK的密码 + BYTE byRes3[16]; +}NET_DVR_TERMINAL_GK_CFG, *LPNET_DVR_TERMINAL_GK_CFG; + +//解码器漫游开关参数 +typedef struct tagNET_DVR_WIN_ROAM_SWITCH_CFG +{ + DWORD dwSize; + BYTE byEnableRoam; //是否允许窗口漫游,0-否,非0-是 + BYTE byRes[31]; +}NET_DVR_WIN_ROAM_SWITCH_CFG,*LPNET_DVR_WIN_ROAM_SWITCH_CFG; + +typedef struct tagNET_DVR_LED_OUTPUT_CFG +{ + DWORD dwSize; + BYTE byEnableZoom; //是否缩放,0-否,1-是 + BYTE byAutoCutBlackEdge; //是否自动裁剪黑边,0-否,1-是 + BYTE byRes1[2]; + WORD wLEDWidth; //分辨率宽 + WORD wLEDHeight; //分辨率高 + DWORD dwRefreshRate; //刷新频率 + DWORD dwInputNO; //关联的输入通道号 + BYTE byRes2[32]; +}NET_DVR_LED_OUTPUT_CFG, *LPNET_DVR_LED_OUTPUT_CFG; + +typedef struct tagNET_DVR_LED_OUTPUT_PORT_CFG +{ + DWORD dwSize; + BYTE byEnabled; //是否使能,0-否,1-是 + BYTE byRes1[3]; + DWORD dwPortNum; //包含的端口个数 + DWORD dwPortNo[MAX_OUTPUT_PORT_NUM]; //包含的端口号 + BYTE byRes2[64]; +}NET_DVR_LED_OUTPUT_PORT_CFG, *LPNET_DVR_LED_OUTPUT_PORT_CFG; + +typedef struct tagNET_DVR_LINE_COLUMN_INFO +{ + WORD wLine; //行号 + WORD wColumn; //列号 +}NET_DVR_LINE_COLUMN_INFO, *LPNET_DVR_LINE_COLUMN_INFO; + +typedef struct tagNET_DVR_LED_DISPLAY_AREA +{ + DWORD dwSize; + NET_DVR_LINE_COLUMN_INFO struLCInfo; //显示区域的起始位置(接收卡行列号) + WORD wWidth; //横向接收卡数 + WORD wHeight; //竖向接收卡数 + WORD wRecvCardWidth; //接收卡宽度大小,为0则使用端口参数中接收卡大小参数 + WORD wRecvCardHeigt; //接收卡高度大小,为0则使用端口参数中接收卡大小参数 + BYTE byRes[32]; +}NET_DVR_LED_DISPLAY_AREA, *LPNET_DVR_LED_DISPLAY_AREA; + +typedef struct tagNET_DVR_LED_RECV_CARD_INFO +{ + NET_DVR_LINE_COLUMN_INFO struPos; //接收卡位置 + WORD wRecvCardWidth; //接收卡宽度大小 + WORD wRecvCardHeigt; //接收卡高度大小 +}NET_DVR_LED_RECV_CARD_INFO, *LPNET_DVR_LED_RECV_CARD_INFO; + +typedef struct tagNET_DVR_LED_PORT_BACKUP +{ + BYTE byEnabled; //是否启用端口备份,0-否,1-是 + BYTE byPortMode; //端口模式,1-主口,2-备份口 + BYTE byRes1[2]; + DWORD dwPairPort; //配对端口号,当端口为主口时,此参数为备份口端口号,当端口为备份口时,此参数为主口端口号 + BYTE byRes2[16]; +}NET_DVR_LED_PORT_BACKUP, *LPNET_DVR_LED_PORT_BACKUP; + +typedef struct tagNET_DVR_LED_PORT_CFG +{ + DWORD dwSize; + BYTE byEnabled; //是否启用该端口,0-否,1-是 + BYTE byRes1[3]; + NET_DVR_LED_PORT_BACKUP struLedPortBackup; //端口备份参数 + DWORD dwRecvCardNum; //本端口连接的接收卡数 + NET_DVR_LED_RECV_CARD_INFO struRecvCard[MAX_SINGLE_PORT_RECVCARD_NUM]; //各接收卡的信息 + DWORD dwPortNo; //端口号,获取所有端口参数时有效 + BYTE byRes2[64]; +}NET_DVR_LED_PORT_CFG, *LPNET_DVR_LED_PORT_CFG; + +typedef struct tagNET_DVR_LED_DISPLAY_CFG +{ + DWORD dwSize; + NET_DVR_COLOR_TEMPERATURE_CFG struColorTemp; //色温参数 + NET_DVR_VIDEO_OUT_CFG struVoutCfg; //显示效果参数 + BYTE byRes[32]; +}NET_DVR_LED_DISPLAY_CFG, *LPNET_DVR_LED_DISPLAY_CFG; + +typedef struct tagNET_DVR_LED_TEST_SIGNAL_CFG +{ + DWORD dwSize; + BYTE byEnabled; //是否启用测试信号,0-不启用,1-启用 + BYTE bySignalType; //测试信号类型,1-彩条,2-波纹,3-格状彩条,4-方格,5-水平和垂直灰阶联合体,6-棋盘,0xff-自定义颜色 + BYTE byRes1[2]; + NET_DVR_RGB_COLOR struSignalColor; //测试信号颜色,测试信号类型为0xff时有效 + BYTE byRes[32]; +}NET_DVR_LED_TEST_SIGNAL_CFG, *LPNET_DVR_LED_TEST_SIGNAL_CFG; + +typedef struct tagNET_DVR_LED_NOSIGNAL_CFG +{ + DWORD dwSize; + BYTE byNoSignalMode; //无信号显示模式,1-黑屏,2-显示厂家LOGO,3-显示自定义图片 + BYTE byRes[63]; +}NET_DVR_LED_NOSIGNAL_CFG, *LPNET_DVR_LED_NOSIGNAL_CFG; + +typedef struct tagNET_DVR_LED_INPUT_CFG +{ + DWORD dwSize; + DWORD dwResolutionWidth; //输入分辨率宽,只读 + DWORD dwResolutionHeight; //输入分辨率高,只读 + DWORD dwRefreshRate; //输入信号刷新频率,只读 + NET_DVR_SCREEN_VGA_CFG struVgaCfg; //VGA信号调整参数,VGA输入时可调 + BYTE byRes[32]; +}NET_DVR_LED_INPUT_CFG, *LPNET_DVR_LED_INPUT_CFG; + +typedef struct tagNET_DVR_LED_RECV_CARD_CFG_COND +{ + DWORD dwSize; + DWORD dwOutputNo; //输出编号 + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + NET_DVR_LINE_COLUMN_INFO struPosEnd; //接收卡结束位置 + BYTE byRes[32]; +}NET_DVR_LED_RECV_CARD_CFG_COND, *LPNET_DVR_LED_RECV_CARD_CFG_COND; + +typedef struct tagNET_DVR_LED_GAMMA_CFG_COND +{ + DWORD dwSize; + DWORD dwOutputNo; //输出编号; + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + NET_DVR_LINE_COLUMN_INFO struPosEnd; //接收卡结束位置 + BYTE byGammaType; //Gamma表类型,Gamma表配置时有效,0-RGB混合Gamma表,1-红色Gamma表,2-绿色Gamma表,3-蓝色Gamma表 + BYTE byRes[31]; +}NET_DVR_LED_GAMMA_CFG_COND, *LPNET_DVR_LED_GAMMA_CFG_COND; + +typedef struct tagNET_DVR_LED_GAMMA_CFG +{ + DWORD dwSize; + WORD wGammaValue[MAX_GAMMA_X_VALUE]; //GAMMA表Y取值,每个元素取值0-65535,自定义模式时有效 + BYTE byGammaModel; //GAMMA表模式,0-自定义模式,1-夜模式1,2-夜模式2,3-正常模式,4-日照模式1,5-日照模式2 + BYTE byRes[127]; +}NET_DVR_LED_GAMMA_CFG, *LPNET_DVR_LED_GAMMA_CFG; + +typedef struct tagNET_DVR_LED_CLOCK_CFG +{ + DWORD dwDclkRate; //传输时钟dclk频率,实际值乘10,单位:MHz,实际值范围1.0-31.3 + DWORD dwGclkRate; //刷新时钟gclk频率,实际值乘10,单位:MHz,实际值范围1.0-31.3 + DWORD dwGclkCountNum; //300ns gclk计数值 + BYTE byDclkDutyRatio; //dclk时钟占空比,取值:25,50,75 + BYTE byDclkPhase; //dclk相位,取值:0,1,2,3 + BYTE byGclkNum; //刷新1行需要的有效gclk个数,0-255 + BYTE byRes[17]; +}NET_DVR_LED_CLOCK_CFG, *LPNET_DVR_LED_CLOCK_CFG; + +typedef struct tagNET_DVR_LED_RECV_CFG +{ + DWORD dwSize; + NET_DVR_LED_CLOCK_CFG struClockCfg; //时钟相关参数 + BYTE byGrayLevel; //灰度等级,取值13,14 + BYTE byRefreshRate; //刷新倍率,取值1-6 + BYTE byLineScanNum; //行扫数,0-255 + BYTE byRefreshCompleteGrayNum; //刷新完整灰阶数,0-255 + DWORD dwHBlank; //行消隐时间,单位:gclk时钟个数,取值1-65535 + DWORD dwAfterglowCtrl; //余晖控制结束时间,单位:gclk时钟个数,取值1-65535 + DWORD dwLineFeedTime; //换行时间,单位:gclk时钟个数,取值1-65535 + BYTE byRes[128]; +}NET_DVR_LED_RECV_CFG, *LPNET_DVR_LED_RECV_CFG; + +typedef struct tagNET_DVR_LED_REGISTOR_VALUE +{ + BYTE byChip1High; //芯片1高字节 + BYTE byChip1Low; //芯片1低字节 + BYTE byChip2High; //芯片2高字节 + BYTE byChip2Low; //芯片2低字节 + BYTE byChip3High; //芯片3高字节 + BYTE byChip3Low; //芯片3低字节 + BYTE byChip4High; //芯片4高字节 + BYTE byChip4Low; //芯片4低字节 + BYTE byChip5High; //芯片5高字节 + BYTE byChip5Low; //芯片5低字节 + BYTE byChip6High; //芯片6高字节 + BYTE byChip6Low; //芯片6低字节 + BYTE byRes[4]; +}NET_DVR_LED_REGISTOR_VALUE, *LPNET_DVR_LED_REGISTOR_VALUE; + +typedef struct tagNET_DVR_LED_RECV_REGISTOR +{ + BYTE byEliminateGhostShadowLevel; //下鬼影消除等级,0-5 + BYTE byEliminateShadowy; //第一扫偏暗消除等级,0-15 + BYTE byGrayEqualize1; //低灰偏色补偿1,0-3 + BYTE byGrayEqualize2; //低灰偏色补偿2,0-15 + BYTE byEnableGrayUniformity; //低灰均匀性提升是否开启,0-关,1-开 + BYTE byDisableHGrayStripes; //低灰横条纹消除是否开启,0-关,1-开 + BYTE byGhostShadowEnhancedMode1; //下鬼影消除增强模式1是否开启,0-关,1-开 + BYTE byGhostShadowEnhancedMode2; //下鬼影消除增强模式2是否开启,0-关,1-开 + BYTE byClearBadPoint; //去除坏点使能,0-非使能,1-使能 + BYTE byEnableSelfDefineRegistor; //是否启用自定义寄存器值,0-否,1-是 + BYTE byRes1[2]; + NET_DVR_LED_REGISTOR_VALUE struRegistorValue; //自定义寄存器参数 + BYTE byEnabledExGradientOptimition; //渐变过度优化开关,0-关闭,!0-开启 + BYTE byDummyGClockCycle; //Dummy GClock周期,开启渐变过度优化时有效,单位:个gclk + BYTE byDummyGClockHighTime; //Dummy GClock高电平时间,开启渐变过度优化时有效,单位:8ns + BYTE byFirstGClockExtendedTime; //第一个GClock展宽时间,开启渐变过度优化时有效,单位:8ns + BYTE byRes[28]; +}NET_DVR_LED_RECV_REGISTOR, *LPNET_DVR_LED_RECV_REGISTOR; + +typedef struct tagNET_DVR_LED_RECV_ADVANCED_CFG +{ + DWORD dwSize; + NET_DVR_LED_RECV_REGISTOR struFirstRegistor; //第一组接收卡高级参数,自定义寄存器值为红芯片寄存器值 + NET_DVR_LED_RECV_REGISTOR struSecondRegistor; //第二组接收卡高级参数,自定义寄存器值为绿芯片寄存器值 + NET_DVR_LED_RECV_REGISTOR struThirdRegistor; //第三组接收卡高级参数,自定义寄存器值为蓝芯片寄存器值 + BYTE byRes2[64]; +}NET_DVR_LED_RECV_ADVANCED_CFG,*LPNET_DVR_LED_RECV_ADVANCED_CFG; + +typedef struct tagNET_DVR_LED_CHECK_COND +{ + DWORD dwSize; + DWORD dwOutputNo; //输入编号 + NET_DVR_LINE_COLUMN_INFO struPosStart; //接收卡起始位置 + BYTE byStartPosType; //起始位置类型,0-使用接收卡起始位置,1-使用坐标位置 + BYTE byRes1[3]; + DWORD dwXCoordinate; /*矩形左上角起始点X坐标*/ + DWORD dwYCoordinate; /*矩形左上角Y坐标*/ + DWORD dwWidth; /*区域宽度*/ + DWORD dwHeight; /*区域高度*/ + BYTE byRes[8]; +}NET_DVR_LED_CHECK_COND, *LPNET_DVR_LED_CHECK_COND; + +//查询方式 +enum ADDR_QUERY_TYPE +{ + QUERYSVR_BY_COUNTRYID = 0, //按国家编号查询服务器地址 + QUERYSVR_BY_SERVERTYPE = 1, //保留 + QUERYDEV_BY_NICKNAME_DDNS = 2, //按昵称从hiDDNS上查询设备信息 + QUERYDEV_BY_SERIAL_DDNS = 3, //按序列号从hiDDNS上查询设备信息 + CHECKDEV_BY_NICKNAME_DDNS = 4,//按昵称从hiDDNS诊断设备信息 + CHECKDEV_BY_SERIAL_DDNS = 5, //按序列号从hiDDNS诊断设备信息 + QUERYDEV_BY_NICKNAME_IPSERVER = 6, //按昵称从IPServer上查询设备信息 + QUERYDEV_BY_SERIAL_IPSERVER = 7 //按昵称从IPServer上查询设备信息 +}; +#define CLIENT_VERSION_LEN 64 +//按国家编号查询的条件结构体 +typedef struct tagNET_DVR_QUERY_COUNTRYID_COND +{ + WORD wCountryID; //国家编号,取值详见附件一 + char szSvrAddr[MAX_DOMAIN_NAME];//服务器地址,表示去哪个服务器上查询目标服务器的信息 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息,例如:iVMS4500 V4.0.0.0 build20150112 + BYTE byRes[382]; +}NET_DVR_QUERY_COUNTRYID_COND,*LPNET_DVR_QUERY_COUNTRYID_COND; + +//按国家编号查询的返回结构体 +typedef struct tagNET_DVR_QUERY_COUNTRYID_RET +{ + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址(即设备注册服务器) + char szAlarmSvrAddr[MAX_DOMAIN_NAME];//报警服务器地址 + BYTE byRes[1024]; +}NET_DVR_QUERY_COUNTRYID_RET,*LPNET_DVR_QUERY_COUNTRYID_RET; + +//按服务器类型查询的条件结构体 +typedef struct tagNET_DVR_QUERY_SERVERTYPE_COND +{ + WORD wSvrType; //服务器类型, 6-手机推送服务器 + char szSvrAddr[MAX_DOMAIN_NAME];//服务器地址,表示去哪个服务器上查询目标服务器的信息 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息 + BYTE byRes[382]; +}NET_DVR_QUERY_SERVERTYPE_COND, *LPNET_DVR_QUERY_SERVERTYPE_COND; + +//按服务器类型查询的返回结构体 +typedef struct tagNET_DVR_QUERY_SERVERTYPE_RET +{ + char szSvrAddr[MAX_DOMAIN_NAME]; //服务器地址 + WORD wSvrPort; //服务器端口 + BYTE byRes[446]; +}NET_DVR_QUERY_SERVERTYPE_RET, *LPNET_DVR_QUERY_SERVERTYPE_RET; + +//从hiDDNS上查询或诊断的条件结构体 +typedef struct tagNET_DVR_QUERY_DDNS_COND +{ + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址 + char szDevNickName[MAX_DOMAIN_NAME]; //设备在解析服务器上的别名 + char szDevSerial[SERIALNO_LEN]; //设备序列号 + char szClientVersion[CLIENT_VERSION_LEN];//客户端版本信息,例如:iVMS4500 V4.0.0.0 build20150112 + BYTE byRes[272]; //保留 +}NET_DVR_QUERY_DDNS_COND,*LPNET_DVR_QUERY_DDNS_COND; + +//从hiDDNS上查询返回的结构体 +typedef struct tagNET_DVR_QUERY_DDNS_RET +{ + char szDevIP[SDK_MAX_IP_LEN]; //设备IP地址 + WORD wCmdPort; //控制端口(SDK连接端口) + WORD wHttpPort; //http端口 + BYTE byRes[460]; +}NET_DVR_QUERY_DDNS_RET,*LPNET_DVR_QUERY_DDNS_RET; + +//从hiDDNS上诊断返回的结构体 +typedef struct tagNET_DVR_CHECK_DDNS_RET +{ + BYTE byDevStatus; //设备状态,0-正常,1-找不到,2-设备不在线,3-设备不在当前区域 + BYTE byRes1; + NET_DVR_QUERY_DDNS_RET struQueryRet; //地址信息 + WORD wRegionID; //当前设备注册区域编号[1美国,2南美,3亚太,4中国,5欧洲,6其它] + BYTE byRes2[508]; +}NET_DVR_CHECK_DDNS_RET,*LPNET_DVR_CHECK_DDNS_RET; + +//从IPServer上查询的条件结构体 +typedef struct tagNET_DVR_QUERY_IPSERVER_COND +{ + char szResolveSvrAddr[MAX_DOMAIN_NAME];//解析服务器地址 + WORD wResolveSvrPort; //解析服务器端口 + char szDevNickName[MAX_DOMAIN_NAME]; //设备在解析服务器上的别名 + char szDevSerial[SERIALNO_LEN]; //设备序列号 + BYTE byRes[334]; //保留 +}NET_DVR_QUERY_IPSERVER_COND,*LPNET_DVR_QUERY_IPSERVER_COND; + +//从IPServer上查询返回的结构体 +typedef struct tagNET_DVR_QUERY_IPSERVER_RET +{ + char szDevIP[SDK_MAX_IP_LEN]; //设备IP地址 + WORD wCmdPort; //控制端口(SDK连接端口) + BYTE byRes[462]; +}NET_DVR_QUERY_IPSERVER_RET,*LPNET_DVR_QUERY_IPSERVER_RET; + +typedef struct tagNET_DVR_CURRENT_VALID_PORT +{ + DWORD dwSize; + WORD wHTTPPort; + BYTE byRes[122]; +}NET_DVR_CURRENT_VALID_PORT,*LPNET_DVR_CURRENT_VALID_PORT; + +typedef struct tagNET_DVR_AUDIO_CHANNEL +{ + DWORD dwChannelNum; //通道号 + BYTE byres[32]; //保留 +}NET_DVR_AUDIO_CHANNEL, *LPNET_DVR_AUDIO_CHANNEL; + +//码流加密条件结构 +typedef struct tagNET_DVR_STREAMENCRYPTION_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwChan; //预览通道号 + BYTE byRes[128]; +}NET_DVR_STREAMENCRYPTION_COND, *LPNET_DVR_STREAMENCRYPTION_COND; + +//码流加密信息结构 +typedef struct tagNET_DVR_STREAMENCRYPTION_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //启用码流加密,0~关闭,1~开启 + BYTE byRes[255]; +}NET_DVR_STREAMENCRYPTION_CFG, *LPNET_DVR_STREAMENCRYPTION_CFG; + +//校准的GPS经纬度参数 +typedef struct tagNET_DVR_REVISE_GPS_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byLatitudeType ;//纬度类型,0-北纬,1-南纬 + BYTE byLongitudeType ;// 经度类型,0-东度,1-西度 + BYTE byMode ;//模式 0-默认,1-自动,2-手动 + BYTE byRes; + NET_DVR_LLI_PARAM struLatitude; /*纬度*/ + NET_DVR_LLI_PARAM struLongitude; /*经度*/ + BYTE byRes1[300]; +}NET_DVR_REVISE_GPS_CFG, *LPNET_DVR_REVISE_GPS_CFG; + +typedef struct tagNET_DVR_PDC_RECOMMEND +{ + DWORD dwSize; + WORD wWidth;//推荐宽度值[0, 1000] + BYTE byRes[126]; +}NET_DVR_PDC_RECOMMEND,*LPNET_DVR_PDC_RECOMMEND; + +typedef struct tagNET_DVR_FLASHSTORAGE_REMOVE +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byPDCRemoveEnable;//清除客流数据使能 0-不清除,1-清除 + BYTE byRes[127]; +}NET_DVR_FLASHSTORAGE_REMOVE,*LPNET_DVR_FLASHSTORAGE_REMOVE; + +/********************************DS-TME4XX控制机开发 Begin****************************/ +typedef struct tagNET_DVR_PARKING_CARD +{ + DWORD dwSize; + DWORD dwChannel;//默认是1(后续兼容多通道设备) + char szCardNo[MAX_CARDNO_LEN/*48*/];//卡号 + BYTE byCardType;//卡片类型 0-临时卡,1-固定卡 + BYTE byCardStatus;//卡片状态 0-正常,1-挂失,2-注销 + BYTE byChargeRuleID;//收费规则ID + BYTE byDelete;//是否删除 0-不删除,1-删除 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struEndTime;//有效结束时间 + BYTE byRes[128]; +}NET_DVR_PARKING_CARD,*LPNET_DVR_PARKING_CARD; + +//出入口卡片信息上传 +typedef struct tagNET_DVR_GATE_CARDINFO +{ + DWORD dwSize; + NET_VCA_DEV_INFO struDevInfo; + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + char szCardNo[MAX_CARDNO_LEN/*48*/];//卡号 + char szPassVehicleID[MAX_VEHICLE_ID_LEN];//唯一标识 + char szInVehicleID[MAX_VEHICLE_ID_LEN];//出口时的入口唯一标识 + NET_DVR_TIME_V30 struSwipeTime;//刷卡时间 + NET_DVR_TIME_V30 struCardTime;//卡片存的时间,即入场时写入的时间,只对出口票箱有用,0表示无入场时间 + BYTE byLetPass;//出入口放行方式 0-不放行(当CardType == 纸票)需要收费,1-放行,2-中心收费放行 + BYTE byCardType;//卡类型 0-固定卡,1-临时卡,2-纸票 + BYTE byRes[126]; +}NET_DVR_GATE_CARDINFO, *LPNET_DVR_GATE_CARDINFO; + +//月台作业数据上传 +typedef struct _tagNET_LOADING_DOCK_OPERATEINFO_ +{ + DWORD dwSize; //结构长度 + BYTE byAbsTime[32]; //绝对时间点,yyyymmddhhmmssxxx,e.g.20090810235959999 最后三位为毫秒数 + BYTE byParkingNo[MAX_PARKNO_LEN/*16*/];//车位编号 + DWORD dwIndex; //车辆序号 + char sLicense[MAX_LICENSE_LEN/*16*/]; //车牌号码,注:中东车牌需求把小字也纳入车牌号码,小字和车牌号中间用空格分隔 + BYTE byCurrentWorkerNumber;//当前作业人数 + BYTE byCurrentGoodsLoadingRate;//当前货物装载率 0-空 1-少 2-中 3-多 4-满 + BYTE byDoorsStatus;//车门状态 0-车门关闭 1-车门开启 + BYTE byRes1; //保留字节 + DWORD dwBackPicDataLength;//背景图片长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64)) //win64及linux64下指针为8字节 + BYTE *pBackPicDataBuffer; //背景图片数据指针 +#else + BYTE* pBackPicDataBuffer; // 背景图片数据指针 + BYTE byRes2[4]; +#endif + DWORD dwChannel; //通道号,0-不支持(存在老的设备不支持通道号返回) + BYTE byRes[508]; +}NET_LOADING_DOCK_OPERATEINFO, *LPNET_LOADING_DOCK_OPERATEINFO; + +//出入口付费信息上传(COMM_GATE_CHARGEINFO_UPLOAD) +typedef struct tagNET_DVR_GATE_CHARGEINFO +{ + DWORD dwSize; + NET_VCA_DEV_INFO struDevInfo; + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + char sLicense[MAX_LICENSE_LEN]; //车牌 + char szCardNo[48]; + NET_DVR_TIME_V30 struEntranceTime; + NET_DVR_TIME_V30 struDepartureTime; + char szDepartureID[32]; //出场唯一过车标示 + char szEntranceID[32]; //入场唯一过车标示 + DWORD dwTotalCost; //实际收费金额*100 + char szOperateName[32]; //脱机下为"offline" + BYTE byChargeRuleId; //收费规则centerId + BYTE byVehicleType;//车辆类型,0-其他车辆,1-小型车,2-大型车 + BYTE byRes[127];//预留 +}NET_DVR_GATE_CHARGEINFO,*LPNET_DVR_GATE_CHARGEINFO; + +//停车场停车卡控制结构体 +typedef struct tagNET_DVR_PARKING_CARD_CTRL_PARAM +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byCardType;//卡片类型 0-临时卡 + BYTE byDeleteALL;//是否全部删除 0-不删除,1-删除 + BYTE byRes[62]; +}NET_DVR_PARKING_CARD_CTRL_PARAM,*LPNET_DVR_PARKING_CARD_CTRL_PARAM; + + +//TME车辆抓图上传 +typedef struct tagNET_DVR_TME_VEHICLE_RESULT_ +{ + DWORD dwSize; + WORD wLaneid; //车道号1~32(索引车道号,可以跳跃) + BYTE byCamLaneId; //对应相机车道号1~16(相机配置的车道号,可以跳跃,可以相同) + BYTE byRes1; //保留 + DWORD dwChanIndex; //通道号 + NET_DVR_PLATE_INFO struPlateInfo; //车牌信息结构 + NET_DVR_VEHICLE_INFO struVehicleInfo; //车辆信息 + BYTE byMonitoringSiteID[48]; //显示点编号 + BYTE byDeviceID[48]; //设备编号 + BYTE byDir; //显示方向,0-其它 1 入场,2 出场 + BYTE byRes2; + WORD wBackList; //标记为是否报警数据 0 表示为正常过车数据 1 表示禁止名单 + DWORD dwPicNum; //图片数量(与picGroupNum不同,代表本条信息附带的图片数量,图片信息由struVehicleInfoEx定义 + NET_ITS_PICTURE_INFO struPicInfo[4]; //图片信息,暂定最多4张图 + BYTE byPassVehicleID[32]; //车辆唯一ID + BYTE byCardNo[48]; // 卡号 + BYTE bySwipeTime[32];//增加刷卡时间 时间格式为yyyymmddhh24missfff + DWORD dwCharge; //收费金额 (分) + BYTE byHistory; //是否是历史数据 0-否 1-是 + BYTE byLetPass; //是否已放行,0-未放行,1-放行 2-未知 + BYTE byRes3[186]; +} NET_DVR_TME_VEHICLE_RESULT, *LPNET_DVR_TME_VEHICLE_RESULT; + +//地磁管理器注册消息 +typedef struct tagNET_DVR_MVMRegisterInfo_ +{ + DWORD dwSize; //结构体大小 + char sDetectorID[16]; //检测器ID + char sManagerID[16]; //管理器ID + char sSim[20]; //卡号信息 + DWORD dwLocalIP; //本地IPv4地址,例如dwLocalIP=0x01020304,则IP地址为1.2.3.4 + DWORD dwLocalIPMask; //本地网络子网掩码,格式同dwLocalIP + DWORD dwLocalGateway; //本地网关,格式同dwLocalIP + DWORD dwDstIP; //目标IP,格式同dwLocalIP + BYTE byMACAddr[6]; //本地mac地址 + WORD wLocalPort; //本地端口 + WORD wFirmwareYear; //软件版本年份 + BYTE byFirmwareMonth; //软件版本月份 + BYTE byFirmwareDay; //软件版本日 + BYTE byMajorVersion; //版本小数点前 + BYTE byMinorVersion; //版本小数点后 + BYTE byRes[170]; +}NET_DVR_MVMRegisterInfo, *LPNET_DVR_MVMRegisterInfo; + +//地磁状态信息 +typedef struct tagNET_DVR_SingleMagneticStatus_ +{ + DWORD dwSize; //结构体大小 + char sDetectorID[16]; //检测器ID + char sManagerID[16]; //管理器ID + char sParkNum[16]; //车位编号 + NET_DVR_TIME_V30 struDetectorTime; //检测时间 + DWORD dwRssi; //接收信号强度,实际值范围-137~0dbm,此处没有符号,为实际值的绝对值 + BYTE byParkinglotState; //车位状态,0-无车,1-有车 + BYTE byBatteryState; //电池状态,0-100%,1-75%,2-50%,3-25%,4-小于5% + BYTE byDeviceState; //设备状态 0-正常,1-故障 + BYTE byCMD; //0-车位变化报警,1-检测器心跳报警 + BYTE byRes[184]; +}NET_DVR_SingleMagneticStatus, *LPNET_DVR_SingleMagneticStatus; + +//车辆信息同步 +typedef struct tagNET_DVR_PARKING_VEHICLE +{ + DWORD dwSize; + DWORD dwChannel;//默认是1(后续兼容多通道设备) + char szLicense[MAX_LICENSE_LEN/*16*/];//车牌号码 + char szRelateCardNo[MAX_CARDNO_LEN/*48*/];//关联卡号 + NET_DVR_TIME_V30 struStartTime;//有效开始时间 + NET_DVR_TIME_V30 struEndTime;//有效结束时间 + BYTE byVehicleType;//车辆类型:0-其他车辆,1-小型车,2-大型车 + BYTE byPlateColor;//车牌颜色,参考 VCA_PLATE_COLOR + BYTE byRes[126]; +}NET_DVR_PARKING_VEHICLE,*LPNET_DVR_PARKING_VEHICLE; + +//缴费金额信息 +typedef struct tagNET_DVR_CHARGEACCOUNT_CFG +{ + DWORD dwSize;//结构体大小 + float fAccount;//实际收费金额 + BYTE byRes[128]; +}NET_DVR_CHARGEACCOUNT_CFG,*LPNET_DVR_CHARGEACCOUNT_CFG; + +//停车场票箱从属设备多角度参数配置 +typedef struct tagNET_DVR_PXMULTICTRL_CFG +{ + DWORD dwSize;//结构体大小 + DWORD dwMultiChansWaitTime;//多角度抓拍匹配时间(1~300s) + BYTE byMultiChansCapEnabled;//是否启用多角度抓拍 0-否,1-是 + BYTE byRes[127]; +}NET_DVR_PXMULTICTRL_CFG,*LPNET_DVR_PXMULTICTRL_CFG; + +//停车场票箱脱机下参数配置 +typedef struct tagNET_DVR_PXOFFLINE_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled;//是否启用票箱脱机模式:0-不启用 1-启用 + BYTE byChargeEnabled;//是否脱机收费 0-否,1-是 + BYTE byAlarmEnabled;//是否启用脱机报警 0-否,1-是 + BYTE byRecordSource;//记录产生依据 0-牌识 1-读卡 + DWORD dwTimeWait;//票箱进入脱机模式前的等待时间(1-300秒) + /** + realeaseMode&(0x1<<0) 固定车放行 + realeaseMode&(0x1<<1) 固定卡放行 + realeaseMode&(0x1<<2) 临时车放行 + realeaseMode&(0x1<<3) 临时卡放行 + realeaseMode&(0x1<<4) 无车牌放行 + realeaseMode&(0x1<<5) 固定车若免费则自动放行 + realeaseMode&(0x1<<6) 临时车若免费则自动放行 + */ + DWORD dwRealeaseMode; //放行方式,按位表示 + BYTE byVehCardmatch;//车卡一致 0-否,1-是 + BYTE bySingleInSingleOut;//单进单出 0-否,1-是 + BYTE byRes[126]; +}NET_DVR_PXOFFLINE_CFG,*LPNET_DVR_PXOFFLINE_CFG; + +typedef struct tagNET_DVR_PARKINGSAPCE_CFG +{ + DWORD dwSize;//结构体大小 + DWORD dwTotalParkingLot;//总停车位数 + DWORD dwCurrParkingLot;//当前剩余停车位数 + BYTE byRes[128]; +}NET_DVR_PARKINGSAPCE_CFG,*LPNET_DVR_PARKINGSAPCE_CFG; + +typedef struct tagNET_DVR_PAPERCHARGEINFO_CFG +{ + DWORD dwSize;//结构体大小 + char szBarCode[LEN_16];//条形码(16位字符串) + char szLicense[MAX_LICENSE_LEN]; //车牌号码 + char szVehicleInTime[LEN_32];//入场时间(32位字符串 YYYY-MM-DD HH:MM:SS) + char szPaymentTime[LEN_32];//缴费时间(32位字符串 YYYY-MM-DD HH:MM:SS) + float fPaymentAmount;//缴费金额 + DWORD dwPaymentOutFailureTime;//缴费出场失效时间(DWORD) + BYTE byVehicleOutEnabled; //是否出场: 0- 否,1- 是 + BYTE byRes[128]; +}NET_DVR_PAPERCHARGEINFO_CFG,*LPNET_DVR_PAPERCHARGEINFO_CFG; + +//停车场票箱参数 +typedef struct tagNET_DVR_ILLEGALCARDFILTERING_CFG +{ + DWORD dwSize;//结构体大小 + char sLEDDefaultInfo[MAX_LED_INFO_LEN/*512*/]; // LED默认显示内容 + BYTE byillegalCardFilteringEnabled;//启用非法卡过滤,0~不启用,1~启用 + BYTE bySendCardSensingCoilEnabled;//发卡机是否关联地感线圈 + BYTE byWiegendSensingCoilEnabled;//远距离卡是否关联地感线圈 + BYTE byGateSwitchEnabled; //是否有道闸开关信息 + BYTE byVerifyKeyWriteCardEnabled;//是否验证密钥和写卡 + BYTE byNoplateTakeCardEnabled;// 是否启用无车牌取凭据放行 + BYTE byRes[126]; +}NET_DVR_ILLEGALCARDFILTERING_CFG,*LPNET_DVR_ILLEGALCARDFILTERING_CFG; + + +//停车场出入口车卡收费规则规则条件结构 +typedef struct tagNET_DVR_TME_CHARGERULE_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + char szCardNo[32];//卡号 + BYTE byRes[128]; +}NET_DVR_TME_CHARGERULE_COND, *LPNET_DVR_TME_CHARGERULE_COND; + +//LED屏幕显示参数 +typedef struct tagNET_DVR_LEDDISPLAY_CFG +{ + DWORD dwSize;//结构体大小 + char sDisplayInfo[MAX_LED_INFO_LEN/*512*/]; // LED显示内容 + BYTE byDisplayMode;//显示方式:0~左移,1~右移,2~立即显示 + BYTE bySpeedType;//速度类型:0~快,1~中,2~慢 + BYTE byShowPlateEnable;//显示车牌使能,0~关闭,1~启用 + BYTE byRes1; + DWORD dwShowTime;//显示时长,1~60秒 + BYTE byRes[128]; +}NET_DVR_LEDDISPLAY_CFG,*LPNET_DVR_LEDDISPLAY_CFG; + +//语音播报控制参数 +typedef struct tagNET_DVR_VOICEBROADCAST_CFG +{ + DWORD dwSize;//结构体大小 + char sInfo[MAX_VOICE_INFO_LEN/*128*/]; //语音播报内容 + BYTE byBroadcastNum;// 语音播报次数, 1~10次 + BYTE byIntervalTime;// 语音播报间隔时间,1~5s + BYTE byRes[126]; +}NET_DVR_VOICEBROADCAST_CFG,*LPNET_DVR_VOICEBROADCAST_CFG; + +//纸票打印格式参数 +typedef struct tagNET_DVR_PAPERPRINTFORMAT_CFG +{ + DWORD dwSize;//结构体大小 + char sTitleInfo[MAX_LITLE_INFO_LEN/*64*/]; //纸票标题内容 + char sCustomInfo[MAX_CUSTOM_INFO_LEN/*64*/]; //纸票自定义信息内容 + char sPhoneNum[MAX_PHONE_NUM_LEN/*16*/];//联系电话 + BYTE byPrintInTimeEnabled; //是否打印入场时间 + BYTE byRes[127]; +}NET_DVR_PAPERPRINTFORMAT_CFG,*LPNET_DVR_PAPERPRINTFORMAT_CFG; + + +//智能锁闸时间段 +typedef struct tagNET_DVR_LOCKGATE_TIME_CFG +{ + char sBeginTime[LEN_32];//开始时间(32位字符串 HH:MM:SS) + char sEndTime[LEN_32];//结束时间(32位字符串 HH:MM:SS) + BYTE byRes[64]; +}NET_DVR_LOCKGATE_TIME_CFG,*LPNET_DVR_LOCKGATE_TIME_CFG; + +//智能锁闸参数 +typedef struct tagNET_DVR_LOCKGATE_CFG +{ + DWORD dwSize;//结构体大小 + NET_DVR_LOCKGATE_TIME_CFG struTime[LOCKGATE_TIME_NUM]; //智能锁闸时间段 + BYTE byRes[128]; +}NET_DVR_LOCKGATE_CFG,*LPNET_DVR_LOCKGATE_CFG; + +//数据同步状态 +typedef struct NET_DVR_PARKING_DATASTATE_INFO +{ + DWORD dwSize; + char szAppSerialNum [MAX_APP_SERIALNUM_LEN/*32*/];//应用序列号, 代表当前所连接的应用 + DWORD dwParkingNum; //当前停车场号 + DWORD dwUpdataSerialNum; //更新序列号; 代表最后更新的序列号。 + BYTE byRes[256]; +} NET_DVR_PARKING_DATASTATE_INFO,*LPNET_DVR_PARKING_DATASTATE_INFO; + +//联动EPTZ参数 +typedef struct tagNET_DVR_EPTZ_CFG +{ + DWORD dwSize; + BYTE byEnableEPTZ; //是否启用EPTZ, 0-不启用,1 -启用 + BYTE byRes[503]; +}NET_DVR_EPTZ_CFG, *LPNET_DVR_EPTZ_CFG; + +//中心点参数 +typedef struct tagNET_DVR_CENTER_POINT_CFG +{ + DWORD dwSize; + NET_VCA_POLYGON struRegion;//区域范围 + BYTE byRes[512]; +}NET_DVR_CENTER_POINT_CFG, *LPNET_DVR_CENTER_POINT_CFG; + +/********************************DS-TME4XX控制机开发 End****************************/ + +/********************************IPC FF车牌 Start****************************/ +typedef struct tagNET_DVR_FTPUPLOAD_PARAM +{ + char szRuleTypeItem[MAX_SINGLE_FTPPICNAME_LEN/*20*/]; + char szCameraName[MAX_CAMNAME_LEN/*32*/]; + BYTE byRes[64]; +}NET_DVR_FTPUPLOAD_PARAM, *LPNET_DVR_FTPUPLOAD_PARAM; + +//char szRuleTypeItem[MAX_SINGLE_FTPPICNAME_LEN/*20*/]; +//里面内容是固定字符串 capture_time,plate_No,alarm_type,camera_name +//数组下标表示先后顺序 + +//char szCameraName[MAX_CAMNAME_LEN/*32*/]; +//依赖于szRuleTypeItem中字段表示内容为 camera_name 的情况 + +typedef struct tagNET_DVR_FTPUPLOADCFG +{ + DWORD dwSize; + BYTE byEventType; //事件类型,0-默认,1-车辆检测 + BYTE byMode; //图片命名模式,0-默认,1-自定义 + BYTE byRes[62]; + NET_DVR_FTPUPLOAD_PARAM struCustomVehicle[MAX_FTPNAME_NUM/*12*/]; + BYTE byRes1[1024] ; +}NET_DVR_FTPUPLOADCFG, *LPNET_DVR_FTPUPLOADCFG; + +/********************************IPC FF车牌 End****************************/ + +//信息发布终端升级 +typedef struct tagNET_DVR_PUBLISH_UPGRADE_COND +{ + DWORD dwSize; + DWORD dwUpgradeType; //升级类型,1-按终端升级,2-按终端组升级 + DWORD dwTerminalNum; //升级的终端格式,按终端升级时有效 + DWORD *pTerminalNo; //需要升级的终端号,按终端升级时有效 + DWORD dwGroupNo; //终端组号,按终端组升级时有效 + BYTE byRes[32]; +}NET_DVR_PUBLISH_UPGRADE_COND, *LPNET_DVR_PUBLISH_UPGRADE_COND; +//WEP加密密钥 +typedef struct tagNET_DVR_WEP_KEY_CFG +{ + char csWEPKey[WEP_KEY_MAX_SIZE/*32*/];//加密密钥, + BYTE byRes[64]; +}NET_DVR_WEP_KEY_CFG, *LPNET_DVR_WEP_KEY_CFG; + +typedef struct tagNET_DVR_SUB_UPGRADE_PROGRESS +{ + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端升级进度,0-100,101表示此终端升级出现异常,,102-终端解压失败,103-升级包版本不匹配,104-非升级文件,105-非法签名升级包 +}NET_DVR_SUB_UPGRADE_PROGRESS, *LPNET_DVR_SUB_UPGRADE_PROGRESS; + +typedef struct tagNET_DVR_UPGRADE_PROGRESS_RESULT +{ + DWORD dwSize; + DWORD dwMainProgress; //主进度,0-100 + DWORD dwSubProgressNum; //子进度个数 + LPNET_DVR_SUB_UPGRADE_PROGRESS lpStruSubProgress; //各终端升级的子进度,dwSubProgressNum个NET_DVR_SUB_UPGRADE_PROGRESS内容 + BYTE byRes[32]; +}NET_DVR_UPGRADE_PROGRESS_RESULT, *LPNET_DVR_UPGRADE_PROGRESS_RESULT; + +//信息发布服务器日程发布进度 +typedef struct tagNET_DVR_SCHEDULE_PROGRESS_COND +{ + DWORD dwSize; + DWORD dwScheduleNo; //日程号 + BYTE byProgressType; //获取的进度类型,1-按组获取进度,2-按终端获取进度,3-按组织获取进度 + BYTE byRes1[3]; + DWORD dwGroupNo; //终端组号或组织,进度类型为1,3时有效 + DWORD dwTerminalNo; //终端号,进度类型为2时有效 + BYTE byRes2[32]; +}NET_DVR_SCHEDULE_PROGRESS_COND, *LPNET_DVR_SCHEDULE_PROGRESS_COND; + +typedef struct tagNET_DVR_SUB_SCHEDULE_PROGRESS +{ + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端日程发布进度,0-100,101表示此终端日程发布出现异常,102表示此终端存储空间不足,103-终端不在线,104-终端拒绝,105-服务器和终端网络中断 +}NET_DVR_SUB_SCHEDULE_PROGRESS, *LPNET_DVR_SUB_SCHEDULE_PROGRESS; + +typedef struct tagNET_DVR_SCHEDULE_PROGRESS_RESULT +{ + DWORD dwSize; + DWORD dwMainProgress; //主进度,0-100,按组获取进度时为整组日程发布进度,按终端获取进度时为单个终端日程发布进度 + DWORD dwSubProgressNum; //子进度个数,按组获取时有效,表示组下各终端进度个数 + LPNET_DVR_SUB_SCHEDULE_PROGRESS lpStruSubProgress; //各终端日程发布的子进度,按组获取时有效,dwSubProgressNum个NET_DVR_SUB_SCHEDULE_PROGRESS内容 + BYTE byRes[32]; +}NET_DVR_SCHEDULE_PROGRESS_RESULT, *LPNET_DVR_SCHEDULE_PROGRESS_RESULT; + +//信息发布插播进度 +typedef struct tagNET_DVR_INSERTPLAY_PROGRESS_COND +{ + DWORD dwSize; + BYTE byInsertType; //插播类型,1-素材,2-节目 + BYTE byRes3[3]; + DWORD dwInsertNo; //如果插播类型是素材,为素材编号,如果插播类型是节目,为节目编号 + BYTE byProgressType; //获取的进度类型,1-按组获取进度,2-按终端获取进度 + BYTE byRes1[3]; + DWORD dwGroupNo; //终端组号,进度类型为1时有效 + DWORD dwTerminalNo; //终端号,进度类型为2时有效 + BYTE byRes2[32]; +}NET_DVR_INSERTPLAY_PROGRESS_COND, *LPNET_DVR_INSERTPLAY_PROGRESS_COND; + +typedef struct tagNET_DVR_SUB_INSERTPLAY_PROGRESS +{ + DWORD dwTerminalNo; //终端号 + DWORD dwProgress; //终端插播进度,0-100,101表示此终端插播出现异常,102表示此终端存储空间不足,103表示取消插播,104插播素材被替换 +}NET_DVR_SUB_INSERTPLAY_PROGRESS, *LPNET_DVR_SUB_INSERTPLAY_PROGRESS; + +typedef struct tagNET_DVR_INSERTPLAY_PROGRESS_RESULT +{ + DWORD dwSize; + DWORD dwMainProgress; //主进度,0-100,按组获取进度时为整组插播进度,按终端获取进度时为单个终端插播进度 + DWORD dwSubProgressNum; //子进度个数,按组获取时有效,表示组下各终端进度个数 + LPNET_DVR_SUB_INSERTPLAY_PROGRESS lpStruSubProgress; //各终端插播的子进度,按组获取时有效,dwSubProgressNum个NET_DVR_SUB_INSERTPLAY_PROGRESS内容 + BYTE byRes[32]; +}NET_DVR_INSERTPLAY_PROGRESS_RESULT, *LPNET_DVR_INSERTPLAY_PROGRESS_RESULT; + + + + +//WEP参数 +typedef struct tagNET_DVR_WEP_CFG +{ + BYTE byAuthenticationType;//身份验证类型;0~开启验证;1~共享密钥;2~自动验证 + BYTE byDefaultTransmitKeyIndex;//默认传输密钥个数,1~4个。对应到struEncryptionKeyCfg加密密钥的个数。 + /* + 当为64位密钥时,ASCII码密钥字符长度为5个。 + 当为128位密钥时,ASCII码密钥字符长度为13个。 + */ + BYTE byWepKeyLenType;//密钥类型;0~ 64位密钥,1~ 128位密钥。 + BYTE byKeyType;// 密钥类型;0~ ASCII码,1~ 16进制。 + NET_DVR_WEP_KEY_CFG struWEPKeyCfg[WEP_KEY_MAX_NUM/*4*/];// WEP加密密钥,最大支持4个。 + BYTE byRes[128]; +}NET_DVR_WEP_CFG, *LPNET_DVR_WEP_CFG; + +//WPA参数 +typedef struct tagNET_DVR_WPA_CFG +{ + BYTE byAlgorithmType; //算法类型;0~TKIP, 1~AES, 2~TKIP/AES + BYTE byWPAKeyLen;// WPA共享密钥长度,区间为8~63,对应到csSharedKey参数的字符长度 + BYTE byDefaultPassword;//是否启用默认WPA密钥 + BYTE byRes1; + char csSharedKey[WPA_KEY_MAX_SIZE/*64*/];//WPA共享密钥,为8-63个ASCII字符 + BYTE byRes[128]; +}NET_DVR_WPA_CFG, *LPNET_DVR_WPA_CFG; + + +typedef struct tagNET_DVR_WIRELESS_SECURITY_CFG +{ + BYTE bySecurityMode; //安全模式;0~禁用,1~WEP,2~WPA-personal, 3~WPA2-personal + NET_DVR_WEP_CFG struWEPCfg; //当安全模式选择为WEP时生效。 + NET_DVR_WPA_CFG struWPACfg; //当安全模式选择为WPA-personal、WPA2-personal时生效。 + BYTE byRes[256]; +} NET_DVR_WIRELESS_SECURITY_CFG,*LPNET_DVR_WIRELESS_SECURITY_CFG; + +//wifi热点参数配置(完整版) +typedef struct tagNET_DVR_WIRELESSSERVER_FULLVERSION_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byWifiAPEnabled; //是否启用无线AP:0-否,1- 是 + BYTE byBroadcastEnabled; // 是否启用广播,0-否,1-是 + BYTE byWlanShareEnabled; //是否启用共享,0-否,1-是 + BYTE byDHCPEnabled; //是否启用DHCP,0-否,1-是 + BYTE bySSID[IW_ESSID_MAX_SIZE]; //SSID + BYTE byRes1[11]; + BYTE byIPType; //IP地址类型,0-IPv4,1-IPv6 + NET_DVR_IPADDR struIPAddr; //IP地址 + NET_DVR_IPADDR struIPMask; //掩码地址 + NET_DVR_IPADDR struGatewayIPMask; //网关地址 + NET_DVR_IPADDR struStartIPAddrPool; //IP段起始地址 + NET_DVR_IPADDR struEndIPAddrPool; // IP段结束地址 + NET_DVR_IPADDR struDNSServerIpAddr[MAX_DNS_SERVER_NUM]; //DNS地址 + NET_DVR_WIRELESS_SECURITY_CFG struWirelessSecurityCfg;//无线安全加密参数 + BYTE byRes[256]; +}NET_DVR_WIRELESSSERVER_FULLVERSION_CFG, *LPNET_DVR_WIRELESSSERVER_FULLVERSION_CFG; + +typedef struct tagNET_DVR_OPTICAL_DEV_CHAN_INFO +{ + DWORD dwChannel; //通道号,0为无效 + BYTE byChannelName[NAME_LEN]; + BYTE bySignal; //是否有信号,0-无,1-有,只读 + BYTE bySignalType; //信号源类型,1-标清,2-高清,有信号时有效,只读 + BYTE byRes[10]; +}NET_DVR_OPTICAL_DEV_CHAN_INFO, *LPNET_DVR_OPTICAL_DEV_CHAN_INFO; + +typedef struct tagNET_DVR_OPTICAL_DEV_NODE +{ + BYTE byValid; //是否有效,0-无效,1-有效 + BYTE byRes1[3]; + DWORD dwDevNo; //光端机号 + BYTE byDevName[NAME_LEN]; //节点光端机名称 + BYTE byDevID[MAX_ID_LEN]; //光端机物理ID,设备唯一标识,只读 + NET_DVR_OPTICAL_DEV_CHAN_INFO struChannel[MAX_CHANNUM]; + BYTE byRes2[32]; +}NET_DVR_OPTICAL_DEV_NODE, *LPNET_DVR_OPTICAL_DEV_NODE; + +#define MAX_OPTICAL_DEV_NODE 32 //最多节点光端机数 + +typedef struct tagNET_DVR_OPTICAL_PORT_INFO +{ + DWORD dwSize; + BYTE byValid; //是否有信号接入,0-无,1-有,只读 + BYTE byLinkType; //链路类型,1-环网,2-链网,只读 + BYTE byPortWorkMode; //端口工作模式,0-无效,1-主口,2-辅口,当链路类型为环网时有效,只读 + BYTE byRes1[1]; + DWORD dwPairPort; //配对光口号,链路类型为环网时有效,主口时此参数为辅口号,辅口时,此参数为主口号 + NET_DVR_OPTICAL_DEV_NODE struDevInfo[MAX_OPTICAL_DEV_NODE]; //节点光端机设备信息 + BYTE byRes2[32]; +}NET_DVR_OPTICAL_PORT_INFO, *LPNET_DVR_OPTICAL_PORT_INFO; + +typedef struct tagNET_DVR_OPTICAL_CHAN_RELATE_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否关联光端机输入,0-否,非0-是 + BYTE byRes1[3]; + DWORD dwDevNo; //光端机号 + DWORD dwOpticalPort; //光口号 + BYTE byDevID[MAX_ID_LEN]; //光端机物理ID + DWORD dwInputChanNo; //光端机输入通道号 + BYTE byRes2[64]; +}NET_DVR_OPTICAL_CHAN_RELATE_CFG, *LPNET_DVR_OPTICAL_CHAN_RELATE_CFG; + +typedef struct tagNET_DVR_START_FILE_TO_CLOUD_COND +{ + DWORD dwSize; + BYTE aCameraID[MAX_CAMERAID_LEN]; //编码器ID + DWORD dwPoolID; //存储池ID + DWORD dwRepPoolID; //冗余池ID + WORD wReplication; //冗余份数 + BYTE byRes [178]; +}NET_DVR_START_FILE_TO_CLOUD_COND,*LPNET_DVR_START_FILE_TO_CLOUD_COND; + +typedef struct tagNET_DVR_START_PICTURE_FROM_CLOUD_COND +{ + DWORD dwSize; + BYTE aCameraID[MAX_CAMERAID_LEN]; //编码器ID + NET_DVR_TIME_V30 struBeginTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + DWORD dwPicType; //图片类型,按位表示 + //bit0-JPG + //bit1-BMP + //bit2-PNG + BYTE byRes1[3]; + BYTE byZoomType; //0-不缩放,1-按比例,2-按大小,3-按分辨率 + union + { + BYTE uLen[32]; + struct + { + BYTE byScale; //1~99 + }struScale; + struct + { + BYTE byQuality; //1~99 + }struQuality; + struct + { + DWORD dwWidth; + DWORD dwHeight; + }struResolution; //目标分辨率 + }uZoomParam; + DOWNLOAD_DATA_CB fnDownloadFileCallBack; //数据回调函数 + void* pUser; //用户数据指针 + BYTE byRes [372]; +}NET_DVR_START_PICTURE_FROM_CLOUD_COND,*LPNET_DVR_START_PICTURE_FROM_CLOUD_COND; + +typedef struct tagNET_DVR_START_PICTURE_FROM_CLOUD_RET +{ + DWORD dwSize; + DWORD dwFileCount; //文件数量 + BYTE byRes[120]; +}NET_DVR_START_PICTURE_FROM_CLOUD_RET,*LPNET_DVR_START_PICTURE_FROM_CLOUD_RET; + +typedef struct +{ + DWORD dwSize; + NET_DVR_TIME_V30 struTime; //图片时间 + DWORD dwPicLen; //图片长度 + BYTE byPicType; //图片格式,1-jpg,2-bmp,3-png + BYTE byRes[107]; +}NET_DVR_PICTURE_FROM_CLOUD_RET,*LPNET_DVR_PICTURE_FROM_CLOUD_RET; + +typedef struct tagNET_DVR_ACS_EXTERNAL_DEV_CFG +{ + DWORD dwSize; + BYTE byIDCardUpMode; //身份证信息上报,0:上传18位身份证号;1:上传全部信息 + BYTE byRes1; + BYTE byCardVerifyMode; //刷卡认证模式,0:远程中心认证;1:客户端平台认证;2:刷卡开门 + BYTE byACSDevType; //设备型号,1:身份证读卡器,2:IC读卡器,3:二维码读卡器,4:指纹读卡器,5:字符屏+二维码读卡器,6:收卡器,7:字符屏,8:指纹头,9:语音模块;10:人证设备 + BYTE byDoorMode; //门出入类型,0:进门,1:出门; + BYTE byRes2; + WORD wDevDetailType; //外设的具体设备型号,0-iDR210,1-IDM10,2-私有身份证阅读器 + BYTE byRes[300]; +}NET_DVR_ACS_EXTERNAL_DEV_CFG, *LPNET_DVR_ACS_EXTERNAL_DEV_CFG; + +typedef struct tagNET_DVR_PERSONNEL_CHANNEL_CFG +{ + DWORD dwSize; + BYTE byInMode; //进门模式,0受控;1禁止;2自由; + BYTE byOutMode; //出门模式,0受控;1禁止;2自由; + BYTE byWorkMode; //工作模式,0紧急;1维护;2常闭;3常开; + BYTE byRes[301]; +}NET_DVR_PERSONNEL_CHANNEL_CFG, *LPNET_DVR_PERSONNEL_CHANNEL_CFG; + +#define MAX_ID_NUM_LEN 32 //最大身份证号长度 +#define MAX_ID_NAME_LEN 128 //最大姓名长度 +#define MAX_ID_ADDR_LEN 280 //最大住址长度 +#define MAX_ID_ISSUING_AUTHORITY_LEN 128 //最大签发机关长度 + +//身份证信息 +typedef struct tagNET_DVR_ID_CARD_INFO +{ + DWORD dwSize; //结构长度 + BYTE byName[MAX_ID_NAME_LEN]; //姓名 + NET_DVR_DATE struBirth; //出生日期 + BYTE byAddr[MAX_ID_ADDR_LEN]; //住址 + BYTE byIDNum[MAX_ID_NUM_LEN]; //身份证号码 + BYTE byIssuingAuthority[MAX_ID_ISSUING_AUTHORITY_LEN]; //签发机关 + NET_DVR_DATE struStartDate; //有效开始日期 + NET_DVR_DATE struEndDate; //有效截止日期 + BYTE byTermOfValidity; //是否长期有效, 0-否,1-是(有效截止日期无效) + BYTE bySex; //性别,1-男,2-女 + BYTE byNation; + BYTE byRes[101]; +}NET_DVR_ID_CARD_INFO, *LPNET_DVR_ID_CARD_INFO; + +//身份证信息报警 +typedef struct tagNET_DVR_ID_CARD_INFO_ALARM +{ + DWORD dwSize; //结构长度 + NET_DVR_ID_CARD_INFO struIDCardCfg ;//身份证信息 + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + DWORD dwDoorNo; //门编号,为0无效 + DWORD dwPicDataLen; //图片数据大小,不为0是表示后面带数据 + char *pPicData; + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byDeviceNo; // 设备编号,为0时无效(有效范围1-255) + BYTE byMask; //是否带口罩:0-保留,1-未知,2-不戴口罩,3-戴口罩 + BYTE byCurrentEvent; //是否为实时事件:0-无效,1-是(实时事件),2-否(离线事件) + DWORD dwFingerPrintDataLen; // 指纹数据大小,不为0是表示后面带数据 + char *pFingerPrintData; + DWORD dwCapturePicDataLen; // 抓拍图片数据大小,不为0是表示后面带数据 + char *pCapturePicData; + DWORD dwCertificatePicDataLen; //证件抓拍图片数据大小,不为0是表示后面带数据 + char *pCertificatePicData; + BYTE byCardReaderKind; //读卡器属于哪一类,0-无效,1-IC读卡器,2-身份证读卡器,3-二维码读卡器,4-指纹头 + BYTE byHelmet;//可选,是否戴安全帽:0-保留,1-未知,2-不戴安全, 3-戴安全帽 + BYTE byRes3; + BYTE byIDCardInfoExtend; //pIDCardInfoExtend是否有效:0-无效,1-有效 + char *pIDCardInfoExtend; //byIDCardInfoExtend为1时,表示指向一个NET_DVR_ID_CARD_INFO_EXTEND结构体 + DWORD dwSerialNo; //事件流水号,为0无效 + BYTE byRes[168]; +}NET_DVR_ID_CARD_INFO_ALARM, *LPNET_DVR_ID_CARD_INFO_ALARM; + +//扩展结构体信息 +typedef struct tagNET_DVR_ID_CARD_INFO_EXTEND +{ + BYTE byRemoteCheck; //是否需要远程核验(0-无效,1-不需要(默认),2-需要) + BYTE byThermometryUnit; //测温单位(0-摄氏度(默认),1-华氏度,2-开尔文) + BYTE byIsAbnomalTemperature; //人脸抓拍测温是否温度异常:1-是,0-否 + BYTE byRes2; + float fCurrTemperature; //人脸温度(精确到小数点后一位) + NET_VCA_POINT struRegionCoordinates; //人脸温度坐标 + DWORD dwQRCodeInfoLen; //二维码信息长度,不为0是表示后面带数据 + DWORD dwVisibleLightDataLen; //热成像相机可见光图片长度,不为0是表示后面带数据 + DWORD dwThermalDataLen; //热成像图片长度,不为0是表示后面带数据 + char *pQRCodeInfo; //二维码信息指针 + char *pVisibleLightData; //热成像相机可见光图片指针 + char *pThermalData; //热成像图片指针 + WORD wXCoordinate; //x坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wYCoordinate; //y坐标,人脸框左上角相对于图片的归一化坐标,范围0-1000 + WORD wWidth; //人脸框宽度,范围0-1000 + WORD wHeight; //人脸框高度,范围0-1000 + BYTE byHealthCode; //健康码状态, 0-保留, 1-未请求, 2-未申领, 3-绿码, 4-黄码, 5-红码, 6-无此人员, 7-其他错误信息(如接口异常导致查询失败), 8-查询健康码超时 + BYTE byNADCode; //核酸检测结果, 0-保留, 1-未查询到核酸检测结果, 2-核酸检测阴性(代表正常), 3-核酸检测阳性(代表确诊), 4-核酸检测有效期已过 + BYTE byTravelCode; //行程编码, 0-保留, 1-14天内一直在当地, 2-14天内离开过当地, 3-14天内到过疫区, 4-其他 + BYTE byVaccineStatus; //打疫苗状态, 0-保留, 1-未打疫苗, 2-部分注射疫苗, 3-打过疫苗 + BYTE byRes[1012]; +}NET_DVR_ID_CARD_INFO_EXTEND, *LPNET_DVR_ID_CARD_INFO_EXTEND; + +//身份证信息禁止名单条件结构 +typedef struct tagNET_DVR_ID_CARD_BLOCKLIST_COND +{ + DWORD dwSize; + BYTE byRes[256]; //保留 +}NET_DVR_ID_CARD_BLOCKLIST_COND, *LPNET_DVR_ID_CARD_BLOCKLIST_COND; + +//身份证信息禁止名单参数 +typedef struct tagNET_DVR_ID_CARD_BLOCKLIST_CFG +{ + DWORD dwSize; + NET_DVR_ID_CARD_INFO struIDCardCfg; // 身份证信息 + DWORD dwFingerPrintDataLen; // 身份证指纹数据大小,不为0是表示后面带数据 + char *pFingerPrintData; + DWORD dwPicDataLen; // 身份证图片数据大小,不为0是表示后面带数据 + char *pPicData; + BYTE byRes[128]; +}NET_DVR_ID_CARD_BLOCKLIST_CFG, *LPNET_DVR_ID_CARD_BLOCKLIST_CFG; + +//A =字母字符 [a..z, A..Z],N = 数字字符 [0..9],S = 特殊字符 [‘<’],B=二进制数据 +typedef struct tagNET_DVR_PASSPORT_INFO +{ + DWORD dwSize; //结构长度 + BYTE byOCR; //0-电子护照数据,1- OCR识别数据, + BYTE byRes1[3]; //保留 + BYTE byType[MAX_PASSPORT_TYPE_LEN]; //证件类型,数据类型A,S + BYTE byCountryIssue[MAX_PASSPORT_INFO_LEN]; //签发国或签发机构,数据类型A,S + BYTE byName[MAX_PASSPORT_NAME_LEN]; //姓名,数据类型A,S + BYTE byPassportNo[MAX_PASSPORT_NUM_LEN]; //证件号码,数据类型A,N,S + BYTE byNationality[MAX_NATIONALITY_LEN]; //国籍 ,数据类型A,S + NET_DVR_DATE struBirth; //出生日期 + NET_DVR_DATE struExpireDate; //有效截止日期 + BYTE bySex; //性别,1-男,2-女 + BYTE byRes2[35]; //保留 + BYTE byLocalName[MAX_PASSPORT_INFO_LEN]; //本国姓名,数据类型B + BYTE byNumber[MAX_PASSPORT_INFO_LEN]; //个人号码,数据类型A,N,S + BYTE byPlaceOfBirth[MAX_PASSPORT_INFO_LEN]; //出生地,数据类型B + BYTE byAddr[MAX_PASSPORT_INFO_LEN]; //地址,数据类型A,N,S,B + BYTE byPhone[MAX_PASSPORT_INFO_LEN]; //电话,数据类型N,S + BYTE byJob[MAX_PASSPORT_INFO_LEN]; //职业,数据类型B + BYTE byTitle[MAX_PASSPORT_INFO_LEN]; //职衔,数据类型B + BYTE byResume[MAX_PASSPORT_INFO_LEN]; //简历,数据类型B + BYTE byOtherNumber[MAX_PASSPORT_INFO_LEN]; //其他旅行证件号码,数据类型A,N,S,B + BYTE byMonitoring[MAX_PASSPORT_MONITOR_LEN]; //监护信息,数据类型B + BYTE byRes[128]; +}NET_DVR_PASSPORT_INFO, *LPNET_DVR_PASSPORT_INFO; + +//护照信息上传 +typedef struct tagNET_DVR_PASSPORT_ALARM +{ + DWORD dwSize; //结构长度 + DWORD dwMajor; //报警主类型,参考宏定义 + DWORD dwMinor; //报警次类型,参考宏定义 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN];//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr;//远程主机地址 + DWORD dwCardReaderNo; //读卡器编号,为0无效 + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,为0无效 + BYTE byRes2[11]; + NET_DVR_PASSPORT_INFO struPassportInfo;//护照信息 + DWORD dwFaceDataLen; //人脸数据大小,不为0是表示后面带数据 + char *pFaceData; + DWORD dwPicDataLen; //公民证件图片数据大小,不为0是表示后面带数据 + char *pPicData; //按照 [ISO/IEC 10918-1] 格式化的公民证件图像 + DWORD dwCapturePicDataLen; //抓拍图片数据大小,不为0是表示后面带数据 + char *pCapturePicData; + BYTE byRes[128]; +}NET_DVR_PASSPORT_ALARM, *LPNET_DVR_PASSPORT_ALARM; + +typedef struct tagNET_DVR_PASSNUM_INFO_ALARM +{ + DWORD dwSize; //结构长度 + DWORD dwAccessChannel; //人员通道号 + NET_DVR_TIME_V30 struSwipeTime; //时间 + BYTE byNetUser[MAX_NAMELEN] ;//网络操作的用户名 + NET_DVR_IPADDR struRemoteHostAddr ;//远程主机地址 + DWORD dwEntryTimes; //人员入次数; + DWORD dwExitTimes; //人员出次数; + DWORD dwTotalTimes; //人员出入总次数; + BYTE byRes[300]; +}NET_DVR_PASSNUM_INFO_ALARM, *LPNET_DVR_PASSNUM_INFO_ALARM; +typedef struct tagNET_DVR_UPLOAD_VIDEO_INFO +{ + DWORD dwSize; + DWORD dwVideoMangeNo; //视频管理号 + BYTE byVideoType; //视频格式 0-AVI 1-WMV 2-MP4 3-FLV 3-VOD 4-MKV 5-RMVB + BYTE byRes1[3]; //保留 + BYTE sVideoName[NAME_LEN]; //视频名称 + NET_DVR_TIME_V30 struTime; //图片上传时间 + BYTE byRes[132]; +} NET_DVR_UPLOAD_VIDEO_INFO, *LPNET_DVR_UPLOAD_VIDEO_INFO; + +typedef struct tagNET_DVR_DEVICE_FILE_INFO +{ + DWORD dwSize; + BYTE sFileName[NAME_LEN]; //文件名称 + DWORD dwManageNo; //(只能获取) + NET_DVR_TIME_EX struTime; //文档上传时间 + BYTE byUsed; //是否已存在,0-不存在,1-存在 (只能获取) + BYTE byRes[127]; +} NET_DVR_DEVICE_FILE_INFO, *LPNET_DVR_DEVICE_FILE_INFO; + +typedef struct tagNET_DVR_PLAY_ITEM +{ + DWORD dwSize; + BYTE byItemType; //播放项类型,1-图片 2-视频 3-播放列表 + BYTE byRes[3]; //保留 + DWORD dwPlayManageNo; //播放管理号 + DWORD dwPlayPicTime; //播放图片时间,单位秒, (类型为图片有效) + BYTE byRes2[64]; +} NET_DVR_PLAY_ITEM, *LPNET_DVR_PLAY_ITEM; + +typedef struct tagNET_DVR_DEVICE_PLAYLIST +{ + DWORD dwSize; + BYTE byEnable; //是否有效, 0-无效 !0-有效 + BYTE byPlayType; //播放模式,1-循环播放 + BYTE byVaildItemNum; //有效播放项数量 + BYTE byRes[1]; + NET_DVR_PLAY_ITEM struPlayItem[PLAYLIST_ITEM_NUM]; //播放项,前byVaildItemNum有效 + BYTE byPlaylistName[PLAYLIST_NAME_LEN]; //播放列表名称 + DWORD dwPlaylistNo; //播放列表号(获取有效) + BYTE byRes2[128]; +} NET_DVR_DEVICE_PLAYLIST, *LPNET_DVR_DEVICE_PLAYLIST; +typedef struct tagNET_DVR_PLAYLIST_ITEM_CTRL +{ + DWORD dwSize; + BYTE byCtrlType; //操作类型, 1-添加播放项 2-删除播放项 3-移动播放项位置 + BYTE byPlayIndex; //播放序号, 从1开始 + NET_DVR_PLAY_ITEM struPlayItem; //播放项 + BYTE byNewPlayIndex; //新播放序号,0无效 + BYTE byRes[63]; +}NET_DVR_PLAYLIST_ITEM_CTRL, *LPNET_DVR_PLAYLIST_ITEM_CTRL; +typedef struct tagNET_DVR_PLAN_ITEM +{ + NET_DVR_PLAY_ITEM struPlanPlayItem; //播放项 + NET_DVR_TIME_SEGMENT struTimeSegment; //时间段参数 + BYTE byRes[16]; +} NET_DVR_PLAN_ITEM, *LPNET_DVR_PLAN_ITEM; + +typedef struct tagNET_DVR_PLAYPLAN_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否使能, 0-不使能 !0-使能 + BYTE byPlanMode; //计划模式,1-周计划 2-日计划 + BYTE byRes[2]; + NET_DVR_PLAN_ITEM struPlanItem[MAX_DAYS][MAX_TIMESEGMENT_V30]; + DWORD dwPlayPlanNo; //播放计划号(获取时有效) + BYTE byPlayPlanName[NAME_LEN]; //播放计划名称 + BYTE byRes2[32]; +} NET_DVR_PLAYPLAN_CFG, *LPNET_DVR_PLAYPLAN_CFG; +typedef struct tagNET_DVR_WINDOW_PLAYPLAN_CFG +{ + DWORD dwSize; + BYTE byEnable; //是否启用播放计划, 0-不启用 !0-启用 + BYTE byRes[3]; + DWORD dwPlayPlanNo; //播放计划号 + BYTE byRes2[32]; +} NET_DVR_WINDOW_PLAYPLAN_CFG, *LPNET_DVR_WINDOW_PLAYPLAN_CFG; +typedef struct tagNET_DVR_DEV_PLAYCTRL +{ + DWORD dwSize; + BYTE byControlType; //控制类型,1-音频开,2-音频关,3-停止播放,4-暂停播放,恢复播放 + BYTE byRes[131]; +} NET_DVR_DEV_PLAYCTRL, *LPNET_DVR_DEV_PLAYCTRL; + +typedef union tagNET_DVR_PLAYITEM_INFO +{ + struct //单独播放 + { + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 + BYTE byRes2[8]; + } struPlayItem; + struct //播放列表 + { + DWORD dwPlaylistNo; //播放列表号 + BYTE byPlaylistName[NAME_LEN]; //播放列表名称 + WORD wPlayIndex; //播放位置 + BYTE byPlayType; //播放列表中正在播放类型 1-图片 2-视频 + BYTE byRes[3]; + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 + BYTE byRes2[16]; + } struPlaylistItem; + struct //播放计划项 + { + DWORD dwPlayPlanNo; //播放计划号 + NET_DVR_TIME_SEGMENT struTime; //正在播放时间段 + BYTE byPlayType; //播放计划正在播放类型 1-图片 2-视频 3-播放列表 + BYTE byRes[3]; + DWORD dwPlaylistNo; //播放列表号 + BYTE byPlaylistName[NAME_LEN]; //播放列表名称 + DWORD dwPlayItem; //播放项 + BYTE byPlayItemName[NAME_LEN]; //播放项名称 + WORD wPlayIndex; //播放位置 + BYTE byRes2[18]; + } struPlayPlanItem; +}NET_DVR_PLAYITEM_INFO, *LPNET_DVR_PLAYITEM_INFO; +typedef struct tagNET_DVR_PLAYING_INFO +{ + DWORD dwSize; + BYTE byPlayWay; //播放方式, 1-单项播放 2-播放列表 3-播放计划 4-动态解码 5-紧急插播 + BYTE byCurPlayType; //正在播放素材类型, 1-图片 2-视频,动态解码和紧急插播时无效 + BYTE byPlayState; //播放状态,1-正在播放,2-播放停止,3-播放暂停 + BYTE byAudioState; //音频开关状态,0-关,1-开 + NET_DVR_PLAYITEM_INFO struPlayItemInfo; //播放项信息 + BYTE byRes2[16]; +} NET_DVR_PLAYING_INFO, *LPNET_DVR_PLAYING_INFO; + +typedef struct tagNET_DVR_ONLINEUSER_COND //条件结构 +{ + DWORD dwSize; + DWORD dwChannel;//通道号(前端默认是1) + BYTE byRes [128]; +}NET_DVR_ONLINEUSER_COND,*LPNET_DVR_ONLINEUSER_COND; + +typedef struct tagNET_DVR_ONLINEUSER_CFG //配置结构 +{ + DWORD dwSize; + BYTE byID;//用户序列号 + BYTE byUserType;//用户类型 0-普通用户,1-操作员,2-超级用户 + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 + BYTE byRes; + NET_DVR_IPADDR struIpAddr;//IP地址 + NET_DVR_TIME_V30 struLoginTime;//登陆时间 + char szUserName[NAME_LEN/*32*/];//用户名 + BYTE byRes1[128]; +}NET_DVR_ONLINEUSER_CFG,*LPNET_DVR_ONLINEUSER_CFG; + +//存储健康状态 +typedef struct tagNET_DVR_STORAGE_DETECTION +{ + DWORD dwSize;//结构体大小 + BYTE byHealthState;//健康状态0-良好,1-差,2-损坏,3-未知 + BYTE bySDCardState;//SDcard状态 0-掉线,1-上线,2-未知,3-已锁定 + WORD wAbnormalPowerLoss;//异常掉电数 + WORD wBadBlocks;//坏块数 + BYTE byRemainingLife; //SD卡剩余寿命; 0~100% + BYTE byRes[125]; +}NET_DVR_STORAGE_DETECTION,*LPNET_DVR_STORAGE_DETECTION; + +//存储智能检测报警上传 +typedef struct tagNET_DVR_STORAGE_DETECTION_ALARM +{ + DWORD dwSize; + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwCardID; //卡ID + WORD wAbnormalPowerLoss;//异常掉电数 + WORD wBadBlocks;//坏块数 + BYTE byHealthState;//健康状态0-良好,1-差,2-损坏,3-未知 + BYTE byRes1[3]; + float fResidualLife; //SD卡 预计剩余寿命 + BYTE byRes[118]; +}NET_DVR_STORAGE_DETECTION_ALARM,*LPNET_DVR_STORAGE_DETECTION_ALARM; + + +//存储侦测的读写锁配置 +typedef struct tagNET_DVR_STORAGE_RWLOCK +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled;//使能 0-关闭,1-开启 + BYTE byRes[3]; + char szPassWD[PASSWD_LEN/*16*/]; //读写锁新密码 + char szOriginalPassWD[PASSWD_LEN/*16*/]; //原始密码 + BYTE byRes1[128]; +}NET_DVR_STORAGE_RWLOCK,*LPNET_DVR_STORAGE_RWLOCK; + +//存储侦测的解锁配置 +typedef struct tagNET_DVR_STORAGE_UNLOCK +{ + DWORD dwSize;//结构体大小 + char szPassWD[PASSWD_LEN/*16*/]; //密码 + BYTE byRes1[128]; +}NET_DVR_STORAGE_UNLOCK,*LPNET_DVR_STORAGE_UNLOCK; + + +typedef struct tagNET_DVR_PTZTRACKSTATUS +{ + DWORD dwSize;//结构体大小 + BYTE byID;//联动设备的ID (字段byLinkageType非0的时候生效) + BYTE byLinkageType;//联动动作0-不联动,1-联动球机设备 + BYTE byRes[254]; +}NET_DVR_PTZTRACKSTATUS,*LPNET_DVR_PTZTRACKSTATUS; + +#define MAX_PROXY_COUNT 32 + +typedef struct tagNET_DVR_SOCKS_PROXY_PARA +{ + BYTE byIP[129]; //代理服务器地址 + BYTE byAuthType; //认证方式,暂时先不使用该字段 + WORD wPort; //代理服务器端口 + BYTE byRes2[64]; //如果要使用认证方式,必然需要一些保留字节,先留一些 +}NET_DVR_SOCKS_PROXY_PARA, *LPNET_DVR_SOCKS_PROXY_PARA; + +typedef struct tagNET_DVR_SOCKS_PROXYS +{ + NET_DVR_SOCKS_PROXY_PARA struProxy[MAX_PROXY_COUNT]; +}NET_DVR_SOCKS_PROXYS, *LPNET_DVR_SOCKS_PROXYS; + +typedef struct tagNET_DVR_GET_FIGURE_COND +{ + DWORD dwLength; //结构长度 + DWORD dwChannel; //通道 + NET_DVR_TIME_V30 struTimePoint; //时间点 + BYTE byID[STREAM_ID_LEN/*32*/]; //ID数据 + BYTE byRes[32]; +}NET_DVR_GET_FIGURE_COND, *LPNET_DVR_GET_FIGURE_COND; + +typedef struct tagNET_DVR_FIGURE_INFO +{ + DWORD dwPicLen; //图片长度 + char *pPicBuf; //图片数据 +}NET_DVR_FIGURE_INFO, *LPNET_DVR_FIGURE_INFO; + +//手动测距参数 +typedef struct tagNET_DVR_MANUALRANGING_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否开启手动测距:0- 否,1- 是 + BYTE byRes[127]; +}NET_DVR_MANUALRANGING_CFG,*LPNET_DVR_MANUALRANGING_CFG; + +typedef struct tagNET_DVR_VIDEO_INTERCOM_ALARM_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byDoorNotCloseAlarm; //是否上传门未关报警,0-不上传,1-上传 + BYTE byRes[603]; //保留 +}NET_DVR_VIDEO_INTERCOM_ALARM_CFG, *LPNET_DVR_VIDEO_INTERCOM_ALARM_CFG; + +typedef struct tagNET_DVR_PACKET_INFO_EX +{ + WORD wWidth; //width + WORD wHeight; //height + DWORD dwTimeStamp; //lower time stamp + DWORD dwTimeStampHigh;//higher time stamp + DWORD dwYear; //year + DWORD dwMonth; //month + DWORD dwDay; //day + DWORD dwHour; //hour + DWORD dwMinute; //minute + DWORD dwSecond; //second + DWORD dwMillisecond; //millisecond + DWORD dwFrameNum; //frame num + DWORD dwFrameRate; //frame rate,当帧率小于0时,0x80000002:表示1/2帧率,同理可推0x80000010为1/16帧率 + DWORD dwFlag; //flag E帧标记 + DWORD dwFilePos; //file pos + DWORD dwPacketType; //Packet type:0 -file head,1 -video I frame,2- video B frame, 3- video P frame, 10- audio packet, 11- private packet + DWORD dwPacketSize; //packet size + unsigned char* pPacketBuffer; //packet buffer + BYTE byRes1[4]; + DWORD dwPacketMode; //打包方式:0-保留,1-FU_A打包方式 + BYTE byRes2[16]; + DWORD dwReserved[6]; //reserved[0] 表示私有数据类型 + //reserved[1] 表示私有裸数据地址高位 + //reserved[2] 表示私有裸数据地址低位 + //reserved[3] 表示私有裸数据长度 + //reserved[4] 私有帧/包的时间间隔\时间戳 + //reserved[5].一bit位标记是否为深P帧,深P:1,不为深P:0; lizhonghu 20150203 +}NET_DVR_PACKET_INFO_EX, *LPNET_DVR_PACKET_INFO_EX; + +typedef BOOL(CALLBACK * DEV_WORK_STATE_CB)(void* pUserdata, int iUserID, LPNET_DVR_WORKSTATE_V40 lpWorkState); + +typedef struct tagNetDVRCheckDevState +{ + DWORD dwTimeout; //定时检测设备工作状态,单位ms,为0时,表示使用默认值(30000)。最小值为1000 + DEV_WORK_STATE_CB fnStateCB; + void* pUserData; + BYTE byRes[60]; +}NET_DVR_CHECK_DEV_STATE,*LPNET_DVR_CHECK_DEV_STATE; + +#define COURSE_NAME_LEN_128 128 //课程名称 +#define INSTRUCTOR_NAME_LEN_64 64 //授课教师 +#define MAX_UUID_LEN 64 //手动课程UUID + +//获取条件结构体 +typedef struct tagNET_DVR_COURSE_LIST_COND +{ + DWORD dwSize; + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程结束时间 + BYTE byCourseName[COURSE_NAME_LEN_128]; //课程名称 + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //授课老师 + BYTE byCourseType; //课表类型,0-全部,1-手动 + BYTE byRes[603]; +}NET_DVR_COURSE_LIST_COND,*LPNET_DVR_COURSE_LIST_COND; + +typedef struct tagNET_DVR_COURSE_CFG +{ + DWORD dwSize; + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程开始时间 + BYTE byCourseName[COURSE_NAME_LEN_128]; + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; + BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byCourseType;//课表类型,0-全部,1-手动课表 + BYTE byRes[303]; +}NET_DVR_COURSE_CFG, *LPNET_DVR_COURSE_CFG; + +typedef struct tagNET_DVR_RECORD_STATUS +{ + DWORD dwSize; //结构体大小 + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byRecordStatus; //录播状态,0-暂停,1-屏蔽,2-正在录像,3-空闲 + BYTE byRes1[3]; //保留字节 + DWORD dwRecordingTime; //已录制时长,单位:秒,最大为12*60*60 + BYTE byRes[596]; //保留字节 +}NET_DVR_RECORD_STATUS, *LPNET_DVR_RECORD_STATUS; + +typedef struct tagNET_DVR_MANUAL_CURRICULUM_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byRecUUID[MAX_UUID_LEN/*64*/]; //手动课表UUID + BYTE byCourseName[COURSE_NAME_LEN_128]; //课程名称 + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; //授课老师 + BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; + BYTE byCmdType; //命令,0-开始录像 1-结束 2-暂停 3-继续,4-开始屏蔽,5-结束屏蔽 + BYTE byRes[303]; //保留字节 +}NET_DVR_MANUAL_CURRICULUM_CFG, *LPNET_DVR_MANUAL_CURRICULUM_CFG; + +typedef struct tagNET_DVR_IMAGE_DIFF_DETECTION_CFG +{ + DWORD dwSize; //结构体大小 + NET_VCA_POLYGON struRegion; //区域范围 + BYTE byEnabled; //是否启用,0-不启用,1-启用 + BYTE byThreshold; //阈值[0,100] + BYTE bySensitivity; //灵敏度 [0,100] + BYTE byVideoInputType; //视频输入口类型,0-自动,1-HDMI,2-VGA + BYTE byRes[300]; //保留字节 +}NET_DVR_IMAGE_DIFF_DETECTION_CFG, *LPNET_DVR_IMAGE_DIFF_DETECTION_CFG; + +typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_COND +{ + DWORD dwSize; + DWORD dwChannel; + BYTE byFileID[MAX_ID_LEN_128/*128*/]; //发布文件ID + BYTE byRes[300]; +}NET_DVR_RECORDING_PUBLISH_FILE_COND, *LPNET_DVR_RECORDING_PUBLISH_FILE_COND; + +typedef struct tagNET_DVR_RECORDING_PUBLISH_FILE_INFO +{ + DWORD dwSize; + NET_DVR_TIME_V30 struStartTime; //课程开始时间 + NET_DVR_TIME_V30 struEndTime; //课程开始时间 + BYTE byCourseName[COURSE_NAME_LEN_128]; + BYTE byInstructorName[INSTRUCTOR_NAME_LEN_64]; + BYTE byCourseDescription[COURSE_DESCRIPTION_LEN /*256*/]; + BYTE byRes[300]; //保留字节 +}NET_DVR_RECORDING_PUBLISH_FILE_INFO, *LPNET_DVR_RECORDING_PUBLISH_FILE_INFO; + +//屏幕控制 +typedef struct tagNET_DVR_SCREEN_POINT +{ + WORD wX; //X坐标 + WORD wY; //Y坐标 +}NET_DVR_SCREEN_POINT,*LPNET_DVR_SCREEN_POINT; + +typedef struct tagNET_DVR_MOUSE_PARAM +{ + BYTE byMouseEvent; //鼠标事件,1-鼠标左键按下,2-鼠标左键松开,3-鼠标右键按下,4-鼠标右键松开, + //5-鼠标移动,6-鼠标左键单击,7-鼠标左键双击,8-鼠标右键单击,9-滚轮按下, + //10-滚轮松开,11-滚轮向下,12-滚轮向上 + BYTE byRes1[3]; + NET_DVR_SCREEN_POINT struMousePoint; //鼠标坐标信息 + BYTE byRes2[8]; +}NET_DVR_MOUSE_PARAM, *LPNET_DVR_MOUSE_PARAM; + +typedef struct tagNET_DVR_MARK_PARAM +{ + BYTE byMarkEvent; //标注事件,1-正常标注,2-标注结束,3-更新标注工具状态 + BYTE byMarkTool; //标注工具,0-无效,1-画笔,2-橡皮擦,标注事件为1时有效 + BYTE byLineWidth; //线条粗细,0-无效,1-细,2-中,3-粗,标注事件为1时有效 + BYTE byMouseEvent; //鼠标事件,标注事件为1时有效,0-无效,1-鼠标左键按下,2-鼠标左键松开,3-鼠标移动 + NET_DVR_RGB_COLOR struColor; //标注颜色,标注工具为画笔时有效 + NET_DVR_SCREEN_POINT struPoint; //标注坐标信息 + BYTE byRes[4]; +}NET_DVR_MARK_PARAM, *LPNET_DVR_MARK_PARAM; + +typedef struct tagNET_DVR_KEYBOARD_PARM +{ + DWORD dwKeyValue; //符号使用ASCII表中的值,特殊按键待确定 + BYTE byRes[12]; +}NET_DVR_KEYBOARD_PARAM, *LPNET_DVR_KEYBOARD_PARAM; + +typedef struct tagNET_DVR_PPT_PARAM +{ + BYTE byPPTAction; //PPT动作,1-打开放映,2-停止放映,3-上一个动画,4-下一个动画, + //5-上一页,6-下一页,7-跳到X页,8-激光笔开,9-激光笔关,10-激光笔移动 + BYTE byRes1[3]; + NET_DVR_SCREEN_POINT struPoint; //激光笔坐标信息,PPT动作为10时有效 + DWORD dwPPTNo; //PPT页码数,PPT动作为7时有效 + BYTE byRes2[4]; +}NET_DVR_PPT_PARAM, *LPNET_DVR_PPT_PARAM; + +typedef struct tagNET_DVR_REMOTE_CTRL_PARAM +{ + BYTE byRemoteCtrlCmd; //远程控制命令,1-切换置顶窗口,2-关闭屏幕当前窗口,3-打开文件,4-关闭文件,5-删除文件,6-关机,7-显示桌面,8-表扬 + BYTE byRes1[3]; + DWORD dwCtrlParam; //操作参数,当byRemoteCtrlCmd为3、4、5时,表示操作的文件索引;当byRemoteCtrlCmd为8时表示表扬类型,0-无效,1-表扬 + BYTE byRes2[8]; +}NET_DVR_REMOTE_CTRL_PARAM, *LPNET_DVR_REMOTE_CTRL_PARAM; + +typedef struct tagNET_DVR_SPOTLIGHT_PARAM +{ + BYTE byCmd; //聚光灯命令,0-关闭聚光灯,1-开启聚光灯,2-聚光灯位置移动 + BYTE byRes1[3]; + NET_DVR_SCREEN_POINT struPoint; //聚光灯中心点坐标,聚光灯位置移动时有效 + DWORD dwRadius; //聚光灯半径 + BYTE byRes2[4]; +} NET_DVR_SPOTLIGHT_PARAM, *LPNET_DVR_SPOTLIGHT_PARAM; + +typedef struct tagNET_DVR_TOUCHPAD_PARAM +{ + BYTE byMouseEvent; //鼠标事件,1-鼠标左键按下,2-鼠标左键松开,3-鼠标右键按下,4-鼠标右键松开, + //5-鼠标移动,6-鼠标左键单击,7-鼠标左键双击,8-鼠标右键单击,9-滚轮按下, + //10-滚轮松开,11-滚轮向下,12-滚轮向上 + BYTE byRes1[3]; + int iXDisplacement; //X轴位移,正数表示向右移动,负数表示向左移动,鼠标移动时有效 + int iYDisplacement; //Y轴位移,正数表示向上移动,负数表示向下移动,鼠标移动时有效 + BYTE byRes2[4]; +}NET_DVR_TOUCHPAD_PARAM, *LPNET_DVR_TOUCHPAD_PARAM; + +typedef struct tagNET_DVR_MEDIA_LIST_PARAM +{ + BYTE byOperateCmd; //操作命令,1-显示图片素材,2-显示视频素材,3-显示ppt素材,4-关闭多媒体文件夹 + BYTE byRes[15]; +}NET_DVR_MEDIA_LIST_PARAM, *LPNET_DVR_MEDIA_LIST_PARAM; + +typedef union tagNET_DVR_SCREEN_CTRL_PARAM +{ + NET_DVR_MOUSE_PARAM struMouseParam; //鼠标参数,命令类型为1时有效 + NET_DVR_MARK_PARAM struMarkParam; //标注参数,命令类型为2时有效 + NET_DVR_KEYBOARD_PARAM struKeyboardInfo; //键盘参数,命令类型为3时有效 + NET_DVR_PPT_PARAM struPPTParam; //PPT参数,命令类型为4时有效 + NET_DVR_REMOTE_CTRL_PARAM struRemoteCtrlParam; //远程操作参数,命令类型为5时有效 + NET_DVR_SPOTLIGHT_PARAM struSpotLight; //聚光灯参数,命令类型为6时有效 + NET_DVR_TOUCHPAD_PARAM struTouchPadParam; //触摸板参数,命令参数为7时有效 + NET_DVR_MEDIA_LIST_PARAM struMediaListParam; //多媒体参数,命令类型为8时有效 + BYTE byRes[16]; +}NET_DVR_SCREEN_CTRL_PARAM, *LPNET_DVR_SCREEN_CTRL_PARAM; + +typedef struct tagNET_DVR_SCREEN_CTRL_CMD +{ + DWORD dwSize; + BYTE byCmdType; //命令类型,1-鼠标,2-标注,3-键盘,4-PPT,5-远程操作,6-聚光灯,7-触控板,8-显示多媒体材料 + BYTE byRes1[3]; + NET_DVR_SCREEN_CTRL_PARAM struScreenCtrlParam; //屏幕控制参数 +}NET_DVR_SCREEN_CTRL_CMD, *LPNET_DVR_SCREEN_CTRL_CMD; + +typedef struct tagNET_DVR_FILE_RESPONSE_PARAM +{ + BYTE byFileState; //文件操作状态,1-文件不存在,2-打开文件失败,3-打开文件成功 + BYTE byRes1[3]; + DWORD dwErrorFileIndex; //文件操作的文件索引值 + BYTE byRes2[24]; +} NET_DVR_FILE_RESPONSE_PARAM, *LPNET_DVR_FILE_RESPONSE_PARAM; + +typedef struct tagNET_DVR_PPT_RESPONSE_PARAM +{ + BYTE byCurrentState; //当前PPT状态,1 - 正在放映,2 - 放映停止,3 - PPT已关闭,4 - ppt受保护或生产预览图失败,5 - 打开放映成功,6 - 打开放映失败,7 - ppt内容为空,8 - 缩略图生成失败,9 - 缩略图生成成功 + BYTE byRes1[3]; + DWORD dwCurrentPage; //PPT的页数,PPT状态为1,7,8时有效 + DWORD dwFileIndex; //PPT文件索引值 + DWORD dwTotalPageNum; //PPT总页数,PPT状态为5时有效 + BYTE byRes2[16]; +}NET_DVR_PPT_RESPONSE_PARAM, *LPNET_DVR_PPT_RESPONSE_PARAM; + +typedef union tagNET_DVR_SCREEN_RESPONSE_PARAM +{ + BYTE byRes[32]; + NET_DVR_PPT_RESPONSE_PARAM struPPTParam; //PPT参数 + NET_DVR_FILE_RESPONSE_PARAM struFileParam; //文件操作响应参数 +}NET_DVR_SCREEN_RESPONSE_PARAM,*LPNET_DVR_SCREEN_RESPONSE_PARAM; + +typedef struct tagNET_DVR_SCREEN_RESPONSE_CMD +{ + DWORD dwSize; + BYTE byResponseCmd; //屏幕响应命令类型,1-PPT,2-文件操作 + BYTE byRes1[3]; + NET_DVR_SCREEN_RESPONSE_PARAM struResonseParam; //屏幕响应参数 + BYTE byRes2[16]; +}NET_DVR_SCREEN_RESPONSE_CMD, *LPNET_DVR_SCREEN_RESPONSE_CMD; + +typedef struct tagNET_DVR_SCREEN_FILE_COND +{ + DWORD dwSize; + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,0xff-所有文件类型 + BYTE byRes[127]; +}NET_DVR_SCREEN_FILE_COND, *LPNET_DVR_SCREEN_FILE_COND; + +typedef struct tagNET_DVR_SCREEN_FILE_INFO +{ + DWORD dwSize; + DWORD dwFileIndex; //文件索引,全局唯一 + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,4-其他 + BYTE byPictureFormat; //图片格式,文件类型为图片时有效,1-bmp,2-jpeg,3-png,4-swf,5-gif + BYTE byVideoFormat; //视频格式,文件类型为视频时有效,1-avi,2-wmv,3-mp4,4-flv,5-vod,6-mkv,7-rmvb + BYTE byDocumentFormat; //文档格式,0-ppt,1-txt,2-doc,3-xls,文件类型为3时有效 + BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //屏幕文件名 + DWORD dwFileSize; //文件大小,单位:字节 + DWORD dwPPTPage; //ppt页码值,仅当获取已打开的PPT文件信息时有效 + BYTE byOtherFileFormat[8]; //其他类型的文件的格式(例如.dat、.dll等),文件类型为4时有效 + BYTE byRes1[56]; +}NET_DVR_SCREEN_FILE_INFO, *LPNET_DVR_SCREEN_FILE_INFO; + +typedef struct tagNET_DVR_SCREEN_CONFIG +{ + DWORD dwSize; + BYTE byVolume; //音量,0-100 + BYTE byContrast; //对比度,0-100 + BYTE byBrightness; //亮度,0-100 + BYTE byScreenShowEnabled; //开启屏幕显示,0-关,非0-开 + BYTE byScreenLocked; //锁定屏幕,0-解锁,非0-锁定 + BYTE byBlackScreenEnabled; //屏幕黑屏,0-取消黑屏,非0-黑屏 + BYTE byRes[30]; +}NET_DVR_SCREEN_CONFIG, *LPNET_DVR_SCREEN_CONFIG; + +typedef struct tagNET_DVR_SCREEM_FILE_UPLOAD_PARAM +{ + DWORD dwSize; + BYTE byFileType; //文件类型,1-图片,2-视频,3-文档,4-其他 + BYTE byPictureFormat; //图片格式,1-BMP,2-JPEG,3-PNG,4-SWF,5-GIF,文件类型为1时有效 + BYTE byVideoFormat; //视频格式,1-AVI,2-WMV,3-MP4,4-FLV,5-VOD,6-MKV,7-RMVB,文件类型为2时有效 + BYTE byDocumentFormat; //文档格式,0-ppt,1-txt,2-doc,3-xls,文件类型为3时有效 + BYTE byFileName[NET_SDK_MAX_FILE_PATH]; //文件名称 + BYTE byOtherFileFormat[8]; //其他类型的文件的格式(例如.dat、.dll等),文件类型为4时有效 + BYTE byRes1[56]; +}NET_DVR_SCREEM_FILE_UPLOAD_PARAM, *LPNET_DVR_SCREEM_FILE_UPLOAD_PARAM; + +typedef struct tagNET_DVR_SCREEM_FILE_DOWNLOAD_PARAM +{ + DWORD dwSize; + DWORD dwFileIndex; //文件索引 + DWORD dwPPTPageNo; //下载PPT页面图片时有效,为0表示下载PPT本身,其他值表示PPT页码值 + BYTE byRes2[64]; +}NET_DVR_SCREEM_FILE_DOWNLOAD_PARAM, *LPNET_DVR_SCREEM_FILE_DOWNLOAD_PARAM; + +typedef struct tagNET_DVR_TV_SCREEN_COND +{ + DWORD dwSize;//结构长度 + DWORD dwChannel;//通道号 + WORD wTVScreenNo;//导播屏编号 0-全部导播屏 + BYTE byRes[62]; //保留 +}NET_DVR_TV_SCREEN_COND, *LPNET_DVR_TV_SCREEN_COND; + +typedef struct tagNET_DVR_TV_SCREEN_CFG +{ + DWORD dwSize;//结构长度 + DWORD dwPicStayTime;//画面停留时间 (0~255s) + BYTE byRes[256]; //保留 +}NET_DVR_TV_SCREEN_CFG, *LPNET_DVR_TV_SCREEN_CFG; + +//获取设备抓取图片和附加信息结构体 +typedef struct tagNET_DVR_BV_CALIB_COND +{ + DWORD dwSize; //结构长度 + DWORD dwChannels; //通道号 + BYTE byRes[300]; //保留 +}NET_DVR_BV_CALIB_COND, *LPNET_DVR_BV_CALIB_COND; + +typedef struct tagNET_DVR_BV_CALIB_PIC +{ + DWORD dwSize; //结构长度 + DWORD dwPicID; + DWORD dwPicLen1;//图片1长度 + DWORD dwPicLen2;//图片2长度 + char* pPicBuffer1;//图片缓存 + char* pPicBuffer2;//图片缓存 + BYTE byRes[600]; //保留 +}NET_DVR_BV_CALIB_PIC, *LPNET_DVR_BV_CALIB_PIC; + + +//获取双目外参标定结果 +typedef struct tagNET_DVR_BV_CALIB_PARAM +{ + DWORD dwPicID; + NET_VCA_POINT struPoint;//眉心坐标 + BYTE byRes[32]; //保留 +}NET_DVR_BV_CALIB_PARAM, *LPNET_DVR_BV_CALIB_PARAM; + +typedef struct tagNET_DVR_BV_CALIB_INFO +{ + DWORD dwSize; //结构长度 + DWORD dwBVCalibNumber; //样本个数 + NET_DVR_BV_CALIB_PARAM struBVCalibParam[12]; + DWORD dwHumanHeight; //人体真实身高,单位cm + DWORD dwChannel; //通道号 + BYTE byRes[300]; //保留 +}NET_DVR_BV_CALIB_INFO, *LPNET_DVR_BV_CALIB_INFO; + +typedef struct tagNET_DVR_BV_CALIB_RESULT +{ + DWORD dwSize; //结构长度 + DWORD dwCameraHeight; //摄像机高度,单位cm + float fPitchAngle; //摄像机俯视角度[0°, 60°], (浮点数 + 360)* 1000 + float fInclineAngle; //摄像机斜角度[-20°,20°],(浮点数 + 360) * 1000 + BYTE byRes[300]; //保留 +}NET_DVR_BV_CALIB_RESULT, *LPNET_DVR_BV_CALIB_RESULT; + +//获取双目高度矫正数据 +typedef struct tagNET_DVR_BV_HCORRECTION_COND +{ + DWORD dwSize; //结构长度 + DWORD dwChannels; //通道号 + DWORD dwPicID; + BYTE byRes[300]; //保留 +}NET_DVR_BV_HCORRECTION_COND, *LPNET_DVR_BV_HCORRECTION_COND; + +typedef struct tagNET_DVR_BV_HCORRECTION_CFG +{ + DWORD dwSize; //结构长度 + DWORD dwHumanHeight; //人体真实身高,单位cm + BYTE byRes[300]; //保留 +}NET_DVR_BV_HCORRECTION_CFG, *LPNET_DVR_BV_HCORRECTION_CFG; + + +//语音参数配置 +typedef struct tagNET_DVR_TMEVOICE_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byVoiceSpeed;//语速 0~100 + BYTE byVoicePitch; //语调 0~100 + BYTE byVoiceVolum; //音量0~100 + BYTE byVoicePlateEnable;//车牌语音播报使能 ,0~关闭,1~启用 + /*声音种类; + 3 = Xiaoyan (female, Chinese) + 51 = Jiu Xu (male, Chinese) + 52 = Duo Xu (male, Chinese) + 53 = Xiaoping (female, Chinese) + 54 = Donald Duck (male, Chinese) + 55 = Baby Xu (child, Chinese) + */ + DWORD dwVoiceRole; //声音种类 + char sInfo[MAX_TMEVOICE_LEN/*64*/]; //语音播报内容(出入口压线圈播报的语音内容) + char sFileName[MAX_TMEVOICE_LEN/*64*/]; //语音文件名 + BYTE byRes[64]; +}NET_DVR_TMEVOICE_CFG,*LPNET_DVR_TMEVOICE_CFG; + +//输入板参数配置 +typedef struct tagNET_DVR_INPUT_BOARD_CFG +{ + DWORD dwSize; + DWORD dwSlotNo; //输入板槽位号 + BYTE byFullFrameEnable; //是否开启全帧率畅显,0-不开启,1-开启 + BYTE byRes[3]; //四字节对齐 + BYTE byRes1[64]; //保留 +}NET_DVR_INPUT_BOARD_CFG, *LPNET_DVR_INPUT_BOARD_CFG; + +typedef struct tagNET_DVR_INPUT_BOARD_CFG_LIST +{ + DWORD dwSize; + NET_DVR_INPUT_BOARD_CFG struBoardList[MAX_NUM_INPUT_BOARD]; //输入板配置信息列表 +}NET_DVR_INPUT_BOARD_CFG_LIST, *LPNET_DVR_INPUT_BOARD_CFG_LIST; + +/******************************安全防范视频布防联网信息安全 begin******************************************/ +//获取加密设备信息条件结构体 +typedef struct _NET_DVR_ENCRYPT_DEVICE_COND +{ + DWORD dwSize; //结构体大小 + DWORD dwChannel; //通道号 + BYTE byAlgorithm; //加密算法,0-保留,1-RSA,2-SM2 + BYTE byModelLen; //模长,0-保留,1-1024位,2-2048位,3-256位 + BYTE byCERTSaveLocation; //证书保存位置,根据设备返回的能力集来选择,0-保留,1-加密芯片中(通过USB插入设备),2-设备中 + BYTE byRes[29]; +}NET_DVR_ENCRYPT_DEVICE_COND, *LPNET_DVR_ENCRYPT_DEVICE_COND; +//获取加密设备信息结构体 +typedef struct _NET_DVR_ENCRYPT_DEVICE_INFO +{ + DWORD dwSize; //结构体大小 + BYTE byAlgorithm; //加密算法,0-保留,1-RSA,2-SM2 + BYTE byModelLen; //模长,0-保留,1-1024位,2-2048位,3-256位 + BYTE byRes1[30]; //保留 + DWORD dwPublicKeyLen; //公钥长度 + char szPublicKey[MAX_PUBLIC_KEY_LEN]; //公钥 + char szChipSerialNumber[CHIP_SERIALNO_LEN]; //芯片序列号 + char szDeviceID[ENCRYPT_DEV_ID_LEN]; //设备ID + BYTE byRes2[128]; +}NET_DVR_ENCRYPT_DEVICE_INFO, *LPNET_DVR_ENCRYPT_DEVICE_INFO; +//加密证书参数结构体 +typedef struct _NET_DVR_ENCRYPT_CERT_PARAM +{ + DWORD dwSize; + WORD wCertType; //证书类型,0-CA根证书,1-签名证书,2-加密证书,3- SM2加密密钥对 + BYTE byRes1[2]; //保留 + DWORD dwCertLen; //证书长度 + BYTE byRes2[32]; + char* pCertBuf; //证书缓冲区 +}NET_DVR_ENCRYPT_CERT_PARAM, *LPNET_DVR_ENCRYPT_CERT_PARAM; +/******************************安全防范视频布防联网信息安全 end******************************************/ +#define MAX_RING_NAME_LEN_128 128 //铃音名称长度 +typedef struct tagNET_DVR_RING_UPLOAD_CFG +{ + DWORD dwSize; + DWORD dwRingID; //铃音序号,[1,8] + BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; //铃音名称 + DWORD dwRingSize; //文件大小 + BYTE byRingType; //铃音类型,0-wav + BYTE byRes[363]; +}NET_DVR_RING_UPLOAD_CFG,*LPNET_DVR_RING_UPLOAD_CFG; + +typedef struct tagNET_DVR_RING_SEARCH_COND +{ + DWORD dwSize; + DWORD dwRingID; //铃音序号,傻瓜式查找,不设置此参数(设为0)表示无视序号查找 + BYTE byRes[300]; +}NET_DVR_RING_SEARCH_COND,*LPNET_DVR_RING_SEARCH_COND; + +typedef struct tagNET_DVR_RING_SEARCH_CFG +{ + DWORD dwSize; + DWORD dwRingID; //铃音序号,[1,8] + BYTE byRingName[MAX_RING_NAME_LEN_128/*128*/]; //铃音名称 + DWORD dwRingSize; //文件大小 + BYTE byRingType; //铃音类型,0-wav + BYTE byRes[303]; +}NET_DVR_RING_SEARCH_CFG,*LPNET_DVR_RING_SEARCH_CFG; + +//报警控制 +typedef struct tagNET_DVR_ALARMCTRL_CFG +{ + DWORD dwSize; + BYTE byListenPicUploadEnabled;//监听图片上传使能 + BYTE byRes [259]; +}NET_DVR_ALARMCTRL_CFG,*LPNET_DVR_ALARMCTRL_CFG; + +typedef struct tagNET_DVR_VEHICLEFLOW_COND +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byLane;//车道号,1~6车道,0为所有车道。 + BYTE byRes1[3]; + NET_DVR_TIME_V30 struStartTime;//开始时间 + NET_DVR_TIME_V30 struEndTime;//结束时间 + BYTE byRes[256]; +}NET_DVR_VEHICLEFLOW_COND, *LPNET_DVR_VEHICLEFLOW_COND; + +typedef struct tagNET_DVR_VEHICLEFLOW_INFO +{ + DWORD dwVehicleFlowValue;//为一个时间段内的流量 + BYTE byRes[64]; +}NET_DVR_VEHICLEFLOW_INFO, *LPNET_DVR_VEHICLEFLOW_INFO; + +typedef struct tagNET_DVR_VEHICLEFLOW_CFG +{ + DWORD dwSize; + NET_DVR_VEHICLEFLOW_INFO struVehFlow[MAX_VEHICLEFLOW_INFO/*24*/]; + BYTE byRes[512]; +}NET_DVR_VEHICLEFLOW_CFG, *LPNET_DVR_VEHICLEFLOW_CFG; + +//条件结构体 +typedef struct tagNET_DVR_IPADDR_FILTER_COND +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byRes[64]; +}NET_DVR_IPADDR_FILTER_COND, *LPNET_DVR_IPADDR_FILTER_COND; + +typedef struct tagNET_DVR_TEMPHUMSENSOR +{ + DWORD dwSize;//结构体长度 + BYTE byEnable;//使能 0-关,1-开 + BYTE byCtrlMode;//控制模式 0-温度阈值控制,1-湿度阈值控制,2-温湿度阈值控制 + BYTE byTemperatureValue;//温度阈值,0~100摄氏度,当控制模式为0或者2时生效 + BYTE byHumidityValue;//湿度阈值,0~100,当控制模式为1或者2时生效 + BYTE byFanSwitch;//风扇开关,0-关,1-开 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K)。 + BYTE byRes[62]; +}NET_DVR_TEMPHUMSENSOR, *LPNET_DVR_TEMPHUMSENSOR; + +//雷达测速配置 +typedef struct tagNET_DVR_POSTRADARSPEED_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byLaneType; //道路类型;0~未配置,1~高速公路,2~城市快速路,0xff~其他道路 + BYTE byRes1[3]; + DWORD dwInterval; //超速抓拍间隔,单位:ms + DWORD dwSignSpeed;//标志限速(小车),单位km/h + DWORD dwSpeedLimit;//限速值(小车),单位km/h + DWORD dwBigCarSignSpeed;//标志限速(大车),单位km/h + DWORD dwBigCarSpeedLimit;//限速值(大车),单位km/h + DWORD dwLowSpeedLimit;// 小车限低速,单位km/h + DWORD dwBigCarLowSpeedLimit;// 大车限低速,单位km/h + BYTE byCheckPostEnabled; //启用卡口抓拍 + BYTE byOverSpeedEnabled; //启用超速抓拍 + BYTE byRes[246]; +}NET_DVR_POSTRADARSPEED_CFG, *LPNET_DVR_POSTRADARSPEED_CFG; + +//雷达参数配置 +typedef struct tagNET_DVR_POSTRADARPARAM_CFG +{ + DWORD dwSize;//结构体大小 + BYTE bySoftWareVersion[32];//软件版本号 只读参数 + BYTE byID; //串口号 + BYTE byWorkMode; //工作模式,0~持续,1~触头,2~触尾,3~巡逻车触尾,4~双触,0xff~其他 + BYTE bySpeedType; //速度格式,0~单字节,1~双字节,2~四字节,0xff~其他 + BYTE byDirectionFilter; //方向过滤,0~不过滤,1~输出来向,2~输出去向 + DWORD dwAngleCorrect;//角度修正[0,70] + DWORD dwSensitivity;// 灵敏度[11,240] + DWORD dwSpeedLowLimit;// 测速下限[1,150km/h] + DWORD dwTrigDistance;// 触发距离[0,40m] + BYTE byRes[256]; +}NET_DVR_POSTRADARPARAM_CFG, *LPNET_DVR_POSTRADARPARAM_CFG; + +typedef struct tagNET_DVR_CLOUD_URL_COND +{ + DWORD dwSize; + BYTE byType; //云类型0-保留,1- OneDrive 2-GoogleDrive 3-DropBox + BYTE byRes[63]; +}NET_DVR_CLOUD_URL_COND, *LPNET_DVR_CLOUD_URL_COND; + +typedef struct tagNET_DVR_CLOUD_URL +{ + DWORD dwSize; + char szURL[256]; //云存储URL + BYTE byRes[256]; +}NET_DVR_CLOUD_URL, *LPNET_DVR_CLOUD_URL; + +typedef struct tagNET_DVR_CLOUD_CFG +{ + DWORD dwSize; + BYTE byEnable; //0-不开启,1-开启 + BYTE byType; //云类型0-保留,1- OneDrive 2-GoogleDrive 3-DropBox + BYTE byStatus; //状态,只读 0-保留 1-在线 2-不在线 + BYTE byRes1; + char szAuthCode[CODE_LEN]; //授权码 + char szAlias[ALIAS_LEN]; //别名,只读 + INT64 i64TotalCapability; //总容量,只读,单位:MB + INT64 i64UsedSpace; //已用容量,只读,单位:MB + BYTE byRes2[256]; +}NET_DVR_CLOUD_CFG, *LPNET_DVR_CLOUD_CFG; + +typedef struct tagNET_DVR_CLOUD_UPLOADSTRATEGY_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + BYTE byRes[254]; //为将来使用流ID做保留 +}NET_DVR_CLOUD_UPLOADSTRATEGY_COND, *LPNET_DVR_CLOUD_UPLOADSTRATEGY_COND; + +typedef struct tagNET_DVR_CLOUD_UPLOADSTRATEGY +{ + DWORD dwSize; + BYTE byStrategyType; //策略类型0-无意义,1-录像,2-图片 + BYTE byRes1[3]; + DWORD dwRecordType; //策略类型byStrategyType 为1时有效,按位表示 + /*0x00: 无意义*/ + /*0x01: 全部事件*/ + /*0x02: 移动侦测*/ + /*0x04: 信号量报警类型*/ + /*0x08: 智能类型*/ + BYTE byRes[256]; +}NET_DVR_CLOUD_UPLOADSTRATEGY, *LPNET_DVR_CLOUD_UPLOADSTRATEGY; + +//录像完整性检查条件参数 +typedef struct tagNET_DVR_RECORD_CHECK_COND +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; + BYTE byCheckType; //检测方式,0--录像是否完整,1--录像是否完整&缺失录像的起止时间 + BYTE byRes1[3]; + NET_DVR_TIME_EX struBeginTime; //检测录像的开始时间 + NET_DVR_TIME_EX struEndTime; //检测录像的结束时间 + BYTE byRes[128]; +}NET_DVR_RECORD_CHECK_COND, *LPNET_DVR_RECORD_CHECK_COND; + +//录像完整性检查结果 +typedef struct tagNET_DVR_RECORD_CHECK_RET +{ + DWORD dwSize; + BYTE byRecordNotComplete; //录像是否完整,0--完整,1--不完整 + BYTE byRes1[3]; + NET_DVR_TIME_EX struBeginTime; //缺失录像的开始时间,byCheckType、byRecordNotComplete值都为1时有效 + NET_DVR_TIME_EX struEndTime; //缺失录像的结束时间,byCheckType、byRecordNotComplete值都为1时有效 + BYTE byRes[128]; +}NET_DVR_RECORD_CHECK_RET, *LPNET_DVR_RECORD_CHECK_RET; + +//添加手动回传任务条件 +typedef struct tagNET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; + BYTE byRes[128]; +}NET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_ADD_RECORD_PASSBACK_MANUAL_COND; + +//添加手动回传任务参数 +typedef struct tagNET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG +{ + DWORD dwSize; + NET_DVR_TIME_EX struBeginTime; //回传的录像开始时间 + NET_DVR_TIME_EX struEndTime; //回传的录像结束时间 + BYTE byRes[128]; +}NET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG, *LPNET_DVR_ADD_RECORD_PASSBACK_MANUAL_CFG; + +//回传任务参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_TASK_CFG +{ + DWORD dwSize; + DWORD dwTaskID; //任务ID + BYTE byRes[160]; +}NET_DVR_RECORD_PASSBACK_TASK_CFG, *LPNET_DVR_RECORD_PASSBACK_TASK_CFG; + +//获取所有手动回传任务条件参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_COND +{ + DWORD dwSize; + BYTE byType; //获取方式,0--获取全部剩余任务,1--根据流ID获取剩余任务, 2--获取全部任务,3--根据流ID获取任务,4—根据任务ID获取任务 + BYTE byTimeSegmentQuety; //是否启用时间范围查询,0-不启用,1-启用 + BYTE byRes1[2]; //保留 + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID获取剩余任务时有效 + NET_DVR_TIME_EX struBeginTime; //查询开始时间,byTimeSegmentQuety启用时有效 + NET_DVR_TIME_EX struEndTime; //查询结束时间,byTimeSegmentQuety启用时有效 + DWORD dwTaskID; //任务ID, byType等于4时有效 + BYTE byRes[108]; //保留 +}NET_DVR_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_RECORD_PASSBACK_MANUAL_COND; + +//获取所有手动回传任务参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID获取剩余任务时有效 + DWORD dwTaskID; //任务ID + NET_DVR_TIME_EX struStartTime; //回传的录像开始时间 + NET_DVR_TIME_EX struStopTime; //回传的录像结束时间 + BYTE byTaskStatus; //任务状态,0--未执行,1--暂停中,2--已执行, 3--回传中, 4--回传失败, 5--执行成功,但只回传了部分录像, 6--执行成功,但前端无录像 + BYTE byRes1[3]; + NET_DVR_TIME_EX struExecuteStartTime;//任务实际执行开始时间,byTaskStatus为1和2有效 + NET_DVR_TIME_EX struExecuteStopTime;//任务实际执行结束时间,byTaskStatus为2有效 + BYTE byRes[128]; //保留 +}NET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET, *LPNET_DVR_RECORD_PASSBACK_MANUAL_TASK_RET; + +//控制手动回传任务参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_MANUAL_CTRL +{ + DWORD dwSize; + BYTE byControlType; //控制方式,0--暂停所有手动任务,1--恢复所有手动任务 + BYTE byRes[131]; //保留 +}NET_DVR_RECORD_PASSBACK_MANUAL_CTRL, *LPNET_DVR_RECORD_PASSBACK_MANUAL_CTRL; + +//删除手动回传任务条件 +typedef struct tagNET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND +{ + DWORD dwSize; + BYTE byDelType; //删除方式,0--根据任务ID删除,1--根据流ID删除任务,2--删除全部任务 + BYTE byRes[131]; //保留 +}NET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND, *LPNET_DVR_DEL_RECORD_PASSBACK_MANUAL_COND; + +//删除手动回传任务参数 +typedef struct tagNET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG +{ + DWORD dwSize; + DWORD dwTaskID; //手动回传任务ID,根据任务ID删除任务时有效 + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节),根据流ID删除任务时有效 + BYTE byRes[128]; //保留 +}NET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG, *LPNET_DVR_DEL_RECORD_PASSBACK_MANUAL_CFG; + +typedef struct tagNET_DVR_PASSBACK_DAY +{ + BYTE byAllDay; //是否启用全天回传 + BYTE byRes[3]; //保留 +}NET_DVR_PASSBACK_DAY, *LPNET_DVR_PASSBACK_DAY; + +typedef struct tagNET_DVR_PASSBACK_SCHED +{ + NET_DVR_SCHEDTIME struPassBackTime; //回传任务时间段,开始时间-结束时间 + BYTE byRes[4]; //保留 +}NET_DVR_PASSBACK_SCHED, *LPNET_DVR_PASSBACK_SCHED; + +//录像回传计划参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_SCH_CFG_ +{ + DWORD dwSize; + BYTE byEnable; //是否启用,0--不启用,1--启用 + BYTE byPassBackWeek; //是否按周回传,0--否,1--是,值为1时struPassBackDay、struPassBackSched无效 + BYTE byRes1[2]; //保留 + NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //全天回传计划 + NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //时间段回传计划 + BYTE byRes[128]; //保留 +}NET_DVR_RECORD_PASSBACK_SCH_CFG, *LPNET_DVR_RECORD_PASSBACK_SCH_CFG; + +//回传历史录像计划参数 +typedef struct tagNET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG_ +{ + DWORD dwSize; //版本头 + BYTE byEnable; //是否启用,0--不启用,1--启用 + BYTE byRes1[3]; //保留 + NET_DVR_PASSBACK_DAY struPassBackDay[MAX_DAYS]; //全天回传计划 + NET_DVR_PASSBACK_SCHED struPassBackSched[MAX_DAYS][MAX_TIMESEGMENT_V30]; //时间段回传计划 + BYTE byRes[256]; //保留 +}NET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG, *LPNET_DVR_RECORD_PASSBACK_HISTORY_PLAN_CFG; + +//录像卷参数 +typedef struct tagNET_DVR_DEV_STORAGE_CFG +{ + DWORD dwSize; + DWORD dwCapacityTotal; //设备存储(CVR表示录像卷)总容量(只读),单位MB + DWORD dwFreeSpaceTotal; //设备存储(CVR表示录像卷)剩余总空间(只读),单位MB + DWORD dwLockedRecordSpace; //设备已加锁录像存储(CVR表示录像卷)总容量(只读),单位MB + DWORD dwUnLockedSpace; //设备未加锁存储(CVR表示录像卷)总容量(只读),包含未加锁录像和剩余存储空间,单位MB + BYTE byRes[512]; //保留 +}NET_DVR_DEV_STORAGE_CFG, *LPNET_DVR_DEV_STORAGE_CFG; + +//一键配置CVR(V50) +typedef struct tagNET_DVR_ONE_KEY_CFG_V50 +{ + DWORD dwSize;//结构体大小 + BYTE byRaidType; //RAID类型:0-raid5,1-raid6,2-raid95(Vraid),3-单盘模式,即不创建raid + BYTE bySpareRaidProportion; //热备盘:raid(阵列)的比例,0--(0:1),1--(1:1),2--(1:2),3--(1:3),4--(1:4),5--(1:5),6--(1:6),7--(6:1),8--(5:1),9--(4:1),10--(3:1),11--(2:1) + BYTE byPicQuota; //图片卷比例:范围0~100 + BYTE byRes[257]; +}NET_DVR_ONE_KEY_CFG_V50, *LPNET_DVR_ONE_KEY_CFG_V50; + +typedef struct tagNET_DVR_ONE_KEY_RESULT_V51 +{ + DWORD dwState; //状态值,详见备注的状态值 + BYTE byProgress; //操作进度,0~100 + BYTE byRes[259]; +}NET_DVR_ONE_KEY_RESULT_V51, *LPNET_DVR_ONE_KEY_RESULT_V51; + +typedef struct tagNET_DVR_ONE_KEY_CFG_SAN_V50 +{ + DWORD dwSize;//结构体大小 + BYTE byRaidType; //RAID类型:0-raid5,1-raid6 + BYTE bySpareRaidProportion; //热备盘:raid(阵列)的比例,0--(0:1),1--(1:1),2--(1:2),3--(1:3),4--(1:4),5--(1:5),6--(1:6),7--(6:1),8--(5:1),9--(4:1),10--(3:1),11--(2:1) + BYTE byRes[254]; +}NET_DVR_ONE_KEY_CFG_SAN_V50, *LPNET_DVR_ONE_KEY_CFG_SAN_V50; + +typedef struct tagNET_DVR_REC_PASSBACK_BASIC_CFG +{ + DWORD dwSize;//结构体大小 + DWORD dwStartTime; //检测窗口开始时间(单位:分钟) + DWORD dwStopTime; //检测窗口结束时间(单位:分钟) + WORD wMaxTotalConcurrenceNum; //并发回传路数上限,针对的是编码器路数,不是回传任务条数 + WORD wMaxDvrConcurrenceNum; //单台DVR并发回传通道数上限 + DWORD dwSyncSpeed; //回传速率(单位Mbps,上限为12Mbps) + DWORD dwRecordType; //录像类型: 0xffffffff-全部,0-定时,1-移动侦测,2-报警,0xff-其他 + BYTE byRes[248]; +}NET_DVR_REC_PASSBACK_BASIC_CFG, *LPNET_DVR_REC_PASSBACK_BASIC_CFG; + +//设备连接的用户参数 +typedef struct tagNET_DVR_ONLINE_USER_INFO_ +{ + DWORD dwSize; + WORD wOnlineUserCount; //登录设备的用户数 + BYTE byRes[514]; //保留 +}NET_DVR_ONLINE_USER_INFO, *LPNET_DVR_ONLINE_USER_INFO; + +//查询录像总大小条件参数 +typedef struct tagNET_DVR_RECORD_SEGMENT_COND_ +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreanInfo; + NET_DVR_TIME_EX struStartTime; //开始时间 + NET_DVR_TIME_EX struStopTime; //结束时间 + BYTE byRes[256]; //保留 +}NET_DVR_RECORD_SEGMENT_COND, *LPNET_DVR_RECORD_SEGMENT_COND; + +//查询录像总大小返回参数 +typedef struct tagNET_DVR_RECORD_SEGMENT_RET_ +{ + DWORD dwSize; + DWORD dwRecordTotalSize; //录像总大小,单位MB + BYTE byRes[256]; //保留 +}NET_DVR_RECORD_SEGMENT_RET, *LPNET_DVR_RECORD_SEGMENT_RET; +typedef struct tagNET_DVR_ACCESSORY_CARD_INFO +{ + DWORD dwSize; + BYTE szAccessoryCardInfo[MAX_ACCESSORY_CARD/*256*/];//配件板(智能板和拼控板)型号信息 + BYTE byRes[512]; +}NET_DVR_ACCESSORY_CARD_INFO, *LPNET_DVR_ACCESSORY_CARD_INFO; +//查询信息条件结构体 +typedef struct tagNET_DVR_SEARCH_INFO_COND +{ + DWORD dwSize; + BYTE byCommand; //查询条件,0-个人,1-所有 + BYTE byRes1[3]; + DWORD dwEmployeeNo; //工号(查询条件配置为0-个人时有效) + BYTE byName[NAME_LEN]; //姓名(查询条件配置为0-个人时有效) + NET_DVR_TIME_V30 struStartTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + BYTE byRes[128]; //保留 +}NET_DVR_SEARCH_INFO_COND, *LPNET_DVR_SEARCH_INFO_COND; + +//获取排班信息 +typedef struct tagNET_DVR_SCHEDULE_CHOICE +{ + BYTE byScheduleType; //班次类型,0-不排班、1-普通班、2-工时班 + BYTE byScheduleNo; //班次编号 + BYTE byRes[14]; //保留 +}NET_DVR_SCHEDULE_CHOICE, *LPNET_DVR_SCHEDULE_CHOICE; +// B20 V1.5 +typedef struct tagNET_DVR_DISPINPUT_CFG +{ + DWORD dwSize; + DWORD dwDispInputNo; //显示输入号 + DWORD dwEDIDFileNo; //关联的EDID文件编号 + BYTE byRes[32]; +}NET_DVR_DISPINPUT_CFG, *LPNET_DVR_DISPINPUT_CFG; + +//排班计划结构体 +typedef struct tagNET_DVR_SCHEDULE_PLAN +{ + DWORD dwSize; + BYTE bySchedulePlanNo; //排班计划编号,起始范围根据能力集返回 + BYTE bySchedulePlanType; //排班计划类型,0-个人、1-部门 + BYTE byEnable; //使能 + BYTE byRes1; + NET_DVR_SCHEDULE_CHOICE struScheduleChoice[DAYS_A_WEEK]; //班次选择 + NET_DVR_TIME_V30 struStartTime; //开始时间 + NET_DVR_TIME_V30 struEndTime; //结束时间 + BYTE byHolidayNo; //假日组编号 + BYTE byRes[63]; //保留 +}NET_DVR_SCHEDULE_PLAN, *LPNET_DVR_SCHEDULE_PLAN; +typedef struct tagNET_DVR_DISPINPUT_CFG_LIST +{ + DWORD dwSize; + DWORD dwDispInputNum; //返回的NET_DVR_DISPINPUT_CFG结构的个数 + LPNET_DVR_DISPINPUT_CFG lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 + BYTE byRes[32]; +}NET_DVR_DISPINPUT_CFG_LIST, *LPNET_DVR_DISPINPUT_CFG_LIST; + +//获取排班信息 +typedef struct tagNET_DVR_SCHEDULE_INFO_CFG +{ + DWORD dwSize; + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_SCHEDULE_PLAN struSchedulePlan; //排班计划 + BYTE byRes[128]; //保留 +}NET_DVR_SCHEDULE_INFO_CFG, *LPNET_DVR_SCHEDULE_INFO_CFG; + +//获取考勤汇总信息 +typedef struct tagNET_DVR_ATTENDANCE_SUMMARY_CFG +{ + DWORD dwSize; + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + DWORD dwWorkStandard; //标准工作时间(分钟) + DWORD dwWorkActual; //实际工作时间(分钟) + DWORD dwLateTimes; //迟到次数 + DWORD dwLateMinutes;//迟到累计时间(分钟) + DWORD dwLeaveEarlyTimes; //早退次数 + DWORD dwLeaveEarlyMinutes; //早退累计时间(分钟) + DWORD dwOvertimeStandard; //标准加班时间(分钟) + DWORD dwOvertimeActual; //实际加班时间(分钟) + DWORD dwAttendanceStandard; //标准出勤天数(天) + DWORD dwAttendanceActual; //实际出勤天数(天) + DWORD dwAbsentDays; //旷工天数(天) + BYTE byRes[128]; //保留 +}NET_DVR_ATTENDANCE_SUMMARY_CFG, *LPNET_DVR_ATTENDANCE_SUMMARY_CFG; + +//获取考勤记录信息 +typedef struct tagNET_DVR_ATTENDANCE_RECORD_CFG +{ + DWORD dwSize; + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_TIME_V30 struAttendanceTime; //考勤时间 + BYTE byRes[128]; //保留 +}NET_DVR_ATTENDANCE_RECORD_CFG, *LPNET_DVR_ATTENDANCE_RECORD_CFG; + +//考勤时间段信息 +typedef struct tagNET_DVR_ATTENDANCE_TIME +{ + NET_DVR_TIME_V30 struOnDutyTime; //上班时间 + NET_DVR_TIME_V30 struOffDutyTime; //下班时间 +}NET_DVR_ATTENDANCE_TIME, *LPNET_DVR_ATTENDANCE_TIME; + +//获取异常统计信息 +typedef struct tagNET_DVR_ABNORMAL_CFG +{ + DWORD dwSize; + DWORD dwEmployeeNo; //工号 + BYTE byName[NAME_LEN]; //姓名 + BYTE byDepartmentName[NAME_LEN]; //部门名称 + NET_DVR_ATTENDANCE_TIME struAttendanceTime[ABNORMAL_INFO_NUM]; //异常时间段 + DWORD dwLateMinutes; //迟到时间(分钟) + DWORD dwLeaveEarlyMinutes; //早退时间(分钟) + DWORD dwAbsenceMinutes; //缺勤时间(分钟) + DWORD dwTotalMinutes; //合计时间(分钟) + BYTE byRes[128]; //保留 +}NET_DVR_ABNORMAL_CFG, *LPNET_DVR_ABNORMAL_CFG; + +typedef struct tagNET_DVR_CARD_CFG_V50 +{ + DWORD dwSize; + DWORD dwModifyParamType; + // 需要修改的卡参数,设置卡参数时有效,按位表示,每位代表一种参数,1为需要修改,0为不修改 + // #define CARD_PARAM_CARD_VALID 0x00000001 //卡是否有效参数 + // #define CARD_PARAM_VALID 0x00000002 //有效期参数 + // #define CARD_PARAM_CARD_TYPE 0x00000004 //卡类型参数 + // #define CARD_PARAM_DOOR_RIGHT 0x00000008 //门权限参数 + // #define CARD_PARAM_LEADER_CARD 0x00000010 //首卡参数 + // #define CARD_PARAM_SWIPE_NUM 0x00000020 //最大刷卡次数参数 + // #define CARD_PARAM_GROUP 0x00000040 //所属群组参数 + // #define CARD_PARAM_PASSWORD 0x00000080 //卡密码参数 + // #define CARD_PARAM_RIGHT_PLAN 0x00000100 //卡权限计划参数 + // #define CARD_PARAM_SWIPED_NUM 0x00000200 //已刷卡次数 + // #define CARD_PARAM_EMPLOYEE_NO 0x00000400 //工号 + // #define CARD_PARAM_NAME 0x00000800 //姓名 + // #define CARD_PARAM_DEPARTMENT_NO 0x00001000 //部门编号 + // #define CARD_SCHEDULE_PLAN_NO 0x00002000 //排班计划编号 + // #define CARD_SCHEDULE_PLAN_TYPE 0x00004000 //排班计划类型 + // #define CARD_ROOM_NUMBER 0x00008000 //房间号 + // #define CARD_SIM_NO 0x00010000 //SIM卡号(手机号) + // #define CARD_FLOOR_NUMBER 0x00020000 //楼层号 + // #define CARD_USER_TYPE 0x00040000 //用户类型 + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byCardValid; //卡是否有效,0-无效,1-有效(用于删除卡,设置时置为0进行删除,获取时此字段始终为1) + BYTE byCardType; //卡类型,1-普通卡,2-特殊群体卡,3-禁止名单卡,4-巡更卡,5-胁迫卡,6-超级卡,7-来宾卡,8-解除卡,9-员工卡,10-应急卡,11-应急管理卡(用于授权临时卡权限,本身不能开门),12-ESD全检卡,13-ESD免检卡,14-ESD足检卡,15-ESD手检卡,默认普通卡 + BYTE byLeaderCard; //是否为首卡,1-是,0-否 + BYTE byUserType; // 0 – 普通用户1 - 管理员用户; + BYTE byDoorRight[MAX_DOOR_NUM_256]; //门权限(楼层权限、锁权限),按位表示,1为有权限,0为无权限,从低位到高位表示对门(锁)1-N是否有权限 + NET_DVR_VALID_PERIOD_CFG struValid; //有效期参数 + BYTE byBelongGroup[MAX_GROUP_NUM_128]; //所属群组,按字节表示,1-属于,0-不属于 + BYTE byCardPassword[CARD_PASSWORD_LEN]; //卡密码 + WORD wCardRightPlan[MAX_DOOR_NUM_256][MAX_CARD_RIGHT_PLAN_NUM]; //卡权限计划,取值为计划模板编号,同个门(锁)不同计划模板采用权限或的方式处理 + DWORD dwMaxSwipeTime; //最大刷卡次数,0为无次数限制(开锁次数) + DWORD dwSwipeTime; //已刷卡次数 + WORD wRoomNumber; //房间号 + SHORT wFloorNumber; //层号 + DWORD dwEmployeeNo; //工号(用户ID) + BYTE byName[NAME_LEN]; //姓名 + WORD wDepartmentNo; //部门编号 + WORD wSchedulePlanNo; //排班计划编号 + BYTE bySchedulePlanType; //排班计划类型:0-无意义、1-个人、2-部门 + BYTE byRightType; //下发权限类型:0-普通发卡权限、1-二维码权限、2-蓝牙权限(可视对讲设备二维码权限配置项:房间号、卡号(虚拟卡号)、最大刷卡次数(开锁次数)、有效期参数;蓝牙权限:卡号(萤石APP账号)、其他参数配置与普通发卡权限一致) + BYTE byRes2[2]; + DWORD dwLockID; //锁ID + BYTE byLockCode[MAX_LOCK_CODE_LEN]; //锁代码 + BYTE byRoomCode[MAX_DOOR_CODE_LEN]; //房间代码 + //按位表示,0-无权限,1-有权限 + //第0位表示:弱电报警 + //第1位表示:开门提示音 + //第2位表示:限制客卡 + //第3位表示:通道 + //第4位表示:反锁开门 + //第5位表示:巡更功能 + DWORD dwCardRight; //卡权限 + DWORD dwPlanTemplate; //计划模板(每天)各时间段是否启用,按位表示,0--不启用,1-启用 + DWORD dwCardUserId; //持卡人ID + BYTE byCardModelType; //0-空,1- M1 S50,2- M1 S70,3- FM1208 CPU卡,4- FM1216 CPU卡,5-国密CPU卡,6-身份证,7- NFC + BYTE byRes3[51]; + BYTE bySIMNum[NAME_LEN/*32*/]; //SIM卡号(手机号) +}NET_DVR_CARD_CFG_V50, *LPNET_DVR_CARD_CFG_V50; + +typedef struct tagNET_DVR_CAPTURE_FINGERPRINT_COND +{ + DWORD dwSize; + BYTE byFingerPrintPicType; //图片类型:0-无意义 + BYTE byFingerNo; //手指编号,范围1-10 + BYTE byRes[126]; +}NET_DVR_CAPTURE_FINGERPRINT_COND, *LPNET_DVR_CAPTURE_FINGERPRINT_COND; + +typedef struct tagNET_DVR_CAPTURE_FINGERPRINT_CFG +{ + DWORD dwSize; + DWORD dwFingerPrintDataSize; //指纹数据大小 + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + DWORD dwFingerPrintPicSize; //指纹图片大小,等于0时,代表无指纹图片数据 + char* pFingerPrintPicBuffer; //指纹图片缓存 + BYTE byFingerNo; //手指编号,范围1-10 + BYTE byFingerPrintQuality; //指纹质量,范围1-100 + BYTE byRes[62]; +}NET_DVR_CAPTURE_FINGERPRINT_CFG, *LPNET_DVR_CAPTURE_FINGERPRINT_CFG; + +typedef struct tagNET_DVR_CAPTURE_FACE_COND +{ + DWORD dwSize; + BYTE byRes[128]; +}NET_DVR_CAPTURE_FACE_COND, *LPNET_DVR_CAPTURE_FACE_COND; + +typedef struct tagNET_DVR_FACE_FEATURE +{ + NET_VCA_RECT struFace; //人脸子图区域 + NET_VCA_POINT struLeftEye; // 左眼坐标 + NET_VCA_POINT struRightEye; // 右眼坐标 + NET_VCA_POINT struLeftMouth; // 嘴左边坐标 + NET_VCA_POINT struRightMouth; // 嘴右边坐标 + NET_VCA_POINT struNoseTip; // 鼻子坐标 +}NET_DVR_FACE_FEATURE, *LPNET_DVR_FACE_FEATURE; + + +typedef struct tagNET_DVR_CAPTURE_FACE_CFG +{ + DWORD dwSize; + DWORD dwFaceTemplate1Size; //人脸模板1数据大小,等于0时,代表无人脸模板1数据 + char* pFaceTemplate1Buffer; //人脸模板1数据缓存(不大于2.5k) + DWORD dwFaceTemplate2Size; //人脸模板2数据大小,等于0时,代表无人脸模板2数据 + char* pFaceTemplate2Buffer; //人脸模板2数据缓存(不大于2.5K) + DWORD dwFacePicSize; //人脸图片数据大小,等于0时,代表无人脸图片数据 + char* pFacePicBuffer; //人脸图片数据缓存 + BYTE byFaceQuality1; //人脸质量,范围1-100 + BYTE byFaceQuality2; //人脸质量,范围1-100 + BYTE byCaptureProgress; //采集进度,目前只有两种进度值:0-未采集到人脸,100-采集到人脸(只有在进度为100时,才解析人脸信息) + BYTE byFacePicQuality; //人脸图片中人脸质量 + DWORD dwInfraredFacePicSize; //红外人脸图片数据大小,等于0时,代表无人脸图片数据 + char* pInfraredFacePicBuffer; //红外人脸图片数据缓存 + BYTE byInfraredFacePicQuality; //红外人脸图片中人脸质量 + BYTE byRes1[3]; + NET_DVR_FACE_FEATURE struFeature; //人脸抠图特征信息 + BYTE byRes[56]; +}NET_DVR_CAPTURE_FACE_CFG, *LPNET_DVR_CAPTURE_FACE_CFG; + +//查询手动回传任务可执行性条件参数 +typedef struct tagNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节) + BYTE byRes[128]; //保留 +}NET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND, *LPNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_SEND; + +//查询手动回传任务可执行性条件参数 +typedef struct tagNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET +{ + DWORD dwSize; + NET_DVR_STREAM_INFO struStreamInfo; //流id信息(72字节) + BYTE byExecutable; //0-不可立即回传,1-可立即执行回传 + BYTE byUnexecutableReason; //不可立即回传原因, 0-需要排队,1-编码器无连接,2-流ID不存在,3-CVR异常,4-无输入视频, 5-编码器用户名或密码错, 6-前端设备不兼容, 7-其他原因 + BYTE byRes[254]; //保留 +}NET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET, *LPNET_DVR_REC_PASSBACK_MANUAL_EXECUTABLE_RET; + +typedef struct tagNET_DVR_STREAM_MEDIA_CFG +{ + DWORD dwSize; + BYTE sUrl[MAX_URL_LEN]; + NET_DVR_IPADDR struDMSIP; /* dms IP地址 */ + WORD wDMSPort; /*dms 端口号 */ + BYTE byRes1[2]; + DWORD dwDomainID; /*域ID,用来支持多网域,由平台管理*/ + BYTE byRes[360]; //保留 +}NET_DVR_STREAM_MEDIA_CFG, *LPNET_DVR_STREAM_MEDIA_CFG; + +//船只检测单个区域配置 +typedef struct tagNET_DVR_SHIPSDETECTION_REGION_CFG +{ + + BYTE byRuleID; + BYTE byEnable; //使能 + BYTE bySensitivity; //灵敏度参数,范围[1,100] + BYTE byFrameOverlayEnabled;//视频是否叠加检测框 + BYTE byRes[36]; + NET_ITC_POLYGON struPolygon; //触发区域 + NET_VCA_LINE struTriggerLine; //触发线 +}NET_DVR_SHIPSDETECTION_REGION_CFG, *LPNET_DVR_SHIPSDETECTION_REGION_CFG; + +typedef struct tagNET_DVR_SHIPSDETECTION_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byRes1[3]; + float fLookDownUpAngle;//设备俯仰角度,精确到小数点后一位 + float fHorizontalHeight;//设备水平高度,精确到小数点后一位 + NET_DVR_SHIPSDETECTION_REGION_CFG struShipsDetectionRegion[MAX_SHIPSDETE_REGION_NUM];//船只检测单个区域配置 + BYTE byRes[256]; +}NET_DVR_SHIPSDETECTION_CFG, *LPNET_DVR_SHIPSDETECTION_CFG; + +typedef struct tagNET_DVR_TEMPERATURE_COLOR +{ + /* + 选择0~高温报警类型时,字段生效,当高于该温度值时,会有进行颜色标注, + 选择1~低温报警类型时, 字段生效,当低于该温度值时,会有进行颜色标注。 + 选择2~区间报警类型时,字段生效,当在温度在该温度区间时,会有进行颜色标注。 + 选择3~保温报警类型时,字段生效,当温度不在该温度区间时,会有进行颜色标注。 + 选择4~为无报警类型,字段生效,关闭报警,*/ + BYTE byType;//测温报警颜色控制类型,0~无报警类型(关闭),1~高温报警类型,2~低温报警类型,3~区间报警类型,4~保温报警类型 + BYTE byRes1[3]; + int iHighTemperature;//高温值,-273~10000 + int iLowTemperature;//低温值,-273~10000 + BYTE byRes[8]; +}NET_DVR_TEMPERATURE_COLOR, *LPNET_DVR_TEMPERATURE_COLOR; + +typedef struct tagNET_DVR_THERMOMETRY_BASICPARAM +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byStreamOverlay; //码流叠加温度信息:0- 否,1- 是 + BYTE byPictureOverlay;//抓图叠加温度信息:0- 否,1- 是 + BYTE byThermometryRange;//测温范围: 0-默认值,1-(-20~150),2-(0~550)(这里以摄氏度为单位计算),3-(摄氏度:0-650℃;华氏温度:32-1200℉),4-(摄氏度: -40-150℃),5-(摄氏度: 0~1200℃)(这里以摄氏度为单位计算,根据测温单位设定不同测温范围的显示),6-(摄氏度: -20-120℃,7-(摄氏度:20~350℃), 8-(摄氏度:20~45),9-(摄氏度:30~45),0xff-自动 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K)。 + BYTE byThermometryCurve;//测温曲线模式显示方式,0-关闭,1-模式1(横向温度趋势线模式),2-模式2(纵向温度趋势线模式) + BYTE byFireImageModea;//消防图像模式,0-保留,1-黑白模式,2-热探测模式,3-火场模式(字段0目前保留,避免与之前接口不兼容) + BYTE byShowTempStripEnable;//显示温度条使能:0- 否,1- 是 + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) + BYTE byEnviroHumidity;//环境相对湿度,取值范围:0~100% + BYTE byRes2[2]; + NET_DVR_TEMPERATURE_COLOR struTempColor;//测温报警颜色 + int iEnviroTemperature;//环境温度,取值范围:-273~10000摄氏度 + int iCorrectionVolume;//测温修正量,取值范围:-100~100 + /* bit0-中心点测温:0-不显示,1-显示; + bit1-最高点测温:0-不显示,1-显示; + bit2-最低点测温:0-不显示,1-显示; + */ + BYTE bySpecialPointThermType;// 特殊测温点显示 + BYTE byReflectiveEnabled;//反射温度使能:0- 否,1- 是 + WORD wDistance;//距离(m)[0, 10000] + float fReflectiveTemperature;//反射温度 精确到小数后一位 + float fAlert;//预警温度阈值,-100.0-1000.0度(精确到小数点后一位) + float fAlarm;//报警温度阈值,-100.0-1000.0度(精确到小数点后一位) + float fThermalOpticalTransmittance;// 光学透过率, 精确到小数点后3位,范围0.001-1.000,默认1.000 + float fExternalOpticsWindowCorrection;//外部光学温度,默认值20℃,范围为-40.0~80.0℃,实际显示单位以界面显示为准 + BYTE byDisplayMaxTemperatureEnabled;// 显示最高温 0-不显示 1-显示 + BYTE byDisplayMinTemperatureEnabled;// 显示最低温 0-不显示 1-显示 + BYTE byDisplayAverageTemperatureEnabled;// 显示平均温 0-不显示 1-显示 + BYTE byThermometryInfoDisplayposition;// 测温信息显示位置 0-保留 1-规则 2-屏幕左上角 + DWORD dwAlertFilteringTime;//温度预警等待时间,单位秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 + BYTE byemissivityMode; //发射率配置类型 1-粗糙,2-较粗糙,3-较光滑, 4-光滑, 0xff-自定义 + BYTE bydisplayTemperatureInOpticalChannelEnabled;//可见光显示温度信息使能,0-不启用,1启用 + BYTE byDisplayCentreTemperatureEnabled;// 显示中心点温度 0-不显示 1-显示 + BYTE byRes[49]; +}NET_DVR_THERMOMETRY_BASICPARAM, *LPNET_DVR_THERMOMETRY_BASICPARAM; + +typedef struct tagNET_DVR_THERMOMETRY_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChannel; + WORD wPresetNo;//0-保留 + BYTE byRes[62]; +}NET_DVR_THERMOMETRY_COND, *LPNET_DVR_THERMOMETRY_COND; + +typedef struct tagNET_DVR_THERMOMETRY_PRESETINFO_PARAM +{ + BYTE byEnabled; //是否使能:0- 否,1- 是 + BYTE byRuleID;//规则ID 0-表示无效,从1开始 (list内部判断数据有效性) + WORD wDistance;//距离(m)[0, 10000] + float fEmissivity;//发射率(发射率 精确到小数点后两位)[0.01, 1.00](即:物体向外辐射能量的本领) + BYTE byDistanceUnit;//距离单位: 0-米(m),1-英尺(feet),2-厘米(centimeter) + BYTE byRes[2]; + BYTE byReflectiveEnabled;//反射温度使能:0- 否,1- 是 + float fReflectiveTemperature;//反射温度 精确到小数后2位 + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byemissivityMode; //发射率配置类型 1-粗糙,2-较粗糙,3-较光滑, 4-光滑, 0xff-自定义 + BYTE byRes1[62]; + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为"点"的时候生效) + NET_VCA_POLYGON struRegion;//区域、线(当规则标定类型为"框"或者"线"的时候生效) +}NET_DVR_THERMOMETRY_PRESETINFO_PARAM, *LPNET_DVR_THERMOMETRY_PRESETINFO_PARAM; + + +typedef struct tagNET_DVR_THERMOMETRY_PRESETINFO +{ + DWORD dwSize;//结构体大小 + WORD wPresetNo;//0-保留 + BYTE byRes[2]; + NET_DVR_THERMOMETRY_PRESETINFO_PARAM struPresetInfo[MAX_THERMOMETRY_REGION_NUM/*40*/]; +}NET_DVR_THERMOMETRY_PRESETINFO, *LPNET_DVR_THERMOMETRY_PRESETINFO; + + +typedef struct tagNET_DVR_BASE_STATION_INFO_ALARM +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + char sNetBarWaCode[16];//场所编号 + char sCollectionEquipmentID[24];//采集设备编号 + char sMCC[4];//移动国家码 + char sMNC[4];//移动网络码 + char sLAC[36];//位置区码 + char sCI[36];//小区识别码 + char sBSCI[36];//基站识别码 + char sBCCH[36];//公共广播信道 + char sLEV[36];//接收报告电平 + char sCollectionEquipmentLongitude[12];//采集设备经度 + char sCollectionEquipmentLatitude[12];//采集设备纬度 + char sCaptureTime[20];//采集时间 时间格式yyyy-MM-dd hh:mm:ss + BYTE byRes[256]; +}NET_DVR_BASE_STATION_INFO_ALARM, *LPNET_DVR_BASE_STATION_INFO_ALARM; + + +typedef struct tagNET_DVR_THERMOMETRY_ALARMRULE_PARAM +{ + BYTE byEnable; + BYTE byRuleID;//规则ID + BYTE byRule;//报警温度比较方式 0-高温大于,1-高温小于,2-低温大于,3-低温小于,4-平均温大于,5-平均温小于,6-温差大于,7-温差小于 + BYTE byRes; + char szRuleName[NAME_LEN];//规则名称 + float fAlert;//预警温度 + float fAlarm;//报警温度 + float fThreshold;//门限温度 + DWORD dwAlertFilteringTime;//温度预警等待时间,单位秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 + BYTE byRes1[56]; +}NET_DVR_THERMOMETRY_ALARMRULE_PARAM, *LPNET_DVR_THERMOMETRY_ALARMRULE_PARAM; + +typedef struct tagNET_DVR_THERMOMETRY_ALARMRULE +{ + DWORD dwSize;//结构体大小 + NET_DVR_THERMOMETRY_ALARMRULE_PARAM struThermometryAlarmRuleParam[THERMOMETRY_ALARMRULE_NUM]; + BYTE byRes[128]; +}NET_DVR_THERMOMETRY_ALARMRULE, *LPNET_DVR_THERMOMETRY_ALARMRULE; + + +typedef struct tagNET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM +{ + BYTE byEnable; + BYTE byRuleID;//规则ID,0-表示无效,范围值从1开始 + BYTE byAlarmID1; + BYTE byAlarmID2; + BYTE byRule;//报警温度比较方式0-高温大于,1-高温小于,2-低温大于,3-低温小于,4-平均温大于,5-平均温小于,6-温差大于,7-温差小于 + BYTE byRes[3]; + float fTemperatureDiff;//温差值 + DWORD dwAlarmFilteringTime;//温度报警等待时间,单位秒 + BYTE byRes1[28]; +}NET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM, *LPNET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM; + +typedef struct tagNET_DVR_THERMOMETRY_DIFFCOMPARISON +{ + DWORD dwSize;//结构体大小 + NET_DVR_THERMOMETRY_DIFFCOMPARISON_PARAM struDiffComparison[MAX_THERMOMETRY_DIFFCOMPARISON_NUM/*8*/]; + BYTE byRes[64]; +}NET_DVR_THERMOMETRY_DIFFCOMPARISON, *LPNET_DVR_THERMOMETRY_DIFFCOMPARISON; + + +//实时温度检测条件结构 +typedef struct tagNET_DVR_REALTIME_THERMOMETRY_COND +{ + DWORD dwSize; + DWORD dwChan;//通道号,从1开始,0xffffffff代表获取全部通道 + BYTE byRuleID; //规则ID 0-代表获取全部规则,具体规则ID从1开始 + /* + 1-定时模式:设备每隔一秒上传各个规则测温数据的最高温、最低温和平均温度值、温差 + 2-温差模式:若上一秒与下一秒的最高温或者最低温或者平均温或者温差值的温差大于等于2摄氏度,则上传最高温、最低温和平均温度值。若大于等于一个小时温差值均小于2摄氏度,则上传最高温、最低温、平均温和温差值 + */ + BYTE byMode; //长连接模式, 0-保留(为兼容老设备),1-定时模式,2-温差模式 + WORD wInterval; //上传间隔,仅温差模式支持,1~3600S,填0则默认3600S上传一次 + float fTemperatureDiff;//温差 + BYTE byRes[56]; //保留 +}NET_DVR_REALTIME_THERMOMETRY_COND, *LPNET_DVR_REALTIME_THERMOMETRY_COND; + +typedef struct tagNET_DVR_POINT_THERM_CFG +{ + float fTemperature;//当前温度 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为点的时候生效) + BYTE byRes[120]; +}NET_DVR_POINT_THERM_CFG, *LPNET_DVR_POINT_THERM_CFG; + +typedef struct tagNET_DVR_LINEPOLYGON_THERM_CFG +{ + float fMaxTemperature;//最高温 + float fMinTemperature;//最低温 + float fAverageTemperature;//平均温 + float fTemperatureDiff;//温差 + NET_VCA_POLYGON struRegion;//区域(当规则标定类型为框/线的时候生效) + BYTE byRes[32]; +}NET_DVR_LINEPOLYGON_THERM_CFG, *LPNET_DVR_LINEPOLYGON_THERM_CFG; + +typedef struct tagNET_DVR_THERMOMETRY_UPLOAD +{ + DWORD dwSize; + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + char szRuleName[NAME_LEN/*32*/];//规则名称 + BYTE byRuleID;//规则ID号 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2-线 + WORD wPresetNo; //预置点号 + NET_DVR_POINT_THERM_CFG struPointThermCfg; + NET_DVR_LINEPOLYGON_THERM_CFG struLinePolygonThermCfg; + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 + BYTE byRes1; + /* + bit0-中心点测温:0-不支持,1-支持; + bit1-最高点测温:0-不支持,1-支持; + bit2-最低点测温:0-不支持,1-支持; + */ + BYTE bySpecialPointThermType;// 是否支持特殊点测温 + float fCenterPointTemperature;//中心点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10 (由bySpecialPointThermType判断是否支持中心点) + float fHighestPointTemperature;//最高点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10(由bySpecialPointThermType判断是否支持最高点) + float fLowestPointTemperature;//最低点温度,精确到小数点后一位(-40-1500),(浮点数+100)*10(由bySpecialPointThermType判断是否支持最低点) + NET_VCA_POINT struHighestPoint;//线、框测温最高温度位置坐标(当规则标定类型为线、框的时候生效) + NET_VCA_POINT struLowestPoint;//线、框测温最低温度位置坐标(当规则标定类型为线、框的时候生效) + BYTE byIsFreezedata;//是否数据冻结 0-否 1-是 + BYTE byFaceSnapThermometryEnabled;//人脸抓拍测温使能 1-开启 0-关闭 + BYTE byRes2[2]; + DWORD dwChan; //通道号,查询条件中通道号为0xffffffff时该字段生效 + NET_VCA_RECT struFaceRect; //人脸子图区域 + DWORD dwTimestamp;//DSP时间戳 + BYTE byRes[68]; +}NET_DVR_THERMOMETRY_UPLOAD, *LPNET_DVR_THERMOMETRY_UPLOAD; + +//温度报警(检测温度和配置温度比较报警) +typedef struct tagNET_DVR_THERMOMETRY_ALARM +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byRuleID;//规则ID + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + WORD wPresetNo; //预置点号 + NET_PTZ_INFO struPtzInfo;//ptz坐标信息 + BYTE byAlarmLevel;//0-预警 1-报警 + BYTE byAlarmType;/*报警类型 0-最高温度 1-最低温度 2-平均温度 3-温差 4-温度突升 5-温度突降*/ + BYTE byAlarmRule;//0-大于,1-小于 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2线 + NET_VCA_POINT struPoint;//点测温坐标(当规则标定类型为点的时候生效) + NET_VCA_POLYGON struRegion;//区域(当规则标定类型为框的时候生效) + float fRuleTemperature;/*配置规则温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + float fCurrTemperature;/*当前温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + DWORD dwThermalInfoLen;//热成像附加信息长度 + char* pPicBuff; ///可见光图片指针 + char* pThermalPicBuff;// 热成像图片指针 + char* pThermalInfoBuff; //热成像附加信息指针 + NET_VCA_POINT struHighestPoint;//线、框测温最高温度位置坐标(当规则标定类型为线、框的时候生效) + float fToleranceTemperature;/* 容差温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwAlertFilteringTime;//温度预警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwAlarmFilteringTime;//温度报警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwTemperatureSuddenChangeCycle;//温度突变记录周期,单位秒 + float fTemperatureSuddenChangeValue;//温度突变值,精确到小数点后一位(大于0) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1[3]; + DWORD dwVisibleChannel; //可见光通道通道号 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + float fAlarmRuleTemperature;/* TMA测温配置规则温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + BYTE byRes[20]; +}NET_DVR_THERMOMETRY_ALARM, *LPNET_DVR_THERMOMETRY_ALARM; + + +//温差报警 +typedef struct tagNET_DVR_THERMOMETRY_DIFF_ALARM +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byAlarmID1;//规则AlarmID1 + BYTE byAlarmID2;//规则AlarmID2 + WORD wPresetNo; //预置点号 + BYTE byAlarmLevel;//0-预警 1-报警 + BYTE byAlarmType;/*报警类型 0-最高温度 1-最低温度 2-平均温度*/ + BYTE byAlarmRule;//0-大于,1-小于 + BYTE byRuleCalibType;//规则标定类型 0-点,1-框,2线 + NET_VCA_POINT struPoint[2];//点测温坐标(当规则标定类型为点的时候生效)数组下标0代表着AlarmID1,数组下标1代表着AlarmID2. + NET_VCA_POLYGON struRegion[2];//区域(当规则标定类型为框的时候生效)数组下标0代表着AlarmID1,数组下标1代表着AlarmID2. + float fRuleTemperatureDiff;/*配置规则温差,精确到小数点后一位(-40-1000))*/ + float fCurTemperatureDiff;/*当前温差,精确到小数点后一位(-40-1000),(浮点数+100) */ + NET_PTZ_INFO struPtzInfo;//ptz坐标信息 + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + DWORD dwThermalInfoLen;//热成像附加信息长度 + char* pPicBuff; ///可见光图片指针 + char* pThermalPicBuff;// 热成像图片指针 + char* pThermalInfoBuff; //热成像附加信息指针 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + BYTE byRes1[2]; + float fToleranceTemperature;/*容差温度,精确到小数点后一位(-40-1000),(浮点数+100) */ + DWORD dwAlarmFilteringTime;//温度报警等待时间 单位秒 范围为0-200秒,默认为0秒 + DWORD dwVisibleChannel; //可见光通道通道号 + BYTE byRes[48]; +}NET_DVR_THERMOMETRY_DIFF_ALARM, *LPNET_DVR_THERMOMETRY_DIFF_ALARM; + +typedef struct //条件结构 +{ + DWORD dwSize; + DWORD dwChannel;//通道号(前端默认是1) + BYTE byRes[128]; +}NET_DVR_SHIPSCOUNT_COND, *LPNET_DVR_SHIPSCOUNT_COND; + + +//获取船只计数信息结构 +typedef struct tagNET_DVR_SHIPSCOUNT_CFG +{ + DWORD dwSize; + DWORD dwUpShipsCount; //上行船只数 + DWORD dwDownShipsCount; //下行船只数 + DWORD dwLeftShipsCount; //左行船只数 + DWORD dwRightShipsCount; //右行船只数 + DWORD dwTotalCount;//船只总计数 + DWORD dwRelativeTime; //设备侧计数开始计数的相对时标 + DWORD dwAbsTime; //设备侧计数开始计数的绝对时标 + BYTE byDataType;//数据状态类型:0-检测中,1-开始,2-结束 + BYTE byRes[255]; +}NET_DVR_SHIPSCOUNT_CFG, *LPNET_DVR_SHIPSCOUNT_CFG; + +//船只信息 +typedef struct tagNET_DVR_SHIPSINFO +{ + float fShipsLength; //船只长度;1~1000.0m,精确到小数点后一位 + float fShipsHeight; //船只高度;1~1000.0m,精确到小数点后一位 + float fShipsWidth; //船只宽度;1~1000.0m,精确到小数点后一位 + float fShipsSpeed; //船只速度;1~1000.0m/s,精确到小数点后一位 + BYTE byShipsDirection;//船只方向;0~up,1~down,2~left,3~right + BYTE byShipsDetState;//船只检测状态;0~正跨越检测线,1~船头检测,2~船尾检测 + BYTE byTriggerLineID;//检测线ID + BYTE byRes[61]; + NET_VCA_POLYGON struShipsRect; //船只区域,归一化值,相对于大图(可见光图、热成像图)的分辨率 +} NET_DVR_SHIPSINFO, *LPNET_DVR_SHIPSINFO; + +//船只抓图信息 +typedef struct tagNET_DVR_SHIPIMAGE_INFO +{ + DWORD dwShipImageLen;//船只抓拍图片二进制数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; //船只抓拍图片二进制数据指针 +#else + char* pXmlBuf; //船只抓拍图片二进制数据指针 + BYTE byRes[4]; +#endif +}NET_DVR_SHIPIMAGE_INFO, *LPNET_DVR_SHIPIMAGE_INFO; + +//船只检测报警上传 +typedef struct tagNET_DVR_SHIPSDETECTION_ALARM +{ + DWORD dwSize; + NET_VCA_DEV_INFO struDevInfo; //设备信息 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byShipsNum; //船只数;(正跨越检测线的船只数) + BYTE byShipsNumHead;//船只数;(船头检测船只数) + BYTE byShipsNumEnd; //船只数;(船尾检测船只数) + BYTE byPicTransType; //图片数据传输方式: 0-二进制;1-url + NET_DVR_SHIPSINFO struShipInfo[MAX_SHIPS_NUM/*20*/];//船只信息;最大支持20艘 + DWORD dwPicLen;//可见光图片长度 + DWORD dwThermalPicLen;//热成像图片长度 + BYTE* pPicBuffer; //可见光图片数据指针 + BYTE* pThermalPicBuffer; //热成像图片数据指针 + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byTimeDiffFlag; /*时差字段是否有效 0-时差无效, 1-时差有效 */ + char cTimeDifferenceH; /*与UTC的时差(小时),-12 ... +14, +表示东区,,byTimeDiffFlag为1时有效*/ + char cTimeDifferenceM; /*与UTC的时差(分钟),-30, 30, 45, +表示东区,byTimeDiffFlag为1时有效*/ + BYTE bySID;//场景ID + BYTE byRes1[2]; + char szSceneName[NAME_LEN];//场景名称,不超过32字符 + BYTE byRes[132]; + DWORD dwXmlLen;//XML透传数据长度, 即EventNotificationAlert XML Block的数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block +#else + char* pXmlBuf; // XML报警信息指针,其XML对应到EventNotificationAlert XML Block + BYTE byRes2[4]; +#endif + NET_DVR_SHIPIMAGE_INFO struShipImageInfo[MAX_SHIPIMAGE_NUM/*6*/];//船只抓拍图片信息,数组下标为0时代表为第一张船只抓拍图片,以此类推;最大支持6张图片。 +}NET_DVR_SHIPSDETECTION_ALARM, *LPNET_DVR_SHIPSDETECTION_ALARM; + +typedef struct tagNET_DVR_THERMAL_PIP +{ + DWORD dwSize;//结构体大小 + BYTE byEnable;//是否启用 + BYTE byPipMode;// 画中画模式,0~叠加模式,1~融合模式,2-普通模式 + BYTE byOverlapType;//叠加类型,选择画中画叠加模式后生效。0~可见光叠加热成像图片,1~热成像叠加可见光图片 + BYTE byTransparency;//透明度 0~100 + NET_VCA_POLYGON struPipRegion;//画中画区域位置 + BYTE byImageFusionRatio;//图像融合比例,融合模式下生效 0-100 默认75 + BYTE byBorderFusionRatio;//边缘融合比例,融合模式下生效 0-100 默认100 + BYTE byRes1[2]; + float fDistance;//融合距离,融合模式下生效,范围0.1-4.0米 + BYTE byRes[632]; +}NET_DVR_THERMAL_PIP, *LPNET_DVR_THERMAL_PIP; + +typedef struct tagNET_DVR_RULESLINE_CFG +{ + NET_DVR_RGB_COLOR struRGB;// RGB参数:R(红色),G(绿色),B(蓝色) 范围0-255 + BYTE byRes[128]; +}NET_DVR_RULESLINE_CFG, *LPNET_DVR_RULESLINE_CFG; + +typedef struct tagNET_DVR_THERMAL_INTELRULE_DISPLAY +{ + DWORD dwSize;//结构体大小 + /* + fontSizeType:为字体大小倍率索引,播放库会根据该倍率以及预览窗口的宽度动态改变字体的大小。公式为:具体倍率值/8*(0.01*预览窗口宽度) + 倍率索引对应如下: + 0~8倍率(小) + 1~12倍率(标准) + 2~16倍率(大) + 3~20倍率(超大) + 4~24倍率(特大) + */ + BYTE byFontSizeType; + BYTE byRes1[3]; + NET_DVR_RULESLINE_CFG struNormalRulesLineCfg;//正常规则线相关属性参数 + NET_DVR_RULESLINE_CFG struAlertRulesLineCfg;//预警规则线相关属性参数 + NET_DVR_RULESLINE_CFG struAlarmRulesLineCfg;//报警规则线相关属性参数 + BYTE byRes[640]; +}NET_DVR_THERMAL_INTELRULE_DISPLAY, *LPNET_DVR_THERMAL_INTELRULE_DISPLAY; + +typedef struct tagNET_DVR_BAREDATAOVERLAY_CFG +{ + DWORD dwSize; + BYTE byEnable;//使能 + BYTE byIntervalTime;// 上传的时间间隔可配置:1 2 3 4 5.单位为秒,默认为3秒 + BYTE byRes[258]; +}NET_DVR_BAREDATAOVERLAY_CFG, *LPNET_DVR_BAREDATAOVERLAY_CFG; + +//测温联动条件结构 +typedef struct tagNET_DVR_THERMOMETRY_TRIGGER_COND +{ + DWORD dwSize;//结构体大小 + DWORD dwChan;//通道号 + DWORD dwPreset;//预置点号(目前不支持,无需赋值) + BYTE byRes[256]; +}NET_DVR_THERMOMETRY_TRIGGER_COND, *LPNET_DVR_THERMOMETRY_TRIGGER_COND; + +//手动除冰 +typedef struct tagNET_DVR_MANUALDEICING_CFG +{ + DWORD dwSize;//结构体大小 + BYTE byEnabled; //是否启用手动除冰 ,0~关闭,1~启用 + BYTE byRes[127]; +}NET_DVR_MANUALDEICING_CFG, *LPNET_DVR_MANUALDEICING_CFG; + +//小间距LED控制器 +typedef struct tagNET_DVR_INPUT_SOURCE_TEXT_COND +{ + DWORD dwSize; + DWORD dwInputSourceNo; //输入源编号 + DWORD dwTextNo; //文本编号 + BYTE byRes[32]; +}NET_DVR_INPUT_SOURCE_TEXT_COND, *LPNET_DVR_INPUT_SOURCE_TEXT_COND; + +typedef struct tagNET_DVR_INPUT_SOURCE_TEXT +{ + DWORD dwSize; + DWORD dwTextNo; //文本编号 + BYTE byEnable; //是否使能,0-不使能,1-使能 + BYTE byFontSize; //字体大小 + BYTE byBkGroudMode; //背景模式,1-透明,2-覆盖 + BYTE byRes[1]; + DWORD dwXPosition; //字符显示位置的左上角X坐标,输入源相对坐标 + DWORD dwYPosition; //字符显示位置的左上角Y坐标,输入源相对坐标 + NET_DVR_RGB_COLOR struForegroudColor; //字符前景色 + NET_DVR_RGB_COLOR struBackgroudColor; //字符背景色 + BYTE byTextContent[MAX_LEN_TEXT_CONTENT]; //字符内容 + BYTE byRes1[64]; +}NET_DVR_INPUT_SOURCE_TEXT, *LPNET_DVR_INPUT_SOURCE_TEXT; + +typedef struct tagNET_DVR_INPUT_SOURCE_TEXT_LIST +{ + DWORD dwSize; + NET_DVR_INPUT_SOURCE_TEXT struTextList[MAX_NUM_INPUT_SOURCE_TEXT]; //文本列表 + BYTE byRes[64]; +}NET_DVR_INPUT_SOURCE_TEXT_LIST, *LPNET_DVR_INPUT_SOURCE_TEXT_LIST; + +typedef struct tagNET_DVR_INPUT_SOURCE_RESOLUTION +{ + DWORD dwSize; + DWORD dwInputSignalNo; //输入源编号 + BYTE byEnabled; //自定义分辨率是否使能 + BYTE byRes; + WORD wImageWidth; //图像宽度 + WORD wImageHeight; //图像高度 + WORD wRefreshRate; //刷新频率 + BYTE byColorDepth; //颜色深度,32位、16位、8位三种可选 + BYTE byScanType; //扫描类型,1-逐行扫描,2-间隔扫描 + BYTE byRes1[62]; +}NET_DVR_INPUT_SOURCE_RESOLUTION, *LPNET_DVR_INPUT_SOURCE_RESOLUTION; + +typedef struct tagNET_DVR_INPUT_SOURCE_RESOLUTION_LIST +{ + DWORD dwSize; + DWORD dwInputSignalCnt; //设备输入信号源数量 + LPNET_DVR_INPUT_SOURCE_RESOLUTION lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 + BYTE byRes[32]; +}NET_DVR_INPUT_SOURCE_RESOLUTION_LIST, *LPNET_DVR_INPUT_SOURCE_RESOLUTION_LIST; + +typedef struct tagNET_DVR_LED_AREA_COND +{ + DWORD dwSize; + DWORD dwVideoWallNo; //电视墙编号 + DWORD dwLEDAreaNo; //LED区域编号 + BYTE byRes[32]; +}NET_DVR_LED_AREA_COND, *LPNET_DVR_LED_AREA_COND; + +typedef struct tagNET_DVR_LED_AREA_INFO +{ + DWORD dwSize; + DWORD dwLEDAreaNo; //LED区域编号 + NET_DVR_RECTCFG_EX struRect; //矩形区域 + DWORD dwaOutputNo[MAX_NUM_OUTPUT_CHANNEL]; //输出口列表 + BYTE byAreaType; //区域类型,0-LED区域,1-LCD区域 + BYTE byRes[31]; +}NET_DVR_LED_AREA_INFO, *LPNET_DVR_LED_AREA_INFO; + +typedef struct tagNET_DVR_LED_AREA_INFO_LIST +{ + DWORD dwSize; + DWORD dwLEDAreaNum; //LED区域数量 + LPNET_DVR_LED_AREA_INFO lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 + BYTE byRes[32]; +}NET_DVR_LED_AREA_INFO_LIST, *LPNET_DVR_LED_AREA_INFO_LIST; + +//呼叫等待参数 +typedef struct tagNET_DVR_CALL_WAITTING_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用呼叫等待, 0--不启用,1--启用 + BYTE byRes1; + WORD wWaitTime;//呼叫等待时间,单位秒 + WORD wCalledWaitTime;/*单位秒,被呼叫等待时间*/ + BYTE byRes[510]; +}NET_DVR_CALL_WAITTING_CFG, *LPNET_DVR_CALL_WAITTING_CFG; + +//警灯参数 +typedef struct tagNET_DVR_ALARM_LAMP_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用警灯定时闪烁, 0--不启用,1--启用 + BYTE byRes1; + WORD wFlashDuration;//警灯定时闪烁持续时间,单位秒 + WORD wFlashIntervalTime;//警灯闪烁间隔时间,单位秒 + BYTE byRes[510]; +}NET_DVR_ALARM_LAMP_CFG, *LPNET_DVR_ALARM_LAMP_CFG; + +//语音提示参数 +typedef struct tagNET_DVR_VOICE_PROMPTION_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byEnable; //是否启用语音提示, 0--不启用,1--启用 + BYTE byRes1[3]; + BYTE byCenterBusyFile[NAME_LEN];//中心繁忙提示语音文件名 + BYTE byRefusedFile[NAME_LEN];//拒绝提示语音文件名 + BYTE byHangUpFile[NAME_LEN];//对讲结束提示语音文件名 + BYTE byCallWaittingFile[NAME_LEN];//呼叫等候音文件名 + BYTE byConsultWaittingFile[NAME_LEN];//业务咨询等候音文件名 + BYTE byWelcomeFile[NAME_LEN];//欢迎提示语音文件名 + BYTE byFarewellFile[NAME_LEN];//欢送语音文件 + BYTE byCalledVoicePromptName[NAME_LEN];//被呼叫语音提示名 + BYTE byRes[384]; +}NET_DVR_VOICE_PROMPTION_CFG, *LPNET_DVR_VOICE_PROMPTION_CFG; + +//紧急报警处理 +typedef struct tagNET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG +{ + DWORD dwSize; //结构体大小 + BYTE byCommand; //控制命令,0--centerbusy,1--refuse + BYTE byType; //处理类型,0—紧急报警,1—业务咨询 + BYTE byRes[510]; +}NET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG, *LPNET_DVR_EMERGENCE_ALARM_RSP_CTRL_CFG; + +///////////*网络参数配置_V50///////////// +typedef struct _tagNET_DVR_ALARMHOST_NETPARAM_V50 +{ + DWORD dwSize; + NET_DVR_IPADDR struIP; + WORD wPort; + BYTE byAddressType; //0 - 无意义, 1 - ipv4/ipv6地址,2 - 域名 + BYTE byEnable; //使能,0-不启用,1-启用 + BYTE byDomainName[MAX_DOMAIN_NAME/*64*/]; //域名,GPRS参数配置、网络参数配置时该字段均有效 + BYTE byReportProtocol; //1-private 2-NAL2300, 3-Ehome + BYTE byDevID[ACCOUNTNUM_LEN_32/*32*/]; //协议为NAL2300时有效 + BYTE byProtocolVersion; //EHome协议版本,0-无意义,1–v2.0,2–v4.0,3-v5.0 + BYTE byRes1[3]; + BYTE byEHomeKey[NET_SDK_EHOME_KEY_LEN]; //EHome Key(用于EHome 5.0版本) + BYTE byRes2[28]; //GPRS的域名解析是在固定的服务器上进行的,所以不需要给解析服务器的信息预留一些字段 +} NET_DVR_ALARMHOST_NETPARAM_V50, *LPNET_DVR_ALARMHOST_NETPARAM_V50; + +typedef struct _tagNET_DVR_ALARMHOST_NETCFG_V50 +{ + DWORD dwSize; + NET_DVR_ALARMHOST_NETPARAM_V50 struNetCenter[MAX_CENTERNUM]; + BYTE byRes1[128]; +} NET_DVR_ALARMHOST_NETCFG_V50, *LPNET_DVR_ALARMHOST_NETCFG_V50; +//目标封装格式类型 +typedef enum tagSTREAM_TYPE{ + STREAM_PS = 0x1, //PS文件层,主要用于存储,也可用于传输 + STREAM_3GPP = 0x2, //3GPP文件层,用于存储 +}STREAM_TYPE; +typedef enum tagNET_SDK_INIT_CFG_TYPE +{ + NET_SDK_INIT_CFG_TYPE_CHECK_MODULE_COM = 0, //增加对必须库的检查 + NET_SDK_INIT_CFG_ABILITY = 1, //sdk支持的业务的能力集 + NET_SDK_INIT_CFG_SDK_PATH = 2, //设置HCNetSDK库所在目录 + NET_SDK_INIT_CFG_LIBEAY_PATH = 3, //设置OpenSSL的libeay32.dll/libcrypto.so/libcrypto.dylib所在路径 + NET_SDK_INIT_CFG_SSLEAY_PATH = 4 //设置OpenSSL的ssleay32.dll/libssl.so/libssl.dylib所在路径 +}NET_SDK_INIT_CFG_TYPE; + +typedef struct tagNET_DVR_INIT_CHECK_MODULE_COM +{ + BYTE byEnable; //启用必须库检查机制 0-不启用,1-启用 + BYTE byRes[255]; +}NET_DVR_INIT_CHECK_MODULE_COM, *LPNET_DVR_INIT_CHECK_MODULE_COM; +//SDK支持的最大路数能力集 +typedef enum _INIT_CFG_MAX_NUM +{ + INIT_CFG_NUM_2048 = 2048, // 2048路 + INIT_CFG_NUM_5120 = 5120, //5120路 + INIT_CFG_NUM_10240 = 10240, // 10240路 + INIT_CFG_NUM_15360 = 15360, // 15360路 + INIT_CFG_NUM_20480 = 20480, // 20480路 +}INIT_CFG_MAX_NUM; + +typedef struct tagNET_DVR_INIT_CFG_ABILITY +{ + INIT_CFG_MAX_NUM enumMaxLoginUsersNum; //最多允许的注册用户个数。 + INIT_CFG_MAX_NUM enumMaxAlarmNum; //最大的告警路数 + BYTE byRes[64]; +}NET_DVR_INIT_CFG_ABILITY, *LPNET_DVR_INIT_CFG_ABILITY; + +typedef struct tagNET_DVR_LOCAL_SDK_PATH +{ + char sPath[NET_SDK_MAX_FILE_PATH];//组件库地址 + BYTE byRes[128]; +}NET_DVR_LOCAL_SDK_PATH, *LPNET_DVR_LOCAL_SDK_PATH; + +typedef struct tagNET_DVR_SDKMEMPOOL_CFG +{ + BYTE byRes[256]; +}NET_DVR_SDKMEMPOOL_CFG, *LPNET_DVR_SDKMEMPOOL_CFG; + + +typedef struct tagNET_DVR_RES_INFO +{ + DWORD dwImageWidth; //图像宽度 + DWORD dwImageHeight; //图像高度 +}NET_DVR_RES_INFO, *LPNET_DVR_RES_INFO; + +typedef struct tagNET_DVR_VS_INPUT_CHAN_INIT +{ + DWORD dwSize; + DWORD dwVSInputChan; //虚拟屏输入通道号 + DWORD dwResNums; //分辨率的个数 + NET_DVR_RES_INFO struResList[MAX_RES_NUM_ONE_VS_INPUT_CHAN]; //分辨率列表 + BYTE byRes[32]; +}NET_DVR_VS_INPUT_CHAN_INIT, *LPNET_DVR_VS_INPUT_CHAN_INIT; + +typedef struct tagNET_DVR_VS_INPUT_CHAN_INIT_LIST +{ + DWORD dwSize; + NET_DVR_VS_INPUT_CHAN_INIT struChanList[MAX_VS_INPUT_CHAN_NUM]; //通道列表 + BYTE byRes[32]; +}NET_DVR_VS_INPUT_CHAN_INIT_LIST, *LPNET_DVR_VS_INPUT_CHAN_INIT_LIST; + +typedef struct tagNET_DVR_VS_INPUT_CHAN_CFG +{ + DWORD dwSize; + DWORD dwVSInputChan; //虚拟屏输入通道号 + NET_DVR_RES_INFO struResolutin; //分辨率 + BYTE byRes[64]; +}NET_DVR_VS_INPUT_CHAN_CFG, *LPNET_DVR_VS_INPUT_CHAN_CFG; + +typedef struct tagNET_DVR_VS_NETSRC_CFG +{ + DWORD dwSize; + DWORD dwVSInputChan; //虚拟屏输入通道号 + BYTE byDispUrl[MAX_URL_LEN]; //显示URL + BYTE byEnabled; //是否启用URL + BYTE byRes[127]; +}NET_DVR_VS_NETSRC_CFG, *LPNET_DVR_VS_NETSRC_CFG; + +typedef struct tagNET_DVR_EDID_FILE_INFO +{ + DWORD dwSize; + DWORD dwEDIDFileNo; //EDID文件编号,从1开始 + BYTE byFileName[FILE_NAME_LEN]; //EDID文件名称 + BYTE byRes[32]; +}NET_DVR_EDID_FILE_INFO, *LPNET_DVR_EDID_FILE_INFO; + +typedef struct tagNET_DVR_EDID_FILE_INFO_LIST +{ + DWORD dwSize; + DWORD dwEDIDFileNum; //返回的NET_DVR_EDID_FILE_INFO个数 + LPNET_DVR_EDID_FILE_INFO lpstruBuffer; //缓冲区指针 + DWORD dwBufferSize; //缓冲区大小 + BYTE byRes[32]; +}NET_DVR_EDID_FILE_INFO_LIST, *LPNET_DVR_EDID_FILE_INFO_LIST; + +//子窗口解码OSD +typedef struct tagNET_DVR_OSD_INFO +{ + BYTE byEnabled; //是否使能,零-不使能,非零-使能 + BYTE byEnabledFlash; //是否闪烁,零-不闪烁,非零-闪烁 + BYTE byFontSize; //字体大小,1-大,2-中,3-小 + BYTE byTransparent; //透明度,取值范围0-100 + NET_DVR_RGB_COLOR struColor; //字体颜色 + WORD wCoordinateX; //OSD左上角X坐标 + WORD wCoordinateY; //OSD左上角Y坐标 + BYTE byContent[MAX_LEN_OSD_CONTENT]; //OSD信息 + BYTE byRes[32]; +}NET_DVR_OSD_INFO, *LPNET_DVR_OSD_INFO; + +typedef struct tagNET_DVR_SUBWND_DECODE_OSD +{ + DWORD dwSize; + DWORD dwSubWndNo; //子窗口号(4字节组合方式) + DWORD dwOSDNums; //该子窗口配置的OSD信息的个数 + NET_DVR_OSD_INFO struOSDList[MAX_NUM_OSD_ONE_SUBWND]; //OSD信息列表 + BYTE byRes[32]; +}NET_DVR_SUBWND_DECODE_OSD, *LPNET_DVR_SUBWND_DECODE_OSD; + +typedef struct tagNET_DVR_SUBWND_DECODE_OSD_LIST +{ + DWORD dwSize; + NET_DVR_SUBWND_DECODE_OSD struSubWndList[MAX_NUM_SPLIT_WND]; //所有子窗口的解码OSD + BYTE byRes[32]; +}NET_DVR_SUBWND_DECODE_OSD_LIST, *LPNET_DVR_SUBWND_DECODE_OSD_LIST; + +typedef struct tagNET_DVR_DECODE_CHANNEL_OSD +{ + DWORD dwSize; + NET_DVR_OSD_INFO struOSDInfo[MAX_NUM_OSD]; //OSD信息列表 + BYTE byRes[32]; +}NET_DVR_DECODE_CHANNEL_OSD, *LPNET_DVR_DECODE_CHANNEL_OSD; + +//热成像智能互斥配置参数 +typedef struct tagNET_DVR_THERMINTELL_PARAM +{ + DWORD dwSize;//结构体大小 + BYTE byIntellType; //智能功能资源配置类型,0~测温+异常行为检测(默认),1~船只检测,2~火点检测,3~画中画功能, 4~人脸测温,5-测温+烟火检测,6-测温+火点检测 7-异常行为检测 8-测温 + BYTE byRes[127]; +}NET_DVR_THERMINTELL_PARAM, *LPNET_DVR_THERMINTELL_PARAM; + +typedef struct tagNET_DVR_FACE_THERMOMETRY_ALARM +{ + DWORD dwSize; + DWORD dwChannel;//通道号 + BYTE byRuleID; //人脸测温规则ID:1-40 + BYTE byRes1[3]; + BYTE byRuleName[NAME_LEN]; //规则名称 + DWORD dwRelativeTime; //相对时标 + DWORD dwAbsTime; //绝对时标 + BYTE byFaceDetectionState;//人脸检测状态;0~未检测到人脸,1~已检测到人脸 + BYTE byThermometryUnit;//测温单位: 0-摄氏度(℃),1-华氏度(℉),2-开尔文(K) + BYTE byAlarmRule;//报警规则;0-最高温大于,1-最高温小于 + BYTE byRes2[1]; + float fAlarmTemperature;//触发报警温度(-20.0~120.0℃,精确到小数点后1位) + float fRuleTemperature;// 规则配置报警温度(-20.0~60.0℃,精确到小数点后1位) + DWORD dwVisibleLightImageLen;// 可见光图片长度 + BYTE *pVisibleLightImage; //可见光图片指针 + DWORD dwFaceImageLen;// 人脸子图长度 + BYTE *pFaceImage; //人脸子图指针 + NET_VCA_RECT struFaceRegion;//人脸目标边界框,设备识别抓拍图片中,人脸子图坐标 + float fMinTemperature;// 最低温度(-20.0~120.0℃,精确到小数点后1位) + float fAverageTemperature;//平均温(-20.0~120.0℃,精确到小数点后1位) + NET_VCA_POINT struMinTemperaturePoint; //最低温度位置坐标 + NET_VCA_POINT struMaxTemperaturePoint;//最高温度位置坐标 + BYTE byRes[720]; +}NET_DVR_FACE_THERMOMETRY_ALARM, *LPNET_DVR_FACE_THERMOMETRY_ALARM; + +//导出GUID文件 +typedef struct tagNET_DVR_GUID_FILE_EXPORT +{ + DWORD dwSize; + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //用户登录密码 + BYTE byRes[128]; +}NET_DVR_GUID_FILE_EXPORT, *LPNET_DVR_GUID_FILE_EXPORT; + +//用户登录密码校验 +typedef struct tagNET_DVR_LOGIN_PASSWORDCFG +{ + DWORD dwSize; + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/]; //用户登录密码 + BYTE byRes[256]; +}NET_DVR_LOGIN_PASSWORDCFG, *LPNET_DVR_LOGIN_PASSWORDCFG; + +//单个安全问题配置 +typedef struct tagNET_DVR_SINGLE_SECURITY_QUESTION_CFG +{ + DWORD dwSize; + DWORD dwId;//序号(安全问题序号,只读) + char sAnswer[NET_SDK_MAX_ANSWER_LEN/*256*/];//答案(获取时只读) + BYTE byMark;//标记 0-未设置 1-已设置 + BYTE byRes[127]; +}NET_DVR_SINGLE_SECURITY_QUESTION_CFG, *LPNET_DVR_SINGLE_SECURITY_QUESTION_CFG; + +//安全问题配置 +typedef struct tagNET_DVR_SECURITY_QUESTION_CFG +{ + DWORD dwSize; + NET_DVR_SINGLE_SECURITY_QUESTION_CFG struSecurityQuestion[NET_SDK_MAX_QUESTION_LIST_LEN/*32*/];//安全问题列表 + char sLoginPassWord[NET_SDK_MAX_LOGIN_PASSWORD_LEN/*128*/];//admin用户登录密码 + BYTE byRes[512]; +}NET_DVR_SECURITY_QUESTION_CFG, *LPNET_DVR_SECURITY_QUESTION_CFG; + +typedef struct tagNET_DVR_ALARMIN_TRIGGER_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号,从1开始 + DWORD dwAlarmInNo;//防区号,从0开始 + BYTE byRes[256]; +}NET_DVR_ALARMIN_TRIGGER_COND, *LPNET_DVR_ALARMIN_TRIGGER_COND; + +typedef struct tagNET_DVR_FACELIB_GUARD_COND +{ + DWORD dwSize; + DWORD dwChannel; //通道号 + char szFDID[68];//人脸库的ID + BYTE byRes[128]; +}NET_DVR_FACELIB_GUARD_COND, *LPNET_DVR_FACELIB_GUARD_COND; + +typedef struct tagNET_DVR_GUID_FILE_STATUS_INFO +{ + DWORD dwSize; + BYTE byLockStatus; //0:未锁定,1:锁定 + BYTE byPasswd; //0:密码错误,1:密码正确。注:该值未锁定时有效。 + BYTE byRetryNum; //剩余尝试次数。注:该值未锁定时有效 + BYTE byRes1; + DWORD dwLockTime; //剩余锁定时间:单位秒。注:该值锁定时有效 + BYTE byRes[128]; +}NET_DVR_GUID_FILE_STATUS_INFO, *LPNET_DVR_GUID_FILE_STATUS_INFO; + + +//测温模式配置 +typedef struct tagNET_DVR_THERMOMETRY_MODE +{ + DWORD dwSize;//结构体大小 + BYTE byMode;//测温模式,0~普通模式,1~专家模式 + BYTE byThermometryROIEnabled; //测温ROI使能 0-保留 1-不开启 2-开启(基于互斥兼容考虑) + BYTE byRes[62]; +}NET_DVR_THERMOMETRY_MODE, *LPNET_DVR_THERMOMETRY_MODE; + +//热成像相关算法库版本获取 +typedef struct tagNET_DVR_THERMAL_ALGINFO +{ + DWORD dwSize;//结构体大小 + char sThermometryAlgName[NET_SDK_MAX_THERMOMETRYALGNAME/*128*/];//测温算法库版本名称 + char sShipsAlgName[NET_SDK_MAX_SHIPSALGNAME /*128*/];//船只算法库版本名称 + char sFireAlgName[NET_SDK_MAX_FIRESALGNAME /*128*/];//火点检测算法库版本名称 + BYTE byRes[768]; +}NET_DVR_THERMAL_ALGINFO, *LPNET_DVR_THERMAL_ALGINFO; + +//电流锁定配置 +typedef struct tagNET_DVR_CURRENT_LOCK +{ + DWORD dwSize;//结构体大小 + BYTE byCurrentLock;//云台垂直电机锁定电流,0~不锁定,1~全流锁定,2~3/4流锁定,3~半流锁定 + BYTE byRes[255]; +}NET_DVR_CURRENT_LOCK, *LPNET_DVR_CURRENT_LOCK; + +//脸比对报警(数据透传方式) +typedef struct tagNET_VCA_FACESNAP_RAWDATA_ALARM_ +{ + DWORD dwSize; //结构大小 + DWORD dwRelativeTime; // 相对时标 + DWORD dwAbsTime; // 绝对时标 + NET_VCA_DEV_INFO struDevInfo; //前端设备信息 + DWORD dwJsonDataLen; //json数据定义信息,0-没有数据,非0表示有数据(即结构体后跟着的json数据长度) + BYTE* pJsonBuff;// json数据指针 + BYTE byRes[256]; // 保留字节 +}NET_VCA_FACESNAP_RAWDATA_ALARM, *LPNET_VCA_FACESNAP_RAWDATA_ALARM; + +//高级校正参数 +typedef struct tagNET_DVR_ADVANCE_SCREEN_CHECK_PARAM +{ + BYTE byDelFullScreenGamut; /*是否删除整屏色域参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ + BYTE byDelLightPanelGamut; /*是否删除灯板色域参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ + BYTE byDelLightPanelWhiteBalance; /*是否删除灯板白平衡参数,0-否,1-是,byOperateType 为3-删除校正数据时有效*/ + BYTE byRes[13]; +}NET_DVR_ADVANCE_SCREEN_CHECK_PARAM, *LPNET_DVR_ADVANCE_SCREEN_CHECK_PARAM; + +//LED屏幕校正参数 +typedef struct tagNET_SDK_LED_SCREEN_CHECK_PARAM +{ + DWORD dwSize; + BYTE byOperateType; //操作类型,1-写入校正数据,2-校正预览,3-删除校正数据,4-加载原始数据,5-校正原始数据预览 + BYTE byIsRGBSynChk; //RGB是否同步调整,0-不支持,!0-支持,byOperateType为1、2时有效 + BYTE byScreenCheckType; //屏幕校正类型,0-普通校正,1-高级校正 + BYTE byRes1; + WORD wRgbPermil; //RGB同步调整的千分比,byOperateType为1、2且byIsRGBSynChk非零时有效 + WORD wRedPermil; //红色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + WORD wGreenPermil; //绿色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + WORD wBluePermil; //蓝色调整的千分比,byOperateType为1、2且byIsRGBSynChk为零时有效 + DWORD dwRectCount; //矩形区域的数量 + NET_DVR_RECTCFG_EX struRectList[MAX_SCREEN_AREA_NUM]; //矩形区域列表,顺序存放 + NET_DVR_ADVANCE_SCREEN_CHECK_PARAM struAdvanceScreenCheckParam;//高级校正参数,仅byScreenCheckType为1时生效 + BYTE byRes2[48]; +}NET_SDK_LED_SCREEN_CHECK_PARAM, *LPNET_SDK_LED_SCREEN_CHECK_PARAM; + +//LED屏幕校正响应数据 +typedef struct tagNET_SDK_SCREEN_CHECK_RESPONSE_DATA +{ + DWORD dwSize; + BYTE byDataType; //数据类型,1-进度(整体进度),2-状态 + BYTE byOperateType; //操作类型,1-写入校正数据,2-校正预览,3-删除校正数据 + BYTE byProgress; //进度,byDataType为1时有效,0-100 + BYTE byStatus; //状态,byDataType为2时有效,1-LED屏幕区域校正失败,2-LED屏幕区域对应的接收卡不存在,3-加载校正数据失败(原始数据异常) + //4-该屏幕型号不支持校正,5-设备忙(正在校正),6-设备内存不足 + NET_DVR_RECTCFG_EX struRect; //LED屏幕区域,byDataType为2时有效 + BYTE byRes[64]; +}NET_SDK_SCREEN_CHECK_RESPONSE_DATA, *LPNET_SDK_SCREEN_CHECK_RESPONSE_DATA; + +typedef struct tagNET_DVR_PLAY_BY_NAME_PARA +{ + char szFileName[100]; //回放文件名 + BYTE byDownload; //是否下载 0-否,1-是 + BYTE byRes1[127]; + HWND hWnd; //回放的窗口句柄,若置为空,SDK仍能收到码流数据,但不解码显示 + NET_DVR_ADDRESS struAddr; //文件所在集群中CS地址信息,该信息文件查找时会返回 + //如果为空表示本登录地址 + BYTE byRes2[256]; +}NET_DVR_PLAY_BY_NAME_PARA, *LPNET_DVR_PLAY_BY_NAME_PARA; + +typedef struct tagNET_DVR_PLAYBCK_BYTIME_COND_PCNVR +{ + DWORD dwSize; + NET_DVR_IPADDR struIpAddr; + WORD wIpPort; + BYTE byRes[2]; + char sDomainName[MAX_DOMAIN_NAME]; + char sSerial[SERIALNO_LEN]; + LONG iChannel; + NET_DVR_TIME struStartTime; + NET_DVR_TIME struStopTime; + HWND hWnd; +}NET_DVR_PLAYBCK_BYTIME_COND_PCNVR, *LPNET_DVR_PLAYBCK_BYTIME_COND_PCNVR; + +//按文件名下载集群录像文件 +typedef struct tagNET_DVR_DOWNLOAD_BY_NAME_COND +{ + char *pFileName; //回放文件名,包含\0,最大100字节 + char *pSavedFileName;//文件保存位置 + NET_DVR_ADDRESS struAddr; //文件所在集群中CS地址信息,该信息文件查找时会返回 + //如果为空表示本登录地址 + BYTE byRes[256]; +}NET_DVR_DOWNLOAD_BY_NAME_COND, *LPNET_DVR_DOWNLOAD_BY_NAME_COND; + +typedef struct tagNET_DVR_PIC_PARAM //查找结果结构体 +{ + char *pDVRFileName; //图片名,包含\0,最大64字节 + char *pSavedFileBuf; //保存图片的缓冲区,内存外部申请释放 + DWORD dwBufLen; //缓冲区大小 + DWORD *lpdwRetLen; //实际收到的数据长度指针,不能为NULL + NET_DVR_ADDRESS struAddr; //图片所在的地址信息,图片查找时会返回 + BYTE byRes[256]; //保留字节 +}NET_DVR_PIC_PARAM, *LPNET_DVR_PIC_PARAM; + +#define NET_SDK_MAX_INDENTITY_KEY_LEN 64 //交互操作口令长度 + +//导入人脸数据条件 +typedef struct tagNET_DVR_FACELIB_COND +{ + DWORD dwSize; + char szFDID[NET_SDK_MAX_FDID_LEN/*256*/];//人脸库ID + BYTE byConcurrent;//设备并发处理 0-不开启,1-开始 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + BYTE byCustomFaceLibID;//FDID是否是自定义,0-不是,1-是; + /*当”/ISAPI/Intelligent/channels//faceContrast/capabilities”能力中返回isSupportNoSaveUploadPicture能力节点时, + 代表非并发处理模式下,支持不保存上传原图的操作:当上传成功图片并设备建模成功后,会将上传的原图进行删除。 + 注:该操作无法与并发处理同时进行。*/ + BYTE byPictureSaveMode;//上传原图保存模式,0-保存,1-不保存; + BYTE byIdentityKey[NET_SDK_MAX_INDENTITY_KEY_LEN/*64*/];//交互操作口令 + BYTE byRes[60]; +}NET_DVR_FACELIB_COND, *LPNET_DVR_FACELIB_COND; + +//导入人体数据条件 +typedef struct tagNET_DVR_HBDLIB_COND +{ + DWORD dwSize; + char szHBDID[NET_SDK_MAX_HBDID_LEN/*256*/];//人体库ID + BYTE byConcurrent;//设备并发处理 0-不开启,1-开始 + BYTE byCover;//是否覆盖式导入 0-否,1-是 + BYTE byCustomHBDID;// HBDID是否是自定义,0-不是,1-是; + BYTE byRes[125]; +}NET_DVR_HBDLIB_COND, *LPNET_DVR_HBDLIB_COND; + +typedef struct tagNET_DVR_EXPORT_PUBLISH_SCHEDULE +{ + DWORD dwScheduleID;// 日程索引 + DOWNLOAD_DATA_CB fnDownloadFileCallBack; //数据回调函数 + void* pUser; //用户数据指针 + BYTE byRes[32]; +}NET_DVR_EXPORT_PUBLISH_SCHEDULE, *LPNET_DVR_EXPORT_PUBLISH_SCHEDULE; + +typedef struct tagNET_DVR_GBT28181_AUDIO_OUTPUT_COND +{ + DWORD dwSize; + DWORD dwAudioChannel;//语音对讲通道号 + BYTE byRes[128]; +}NET_DVR_GBT28181_AUDIO_OUTPUT_COND, *LPNET_DVR_GBT28181_AUDIO_OUTPUT_COND; + +//GBT28181协议的语音输出通道配置 配置结构 +typedef struct tagNET_DVR_GBT28181_AUDIO_OUTPUT_CFG +{ + DWORD dwSize; + char szAudioOutNumID[MAX_COMPRESSIONID_LEN];//设备语音输出编码ID + BYTE byRes[256]; +}NET_DVR_GBT28181_AUDIO_OUTPUT_CFG, *LPNET_DVR_GBT28181_AUDIO_OUTPUT_CFG; + +typedef struct tagNET_DVR_NOTICE_VIDEO_DATA +{ + DWORD dwSize; + DWORD dwFileSize; //文件大小,单位:字节 + BYTE byNoticeNumber[MAX_NOTICE_NUMBER_LEN]; //公告编号 + BYTE byRes[2016]; +}NET_DVR_NOTICE_VIDEO_DATA, *LPNET_DVR_NOTICE_VIDEO_DATA; + +typedef struct tagNET_DVR_NOTICE_VIDEO_DATA_COND +{ + DWORD dwSize; + BYTE byRes[256]; //保留 +}NET_DVR_NOTICE_VIDEO_DATA_COND, *LPNET_DVR_NOTICE_VIDEO_DATA_COND; + +typedef struct tagNET_DVR_NOTICE_VIDEO_DATA_CFG +{ + DWORD dwSize; + DWORD dwDataLen; //数据长度 + char* pDataBuffer; //数据指针 + BYTE byDataType; //数据类型:0-无效,1-结构体数据(NET_DVR_NOTICE_VIDEO_DATA),2-视频数据 + BYTE byRes[63]; +}NET_DVR_NOTICE_VIDEO_DATA_CFG, *LPNET_DVR_NOTICE_VIDEO_DATA_CFG; + +typedef struct tagNET_DVR_UPGRADE_FIRMWARE_INFO +{ + DWORD dwMagicNumber; /* 魔术字段,固定值0x484b5753 */ + DWORD dwCheckSum; /* 文件头校验和 */ + DWORD dwHeadLen; /* 文件头长度 */ + DWORD dwFileNums; /* 文件个数 */ + DWORD dwLanguage; /* 语言,1-英文或多语言,2-中文 */ + DWORD dwDeviceClassID; /* 1 – DS9000 DVR */ + DWORD dwOemCode; /* 1 – private */ + BYTE byUpgradeVersion; /* 升级版本: 0xFE - 需判断flash, ram, DSP ram 的容量*/ + BYTE byResFeature[15]; /* 保留字段 */ + BYTE byFlashSize; /* 0 - do not need check; 1 - 16M; 2 - 32M; 3 - 64M */ + BYTE byRamSize; /* 0 - do not need check; 1 - 128M; 2 - 256M; 3 - 512M; 4 - 1024M*/ + BYTE byDspRamSize; /* 0 - do not need check; 1 - 64M; 2 - 128M; 3 - 256M */ + BYTE byRes[17]; /* 保留 */ +}NET_DVR_UPGRADE_FIRMWARE_INFO, *LPNET_DVR_UPGRADE_FIRMWARE_INFO; + + +typedef struct tagNET_DVR_SCHEDULE_FILE_RET +{ + DWORD dwSize; + char szFileName[32]; //文件名 + DWORD dwFileLen; //文件长度 + BYTE byRes[64]; +}NET_DVR_SCHEDULE_FILE_RET, *LPNET_DVR_SCHEDULE_FILE_RET; + +#define NET_SDK_MAX_EXAM_ROUND_NO 64 //考试场次编号最大长度 +#define NET_SDK_MAX_EXAM_NO 64 //考试编号最大长度 +#define NET_SDK_MAX_EXAM_SUBJECT 64 //考试科目最大长度 +#define NET_SDK_MAX_TEACHER_NO 64 //监考老师编号最大长度 +#define NET_SDK_MAX_TEACHER_NAME 64 //监考老师姓名最大长度 +#define NET_SDK_MAX_EXAMINEE_NO 64 //考生编号最大长度 +#define NET_SDK_MAX_ADMISSION_TICKET 64 //准考证号最大长度 + +typedef struct tagNET_DVR_EXAM_INFO_COND +{ + DWORD dwSize; + DWORD dwExamNumber; //考试信息数目 + BYTE byRes[128]; +}NET_DVR_EXAM_INFO_COND, *LPNET_DVR_EXAM_INFO_COND; + +typedef struct tagNET_DVR_EXAM_INFO_CFG +{ + DWORD dwSize; + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + BYTE byExamSubject[NET_SDK_MAX_EXAM_SUBJECT/*64*/]; //考试科目 + BYTE byTeacherNo[NET_SDK_MAX_TEACHER_NO/*64*/]; //监考老师编号 + BYTE byTeacherName[NET_SDK_MAX_TEACHER_NAME/*64*/]; //监考老师姓名 + NET_DVR_TIME struStartTime; //考试开始时间 + NET_DVR_TIME struEndTime; //考试结束时间 + BYTE byExamInfoValid; //考试信息是否有效:0-无效,1-有效(用于考试场次编号删除考试信息,该字段为0时代表删除) + BYTE byRes[127]; +}NET_DVR_EXAM_INFO_CFG, *LPNET_DVR_EXAM_INFO_CFG; + +typedef struct tagNET_DVR_EXAM_INFO_STATUS +{ + DWORD dwSize; + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byStatus; //下发状态:0-无效,1-失败,2-成功(代表该考试场次下发是否成功) + BYTE byRes[127]; +}NET_DVR_EXAM_INFO_STATUS, *LPNET_DVR_EXAM_INFO_STATUS; + +typedef struct tagNET_DVR_EXAMINEE_INFO_COND +{ + DWORD dwSize; + DWORD dwExamineeNumber; //考生信息数目 + BYTE byRes[128]; +}NET_DVR_EXAMINEE_INFO_COND, *LPNET_DVR_EXAMINEE_INFO_COND; + +typedef struct tagNET_DVR_EXAMINEE_INFO_CFG +{ + DWORD dwSize; + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //准考证号 + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byCardNo[ACS_CARD_NO_LEN]; //考生关联的卡号 + BYTE bySex; //性别:0-无效,1-男,2-女 + BYTE byExamineeInfoValid; //考生信息是否有效:0-无效,1-有效(用于考生编号和考试场次编号删除考生信息,该字段为0时代表删除) + BYTE byRes[126]; +}NET_DVR_EXAMINEE_INFO_CFG, *LPNET_DVR_EXAMINEE_INFO_CFG; + +typedef struct tagNET_DVR_EXAMINEE_INFO_STATUS +{ + DWORD dwSize; + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byStatus; //下发状态:0-无效,1-失败,2-成功(代表该考生信息下发是否成功) + BYTE byRes[127]; +}NET_DVR_EXAMINEE_INFO_STATUS, *LPNET_DVR_EXAMINEE_INFO_STATUS; + +typedef struct tagNET_DVR_EXAM_COMPARE_RESULT_COND +{ + DWORD dwSize; + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + NET_DVR_TIME struStartTime; //开始时间 + NET_DVR_TIME struEndTime; //结束时间 + BYTE byRes[512]; +}NET_DVR_EXAM_COMPARE_RESULT_COND, *LPNET_DVR_EXAM_COMPARE_RESULT_COND; + +typedef struct tagNET_DVR_EXAM_COMPARE_RESULT_CFG +{ + DWORD dwSize; + NET_DVR_TIME struTime; //时间 + BYTE byExamineeNo[NET_SDK_MAX_EXAMINEE_NO/*64*/]; //考生编号 + BYTE byAdmissionTicket[NET_SDK_MAX_ADMISSION_TICKET/*64*/]; //准考证号 + BYTE byExamNo[NET_SDK_MAX_EXAM_NO/*64*/]; //考试编号(某次考试,包含多场考试) + BYTE byExamRoundNo[NET_SDK_MAX_EXAM_ROUND_NO/*64*/]; //考试场次编号(某堂具体考试) + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE byCardNo[ACS_CARD_NO_LEN]; //考生关联的卡号 + DWORD dwPicDataLen; //比对抓拍图片数据大小,不为0是表示后面带数据 + char *pPicData; //比对抓拍图片指针 + BYTE byRes[256]; +}NET_DVR_EXAM_COMPARE_RESULT_CFG, *LPNET_DVR_EXAM_COMPARE_RESULT_CFG; + +typedef struct tagNET_DVR_BLOCKLIST_PICTURE_COND +{ + DWORD dwSize; + DWORD dwPictureNum; //图片数量 + BYTE byRes[128]; +}NET_DVR_BLOCKLIST_PICTURE_COND, *LPNET_DVR_BLOCKLIST_PICTURE_COND; + +typedef struct tagNET_DVR_BLOCKLIST_PICTURE_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byStatus; //状态:0-无效,,1-处理中,2-上传失败,3-成功 + BYTE byRes[63]; +}NET_DVR_BLOCKLIST_PICTURE_STATUS, *LPNET_DVR_BLOCKLIST_PICTURE_STATUS; + +typedef struct tagNET_DVR_BLOCKLIST_PICTURE_CFG +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN/*32*/]; //卡号 + BYTE byName[NAME_LEN/*32*/]; //姓名 + BYTE bySex; //性别:0-无效,1-男,2-女 + BYTE byPictureValid; //禁止名单图片是否有效:0-无效,1-有效(用于按卡号删除禁止名单图片,该字段为0时代表删除,删除时不传递禁止名单图片) + BYTE byRes1[2]; + DWORD dwPictureLen; //禁止名单图片长度(图片大小不超过1M) + char* pPictureBuffer; //禁止名单图片指针 + BYTE byRes[128]; +}NET_DVR_BLOCKLIST_PICTURE_CFG, *LPNET_DVR_BLOCKLIST_PICTURE_CFG; + +typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_COND +{ + DWORD dwSize; + DWORD dwBlockListNum; //禁止名单数量 + BYTE byRes[128]; +}NET_DVR_UPLOAD_ID_BLOCKLIST_COND, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_COND; + +typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_CFG +{ + DWORD dwSize; + NET_DVR_ID_CARD_INFO struIDCardCfg;//身份证信息(该结构体中姓名和身份证号码为必填项,其他字段为选填项) + BYTE byBlockListValid; //身份证禁止名单是否有效:0-无效,1-有效(用于按身份证号码删除身份证禁止名单,该字段为0时代表删除) + BYTE byRes[127]; +}NET_DVR_UPLOAD_ID_BLOCKLIST_CFG, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_CFG; + +typedef struct tagNET_DVR_UPLOAD_ID_BLOCKLIST_STATUS +{ + DWORD dwSize; + BYTE byIDNum[MAX_ID_NUM_LEN]; //身份证号码 + BYTE byStatus; //状态:0-无效,1-处理中,2-上传失败,3-成功 + BYTE byRes[63]; +}NET_DVR_UPLOAD_ID_BLOCKLIST_STATUS, *LPNET_DVR_UPLOAD_ID_BLOCKLIST_STATUS; + +typedef struct tagNET_DVR_ALARM_ISAPI_INFO +{ + char * pAlarmData; // 报警数据 + DWORD dwAlarmDataLen; // 报警数据长度 + BYTE byDataType; // 0-invalid,1-xml,2-json + BYTE byPicturesNumber; // 图片数量 + BYTE byRes[2]; + void * pPicPackData; // 图片变长部分 + BYTE byRes1[32]; +}NET_DVR_ALARM_ISAPI_INFO, *LPNET_DVR_ALARM_ISAPI_INFO; + +typedef struct tagNET_DVR_ALARM_ISAPI_PICDATA +{ + DWORD dwPicLen; + BYTE byPicType; //图片格式: 1-jpg, 2-wav, 3-mp4 + BYTE byRes[3]; + char szFilename[MAX_FILE_PATH_LEN]; + BYTE *pPicData; +}NET_DVR_ALARM_ISAPI_PICDATA, *LPNET_DVR_ALARM_ISAPI_PICDATA; + +typedef struct tagNET_DVR_FORMAT_HDD +{ + DWORD dwSize;//结构体长度 + DWORD dwDiskNo;//硬盘号,从0开始,0xff表示对所有硬盘有效(不包括只读硬盘) + NET_DVR_IPADDR struLocateIP;//该硬盘所在设备的IP(对应硬盘管理参数V50中获取到的szHDLocateIP信息) + BYTE byRes[16]; +}NET_DVR_FORMAT_HDD, *LPNET_DVR_FORMAT_HDD; + +typedef struct tagNET_DVR_CHECK_FACE_PICTURE_COND +{ + DWORD dwSize; + DWORD dwPictureNum; //图片数量 + BYTE byCheckTemplate; //0-校验图片是否合法(默认),1-校验图片和建模数据是否匹配 + BYTE byRes[127]; +}NET_DVR_CHECK_FACE_PICTURE_COND, *LPNET_DVR_CHECK_FACE_PICTURE_COND; + +typedef struct tagNET_DVR_CHECK_FACE_PICTURE_CFG +{ + DWORD dwSize; + DWORD dwPictureNo; //图片编号 + DWORD dwPictureLen; //图片长度(图片大小不超过200k) + char* pPictureBuffer; //图片指针 + DWORD dwFaceTemplateLen; //人脸建模数据长度 + char* pFaceTemplateBuffer; //人脸建模数据指针 + BYTE byRes[248]; +}NET_DVR_CHECK_FACE_PICTURE_CFG, *LPNET_DVR_CHECK_FACE_PICTURE_CFG; + +typedef struct tagNET_DVR_CHECK_FACE_PICTURE_STATUS +{ + DWORD dwSize; + DWORD dwPictureNo; //图片编号 + BYTE byCheckStatus; //校验结果:0-无效,1-建模成功,2-建模失败,3-人脸模块通讯异常,4-图像无人脸,5-人脸朝上,6-人脸朝下,7-人脸偏左,8-人脸偏右,9-人脸顺时旋转, + //10 - 人脸逆时旋转,11-人眼间距小,12-人脸和模板匹配,13-人脸和模板不匹配,14-传输数据有误 + BYTE byRes[127]; +}NET_DVR_CHECK_FACE_PICTURE_STATUS, *LPNET_DVR_CHECK_FACE_PICTURE_STATUS; + +typedef struct tagNET_SDK_NPQ_STATE_SINGLE +{ + DWORD dwRttUs; //rtt,单位us + DWORD dwRealRttUs; //实时rtt,单位us + DWORD dwBitRate; //码率,单位bps + BYTE byLossFraction; //丢包率,单位1/256 + BYTE byLossFraction2; //经过恢复之后的丢包率,只能在接收端获取,单位1/256 + BYTE byRes[126]; +}NET_SDK_NPQ_STATE_SINGLE, *LPNET_SDK_NPQ_STATE_SINGLE; + + +typedef struct tagNET_SDK_NPQ_STATE +{ + DWORD dwSize; + NET_SDK_NPQ_STATE_SINGLE struAudioState; //音频传输状态 + NET_SDK_NPQ_STATE_SINGLE struVideoState; //视频传输状态 + BYTE byRes[256]; +}NET_SDK_NPQ_STATE, *LPNET_SDK_NPQ_STATE; + +typedef struct tagNET_SDK_NPQ_NOTIFY_PARAM +{ + LONG iVersion; //结构体版本,用于以后兼容 + DWORD dwBitRate; //码率 单位bps + BOOL bHaveBitrate; //码率字段是否有效标志 + BOOL bHaveForceIframe; //强制I帧字段是否有效标志 + BOOL bForceIframe; //强制I帧 + BOOL bHaveScale; //scale字段是否有效标志,回放时此字段无效,请通过SDK快放接口实现 + float fScale; //scale信息 1、2、4、8,回放时此字段无效,请通过SDK快放接口实现 + BYTE res[240]; +}NET_SDK_NPQ_NOTIFY_PARAM, *LPNET_SDK_NPQ_NOTIFY_PARAM; + +//报警信息查询条件结构体 +typedef struct tagNET_DVR_ALARM_SEARCH_COND +{ + DWORD dwSize; + NET_DVR_TIME_SEARCH_COND strStartTime; //开始时间,时间为空则代表不通过时间筛选。 + NET_DVR_TIME_SEARCH_COND strStopTime; //结束时间, 时间为空则代表不通过时间筛选。 + /* + 报警命令,该字段值与报警布防类型相同,目前支持: + COMM_VCA_ALARM 0x4993 智能检测报警 + COMM_UPLOAD_FACESNAP_RESULT 0x1112 人脸识别结果上传 + COMM_SNAP_MATCH_ALAR 0x2902 人脸比对结果上传 + */ + DWORD dwAlarmComm; //若该命令为空这代表不进行报警命令过滤。 + char sAlarmUID[64]; //UID标识(上传报警时设备返回的UID标识,64字节的长度,可以使用时间(精确到毫秒)加上随即数的方式组成),为空则代表不区分UID + WORD wEventType;//事件类型,仅dwAlarmComm为COMM_VCA_ALARM 0x4993 智能检测报警有效,0-表示所有事件,1-混合目标检测(mixedTargetDetection),2-雷视目标检测(radarVideoDetection) + WORD wSubEventType;//子事件类型,0-表示所有子事件,其余值根据wEventType的取值变化而变化,具体参见能力集。 + BYTE bySupport; //保留 + BYTE byNoBoundary; //是否不带boundary,0-否,1-是,仅dwAlarmComm为智能检测报警时有效,当设置为1时输出事件类型为COMM_ISAPI_ALARM + BYTE byRes[122]; +}NET_DVR_ALARM_SEARCH_COND, *LPNET_DVR_ALARM_SEARCH_COND; +//报警信息查询结果结构体 +typedef struct tagNET_DVR_ALARM_SEARCH_RESULT +{ + DWORD dwSize; + /* + 报警命令,该字段值与报警布防类型相同,目前支持: + COMM_VCA_ALARM 0x4993 智能检测报警 + COMM_UPLOAD_FACESNAP_RESULT 0x1112 人脸识别结果上传 + COMM_SNAP_MATCH_ALARM 0x2902 人脸比对结果上传 + COMM_ISAPI_ALARM 0x6009 ISAPI报警 + */ + DWORD dwAlarmComm; + /* + 报警信息,该字段值与报警信息相同,目前支持: + 当COMM_VCA_ALARM时,该报警信息为JSON报文 + 当COMM_UPLOAD_FACESNAP_RESULT时,该报警信息为NET_VCA_FACESNAP_RESULT + 当COMM_SNAP_MATCH_ALARM时,该报警信息为NET_VCA_FACESNAP_MATCH_ALARM + 当COMM_ISAPI_ALARM时,该报警信息为NET_DVR_ALARM_ISAPI_INFO + */ + DWORD dwAlarmLen;//报警信息,即pAlarmInfo指针指向的数据长度 + char *pAlarmInfo; + NET_DVR_ALARMER struAlarmer; + BYTE byRes[128]; +}NET_DVR_ALARM_SEARCH_RESULT, *LPNET_DVR_ALARM_SEARCH_RESULT; + +typedef struct tagNET_DVR_FACE_AND_TEMPLATE_COND +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数不设置) + DWORD dwFaceNum; //设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + BYTE byRes[128]; //保留 +}NET_DVR_FACE_AND_TEMPLATE_COND, *LPNET_DVR_FACE_AND_TEMPLATE_COND; + +typedef struct tagNET_DVR_FACE_AND_TEMPLATE_CFG +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸图片长度(图片大小不超过200k) + char* pFaceBuffer; //人脸图片指针 + DWORD dwFaceTemplateLen; //人脸建模数据长度 + char* pFaceTemplateBuffer; //人脸建模数据指针 + BYTE byRes[116]; +}NET_DVR_FACE_AND_TEMPLATE_CFG, *LPNET_DVR_FACE_AND_TEMPLATE_CFG; + +typedef struct tagNET_DVR_FACE_AND_TEMPLATE_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byRecvStatus;//人脸下发状态,按字节表示,0-失败,1-成功,2-内存已满(人脸数据满) + BYTE byRes[131]; +}NET_DVR_FACE_AND_TEMPLATE_STATUS, *LPNET_DVR_FACE_AND_TEMPLATE_STATUS; + +typedef struct tagNET_DVR_SINGLE_HEATMAP_RESULT_PDC +{ + DWORD dwMaxHeatMapValue;//最大热度值 + DWORD dwMinHeatMapValue;//最小热度值 + DWORD dwTimeHeatMapValue;// (时间热度值)平均热度值 + WORD wArrayLine;//图片像素点行值 + WORD wArrayColumn;//图片像素点列值 (当行列值为0的时候,像素点值内存信息不存在) + BYTE* pBuffer; //热度图片像素点数据信息 + BYTE byRes[32]; +}NET_DVR_SINGLE_HEATMAP_RESULT_PDC, *LPNET_DVR_SINGLE_HEATMAP_RESULT_PDC; + +//热度图报警上传 +typedef struct tagNET_DVR_HEATMAP_RESULT_PDC +{ + DWORD dwSize; + NET_DVR_TIME_EX struStartTime;/*开始时间*/ + NET_DVR_TIME_EX struEndTime;/*结束时间*/ + NET_VCA_DEV_INFO struDevInfo;/*设备信息*/ + WORD wDevInfoIvmsChannelEx; //与NET_VCA_DEV_INFO里的byIvmsChannel含义相同,能表示更大的值。老客户端用byIvmsChannel能继续兼容,但是最大到255。新客户端版本请使用wDevInfoIvmsChannelEx。 + BYTE byBrokenNetHttp; //断网续传标志位,0-不是重传数据,1-重传数据 + BYTE byArrayUnitType;//矩阵单元数据类型(矩阵信息中每个像素点数据的数据类型),1-byte, 2-short,4- int + /* + struSingleHeatMap[0]:表示按人数统计中的画面中停留人数的热度值; + struSingleHeatMap[1]:表示按人数统计中的画面中离开人数的热度值; + */ + NET_DVR_SINGLE_HEATMAP_RESULT_PDC struSingleHeatMap[2]; + WORD wCurNumber;//当前人数 + WORD wLeaveNumber;//离开人数 + #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "heatmap") +#else + char* pEventNotificationAlertBuff; //其Buff对应EventNotificationAlert JSON Block("eventType": "heatmap") + BYTE byRes2[4]; +#endif + DWORD dwEventNotificationAlertLen;//长度对应EventNotificationAlert JSON Block("eventType": "heatmap")数据长度 + BYTE byRes1[48]; +}NET_DVR_HEATMAP_RESULT_PDC, *LPNET_DVR_HEATMAP_RESULT_PDC; + +//设备支持AI开放平台接入,上传视频检测数据 +typedef struct _NET_AIOP_VIDEO_HEAD_ +{ + DWORD dwSize; //dwSize = sizeof(NET_AIOP_VIDEO_HEAD) + DWORD dwChannel; //设备分析通道的通道号; + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //视频任务ID,来自于视频任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析;可以通过URI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)获取当前设备加载的模型包的label description信息; + BYTE *pBufferAIOPData; //AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,2-设备本地存储,当byPictureMode为0时pBufferPicture为二进制数据, + //当byPictureMode为1时pBufferPicture为武汉云URL,当byPictureMode为2时pBufferPicture为设备本地存储URL(下载图片的时候,需要基于HTTP协议做设备的认证处理,是基于设备的用户名和密码认证) + BYTE byCompressedDotMatrixMode;//压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 + DWORD dwAddInfoPictureSize; //对应分析的附加图片长度 + BYTE *pAddInfoPictureBuffer;//对应分析的附加图片数据(对于热成像双通道设备,该节点表示非报警通道的图片) +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pFacePicBuff; //人脸小图图片指针 +#else + char* pFacePicBuff; //人脸小图图片指针 + BYTE byRes3[4]; +#endif + DWORD dwFacePicBuffLen;//长度对应pFacePicBuff数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pComparisonPicBuff; //底库比对图图片指针 +#else + char* pComparisonPicBuff; //底库比对图图片指针 + BYTE byRes4[4]; +#endif + DWORD dwComparisonPicBuffLen;//长度对应pComparisonPicBuff数据长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 +#else + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 + BYTE byRes5[4]; +#endif + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 + BYTE byRes[132]; +}NET_AIOP_VIDEO_HEAD, *LPNET_AIOP_VIDEO_HEAD; + +//设备支持AI开放平台接入,上传图片检测数据 +typedef struct _NET_AIOP_PICTURE_HEAD_ +{ + DWORD dwSize; //dwSize = sizeof(NET_AIOP_PICTURE_HEAD) + NET_DVR_SYSTEM_TIME struTime; //时间 + char szPID[64]; //透传下发的图片ID,来自于图片任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + BYTE byStatus; //状态值:0-成功,1-图片大小错误 + BYTE byPictureMode;//图片数据传输模式(当dwPictureSize>0时有效) 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes1[1]; + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + DWORD dwPresetIndex; //预置点序号 + DWORD dwPictureSize; //图片或URL长度 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + BYTE *pBufferPicture;//对应分析图片数据或URL +#else + BYTE *pBufferPicture;//对应分析图片数据或URL + BYTE byRes2[4]; +#endif + char szTaskID[64]; //任务ID, 数据中心图片任务分析结果上报携带此字段 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 +#else + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 + BYTE byRes5[4]; +#endif + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 + BYTE byRes[92]; +}NET_AIOP_PICTURE_HEAD, *LPNET_AIOP_PICTURE_HEAD; + +#define MAX_FILE_NAME_LEN 100 //最大文件名长 +typedef struct tagNET_DVR_DOOR_FILE_UPLOAD_PARAM +{ + DWORD dwSize; + DWORD dwFileSize; //文件大小,单位:字节 + BYTE byFileName[MAX_FILE_NAME_LEN]; //文件名称 + BYTE byRes1[256]; +}NET_DVR_DOOR_FILE_UPLOAD_PARAM, *LPNET_DVR_DOOR_FILE_UPLOAD_PARAM; + +#define AUDIO_FILE_NAME_LEN 32 //音频文件名称长度 +//上传音频控制文件 +typedef struct tagNET_DVR_TRANS_AUDIO_INFO +{ + DWORD dwSize; //结构体大小 + char sAudioName[AUDIO_FILE_NAME_LEN]; //音频文件名称 + BYTE byAudioFormat; //音频数据格式:0-wav + BYTE byRes[127]; +}NET_DVR_TRANS_AUDIO_INFO,*LPNET_DVR_TRANS_AUDIO_INFO; + +typedef struct _NET_AIOP_POLLING_VIDEO_HEAD_ +{ + DWORD dwSize; //dwSize = sizeof(NET_AIOP_POLLING_VIDEO_HEAD) + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //轮询抓图任务ID,来自于轮询抓图任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 +#if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 +#else + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 + BYTE byRes5[4]; +#endif + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 + BYTE byRes[164]; +} NET_AIOP_POLLING_VIDEO_HEAD, *LPNET_AIOP_POLLING_VIDEO_HEAD; + +typedef struct _NET_AIOP_HISTORY_VIDEO_HEAD_ +{ + DWORD dwSize; //dwSize = sizeof(_NET_AIOP_HISTORY_VIDEO_HEAD_) + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //历史视频任务ID,来自于视频任务派发 + DWORD dwAIOPDataSize; //AIOP data数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析;可以通过URI(GET /ISAPI/Intelligent/AIOpenPlatform/algorithmModel/management?format=json)获取当前设备加载的模型包的label description信息; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//对应分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byRes[183]; +}NET_AIOP_HISTORY_VIDEO_HEAD, *LPNET_AIOP_HISTORY_VIDEO_HEAD; + + +typedef struct _NET_AIOP_POLLING_SNAP_HEAD_ +{ + DWORD dwSize; //dwSize = sizeof(NET_AIOP_POLLING_SNAP_HEAD) + DWORD dwChannel; //设备分析通道的通道号(走SDK协议); + NET_DVR_SYSTEM_TIME struTime; //时间 + char szTaskID[64]; //轮询抓图任务ID,来自于轮询抓图任务派发 + DWORD dwAIOPDataSize; //对应AIOPDdata数据长度 + DWORD dwPictureSize; //对应分析图片长度 + char szMPID[64]; //检测模型包ID,用于匹配AIOP的检测数据解析; + BYTE *pBufferAIOPData;//AIOPDdata数据 + BYTE *pBufferPicture;//分析图片数据 + BYTE byPictureMode;//图片数据传输模式 0-二进制,1-武汉云云存储,当byPictureMode为0时pBufferPicture为二进制数据,当byPictureMode为1时pBufferPicture为武汉云URL + BYTE byCompressedDotMatrixMode;// /压缩后的点阵图传输模式 0-二进制,1-武汉云云存储,当byCompressedDotMatrixMode为0时pCompressedDotMatrixBuff为二进制数据,当byCompressedDotMatrixMode为1时pCompressedDotMatrixBuff为武汉云URL + BYTE byRes2[2];//保留字节 + DWORD dwPresetIndex; //预置点序号 + DWORD dwAddInfoPictureSize; //对应分析的附加图片长度 + BYTE *pAddInfoPictureBuffer;//对应分析的附加图片数据(对于热成像双通道设备,该节点表示非报警通道的图片) + #if (defined(OS_WINDOWS64) || defined(OS_POSIX64))//win64及linux64下指针为8字节 + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 +#else + char* pCompressedDotMatrixBuff; //压缩后的点阵图信息指针 + BYTE byRes5[4]; +#endif + DWORD dwCompressedDotMatrixBuffLen; //长度对应pCompressedDotMatrixBuff数据长度 + BYTE byRes[156]; +} NET_AIOP_POLLING_SNAP_HEAD, *LPNET_AIOP_POLLING_SNAP_HEAD; + +typedef struct tagNET_DVR_AI_ALGORITHM_MODEL +{ + DWORD dwSize; + DWORD dwDescribeLength; //{AlgorithmModel} 文件长度 + char* pDescribeBuffer; //{AlgorithmModel}文件 + BYTE byRes1[3];//保留字节,使四字节对齐 + DWORD dwLicenseKeyLength; //licenseKey文件长度 + char* pLicenseKeyBuffer; //licenseKey文件 + BYTE byRes[120]; +}NET_DVR_AI_ALGORITHM_MODEL, *LPNET_DVR_AI_ALGORITHM_MODEL; + +typedef struct tagNET_DVR_AI_PICTUR_UPLOAD +{ + DWORD dwSize; + char szTaskID[64]; //任务id,strlen.max = 64,业务平台统一维护管理 + char szPID[64]; //图片id,strlen.max = 64,业务平台统一维护管理 + BYTE byRes[128]; +}NET_DVR_AI_PICTUR_UPLOAD, *LPNET_DVR_AI_PICTUR_UPLOAD; + + +typedef struct _NET_DVR_CARD_RECORD +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; + BYTE byCardType; + BYTE byLeaderCard; + BYTE byUserType; + BYTE byRes1; + BYTE byDoorRight[MAX_DOOR_NUM_256]; + NET_DVR_VALID_PERIOD_CFG struValid; + BYTE byBelongGroup[MAX_GROUP_NUM_128]; + BYTE byCardPassword[CARD_PASSWORD_LEN]; + WORD wCardRightPlan[MAX_DOOR_NUM_256]; + DWORD dwMaxSwipeTimes; + DWORD dwSwipeTimes; + DWORD dwEmployeeNo; + BYTE byName[NAME_LEN]; + //按位表示,0-无权限,1-有权限 + //第0位表示:弱电报警 + //第1位表示:开门提示音 + //第2位表示:限制客卡 + //第3位表示:通道 + //第4位表示:反锁开门 + //第5位表示:巡更功能 + DWORD dwCardRight; + BYTE byRes[256]; +}NET_DVR_CARD_RECORD, *LPNET_DVR_CARD_RECORD; + +typedef struct _NET_DVR_CARD_COND +{ + DWORD dwSize; + DWORD dwCardNum; //设置或获取卡数量,获取时置为0xffffffff表示获取所有卡信息 + BYTE byRes[64]; +}NET_DVR_CARD_COND, *LPNET_DVR_CARD_COND; + +typedef struct _NET_DVR_CARD_SEND_DATA +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //卡号 + BYTE byRes[16]; +}NET_DVR_CARD_SEND_DATA, *LPNET_DVR_CARD_SEND_DATA; + +typedef struct _NET_DVR_CARD_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; + DWORD dwErrorCode; + BYTE byStatus; // 状态:0-失败,1-成功 + BYTE byRes[23]; +}NET_DVR_CARD_STATUS, *LPNET_DVR_CARD_STATUS; + +typedef struct _NET_DVR_FACE_RECORD +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + DWORD dwFaceLen; //人脸数据长度 + BYTE* pFaceBuffer; //人脸数据指针 + BYTE byRes[128]; +}NET_DVR_FACE_RECORD, *LPNET_DVR_FACE_RECORD; + +typedef struct _NET_DVR_FACE_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为4时,表示已存在人脸对应的卡号 + DWORD dwReaderNo; //人脸读卡器编号,可用于下发错误返回 + BYTE byRecvStatus; //人脸读卡器状态,按字节表示,0-失败,1-成功,2-重试或人脸质量差,3-内存已满(人脸数据满),4-已存在该人脸,5-非法人脸ID + //,6-算法建模失败,7-未下发卡权限,8-未定义(保留),9-人眼间距小距小,10-图片数据长度小于1KB,11-图片格式不符(png/jpg/bmp),12-图片像素数量超过上限,13-图片像素数量低于下限,14-图片信息校验失败,15-图片解码失败,16-人脸检测失败,17-人脸评分失败 + BYTE byRes[131]; +}NET_DVR_FACE_STATUS, *LPNET_DVR_FACE_STATUS; + +typedef struct _NET_DVR_FACE_COND +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //人脸关联的卡号(设置时该参数可不设置) + DWORD dwFaceNum; // 设置或获取人脸数量,获取时置为0xffffffff表示获取所有人脸信息 + DWORD dwEnableReaderNo; // 人脸读卡器编号 + BYTE byRes[124]; // 保留 +}NET_DVR_FACE_COND, *LPNET_DVR_FACE_COND; + +typedef struct _NET_DVR_FINGERPRINT_RECORD +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + DWORD dwFingerPrintLen; //指纹数据长度 + DWORD dwEnableReaderNo; //需要下发指纹的读卡器编号 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byRes1[30]; + BYTE byFingerData[MAX_FINGER_PRINT_LEN]; //指纹数据内容 + BYTE byRes[96]; +}NET_DVR_FINGERPRINT_RECORD, *LPNET_DVR_FINGERPRINT_RECORD; + +typedef struct _NET_DVR_FINGERPRINT_STATUS +{ + DWORD dwSize; + BYTE byCardNo[ACS_CARD_NO_LEN]; //指纹关联的卡号 + BYTE byCardReaderRecvStatus; //指纹读卡器状态,按字节表示,0-失败,1-成功,2-该指纹模组不在线,3-重试或指纹质量差,4-内存已满,5-已存在该指纹,6-已存在该指纹ID,7-非法指纹ID,8-该指纹模组无需配置 + BYTE byFingerPrintID; //手指编号,有效值范围为1-10 + BYTE byFingerType; //指纹类型 0-普通指纹,1-胁迫指纹 + BYTE byRecvStatus; //主机错误状态:0-成功,1-手指编号错误,2-指纹类型错误,3-卡号错误(卡号规格不符合设备要求),4-指纹未关联工号或卡号(工号或卡号字段为空),5-工号不存在,6-指纹数据长度为0,7-读卡器编号错误,8-工号错误 + BYTE byErrorMsg[ERROR_MSG_LEN]; //下发错误信息,当byCardReaderRecvStatus为5时,表示已存在指纹对应的卡号 + DWORD dwCardReaderNo; //当byCardReaderRecvStatus为5时,表示已存在指纹对应的指纹读卡器编号,可用于下发错误返回。0时表示无错误信息 + BYTE byRes[20]; +}NET_DVR_FINGERPRINT_STATUS, *LPNET_DVR_FINGERPRINT_STATUS; + +typedef struct tagNET_DVR_FINGERPRINT_COND +{ + DWORD dwSize; + DWORD dwFingerprintNum; + BYTE byCardNo[ACS_CARD_NO_LEN]; + DWORD dwEnableReaderNo; + BYTE byFingerPrintID; + BYTE byRes[131]; +}NET_DVR_FINGERPRINT_COND, *LPNET_DVR_FINGERPRINT_COND; + +typedef struct tagNET_DVR_CAPTURE_DATA_COND +{ + DWORD dwSize; + char szPassword[128]; //秘钥,字符串 + BYTE byRes[128]; +}NET_DVR_CAPTURE_DATA_COND, *LPNET_DVR_CAPTURE_DATA_COND; + +#define EZVIZ_CLASSSESSION_LEN 64 +#define EZVIZ_DEVICEID_LEN 32 +typedef struct tagNET_DVR_EZVIZ_USER_LOGIN_INFO +{ + char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //云服务器地址 + WORD wPort; //云服务器端口 + BYTE byLogin; + BYTE byRes1[1]; + char sClassSession[EZVIZ_CLASSSESSION_LEN]; //ClassSession, 服务器分配的一个字符串,每次通信时需要发送给服务器 + char sDeviceID[EZVIZ_DEVICEID_LEN]; //设备ID, 由服务器分配的 + BYTE byRes2[128]; +}NET_DVR_EZVIZ_USER_LOGIN_INFO, *LPNET_DVR_EZVIZ_USER_LOGIN_INFO; + +#define EZVIZ_REQURL_LEN 64 +#define EZVIZ_ACCESSTOKEN_LEN 128 +#define EZVIZ_CLIENTTYPE_LEN 32 +#define EZVIZ_FEATURECODE_LEN 64 +#define EZVIZ_OSVERSION_LEN 32 +#define EZVIZ_NETTYPE_LEN 32 +#define EZVIZ_SDKVERSION_LEN 32 +#define EZVIZ_APPID_LEN 64 +typedef struct tagNET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO +{ + char sEzvizServerAddress[NET_DVR_DEV_ADDRESS_MAX_LEN]; //云服务器地址 + BYTE byRes1[3]; + WORD wPort; //云服务器端口 + BYTE byRes2[2]; + char sUrl[EZVIZ_REQURL_LEN]; + char sAccessToken[EZVIZ_ACCESSTOKEN_LEN]; //accessToken, 服务器分配的一个字符串,每次通信时需要发送给服务器 + char sDeviceID[EZVIZ_DEVICEID_LEN]; //设备ID, 由服务器分配的 + char sClientType[EZVIZ_CLIENTTYPE_LEN]; //客户端类型: 0: PC-控件 1: ios 2: android + char sFeatureCode[EZVIZ_FEATURECODE_LEN]; //硬件特征码 + char sOsVersion[EZVIZ_OSVERSION_LEN]; //终端系统版本, 例如: IOS 7.0.4, Android 2.3. + char sNetType[EZVIZ_NETTYPE_LEN]; //网络类型, UNKNOWN GPRS EDGE UMTS HSDPA HSUPA HSPA CDMAEVDO_0 EVDO_A EVDO_B 1xRTT IDEN WIFI + char sSdkVersion[EZVIZ_SDKVERSION_LEN]; //Sdk版本号, v.1.0.20140720.45xx + char sAppID[EZVIZ_APPID_LEN]; //AppID,ios上报BundleID,Android上报包名 + BYTE byRes3[512]; +}NET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO, *LPNET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO; + + +#define MAX_ERROR_MSG_LEN 256 //最大报警错误描述信息 +//报警异常类型 +typedef enum tagALARM_EXCEPTION_ERROR_ENUM +{ + ENUM_AEE_PARAM_ERROR = 1, //参数错误 + ENUM_AEE_LENS_ERROR = 2, //长度不匹配内部结构体 + ENUM_AEE_PIC_LENS_ERROR = 3, //带图片长度不匹配 + ENUM_AEE_DEVID_LENS_ERROR = 4, //DeviceID长度不匹配 + ENUM_AEE_NEW_ALLOC_ERROR = 5, //申请内存失败 + ENUM_AEE_JSON_FORMAT_ERROR = 6, //JOSN格式错误 + ENUM_AEE_XML_FORMAT_ERROR = 7, //XML格式错误 + ENUM_AEE_BINARY_PIC_ERROR = 8, //二进制图片数据处理异常 + ENUM_AEE_PIC_NUM_ERROR = 9, //统计图片数据异常 + ENUM_AEE_GET_BOUNDARY_ERROR = 10, //提取boundary数据异常 + ENUM_AEE_BOUNDARY_NUM_ERROR = 11, //提取boundary数目异常 +}ALARM_EXCEPTION_ERROR_ENUM; + +//报警异常结构体 +typedef struct tagNET_ALARM_EXCEPTION +{ + DWORD dwAlarmType; //报警类型 + BYTE byExceptionType; //报警异常类型,参见 ALARM_EXCEPTION_ERROR_ENUM + BYTE byRes[3]; // + char szErrMsg[MAX_ERROR_MSG_LEN]; //错误信息描述 + BYTE byRes1[248]; // +}NET_ALARM_EXCEPTION, *LPNET_ALARM_EXCEPTION; + + +enum ADDITIONAL_LIB +{ + PLAYCTRL = 0, + DSSDK, + STREAMCONVERT, + STREAMTRANS, + QOSSDK, + DLL_PATH_AUDIO, + EZVIZ_SSL_SDK, + ANALYZE_DATA_LIB, + DLL_LIBICONV, + SSLEAY32_SDK, + LIBEAY32_SDK, + HCNETUTILS_SDK, + NPQ_LIB, + LOAD_DLL_COUNT, +}; + +typedef struct tagNET_DVR_AUTOTEST_CFG_HEAD +{ + DWORD dwSize; + DWORD dwInfoType; //1表示视频测试,3表示语音对讲测试 + DWORD dwRetResult; + DWORD dwDataBodySize; //后面的结构体内容大小 + void* lpDataBody; //后面的结构体 + BYTE byRes[32]; +}NET_DVR_AUTOTEST_CFG_HEAD,*LPNET_DVR_AUTOTEST_CFG_HEAD; + +//视频测试结构体如下 +typedef struct tagNET_DVR_AUTOTEST_VIDEO_CFG +{ + DWORD dwSplitScreenNums; //分屏数,支持1、4、9 + DWORD dwVoCh; //默认填写1 + DWORD dwInterface; //1表示CVBS、2表示HDMI、3表示VGA、4表示辅口HDMI +}NET_DVR_AUTOTEST_VIDEO_CFG,*LPNET_DVR_AUTOTEST_VIDEO_CFG; + +//音频测试结构体如下 +typedef struct tagNET_DVR_AUTOTEST_AUDIO_CFG +{ + DWORD dwVoCh; //默认填写2 + DWORD dwOpen; //1开启,0不开启 +}NET_DVR_AUTOTEST_AUDIO_CFG, *LPNET_DVR_AUTOTEST_AUDIO_CFG; + +typedef struct tagNET_LOCAL_AUDIOCAST_PARAM +{ + BYTE byAudioBitRate; //音频码率 参考 BITRATE_ENCODE_INDEX + BYTE byAudioSamplingRate; //音频采样率 0-默认,1-16kHZ,2-32kHZ,3-48kHZ, 4- 44.1kHZ,5-8kHZ + BYTE byRes[30]; +}NET_LOCAL_AUDIOCAST_PARAM, *LPNET_LOCAL_AUDIOCAST_PARAM; + +typedef struct tagNET_LOCAL_AUDIOCAST_CFG +{ + NET_LOCAL_AUDIOCAST_PARAM struAudioCastParam[MAX_AUDIOCAST_CFG_TYPE]; //第1到3个元素分别表示: MP3、MPEG2、AAC广播参数的配置,对应元素不填则为默认参数。其余编码类型广播参数不可配置 + BYTE byRes[64]; +}NET_LOCAL_AUDIOCAST_CFG, *LPNET_LOCAL_AUDIOCAST_CFG; + +#if ((defined __linux__) || (defined _WIN64)) +typedef struct _NET_DVR_AUDIOENCInfo /* 信息 */ +{ + DWORD in_frame_size; /* 输入一帧数据大小(BYTES),由GetInfoParam函数返回 */ + int reserved[16]; /* 保留 */ +} NET_DVR_AUDIOENC_INFO; +/* 编码模式 */ +typedef enum _ENUM_AUDIO_ENC_MODE +{ + AMR_MR475_ = 0, /* 4.75 kb/s */ + AMR_MR515_, /* 5.15 kb/s */ + AMR_MR59_, /* 5.90 kb/s */ + AMR_MR67_, /* 6.70 kb/s */ + AMR_MR74_, /* 7.40 kb/s */ + AMR_MR795_, /* 7.95 kb/s */ + AMR_MR102_, /* 10.2 kb/s */ + AMR_MR122_, /* 12.2 kb/s */ + + AMR_MRDTX_, /* 静音帧 */ + AMR_N_MODES_ +}ENUM_AUDIO_ENC_MODE; +// 音频编码 +typedef struct _NET_DVR_AUDIOENC_PROCESS_PARAM_ +{ + unsigned char *in_buf; /* 输入buf */ + unsigned char *out_buf; /* 输出buf */ + DWORD out_frame_size; /* 编码一帧后的BYTE数 */ + + int g726enc_reset; /* 重置开关 */ + int g711_type; /* g711编码类型,0 - U law, 1- A law */ + ENUM_AUDIO_ENC_MODE enc_mode; /* 音频编码模式,AMR编码配置 */ + int reserved[16]; /* 保留 */ +}NET_DVR_AUDIOENC_PROCESS_PARAM; + +typedef struct _NET_DVR_AUDIODECInfo /* 信息 */ +{ + int nchans; /* 声道数 */ + int sample_rate; /* 采样率 */ + int aacdec_profile; /* 编码用的框架 */ + int reserved[16]; /* 保留 */ +} NET_DVR_AUDIODEC_INFO; + +// 音频解码 +typedef struct _NET_DVR_AUDIODEC_PROCESS_PARAM +{ + unsigned char *in_buf; /* 输入数据buf */ + unsigned char *out_buf; /* 输出数据buf */ + DWORD in_data_size; /* 输入in_buf内数据byte数 */ + DWORD proc_data_size; /* 输出解码库处理in_buf中数据大小bytes */ + DWORD out_frame_size; /* 解码一帧后数据BYTE数 */ + NET_DVR_AUDIODEC_INFO dec_info; /* 输出解码信息 */ + + int g726dec_reset; /* 重置开关 */ + int g711_type; /* g711编码类型,0 - U law, 1- A law */ + int reserved[16]; /* 保留 */ +} NET_DVR_AUDIODEC_PROCESS_PARAM; + +const unsigned int G726_EBCIN_DECOUT_SIZE = 640; // G726库编码输入一帧及解码输出一帧的大小(定长) +#if (defined __x86_64__) +const unsigned int G726_ENC_OUT_SIZE = 160; // G726库输入一帧编码输出大小(定长) +const unsigned int G726_DEC_IN_SIZE = 200; // G726库输入一帧到解码长度(定长) +#else // if (defined __i386__) +const unsigned int G726_ENC_OUT_SIZE = 80; // G726库输入一帧编码输出大小(定长) +const unsigned int G726_DEC_IN_SIZE = 80; // G726库输入一帧到解码长度(定长) +#endif // (defined __x86_64__) +#endif // (defined __linux__) + +/********************************SDK接口函数声明*********************************/ +NET_DVR_API BOOL __stdcall NET_DVR_Init(); +NET_DVR_API BOOL __stdcall NET_DVR_Cleanup(); + +//NET_DVR_SetDVRMessage的扩展 +#ifdef _WIN32 +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessage(UINT nMessage,HWND hWnd); +NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT nMessage, HWND hWnd, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser); +#elif defined(__linux__) || defined(__APPLE__) +NET_DVR_API BOOL __stdcall NET_DVR_SetExceptionCallBack_V30(UINT reserved1, void* reserved2, void (CALLBACK* fExceptionCallBack)(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser), void *pUser); +/*Linux专有 */ +#if defined(__linux__) +NET_DVR_API BOOL NET_DVR_DrawAreaInit(INITINFO InitInfo, DWORD iUseSDL = 1); +NET_DVR_API BOOL NET_DVR_DrawAreaRelease(); +#endif +#endif + +NET_DVR_API BOOL __stdcall NET_DVR_LoadAllCom(); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessCallBack(BOOL (CALLBACK *fMessCallBack)(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen)); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessCallBack_EX(BOOL (CALLBACK *fMessCallBack_EX)(LONG lCommand,LONG lUserID,char *pBuf,DWORD dwBufLen)); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessCallBack_NEW(BOOL (CALLBACK *fMessCallBack_NEW)(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen, WORD dwLinkDVRPort)); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack(BOOL (CALLBACK *fMessageCallBack)(LONG lCommand,char *sDVRIP,char *pBuf,DWORD dwBufLen, DWORD dwUser), DWORD dwUser); +typedef void (CALLBACK *MSGCallBack)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V30(MSGCallBack fMessageCallBack, void* pUser); +typedef BOOL (CALLBACK *MSGCallBack_V31)(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V31(MSGCallBack_V31 fMessageCallBack, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V50(int iIndex, MSGCallBack fMessageCallBack, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRMessageCallBack_V51(int iIndex, MSGCallBack fMsgCallBack, void* pUser); + +NET_DVR_API BOOL __stdcall NET_DVR_SetConnectTime(DWORD dwWaitTime = 3000, DWORD dwTryTimes = 3); +NET_DVR_API BOOL __stdcall NET_DVR_SetReconnect(DWORD dwInterval = 30000, BOOL bEnableRecon = TRUE); +NET_DVR_API DWORD __stdcall NET_DVR_GetSDKVersion(); +NET_DVR_API DWORD __stdcall NET_DVR_GetSDKBuildVersion(); +NET_DVR_API int __stdcall NET_DVR_IsSupport(); +NET_DVR_API BOOL __stdcall NET_DVR_StartListen(char *sLocalIP,WORD wLocalPort); +NET_DVR_API BOOL __stdcall NET_DVR_StopListen(); + +NET_DVR_API LONG __stdcall NET_DVR_StartListen_V30(char *sLocalIP, WORD wLocalPort, MSGCallBack DataCallback, void* pUserData = NULL); +NET_DVR_API BOOL __stdcall NET_DVR_StopListen_V30(LONG lListenHandle); +NET_DVR_API LONG __stdcall NET_DVR_Login(char *sDVRIP,WORD wDVRPort,char *sUserName,char *sPassword,LPNET_DVR_DEVICEINFO lpDeviceInfo); +NET_DVR_API LONG __stdcall NET_DVR_Login_V30(char *sDVRIP, WORD wDVRPort, char *sUserName, char *sPassword, LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo); + +NET_DVR_API LONG __stdcall NET_DVR_Login_V40(LPNET_DVR_USER_LOGIN_INFO pLoginInfo,LPNET_DVR_DEVICEINFO_V40 lpDeviceInfo); +NET_DVR_API BOOL __stdcall NET_DVR_Login_Check(char *sDVRIP, WORD wDVRPort, char *sUserName, char *sPassword, LPNET_DVR_DEVICEINFO_V30 lpDeviceInfo); +NET_DVR_API BOOL __stdcall NET_DVR_Logout(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_Logout_V30(LONG lUserID); +NET_DVR_API DWORD __stdcall NET_DVR_GetLastError(); +NET_DVR_API void __stdcall NET_DVR_GetLastErrorModelCode(DWORD *pModelCode, DWORD *pMErrDevSelfEx); +NET_DVR_API char* __stdcall NET_DVR_GetErrorMsg(LONG *pErrorNo = NULL); +NET_DVR_API BOOL __stdcall NET_DVR_SetShowMode(DWORD dwShowType,COLORREF colorKey); +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRIPByResolveSvr(char *sServerIP, WORD wServerPort, BYTE *sDVRName,WORD wDVRNameLen,BYTE *sDVRSerialNumber,WORD wDVRSerialLen,char* sGetIP); +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRIPByResolveSvr_EX(char *sServerIP, WORD wServerPort, BYTE *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP, DWORD *dwPort); +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRNAMEByResolveSvr(char const *sServerIP, WORD wServerPort, char const *sIP, char *sDVRName); + +//预览相关接口 +NET_DVR_API LONG __stdcall NET_DVR_PlayDirect(char *sDVRIP, char *sUserName, char *sPassword, \ + LPNET_DVR_CLIENTINFO lpClientInfo, void(CALLBACK *fRealDataCallBack_V30) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser) = NULL, void* pUser = NULL, BOOL bBlocked = FALSE); +NET_DVR_API LONG __stdcall NET_DVR_RealPlay(LONG lUserID,LPNET_DVR_CLIENTINFO lpClientInfo); +NET_DVR_API LONG __stdcall NET_DVR_RealPlay_V30(LONG lUserID, LPNET_DVR_CLIENTINFO lpClientInfo, void(CALLBACK *fRealDataCallBack_V30) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser) = NULL, void* pUser = NULL, BOOL bBlocked = FALSE); +NET_DVR_API BOOL __stdcall NET_DVR_StopRealPlay(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_StopPlayDirect(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_RigisterDrawFun(LONG lRealHandle,void (CALLBACK* fDrawFun)(LONG lRealHandle,HDC hDc,DWORD dwUser),DWORD dwUser); +NET_DVR_API BOOL __stdcall NET_DVR_RigisterDrawFunEx(LONG lRealHandle, void (CALLBACK* fDrawFunEx)(LONG lRealHandle, HDC hDc, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPlayerBufNumber(LONG lRealHandle,DWORD dwBufNum); +NET_DVR_API BOOL __stdcall NET_DVR_ThrowBFrame(LONG lRealHandle,DWORD dwNum); +NET_DVR_API BOOL __stdcall NET_DVR_SetAudioMode(DWORD dwMode); +NET_DVR_API BOOL __stdcall NET_DVR_OpenSound(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CloseSound(); +NET_DVR_API BOOL __stdcall NET_DVR_OpenSoundShare(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CloseSoundShare(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_Volume(LONG lRealHandle,WORD wVolume); +NET_DVR_API BOOL __stdcall NET_DVR_SaveRealData(LONG lRealHandle,char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_StopSaveRealData(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetRealDataCallBack(LONG lRealHandle,void(CALLBACK *fRealDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetRealDataCallBackEx(LONG lRealHandle,void(CALLBACK *fRealDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void *pUser),void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetStandardDataCallBack(LONG lRealHandle,void(CALLBACK *fStdDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetStandardDataCallBackEx(LONG lRealHandle,void(CALLBACK *fStdDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void *pUser),void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetTransparentDataCallBack(LONG lRealHandle, void(CALLBACK *fTpDataCallBack) (LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser), void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_CapturePicture(LONG lRealHandle,char *sPicFileName);//bmp +NET_DVR_API BOOL __stdcall NET_DVR_SetCapturePictureMode(DWORD dwCaptureMode); + +//动态生成I帧 +NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrame(LONG lUserID, LONG lChannel);//主码流 +NET_DVR_API BOOL __stdcall NET_DVR_MakeKeyFrameSub(LONG lUserID, LONG lChannel);//子码流 + +//云台控制相关接口 +NET_DVR_API BOOL __stdcall NET_DVR_PTZControl(LONG lRealHandle,DWORD dwPTZCommand,DWORD dwStop); +NET_DVR_API BOOL __stdcall NET_DVR_PTZControl_Other(LONG lUserID,LONG lChannel,DWORD dwPTZCommand,DWORD dwStop); +NET_DVR_API BOOL __stdcall NET_DVR_TransPTZ(LONG lRealHandle,char *pPTZCodeBuf,DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_TransPTZ_Other(LONG lUserID,LONG lChannel,char *pPTZCodeBuf,DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_PTZPreset(LONG lRealHandle,DWORD dwPTZPresetCmd,DWORD dwPresetIndex); +NET_DVR_API BOOL __stdcall NET_DVR_PTZPreset_Other(LONG lUserID,LONG lChannel,DWORD dwPTZPresetCmd,DWORD dwPresetIndex); +NET_DVR_API BOOL __stdcall NET_DVR_TransPTZ_EX(LONG lRealHandle,char *pPTZCodeBuf,DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_PTZControl_EX(LONG lRealHandle,DWORD dwPTZCommand,DWORD dwStop); +NET_DVR_API BOOL __stdcall NET_DVR_PTZPreset_EX(LONG lRealHandle,DWORD dwPTZPresetCmd,DWORD dwPresetIndex); +NET_DVR_API BOOL __stdcall NET_DVR_PTZCruise(LONG lRealHandle,DWORD dwPTZCruiseCmd,BYTE byCruiseRoute, BYTE byCruisePoint, WORD wInput); +NET_DVR_API BOOL __stdcall NET_DVR_PTZCruise_Other(LONG lUserID,LONG lChannel,DWORD dwPTZCruiseCmd,BYTE byCruiseRoute, BYTE byCruisePoint, WORD wInput); +NET_DVR_API BOOL __stdcall NET_DVR_PTZCruise_EX(LONG lRealHandle,DWORD dwPTZCruiseCmd,BYTE byCruiseRoute, BYTE byCruisePoint, WORD wInput); +NET_DVR_API BOOL __stdcall NET_DVR_PTZTrack(LONG lRealHandle, DWORD dwPTZTrackCmd); +NET_DVR_API BOOL __stdcall NET_DVR_PTZTrack_Other(LONG lUserID, LONG lChannel, DWORD dwPTZTrackCmd); +NET_DVR_API BOOL __stdcall NET_DVR_PTZTrack_EX(LONG lRealHandle, DWORD dwPTZTrackCmd); +NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed(LONG lRealHandle, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed); +NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_Other(LONG lUserID, LONG lChannel, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed); +NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_EX(LONG lRealHandle, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed); +NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCruise(LONG lUserID,LONG lChannel,LONG lCruiseRoute, LPNET_DVR_CRUISE_RET lpCruiseRet); + + +//文件查找与回放 +NET_DVR_API LONG __stdcall NET_DVR_FindFile(LONG lUserID,LONG lChannel,DWORD dwFileType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile(LONG lFindHandle,LPNET_DVR_FIND_DATA lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_Card(LONG lFindHandle, LPNET_DVR_FINDDATA_CARD lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindClose(LONG lFindHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_V30(LONG lFindHandle, LPNET_DVR_FINDDATA_V30 lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_V40(LONG lFindHandle, LPNET_DVR_FINDDATA_V40 lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_V50(LONG lFindHandle, LPNET_DVR_FINDDATA_V50 lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindFile_V30(LONG lUserID, LPNET_DVR_FILECOND pFindCond); +NET_DVR_API LONG __stdcall NET_DVR_FindFile_V50(LONG lUserID, LPNET_DVR_FILECOND_V50 pFindCond); +NET_DVR_API BOOL __stdcall NET_DVR_FindClose_V30(LONG lFindHandle); + +NET_DVR_API BOOL __stdcall NET_DVR_LockFileByName(LONG lUserID, char *sLockFileName); +NET_DVR_API BOOL __stdcall NET_DVR_UnlockFileByName(LONG lUserID, char *sUnlockFileName); +NET_DVR_API BOOL __stdcall NET_DVR_LockFileByNameV40(LONG lUserID, BOOL bLock, const NET_DVR_LOCK_FILE_BY_NAME_PARA *lpLockFilePara); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByName(LONG lUserID,char *sPlayBackFileName, HWND hWnd); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime(LONG lUserID,LONG lChannel, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime, HWND hWnd); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackReverseByName(LONG lUserID, char *sPlayBackFileName, HWND hWnd); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByName_V50(LONG lUserID, LPNET_DVR_PLAY_BY_NAME_PARA pParam); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackReverseByName_V50(LONG lUserID, LPNET_DVR_PLAY_BY_NAME_PARA pParam); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime_PCNVR(LONG lUserID, NET_DVR_PLAYBCK_BYTIME_COND_PCNVR const *pPlaybackParams); + +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackControl(LONG lPlayHandle,DWORD dwControlCode,DWORD dwInValue,DWORD *LPOutValue); +NET_DVR_API BOOL __stdcall NET_DVR_StopPlayBack(LONG lPlayHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetPlayDataCallBack(LONG lPlayHandle,void(CALLBACK *fPlayDataCallBack) (LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPlayBackESCallBack(LONG lPlayHandle, void (CALLBACK *fPlayESCallBack)(LONG lPlayHandle, NET_DVR_PACKET_INFO_EX *struPackInfo, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPlayDataCallBack_V40(LONG lPlayHandle,void(CALLBACK *fPlayDataCallBack_V40) (LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void *pUser),void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackSaveData(LONG lPlayHandle,char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_StopPlayBackSave(LONG lPlayHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetPlayBackOsdTime(LONG lPlayHandle, LPNET_DVR_TIME lpOsdTime); +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackCaptureFile(LONG lPlayHandle,char *sFileName); +NET_DVR_API LONG __stdcall NET_DVR_GetFileByName(LONG lUserID,char *sDVRFileName,char *sSavedFileName); +NET_DVR_API LONG __stdcall NET_DVR_GetFileByName_V50(LONG lUserID, LPNET_DVR_DOWNLOAD_BY_NAME_COND pParam); +NET_DVR_API LONG __stdcall NET_DVR_GetFileByTime(LONG lUserID,LONG lChannel, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime, char *sSavedFileName); +NET_DVR_API BOOL __stdcall NET_DVR_StopGetFile(LONG lFileHandle); +NET_DVR_API int __stdcall NET_DVR_GetDownloadPos(LONG lFileHandle); +NET_DVR_API int __stdcall NET_DVR_GetPlayBackPos(LONG lPlayHandle); + +//升级 +NET_DVR_API LONG __stdcall NET_DVR_AdapterUpgrade(LONG lUserID, char *sFileName); +NET_DVR_API LONG __stdcall NET_DVR_Upgrade(LONG lUserID, char *sFileName); +NET_DVR_API LONG __stdcall NET_DVR_VcalibUpgrade(LONG lUserID, LONG lChannel, char const *sFileName); +NET_DVR_API int __stdcall NET_DVR_GetUpgradeState(LONG lUpgradeHandle); +NET_DVR_API int __stdcall NET_DVR_GetUpgradeProgress(LONG lUpgradeHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CloseUpgradeHandle(LONG lUpgradeHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetNetworkEnvironment(DWORD dwEnvironmentLevel); +//远程格式化硬盘 +NET_DVR_API LONG __stdcall NET_DVR_FormatDisk(LONG lUserID,LONG lDiskNumber); +NET_DVR_API LONG __stdcall NET_DVR_FormatDisk_V50(LONG lUserID, NET_DVR_FORMAT_HDD *lpStruHddFormatCond); +NET_DVR_API BOOL __stdcall NET_DVR_GetFormatProgress(LONG lFormatHandle, LONG *pCurrentFormatDisk,LONG *pCurrentDiskPos,LONG *pFormatStatic); +NET_DVR_API BOOL __stdcall NET_DVR_CloseFormatHandle(LONG lFormatHandle); +//报警 +NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_CloseAlarmChan(LONG lAlarmHandle); +NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan_V30(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_CloseAlarmChan_V30(LONG lAlarmHandle); +//语音对讲 +NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser), DWORD dwUser); +NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_V30(LONG lUserID, DWORD dwVoiceChan, BOOL bNeedCBNoEncData, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetVoiceComClientVolume(LONG lVoiceComHandle, WORD wVolume); +NET_DVR_API BOOL __stdcall NET_DVR_StopVoiceCom(LONG lVoiceComHandle); +//语音转发 +NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_MR(LONG lUserID, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, DWORD dwUser), DWORD dwUser); +NET_DVR_API LONG __stdcall NET_DVR_StartVoiceCom_MR_V30(LONG lUserID, DWORD dwVoiceChan, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_VoiceComSendData(LONG lVoiceComHandle, char *pSendBuf, DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetCurrentAudioCompress(LONG lUserID, LPNET_DVR_COMPRESSION_AUDIO lpCompressAudio); +NET_DVR_API BOOL __stdcall NET_DVR_GetCurrentAudioCompress_V50(LONG lUserID, LPNET_DVR_AUDIO_CHANNEL lpAudioChannel, LPNET_DVR_COMPRESSION_AUDIO lpCompressAudio); +//语音广播 +NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStart(); +NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStart_V30(void(CALLBACK *fVoiceDataCallBack)(char *pRecvDataBuffer, DWORD dwBufSize, void * pUser), void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_ClientAudioStop(); +NET_DVR_API BOOL __stdcall NET_DVR_AddDVR(LONG lUserID); +NET_DVR_API LONG __stdcall NET_DVR_AddDVR_V30(LONG lUserID, DWORD dwVoiceChan); +NET_DVR_API BOOL __stdcall NET_DVR_DelDVR(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_DelDVR_V30(LONG lVoiceHandle); +//透明通道设置 +NET_DVR_API LONG __stdcall NET_DVR_SerialStart(LONG lUserID,LONG lSerialPort,void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle,char *pRecvDataBuffer,DWORD dwBufSize,DWORD dwUser),DWORD dwUser); +//485作为透明通道时,需要指明通道号,因为不同通道号485的设置可以不同(比如波特率) +NET_DVR_API LONG __stdcall NET_DVR_SerialStart_V40(LONG lUserID,void* lpInBuffer, LONG dwInBufferSize, void(CALLBACK *fSerialDataCallBack)(LONG lSerialHandle, LONG lCHannel, char *pRecvDataBuffer, DWORD dwBufSize, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SerialSend(LONG lSerialHandle, LONG lChannel, char *pSendBuf,DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_SerialStop(LONG lSerialHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SendTo232Port(LONG lUserID, char *pSendBuf, DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_SendToSerialPort(LONG lUserID, DWORD dwSerialPort, DWORD dwSerialIndex, char *pSendBuf, DWORD dwBufSize); + +#if (!defined __linux__) && (!defined _WIN64) +//Decoding nBitrate = 16000 +NET_DVR_API void* __stdcall NET_DVR_InitG722Decoder(int nBitrate = 16000); +NET_DVR_API BOOL __stdcall NET_DVR_DecodeG722Frame(void *pDecHandle, BYTE* pInBuffer, BYTE* pOutBuffer); +//Encoding +NET_DVR_API void* __stdcall NET_DVR_InitG722Encoder(); +NET_DVR_API BOOL __stdcall NET_DVR_EncodeG722Frame(void *pEncodeHandle, BYTE* pInBuffer, BYTE* pOutBuffer); +#elif ((defined __linux__) || (defined _WIN64)) +NET_DVR_API void* __stdcall NET_DVR_InitG722Decoder(); +NET_DVR_API BOOL __stdcall NET_DVR_DecodeG722Frame(void *handle, NET_DVR_AUDIODEC_PROCESS_PARAM * param); +//Encoding +NET_DVR_API void* __stdcall NET_DVR_InitG722Encoder(NET_DVR_AUDIOENC_INFO* enc_info); +NET_DVR_API BOOL __stdcall NET_DVR_EncodeG722Frame(void *handle, NET_DVR_AUDIOENC_PROCESS_PARAM* param); +#endif // _WIN32 +NET_DVR_API void __stdcall NET_DVR_ReleaseG722Decoder(void *pDecHandle); +NET_DVR_API void __stdcall NET_DVR_ReleaseG722Encoder(void *pEncodeHandle); + +//解码 +NET_DVR_API void* __stdcall NET_DVR_InitG726Decoder(void** pDecMoudle); +NET_DVR_API void __stdcall NET_DVR_ReleaseG726Decoder(void *pDecHandle); +NET_DVR_API BOOL __stdcall NET_DVR_DecodeG726Frame(void *pDecMoudle, BYTE* pInBuffer, BYTE* pOutBuffer, BYTE byReset); + +//编码 +NET_DVR_API void* __stdcall NET_DVR_InitG726Encoder(void** pEncMoudle); +NET_DVR_API BOOL __stdcall NET_DVR_EncodeG726Frame(void *pEncMoudle, BYTE* pInBuffer, BYTE* pOutBuffer, BYTE byReset); +NET_DVR_API void __stdcall NET_DVR_ReleaseG726Encoder(void *pEncHandle); + +//远程控制本地显示 +NET_DVR_API BOOL __stdcall NET_DVR_ClickKey(LONG lUserID, LONG lKeyIndex); + +NET_DVR_API BOOL __stdcall NET_DVR_DoorBellControl(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_Preview(LONG lUserID, LONG lPicNum); +NET_DVR_API BOOL __stdcall NET_DVR_PreviewOne(LONG lUserID, LONG lChannel); +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackByNameLocDisplay(LONG lUserID, char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackByTimeLocDisplay(LONG lUserID, LONG lChannel, NET_DVR_TIME const *lpStartTime, NET_DVR_TIME const *lpStopTime); +NET_DVR_API BOOL __stdcall NET_DVR_StopLocDisplayPlay(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_PlayControlLocDisplay(LONG lUserID, DWORD dwControlCode); +//远程控制设备端手动录像 +NET_DVR_API BOOL __stdcall NET_DVR_StartDVRRecord(LONG lUserID,LONG lChannel,LONG lRecordType); +NET_DVR_API BOOL __stdcall NET_DVR_StopDVRRecord(LONG lUserID,LONG lChannel); +//解码卡 +NET_DVR_API BOOL __stdcall NET_DVR_InitDevice_Card(long *pDeviceTotalChan); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseDevice_Card(); +NET_DVR_API BOOL __stdcall NET_DVR_InitDDraw_Card(HWND hParent,COLORREF colorKey); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseDDraw_Card(); +NET_DVR_API LONG __stdcall NET_DVR_RealPlay_Card(LONG lUserID,LPNET_DVR_CARDINFO lpCardInfo,long lChannelNum); +NET_DVR_API BOOL __stdcall NET_DVR_ResetPara_Card(LONG lRealHandle,LPNET_DVR_DISPLAY_PARA lpDisplayPara); +NET_DVR_API BOOL __stdcall NET_DVR_RefreshSurface_Card(); +NET_DVR_API BOOL __stdcall NET_DVR_ClearSurface_Card(); +NET_DVR_API BOOL __stdcall NET_DVR_RestoreSurface_Card(); +NET_DVR_API BOOL __stdcall NET_DVR_OpenSound_Card(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CloseSound_Card(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetVolume_Card(LONG lRealHandle,WORD wVolume); +NET_DVR_API BOOL __stdcall NET_DVR_AudioPreview_Card(LONG lRealHandle,BOOL bEnable); +NET_DVR_API LONG __stdcall NET_DVR_GetCardLastError_Card(); +NET_DVR_API BOOL __stdcall NET_DVR_SetDspErrMsg_Card(DWORD dwMessage, HANDLE hWnd); +NET_DVR_API BOOL __stdcall NET_DVR_ResetDSP_Card(LONG iChannelNum); +NET_DVR_API HANDLE __stdcall NET_DVR_GetChanHandle_Card(LONG lRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CapturePicture_Card(LONG lRealHandle, char *sPicFileName); +NET_DVR_API BOOL __stdcall NET_DVR_GetSerialNum_Card(long lChannelNum,DWORD *pDeviceSerialNo); +NET_DVR_API LONG __stdcall NET_DVR_FindDVRLog(LONG lUserID, LONG lSelectMode, DWORD dwMajorType,DWORD dwMinorType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); +NET_DVR_API LONG __stdcall NET_DVR_FindNextLog(LONG lLogHandle, LPNET_DVR_LOG lpLogData); +NET_DVR_API BOOL __stdcall NET_DVR_FindLogClose(LONG lLogHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindDVRLog_V30(LONG lUserID, LONG lSelectMode, DWORD dwMajorType,DWORD dwMinorType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime, BOOL bOnlySmart = FALSE); +NET_DVR_API LONG __stdcall NET_DVR_FindNextLog_V30(LONG lLogHandle, LPNET_DVR_LOG_V30 lpLogData); +NET_DVR_API LONG __stdcall NET_DVR_FindDVRLog_V50(LONG lUserID, LPNET_DVR_FIND_LOG_COND pFindCond); +NET_DVR_API LONG __stdcall NET_DVR_FindNextLog_V50(LONG lLogHandle, LPNET_DVR_LOG_V50 lpLogData); +NET_DVR_API BOOL __stdcall NET_DVR_FindLogClose_V30(LONG lLogHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindAlarmHostLog(LONG lUserID, LONG lSelectMode, NET_DVR_ALARMHOST_SEARCH_LOG_PARAM *lpSearchParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextAlarmHostLog(LONG lFindHandle, NET_DVR_ALARMHOST_LOG_RET *lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindAlarmHostLogClose(LONG lFindHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindFile_PCNVR(LONG lUserID, LPNET_DVR_FILE_COND_PCNVR const pFindCond); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_PCNVR(LONG lFindHandle, LPNET_DVR_FINDDATA_PCNVR lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindClose_PCNVR(LONG lFindHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindFileByCard(LONG lUserID,LONG lChannel,DWORD dwFileType, int nFindType, BYTE *sCardNumber, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); +NET_DVR_API BOOL __stdcall NET_DVR_CaptureJPEGPicture(LONG lUserID, LONG lChannel, LPNET_DVR_JPEGPARA lpJpegPara, char *sPicFileName); +NET_DVR_API BOOL __stdcall NET_DVR_CaptureJPEGPicture_NEW(LONG lUserID, LONG lChannel, LPNET_DVR_JPEGPARA lpJpegPara, char *sJpegPicBuffer, DWORD dwPicSize, LPDWORD lpSizeReturned); +NET_DVR_API BOOL __stdcall NET_DVR_CapturePicture_V50(LONG lUserID, LONG lChannel, LPNET_DVR_PICPARAM_V50 lpPicParam, char *sPicBuffer, DWORD dwPicSize, LPDWORD lpSizeReturned); +NET_DVR_API BOOL __stdcall NET_DVR_CaptureJPEGPicture_WithAppendData(LONG lUserID, LONG lChannel, NET_DVR_JPEGPICTURE_WITH_APPENDDATA *lpJpegWithAppend); +NET_DVR_API BOOL __stdcall NET_DVR_GetRealPlayOsdTime(LONG iRealHandle, LPNET_DVR_TIME lpOsdTime); +NET_DVR_API BOOL __stdcall NET_DVR_RealPlayPause(LONG iRealHandle); +NET_DVR_API BOOL __stdcall NET_DVR_RealPlayRestart(LONG iRealHandle, HWND hPlayWnd); +NET_DVR_API int __stdcall NET_DVR_GetRealPlayerIndex(LONG lRealHandle); +NET_DVR_API int __stdcall NET_DVR_GetPlayBackPlayerIndex(LONG lPlayHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetScaleCFG(LONG lUserID, DWORD dwScale); +NET_DVR_API BOOL __stdcall NET_DVR_GetScaleCFG(LONG lUserID, DWORD *lpOutScale); +NET_DVR_API BOOL __stdcall NET_DVR_SetScaleCFG_V30(LONG lUserID, LPNET_DVR_SCALECFG pScalecfg); +NET_DVR_API BOOL __stdcall NET_DVR_GetScaleCFG_V30(LONG lUserID, LPNET_DVR_SCALECFG pScalecfg); +NET_DVR_API BOOL __stdcall NET_DVR_SetATMPortCFG(LONG lUserID, WORD wATMPort); +NET_DVR_API BOOL __stdcall NET_DVR_GetATMPortCFG(LONG lUserID, WORD *LPOutATMPort); +NET_DVR_API BOOL __stdcall NET_DVR_InitDDrawDevice(); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseDDrawDevice(); +NET_DVR_API LONG __stdcall NET_DVR_GetDDrawDeviceTotalNums(); +NET_DVR_API BOOL __stdcall NET_DVR_SetDDrawDevice(LONG lPlayPort, DWORD nDeviceNum); + +NET_DVR_API BOOL __stdcall NET_DVR_PTZSelZoomIn(LONG lRealHandle, LPNET_DVR_POINT_FRAME pStruPointFrame); +NET_DVR_API BOOL __stdcall NET_DVR_PTZSelZoomIn_EX(LONG lUserID, LONG lChannel, LPNET_DVR_POINT_FRAME pStruPointFrame); +NET_DVR_API BOOL __stdcall NET_DVR_StartDecode(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERINFO lpDecoderinfo); +NET_DVR_API BOOL __stdcall NET_DVR_StopDecode(LONG lUserID, LONG lChannel); +NET_DVR_API BOOL __stdcall NET_DVR_GetDecoderState(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERSTATE lpDecoderState); +NET_DVR_API BOOL __stdcall NET_DVR_SetDecInfo(LONG lUserID, LONG lChannel, LPNET_DVR_DECCFG lpDecoderinfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetDecInfo(LONG lUserID, LONG lChannel, LPNET_DVR_DECCFG lpDecoderinfo); +NET_DVR_API BOOL __stdcall NET_DVR_SetDecTransPort(LONG lUserID, LPNET_DVR_PORTCFG lpTransPort); +NET_DVR_API BOOL __stdcall NET_DVR_GetDecTransPort(LONG lUserID, LPNET_DVR_PORTCFG lpTransPort); +NET_DVR_API BOOL __stdcall NET_DVR_DecPlayBackCtrl(LONG lUserID, LONG lChannel, DWORD dwControlCode, DWORD dwInValue,DWORD *LPOutValue, LPNET_DVR_PLAYREMOTEFILE lpRemoteFileInfo); +NET_DVR_API BOOL __stdcall NET_DVR_StartDecSpecialCon(LONG lUserID, LONG lChannel, LPNET_DVR_DECCHANINFO lpDecChanInfo); +NET_DVR_API BOOL __stdcall NET_DVR_StopDecSpecialCon(LONG lUserID, LONG lChannel, LPNET_DVR_DECCHANINFO lpDecChanInfo); +NET_DVR_API BOOL __stdcall NET_DVR_DecCtrlDec(LONG lUserID, LONG lChannel, DWORD dwControlCode); +NET_DVR_API BOOL __stdcall NET_DVR_DecCtrlScreen(LONG lUserID, LONG lChannel, DWORD dwControl); +NET_DVR_API BOOL __stdcall NET_DVR_GetDecCurLinkStatus(LONG lUserID, LONG lChannel, LPNET_DVR_DECSTATUS lpDecStatus); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamic(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DYNAMIC_DEC lpDynamicInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStopDynamic(LONG lUserID, DWORD dwDecChanNum); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanInfo(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_CHAN_INFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanInfo(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanInfo(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanEnable(LONG lUserID, DWORD dwDecChanNum, DWORD dwEnable); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanEnable(LONG lUserID, DWORD dwDecChanNum, LPDWORD lpdwEnable); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecEnable(LONG lUserID, LPDWORD lpdwEnable); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDecChanEnable(LONG lUserID, DWORD dwDecChanNum, DWORD dwEnable); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanEnable(LONG lUserID, DWORD dwDecChanNum, LPDWORD lpdwEnable); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanStatus(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_CHAN_STATUS lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetVideoStandard(LONG lUserID, DWORD dwDecChanNum, LPDWORD lpdwVideoStandard); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetVideoStandard(LONG lUserID, DWORD dwDecChanNum, DWORD dwVideoStandard); + +//2007-12-22 增加支持接口 +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetTranInfo(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG lpTranInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetTranInfo(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG lpTranInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetRemotePlay(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_REMOTE_PLAY lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetRemotePlayControl(LONG lUserID, DWORD dwDecChanNum, DWORD dwControlCode, DWORD dwInValue, DWORD *LPOutValue); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetRemotePlayStatus(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_STATUS lpOuter); +//2009-4-13 新增 +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamic_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PU_STREAM_CFG lpDynamicInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanInfo_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V30 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanInfo_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V30 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanInfo_V30(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_CHAN_INFO_V30 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetTranInfo_V30(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30 lpTranInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetTranInfo_V30(LONG lUserID, LPNET_DVR_MATRIX_TRAN_CHAN_CONFIG_V30 lpTranInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDisplayCfg(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG lpDisplayCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDisplayCfg(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG lpDisplayCfg); + +NET_DVR_API LONG __stdcall NET_DVR_MatrixStartPassiveDecode(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_PASSIVEMODE lpPassiveMode /*, void(CALLBACK *fPassiveDataCallBack)(LONG lPassiveHandle, char * pSendBuf, DWORD dwBufSize, DWORD dwStatus, DWORD dwUser), DWORD dwUser*/); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSendData(LONG lPassiveHandle, char *pSendBuf, DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStopPassiveDecode(LONG lPassiveHandle); +NET_DVR_API BOOL __stdcall NET_DVR_UploadLogo(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_DISP_LOGOCFG lpDispLogoCfg, char *sLogoBuffer); +#define NET_DVR_SHOWLOGO 1 /*显示LOGO*/ +#define NET_DVR_HIDELOGO 2 /*隐藏LOGO*/ +NET_DVR_API BOOL __stdcall NET_DVR_LogoSwitch(LONG lUserID, DWORD dwDecChan, DWORD dwLogoSwitch); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDeviceStatus(LONG lUserID, LPNET_DVR_DECODER_WORK_STATUS lpDecoderCfg); + +#define DISP_CMD_ENLARGE_WINDOW 1 /*显示通道放大某个窗口*/ +#define DISP_CMD_RENEW_WINDOW 2 /*显示通道窗口还原*/ +#define DISP_CMD_OPENAUDIO 3 /*显示通道打开音频*/ +#define DISP_CMD_CLOSEAUDIO 4 /*显示通道关闭音频*/ + +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDiaplayControl(LONG lUserID, DWORD dwDispChanNum, DWORD dwDispChanCmd, DWORD dwCmdParam); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixPassiveDecodeControl(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PASSIVEDECODE_CONTROL lpInter); +NET_DVR_API LONG __stdcall NET_DVR_MatrixGetPassiveDecodeStatus(LONG lPassiveHandle); + +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanCfg(LONG lUserID, DWORD dwDecChan, LPNET_DVR_MATRIX_DECCHAN_CONTROL lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDecChanCfg(LONG lUserID, DWORD dwDecChan, LPNET_DVR_MATRIX_DECCHAN_CONTROL lpInter); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime_NEW(LONG lUserID, LONG lChannel, NET_DVR_TIME const *lpStartTime, NET_DVR_TIME const *lpStopTime, LONG lLongitude, LONG lLatitude, HWND hWnd); +NET_DVR_API BOOL __stdcall NET_DVR_RefreshPlay(LONG lPlayHandle); + +//恢复默认值 +NET_DVR_API BOOL __stdcall NET_DVR_RestoreConfig(LONG lUserID); +//保存参数 +NET_DVR_API BOOL __stdcall NET_DVR_SaveConfig(LONG lUserID); +//重启 +NET_DVR_API BOOL __stdcall NET_DVR_RebootDVR(LONG lUserID); +//关闭DVR +NET_DVR_API BOOL __stdcall NET_DVR_ShutDownDVR(LONG lUserID); + +//参数配置 begin +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned); +NET_DVR_API BOOL __stdcall NET_DVR_SetDVRConfig(LONG lUserID, DWORD dwCommand,LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRWorkState_V30(LONG lUserID, LPNET_DVR_WORKSTATE_V30 lpWorkState); +NET_DVR_API BOOL __stdcall NET_DVR_GetDVRWorkState(LONG lUserID, LPNET_DVR_WORKSTATE lpWorkState); +NET_DVR_API BOOL __stdcall NET_DVR_SetVideoEffect(LONG lUserID, LONG lChannel, DWORD dwBrightValue, DWORD dwContrastValue, DWORD dwSaturationValue, DWORD dwHueValue); +NET_DVR_API BOOL __stdcall NET_DVR_GetVideoEffect(LONG lUserID, LONG lChannel, DWORD *pBrightValue, DWORD *pContrastValue, DWORD *pSaturationValue, DWORD *pHueValue); +NET_DVR_API BOOL __stdcall NET_DVR_ClientGetframeformat(LONG lUserID, LPNET_DVR_FRAMEFORMAT lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_ClientSetframeformat(LONG lUserID, LPNET_DVR_FRAMEFORMAT lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_ClientGetframeformat_V30(LONG lUserID, LPNET_DVR_FRAMEFORMAT_V30 lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_ClientSetframeformat_V30(LONG lUserID, LPNET_DVR_FRAMEFORMAT_V30 lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_GetAtmFrameFormat_V30(LONG lUserID, LONG lAtmChannel, LPNET_DVR_ATM_FRAMEFORMAT_V30 lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_SetAtmFrameFormat_V30(LONG lUserID, LONG lAtmChannel, LPNET_DVR_ATM_FRAMEFORMAT_V30 lpFrameFormat); +NET_DVR_API BOOL __stdcall NET_DVR_GetAtmProtocol(LONG lUserID, LPNET_DVR_ATM_PROTOCOL lpAtmProtocol); +NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmOut_V30(LONG lUserID, LPNET_DVR_ALARMOUTSTATUS_V30 lpAlarmOutState); +NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmOut(LONG lUserID, LPNET_DVR_ALARMOUTSTATUS lpAlarmOutState); +NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmOut(LONG lUserID, LONG lAlarmOutPort,LONG lAlarmOutStatic); + +//视频参数调节 +NET_DVR_API BOOL __stdcall NET_DVR_ClientSetVideoEffect(LONG lRealHandle,DWORD dwBrightValue,DWORD dwContrastValue, DWORD dwSaturationValue,DWORD dwHueValue); +NET_DVR_API BOOL __stdcall NET_DVR_ClientGetVideoEffect(LONG lRealHandle,DWORD *pBrightValue,DWORD *pContrastValue, DWORD *pSaturationValue,DWORD *pHueValue); + +//配置文件 +NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile(LONG lUserID, char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_SetConfigFile(LONG lUserID, char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile_V30(LONG lUserID, char *sOutBuffer, DWORD dwOutSize, DWORD *pReturnSize); + +NET_DVR_API BOOL __stdcall NET_DVR_GetConfigFile_EX(LONG lUserID, char *sOutBuffer, DWORD dwOutSize); +NET_DVR_API BOOL __stdcall NET_DVR_SetConfigFile_EX(LONG lUserID, char *sInBuffer, DWORD dwInSize); + +//启用日志文件写入接口 +NET_DVR_API BOOL __stdcall NET_DVR_SetLogToFile(DWORD nLogLevel = 0, char * strLogDir = NULL, BOOL bAutoDel = TRUE); +NET_DVR_API BOOL __stdcall NET_DVR_GetSDKState(LPNET_DVR_SDKSTATE pSDKState); +NET_DVR_API BOOL __stdcall NET_DVR_GetSDKAbility(LPNET_DVR_SDKABL pSDKAbl); +NET_DVR_API BOOL __stdcall NET_DVR_GetPTZProtocol(LONG lUserID, NET_DVR_PTZCFG *pPtzcfg); +NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCtrl_Other(LONG iUserID, LONG iChannel); +NET_DVR_API BOOL __stdcall NET_DVR_GetPTZCtrl(LONG iRealHandle); +//前面板锁定 +NET_DVR_API BOOL __stdcall NET_DVR_LockPanel(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_UnLockPanel(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_StartPanelKey(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_StopPanelKey(LONG lUserID); + +NET_DVR_API BOOL __stdcall NET_DVR_SetRtspConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_RTSPCFG lpInBuffer, DWORD dwInBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetRtspConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_RTSPCFG lpOutBuffer, DWORD dwOutBufferSize); + +//能力集获取 +NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceAbility(LONG lUserID, DWORD dwAbilityType, char* pInBuf, DWORD dwInLength, char* pOutBuf, DWORD dwOutLength); +NET_DVR_API BOOL __stdcall NET_DVR_SetSimAbilityPath(char * szSimAbilityPath, char *szSDCard); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubSystemInfo(LONG lUserID, LPNET_DVR_ALLSUBSYSTEMINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetSubSystemInfo(LONG lUserID, LPNET_DVR_ALLSUBSYSTEMINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetCodeSplitter(LONG lUserID, DWORD dwCodeChan, LPNET_DVR_CODESPLITTERINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetCodeSplitter(LONG lUserID, DWORD dwCodeChan, LPNET_DVR_CODESPLITTERINFO lpInter); + +//智能 +//设置/获取参数关键字 +NET_DVR_API BOOL __stdcall NET_DVR_SetBehaviorParamKey(LONG lUserID, LONG lChannel, DWORD dwParameterKey,int nValue); +NET_DVR_API BOOL __stdcall NET_DVR_GetBehaviorParamKey(LONG lUserID, LONG lChannel, DWORD dwParameterKey,int *pValue); + +//获取/设置异常行为检测目标叠加接口 +NET_DVR_API BOOL __stdcall NET_DVR_GetVCADrawMode(LONG lUserID, LONG lChannel, LPNET_VCA_DRAW_MODE lpDrawMode); + + + +NET_DVR_API BOOL __stdcall NET_DVR_SetVCADrawMode(LONG lUserID, LONG lChannel, LPNET_VCA_DRAW_MODE lpDrawMode); + +//球机模式设置接口 +NET_DVR_API BOOL __stdcall NET_DVR_SetTrackMode(LONG lUserID, LONG lChannel, LPNET_DVR_TRACK_MODE lpTrackMode); +NET_DVR_API BOOL __stdcall NET_DVR_GetTrackMode(LONG lUserID, LONG lChannel, LPNET_DVR_TRACK_MODE lpTrackMode); + +//重启智能库 +NET_DVR_API BOOL __stdcall NET_VCA_RestartLib(LONG lUserID, LONG lChannel); + +NET_DVR_API BOOL __stdcall NET_DVR_SaveRealData_V30(LONG lRealHandle, DWORD dwTransType, char *sFileName); + +#if ((!defined __linux__) && (!defined _WIN64)) +NET_DVR_API BOOL __stdcall NET_DVR_EncodeG711Frame(DWORD iType, BYTE *pInBuffer, BYTE *pOutBuffer); +NET_DVR_API BOOL __stdcall NET_DVR_DecodeG711Frame(DWORD iType, BYTE *pInBuffer, BYTE *pOutBuffer); +#elif ((defined __linux__) || (defined _WIN64)) +NET_DVR_API BOOL __stdcall NET_DVR_EncodeG711Frame(LPVOID handle, NET_DVR_AUDIOENC_PROCESS_PARAM *p_enc_proc_param); +NET_DVR_API BOOL __stdcall NET_DVR_DecodeG711Frame(LPVOID handle, NET_DVR_AUDIODEC_PROCESS_PARAM *p_dec_proc_param); +NET_DVR_API LPVOID __stdcall NET_DVR_InitG711Decoder(); +NET_DVR_API LPVOID __stdcall NET_DVR_InitG711Encoder(NET_DVR_AUDIOENC_INFO *enc_info); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseG711Encoder(LPVOID pEncodeHandle); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseG711Decoder(LPVOID pDecHandle); +#endif //(defined _WIN32) + +NET_DVR_API LONG __stdcall NET_DVR_FindFileByEvent(LONG lUserID, LPNET_DVR_SEARCH_EVENT_PARAM lpSearchEventParam); +NET_DVR_API LONG __stdcall NET_DVR_FindFileByEvent_V40(LONG lUserID, LPNET_DVR_SEARCH_EVENT_PARAM_V40 lpSearchEventParam); +NET_DVR_API LONG __stdcall NET_DVR_FindFileByEvent_V50(LONG lUserID, LPNET_DVR_SEARCH_EVENT_PARAM_V50 lpSearchEventParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent(LONG lSearchHandle, LPNET_DVR_SEARCH_EVENT_RET lpSearchEventRet); +NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent_V40(LONG lSearchHandle, LPNET_DVR_SEARCH_EVENT_RET_V40 lpSearchEventRet); +NET_DVR_API LONG __stdcall NET_DVR_FindNextEvent_V50(LONG lFindHandle, LPNET_DVR_SEARCH_EVENT_RET_V50 lpSearchEventRet); +//停止采用 NET_DVR_FindClose + +NET_DVR_API LONG __stdcall NET_DVR_FindPDCInfo(LONG lUserID, LONG lChannel, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); +NET_DVR_API LONG __stdcall NET_DVR_FindNextPDCInfo(LONG lFindHandle,LPNET_DVR_PDC_QUERY lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindPDCClose(LONG lFindHandle); + +// 标定校验 +#define NET_DVR_PDC_VERIFY_CALIBRATION 1 //当值为1是为PDC标定校验 pdc传入值为NET_VCA_POINT 传出值为 NET_VCA_RECT结构 +#define NET_DVR_VERIFY_BEHAVIOR_CALIBRATION 2 // 异常行为检测标定线校验 +#define NET_DVR_VERIFY_ITS_CALIBRATION 3 // 智能交通标定校验 +#define NET_DVR_VERIFY_BV_CALIBRATION 5 //双目标定校验 + +NET_DVR_API BOOL __stdcall NET_DVR_VerifyCalibration(LONG lUserID, DWORD dwCommand, LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpOuterBuffer, DWORD dwOuterBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_ResetCounter(LONG lUserID,LONG lChannel); + +NET_DVR_API BOOL __stdcall NET_DVR_GetPtzPosition(LONG lUserID, LONG lChannel, LONG lPositionID, LPNET_DVR_PTZ_POSITION lpPtzPosition); +NET_DVR_API BOOL __stdcall NET_DVR_SetPtzPosition(LONG lUserID, LONG lChannel, LONG lPositionID, LPNET_DVR_PTZ_POSITION lpPtzPosition); +NET_DVR_API BOOL __stdcall NET_DVR_SetPatrolTrack(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_PATROL_TRACKCFG lpPatrolTrack); +NET_DVR_API BOOL __stdcall NET_DVR_GetPatrolTrack(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_PATROL_TRACKCFG lpPatrolTrack); +NET_DVR_API LONG __stdcall NET_DVR_FindNextLog_MATRIX(LONG lLogHandle, LPNET_DVR_LOG_MATRIX lpLogData); +NET_DVR_API LONG __stdcall NET_DVR_FindDVRLog_Matrix(LONG lUserID, LONG lSelectMode, DWORD dwMajorType, DWORD dwMinorType, LPNET_DVR_VEDIOPLATLOG lpVedioPlatLog, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime); + +NET_DVR_API BOOL __stdcall NET_DVR_ManualSnap(LONG lUserID, NET_DVR_MANUALSNAP const* lpInter, LPNET_DVR_PLATE_RESULT lpOuter); +NET_DVR_API BOOL __stdcall NET_DVR_ContinuousShoot(LONG lUserID, LPNET_DVR_SNAPCFG lpInter); + +NET_DVR_API BOOL __stdcall NET_DVR_GetPTZProtocol_Ex(LONG lUserID, LONG lChannel, NET_DVR_PTZCFG *pPtzcfg); + +NET_DVR_API LONG __stdcall NET_DVR_StartEmailTest(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_StopEmailTest(LONG lEmailTestHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetEmailTestProgress(LONG lEmailTestHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_GetIPCProtoList(LONG lUserID, LPNET_DVR_IPC_PROTO_LIST lpProtoList); +NET_DVR_API BOOL __stdcall NET_DVR_GetIPCProtoList_V41(LONG lUserID, LPNET_DVR_IPC_PROTO_LIST_V41 lpProtoList); +NET_DVR_API LONG __stdcall NET_DVR_SmartSearch(LONG lUserID, LPNET_DVR_SMART_SEARCH_PARAM lpSmartSearchParam); +NET_DVR_API LONG __stdcall NET_DVR_SmartSearch_V40(LONG lUserID, LPNET_DVR_SMART_SEARCH_PARAM_V40 lpSmartSearchParam); +NET_DVR_API LONG __stdcall NET_DVR_SearchNextInfo(LONG lSearchHandle, LPNET_DVR_SMART_SEARCH_RET lpSmartSearchRet); +NET_DVR_API BOOL __stdcall NET_DVR_StopSearch(LONG lSearchHandle); + +// IP San 文件目录查找 +NET_DVR_API LONG __stdcall NET_DVR_FindIpSanDirectory(LONG lUserID, LPNET_DVR_IPSAN_SERACH_PARAM lpIpsanSearchParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextDirectory(LONG lFindHandle, LPNET_DVR_IPSAN_SERACH_RET lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindDirectoryClose(LONG lFindHandle); + +typedef void (CALLBACK *REALDATACALLBACK) (LONG lPlayHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser); + +NET_DVR_API LONG __stdcall NET_DVR_ZeroStartPlay(LONG lUserID, LPNET_DVR_CLIENTINFO lpClientInfo, REALDATACALLBACK fRealDataCallBack_V30 = NULL, void* pUser = NULL, BOOL bBlocked = TRUE); + +NET_DVR_API BOOL __stdcall NET_DVR_ZeroStopPlay(LONG lPlayHandle); +NET_DVR_API BOOL __stdcall NET_DVR_ZeroMakeKeyFrame(LONG lUserID, LONG lZeroChan); +NET_DVR_API BOOL __stdcall NET_DVR_PlayBackControl_V40(LONG lPlayHandle,DWORD dwControlCode, LPVOID lpInBuffer = NULL, DWORD dwInLen = 0, LPVOID lpOutBuffer = NULL, DWORD *lpOutLen = NULL); +NET_DVR_API BOOL __stdcall NET_DVR_ZeroTurnOver(LONG lUserID, LONG lChannel, BOOL bNextPreview); +NET_DVR_API LONG __stdcall NET_DVR_RealPlay_Card_V30(LONG lUserID, NET_DVR_CARDINFO const *lpCardInfo, LONG lChannelNum, DWORD dwMode, BOOL bBlock, REALDATACALLBACK fRealDataCallBack_V30, void* pUser); + + +NET_DVR_API BOOL __stdcall NET_DVR_GetDiskList(LONG lUserID, LPNET_DVR_DISKABILITY_LIST lpDiskList); +NET_DVR_API LONG __stdcall NET_DVR_Backup(LONG lUserID, DWORD dwBackupType, LPVOID lpBackupBuff, DWORD dwBackupBuffSize); +NET_DVR_API LONG __stdcall NET_DVR_BackupByName(LONG lUserID, LPNET_DVR_BACKUP_NAME_PARAM lpBackupByName); +NET_DVR_API LONG __stdcall NET_DVR_BackupByTime(LONG lUserID, LPNET_DVR_BACKUP_TIME_PARAM lpBackupBytime); +NET_DVR_API BOOL __stdcall NET_DVR_GetBackupProgress(LONG lHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_StopBackup(LONG lHandle); + +NET_DVR_API BOOL __stdcall NET_DVR_GetSadpInfoList(LONG lUserID, LPNET_DVR_SADPINFO_LIST lpSadpInfoList); +NET_DVR_API BOOL __stdcall NET_DVR_UpdateSadpInfo(LONG lUserID, LPNET_DVR_SADP_VERIFY lpSadpVerify, LPNET_DVR_SADPINFO lpSadpInfo); + +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubDecSystemJoinInfo(LONG lUserID, LPNET_DVR_ALLDECSUBSYSTEMJOININFO lpInter); + +NET_DVR_API BOOL __stdcall NET_DVR_SetCodeSplitterAssociate(LONG lUserID, DWORD dwDecoderChan, DWORD dwSlotNum, LPNET_DVR_CODESPLITTERASSOCIATE lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_GetCodeSplitterAssociate(LONG lUserID, DWORD dwDecoderChan, DWORD dwSlotNum, LPNET_DVR_CODESPLITTERASSOCIATE lpInter); + +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetCDRWScheme(LONG lUserID, LPNET_DVR_INQUEST_CDRW_CFG lpCDRWCfg); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetCDRWScheme(LONG lUserID, LPNET_DVR_INQUEST_CDRW_CFG lpCDRWCfg); +NET_DVR_API BOOL __stdcall NET_DVR_InquestDeleteFile(LONG lUserID, LPNET_DVR_INQUEST_FILES lpDeleteFile); +NET_DVR_API BOOL __stdcall NET_DVR_InquestCDWByFile(LONG lUserID, LPNET_DVR_INQUEST_FILES lpCdrwFile); +NET_DVR_API LONG __stdcall NET_DVR_InquestUploadFile(LONG lUserID, char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_InquestUploadClose(LONG lUploadHandle); +NET_DVR_API LONG __stdcall NET_DVR_InquestGetUploadState(LONG lUploadHandle, LPDWORD pProgress); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStartCDW( LONG lUserID, BOOL bPause); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStopCDW(LONG lUserID, BOOL bCancelWrite); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetCDWState(LONG lUserID, LPNET_DVR_INQUEST_CDRW_STATUS pStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetPIPStatus(LONG lUserID, LPNET_DVR_INQUEST_PIP_STATUS pStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetPIPStatus(LONG lUserID, LPNET_DVR_INQUEST_PIP_STATUS pStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestCheckSecretKey(LONG lUserID, BOOL *bSecretSet); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetSecretKey(LONG lUserID, LPNET_DVR_INQUEST_SECRET_INFO pSecretInfo); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStreamEncrypt(LONG lUserID, LONG lChannel, BOOL bEncrypt); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetEncryptState(LONG lUserID, LONG lChannel, BOOL *bEncrypt); +NET_DVR_API LONG __stdcall NET_DVR_InquestFindFile(LONG lUserID); +NET_DVR_API LONG __stdcall NET_DVR_InquestFindNextFile(LONG lFindHandle, LPNET_DVR_INQUEST_FILEINFO lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_InquestFindClose(LONG lFindHandle); + +// 9000RH +NET_DVR_API LONG __stdcall NET_DVR_RaidFastConfig(LONG lUserID, char *sName); +NET_DVR_API BOOL __stdcall NET_DVR_FastConfigProcess(LONG lHandle, DWORD *pState); +NET_DVR_API BOOL __stdcall NET_DVR_CloseFastConfig(LONG lHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetArraySpaceAlloc(LONG lUserID, DWORD dwSlot, LPNET_DVR_ARRAY_SPACE_ALLOC_INFO lpOutBuf); +NET_DVR_API BOOL __stdcall NET_DVR_DelArray(LONG lUserID, DWORD dwID); +NET_DVR_API BOOL __stdcall NET_DVR_CreateArray(LONG lUserID, LPNET_DVR_OPERATE_ARRAY_PARAM lpArrayParam); +NET_DVR_API BOOL __stdcall NET_DVR_CalcArraySize(LONG lUserID, LPNET_DVR_OPERATE_ARRAY_PARAM lpArrayParam, UINT64* lpArraySize); +NET_DVR_API BOOL __stdcall NET_DVR_MigrateArray(LONG lUserID, LPNET_DVR_OPERATE_ARRAY_PARAM lpArrayParam); +NET_DVR_API BOOL __stdcall NET_DVR_RebuildArray(LONG lUserID, LPNET_DVR_OPERATE_ARRAY_PARAM lpArrayParam); +NET_DVR_API BOOL __stdcall NET_DVR_CreateVD(LONG lUserID, LPNET_DVR_OPERATE_VD_PARAM lpVDParam); +NET_DVR_API BOOL __stdcall NET_DVR_CreateVDEx(LONG lUserID, LPNET_DVR_OPERATE_VD_PARAM_EX lpVDParamEx); +NET_DVR_API BOOL __stdcall NET_DVR_DelVD(LONG lUserID, DWORD dwID); +NET_DVR_API BOOL __stdcall NET_DVR_RepairVD(LONG lUserID, DWORD dwID); +NET_DVR_API BOOL __stdcall NET_DVR_SetSpareDisk(LONG lUserID, LPNET_DVR_SPARE_DISK_PARAM lpSpareDisk); +NET_DVR_API BOOL __stdcall NET_DVR_GetPDList(LONG lUserID, LPNET_DVR_PHY_DISK_LIST lpPDList); +NET_DVR_API BOOL __stdcall NET_DVR_GetArrayList(LONG lUserID, LPNET_DVR_ARRAY_LIST lpArrayList); +NET_DVR_API BOOL __stdcall NET_DVR_GetVDList(LONG lUserID, LPNET_DVR_VD_LIST lpVDList); +NET_DVR_API LONG __stdcall NET_DVR_ExpandDisk(LONG lUserID,DWORD dwVDSLot); +NET_DVR_API BOOL __stdcall NET_DVR_GetExpandProgress(LONG lExpandHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_CloseExpandHandle(LONG lExpandHandle); +NET_DVR_API LONG __stdcall NET_DVR_AlgoDebugStart(LONG lUserID, LONG lCHannel, void(CALLBACK *fAlgoLibInfoCallBack)(LONG lHandle, LONG lChannel,char *pRecvDataBuffer, DWORD dwBufSize, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_AlgoDebugSend(LONG lHandle, LONG lChannel, char *pSendBuf, DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_AlgoDebugStop(LONG lHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetLogPrint(BOOL bLogPrint); +NET_DVR_API BOOL __stdcall NET_DVR_SetLogPrintAction(DWORD nLogLevel, DWORD nToDevice, BOOL bEnable, int Reserve1, int Reserve2); + +NET_DVR_API BOOL __stdcall NET_DVR_GetPositionRule(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_POSITION_RULE_CFG lpPositionRule); +NET_DVR_API BOOL __stdcall NET_DVR_GetPositionRule_V41(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_POSITION_RULE_CFG_V41 lpPositionRule); +NET_DVR_API BOOL __stdcall NET_DVR_SetPositionRule(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_POSITION_RULE_CFG lpPositionRule); +NET_DVR_API BOOL __stdcall NET_DVR_SetPositionRule_V41(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_POSITION_RULE_CFG_V41 lpPositionRule); +NET_DVR_API BOOL __stdcall NET_DVR_SetPositionLimitAngle(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_LIMIT_ANGLE lpLimitAngle); +NET_DVR_API BOOL __stdcall NET_DVR_GetPositionLimitAngle(LONG lUserID, LONG lChannel, LONG lPositionIndex, LPNET_DVR_LIMIT_ANGLE lpLimitAngle); +NET_DVR_API BOOL __stdcall NET_DVR_GetPtzPosition(LONG lUserID, LONG lChannel, LONG lPositionID, LPNET_DVR_PTZ_POSITION lpPtzPosition); +NET_DVR_API BOOL __stdcall NET_DVR_SetPtzPosition(LONG lUserID, LONG lChannel, LONG lPositionID, LPNET_DVR_PTZ_POSITION lpPtzPosition); +NET_DVR_API BOOL __stdcall NET_DVR_SetPatrolTrack(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_PATROL_TRACKCFG lpPatrolTrack); +NET_DVR_API BOOL __stdcall NET_DVR_GetPatrolTrack(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_PATROL_TRACKCFG lpPatrolTrack); +NET_DVR_API BOOL __stdcall NET_DVR_SetPatrolLimitAngle(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_LIMIT_ANGLE lpLimitAngle); +NET_DVR_API BOOL __stdcall NET_DVR_GetPatrolLimitAngle(LONG lUserID, LONG lChannel, LONG lPatrolIndex, LPNET_DVR_LIMIT_ANGLE lpLimitAngle); +NET_DVR_API BOOL __stdcall NET_DVR_SetSceneMode(LONG lUserID, LONG lChannel, DWORD dwSceneMode); +NET_DVR_API BOOL __stdcall NET_DVR_GetSceneMode(LONG lUserID, LONG lChannel, DWORD *pSceneMode); +NET_DVR_API BOOL __stdcall NET_DVR_GetVCAVersion(LONG lUserID, LONG lChannel, LPNET_DVR_VCA_VERSION lpVersion); + +NET_DVR_API BOOL __stdcall NET_DVR_ContinuousShoot(LONG lUserID, LPNET_DVR_SNAPCFG lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixPicAdjust(LONG lUserID, DWORD dwDispChan, DWORD dwPicAdjust, DWORD dwCmdParam); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmJoinedRecord(LONG lUserID, DWORD dwChan, DWORD dwAlarmSeq, DWORD dwRecordTime, DWORD dwRes); +NET_DVR_API BOOL __stdcall NET_DVR_GetUnitedMatrixInfo(LONG lUserID, LPNET_DVR_UNITEDMATRIXINFO lpInter); +typedef LONG(CALLBACK * REGCallBack)(LONG lUserID, LPNET_DVR_REGCALLBACKPARAM pRegCallbackParam, LPNET_DVR_LOGONREPONSEPARAM pInterParam, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetRegisterCallBack(REGCallBack fRegCallBack, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_PreviewRequest(LONG lUserID, LONG lChannel, LPNET_DVR_PREVIEWPARAM lpPreviewParam, LPNET_DVR_DEVICENATINFO lpOuter); +typedef LONG(CALLBACK * PREVIEWRESPONSECallBack)(LONG lUserID, LONG lStreamHandle, LPNET_DVR_PREVIEWCALLBACKPARAM pPewviewCallbackParam,void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPreviewResponseCallBack(PREVIEWRESPONSECallBack fPreviewResponseCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_PlaybackRequest(LONG lUserID, LPNET_DVR_PLAYBACKREQUESTPARAM lpPlayBackRequestParam); +typedef LONG(CALLBACK * PLAYBACKRESPONSECallBack)(LONG lUserID, LONG lPlaybackHandle, LPNET_DVR_PLAYBACKCALLBACKPARAM lpPlaybackParam,void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPlaybackResponseCallBack(PLAYBACKRESPONSECallBack fPlaybackResponseCallBack, void *pUser); +typedef LONG(CALLBACK * VOICERESPONSECallBack)(LONG lUserID, LONG lVoiceHandle, LONG lVoiceChannel, BYTE nAudioType, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetVoiceResponseCallBack(VOICERESPONSECallBack fVoiceResponseCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_VoiceRequest(LONG lUserID, LPNET_DVR_VOICEREQUESTPARAM lpVoiceParam); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmSetupRequest(LONG lUserID, LPNET_DVR_ALARMSETUPREQUESTPARAM lpAlarmSetupParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetDialParam(LONG lUserID, LPNET_DVR_DIALREQUEST lpDialRequest, LPNET_DVR_DIALPARAM lpDialParam); +NET_DVR_API BOOL __stdcall NET_DVR_SetDialParam(LONG lUserID, LPNET_DVR_DIALREQUEST lpDialRequest, LPNET_DVR_DIALPARAM lpDialParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetSmsListInfo(LONG lUserID, LPNET_DVR_TIME_EX lpStartTime, LPNET_DVR_TIME_EX lpStopTime, LPNET_DVR_SMSLISTINFO lpSmsListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetSmsContent(LONG lUserID, DWORD dwSmsIndex, LPNET_DVR_SMSCONTENT lpSmsContent); +NET_DVR_API BOOL __stdcall NET_DVR_SendSms(LONG lUserID, LPNET_DVR_SMSCONTENT lpSmsContent); +NET_DVR_API LONG __stdcall NET_DVR_StartServer(char *sLocalIP, WORD wLocalPort, BYTE byMode); +NET_DVR_API BOOL __stdcall NET_DVR_StopServer(LONG lServerHandle); +NET_DVR_API LONG __stdcall NET_DVR_StartRecvNakedDataListen(NAKED_DATA_TYPE type, LPNET_DVR_NAKED_DATA_PARAM pParams); +NET_DVR_API BOOL __stdcall NET_DVR_StopRecvNakedDataListen(LONG lNakedDataRecvHandle); +typedef void(CALLBACK * NAKEDDAtACALLBACK)(DWORD typeInfo, char *pInfo, DWORD dwInfoLen,DWORD dwIPLen, void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetNakedDataRecvCallBack(LONG lNakedDataRecvHandle, void(CALLBACK *fNakedDataCallBack)(DWORD dwTypeInfo, NET_DVR_NAKED_DATA_INFO *pStruNakedDataInfo, char *pInfo, DWORD dwInfoLen, void* pUser), void* pUser); + +typedef LONG(CALLBACK * ALARMSETUPRESPONSECallBack)(LONG lUserID, LONG lAlarmHandle, void * pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmSetupResponseCallBack(ALARMSETUPRESPONSECallBack fAlarmSetupResponseCallBack, void * pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SpringJPEGPicture(LONG lUserID, LONG lChannel, NET_DVR_PUSHJPEGPARA const *lpJpegPara); +NET_DVR_API BOOL __stdcall NET_DVR_SetPushModeParam(LPNET_DVR_PUSHMODEPARAM pPushParam); + +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSetupAlarmChan(LONG lUserID, NET_DVR_ALARMIN_SETUP *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostCloseAlarmChan(LONG lUserID, NET_DVR_ALARMIN_SETUP *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_BypassAlarmChan(LONG lUserID, NET_DVR_ALARMIN_SETUP *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_UnBypassAlarmChan(LONG lUserID, NET_DVR_ALARMIN_SETUP *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostAssistantControl(LONG lUserID, DWORD dwType, DWORD dwNumber, DWORD dwCmdParam); +NET_DVR_API BOOL __stdcall NET_DVR_SetAirCondition(LONG lUserID, LONG l485Index, NET_DVR_AIR_CONDITION_PARAM* lpAirConditionParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetAirCondition(LONG lUserID, LONG l485Index, NET_DVR_AIR_CONDITION_PARAM* lpAirConditionParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceTypeList(LONG lUserID, NET_DVR_DEVICE_TYPE_LIST *lpDeviceTypeList); +NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceProtoList(LONG lUserID, LONG lDeviceType, NET_DVR_DEVICE_PROTO_LIST *lpDeviceProtoList); +NET_DVR_API BOOL __stdcall NET_DVR_GetBatteryVoltage(LONG lUserID, float *pVoltage); +NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmDeviceUser(LONG lUserID, LONG lUserIndex, NET_DVR_ALARM_DEVICE_USER* lpDeviceUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmDeviceUser(LONG lUserID, LONG lUserIndex, NET_DVR_ALARM_DEVICE_USER* lpDeviceUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetKeyboardUser(LONG lUserID, LONG lUserIndex, NET_DVR_KEYBOARD_USER* lpKeyboardUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetKeyboardUser(LONG lUserID, LONG lUserIndex, NET_DVR_KEYBOARD_USER* lpKeyboardUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetOperateUser(LONG lUserID, LONG lUserIndex, NET_DVR_OPERATE_USER* lpOperateUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetOperateUser(LONG lUserID, LONG lUserIndex, NET_DVR_OPERATE_USER* lpOperateUser); +NET_DVR_API BOOL __stdcall NET_DVR_ControlGateway(LONG lUserID, LONG lGatewayIndex, DWORD dwStaic); +NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmHostOut(LONG lUserID, LONG lAlarmOutPort, LONG lAlarmOutStatic); +typedef void(CALLBACK *fAlarmHostSerialDataCallBack) +(LONG lSerialHandle, LONG lPort, LONG lDateType, char *pRecvDataBuffer, DWORD dwBufSize,void *pUser); +NET_DVR_API LONG __stdcall NET_DVR_AlarmHostSerialStart(LONG lUserID, LONG lSerialType, fAlarmHostSerialDataCallBack cbSerialDataCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSerialSend(LONG lSerialHandle,LONG lPort,char *pSendBuf,DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSerialStop(LONG lSerialHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetMatrixPuChan(LONG lUserID, LONG lChanType, NET_DVR_PU_CHAN_LIST* lpChanList); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAlarmOffMonitor(LONG lUserID, DWORD dwMonID, DWORD dwCamID); +NET_DVR_API BOOL __stdcall NET_DVR_GetCameraListInfo(LONG lUserID, DWORD dwCamNum, DWORD dwStartCam, LPNET_DVR_MATRIX_CAMERALIST lpCamListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetMonitorListInfo(LONG lUserID, DWORD dwMonNum, DWORD dwStartMon, LPNET_DVR_MATRIX_MONITORLIST lpMonListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetGlobalNum(LONG lUserID, DWORD *dwCamNum, DWORD *dwMonNum); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetUnitedMatrixInfo(LONG lUserID, LPNET_DVR_ALLUNITEDMATRIXINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetUnitedMatrixInfo(LONG lUserID, LPNET_DVR_ALLUNITEDMATRIXINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetGatewayInfo(LONG lUserID, LPNET_DVR_MATRIXGATEWAYINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetGatewayInfo(LONG lUserID, LPNET_DVR_MATRIXGATEWAYINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSpanSwitch(LONG lUserID, BYTE nSwitchMode, LPNET_DVR_MATRIXSWITCH lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartSwitch(LONG lUserID, LPNET_DVR_MATRIXSWITCHCTRL lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetConfigFile(LONG lUserID, LPNET_DVR_MATRIXDATABASE lpInter, char *sInBuffer, DWORD dwInSize); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetConfigFile(LONG lUserID, LPNET_DVR_MATRIXDATABASE lpInter, char *sOutBuffer, DWORD dwOutSize, DWORD *pReturnSize); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubSystemInfo_V40(LONG lUserID, LPNET_DVR_ALLSUBSYSTEMINFO_V40 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetSubSystemInfo_V40(LONG lUserID, LPNET_DVR_ALLSUBSYSTEMINFO_V40 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubDecSystemJoinInfo_V40(LONG lUserID, LPNET_DVR_ALLDECSUBSYSTEMJOININFO_V40 lpInter); +typedef void (CALLBACK *FLOWTESTCALLBACK)(LONG lFlowHandle, LPNET_DVR_FLOW_INFO pFlowInfo, void *pUser); +NET_DVR_API LONG __stdcall NET_DVR_StartNetworkFlowTest(LONG lUserID, NET_DVR_FLOW_TEST_PARAM* pFlowTest, FLOWTESTCALLBACK fFlowTestCallback, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_StopNetworkFlowTest(LONG lHandle); +NET_DVR_API LONG __stdcall NET_DVR_FindRecordLabel(LONG lUserID, LPNET_DVR_FIND_LABEL lpFindLabel); +NET_DVR_API LONG __stdcall NET_DVR_FindNextLabel(LONG lFindHandle, LPNET_DVR_FINDLABEL_DATA lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_StopFindLabel(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_InsertRecordLabel(LONG lPlayHandle, NET_DVR_RECORD_LABEL* lpRecordLabel, NET_DVR_LABEL_IDENTIFY *lpLableIdentify); +NET_DVR_API BOOL __stdcall NET_DVR_DelRecordLabel(LONG lUserID, NET_DVR_DEL_LABEL_PARAM* lpDelLabelParam); +NET_DVR_API BOOL __stdcall NET_DVR_ModifyRecordLabel(LONG lUserID, NET_DVR_MOD_LABEL_PARAM * lpModLabelParam); +NET_DVR_API BOOL __stdcall NET_DVR_CapturePlaybackPictureBlock(LONG lPlayHandle, char *sPicFileName, DWORD dwTimeOut); +NET_DVR_API BOOL __stdcall NET_DVR_CapturePlaybackPictureBlock_New(LONG lPlayHandle, char *pPicBuf, DWORD dwPicSize, DWORD *lpSizeReturned); +NET_DVR_API LONG __stdcall NET_DVR_FindPicture(LONG lUserID, NET_DVR_FIND_PICTURE_PARAM* pFindParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextPicture(LONG lFindHandle,LPNET_DVR_FIND_PICTURE lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindNextPicture_V40(LONG lFindHandle,LPNET_DVR_FIND_PICTURE_V40 lpFindData); +NET_DVR_API LONG __stdcall NET_DVR_FindNextPicture_V50(LONG lFindHandle, LPNET_DVR_FIND_PICTURE_V50 lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_CloseFindPicture(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetPicture(LONG lUserID,char *sDVRFileName,const char *sSavedFileName); +NET_DVR_API BOOL __stdcall NET_DVR_GetPicture_V30(LONG lUserID, char *sDVRFileName, char *sSavedFileBuf, DWORD dwBufLen, DWORD *lpdwRetLen); +NET_DVR_API BOOL __stdcall NET_DVR_GetPicture_V50(LONG lUserID, LPNET_DVR_PIC_PARAM lpPicParam); +NET_DVR_API LONG __stdcall NET_DVR_BackupPicture(LONG lUserID, NET_DVR_BACKUP_PICTURE_PARAM *lpBackupPicture); +NET_DVR_API LONG __stdcall NET_DVR_GetUpgradeStep(LONG lUpgradeHandle, LONG *pSubProgress); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetEncodeJoint(LONG lUserID, LONG lChannel, LPNET_DVR_ENCODE_JOINT_PARAM lpEncodeJoint); +NET_DVR_API BOOL __stdcall NET_DVR_GetLocalIP(char strIP[16][16], DWORD *pValidNum, BOOL *pEnableBind); +NET_DVR_API BOOL __stdcall NET_DVR_SetValidIP(DWORD dwIPIndex, BOOL bEnableBind); +NET_DVR_API BOOL __stdcall NET_DVR_GetLocalIPv6(BYTE strIP[16][16], DWORD *pValidNum, BOOL *pEnableBind); +NET_DVR_API BOOL __stdcall NET_DVR_SetValidIPv6(DWORD dwIPIndex, BOOL bEnableBind); +NET_DVR_API BOOL __stdcall NET_DVR_GetVcaDevWorkState(LONG lUserID, LPNET_DVR_VCA_DEV_WORKSTATUS lpWorkState); +NET_DVR_API BOOL __stdcall NET_DVR_SetRecvTimeOut(DWORD nRecvTimeOut = 5000); //最小3000毫秒 +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDisplayCfg_V40(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG_V40 lpDisplayCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDisplayCfg_V40(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_VGA_DISP_CHAN_CFG_V40 lpDisplayCfg); +NET_DVR_API BOOL __stdcall NET_DVR_ShutterCompensation(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_CorrectDeadPixel(LONG lUserID, LONG lChannel, LPNET_DVR_CORRECT_DEADPIXEL_PARAM lpInParam); +NET_DVR_API BOOL __stdcall NET_DVR_CustomConfig(LONG lUserID, LONG lChannel, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpOutBuffer, DWORD dwOutBufferSize, LPDWORD lpBytesReturned); +NET_DVR_API BOOL __stdcall NET_DVR_GetHistoricDataInfo(LONG lUserID, LONG lChannel, LPNET_DVR_HISTORICDATACFG lpHisData); +NET_DVR_API BOOL __stdcall NET_DVR_GetHistoricData(LONG lUserID, LONG lChannel, LPNET_DVR_PLATE_RESULT lpOuter); +NET_DVR_API BOOL __stdcall NET_DVR_ClearHistoricData(LONG lUserID, LONG lChannel); +NET_DVR_API BOOL __stdcall NET_VPD_SetShutter(LONG lUserID, LONG lChannel, LPNET_VPD_SHUTTER lpShutter); +NET_DVR_API BOOL __stdcall NET_VPD_SendPicture(LONG lUserID, DWORD dwFields, BYTE const *sImageBuffer, DWORD dwWidth, DWORD dwHeight); +NET_DVR_API LONG __stdcall NET_DVR_InquestUploadFile_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, char *sFileName); +NET_DVR_API BOOL __stdcall NET_DVR_InquestDeleteFile_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, LPNET_DVR_INQUEST_FILES lpDeleteFile); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetPIPStatus_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, LPNET_DVR_INQUEST_PIP_STATUS lpStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetPIPStatus_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, LPNET_DVR_INQUEST_PIP_STATUS lpStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetPIPStatus_V40(LONG lUserID, NET_DVR_INQUEST_ROOM const *lpInquestRoom, LPNET_DVR_INQUEST_PIP_STATUS_V40 lpStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetPIPStatus_V40(LONG lUserID, NET_DVR_INQUEST_ROOM const *lpInquestRoom, LPNET_DVR_INQUEST_PIP_STATUS_V40 lpStatus); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetSystemInfo(LONG lUserID, LPNET_DVR_INQUEST_SYSTEM_INFO lpSystemInfo); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSetSystemInfo(LONG lUserID, LPNET_DVR_INQUEST_SYSTEM_INFO lpSystemInfo); +NET_DVR_API BOOL __stdcall NET_DVR_InquestSendMessage(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, LPNET_DVR_INQUEST_MESSAGE lpInquestMessage); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStartCDW_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, BOOL bNotBurn); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStopCDW_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, BOOL bCancelWrite); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetCDWState_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM lpInquestRoom, LPNET_DVR_INQUEST_CDRW_STATUS pStatus); +NET_DVR_API LONG __stdcall NET_DVR_InquestResumeEvent(LONG lUserID, LPNET_DVR_INQUEST_RESUME_EVENT lpResumeEvent); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetResumeProgress(LONG lHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_InquestStopResume(LONG lHandle); +NET_DVR_API LONG __stdcall NET_DVR_InquestFindFile_V30(LONG lUserID, LPNET_DVR_INQUEST_ROOM pInquestRoom); +NET_DVR_API BOOL __stdcall NET_DVR_InquestGetDeviceVersion(LONG lUserID, LPNET_DVR_INQUEST_DEVICE_VERSION lpVersionInfo); +NET_DVR_API BOOL __stdcall NET_DVR_SetSDKSecretKey(LONG lUserID, char *sSecretKey); +NET_DVR_API BOOL __stdcall NET_DVR_LockFileByTime(LONG lUserID, LPNET_DVR_TIME_LOCK lpLockPara, LPNET_DVR_LOCK_RETURN lpLockReturn); +NET_DVR_API BOOL __stdcall NET_DVR_UnlockFileByTime(LONG lUserID, LPNET_DVR_TIME_LOCK lpLockPara, LPNET_DVR_LOCK_RETURN lpLockReturn); +NET_DVR_API BOOL __stdcall NET_DVR_ScreenZoomIn(LONG lUserID, LPNET_DVR_SCREENZOOM pStruScreen); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetAllCameraInfo(LONG lUserID, LPNET_DVR_MATRIX_CAMERALIST lpCamListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSingleCameraInfo(LONG lUserID, DWORD dwCameraId, LPNET_MATRIX_CAMERAINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddCamera(LONG lUserID, DWORD dwCameraNum, BYTE *pBuffer, DWORD dwBufLength); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModCameraInfo(LONG lUserID, LPNET_MATRIX_CAMERAINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDelCamera(LONG lUserID, DWORD dwCameraId); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetAllMonitorInfo(LONG lUserID, LPNET_DVR_MATRIX_MONITORLIST lpMonListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSingleMonitorInfo(LONG lUserID, DWORD dwMonitorId, LPNET_MATRIX_MONITORINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddMonitor(LONG lUserID, DWORD dwMonitorNum, BYTE *pBuffer, DWORD dwBufLength); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModMonitorInfo(LONG lUserID, LPNET_MATRIX_MONITORINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDelMonitor(LONG lUserID, DWORD dwMonitorId); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetAllMatrixInfo(LONG lUserID, LPNET_DVR_MATRIXLIST lpMatrixListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetSingleMatrixInfo(LONG lUserID, DWORD dwMatrixId, LPNET_MATRIX_MATRIXINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_AddMatrix(LONG lUserID, LPNET_MATRIX_MATRIXINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_ModMatrixInfo(LONG lUserID, LPNET_MATRIX_MATRIXINFO lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_DelMatrix(LONG lUserID, DWORD dwMatrixId); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetUartParam(LONG lUserID, DWORD dwSerialChan, LPNET_MATRIX_UARTPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetUartParam(LONG lUserID, DWORD dwSerialChan , LPNET_MATRIX_UARTPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetUserInfo(LONG lUserID, DWORD dwUserNum, LPNET_MATRIX_USERPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddUser(LONG lUserID, DWORD dwUserNum, LPNET_MATRIX_USERPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModUserInfo(LONG lUserID, DWORD dwUserNum, LPNET_MATRIX_USERPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDelUser(LONG lUserID, DWORD dwUserNum); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetResourceInfo(LONG lUserID, DWORD dwResourceNum, LPNET_MATRIX_RESOURSEGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddResourceInfo(LONG lUserID, DWORD dwResourceNum, LPNET_MATRIX_RESOURSEGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModResourceInfo(LONG lUserID, DWORD dwResourceNum, LPNET_MATRIX_RESOURSEGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDelResourceInfo(LONG lUserID, DWORD dwResourceNum); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetUserGroupInfo(LONG lUserID, DWORD dwUserGroupNum, LPNET_MATRIX_USERGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddUserGroupInfo(LONG lUserID, DWORD dwUserGroupNum, LPNET_MATRIX_USERGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModUserGroupInfo(LONG lUserID, DWORD dwUserGroupNum, LPNET_MATRIX_USERGROUPPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixDelUserGroup (LONG lUserID, DWORD dwUserGroupNum); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetAllTrunkInfo(LONG lUserID, LPNET_DVR_MATRIX_TRUNKLIST lpTrunkListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetTrunkInfo(LONG lUserID, DWORD dwTrunkNum, LPNET_MATRIX_TRUNKPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAddTrunk(LONG lUserID, LPNET_MATRIX_TRUNKPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixModTrunkInfo(LONG lUserID, LPNET_MATRIX_TRUNKPARAM lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixTrunkCtrl(LONG lUserID, DWORD dwTrunkNum, BYTE byCtrlMode); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixTrunkStatusQuery(LONG lUserID, DWORD dwTrunkNum, BYTE *byTrunkStatus); + +NET_DVR_API BOOL __stdcall NET_DVR_FindBackgroundPic(LONG lUserID, DWORD dwPicID, BYTE *pPicBuffer, DWORD *lpPicLen); +NET_DVR_API BOOL __stdcall NET_DVR_DetectImage(LONG lUserID, LPNET_VCA_FD_PROCIMG_CFG lpFDProcImg,LPNET_VCA_FD_PROCIMG_RESULT lpOutBuf); +NET_DVR_API BOOL __stdcall NET_DVR_GetPictureModel(LONG lUserID, LPNET_VCA_REGISTER_PIC lpInBuf, LPNET_VCA_PICMODEL_RESULT lpOutBuf); +NET_DVR_API BOOL __stdcall NET_DVR_AddBlockList(LONG lUserID,LONG lChannel,LPNET_VCA_BLOCKLIST_PARA lpInter); +NET_DVR_API LONG __stdcall NET_DVR_FindBlockList(LONG lUserID, LPNET_VCA_BLOCKLIST_COND lpBlockListCond); +NET_DVR_API LONG __stdcall NET_DVR_FindNextBlockList(LONG lFindHandle,LPNET_VCA_BLOCKLIST_INFO lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindBlockListClose(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetBlockListPicture(LONG lUserID, DWORD dwRegisterID, LPNET_VCA_BLOCKLIST_PIC lpOutBuffer); +NET_DVR_API BOOL __stdcall NET_DVR_UpdateBlockList(LONG lUserID,LONG lChannel, LPNET_VCA_BLOCKLIST_PARA lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_DelBlockList(LONG lUserID,LONG lChannel, DWORD dwRegisterID); +NET_DVR_API LONG __stdcall NET_DVR_FindSnapPicture(LONG lUserID, LPNET_VCA_FIND_PICTURECOND lpFindParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextSnapPic(LONG lFindHandle,LPNET_VCA_SUB_SNAPPIC_DATA lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_FindSnapPicClose(LONG lFindHandle); +NET_DVR_API LONG __stdcall NET_DVR_AdvanceFindSnapPicture(LONG lUserID, LPNET_VCA_FIND_PICTURECOND_ADVANCE lpFindParam); +NET_DVR_API LONG __stdcall NET_DVR_FindFaceMatchAlarm(LONG lUserID, LPNET_VCA_FIND_PICTURECOND lpFindParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextFaceMatchAlarm(LONG lFindHandle, LPNET_VCA_FACESNAP_MATCH_ALARM_LOG lpFaceMatchAlarmLog); +NET_DVR_API BOOL __stdcall NET_DVR_FindFaceMatchAlarmClose(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetFaceMatchPic(LONG lUserID, LPNET_VCA_FACEMATCH_PICCOND lpMatchCond, LPNET_VCA_FACEMATCH_PICTURE lpMatchPic); +NET_DVR_API BOOL __stdcall NET_DVR_FastAddBlockList(LONG lUserID,LONG lChannel,LPNET_VCA_BLOCKLIST_FASTREGISTER_PARA lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetRemotePlay_V41(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_REMOTE_PLAY_V41 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDisplayCfg_V41(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_MATRIX_VOUTCFG lpVoutCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetDisplayCfg_V41(LONG lUserID, DWORD dwDispChanNum, LPNET_DVR_MATRIX_VOUTCFG lpDisplayCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDeviceStatus_V41(LONG lUserID, LPNET_DVR_DECODER_WORK_STATUS_V41 lpDecoderCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSceneCfg(LONG lUserID, DWORD dwSceneNum, LPNET_DVR_MATRIX_SCENECFG lpSceneCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetSceneCfg(LONG lUserID, DWORD dwSceneNum, LPNET_DVR_MATRIX_SCENECFG lpSceneCfg); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSceneControl(LONG lUserID, DWORD dwSceneNum, DWORD dwCmd, DWORD dwCmdParam); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetCurrentSceneMode(LONG lUserID, DWORD *dwSceneNum); +NET_DVR_API BOOL __stdcall NET_DVR_GetAllValidWinInfo(LONG lUserID, LPNET_DVR_WINLIST lpWinListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_ScreenWinCtrl(LONG lUserID, DWORD dwWinIndex, DWORD dwCommand, LPNET_DVR_SCREEN_WINCFG lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_GetScreenInputStatus(LONG lUserID, LPNET_DVR_SCREENINPUTSTATUS lpStatus); +NET_DVR_API LONG __stdcall NET_DVR_PicUpload(LONG lUserID, char const *sFileName, LPNET_DVR_PICTURECFG lpPictureCfg); +NET_DVR_API LONG __stdcall NET_DVR_GetPicUploadProgress(LONG lUploadHandle); +NET_DVR_API BOOL __stdcall NET_DVR_CloseUploadHandle(LONG lUploadHandle); +NET_DVR_API BOOL __stdcall NET_DVR_PicControl(LONG lUserID, BYTE byUseType, BYTE byPicIndex, BYTE byCtrlCmd); +NET_DVR_API LONG __stdcall NET_DVR_GetPicUploadState(LONG lUploadHandle); +NET_DVR_API BOOL __stdcall NET_DVR_ScreenCtrl(LONG lUserID, DWORD dwDeviceNum, LPNET_DVR_SCREEN_CONTROL lpStruScreenCtrl); +typedef void (CALLBACK *SCREENPICDATACB)(LONG nScreenPicHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser); +NET_DVR_API LONG __stdcall NET_DVR_StartScreenPic(LONG nUserID, DWORD nInputNum, SCREENPICDATACB PicDataCallback, void *pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_StopScreenPic(LONG nScreenPicHandle); +NET_DVR_API BOOL __stdcall NET_DVR_FocusOnePush(LONG lUserID, LONG lChannel); +NET_DVR_API BOOL __stdcall NET_DVR_ResetLens(LONG lUserID, LONG lChannel); + +typedef void(CALLBACK *fRemoteConfigCallback)(DWORD dwType, void* lpBuffer, DWORD dwBufLen, void* pUserData); +NET_DVR_API LONG __stdcall NET_DVR_StartRemoteConfig(LONG lUserID, DWORD dwCommand, LPVOID lpInBuffer, DWORD dwInBufferLen, fRemoteConfigCallback cbStateCallback, LPVOID pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_StopRemoteConfig(LONG lHandle); +NET_DVR_API LONG __stdcall NET_DVR_GetNextRemoteConfig(LONG lHandle, void* lpOutBuff, DWORD dwOutBuffSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetRemoteConfigState(LONG lHandle, void *pState); +NET_DVR_API BOOL __stdcall NET_DVR_SendRemoteConfig(LONG lHandle, DWORD dwDataType, char *pSendBuf, DWORD dwBufSize); +NET_DVR_API LONG __stdcall NET_DVR_SendWithRecvRemoteConfig(LONG lHandle, void* lpInBuff, DWORD dwInBuffSize, void* lpOutBuff, DWORD dwOutBuffSize, DWORD *dwOutDataLen); + +typedef void(CALLBACK *fLongCfgStateCallback)(LONG lHandle, DWORD dwState, LPVOID pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_CloseLongCfgHandle(LONG lHandle); +NET_DVR_API LONG __stdcall NET_DVR_RaidPullDiskStart(LONG lUserID, LONG lRaidID, fLongCfgStateCallback cbStateCallback, LPVOID pUserData); +NET_DVR_API LONG __stdcall NET_DVR_ScanRaidStart(LONG lUserID, fLongCfgStateCallback cbStateCallback, LPVOID pUserData); +NET_DVR_API LONG __stdcall NET_DVR_SetAccessCameraInfo(LONG lUserID, DWORD dwChannel, LPNET_DVR_ACCESS_CAMERA_INFO lpCameraInfo, fLongCfgStateCallback cbStateCallback, LPVOID pUserData); + +NET_DVR_API BOOL __stdcall NET_DVR_InquiryRecordTimeSpan(LONG lUserID, DWORD dwChannel, NET_DVR_RECORD_TIME_SPAN_INQUIRY const *lpInquiry, LPNET_DVR_RECORD_TIME_SPAN lpResult); +NET_DVR_API BOOL __stdcall NET_DVR_UpdateRecordIndex(LONG lUserID, DWORD dwChannel); +NET_DVR_API BOOL __stdcall NET_DVR_GetUpnpNatState(LONG lUserID, LPNET_DVR_UPNP_NAT_STATE lpState); + +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopPlanArray(LONG lUserID, DWORD dwArrayNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V30 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopPlanArray(LONG lUserID, DWORD dwArrayNum, NET_DVR_MATRIX_LOOP_DECINFO_V30 const *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetAlarmShowMode(LONG lUserID, LPNET_DVR_ALARMMODECFG lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetAlarmShowMode(LONG lUserID, NET_DVR_ALARMMODECFG const *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamicAssociateDecode(LONG lUserID, DWORD dwDecChanNum, NET_DVR_DYNAMICDECODE const *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAlarmTurn(LONG lUserID, DWORD dwDecChanNum, DWORD dwTurnParam); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixAlarmShowControl(LONG lUserID, DWORD dwDecChanNum, DWORD dwShowMode); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetPlanDecode(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PLANDECODE lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetPlanDecode(LONG lUserID, DWORD dwDecChanNum, NET_DVR_PLANDECODE const *lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanInfo_EX(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_EX lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanInfo_EX(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_EX lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamic_EX(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PU_STREAM_CFG_EX lpDynamicInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetTrunkListInfo(LONG lUserID, DWORD dwTrunkNum, DWORD dwStartTrunk, LPNET_DVR_MATRIX_TRUNKLIST lpTrunkListInfo, DWORD *pReturnSize); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetSubDecSystemJoinInfo_V41(LONG lUserID, LPNET_DVR_ALLDECSUBSYSTEMJOININFO_V41 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSubSystemSetupAlarmChan(LONG lUserID, DWORD dwSubSystemNum); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSubSystemCloseAlarmChan(LONG lUserID, DWORD dwSubSystemNum); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostClearAlarm(LONG lUserID, DWORD dwSubSystemNum); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostArrayBypass(LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostArrayBypassResume (LONG lUserID); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostSetReportMode(LONG lUserID, LONG lCenterNum, LPVOID lpInputBuf, DWORD dwInputBufLen); +NET_DVR_API BOOL __stdcall NET_DVR_AlarmHostGetReportMode(LONG lUserID, LPVOID lpOutputBuf, DWORD dwOutputBufLen); +NET_DVR_API LONG __stdcall NET_DVR_StartUploadAudio(LONG lUserID, DWORD dwAudioNum, DWORD dwAudioType, char const *sAudioFileName); +NET_DVR_API LONG __stdcall NET_DVR_StartDownloadAudio(LONG lUserID, DWORD dwAudioNum, char const *sAudioFileName); +NET_DVR_API BOOL __stdcall NET_DVR_StopAudioOperate(LONG lAudioHandle); +NET_DVR_API LONG __stdcall NET_DVR_GetAudioProgress(LONG lAudioHandle); +NET_DVR_API BOOL __stdcall NET_DVR_AudioCtrl(LONG lUserID, DWORD dwAudioNum, DWORD dwCtrlParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceConfig(LONG lUserID, DWORD dwCommand, DWORD dwCount, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpStatusList, LPVOID lpOutBuffer, DWORD dwOutBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_SetDeviceConfig(LONG lUserID, DWORD dwCommand, DWORD dwCount, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpStatusList, LPVOID lpInParamBuffer, DWORD dwInParamBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_LockStreamFileByTime(LONG lUserID, LPNET_DVR_STREAM_TIME_LOCK lpLockPara, LPNET_DVR_LOCK_RETURN lpLockReturn); +NET_DVR_API BOOL __stdcall NET_DVR_UnlockStreamFileByTime(LONG lUserID, LPNET_DVR_STREAM_TIME_LOCK lpLockPara, LPNET_DVR_LOCK_RETURN lpLockReturn); +NET_DVR_API BOOL __stdcall NET_DVR_StartManualRecord(LONG lUserID, LPNET_DVR_MANUAL_RECORD_PARA lpManualRecPara); +NET_DVR_API BOOL __stdcall NET_DVR_StopManualRecord(LONG lUserID, LPNET_DVR_STREAM_INFO pIDInfo); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackReverseByName(LONG lUserID, char *sPlayBackFileName, HWND hWnd); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime_V40(LONG lUserID, NET_DVR_VOD_PARA const* pVodPara); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackByTime_V50(LONG lUserID, NET_DVR_VOD_PARA_V50 const* pVodPara); +NET_DVR_API LONG __stdcall NET_DVR_PlayBackReverseByTime_V40(LONG lUserID, HWND hWnd, LPNET_DVR_PLAYCOND pPlayCond); +NET_DVR_API LONG __stdcall NET_DVR_GetFileByTime_V40(LONG lUserID, char *sSavedFileName, LPNET_DVR_PLAYCOND pDownloadCond); +NET_DVR_API LONG __stdcall NET_DVR_FindFile_V40(LONG lUserID, LPNET_DVR_FILECOND_V40 pFindCond); +NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan_V41(LONG lUserID, LPNET_DVR_SETUPALARM_PARAM lpSetupParam); +NET_DVR_API BOOL __stdcall NET_DVR_AddDataBase(LONG lUserID, LPNET_VCA_DATABASE_PARAM lpInBuf); +NET_DVR_API LONG __stdcall NET_DVR_FindDataBase(LONG lUserID, LPNET_VCA_FIND_DATABASE_COND lpInBuf); +NET_DVR_API LONG __stdcall NET_DVR_FindNextDataBase(LONG lFindHandle, LPNET_VCA_DATABASE_PARAM lpOutBuf); +NET_DVR_API BOOL __stdcall NET_DVR_FindDataBaseClose(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_UpdateDataBase(LONG lUserID, LPNET_VCA_DATABASE_PARAM lpInBuf); +NET_DVR_API BOOL __stdcall NET_DVR_DeleteDataBase(LONG lUserID, LPNET_VCA_DELETE_DATABASE_COND lpCond); +typedef void(CALLBACK *fSearchDBCallBack)(LONG lHandle, DWORD dwType, DWORD dwResultNum, BYTE* pBuffer, DWORD dwBufSize,void *pUser); +NET_DVR_API LONG __stdcall NET_DVR_InquireSnapDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_INQUIRE_SNAPDB_COND lpInBuf, fSearchDBCallBack cbSearchDBCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetInquireSnapDBProgress(LONG lInquireHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_DeleteSnapDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_DELETE_SNAPRECORD_COND lpInBuf); +NET_DVR_API LONG __stdcall NET_DVR_SearchSnapDB(LONG lUserID, LPNET_VCA_SEARCH_SNAPDB_COND lpInBuf, fSearchDBCallBack cbSearchDBCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetSearchSnapDBProgress(LONG lSearchHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_AddFaceDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_DATARECORD_INFO lpInBuf); +NET_DVR_API BOOL __stdcall NET_DVR_FastAddFaceDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_FAST_DATARECORD_INFO lpInBuf); +NET_DVR_API LONG __stdcall NET_DVR_InquireFaceDBRecord(LONG lUserID, LPNET_VCA_DATARECORD_COND lpInBuf,fSearchDBCallBack cbInquireDBCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetInquireFaceDBProgress(LONG lInquireHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_UpdateFaceDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_DATARECORD_INFO lpInBuf); +NET_DVR_API BOOL __stdcall NET_DVR_DeleteFaceDBRecord(LONG lUserID, DWORD dwDataBaseID, LPNET_VCA_DELETE_RECORD_COND lpInBuf); +typedef void(CALLBACK *fSearchDBCallBack)(LONG lSearchHandle, DWORD dwType, DWORD dwResultNum, BYTE* pBuffer, DWORD dwBufSize,void *pUser); +NET_DVR_API LONG __stdcall NET_DVR_SearchFaceDB(LONG lUserID, LPNET_VCA_SEARCH_FACEDB_COND lpInBuf,fSearchDBCallBack cbSearchDBCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_GetSearchFaceDBProgress(LONG lSearchHandle, DWORD* pState); +NET_DVR_API BOOL __stdcall NET_DVR_StopSearchDB(LONG lHandle); +NET_DVR_API BOOL __stdcall NET_DVR_FindMatchPicture(LONG lUserID, LPNET_VCA_FIND_MATCHPIC_COND lpFindCond, LPNET_VCA_FIND_MATCHPIC_RESULT lpFindResult); +NET_DVR_API BOOL __stdcall NET_DVR_RemoteControl(LONG lUserID, DWORD dwCommand, LPVOID lpInBuffer, DWORD dwInBufferSize); +NET_DVR_API LONG __stdcall NET_DVR_GetBMPByTime(LONG lUserID, LONG lChannel, NET_DVR_TIME const *lpTime, char const *sFilename); +NET_DVR_API BOOL __stdcall NET_DVR_CommandDevice(LONG lUserID, DWORD dwOutCommand, LPVOID lpInBuffer, DWORD dwInBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_TestDVRAlive(LONG lUserID); + +NET_DVR_API BOOL __stdcall NET_DVR_PicViewRequest(LONG lUserID, NET_DVR_PIC_VIEW_PARAM *lpPicViewParam); +typedef LONG (CALLBACK *PicViewCallBack)(LPNET_DVR_PICVIEW_CALLBACKPARAM pStruPicViewParam, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPicViewResponseCallBack(PicViewCallBack fPicViewResponseCallBack, void *pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetPicViewDataCallBack(LONG lPicViewHandle, SCREENPICDATACB fPicDataCallback, void *pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_GetDevList(LONG lUserID, LPNET_DVR_DEVLIST lpDevListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_GetScreenList(LONG lUserID, LPNET_DVR_SCREENLIST lpScreenListInfo); +NET_DVR_API BOOL __stdcall NET_DVR_SetScreenRelation(LONG lUserID, NET_DVR_DISP_SCREEN const* lpScreenInfo); +NET_DVR_API BOOL __stdcall NET_DVR_TextShowCtrl(LONG lUserID, DWORD dwDeviceIndex, LPNET_DVR_TEXTSHOW lpText); +NET_DVR_API LONG __stdcall NET_DVR_StartUpgrade(LONG lUserID, LPNET_DVR_OPERATE_DEVICE lpStruOperate, DVCS_UPGRADESTATE_CB UpgradeStateCallback, void *pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_StopUpgrade(LONG lUserID, LPNET_DVR_OPERATE_DEVICE lpStruOperate, LONG lUpgradeHandle); +NET_DVR_API BOOL __stdcall NET_DVR_AddNetSignal(LONG lUserID, LPNET_DVR_NETSIGNAL_INFO lpStruSignal, void* lpOutBuf , DWORD dwBufLen); +NET_DVR_API LONG __stdcall NET_DVR_StartPicPreview(LONG lUserID, NET_DVR_START_PIC_VIEW_INFO const* lpStruStartPicView, SCREENPICDATACB PicDataCallback, void *pUserData); +NET_DVR_API BOOL __stdcall NET_DVR_GetDeviceStatus(LONG lUserID, DWORD dwCommand, DWORD dwCount, LPVOID lpInBuffer, DWORD dwInBufferSize, LPVOID lpStatusList, LPVOID lpOutBuffer, DWORD dwOutBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetPlanList(LONG lUserID, DWORD dwDevNum, LPNET_DVR_PLAN_LIST lpPlanList); +NET_DVR_API BOOL __stdcall NET_DVR_GetInputSignalList(LONG lUserID, DWORD dwDevNum, LPNET_DVR_INPUT_SIGNAL_LIST lpInputSignalList); +NET_DVR_API BOOL __stdcall NET_DVR_GetInputSignalList_V40(LONG lUserID, DWORD dwDevNum, LPNET_DVR_INPUT_SIGNAL_LIST lpInputSignalList); + +NET_DVR_API LONG __stdcall NET_DVR_UploadFile(LONG lUserID, DWORD dwUploadType, LPVOID lpInBuffer, DWORD dwInBufferSize, char* sFileName); +NET_DVR_API LONG __stdcall NET_DVR_UploadFile_V40(LONG lUserID, DWORD dwUploadType, LPVOID lpInBuffer, DWORD dwInBufferSize, char const * sFileName, LPVOID lpOutBuffer, DWORD dwOutBufferSize); +NET_DVR_API LONG __stdcall NET_DVR_GetUploadState(LONG lUploadHandle, LPDWORD pProgress); +NET_DVR_API BOOL __stdcall NET_DVR_GetUploadResult(LONG lUploadHandle, LPVOID lpOutBuffer, DWORD dwOutBufferSize); +NET_DVR_API BOOL __stdcall NET_DVR_UploadClose(LONG lUploadHandle); +NET_DVR_API LONG __stdcall NET_DVR_StartUploadFile(LONG lUserID, LPNET_DVR_UPLOAD_PARAM lpStruUploadParam); +NET_DVR_API LONG __stdcall NET_DVR_GetUploadFileProgress(LONG lFileHandle); +NET_DVR_API LONG __stdcall NET_DVR_GetUploadFileState(LONG lFileHandle); +NET_DVR_API BOOL __stdcall NET_DVR_StopUploadFile (LONG lFileHandle); +NET_DVR_API LONG __stdcall NET_DVR_StartDownloadFile(LONG lUserID, LPNET_DVR_DOWNLOAD_PARAM lpStruDownloadParam); +NET_DVR_API LONG __stdcall NET_DVR_GetDownloadFileProgress(LONG lFileHandle); +NET_DVR_API LONG __stdcall NET_DVR_GetDownloadFileState(LONG lFileHandle); +NET_DVR_API BOOL __stdcall NET_DVR_StopDownloadFile (LONG lFileHandle); +NET_DVR_API BOOL __stdcall NET_DVR_DownloadControl(LONG lDownloadHandle, NET_SDK_DOWNLOAD_CONTROL_TYPE_ENUM enumDownloadType, void* lpInBuffer, DWORD dwInBufferLen, void* lpOutBuffer, DWORD dwOutBufferLen); +NET_DVR_API LONG __stdcall NET_DVR_UploadSend(LONG lUploadHandle, const NET_DVR_SEND_PARAM_IN *pstruSendParamIN, void* lpOutBuffer); + + +NET_DVR_API BOOL __stdcall NET_DVR_GetMobileDevStatus(LONG lUserID, DWORD dwStatusType, LPNET_DVR_MB_MOBILEDEV_STATUS lpstruMobileDevStatus); +NET_DVR_API BOOL __stdcall NET_DVR_SetVoiceDataCallBack(LONG lVoiceComHandle, BOOL bNeedCBNoEncData, void(CALLBACK *fVoiceDataCallBack)(LONG lVoiceComHandle, char *pRecvDataBuffer, DWORD dwBufSize, BYTE byAudioFlag, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetTransparentParam(LONG lUserID, char *sInBuffer, DWORD dwInSize); +NET_DVR_API BOOL __stdcall NET_DVR_GetTransparentParam(LONG lUserID, char *sInBuffer, DWORD dwInSize, char *sOutBuffer, DWORD dwOutSize); + +NET_DVR_API BOOL __stdcall NET_DVR_SetSDKLocalConfig(LPNET_DVR_SDKLOCAL_CFG lpSdkLocalCfg); +NET_DVR_API BOOL __stdcall NET_DVR_GetSDKLocalConfig(LPNET_DVR_SDKLOCAL_CFG lpSdkLocalCfg); + +NET_DVR_API BOOL __stdcall NET_DVR_SetSDKLocalCfg(NET_SDK_LOCAL_CFG_TYPE enumType, const void *lpInBuff); +NET_DVR_API BOOL __stdcall NET_DVR_GetSDKLocalCfg(NET_SDK_LOCAL_CFG_TYPE enumType, void* lpOutBuff); + +NET_DVR_API LONG __stdcall NET_DVR_OpticalUpgrade(LONG lUserID, char const *sFileName, LPNET_DVR_OPTICAL_INFO lpOpticalInfo); +typedef void(CALLBACK *fGPSDataCallback)(LONG nHandle, DWORD dwState, void* lpBuffer, DWORD dwBufLen, void* pUserData); +NET_DVR_API LONG __stdcall NET_DVR_GetVehicleGpsInfo(LONG nUserID, LPNET_DVR_GET_GPS_DATA_PARAM lpGPSDataParam, fGPSDataCallback cbGPSDataCallback, void* pUser); + +NET_DVR_API BOOL __stdcall NET_DVR_ClosePreview(LONG lUserID, DWORD nSessionID); +NET_DVR_API BOOL __stdcall NET_DVR_ClosePlayBack(LONG lUserID, DWORD nSessionID); +NET_DVR_API LONG __stdcall NET_DVR_RealPlay_V40(LONG lUserID, LPNET_DVR_PREVIEWINFO lpPreviewInfo, REALDATACALLBACK fRealDataCallBack_V30 = NULL, void* pUser = NULL); +NET_DVR_API LONG __stdcall NET_DVR_RealPlaySpecial(LONG lUserID, LPNET_DVR_PREVIEWINFO_SPECIAL lpPreviewInfo, REALDATACALLBACK fRealDataCallBack_V30 = NULL, void* pUser = NULL); +NET_DVR_API BOOL __stdcall NET_DVR_GetLinkAddr(LONG lLinkHandle, NET_DVR_LINK_KIND enumLinkKind, LPNET_DVR_LINK_ADDR lpLinkAddr); + +NET_DVR_API LONG __stdcall NET_DVR_StartDownload(LONG lUserID, DWORD dwDownloadType, LPVOID lpInBuffer, DWORD dwInBufferSize, const char *sFileName); +NET_DVR_API LONG __stdcall NET_DVR_GetDownloadState(LONG lDownloadHandle, LPDWORD pProgress); +NET_DVR_API int __stdcall NET_DVR_GetDownloadStateInfo(LONG lDownloadHandle, void* pStatusInfo); +NET_DVR_API BOOL __stdcall NET_DVR_StopDownload(LONG lHandle); + +NET_DVR_API BOOL __stdcall NET_DVR_MatrixStartDynamic_V41(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_PU_STREAM_CFG_V41 lpDynamicInfo); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetLoopDecChanInfo_V41(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V41 lpOuter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixSetLoopDecChanInfo_V41(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_LOOP_DECINFO_V41 lpInter); +NET_DVR_API BOOL __stdcall NET_DVR_MatrixGetDecChanInfo_V41(LONG lUserID, DWORD dwDecChanNum, LPNET_DVR_MATRIX_DEC_CHAN_INFO_V41 lpOuter); + +NET_DVR_API LONG __stdcall NET_DVR_StartT1Test(LONG lUserID, LPNET_DVR_ALARMHOST_DOWNLOAD_PARAM lpStruDownloadParam); +NET_DVR_API BOOL __stdcall NET_DVR_StopTT1Test(BOOL lHandle); +NET_DVR_API BOOL __stdcall NET_DVR_GetT1TestStatus(LONG lHandle, LONG *pStatus); +NET_DVR_API BOOL __stdcall NET_DVR_SendT1TestData(LONG lHandle, DWORD dwDataType, char *pSendBuf, DWORD dwSendBufLen); + +NET_DVR_API BOOL __stdcall NET_DVR_UploadLogo_NEW(LONG lUserID, DWORD dwLogoNo, LPNET_DVR_MATRIX_LOGO_INFO lpLogoInfo, char *sLogoBuffer); +NET_DVR_API BOOL __stdcall NET_DVR_DownloadLogo(LONG lUserID, DWORD dwLogoNo, LPNET_DVR_MATRIX_LOGO_INFO lpLogoInfo, char *sLogoBuffer, DWORD dwLogoBufferSize); +NET_DVR_API LONG __stdcall NET_DVR_StartPassiveTransCode(LONG lUserID, NET_DVR_STREAM_INFO const *pStreamInfo, NET_DVR_COMPRESSIONCFG_V30 const *pDstTransInfo, NET_DVR_PASSIVETRANSINFO const *pPassiveTransInfo, void(CALLBACK *fTransCodeDataCallBack) (LONG lPassiveHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser) = NULL, void* pUser = NULL); +NET_DVR_API BOOL __stdcall NET_DVR_TransCodeInputData(LONG lPassiveHandle, BYTE *pBuffer, DWORD dwBufSize); +NET_DVR_API BOOL __stdcall NET_DVR_StopPassiveTransCode(LONG lPassiveHandle); +NET_DVR_API LONG __stdcall NET_DVR_GetPassiveTransChanNum(LONG lPassiveHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetDeviceConfigEx(LONG lUserID, DWORD dwCommand, DWORD dwCount, NET_DVR_IN_PARAM *lpInParam, NET_DVR_OUT_PARAM *lpOutParam); + +NET_DVR_API BOOL __stdcall NET_DVR_GetSTDConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_STD_CONFIG lpConfigParam); +NET_DVR_API BOOL __stdcall NET_DVR_SetSTDConfig(LONG lUserID, DWORD dwCommand, LPNET_DVR_STD_CONFIG lpConfigParam); +NET_DVR_API BOOL __stdcall NET_DVR_GetSTDAbility(LONG lUserID, DWORD dwAbilityType, LPNET_DVR_STD_ABILITY lpAbilityParam); +NET_DVR_API BOOL __stdcall NET_DVR_STDControl(LONG lUserID, DWORD dwCommand, LPNET_DVR_STD_CONTROL lpControlParam); +NET_DVR_API BOOL __stdcall NET_DVR_STDXMLConfig(LONG lUserID, NET_DVR_XML_CONFIG_INPUT* lpInputParam, NET_DVR_XML_CONFIG_OUTPUT* lpOutputParam); +NET_DVR_API LONG __stdcall NET_DVR_Upgrade_V40(DWORD lUserID, DWORD dwUpgradeType, char const *sFileName, void *pInbuffer, DWORD dwBufferLen); +NET_DVR_API LONG __stdcall NET_DVR_Upgrade_V50(DWORD lUserID, LPNET_DVR_UPGRADE_PARAM lpUpgradeParam); + +NET_DVR_API BOOL __stdcall NET_DVR_DetectImage_V50(LONG lUserID, LPNET_VCA_FD_PROCIMG_CFG lpFDProcImg,LPNET_VCA_FD_PROCIMG_RESULT_V50 lpOutBuf); + +NET_DVR_API LONG __stdcall NET_DVR_SmartSearchPicture(LONG lUserID, NET_DVR_SMART_SEARCH_PIC_PARA * pFindParam); +NET_DVR_API LONG __stdcall NET_DVR_FindNextSmartPicture(LONG lFindHandle,LPNET_DVR_SMART_SEARCH_PIC_RET lpFindData); +NET_DVR_API BOOL __stdcall NET_DVR_CloseSmartSearchPicture(LONG lFindHandle); +NET_DVR_API BOOL __stdcall NET_DVR_SetESCallBack(LONG iRealHandle, void (__stdcall *fnESCallback)(LONG lPreviewHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_SetESRealPlayCallBack(LONG iRealHandle, void(__stdcall *fPlayESCallBack)(LONG lPreviewHandle, NET_DVR_PACKET_INFO_EX *pstruPackInfo, void* pUser), void* pUser); +NET_DVR_API BOOL __stdcall NET_DVR_ActivateDevice(char* sDVRIP, WORD wDVRPort, LPNET_DVR_ACTIVATECFG lpActivateCfg); +NET_DVR_API BOOL __stdcall NET_DVR_GetAddrInfoByServer(DWORD dwQueryType, void* pInBuf, DWORD dwInBufLen, void* pOutBuf, DWORD dwOutBufLen); +NET_DVR_API BOOL __stdcall NET_DVR_StartGetDevState(LPNET_DVR_CHECK_DEV_STATE pParams); +NET_DVR_API BOOL __stdcall NET_DVR_StopGetDevState(); +NET_DVR_API BOOL __stdcall NET_DVR_RigisterPlayBackDrawFun(LONG lPlayHandle, void (__stdcall *fDrawFun)(LONG lPlayHandle, HDC hDc, DWORD dwUser), DWORD dwUser); + +NET_DVR_API BOOL __stdcall NET_DVR_SetSDKInitCfg(NET_SDK_INIT_CFG_TYPE enumType, void* const lpInBuff); +NET_DVR_API BOOL __stdcall NET_DVR_ReleaseSDKMemPool(LPNET_DVR_SDKMEMPOOL_CFG lpSdkMemPoolCfg); + +NET_DVR_API BOOL __stdcall NET_DVR_CapturePictureBlock(LONG iRealHandle, char const *sPicFileName, DWORD dwTimeOut); + + +NET_DVR_API BOOL __stdcall NET_DVR_CapturePictureBlock_New(LONG iRealHandle, char *pPicBuf, DWORD dwPicSize, DWORD *lpSizeReturned); + +NET_DVR_API BOOL __stdcall NET_DVR_ChangeWndResolution(LONG iRealHandle); + +NET_DVR_API LONG __stdcall NET_DVR_SDKChannelToISAPI(LONG lUserID, LONG lInChannel, BOOL bSDKToISAPI); + +NET_DVR_API BOOL __stdcall NET_DVR_STDXMLConfig_Conv(LONG lUserID, NET_DVR_XML_CONFIG_INPUT* lpInputParam, NET_DVR_XML_CONFIG_OUTPUT* lpOutputParam); + +NET_DVR_API BOOL __stdcall NET_DVR_SetDevXmlLen(LONG lUserID, const WORD wDevXmlLen); + +NET_DVR_API LONG __stdcall NET_DVR_SetupAlarmChan_V50(LONG iUserID, LPNET_DVR_SETUPALARM_PARAM_V50 lpSetupParam, char *pSub, DWORD dwSubSize); + +NET_DVR_API BOOL __stdcall NET_DVR_GetAlarmSubscribe(LONG lAlarmHandle, char *pData, DWORD dwDataLen); + +NET_DVR_API BOOL __stdcall NET_DVR_SetAlarmSubscribe(LONG lAlarmHandle, char *pData, DWORD dwDataLen); + +NET_DVR_API BOOL __stdcall NET_DVR_GetNPQStat(LONG lHandle, NET_SDK_NPQ_STATE* pStruStat); + +NET_DVR_API BOOL __stdcall NET_DVR_SetNPQNotifyParam(LONG lHandle, NET_SDK_NPQ_NOTIFY_PARAM* pNotifyParam); + +NET_DVR_API BOOL __stdcall NET_DVR_PlaybackGetNPQStat(LONG lHandle, NET_SDK_NPQ_STATE* pStruStat); +NET_DVR_API BOOL __stdcall NET_DVR_RenderPrivateData(LONG lRealHandle, int iIntelType, BOOL bTrue); +NET_DVR_API BOOL __stdcall NET_DVR_RenderPrivateDataEx(LONG lRealHandle, int iIntelType, int iSubType, BOOL bTrue); + +NET_DVR_API BOOL __stdcall NET_DVR_PlaybackSetNPQNotifyParam(LONG lHandle, NET_SDK_NPQ_NOTIFY_PARAM* pNotifyParam); + +NET_DVR_API BOOL __stdcall NET_DVR_EnableRelogon(BOOL bEnable, DWORD dwReserved); + +NET_DVR_API LONG __stdcall NET_DVR_CreateEzvizUser(LPNET_DVR_EZVIZ_USER_LOGIN_INFO pLoginInfo, LPNET_DVR_DEVICEINFO_V30 pDeviceInfo); +NET_DVR_API BOOL __stdcall NET_DVR_DeleteEzvizUser(LONG iUserID); + +NET_DVR_API LONG __stdcall NET_DVR_CreateOpenEzvizUser(LPNET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO pLoginInfo, LPNET_DVR_DEVICEINFO_V40 pDeviceInfo); +NET_DVR_API BOOL __stdcall NET_DVR_DeleteOpenEzvizUser(LONG iUserID); + +NET_DVR_API BOOL __stdcall NET_DVR_LoadAdditionalLib(ADDITIONAL_LIB libType, char const *sDllName); + +#endif // + diff --git a/lib/HCNetSDK/include/plaympeg4.h b/lib/HCNetSDK/include/plaympeg4.h new file mode 100644 index 0000000..1d61f30 --- /dev/null +++ b/lib/HCNetSDK/include/plaympeg4.h @@ -0,0 +1,760 @@ +#ifndef _PLAYM4_H_ +#define _PLAYM4_H_ + +#if defined( _WINDLL) + #define PLAYM4_API extern "C" __declspec(dllexport) +#else + #define PLAYM4_API extern "C" __declspec(dllimport) +#endif + +//Max channel numbers +#define PLAYM4_MAX_SUPPORTS 500 +//Wave coef range; +#define MIN_WAVE_COEF -100 +#define MAX_WAVE_COEF 100 + +//Timer type +#define TIMER_1 1 //Only 16 timers for every process.Default TIMER; +#define TIMER_2 2 //Not limit;But the precision less than TIMER_1; + +//BUFFER AND DATA TYPE +#define BUF_VIDEO_SRC (1) //mixed input,total src buffer size;splited input,video src buffer size +#define BUF_AUDIO_SRC (2) //mixed input,not defined;splited input,audio src buffer size +#define BUF_VIDEO_RENDER (3) //video render node count +#define BUF_AUDIO_RENDER (4) //audio render node count +#define BUF_VIDEO_DECODED (5) //video decoded node count to render +#define BUF_AUDIO_DECODED (6) //audio decoded node count to render +#define BUF_DISPLAY_NODE (7) //display node + +//Error code +#define PLAYM4_NOERROR 0 //no error +#define PLAYM4_PARA_OVER 1 //input parameter is invalid; +#define PLAYM4_ORDER_ERROR 2 //The order of the function to be called is error. +#define PLAYM4_TIMER_ERROR 3 //Create multimedia clock failed; +#define PLAYM4_DEC_VIDEO_ERROR 4 //Decode video data failed. +#define PLAYM4_DEC_AUDIO_ERROR 5 //Decode audio data failed. +#define PLAYM4_ALLOC_MEMORY_ERROR 6 //Allocate memory failed. +#define PLAYM4_OPEN_FILE_ERROR 7 //Open the file failed. +#define PLAYM4_CREATE_OBJ_ERROR 8 //Create thread or event failed +#define PLAYM4_CREATE_DDRAW_ERROR 9 //Create DirectDraw object failed. +#define PLAYM4_CREATE_OFFSCREEN_ERROR 10 //failed when creating off-screen surface. +#define PLAYM4_BUF_OVER 11 //buffer is overflow +#define PLAYM4_CREATE_SOUND_ERROR 12 //failed when creating audio device. +#define PLAYM4_SET_VOLUME_ERROR 13 //Set volume failed +#define PLAYM4_SUPPORT_FILE_ONLY 14 //The function only support play file. +#define PLAYM4_SUPPORT_STREAM_ONLY 15 //The function only support play stream. +#define PLAYM4_SYS_NOT_SUPPORT 16 //System not support. +#define PLAYM4_FILEHEADER_UNKNOWN 17 //No file header. +#define PLAYM4_VERSION_INCORRECT 18 //The version of decoder and encoder is not adapted. +#define PLAYM4_INIT_DECODER_ERROR 19 //Initialize decoder failed. +#define PLAYM4_CHECK_FILE_ERROR 20 //The file data is unknown. +#define PLAYM4_INIT_TIMER_ERROR 21 //Initialize multimedia clock failed. +#define PLAYM4_BLT_ERROR 22 //Blt failed. +#define PLAYM4_UPDATE_ERROR 23 //Update failed. +#define PLAYM4_OPEN_FILE_ERROR_MULTI 24 //openfile error, streamtype is multi +#define PLAYM4_OPEN_FILE_ERROR_VIDEO 25 //openfile error, streamtype is video +#define PLAYM4_JPEG_COMPRESS_ERROR 26 //JPEG compress error +#define PLAYM4_EXTRACT_NOT_SUPPORT 27 //Don't support the version of this file. +#define PLAYM4_EXTRACT_DATA_ERROR 28 //extract video data failed. +#define PLAYM4_SECRET_KEY_ERROR 29 //Secret key is error //add 20071218 +#define PLAYM4_DECODE_KEYFRAME_ERROR 30 //add by hy 20090318 +#define PLAYM4_NEED_MORE_DATA 31 //add by hy 20100617 +#define PLAYM4_INVALID_PORT 32 //add by cj 20100913 +#define PLAYM4_NOT_FIND 33 //add by cj 20110428 +#define PLAYM4_NEED_LARGER_BUFFER 34 //add by pzj 20130528 +#define PLAYM4_FAIL_UNKNOWN 99 //Fail, but the reason is unknown; + +//鱼眼功能错误码 +#define PLAYM4_FEC_ERR_ENABLEFAIL 100 // 鱼眼模块加载失败 +#define PLAYM4_FEC_ERR_NOTENABLE 101 // 鱼眼模块没有加载 +#define PLAYM4_FEC_ERR_NOSUBPORT 102 // 子端口没有分配 +#define PLAYM4_FEC_ERR_PARAMNOTINIT 103 // 没有初始化对应端口的参数 +#define PLAYM4_FEC_ERR_SUBPORTOVER 104 // 子端口已经用完 +#define PLAYM4_FEC_ERR_EFFECTNOTSUPPORT 105 // 该安装方式下这种效果不支持 +#define PLAYM4_FEC_ERR_INVALIDWND 106 // 非法的窗口 +#define PLAYM4_FEC_ERR_PTZOVERFLOW 107 // PTZ位置越界 +#define PLAYM4_FEC_ERR_RADIUSINVALID 108 // 圆心参数非法 +#define PLAYM4_FEC_ERR_UPDATENOTSUPPORT 109 // 指定的安装方式和矫正效果,该参数更新不支持 +#define PLAYM4_FEC_ERR_NOPLAYPORT 110 // 播放库端口没有启用 +#define PLAYM4_FEC_ERR_PARAMVALID 111 // 参数为空 +#define PLAYM4_FEC_ERR_INVALIDPORT 112 // 非法子端口 +#define PLAYM4_FEC_ERR_PTZZOOMOVER 113 // PTZ矫正范围越界 +#define PLAYM4_FEC_ERR_OVERMAXPORT 114 // 矫正通道饱和,最大支持的矫正通道为四个 +#define PLAYM4_FEC_ERR_ENABLED 115 //该端口已经启用了鱼眼模块 +#define PLAYM4_FEC_ERR_D3DACCENOTENABLE 116 // D3D加速没有开启 + + +//Max display regions. +#define MAX_DISPLAY_WND 4 + +//Display type +#define DISPLAY_NORMAL 0x00000001 +#define DISPLAY_QUARTER 0x00000002 +#define DISPLAY_YC_SCALE 0x00000004 //add by gb 20091116 +#define DISPLAY_NOTEARING 0x00000008 +//Display buffers +#define MAX_DIS_FRAMES 50 +#define MIN_DIS_FRAMES 1 + +//Locate by +#define BY_FRAMENUM 1 +#define BY_FRAMETIME 2 + +//Source buffer +#define SOURCE_BUF_MAX 1024*100000 +#define SOURCE_BUF_MIN 1024*50 + +//Stream type +#define STREAME_REALTIME 0 +#define STREAME_FILE 1 + +//frame type +#define T_AUDIO16 101 +#define T_AUDIO8 100 +#define T_UYVY 1 +#define T_YV12 3 +#define T_RGB32 7 + +//capability +#define SUPPORT_DDRAW 1 +#define SUPPORT_BLT 2 +#define SUPPORT_BLTFOURCC 4 +#define SUPPORT_BLTSHRINKX 8 +#define SUPPORT_BLTSHRINKY 16 +#define SUPPORT_BLTSTRETCHX 32 +#define SUPPORT_BLTSTRETCHY 64 +#define SUPPORT_SSE 128 +#define SUPPORT_MMX 256 + +// 以下宏定义用于HIK_MEDIAINFO结构 +#define FOURCC_HKMI 0x484B4D49 // "HKMI" HIK_MEDIAINFO结构标记 +// 系统封装格式 +#define SYSTEM_NULL 0x0 // 没有系统层,纯音频流或视频流 +#define SYSTEM_HIK 0x1 // 海康文件层 +#define SYSTEM_MPEG2_PS 0x2 // PS封装 +#define SYSTEM_MPEG2_TS 0x3 // TS封装 +#define SYSTEM_RTP 0x4 // rtp封装 +#define SYSTEM_RTPHIK 0x401 // rtp封装 + +// 视频编码类型 +#define VIDEO_NULL 0x0 // 没有视频 +#define VIDEO_H264 0x1 // 海康H.264 +#define VIDEO_MPEG4 0x3 // 标准MPEG4 +#define VIDEO_MJPEG 0x4 +#define VIDEO_AVC264 0x0100 + +// 音频编码类型 +#define AUDIO_NULL 0x0000 // 没有音频 +#define AUDIO_ADPCM 0x1000 // ADPCM +#define AUDIO_MPEG 0x2000 // MPEG 系列音频,解码器能自适应各种MPEG音频 +#define AUDIO_AAC 0X2001 // AAC 编码 +// G系列音频 +#define AUDIO_RAW_DATA8 0x7000 //采样率为8k的原始数据 +#define AUDIO_RAW_UDATA16 0x7001 //采样率为16k的原始数据,即L16 +#define AUDIO_G711_U 0x7110 +#define AUDIO_G711_A 0x7111 +#define AUDIO_G722_1 0x7221 +#define AUDIO_G723_1 0x7231 +#define AUDIO_G726_U 0x7260 +#define AUDIO_G726_A 0x7261 +#define AUDIO_G726_16 0x7262 +#define AUDIO_G729 0x7290 +#define AUDIO_AMR_NB 0x3000 + +#define SYNCDATA_VEH 1 //同步数据:车载信息 +#define SYNCDATA_IVS 2 //同步数据:智能信息 + +//motion flow type +#define MOTION_FLOW_NONE 0 +#define MOTION_FLOW_CPU 1 +#define MOTION_FLOW_GPU 2 + +//音视频加密类型 +#define ENCRYPT_AES_3R_VIDEO 1 +#define ENCRYPT_AES_10R_VIDEO 2 +#define ENCRYPT_AES_3R_AUDIO 1 +#define ENCRYPT_AES_10R_AUDIO 2 + +//Frame position +typedef struct{ + long nFilePos; + long nFrameNum; + long nFrameTime; + long nErrorFrameNum; + SYSTEMTIME *pErrorTime; + long nErrorLostFrameNum; + long nErrorFrameSize; +}FRAME_POS,*PFRAME_POS; + +//Frame Info +typedef struct{ + long nWidth; + long nHeight; + long nStamp; + long nType; + long nFrameRate; + DWORD dwFrameNum; +}FRAME_INFO; + +typedef struct +{ + long nPort; //通道号 + char *pBuf; //返回的第一路图像数据指针 + unsigned int nBufLen; //返回的第一路图像数据大小 + char *pBuf1; //返回的第二路图像数据指针 + unsigned int nBufLen1; //返回的第二路图像数据大小 + char *pBuf2; //返回的第三路图像数据指针 + unsigned int nBufLen2; //返回的第三路图像数据大小 + unsigned int nWidth; //画面宽 + unsigned int nHeight; //画面高 + unsigned int nStamp; //时标信息,单位毫秒 + unsigned int nType; //数据类型 + void *pUser; //用户数据 + unsigned int reserved[4]; //保留 +}DISPLAY_INFO_YUV; + +//Frame +typedef struct{ + char *pDataBuf; + long nSize; + long nFrameNum; + BOOL bIsAudio; + long nReserved; +}FRAME_TYPE; + +//Watermark Info //add by gb 080119 +typedef struct{ + char *pDataBuf; + long nSize; + long nFrameNum; + BOOL bRsaRight; + long nReserved; +}WATERMARK_INFO; + +typedef struct SYNCDATA_INFO +{ + DWORD dwDataType; //和码流数据同步的附属信息类型,目前有:智能信息,车载信息 + DWORD dwDataLen; //附属信息数据长度 + BYTE* pData; //指向附属信息数据结构的指针,比如IVS_INFO结构 +} SYNCDATA_INFO; + +#ifndef _HIK_MEDIAINFO_FLAG_ +#define _HIK_MEDIAINFO_FLAG_ +typedef struct _HIK_MEDIAINFO_ // modified by gb 080425 +{ + unsigned int media_fourcc; // "HKMI": 0x484B4D49 Hikvision Media Information + unsigned short media_version; // 版本号:指本信息结构版本号,目前为0x0101,即1.01版本,01:主版本号;01:子版本号。 + unsigned short device_id; // 设备ID,便于跟随/分析 + + unsigned short system_format; // 系统封装层 + unsigned short video_format; // 视频编码类型 + + unsigned short audio_format; // 音频编码类型 + unsigned char audio_channels; // 通道数 + unsigned char audio_bits_per_sample; // 样位率 + unsigned int audio_samplesrate; // 采样率 + unsigned int audio_bitrate; // 压缩音频码率,单位:bit + + unsigned int reserved[4]; // 保留 +}HIK_MEDIAINFO; +#endif + +typedef struct +{ + long nPort; + char * pBuf; + long nBufLen; + long nWidth; + long nHeight; + long nStamp; + long nType; + long nUser; +}DISPLAY_INFO; + +typedef struct +{ + long nPort; + char *pVideoBuf; + long nVideoBufLen; + char *pPriBuf; + long nPriBufLen; + long nWidth; + long nHeight; + long nStamp; + long nType; + long nUser; +}DISPLAY_INFOEX; + +typedef struct PLAYM4_SYSTEM_TIME //绝对时间 +{ + DWORD dwYear; //年 + DWORD dwMon; //月 + DWORD dwDay; //日 + DWORD dwHour; //时 + DWORD dwMin; //分 + DWORD dwSec; //秒 + DWORD dwMs; //毫秒 +} PLAYM4_SYSTEM_TIME; + +//ENCRYPT Info +typedef struct{ + long nVideoEncryptType; //视频加密类型 + long nAudioEncryptType; //音频加密类型 + long nSetSecretKey; //是否设置,1表示设置密钥,0表示没有设置密钥 +}ENCRYPT_INFO; + +////////////////////////////////////////////////////////////////////////////// +//API +////////////////////////////////////////////////////////////////////////////// + +////////////////ver 1.0/////////////////////////////////////// +//Initialize DirecDraw.Now invalid. +PLAYM4_API BOOL __stdcall PlayM4_InitDDraw(HWND hWnd); +//Release directDraw; Now invalid. +PLAYM4_API BOOL __stdcall PlayM4_RealeseDDraw(); +PLAYM4_API BOOL __stdcall PlayM4_OpenFile(LONG nPort,LPSTR sFileName); +PLAYM4_API BOOL __stdcall PlayM4_CloseFile(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_Play(LONG nPort, HWND hWnd); +PLAYM4_API BOOL __stdcall PlayM4_Stop(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_Pause(LONG nPort,DWORD nPause); +PLAYM4_API BOOL __stdcall PlayM4_Fast(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_Slow(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_OneByOne(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetPlayPos(LONG nPort,float fRelativePos); +PLAYM4_API float __stdcall PlayM4_GetPlayPos(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetFileEndMsg(LONG nPort,HWND hWnd,UINT nMsg); +PLAYM4_API BOOL __stdcall PlayM4_SetVolume(LONG nPort,WORD nVolume); +PLAYM4_API BOOL __stdcall PlayM4_StopSound(); +PLAYM4_API BOOL __stdcall PlayM4_PlaySound(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_OpenStream(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); +PLAYM4_API BOOL __stdcall PlayM4_InputData(LONG nPort,PBYTE pBuf,DWORD nSize); +PLAYM4_API BOOL __stdcall PlayM4_CloseStream(LONG nPort); +PLAYM4_API int __stdcall PlayM4_GetCaps(); +PLAYM4_API DWORD __stdcall PlayM4_GetFileTime(LONG nPort); +PLAYM4_API DWORD __stdcall PlayM4_GetPlayedTime(LONG nPort); +PLAYM4_API DWORD __stdcall PlayM4_GetPlayedFrames(LONG nPort); + +//23 +////////////////ver 2.0 added/////////////////////////////////////// +PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBack(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2)); +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBackYUV(LONG nPort, void (CALLBACK* DisplayCBFun)(DISPLAY_INFO_YUV *pstDisplayInfo), BOOL bTrue, void* pUser); +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBack(LONG nPort,void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReserved)); +PLAYM4_API BOOL __stdcall PlayM4_ConvertToBmpFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName); +PLAYM4_API DWORD __stdcall PlayM4_GetFileTotalFrames(LONG nPort); +PLAYM4_API DWORD __stdcall PlayM4_GetCurrentFrameRate(LONG nPort); +PLAYM4_API DWORD __stdcall PlayM4_GetPlayedTimeEx(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetPlayedTimeEx(LONG nPort,DWORD nTime); +PLAYM4_API DWORD __stdcall PlayM4_GetCurrentFrameNum(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetStreamOpenMode(LONG nPort,DWORD nMode); +PLAYM4_API DWORD __stdcall PlayM4_GetFileHeadLength(); +PLAYM4_API DWORD __stdcall PlayM4_GetSdkVersion(); +//11 +////////////////ver 2.2 added/////////////////////////////////////// +PLAYM4_API DWORD __stdcall PlayM4_GetLastError(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_RefreshPlay(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetOverlayMode(LONG nPort,BOOL bOverlay,COLORREF colorKey); +PLAYM4_API BOOL __stdcall PlayM4_GetPictureSize(LONG nPort,LONG *pWidth,LONG *pHeight); +PLAYM4_API BOOL __stdcall PlayM4_SetPicQuality(LONG nPort,BOOL bHighQuality); +PLAYM4_API BOOL __stdcall PlayM4_PlaySoundShare(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_StopSoundShare(LONG nPort); +//7 +////////////////ver 2.4 added/////////////////////////////////////// +PLAYM4_API LONG __stdcall PlayM4_GetStreamOpenMode(LONG nPort); +PLAYM4_API LONG __stdcall PlayM4_GetOverlayMode(LONG nPort); +PLAYM4_API COLORREF __stdcall PlayM4_GetColorKey(LONG nPort); +PLAYM4_API WORD __stdcall PlayM4_GetVolume(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_GetPictureQuality(LONG nPort,BOOL *bHighQuality); +PLAYM4_API DWORD __stdcall PlayM4_GetSourceBufferRemain(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBuffer(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetSourceBufCallBack(LONG nPort,DWORD nThreShold,void (CALLBACK * SourceBufCallBack)(long nPort,DWORD nBufSize,DWORD dwUser,void*pResvered),DWORD dwUser,void *pReserved); +PLAYM4_API BOOL __stdcall PlayM4_ResetSourceBufFlag(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayBuf(LONG nPort,DWORD nNum); +PLAYM4_API DWORD __stdcall PlayM4_GetDisplayBuf(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_OneByOneBack(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetFileRefCallBack(LONG nPort, void (__stdcall *pFileRefDone)(DWORD nPort,DWORD nUser),DWORD nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetCurrentFrameNum(LONG nPort,DWORD nFrameNum); +PLAYM4_API BOOL __stdcall PlayM4_GetKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); +PLAYM4_API BOOL __stdcall PlayM4_GetNextKeyFramePos(LONG nPort,DWORD nValue, DWORD nType, PFRAME_POS pFramePos); +#if (WINVER >= 0x0400) +//Note: These funtion must be builded under win2000 or above with Microsoft Platform sdk. +// You can download the sdk from "http://www.microsoft.com/msdownload/platformsdk/sdkupdate/"; +PLAYM4_API BOOL __stdcall PlayM4_InitDDrawDevice(); +PLAYM4_API void __stdcall PlayM4_ReleaseDDrawDevice(); +PLAYM4_API DWORD __stdcall PlayM4_GetDDrawDeviceTotalNums(); +PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDevice(LONG nPort,DWORD nDeviceNum); +//PLAYM4_API BOOL __stdcall PlayM4_GetDDrawDeviceInfo(DWORD nDeviceNum,LPSTR lpDriverDescription,DWORD nDespLen,LPSTR lpDriverName ,DWORD nNameLen,HMONITOR *hhMonitor); +PLAYM4_API int __stdcall PlayM4_GetCapsEx(DWORD nDDrawDeviceNum); +#endif +PLAYM4_API BOOL __stdcall PlayM4_ThrowBFrameNum(LONG nPort,DWORD nNum); +//23 +////////////////ver 2.5 added/////////////////////////////////////// +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayType(LONG nPort,LONG nType); +PLAYM4_API long __stdcall PlayM4_GetDisplayType(LONG nPort); +//2 +////////////////ver 3.0 added/////////////////////////////////////// +PLAYM4_API BOOL __stdcall PlayM4_SetDecCBStream(LONG nPort,DWORD nStream); +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayRegion(LONG nPort,DWORD nRegionNum, RECT *pSrcRect, HWND hDestWnd, BOOL bEnable); +PLAYM4_API BOOL __stdcall PlayM4_RefreshPlayEx(LONG nPort,DWORD nRegionNum); +#if (WINVER >= 0x0400) +//Note: The funtion must be builded under win2000 or above with Microsoft Platform sdk. +// You can download the sdk from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/; +PLAYM4_API BOOL __stdcall PlayM4_SetDDrawDeviceEx(LONG nPort,DWORD nRegionNum,DWORD nDeviceNum); +#endif +//4 +/////////////////v3.2 added///////////////////////////////////////// + +PLAYM4_API BOOL __stdcall PlayM4_GetRefValue(LONG nPort,BYTE *pBuffer, DWORD *pSize); +PLAYM4_API BOOL __stdcall PlayM4_SetRefValue(LONG nPort,BYTE *pBuffer, DWORD nSize); +PLAYM4_API BOOL __stdcall PlayM4_OpenStreamEx(LONG nPort,PBYTE pFileHeadBuf,DWORD nSize,DWORD nBufPoolSize); +PLAYM4_API BOOL __stdcall PlayM4_CloseStreamEx(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_InputVideoData(LONG nPort,PBYTE pBuf,DWORD nSize); +PLAYM4_API BOOL __stdcall PlayM4_InputAudioData(LONG nPort,PBYTE pBuf,DWORD nSize); +PLAYM4_API BOOL __stdcall PlayM4_RegisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser); +PLAYM4_API BOOL __stdcall PlayM4_RigisterDrawFun(LONG nPort,void (CALLBACK* DrawFun)(long nPort,HDC hDc,LONG nUser),LONG nUser); +//8 +//////////////////v3.4///////////////////////////////////////////////////// +PLAYM4_API BOOL __stdcall PlayM4_SetTimerType(LONG nPort,DWORD nTimerType,DWORD nReserved); +PLAYM4_API BOOL __stdcall PlayM4_GetTimerType(LONG nPort,DWORD *pTimerType,DWORD *pReserved); +PLAYM4_API BOOL __stdcall PlayM4_ResetBuffer(LONG nPort,DWORD nBufType); +PLAYM4_API DWORD __stdcall PlayM4_GetBufferValue(LONG nPort,DWORD nBufType); + +//////////////////V3.6///////////////////////////////////////////////////////// +PLAYM4_API BOOL __stdcall PlayM4_AdjustWaveAudio(LONG nPort,LONG nCoefficient); +PLAYM4_API BOOL __stdcall PlayM4_SetVerifyCallBack(LONG nPort, DWORD nBeginTime, DWORD nEndTime, void (__stdcall * funVerify)(long nPort, FRAME_POS * pFilePos, DWORD bIsVideo, DWORD nUser), DWORD nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetAudioCallBack(LONG nPort, void (__stdcall * funAudio)(long nPort, char * pAudioBuf, long nSize, long nStamp, long nType, long nUser), long nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetEncTypeChangeCallBack(LONG nPort,void(CALLBACK *funEncChange)(long nPort,long nUser),long nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetColor(LONG nPort, DWORD nRegionNum, int nBrightness, int nContrast, int nSaturation, int nHue); +PLAYM4_API BOOL __stdcall PlayM4_GetColor(LONG nPort, DWORD nRegionNum, int *pBrightness, int *pContrast, int *pSaturation, int *pHue); +PLAYM4_API BOOL __stdcall PlayM4_SetEncChangeMsg(LONG nPort,HWND hWnd,UINT nMsg); +PLAYM4_API BOOL __stdcall PlayM4_GetOriginalFrameCallBack(LONG nPort, BOOL bIsChange,BOOL bNormalSpeed,long nStartFrameNum,long nStartStamp,long nFileHeader,void(CALLBACK *funGetOrignalFrame)(long nPort,FRAME_TYPE *frameType, long nUser),long nUser); +PLAYM4_API BOOL __stdcall PlayM4_GetFileSpecialAttr(LONG nPort, DWORD *pTimeStamp,DWORD *pFileNum ,DWORD *pReserved); +PLAYM4_API DWORD __stdcall PlayM4_GetSpecialData(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetCheckWatermarkCallBack(LONG nPort,void(CALLBACK* funCheckWatermark)(long nPort,WATERMARK_INFO* pWatermarkInfo,DWORD nUser),DWORD nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetImageSharpen(LONG nPort,DWORD nLevel); +PLAYM4_API BOOL __stdcall PlayM4_SetDecodeFrameType(LONG nPort,DWORD nFrameType); +PLAYM4_API BOOL __stdcall PlayM4_SetPlayMode(LONG nPort,BOOL bNormal); +PLAYM4_API BOOL __stdcall PlayM4_SetOverlayFlipMode(LONG nPort,BOOL bTrue); +PLAYM4_API BOOL __stdcall PlayM4_SetOverlayPriInfoFlag(LONG nPort, DWORD nIntelType, BOOL bTrue,const char *pFontPath); + +//PLAYM4_API DWORD __stdcall PlayM4_GetAbsFrameNum(LONG nPort); + +//////////////////V4.7.0.0////////////////////////////////////////////////////// +////convert yuv to jpeg +PLAYM4_API BOOL __stdcall PlayM4_ConvertToJpegFile(char * pBuf,long nSize,long nWidth,long nHeight,long nType,char *sFileName); +PLAYM4_API BOOL __stdcall PlayM4_SetJpegQuality(long nQuality); +//set deflash +PLAYM4_API BOOL __stdcall PlayM4_SetDeflash(LONG nPort,BOOL bDefalsh); +//PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackEx(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nReserved1,long nReserved2), char* pDest, long nDestSize); +//////////////////V4.8.0.0///////////////////////////////////////////////////////// +//check discontinuous frame number as error data? +PLAYM4_API BOOL __stdcall PlayM4_CheckDiscontinuousFrameNum(LONG nPort, BOOL bCheck); +//get bmp or jpeg +PLAYM4_API BOOL __stdcall PlayM4_GetBMP(LONG nPort,PBYTE pBitmap,DWORD nBufSize,DWORD* pBmpSize); +PLAYM4_API BOOL __stdcall PlayM4_GetJPEG(LONG nPort,PBYTE pJpeg,DWORD nBufSize,DWORD* pJpegSize); +//dec call back mend +PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackMend(LONG nPort,void (CALLBACK* DecCBFun)(long nPort,char * pBuf,long nSize,FRAME_INFO * pFrameInfo, long nUser,long nReserved2), long nUser); +PLAYM4_API BOOL __stdcall PlayM4_SetSecretKey(LONG nPort, LONG lKeyType, char *pSecretKey, LONG lKeyLen); + +// add by gb 2007-12-23 +PLAYM4_API BOOL __stdcall PlayM4_SetFileEndCallback(LONG nPort, void(CALLBACK*FileEndCallback)(long nPort, void *pUser), void *pUser); + +// add by gb 080131 version 4.9.0.1 +PLAYM4_API BOOL __stdcall PlayM4_GetPort(LONG* nPort); +PLAYM4_API BOOL __stdcall PlayM4_FreePort(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_SetDisplayCallBackEx(LONG nPort,void (CALLBACK* DisplayCBFun)(DISPLAY_INFO *pstDisplayInfo), long nUser); +PLAYM4_API BOOL __stdcall PlayM4_SkipErrorData(LONG nPort, BOOL bSkip); +PLAYM4_API BOOL __stdcall PlayM4_SetDecCallBackExMend(LONG nPort, void (CALLBACK* DecCBFun)(long nPort, char* pBuf, long nSize, FRAME_INFO* pFrameInfo, + long nUser, long nReserved2), char* pDest, long nDestSize, long nUser); +//reverse play add by chenjie 110609 +PLAYM4_API BOOL __stdcall PlayM4_ReversePlay(LONG nPort); +PLAYM4_API BOOL __stdcall PlayM4_GetSystemTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime); + +//PLAYM4_API BOOL __stdcall PlayM4_SetDecodeERC(long nPort, unsigned int nLevel); + +#ifndef PLAYM4_SESSION_INFO_TAG +#define PLAYM4_SESSION_INFO_TAG +//nProtocolType +#define PLAYM4_PROTOCOL_RTSP 1 +//nSessionInfoType +#define PLAYM4_SESSION_INFO_SDP 1 + +typedef struct _PLAYM4_SESSION_INFO_ //交互信息结构 +{ + int nSessionInfoType; //交互信息类型,比如SDP,比如海康私有信息头 + int nSessionInfoLen; //交互信息长度 + unsigned char* pSessionInfoData; //交互信息数据 + +} PLAYM4_SESSION_INFO; +#endif + +PLAYM4_API BOOL __stdcall PlayM4_OpenStreamAdvanced(LONG nPort, int nProtocolType, PLAYM4_SESSION_INFO* pstSessionInfo, DWORD nBufPoolSize); + +#define R_ANGLE_0 -1 //不旋转 +#define R_ANGLE_L90 0 //向左旋转90度 +#define R_ANGLE_R90 1 //向右旋转90度 +#define R_ANGLE_180 2 //旋转180度 + +PLAYM4_API BOOL __stdcall PlayM4_SetRotateAngle(LONG nPort, DWORD nRegionNum, DWORD dwType); + +#ifndef PLAYM4_ADDITION_INFO_TAG +#define PLAYM4_ADDITION_INFO_TAG +typedef struct _PLAYM4_ADDITION_INFO_ //交互信息结构 +{ + BYTE* pData; //附件数据 + DWORD dwDatalen; //附件数据长度 + DWORD dwDataType; //数据类型 + DWORD dwTimeStamp; //相对时间戳 +} PLAYM4_ADDITION_INFO; +#endif + +//dwGroupIndex 暂约定取值0~3,第一版本取消同步只能同个closestream处理 +PLAYM4_API BOOL __stdcall PlayM4_SetSycGroup(LONG nPort, DWORD dwGroupIndex); +//暂不实现此函数,同个组设置的起始时间不一致,以最小的时间作为播放起点,同一组可只设一路 +PLAYM4_API BOOL __stdcall PlayM4_SetSycStartTime(LONG nPort, PLAYM4_SYSTEM_TIME *pstSystemTime); + + +// 以下实现鱼眼相关的接口 +#ifndef FISH_EYE_TAG +#define FISH_EYE_TAG + +// 安装类型 +typedef enum tagFECPlaceType +{ + FEC_PLACE_WALL = 0x1, // 壁装方式 (法线水平) + FEC_PLACE_FLOOR = 0x2, // 地面安装 (法线向上) + FEC_PLACE_CEILING = 0x3, // 顶装方式 (法线向下) + +}FECPLACETYPE; + +typedef enum tagFECCorrectType +{ + FEC_CORRECT_PTZ = 0x100, // PTZ + FEC_CORRECT_180 = 0x200, // 180度矫正 (对应2P) + FEC_CORRECT_360 = 0x300, // 360全景矫正 (对应1P) + FEC_CORRECT_LAT = 0x400 //纬度展开 + +}FECCORRECTTYPE; + +typedef struct tagCycleParam +{ + float fRadiusLeft; // 圆的最左边X坐标 + float fRadiusRight; // 圆的最右边X坐标 + float fRadiusTop; // 圆的最上边Y坐标 + float fRadiusBottom; // 圆的最下边Y坐标 + +}CYCLEPARAM; + +typedef struct tagPTZParam +{ + float fPTZPositionX; // PTZ 显示的中心位置 X坐标 + float fPTZPositionY; // PTZ 显示的中心位置 Y坐标 + +}PTZPARAM; + + +// 错误码 +/********************************************* + + + ********************************************/ + + +// 更新标记变量定义 + + +#define FEC_UPDATE_RADIUS 0x1 +#define FEC_UPDATE_PTZZOOM 0x2 +#define FEC_UPDATE_WIDESCANOFFSET 0x4 +#define FEC_UPDATE_PTZPARAM 0x8 + + +typedef struct tagFECParam +{ + + + unsigned int nUpDateType; // 更新的类型 + + unsigned int nPlaceAndCorrect; // 安装方式和矫正方式,只能用于获取,SetParam的时候无效,该值表示安装方式和矫正方式的和 + + PTZPARAM stPTZParam; // PTZ 校正的参数 + + CYCLEPARAM stCycleParam; // 鱼眼图像圆心参数 + + float fZoom; // PTZ 显示的范围参数 + + float fWideScanOffset; // 180或者360度校正的偏移角度 + + int nResver[16]; // 保留字段 + +}FISHEYEPARAM; + +typedef void (__stdcall * FISHEYE_CallBack )( void* pUser , unsigned int nSubPort , unsigned int nCBType , void * hDC , unsigned int nWidth , unsigned int nHeight); + +#endif +// 启用鱼眼 +PLAYM4_API BOOL __stdcall PlayM4_FEC_Enable(LONG nPort); + +// 关闭鱼眼模块 +PLAYM4_API BOOL __stdcall PlayM4_FEC_Disable(LONG nPort); + +// 获取鱼眼矫正处理子端口 [1~31] +PLAYM4_API BOOL __stdcall PlayM4_FEC_GetPort(LONG nPort, unsigned int* nSubPort,FECPLACETYPE emPlaceType,FECCORRECTTYPE emCorrectType); + +// 删除鱼眼矫正处理子端口 +PLAYM4_API BOOL __stdcall PlayM4_FEC_DelPort(LONG nPort , unsigned int nSubPort); + +// 设置鱼眼矫正参数 +PLAYM4_API BOOL __stdcall PlayM4_FEC_SetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); + +// 获取鱼眼矫正参数 +PLAYM4_API BOOL __stdcall PlayM4_FEC_GetParam(LONG nPort , unsigned int nSubPort , FISHEYEPARAM * pPara); + +// 设置显示窗口,可以随时切换 +PLAYM4_API BOOL __stdcall PlayM4_FEC_SetWnd(LONG nPort , unsigned int nSubPort , void * hWnd); + +// 设置鱼眼窗口的绘图回调 +PLAYM4_API BOOL __stdcall PlayM4_FEC_SetCallBack(LONG nPort , unsigned int nSubPort , FISHEYE_CallBack cbFunc , void * pUser); + +//motionflow +PLAYM4_API BOOL __stdcall PlayM4_MotionFlow(LONG nPort, DWORD dwAdjustType); + + +//图像增强相关 +#ifndef PLAYM4_HIKVIE_TAG +#define PLAYM4_HIKVIE_TAG + +typedef struct _PLAYM4_VIE_DYNPARAM_ +{ + int moduFlag; //启用的算法处理模块,在PLAYM4_VIE_MODULES中定义 + //如 PLAYM4_VIE_MODU_ADJ | PLAYM4_VIE_MODU_EHAN + //模块启用后,必须设置相应的参数; + //PLAYM4_VIE_MODU_ADJ + int brightVal; //亮度调节值,[-255, 255] + int contrastVal; //对比度调节值,[-256, 255] + int colorVal; //饱和度调节值,[-256, 255] + //PLAYM4_VIE_MODU_EHAN + int toneScale; //滤波范围,[0, 100] + int toneGain; //对比度调节,全局对比度增益值,[-256, 255] + int toneOffset; //亮度调节,亮度平均值偏移,[-255, 255] + int toneColor; //颜色调节,颜色保真值,[-256, 255] + //PLAYM4_VIE_MODU_DEHAZE + int dehazeLevel; //去雾强度,[0, 255] + int dehazeTrans; //透射值,[0, 255] + int dehazeBright; //亮度补偿,[0, 255] + //PLAYM4_VIE_MODU_DENOISE + int denoiseLevel; //去噪强度,[0, 255] + //PLAYM4_VIE_MODU_SHARPEN + int usmAmount; //锐化强度,[0, 255] + int usmRadius; //锐化半径,[1, 15] + int usmThreshold; //锐化阈值,[0, 255] + //PLAYM4_VIE_MODU_DEBLOCK + int deblockLevel; //去块强度,[0, 100] + //PLAYM4_VIE_MODU_LENS + int lensWarp; //畸变量,[-256, 255] + int lensZoom; //缩放量,[-256, 255] + //PLAYM4_VIE_MODU_CRB + //无响应参数 +} PLAYM4_VIE_PARACONFIG; + +typedef enum _PLAYM4_VIE_MODULES +{ + PLAYM4_VIE_MODU_ADJ = 0x00000001, //图像基本调节 + PLAYM4_VIE_MODU_EHAN = 0x00000002, //局部增强模块 + PLAYM4_VIE_MODU_DEHAZE = 0x00000004, //去雾模块 + PLAYM4_VIE_MODU_DENOISE = 0x00000008, //去噪模块 + PLAYM4_VIE_MODU_SHARPEN = 0x00000010, //锐化模块 + PLAYM4_VIE_MODU_DEBLOCK = 0x00000020, //去块滤波模块 + PLAYM4_VIE_MODU_CRB = 0x00000040, //色彩平衡模块 + PLAYM4_VIE_MODU_LENS = 0x00000080, //镜头畸变矫正模块 +}PLAYM4_VIE_MODULES; +#endif + +//设置关闭/开启模块 +//dwModuFlag对应PLAYM4_VIE_MODULES宏,可组合 +//先设置模块开启,再设置模块参数;期间采用默认的参数; +//关闭模块后,上次设置的参数清空 +//其他接口调用,必须在该接口开启模块后;否则,返回错误 +PLAYM4_API BOOL __stdcall PlayM4_VIE_SetModuConfig(LONG lPort,int nModuFlag,BOOL bEnable); + +//设置图像增强区域,NULL全图;超过全图,采用全图;最小区域16*16像素 +//可支持设置区域,最多比较说4个,第一个版本可以只支持一个。多个区域要求不能重叠,有重叠就报错 +PLAYM4_API BOOL __stdcall PlayM4_VIE_SetRegion(LONG lPort,LONG lRegNum,RECT* pRect); + +//获取开启模块 +PLAYM4_API BOOL __stdcall PlayM4_VIE_GetModuConfig(LONG lPort,int* pdwModuFlag); + +//设置参数 +//未开启模块的参数设置被忽略 +PLAYM4_API BOOL __stdcall PlayM4_VIE_SetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig); + +//获取开启模块的参数 +PLAYM4_API BOOL __stdcall PlayM4_VIE_GetParaConfig(LONG lPort,PLAYM4_VIE_PARACONFIG* pParaConfig); + +//音视频同步接口 +PLAYM4_API BOOL __stdcall PlayM4_SyncToAudio(LONG nPort, BOOL bSyncToAudio); + +// 私有信息模块类型 +typedef enum _PLAYM4_PRIDATA_RENDER +{ + PLAYM4_RENDER_ANA_INTEL_DATA = 0x00000001, //智能分析 + PLAYM4_RENDER_MD = 0x00000002, //移动侦测 + PLAYM4_RENDER_ADD_POS = 0x00000004, //POS信息后叠加 + PLAYM4_RENDER_ADD_PIC = 0x00000008, //图片叠加 + PLAYM4_RENDER_FIRE_DETCET = 0x00000010, //热成像信息 + PLAYM4_RENDER_TEM = 0x00000020, //温度信息 + PLAYM4_RENDER_TRACK_TEM = 0x00000040, //轨迹信息 + PLAYM4_RENDER_THERMAL = 0x00000080 //废气检测和烟火屏蔽信息 +}PLAYM4_PRIDATA_RENDER; + +typedef enum _PLAYM4_THERMAL_FLAG +{ + PLAYM4_THERMAL_FIREMASK = 0x00000001, //烟火屏蔽 + PLAYM4_THERMAL_RULEGAS = 0x00000002, //规则废气检测 + PLAYM4_THERMAL_TARGETGAS = 0x00000004 //目标废气检测 +}PLAYM4_THERMAL_FLAG; + +typedef enum _PLAYM4_FIRE_ALARM{ + PLAYM4_FIRE_FRAME_DIS = 0x00000001, //火点框显示 + PLAYM4_FIRE_MAX_TEMP = 0x00000002, //最高温度 + PLAYM4_FIRE_MAX_TEMP_POSITION = 0x00000004, //最高温度位置显示 + PLAYM4_FIRE_DISTANCE = 0x00000008, //最高温度距离}PLAYM4_FIRE_ALARM +}PLAYM4_FIRE_ALARM; + +typedef enum _PLAYM4_TEM_FLAG{ + PLAYM4_TEM_REGION_BOX = 0x00000001, //框测温 + PLAYM4_TEM_REGION_LINE = 0x00000002, //线测温 + PLAYM4_TEM_REGION_POINT = 0x00000004, //点测温}PLAYM4_TEM_FLAG +}PLAYM4_TEM_FLAG; + +typedef enum _PLAYM4_TRACK_FLAG +{ + PLAYM4_TRACK_PEOPLE = 0x00000001, //人轨迹 + PLAYM4_TRACK_VEHICLE = 0x00000002, //车轨迹 +}PLAYM4_TRACK_FLAG; + +typedef struct TI_PTZ_INFO_ +{ + unsigned short dwDefVer; //结构体版本 + unsigned short dwLength; //PTZ_info长度,以8字节为单位 + DWORD dwP; //P(0~3600) + DWORD dwT; //T(0~3600) + DWORD dwZ; //Z(0~3600) + BYTE chFSMState; //跟随状态 + BYTE bClearFocusState; //聚焦清晰状态(0,1) + BYTE reserved[6]; //6个字节保留 +}PTZ_INFO; + + +// 智能信息开关 +PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateData(LONG nPort, int nIntelType, BOOL bTrue); + +PLAYM4_API BOOL __stdcall PlayM4_RenderPrivateDataEx(LONG nPort, int nIntelType, int nSubType, BOOL bTrue); + +// 加密码流回调,nType=0表示码流加密标记位发生变化就回调,nType=1表示码流有加密位发生回调 +PLAYM4_API BOOL __stdcall PlayM4_SetEncryptTypeCallBack(LONG nPort, DWORD nType, + void (CALLBACK* EncryptTypeCBFun)(long nPort, ENCRYPT_INFO* pEncryptInfo, long nUser, long nReserved2), long nUser); +//lType: 1 表示获取当前显示帧PTZ信息。以特定结构体形式存储在pInfo内,plLen返回长度信息 +PLAYM4_API BOOL __stdcall PlayM4_GetStreamAdditionalInfo(LONG nPort, LONG lType, BYTE* pInfo, LONG* plLen); + + +#endif //_PLAYM4_H_ diff --git a/lib/openssl/bin/libcrypto-1_1-x64.dll b/lib/openssl/bin/libcrypto-1_1-x64.dll new file mode 100644 index 0000000..ead466b Binary files /dev/null and b/lib/openssl/bin/libcrypto-1_1-x64.dll differ diff --git a/lib/openssl/bin/libssl-1_1-x64.dll b/lib/openssl/bin/libssl-1_1-x64.dll new file mode 100644 index 0000000..93eadc2 Binary files /dev/null and b/lib/openssl/bin/libssl-1_1-x64.dll differ diff --git a/lib/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/lib/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H new file mode 100644 index 0000000..ad0a5f5 --- /dev/null +++ b/lib/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H @@ -0,0 +1,22 @@ +/* + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This file is only used by HP C/C++ on VMS, and is included automatically + * after each header file from this directory + */ + +/* + * The C++ compiler doesn't understand these pragmas, even though it + * understands the corresponding command line qualifier. + */ +#ifndef __cplusplus +/* restore state. Must correspond to the save in __decc_include_prologue.h */ +# pragma names restore +#endif diff --git a/lib/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/lib/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H new file mode 100644 index 0000000..5f5513e --- /dev/null +++ b/lib/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H @@ -0,0 +1,26 @@ +/* + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * This file is only used by HP C/C++ on VMS, and is included automatically + * after each header file from this directory + */ + +/* + * The C++ compiler doesn't understand these pragmas, even though it + * understands the corresponding command line qualifier. + */ +#ifndef __cplusplus +/* save state */ +# pragma names save +/* have the compiler shorten symbols larger than 31 chars to 23 chars + * followed by a 8 hex char CRC + */ +# pragma names as_is,shortened +#endif diff --git a/lib/openssl/include/openssl/aes.h b/lib/openssl/include/openssl/aes.h new file mode 100644 index 0000000..245c552 --- /dev/null +++ b/lib/openssl/include/openssl/aes.h @@ -0,0 +1,92 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_AES_H +# define HEADER_AES_H + +# include + +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define AES_ENCRYPT 1 +# define AES_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ +# define AES_MAXNR 14 +# define AES_BLOCK_SIZE 16 + +/* This should be a hidden type, but EVP requires that the size be known */ +struct aes_key_st { +# ifdef AES_LONG + unsigned long rd_key[4 * (AES_MAXNR + 1)]; +# else + unsigned int rd_key[4 * (AES_MAXNR + 1)]; +# endif + int rounds; +}; +typedef struct aes_key_st AES_KEY; + +const char *AES_options(void); + +int AES_set_encrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); +int AES_set_decrypt_key(const unsigned char *userKey, const int bits, + AES_KEY *key); + +void AES_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); +void AES_decrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key); + +void AES_ecb_encrypt(const unsigned char *in, unsigned char *out, + const AES_KEY *key, const int enc); +void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +void AES_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num, const int enc); +void AES_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, int *num); +/* NB: the IV is _two_ blocks long */ +void AES_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + unsigned char *ivec, const int enc); +/* NB: the IV is _four_ blocks long */ +void AES_bi_ige_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const AES_KEY *key, + const AES_KEY *key2, const unsigned char *ivec, + const int enc); + +int AES_wrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); +int AES_unwrap_key(AES_KEY *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, unsigned int inlen); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/lib/openssl/include/openssl/applink.c b/lib/openssl/include/openssl/applink.c new file mode 100644 index 0000000..238dbff --- /dev/null +++ b/lib/openssl/include/openssl/applink.c @@ -0,0 +1,138 @@ +/* + * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define APPLINK_STDIN 1 +#define APPLINK_STDOUT 2 +#define APPLINK_STDERR 3 +#define APPLINK_FPRINTF 4 +#define APPLINK_FGETS 5 +#define APPLINK_FREAD 6 +#define APPLINK_FWRITE 7 +#define APPLINK_FSETMOD 8 +#define APPLINK_FEOF 9 +#define APPLINK_FCLOSE 10 /* should not be used */ + +#define APPLINK_FOPEN 11 /* solely for completeness */ +#define APPLINK_FSEEK 12 +#define APPLINK_FTELL 13 +#define APPLINK_FFLUSH 14 +#define APPLINK_FERROR 15 +#define APPLINK_CLEARERR 16 +#define APPLINK_FILENO 17 /* to be used with below */ + +#define APPLINK_OPEN 18 /* formally can't be used, as flags can vary */ +#define APPLINK_READ 19 +#define APPLINK_WRITE 20 +#define APPLINK_LSEEK 21 +#define APPLINK_CLOSE 22 +#define APPLINK_MAX 22 /* always same as last macro */ + +#ifndef APPMACROS_ONLY +# include +# include +# include + +static void *app_stdin(void) +{ + return stdin; +} + +static void *app_stdout(void) +{ + return stdout; +} + +static void *app_stderr(void) +{ + return stderr; +} + +static int app_feof(FILE *fp) +{ + return feof(fp); +} + +static int app_ferror(FILE *fp) +{ + return ferror(fp); +} + +static void app_clearerr(FILE *fp) +{ + clearerr(fp); +} + +static int app_fileno(FILE *fp) +{ + return _fileno(fp); +} + +static int app_fsetmod(FILE *fp, char mod) +{ + return _setmode(_fileno(fp), mod == 'b' ? _O_BINARY : _O_TEXT); +} + +#ifdef __cplusplus +extern "C" { +#endif + +__declspec(dllexport) +void ** +# if defined(__BORLANDC__) +/* + * __stdcall appears to be the only way to get the name + * decoration right with Borland C. Otherwise it works + * purely incidentally, as we pass no parameters. + */ +__stdcall +# else +__cdecl +# endif +OPENSSL_Applink(void) +{ + static int once = 1; + static void *OPENSSL_ApplinkTable[APPLINK_MAX + 1] = + { (void *)APPLINK_MAX }; + + if (once) { + OPENSSL_ApplinkTable[APPLINK_STDIN] = app_stdin; + OPENSSL_ApplinkTable[APPLINK_STDOUT] = app_stdout; + OPENSSL_ApplinkTable[APPLINK_STDERR] = app_stderr; + OPENSSL_ApplinkTable[APPLINK_FPRINTF] = fprintf; + OPENSSL_ApplinkTable[APPLINK_FGETS] = fgets; + OPENSSL_ApplinkTable[APPLINK_FREAD] = fread; + OPENSSL_ApplinkTable[APPLINK_FWRITE] = fwrite; + OPENSSL_ApplinkTable[APPLINK_FSETMOD] = app_fsetmod; + OPENSSL_ApplinkTable[APPLINK_FEOF] = app_feof; + OPENSSL_ApplinkTable[APPLINK_FCLOSE] = fclose; + + OPENSSL_ApplinkTable[APPLINK_FOPEN] = fopen; + OPENSSL_ApplinkTable[APPLINK_FSEEK] = fseek; + OPENSSL_ApplinkTable[APPLINK_FTELL] = ftell; + OPENSSL_ApplinkTable[APPLINK_FFLUSH] = fflush; + OPENSSL_ApplinkTable[APPLINK_FERROR] = app_ferror; + OPENSSL_ApplinkTable[APPLINK_CLEARERR] = app_clearerr; + OPENSSL_ApplinkTable[APPLINK_FILENO] = app_fileno; + + OPENSSL_ApplinkTable[APPLINK_OPEN] = _open; + OPENSSL_ApplinkTable[APPLINK_READ] = _read; + OPENSSL_ApplinkTable[APPLINK_WRITE] = _write; + OPENSSL_ApplinkTable[APPLINK_LSEEK] = _lseek; + OPENSSL_ApplinkTable[APPLINK_CLOSE] = _close; + + once = 0; + } + + return OPENSSL_ApplinkTable; +} + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/asn1.h b/lib/openssl/include/openssl/asn1.h new file mode 100644 index 0000000..9522eec --- /dev/null +++ b/lib/openssl/include/openssl/asn1.h @@ -0,0 +1,886 @@ +/* + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1_H +# define HEADER_ASN1_H + +# include +# include +# include +# include +# include +# include +# include + +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define V_ASN1_UNIVERSAL 0x00 +# define V_ASN1_APPLICATION 0x40 +# define V_ASN1_CONTEXT_SPECIFIC 0x80 +# define V_ASN1_PRIVATE 0xc0 + +# define V_ASN1_CONSTRUCTED 0x20 +# define V_ASN1_PRIMITIVE_TAG 0x1f +# define V_ASN1_PRIMATIVE_TAG /*compat*/ V_ASN1_PRIMITIVE_TAG + +# define V_ASN1_APP_CHOOSE -2/* let the recipient choose */ +# define V_ASN1_OTHER -3/* used in ASN1_TYPE */ +# define V_ASN1_ANY -4/* used in ASN1 template code */ + +# define V_ASN1_UNDEF -1 +/* ASN.1 tag values */ +# define V_ASN1_EOC 0 +# define V_ASN1_BOOLEAN 1 /**/ +# define V_ASN1_INTEGER 2 +# define V_ASN1_BIT_STRING 3 +# define V_ASN1_OCTET_STRING 4 +# define V_ASN1_NULL 5 +# define V_ASN1_OBJECT 6 +# define V_ASN1_OBJECT_DESCRIPTOR 7 +# define V_ASN1_EXTERNAL 8 +# define V_ASN1_REAL 9 +# define V_ASN1_ENUMERATED 10 +# define V_ASN1_UTF8STRING 12 +# define V_ASN1_SEQUENCE 16 +# define V_ASN1_SET 17 +# define V_ASN1_NUMERICSTRING 18 /**/ +# define V_ASN1_PRINTABLESTRING 19 +# define V_ASN1_T61STRING 20 +# define V_ASN1_TELETEXSTRING 20/* alias */ +# define V_ASN1_VIDEOTEXSTRING 21 /**/ +# define V_ASN1_IA5STRING 22 +# define V_ASN1_UTCTIME 23 +# define V_ASN1_GENERALIZEDTIME 24 /**/ +# define V_ASN1_GRAPHICSTRING 25 /**/ +# define V_ASN1_ISO64STRING 26 /**/ +# define V_ASN1_VISIBLESTRING 26/* alias */ +# define V_ASN1_GENERALSTRING 27 /**/ +# define V_ASN1_UNIVERSALSTRING 28 /**/ +# define V_ASN1_BMPSTRING 30 + +/* + * NB the constants below are used internally by ASN1_INTEGER + * and ASN1_ENUMERATED to indicate the sign. They are *not* on + * the wire tag values. + */ + +# define V_ASN1_NEG 0x100 +# define V_ASN1_NEG_INTEGER (2 | V_ASN1_NEG) +# define V_ASN1_NEG_ENUMERATED (10 | V_ASN1_NEG) + +/* For use with d2i_ASN1_type_bytes() */ +# define B_ASN1_NUMERICSTRING 0x0001 +# define B_ASN1_PRINTABLESTRING 0x0002 +# define B_ASN1_T61STRING 0x0004 +# define B_ASN1_TELETEXSTRING 0x0004 +# define B_ASN1_VIDEOTEXSTRING 0x0008 +# define B_ASN1_IA5STRING 0x0010 +# define B_ASN1_GRAPHICSTRING 0x0020 +# define B_ASN1_ISO64STRING 0x0040 +# define B_ASN1_VISIBLESTRING 0x0040 +# define B_ASN1_GENERALSTRING 0x0080 +# define B_ASN1_UNIVERSALSTRING 0x0100 +# define B_ASN1_OCTET_STRING 0x0200 +# define B_ASN1_BIT_STRING 0x0400 +# define B_ASN1_BMPSTRING 0x0800 +# define B_ASN1_UNKNOWN 0x1000 +# define B_ASN1_UTF8STRING 0x2000 +# define B_ASN1_UTCTIME 0x4000 +# define B_ASN1_GENERALIZEDTIME 0x8000 +# define B_ASN1_SEQUENCE 0x10000 +/* For use with ASN1_mbstring_copy() */ +# define MBSTRING_FLAG 0x1000 +# define MBSTRING_UTF8 (MBSTRING_FLAG) +# define MBSTRING_ASC (MBSTRING_FLAG|1) +# define MBSTRING_BMP (MBSTRING_FLAG|2) +# define MBSTRING_UNIV (MBSTRING_FLAG|4) +# define SMIME_OLDMIME 0x400 +# define SMIME_CRLFEOL 0x800 +# define SMIME_STREAM 0x1000 + struct X509_algor_st; +DEFINE_STACK_OF(X509_ALGOR) + +# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +/* + * This indicates that the ASN1_STRING is not a real value but just a place + * holder for the location where indefinite length constructed data should be + * inserted in the memory buffer + */ +# define ASN1_STRING_FLAG_NDEF 0x010 + +/* + * This flag is used by the CMS code to indicate that a string is not + * complete and is a place holder for content when it had all been accessed. + * The flag will be reset when content has been written to it. + */ + +# define ASN1_STRING_FLAG_CONT 0x020 +/* + * This flag is used by ASN1 code to indicate an ASN1_STRING is an MSTRING + * type. + */ +# define ASN1_STRING_FLAG_MSTRING 0x040 +/* String is embedded and only content should be freed */ +# define ASN1_STRING_FLAG_EMBED 0x080 +/* String should be parsed in RFC 5280's time format */ +# define ASN1_STRING_FLAG_X509_TIME 0x100 +/* This is the base type that holds just about everything :-) */ +struct asn1_string_st { + int length; + int type; + unsigned char *data; + /* + * The value of the following field depends on the type being held. It + * is mostly being used for BIT_STRING so if the input data has a + * non-zero 'unused bits' value, it will be handled correctly + */ + long flags; +}; + +/* + * ASN1_ENCODING structure: this is used to save the received encoding of an + * ASN1 type. This is useful to get round problems with invalid encodings + * which can break signatures. + */ + +typedef struct ASN1_ENCODING_st { + unsigned char *enc; /* DER encoding */ + long len; /* Length of encoding */ + int modified; /* set to 1 if 'enc' is invalid */ +} ASN1_ENCODING; + +/* Used with ASN1 LONG type: if a long is set to this it is omitted */ +# define ASN1_LONG_UNDEF 0x7fffffffL + +# define STABLE_FLAGS_MALLOC 0x01 +/* + * A zero passed to ASN1_STRING_TABLE_new_add for the flags is interpreted + * as "don't change" and STABLE_FLAGS_MALLOC is always set. By setting + * STABLE_FLAGS_MALLOC only we can clear the existing value. Use the alias + * STABLE_FLAGS_CLEAR to reflect this. + */ +# define STABLE_FLAGS_CLEAR STABLE_FLAGS_MALLOC +# define STABLE_NO_MASK 0x02 +# define DIRSTRING_TYPE \ + (B_ASN1_PRINTABLESTRING|B_ASN1_T61STRING|B_ASN1_BMPSTRING|B_ASN1_UTF8STRING) +# define PKCS9STRING_TYPE (DIRSTRING_TYPE|B_ASN1_IA5STRING) + +typedef struct asn1_string_table_st { + int nid; + long minsize; + long maxsize; + unsigned long mask; + unsigned long flags; +} ASN1_STRING_TABLE; + +DEFINE_STACK_OF(ASN1_STRING_TABLE) + +/* size limits: this stuff is taken straight from RFC2459 */ + +# define ub_name 32768 +# define ub_common_name 64 +# define ub_locality_name 128 +# define ub_state_name 128 +# define ub_organization_name 64 +# define ub_organization_unit_name 64 +# define ub_title 64 +# define ub_email_address 128 + +/* + * Declarations for template structures: for full definitions see asn1t.h + */ +typedef struct ASN1_TEMPLATE_st ASN1_TEMPLATE; +typedef struct ASN1_TLC_st ASN1_TLC; +/* This is just an opaque pointer */ +typedef struct ASN1_VALUE_st ASN1_VALUE; + +/* Declare ASN1 functions: the implement macro in in asn1t.h */ + +# define DECLARE_ASN1_FUNCTIONS(type) DECLARE_ASN1_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS(type) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, type) + +# define DECLARE_ASN1_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, name, name) + +# define DECLARE_ASN1_FUNCTIONS_fname(type, itname, name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS(type, itname, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(itname) + +# define DECLARE_ASN1_ENCODE_FUNCTIONS_const(type, name) \ + type *d2i_##name(type **a, const unsigned char **in, long len); \ + int i2d_##name(const type *a, unsigned char **out); \ + DECLARE_ASN1_ITEM(name) + +# define DECLARE_ASN1_NDEF_FUNCTION(name) \ + int i2d_##name##_NDEF(name *a, unsigned char **out); + +# define DECLARE_ASN1_FUNCTIONS_const(name) \ + DECLARE_ASN1_ALLOC_FUNCTIONS(name) \ + DECLARE_ASN1_ENCODE_FUNCTIONS_const(name, name) + +# define DECLARE_ASN1_ALLOC_FUNCTIONS_name(type, name) \ + type *name##_new(void); \ + void name##_free(type *a); + +# define DECLARE_ASN1_PRINT_FUNCTION(stname) \ + DECLARE_ASN1_PRINT_FUNCTION_fname(stname, stname) + +# define DECLARE_ASN1_PRINT_FUNCTION_fname(stname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx); + +# define D2I_OF(type) type *(*)(type **,const unsigned char **,long) +# define I2D_OF(type) int (*)(type *,unsigned char **) +# define I2D_OF_const(type) int (*)(const type *,unsigned char **) + +# define CHECKED_D2I_OF(type, d2i) \ + ((d2i_of_void*) (1 ? d2i : ((D2I_OF(type))0))) +# define CHECKED_I2D_OF(type, i2d) \ + ((i2d_of_void*) (1 ? i2d : ((I2D_OF(type))0))) +# define CHECKED_NEW_OF(type, xnew) \ + ((void *(*)(void)) (1 ? xnew : ((type *(*)(void))0))) +# define CHECKED_PTR_OF(type, p) \ + ((void*) (1 ? p : (type*)0)) +# define CHECKED_PPTR_OF(type, p) \ + ((void**) (1 ? p : (type**)0)) + +# define TYPEDEF_D2I_OF(type) typedef type *d2i_of_##type(type **,const unsigned char **,long) +# define TYPEDEF_I2D_OF(type) typedef int i2d_of_##type(type *,unsigned char **) +# define TYPEDEF_D2I2D_OF(type) TYPEDEF_D2I_OF(type); TYPEDEF_I2D_OF(type) + +TYPEDEF_D2I2D_OF(void); + +/*- + * The following macros and typedefs allow an ASN1_ITEM + * to be embedded in a structure and referenced. Since + * the ASN1_ITEM pointers need to be globally accessible + * (possibly from shared libraries) they may exist in + * different forms. On platforms that support it the + * ASN1_ITEM structure itself will be globally exported. + * Other platforms will export a function that returns + * an ASN1_ITEM pointer. + * + * To handle both cases transparently the macros below + * should be used instead of hard coding an ASN1_ITEM + * pointer in a structure. + * + * The structure will look like this: + * + * typedef struct SOMETHING_st { + * ... + * ASN1_ITEM_EXP *iptr; + * ... + * } SOMETHING; + * + * It would be initialised as e.g.: + * + * SOMETHING somevar = {...,ASN1_ITEM_ref(X509),...}; + * + * and the actual pointer extracted with: + * + * const ASN1_ITEM *it = ASN1_ITEM_ptr(somevar.iptr); + * + * Finally an ASN1_ITEM pointer can be extracted from an + * appropriate reference with: ASN1_ITEM_rptr(X509). This + * would be used when a function takes an ASN1_ITEM * argument. + * + */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM ASN1_ITEM_EXP; + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (&(iptr##_it)) + +# define ASN1_ITEM_rptr(ref) (&(ref##_it)) + +# define DECLARE_ASN1_ITEM(name) \ + OPENSSL_EXTERN const ASN1_ITEM name##_it; + +# else + +/* + * Platforms that can't easily handle shared global variables are declared as + * functions returning ASN1_ITEM pointers. + */ + +/* ASN1_ITEM pointer exported type */ +typedef const ASN1_ITEM *ASN1_ITEM_EXP (void); + +/* Macro to obtain ASN1_ITEM pointer from exported type */ +# define ASN1_ITEM_ptr(iptr) (iptr()) + +/* Macro to include ASN1_ITEM pointer from base type */ +# define ASN1_ITEM_ref(iptr) (iptr##_it) + +# define ASN1_ITEM_rptr(ref) (ref##_it()) + +# define DECLARE_ASN1_ITEM(name) \ + const ASN1_ITEM * name##_it(void); + +# endif + +/* Parameters used by ASN1_STRING_print_ex() */ + +/* + * These determine which characters to escape: RFC2253 special characters, + * control characters and MSB set characters + */ + +# define ASN1_STRFLGS_ESC_2253 1 +# define ASN1_STRFLGS_ESC_CTRL 2 +# define ASN1_STRFLGS_ESC_MSB 4 + +/* + * This flag determines how we do escaping: normally RC2253 backslash only, + * set this to use backslash and quote. + */ + +# define ASN1_STRFLGS_ESC_QUOTE 8 + +/* These three flags are internal use only. */ + +/* Character is a valid PrintableString character */ +# define CHARTYPE_PRINTABLESTRING 0x10 +/* Character needs escaping if it is the first character */ +# define CHARTYPE_FIRST_ESC_2253 0x20 +/* Character needs escaping if it is the last character */ +# define CHARTYPE_LAST_ESC_2253 0x40 + +/* + * NB the internal flags are safely reused below by flags handled at the top + * level. + */ + +/* + * If this is set we convert all character strings to UTF8 first + */ + +# define ASN1_STRFLGS_UTF8_CONVERT 0x10 + +/* + * If this is set we don't attempt to interpret content: just assume all + * strings are 1 byte per character. This will produce some pretty odd + * looking output! + */ + +# define ASN1_STRFLGS_IGNORE_TYPE 0x20 + +/* If this is set we include the string type in the output */ +# define ASN1_STRFLGS_SHOW_TYPE 0x40 + +/* + * This determines which strings to display and which to 'dump' (hex dump of + * content octets or DER encoding). We can only dump non character strings or + * everything. If we don't dump 'unknown' they are interpreted as character + * strings with 1 octet per character and are subject to the usual escaping + * options. + */ + +# define ASN1_STRFLGS_DUMP_ALL 0x80 +# define ASN1_STRFLGS_DUMP_UNKNOWN 0x100 + +/* + * These determine what 'dumping' does, we can dump the content octets or the + * DER encoding: both use the RFC2253 #XXXXX notation. + */ + +# define ASN1_STRFLGS_DUMP_DER 0x200 + +/* + * This flag specifies that RC2254 escaping shall be performed. + */ +#define ASN1_STRFLGS_ESC_2254 0x400 + +/* + * All the string flags consistent with RFC2253, escaping control characters + * isn't essential in RFC2253 but it is advisable anyway. + */ + +# define ASN1_STRFLGS_RFC2253 (ASN1_STRFLGS_ESC_2253 | \ + ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + ASN1_STRFLGS_UTF8_CONVERT | \ + ASN1_STRFLGS_DUMP_UNKNOWN | \ + ASN1_STRFLGS_DUMP_DER) + +DEFINE_STACK_OF(ASN1_INTEGER) + +DEFINE_STACK_OF(ASN1_GENERALSTRING) + +DEFINE_STACK_OF(ASN1_UTF8STRING) + +typedef struct asn1_type_st { + int type; + union { + char *ptr; + ASN1_BOOLEAN boolean; + ASN1_STRING *asn1_string; + ASN1_OBJECT *object; + ASN1_INTEGER *integer; + ASN1_ENUMERATED *enumerated; + ASN1_BIT_STRING *bit_string; + ASN1_OCTET_STRING *octet_string; + ASN1_PRINTABLESTRING *printablestring; + ASN1_T61STRING *t61string; + ASN1_IA5STRING *ia5string; + ASN1_GENERALSTRING *generalstring; + ASN1_BMPSTRING *bmpstring; + ASN1_UNIVERSALSTRING *universalstring; + ASN1_UTCTIME *utctime; + ASN1_GENERALIZEDTIME *generalizedtime; + ASN1_VISIBLESTRING *visiblestring; + ASN1_UTF8STRING *utf8string; + /* + * set and sequence are left complete and still contain the set or + * sequence bytes + */ + ASN1_STRING *set; + ASN1_STRING *sequence; + ASN1_VALUE *asn1_value; + } value; +} ASN1_TYPE; + +DEFINE_STACK_OF(ASN1_TYPE) + +typedef STACK_OF(ASN1_TYPE) ASN1_SEQUENCE_ANY; + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SEQUENCE_ANY) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(ASN1_SEQUENCE_ANY, ASN1_SET_ANY) + +/* This is used to contain a list of bit names */ +typedef struct BIT_STRING_BITNAME_st { + int bitnum; + const char *lname; + const char *sname; +} BIT_STRING_BITNAME; + +# define B_ASN1_TIME \ + B_ASN1_UTCTIME | \ + B_ASN1_GENERALIZEDTIME + +# define B_ASN1_PRINTABLE \ + B_ASN1_NUMERICSTRING| \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_T61STRING| \ + B_ASN1_IA5STRING| \ + B_ASN1_BIT_STRING| \ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING|\ + B_ASN1_SEQUENCE|\ + B_ASN1_UNKNOWN + +# define B_ASN1_DIRECTORYSTRING \ + B_ASN1_PRINTABLESTRING| \ + B_ASN1_TELETEXSTRING|\ + B_ASN1_BMPSTRING|\ + B_ASN1_UNIVERSALSTRING|\ + B_ASN1_UTF8STRING + +# define B_ASN1_DISPLAYTEXT \ + B_ASN1_IA5STRING| \ + B_ASN1_VISIBLESTRING| \ + B_ASN1_BMPSTRING|\ + B_ASN1_UTF8STRING + +DECLARE_ASN1_FUNCTIONS_fname(ASN1_TYPE, ASN1_ANY, ASN1_TYPE) + +int ASN1_TYPE_get(const ASN1_TYPE *a); +void ASN1_TYPE_set(ASN1_TYPE *a, int type, void *value); +int ASN1_TYPE_set1(ASN1_TYPE *a, int type, const void *value); +int ASN1_TYPE_cmp(const ASN1_TYPE *a, const ASN1_TYPE *b); + +ASN1_TYPE *ASN1_TYPE_pack_sequence(const ASN1_ITEM *it, void *s, ASN1_TYPE **t); +void *ASN1_TYPE_unpack_sequence(const ASN1_ITEM *it, const ASN1_TYPE *t); + +ASN1_OBJECT *ASN1_OBJECT_new(void); +void ASN1_OBJECT_free(ASN1_OBJECT *a); +int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp); +ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, + long length); + +DECLARE_ASN1_ITEM(ASN1_OBJECT) + +DEFINE_STACK_OF(ASN1_OBJECT) + +ASN1_STRING *ASN1_STRING_new(void); +void ASN1_STRING_free(ASN1_STRING *a); +void ASN1_STRING_clear_free(ASN1_STRING *a); +int ASN1_STRING_copy(ASN1_STRING *dst, const ASN1_STRING *str); +ASN1_STRING *ASN1_STRING_dup(const ASN1_STRING *a); +ASN1_STRING *ASN1_STRING_type_new(int type); +int ASN1_STRING_cmp(const ASN1_STRING *a, const ASN1_STRING *b); + /* + * Since this is used to store all sorts of things, via macros, for now, + * make its data void * + */ +int ASN1_STRING_set(ASN1_STRING *str, const void *data, int len); +void ASN1_STRING_set0(ASN1_STRING *str, void *data, int len); +int ASN1_STRING_length(const ASN1_STRING *x); +void ASN1_STRING_length_set(ASN1_STRING *x, int n); +int ASN1_STRING_type(const ASN1_STRING *x); +DEPRECATEDIN_1_1_0(unsigned char *ASN1_STRING_data(ASN1_STRING *x)) +const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *x); + +DECLARE_ASN1_FUNCTIONS(ASN1_BIT_STRING) +int ASN1_BIT_STRING_set(ASN1_BIT_STRING *a, unsigned char *d, int length); +int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value); +int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n); +int ASN1_BIT_STRING_check(const ASN1_BIT_STRING *a, + const unsigned char *flags, int flags_len); + +int ASN1_BIT_STRING_name_print(BIO *out, ASN1_BIT_STRING *bs, + BIT_STRING_BITNAME *tbl, int indent); +int ASN1_BIT_STRING_num_asc(const char *name, BIT_STRING_BITNAME *tbl); +int ASN1_BIT_STRING_set_asc(ASN1_BIT_STRING *bs, const char *name, int value, + BIT_STRING_BITNAME *tbl); + +DECLARE_ASN1_FUNCTIONS(ASN1_INTEGER) +ASN1_INTEGER *d2i_ASN1_UINTEGER(ASN1_INTEGER **a, const unsigned char **pp, + long length); +ASN1_INTEGER *ASN1_INTEGER_dup(const ASN1_INTEGER *x); +int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); + +DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED) + +int ASN1_UTCTIME_check(const ASN1_UTCTIME *a); +ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t); +ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str); +int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t); + +int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s, + time_t t); +ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s, + time_t t, int offset_day, + long offset_sec); +int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str); + +int ASN1_TIME_diff(int *pday, int *psec, + const ASN1_TIME *from, const ASN1_TIME *to); + +DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING) +ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a); +int ASN1_OCTET_STRING_cmp(const ASN1_OCTET_STRING *a, + const ASN1_OCTET_STRING *b); +int ASN1_OCTET_STRING_set(ASN1_OCTET_STRING *str, const unsigned char *data, + int len); + +DECLARE_ASN1_FUNCTIONS(ASN1_VISIBLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UNIVERSALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTF8STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_NULL) +DECLARE_ASN1_FUNCTIONS(ASN1_BMPSTRING) + +int UTF8_getc(const unsigned char *str, int len, unsigned long *val); +int UTF8_putc(unsigned char *str, int len, unsigned long value); + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, ASN1_PRINTABLE) + +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DIRECTORYSTRING) +DECLARE_ASN1_FUNCTIONS_name(ASN1_STRING, DISPLAYTEXT) +DECLARE_ASN1_FUNCTIONS(ASN1_PRINTABLESTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_T61STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_IA5STRING) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALSTRING) +DECLARE_ASN1_FUNCTIONS(ASN1_UTCTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_GENERALIZEDTIME) +DECLARE_ASN1_FUNCTIONS(ASN1_TIME) + +DECLARE_ASN1_ITEM(ASN1_OCTET_STRING_NDEF) + +ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t); +ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t, + int offset_day, long offset_sec); +int ASN1_TIME_check(const ASN1_TIME *t); +ASN1_GENERALIZEDTIME *ASN1_TIME_to_generalizedtime(const ASN1_TIME *t, + ASN1_GENERALIZEDTIME **out); +int ASN1_TIME_set_string(ASN1_TIME *s, const char *str); +int ASN1_TIME_set_string_X509(ASN1_TIME *s, const char *str); +int ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); +int ASN1_TIME_normalize(ASN1_TIME *s); +int ASN1_TIME_cmp_time_t(const ASN1_TIME *s, time_t t); +int ASN1_TIME_compare(const ASN1_TIME *a, const ASN1_TIME *b); + +int i2a_ASN1_INTEGER(BIO *bp, const ASN1_INTEGER *a); +int a2i_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *bs, char *buf, int size); +int i2a_ASN1_ENUMERATED(BIO *bp, const ASN1_ENUMERATED *a); +int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size); +int i2a_ASN1_OBJECT(BIO *bp, const ASN1_OBJECT *a); +int a2i_ASN1_STRING(BIO *bp, ASN1_STRING *bs, char *buf, int size); +int i2a_ASN1_STRING(BIO *bp, const ASN1_STRING *a, int type); +int i2t_ASN1_OBJECT(char *buf, int buf_len, const ASN1_OBJECT *a); + +int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num); +ASN1_OBJECT *ASN1_OBJECT_create(int nid, unsigned char *data, int len, + const char *sn, const char *ln); + +int ASN1_INTEGER_get_int64(int64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_int64(ASN1_INTEGER *a, int64_t r); +int ASN1_INTEGER_get_uint64(uint64_t *pr, const ASN1_INTEGER *a); +int ASN1_INTEGER_set_uint64(ASN1_INTEGER *a, uint64_t r); + +int ASN1_INTEGER_set(ASN1_INTEGER *a, long v); +long ASN1_INTEGER_get(const ASN1_INTEGER *a); +ASN1_INTEGER *BN_to_ASN1_INTEGER(const BIGNUM *bn, ASN1_INTEGER *ai); +BIGNUM *ASN1_INTEGER_to_BN(const ASN1_INTEGER *ai, BIGNUM *bn); + +int ASN1_ENUMERATED_get_int64(int64_t *pr, const ASN1_ENUMERATED *a); +int ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *a, int64_t r); + + +int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v); +long ASN1_ENUMERATED_get(const ASN1_ENUMERATED *a); +ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(const BIGNUM *bn, ASN1_ENUMERATED *ai); +BIGNUM *ASN1_ENUMERATED_to_BN(const ASN1_ENUMERATED *ai, BIGNUM *bn); + +/* General */ +/* given a string, return the correct type, max is the maximum length */ +int ASN1_PRINTABLE_type(const unsigned char *s, int max); + +unsigned long ASN1_tag2bit(int tag); + +/* SPECIALS */ +int ASN1_get_object(const unsigned char **pp, long *plength, int *ptag, + int *pclass, long omax); +int ASN1_check_infinite_end(unsigned char **p, long len); +int ASN1_const_check_infinite_end(const unsigned char **p, long len); +void ASN1_put_object(unsigned char **pp, int constructed, int length, + int tag, int xclass); +int ASN1_put_eoc(unsigned char **pp); +int ASN1_object_size(int constructed, int length, int tag); + +/* Used to implement other functions */ +void *ASN1_dup(i2d_of_void *i2d, d2i_of_void *d2i, void *x); + +# define ASN1_dup_of(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_dup_of_const(type,i2d,d2i,x) \ + ((type*)ASN1_dup(CHECKED_I2D_OF(const type, i2d), \ + CHECKED_D2I_OF(type, d2i), \ + CHECKED_PTR_OF(const type, x))) + +void *ASN1_item_dup(const ASN1_ITEM *it, void *x); + +/* ASN1 alloc/free macros for when a type is only used internally */ + +# define M_ASN1_new_of(type) (type *)ASN1_item_new(ASN1_ITEM_rptr(type)) +# define M_ASN1_free_of(x, type) \ + ASN1_item_free(CHECKED_PTR_OF(type, x), ASN1_ITEM_rptr(type)) + +# ifndef OPENSSL_NO_STDIO +void *ASN1_d2i_fp(void *(*xnew) (void), d2i_of_void *d2i, FILE *in, void **x); + +# define ASN1_d2i_fp_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_fp(CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_fp(const ASN1_ITEM *it, FILE *in, void *x); +int ASN1_i2d_fp(i2d_of_void *i2d, FILE *out, void *x); + +# define ASN1_i2d_fp_of(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_fp_of_const(type,i2d,out,x) \ + (ASN1_i2d_fp(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_fp(const ASN1_ITEM *it, FILE *out, void *x); +int ASN1_STRING_print_ex_fp(FILE *fp, const ASN1_STRING *str, unsigned long flags); +# endif + +int ASN1_STRING_to_UTF8(unsigned char **out, const ASN1_STRING *in); + +void *ASN1_d2i_bio(void *(*xnew) (void), d2i_of_void *d2i, BIO *in, void **x); + +# define ASN1_d2i_bio_of(type,xnew,d2i,in,x) \ + ((type*)ASN1_d2i_bio( CHECKED_NEW_OF(type, xnew), \ + CHECKED_D2I_OF(type, d2i), \ + in, \ + CHECKED_PPTR_OF(type, x))) + +void *ASN1_item_d2i_bio(const ASN1_ITEM *it, BIO *in, void *x); +int ASN1_i2d_bio(i2d_of_void *i2d, BIO *out, unsigned char *x); + +# define ASN1_i2d_bio_of(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(type, i2d), \ + out, \ + CHECKED_PTR_OF(type, x))) + +# define ASN1_i2d_bio_of_const(type,i2d,out,x) \ + (ASN1_i2d_bio(CHECKED_I2D_OF(const type, i2d), \ + out, \ + CHECKED_PTR_OF(const type, x))) + +int ASN1_item_i2d_bio(const ASN1_ITEM *it, BIO *out, void *x); +int ASN1_UTCTIME_print(BIO *fp, const ASN1_UTCTIME *a); +int ASN1_GENERALIZEDTIME_print(BIO *fp, const ASN1_GENERALIZEDTIME *a); +int ASN1_TIME_print(BIO *fp, const ASN1_TIME *a); +int ASN1_STRING_print(BIO *bp, const ASN1_STRING *v); +int ASN1_STRING_print_ex(BIO *out, const ASN1_STRING *str, unsigned long flags); +int ASN1_buf_print(BIO *bp, const unsigned char *buf, size_t buflen, int off); +int ASN1_bn_print(BIO *bp, const char *number, const BIGNUM *num, + unsigned char *buf, int off); +int ASN1_parse(BIO *bp, const unsigned char *pp, long len, int indent); +int ASN1_parse_dump(BIO *bp, const unsigned char *pp, long len, int indent, + int dump); +const char *ASN1_tag2str(int tag); + +/* Used to load and write Netscape format cert */ + +int ASN1_UNIVERSALSTRING_to_string(ASN1_UNIVERSALSTRING *s); + +int ASN1_TYPE_set_octetstring(ASN1_TYPE *a, unsigned char *data, int len); +int ASN1_TYPE_get_octetstring(const ASN1_TYPE *a, unsigned char *data, int max_len); +int ASN1_TYPE_set_int_octetstring(ASN1_TYPE *a, long num, + unsigned char *data, int len); +int ASN1_TYPE_get_int_octetstring(const ASN1_TYPE *a, long *num, + unsigned char *data, int max_len); + +void *ASN1_item_unpack(const ASN1_STRING *oct, const ASN1_ITEM *it); + +ASN1_STRING *ASN1_item_pack(void *obj, const ASN1_ITEM *it, + ASN1_OCTET_STRING **oct); + +void ASN1_STRING_set_default_mask(unsigned long mask); +int ASN1_STRING_set_default_mask_asc(const char *p); +unsigned long ASN1_STRING_get_default_mask(void); +int ASN1_mbstring_copy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask); +int ASN1_mbstring_ncopy(ASN1_STRING **out, const unsigned char *in, int len, + int inform, unsigned long mask, + long minsize, long maxsize); + +ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, + const unsigned char *in, int inlen, + int inform, int nid); +ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid); +int ASN1_STRING_TABLE_add(int, long, long, unsigned long, unsigned long); +void ASN1_STRING_TABLE_cleanup(void); + +/* ASN1 template functions */ + +/* Old API compatible functions */ +ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it); +void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it); +ASN1_VALUE *ASN1_item_d2i(ASN1_VALUE **val, const unsigned char **in, + long len, const ASN1_ITEM *it); +int ASN1_item_i2d(ASN1_VALUE *val, unsigned char **out, const ASN1_ITEM *it); +int ASN1_item_ndef_i2d(ASN1_VALUE *val, unsigned char **out, + const ASN1_ITEM *it); + +void ASN1_add_oid_module(void); +void ASN1_add_stable_module(void); + +ASN1_TYPE *ASN1_generate_nconf(const char *str, CONF *nconf); +ASN1_TYPE *ASN1_generate_v3(const char *str, X509V3_CTX *cnf); +int ASN1_str2mask(const char *str, unsigned long *pmask); + +/* ASN1 Print flags */ + +/* Indicate missing OPTIONAL fields */ +# define ASN1_PCTX_FLAGS_SHOW_ABSENT 0x001 +/* Mark start and end of SEQUENCE */ +# define ASN1_PCTX_FLAGS_SHOW_SEQUENCE 0x002 +/* Mark start and end of SEQUENCE/SET OF */ +# define ASN1_PCTX_FLAGS_SHOW_SSOF 0x004 +/* Show the ASN1 type of primitives */ +# define ASN1_PCTX_FLAGS_SHOW_TYPE 0x008 +/* Don't show ASN1 type of ANY */ +# define ASN1_PCTX_FLAGS_NO_ANY_TYPE 0x010 +/* Don't show ASN1 type of MSTRINGs */ +# define ASN1_PCTX_FLAGS_NO_MSTRING_TYPE 0x020 +/* Don't show field names in SEQUENCE */ +# define ASN1_PCTX_FLAGS_NO_FIELD_NAME 0x040 +/* Show structure names of each SEQUENCE field */ +# define ASN1_PCTX_FLAGS_SHOW_FIELD_STRUCT_NAME 0x080 +/* Don't show structure name even at top level */ +# define ASN1_PCTX_FLAGS_NO_STRUCT_NAME 0x100 + +int ASN1_item_print(BIO *out, ASN1_VALUE *ifld, int indent, + const ASN1_ITEM *it, const ASN1_PCTX *pctx); +ASN1_PCTX *ASN1_PCTX_new(void); +void ASN1_PCTX_free(ASN1_PCTX *p); +unsigned long ASN1_PCTX_get_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_nm_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_nm_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_cert_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_cert_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_oid_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_oid_flags(ASN1_PCTX *p, unsigned long flags); +unsigned long ASN1_PCTX_get_str_flags(const ASN1_PCTX *p); +void ASN1_PCTX_set_str_flags(ASN1_PCTX *p, unsigned long flags); + +ASN1_SCTX *ASN1_SCTX_new(int (*scan_cb) (ASN1_SCTX *ctx)); +void ASN1_SCTX_free(ASN1_SCTX *p); +const ASN1_ITEM *ASN1_SCTX_get_item(ASN1_SCTX *p); +const ASN1_TEMPLATE *ASN1_SCTX_get_template(ASN1_SCTX *p); +unsigned long ASN1_SCTX_get_flags(ASN1_SCTX *p); +void ASN1_SCTX_set_app_data(ASN1_SCTX *p, void *data); +void *ASN1_SCTX_get_app_data(ASN1_SCTX *p); + +const BIO_METHOD *BIO_f_asn1(void); + +BIO *BIO_new_NDEF(BIO *out, ASN1_VALUE *val, const ASN1_ITEM *it); + +int i2d_ASN1_bio_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const ASN1_ITEM *it); +int PEM_write_bio_ASN1_stream(BIO *out, ASN1_VALUE *val, BIO *in, int flags, + const char *hdr, const ASN1_ITEM *it); +int SMIME_write_ASN1(BIO *bio, ASN1_VALUE *val, BIO *data, int flags, + int ctype_nid, int econt_nid, + STACK_OF(X509_ALGOR) *mdalgs, const ASN1_ITEM *it); +ASN1_VALUE *SMIME_read_ASN1(BIO *bio, BIO **bcont, const ASN1_ITEM *it); +int SMIME_crlf_copy(BIO *in, BIO *out, int flags); +int SMIME_text(BIO *in, BIO *out); + +const ASN1_ITEM *ASN1_ITEM_lookup(const char *name); +const ASN1_ITEM *ASN1_ITEM_get(size_t i); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/asn1_mac.h b/lib/openssl/include/openssl/asn1_mac.h new file mode 100644 index 0000000..7ac1782 --- /dev/null +++ b/lib/openssl/include/openssl/asn1_mac.h @@ -0,0 +1,10 @@ +/* + * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#error "This file is obsolete; please update your software." diff --git a/lib/openssl/include/openssl/asn1err.h b/lib/openssl/include/openssl/asn1err.h new file mode 100644 index 0000000..e1ad1fe --- /dev/null +++ b/lib/openssl/include/openssl/asn1err.h @@ -0,0 +1,256 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1ERR_H +# define HEADER_ASN1ERR_H + +# include + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASN1_strings(void); + +/* + * ASN1 function codes. + */ +# define ASN1_F_A2D_ASN1_OBJECT 100 +# define ASN1_F_A2I_ASN1_INTEGER 102 +# define ASN1_F_A2I_ASN1_STRING 103 +# define ASN1_F_APPEND_EXP 176 +# define ASN1_F_ASN1_BIO_INIT 113 +# define ASN1_F_ASN1_BIT_STRING_SET_BIT 183 +# define ASN1_F_ASN1_CB 177 +# define ASN1_F_ASN1_CHECK_TLEN 104 +# define ASN1_F_ASN1_COLLECT 106 +# define ASN1_F_ASN1_D2I_EX_PRIMITIVE 108 +# define ASN1_F_ASN1_D2I_FP 109 +# define ASN1_F_ASN1_D2I_READ_BIO 107 +# define ASN1_F_ASN1_DIGEST 184 +# define ASN1_F_ASN1_DO_ADB 110 +# define ASN1_F_ASN1_DO_LOCK 233 +# define ASN1_F_ASN1_DUP 111 +# define ASN1_F_ASN1_ENC_SAVE 115 +# define ASN1_F_ASN1_EX_C2I 204 +# define ASN1_F_ASN1_FIND_END 190 +# define ASN1_F_ASN1_GENERALIZEDTIME_ADJ 216 +# define ASN1_F_ASN1_GENERATE_V3 178 +# define ASN1_F_ASN1_GET_INT64 224 +# define ASN1_F_ASN1_GET_OBJECT 114 +# define ASN1_F_ASN1_GET_UINT64 225 +# define ASN1_F_ASN1_I2D_BIO 116 +# define ASN1_F_ASN1_I2D_FP 117 +# define ASN1_F_ASN1_ITEM_D2I_FP 206 +# define ASN1_F_ASN1_ITEM_DUP 191 +# define ASN1_F_ASN1_ITEM_EMBED_D2I 120 +# define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# define ASN1_F_ASN1_ITEM_EX_I2D 144 +# define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 +# define ASN1_F_ASN1_ITEM_I2D_BIO 192 +# define ASN1_F_ASN1_ITEM_I2D_FP 193 +# define ASN1_F_ASN1_ITEM_PACK 198 +# define ASN1_F_ASN1_ITEM_SIGN 195 +# define ASN1_F_ASN1_ITEM_SIGN_CTX 220 +# define ASN1_F_ASN1_ITEM_UNPACK 199 +# define ASN1_F_ASN1_ITEM_VERIFY 197 +# define ASN1_F_ASN1_MBSTRING_NCOPY 122 +# define ASN1_F_ASN1_OBJECT_NEW 123 +# define ASN1_F_ASN1_OUTPUT_DATA 214 +# define ASN1_F_ASN1_PCTX_NEW 205 +# define ASN1_F_ASN1_PRIMITIVE_NEW 119 +# define ASN1_F_ASN1_SCTX_NEW 221 +# define ASN1_F_ASN1_SIGN 128 +# define ASN1_F_ASN1_STR2TYPE 179 +# define ASN1_F_ASN1_STRING_GET_INT64 227 +# define ASN1_F_ASN1_STRING_GET_UINT64 230 +# define ASN1_F_ASN1_STRING_SET 186 +# define ASN1_F_ASN1_STRING_TABLE_ADD 129 +# define ASN1_F_ASN1_STRING_TO_BN 228 +# define ASN1_F_ASN1_STRING_TYPE_NEW 130 +# define ASN1_F_ASN1_TEMPLATE_EX_D2I 132 +# define ASN1_F_ASN1_TEMPLATE_NEW 133 +# define ASN1_F_ASN1_TEMPLATE_NOEXP_D2I 131 +# define ASN1_F_ASN1_TIME_ADJ 217 +# define ASN1_F_ASN1_TYPE_GET_INT_OCTETSTRING 134 +# define ASN1_F_ASN1_TYPE_GET_OCTETSTRING 135 +# define ASN1_F_ASN1_UTCTIME_ADJ 218 +# define ASN1_F_ASN1_VERIFY 137 +# define ASN1_F_B64_READ_ASN1 209 +# define ASN1_F_B64_WRITE_ASN1 210 +# define ASN1_F_BIO_NEW_NDEF 208 +# define ASN1_F_BITSTR_CB 180 +# define ASN1_F_BN_TO_ASN1_STRING 229 +# define ASN1_F_C2I_ASN1_BIT_STRING 189 +# define ASN1_F_C2I_ASN1_INTEGER 194 +# define ASN1_F_C2I_ASN1_OBJECT 196 +# define ASN1_F_C2I_IBUF 226 +# define ASN1_F_C2I_UINT64_INT 101 +# define ASN1_F_COLLECT_DATA 140 +# define ASN1_F_D2I_ASN1_OBJECT 147 +# define ASN1_F_D2I_ASN1_UINTEGER 150 +# define ASN1_F_D2I_AUTOPRIVATEKEY 207 +# define ASN1_F_D2I_PRIVATEKEY 154 +# define ASN1_F_D2I_PUBLICKEY 155 +# define ASN1_F_DO_BUF 142 +# define ASN1_F_DO_CREATE 124 +# define ASN1_F_DO_DUMP 125 +# define ASN1_F_DO_TCREATE 222 +# define ASN1_F_I2A_ASN1_OBJECT 126 +# define ASN1_F_I2D_ASN1_BIO_STREAM 211 +# define ASN1_F_I2D_ASN1_OBJECT 143 +# define ASN1_F_I2D_DSA_PUBKEY 161 +# define ASN1_F_I2D_EC_PUBKEY 181 +# define ASN1_F_I2D_PRIVATEKEY 163 +# define ASN1_F_I2D_PUBLICKEY 164 +# define ASN1_F_I2D_RSA_PUBKEY 165 +# define ASN1_F_LONG_C2I 166 +# define ASN1_F_NDEF_PREFIX 127 +# define ASN1_F_NDEF_SUFFIX 136 +# define ASN1_F_OID_MODULE_INIT 174 +# define ASN1_F_PARSE_TAGGING 182 +# define ASN1_F_PKCS5_PBE2_SET_IV 167 +# define ASN1_F_PKCS5_PBE2_SET_SCRYPT 231 +# define ASN1_F_PKCS5_PBE_SET 202 +# define ASN1_F_PKCS5_PBE_SET0_ALGOR 215 +# define ASN1_F_PKCS5_PBKDF2_SET 219 +# define ASN1_F_PKCS5_SCRYPT_SET 232 +# define ASN1_F_SMIME_READ_ASN1 212 +# define ASN1_F_SMIME_TEXT 213 +# define ASN1_F_STABLE_GET 138 +# define ASN1_F_STBL_MODULE_INIT 223 +# define ASN1_F_UINT32_C2I 105 +# define ASN1_F_UINT32_NEW 139 +# define ASN1_F_UINT64_C2I 112 +# define ASN1_F_UINT64_NEW 141 +# define ASN1_F_X509_CRL_ADD0_REVOKED 169 +# define ASN1_F_X509_INFO_NEW 170 +# define ASN1_F_X509_NAME_ENCODE 203 +# define ASN1_F_X509_NAME_EX_D2I 158 +# define ASN1_F_X509_NAME_EX_NEW 171 +# define ASN1_F_X509_PKEY_NEW 173 + +/* + * ASN1 reason codes. + */ +# define ASN1_R_ADDING_OBJECT 171 +# define ASN1_R_ASN1_PARSE_ERROR 203 +# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 +# define ASN1_R_AUX_ERROR 100 +# define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BAD_TEMPLATE 230 +# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 +# define ASN1_R_BN_LIB 105 +# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 +# define ASN1_R_BUFFER_TOO_SMALL 107 +# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 +# define ASN1_R_CONTEXT_NOT_INITIALISED 217 +# define ASN1_R_DATA_IS_WRONG 109 +# define ASN1_R_DECODE_ERROR 110 +# define ASN1_R_DEPTH_EXCEEDED 174 +# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 +# define ASN1_R_ENCODE_ERROR 112 +# define ASN1_R_ERROR_GETTING_TIME 173 +# define ASN1_R_ERROR_LOADING_SECTION 172 +# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 +# define ASN1_R_EXPECTING_AN_INTEGER 115 +# define ASN1_R_EXPECTING_AN_OBJECT 116 +# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 +# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 +# define ASN1_R_FIELD_MISSING 121 +# define ASN1_R_FIRST_NUM_TOO_LARGE 122 +# define ASN1_R_HEADER_TOO_LONG 123 +# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 +# define ASN1_R_ILLEGAL_BOOLEAN 176 +# define ASN1_R_ILLEGAL_CHARACTERS 124 +# define ASN1_R_ILLEGAL_FORMAT 177 +# define ASN1_R_ILLEGAL_HEX 178 +# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 +# define ASN1_R_ILLEGAL_INTEGER 180 +# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 +# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 +# define ASN1_R_ILLEGAL_NULL 125 +# define ASN1_R_ILLEGAL_NULL_VALUE 182 +# define ASN1_R_ILLEGAL_OBJECT 183 +# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 +# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 +# define ASN1_R_ILLEGAL_PADDING 221 +# define ASN1_R_ILLEGAL_TAGGED_ANY 127 +# define ASN1_R_ILLEGAL_TIME_VALUE 184 +# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 +# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 +# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 +# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 +# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 +# define ASN1_R_INVALID_DIGIT 130 +# define ASN1_R_INVALID_MIME_TYPE 205 +# define ASN1_R_INVALID_MODIFIER 186 +# define ASN1_R_INVALID_NUMBER 187 +# define ASN1_R_INVALID_OBJECT_ENCODING 216 +# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 +# define ASN1_R_INVALID_SEPARATOR 131 +# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 +# define ASN1_R_INVALID_UNIVERSALSTRING_LENGTH 133 +# define ASN1_R_INVALID_UTF8STRING 134 +# define ASN1_R_INVALID_VALUE 219 +# define ASN1_R_LIST_ERROR 188 +# define ASN1_R_MIME_NO_CONTENT_TYPE 206 +# define ASN1_R_MIME_PARSE_ERROR 207 +# define ASN1_R_MIME_SIG_PARSE_ERROR 208 +# define ASN1_R_MISSING_EOC 137 +# define ASN1_R_MISSING_SECOND_NUMBER 138 +# define ASN1_R_MISSING_VALUE 189 +# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 +# define ASN1_R_MSTRING_WRONG_TAG 140 +# define ASN1_R_NESTED_ASN1_STRING 197 +# define ASN1_R_NESTED_TOO_DEEP 201 +# define ASN1_R_NON_HEX_CHARACTERS 141 +# define ASN1_R_NOT_ASCII_FORMAT 190 +# define ASN1_R_NOT_ENOUGH_DATA 142 +# define ASN1_R_NO_CONTENT_TYPE 209 +# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 +# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 +# define ASN1_R_NO_MULTIPART_BOUNDARY 211 +# define ASN1_R_NO_SIG_CONTENT_TYPE 212 +# define ASN1_R_NULL_IS_WRONG_LENGTH 144 +# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 +# define ASN1_R_ODD_NUMBER_OF_CHARS 145 +# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 +# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 +# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 +# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 +# define ASN1_R_SHORT_LINE 150 +# define ASN1_R_SIG_INVALID_MIME_TYPE 213 +# define ASN1_R_STREAMING_NOT_SUPPORTED 202 +# define ASN1_R_STRING_TOO_LONG 151 +# define ASN1_R_STRING_TOO_SHORT 152 +# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 +# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 +# define ASN1_R_TOO_LARGE 223 +# define ASN1_R_TOO_LONG 155 +# define ASN1_R_TOO_SMALL 224 +# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 +# define ASN1_R_TYPE_NOT_PRIMITIVE 195 +# define ASN1_R_UNEXPECTED_EOC 159 +# define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH 215 +# define ASN1_R_UNKNOWN_FORMAT 160 +# define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM 161 +# define ASN1_R_UNKNOWN_OBJECT_TYPE 162 +# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 +# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 +# define ASN1_R_UNKNOWN_TAG 194 +# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 +# define ASN1_R_UNSUPPORTED_CIPHER 228 +# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 +# define ASN1_R_UNSUPPORTED_TYPE 196 +# define ASN1_R_WRONG_INTEGER_TYPE 225 +# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 +# define ASN1_R_WRONG_TAG 168 + +#endif diff --git a/lib/openssl/include/openssl/asn1t.h b/lib/openssl/include/openssl/asn1t.h new file mode 100644 index 0000000..a450ba0 --- /dev/null +++ b/lib/openssl/include/openssl/asn1t.h @@ -0,0 +1,945 @@ +/* + * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASN1T_H +# define HEADER_ASN1T_H + +# include +# include +# include + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +/* ASN1 template defines, structures and functions */ + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)(iptr)) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM itname##_it = { + +# define static_ASN1_ITEM_start(itname) \ + static const ASN1_ITEM itname##_it = { + +# define ASN1_ITEM_end(itname) \ + }; + +# else + +/* Macro to obtain ASN1_ADB pointer from a type (only used internally) */ +# define ASN1_ADB_ptr(iptr) ((const ASN1_ADB *)((iptr)())) + +/* Macros for start and end of ASN1_ITEM definition */ + +# define ASN1_ITEM_start(itname) \ + const ASN1_ITEM * itname##_it(void) \ + { \ + static const ASN1_ITEM local_it = { + +# define static_ASN1_ITEM_start(itname) \ + static ASN1_ITEM_start(itname) + +# define ASN1_ITEM_end(itname) \ + }; \ + return &local_it; \ + } + +# endif + +/* Macros to aid ASN1 template writing */ + +# define ASN1_ITEM_TEMPLATE(tname) \ + static const ASN1_TEMPLATE tname##_item_tt + +# define ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_ITEM_TEMPLATE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_PRIMITIVE,\ + -1,\ + &tname##_item_tt,\ + 0,\ + NULL,\ + 0,\ + #tname \ + ASN1_ITEM_end(tname) + +/* This is a ASN1 type which just embeds a template */ + +/*- + * This pair helps declare a SEQUENCE. We can do: + * + * ASN1_SEQUENCE(stname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END(stname) + * + * This will produce an ASN1_ITEM called stname_it + * for a structure called stname. + * + * If you want the same structure but a different + * name then use: + * + * ASN1_SEQUENCE(itname) = { + * ... SEQUENCE components ... + * } ASN1_SEQUENCE_END_name(stname, itname) + * + * This will create an item called itname_it using + * a structure called stname. + */ + +# define ASN1_SEQUENCE(tname) \ + static const ASN1_TEMPLATE tname##_seq_tt[] + +# define ASN1_SEQUENCE_END(stname) ASN1_SEQUENCE_END_name(stname, stname) + +# define static_ASN1_SEQUENCE_END(stname) static_ASN1_SEQUENCE_END_name(stname, stname) + +# define ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_SEQUENCE_END_name(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE(tname) \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_cb(tname, cb) \ + ASN1_SEQUENCE_cb(tname, cb) + +# define ASN1_SEQUENCE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_BROKEN_SEQUENCE(tname) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_BROKEN, 0, 0, 0, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_ref(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_REFCOUNT, offsetof(tname, references), offsetof(tname, lock), cb, 0}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_SEQUENCE_enc(tname, enc, cb) \ + static const ASN1_AUX tname##_aux = {NULL, ASN1_AFLG_ENCODING, 0, 0, cb, offsetof(tname, enc)}; \ + ASN1_SEQUENCE(tname) + +# define ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_NDEF_SEQUENCE_END(tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(tname),\ + #tname \ + ASN1_ITEM_end(tname) + +# define ASN1_BROKEN_SEQUENCE_END(stname) ASN1_SEQUENCE_END_ref(stname, stname) +# define static_ASN1_BROKEN_SEQUENCE_END(stname) \ + static_ASN1_SEQUENCE_END_ref(stname, stname) + +# define ASN1_SEQUENCE_END_enc(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_cb(stname, tname) ASN1_SEQUENCE_END_ref(stname, tname) +# define static_ASN1_SEQUENCE_END_cb(stname, tname) static_ASN1_SEQUENCE_END_ref(stname, tname) + +# define ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #tname \ + ASN1_ITEM_end(tname) +# define static_ASN1_SEQUENCE_END_ref(stname, tname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_NDEF_SEQUENCE_END_cb(stname, tname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_NDEF_SEQUENCE,\ + V_ASN1_SEQUENCE,\ + tname##_seq_tt,\ + sizeof(tname##_seq_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/*- + * This pair helps declare a CHOICE type. We can do: + * + * ASN1_CHOICE(chname) = { + * ... CHOICE options ... + * ASN1_CHOICE_END(chname) + * + * This will produce an ASN1_ITEM called chname_it + * for a structure called chname. The structure + * definition must look like this: + * typedef struct { + * int type; + * union { + * ASN1_SOMETHING *opt1; + * ASN1_SOMEOTHER *opt2; + * } value; + * } chname; + * + * the name of the selector must be 'type'. + * to use an alternative selector name use the + * ASN1_CHOICE_END_selector() version. + */ + +# define ASN1_CHOICE(tname) \ + static const ASN1_TEMPLATE tname##_ch_tt[] + +# define ASN1_CHOICE_cb(tname, cb) \ + static const ASN1_AUX tname##_aux = {NULL, 0, 0, 0, cb, 0}; \ + ASN1_CHOICE(tname) + +# define ASN1_CHOICE_END(stname) ASN1_CHOICE_END_name(stname, stname) + +# define static_ASN1_CHOICE_END(stname) static_ASN1_CHOICE_END_name(stname, stname) + +# define ASN1_CHOICE_END_name(stname, tname) ASN1_CHOICE_END_selector(stname, tname, type) + +# define static_ASN1_CHOICE_END_name(stname, tname) static_ASN1_CHOICE_END_selector(stname, tname, type) + +# define ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define static_ASN1_CHOICE_END_selector(stname, tname, selname) \ + ;\ + static_ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + NULL,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +# define ASN1_CHOICE_END_cb(stname, tname, selname) \ + ;\ + ASN1_ITEM_start(tname) \ + ASN1_ITYPE_CHOICE,\ + offsetof(stname,selname) ,\ + tname##_ch_tt,\ + sizeof(tname##_ch_tt) / sizeof(ASN1_TEMPLATE),\ + &tname##_aux,\ + sizeof(stname),\ + #stname \ + ASN1_ITEM_end(tname) + +/* This helps with the template wrapper form of ASN1_ITEM */ + +# define ASN1_EX_TEMPLATE_TYPE(flags, tag, name, type) { \ + (flags), (tag), 0,\ + #name, ASN1_ITEM_ref(type) } + +/* These help with SEQUENCE or CHOICE components */ + +/* used to declare other types */ + +# define ASN1_EX_TYPE(flags, tag, stname, field, type) { \ + (flags), (tag), offsetof(stname, field),\ + #field, ASN1_ITEM_ref(type) } + +/* implicit and explicit helper macros */ + +# define ASN1_IMP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_IMPLICIT | (ex), tag, stname, field, type) + +# define ASN1_EXP_EX(stname, field, type, tag, ex) \ + ASN1_EX_TYPE(ASN1_TFLG_EXPLICIT | (ex), tag, stname, field, type) + +/* Any defined by macros: the field used is in the table itself */ + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, (const ASN1_ITEM *)&(tblname##_adb) } +# else +# define ASN1_ADB_OBJECT(tblname) { ASN1_TFLG_ADB_OID, -1, 0, #tblname, tblname##_adb } +# define ASN1_ADB_INTEGER(tblname) { ASN1_TFLG_ADB_INT, -1, 0, #tblname, tblname##_adb } +# endif +/* Plain simple type */ +# define ASN1_SIMPLE(stname, field, type) ASN1_EX_TYPE(0,0, stname, field, type) +/* Embedded simple type */ +# define ASN1_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_EMBED,0, stname, field, type) + +/* OPTIONAL simple type */ +# define ASN1_OPT(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL, 0, stname, field, type) +# define ASN1_OPT_EMBED(stname, field, type) ASN1_EX_TYPE(ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED, 0, stname, field, type) + +/* IMPLICIT tagged simple type */ +# define ASN1_IMP(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, 0) +# define ASN1_IMP_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) + +/* IMPLICIT tagged OPTIONAL simple type */ +# define ASN1_IMP_OPT(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_IMP_OPT_EMBED(stname, field, type, tag) ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* Same as above but EXPLICIT */ + +# define ASN1_EXP(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, 0) +# define ASN1_EXP_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_EMBED) +# define ASN1_EXP_OPT(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL) +# define ASN1_EXP_OPT_EMBED(stname, field, type, tag) ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_EMBED) + +/* SEQUENCE OF type */ +# define ASN1_SEQUENCE_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, stname, field, type) + +/* OPTIONAL SEQUENCE OF */ +# define ASN1_SEQUENCE_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Same as above but for SET OF */ + +# define ASN1_SET_OF(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF, 0, stname, field, type) + +# define ASN1_SET_OF_OPT(stname, field, type) \ + ASN1_EX_TYPE(ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL, 0, stname, field, type) + +/* Finally compound types of SEQUENCE, SET, IMPLICIT, EXPLICIT and OPTIONAL */ + +# define ASN1_IMP_SET_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_EXP_SET_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF) + +# define ASN1_IMP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SET_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SET_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_IMP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_IMP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_IMP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +# define ASN1_EXP_SEQUENCE_OF(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF) + +# define ASN1_EXP_SEQUENCE_OF_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_SEQUENCE_OF|ASN1_TFLG_OPTIONAL) + +/* EXPLICIT using indefinite length constructed form */ +# define ASN1_NDEF_EXP(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_NDEF) + +/* EXPLICIT OPTIONAL using indefinite length constructed form */ +# define ASN1_NDEF_EXP_OPT(stname, field, type, tag) \ + ASN1_EXP_EX(stname, field, type, tag, ASN1_TFLG_OPTIONAL|ASN1_TFLG_NDEF) + +/* Macros for the ASN1_ADB structure */ + +# define ASN1_ADB(name) \ + static const ASN1_ADB_TABLE name##_adbtbl[] + +# ifndef OPENSSL_EXPORT_VAR_AS_FUNCTION + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ADB name##_adb = {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + } + +# else + +# define ASN1_ADB_END(name, flags, field, adb_cb, def, none) \ + ;\ + static const ASN1_ITEM *name##_adb(void) \ + { \ + static const ASN1_ADB internal_adb = \ + {\ + flags,\ + offsetof(name, field),\ + adb_cb,\ + name##_adbtbl,\ + sizeof(name##_adbtbl) / sizeof(ASN1_ADB_TABLE),\ + def,\ + none\ + }; \ + return (const ASN1_ITEM *) &internal_adb; \ + } \ + void dummy_function(void) + +# endif + +# define ADB_ENTRY(val, template) {val, template} + +# define ASN1_ADB_TEMPLATE(name) \ + static const ASN1_TEMPLATE name##_tt + +/* + * This is the ASN1 template structure that defines a wrapper round the + * actual type. It determines the actual position of the field in the value + * structure, various flags such as OPTIONAL and the field name. + */ + +struct ASN1_TEMPLATE_st { + unsigned long flags; /* Various flags */ + long tag; /* tag, not used if no tagging */ + unsigned long offset; /* Offset of this field in structure */ + const char *field_name; /* Field name */ + ASN1_ITEM_EXP *item; /* Relevant ASN1_ITEM or ASN1_ADB */ +}; + +/* Macro to extract ASN1_ITEM and ASN1_ADB pointer from ASN1_TEMPLATE */ + +# define ASN1_TEMPLATE_item(t) (t->item_ptr) +# define ASN1_TEMPLATE_adb(t) (t->item_ptr) + +typedef struct ASN1_ADB_TABLE_st ASN1_ADB_TABLE; +typedef struct ASN1_ADB_st ASN1_ADB; + +struct ASN1_ADB_st { + unsigned long flags; /* Various flags */ + unsigned long offset; /* Offset of selector field */ + int (*adb_cb)(long *psel); /* Application callback */ + const ASN1_ADB_TABLE *tbl; /* Table of possible types */ + long tblcount; /* Number of entries in tbl */ + const ASN1_TEMPLATE *default_tt; /* Type to use if no match */ + const ASN1_TEMPLATE *null_tt; /* Type to use if selector is NULL */ +}; + +struct ASN1_ADB_TABLE_st { + long value; /* NID for an object or value for an int */ + const ASN1_TEMPLATE tt; /* item for this value */ +}; + +/* template flags */ + +/* Field is optional */ +# define ASN1_TFLG_OPTIONAL (0x1) + +/* Field is a SET OF */ +# define ASN1_TFLG_SET_OF (0x1 << 1) + +/* Field is a SEQUENCE OF */ +# define ASN1_TFLG_SEQUENCE_OF (0x2 << 1) + +/* + * Special case: this refers to a SET OF that will be sorted into DER order + * when encoded *and* the corresponding STACK will be modified to match the + * new order. + */ +# define ASN1_TFLG_SET_ORDER (0x3 << 1) + +/* Mask for SET OF or SEQUENCE OF */ +# define ASN1_TFLG_SK_MASK (0x3 << 1) + +/* + * These flags mean the tag should be taken from the tag field. If EXPLICIT + * then the underlying type is used for the inner tag. + */ + +/* IMPLICIT tagging */ +# define ASN1_TFLG_IMPTAG (0x1 << 3) + +/* EXPLICIT tagging, inner tag from underlying type */ +# define ASN1_TFLG_EXPTAG (0x2 << 3) + +# define ASN1_TFLG_TAG_MASK (0x3 << 3) + +/* context specific IMPLICIT */ +# define ASN1_TFLG_IMPLICIT (ASN1_TFLG_IMPTAG|ASN1_TFLG_CONTEXT) + +/* context specific EXPLICIT */ +# define ASN1_TFLG_EXPLICIT (ASN1_TFLG_EXPTAG|ASN1_TFLG_CONTEXT) + +/* + * If tagging is in force these determine the type of tag to use. Otherwise + * the tag is determined by the underlying type. These values reflect the + * actual octet format. + */ + +/* Universal tag */ +# define ASN1_TFLG_UNIVERSAL (0x0<<6) +/* Application tag */ +# define ASN1_TFLG_APPLICATION (0x1<<6) +/* Context specific tag */ +# define ASN1_TFLG_CONTEXT (0x2<<6) +/* Private tag */ +# define ASN1_TFLG_PRIVATE (0x3<<6) + +# define ASN1_TFLG_TAG_CLASS (0x3<<6) + +/* + * These are for ANY DEFINED BY type. In this case the 'item' field points to + * an ASN1_ADB structure which contains a table of values to decode the + * relevant type + */ + +# define ASN1_TFLG_ADB_MASK (0x3<<8) + +# define ASN1_TFLG_ADB_OID (0x1<<8) + +# define ASN1_TFLG_ADB_INT (0x1<<9) + +/* + * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes + * indefinite length constructed encoding to be used if required. + */ + +# define ASN1_TFLG_NDEF (0x1<<11) + +/* Field is embedded and not a pointer */ +# define ASN1_TFLG_EMBED (0x1 << 12) + +/* This is the actual ASN1 item itself */ + +struct ASN1_ITEM_st { + char itype; /* The item type, primitive, SEQUENCE, CHOICE + * or extern */ + long utype; /* underlying type */ + const ASN1_TEMPLATE *templates; /* If SEQUENCE or CHOICE this contains + * the contents */ + long tcount; /* Number of templates if SEQUENCE or CHOICE */ + const void *funcs; /* functions that handle this type */ + long size; /* Structure size (usually) */ + const char *sname; /* Structure name */ +}; + +/*- + * These are values for the itype field and + * determine how the type is interpreted. + * + * For PRIMITIVE types the underlying type + * determines the behaviour if items is NULL. + * + * Otherwise templates must contain a single + * template and the type is treated in the + * same way as the type specified in the template. + * + * For SEQUENCE types the templates field points + * to the members, the size field is the + * structure size. + * + * For CHOICE types the templates field points + * to each possible member (typically a union) + * and the 'size' field is the offset of the + * selector. + * + * The 'funcs' field is used for application + * specific functions. + * + * The EXTERN type uses a new style d2i/i2d. + * The new style should be used where possible + * because it avoids things like the d2i IMPLICIT + * hack. + * + * MSTRING is a multiple string type, it is used + * for a CHOICE of character strings where the + * actual strings all occupy an ASN1_STRING + * structure. In this case the 'utype' field + * has a special meaning, it is used as a mask + * of acceptable types using the B_ASN1 constants. + * + * NDEF_SEQUENCE is the same as SEQUENCE except + * that it will use indefinite length constructed + * encoding if requested. + * + */ + +# define ASN1_ITYPE_PRIMITIVE 0x0 + +# define ASN1_ITYPE_SEQUENCE 0x1 + +# define ASN1_ITYPE_CHOICE 0x2 + +# define ASN1_ITYPE_EXTERN 0x4 + +# define ASN1_ITYPE_MSTRING 0x5 + +# define ASN1_ITYPE_NDEF_SEQUENCE 0x6 + +/* + * Cache for ASN1 tag and length, so we don't keep re-reading it for things + * like CHOICE + */ + +struct ASN1_TLC_st { + char valid; /* Values below are valid */ + int ret; /* return value */ + long plen; /* length */ + int ptag; /* class value */ + int pclass; /* class value */ + int hdrlen; /* header length */ +}; + +/* Typedefs for ASN1 function pointers */ +typedef int ASN1_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +typedef int ASN1_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); +typedef int ASN1_ex_new_func(ASN1_VALUE **pval, const ASN1_ITEM *it); +typedef void ASN1_ex_free_func(ASN1_VALUE **pval, const ASN1_ITEM *it); + +typedef int ASN1_ex_print_func(BIO *out, ASN1_VALUE **pval, + int indent, const char *fname, + const ASN1_PCTX *pctx); + +typedef int ASN1_primitive_i2c(ASN1_VALUE **pval, unsigned char *cont, + int *putype, const ASN1_ITEM *it); +typedef int ASN1_primitive_c2i(ASN1_VALUE **pval, const unsigned char *cont, + int len, int utype, char *free_cont, + const ASN1_ITEM *it); +typedef int ASN1_primitive_print(BIO *out, ASN1_VALUE **pval, + const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx); + +typedef struct ASN1_EXTERN_FUNCS_st { + void *app_data; + ASN1_ex_new_func *asn1_ex_new; + ASN1_ex_free_func *asn1_ex_free; + ASN1_ex_free_func *asn1_ex_clear; + ASN1_ex_d2i *asn1_ex_d2i; + ASN1_ex_i2d *asn1_ex_i2d; + ASN1_ex_print_func *asn1_ex_print; +} ASN1_EXTERN_FUNCS; + +typedef struct ASN1_PRIMITIVE_FUNCS_st { + void *app_data; + unsigned long flags; + ASN1_ex_new_func *prim_new; + ASN1_ex_free_func *prim_free; + ASN1_ex_free_func *prim_clear; + ASN1_primitive_c2i *prim_c2i; + ASN1_primitive_i2c *prim_i2c; + ASN1_primitive_print *prim_print; +} ASN1_PRIMITIVE_FUNCS; + +/* + * This is the ASN1_AUX structure: it handles various miscellaneous + * requirements. For example the use of reference counts and an informational + * callback. The "informational callback" is called at various points during + * the ASN1 encoding and decoding. It can be used to provide minor + * customisation of the structures used. This is most useful where the + * supplied routines *almost* do the right thing but need some extra help at + * a few points. If the callback returns zero then it is assumed a fatal + * error has occurred and the main operation should be abandoned. If major + * changes in the default behaviour are required then an external type is + * more appropriate. + */ + +typedef int ASN1_aux_cb(int operation, ASN1_VALUE **in, const ASN1_ITEM *it, + void *exarg); + +typedef struct ASN1_AUX_st { + void *app_data; + int flags; + int ref_offset; /* Offset of reference value */ + int ref_lock; /* Lock type to use */ + ASN1_aux_cb *asn1_cb; + int enc_offset; /* Offset of ASN1_ENCODING structure */ +} ASN1_AUX; + +/* For print related callbacks exarg points to this structure */ +typedef struct ASN1_PRINT_ARG_st { + BIO *out; + int indent; + const ASN1_PCTX *pctx; +} ASN1_PRINT_ARG; + +/* For streaming related callbacks exarg points to this structure */ +typedef struct ASN1_STREAM_ARG_st { + /* BIO to stream through */ + BIO *out; + /* BIO with filters appended */ + BIO *ndef_bio; + /* Streaming I/O boundary */ + unsigned char **boundary; +} ASN1_STREAM_ARG; + +/* Flags in ASN1_AUX */ + +/* Use a reference count */ +# define ASN1_AFLG_REFCOUNT 1 +/* Save the encoding of structure (useful for signatures) */ +# define ASN1_AFLG_ENCODING 2 +/* The Sequence length is invalid */ +# define ASN1_AFLG_BROKEN 4 + +/* operation values for asn1_cb */ + +# define ASN1_OP_NEW_PRE 0 +# define ASN1_OP_NEW_POST 1 +# define ASN1_OP_FREE_PRE 2 +# define ASN1_OP_FREE_POST 3 +# define ASN1_OP_D2I_PRE 4 +# define ASN1_OP_D2I_POST 5 +# define ASN1_OP_I2D_PRE 6 +# define ASN1_OP_I2D_POST 7 +# define ASN1_OP_PRINT_PRE 8 +# define ASN1_OP_PRINT_POST 9 +# define ASN1_OP_STREAM_PRE 10 +# define ASN1_OP_STREAM_POST 11 +# define ASN1_OP_DETACHED_PRE 12 +# define ASN1_OP_DETACHED_POST 13 + +/* Macro to implement a primitive type */ +# define IMPLEMENT_ASN1_TYPE(stname) IMPLEMENT_ASN1_TYPE_ex(stname, stname, 0) +# define IMPLEMENT_ASN1_TYPE_ex(itname, vname, ex) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_PRIMITIVE, V_##vname, NULL, 0, NULL, ex, #itname \ + ASN1_ITEM_end(itname) + +/* Macro to implement a multi string type */ +# define IMPLEMENT_ASN1_MSTRING(itname, mask) \ + ASN1_ITEM_start(itname) \ + ASN1_ITYPE_MSTRING, mask, NULL, 0, NULL, sizeof(ASN1_STRING), #itname \ + ASN1_ITEM_end(itname) + +# define IMPLEMENT_EXTERN_ASN1(sname, tag, fptrs) \ + ASN1_ITEM_start(sname) \ + ASN1_ITYPE_EXTERN, \ + tag, \ + NULL, \ + 0, \ + &fptrs, \ + 0, \ + #sname \ + ASN1_ITEM_end(sname) + +/* Macro to implement standard functions in terms of ASN1_ITEM structures */ + +# define IMPLEMENT_ASN1_FUNCTIONS(stname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_FUNCTIONS_name(stname, itname) IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, itname) + +# define IMPLEMENT_ASN1_FUNCTIONS_ENCODE_name(stname, itname) \ + IMPLEMENT_ASN1_FUNCTIONS_ENCODE_fname(stname, itname, itname) + +# define IMPLEMENT_STATIC_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(static, stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS(stname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_pfname(pre, stname, itname, fname) \ + pre stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + pre void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) \ + stname *fname##_new(void) \ + { \ + return (stname *)ASN1_item_new(ASN1_ITEM_rptr(itname)); \ + } \ + void fname##_free(stname *a) \ + { \ + ASN1_item_free((ASN1_VALUE *)a, ASN1_ITEM_rptr(itname)); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_NDEF_FUNCTION(stname) \ + int i2d_##stname##_NDEF(stname *a, unsigned char **out) \ + { \ + return ASN1_item_ndef_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(stname));\ + } + +# define IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(stname) \ + static stname *d2i_##stname(stname **a, \ + const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, \ + ASN1_ITEM_rptr(stname)); \ + } \ + static int i2d_##stname(stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, \ + ASN1_ITEM_rptr(stname)); \ + } + +/* + * This includes evil casts to remove const: they will go away when full ASN1 + * constification is done. + */ +# define IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + stname *d2i_##fname(stname **a, const unsigned char **in, long len) \ + { \ + return (stname *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, ASN1_ITEM_rptr(itname));\ + } \ + int i2d_##fname(const stname *a, unsigned char **out) \ + { \ + return ASN1_item_i2d((ASN1_VALUE *)a, out, ASN1_ITEM_rptr(itname));\ + } + +# define IMPLEMENT_ASN1_DUP_FUNCTION(stname) \ + stname * stname##_dup(stname *x) \ + { \ + return ASN1_item_dup(ASN1_ITEM_rptr(stname), x); \ + } + +# define IMPLEMENT_ASN1_PRINT_FUNCTION(stname) \ + IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, stname, stname) + +# define IMPLEMENT_ASN1_PRINT_FUNCTION_fname(stname, itname, fname) \ + int fname##_print_ctx(BIO *out, stname *x, int indent, \ + const ASN1_PCTX *pctx) \ + { \ + return ASN1_item_print(out, (ASN1_VALUE *)x, indent, \ + ASN1_ITEM_rptr(itname), pctx); \ + } + +# define IMPLEMENT_ASN1_FUNCTIONS_const(name) \ + IMPLEMENT_ASN1_FUNCTIONS_const_fname(name, name, name) + +# define IMPLEMENT_ASN1_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(stname, itname, fname) \ + IMPLEMENT_ASN1_ALLOC_FUNCTIONS_fname(stname, itname, fname) + +/* external definitions for primitive types */ + +DECLARE_ASN1_ITEM(ASN1_BOOLEAN) +DECLARE_ASN1_ITEM(ASN1_TBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_FBOOLEAN) +DECLARE_ASN1_ITEM(ASN1_SEQUENCE) +DECLARE_ASN1_ITEM(CBIGNUM) +DECLARE_ASN1_ITEM(BIGNUM) +DECLARE_ASN1_ITEM(INT32) +DECLARE_ASN1_ITEM(ZINT32) +DECLARE_ASN1_ITEM(UINT32) +DECLARE_ASN1_ITEM(ZUINT32) +DECLARE_ASN1_ITEM(INT64) +DECLARE_ASN1_ITEM(ZINT64) +DECLARE_ASN1_ITEM(UINT64) +DECLARE_ASN1_ITEM(ZUINT64) + +# if OPENSSL_API_COMPAT < 0x10200000L +/* + * LONG and ZLONG are strongly discouraged for use as stored data, as the + * underlying C type (long) differs in size depending on the architecture. + * They are designed with 32-bit longs in mind. + */ +DECLARE_ASN1_ITEM(LONG) +DECLARE_ASN1_ITEM(ZLONG) +# endif + +DEFINE_STACK_OF(ASN1_VALUE) + +/* Functions used internally by the ASN1 code */ + +int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it); +void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it); + +int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, + const ASN1_ITEM *it, int tag, int aclass, char opt, + ASN1_TLC *ctx); + +int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, + const ASN1_ITEM *it, int tag, int aclass); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/async.h b/lib/openssl/include/openssl/async.h new file mode 100644 index 0000000..7052b89 --- /dev/null +++ b/lib/openssl/include/openssl/async.h @@ -0,0 +1,76 @@ +/* + * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifndef HEADER_ASYNC_H +# define HEADER_ASYNC_H + +#if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include to use this */ +#define OSSL_ASYNC_FD HANDLE +#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE +# endif +#else +#define OSSL_ASYNC_FD int +#define OSSL_BAD_ASYNC_FD -1 +#endif +# include + + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct async_job_st ASYNC_JOB; +typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; + +#define ASYNC_ERR 0 +#define ASYNC_NO_JOBS 1 +#define ASYNC_PAUSE 2 +#define ASYNC_FINISH 3 + +int ASYNC_init_thread(size_t max_size, size_t init_size); +void ASYNC_cleanup_thread(void); + +#ifdef OSSL_ASYNC_FD +ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); +void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); +int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD fd, + void *custom_data, + void (*cleanup)(ASYNC_WAIT_CTX *, const void *, + OSSL_ASYNC_FD, void *)); +int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, + OSSL_ASYNC_FD *fd, void **custom_data); +int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, + size_t *numfds); +int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); +#endif + +int ASYNC_is_capable(void); + +int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, + int (*func)(void *), void *args, size_t size); +int ASYNC_pause_job(void); + +ASYNC_JOB *ASYNC_get_current_job(void); +ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); +void ASYNC_block_pause(void); +void ASYNC_unblock_pause(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/asyncerr.h b/lib/openssl/include/openssl/asyncerr.h new file mode 100644 index 0000000..91afbbb --- /dev/null +++ b/lib/openssl/include/openssl/asyncerr.h @@ -0,0 +1,42 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ASYNCERR_H +# define HEADER_ASYNCERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ASYNC_strings(void); + +/* + * ASYNC function codes. + */ +# define ASYNC_F_ASYNC_CTX_NEW 100 +# define ASYNC_F_ASYNC_INIT_THREAD 101 +# define ASYNC_F_ASYNC_JOB_NEW 102 +# define ASYNC_F_ASYNC_PAUSE_JOB 103 +# define ASYNC_F_ASYNC_START_FUNC 104 +# define ASYNC_F_ASYNC_START_JOB 105 +# define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 + +/* + * ASYNC reason codes. + */ +# define ASYNC_R_FAILED_TO_SET_POOL 101 +# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 +# define ASYNC_R_INIT_FAILED 105 +# define ASYNC_R_INVALID_POOL_SIZE 103 + +#endif diff --git a/lib/openssl/include/openssl/bio.h b/lib/openssl/include/openssl/bio.h new file mode 100644 index 0000000..ae559a5 --- /dev/null +++ b/lib/openssl/include/openssl/bio.h @@ -0,0 +1,801 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIO_H +# define HEADER_BIO_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* There are the classes of BIOs */ +# define BIO_TYPE_DESCRIPTOR 0x0100 /* socket, fd, connect or accept */ +# define BIO_TYPE_FILTER 0x0200 +# define BIO_TYPE_SOURCE_SINK 0x0400 + +/* These are the 'types' of BIOs */ +# define BIO_TYPE_NONE 0 +# define BIO_TYPE_MEM ( 1|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_FILE ( 2|BIO_TYPE_SOURCE_SINK) + +# define BIO_TYPE_FD ( 4|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_SOCKET ( 5|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_NULL ( 6|BIO_TYPE_SOURCE_SINK) +# define BIO_TYPE_SSL ( 7|BIO_TYPE_FILTER) +# define BIO_TYPE_MD ( 8|BIO_TYPE_FILTER) +# define BIO_TYPE_BUFFER ( 9|BIO_TYPE_FILTER) +# define BIO_TYPE_CIPHER (10|BIO_TYPE_FILTER) +# define BIO_TYPE_BASE64 (11|BIO_TYPE_FILTER) +# define BIO_TYPE_CONNECT (12|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ACCEPT (13|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) + +# define BIO_TYPE_NBIO_TEST (16|BIO_TYPE_FILTER)/* server proxy BIO */ +# define BIO_TYPE_NULL_FILTER (17|BIO_TYPE_FILTER) +# define BIO_TYPE_BIO (19|BIO_TYPE_SOURCE_SINK)/* half a BIO pair */ +# define BIO_TYPE_LINEBUFFER (20|BIO_TYPE_FILTER) +# define BIO_TYPE_DGRAM (21|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# define BIO_TYPE_ASN1 (22|BIO_TYPE_FILTER) +# define BIO_TYPE_COMP (23|BIO_TYPE_FILTER) +# ifndef OPENSSL_NO_SCTP +# define BIO_TYPE_DGRAM_SCTP (24|BIO_TYPE_SOURCE_SINK|BIO_TYPE_DESCRIPTOR) +# endif + +#define BIO_TYPE_START 128 + +/* + * BIO_FILENAME_READ|BIO_CLOSE to open or close on free. + * BIO_set_fp(in,stdin,BIO_NOCLOSE); + */ +# define BIO_NOCLOSE 0x00 +# define BIO_CLOSE 0x01 + +/* + * These are used in the following macros and are passed to BIO_ctrl() + */ +# define BIO_CTRL_RESET 1/* opt - rewind/zero etc */ +# define BIO_CTRL_EOF 2/* opt - are we at the eof */ +# define BIO_CTRL_INFO 3/* opt - extra tit-bits */ +# define BIO_CTRL_SET 4/* man - set the 'IO' type */ +# define BIO_CTRL_GET 5/* man - get the 'IO' type */ +# define BIO_CTRL_PUSH 6/* opt - internal, used to signify change */ +# define BIO_CTRL_POP 7/* opt - internal, used to signify change */ +# define BIO_CTRL_GET_CLOSE 8/* man - set the 'close' on free */ +# define BIO_CTRL_SET_CLOSE 9/* man - set the 'close' on free */ +# define BIO_CTRL_PENDING 10/* opt - is their more data buffered */ +# define BIO_CTRL_FLUSH 11/* opt - 'flush' buffered output */ +# define BIO_CTRL_DUP 12/* man - extra stuff for 'duped' BIO */ +# define BIO_CTRL_WPENDING 13/* opt - number of bytes still to write */ +# define BIO_CTRL_SET_CALLBACK 14/* opt - set callback function */ +# define BIO_CTRL_GET_CALLBACK 15/* opt - set callback function */ + +# define BIO_CTRL_PEEK 29/* BIO_f_buffer special */ +# define BIO_CTRL_SET_FILENAME 30/* BIO_s_file special */ + +/* dgram BIO stuff */ +# define BIO_CTRL_DGRAM_CONNECT 31/* BIO dgram special */ +# define BIO_CTRL_DGRAM_SET_CONNECTED 32/* allow for an externally connected + * socket to be passed in */ +# define BIO_CTRL_DGRAM_SET_RECV_TIMEOUT 33/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_RECV_TIMEOUT 34/* getsockopt, essentially */ +# define BIO_CTRL_DGRAM_SET_SEND_TIMEOUT 35/* setsockopt, essentially */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMEOUT 36/* getsockopt, essentially */ + +# define BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP 37/* flag whether the last */ +# define BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP 38/* I/O operation tiemd out */ + +/* #ifdef IP_MTU_DISCOVER */ +# define BIO_CTRL_DGRAM_MTU_DISCOVER 39/* set DF bit on egress packets */ +/* #endif */ + +# define BIO_CTRL_DGRAM_QUERY_MTU 40/* as kernel for current MTU */ +# define BIO_CTRL_DGRAM_GET_FALLBACK_MTU 47 +# define BIO_CTRL_DGRAM_GET_MTU 41/* get cached value for MTU */ +# define BIO_CTRL_DGRAM_SET_MTU 42/* set cached value for MTU. + * want to use this if asking + * the kernel fails */ + +# define BIO_CTRL_DGRAM_MTU_EXCEEDED 43/* check whether the MTU was + * exceed in the previous write + * operation */ + +# define BIO_CTRL_DGRAM_GET_PEER 46 +# define BIO_CTRL_DGRAM_SET_PEER 44/* Destination for the data */ + +# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout + * to adjust socket timeouts */ +# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48 + +# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49 + +/* Deliberately outside of OPENSSL_NO_SCTP - used in bss_dgram.c */ +# define BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE 50 +# ifndef OPENSSL_NO_SCTP +/* SCTP stuff */ +# define BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY 51 +# define BIO_CTRL_DGRAM_SCTP_NEXT_AUTH_KEY 52 +# define BIO_CTRL_DGRAM_SCTP_AUTH_CCS_RCVD 53 +# define BIO_CTRL_DGRAM_SCTP_GET_SNDINFO 60 +# define BIO_CTRL_DGRAM_SCTP_SET_SNDINFO 61 +# define BIO_CTRL_DGRAM_SCTP_GET_RCVINFO 62 +# define BIO_CTRL_DGRAM_SCTP_SET_RCVINFO 63 +# define BIO_CTRL_DGRAM_SCTP_GET_PRINFO 64 +# define BIO_CTRL_DGRAM_SCTP_SET_PRINFO 65 +# define BIO_CTRL_DGRAM_SCTP_SAVE_SHUTDOWN 70 +# endif + +# define BIO_CTRL_DGRAM_SET_PEEK_MODE 71 + +/* modifiers */ +# define BIO_FP_READ 0x02 +# define BIO_FP_WRITE 0x04 +# define BIO_FP_APPEND 0x08 +# define BIO_FP_TEXT 0x10 + +# define BIO_FLAGS_READ 0x01 +# define BIO_FLAGS_WRITE 0x02 +# define BIO_FLAGS_IO_SPECIAL 0x04 +# define BIO_FLAGS_RWS (BIO_FLAGS_READ|BIO_FLAGS_WRITE|BIO_FLAGS_IO_SPECIAL) +# define BIO_FLAGS_SHOULD_RETRY 0x08 +# ifndef BIO_FLAGS_UPLINK +/* + * "UPLINK" flag denotes file descriptors provided by application. It + * defaults to 0, as most platforms don't require UPLINK interface. + */ +# define BIO_FLAGS_UPLINK 0 +# endif + +# define BIO_FLAGS_BASE64_NO_NL 0x100 + +/* + * This is used with memory BIOs: + * BIO_FLAGS_MEM_RDONLY means we shouldn't free up or change the data in any way; + * BIO_FLAGS_NONCLEAR_RST means we shouldn't clear data on reset. + */ +# define BIO_FLAGS_MEM_RDONLY 0x200 +# define BIO_FLAGS_NONCLEAR_RST 0x400 +# define BIO_FLAGS_IN_EOF 0x800 + +typedef union bio_addr_st BIO_ADDR; +typedef struct bio_addrinfo_st BIO_ADDRINFO; + +int BIO_get_new_index(void); +void BIO_set_flags(BIO *b, int flags); +int BIO_test_flags(const BIO *b, int flags); +void BIO_clear_flags(BIO *b, int flags); + +# define BIO_get_flags(b) BIO_test_flags(b, ~(0x0)) +# define BIO_set_retry_special(b) \ + BIO_set_flags(b, (BIO_FLAGS_IO_SPECIAL|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_read(b) \ + BIO_set_flags(b, (BIO_FLAGS_READ|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_set_retry_write(b) \ + BIO_set_flags(b, (BIO_FLAGS_WRITE|BIO_FLAGS_SHOULD_RETRY)) + +/* These are normally used internally in BIOs */ +# define BIO_clear_retry_flags(b) \ + BIO_clear_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) +# define BIO_get_retry_flags(b) \ + BIO_test_flags(b, (BIO_FLAGS_RWS|BIO_FLAGS_SHOULD_RETRY)) + +/* These should be used by the application to tell why we should retry */ +# define BIO_should_read(a) BIO_test_flags(a, BIO_FLAGS_READ) +# define BIO_should_write(a) BIO_test_flags(a, BIO_FLAGS_WRITE) +# define BIO_should_io_special(a) BIO_test_flags(a, BIO_FLAGS_IO_SPECIAL) +# define BIO_retry_type(a) BIO_test_flags(a, BIO_FLAGS_RWS) +# define BIO_should_retry(a) BIO_test_flags(a, BIO_FLAGS_SHOULD_RETRY) + +/* + * The next three are used in conjunction with the BIO_should_io_special() + * condition. After this returns true, BIO *BIO_get_retry_BIO(BIO *bio, int + * *reason); will walk the BIO stack and return the 'reason' for the special + * and the offending BIO. Given a BIO, BIO_get_retry_reason(bio) will return + * the code. + */ +/* + * Returned from the SSL bio when the certificate retrieval code had an error + */ +# define BIO_RR_SSL_X509_LOOKUP 0x01 +/* Returned from the connect BIO when a connect would have blocked */ +# define BIO_RR_CONNECT 0x02 +/* Returned from the accept BIO when an accept would have blocked */ +# define BIO_RR_ACCEPT 0x03 + +/* These are passed by the BIO callback */ +# define BIO_CB_FREE 0x01 +# define BIO_CB_READ 0x02 +# define BIO_CB_WRITE 0x03 +# define BIO_CB_PUTS 0x04 +# define BIO_CB_GETS 0x05 +# define BIO_CB_CTRL 0x06 + +/* + * The callback is called before and after the underling operation, The + * BIO_CB_RETURN flag indicates if it is after the call + */ +# define BIO_CB_RETURN 0x80 +# define BIO_CB_return(a) ((a)|BIO_CB_RETURN) +# define BIO_cb_pre(a) (!((a)&BIO_CB_RETURN)) +# define BIO_cb_post(a) ((a)&BIO_CB_RETURN) + +typedef long (*BIO_callback_fn)(BIO *b, int oper, const char *argp, int argi, + long argl, long ret); +typedef long (*BIO_callback_fn_ex)(BIO *b, int oper, const char *argp, + size_t len, int argi, + long argl, int ret, size_t *processed); +BIO_callback_fn BIO_get_callback(const BIO *b); +void BIO_set_callback(BIO *b, BIO_callback_fn callback); + +BIO_callback_fn_ex BIO_get_callback_ex(const BIO *b); +void BIO_set_callback_ex(BIO *b, BIO_callback_fn_ex callback); + +char *BIO_get_callback_arg(const BIO *b); +void BIO_set_callback_arg(BIO *b, char *arg); + +typedef struct bio_method_st BIO_METHOD; + +const char *BIO_method_name(const BIO *b); +int BIO_method_type(const BIO *b); + +typedef int BIO_info_cb(BIO *, int, int); +typedef BIO_info_cb bio_info_cb; /* backward compatibility */ + +DEFINE_STACK_OF(BIO) + +/* Prefix and suffix callback in ASN1 BIO */ +typedef int asn1_ps_func (BIO *b, unsigned char **pbuf, int *plen, + void *parg); + +# ifndef OPENSSL_NO_SCTP +/* SCTP parameter structs */ +struct bio_dgram_sctp_sndinfo { + uint16_t snd_sid; + uint16_t snd_flags; + uint32_t snd_ppid; + uint32_t snd_context; +}; + +struct bio_dgram_sctp_rcvinfo { + uint16_t rcv_sid; + uint16_t rcv_ssn; + uint16_t rcv_flags; + uint32_t rcv_ppid; + uint32_t rcv_tsn; + uint32_t rcv_cumtsn; + uint32_t rcv_context; +}; + +struct bio_dgram_sctp_prinfo { + uint16_t pr_policy; + uint32_t pr_value; +}; +# endif + +/* + * #define BIO_CONN_get_param_hostname BIO_ctrl + */ + +# define BIO_C_SET_CONNECT 100 +# define BIO_C_DO_STATE_MACHINE 101 +# define BIO_C_SET_NBIO 102 +/* # define BIO_C_SET_PROXY_PARAM 103 */ +# define BIO_C_SET_FD 104 +# define BIO_C_GET_FD 105 +# define BIO_C_SET_FILE_PTR 106 +# define BIO_C_GET_FILE_PTR 107 +# define BIO_C_SET_FILENAME 108 +# define BIO_C_SET_SSL 109 +# define BIO_C_GET_SSL 110 +# define BIO_C_SET_MD 111 +# define BIO_C_GET_MD 112 +# define BIO_C_GET_CIPHER_STATUS 113 +# define BIO_C_SET_BUF_MEM 114 +# define BIO_C_GET_BUF_MEM_PTR 115 +# define BIO_C_GET_BUFF_NUM_LINES 116 +# define BIO_C_SET_BUFF_SIZE 117 +# define BIO_C_SET_ACCEPT 118 +# define BIO_C_SSL_MODE 119 +# define BIO_C_GET_MD_CTX 120 +/* # define BIO_C_GET_PROXY_PARAM 121 */ +# define BIO_C_SET_BUFF_READ_DATA 122/* data to read first */ +# define BIO_C_GET_CONNECT 123 +# define BIO_C_GET_ACCEPT 124 +# define BIO_C_SET_SSL_RENEGOTIATE_BYTES 125 +# define BIO_C_GET_SSL_NUM_RENEGOTIATES 126 +# define BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT 127 +# define BIO_C_FILE_SEEK 128 +# define BIO_C_GET_CIPHER_CTX 129 +# define BIO_C_SET_BUF_MEM_EOF_RETURN 130/* return end of input + * value */ +# define BIO_C_SET_BIND_MODE 131 +# define BIO_C_GET_BIND_MODE 132 +# define BIO_C_FILE_TELL 133 +# define BIO_C_GET_SOCKS 134 +# define BIO_C_SET_SOCKS 135 + +# define BIO_C_SET_WRITE_BUF_SIZE 136/* for BIO_s_bio */ +# define BIO_C_GET_WRITE_BUF_SIZE 137 +# define BIO_C_MAKE_BIO_PAIR 138 +# define BIO_C_DESTROY_BIO_PAIR 139 +# define BIO_C_GET_WRITE_GUARANTEE 140 +# define BIO_C_GET_READ_REQUEST 141 +# define BIO_C_SHUTDOWN_WR 142 +# define BIO_C_NREAD0 143 +# define BIO_C_NREAD 144 +# define BIO_C_NWRITE0 145 +# define BIO_C_NWRITE 146 +# define BIO_C_RESET_READ_REQUEST 147 +# define BIO_C_SET_MD_CTX 148 + +# define BIO_C_SET_PREFIX 149 +# define BIO_C_GET_PREFIX 150 +# define BIO_C_SET_SUFFIX 151 +# define BIO_C_GET_SUFFIX 152 + +# define BIO_C_SET_EX_ARG 153 +# define BIO_C_GET_EX_ARG 154 + +# define BIO_C_SET_CONNECT_MODE 155 + +# define BIO_set_app_data(s,arg) BIO_set_ex_data(s,0,arg) +# define BIO_get_app_data(s) BIO_get_ex_data(s,0) + +# define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) + +# ifndef OPENSSL_NO_SOCK +/* IP families we support, for BIO_s_connect() and BIO_s_accept() */ +/* Note: the underlying operating system may not support some of them */ +# define BIO_FAMILY_IPV4 4 +# define BIO_FAMILY_IPV6 6 +# define BIO_FAMILY_IPANY 256 + +/* BIO_s_connect() */ +# define BIO_set_conn_hostname(b,name) BIO_ctrl(b,BIO_C_SET_CONNECT,0, \ + (char *)(name)) +# define BIO_set_conn_port(b,port) BIO_ctrl(b,BIO_C_SET_CONNECT,1, \ + (char *)(port)) +# define BIO_set_conn_address(b,addr) BIO_ctrl(b,BIO_C_SET_CONNECT,2, \ + (char *)(addr)) +# define BIO_set_conn_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_CONNECT,3,f) +# define BIO_get_conn_hostname(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,0)) +# define BIO_get_conn_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,1)) +# define BIO_get_conn_address(b) ((const BIO_ADDR *)BIO_ptr_ctrl(b,BIO_C_GET_CONNECT,2)) +# define BIO_get_conn_ip_family(b) BIO_ctrl(b,BIO_C_GET_CONNECT,3,NULL) +# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) + +/* BIO_s_accept() */ +# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \ + (char *)(name)) +# define BIO_set_accept_port(b,port) BIO_ctrl(b,BIO_C_SET_ACCEPT,1, \ + (char *)(port)) +# define BIO_get_accept_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,0)) +# define BIO_get_accept_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,1)) +# define BIO_get_peer_name(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,2)) +# define BIO_get_peer_port(b) ((const char *)BIO_ptr_ctrl(b,BIO_C_GET_ACCEPT,3)) +/* #define BIO_set_nbio(b,n) BIO_ctrl(b,BIO_C_SET_NBIO,(n),NULL) */ +# define BIO_set_nbio_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,2,(n)?(void *)"a":NULL) +# define BIO_set_accept_bios(b,bio) BIO_ctrl(b,BIO_C_SET_ACCEPT,3, \ + (char *)(bio)) +# define BIO_set_accept_ip_family(b,f) BIO_int_ctrl(b,BIO_C_SET_ACCEPT,4,f) +# define BIO_get_accept_ip_family(b) BIO_ctrl(b,BIO_C_GET_ACCEPT,4,NULL) + +/* Aliases kept for backward compatibility */ +# define BIO_BIND_NORMAL 0 +# define BIO_BIND_REUSEADDR BIO_SOCK_REUSEADDR +# define BIO_BIND_REUSEADDR_IF_UNUSED BIO_SOCK_REUSEADDR +# define BIO_set_bind_mode(b,mode) BIO_ctrl(b,BIO_C_SET_BIND_MODE,mode,NULL) +# define BIO_get_bind_mode(b) BIO_ctrl(b,BIO_C_GET_BIND_MODE,0,NULL) + +/* BIO_s_accept() and BIO_s_connect() */ +# define BIO_do_connect(b) BIO_do_handshake(b) +# define BIO_do_accept(b) BIO_do_handshake(b) +# endif /* OPENSSL_NO_SOCK */ + +# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL) + +/* BIO_s_datagram(), BIO_s_fd(), BIO_s_socket(), BIO_s_accept() and BIO_s_connect() */ +# define BIO_set_fd(b,fd,c) BIO_int_ctrl(b,BIO_C_SET_FD,c,fd) +# define BIO_get_fd(b,c) BIO_ctrl(b,BIO_C_GET_FD,0,(char *)(c)) + +/* BIO_s_file() */ +# define BIO_set_fp(b,fp,c) BIO_ctrl(b,BIO_C_SET_FILE_PTR,c,(char *)(fp)) +# define BIO_get_fp(b,fpp) BIO_ctrl(b,BIO_C_GET_FILE_PTR,0,(char *)(fpp)) + +/* BIO_s_fd() and BIO_s_file() */ +# define BIO_seek(b,ofs) (int)BIO_ctrl(b,BIO_C_FILE_SEEK,ofs,NULL) +# define BIO_tell(b) (int)BIO_ctrl(b,BIO_C_FILE_TELL,0,NULL) + +/* + * name is cast to lose const, but might be better to route through a + * function so we can do it safely + */ +# ifdef CONST_STRICT +/* + * If you are wondering why this isn't defined, its because CONST_STRICT is + * purely a compile-time kludge to allow const to be checked. + */ +int BIO_read_filename(BIO *b, const char *name); +# else +# define BIO_read_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ,(char *)(name)) +# endif +# define BIO_write_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_WRITE,name) +# define BIO_append_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_APPEND,name) +# define BIO_rw_filename(b,name) (int)BIO_ctrl(b,BIO_C_SET_FILENAME, \ + BIO_CLOSE|BIO_FP_READ|BIO_FP_WRITE,name) + +/* + * WARNING WARNING, this ups the reference count on the read bio of the SSL + * structure. This is because the ssl read BIO is now pointed to by the + * next_bio field in the bio. So when you free the BIO, make sure you are + * doing a BIO_free_all() to catch the underlying BIO. + */ +# define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)(ssl)) +# define BIO_get_ssl(b,sslp) BIO_ctrl(b,BIO_C_GET_SSL,0,(char *)(sslp)) +# define BIO_set_ssl_mode(b,client) BIO_ctrl(b,BIO_C_SSL_MODE,client,NULL) +# define BIO_set_ssl_renegotiate_bytes(b,num) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_BYTES,num,NULL) +# define BIO_get_num_renegotiates(b) \ + BIO_ctrl(b,BIO_C_GET_SSL_NUM_RENEGOTIATES,0,NULL) +# define BIO_set_ssl_renegotiate_timeout(b,seconds) \ + BIO_ctrl(b,BIO_C_SET_SSL_RENEGOTIATE_TIMEOUT,seconds,NULL) + +/* defined in evp.h */ +/* #define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,1,(char *)(md)) */ + +# define BIO_get_mem_data(b,pp) BIO_ctrl(b,BIO_CTRL_INFO,0,(char *)(pp)) +# define BIO_set_mem_buf(b,bm,c) BIO_ctrl(b,BIO_C_SET_BUF_MEM,c,(char *)(bm)) +# define BIO_get_mem_ptr(b,pp) BIO_ctrl(b,BIO_C_GET_BUF_MEM_PTR,0, \ + (char *)(pp)) +# define BIO_set_mem_eof_return(b,v) \ + BIO_ctrl(b,BIO_C_SET_BUF_MEM_EOF_RETURN,v,NULL) + +/* For the BIO_f_buffer() type */ +# define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES,0,NULL) +# define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size,NULL) +# define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,0) +# define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_SIZE,size,1) +# define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_READ_DATA,num,buf) + +/* Don't use the next one unless you know what you are doing :-) */ +# define BIO_dup_state(b,ret) BIO_ctrl(b,BIO_CTRL_DUP,0,(char *)(ret)) + +# define BIO_reset(b) (int)BIO_ctrl(b,BIO_CTRL_RESET,0,NULL) +# define BIO_eof(b) (int)BIO_ctrl(b,BIO_CTRL_EOF,0,NULL) +# define BIO_set_close(b,c) (int)BIO_ctrl(b,BIO_CTRL_SET_CLOSE,(c),NULL) +# define BIO_get_close(b) (int)BIO_ctrl(b,BIO_CTRL_GET_CLOSE,0,NULL) +# define BIO_pending(b) (int)BIO_ctrl(b,BIO_CTRL_PENDING,0,NULL) +# define BIO_wpending(b) (int)BIO_ctrl(b,BIO_CTRL_WPENDING,0,NULL) +/* ...pending macros have inappropriate return type */ +size_t BIO_ctrl_pending(BIO *b); +size_t BIO_ctrl_wpending(BIO *b); +# define BIO_flush(b) (int)BIO_ctrl(b,BIO_CTRL_FLUSH,0,NULL) +# define BIO_get_info_callback(b,cbp) (int)BIO_ctrl(b,BIO_CTRL_GET_CALLBACK,0, \ + cbp) +# define BIO_set_info_callback(b,cb) (int)BIO_callback_ctrl(b,BIO_CTRL_SET_CALLBACK,cb) + +/* For the BIO_f_buffer() type */ +# define BIO_buffer_get_num_lines(b) BIO_ctrl(b,BIO_CTRL_GET,0,NULL) +# define BIO_buffer_peek(b,s,l) BIO_ctrl(b,BIO_CTRL_PEEK,(l),(s)) + +/* For BIO_s_bio() */ +# define BIO_set_write_buf_size(b,size) (int)BIO_ctrl(b,BIO_C_SET_WRITE_BUF_SIZE,size,NULL) +# define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL) +# define BIO_make_bio_pair(b1,b2) (int)BIO_ctrl(b1,BIO_C_MAKE_BIO_PAIR,0,b2) +# define BIO_destroy_bio_pair(b) (int)BIO_ctrl(b,BIO_C_DESTROY_BIO_PAIR,0,NULL) +# define BIO_shutdown_wr(b) (int)BIO_ctrl(b, BIO_C_SHUTDOWN_WR, 0, NULL) +/* macros with inappropriate type -- but ...pending macros use int too: */ +# define BIO_get_write_guarantee(b) (int)BIO_ctrl(b,BIO_C_GET_WRITE_GUARANTEE,0,NULL) +# define BIO_get_read_request(b) (int)BIO_ctrl(b,BIO_C_GET_READ_REQUEST,0,NULL) +size_t BIO_ctrl_get_write_guarantee(BIO *b); +size_t BIO_ctrl_get_read_request(BIO *b); +int BIO_ctrl_reset_read_request(BIO *b); + +/* ctrl macros for dgram */ +# define BIO_ctrl_dgram_connect(b,peer) \ + (int)BIO_ctrl(b,BIO_CTRL_DGRAM_CONNECT,0, (char *)(peer)) +# define BIO_ctrl_set_connected(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_CONNECTED, 0, (char *)(peer)) +# define BIO_dgram_recv_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_RECV_TIMER_EXP, 0, NULL) +# define BIO_dgram_send_timedout(b) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_SEND_TIMER_EXP, 0, NULL) +# define BIO_dgram_get_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_GET_PEER, 0, (char *)(peer)) +# define BIO_dgram_set_peer(b,peer) \ + (int)BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, (char *)(peer)) +# define BIO_dgram_get_mtu_overhead(b) \ + (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) + +#define BIO_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_BIO, l, p, newf, dupf, freef) +int BIO_set_ex_data(BIO *bio, int idx, void *data); +void *BIO_get_ex_data(BIO *bio, int idx); +uint64_t BIO_number_read(BIO *bio); +uint64_t BIO_number_written(BIO *bio); + +/* For BIO_f_asn1() */ +int BIO_asn1_set_prefix(BIO *b, asn1_ps_func *prefix, + asn1_ps_func *prefix_free); +int BIO_asn1_get_prefix(BIO *b, asn1_ps_func **pprefix, + asn1_ps_func **pprefix_free); +int BIO_asn1_set_suffix(BIO *b, asn1_ps_func *suffix, + asn1_ps_func *suffix_free); +int BIO_asn1_get_suffix(BIO *b, asn1_ps_func **psuffix, + asn1_ps_func **psuffix_free); + +const BIO_METHOD *BIO_s_file(void); +BIO *BIO_new_file(const char *filename, const char *mode); +# ifndef OPENSSL_NO_STDIO +BIO *BIO_new_fp(FILE *stream, int close_flag); +# endif +BIO *BIO_new(const BIO_METHOD *type); +int BIO_free(BIO *a); +void BIO_set_data(BIO *a, void *ptr); +void *BIO_get_data(BIO *a); +void BIO_set_init(BIO *a, int init); +int BIO_get_init(BIO *a); +void BIO_set_shutdown(BIO *a, int shut); +int BIO_get_shutdown(BIO *a); +void BIO_vfree(BIO *a); +int BIO_up_ref(BIO *a); +int BIO_read(BIO *b, void *data, int dlen); +int BIO_read_ex(BIO *b, void *data, size_t dlen, size_t *readbytes); +int BIO_gets(BIO *bp, char *buf, int size); +int BIO_write(BIO *b, const void *data, int dlen); +int BIO_write_ex(BIO *b, const void *data, size_t dlen, size_t *written); +int BIO_puts(BIO *bp, const char *buf); +int BIO_indent(BIO *b, int indent, int max); +long BIO_ctrl(BIO *bp, int cmd, long larg, void *parg); +long BIO_callback_ctrl(BIO *b, int cmd, BIO_info_cb *fp); +void *BIO_ptr_ctrl(BIO *bp, int cmd, long larg); +long BIO_int_ctrl(BIO *bp, int cmd, long larg, int iarg); +BIO *BIO_push(BIO *b, BIO *append); +BIO *BIO_pop(BIO *b); +void BIO_free_all(BIO *a); +BIO *BIO_find_type(BIO *b, int bio_type); +BIO *BIO_next(BIO *b); +void BIO_set_next(BIO *b, BIO *next); +BIO *BIO_get_retry_BIO(BIO *bio, int *reason); +int BIO_get_retry_reason(BIO *bio); +void BIO_set_retry_reason(BIO *bio, int reason); +BIO *BIO_dup_chain(BIO *in); + +int BIO_nread0(BIO *bio, char **buf); +int BIO_nread(BIO *bio, char **buf, int num); +int BIO_nwrite0(BIO *bio, char **buf); +int BIO_nwrite(BIO *bio, char **buf, int num); + +long BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, + long argl, long ret); + +const BIO_METHOD *BIO_s_mem(void); +const BIO_METHOD *BIO_s_secmem(void); +BIO *BIO_new_mem_buf(const void *buf, int len); +# ifndef OPENSSL_NO_SOCK +const BIO_METHOD *BIO_s_socket(void); +const BIO_METHOD *BIO_s_connect(void); +const BIO_METHOD *BIO_s_accept(void); +# endif +const BIO_METHOD *BIO_s_fd(void); +const BIO_METHOD *BIO_s_log(void); +const BIO_METHOD *BIO_s_bio(void); +const BIO_METHOD *BIO_s_null(void); +const BIO_METHOD *BIO_f_null(void); +const BIO_METHOD *BIO_f_buffer(void); +const BIO_METHOD *BIO_f_linebuffer(void); +const BIO_METHOD *BIO_f_nbio_test(void); +# ifndef OPENSSL_NO_DGRAM +const BIO_METHOD *BIO_s_datagram(void); +int BIO_dgram_non_fatal_error(int error); +BIO *BIO_new_dgram(int fd, int close_flag); +# ifndef OPENSSL_NO_SCTP +const BIO_METHOD *BIO_s_datagram_sctp(void); +BIO *BIO_new_dgram_sctp(int fd, int close_flag); +int BIO_dgram_is_sctp(BIO *bio); +int BIO_dgram_sctp_notification_cb(BIO *b, + void (*handle_notifications) (BIO *bio, + void *context, + void *buf), + void *context); +int BIO_dgram_sctp_wait_for_dry(BIO *b); +int BIO_dgram_sctp_msg_waiting(BIO *b); +# endif +# endif + +# ifndef OPENSSL_NO_SOCK +int BIO_sock_should_retry(int i); +int BIO_sock_non_fatal_error(int error); +# endif + +int BIO_fd_should_retry(int i); +int BIO_fd_non_fatal_error(int error); +int BIO_dump_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len); +int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), + void *u, const char *s, int len, int indent); +int BIO_dump(BIO *b, const char *bytes, int len); +int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent); +# ifndef OPENSSL_NO_STDIO +int BIO_dump_fp(FILE *fp, const char *s, int len); +int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent); +# endif +int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data, + int datalen); + +# ifndef OPENSSL_NO_SOCK +BIO_ADDR *BIO_ADDR_new(void); +int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, + const void *where, size_t wherelen, unsigned short port); +void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); +int BIO_ADDR_family(const BIO_ADDR *ap); +int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); +unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap); +char *BIO_ADDR_hostname_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_service_string(const BIO_ADDR *ap, int numeric); +char *BIO_ADDR_path_string(const BIO_ADDR *ap); + +const BIO_ADDRINFO *BIO_ADDRINFO_next(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_family(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai); +int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai); +const BIO_ADDR *BIO_ADDRINFO_address(const BIO_ADDRINFO *bai); +void BIO_ADDRINFO_free(BIO_ADDRINFO *bai); + +enum BIO_hostserv_priorities { + BIO_PARSE_PRIO_HOST, BIO_PARSE_PRIO_SERV +}; +int BIO_parse_hostserv(const char *hostserv, char **host, char **service, + enum BIO_hostserv_priorities hostserv_prio); +enum BIO_lookup_type { + BIO_LOOKUP_CLIENT, BIO_LOOKUP_SERVER +}; +int BIO_lookup(const char *host, const char *service, + enum BIO_lookup_type lookup_type, + int family, int socktype, BIO_ADDRINFO **res); +int BIO_lookup_ex(const char *host, const char *service, + int lookup_type, int family, int socktype, int protocol, + BIO_ADDRINFO **res); +int BIO_sock_error(int sock); +int BIO_socket_ioctl(int fd, long type, void *arg); +int BIO_socket_nbio(int fd, int mode); +int BIO_sock_init(void); +# if OPENSSL_API_COMPAT < 0x10100000L +# define BIO_sock_cleanup() while(0) continue +# endif +int BIO_set_tcp_ndelay(int sock, int turn_on); + +DEPRECATEDIN_1_1_0(struct hostent *BIO_gethostbyname(const char *name)) +DEPRECATEDIN_1_1_0(int BIO_get_port(const char *str, unsigned short *port_ptr)) +DEPRECATEDIN_1_1_0(int BIO_get_host_ip(const char *str, unsigned char *ip)) +DEPRECATEDIN_1_1_0(int BIO_get_accept_socket(char *host_port, int mode)) +DEPRECATEDIN_1_1_0(int BIO_accept(int sock, char **ip_port)) + +union BIO_sock_info_u { + BIO_ADDR *addr; +}; +enum BIO_sock_info_type { + BIO_SOCK_INFO_ADDRESS +}; +int BIO_sock_info(int sock, + enum BIO_sock_info_type type, union BIO_sock_info_u *info); + +# define BIO_SOCK_REUSEADDR 0x01 +# define BIO_SOCK_V6_ONLY 0x02 +# define BIO_SOCK_KEEPALIVE 0x04 +# define BIO_SOCK_NONBLOCK 0x08 +# define BIO_SOCK_NODELAY 0x10 + +int BIO_socket(int domain, int socktype, int protocol, int options); +int BIO_connect(int sock, const BIO_ADDR *addr, int options); +int BIO_bind(int sock, const BIO_ADDR *addr, int options); +int BIO_listen(int sock, const BIO_ADDR *addr, int options); +int BIO_accept_ex(int accept_sock, BIO_ADDR *addr, int options); +int BIO_closesocket(int sock); + +BIO *BIO_new_socket(int sock, int close_flag); +BIO *BIO_new_connect(const char *host_port); +BIO *BIO_new_accept(const char *host_port); +# endif /* OPENSSL_NO_SOCK*/ + +BIO *BIO_new_fd(int fd, int close_flag); + +int BIO_new_bio_pair(BIO **bio1, size_t writebuf1, + BIO **bio2, size_t writebuf2); +/* + * If successful, returns 1 and in *bio1, *bio2 two BIO pair endpoints. + * Otherwise returns 0 and sets *bio1 and *bio2 to NULL. Size 0 uses default + * value. + */ + +void BIO_copy_next_retry(BIO *b); + +/* + * long BIO_ghbn_ctrl(int cmd,int iarg,char *parg); + */ + +# define ossl_bio__attr__(x) +# if defined(__GNUC__) && defined(__STDC_VERSION__) \ + && !defined(__APPLE__) + /* + * Because we support the 'z' modifier, which made its appearance in C99, + * we can't use __attribute__ with pre C99 dialects. + */ +# if __STDC_VERSION__ >= 199901L +# undef ossl_bio__attr__ +# define ossl_bio__attr__ __attribute__ +# if __GNUC__*10 + __GNUC_MINOR__ >= 44 +# define ossl_bio__printf__ __gnu_printf__ +# else +# define ossl_bio__printf__ __printf__ +# endif +# endif +# endif +int BIO_printf(BIO *bio, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 3))); +int BIO_vprintf(BIO *bio, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 2, 0))); +int BIO_snprintf(char *buf, size_t n, const char *format, ...) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 4))); +int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args) +ossl_bio__attr__((__format__(ossl_bio__printf__, 3, 0))); +# undef ossl_bio__attr__ +# undef ossl_bio__printf__ + + +BIO_METHOD *BIO_meth_new(int type, const char *name); +void BIO_meth_free(BIO_METHOD *biom); +int (*BIO_meth_get_write(const BIO_METHOD *biom)) (BIO *, const char *, int); +int (*BIO_meth_get_write_ex(const BIO_METHOD *biom)) (BIO *, const char *, size_t, + size_t *); +int BIO_meth_set_write(BIO_METHOD *biom, + int (*write) (BIO *, const char *, int)); +int BIO_meth_set_write_ex(BIO_METHOD *biom, + int (*bwrite) (BIO *, const char *, size_t, size_t *)); +int (*BIO_meth_get_read(const BIO_METHOD *biom)) (BIO *, char *, int); +int (*BIO_meth_get_read_ex(const BIO_METHOD *biom)) (BIO *, char *, size_t, size_t *); +int BIO_meth_set_read(BIO_METHOD *biom, + int (*read) (BIO *, char *, int)); +int BIO_meth_set_read_ex(BIO_METHOD *biom, + int (*bread) (BIO *, char *, size_t, size_t *)); +int (*BIO_meth_get_puts(const BIO_METHOD *biom)) (BIO *, const char *); +int BIO_meth_set_puts(BIO_METHOD *biom, + int (*puts) (BIO *, const char *)); +int (*BIO_meth_get_gets(const BIO_METHOD *biom)) (BIO *, char *, int); +int BIO_meth_set_gets(BIO_METHOD *biom, + int (*gets) (BIO *, char *, int)); +long (*BIO_meth_get_ctrl(const BIO_METHOD *biom)) (BIO *, int, long, void *); +int BIO_meth_set_ctrl(BIO_METHOD *biom, + long (*ctrl) (BIO *, int, long, void *)); +int (*BIO_meth_get_create(const BIO_METHOD *bion)) (BIO *); +int BIO_meth_set_create(BIO_METHOD *biom, int (*create) (BIO *)); +int (*BIO_meth_get_destroy(const BIO_METHOD *biom)) (BIO *); +int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy) (BIO *)); +long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom)) + (BIO *, int, BIO_info_cb *); +int BIO_meth_set_callback_ctrl(BIO_METHOD *biom, + long (*callback_ctrl) (BIO *, int, + BIO_info_cb *)); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/bioerr.h b/lib/openssl/include/openssl/bioerr.h new file mode 100644 index 0000000..46e2c96 --- /dev/null +++ b/lib/openssl/include/openssl/bioerr.h @@ -0,0 +1,124 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BIOERR_H +# define HEADER_BIOERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BIO_strings(void); + +/* + * BIO function codes. + */ +# define BIO_F_ACPT_STATE 100 +# define BIO_F_ADDRINFO_WRAP 148 +# define BIO_F_ADDR_STRINGS 134 +# define BIO_F_BIO_ACCEPT 101 +# define BIO_F_BIO_ACCEPT_EX 137 +# define BIO_F_BIO_ACCEPT_NEW 152 +# define BIO_F_BIO_ADDR_NEW 144 +# define BIO_F_BIO_BIND 147 +# define BIO_F_BIO_CALLBACK_CTRL 131 +# define BIO_F_BIO_CONNECT 138 +# define BIO_F_BIO_CONNECT_NEW 153 +# define BIO_F_BIO_CTRL 103 +# define BIO_F_BIO_GETS 104 +# define BIO_F_BIO_GET_HOST_IP 106 +# define BIO_F_BIO_GET_NEW_INDEX 102 +# define BIO_F_BIO_GET_PORT 107 +# define BIO_F_BIO_LISTEN 139 +# define BIO_F_BIO_LOOKUP 135 +# define BIO_F_BIO_LOOKUP_EX 143 +# define BIO_F_BIO_MAKE_PAIR 121 +# define BIO_F_BIO_METH_NEW 146 +# define BIO_F_BIO_NEW 108 +# define BIO_F_BIO_NEW_DGRAM_SCTP 145 +# define BIO_F_BIO_NEW_FILE 109 +# define BIO_F_BIO_NEW_MEM_BUF 126 +# define BIO_F_BIO_NREAD 123 +# define BIO_F_BIO_NREAD0 124 +# define BIO_F_BIO_NWRITE 125 +# define BIO_F_BIO_NWRITE0 122 +# define BIO_F_BIO_PARSE_HOSTSERV 136 +# define BIO_F_BIO_PUTS 110 +# define BIO_F_BIO_READ 111 +# define BIO_F_BIO_READ_EX 105 +# define BIO_F_BIO_READ_INTERN 120 +# define BIO_F_BIO_SOCKET 140 +# define BIO_F_BIO_SOCKET_NBIO 142 +# define BIO_F_BIO_SOCK_INFO 141 +# define BIO_F_BIO_SOCK_INIT 112 +# define BIO_F_BIO_WRITE 113 +# define BIO_F_BIO_WRITE_EX 119 +# define BIO_F_BIO_WRITE_INTERN 128 +# define BIO_F_BUFFER_CTRL 114 +# define BIO_F_CONN_CTRL 127 +# define BIO_F_CONN_STATE 115 +# define BIO_F_DGRAM_SCTP_NEW 149 +# define BIO_F_DGRAM_SCTP_READ 132 +# define BIO_F_DGRAM_SCTP_WRITE 133 +# define BIO_F_DOAPR_OUTCH 150 +# define BIO_F_FILE_CTRL 116 +# define BIO_F_FILE_READ 130 +# define BIO_F_LINEBUFFER_CTRL 129 +# define BIO_F_LINEBUFFER_NEW 151 +# define BIO_F_MEM_WRITE 117 +# define BIO_F_NBIOF_NEW 154 +# define BIO_F_SLG_WRITE 155 +# define BIO_F_SSL_NEW 118 + +/* + * BIO reason codes. + */ +# define BIO_R_ACCEPT_ERROR 100 +# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 +# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 +# define BIO_R_BAD_FOPEN_MODE 101 +# define BIO_R_BROKEN_PIPE 124 +# define BIO_R_CONNECT_ERROR 103 +# define BIO_R_GETHOSTBYNAME_ADDR_IS_NOT_AF_INET 107 +# define BIO_R_GETSOCKNAME_ERROR 132 +# define BIO_R_GETSOCKNAME_TRUNCATED_ADDRESS 133 +# define BIO_R_GETTING_SOCKTYPE 134 +# define BIO_R_INVALID_ARGUMENT 125 +# define BIO_R_INVALID_SOCKET 135 +# define BIO_R_IN_USE 123 +# define BIO_R_LENGTH_TOO_LONG 102 +# define BIO_R_LISTEN_V6_ONLY 136 +# define BIO_R_LOOKUP_RETURNED_NOTHING 142 +# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 +# define BIO_R_NBIO_CONNECT_ERROR 110 +# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 +# define BIO_R_NO_HOSTNAME_OR_SERVICE_SPECIFIED 144 +# define BIO_R_NO_PORT_DEFINED 113 +# define BIO_R_NO_SUCH_FILE 128 +# define BIO_R_NULL_PARAMETER 115 +# define BIO_R_UNABLE_TO_BIND_SOCKET 117 +# define BIO_R_UNABLE_TO_CREATE_SOCKET 118 +# define BIO_R_UNABLE_TO_KEEPALIVE 137 +# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 +# define BIO_R_UNABLE_TO_NODELAY 138 +# define BIO_R_UNABLE_TO_REUSEADDR 139 +# define BIO_R_UNAVAILABLE_IP_FAMILY 145 +# define BIO_R_UNINITIALIZED 120 +# define BIO_R_UNKNOWN_INFO_TYPE 140 +# define BIO_R_UNSUPPORTED_IP_FAMILY 146 +# define BIO_R_UNSUPPORTED_METHOD 121 +# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 +# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 +# define BIO_R_WSASTARTUP 122 + +#endif diff --git a/lib/openssl/include/openssl/blowfish.h b/lib/openssl/include/openssl/blowfish.h new file mode 100644 index 0000000..cd3e460 --- /dev/null +++ b/lib/openssl/include/openssl/blowfish.h @@ -0,0 +1,61 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BLOWFISH_H +# define HEADER_BLOWFISH_H + +# include + +# ifndef OPENSSL_NO_BF +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define BF_ENCRYPT 1 +# define BF_DECRYPT 0 + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! BF_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define BF_LONG unsigned int + +# define BF_ROUNDS 16 +# define BF_BLOCK 8 + +typedef struct bf_key_st { + BF_LONG P[BF_ROUNDS + 2]; + BF_LONG S[4 * 256]; +} BF_KEY; + +void BF_set_key(BF_KEY *key, int len, const unsigned char *data); + +void BF_encrypt(BF_LONG *data, const BF_KEY *key); +void BF_decrypt(BF_LONG *data, const BF_KEY *key); + +void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, + const BF_KEY *key, int enc); +void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + const BF_KEY *schedule, unsigned char *ivec, int enc); +void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const BF_KEY *schedule, + unsigned char *ivec, int *num); +const char *BF_options(void); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/bn.h b/lib/openssl/include/openssl/bn.h new file mode 100644 index 0000000..d877660 --- /dev/null +++ b/lib/openssl/include/openssl/bn.h @@ -0,0 +1,539 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BN_H +# define HEADER_BN_H + +# include +# ifndef OPENSSL_NO_STDIO +# include +# endif +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * 64-bit processor with LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT_LONG +# define BN_ULONG unsigned long +# define BN_BYTES 8 +# endif + +/* + * 64-bit processor other than LP64 ABI + */ +# ifdef SIXTY_FOUR_BIT +# define BN_ULONG unsigned long long +# define BN_BYTES 8 +# endif + +# ifdef THIRTY_TWO_BIT +# define BN_ULONG unsigned int +# define BN_BYTES 4 +# endif + +# define BN_BITS2 (BN_BYTES * 8) +# define BN_BITS (BN_BITS2 * 2) +# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) + +# define BN_FLG_MALLOCED 0x01 +# define BN_FLG_STATIC_DATA 0x02 + +/* + * avoid leaking exponent information through timing, + * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, + * BN_div() will call BN_div_no_branch, + * BN_mod_inverse() will call bn_mod_inverse_no_branch. + */ +# define BN_FLG_CONSTTIME 0x04 +# define BN_FLG_SECURE 0x08 + +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag */ +# define BN_FLG_EXP_CONSTTIME BN_FLG_CONSTTIME +# define BN_FLG_FREE 0x8000 /* used for debugging */ +# endif + +void BN_set_flags(BIGNUM *b, int n); +int BN_get_flags(const BIGNUM *b, int n); + +/* Values for |top| in BN_rand() */ +#define BN_RAND_TOP_ANY -1 +#define BN_RAND_TOP_ONE 0 +#define BN_RAND_TOP_TWO 1 + +/* Values for |bottom| in BN_rand() */ +#define BN_RAND_BOTTOM_ANY 0 +#define BN_RAND_BOTTOM_ODD 1 + +/* + * get a clone of a BIGNUM with changed flags, for *temporary* use only (the + * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The + * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that + * has not been otherwise initialised or used. + */ +void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); + +/* Wrapper function to make using BN_GENCB easier */ +int BN_GENCB_call(BN_GENCB *cb, int a, int b); + +BN_GENCB *BN_GENCB_new(void); +void BN_GENCB_free(BN_GENCB *cb); + +/* Populate a BN_GENCB structure with an "old"-style callback */ +void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), + void *cb_arg); + +/* Populate a BN_GENCB structure with a "new"-style callback */ +void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), + void *cb_arg); + +void *BN_GENCB_get_arg(BN_GENCB *cb); + +# define BN_prime_checks 0 /* default: select number of iterations based + * on the size of the number */ + +/* + * BN_prime_checks_for_size() returns the number of Miller-Rabin iterations + * that will be done for checking that a random number is probably prime. The + * error rate for accepting a composite number as prime depends on the size of + * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, + * and so the level is what you would expect for a key of double the size of the + * prime. + * + * This table is generated using the algorithm of FIPS PUB 186-4 + * Digital Signature Standard (DSS), section F.1, page 117. + * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) + * + * The following magma script was used to generate the output: + * securitybits:=125; + * k:=1024; + * for t:=1 to 65 do + * for M:=3 to Floor(2*Sqrt(k-1)-1) do + * S:=0; + * // Sum over m + * for m:=3 to M do + * s:=0; + * // Sum over j + * for j:=2 to m do + * s+:=(RealField(32)!2)^-(j+(k-1)/j); + * end for; + * S+:=2^(m-(m-1)*t)*s; + * end for; + * A:=2^(k-2-M*t); + * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; + * pkt:=2.00743*Log(2)*k*2^-k*(A+B); + * seclevel:=Floor(-Log(2,pkt)); + * if seclevel ge securitybits then + * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; + * break; + * end if; + * end for; + * if seclevel ge securitybits then break; end if; + * end for; + * + * It can be run online at: + * http://magma.maths.usyd.edu.au/calc + * + * And will output: + * k: 1024, security: 129 bits (t: 6, M: 23) + * + * k is the number of bits of the prime, securitybits is the level we want to + * reach. + * + * prime length | RSA key size | # MR tests | security level + * -------------+--------------|------------+--------------- + * (b) >= 6394 | >= 12788 | 3 | 256 bit + * (b) >= 3747 | >= 7494 | 3 | 192 bit + * (b) >= 1345 | >= 2690 | 4 | 128 bit + * (b) >= 1080 | >= 2160 | 5 | 128 bit + * (b) >= 852 | >= 1704 | 5 | 112 bit + * (b) >= 476 | >= 952 | 5 | 80 bit + * (b) >= 400 | >= 800 | 6 | 80 bit + * (b) >= 347 | >= 694 | 7 | 80 bit + * (b) >= 308 | >= 616 | 8 | 80 bit + * (b) >= 55 | >= 110 | 27 | 64 bit + * (b) >= 6 | >= 12 | 34 | 64 bit + */ + +# define BN_prime_checks_for_size(b) ((b) >= 3747 ? 3 : \ + (b) >= 1345 ? 4 : \ + (b) >= 476 ? 5 : \ + (b) >= 400 ? 6 : \ + (b) >= 347 ? 7 : \ + (b) >= 308 ? 8 : \ + (b) >= 55 ? 27 : \ + /* b >= 6 */ 34) + +# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) + +int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_zero(const BIGNUM *a); +int BN_is_one(const BIGNUM *a); +int BN_is_word(const BIGNUM *a, const BN_ULONG w); +int BN_is_odd(const BIGNUM *a); + +# define BN_one(a) (BN_set_word((a),1)) + +void BN_zero_ex(BIGNUM *a); + +# if OPENSSL_API_COMPAT >= 0x00908000L +# define BN_zero(a) BN_zero_ex(a) +# else +# define BN_zero(a) (BN_set_word((a),0)) +# endif + +const BIGNUM *BN_value_one(void); +char *BN_options(void); +BN_CTX *BN_CTX_new(void); +BN_CTX *BN_CTX_secure_new(void); +void BN_CTX_free(BN_CTX *c); +void BN_CTX_start(BN_CTX *ctx); +BIGNUM *BN_CTX_get(BN_CTX *ctx); +void BN_CTX_end(BN_CTX *ctx); +int BN_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_priv_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_priv_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom); +int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range); +int BN_num_bits(const BIGNUM *a); +int BN_num_bits_word(BN_ULONG l); +int BN_security_bits(int L, int N); +BIGNUM *BN_new(void); +BIGNUM *BN_secure_new(void); +void BN_clear_free(BIGNUM *a); +BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); +void BN_swap(BIGNUM *a, BIGNUM *b); +BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2bin(const BIGNUM *a, unsigned char *to); +int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); +BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); +int BN_bn2mpi(const BIGNUM *a, unsigned char *to); +int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); +/** BN_set_negative sets sign of a BIGNUM + * \param b pointer to the BIGNUM object + * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise + */ +void BN_set_negative(BIGNUM *b, int n); +/** BN_is_negative returns 1 if the BIGNUM is negative + * \param b pointer to the BIGNUM object + * \return 1 if a < 0 and 0 otherwise + */ +int BN_is_negative(const BIGNUM *b); + +int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, + BN_CTX *ctx); +# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) +int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); +int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *m); +int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); +int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); +int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, + BN_CTX *ctx); +int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); + +BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); +BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); +int BN_mul_word(BIGNUM *a, BN_ULONG w); +int BN_add_word(BIGNUM *a, BN_ULONG w); +int BN_sub_word(BIGNUM *a, BN_ULONG w); +int BN_set_word(BIGNUM *a, BN_ULONG w); +BN_ULONG BN_get_word(const BIGNUM *a); + +int BN_cmp(const BIGNUM *a, const BIGNUM *b); +void BN_free(BIGNUM *a); +int BN_is_bit_set(const BIGNUM *a, int n); +int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_lshift1(BIGNUM *r, const BIGNUM *a); +int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, + BN_MONT_CTX *in_mont); +int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, + const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, + BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int BN_mod_exp_simple(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); + +int BN_mask_bits(BIGNUM *a, int n); +# ifndef OPENSSL_NO_STDIO +int BN_print_fp(FILE *fp, const BIGNUM *a); +# endif +int BN_print(BIO *bio, const BIGNUM *a); +int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); +int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); +int BN_rshift1(BIGNUM *r, const BIGNUM *a); +void BN_clear(BIGNUM *a); +BIGNUM *BN_dup(const BIGNUM *a); +int BN_ucmp(const BIGNUM *a, const BIGNUM *b); +int BN_set_bit(BIGNUM *a, int n); +int BN_clear_bit(BIGNUM *a, int n); +char *BN_bn2hex(const BIGNUM *a); +char *BN_bn2dec(const BIGNUM *a); +int BN_hex2bn(BIGNUM **a, const char *str); +int BN_dec2bn(BIGNUM **a, const char *str); +int BN_asc2bn(BIGNUM **a, const char *str); +int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); +int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); /* returns + * -2 for + * error */ +BIGNUM *BN_mod_inverse(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); +BIGNUM *BN_mod_sqrt(BIGNUM *ret, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); + +void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); + +/* Deprecated versions */ +DEPRECATEDIN_0_9_8(BIGNUM *BN_generate_prime(BIGNUM *ret, int bits, int safe, + const BIGNUM *add, + const BIGNUM *rem, + void (*callback) (int, int, + void *), + void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg)) +DEPRECATEDIN_0_9_8(int + BN_is_prime_fasttest(const BIGNUM *p, int nchecks, + void (*callback) (int, int, void *), + BN_CTX *ctx, void *cb_arg, + int do_trial_division)) + +/* Newer versions */ +int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe, const BIGNUM *add, + const BIGNUM *rem, BN_GENCB *cb); +int BN_is_prime_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, BN_GENCB *cb); +int BN_is_prime_fasttest_ex(const BIGNUM *p, int nchecks, BN_CTX *ctx, + int do_trial_division, BN_GENCB *cb); + +int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx); + +int BN_X931_derive_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, + const BIGNUM *Xp, const BIGNUM *Xp1, + const BIGNUM *Xp2, const BIGNUM *e, BN_CTX *ctx, + BN_GENCB *cb); +int BN_X931_generate_prime_ex(BIGNUM *p, BIGNUM *p1, BIGNUM *p2, BIGNUM *Xp1, + BIGNUM *Xp2, const BIGNUM *Xp, const BIGNUM *e, + BN_CTX *ctx, BN_GENCB *cb); + +BN_MONT_CTX *BN_MONT_CTX_new(void); +int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + BN_MONT_CTX *mont, BN_CTX *ctx); +int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *ctx); +int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, + BN_CTX *ctx); +void BN_MONT_CTX_free(BN_MONT_CTX *mont); +int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); +BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); +BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, + const BIGNUM *mod, BN_CTX *ctx); + +/* BN_BLINDING flags */ +# define BN_BLINDING_NO_UPDATE 0x00000001 +# define BN_BLINDING_NO_RECREATE 0x00000002 + +BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); +void BN_BLINDING_free(BN_BLINDING *b); +int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); +int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); +int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, + BN_CTX *); + +int BN_BLINDING_is_current_thread(BN_BLINDING *b); +void BN_BLINDING_set_current_thread(BN_BLINDING *b); +int BN_BLINDING_lock(BN_BLINDING *b); +int BN_BLINDING_unlock(BN_BLINDING *b); + +unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); +void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); +BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, + const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx), + BN_MONT_CTX *m_ctx); + +DEPRECATEDIN_0_9_8(void BN_set_params(int mul, int high, int low, int mont)) +DEPRECATEDIN_0_9_8(int BN_get_params(int which)) /* 0, mul, 1 high, 2 low, 3 + * mont */ + +BN_RECP_CTX *BN_RECP_CTX_new(void); +void BN_RECP_CTX_free(BN_RECP_CTX *recp); +int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); +int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, + BN_RECP_CTX *recp, BN_CTX *ctx); +int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx); +int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, + BN_RECP_CTX *recp, BN_CTX *ctx); + +# ifndef OPENSSL_NO_EC2M + +/* + * Functions for arithmetic over binary polynomials represented by BIGNUMs. + * The BIGNUM::neg property of BIGNUMs representing binary polynomials is + * ignored. Note that input arguments are not const so that their bit arrays + * can be expanded to the appropriate size if needed. + */ + +/* + * r = a + b + */ +int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); +# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) +/* + * r=a mod p + */ +int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const BIGNUM *p, BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + BN_CTX *ctx); +# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) +/*- + * Some functions allow for representation of the irreducible polynomials + * as an unsigned int[], say p. The irreducible f(t) is then of the form: + * t^p[0] + t^p[1] + ... + t^p[k] + * where m = p[0] > p[1] > ... > p[k] = 0. + */ +/* r = a mod p */ +int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); +/* r = (a * b) mod p */ +int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a * a) mod p */ +int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], + BN_CTX *ctx); +/* r = (1 / b) mod p */ +int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], + BN_CTX *ctx); +/* r = (a / b) mod p */ +int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = (a ^ b) mod p */ +int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, + const int p[], BN_CTX *ctx); +/* r = sqrt(a) mod p */ +int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +/* r^2 + r = a mod p */ +int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, + const int p[], BN_CTX *ctx); +int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); +int BN_GF2m_arr2poly(const int p[], BIGNUM *a); + +# endif + +/* + * faster mod functions for the 'NIST primes' 0 <= a < p^2 + */ +int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); +int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); + +const BIGNUM *BN_get0_nist_prime_192(void); +const BIGNUM *BN_get0_nist_prime_224(void); +const BIGNUM *BN_get0_nist_prime_256(void); +const BIGNUM *BN_get0_nist_prime_384(void); +const BIGNUM *BN_get0_nist_prime_521(void); + +int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, + const BIGNUM *field, BN_CTX *ctx); + +int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, + const BIGNUM *priv, const unsigned char *message, + size_t message_len, BN_CTX *ctx); + +/* Primes from RFC 2409 */ +BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); +BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); + +/* Primes from RFC 3526 */ +BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); +BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define get_rfc2409_prime_768 BN_get_rfc2409_prime_768 +# define get_rfc2409_prime_1024 BN_get_rfc2409_prime_1024 +# define get_rfc3526_prime_1536 BN_get_rfc3526_prime_1536 +# define get_rfc3526_prime_2048 BN_get_rfc3526_prime_2048 +# define get_rfc3526_prime_3072 BN_get_rfc3526_prime_3072 +# define get_rfc3526_prime_4096 BN_get_rfc3526_prime_4096 +# define get_rfc3526_prime_6144 BN_get_rfc3526_prime_6144 +# define get_rfc3526_prime_8192 BN_get_rfc3526_prime_8192 +# endif + +int BN_bntest_rand(BIGNUM *rnd, int bits, int top, int bottom); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/bnerr.h b/lib/openssl/include/openssl/bnerr.h new file mode 100644 index 0000000..5c83777 --- /dev/null +++ b/lib/openssl/include/openssl/bnerr.h @@ -0,0 +1,101 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BNERR_H +# define HEADER_BNERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BN_strings(void); + +/* + * BN function codes. + */ +# define BN_F_BNRAND 127 +# define BN_F_BNRAND_RANGE 138 +# define BN_F_BN_BLINDING_CONVERT_EX 100 +# define BN_F_BN_BLINDING_CREATE_PARAM 128 +# define BN_F_BN_BLINDING_INVERT_EX 101 +# define BN_F_BN_BLINDING_NEW 102 +# define BN_F_BN_BLINDING_UPDATE 103 +# define BN_F_BN_BN2DEC 104 +# define BN_F_BN_BN2HEX 105 +# define BN_F_BN_COMPUTE_WNAF 142 +# define BN_F_BN_CTX_GET 116 +# define BN_F_BN_CTX_NEW 106 +# define BN_F_BN_CTX_START 129 +# define BN_F_BN_DIV 107 +# define BN_F_BN_DIV_RECP 130 +# define BN_F_BN_EXP 123 +# define BN_F_BN_EXPAND_INTERNAL 120 +# define BN_F_BN_GENCB_NEW 143 +# define BN_F_BN_GENERATE_DSA_NONCE 140 +# define BN_F_BN_GENERATE_PRIME_EX 141 +# define BN_F_BN_GF2M_MOD 131 +# define BN_F_BN_GF2M_MOD_EXP 132 +# define BN_F_BN_GF2M_MOD_MUL 133 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD 134 +# define BN_F_BN_GF2M_MOD_SOLVE_QUAD_ARR 135 +# define BN_F_BN_GF2M_MOD_SQR 136 +# define BN_F_BN_GF2M_MOD_SQRT 137 +# define BN_F_BN_LSHIFT 145 +# define BN_F_BN_MOD_EXP2_MONT 118 +# define BN_F_BN_MOD_EXP_MONT 109 +# define BN_F_BN_MOD_EXP_MONT_CONSTTIME 124 +# define BN_F_BN_MOD_EXP_MONT_WORD 117 +# define BN_F_BN_MOD_EXP_RECP 125 +# define BN_F_BN_MOD_EXP_SIMPLE 126 +# define BN_F_BN_MOD_INVERSE 110 +# define BN_F_BN_MOD_INVERSE_NO_BRANCH 139 +# define BN_F_BN_MOD_LSHIFT_QUICK 119 +# define BN_F_BN_MOD_SQRT 121 +# define BN_F_BN_MONT_CTX_NEW 149 +# define BN_F_BN_MPI2BN 112 +# define BN_F_BN_NEW 113 +# define BN_F_BN_POOL_GET 147 +# define BN_F_BN_RAND 114 +# define BN_F_BN_RAND_RANGE 122 +# define BN_F_BN_RECP_CTX_NEW 150 +# define BN_F_BN_RSHIFT 146 +# define BN_F_BN_SET_WORDS 144 +# define BN_F_BN_STACK_PUSH 148 +# define BN_F_BN_USUB 115 +# define BN_F_OSSL_BN_RSA_DO_UNBLIND 151 + +/* + * BN reason codes. + */ +# define BN_R_ARG2_LT_ARG3 100 +# define BN_R_BAD_RECIPROCAL 101 +# define BN_R_BIGNUM_TOO_LONG 114 +# define BN_R_BITS_TOO_SMALL 118 +# define BN_R_CALLED_WITH_EVEN_MODULUS 102 +# define BN_R_DIV_BY_ZERO 103 +# define BN_R_ENCODING_ERROR 104 +# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 +# define BN_R_INPUT_NOT_REDUCED 110 +# define BN_R_INVALID_LENGTH 106 +# define BN_R_INVALID_RANGE 115 +# define BN_R_INVALID_SHIFT 119 +# define BN_R_NOT_A_SQUARE 111 +# define BN_R_NOT_INITIALIZED 107 +# define BN_R_NO_INVERSE 108 +# define BN_R_NO_SOLUTION 116 +# define BN_R_PRIVATE_KEY_TOO_LARGE 117 +# define BN_R_P_IS_NOT_PRIME 112 +# define BN_R_TOO_MANY_ITERATIONS 113 +# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 + +#endif diff --git a/lib/openssl/include/openssl/buffer.h b/lib/openssl/include/openssl/buffer.h new file mode 100644 index 0000000..d276576 --- /dev/null +++ b/lib/openssl/include/openssl/buffer.h @@ -0,0 +1,58 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFFER_H +# define HEADER_BUFFER_H + +# include +# ifndef HEADER_CRYPTO_H +# include +# endif +# include + + +#ifdef __cplusplus +extern "C" { +#endif + +# include +# include + +/* + * These names are outdated as of OpenSSL 1.1; a future release + * will move them to be deprecated. + */ +# define BUF_strdup(s) OPENSSL_strdup(s) +# define BUF_strndup(s, size) OPENSSL_strndup(s, size) +# define BUF_memdup(data, size) OPENSSL_memdup(data, size) +# define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) +# define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) +# define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) + +struct buf_mem_st { + size_t length; /* current number of bytes */ + char *data; + size_t max; /* size of buffer */ + unsigned long flags; +}; + +# define BUF_MEM_FLAG_SECURE 0x01 + +BUF_MEM *BUF_MEM_new(void); +BUF_MEM *BUF_MEM_new_ex(unsigned long flags); +void BUF_MEM_free(BUF_MEM *a); +size_t BUF_MEM_grow(BUF_MEM *str, size_t len); +size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); +void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/buffererr.h b/lib/openssl/include/openssl/buffererr.h new file mode 100644 index 0000000..04f6ff7 --- /dev/null +++ b/lib/openssl/include/openssl/buffererr.h @@ -0,0 +1,34 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_BUFERR_H +# define HEADER_BUFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_BUF_strings(void); + +/* + * BUF function codes. + */ +# define BUF_F_BUF_MEM_GROW 100 +# define BUF_F_BUF_MEM_GROW_CLEAN 105 +# define BUF_F_BUF_MEM_NEW 101 + +/* + * BUF reason codes. + */ + +#endif diff --git a/lib/openssl/include/openssl/camellia.h b/lib/openssl/include/openssl/camellia.h new file mode 100644 index 0000000..151f3c1 --- /dev/null +++ b/lib/openssl/include/openssl/camellia.h @@ -0,0 +1,83 @@ +/* + * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAMELLIA_H +# define HEADER_CAMELLIA_H + +# include + +# ifndef OPENSSL_NO_CAMELLIA +# include +#ifdef __cplusplus +extern "C" { +#endif + +# define CAMELLIA_ENCRYPT 1 +# define CAMELLIA_DECRYPT 0 + +/* + * Because array size can't be a const in C, the following two are macros. + * Both sizes are in bytes. + */ + +/* This should be a hidden type, but EVP requires that the size be known */ + +# define CAMELLIA_BLOCK_SIZE 16 +# define CAMELLIA_TABLE_BYTE_LEN 272 +# define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) + +typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; /* to match + * with WORD */ + +struct camellia_key_st { + union { + double d; /* ensures 64-bit align */ + KEY_TABLE_TYPE rd_key; + } u; + int grand_rounds; +}; +typedef struct camellia_key_st CAMELLIA_KEY; + +int Camellia_set_key(const unsigned char *userKey, const int bits, + CAMELLIA_KEY *key); + +void Camellia_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); +void Camellia_decrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key); + +void Camellia_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAMELLIA_KEY *key, const int enc); +void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, const int enc); +void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num, const int enc); +void Camellia_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char *ivec, int *num); +void Camellia_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const CAMELLIA_KEY *key, + unsigned char ivec[CAMELLIA_BLOCK_SIZE], + unsigned char ecount_buf[CAMELLIA_BLOCK_SIZE], + unsigned int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/cast.h b/lib/openssl/include/openssl/cast.h new file mode 100644 index 0000000..2cc89ae --- /dev/null +++ b/lib/openssl/include/openssl/cast.h @@ -0,0 +1,53 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CAST_H +# define HEADER_CAST_H + +# include + +# ifndef OPENSSL_NO_CAST +# ifdef __cplusplus +extern "C" { +# endif + +# define CAST_ENCRYPT 1 +# define CAST_DECRYPT 0 + +# define CAST_LONG unsigned int + +# define CAST_BLOCK 8 +# define CAST_KEY_LENGTH 16 + +typedef struct cast_key_st { + CAST_LONG data[32]; + int short_key; /* Use reduced rounds for short key */ +} CAST_KEY; + +void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); +void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, + const CAST_KEY *key, int enc); +void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); +void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *ks, unsigned char *iv, + int enc); +void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, const CAST_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/cmac.h b/lib/openssl/include/openssl/cmac.h new file mode 100644 index 0000000..3535a9a --- /dev/null +++ b/lib/openssl/include/openssl/cmac.h @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMAC_H +# define HEADER_CMAC_H + +# ifndef OPENSSL_NO_CMAC + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +/* Opaque */ +typedef struct CMAC_CTX_st CMAC_CTX; + +CMAC_CTX *CMAC_CTX_new(void); +void CMAC_CTX_cleanup(CMAC_CTX *ctx); +void CMAC_CTX_free(CMAC_CTX *ctx); +EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); +int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); + +int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, + const EVP_CIPHER *cipher, ENGINE *impl); +int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); +int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); +int CMAC_resume(CMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +# endif +#endif diff --git a/lib/openssl/include/openssl/cms.h b/lib/openssl/include/openssl/cms.h new file mode 100644 index 0000000..c762796 --- /dev/null +++ b/lib/openssl/include/openssl/cms.h @@ -0,0 +1,339 @@ +/* + * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMS_H +# define HEADER_CMS_H + +# include + +# ifndef OPENSSL_NO_CMS +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct CMS_ContentInfo_st CMS_ContentInfo; +typedef struct CMS_SignerInfo_st CMS_SignerInfo; +typedef struct CMS_CertificateChoices CMS_CertificateChoices; +typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice; +typedef struct CMS_RecipientInfo_st CMS_RecipientInfo; +typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest; +typedef struct CMS_Receipt_st CMS_Receipt; +typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey; +typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; + +DEFINE_STACK_OF(CMS_SignerInfo) +DEFINE_STACK_OF(CMS_RecipientEncryptedKey) +DEFINE_STACK_OF(CMS_RecipientInfo) +DEFINE_STACK_OF(CMS_RevocationInfoChoice) +DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) +DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest) +DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo) + +# define CMS_SIGNERINFO_ISSUER_SERIAL 0 +# define CMS_SIGNERINFO_KEYIDENTIFIER 1 + +# define CMS_RECIPINFO_NONE -1 +# define CMS_RECIPINFO_TRANS 0 +# define CMS_RECIPINFO_AGREE 1 +# define CMS_RECIPINFO_KEK 2 +# define CMS_RECIPINFO_PASS 3 +# define CMS_RECIPINFO_OTHER 4 + +/* S/MIME related flags */ + +# define CMS_TEXT 0x1 +# define CMS_NOCERTS 0x2 +# define CMS_NO_CONTENT_VERIFY 0x4 +# define CMS_NO_ATTR_VERIFY 0x8 +# define CMS_NOSIGS \ + (CMS_NO_CONTENT_VERIFY|CMS_NO_ATTR_VERIFY) +# define CMS_NOINTERN 0x10 +# define CMS_NO_SIGNER_CERT_VERIFY 0x20 +# define CMS_NOVERIFY 0x20 +# define CMS_DETACHED 0x40 +# define CMS_BINARY 0x80 +# define CMS_NOATTR 0x100 +# define CMS_NOSMIMECAP 0x200 +# define CMS_NOOLDMIMETYPE 0x400 +# define CMS_CRLFEOL 0x800 +# define CMS_STREAM 0x1000 +# define CMS_NOCRL 0x2000 +# define CMS_PARTIAL 0x4000 +# define CMS_REUSE_DIGEST 0x8000 +# define CMS_USE_KEYID 0x10000 +# define CMS_DEBUG_DECRYPT 0x20000 +# define CMS_KEY_PARAM 0x40000 +# define CMS_ASCIICRLF 0x80000 + +const ASN1_OBJECT *CMS_get0_type(const CMS_ContentInfo *cms); + +BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont); +int CMS_dataFinal(CMS_ContentInfo *cms, BIO *bio); + +ASN1_OCTET_STRING **CMS_get0_content(CMS_ContentInfo *cms); +int CMS_is_detached(CMS_ContentInfo *cms); +int CMS_set_detached(CMS_ContentInfo *cms, int detached); + +# ifdef HEADER_PEM_H +DECLARE_PEM_rw_const(CMS, CMS_ContentInfo) +# endif +int CMS_stream(unsigned char ***boundary, CMS_ContentInfo *cms); +CMS_ContentInfo *d2i_CMS_bio(BIO *bp, CMS_ContentInfo **cms); +int i2d_CMS_bio(BIO *bp, CMS_ContentInfo *cms); + +BIO *BIO_new_CMS(BIO *out, CMS_ContentInfo *cms); +int i2d_CMS_bio_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, int flags); +int PEM_write_bio_CMS_stream(BIO *out, CMS_ContentInfo *cms, BIO *in, + int flags); +CMS_ContentInfo *SMIME_read_CMS(BIO *bio, BIO **bcont); +int SMIME_write_CMS(BIO *bio, CMS_ContentInfo *cms, BIO *data, int flags); + +int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, + unsigned int flags); + +CMS_ContentInfo *CMS_sign(X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, BIO *data, + unsigned int flags); + +CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, + X509 *signcert, EVP_PKEY *pkey, + STACK_OF(X509) *certs, unsigned int flags); + +int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); +CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); + +int CMS_digest_verify(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_digest_create(BIO *in, const EVP_MD *md, + unsigned int flags); + +int CMS_EncryptedData_decrypt(CMS_ContentInfo *cms, + const unsigned char *key, size_t keylen, + BIO *dcont, BIO *out, unsigned int flags); + +CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, + const unsigned char *key, + size_t keylen, unsigned int flags); + +int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, + const unsigned char *key, size_t keylen); + +int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + X509_STORE *store, BIO *dcont, BIO *out, unsigned int flags); + +int CMS_verify_receipt(CMS_ContentInfo *rcms, CMS_ContentInfo *ocms, + STACK_OF(X509) *certs, + X509_STORE *store, unsigned int flags); + +STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms); + +CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, + const EVP_CIPHER *cipher, unsigned int flags); + +int CMS_decrypt(CMS_ContentInfo *cms, EVP_PKEY *pkey, X509 *cert, + BIO *dcont, BIO *out, unsigned int flags); + +int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert); +int CMS_decrypt_set1_key(CMS_ContentInfo *cms, + unsigned char *key, size_t keylen, + const unsigned char *id, size_t idlen); +int CMS_decrypt_set1_password(CMS_ContentInfo *cms, + unsigned char *pass, ossl_ssize_t passlen); + +STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms); +int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); +EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); +CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher); +CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms, + X509 *recip, unsigned int flags); +int CMS_RecipientInfo_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pkey); +int CMS_RecipientInfo_ktri_cert_cmp(CMS_RecipientInfo *ri, X509 *cert); +int CMS_RecipientInfo_ktri_get0_algs(CMS_RecipientInfo *ri, + EVP_PKEY **pk, X509 **recip, + X509_ALGOR **palg); +int CMS_RecipientInfo_ktri_get0_signer_id(CMS_RecipientInfo *ri, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid, + unsigned char *key, size_t keylen, + unsigned char *id, size_t idlen, + ASN1_GENERALIZEDTIME *date, + ASN1_OBJECT *otherTypeId, + ASN1_TYPE *otherType); + +int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pid, + ASN1_GENERALIZEDTIME **pdate, + ASN1_OBJECT **potherid, + ASN1_TYPE **pothertype); + +int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, + unsigned char *key, size_t keylen); + +int CMS_RecipientInfo_kekri_id_cmp(CMS_RecipientInfo *ri, + const unsigned char *id, size_t idlen); + +int CMS_RecipientInfo_set0_password(CMS_RecipientInfo *ri, + unsigned char *pass, + ossl_ssize_t passlen); + +CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, + int iter, int wrap_nid, + int pbe_nid, + unsigned char *pass, + ossl_ssize_t passlen, + const EVP_CIPHER *kekciph); + +int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); +int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri); + +int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out, + unsigned int flags); +CMS_ContentInfo *CMS_compress(BIO *in, int comp_nid, unsigned int flags); + +int CMS_set1_eContentType(CMS_ContentInfo *cms, const ASN1_OBJECT *oid); +const ASN1_OBJECT *CMS_get0_eContentType(CMS_ContentInfo *cms); + +CMS_CertificateChoices *CMS_add0_CertificateChoices(CMS_ContentInfo *cms); +int CMS_add0_cert(CMS_ContentInfo *cms, X509 *cert); +int CMS_add1_cert(CMS_ContentInfo *cms, X509 *cert); +STACK_OF(X509) *CMS_get1_certs(CMS_ContentInfo *cms); + +CMS_RevocationInfoChoice *CMS_add0_RevocationInfoChoice(CMS_ContentInfo *cms); +int CMS_add0_crl(CMS_ContentInfo *cms, X509_CRL *crl); +int CMS_add1_crl(CMS_ContentInfo *cms, X509_CRL *crl); +STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms); + +int CMS_SignedData_init(CMS_ContentInfo *cms); +CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, + X509 *signer, EVP_PKEY *pk, const EVP_MD *md, + unsigned int flags); +EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si); +EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si); +STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms); + +void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer); +int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert); +int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs, + unsigned int flags); +void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk, + X509 **signer, X509_ALGOR **pdig, + X509_ALGOR **psig); +ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si); +int CMS_SignerInfo_sign(CMS_SignerInfo *si); +int CMS_SignerInfo_verify(CMS_SignerInfo *si); +int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain); + +int CMS_add_smimecap(CMS_SignerInfo *si, STACK_OF(X509_ALGOR) *algs); +int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs, + int algnid, int keysize); +int CMS_add_standard_smimecap(STACK_OF(X509_ALGOR) **smcap); + +int CMS_signed_get_attr_count(const CMS_SignerInfo *si); +int CMS_signed_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_signed_get_attr_by_OBJ(const CMS_SignerInfo *si, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *CMS_signed_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_signed_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_signed_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_signed_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_signed_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_signed_get0_data_by_OBJ(CMS_SignerInfo *si, const ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_unsigned_get_attr_count(const CMS_SignerInfo *si); +int CMS_unsigned_get_attr_by_NID(const CMS_SignerInfo *si, int nid, + int lastpos); +int CMS_unsigned_get_attr_by_OBJ(const CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *CMS_unsigned_get_attr(const CMS_SignerInfo *si, int loc); +X509_ATTRIBUTE *CMS_unsigned_delete_attr(CMS_SignerInfo *si, int loc); +int CMS_unsigned_add1_attr(CMS_SignerInfo *si, X509_ATTRIBUTE *attr); +int CMS_unsigned_add1_attr_by_OBJ(CMS_SignerInfo *si, + const ASN1_OBJECT *obj, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_NID(CMS_SignerInfo *si, + int nid, int type, + const void *bytes, int len); +int CMS_unsigned_add1_attr_by_txt(CMS_SignerInfo *si, + const char *attrname, int type, + const void *bytes, int len); +void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid, + int lastpos, int type); + +int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr); +CMS_ReceiptRequest *CMS_ReceiptRequest_create0(unsigned char *id, int idlen, + int allorfirst, + STACK_OF(GENERAL_NAMES) + *receiptList, STACK_OF(GENERAL_NAMES) + *receiptsTo); +int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); +void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, + ASN1_STRING **pcid, + int *pallorfirst, + STACK_OF(GENERAL_NAMES) **plist, + STACK_OF(GENERAL_NAMES) **prto); +int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri, + X509_ALGOR **palg, + ASN1_OCTET_STRING **pukm); +STACK_OF(CMS_RecipientEncryptedKey) +*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri); + +int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri, + X509_ALGOR **pubalg, + ASN1_BIT_STRING **pubkey, + ASN1_OCTET_STRING **keyid, + X509_NAME **issuer, + ASN1_INTEGER **sno); + +int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert); + +int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek, + ASN1_OCTET_STRING **keyid, + ASN1_GENERALIZEDTIME **tm, + CMS_OtherKeyAttribute **other, + X509_NAME **issuer, ASN1_INTEGER **sno); +int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek, + X509 *cert); +int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk); +EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri); +int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, + CMS_RecipientInfo *ri, + CMS_RecipientEncryptedKey *rek); + +int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg, + ASN1_OCTET_STRING *ukm, int keylen); + +/* Backward compatibility for spelling errors. */ +# define CMS_R_UNKNOWN_DIGEST_ALGORITM CMS_R_UNKNOWN_DIGEST_ALGORITHM +# define CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE \ + CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/cmserr.h b/lib/openssl/include/openssl/cmserr.h new file mode 100644 index 0000000..d589f59 --- /dev/null +++ b/lib/openssl/include/openssl/cmserr.h @@ -0,0 +1,203 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CMSERR_H +# define HEADER_CMSERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_CMS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CMS_strings(void); + +/* + * CMS function codes. + */ +# define CMS_F_CHECK_CONTENT 99 +# define CMS_F_CMS_ADD0_CERT 164 +# define CMS_F_CMS_ADD0_RECIPIENT_KEY 100 +# define CMS_F_CMS_ADD0_RECIPIENT_PASSWORD 165 +# define CMS_F_CMS_ADD1_RECEIPTREQUEST 158 +# define CMS_F_CMS_ADD1_RECIPIENT_CERT 101 +# define CMS_F_CMS_ADD1_SIGNER 102 +# define CMS_F_CMS_ADD1_SIGNINGTIME 103 +# define CMS_F_CMS_COMPRESS 104 +# define CMS_F_CMS_COMPRESSEDDATA_CREATE 105 +# define CMS_F_CMS_COMPRESSEDDATA_INIT_BIO 106 +# define CMS_F_CMS_COPY_CONTENT 107 +# define CMS_F_CMS_COPY_MESSAGEDIGEST 108 +# define CMS_F_CMS_DATA 109 +# define CMS_F_CMS_DATAFINAL 110 +# define CMS_F_CMS_DATAINIT 111 +# define CMS_F_CMS_DECRYPT 112 +# define CMS_F_CMS_DECRYPT_SET1_KEY 113 +# define CMS_F_CMS_DECRYPT_SET1_PASSWORD 166 +# define CMS_F_CMS_DECRYPT_SET1_PKEY 114 +# define CMS_F_CMS_DIGESTALGORITHM_FIND_CTX 115 +# define CMS_F_CMS_DIGESTALGORITHM_INIT_BIO 116 +# define CMS_F_CMS_DIGESTEDDATA_DO_FINAL 117 +# define CMS_F_CMS_DIGEST_VERIFY 118 +# define CMS_F_CMS_ENCODE_RECEIPT 161 +# define CMS_F_CMS_ENCRYPT 119 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT 179 +# define CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO 120 +# define CMS_F_CMS_ENCRYPTEDDATA_DECRYPT 121 +# define CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT 122 +# define CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY 123 +# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124 +# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125 +# define CMS_F_CMS_ENVELOPED_DATA_INIT 126 +# define CMS_F_CMS_ENV_ASN1_CTRL 171 +# define CMS_F_CMS_FINAL 127 +# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128 +# define CMS_F_CMS_GET0_CONTENT 129 +# define CMS_F_CMS_GET0_ECONTENT_TYPE 130 +# define CMS_F_CMS_GET0_ENVELOPED 131 +# define CMS_F_CMS_GET0_REVOCATION_CHOICES 132 +# define CMS_F_CMS_GET0_SIGNED 133 +# define CMS_F_CMS_MSGSIGDIGEST_ADD1 162 +# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159 +# define CMS_F_CMS_RECEIPT_VERIFY 160 +# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134 +# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173 +# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172 +# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137 +# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP 138 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP 139 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT 140 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT 141 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS 142 +# define CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID 143 +# define CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT 167 +# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168 +# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145 +# define CMS_F_CMS_SD_ASN1_CTRL 170 +# define CMS_F_CMS_SET1_IAS 176 +# define CMS_F_CMS_SET1_KEYID 177 +# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146 +# define CMS_F_CMS_SET_DETACHED 147 +# define CMS_F_CMS_SIGN 148 +# define CMS_F_CMS_SIGNED_DATA_INIT 149 +# define CMS_F_CMS_SIGNERINFO_CONTENT_SIGN 150 +# define CMS_F_CMS_SIGNERINFO_SIGN 151 +# define CMS_F_CMS_SIGNERINFO_VERIFY 152 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CERT 153 +# define CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT 154 +# define CMS_F_CMS_SIGN_RECEIPT 163 +# define CMS_F_CMS_SI_CHECK_ATTRIBUTES 183 +# define CMS_F_CMS_STREAM 155 +# define CMS_F_CMS_UNCOMPRESS 156 +# define CMS_F_CMS_VERIFY 157 +# define CMS_F_KEK_UNWRAP_KEY 180 + +/* + * CMS reason codes. + */ +# define CMS_R_ADD_SIGNER_ERROR 99 +# define CMS_R_ATTRIBUTE_ERROR 161 +# define CMS_R_CERTIFICATE_ALREADY_PRESENT 175 +# define CMS_R_CERTIFICATE_HAS_NO_KEYID 160 +# define CMS_R_CERTIFICATE_VERIFY_ERROR 100 +# define CMS_R_CIPHER_INITIALISATION_ERROR 101 +# define CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR 102 +# define CMS_R_CMS_DATAFINAL_ERROR 103 +# define CMS_R_CMS_LIB 104 +# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 +# define CMS_R_CONTENT_NOT_FOUND 105 +# define CMS_R_CONTENT_TYPE_MISMATCH 171 +# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 +# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 +# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 +# define CMS_R_CONTENT_VERIFY_ERROR 109 +# define CMS_R_CTRL_ERROR 110 +# define CMS_R_CTRL_FAILURE 111 +# define CMS_R_DECRYPT_ERROR 112 +# define CMS_R_ERROR_GETTING_PUBLIC_KEY 113 +# define CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE 114 +# define CMS_R_ERROR_SETTING_KEY 115 +# define CMS_R_ERROR_SETTING_RECIPIENTINFO 116 +# define CMS_R_INVALID_ENCRYPTED_KEY_LENGTH 117 +# define CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER 176 +# define CMS_R_INVALID_KEY_LENGTH 118 +# define CMS_R_MD_BIO_INIT_ERROR 119 +# define CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH 120 +# define CMS_R_MESSAGEDIGEST_WRONG_LENGTH 121 +# define CMS_R_MSGSIGDIGEST_ERROR 172 +# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 +# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 +# define CMS_R_NEED_ONE_SIGNER 164 +# define CMS_R_NOT_A_SIGNED_RECEIPT 165 +# define CMS_R_NOT_ENCRYPTED_DATA 122 +# define CMS_R_NOT_KEK 123 +# define CMS_R_NOT_KEY_AGREEMENT 181 +# define CMS_R_NOT_KEY_TRANSPORT 124 +# define CMS_R_NOT_PWRI 177 +# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 +# define CMS_R_NO_CIPHER 126 +# define CMS_R_NO_CONTENT 127 +# define CMS_R_NO_CONTENT_TYPE 173 +# define CMS_R_NO_DEFAULT_DIGEST 128 +# define CMS_R_NO_DIGEST_SET 129 +# define CMS_R_NO_KEY 130 +# define CMS_R_NO_KEY_OR_CERT 174 +# define CMS_R_NO_MATCHING_DIGEST 131 +# define CMS_R_NO_MATCHING_RECIPIENT 132 +# define CMS_R_NO_MATCHING_SIGNATURE 166 +# define CMS_R_NO_MSGSIGDIGEST 167 +# define CMS_R_NO_PASSWORD 178 +# define CMS_R_NO_PRIVATE_KEY 133 +# define CMS_R_NO_PUBLIC_KEY 134 +# define CMS_R_NO_RECEIPT_REQUEST 168 +# define CMS_R_NO_SIGNERS 135 +# define CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 136 +# define CMS_R_RECEIPT_DECODE_ERROR 169 +# define CMS_R_RECIPIENT_ERROR 137 +# define CMS_R_SIGNER_CERTIFICATE_NOT_FOUND 138 +# define CMS_R_SIGNFINAL_ERROR 139 +# define CMS_R_SMIME_TEXT_ERROR 140 +# define CMS_R_STORE_INIT_ERROR 141 +# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 +# define CMS_R_TYPE_NOT_DATA 143 +# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 +# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 +# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 +# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 +# define CMS_R_UNKNOWN_CIPHER 148 +# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 +# define CMS_R_UNKNOWN_ID 150 +# define CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM 151 +# define CMS_R_UNSUPPORTED_CONTENT_ENCRYPTION_ALGORITHM 194 +# define CMS_R_UNSUPPORTED_CONTENT_TYPE 152 +# define CMS_R_UNSUPPORTED_KEK_ALGORITHM 153 +# define CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM 179 +# define CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE 155 +# define CMS_R_UNSUPPORTED_RECIPIENT_TYPE 154 +# define CMS_R_UNSUPPORTED_TYPE 156 +# define CMS_R_UNWRAP_ERROR 157 +# define CMS_R_UNWRAP_FAILURE 180 +# define CMS_R_VERIFICATION_FAILURE 158 +# define CMS_R_WRAP_ERROR 159 + +# endif +#endif diff --git a/lib/openssl/include/openssl/comp.h b/lib/openssl/include/openssl/comp.h new file mode 100644 index 0000000..d814d3c --- /dev/null +++ b/lib/openssl/include/openssl/comp.h @@ -0,0 +1,53 @@ +/* + * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMP_H +# define HEADER_COMP_H + +# include + +# ifndef OPENSSL_NO_COMP +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + + +COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); +const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); +int COMP_CTX_get_type(const COMP_CTX* comp); +int COMP_get_type(const COMP_METHOD *meth); +const char *COMP_get_name(const COMP_METHOD *meth); +void COMP_CTX_free(COMP_CTX *ctx); + +int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); +int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, + unsigned char *in, int ilen); + +COMP_METHOD *COMP_zlib(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +#define COMP_zlib_cleanup() while(0) continue +#endif + +# ifdef HEADER_BIO_H +# ifdef ZLIB +const BIO_METHOD *BIO_f_zlib(void); +# endif +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/comperr.h b/lib/openssl/include/openssl/comperr.h new file mode 100644 index 0000000..90231e9 --- /dev/null +++ b/lib/openssl/include/openssl/comperr.h @@ -0,0 +1,44 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_COMPERR_H +# define HEADER_COMPERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_COMP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_COMP_strings(void); + +/* + * COMP function codes. + */ +# define COMP_F_BIO_ZLIB_FLUSH 99 +# define COMP_F_BIO_ZLIB_NEW 100 +# define COMP_F_BIO_ZLIB_READ 101 +# define COMP_F_BIO_ZLIB_WRITE 102 +# define COMP_F_COMP_CTX_NEW 103 + +/* + * COMP reason codes. + */ +# define COMP_R_ZLIB_DEFLATE_ERROR 99 +# define COMP_R_ZLIB_INFLATE_ERROR 100 +# define COMP_R_ZLIB_NOT_SUPPORTED 101 + +# endif +#endif diff --git a/lib/openssl/include/openssl/conf.h b/lib/openssl/include/openssl/conf.h new file mode 100644 index 0000000..7336cd2 --- /dev/null +++ b/lib/openssl/include/openssl/conf.h @@ -0,0 +1,168 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONF_H +# define HEADER_CONF_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + char *section; + char *name; + char *value; +} CONF_VALUE; + +DEFINE_STACK_OF(CONF_VALUE) +DEFINE_LHASH_OF(CONF_VALUE); + +struct conf_st; +struct conf_method_st; +typedef struct conf_method_st CONF_METHOD; + +struct conf_method_st { + const char *name; + CONF *(*create) (CONF_METHOD *meth); + int (*init) (CONF *conf); + int (*destroy) (CONF *conf); + int (*destroy_data) (CONF *conf); + int (*load_bio) (CONF *conf, BIO *bp, long *eline); + int (*dump) (const CONF *conf, BIO *bp); + int (*is_number) (const CONF *conf, char c); + int (*to_int) (const CONF *conf, char c); + int (*load) (CONF *conf, const char *name, long *eline); +}; + +/* Module definitions */ + +typedef struct conf_imodule_st CONF_IMODULE; +typedef struct conf_module_st CONF_MODULE; + +DEFINE_STACK_OF(CONF_MODULE) +DEFINE_STACK_OF(CONF_IMODULE) + +/* DSO module function typedefs */ +typedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); +typedef void conf_finish_func (CONF_IMODULE *md); + +# define CONF_MFLAGS_IGNORE_ERRORS 0x1 +# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 +# define CONF_MFLAGS_SILENT 0x4 +# define CONF_MFLAGS_NO_DSO 0x8 +# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +# define CONF_MFLAGS_DEFAULT_SECTION 0x20 + +int CONF_set_default_method(CONF_METHOD *meth); +void CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash); +LHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, + long *eline); +# ifndef OPENSSL_NO_STDIO +LHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, + long *eline); +# endif +LHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, + long *eline); +STACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, + const char *section); +char *CONF_get_string(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +long CONF_get_number(LHASH_OF(CONF_VALUE) *conf, const char *group, + const char *name); +void CONF_free(LHASH_OF(CONF_VALUE) *conf); +#ifndef OPENSSL_NO_STDIO +int CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out); +#endif +int CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out); + +DEPRECATEDIN_1_1_0(void OPENSSL_config(const char *config_name)) + +#if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_no_config() \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_LOAD_CONFIG, NULL) +#endif + +/* + * New conf code. The semantics are different from the functions above. If + * that wasn't the case, the above functions would have been replaced + */ + +struct conf_st { + CONF_METHOD *meth; + void *meth_data; + LHASH_OF(CONF_VALUE) *data; +}; + +CONF *NCONF_new(CONF_METHOD *meth); +CONF_METHOD *NCONF_default(void); +CONF_METHOD *NCONF_WIN32(void); +void NCONF_free(CONF *conf); +void NCONF_free_data(CONF *conf); + +int NCONF_load(CONF *conf, const char *file, long *eline); +# ifndef OPENSSL_NO_STDIO +int NCONF_load_fp(CONF *conf, FILE *fp, long *eline); +# endif +int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); +STACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, + const char *section); +char *NCONF_get_string(const CONF *conf, const char *group, const char *name); +int NCONF_get_number_e(const CONF *conf, const char *group, const char *name, + long *result); +#ifndef OPENSSL_NO_STDIO +int NCONF_dump_fp(const CONF *conf, FILE *out); +#endif +int NCONF_dump_bio(const CONF *conf, BIO *out); + +#define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) + +/* Module functions */ + +int CONF_modules_load(const CONF *cnf, const char *appname, + unsigned long flags); +int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags); +void CONF_modules_unload(int all); +void CONF_modules_finish(void); +#if OPENSSL_API_COMPAT < 0x10100000L +# define CONF_modules_free() while(0) continue +#endif +int CONF_module_add(const char *name, conf_init_func *ifunc, + conf_finish_func *ffunc); + +const char *CONF_imodule_get_name(const CONF_IMODULE *md); +const char *CONF_imodule_get_value(const CONF_IMODULE *md); +void *CONF_imodule_get_usr_data(const CONF_IMODULE *md); +void CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); +CONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); +unsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); +void CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); +void *CONF_module_get_usr_data(CONF_MODULE *pmod); +void CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); + +char *CONF_get1_default_config_file(void); + +int CONF_parse_list(const char *list, int sep, int nospc, + int (*list_cb) (const char *elem, int len, void *usr), + void *arg); + +void OPENSSL_load_builtin_modules(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/conf_api.h b/lib/openssl/include/openssl/conf_api.h new file mode 100644 index 0000000..a0275ad --- /dev/null +++ b/lib/openssl/include/openssl/conf_api.h @@ -0,0 +1,40 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONF_API_H +# define HEADER_CONF_API_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Up until OpenSSL 0.9.5a, this was new_section */ +CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was get_section */ +CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); +/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ +STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, + const char *section); + +int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); +char *_CONF_get_string(const CONF *conf, const char *section, + const char *name); +long _CONF_get_number(const CONF *conf, const char *section, + const char *name); + +int _CONF_new_data(CONF *conf); +void _CONF_free_data(CONF *conf); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/conferr.h b/lib/openssl/include/openssl/conferr.h new file mode 100644 index 0000000..32b9229 --- /dev/null +++ b/lib/openssl/include/openssl/conferr.h @@ -0,0 +1,76 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CONFERR_H +# define HEADER_CONFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CONF_strings(void); + +/* + * CONF function codes. + */ +# define CONF_F_CONF_DUMP_FP 104 +# define CONF_F_CONF_LOAD 100 +# define CONF_F_CONF_LOAD_FP 103 +# define CONF_F_CONF_PARSE_LIST 119 +# define CONF_F_DEF_LOAD 120 +# define CONF_F_DEF_LOAD_BIO 121 +# define CONF_F_GET_NEXT_FILE 107 +# define CONF_F_MODULE_ADD 122 +# define CONF_F_MODULE_INIT 115 +# define CONF_F_MODULE_LOAD_DSO 117 +# define CONF_F_MODULE_RUN 118 +# define CONF_F_NCONF_DUMP_BIO 105 +# define CONF_F_NCONF_DUMP_FP 106 +# define CONF_F_NCONF_GET_NUMBER_E 112 +# define CONF_F_NCONF_GET_SECTION 108 +# define CONF_F_NCONF_GET_STRING 109 +# define CONF_F_NCONF_LOAD 113 +# define CONF_F_NCONF_LOAD_BIO 110 +# define CONF_F_NCONF_LOAD_FP 114 +# define CONF_F_NCONF_NEW 111 +# define CONF_F_PROCESS_INCLUDE 116 +# define CONF_F_SSL_MODULE_INIT 123 +# define CONF_F_STR_COPY 101 + +/* + * CONF reason codes. + */ +# define CONF_R_ERROR_LOADING_DSO 110 +# define CONF_R_LIST_CANNOT_BE_NULL 115 +# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 +# define CONF_R_MISSING_EQUAL_SIGN 101 +# define CONF_R_MISSING_INIT_FUNCTION 112 +# define CONF_R_MODULE_INITIALIZATION_ERROR 109 +# define CONF_R_NO_CLOSE_BRACE 102 +# define CONF_R_NO_CONF 105 +# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 +# define CONF_R_NO_SECTION 107 +# define CONF_R_NO_SUCH_FILE 114 +# define CONF_R_NO_VALUE 108 +# define CONF_R_NUMBER_TOO_LARGE 121 +# define CONF_R_RECURSIVE_DIRECTORY_INCLUDE 111 +# define CONF_R_SSL_COMMAND_SECTION_EMPTY 117 +# define CONF_R_SSL_COMMAND_SECTION_NOT_FOUND 118 +# define CONF_R_SSL_SECTION_EMPTY 119 +# define CONF_R_SSL_SECTION_NOT_FOUND 120 +# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 +# define CONF_R_UNKNOWN_MODULE_NAME 113 +# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 +# define CONF_R_VARIABLE_HAS_NO_VALUE 104 + +#endif diff --git a/lib/openssl/include/openssl/crypto.h b/lib/openssl/include/openssl/crypto.h new file mode 100644 index 0000000..7d0b526 --- /dev/null +++ b/lib/openssl/include/openssl/crypto.h @@ -0,0 +1,445 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CRYPTO_H +# define HEADER_CRYPTO_H + +# include +# include + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# endif + +# include +# include +# include +# include +# include + +# ifdef CHARSET_EBCDIC +# include +# endif + +/* + * Resolve problems on some operating systems with symbol names that clash + * one way or another + */ +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSLeay OpenSSL_version_num +# define SSLeay_version OpenSSL_version +# define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER +# define SSLEAY_VERSION OPENSSL_VERSION +# define SSLEAY_CFLAGS OPENSSL_CFLAGS +# define SSLEAY_BUILT_ON OPENSSL_BUILT_ON +# define SSLEAY_PLATFORM OPENSSL_PLATFORM +# define SSLEAY_DIR OPENSSL_DIR + +/* + * Old type for allocating dynamic locks. No longer used. Use the new thread + * API instead. + */ +typedef struct { + int dummy; +} CRYPTO_dynlock; + +# endif /* OPENSSL_API_COMPAT */ + +typedef void CRYPTO_RWLOCK; + +CRYPTO_RWLOCK *CRYPTO_THREAD_lock_new(void); +int CRYPTO_THREAD_read_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_write_lock(CRYPTO_RWLOCK *lock); +int CRYPTO_THREAD_unlock(CRYPTO_RWLOCK *lock); +void CRYPTO_THREAD_lock_free(CRYPTO_RWLOCK *lock); + +int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock); + +/* + * The following can be used to detect memory leaks in the library. If + * used, it turns on malloc checking + */ +# define CRYPTO_MEM_CHECK_OFF 0x0 /* Control only */ +# define CRYPTO_MEM_CHECK_ON 0x1 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_ENABLE 0x2 /* Control and mode bit */ +# define CRYPTO_MEM_CHECK_DISABLE 0x3 /* Control only */ + +struct crypto_ex_data_st { + STACK_OF(void) *sk; +}; +DEFINE_STACK_OF(void) + +/* + * Per class, we have a STACK of function pointers. + */ +# define CRYPTO_EX_INDEX_SSL 0 +# define CRYPTO_EX_INDEX_SSL_CTX 1 +# define CRYPTO_EX_INDEX_SSL_SESSION 2 +# define CRYPTO_EX_INDEX_X509 3 +# define CRYPTO_EX_INDEX_X509_STORE 4 +# define CRYPTO_EX_INDEX_X509_STORE_CTX 5 +# define CRYPTO_EX_INDEX_DH 6 +# define CRYPTO_EX_INDEX_DSA 7 +# define CRYPTO_EX_INDEX_EC_KEY 8 +# define CRYPTO_EX_INDEX_RSA 9 +# define CRYPTO_EX_INDEX_ENGINE 10 +# define CRYPTO_EX_INDEX_UI 11 +# define CRYPTO_EX_INDEX_BIO 12 +# define CRYPTO_EX_INDEX_APP 13 +# define CRYPTO_EX_INDEX_UI_METHOD 14 +# define CRYPTO_EX_INDEX_DRBG 15 +# define CRYPTO_EX_INDEX__COUNT 16 + +/* No longer needed, so this is a no-op */ +#define OPENSSL_malloc_init() while(0) continue + +int CRYPTO_mem_ctrl(int mode); + +# define OPENSSL_malloc(num) \ + CRYPTO_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_zalloc(num) \ + CRYPTO_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_realloc(addr, num) \ + CRYPTO_realloc(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_realloc(addr, old_num, num) \ + CRYPTO_clear_realloc(addr, old_num, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_clear_free(addr, num) \ + CRYPTO_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_free(addr) \ + CRYPTO_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_memdup(str, s) \ + CRYPTO_memdup((str), s, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strdup(str) \ + CRYPTO_strdup(str, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_strndup(str, n) \ + CRYPTO_strndup(str, n, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_malloc(num) \ + CRYPTO_secure_malloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_zalloc(num) \ + CRYPTO_secure_zalloc(num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_free(addr) \ + CRYPTO_secure_free(addr, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_clear_free(addr, num) \ + CRYPTO_secure_clear_free(addr, num, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_secure_actual_size(ptr) \ + CRYPTO_secure_actual_size(ptr) + +size_t OPENSSL_strlcpy(char *dst, const char *src, size_t siz); +size_t OPENSSL_strlcat(char *dst, const char *src, size_t siz); +size_t OPENSSL_strnlen(const char *str, size_t maxlen); +char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len); +unsigned char *OPENSSL_hexstr2buf(const char *str, long *len); +int OPENSSL_hexchar2int(unsigned char c); + +# define OPENSSL_MALLOC_MAX_NELEMS(type) (((1U<<(sizeof(int)*8-1))-1)/sizeof(type)) + +unsigned long OpenSSL_version_num(void); +const char *OpenSSL_version(int type); +# define OPENSSL_VERSION 0 +# define OPENSSL_CFLAGS 1 +# define OPENSSL_BUILT_ON 2 +# define OPENSSL_PLATFORM 3 +# define OPENSSL_DIR 4 +# define OPENSSL_ENGINES_DIR 5 + +int OPENSSL_issetugid(void); + +typedef void CRYPTO_EX_new (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef void CRYPTO_EX_free (void *parent, void *ptr, CRYPTO_EX_DATA *ad, + int idx, long argl, void *argp); +typedef int CRYPTO_EX_dup (CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, + void *from_d, int idx, long argl, void *argp); +__owur int CRYPTO_get_ex_new_index(int class_index, long argl, void *argp, + CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, + CRYPTO_EX_free *free_func); +/* No longer use an index. */ +int CRYPTO_free_ex_index(int class_index, int idx); + +/* + * Initialise/duplicate/free CRYPTO_EX_DATA variables corresponding to a + * given class (invokes whatever per-class callbacks are applicable) + */ +int CRYPTO_new_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); +int CRYPTO_dup_ex_data(int class_index, CRYPTO_EX_DATA *to, + const CRYPTO_EX_DATA *from); + +void CRYPTO_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad); + +/* + * Get/set data in a CRYPTO_EX_DATA variable corresponding to a particular + * index (relative to the class type involved) + */ +int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val); +void *CRYPTO_get_ex_data(const CRYPTO_EX_DATA *ad, int idx); + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function cleans up all "ex_data" state. It mustn't be called under + * potential race-conditions. + */ +# define CRYPTO_cleanup_all_ex_data() while(0) continue + +/* + * The old locking functions have been removed completely without compatibility + * macros. This is because the old functions either could not properly report + * errors, or the returned error values were not clearly documented. + * Replacing the locking functions with no-ops would cause race condition + * issues in the affected applications. It is far better for them to fail at + * compile time. + * On the other hand, the locking callbacks are no longer used. Consequently, + * the callback management functions can be safely replaced with no-op macros. + */ +# define CRYPTO_num_locks() (1) +# define CRYPTO_set_locking_callback(func) +# define CRYPTO_get_locking_callback() (NULL) +# define CRYPTO_set_add_lock_callback(func) +# define CRYPTO_get_add_lock_callback() (NULL) + +/* + * These defines where used in combination with the old locking callbacks, + * they are not called anymore, but old code that's not called might still + * use them. + */ +# define CRYPTO_LOCK 1 +# define CRYPTO_UNLOCK 2 +# define CRYPTO_READ 4 +# define CRYPTO_WRITE 8 + +/* This structure is no longer used */ +typedef struct crypto_threadid_st { + int dummy; +} CRYPTO_THREADID; +/* Only use CRYPTO_THREADID_set_[numeric|pointer]() within callbacks */ +# define CRYPTO_THREADID_set_numeric(id, val) +# define CRYPTO_THREADID_set_pointer(id, ptr) +# define CRYPTO_THREADID_set_callback(threadid_func) (0) +# define CRYPTO_THREADID_get_callback() (NULL) +# define CRYPTO_THREADID_current(id) +# define CRYPTO_THREADID_cmp(a, b) (-1) +# define CRYPTO_THREADID_cpy(dest, src) +# define CRYPTO_THREADID_hash(id) (0UL) + +# if OPENSSL_API_COMPAT < 0x10000000L +# define CRYPTO_set_id_callback(func) +# define CRYPTO_get_id_callback() (NULL) +# define CRYPTO_thread_id() (0UL) +# endif /* OPENSSL_API_COMPAT < 0x10000000L */ + +# define CRYPTO_set_dynlock_create_callback(dyn_create_function) +# define CRYPTO_set_dynlock_lock_callback(dyn_lock_function) +# define CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function) +# define CRYPTO_get_dynlock_create_callback() (NULL) +# define CRYPTO_get_dynlock_lock_callback() (NULL) +# define CRYPTO_get_dynlock_destroy_callback() (NULL) +# endif /* OPENSSL_API_COMPAT < 0x10100000L */ + +int CRYPTO_set_mem_functions( + void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), + void (*f) (void *, const char *, int)); +int CRYPTO_set_mem_debug(int flag); +void CRYPTO_get_mem_functions( + void *(**m) (size_t, const char *, int), + void *(**r) (void *, size_t, const char *, int), + void (**f) (void *, const char *, int)); + +void *CRYPTO_malloc(size_t num, const char *file, int line); +void *CRYPTO_zalloc(size_t num, const char *file, int line); +void *CRYPTO_memdup(const void *str, size_t siz, const char *file, int line); +char *CRYPTO_strdup(const char *str, const char *file, int line); +char *CRYPTO_strndup(const char *str, size_t s, const char *file, int line); +void CRYPTO_free(void *ptr, const char *file, int line); +void CRYPTO_clear_free(void *ptr, size_t num, const char *file, int line); +void *CRYPTO_realloc(void *addr, size_t num, const char *file, int line); +void *CRYPTO_clear_realloc(void *addr, size_t old_num, size_t num, + const char *file, int line); + +int CRYPTO_secure_malloc_init(size_t sz, int minsize); +int CRYPTO_secure_malloc_done(void); +void *CRYPTO_secure_malloc(size_t num, const char *file, int line); +void *CRYPTO_secure_zalloc(size_t num, const char *file, int line); +void CRYPTO_secure_free(void *ptr, const char *file, int line); +void CRYPTO_secure_clear_free(void *ptr, size_t num, + const char *file, int line); +int CRYPTO_secure_allocated(const void *ptr); +int CRYPTO_secure_malloc_initialized(void); +size_t CRYPTO_secure_actual_size(void *ptr); +size_t CRYPTO_secure_used(void); + +void OPENSSL_cleanse(void *ptr, size_t len); + +# ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_mem_debug_push(info) \ + CRYPTO_mem_debug_push(info, OPENSSL_FILE, OPENSSL_LINE) +# define OPENSSL_mem_debug_pop() \ + CRYPTO_mem_debug_pop() +int CRYPTO_mem_debug_push(const char *info, const char *file, int line); +int CRYPTO_mem_debug_pop(void); +void CRYPTO_get_alloc_counts(int *mcount, int *rcount, int *fcount); + +/*- + * Debugging functions (enabled by CRYPTO_set_mem_debug(1)) + * The flag argument has the following significance: + * 0: called before the actual memory allocation has taken place + * 1: called after the actual memory allocation has taken place + */ +void CRYPTO_mem_debug_malloc(void *addr, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, int flag, + const char *file, int line); +void CRYPTO_mem_debug_free(void *addr, int flag, + const char *file, int line); + +int CRYPTO_mem_leaks_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +int CRYPTO_mem_leaks_fp(FILE *); +# endif +int CRYPTO_mem_leaks(BIO *bio); +# endif + +/* die if we have to */ +ossl_noreturn void OPENSSL_die(const char *assertion, const char *file, int line); +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSLDie(f,l,a) OPENSSL_die((a),(f),(l)) +# endif +# define OPENSSL_assert(e) \ + (void)((e) ? 0 : (OPENSSL_die("assertion failed: " #e, OPENSSL_FILE, OPENSSL_LINE), 1)) + +int OPENSSL_isservice(void); + +int FIPS_mode(void); +int FIPS_mode_set(int r); + +void OPENSSL_init(void); +# ifdef OPENSSL_SYS_UNIX +void OPENSSL_fork_prepare(void); +void OPENSSL_fork_parent(void); +void OPENSSL_fork_child(void); +# endif + +struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result); +int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec); +int OPENSSL_gmtime_diff(int *pday, int *psec, + const struct tm *from, const struct tm *to); + +/* + * CRYPTO_memcmp returns zero iff the |len| bytes at |a| and |b| are equal. + * It takes an amount of time dependent on |len|, but independent of the + * contents of |a| and |b|. Unlike memcmp, it cannot be used to put elements + * into a defined order as the return value when a != b is undefined, other + * than to be non-zero. + */ +int CRYPTO_memcmp(const void * in_a, const void * in_b, size_t len); + +/* Standard initialisation options */ +# define OPENSSL_INIT_NO_LOAD_CRYPTO_STRINGS 0x00000001L +# define OPENSSL_INIT_LOAD_CRYPTO_STRINGS 0x00000002L +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_NO_ADD_ALL_CIPHERS 0x00000010L +# define OPENSSL_INIT_NO_ADD_ALL_DIGESTS 0x00000020L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +# define OPENSSL_INIT_NO_LOAD_CONFIG 0x00000080L +# define OPENSSL_INIT_ASYNC 0x00000100L +# define OPENSSL_INIT_ENGINE_RDRAND 0x00000200L +# define OPENSSL_INIT_ENGINE_DYNAMIC 0x00000400L +# define OPENSSL_INIT_ENGINE_OPENSSL 0x00000800L +# define OPENSSL_INIT_ENGINE_CRYPTODEV 0x00001000L +# define OPENSSL_INIT_ENGINE_CAPI 0x00002000L +# define OPENSSL_INIT_ENGINE_PADLOCK 0x00004000L +# define OPENSSL_INIT_ENGINE_AFALG 0x00008000L +/* OPENSSL_INIT_ZLIB 0x00010000L */ +# define OPENSSL_INIT_ATFORK 0x00020000L +/* OPENSSL_INIT_BASE_ONLY 0x00040000L */ +# define OPENSSL_INIT_NO_ATEXIT 0x00080000L +/* OPENSSL_INIT flag range 0xfff00000 reserved for OPENSSL_init_ssl() */ +/* Max OPENSSL_INIT flag value is 0x80000000 */ + +/* openssl and dasync not counted as builtin */ +# define OPENSSL_INIT_ENGINE_ALL_BUILTIN \ + (OPENSSL_INIT_ENGINE_RDRAND | OPENSSL_INIT_ENGINE_DYNAMIC \ + | OPENSSL_INIT_ENGINE_CRYPTODEV | OPENSSL_INIT_ENGINE_CAPI | \ + OPENSSL_INIT_ENGINE_PADLOCK) + + +/* Library initialisation functions */ +void OPENSSL_cleanup(void); +int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); +int OPENSSL_atexit(void (*handler)(void)); +void OPENSSL_thread_stop(void); + +/* Low-level control of initialization */ +OPENSSL_INIT_SETTINGS *OPENSSL_INIT_new(void); +# ifndef OPENSSL_NO_STDIO +int OPENSSL_INIT_set_config_filename(OPENSSL_INIT_SETTINGS *settings, + const char *config_filename); +void OPENSSL_INIT_set_config_file_flags(OPENSSL_INIT_SETTINGS *settings, + unsigned long flags); +int OPENSSL_INIT_set_config_appname(OPENSSL_INIT_SETTINGS *settings, + const char *config_appname); +# endif +void OPENSSL_INIT_free(OPENSSL_INIT_SETTINGS *settings); + +# if defined(OPENSSL_THREADS) && !defined(CRYPTO_TDEBUG) +# if defined(_WIN32) +# if defined(BASETYPES) || defined(_WINDEF_H) +/* application has to include in order to use this */ +typedef DWORD CRYPTO_THREAD_LOCAL; +typedef DWORD CRYPTO_THREAD_ID; + +typedef LONG CRYPTO_ONCE; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif +# else +# include +typedef pthread_once_t CRYPTO_ONCE; +typedef pthread_key_t CRYPTO_THREAD_LOCAL; +typedef pthread_t CRYPTO_THREAD_ID; + +# define CRYPTO_ONCE_STATIC_INIT PTHREAD_ONCE_INIT +# endif +# endif + +# if !defined(CRYPTO_ONCE_STATIC_INIT) +typedef unsigned int CRYPTO_ONCE; +typedef unsigned int CRYPTO_THREAD_LOCAL; +typedef unsigned int CRYPTO_THREAD_ID; +# define CRYPTO_ONCE_STATIC_INIT 0 +# endif + +int CRYPTO_THREAD_run_once(CRYPTO_ONCE *once, void (*init)(void)); + +int CRYPTO_THREAD_init_local(CRYPTO_THREAD_LOCAL *key, void (*cleanup)(void *)); +void *CRYPTO_THREAD_get_local(CRYPTO_THREAD_LOCAL *key); +int CRYPTO_THREAD_set_local(CRYPTO_THREAD_LOCAL *key, void *val); +int CRYPTO_THREAD_cleanup_local(CRYPTO_THREAD_LOCAL *key); + +CRYPTO_THREAD_ID CRYPTO_THREAD_get_current_id(void); +int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/cryptoerr.h b/lib/openssl/include/openssl/cryptoerr.h new file mode 100644 index 0000000..3db5a4e --- /dev/null +++ b/lib/openssl/include/openssl/cryptoerr.h @@ -0,0 +1,57 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CRYPTOERR_H +# define HEADER_CRYPTOERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CRYPTO_strings(void); + +/* + * CRYPTO function codes. + */ +# define CRYPTO_F_CMAC_CTX_NEW 120 +# define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 +# define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 +# define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 +# define CRYPTO_F_CRYPTO_MEMDUP 115 +# define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 +# define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 +# define CRYPTO_F_CRYPTO_OCB128_INIT 122 +# define CRYPTO_F_CRYPTO_SET_EX_DATA 102 +# define CRYPTO_F_FIPS_MODE_SET 109 +# define CRYPTO_F_GET_AND_LOCK 113 +# define CRYPTO_F_OPENSSL_ATEXIT 114 +# define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 +# define CRYPTO_F_OPENSSL_FOPEN 119 +# define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 +# define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 +# define CRYPTO_F_OPENSSL_LH_NEW 126 +# define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 +# define CRYPTO_F_OPENSSL_SK_DUP 128 +# define CRYPTO_F_PKEY_HMAC_INIT 123 +# define CRYPTO_F_PKEY_POLY1305_INIT 124 +# define CRYPTO_F_PKEY_SIPHASH_INIT 125 +# define CRYPTO_F_SK_RESERVE 129 + +/* + * CRYPTO reason codes. + */ +# define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 +# define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 +# define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 + +#endif diff --git a/lib/openssl/include/openssl/ct.h b/lib/openssl/include/openssl/ct.h new file mode 100644 index 0000000..ebdba34 --- /dev/null +++ b/lib/openssl/include/openssl/ct.h @@ -0,0 +1,474 @@ +/* + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CT_H +# define HEADER_CT_H + +# include + +# ifndef OPENSSL_NO_CT +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + + +/* Minimum RSA key size, from RFC6962 */ +# define SCT_MIN_RSA_BITS 2048 + +/* All hashes are SHA256 in v1 of Certificate Transparency */ +# define CT_V1_HASHLEN SHA256_DIGEST_LENGTH + +typedef enum { + CT_LOG_ENTRY_TYPE_NOT_SET = -1, + CT_LOG_ENTRY_TYPE_X509 = 0, + CT_LOG_ENTRY_TYPE_PRECERT = 1 +} ct_log_entry_type_t; + +typedef enum { + SCT_VERSION_NOT_SET = -1, + SCT_VERSION_V1 = 0 +} sct_version_t; + +typedef enum { + SCT_SOURCE_UNKNOWN, + SCT_SOURCE_TLS_EXTENSION, + SCT_SOURCE_X509V3_EXTENSION, + SCT_SOURCE_OCSP_STAPLED_RESPONSE +} sct_source_t; + +typedef enum { + SCT_VALIDATION_STATUS_NOT_SET, + SCT_VALIDATION_STATUS_UNKNOWN_LOG, + SCT_VALIDATION_STATUS_VALID, + SCT_VALIDATION_STATUS_INVALID, + SCT_VALIDATION_STATUS_UNVERIFIED, + SCT_VALIDATION_STATUS_UNKNOWN_VERSION +} sct_validation_status_t; + +DEFINE_STACK_OF(SCT) +DEFINE_STACK_OF(CTLOG) + +/****************************************** + * CT policy evaluation context functions * + ******************************************/ + +/* + * Creates a new, empty policy evaluation context. + * The caller is responsible for calling CT_POLICY_EVAL_CTX_free when finished + * with the CT_POLICY_EVAL_CTX. + */ +CT_POLICY_EVAL_CTX *CT_POLICY_EVAL_CTX_new(void); + +/* Deletes a policy evaluation context and anything it owns. */ +void CT_POLICY_EVAL_CTX_free(CT_POLICY_EVAL_CTX *ctx); + +/* Gets the peer certificate that the SCTs are for */ +X509* CT_POLICY_EVAL_CTX_get0_cert(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the certificate associated with the received SCTs. + * Increments the reference count of cert. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_cert(CT_POLICY_EVAL_CTX *ctx, X509 *cert); + +/* Gets the issuer of the aforementioned certificate */ +X509* CT_POLICY_EVAL_CTX_get0_issuer(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the issuer of the certificate associated with the received SCTs. + * Increments the reference count of issuer. + * Returns 1 on success, 0 otherwise. + */ +int CT_POLICY_EVAL_CTX_set1_issuer(CT_POLICY_EVAL_CTX *ctx, X509 *issuer); + +/* Gets the CT logs that are trusted sources of SCTs */ +const CTLOG_STORE *CT_POLICY_EVAL_CTX_get0_log_store(const CT_POLICY_EVAL_CTX *ctx); + +/* Sets the log store that is in use. It must outlive the CT_POLICY_EVAL_CTX. */ +void CT_POLICY_EVAL_CTX_set_shared_CTLOG_STORE(CT_POLICY_EVAL_CTX *ctx, + CTLOG_STORE *log_store); + +/* + * Gets the time, in milliseconds since the Unix epoch, that will be used as the + * current time when checking whether an SCT was issued in the future. + * Such SCTs will fail validation, as required by RFC6962. + */ +uint64_t CT_POLICY_EVAL_CTX_get_time(const CT_POLICY_EVAL_CTX *ctx); + +/* + * Sets the time to evaluate SCTs against, in milliseconds since the Unix epoch. + * If an SCT's timestamp is after this time, it will be interpreted as having + * been issued in the future. RFC6962 states that "TLS clients MUST reject SCTs + * whose timestamp is in the future", so an SCT will not validate in this case. + */ +void CT_POLICY_EVAL_CTX_set_time(CT_POLICY_EVAL_CTX *ctx, uint64_t time_in_ms); + +/***************** + * SCT functions * + *****************/ + +/* + * Creates a new, blank SCT. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new(void); + +/* + * Creates a new SCT from some base64-encoded strings. + * The caller is responsible for calling SCT_free when finished with the SCT. + */ +SCT *SCT_new_from_base64(unsigned char version, + const char *logid_base64, + ct_log_entry_type_t entry_type, + uint64_t timestamp, + const char *extensions_base64, + const char *signature_base64); + +/* + * Frees the SCT and the underlying data structures. + */ +void SCT_free(SCT *sct); + +/* + * Free a stack of SCTs, and the underlying SCTs themselves. + * Intended to be compatible with X509V3_EXT_FREE. + */ +void SCT_LIST_free(STACK_OF(SCT) *a); + +/* + * Returns the version of the SCT. + */ +sct_version_t SCT_get_version(const SCT *sct); + +/* + * Set the version of an SCT. + * Returns 1 on success, 0 if the version is unrecognized. + */ +__owur int SCT_set_version(SCT *sct, sct_version_t version); + +/* + * Returns the log entry type of the SCT. + */ +ct_log_entry_type_t SCT_get_log_entry_type(const SCT *sct); + +/* + * Set the log entry type of an SCT. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_log_entry_type(SCT *sct, ct_log_entry_type_t entry_type); + +/* + * Gets the ID of the log that an SCT came from. + * Ownership of the log ID remains with the SCT. + * Returns the length of the log ID. + */ +size_t SCT_get0_log_id(const SCT *sct, unsigned char **log_id); + +/* + * Set the log ID of an SCT to point directly to the *log_id specified. + * The SCT takes ownership of the specified pointer. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set0_log_id(SCT *sct, unsigned char *log_id, size_t log_id_len); + +/* + * Set the log ID of an SCT. + * This makes a copy of the log_id. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_log_id(SCT *sct, const unsigned char *log_id, + size_t log_id_len); + +/* + * Returns the timestamp for the SCT (epoch time in milliseconds). + */ +uint64_t SCT_get_timestamp(const SCT *sct); + +/* + * Set the timestamp of an SCT (epoch time in milliseconds). + */ +void SCT_set_timestamp(SCT *sct, uint64_t timestamp); + +/* + * Return the NID for the signature used by the SCT. + * For CT v1, this will be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256 (or NID_undef if incorrect/unset). + */ +int SCT_get_signature_nid(const SCT *sct); + +/* + * Set the signature type of an SCT + * For CT v1, this should be either NID_sha256WithRSAEncryption or + * NID_ecdsa_with_SHA256. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_signature_nid(SCT *sct, int nid); + +/* + * Set *ext to point to the extension data for the SCT. ext must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_extensions(const SCT *sct, unsigned char **ext); + +/* + * Set the extensions of an SCT to point directly to the *ext specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_extensions(SCT *sct, unsigned char *ext, size_t ext_len); + +/* + * Set the extensions of an SCT. + * This takes a copy of the ext. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_extensions(SCT *sct, const unsigned char *ext, + size_t ext_len); + +/* + * Set *sig to point to the signature for the SCT. sig must not be NULL. + * The SCT retains ownership of this pointer. + * Returns length of the data pointed to. + */ +size_t SCT_get0_signature(const SCT *sct, unsigned char **sig); + +/* + * Set the signature of an SCT to point directly to the *sig specified. + * The SCT takes ownership of the specified pointer. + */ +void SCT_set0_signature(SCT *sct, unsigned char *sig, size_t sig_len); + +/* + * Set the signature of an SCT to be a copy of the *sig specified. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set1_signature(SCT *sct, const unsigned char *sig, + size_t sig_len); + +/* + * The origin of this SCT, e.g. TLS extension, OCSP response, etc. + */ +sct_source_t SCT_get_source(const SCT *sct); + +/* + * Set the origin of this SCT, e.g. TLS extension, OCSP response, etc. + * Returns 1 on success, 0 otherwise. + */ +__owur int SCT_set_source(SCT *sct, sct_source_t source); + +/* + * Returns a text string describing the validation status of |sct|. + */ +const char *SCT_validation_status_string(const SCT *sct); + +/* + * Pretty-prints an |sct| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * If |logs| is not NULL, it will be used to lookup the CT log that the SCT came + * from, so that the log name can be printed. + */ +void SCT_print(const SCT *sct, BIO *out, int indent, const CTLOG_STORE *logs); + +/* + * Pretty-prints an |sct_list| to |out|. + * It will be indented by the number of spaces specified by |indent|. + * SCTs will be delimited by |separator|. + * If |logs| is not NULL, it will be used to lookup the CT log that each SCT + * came from, so that the log names can be printed. + */ +void SCT_LIST_print(const STACK_OF(SCT) *sct_list, BIO *out, int indent, + const char *separator, const CTLOG_STORE *logs); + +/* + * Gets the last result of validating this SCT. + * If it has not been validated yet, returns SCT_VALIDATION_STATUS_NOT_SET. + */ +sct_validation_status_t SCT_get_validation_status(const SCT *sct); + +/* + * Validates the given SCT with the provided context. + * Sets the "validation_status" field of the SCT. + * Returns 1 if the SCT is valid and the signature verifies. + * Returns 0 if the SCT is invalid or could not be verified. + * Returns -1 if an error occurs. + */ +__owur int SCT_validate(SCT *sct, const CT_POLICY_EVAL_CTX *ctx); + +/* + * Validates the given list of SCTs with the provided context. + * Sets the "validation_status" field of each SCT. + * Returns 1 if there are no invalid SCTs and all signatures verify. + * Returns 0 if at least one SCT is invalid or could not be verified. + * Returns a negative integer if an error occurs. + */ +__owur int SCT_LIST_validate(const STACK_OF(SCT) *scts, + CT_POLICY_EVAL_CTX *ctx); + + +/********************************* + * SCT parsing and serialisation * + *********************************/ + +/* + * Serialize (to TLS format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just return the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2o_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Convert TLS format SCT list to a stack of SCTs. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *o2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + size_t len); + +/* + * Serialize (to DER format) a stack of SCTs and return the length. + * "a" must not be NULL. + * If "pp" is NULL, just returns the length of what would have been serialized. + * If "pp" is not NULL and "*pp" is null, function will allocate a new pointer + * for data that caller is responsible for freeing (only if function returns + * successfully). + * If "pp" is NULL and "*pp" is not NULL, caller is responsible for ensuring + * that "*pp" is large enough to accept all of the serialized data. + * Returns < 0 on error, >= 0 indicating bytes written (or would have been) + * on success. + */ +__owur int i2d_SCT_LIST(const STACK_OF(SCT) *a, unsigned char **pp); + +/* + * Parses an SCT list in DER format and returns it. + * If "a" or "*a" is NULL, a new stack will be created that the caller is + * responsible for freeing (by calling SCT_LIST_free). + * "**pp" and "*pp" must not be NULL. + * Upon success, "*pp" will point to after the last bytes read, and a stack + * will be returned. + * Upon failure, a NULL pointer will be returned, and the position of "*pp" is + * not defined. + */ +STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a, const unsigned char **pp, + long len); + +/* + * Serialize (to TLS format) an |sct| and write it to |out|. + * If |out| is null, no SCT will be output but the length will still be returned. + * If |out| points to a null pointer, a string will be allocated to hold the + * TLS-format SCT. It is the responsibility of the caller to free it. + * If |out| points to an allocated string, the TLS-format SCT will be written + * to it. + * The length of the SCT in TLS format will be returned. + */ +__owur int i2o_SCT(const SCT *sct, unsigned char **out); + +/* + * Parses an SCT in TLS format and returns it. + * If |psct| is not null, it will end up pointing to the parsed SCT. If it + * already points to a non-null pointer, the pointer will be free'd. + * |in| should be a pointer to a string containing the TLS-format SCT. + * |in| will be advanced to the end of the SCT if parsing succeeds. + * |len| should be the length of the SCT in |in|. + * Returns NULL if an error occurs. + * If the SCT is an unsupported version, only the SCT's 'sct' and 'sct_len' + * fields will be populated (with |in| and |len| respectively). + */ +SCT *o2i_SCT(SCT **psct, const unsigned char **in, size_t len); + +/******************** + * CT log functions * + ********************/ + +/* + * Creates a new CT log instance with the given |public_key| and |name|. + * Takes ownership of |public_key| but copies |name|. + * Returns NULL if malloc fails or if |public_key| cannot be converted to DER. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +CTLOG *CTLOG_new(EVP_PKEY *public_key, const char *name); + +/* + * Creates a new CTLOG instance with the base64-encoded SubjectPublicKeyInfo DER + * in |pkey_base64|. The |name| is a string to help users identify this log. + * Returns 1 on success, 0 on failure. + * Should be deleted by the caller using CTLOG_free when no longer needed. + */ +int CTLOG_new_from_base64(CTLOG ** ct_log, + const char *pkey_base64, const char *name); + +/* + * Deletes a CT log instance and its fields. + */ +void CTLOG_free(CTLOG *log); + +/* Gets the name of the CT log */ +const char *CTLOG_get0_name(const CTLOG *log); +/* Gets the ID of the CT log */ +void CTLOG_get0_log_id(const CTLOG *log, const uint8_t **log_id, + size_t *log_id_len); +/* Gets the public key of the CT log */ +EVP_PKEY *CTLOG_get0_public_key(const CTLOG *log); + +/************************** + * CT log store functions * + **************************/ + +/* + * Creates a new CT log store. + * Should be deleted by the caller using CTLOG_STORE_free when no longer needed. + */ +CTLOG_STORE *CTLOG_STORE_new(void); + +/* + * Deletes a CT log store and all of the CT log instances held within. + */ +void CTLOG_STORE_free(CTLOG_STORE *store); + +/* + * Finds a CT log in the store based on its log ID. + * Returns the CT log, or NULL if no match is found. + */ +const CTLOG *CTLOG_STORE_get0_log_by_id(const CTLOG_STORE *store, + const uint8_t *log_id, + size_t log_id_len); + +/* + * Loads a CT log list into a |store| from a |file|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_file(CTLOG_STORE *store, const char *file); + +/* + * Loads the default CT log list into a |store|. + * Returns 1 if loading is successful, or 0 otherwise. + */ +__owur int CTLOG_STORE_load_default_file(CTLOG_STORE *store); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/cterr.h b/lib/openssl/include/openssl/cterr.h new file mode 100644 index 0000000..feb7bc5 --- /dev/null +++ b/lib/openssl/include/openssl/cterr.h @@ -0,0 +1,80 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_CTERR_H +# define HEADER_CTERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_CT + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_CT_strings(void); + +/* + * CT function codes. + */ +# define CT_F_CTLOG_NEW 117 +# define CT_F_CTLOG_NEW_FROM_BASE64 118 +# define CT_F_CTLOG_NEW_FROM_CONF 119 +# define CT_F_CTLOG_STORE_LOAD_CTX_NEW 122 +# define CT_F_CTLOG_STORE_LOAD_FILE 123 +# define CT_F_CTLOG_STORE_LOAD_LOG 130 +# define CT_F_CTLOG_STORE_NEW 131 +# define CT_F_CT_BASE64_DECODE 124 +# define CT_F_CT_POLICY_EVAL_CTX_NEW 133 +# define CT_F_CT_V1_LOG_ID_FROM_PKEY 125 +# define CT_F_I2O_SCT 107 +# define CT_F_I2O_SCT_LIST 108 +# define CT_F_I2O_SCT_SIGNATURE 109 +# define CT_F_O2I_SCT 110 +# define CT_F_O2I_SCT_LIST 111 +# define CT_F_O2I_SCT_SIGNATURE 112 +# define CT_F_SCT_CTX_NEW 126 +# define CT_F_SCT_CTX_VERIFY 128 +# define CT_F_SCT_NEW 100 +# define CT_F_SCT_NEW_FROM_BASE64 127 +# define CT_F_SCT_SET0_LOG_ID 101 +# define CT_F_SCT_SET1_EXTENSIONS 114 +# define CT_F_SCT_SET1_LOG_ID 115 +# define CT_F_SCT_SET1_SIGNATURE 116 +# define CT_F_SCT_SET_LOG_ENTRY_TYPE 102 +# define CT_F_SCT_SET_SIGNATURE_NID 103 +# define CT_F_SCT_SET_VERSION 104 + +/* + * CT reason codes. + */ +# define CT_R_BASE64_DECODE_ERROR 108 +# define CT_R_INVALID_LOG_ID_LENGTH 100 +# define CT_R_LOG_CONF_INVALID 109 +# define CT_R_LOG_CONF_INVALID_KEY 110 +# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 +# define CT_R_LOG_CONF_MISSING_KEY 112 +# define CT_R_LOG_KEY_INVALID 113 +# define CT_R_SCT_FUTURE_TIMESTAMP 116 +# define CT_R_SCT_INVALID 104 +# define CT_R_SCT_INVALID_SIGNATURE 107 +# define CT_R_SCT_LIST_INVALID 105 +# define CT_R_SCT_LOG_ID_MISMATCH 114 +# define CT_R_SCT_NOT_SET 106 +# define CT_R_SCT_UNSUPPORTED_VERSION 115 +# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 +# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 +# define CT_R_UNSUPPORTED_VERSION 103 + +# endif +#endif diff --git a/lib/openssl/include/openssl/des.h b/lib/openssl/include/openssl/des.h new file mode 100644 index 0000000..be4abbd --- /dev/null +++ b/lib/openssl/include/openssl/des.h @@ -0,0 +1,174 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DES_H +# define HEADER_DES_H + +# include + +# ifndef OPENSSL_NO_DES +# ifdef __cplusplus +extern "C" { +# endif +# include + +typedef unsigned int DES_LONG; + +# ifdef OPENSSL_BUILD_SHLIBCRYPTO +# undef OPENSSL_EXTERN +# define OPENSSL_EXTERN OPENSSL_EXPORT +# endif + +typedef unsigned char DES_cblock[8]; +typedef /* const */ unsigned char const_DES_cblock[8]; +/* + * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and + * const_DES_cblock * are incompatible pointer types. + */ + +typedef struct DES_ks { + union { + DES_cblock cblock; + /* + * make sure things are correct size on machines with 8 byte longs + */ + DES_LONG deslong[2]; + } ks[16]; +} DES_key_schedule; + +# define DES_KEY_SZ (sizeof(DES_cblock)) +# define DES_SCHEDULE_SZ (sizeof(DES_key_schedule)) + +# define DES_ENCRYPT 1 +# define DES_DECRYPT 0 + +# define DES_CBC_MODE 0 +# define DES_PCBC_MODE 1 + +# define DES_ecb2_encrypt(i,o,k1,k2,e) \ + DES_ecb3_encrypt((i),(o),(k1),(k2),(k1),(e)) + +# define DES_ede2_cbc_encrypt(i,o,l,k1,k2,iv,e) \ + DES_ede3_cbc_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(e)) + +# define DES_ede2_cfb64_encrypt(i,o,l,k1,k2,iv,n,e) \ + DES_ede3_cfb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n),(e)) + +# define DES_ede2_ofb64_encrypt(i,o,l,k1,k2,iv,n) \ + DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) + +OPENSSL_DECLARE_GLOBAL(int, DES_check_key); /* defaults to false */ +# define DES_check_key OPENSSL_GLOBAL_REF(DES_check_key) + +const char *DES_options(void); +void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, int enc); +DES_LONG DES_cbc_cksum(const unsigned char *input, DES_cblock *output, + long length, DES_key_schedule *schedule, + const_DES_cblock *ivec); +/* DES_cbc_encrypt does not update the IV! Use DES_ncbc_encrypt instead. */ +void DES_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ncbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_xcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, const_DES_cblock *inw, + const_DES_cblock *outw, int enc); +void DES_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +void DES_ecb_encrypt(const_DES_cblock *input, DES_cblock *output, + DES_key_schedule *ks, int enc); + +/* + * This is the DES encryption function that gets called by just about every + * other DES routine in the library. You should not use this function except + * to implement 'modes' of DES. I say this because the functions that call + * this routine do the conversion from 'char *' to long, and this needs to be + * done to make sure 'non-aligned' memory access do not occur. The + * characters are loaded 'little endian'. Data is a pointer to 2 unsigned + * long's and ks is the DES_key_schedule to use. enc, is non zero specifies + * encryption, zero if decryption. + */ +void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc); + +/* + * This functions is the same as DES_encrypt1() except that the DES initial + * permutation (IP) and final permutation (FP) have been left out. As for + * DES_encrypt1(), you should not use this function. It is used by the + * routines in the library that implement triple DES. IP() DES_encrypt2() + * DES_encrypt2() DES_encrypt2() FP() is the same as DES_encrypt1() + * DES_encrypt1() DES_encrypt1() except faster :-). + */ +void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, int enc); + +void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3); +void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output, + long length, + DES_key_schedule *ks1, DES_key_schedule *ks2, + DES_key_schedule *ks3, DES_cblock *ivec, int enc); +void DES_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num, int enc); +void DES_ede3_cfb_encrypt(const unsigned char *in, unsigned char *out, + int numbits, long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int enc); +void DES_ede3_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *ks1, + DES_key_schedule *ks2, DES_key_schedule *ks3, + DES_cblock *ivec, int *num); +char *DES_fcrypt(const char *buf, const char *salt, char *ret); +char *DES_crypt(const char *buf, const char *salt); +void DES_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, DES_key_schedule *schedule, + DES_cblock *ivec); +void DES_pcbc_encrypt(const unsigned char *input, unsigned char *output, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int enc); +DES_LONG DES_quad_cksum(const unsigned char *input, DES_cblock output[], + long length, int out_count, DES_cblock *seed); +int DES_random_key(DES_cblock *ret); +void DES_set_odd_parity(DES_cblock *key); +int DES_check_key_parity(const_DES_cblock *key); +int DES_is_weak_key(const_DES_cblock *key); +/* + * DES_set_key (= set_key = DES_key_sched = key_sched) calls + * DES_set_key_checked if global variable DES_check_key is set, + * DES_set_key_unchecked otherwise. + */ +int DES_set_key(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_key_sched(const_DES_cblock *key, DES_key_schedule *schedule); +int DES_set_key_checked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule); +void DES_string_to_key(const char *str, DES_cblock *key); +void DES_string_to_2keys(const char *str, DES_cblock *key1, DES_cblock *key2); +void DES_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num, int enc); +void DES_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, DES_key_schedule *schedule, + DES_cblock *ivec, int *num); + +# define DES_fixup_key_parity DES_set_odd_parity + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/dh.h b/lib/openssl/include/openssl/dh.h new file mode 100644 index 0000000..3527540 --- /dev/null +++ b/lib/openssl/include/openssl/dh.h @@ -0,0 +1,340 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DH_H +# define HEADER_DH_H + +# include + +# ifndef OPENSSL_NO_DH +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_DH_MAX_MODULUS_BITS +# define OPENSSL_DH_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 + +# define DH_FLAG_CACHE_MONT_P 0x01 + +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DH_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * If this flag is set the DH method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DH_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DH_FLAG_NON_FIPS_ALLOW 0x0400 + +/* Already defined in ossl_typ.h */ +/* typedef struct dh_st DH; */ +/* typedef struct dh_method DH_METHOD; */ + +DECLARE_ASN1_ITEM(DHparams) + +# define DH_GENERATOR_2 2 +/* #define DH_GENERATOR_3 3 */ +# define DH_GENERATOR_5 5 + +/* DH_check error codes */ +# define DH_CHECK_P_NOT_PRIME 0x01 +# define DH_CHECK_P_NOT_SAFE_PRIME 0x02 +# define DH_UNABLE_TO_CHECK_GENERATOR 0x04 +# define DH_NOT_SUITABLE_GENERATOR 0x08 +# define DH_CHECK_Q_NOT_PRIME 0x10 +# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_J_VALUE 0x40 + +/* DH_check_pub_key error codes */ +# define DH_CHECK_PUBKEY_TOO_SMALL 0x01 +# define DH_CHECK_PUBKEY_TOO_LARGE 0x02 +# define DH_CHECK_PUBKEY_INVALID 0x04 + +/* + * primes p where (p-1)/2 is prime too are called "safe"; we define this for + * backward compatibility: + */ +# define DH_CHECK_P_NOT_STRONG_PRIME DH_CHECK_P_NOT_SAFE_PRIME + +# define d2i_DHparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHparams_fp(fp,x) \ + ASN1_i2d_fp(i2d_DHparams,(fp), (unsigned char *)(x)) +# define d2i_DHparams_bio(bp,x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHparams, bp, x) +# define i2d_DHparams_bio(bp,x) \ + ASN1_i2d_bio_of_const(DH,i2d_DHparams,bp,x) + +# define d2i_DHxparams_fp(fp,x) \ + (DH *)ASN1_d2i_fp((char *(*)())DH_new, \ + (char *(*)())d2i_DHxparams, \ + (fp), \ + (unsigned char **)(x)) +# define i2d_DHxparams_fp(fp,x) \ + ASN1_i2d_fp(i2d_DHxparams,(fp), (unsigned char *)(x)) +# define d2i_DHxparams_bio(bp,x) \ + ASN1_d2i_bio_of(DH, DH_new, d2i_DHxparams, bp, x) +# define i2d_DHxparams_bio(bp,x) \ + ASN1_i2d_bio_of_const(DH, i2d_DHxparams, bp, x) + +DH *DHparams_dup(DH *); + +const DH_METHOD *DH_OpenSSL(void); + +void DH_set_default_method(const DH_METHOD *meth); +const DH_METHOD *DH_get_default_method(void); +int DH_set_method(DH *dh, const DH_METHOD *meth); +DH *DH_new_method(ENGINE *engine); + +DH *DH_new(void); +void DH_free(DH *dh); +int DH_up_ref(DH *dh); +int DH_bits(const DH *dh); +int DH_size(const DH *dh); +int DH_security_bits(const DH *dh); +#define DH_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DH, l, p, newf, dupf, freef) +int DH_set_ex_data(DH *d, int idx, void *arg); +void *DH_get_ex_data(DH *d, int idx); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DH *DH_generate_parameters(int prime_len, int generator, + void (*callback) (int, int, + void *), + void *cb_arg)) + +/* New version */ +int DH_generate_parameters_ex(DH *dh, int prime_len, int generator, + BN_GENCB *cb); + +int DH_check_params_ex(const DH *dh); +int DH_check_ex(const DH *dh); +int DH_check_pub_key_ex(const DH *dh, const BIGNUM *pub_key); +int DH_check_params(const DH *dh, int *ret); +int DH_check(const DH *dh, int *codes); +int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes); +int DH_generate_key(DH *dh); +int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh); +DH *d2i_DHparams(DH **a, const unsigned char **pp, long length); +int i2d_DHparams(const DH *a, unsigned char **pp); +DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length); +int i2d_DHxparams(const DH *a, unsigned char **pp); +# ifndef OPENSSL_NO_STDIO +int DHparams_print_fp(FILE *fp, const DH *x); +# endif +int DHparams_print(BIO *bp, const DH *x); + +/* RFC 5114 parameters */ +DH *DH_get_1024_160(void); +DH *DH_get_2048_224(void); +DH *DH_get_2048_256(void); + +/* Named parameters, currently RFC7919 */ +DH *DH_new_by_nid(int nid); +int DH_get_nid(const DH *dh); + +# ifndef OPENSSL_NO_CMS +/* RFC2631 KDF */ +int DH_KDF_X9_42(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + ASN1_OBJECT *key_oid, + const unsigned char *ukm, size_t ukmlen, const EVP_MD *md); +# endif + +void DH_get0_pqg(const DH *dh, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DH_get0_key(const DH *dh, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DH_get0_p(const DH *dh); +const BIGNUM *DH_get0_q(const DH *dh); +const BIGNUM *DH_get0_g(const DH *dh); +const BIGNUM *DH_get0_priv_key(const DH *dh); +const BIGNUM *DH_get0_pub_key(const DH *dh); +void DH_clear_flags(DH *dh, int flags); +int DH_test_flags(const DH *dh, int flags); +void DH_set_flags(DH *dh, int flags); +ENGINE *DH_get0_engine(DH *d); +long DH_get_length(const DH *dh); +int DH_set_length(DH *dh, long length); + +DH_METHOD *DH_meth_new(const char *name, int flags); +void DH_meth_free(DH_METHOD *dhm); +DH_METHOD *DH_meth_dup(const DH_METHOD *dhm); +const char *DH_meth_get0_name(const DH_METHOD *dhm); +int DH_meth_set1_name(DH_METHOD *dhm, const char *name); +int DH_meth_get_flags(const DH_METHOD *dhm); +int DH_meth_set_flags(DH_METHOD *dhm, int flags); +void *DH_meth_get0_app_data(const DH_METHOD *dhm); +int DH_meth_set0_app_data(DH_METHOD *dhm, void *app_data); +int (*DH_meth_get_generate_key(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_generate_key(DH_METHOD *dhm, int (*generate_key) (DH *)); +int (*DH_meth_get_compute_key(const DH_METHOD *dhm)) + (unsigned char *key, const BIGNUM *pub_key, DH *dh); +int DH_meth_set_compute_key(DH_METHOD *dhm, + int (*compute_key) (unsigned char *key, const BIGNUM *pub_key, DH *dh)); +int (*DH_meth_get_bn_mod_exp(const DH_METHOD *dhm)) + (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DH_meth_set_bn_mod_exp(DH_METHOD *dhm, + int (*bn_mod_exp) (const DH *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DH_meth_get_init(const DH_METHOD *dhm))(DH *); +int DH_meth_set_init(DH_METHOD *dhm, int (*init)(DH *)); +int (*DH_meth_get_finish(const DH_METHOD *dhm)) (DH *); +int DH_meth_set_finish(DH_METHOD *dhm, int (*finish) (DH *)); +int (*DH_meth_get_generate_params(const DH_METHOD *dhm)) + (DH *, int, int, BN_GENCB *); +int DH_meth_set_generate_params(DH_METHOD *dhm, + int (*generate_params) (DH *, int, int, BN_GENCB *)); + + +# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL) + +# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DH_RFC5114, gen, NULL) + +# define EVP_PKEY_CTX_set_dh_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, \ + EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_DH_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_dh_pad(ctx, pad) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_PAD, pad, NULL) + +# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)(oid)) + +# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)(poid)) + +# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)(plen)) + +# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)(p)) + +# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)(p)) + +# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) +# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) +# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) +# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) + +/* KDF types */ +# define EVP_PKEY_DH_KDF_NONE 1 +# ifndef OPENSSL_NO_CMS +# define EVP_PKEY_DH_KDF_X9_42 2 +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/dherr.h b/lib/openssl/include/openssl/dherr.h new file mode 100644 index 0000000..916b3be --- /dev/null +++ b/lib/openssl/include/openssl/dherr.h @@ -0,0 +1,88 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DHERR_H +# define HEADER_DHERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_DH + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DH_strings(void); + +/* + * DH function codes. + */ +# define DH_F_COMPUTE_KEY 102 +# define DH_F_DHPARAMS_PRINT_FP 101 +# define DH_F_DH_BUILTIN_GENPARAMS 106 +# define DH_F_DH_CHECK_EX 121 +# define DH_F_DH_CHECK_PARAMS_EX 122 +# define DH_F_DH_CHECK_PUB_KEY_EX 123 +# define DH_F_DH_CMS_DECRYPT 114 +# define DH_F_DH_CMS_SET_PEERKEY 115 +# define DH_F_DH_CMS_SET_SHARED_INFO 116 +# define DH_F_DH_METH_DUP 117 +# define DH_F_DH_METH_NEW 118 +# define DH_F_DH_METH_SET1_NAME 119 +# define DH_F_DH_NEW_BY_NID 104 +# define DH_F_DH_NEW_METHOD 105 +# define DH_F_DH_PARAM_DECODE 107 +# define DH_F_DH_PKEY_PUBLIC_CHECK 124 +# define DH_F_DH_PRIV_DECODE 110 +# define DH_F_DH_PRIV_ENCODE 111 +# define DH_F_DH_PUB_DECODE 108 +# define DH_F_DH_PUB_ENCODE 109 +# define DH_F_DO_DH_PRINT 100 +# define DH_F_GENERATE_KEY 103 +# define DH_F_PKEY_DH_CTRL_STR 120 +# define DH_F_PKEY_DH_DERIVE 112 +# define DH_F_PKEY_DH_INIT 125 +# define DH_F_PKEY_DH_KEYGEN 113 + +/* + * DH reason codes. + */ +# define DH_R_BAD_GENERATOR 101 +# define DH_R_BN_DECODE_ERROR 109 +# define DH_R_BN_ERROR 106 +# define DH_R_CHECK_INVALID_J_VALUE 115 +# define DH_R_CHECK_INVALID_Q_VALUE 116 +# define DH_R_CHECK_PUBKEY_INVALID 122 +# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 +# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 +# define DH_R_CHECK_P_NOT_PRIME 117 +# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 +# define DH_R_CHECK_Q_NOT_PRIME 119 +# define DH_R_DECODE_ERROR 104 +# define DH_R_INVALID_PARAMETER_NAME 110 +# define DH_R_INVALID_PARAMETER_NID 114 +# define DH_R_INVALID_PUBKEY 102 +# define DH_R_KDF_PARAMETER_ERROR 112 +# define DH_R_KEYS_NOT_SET 108 +# define DH_R_MISSING_PUBKEY 125 +# define DH_R_MODULUS_TOO_LARGE 103 +# define DH_R_NOT_SUITABLE_GENERATOR 120 +# define DH_R_NO_PARAMETERS_SET 107 +# define DH_R_NO_PRIVATE_VALUE 100 +# define DH_R_PARAMETER_ENCODING_ERROR 105 +# define DH_R_PEER_KEY_ERROR 111 +# define DH_R_SHARED_INFO_ERROR 113 +# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 + +# endif +#endif diff --git a/lib/openssl/include/openssl/dsa.h b/lib/openssl/include/openssl/dsa.h new file mode 100644 index 0000000..6d8a18a --- /dev/null +++ b/lib/openssl/include/openssl/dsa.h @@ -0,0 +1,244 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DSA_H +# define HEADER_DSA_H + +# include + +# ifndef OPENSSL_NO_DSA +# ifdef __cplusplus +extern "C" { +# endif +# include +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include + +# ifndef OPENSSL_DSA_MAX_MODULUS_BITS +# define OPENSSL_DSA_MAX_MODULUS_BITS 10000 +# endif + +# define OPENSSL_DSA_FIPS_MIN_MODULUS_BITS 1024 + +# define DSA_FLAG_CACHE_MONT_P 0x01 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define DSA_FLAG_NO_EXP_CONSTTIME 0x00 +# endif + +/* + * If this flag is set the DSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define DSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define DSA_FLAG_NON_FIPS_ALLOW 0x0400 +# define DSA_FLAG_FIPS_CHECKED 0x0800 + +/* Already defined in ossl_typ.h */ +/* typedef struct dsa_st DSA; */ +/* typedef struct dsa_method DSA_METHOD; */ + +typedef struct DSA_SIG_st DSA_SIG; + +# define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \ + (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x)) +# define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \ + (unsigned char *)(x)) +# define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x) +# define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x) + +DSA *DSAparams_dup(DSA *x); +DSA_SIG *DSA_SIG_new(void); +void DSA_SIG_free(DSA_SIG *a); +int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); +DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, const unsigned char **pp, long length); +void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); +int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa); +int DSA_do_verify(const unsigned char *dgst, int dgst_len, + DSA_SIG *sig, DSA *dsa); + +const DSA_METHOD *DSA_OpenSSL(void); + +void DSA_set_default_method(const DSA_METHOD *); +const DSA_METHOD *DSA_get_default_method(void); +int DSA_set_method(DSA *dsa, const DSA_METHOD *); +const DSA_METHOD *DSA_get_method(DSA *d); + +DSA *DSA_new(void); +DSA *DSA_new_method(ENGINE *engine); +void DSA_free(DSA *r); +/* "up" the DSA object's reference count */ +int DSA_up_ref(DSA *r); +int DSA_size(const DSA *); +int DSA_bits(const DSA *d); +int DSA_security_bits(const DSA *d); + /* next 4 return -1 on error */ +DEPRECATEDIN_1_2_0(int DSA_sign_setup(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM **rp)) +int DSA_sign(int type, const unsigned char *dgst, int dlen, + unsigned char *sig, unsigned int *siglen, DSA *dsa); +int DSA_verify(int type, const unsigned char *dgst, int dgst_len, + const unsigned char *sigbuf, int siglen, DSA *dsa); +#define DSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DSA, l, p, newf, dupf, freef) +int DSA_set_ex_data(DSA *d, int idx, void *arg); +void *DSA_get_ex_data(DSA *d, int idx); + +DSA *d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); +DSA *d2i_DSAparams(DSA **a, const unsigned char **pp, long length); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(DSA *DSA_generate_parameters(int bits, + unsigned char *seed, + int seed_len, + int *counter_ret, + unsigned long *h_ret, void + (*callback) (int, int, + void *), + void *cb_arg)) + +/* New version */ +int DSA_generate_parameters_ex(DSA *dsa, int bits, + const unsigned char *seed, int seed_len, + int *counter_ret, unsigned long *h_ret, + BN_GENCB *cb); + +int DSA_generate_key(DSA *a); +int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); +int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); +int i2d_DSAparams(const DSA *a, unsigned char **pp); + +int DSAparams_print(BIO *bp, const DSA *x); +int DSA_print(BIO *bp, const DSA *x, int off); +# ifndef OPENSSL_NO_STDIO +int DSAparams_print_fp(FILE *fp, const DSA *x); +int DSA_print_fp(FILE *bp, const DSA *x, int off); +# endif + +# define DSS_prime_checks 64 +/* + * Primality test according to FIPS PUB 186-4, Appendix C.3. Since we only + * have one value here we set the number of checks to 64 which is the 128 bit + * security level that is the highest level and valid for creating a 3072 bit + * DSA key. + */ +# define DSA_is_prime(n, callback, cb_arg) \ + BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg) + +# ifndef OPENSSL_NO_DH +/* + * Convert DSA structure (key or just parameters) into DH structure (be + * careful to avoid small subgroup attacks when using this!) + */ +DH *DSA_dup_DH(const DSA *r); +# endif + +# define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_q_bits(ctx, qbits) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS, qbits, NULL) +# define EVP_PKEY_CTX_set_dsa_paramgen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \ + EVP_PKEY_CTRL_DSA_PARAMGEN_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3) + +void DSA_get0_pqg(const DSA *d, + const BIGNUM **p, const BIGNUM **q, const BIGNUM **g); +int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g); +void DSA_get0_key(const DSA *d, + const BIGNUM **pub_key, const BIGNUM **priv_key); +int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key); +const BIGNUM *DSA_get0_p(const DSA *d); +const BIGNUM *DSA_get0_q(const DSA *d); +const BIGNUM *DSA_get0_g(const DSA *d); +const BIGNUM *DSA_get0_pub_key(const DSA *d); +const BIGNUM *DSA_get0_priv_key(const DSA *d); +void DSA_clear_flags(DSA *d, int flags); +int DSA_test_flags(const DSA *d, int flags); +void DSA_set_flags(DSA *d, int flags); +ENGINE *DSA_get0_engine(DSA *d); + +DSA_METHOD *DSA_meth_new(const char *name, int flags); +void DSA_meth_free(DSA_METHOD *dsam); +DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam); +const char *DSA_meth_get0_name(const DSA_METHOD *dsam); +int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); +int DSA_meth_get_flags(const DSA_METHOD *dsam); +int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); +void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); +int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); +DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA *); +int DSA_meth_set_sign(DSA_METHOD *dsam, + DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); +int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) + (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); +int DSA_meth_set_sign_setup(DSA_METHOD *dsam, + int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); +int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) + (const unsigned char *, int, DSA_SIG *, DSA *); +int DSA_meth_set_verify(DSA_METHOD *dsam, + int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); +int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_mod_exp(DSA_METHOD *dsam, + int (*mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *, + BN_MONT_CTX *)); +int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) + (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, const BIGNUM *, + BN_CTX *, BN_MONT_CTX *); +int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, + int (*bn_mod_exp) (DSA *, BIGNUM *, const BIGNUM *, const BIGNUM *, + const BIGNUM *, BN_CTX *, BN_MONT_CTX *)); +int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); +int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); +int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); +int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) + (DSA *, int, const unsigned char *, int, int *, unsigned long *, + BN_GENCB *); +int DSA_meth_set_paramgen(DSA_METHOD *dsam, + int (*paramgen) (DSA *, int, const unsigned char *, int, int *, + unsigned long *, BN_GENCB *)); +int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); +int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/dsaerr.h b/lib/openssl/include/openssl/dsaerr.h new file mode 100644 index 0000000..495a1ac --- /dev/null +++ b/lib/openssl/include/openssl/dsaerr.h @@ -0,0 +1,72 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DSAERR_H +# define HEADER_DSAERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_DSA + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_DSA_strings(void); + +/* + * DSA function codes. + */ +# define DSA_F_DSAPARAMS_PRINT 100 +# define DSA_F_DSAPARAMS_PRINT_FP 101 +# define DSA_F_DSA_BUILTIN_PARAMGEN 125 +# define DSA_F_DSA_BUILTIN_PARAMGEN2 126 +# define DSA_F_DSA_DO_SIGN 112 +# define DSA_F_DSA_DO_VERIFY 113 +# define DSA_F_DSA_METH_DUP 127 +# define DSA_F_DSA_METH_NEW 128 +# define DSA_F_DSA_METH_SET1_NAME 129 +# define DSA_F_DSA_NEW_METHOD 103 +# define DSA_F_DSA_PARAM_DECODE 119 +# define DSA_F_DSA_PRINT_FP 105 +# define DSA_F_DSA_PRIV_DECODE 115 +# define DSA_F_DSA_PRIV_ENCODE 116 +# define DSA_F_DSA_PUB_DECODE 117 +# define DSA_F_DSA_PUB_ENCODE 118 +# define DSA_F_DSA_SIGN 106 +# define DSA_F_DSA_SIGN_SETUP 107 +# define DSA_F_DSA_SIG_NEW 102 +# define DSA_F_OLD_DSA_PRIV_DECODE 122 +# define DSA_F_PKEY_DSA_CTRL 120 +# define DSA_F_PKEY_DSA_CTRL_STR 104 +# define DSA_F_PKEY_DSA_KEYGEN 121 + +/* + * DSA reason codes. + */ +# define DSA_R_BAD_Q_VALUE 102 +# define DSA_R_BN_DECODE_ERROR 108 +# define DSA_R_BN_ERROR 109 +# define DSA_R_DECODE_ERROR 104 +# define DSA_R_INVALID_DIGEST_TYPE 106 +# define DSA_R_INVALID_PARAMETERS 112 +# define DSA_R_MISSING_PARAMETERS 101 +# define DSA_R_MISSING_PRIVATE_KEY 111 +# define DSA_R_MODULUS_TOO_LARGE 103 +# define DSA_R_NO_PARAMETERS_SET 107 +# define DSA_R_PARAMETER_ENCODING_ERROR 105 +# define DSA_R_Q_NOT_PRIME 113 +# define DSA_R_SEED_LEN_SMALL 110 + +# endif +#endif diff --git a/lib/openssl/include/openssl/dtls1.h b/lib/openssl/include/openssl/dtls1.h new file mode 100644 index 0000000..d55ca9c --- /dev/null +++ b/lib/openssl/include/openssl/dtls1.h @@ -0,0 +1,55 @@ +/* + * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DTLS1_H +# define HEADER_DTLS1_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define DTLS1_VERSION 0xFEFF +# define DTLS1_2_VERSION 0xFEFD +# define DTLS_MIN_VERSION DTLS1_VERSION +# define DTLS_MAX_VERSION DTLS1_2_VERSION +# define DTLS1_VERSION_MAJOR 0xFE + +# define DTLS1_BAD_VER 0x0100 + +/* Special value for method supporting multiple versions */ +# define DTLS_ANY_VERSION 0x1FFFF + +/* lengths of messages */ +/* + * Actually the max cookie length in DTLS is 255. But we can't change this now + * due to compatibility concerns. + */ +# define DTLS1_COOKIE_LENGTH 256 + +# define DTLS1_RT_HEADER_LENGTH 13 + +# define DTLS1_HM_HEADER_LENGTH 12 + +# define DTLS1_HM_BAD_FRAGMENT -2 +# define DTLS1_HM_FRAGMENT_RETRY -3 + +# define DTLS1_CCS_HEADER_LENGTH 1 + +# define DTLS1_AL_HEADER_LENGTH 2 + +/* Timeout multipliers */ +# define DTLS1_TMO_READ_COUNT 2 +# define DTLS1_TMO_WRITE_COUNT 2 + +# define DTLS1_TMO_ALERT_COUNT 12 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/e_os2.h b/lib/openssl/include/openssl/e_os2.h new file mode 100644 index 0000000..5c88e51 --- /dev/null +++ b/lib/openssl/include/openssl/e_os2.h @@ -0,0 +1,301 @@ +/* + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_E_OS2_H +# define HEADER_E_OS2_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/****************************************************************************** + * Detect operating systems. This probably needs completing. + * The result is that at least one OPENSSL_SYS_os macro should be defined. + * However, if none is defined, Unix is assumed. + **/ + +# define OPENSSL_SYS_UNIX + +/* --------------------- Microsoft operating systems ---------------------- */ + +/* + * Note that MSDOS actually denotes 32-bit environments running on top of + * MS-DOS, such as DJGPP one. + */ +# if defined(OPENSSL_SYS_MSDOS) +# undef OPENSSL_SYS_UNIX +# endif + +/* + * For 32 bit environment, there seems to be the CygWin environment and then + * all the others that try to do the same thing Microsoft does... + */ +/* + * UEFI lives here because it might be built with a Microsoft toolchain and + * we need to avoid the false positive match on Windows. + */ +# if defined(OPENSSL_SYS_UEFI) +# undef OPENSSL_SYS_UNIX +# elif defined(OPENSSL_SYS_UWIN) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WIN32_UWIN +# else +# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) +# define OPENSSL_SYS_WIN32_CYGWIN +# else +# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN32) +# define OPENSSL_SYS_WIN32 +# endif +# endif +# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) +# undef OPENSSL_SYS_UNIX +# if !defined(OPENSSL_SYS_WIN64) +# define OPENSSL_SYS_WIN64 +# endif +# endif +# if defined(OPENSSL_SYS_WINNT) +# undef OPENSSL_SYS_UNIX +# endif +# if defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# endif +# endif +# endif + +/* Anything that tries to look like Microsoft is "Windows" */ +# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) +# undef OPENSSL_SYS_UNIX +# define OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_SYS_MSDOS +# define OPENSSL_SYS_MSDOS +# endif +# endif + +/* + * DLL settings. This part is a bit tough, because it's up to the + * application implementor how he or she will link the application, so it + * requires some macro to be used. + */ +# ifdef OPENSSL_SYS_WINDOWS +# ifndef OPENSSL_OPT_WINDLL +# if defined(_WINDLL) /* This is used when building OpenSSL to + * indicate that DLL linkage should be used */ +# define OPENSSL_OPT_WINDLL +# endif +# endif +# endif + +/* ------------------------------- OpenVMS -------------------------------- */ +# if defined(__VMS) || defined(VMS) || defined(OPENSSL_SYS_VMS) +# if !defined(OPENSSL_SYS_VMS) +# undef OPENSSL_SYS_UNIX +# endif +# define OPENSSL_SYS_VMS +# if defined(__DECC) +# define OPENSSL_SYS_VMS_DECC +# elif defined(__DECCXX) +# define OPENSSL_SYS_VMS_DECC +# define OPENSSL_SYS_VMS_DECCXX +# else +# define OPENSSL_SYS_VMS_NODECC +# endif +# endif + +/* -------------------------------- Unix ---------------------------------- */ +# ifdef OPENSSL_SYS_UNIX +# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) +# define OPENSSL_SYS_LINUX +# endif +# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) +# define OPENSSL_SYS_AIX +# endif +# endif + +/* -------------------------------- VOS ----------------------------------- */ +# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) +# define OPENSSL_SYS_VOS +# ifdef __HPPA__ +# define OPENSSL_SYS_VOS_HPPA +# endif +# ifdef __IA32__ +# define OPENSSL_SYS_VOS_IA32 +# endif +# endif + +/** + * That's it for OS-specific stuff + *****************************************************************************/ + +/* Specials for I/O an exit */ +# ifdef OPENSSL_SYS_MSDOS +# define OPENSSL_UNISTD_IO +# define OPENSSL_DECLARE_EXIT extern void exit(int); +# else +# define OPENSSL_UNISTD_IO OPENSSL_UNISTD +# define OPENSSL_DECLARE_EXIT /* declared in unistd.h */ +# endif + +/*- + * OPENSSL_EXTERN is normally used to declare a symbol with possible extra + * attributes to handle its presence in a shared library. + * OPENSSL_EXPORT is used to define a symbol with extra possible attributes + * to make it visible in a shared library. + * Care needs to be taken when a header file is used both to declare and + * define symbols. Basically, for any library that exports some global + * variables, the following code must be present in the header file that + * declares them, before OPENSSL_EXTERN is used: + * + * #ifdef SOME_BUILD_FLAG_MACRO + * # undef OPENSSL_EXTERN + * # define OPENSSL_EXTERN OPENSSL_EXPORT + * #endif + * + * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN + * have some generally sensible values. + */ + +# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) +# define OPENSSL_EXPORT extern __declspec(dllexport) +# define OPENSSL_EXTERN extern __declspec(dllimport) +# else +# define OPENSSL_EXPORT extern +# define OPENSSL_EXTERN extern +# endif + +/*- + * Macros to allow global variables to be reached through function calls when + * required (if a shared library version requires it, for example. + * The way it's done allows definitions like this: + * + * // in foobar.c + * OPENSSL_IMPLEMENT_GLOBAL(int,foobar,0) + * // in foobar.h + * OPENSSL_DECLARE_GLOBAL(int,foobar); + * #define foobar OPENSSL_GLOBAL_REF(foobar) + */ +# ifdef OPENSSL_EXPORT_VAR_AS_FUNCTION +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) \ + type *_shadow_##name(void) \ + { static type _hide_##name=value; return &_hide_##name; } +# define OPENSSL_DECLARE_GLOBAL(type,name) type *_shadow_##name(void) +# define OPENSSL_GLOBAL_REF(name) (*(_shadow_##name())) +# else +# define OPENSSL_IMPLEMENT_GLOBAL(type,name,value) type _shadow_##name=value; +# define OPENSSL_DECLARE_GLOBAL(type,name) OPENSSL_EXPORT type _shadow_##name +# define OPENSSL_GLOBAL_REF(name) _shadow_##name +# endif + +# ifdef _WIN32 +# ifdef _WIN64 +# define ossl_ssize_t __int64 +# define OSSL_SSIZE_MAX _I64_MAX +# else +# define ossl_ssize_t int +# define OSSL_SSIZE_MAX INT_MAX +# endif +# endif + +# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) +# define ossl_ssize_t INTN +# define OSSL_SSIZE_MAX MAX_INTN +# endif + +# ifndef ossl_ssize_t +# define ossl_ssize_t ssize_t +# if defined(SSIZE_MAX) +# define OSSL_SSIZE_MAX SSIZE_MAX +# elif defined(_POSIX_SSIZE_MAX) +# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX +# else +# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) +# endif +# endif + +# ifdef DEBUG_UNUSED +# define __owur __attribute__((__warn_unused_result__)) +# else +# define __owur +# endif + +/* Standard integer types */ +# if defined(OPENSSL_SYS_UEFI) +typedef INT8 int8_t; +typedef UINT8 uint8_t; +typedef INT16 int16_t; +typedef UINT16 uint16_t; +typedef INT32 int32_t; +typedef UINT32 uint32_t; +typedef INT64 int64_t; +typedef UINT64 uint64_t; +# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ + defined(__osf__) || defined(__sgi) || defined(__hpux) || \ + defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) +# include +# elif defined(_MSC_VER) && _MSC_VER<1600 +/* + * minimally required typdefs for systems not supporting inttypes.h or + * stdint.h: currently just older VC++ + */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned int uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +# else +# include +# endif + +/* ossl_inline: portable inline definition usable in public headers */ +# if !defined(inline) && !defined(__cplusplus) +# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L + /* just use inline */ +# define ossl_inline inline +# elif defined(__GNUC__) && __GNUC__>=2 +# define ossl_inline __inline__ +# elif defined(_MSC_VER) + /* + * Visual Studio: inline is available in C++ only, however + * __inline is available for C, see + * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx + */ +# define ossl_inline __inline +# else +# define ossl_inline +# endif +# else +# define ossl_inline inline +# endif + +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ + !defined(__cplusplus) +# define ossl_noreturn _Noreturn +# elif defined(__GNUC__) && __GNUC__ >= 2 +# define ossl_noreturn __attribute__((noreturn)) +# else +# define ossl_noreturn +# endif + +/* ossl_unused: portable unused attribute for use in public headers */ +# if defined(__GNUC__) +# define ossl_unused __attribute__((unused)) +# else +# define ossl_unused +# endif + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/ebcdic.h b/lib/openssl/include/openssl/ebcdic.h new file mode 100644 index 0000000..aa01285 --- /dev/null +++ b/lib/openssl/include/openssl/ebcdic.h @@ -0,0 +1,33 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EBCDIC_H +# define HEADER_EBCDIC_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid name clashes with other applications */ +# define os_toascii _openssl_os_toascii +# define os_toebcdic _openssl_os_toebcdic +# define ebcdic2ascii _openssl_ebcdic2ascii +# define ascii2ebcdic _openssl_ascii2ebcdic + +extern const unsigned char os_toascii[256]; +extern const unsigned char os_toebcdic[256]; +void *ebcdic2ascii(void *dest, const void *srce, size_t count); +void *ascii2ebcdic(void *dest, const void *srce, size_t count); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/ec.h b/lib/openssl/include/openssl/ec.h new file mode 100644 index 0000000..24baf53 --- /dev/null +++ b/lib/openssl/include/openssl/ec.h @@ -0,0 +1,1484 @@ +/* + * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EC_H +# define HEADER_EC_H + +# include + +# ifndef OPENSSL_NO_EC +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef OPENSSL_ECC_MAX_FIELD_BITS +# define OPENSSL_ECC_MAX_FIELD_BITS 661 +# endif + +/** Enum for the point conversion form as defined in X9.62 (ECDSA) + * for the encoding of a elliptic curve point (x,y) */ +typedef enum { + /** the point is encoded as z||x, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_COMPRESSED = 2, + /** the point is encoded as z||x||y, where z is the octet 0x04 */ + POINT_CONVERSION_UNCOMPRESSED = 4, + /** the point is encoded as z||x||y, where the octet z specifies + * which solution of the quadratic equation y is */ + POINT_CONVERSION_HYBRID = 6 +} point_conversion_form_t; + +typedef struct ec_method_st EC_METHOD; +typedef struct ec_group_st EC_GROUP; +typedef struct ec_point_st EC_POINT; +typedef struct ecpk_parameters_st ECPKPARAMETERS; +typedef struct ec_parameters_st ECPARAMETERS; + +/********************************************************************/ +/* EC_METHODs for curves over GF(p) */ +/********************************************************************/ + +/** Returns the basic GFp ec methods which provides the basis for the + * optimized methods. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_simple_method(void); + +/** Returns GFp methods using montgomery multiplication. + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_mont_method(void); + +/** Returns GFp methods using optimized methods for NIST recommended curves + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nist_method(void); + +# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +/** Returns 64-bit optimized methods for nistp224 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp224_method(void); + +/** Returns 64-bit optimized methods for nistp256 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp256_method(void); + +/** Returns 64-bit optimized methods for nistp521 + * \return EC_METHOD object + */ +const EC_METHOD *EC_GFp_nistp521_method(void); +# endif + +# ifndef OPENSSL_NO_EC2M +/********************************************************************/ +/* EC_METHOD for curves over GF(2^m) */ +/********************************************************************/ + +/** Returns the basic GF2m ec method + * \return EC_METHOD object + */ +const EC_METHOD *EC_GF2m_simple_method(void); + +# endif + +/********************************************************************/ +/* EC_GROUP functions */ +/********************************************************************/ + +/** Creates a new EC_GROUP object + * \param meth EC_METHOD to use + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_new(const EC_METHOD *meth); + +/** Frees a EC_GROUP object + * \param group EC_GROUP object to be freed. + */ +void EC_GROUP_free(EC_GROUP *group); + +/** Clears and frees a EC_GROUP object + * \param group EC_GROUP object to be cleared and freed. + */ +void EC_GROUP_clear_free(EC_GROUP *group); + +/** Copies EC_GROUP objects. Note: both EC_GROUPs must use the same EC_METHOD. + * \param dst destination EC_GROUP object + * \param src source EC_GROUP object + * \return 1 on success and 0 if an error occurred. + */ +int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); + +/** Creates a new EC_GROUP object and copies the copies the content + * form src to the newly created EC_KEY object + * \param src source EC_GROUP object + * \return newly created EC_GROUP object or NULL in case of an error. + */ +EC_GROUP *EC_GROUP_dup(const EC_GROUP *src); + +/** Returns the EC_METHOD of the EC_GROUP object. + * \param group EC_GROUP object + * \return EC_METHOD used in this EC_GROUP object. + */ +const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group); + +/** Returns the field type of the EC_METHOD. + * \param meth EC_METHOD object + * \return NID of the underlying field type OID. + */ +int EC_METHOD_get_field_type(const EC_METHOD *meth); + +/** Sets the generator and its order/cofactor of a EC_GROUP object. + * \param group EC_GROUP object + * \param generator EC_POINT object with the generator. + * \param order the order of the group generated by the generator. + * \param cofactor the index of the sub-group generated by the generator + * in the group of all points on the elliptic curve. + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, + const BIGNUM *order, const BIGNUM *cofactor); + +/** Returns the generator of a EC_GROUP object. + * \param group EC_GROUP object + * \return the currently used generator (possibly NULL). + */ +const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); + +/** Returns the montgomery data for order(Generator) + * \param group EC_GROUP object + * \return the currently used montgomery data (possibly NULL). +*/ +BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); + +/** Gets the order of a EC_GROUP + * \param group EC_GROUP object + * \param order BIGNUM to which the order is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); + +/** Gets the order of an EC_GROUP + * \param group EC_GROUP object + * \return the group order + */ +const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); + +/** Gets the number of bits of the order of an EC_GROUP + * \param group EC_GROUP object + * \return number of bits of group order. + */ +int EC_GROUP_order_bits(const EC_GROUP *group); + +/** Gets the cofactor of a EC_GROUP + * \param group EC_GROUP object + * \param cofactor BIGNUM to which the cofactor is copied + * \param ctx unused + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, + BN_CTX *ctx); + +/** Gets the cofactor of an EC_GROUP + * \param group EC_GROUP object + * \return the group cofactor + */ +const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); + +/** Sets the name of a EC_GROUP object + * \param group EC_GROUP object + * \param nid NID of the curve name OID + */ +void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); + +/** Returns the curve name of a EC_GROUP object + * \param group EC_GROUP object + * \return NID of the curve name OID or 0 if not set. + */ +int EC_GROUP_get_curve_name(const EC_GROUP *group); + +void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag); +int EC_GROUP_get_asn1_flag(const EC_GROUP *group); + +void EC_GROUP_set_point_conversion_form(EC_GROUP *group, + point_conversion_form_t form); +point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); + +unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x); +size_t EC_GROUP_get_seed_len(const EC_GROUP *); +size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len); + +/** Sets the parameters of a ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); + +/** Gets the parameters of the ec curve defined by y^2 = x^3 + a*x + b (for GFp) + * or y^2 + x*y = x^3 + a*x^2 + b (for GF2m) + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_get_curve(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, + BN_CTX *ctx); + +/** Sets the parameters of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) + +# ifndef OPENSSL_NO_EC2M +/** Sets the parameter of an ec curve. Synonym for EC_GROUP_set_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM with parameter a of the equation + * \param b BIGNUM with parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, + const BIGNUM *a, const BIGNUM *b, + BN_CTX *ctx)) + +/** Gets the parameters of an ec curve. Synonym for EC_GROUP_get_curve + * \param group EC_GROUP object + * \param p BIGNUM with the prime number (GFp) or the polynomial + * defining the underlying field (GF2m) + * \param a BIGNUM for parameter a of the equation + * \param b BIGNUM for parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, + BIGNUM *a, BIGNUM *b, + BN_CTX *ctx)) +# endif +/** Returns the number of bits needed to represent a field element + * \param group EC_GROUP object + * \return number of bits needed to represent a field element + */ +int EC_GROUP_get_degree(const EC_GROUP *group); + +/** Checks whether the parameter in the EC_GROUP define a valid ec group + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if group is a valid ec group and 0 otherwise + */ +int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); + +/** Checks whether the discriminant of the elliptic curve is zero or not + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 if the discriminant is not zero and 0 otherwise + */ +int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); + +/** Compares two EC_GROUP objects + * \param a first EC_GROUP object + * \param b second EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 0 if the groups are equal, 1 if not, or -1 on error + */ +int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); + +/* + * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after + * choosing an appropriate EC_METHOD + */ + +/** Creates a new EC_GROUP object with the specified parameters defined + * over GFp (defined by the equation y^2 = x^3 + a*x + b) + * \param p BIGNUM with the prime number + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# ifndef OPENSSL_NO_EC2M +/** Creates a new EC_GROUP object with the specified parameters defined + * over GF2m (defined by the equation y^2 + x*y = x^3 + a*x^2 + b) + * \param p BIGNUM with the polynomial defining the underlying field + * \param a BIGNUM with the parameter a of the equation + * \param b BIGNUM with the parameter b of the equation + * \param ctx BN_CTX object (optional) + * \return newly created EC_GROUP object with the specified parameters + */ +EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, + const BIGNUM *b, BN_CTX *ctx); +# endif + +/** Creates a EC_GROUP object with a curve specified by a NID + * \param nid NID of the OID of the curve name + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_by_curve_name(int nid); + +/** Creates a new EC_GROUP object from an ECPARAMETERS object + * \param params pointer to the ECPARAMETERS object + * \return newly created EC_GROUP object with specified curve or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); + +/** Creates an ECPARAMETERS object for the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPARAMETERS object or NULL + * \return pointer to the new ECPARAMETERS object or NULL + * if an error occurred. + */ +ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, + ECPARAMETERS *params); + +/** Creates a new EC_GROUP object from an ECPKPARAMETERS object + * \param params pointer to an existing ECPKPARAMETERS object, or NULL + * \return newly created EC_GROUP object with specified curve, or NULL + * if an error occurred + */ +EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); + +/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. + * \param group pointer to the EC_GROUP object + * \param params pointer to an existing ECPKPARAMETERS object or NULL + * \return pointer to the new ECPKPARAMETERS object or NULL + * if an error occurred. + */ +ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, + ECPKPARAMETERS *params); + +/********************************************************************/ +/* handling of internal curves */ +/********************************************************************/ + +typedef struct { + int nid; + const char *comment; +} EC_builtin_curve; + +/* + * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all + * available curves or zero if a error occurred. In case r is not zero, + * nitems EC_builtin_curve structures are filled with the data of the first + * nitems internal groups + */ +size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems); + +const char *EC_curve_nid2nist(int nid); +int EC_curve_nist2nid(const char *name); + +/********************************************************************/ +/* EC_POINT functions */ +/********************************************************************/ + +/** Creates a new EC_POINT object for the specified EC_GROUP + * \param group EC_GROUP the underlying EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_new(const EC_GROUP *group); + +/** Frees a EC_POINT object + * \param point EC_POINT object to be freed + */ +void EC_POINT_free(EC_POINT *point); + +/** Clears and frees a EC_POINT object + * \param point EC_POINT object to be cleared and freed + */ +void EC_POINT_clear_free(EC_POINT *point); + +/** Copies EC_POINT object + * \param dst destination EC_POINT object + * \param src source EC_POINT object + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); + +/** Creates a new EC_POINT object and copies the content of the supplied + * EC_POINT + * \param src source EC_POINT object + * \param group underlying the EC_GROUP object + * \return newly created EC_POINT object or NULL if an error occurred + */ +EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); + +/** Returns the EC_METHOD used in EC_POINT object + * \param point EC_POINT object + * \return the EC_METHOD used + */ +const EC_METHOD *EC_POINT_method_of(const EC_POINT *point); + +/** Sets a point to infinity (neutral element) + * \param group underlying EC_GROUP object + * \param point EC_POINT to set to infinity + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point); + +/** Sets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param z BIGNUM with the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, const BIGNUM *x, + const BIGNUM *y, const BIGNUM *z, + BN_CTX *ctx); + +/** Gets the jacobian projective coordinates of a EC_POINT over GFp + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param z BIGNUM for the z-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, BIGNUM *x, + BIGNUM *y, BIGNUM *z, + BN_CTX *ctx); + +/** Sets the affine coordinates of an EC_POINT + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, const BIGNUM *y, + BN_CTX *ctx); + +/** Gets the affine coordinates of an EC_POINT. + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_get_affine_coordinates(const EC_GROUP *group, const EC_POINT *p, + BIGNUM *x, BIGNUM *y, BN_CTX *ctx); + +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) + +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) + +/** Sets the x9.62 compressed coordinates of a EC_POINT + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_set_compressed_coordinates(const EC_GROUP *group, EC_POINT *p, + const BIGNUM *x, int y_bit, + BN_CTX *ctx); + +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) +# ifndef OPENSSL_NO_EC2M +/** Sets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_set_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with the x-coordinate + * \param y BIGNUM with the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + const BIGNUM *y, + BN_CTX *ctx)) + +/** Gets the affine coordinates of an EC_POINT. A synonym of + * EC_POINT_get_affine_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM for the x-coordinate + * \param y BIGNUM for the y-coordinate + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, + const EC_POINT *p, + BIGNUM *x, + BIGNUM *y, + BN_CTX *ctx)) + +/** Sets the x9.62 compressed coordinates of a EC_POINT. A synonym of + * EC_POINT_set_compressed_coordinates + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param x BIGNUM with x-coordinate + * \param y_bit integer with the y-Bit (either 0 or 1) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +DEPRECATEDIN_1_2_0(int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, + EC_POINT *p, + const BIGNUM *x, + int y_bit, + BN_CTX *ctx)) +# endif +/** Encodes a EC_POINT object to a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param form point conversion form + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, + point_conversion_form_t form, + unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Decodes a EC_POINT from a octet string + * \param group underlying EC_GROUP object + * \param p EC_POINT object + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, + const unsigned char *buf, size_t len, BN_CTX *ctx); + +/** Encodes an EC_POINT object to an allocated octet string + * \param group underlying EC_GROUP object + * \param point EC_POINT object + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, + point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/* other interfaces to point2oct/oct2point: */ +BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BIGNUM *, BN_CTX *); +EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *, + EC_POINT *, BN_CTX *); +char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *, + point_conversion_form_t form, BN_CTX *); +EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *, + EC_POINT *, BN_CTX *); + +/********************************************************************/ +/* functions for doing EC_POINT arithmetic */ +/********************************************************************/ + +/** Computes the sum of two EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = a + b) + * \param a EC_POINT object with the first summand + * \param b EC_POINT object with the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + const EC_POINT *b, BN_CTX *ctx); + +/** Computes the double of a EC_POINT + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result (r = 2 * a) + * \param a EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, + BN_CTX *ctx); + +/** Computes the inverse of a EC_POINT + * \param group underlying EC_GROUP object + * \param a EC_POINT object to be inverted (it's used for the result as well) + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); + +/** Checks whether the point is the neutral element of the group + * \param group the underlying EC_GROUP object + * \param p EC_POINT object + * \return 1 if the point is the neutral element and 0 otherwise + */ +int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); + +/** Checks whether the point is on the curve + * \param group underlying EC_GROUP object + * \param point EC_POINT object to check + * \param ctx BN_CTX object (optional) + * \return 1 if the point is on the curve, 0 if not, or -1 on error + */ +int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, + BN_CTX *ctx); + +/** Compares two EC_POINTs + * \param group underlying EC_GROUP object + * \param a first EC_POINT object + * \param b second EC_POINT object + * \param ctx BN_CTX object (optional) + * \return 1 if the points are not equal, 0 if they are, or -1 on error + */ +int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, + BN_CTX *ctx); + +int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx); +int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, + EC_POINT *points[], BN_CTX *ctx); + +/** Computes r = generator * n + sum_{i=0}^{num-1} p[i] * m[i] + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param num number further summands + * \param p array of size num of EC_POINT objects + * \param m array of size num of BIGNUM objects + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + size_t num, const EC_POINT *p[], const BIGNUM *m[], + BN_CTX *ctx); + +/** Computes r = generator * n + q * m + * \param group underlying EC_GROUP object + * \param r EC_POINT object for the result + * \param n BIGNUM with the multiplier for the group generator (optional) + * \param q EC_POINT object with the first factor of the second summand + * \param m BIGNUM with the second factor of the second summand + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, + const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); + +/** Stores multiples of generator for faster point multiplication + * \param group EC_GROUP object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ +int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx); + +/** Reports whether a precomputation has been done + * \param group EC_GROUP object + * \return 1 if a pre-computation has been done and 0 otherwise + */ +int EC_GROUP_have_precompute_mult(const EC_GROUP *group); + +/********************************************************************/ +/* ASN1 stuff */ +/********************************************************************/ + +DECLARE_ASN1_ITEM(ECPKPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) +DECLARE_ASN1_ITEM(ECPARAMETERS) +DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) + +/* + * EC_GROUP_get_basis_type() returns the NID of the basis type used to + * represent the field elements + */ +int EC_GROUP_get_basis_type(const EC_GROUP *); +# ifndef OPENSSL_NO_EC2M +int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k); +int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1, + unsigned int *k2, unsigned int *k3); +# endif + +# define OPENSSL_EC_EXPLICIT_CURVE 0x000 +# define OPENSSL_EC_NAMED_CURVE 0x001 + +EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); +int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); + +# define d2i_ECPKParameters_bio(bp,x) \ + ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ + (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ + (void **)(x)) +# define i2d_ECPKParameters_fp(fp,x) \ + ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) + +int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); +# ifndef OPENSSL_NO_STDIO +int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off); +# endif + +/********************************************************************/ +/* EC_KEY functions */ +/********************************************************************/ + +/* some values for the encoding_flag */ +# define EC_PKEY_NO_PARAMETERS 0x001 +# define EC_PKEY_NO_PUBKEY 0x002 + +/* some values for the flags field */ +# define EC_FLAG_NON_FIPS_ALLOW 0x1 +# define EC_FLAG_FIPS_CHECKED 0x2 +# define EC_FLAG_COFACTOR_ECDH 0x1000 + +/** Creates a new EC_KEY object. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new(void); + +int EC_KEY_get_flags(const EC_KEY *key); + +void EC_KEY_set_flags(EC_KEY *key, int flags); + +void EC_KEY_clear_flags(EC_KEY *key, int flags); + +int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + +/** Creates a new EC_KEY object using a named curve as underlying + * EC_GROUP object. + * \param nid NID of the named curve. + * \return EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_new_by_curve_name(int nid); + +/** Frees a EC_KEY object. + * \param key EC_KEY object to be freed. + */ +void EC_KEY_free(EC_KEY *key); + +/** Copies a EC_KEY object. + * \param dst destination EC_KEY object + * \param src src EC_KEY object + * \return dst or NULL if an error occurred. + */ +EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src); + +/** Creates a new EC_KEY object and copies the content from src to it. + * \param src the source EC_KEY object + * \return newly created EC_KEY object or NULL if an error occurred. + */ +EC_KEY *EC_KEY_dup(const EC_KEY *src); + +/** Increases the internal reference count of a EC_KEY object. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_up_ref(EC_KEY *key); + +/** Returns the ENGINE object of a EC_KEY object + * \param eckey EC_KEY object + * \return the ENGINE object (possibly NULL). + */ +ENGINE *EC_KEY_get0_engine(const EC_KEY *eckey); + +/** Returns the EC_GROUP object of a EC_KEY object + * \param key EC_KEY object + * \return the EC_GROUP object (possibly NULL). + */ +const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key); + +/** Sets the EC_GROUP of a EC_KEY object. + * \param key EC_KEY object + * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY + * object will use an own copy of the EC_GROUP). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group); + +/** Returns the private key of a EC_KEY object. + * \param key EC_KEY object + * \return a BIGNUM with the private key (possibly NULL). + */ +const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key); + +/** Sets the private key of a EC_KEY object. + * \param key EC_KEY object + * \param prv BIGNUM with the private key (note: the EC_KEY object + * will use an own copy of the BIGNUM). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv); + +/** Returns the public key of a EC_KEY object. + * \param key the EC_KEY object + * \return a EC_POINT object with the public key (possibly NULL) + */ +const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key); + +/** Sets the public key of a EC_KEY object. + * \param key EC_KEY object + * \param pub EC_POINT object with the public key (note: the EC_KEY object + * will use an own copy of the EC_POINT object). + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); + +unsigned EC_KEY_get_enc_flags(const EC_KEY *key); +void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags); +point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key); +void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform); + +#define EC_KEY_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) +int EC_KEY_set_ex_data(EC_KEY *key, int idx, void *arg); +void *EC_KEY_get_ex_data(const EC_KEY *key, int idx); + +/* wrapper functions for the underlying EC_GROUP object */ +void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag); + +/** Creates a table of pre-computed multiples of the generator to + * accelerate further EC_KEY operations. + * \param key EC_KEY object + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx); + +/** Creates a new ec private (and optional a new public) key. + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred. + */ +int EC_KEY_generate_key(EC_KEY *key); + +/** Verifies that a private and/or public key is valid. + * \param key the EC_KEY object + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_check_key(const EC_KEY *key); + +/** Indicates if an EC_KEY can be used for signing. + * \param eckey the EC_KEY object + * \return 1 if can can sign and 0 otherwise. + */ +int EC_KEY_can_sign(const EC_KEY *eckey); + +/** Sets a public key from affine coordinates performing + * necessary NIST PKV tests. + * \param key the EC_KEY object + * \param x public key x coordinate + * \param y public key y coordinate + * \return 1 on success and 0 otherwise. + */ +int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, + BIGNUM *y); + +/** Encodes an EC_KEY public key to an allocated octet string + * \param key key to encode + * \param form point conversion form + * \param pbuf returns pointer to allocated buffer + * \param ctx BN_CTX object (optional) + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, + unsigned char **pbuf, BN_CTX *ctx); + +/** Decodes a EC_KEY public key from a octet string + * \param key key to decode + * \param buf memory buffer with the encoded ec point + * \param len length of the encoded ec point + * \param ctx BN_CTX object (optional) + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2key(EC_KEY *key, const unsigned char *buf, size_t len, + BN_CTX *ctx); + +/** Decodes an EC_KEY private key from an octet string + * \param key key to decode + * \param buf memory buffer with the encoded private key + * \param len length of the encoded key + * \return 1 on success and 0 if an error occurred + */ + +int EC_KEY_oct2priv(EC_KEY *key, const unsigned char *buf, size_t len); + +/** Encodes a EC_KEY private key to an octet string + * \param key key to encode + * \param buf memory buffer for the result. If NULL the function returns + * required buffer size. + * \param len length of the memory buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ + +size_t EC_KEY_priv2oct(const EC_KEY *key, unsigned char *buf, size_t len); + +/** Encodes an EC_KEY private key to an allocated octet string + * \param eckey key to encode + * \param pbuf returns pointer to allocated buffer + * \return the length of the encoded octet string or 0 if an error occurred + */ +size_t EC_KEY_priv2buf(const EC_KEY *eckey, unsigned char **pbuf); + +/********************************************************************/ +/* de- and encoding functions for SEC1 ECPrivateKey */ +/********************************************************************/ + +/** Decodes a private key from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded private key + * \param len length of the DER encoded private key + * \return the decoded private key or NULL if an error occurred. + */ +EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a private key object and stores the result in a buffer. + * \param key the EC_KEY object to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC parameters */ +/********************************************************************/ + +/** Decodes ec parameter from a memory buffer. + * \param key a pointer to a EC_KEY object which should be used (or NULL) + * \param in pointer to memory with the DER encoded ec parameters + * \param len length of the DER encoded ec parameters + * \return a EC_KEY object with the decoded parameters or NULL if an error + * occurred. + */ +EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes ec parameter and stores the result in a buffer. + * \param key the EC_KEY object with ec parameters to encode + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred. + */ +int i2d_ECParameters(EC_KEY *key, unsigned char **out); + +/********************************************************************/ +/* de- and encoding functions for EC public key */ +/* (octet string, not DER -- hence 'o2i' and 'i2o') */ +/********************************************************************/ + +/** Decodes a ec public key from a octet string. + * \param key a pointer to a EC_KEY object which should be used + * \param in memory buffer with the encoded public key + * \param len length of the encoded public key + * \return EC_KEY object with decoded public key or NULL if an error + * occurred. + */ +EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len); + +/** Encodes a ec public key in an octet string. + * \param key the EC_KEY object with the public key + * \param out the buffer for the result (if NULL the function returns number + * of bytes needed). + * \return 1 on success and 0 if an error occurred + */ +int i2o_ECPublicKey(const EC_KEY *key, unsigned char **out); + +/** Prints out the ec parameters on human readable form. + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print(BIO *bp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param bp BIO object to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); + +# ifndef OPENSSL_NO_STDIO +/** Prints out the ec parameters on human readable form. + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \return 1 on success and 0 if an error occurred + */ +int ECParameters_print_fp(FILE *fp, const EC_KEY *key); + +/** Prints out the contents of a EC_KEY object + * \param fp file descriptor to which the information is printed + * \param key EC_KEY object + * \param off line offset + * \return 1 on success and 0 if an error occurred + */ +int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); + +# endif + +const EC_KEY_METHOD *EC_KEY_OpenSSL(void); +const EC_KEY_METHOD *EC_KEY_get_default_method(void); +void EC_KEY_set_default_method(const EC_KEY_METHOD *meth); +const EC_KEY_METHOD *EC_KEY_get_method(const EC_KEY *key); +int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *meth); +EC_KEY *EC_KEY_new_method(ENGINE *engine); + +/** The old name for ecdh_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +int ECDH_KDF_X9_62(unsigned char *out, size_t outlen, + const unsigned char *Z, size_t Zlen, + const unsigned char *sinfo, size_t sinfolen, + const EVP_MD *md); + +int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key, + const EC_KEY *ecdh, + void *(*KDF) (const void *in, size_t inlen, + void *out, size_t *outlen)); + +typedef struct ECDSA_SIG_st ECDSA_SIG; + +/** Allocates and initialize a ECDSA_SIG structure + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_SIG_new(void); + +/** frees a ECDSA_SIG structure + * \param sig pointer to the ECDSA_SIG structure + */ +void ECDSA_SIG_free(ECDSA_SIG *sig); + +/** DER encode content of ECDSA_SIG object (note: this function modifies *pp + * (*pp += length of the DER encoded signature)). + * \param sig pointer to the ECDSA_SIG object + * \param pp pointer to a unsigned char pointer for the output or NULL + * \return the length of the DER encoded ECDSA_SIG object or a negative value + * on error + */ +int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp); + +/** Decodes a DER encoded ECDSA signature (note: this function changes *pp + * (*pp += len)). + * \param sig pointer to ECDSA_SIG pointer (may be NULL) + * \param pp memory buffer with the DER encoded signature + * \param len length of the buffer + * \return pointer to the decoded ECDSA_SIG structure (or NULL) + */ +ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len); + +/** Accessor for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \param pr pointer to BIGNUM pointer for r (may be NULL) + * \param ps pointer to BIGNUM pointer for s (may be NULL) + */ +void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); + +/** Accessor for r field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); + +/** Accessor for s field of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + */ +const BIGNUM *ECDSA_SIG_get0_s(const ECDSA_SIG *sig); + +/** Setter for r and s fields of ECDSA_SIG + * \param sig pointer to ECDSA_SIG structure + * \param r pointer to BIGNUM for r (may be NULL) + * \param s pointer to BIGNUM for s (may be NULL) + */ +int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); + +/** Computes the ECDSA signature of the given hash value using + * the supplied private key and returns the created signature. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len, + EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optional), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return pointer to a ECDSA_SIG structure or NULL if an error occurred + */ +ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, + const BIGNUM *kinv, const BIGNUM *rp, + EC_KEY *eckey); + +/** Verifies that the supplied signature is a valid ECDSA + * signature of the supplied hash value using the supplied public key. + * \param dgst pointer to the hash value + * \param dgst_len length of the hash value + * \param sig ECDSA_SIG structure + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, + const ECDSA_SIG *sig, EC_KEY *eckey); + +/** Precompute parts of the signing operation + * \param eckey EC_KEY object containing a private EC key + * \param ctx BN_CTX object (optional) + * \param kinv BIGNUM pointer for the inverse of k + * \param rp BIGNUM pointer for x coordinate of k * generator + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig memory for the DER encoded created signature + * \param siglen pointer to the length of the returned signature + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, EC_KEY *eckey); + +/** Computes ECDSA signature of a given hash value using the supplied + * private key (note: sig must point to ECDSA_size(eckey) bytes of memory). + * \param type this parameter is ignored + * \param dgst pointer to the hash value to sign + * \param dgstlen length of the hash value + * \param sig buffer to hold the DER encoded signature + * \param siglen pointer to the length of the returned signature + * \param kinv BIGNUM with a pre-computed inverse k (optional) + * \param rp BIGNUM with a pre-computed rp value (optional), + * see ECDSA_sign_setup + * \param eckey EC_KEY object containing a private EC key + * \return 1 on success and 0 otherwise + */ +int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, + unsigned char *sig, unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey); + +/** Verifies that the given signature is valid ECDSA signature + * of the supplied hash value using the specified public key. + * \param type this parameter is ignored + * \param dgst pointer to the hash value + * \param dgstlen length of the hash value + * \param sig pointer to the DER encoded signature + * \param siglen length of the DER encoded signature + * \param eckey EC_KEY object containing a public EC key + * \return 1 if the signature is valid, 0 if the signature is invalid + * and -1 on error + */ +int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, + const unsigned char *sig, int siglen, EC_KEY *eckey); + +/** Returns the maximum length of the DER encoded signature + * \param eckey EC_KEY object + * \return numbers of bytes required for the DER encoded signature + */ +int ECDSA_size(const EC_KEY *eckey); + +/********************************************************************/ +/* EC_KEY_METHOD constructors, destructors, writers and accessors */ +/********************************************************************/ + +EC_KEY_METHOD *EC_KEY_METHOD_new(const EC_KEY_METHOD *meth); +void EC_KEY_METHOD_free(EC_KEY_METHOD *meth); +void EC_KEY_METHOD_set_init(EC_KEY_METHOD *meth, + int (*init)(EC_KEY *key), + void (*finish)(EC_KEY *key), + int (*copy)(EC_KEY *dest, const EC_KEY *src), + int (*set_group)(EC_KEY *key, const EC_GROUP *grp), + int (*set_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (*set_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, + int (*keygen)(EC_KEY *key)); + +void EC_KEY_METHOD_set_compute_key(EC_KEY_METHOD *meth, + int (*ckey)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_set_sign(EC_KEY_METHOD *meth, + int (*sign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (*sign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(*sign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_set_verify(EC_KEY_METHOD *meth, + int (*verify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (*verify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_init(const EC_KEY_METHOD *meth, + int (**pinit)(EC_KEY *key), + void (**pfinish)(EC_KEY *key), + int (**pcopy)(EC_KEY *dest, const EC_KEY *src), + int (**pset_group)(EC_KEY *key, + const EC_GROUP *grp), + int (**pset_private)(EC_KEY *key, + const BIGNUM *priv_key), + int (**pset_public)(EC_KEY *key, + const EC_POINT *pub_key)); + +void EC_KEY_METHOD_get_keygen(const EC_KEY_METHOD *meth, + int (**pkeygen)(EC_KEY *key)); + +void EC_KEY_METHOD_get_compute_key(const EC_KEY_METHOD *meth, + int (**pck)(unsigned char **psec, + size_t *pseclen, + const EC_POINT *pub_key, + const EC_KEY *ecdh)); + +void EC_KEY_METHOD_get_sign(const EC_KEY_METHOD *meth, + int (**psign)(int type, const unsigned char *dgst, + int dlen, unsigned char *sig, + unsigned int *siglen, + const BIGNUM *kinv, const BIGNUM *r, + EC_KEY *eckey), + int (**psign_setup)(EC_KEY *eckey, BN_CTX *ctx_in, + BIGNUM **kinvp, BIGNUM **rp), + ECDSA_SIG *(**psign_sig)(const unsigned char *dgst, + int dgst_len, + const BIGNUM *in_kinv, + const BIGNUM *in_r, + EC_KEY *eckey)); + +void EC_KEY_METHOD_get_verify(const EC_KEY_METHOD *meth, + int (**pverify)(int type, const unsigned + char *dgst, int dgst_len, + const unsigned char *sigbuf, + int sig_len, EC_KEY *eckey), + int (**pverify_sig)(const unsigned char *dgst, + int dgst_len, + const ECDSA_SIG *sig, + EC_KEY *eckey)); + +# define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x) + +# ifndef __cplusplus +# if defined(__SUNPRO_C) +# if __SUNPRO_C >= 0x520 +# pragma error_messages (default,E_ARRAY_OF_INCOMPLETE_NONAME,E_ARRAY_OF_INCOMPLETE) +# endif +# endif +# endif + +# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL) + +# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL) + +# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL) + +# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL) + +# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, \ + (void *)(plen)) + +# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)(p)) + +# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \ + EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)(p)) + +/* SM2 will skip the operation check so no need to pass operation here */ +# define EVP_PKEY_CTX_set1_id(ctx, id, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_SET1_ID, (int)id_len, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id(ctx, id) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID, 0, (void*)(id)) + +# define EVP_PKEY_CTX_get1_id_len(ctx, id_len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, -1, \ + EVP_PKEY_CTRL_GET1_ID_LEN, 0, (void*)(id_len)) + +# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SET1_ID (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET1_ID (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_GET1_ID_LEN (EVP_PKEY_ALG_CTRL + 13) +/* KDF types */ +# define EVP_PKEY_ECDH_KDF_NONE 1 +# define EVP_PKEY_ECDH_KDF_X9_63 2 +/** The old name for EVP_PKEY_ECDH_KDF_X9_63 + * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * it is actually specified in ANSI X9.63. + * This identifier is retained for backwards compatibility + */ +# define EVP_PKEY_ECDH_KDF_X9_62 EVP_PKEY_ECDH_KDF_X9_63 + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/ecdh.h b/lib/openssl/include/openssl/ecdh.h new file mode 100644 index 0000000..681f3d5 --- /dev/null +++ b/lib/openssl/include/openssl/ecdh.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/lib/openssl/include/openssl/ecdsa.h b/lib/openssl/include/openssl/ecdsa.h new file mode 100644 index 0000000..681f3d5 --- /dev/null +++ b/lib/openssl/include/openssl/ecdsa.h @@ -0,0 +1,10 @@ +/* + * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include diff --git a/lib/openssl/include/openssl/ecerr.h b/lib/openssl/include/openssl/ecerr.h new file mode 100644 index 0000000..5173811 --- /dev/null +++ b/lib/openssl/include/openssl/ecerr.h @@ -0,0 +1,276 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ECERR_H +# define HEADER_ECERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_EC + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EC_strings(void); + +/* + * EC function codes. + */ +# define EC_F_BN_TO_FELEM 224 +# define EC_F_D2I_ECPARAMETERS 144 +# define EC_F_D2I_ECPKPARAMETERS 145 +# define EC_F_D2I_ECPRIVATEKEY 146 +# define EC_F_DO_EC_KEY_PRINT 221 +# define EC_F_ECDH_CMS_DECRYPT 238 +# define EC_F_ECDH_CMS_SET_SHARED_INFO 239 +# define EC_F_ECDH_COMPUTE_KEY 246 +# define EC_F_ECDH_SIMPLE_COMPUTE_KEY 257 +# define EC_F_ECDSA_DO_SIGN_EX 251 +# define EC_F_ECDSA_DO_VERIFY 252 +# define EC_F_ECDSA_SIGN_EX 254 +# define EC_F_ECDSA_SIGN_SETUP 248 +# define EC_F_ECDSA_SIG_NEW 265 +# define EC_F_ECDSA_VERIFY 253 +# define EC_F_ECD_ITEM_VERIFY 270 +# define EC_F_ECKEY_PARAM2TYPE 223 +# define EC_F_ECKEY_PARAM_DECODE 212 +# define EC_F_ECKEY_PRIV_DECODE 213 +# define EC_F_ECKEY_PRIV_ENCODE 214 +# define EC_F_ECKEY_PUB_DECODE 215 +# define EC_F_ECKEY_PUB_ENCODE 216 +# define EC_F_ECKEY_TYPE2PARAM 220 +# define EC_F_ECPARAMETERS_PRINT 147 +# define EC_F_ECPARAMETERS_PRINT_FP 148 +# define EC_F_ECPKPARAMETERS_PRINT 149 +# define EC_F_ECPKPARAMETERS_PRINT_FP 150 +# define EC_F_ECP_NISTZ256_GET_AFFINE 240 +# define EC_F_ECP_NISTZ256_INV_MOD_ORD 275 +# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243 +# define EC_F_ECP_NISTZ256_POINTS_MUL 241 +# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244 +# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242 +# define EC_F_ECX_KEY_OP 266 +# define EC_F_ECX_PRIV_ENCODE 267 +# define EC_F_ECX_PUB_ENCODE 268 +# define EC_F_EC_ASN1_GROUP2CURVE 153 +# define EC_F_EC_ASN1_GROUP2FIELDID 154 +# define EC_F_EC_GF2M_MONTGOMERY_POINT_MULTIPLY 208 +# define EC_F_EC_GF2M_SIMPLE_FIELD_INV 296 +# define EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT 159 +# define EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE 195 +# define EC_F_EC_GF2M_SIMPLE_LADDER_POST 285 +# define EC_F_EC_GF2M_SIMPLE_LADDER_PRE 288 +# define EC_F_EC_GF2M_SIMPLE_OCT2POINT 160 +# define EC_F_EC_GF2M_SIMPLE_POINT2OCT 161 +# define EC_F_EC_GF2M_SIMPLE_POINTS_MUL 289 +# define EC_F_EC_GF2M_SIMPLE_POINT_GET_AFFINE_COORDINATES 162 +# define EC_F_EC_GF2M_SIMPLE_POINT_SET_AFFINE_COORDINATES 163 +# define EC_F_EC_GF2M_SIMPLE_SET_COMPRESSED_COORDINATES 164 +# define EC_F_EC_GFP_MONT_FIELD_DECODE 133 +# define EC_F_EC_GFP_MONT_FIELD_ENCODE 134 +# define EC_F_EC_GFP_MONT_FIELD_INV 297 +# define EC_F_EC_GFP_MONT_FIELD_MUL 131 +# define EC_F_EC_GFP_MONT_FIELD_SET_TO_ONE 209 +# define EC_F_EC_GFP_MONT_FIELD_SQR 132 +# define EC_F_EC_GFP_MONT_GROUP_SET_CURVE 189 +# define EC_F_EC_GFP_NISTP224_GROUP_SET_CURVE 225 +# define EC_F_EC_GFP_NISTP224_POINTS_MUL 228 +# define EC_F_EC_GFP_NISTP224_POINT_GET_AFFINE_COORDINATES 226 +# define EC_F_EC_GFP_NISTP256_GROUP_SET_CURVE 230 +# define EC_F_EC_GFP_NISTP256_POINTS_MUL 231 +# define EC_F_EC_GFP_NISTP256_POINT_GET_AFFINE_COORDINATES 232 +# define EC_F_EC_GFP_NISTP521_GROUP_SET_CURVE 233 +# define EC_F_EC_GFP_NISTP521_POINTS_MUL 234 +# define EC_F_EC_GFP_NISTP521_POINT_GET_AFFINE_COORDINATES 235 +# define EC_F_EC_GFP_NIST_FIELD_MUL 200 +# define EC_F_EC_GFP_NIST_FIELD_SQR 201 +# define EC_F_EC_GFP_NIST_GROUP_SET_CURVE 202 +# define EC_F_EC_GFP_SIMPLE_BLIND_COORDINATES 287 +# define EC_F_EC_GFP_SIMPLE_FIELD_INV 298 +# define EC_F_EC_GFP_SIMPLE_GROUP_CHECK_DISCRIMINANT 165 +# define EC_F_EC_GFP_SIMPLE_GROUP_SET_CURVE 166 +# define EC_F_EC_GFP_SIMPLE_MAKE_AFFINE 102 +# define EC_F_EC_GFP_SIMPLE_OCT2POINT 103 +# define EC_F_EC_GFP_SIMPLE_POINT2OCT 104 +# define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137 +# define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 167 +# define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 168 +# define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 169 +# define EC_F_EC_GROUP_CHECK 170 +# define EC_F_EC_GROUP_CHECK_DISCRIMINANT 171 +# define EC_F_EC_GROUP_COPY 106 +# define EC_F_EC_GROUP_GET_CURVE 291 +# define EC_F_EC_GROUP_GET_CURVE_GF2M 172 +# define EC_F_EC_GROUP_GET_CURVE_GFP 130 +# define EC_F_EC_GROUP_GET_DEGREE 173 +# define EC_F_EC_GROUP_GET_ECPARAMETERS 261 +# define EC_F_EC_GROUP_GET_ECPKPARAMETERS 262 +# define EC_F_EC_GROUP_GET_PENTANOMIAL_BASIS 193 +# define EC_F_EC_GROUP_GET_TRINOMIAL_BASIS 194 +# define EC_F_EC_GROUP_NEW 108 +# define EC_F_EC_GROUP_NEW_BY_CURVE_NAME 174 +# define EC_F_EC_GROUP_NEW_FROM_DATA 175 +# define EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS 263 +# define EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS 264 +# define EC_F_EC_GROUP_SET_CURVE 292 +# define EC_F_EC_GROUP_SET_CURVE_GF2M 176 +# define EC_F_EC_GROUP_SET_CURVE_GFP 109 +# define EC_F_EC_GROUP_SET_GENERATOR 111 +# define EC_F_EC_GROUP_SET_SEED 286 +# define EC_F_EC_KEY_CHECK_KEY 177 +# define EC_F_EC_KEY_COPY 178 +# define EC_F_EC_KEY_GENERATE_KEY 179 +# define EC_F_EC_KEY_NEW 182 +# define EC_F_EC_KEY_NEW_METHOD 245 +# define EC_F_EC_KEY_OCT2PRIV 255 +# define EC_F_EC_KEY_PRINT 180 +# define EC_F_EC_KEY_PRINT_FP 181 +# define EC_F_EC_KEY_PRIV2BUF 279 +# define EC_F_EC_KEY_PRIV2OCT 256 +# define EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES 229 +# define EC_F_EC_KEY_SIMPLE_CHECK_KEY 258 +# define EC_F_EC_KEY_SIMPLE_OCT2PRIV 259 +# define EC_F_EC_KEY_SIMPLE_PRIV2OCT 260 +# define EC_F_EC_PKEY_CHECK 273 +# define EC_F_EC_PKEY_PARAM_CHECK 274 +# define EC_F_EC_POINTS_MAKE_AFFINE 136 +# define EC_F_EC_POINTS_MUL 290 +# define EC_F_EC_POINT_ADD 112 +# define EC_F_EC_POINT_BN2POINT 280 +# define EC_F_EC_POINT_CMP 113 +# define EC_F_EC_POINT_COPY 114 +# define EC_F_EC_POINT_DBL 115 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES 293 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M 183 +# define EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP 116 +# define EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP 117 +# define EC_F_EC_POINT_INVERT 210 +# define EC_F_EC_POINT_IS_AT_INFINITY 118 +# define EC_F_EC_POINT_IS_ON_CURVE 119 +# define EC_F_EC_POINT_MAKE_AFFINE 120 +# define EC_F_EC_POINT_NEW 121 +# define EC_F_EC_POINT_OCT2POINT 122 +# define EC_F_EC_POINT_POINT2BUF 281 +# define EC_F_EC_POINT_POINT2OCT 123 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES 294 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GF2M 185 +# define EC_F_EC_POINT_SET_AFFINE_COORDINATES_GFP 124 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES 295 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M 186 +# define EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP 125 +# define EC_F_EC_POINT_SET_JPROJECTIVE_COORDINATES_GFP 126 +# define EC_F_EC_POINT_SET_TO_INFINITY 127 +# define EC_F_EC_PRE_COMP_NEW 196 +# define EC_F_EC_SCALAR_MUL_LADDER 284 +# define EC_F_EC_WNAF_MUL 187 +# define EC_F_EC_WNAF_PRECOMPUTE_MULT 188 +# define EC_F_I2D_ECPARAMETERS 190 +# define EC_F_I2D_ECPKPARAMETERS 191 +# define EC_F_I2D_ECPRIVATEKEY 192 +# define EC_F_I2O_ECPUBLICKEY 151 +# define EC_F_NISTP224_PRE_COMP_NEW 227 +# define EC_F_NISTP256_PRE_COMP_NEW 236 +# define EC_F_NISTP521_PRE_COMP_NEW 237 +# define EC_F_O2I_ECPUBLICKEY 152 +# define EC_F_OLD_EC_PRIV_DECODE 222 +# define EC_F_OSSL_ECDH_COMPUTE_KEY 247 +# define EC_F_OSSL_ECDSA_SIGN_SIG 249 +# define EC_F_OSSL_ECDSA_VERIFY_SIG 250 +# define EC_F_PKEY_ECD_CTRL 271 +# define EC_F_PKEY_ECD_DIGESTSIGN 272 +# define EC_F_PKEY_ECD_DIGESTSIGN25519 276 +# define EC_F_PKEY_ECD_DIGESTSIGN448 277 +# define EC_F_PKEY_ECX_DERIVE 269 +# define EC_F_PKEY_EC_CTRL 197 +# define EC_F_PKEY_EC_CTRL_STR 198 +# define EC_F_PKEY_EC_DERIVE 217 +# define EC_F_PKEY_EC_INIT 282 +# define EC_F_PKEY_EC_KDF_DERIVE 283 +# define EC_F_PKEY_EC_KEYGEN 199 +# define EC_F_PKEY_EC_PARAMGEN 219 +# define EC_F_PKEY_EC_SIGN 218 +# define EC_F_VALIDATE_ECX_DERIVE 278 + +/* + * EC reason codes. + */ +# define EC_R_ASN1_ERROR 115 +# define EC_R_BAD_SIGNATURE 156 +# define EC_R_BIGNUM_OUT_OF_RANGE 144 +# define EC_R_BUFFER_TOO_SMALL 100 +# define EC_R_CANNOT_INVERT 165 +# define EC_R_COORDINATES_OUT_OF_RANGE 146 +# define EC_R_CURVE_DOES_NOT_SUPPORT_ECDH 160 +# define EC_R_CURVE_DOES_NOT_SUPPORT_SIGNING 159 +# define EC_R_D2I_ECPKPARAMETERS_FAILURE 117 +# define EC_R_DECODE_ERROR 142 +# define EC_R_DISCRIMINANT_IS_ZERO 118 +# define EC_R_EC_GROUP_NEW_BY_NAME_FAILURE 119 +# define EC_R_FIELD_TOO_LARGE 143 +# define EC_R_GF2M_NOT_SUPPORTED 147 +# define EC_R_GROUP2PKPARAMETERS_FAILURE 120 +# define EC_R_I2D_ECPKPARAMETERS_FAILURE 121 +# define EC_R_INCOMPATIBLE_OBJECTS 101 +# define EC_R_INVALID_ARGUMENT 112 +# define EC_R_INVALID_COMPRESSED_POINT 110 +# define EC_R_INVALID_COMPRESSION_BIT 109 +# define EC_R_INVALID_CURVE 141 +# define EC_R_INVALID_DIGEST 151 +# define EC_R_INVALID_DIGEST_TYPE 138 +# define EC_R_INVALID_ENCODING 102 +# define EC_R_INVALID_FIELD 103 +# define EC_R_INVALID_FORM 104 +# define EC_R_INVALID_GROUP_ORDER 122 +# define EC_R_INVALID_KEY 116 +# define EC_R_INVALID_OUTPUT_LENGTH 161 +# define EC_R_INVALID_PEER_KEY 133 +# define EC_R_INVALID_PENTANOMIAL_BASIS 132 +# define EC_R_INVALID_PRIVATE_KEY 123 +# define EC_R_INVALID_TRINOMIAL_BASIS 137 +# define EC_R_KDF_PARAMETER_ERROR 148 +# define EC_R_KEYS_NOT_SET 140 +# define EC_R_LADDER_POST_FAILURE 136 +# define EC_R_LADDER_PRE_FAILURE 153 +# define EC_R_LADDER_STEP_FAILURE 162 +# define EC_R_MISSING_OID 167 +# define EC_R_MISSING_PARAMETERS 124 +# define EC_R_MISSING_PRIVATE_KEY 125 +# define EC_R_NEED_NEW_SETUP_VALUES 157 +# define EC_R_NOT_A_NIST_PRIME 135 +# define EC_R_NOT_IMPLEMENTED 126 +# define EC_R_NOT_INITIALIZED 111 +# define EC_R_NO_PARAMETERS_SET 139 +# define EC_R_NO_PRIVATE_VALUE 154 +# define EC_R_OPERATION_NOT_SUPPORTED 152 +# define EC_R_PASSED_NULL_PARAMETER 134 +# define EC_R_PEER_KEY_ERROR 149 +# define EC_R_PKPARAMETERS2GROUP_FAILURE 127 +# define EC_R_POINT_ARITHMETIC_FAILURE 155 +# define EC_R_POINT_AT_INFINITY 106 +# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 +# define EC_R_POINT_IS_NOT_ON_CURVE 107 +# define EC_R_RANDOM_NUMBER_GENERATION_FAILED 158 +# define EC_R_SHARED_INFO_ERROR 150 +# define EC_R_SLOT_FULL 108 +# define EC_R_UNDEFINED_GENERATOR 113 +# define EC_R_UNDEFINED_ORDER 128 +# define EC_R_UNKNOWN_COFACTOR 164 +# define EC_R_UNKNOWN_GROUP 129 +# define EC_R_UNKNOWN_ORDER 114 +# define EC_R_UNSUPPORTED_FIELD 131 +# define EC_R_WRONG_CURVE_PARAMETERS 145 +# define EC_R_WRONG_ORDER 130 + +# endif +#endif diff --git a/lib/openssl/include/openssl/engine.h b/lib/openssl/include/openssl/engine.h new file mode 100644 index 0000000..d707eae --- /dev/null +++ b/lib/openssl/include/openssl/engine.h @@ -0,0 +1,752 @@ +/* + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENGINE_H +# define HEADER_ENGINE_H + +# include + +# ifndef OPENSSL_NO_ENGINE +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# include +# include +# include +# include +# include +# endif +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * These flags are used to control combinations of algorithm (methods) by + * bitwise "OR"ing. + */ +# define ENGINE_METHOD_RSA (unsigned int)0x0001 +# define ENGINE_METHOD_DSA (unsigned int)0x0002 +# define ENGINE_METHOD_DH (unsigned int)0x0004 +# define ENGINE_METHOD_RAND (unsigned int)0x0008 +# define ENGINE_METHOD_CIPHERS (unsigned int)0x0040 +# define ENGINE_METHOD_DIGESTS (unsigned int)0x0080 +# define ENGINE_METHOD_PKEY_METHS (unsigned int)0x0200 +# define ENGINE_METHOD_PKEY_ASN1_METHS (unsigned int)0x0400 +# define ENGINE_METHOD_EC (unsigned int)0x0800 +/* Obvious all-or-nothing cases. */ +# define ENGINE_METHOD_ALL (unsigned int)0xFFFF +# define ENGINE_METHOD_NONE (unsigned int)0x0000 + +/* + * This(ese) flag(s) controls behaviour of the ENGINE_TABLE mechanism used + * internally to control registration of ENGINE implementations, and can be + * set by ENGINE_set_table_flags(). The "NOINIT" flag prevents attempts to + * initialise registered ENGINEs if they are not already initialised. + */ +# define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001 + +/* ENGINE flags that can be set by ENGINE_set_flags(). */ +/* Not used */ +/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ + +/* + * This flag is for ENGINEs that wish to handle the various 'CMD'-related + * control commands on their own. Without this flag, ENGINE_ctrl() handles + * these control commands on behalf of the ENGINE using their "cmd_defns" + * data. + */ +# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 + +/* + * This flag is for ENGINEs who return new duplicate structures when found + * via "ENGINE_by_id()". When an ENGINE must store state (eg. if + * ENGINE_ctrl() commands are called in sequence as part of some stateful + * process like key-generation setup and execution), it can set this flag - + * then each attempt to obtain the ENGINE will result in it being copied into + * a new structure. Normally, ENGINEs don't declare this flag so + * ENGINE_by_id() just increments the existing ENGINE's structural reference + * count. + */ +# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 + +/* + * This flag if for an ENGINE that does not want its methods registered as + * part of ENGINE_register_all_complete() for example if the methods are not + * usable as default methods. + */ + +# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 + +/* + * ENGINEs can support their own command types, and these flags are used in + * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input + * each command expects. Currently only numeric and string input is + * supported. If a control command supports none of the _NUMERIC, _STRING, or + * _NO_INPUT options, then it is regarded as an "internal" control command - + * and not for use in config setting situations. As such, they're not + * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() + * access. Changes to this list of 'command types' should be reflected + * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). + */ + +/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ +# define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001 +/* + * accepts string input (cast from 'void*' to 'const char *', 4th parameter + * to ENGINE_ctrl) + */ +# define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002 +/* + * Indicates that the control command takes *no* input. Ie. the control + * command is unparameterised. + */ +# define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004 +/* + * Indicates that the control command is internal. This control command won't + * be shown in any output, and is only usable through the ENGINE_ctrl_cmd() + * function. + */ +# define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008 + +/* + * NB: These 3 control commands are deprecated and should not be used. + * ENGINEs relying on these commands should compile conditional support for + * compatibility (eg. if these symbols are defined) but should also migrate + * the same functionality to their own ENGINE-specific control functions that + * can be "discovered" by calling applications. The fact these control + * commands wouldn't be "executable" (ie. usable by text-based config) + * doesn't change the fact that application code can find and use them + * without requiring per-ENGINE hacking. + */ + +/* + * These flags are used to tell the ctrl function what should be done. All + * command numbers are shared between all engines, even if some don't make + * sense to some engines. In such a case, they do nothing but return the + * error ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED. + */ +# define ENGINE_CTRL_SET_LOGSTREAM 1 +# define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2 +# define ENGINE_CTRL_HUP 3/* Close and reinitialise + * any handles/connections + * etc. */ +# define ENGINE_CTRL_SET_USER_INTERFACE 4/* Alternative to callback */ +# define ENGINE_CTRL_SET_CALLBACK_DATA 5/* User-specific data, used + * when calling the password + * callback and the user + * interface */ +# define ENGINE_CTRL_LOAD_CONFIGURATION 6/* Load a configuration, + * given a string that + * represents a file name + * or so */ +# define ENGINE_CTRL_LOAD_SECTION 7/* Load data from a given + * section in the already + * loaded configuration */ + +/* + * These control commands allow an application to deal with an arbitrary + * engine in a dynamic way. Warn: Negative return values indicate errors FOR + * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other + * commands, including ENGINE-specific command types, return zero for an + * error. An ENGINE can choose to implement these ctrl functions, and can + * internally manage things however it chooses - it does so by setting the + * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise + * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the + * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's + * ctrl() handler need only implement its own commands - the above "meta" + * commands will be taken care of. + */ + +/* + * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", + * then all the remaining control commands will return failure, so it is + * worth checking this first if the caller is trying to "discover" the + * engine's capabilities and doesn't want errors generated unnecessarily. + */ +# define ENGINE_CTRL_HAS_CTRL_FUNCTION 10 +/* + * Returns a positive command number for the first command supported by the + * engine. Returns zero if no ctrl commands are supported. + */ +# define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11 +/* + * The 'long' argument specifies a command implemented by the engine, and the + * return value is the next command supported, or zero if there are no more. + */ +# define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12 +/* + * The 'void*' argument is a command name (cast from 'const char *'), and the + * return value is the command that corresponds to it. + */ +# define ENGINE_CTRL_GET_CMD_FROM_NAME 13 +/* + * The next two allow a command to be converted into its corresponding string + * form. In each case, the 'long' argument supplies the command. In the + * NAME_LEN case, the return value is the length of the command name (not + * counting a trailing EOL). In the NAME case, the 'void*' argument must be a + * string buffer large enough, and it will be populated with the name of the + * command (WITH a trailing EOL). + */ +# define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14 +# define ENGINE_CTRL_GET_NAME_FROM_CMD 15 +/* The next two are similar but give a "short description" of a command. */ +# define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16 +# define ENGINE_CTRL_GET_DESC_FROM_CMD 17 +/* + * With this command, the return value is the OR'd combination of + * ENGINE_CMD_FLAG_*** values that indicate what kind of input a given + * engine-specific ctrl command expects. + */ +# define ENGINE_CTRL_GET_CMD_FLAGS 18 + +/* + * ENGINE implementations should start the numbering of their own control + * commands from this value. (ie. ENGINE_CMD_BASE, ENGINE_CMD_BASE + 1, etc). + */ +# define ENGINE_CMD_BASE 200 + +/* + * NB: These 2 nCipher "chil" control commands are deprecated, and their + * functionality is now available through ENGINE-specific control commands + * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 + * commands should be migrated to the more general command handling before + * these are removed. + */ + +/* Flags specific to the nCipher "chil" engine */ +# define ENGINE_CTRL_CHIL_SET_FORKCHECK 100 + /* + * Depending on the value of the (long)i argument, this sets or + * unsets the SimpleForkCheck flag in the CHIL API to enable or + * disable checking and workarounds for applications that fork(). + */ +# define ENGINE_CTRL_CHIL_NO_LOCKING 101 + /* + * This prevents the initialisation function from providing mutex + * callbacks to the nCipher library. + */ + +/* + * If an ENGINE supports its own specific control commands and wishes the + * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on + * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN + * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() + * handler that supports the stated commands (ie. the "cmd_num" entries as + * described by the array). NB: The array must be ordered in increasing order + * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element + * has cmd_num set to zero and/or cmd_name set to NULL. + */ +typedef struct ENGINE_CMD_DEFN_st { + unsigned int cmd_num; /* The command number */ + const char *cmd_name; /* The command name itself */ + const char *cmd_desc; /* A short description of the command */ + unsigned int cmd_flags; /* The input the command expects */ +} ENGINE_CMD_DEFN; + +/* Generic function pointer */ +typedef int (*ENGINE_GEN_FUNC_PTR) (void); +/* Generic function pointer taking no arguments */ +typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); +/* Specific control function pointer */ +typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, + void (*f) (void)); +/* Generic load_key function pointer */ +typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, + UI_METHOD *ui_method, + void *callback_data); +typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, + STACK_OF(X509_NAME) *ca_dn, + X509 **pcert, EVP_PKEY **pkey, + STACK_OF(X509) **pother, + UI_METHOD *ui_method, + void *callback_data); +/*- + * These callback types are for an ENGINE's handler for cipher and digest logic. + * These handlers have these prototypes; + * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); + * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); + * Looking at how to implement these handlers in the case of cipher support, if + * the framework wants the EVP_CIPHER for 'nid', it will call; + * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) + * If the framework wants a list of supported 'nid's, it will call; + * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) + */ +/* + * Returns to a pointer to the array of supported cipher 'nid's. If the + * second parameter is non-NULL it is set to the size of the returned array. + */ +typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, + const int **, int); +typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, + int); +typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, + const int **, int); +typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, + const int **, int); +/* + * STRUCTURE functions ... all of these functions deal with pointers to + * ENGINE structures where the pointers have a "structural reference". This + * means that their reference is to allowed access to the structure but it + * does not imply that the structure is functional. To simply increment or + * decrement the structural reference count, use ENGINE_by_id and + * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next + * as it will automatically decrement the structural reference count of the + * "current" ENGINE and increment the structural reference count of the + * ENGINE it returns (unless it is NULL). + */ + +/* Get the first/last "ENGINE" type available. */ +ENGINE *ENGINE_get_first(void); +ENGINE *ENGINE_get_last(void); +/* Iterate to the next/previous "ENGINE" type (NULL = end of the list). */ +ENGINE *ENGINE_get_next(ENGINE *e); +ENGINE *ENGINE_get_prev(ENGINE *e); +/* Add another "ENGINE" type into the array. */ +int ENGINE_add(ENGINE *e); +/* Remove an existing "ENGINE" type from the array. */ +int ENGINE_remove(ENGINE *e); +/* Retrieve an engine from the list by its unique "id" value. */ +ENGINE *ENGINE_by_id(const char *id); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ENGINE_load_openssl() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_OPENSSL, NULL) +# define ENGINE_load_dynamic() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_DYNAMIC, NULL) +# ifndef OPENSSL_NO_STATIC_ENGINE +# define ENGINE_load_padlock() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_PADLOCK, NULL) +# define ENGINE_load_capi() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CAPI, NULL) +# define ENGINE_load_afalg() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_AFALG, NULL) +# endif +# define ENGINE_load_cryptodev() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_CRYPTODEV, NULL) +# define ENGINE_load_rdrand() \ + OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_RDRAND, NULL) +#endif +void ENGINE_load_builtin_engines(void); + +/* + * Get and set global flags (ENGINE_TABLE_FLAG_***) for the implementation + * "registry" handling. + */ +unsigned int ENGINE_get_table_flags(void); +void ENGINE_set_table_flags(unsigned int flags); + +/*- Manage registration of ENGINEs per "table". For each type, there are 3 + * functions; + * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) + * ENGINE_unregister_***(e) - unregister the implementation from 'e' + * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list + * Cleanup is automatically registered from each table when required. + */ + +int ENGINE_register_RSA(ENGINE *e); +void ENGINE_unregister_RSA(ENGINE *e); +void ENGINE_register_all_RSA(void); + +int ENGINE_register_DSA(ENGINE *e); +void ENGINE_unregister_DSA(ENGINE *e); +void ENGINE_register_all_DSA(void); + +int ENGINE_register_EC(ENGINE *e); +void ENGINE_unregister_EC(ENGINE *e); +void ENGINE_register_all_EC(void); + +int ENGINE_register_DH(ENGINE *e); +void ENGINE_unregister_DH(ENGINE *e); +void ENGINE_register_all_DH(void); + +int ENGINE_register_RAND(ENGINE *e); +void ENGINE_unregister_RAND(ENGINE *e); +void ENGINE_register_all_RAND(void); + +int ENGINE_register_ciphers(ENGINE *e); +void ENGINE_unregister_ciphers(ENGINE *e); +void ENGINE_register_all_ciphers(void); + +int ENGINE_register_digests(ENGINE *e); +void ENGINE_unregister_digests(ENGINE *e); +void ENGINE_register_all_digests(void); + +int ENGINE_register_pkey_meths(ENGINE *e); +void ENGINE_unregister_pkey_meths(ENGINE *e); +void ENGINE_register_all_pkey_meths(void); + +int ENGINE_register_pkey_asn1_meths(ENGINE *e); +void ENGINE_unregister_pkey_asn1_meths(ENGINE *e); +void ENGINE_register_all_pkey_asn1_meths(void); + +/* + * These functions register all support from the above categories. Note, use + * of these functions can result in static linkage of code your application + * may not need. If you only need a subset of functionality, consider using + * more selective initialisation. + */ +int ENGINE_register_complete(ENGINE *e); +int ENGINE_register_all_complete(void); + +/* + * Send parameterised control commands to the engine. The possibilities to + * send down an integer, a pointer to data or a function pointer are + * provided. Any of the parameters may or may not be NULL, depending on the + * command number. In actuality, this function only requires a structural + * (rather than functional) reference to an engine, but many control commands + * may require the engine be functional. The caller should be aware of trying + * commands that require an operational ENGINE, and only use functional + * references in such situations. + */ +int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); + +/* + * This function tests if an ENGINE-specific command is usable as a + * "setting". Eg. in an application's config file that gets processed through + * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to + * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). + */ +int ENGINE_cmd_is_executable(ENGINE *e, int cmd); + +/* + * This function works like ENGINE_ctrl() with the exception of taking a + * command name instead of a command number, and can handle optional + * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation + * on how to use the cmd_name and cmd_optional. + */ +int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name, + long i, void *p, void (*f) (void), int cmd_optional); + +/* + * This function passes a command-name and argument to an ENGINE. The + * cmd_name is converted to a command number and the control command is + * called using 'arg' as an argument (unless the ENGINE doesn't support such + * a command, in which case no control command is called). The command is + * checked for input flags, and if necessary the argument will be converted + * to a numeric value. If cmd_optional is non-zero, then if the ENGINE + * doesn't support the given cmd_name the return value will be success + * anyway. This function is intended for applications to use so that users + * (or config files) can supply engine-specific config data to the ENGINE at + * run-time to control behaviour of specific engines. As such, it shouldn't + * be used for calling ENGINE_ctrl() functions that return data, deal with + * binary data, or that are otherwise supposed to be used directly through + * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() + * operation in this function will be lost - the return value is interpreted + * as failure if the return value is zero, success otherwise, and this + * function returns a boolean value as a result. In other words, vendors of + * 'ENGINE'-enabled devices should write ENGINE implementations with + * parameterisations that work in this scheme, so that compliant ENGINE-based + * applications can work consistently with the same configuration for the + * same ENGINE-enabled devices, across applications. + */ +int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg, + int cmd_optional); + +/* + * These functions are useful for manufacturing new ENGINE structures. They + * don't address reference counting at all - one uses them to populate an + * ENGINE structure with personalised implementations of things prior to + * using it directly or adding it to the builtin ENGINE list in OpenSSL. + * These are also here so that the ENGINE structure doesn't have to be + * exposed and break binary compatibility! + */ +ENGINE *ENGINE_new(void); +int ENGINE_free(ENGINE *e); +int ENGINE_up_ref(ENGINE *e); +int ENGINE_set_id(ENGINE *e, const char *id); +int ENGINE_set_name(ENGINE *e, const char *name); +int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth); +int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth); +int ENGINE_set_EC(ENGINE *e, const EC_KEY_METHOD *ecdsa_meth); +int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth); +int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth); +int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f); +int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f); +int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f); +int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f); +int ENGINE_set_load_privkey_function(ENGINE *e, + ENGINE_LOAD_KEY_PTR loadpriv_f); +int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f); +int ENGINE_set_load_ssl_client_cert_function(ENGINE *e, + ENGINE_SSL_CLIENT_CERT_PTR + loadssl_f); +int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f); +int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f); +int ENGINE_set_pkey_meths(ENGINE *e, ENGINE_PKEY_METHS_PTR f); +int ENGINE_set_pkey_asn1_meths(ENGINE *e, ENGINE_PKEY_ASN1_METHS_PTR f); +int ENGINE_set_flags(ENGINE *e, int flags); +int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns); +/* These functions allow control over any per-structure ENGINE data. */ +#define ENGINE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) +int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg); +void *ENGINE_get_ex_data(const ENGINE *e, int idx); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* + * This function previously cleaned up anything that needs it. Auto-deinit will + * now take care of it so it is no longer required to call this function. + */ +# define ENGINE_cleanup() while(0) continue +#endif + +/* + * These return values from within the ENGINE structure. These can be useful + * with functional references as well as structural references - it depends + * which you obtained. Using the result for functional purposes if you only + * obtained a structural reference may be problematic! + */ +const char *ENGINE_get_id(const ENGINE *e); +const char *ENGINE_get_name(const ENGINE *e); +const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e); +const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e); +const EC_KEY_METHOD *ENGINE_get_EC(const ENGINE *e); +const DH_METHOD *ENGINE_get_DH(const ENGINE *e); +const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e); +ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e); +ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e); +ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e); +ENGINE_SSL_CLIENT_CERT_PTR ENGINE_get_ssl_client_cert_function(const ENGINE + *e); +ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e); +ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e); +ENGINE_PKEY_METHS_PTR ENGINE_get_pkey_meths(const ENGINE *e); +ENGINE_PKEY_ASN1_METHS_PTR ENGINE_get_pkey_asn1_meths(const ENGINE *e); +const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid); +const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid); +const EVP_PKEY_METHOD *ENGINE_get_pkey_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth(ENGINE *e, int nid); +const EVP_PKEY_ASN1_METHOD *ENGINE_get_pkey_asn1_meth_str(ENGINE *e, + const char *str, + int len); +const EVP_PKEY_ASN1_METHOD *ENGINE_pkey_asn1_find_str(ENGINE **pe, + const char *str, + int len); +const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); +int ENGINE_get_flags(const ENGINE *e); + +/* + * FUNCTIONAL functions. These functions deal with ENGINE structures that + * have (or will) be initialised for use. Broadly speaking, the structural + * functions are useful for iterating the list of available engine types, + * creating new engine types, and other "list" operations. These functions + * actually deal with ENGINEs that are to be used. As such these functions + * can fail (if applicable) when particular engines are unavailable - eg. if + * a hardware accelerator is not attached or not functioning correctly. Each + * ENGINE has 2 reference counts; structural and functional. Every time a + * functional reference is obtained or released, a corresponding structural + * reference is automatically obtained or released too. + */ + +/* + * Initialise a engine type for use (or up its reference count if it's + * already in use). This will fail if the engine is not currently operational + * and cannot initialise. + */ +int ENGINE_init(ENGINE *e); +/* + * Free a functional reference to a engine type. This does not require a + * corresponding call to ENGINE_free as it also releases a structural + * reference. + */ +int ENGINE_finish(ENGINE *e); + +/* + * The following functions handle keys that are stored in some secondary + * location, handled by the engine. The storage may be on a card or + * whatever. + */ +EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, + UI_METHOD *ui_method, void *callback_data); +int ENGINE_load_ssl_client_cert(ENGINE *e, SSL *s, + STACK_OF(X509_NAME) *ca_dn, X509 **pcert, + EVP_PKEY **ppkey, STACK_OF(X509) **pother, + UI_METHOD *ui_method, void *callback_data); + +/* + * This returns a pointer for the current ENGINE structure that is (by + * default) performing any RSA operations. The value returned is an + * incremented reference, so it should be free'd (ENGINE_finish) before it is + * discarded. + */ +ENGINE *ENGINE_get_default_RSA(void); +/* Same for the other "methods" */ +ENGINE *ENGINE_get_default_DSA(void); +ENGINE *ENGINE_get_default_EC(void); +ENGINE *ENGINE_get_default_DH(void); +ENGINE *ENGINE_get_default_RAND(void); +/* + * These functions can be used to get a functional reference to perform + * ciphering or digesting corresponding to "nid". + */ +ENGINE *ENGINE_get_cipher_engine(int nid); +ENGINE *ENGINE_get_digest_engine(int nid); +ENGINE *ENGINE_get_pkey_meth_engine(int nid); +ENGINE *ENGINE_get_pkey_asn1_meth_engine(int nid); + +/* + * This sets a new default ENGINE structure for performing RSA operations. If + * the result is non-zero (success) then the ENGINE structure will have had + * its reference count up'd so the caller should still free their own + * reference 'e'. + */ +int ENGINE_set_default_RSA(ENGINE *e); +int ENGINE_set_default_string(ENGINE *e, const char *def_list); +/* Same for the other "methods" */ +int ENGINE_set_default_DSA(ENGINE *e); +int ENGINE_set_default_EC(ENGINE *e); +int ENGINE_set_default_DH(ENGINE *e); +int ENGINE_set_default_RAND(ENGINE *e); +int ENGINE_set_default_ciphers(ENGINE *e); +int ENGINE_set_default_digests(ENGINE *e); +int ENGINE_set_default_pkey_meths(ENGINE *e); +int ENGINE_set_default_pkey_asn1_meths(ENGINE *e); + +/* + * The combination "set" - the flags are bitwise "OR"d from the + * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" + * function, this function can result in unnecessary static linkage. If your + * application requires only specific functionality, consider using more + * selective functions. + */ +int ENGINE_set_default(ENGINE *e, unsigned int flags); + +void ENGINE_add_conf_module(void); + +/* Deprecated functions ... */ +/* int ENGINE_clear_defaults(void); */ + +/**************************/ +/* DYNAMIC ENGINE SUPPORT */ +/**************************/ + +/* Binary/behaviour compatibility levels */ +# define OSSL_DYNAMIC_VERSION (unsigned long)0x00030000 +/* + * Binary versions older than this are too old for us (whether we're a loader + * or a loadee) + */ +# define OSSL_DYNAMIC_OLDEST (unsigned long)0x00030000 + +/* + * When compiling an ENGINE entirely as an external shared library, loadable + * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' + * structure type provides the calling application's (or library's) error + * functionality and memory management function pointers to the loaded + * library. These should be used/set in the loaded library code so that the + * loading application's 'state' will be used/changed in all operations. The + * 'static_state' pointer allows the loaded library to know if it shares the + * same static data as the calling application (or library), and thus whether + * these callbacks need to be set or not. + */ +typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); +typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); +typedef void (*dyn_MEM_free_fn) (void *, const char *, int); +typedef struct st_dynamic_MEM_fns { + dyn_MEM_malloc_fn malloc_fn; + dyn_MEM_realloc_fn realloc_fn; + dyn_MEM_free_fn free_fn; +} dynamic_MEM_fns; +/* + * FIXME: Perhaps the memory and locking code (crypto.h) should declare and + * use these types so we (and any other dependent code) can simplify a bit?? + */ +/* The top-level structure */ +typedef struct st_dynamic_fns { + void *static_state; + dynamic_MEM_fns mem_fns; +} dynamic_fns; + +/* + * The version checking function should be of this prototype. NB: The + * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading + * code. If this function returns zero, it indicates a (potential) version + * incompatibility and the loaded library doesn't believe it can proceed. + * Otherwise, the returned value is the (latest) version supported by the + * loading library. The loader may still decide that the loaded code's + * version is unsatisfactory and could veto the load. The function is + * expected to be implemented with the symbol name "v_check", and a default + * implementation can be fully instantiated with + * IMPLEMENT_DYNAMIC_CHECK_FN(). + */ +typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); +# define IMPLEMENT_DYNAMIC_CHECK_FN() \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v); \ + OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \ + if (v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \ + return 0; } + +/* + * This function is passed the ENGINE structure to initialise with its own + * function and command settings. It should not adjust the structural or + * functional reference counts. If this function returns zero, (a) the load + * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto + * the structure, and (c) the shared library will be unloaded. So + * implementations should do their own internal cleanup in failure + * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, + * represents the ENGINE id that the loader is looking for. If this is NULL, + * the shared library can choose to return failure or to initialise a + * 'default' ENGINE. If non-NULL, the shared library must initialise only an + * ENGINE matching the passed 'id'. The function is expected to be + * implemented with the symbol name "bind_engine". A standard implementation + * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter + * 'fn' is a callback function that populates the ENGINE structure and + * returns an int value (zero for failure). 'fn' should have prototype; + * [static] int fn(ENGINE *e, const char *id); + */ +typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, + const dynamic_fns *fns); +# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ + OPENSSL_EXPORT \ + int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ + if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ + CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ + fns->mem_fns.realloc_fn, \ + fns->mem_fns.free_fn); \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ + skip_cbs: \ + if (!fn(e, id)) return 0; \ + return 1; } + +/* + * If the loading application (or library) and the loaded ENGINE library + * share the same static data (eg. they're both dynamically linked to the + * same libcrypto.so) we need a way to avoid trying to set system callbacks - + * this would fail, and for the same reason that it's unnecessary to try. If + * the loaded ENGINE has (or gets from through the loader) its own copy of + * the libcrypto static data, we will need to set the callbacks. The easiest + * way to detect this is to have a function that returns a pointer to some + * static data and let the loading application and loaded ENGINE compare + * their respective values. + */ +void *ENGINE_get_static_state(void); + +# if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) +DEPRECATEDIN_1_1_0(void ENGINE_setup_bsd_cryptodev(void)) +# endif + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/engineerr.h b/lib/openssl/include/openssl/engineerr.h new file mode 100644 index 0000000..05e84bd --- /dev/null +++ b/lib/openssl/include/openssl/engineerr.h @@ -0,0 +1,111 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENGINEERR_H +# define HEADER_ENGINEERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_ENGINE + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_ENGINE_strings(void); + +/* + * ENGINE function codes. + */ +# define ENGINE_F_DIGEST_UPDATE 198 +# define ENGINE_F_DYNAMIC_CTRL 180 +# define ENGINE_F_DYNAMIC_GET_DATA_CTX 181 +# define ENGINE_F_DYNAMIC_LOAD 182 +# define ENGINE_F_DYNAMIC_SET_DATA_CTX 183 +# define ENGINE_F_ENGINE_ADD 105 +# define ENGINE_F_ENGINE_BY_ID 106 +# define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170 +# define ENGINE_F_ENGINE_CTRL 142 +# define ENGINE_F_ENGINE_CTRL_CMD 178 +# define ENGINE_F_ENGINE_CTRL_CMD_STRING 171 +# define ENGINE_F_ENGINE_FINISH 107 +# define ENGINE_F_ENGINE_GET_CIPHER 185 +# define ENGINE_F_ENGINE_GET_DIGEST 186 +# define ENGINE_F_ENGINE_GET_FIRST 195 +# define ENGINE_F_ENGINE_GET_LAST 196 +# define ENGINE_F_ENGINE_GET_NEXT 115 +# define ENGINE_F_ENGINE_GET_PKEY_ASN1_METH 193 +# define ENGINE_F_ENGINE_GET_PKEY_METH 192 +# define ENGINE_F_ENGINE_GET_PREV 116 +# define ENGINE_F_ENGINE_INIT 119 +# define ENGINE_F_ENGINE_LIST_ADD 120 +# define ENGINE_F_ENGINE_LIST_REMOVE 121 +# define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150 +# define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151 +# define ENGINE_F_ENGINE_LOAD_SSL_CLIENT_CERT 194 +# define ENGINE_F_ENGINE_NEW 122 +# define ENGINE_F_ENGINE_PKEY_ASN1_FIND_STR 197 +# define ENGINE_F_ENGINE_REMOVE 123 +# define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189 +# define ENGINE_F_ENGINE_SET_ID 129 +# define ENGINE_F_ENGINE_SET_NAME 130 +# define ENGINE_F_ENGINE_TABLE_REGISTER 184 +# define ENGINE_F_ENGINE_UNLOCKED_FINISH 191 +# define ENGINE_F_ENGINE_UP_REF 190 +# define ENGINE_F_INT_CLEANUP_ITEM 199 +# define ENGINE_F_INT_CTRL_HELPER 172 +# define ENGINE_F_INT_ENGINE_CONFIGURE 188 +# define ENGINE_F_INT_ENGINE_MODULE_INIT 187 +# define ENGINE_F_OSSL_HMAC_INIT 200 + +/* + * ENGINE reason codes. + */ +# define ENGINE_R_ALREADY_LOADED 100 +# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 +# define ENGINE_R_CMD_NOT_EXECUTABLE 134 +# define ENGINE_R_COMMAND_TAKES_INPUT 135 +# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 +# define ENGINE_R_CONFLICTING_ENGINE_ID 103 +# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 +# define ENGINE_R_DSO_FAILURE 104 +# define ENGINE_R_DSO_NOT_FOUND 132 +# define ENGINE_R_ENGINES_SECTION_ERROR 148 +# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 +# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 +# define ENGINE_R_ENGINE_SECTION_ERROR 149 +# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 +# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 +# define ENGINE_R_FINISH_FAILED 106 +# define ENGINE_R_ID_OR_NAME_MISSING 108 +# define ENGINE_R_INIT_FAILED 109 +# define ENGINE_R_INTERNAL_LIST_ERROR 110 +# define ENGINE_R_INVALID_ARGUMENT 143 +# define ENGINE_R_INVALID_CMD_NAME 137 +# define ENGINE_R_INVALID_CMD_NUMBER 138 +# define ENGINE_R_INVALID_INIT_VALUE 151 +# define ENGINE_R_INVALID_STRING 150 +# define ENGINE_R_NOT_INITIALISED 117 +# define ENGINE_R_NOT_LOADED 112 +# define ENGINE_R_NO_CONTROL_FUNCTION 120 +# define ENGINE_R_NO_INDEX 144 +# define ENGINE_R_NO_LOAD_FUNCTION 125 +# define ENGINE_R_NO_REFERENCE 130 +# define ENGINE_R_NO_SUCH_ENGINE 116 +# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 +# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 +# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 +# define ENGINE_R_VERSION_INCOMPATIBILITY 145 + +# endif +#endif diff --git a/lib/openssl/include/openssl/err.h b/lib/openssl/include/openssl/err.h new file mode 100644 index 0000000..b49f881 --- /dev/null +++ b/lib/openssl/include/openssl/err.h @@ -0,0 +1,274 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ERR_H +# define HEADER_ERR_H + +# include + +# ifndef OPENSSL_NO_STDIO +# include +# include +# endif + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# ifndef OPENSSL_NO_ERR +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,d,e) +# else +# define ERR_PUT_error(a,b,c,d,e) ERR_put_error(a,b,c,NULL,0) +# endif + +# include + +# define ERR_TXT_MALLOCED 0x01 +# define ERR_TXT_STRING 0x02 + +# define ERR_FLAG_MARK 0x01 +# define ERR_FLAG_CLEAR 0x02 + +# define ERR_NUM_ERRORS 16 +typedef struct err_state_st { + int err_flags[ERR_NUM_ERRORS]; + unsigned long err_buffer[ERR_NUM_ERRORS]; + char *err_data[ERR_NUM_ERRORS]; + int err_data_flags[ERR_NUM_ERRORS]; + const char *err_file[ERR_NUM_ERRORS]; + int err_line[ERR_NUM_ERRORS]; + int top, bottom; +} ERR_STATE; + +/* library */ +# define ERR_LIB_NONE 1 +# define ERR_LIB_SYS 2 +# define ERR_LIB_BN 3 +# define ERR_LIB_RSA 4 +# define ERR_LIB_DH 5 +# define ERR_LIB_EVP 6 +# define ERR_LIB_BUF 7 +# define ERR_LIB_OBJ 8 +# define ERR_LIB_PEM 9 +# define ERR_LIB_DSA 10 +# define ERR_LIB_X509 11 +/* #define ERR_LIB_METH 12 */ +# define ERR_LIB_ASN1 13 +# define ERR_LIB_CONF 14 +# define ERR_LIB_CRYPTO 15 +# define ERR_LIB_EC 16 +# define ERR_LIB_SSL 20 +/* #define ERR_LIB_SSL23 21 */ +/* #define ERR_LIB_SSL2 22 */ +/* #define ERR_LIB_SSL3 23 */ +/* #define ERR_LIB_RSAREF 30 */ +/* #define ERR_LIB_PROXY 31 */ +# define ERR_LIB_BIO 32 +# define ERR_LIB_PKCS7 33 +# define ERR_LIB_X509V3 34 +# define ERR_LIB_PKCS12 35 +# define ERR_LIB_RAND 36 +# define ERR_LIB_DSO 37 +# define ERR_LIB_ENGINE 38 +# define ERR_LIB_OCSP 39 +# define ERR_LIB_UI 40 +# define ERR_LIB_COMP 41 +# define ERR_LIB_ECDSA 42 +# define ERR_LIB_ECDH 43 +# define ERR_LIB_OSSL_STORE 44 +# define ERR_LIB_FIPS 45 +# define ERR_LIB_CMS 46 +# define ERR_LIB_TS 47 +# define ERR_LIB_HMAC 48 +/* # define ERR_LIB_JPAKE 49 */ +# define ERR_LIB_CT 50 +# define ERR_LIB_ASYNC 51 +# define ERR_LIB_KDF 52 +# define ERR_LIB_SM2 53 + +# define ERR_LIB_USER 128 + +# define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECerr(f,r) ERR_PUT_error(ERR_LIB_EC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define X509V3err(f,r) ERR_PUT_error(ERR_LIB_X509V3,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define PKCS12err(f,r) ERR_PUT_error(ERR_LIB_PKCS12,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define RANDerr(f,r) ERR_PUT_error(ERR_LIB_RAND,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define DSOerr(f,r) ERR_PUT_error(ERR_LIB_DSO,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ENGINEerr(f,r) ERR_PUT_error(ERR_LIB_ENGINE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define OSSL_STOREerr(f,r) ERR_PUT_error(ERR_LIB_OSSL_STORE,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define TSerr(f,r) ERR_PUT_error(ERR_LIB_TS,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define HMACerr(f,r) ERR_PUT_error(ERR_LIB_HMAC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define CTerr(f,r) ERR_PUT_error(ERR_LIB_CT,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define ASYNCerr(f,r) ERR_PUT_error(ERR_LIB_ASYNC,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define KDFerr(f,r) ERR_PUT_error(ERR_LIB_KDF,(f),(r),OPENSSL_FILE,OPENSSL_LINE) +# define SM2err(f,r) ERR_PUT_error(ERR_LIB_SM2,(f),(r),OPENSSL_FILE,OPENSSL_LINE) + +# define ERR_PACK(l,f,r) ( \ + (((unsigned int)(l) & 0x0FF) << 24L) | \ + (((unsigned int)(f) & 0xFFF) << 12L) | \ + (((unsigned int)(r) & 0xFFF) ) ) +# define ERR_GET_LIB(l) (int)(((l) >> 24L) & 0x0FFL) +# define ERR_GET_FUNC(l) (int)(((l) >> 12L) & 0xFFFL) +# define ERR_GET_REASON(l) (int)( (l) & 0xFFFL) +# define ERR_FATAL_ERROR(l) (int)( (l) & ERR_R_FATAL) + +/* OS functions */ +# define SYS_F_FOPEN 1 +# define SYS_F_CONNECT 2 +# define SYS_F_GETSERVBYNAME 3 +# define SYS_F_SOCKET 4 +# define SYS_F_IOCTLSOCKET 5 +# define SYS_F_BIND 6 +# define SYS_F_LISTEN 7 +# define SYS_F_ACCEPT 8 +# define SYS_F_WSASTARTUP 9/* Winsock stuff */ +# define SYS_F_OPENDIR 10 +# define SYS_F_FREAD 11 +# define SYS_F_GETADDRINFO 12 +# define SYS_F_GETNAMEINFO 13 +# define SYS_F_SETSOCKOPT 14 +# define SYS_F_GETSOCKOPT 15 +# define SYS_F_GETSOCKNAME 16 +# define SYS_F_GETHOSTBYNAME 17 +# define SYS_F_FFLUSH 18 +# define SYS_F_OPEN 19 +# define SYS_F_CLOSE 20 +# define SYS_F_IOCTL 21 +# define SYS_F_STAT 22 +# define SYS_F_FCNTL 23 +# define SYS_F_FSTAT 24 + +/* reasons */ +# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */ +# define ERR_R_BN_LIB ERR_LIB_BN/* 3 */ +# define ERR_R_RSA_LIB ERR_LIB_RSA/* 4 */ +# define ERR_R_DH_LIB ERR_LIB_DH/* 5 */ +# define ERR_R_EVP_LIB ERR_LIB_EVP/* 6 */ +# define ERR_R_BUF_LIB ERR_LIB_BUF/* 7 */ +# define ERR_R_OBJ_LIB ERR_LIB_OBJ/* 8 */ +# define ERR_R_PEM_LIB ERR_LIB_PEM/* 9 */ +# define ERR_R_DSA_LIB ERR_LIB_DSA/* 10 */ +# define ERR_R_X509_LIB ERR_LIB_X509/* 11 */ +# define ERR_R_ASN1_LIB ERR_LIB_ASN1/* 13 */ +# define ERR_R_EC_LIB ERR_LIB_EC/* 16 */ +# define ERR_R_BIO_LIB ERR_LIB_BIO/* 32 */ +# define ERR_R_PKCS7_LIB ERR_LIB_PKCS7/* 33 */ +# define ERR_R_X509V3_LIB ERR_LIB_X509V3/* 34 */ +# define ERR_R_ENGINE_LIB ERR_LIB_ENGINE/* 38 */ +# define ERR_R_UI_LIB ERR_LIB_UI/* 40 */ +# define ERR_R_ECDSA_LIB ERR_LIB_ECDSA/* 42 */ +# define ERR_R_OSSL_STORE_LIB ERR_LIB_OSSL_STORE/* 44 */ + +# define ERR_R_NESTED_ASN1_ERROR 58 +# define ERR_R_MISSING_ASN1_EOS 63 + +/* fatal error */ +# define ERR_R_FATAL 64 +# define ERR_R_MALLOC_FAILURE (1|ERR_R_FATAL) +# define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL) +# define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL) +# define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL) +# define ERR_R_DISABLED (5|ERR_R_FATAL) +# define ERR_R_INIT_FAIL (6|ERR_R_FATAL) +# define ERR_R_PASSED_INVALID_ARGUMENT (7) +# define ERR_R_OPERATION_FAIL (8|ERR_R_FATAL) + +/* + * 99 is the maximum possible ERR_R_... code, higher values are reserved for + * the individual libraries + */ + +typedef struct ERR_string_data_st { + unsigned long error; + const char *string; +} ERR_STRING_DATA; + +DEFINE_LHASH_OF(ERR_STRING_DATA); + +void ERR_put_error(int lib, int func, int reason, const char *file, int line); +void ERR_set_error_data(char *data, int flags); + +unsigned long ERR_get_error(void); +unsigned long ERR_get_error_line(const char **file, int *line); +unsigned long ERR_get_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_error(void); +unsigned long ERR_peek_error_line(const char **file, int *line); +unsigned long ERR_peek_error_line_data(const char **file, int *line, + const char **data, int *flags); +unsigned long ERR_peek_last_error(void); +unsigned long ERR_peek_last_error_line(const char **file, int *line); +unsigned long ERR_peek_last_error_line_data(const char **file, int *line, + const char **data, int *flags); +void ERR_clear_error(void); +char *ERR_error_string(unsigned long e, char *buf); +void ERR_error_string_n(unsigned long e, char *buf, size_t len); +const char *ERR_lib_error_string(unsigned long e); +const char *ERR_func_error_string(unsigned long e); +const char *ERR_reason_error_string(unsigned long e); +void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u), + void *u); +# ifndef OPENSSL_NO_STDIO +void ERR_print_errors_fp(FILE *fp); +# endif +void ERR_print_errors(BIO *bp); +void ERR_add_error_data(int num, ...); +void ERR_add_error_vdata(int num, va_list args); +int ERR_load_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_strings_const(const ERR_STRING_DATA *str); +int ERR_unload_strings(int lib, ERR_STRING_DATA *str); +int ERR_load_ERR_strings(void); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define ERR_load_crypto_strings() \ + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# define ERR_free_strings() while(0) continue +#endif + +DEPRECATEDIN_1_1_0(void ERR_remove_thread_state(void *)) +DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid)) +ERR_STATE *ERR_get_state(void); + +int ERR_get_next_error_library(void); + +int ERR_set_mark(void); +int ERR_pop_to_mark(void); +int ERR_clear_last_mark(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/evp.h b/lib/openssl/include/openssl/evp.h new file mode 100644 index 0000000..a411f3f --- /dev/null +++ b/lib/openssl/include/openssl/evp.h @@ -0,0 +1,1666 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_ENVELOPE_H +# define HEADER_ENVELOPE_H + +# include +# include +# include +# include +# include + +# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ +# define EVP_MAX_KEY_LENGTH 64 +# define EVP_MAX_IV_LENGTH 16 +# define EVP_MAX_BLOCK_LENGTH 32 + +# define PKCS5_SALT_LEN 8 +/* Default PKCS#5 iteration count */ +# define PKCS5_DEFAULT_ITER 2048 + +# include + +# define EVP_PK_RSA 0x0001 +# define EVP_PK_DSA 0x0002 +# define EVP_PK_DH 0x0004 +# define EVP_PK_EC 0x0008 +# define EVP_PKT_SIGN 0x0010 +# define EVP_PKT_ENC 0x0020 +# define EVP_PKT_EXCH 0x0040 +# define EVP_PKS_RSA 0x0100 +# define EVP_PKS_DSA 0x0200 +# define EVP_PKS_EC 0x0400 + +# define EVP_PKEY_NONE NID_undef +# define EVP_PKEY_RSA NID_rsaEncryption +# define EVP_PKEY_RSA2 NID_rsa +# define EVP_PKEY_RSA_PSS NID_rsassaPss +# define EVP_PKEY_DSA NID_dsa +# define EVP_PKEY_DSA1 NID_dsa_2 +# define EVP_PKEY_DSA2 NID_dsaWithSHA +# define EVP_PKEY_DSA3 NID_dsaWithSHA1 +# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 +# define EVP_PKEY_DH NID_dhKeyAgreement +# define EVP_PKEY_DHX NID_dhpublicnumber +# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey +# define EVP_PKEY_SM2 NID_sm2 +# define EVP_PKEY_HMAC NID_hmac +# define EVP_PKEY_CMAC NID_cmac +# define EVP_PKEY_SCRYPT NID_id_scrypt +# define EVP_PKEY_TLS1_PRF NID_tls1_prf +# define EVP_PKEY_HKDF NID_hkdf +# define EVP_PKEY_POLY1305 NID_poly1305 +# define EVP_PKEY_SIPHASH NID_siphash +# define EVP_PKEY_X25519 NID_X25519 +# define EVP_PKEY_ED25519 NID_ED25519 +# define EVP_PKEY_X448 NID_X448 +# define EVP_PKEY_ED448 NID_ED448 + +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_MO_SIGN 0x0001 +# define EVP_PKEY_MO_VERIFY 0x0002 +# define EVP_PKEY_MO_ENCRYPT 0x0004 +# define EVP_PKEY_MO_DECRYPT 0x0008 + +# ifndef EVP_MD +EVP_MD *EVP_MD_meth_new(int md_type, int pkey_type); +EVP_MD *EVP_MD_meth_dup(const EVP_MD *md); +void EVP_MD_meth_free(EVP_MD *md); + +int EVP_MD_meth_set_input_blocksize(EVP_MD *md, int blocksize); +int EVP_MD_meth_set_result_size(EVP_MD *md, int resultsize); +int EVP_MD_meth_set_app_datasize(EVP_MD *md, int datasize); +int EVP_MD_meth_set_flags(EVP_MD *md, unsigned long flags); +int EVP_MD_meth_set_init(EVP_MD *md, int (*init)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_update(EVP_MD *md, int (*update)(EVP_MD_CTX *ctx, + const void *data, + size_t count)); +int EVP_MD_meth_set_final(EVP_MD *md, int (*final)(EVP_MD_CTX *ctx, + unsigned char *md)); +int EVP_MD_meth_set_copy(EVP_MD *md, int (*copy)(EVP_MD_CTX *to, + const EVP_MD_CTX *from)); +int EVP_MD_meth_set_cleanup(EVP_MD *md, int (*cleanup)(EVP_MD_CTX *ctx)); +int EVP_MD_meth_set_ctrl(EVP_MD *md, int (*ctrl)(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2)); + +int EVP_MD_meth_get_input_blocksize(const EVP_MD *md); +int EVP_MD_meth_get_result_size(const EVP_MD *md); +int EVP_MD_meth_get_app_datasize(const EVP_MD *md); +unsigned long EVP_MD_meth_get_flags(const EVP_MD *md); +int (*EVP_MD_meth_get_init(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_update(const EVP_MD *md))(EVP_MD_CTX *ctx, + const void *data, + size_t count); +int (*EVP_MD_meth_get_final(const EVP_MD *md))(EVP_MD_CTX *ctx, + unsigned char *md); +int (*EVP_MD_meth_get_copy(const EVP_MD *md))(EVP_MD_CTX *to, + const EVP_MD_CTX *from); +int (*EVP_MD_meth_get_cleanup(const EVP_MD *md))(EVP_MD_CTX *ctx); +int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, + int p1, void *p2); + +/* digest can only handle a single block */ +# define EVP_MD_FLAG_ONESHOT 0x0001 + +/* digest is extensible-output function, XOF */ +# define EVP_MD_FLAG_XOF 0x0002 + +/* DigestAlgorithmIdentifier flags... */ + +# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 + +/* NULL or absent parameter accepted. Use NULL */ + +# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 + +/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ + +# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 + +/* Custom handling via ctrl */ + +# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 + +/* Note if suitable for use in FIPS mode */ +# define EVP_MD_FLAG_FIPS 0x0400 + +/* Digest ctrls */ + +# define EVP_MD_CTRL_DIGALGID 0x1 +# define EVP_MD_CTRL_MICALG 0x2 +# define EVP_MD_CTRL_XOF_LEN 0x3 + +/* Minimum Algorithm specific ctrl value */ + +# define EVP_MD_CTRL_ALG_CTRL 0x1000 + +# endif /* !EVP_MD */ + +/* values for EVP_MD_CTX flags */ + +# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be + * called once only */ +# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been + * cleaned */ +# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data + * in EVP_MD_CTX_reset */ +/* + * FIPS and pad options are ignored in 1.0.0, definitions are here so we + * don't accidentally reuse the values for other purposes. + */ + +# define EVP_MD_CTX_FLAG_NON_FIPS_ALLOW 0x0008/* Allow use of non FIPS + * digest in FIPS mode */ + +/* + * The following PAD options are also currently ignored in 1.0.0, digest + * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() + * instead. + */ +# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ +# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ +# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ +# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ + +# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ +/* + * Some functions such as EVP_DigestSign only finalise copies of internal + * contexts so additional data can be included after the finalisation call. + * This is inefficient if this functionality is not required: it is disabled + * if the following flag is set. + */ +# define EVP_MD_CTX_FLAG_FINALISE 0x0200 +/* NOTE: 0x0400 is reserved for internal usage */ + +EVP_CIPHER *EVP_CIPHER_meth_new(int cipher_type, int block_size, int key_len); +EVP_CIPHER *EVP_CIPHER_meth_dup(const EVP_CIPHER *cipher); +void EVP_CIPHER_meth_free(EVP_CIPHER *cipher); + +int EVP_CIPHER_meth_set_iv_length(EVP_CIPHER *cipher, int iv_len); +int EVP_CIPHER_meth_set_flags(EVP_CIPHER *cipher, unsigned long flags); +int EVP_CIPHER_meth_set_impl_ctx_size(EVP_CIPHER *cipher, int ctx_size); +int EVP_CIPHER_meth_set_init(EVP_CIPHER *cipher, + int (*init) (EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc)); +int EVP_CIPHER_meth_set_do_cipher(EVP_CIPHER *cipher, + int (*do_cipher) (EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl)); +int EVP_CIPHER_meth_set_cleanup(EVP_CIPHER *cipher, + int (*cleanup) (EVP_CIPHER_CTX *)); +int EVP_CIPHER_meth_set_set_asn1_params(EVP_CIPHER *cipher, + int (*set_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_get_asn1_params(EVP_CIPHER *cipher, + int (*get_asn1_parameters) (EVP_CIPHER_CTX *, + ASN1_TYPE *)); +int EVP_CIPHER_meth_set_ctrl(EVP_CIPHER *cipher, + int (*ctrl) (EVP_CIPHER_CTX *, int type, + int arg, void *ptr)); + +int (*EVP_CIPHER_meth_get_init(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + const unsigned char *key, + const unsigned char *iv, + int enc); +int (*EVP_CIPHER_meth_get_do_cipher(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *ctx, + unsigned char *out, + const unsigned char *in, + size_t inl); +int (*EVP_CIPHER_meth_get_cleanup(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *); +int (*EVP_CIPHER_meth_get_set_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_get_asn1_params(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + ASN1_TYPE *); +int (*EVP_CIPHER_meth_get_ctrl(const EVP_CIPHER *cipher))(EVP_CIPHER_CTX *, + int type, int arg, + void *ptr); + +/* Values for cipher flags */ + +/* Modes for ciphers */ + +# define EVP_CIPH_STREAM_CIPHER 0x0 +# define EVP_CIPH_ECB_MODE 0x1 +# define EVP_CIPH_CBC_MODE 0x2 +# define EVP_CIPH_CFB_MODE 0x3 +# define EVP_CIPH_OFB_MODE 0x4 +# define EVP_CIPH_CTR_MODE 0x5 +# define EVP_CIPH_GCM_MODE 0x6 +# define EVP_CIPH_CCM_MODE 0x7 +# define EVP_CIPH_XTS_MODE 0x10001 +# define EVP_CIPH_WRAP_MODE 0x10002 +# define EVP_CIPH_OCB_MODE 0x10003 +# define EVP_CIPH_MODE 0xF0007 +/* Set if variable length cipher */ +# define EVP_CIPH_VARIABLE_LENGTH 0x8 +/* Set if the iv handling should be done by the cipher itself */ +# define EVP_CIPH_CUSTOM_IV 0x10 +/* Set if the cipher's init() function should be called if key is NULL */ +# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 +/* Call ctrl() to init cipher parameters */ +# define EVP_CIPH_CTRL_INIT 0x40 +/* Don't use standard key length function */ +# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 +/* Don't use standard block padding */ +# define EVP_CIPH_NO_PADDING 0x100 +/* cipher handles random key generation */ +# define EVP_CIPH_RAND_KEY 0x200 +/* cipher has its own additional copying logic */ +# define EVP_CIPH_CUSTOM_COPY 0x400 +/* Don't use standard iv length function */ +# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 +/* Allow use default ASN1 get/set iv */ +# define EVP_CIPH_FLAG_DEFAULT_ASN1 0x1000 +/* Buffer length in bits not bytes: CFB1 mode only */ +# define EVP_CIPH_FLAG_LENGTH_BITS 0x2000 +/* Note if suitable for use in FIPS mode */ +# define EVP_CIPH_FLAG_FIPS 0x4000 +/* Allow non FIPS cipher in FIPS mode */ +# define EVP_CIPH_FLAG_NON_FIPS_ALLOW 0x8000 +/* + * Cipher handles any and all padding logic as well as finalisation. + */ +# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000 +# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000 +# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000 +/* Cipher can handle pipeline operations */ +# define EVP_CIPH_FLAG_PIPELINE 0X800000 + +/* + * Cipher context flag to indicate we can handle wrap mode: if allowed in + * older applications it could overflow buffers. + */ + +# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 + +/* ctrl() values */ + +# define EVP_CTRL_INIT 0x0 +# define EVP_CTRL_SET_KEY_LENGTH 0x1 +# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 +# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 +# define EVP_CTRL_GET_RC5_ROUNDS 0x4 +# define EVP_CTRL_SET_RC5_ROUNDS 0x5 +# define EVP_CTRL_RAND_KEY 0x6 +# define EVP_CTRL_PBE_PRF_NID 0x7 +# define EVP_CTRL_COPY 0x8 +# define EVP_CTRL_AEAD_SET_IVLEN 0x9 +# define EVP_CTRL_AEAD_GET_TAG 0x10 +# define EVP_CTRL_AEAD_SET_TAG 0x11 +# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 +# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_GCM_IV_GEN 0x13 +# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN +# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG +# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG +# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED +# define EVP_CTRL_CCM_SET_L 0x14 +# define EVP_CTRL_CCM_SET_MSGLEN 0x15 +/* + * AEAD cipher deduces payload length and returns number of bytes required to + * store MAC and eventual padding. Subsequent call to EVP_Cipher even + * appends/verifies MAC. + */ +# define EVP_CTRL_AEAD_TLS1_AAD 0x16 +/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ +# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 +/* Set the GCM invocation field, decrypt only */ +# define EVP_CTRL_GCM_SET_IV_INV 0x18 + +# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 +# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a +# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b +# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c + +# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d + +/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ +# define EVP_CTRL_SET_SBOX 0x1e +/* + * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a + * pre-allocated buffer with specified size + */ +# define EVP_CTRL_SBOX_USED 0x1f +/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, + * 0 switches meshing off + */ +# define EVP_CTRL_KEY_MESH 0x20 +/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ +# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 + +/* Set the output buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 +/* Set the input buffers to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_BUFS 0x23 +/* Set the input buffer lengths to use for a pipelined operation */ +# define EVP_CTRL_SET_PIPELINE_INPUT_LENS 0x24 + +# define EVP_CTRL_GET_IVLEN 0x25 + +/* Padding modes */ +#define EVP_PADDING_PKCS7 1 +#define EVP_PADDING_ISO7816_4 2 +#define EVP_PADDING_ANSI923 3 +#define EVP_PADDING_ISO10126 4 +#define EVP_PADDING_ZERO 5 + +/* RFC 5246 defines additional data to be 13 bytes in length */ +# define EVP_AEAD_TLS1_AAD_LEN 13 + +typedef struct { + unsigned char *out; + const unsigned char *inp; + size_t len; + unsigned int interleave; +} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; + +/* GCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_GCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 +/* Length of tag for TLS */ +# define EVP_GCM_TLS_TAG_LEN 16 + +/* CCM TLS constants */ +/* Length of fixed part of IV derived from PRF */ +# define EVP_CCM_TLS_FIXED_IV_LEN 4 +/* Length of explicit part of IV part of TLS records */ +# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 +/* Total length of CCM IV length for TLS */ +# define EVP_CCM_TLS_IV_LEN 12 +/* Length of tag for TLS */ +# define EVP_CCM_TLS_TAG_LEN 16 +/* Length of CCM8 tag for TLS */ +# define EVP_CCM8_TLS_TAG_LEN 8 + +/* Length of tag for TLS */ +# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 + +typedef struct evp_cipher_info_st { + const EVP_CIPHER *cipher; + unsigned char iv[EVP_MAX_IV_LENGTH]; +} EVP_CIPHER_INFO; + + +/* Password based encryption function */ +typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *cipher, const EVP_MD *md, + int en_de); + +# ifndef OPENSSL_NO_RSA +# define EVP_PKEY_assign_RSA(pkey,rsa) EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\ + (char *)(rsa)) +# endif + +# ifndef OPENSSL_NO_DSA +# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ + (char *)(dsa)) +# endif + +# ifndef OPENSSL_NO_DH +# define EVP_PKEY_assign_DH(pkey,dh) EVP_PKEY_assign((pkey),EVP_PKEY_DH,\ + (char *)(dh)) +# endif + +# ifndef OPENSSL_NO_EC +# define EVP_PKEY_assign_EC_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC,\ + (char *)(eckey)) +# endif +# ifndef OPENSSL_NO_SIPHASH +# define EVP_PKEY_assign_SIPHASH(pkey,shkey) EVP_PKEY_assign((pkey),EVP_PKEY_SIPHASH,\ + (char *)(shkey)) +# endif + +# ifndef OPENSSL_NO_POLY1305 +# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),EVP_PKEY_POLY1305,\ + (char *)(polykey)) +# endif + +/* Add some extra combinations */ +# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) +# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) +# define EVP_get_cipherbynid(a) EVP_get_cipherbyname(OBJ_nid2sn(a)) +# define EVP_get_cipherbyobj(a) EVP_get_cipherbynid(OBJ_obj2nid(a)) + +int EVP_MD_type(const EVP_MD *md); +# define EVP_MD_nid(e) EVP_MD_type(e) +# define EVP_MD_name(e) OBJ_nid2sn(EVP_MD_nid(e)) +int EVP_MD_pkey_type(const EVP_MD *md); +int EVP_MD_size(const EVP_MD *md); +int EVP_MD_block_size(const EVP_MD *md); +unsigned long EVP_MD_flags(const EVP_MD *md); + +const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx); +int (*EVP_MD_CTX_update_fn(EVP_MD_CTX *ctx))(EVP_MD_CTX *ctx, + const void *data, size_t count); +void EVP_MD_CTX_set_update_fn(EVP_MD_CTX *ctx, + int (*update) (EVP_MD_CTX *ctx, + const void *data, size_t count)); +# define EVP_MD_CTX_size(e) EVP_MD_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_block_size(e) EVP_MD_block_size(EVP_MD_CTX_md(e)) +# define EVP_MD_CTX_type(e) EVP_MD_type(EVP_MD_CTX_md(e)) +EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx); +void EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx); +void *EVP_MD_CTX_md_data(const EVP_MD_CTX *ctx); + +int EVP_CIPHER_nid(const EVP_CIPHER *cipher); +# define EVP_CIPHER_name(e) OBJ_nid2sn(EVP_CIPHER_nid(e)) +int EVP_CIPHER_block_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_impl_ctx_size(const EVP_CIPHER *cipher); +int EVP_CIPHER_key_length(const EVP_CIPHER *cipher); +int EVP_CIPHER_iv_length(const EVP_CIPHER *cipher); +unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher); +# define EVP_CIPHER_mode(e) (EVP_CIPHER_flags(e) & EVP_CIPH_MODE) + +const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_encrypting(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_nid(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_block_size(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_key_length(const EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_iv_length(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx); +const unsigned char *EVP_CIPHER_CTX_original_iv(const EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx); +unsigned char *EVP_CIPHER_CTX_buf_noconst(EVP_CIPHER_CTX *ctx); +int EVP_CIPHER_CTX_num(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_num(EVP_CIPHER_CTX *ctx, int num); +int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in); +void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx); +void EVP_CIPHER_CTX_set_app_data(EVP_CIPHER_CTX *ctx, void *data); +void *EVP_CIPHER_CTX_get_cipher_data(const EVP_CIPHER_CTX *ctx); +void *EVP_CIPHER_CTX_set_cipher_data(EVP_CIPHER_CTX *ctx, void *cipher_data); +# define EVP_CIPHER_CTX_type(c) EVP_CIPHER_type(EVP_CIPHER_CTX_cipher(c)) +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_flags(c) EVP_CIPHER_flags(EVP_CIPHER_CTX_cipher(c)) +# endif +# define EVP_CIPHER_CTX_mode(c) EVP_CIPHER_mode(EVP_CIPHER_CTX_cipher(c)) + +# define EVP_ENCODE_LENGTH(l) ((((l)+2)/3*4)+((l)/48+1)*2+80) +# define EVP_DECODE_LENGTH(l) (((l)+3)/4*3+80) + +# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_SignInit(a,b) EVP_DigestInit(a,b) +# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) +# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) +# define EVP_VerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_OpenUpdate(a,b,c,d,e) EVP_DecryptUpdate(a,b,c,d,e) +# define EVP_SealUpdate(a,b,c,d,e) EVP_EncryptUpdate(a,b,c,d,e) +# define EVP_DigestSignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) +# define EVP_DigestVerifyUpdate(a,b,c) EVP_DigestUpdate(a,b,c) + +# ifdef CONST_STRICT +void BIO_set_md(BIO *, const EVP_MD *md); +# else +# define BIO_set_md(b,md) BIO_ctrl(b,BIO_C_SET_MD,0,(char *)(md)) +# endif +# define BIO_get_md(b,mdp) BIO_ctrl(b,BIO_C_GET_MD,0,(char *)(mdp)) +# define BIO_get_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_GET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_set_md_ctx(b,mdcp) BIO_ctrl(b,BIO_C_SET_MD_CTX,0, \ + (char *)(mdcp)) +# define BIO_get_cipher_status(b) BIO_ctrl(b,BIO_C_GET_CIPHER_STATUS,0,NULL) +# define BIO_get_cipher_ctx(b,c_pp) BIO_ctrl(b,BIO_C_GET_CIPHER_CTX,0, \ + (char *)(c_pp)) + +/*__owur*/ int EVP_Cipher(EVP_CIPHER_CTX *c, + unsigned char *out, + const unsigned char *in, unsigned int inl); + +# define EVP_add_cipher_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_add_digest_alias(n,alias) \ + OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) +# define EVP_delete_cipher_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); +# define EVP_delete_digest_alias(alias) \ + OBJ_NAME_remove(alias,OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS); + +int EVP_MD_CTX_ctrl(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); +EVP_MD_CTX *EVP_MD_CTX_new(void); +int EVP_MD_CTX_reset(EVP_MD_CTX *ctx); +void EVP_MD_CTX_free(EVP_MD_CTX *ctx); +# define EVP_MD_CTX_create() EVP_MD_CTX_new() +# define EVP_MD_CTX_init(ctx) EVP_MD_CTX_reset((ctx)) +# define EVP_MD_CTX_destroy(ctx) EVP_MD_CTX_free((ctx)) +__owur int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in); +void EVP_MD_CTX_set_flags(EVP_MD_CTX *ctx, int flags); +void EVP_MD_CTX_clear_flags(EVP_MD_CTX *ctx, int flags); +int EVP_MD_CTX_test_flags(const EVP_MD_CTX *ctx, int flags); +__owur int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, + ENGINE *impl); +__owur int EVP_DigestUpdate(EVP_MD_CTX *ctx, const void *d, + size_t cnt); +__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_Digest(const void *data, size_t count, + unsigned char *md, unsigned int *size, + const EVP_MD *type, ENGINE *impl); + +__owur int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in); +__owur int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type); +__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, + unsigned int *s); +__owur int EVP_DigestFinalXOF(EVP_MD_CTX *ctx, unsigned char *md, + size_t len); + +int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify); +int EVP_read_pw_string_min(char *buf, int minlen, int maxlen, + const char *prompt, int verify); +void EVP_set_pw_prompt(const char *prompt); +char *EVP_get_pw_prompt(void); + +__owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, + const unsigned char *salt, + const unsigned char *data, int datal, int count, + unsigned char *key, unsigned char *iv); + +void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); +void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); +int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); + +__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +/*__owur*/ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); +/*__owur*/ int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl); + +__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv); +/*__owur*/ int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv); +/*__owur*/ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_DecryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +/*__owur*/ int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, + const unsigned char *key, const unsigned char *iv, + int enc); +/*__owur*/ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, + const EVP_CIPHER *cipher, ENGINE *impl, + const unsigned char *key, + const unsigned char *iv, int enc); +__owur int EVP_CipherUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, + int *outl, const unsigned char *in, int inl); +__owur int EVP_CipherFinal(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); +__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, + int *outl); + +__owur int EVP_SignFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s, + EVP_PKEY *pkey); + +__owur int EVP_DigestSign(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen, const unsigned char *tbs, + size_t tbslen); + +__owur int EVP_VerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sigbuf, + unsigned int siglen, EVP_PKEY *pkey); + +__owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, + size_t siglen, const unsigned char *tbs, + size_t tbslen); + +/*__owur*/ int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + size_t *siglen); + +__owur int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, + const EVP_MD *type, ENGINE *e, + EVP_PKEY *pkey); +__owur int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, + size_t siglen); + +# ifndef OPENSSL_NO_RSA +__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + const unsigned char *ek, int ekl, + const unsigned char *iv, EVP_PKEY *priv); +__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); + +__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, + unsigned char **ek, int *ekl, unsigned char *iv, + EVP_PKEY **pubk, int npubk); +__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); +# endif + +EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void); +void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx); +int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx); +int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx); +void EVP_EncodeInit(EVP_ENCODE_CTX *ctx); +int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); +int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); + +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); +int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, + const unsigned char *in, int inl); +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned + char *out, int *outl); +int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define EVP_CIPHER_CTX_init(c) EVP_CIPHER_CTX_reset(c) +# define EVP_CIPHER_CTX_cleanup(c) EVP_CIPHER_CTX_reset(c) +# endif +EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); +int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); +void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); +int EVP_CIPHER_CTX_set_key_length(EVP_CIPHER_CTX *x, int keylen); +int EVP_CIPHER_CTX_set_padding(EVP_CIPHER_CTX *c, int pad); +int EVP_CIPHER_CTX_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); +int EVP_CIPHER_CTX_rand_key(EVP_CIPHER_CTX *ctx, unsigned char *key); + +const BIO_METHOD *BIO_f_md(void); +const BIO_METHOD *BIO_f_base64(void); +const BIO_METHOD *BIO_f_cipher(void); +const BIO_METHOD *BIO_f_reliable(void); +__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, + const unsigned char *i, int enc); + +const EVP_MD *EVP_md_null(void); +# ifndef OPENSSL_NO_MD2 +const EVP_MD *EVP_md2(void); +# endif +# ifndef OPENSSL_NO_MD4 +const EVP_MD *EVP_md4(void); +# endif +# ifndef OPENSSL_NO_MD5 +const EVP_MD *EVP_md5(void); +const EVP_MD *EVP_md5_sha1(void); +# endif +# ifndef OPENSSL_NO_BLAKE2 +const EVP_MD *EVP_blake2b512(void); +const EVP_MD *EVP_blake2s256(void); +# endif +const EVP_MD *EVP_sha1(void); +const EVP_MD *EVP_sha224(void); +const EVP_MD *EVP_sha256(void); +const EVP_MD *EVP_sha384(void); +const EVP_MD *EVP_sha512(void); +const EVP_MD *EVP_sha512_224(void); +const EVP_MD *EVP_sha512_256(void); +const EVP_MD *EVP_sha3_224(void); +const EVP_MD *EVP_sha3_256(void); +const EVP_MD *EVP_sha3_384(void); +const EVP_MD *EVP_sha3_512(void); +const EVP_MD *EVP_shake128(void); +const EVP_MD *EVP_shake256(void); +# ifndef OPENSSL_NO_MDC2 +const EVP_MD *EVP_mdc2(void); +# endif +# ifndef OPENSSL_NO_RMD160 +const EVP_MD *EVP_ripemd160(void); +# endif +# ifndef OPENSSL_NO_WHIRLPOOL +const EVP_MD *EVP_whirlpool(void); +# endif +# ifndef OPENSSL_NO_SM3 +const EVP_MD *EVP_sm3(void); +# endif +const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ +# ifndef OPENSSL_NO_DES +const EVP_CIPHER *EVP_des_ecb(void); +const EVP_CIPHER *EVP_des_ede(void); +const EVP_CIPHER *EVP_des_ede3(void); +const EVP_CIPHER *EVP_des_ede_ecb(void); +const EVP_CIPHER *EVP_des_ede3_ecb(void); +const EVP_CIPHER *EVP_des_cfb64(void); +# define EVP_des_cfb EVP_des_cfb64 +const EVP_CIPHER *EVP_des_cfb1(void); +const EVP_CIPHER *EVP_des_cfb8(void); +const EVP_CIPHER *EVP_des_ede_cfb64(void); +# define EVP_des_ede_cfb EVP_des_ede_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb64(void); +# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 +const EVP_CIPHER *EVP_des_ede3_cfb1(void); +const EVP_CIPHER *EVP_des_ede3_cfb8(void); +const EVP_CIPHER *EVP_des_ofb(void); +const EVP_CIPHER *EVP_des_ede_ofb(void); +const EVP_CIPHER *EVP_des_ede3_ofb(void); +const EVP_CIPHER *EVP_des_cbc(void); +const EVP_CIPHER *EVP_des_ede_cbc(void); +const EVP_CIPHER *EVP_des_ede3_cbc(void); +const EVP_CIPHER *EVP_desx_cbc(void); +const EVP_CIPHER *EVP_des_ede3_wrap(void); +/* + * This should now be supported through the dev_crypto ENGINE. But also, why + * are rc4 and md5 declarations made here inside a "NO_DES" precompiler + * branch? + */ +# endif +# ifndef OPENSSL_NO_RC4 +const EVP_CIPHER *EVP_rc4(void); +const EVP_CIPHER *EVP_rc4_40(void); +# ifndef OPENSSL_NO_MD5 +const EVP_CIPHER *EVP_rc4_hmac_md5(void); +# endif +# endif +# ifndef OPENSSL_NO_IDEA +const EVP_CIPHER *EVP_idea_ecb(void); +const EVP_CIPHER *EVP_idea_cfb64(void); +# define EVP_idea_cfb EVP_idea_cfb64 +const EVP_CIPHER *EVP_idea_ofb(void); +const EVP_CIPHER *EVP_idea_cbc(void); +# endif +# ifndef OPENSSL_NO_RC2 +const EVP_CIPHER *EVP_rc2_ecb(void); +const EVP_CIPHER *EVP_rc2_cbc(void); +const EVP_CIPHER *EVP_rc2_40_cbc(void); +const EVP_CIPHER *EVP_rc2_64_cbc(void); +const EVP_CIPHER *EVP_rc2_cfb64(void); +# define EVP_rc2_cfb EVP_rc2_cfb64 +const EVP_CIPHER *EVP_rc2_ofb(void); +# endif +# ifndef OPENSSL_NO_BF +const EVP_CIPHER *EVP_bf_ecb(void); +const EVP_CIPHER *EVP_bf_cbc(void); +const EVP_CIPHER *EVP_bf_cfb64(void); +# define EVP_bf_cfb EVP_bf_cfb64 +const EVP_CIPHER *EVP_bf_ofb(void); +# endif +# ifndef OPENSSL_NO_CAST +const EVP_CIPHER *EVP_cast5_ecb(void); +const EVP_CIPHER *EVP_cast5_cbc(void); +const EVP_CIPHER *EVP_cast5_cfb64(void); +# define EVP_cast5_cfb EVP_cast5_cfb64 +const EVP_CIPHER *EVP_cast5_ofb(void); +# endif +# ifndef OPENSSL_NO_RC5 +const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); +const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); +const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); +# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 +const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); +# endif +const EVP_CIPHER *EVP_aes_128_ecb(void); +const EVP_CIPHER *EVP_aes_128_cbc(void); +const EVP_CIPHER *EVP_aes_128_cfb1(void); +const EVP_CIPHER *EVP_aes_128_cfb8(void); +const EVP_CIPHER *EVP_aes_128_cfb128(void); +# define EVP_aes_128_cfb EVP_aes_128_cfb128 +const EVP_CIPHER *EVP_aes_128_ofb(void); +const EVP_CIPHER *EVP_aes_128_ctr(void); +const EVP_CIPHER *EVP_aes_128_ccm(void); +const EVP_CIPHER *EVP_aes_128_gcm(void); +const EVP_CIPHER *EVP_aes_128_xts(void); +const EVP_CIPHER *EVP_aes_128_wrap(void); +const EVP_CIPHER *EVP_aes_128_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_128_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_192_ecb(void); +const EVP_CIPHER *EVP_aes_192_cbc(void); +const EVP_CIPHER *EVP_aes_192_cfb1(void); +const EVP_CIPHER *EVP_aes_192_cfb8(void); +const EVP_CIPHER *EVP_aes_192_cfb128(void); +# define EVP_aes_192_cfb EVP_aes_192_cfb128 +const EVP_CIPHER *EVP_aes_192_ofb(void); +const EVP_CIPHER *EVP_aes_192_ctr(void); +const EVP_CIPHER *EVP_aes_192_ccm(void); +const EVP_CIPHER *EVP_aes_192_gcm(void); +const EVP_CIPHER *EVP_aes_192_wrap(void); +const EVP_CIPHER *EVP_aes_192_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_192_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_256_ecb(void); +const EVP_CIPHER *EVP_aes_256_cbc(void); +const EVP_CIPHER *EVP_aes_256_cfb1(void); +const EVP_CIPHER *EVP_aes_256_cfb8(void); +const EVP_CIPHER *EVP_aes_256_cfb128(void); +# define EVP_aes_256_cfb EVP_aes_256_cfb128 +const EVP_CIPHER *EVP_aes_256_ofb(void); +const EVP_CIPHER *EVP_aes_256_ctr(void); +const EVP_CIPHER *EVP_aes_256_ccm(void); +const EVP_CIPHER *EVP_aes_256_gcm(void); +const EVP_CIPHER *EVP_aes_256_xts(void); +const EVP_CIPHER *EVP_aes_256_wrap(void); +const EVP_CIPHER *EVP_aes_256_wrap_pad(void); +# ifndef OPENSSL_NO_OCB +const EVP_CIPHER *EVP_aes_256_ocb(void); +# endif +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); +const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); +const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); +# ifndef OPENSSL_NO_ARIA +const EVP_CIPHER *EVP_aria_128_ecb(void); +const EVP_CIPHER *EVP_aria_128_cbc(void); +const EVP_CIPHER *EVP_aria_128_cfb1(void); +const EVP_CIPHER *EVP_aria_128_cfb8(void); +const EVP_CIPHER *EVP_aria_128_cfb128(void); +# define EVP_aria_128_cfb EVP_aria_128_cfb128 +const EVP_CIPHER *EVP_aria_128_ctr(void); +const EVP_CIPHER *EVP_aria_128_ofb(void); +const EVP_CIPHER *EVP_aria_128_gcm(void); +const EVP_CIPHER *EVP_aria_128_ccm(void); +const EVP_CIPHER *EVP_aria_192_ecb(void); +const EVP_CIPHER *EVP_aria_192_cbc(void); +const EVP_CIPHER *EVP_aria_192_cfb1(void); +const EVP_CIPHER *EVP_aria_192_cfb8(void); +const EVP_CIPHER *EVP_aria_192_cfb128(void); +# define EVP_aria_192_cfb EVP_aria_192_cfb128 +const EVP_CIPHER *EVP_aria_192_ctr(void); +const EVP_CIPHER *EVP_aria_192_ofb(void); +const EVP_CIPHER *EVP_aria_192_gcm(void); +const EVP_CIPHER *EVP_aria_192_ccm(void); +const EVP_CIPHER *EVP_aria_256_ecb(void); +const EVP_CIPHER *EVP_aria_256_cbc(void); +const EVP_CIPHER *EVP_aria_256_cfb1(void); +const EVP_CIPHER *EVP_aria_256_cfb8(void); +const EVP_CIPHER *EVP_aria_256_cfb128(void); +# define EVP_aria_256_cfb EVP_aria_256_cfb128 +const EVP_CIPHER *EVP_aria_256_ctr(void); +const EVP_CIPHER *EVP_aria_256_ofb(void); +const EVP_CIPHER *EVP_aria_256_gcm(void); +const EVP_CIPHER *EVP_aria_256_ccm(void); +# endif +# ifndef OPENSSL_NO_CAMELLIA +const EVP_CIPHER *EVP_camellia_128_ecb(void); +const EVP_CIPHER *EVP_camellia_128_cbc(void); +const EVP_CIPHER *EVP_camellia_128_cfb1(void); +const EVP_CIPHER *EVP_camellia_128_cfb8(void); +const EVP_CIPHER *EVP_camellia_128_cfb128(void); +# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 +const EVP_CIPHER *EVP_camellia_128_ofb(void); +const EVP_CIPHER *EVP_camellia_128_ctr(void); +const EVP_CIPHER *EVP_camellia_192_ecb(void); +const EVP_CIPHER *EVP_camellia_192_cbc(void); +const EVP_CIPHER *EVP_camellia_192_cfb1(void); +const EVP_CIPHER *EVP_camellia_192_cfb8(void); +const EVP_CIPHER *EVP_camellia_192_cfb128(void); +# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 +const EVP_CIPHER *EVP_camellia_192_ofb(void); +const EVP_CIPHER *EVP_camellia_192_ctr(void); +const EVP_CIPHER *EVP_camellia_256_ecb(void); +const EVP_CIPHER *EVP_camellia_256_cbc(void); +const EVP_CIPHER *EVP_camellia_256_cfb1(void); +const EVP_CIPHER *EVP_camellia_256_cfb8(void); +const EVP_CIPHER *EVP_camellia_256_cfb128(void); +# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 +const EVP_CIPHER *EVP_camellia_256_ofb(void); +const EVP_CIPHER *EVP_camellia_256_ctr(void); +# endif +# ifndef OPENSSL_NO_CHACHA +const EVP_CIPHER *EVP_chacha20(void); +# ifndef OPENSSL_NO_POLY1305 +const EVP_CIPHER *EVP_chacha20_poly1305(void); +# endif +# endif + +# ifndef OPENSSL_NO_SEED +const EVP_CIPHER *EVP_seed_ecb(void); +const EVP_CIPHER *EVP_seed_cbc(void); +const EVP_CIPHER *EVP_seed_cfb128(void); +# define EVP_seed_cfb EVP_seed_cfb128 +const EVP_CIPHER *EVP_seed_ofb(void); +# endif + +# ifndef OPENSSL_NO_SM4 +const EVP_CIPHER *EVP_sm4_ecb(void); +const EVP_CIPHER *EVP_sm4_cbc(void); +const EVP_CIPHER *EVP_sm4_cfb128(void); +# define EVP_sm4_cfb EVP_sm4_cfb128 +const EVP_CIPHER *EVP_sm4_ofb(void); +const EVP_CIPHER *EVP_sm4_ctr(void); +# endif + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OPENSSL_add_all_algorithms_conf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS \ + | OPENSSL_INIT_LOAD_CONFIG, NULL) +# define OPENSSL_add_all_algorithms_noconf() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ + | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# ifdef OPENSSL_LOAD_CONF +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() +# else +# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() +# endif + +# define OpenSSL_add_all_ciphers() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) +# define OpenSSL_add_all_digests() \ + OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) + +# define EVP_cleanup() while(0) continue +# endif + +int EVP_add_cipher(const EVP_CIPHER *cipher); +int EVP_add_digest(const EVP_MD *digest); + +const EVP_CIPHER *EVP_get_cipherbyname(const char *name); +const EVP_MD *EVP_get_digestbyname(const char *name); + +void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_CIPHER_do_all_sorted(void (*fn) + (const EVP_CIPHER *ciph, const char *from, + const char *to, void *x), void *arg); + +void EVP_MD_do_all(void (*fn) (const EVP_MD *ciph, + const char *from, const char *to, void *x), + void *arg); +void EVP_MD_do_all_sorted(void (*fn) + (const EVP_MD *ciph, const char *from, + const char *to, void *x), void *arg); + +int EVP_PKEY_decrypt_old(unsigned char *dec_key, + const unsigned char *enc_key, int enc_key_len, + EVP_PKEY *private_key); +int EVP_PKEY_encrypt_old(unsigned char *enc_key, + const unsigned char *key, int key_len, + EVP_PKEY *pub_key); +int EVP_PKEY_type(int type); +int EVP_PKEY_id(const EVP_PKEY *pkey); +int EVP_PKEY_base_id(const EVP_PKEY *pkey); +int EVP_PKEY_bits(const EVP_PKEY *pkey); +int EVP_PKEY_security_bits(const EVP_PKEY *pkey); +int EVP_PKEY_size(const EVP_PKEY *pkey); +int EVP_PKEY_set_type(EVP_PKEY *pkey, int type); +int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len); +int EVP_PKEY_set_alias_type(EVP_PKEY *pkey, int type); +# ifndef OPENSSL_NO_ENGINE +int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e); +ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey); +# endif +int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key); +void *EVP_PKEY_get0(const EVP_PKEY *pkey); +const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len); +# ifndef OPENSSL_NO_POLY1305 +const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); +# endif +# ifndef OPENSSL_NO_SIPHASH +const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); +# endif + +# ifndef OPENSSL_NO_RSA +struct rsa_st; +int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); +struct rsa_st *EVP_PKEY_get0_RSA(EVP_PKEY *pkey); +struct rsa_st *EVP_PKEY_get1_RSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DSA +struct dsa_st; +int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); +struct dsa_st *EVP_PKEY_get0_DSA(EVP_PKEY *pkey); +struct dsa_st *EVP_PKEY_get1_DSA(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_DH +struct dh_st; +int EVP_PKEY_set1_DH(EVP_PKEY *pkey, struct dh_st *key); +struct dh_st *EVP_PKEY_get0_DH(EVP_PKEY *pkey); +struct dh_st *EVP_PKEY_get1_DH(EVP_PKEY *pkey); +# endif +# ifndef OPENSSL_NO_EC +struct ec_key_st; +int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, struct ec_key_st *key); +struct ec_key_st *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey); +struct ec_key_st *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey); +# endif + +EVP_PKEY *EVP_PKEY_new(void); +int EVP_PKEY_up_ref(EVP_PKEY *pkey); +void EVP_PKEY_free(EVP_PKEY *pkey); + +EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp); + +EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, + long length); +EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, + long length); +int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp); + +int EVP_PKEY_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from); +int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey); +int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode); +int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b); + +int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); +int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx); + +int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid); + +int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, + const unsigned char *pt, size_t ptlen); +size_t EVP_PKEY_get1_tls_encodedpoint(EVP_PKEY *pkey, unsigned char **ppt); + +int EVP_CIPHER_type(const EVP_CIPHER *ctx); + +/* calls methods */ +int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* These are used by EVP_CIPHER methods */ +int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); +int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); + +/* PKCS5 password based encryption */ +int PKCS5_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); +int PKCS5_PBKDF2_HMAC_SHA1(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + int keylen, unsigned char *out); +int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, + const unsigned char *salt, int saltlen, int iter, + const EVP_MD *digest, int keylen, unsigned char *out); +int PKCS5_v2_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md, int en_de); + +#ifndef OPENSSL_NO_SCRYPT +int EVP_PBE_scrypt(const char *pass, size_t passlen, + const unsigned char *salt, size_t saltlen, + uint64_t N, uint64_t r, uint64_t p, uint64_t maxmem, + unsigned char *key, size_t keylen); + +int PKCS5_v2_scrypt_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, + int passlen, ASN1_TYPE *param, + const EVP_CIPHER *c, const EVP_MD *md, int en_de); +#endif + +void PKCS5_PBE_add(void); + +int EVP_PBE_CipherInit(ASN1_OBJECT *pbe_obj, const char *pass, int passlen, + ASN1_TYPE *param, EVP_CIPHER_CTX *ctx, int en_de); + +/* PBE type */ + +/* Can appear as the outermost AlgorithmIdentifier */ +# define EVP_PBE_TYPE_OUTER 0x0 +/* Is an PRF type OID */ +# define EVP_PBE_TYPE_PRF 0x1 +/* Is a PKCS#5 v2.0 KDF */ +# define EVP_PBE_TYPE_KDF 0x2 + +int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, + int md_nid, EVP_PBE_KEYGEN *keygen); +int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, + EVP_PBE_KEYGEN *keygen); +int EVP_PBE_find(int type, int pbe_nid, int *pcnid, int *pmnid, + EVP_PBE_KEYGEN **pkeygen); +void EVP_PBE_cleanup(void); +int EVP_PBE_get(int *ptype, int *ppbe_nid, size_t num); + +# define ASN1_PKEY_ALIAS 0x1 +# define ASN1_PKEY_DYNAMIC 0x2 +# define ASN1_PKEY_SIGPARAM_NULL 0x4 + +# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 +# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 +# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 +# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 +# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 +# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 + +# define ASN1_PKEY_CTRL_SET1_TLS_ENCPT 0x9 +# define ASN1_PKEY_CTRL_GET1_TLS_ENCPT 0xa + +int EVP_PKEY_asn1_get_count(void); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, + const char *str, int len); +int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); +int EVP_PKEY_asn1_add_alias(int to, int from); +int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, + int *ppkey_flags, const char **pinfo, + const char **ppem_str, + const EVP_PKEY_ASN1_METHOD *ameth); + +const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); +EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, + const char *pem_str, + const char *info); +void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, + const EVP_PKEY_ASN1_METHOD *src); +void EVP_PKEY_asn1_free(EVP_PKEY_ASN1_METHOD *ameth); +void EVP_PKEY_asn1_set_public(EVP_PKEY_ASN1_METHOD *ameth, + int (*pub_decode) (EVP_PKEY *pk, + X509_PUBKEY *pub), + int (*pub_encode) (X509_PUBKEY *pub, + const EVP_PKEY *pk), + int (*pub_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*pub_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, ASN1_PCTX *pctx), + int (*pkey_size) (const EVP_PKEY *pk), + int (*pkey_bits) (const EVP_PKEY *pk)); +void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, + int (*priv_decode) (EVP_PKEY *pk, + const PKCS8_PRIV_KEY_INFO + *p8inf), + int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, + const EVP_PKEY *pk), + int (*priv_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); +void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, + int (*param_decode) (EVP_PKEY *pkey, + const unsigned char **pder, + int derlen), + int (*param_encode) (const EVP_PKEY *pkey, + unsigned char **pder), + int (*param_missing) (const EVP_PKEY *pk), + int (*param_copy) (EVP_PKEY *to, + const EVP_PKEY *from), + int (*param_cmp) (const EVP_PKEY *a, + const EVP_PKEY *b), + int (*param_print) (BIO *out, + const EVP_PKEY *pkey, + int indent, + ASN1_PCTX *pctx)); + +void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, + void (*pkey_free) (EVP_PKEY *pkey)); +void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_ctrl) (EVP_PKEY *pkey, int op, + long arg1, void *arg2)); +void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, + int (*item_verify) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *a, + ASN1_BIT_STRING *sig, + EVP_PKEY *pkey), + int (*item_sign) (EVP_MD_CTX *ctx, + const ASN1_ITEM *it, + void *asn, + X509_ALGOR *alg1, + X509_ALGOR *alg2, + ASN1_BIT_STRING *sig)); + +void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, + int (*siginf_set) (X509_SIG_INFO *siginf, + const X509_ALGOR *alg, + const ASN1_STRING *sig)); + +void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_pub_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_param_check) (const EVP_PKEY *pk)); + +void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_priv_key) (EVP_PKEY *pk, + const unsigned char + *priv, + size_t len)); +void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*set_pub_key) (EVP_PKEY *pk, + const unsigned char *pub, + size_t len)); +void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_priv_key) (const EVP_PKEY *pk, + unsigned char *priv, + size_t *len)); +void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, + int (*get_pub_key) (const EVP_PKEY *pk, + unsigned char *pub, + size_t *len)); + +void EVP_PKEY_asn1_set_security_bits(EVP_PKEY_ASN1_METHOD *ameth, + int (*pkey_security_bits) (const EVP_PKEY + *pk)); + +# define EVP_PKEY_OP_UNDEFINED 0 +# define EVP_PKEY_OP_PARAMGEN (1<<1) +# define EVP_PKEY_OP_KEYGEN (1<<2) +# define EVP_PKEY_OP_SIGN (1<<3) +# define EVP_PKEY_OP_VERIFY (1<<4) +# define EVP_PKEY_OP_VERIFYRECOVER (1<<5) +# define EVP_PKEY_OP_SIGNCTX (1<<6) +# define EVP_PKEY_OP_VERIFYCTX (1<<7) +# define EVP_PKEY_OP_ENCRYPT (1<<8) +# define EVP_PKEY_OP_DECRYPT (1<<9) +# define EVP_PKEY_OP_DERIVE (1<<10) + +# define EVP_PKEY_OP_TYPE_SIG \ + (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER \ + | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) + +# define EVP_PKEY_OP_TYPE_CRYPT \ + (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) + +# define EVP_PKEY_OP_TYPE_NOGEN \ + (EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT | EVP_PKEY_OP_DERIVE) + +# define EVP_PKEY_OP_TYPE_GEN \ + (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN) + +# define EVP_PKEY_CTX_set_signature_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \ + EVP_PKEY_CTRL_GET_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set_mac_key(ctx, key, len) \ + EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_SET_MAC_KEY, len, (void *)(key)) + +# define EVP_PKEY_CTRL_MD 1 +# define EVP_PKEY_CTRL_PEER_KEY 2 + +# define EVP_PKEY_CTRL_PKCS7_ENCRYPT 3 +# define EVP_PKEY_CTRL_PKCS7_DECRYPT 4 + +# define EVP_PKEY_CTRL_PKCS7_SIGN 5 + +# define EVP_PKEY_CTRL_SET_MAC_KEY 6 + +# define EVP_PKEY_CTRL_DIGESTINIT 7 + +/* Used by GOST key encryption in TLS */ +# define EVP_PKEY_CTRL_SET_IV 8 + +# define EVP_PKEY_CTRL_CMS_ENCRYPT 9 +# define EVP_PKEY_CTRL_CMS_DECRYPT 10 +# define EVP_PKEY_CTRL_CMS_SIGN 11 + +# define EVP_PKEY_CTRL_CIPHER 12 + +# define EVP_PKEY_CTRL_GET_MD 13 + +# define EVP_PKEY_CTRL_SET_DIGEST_SIZE 14 + +# define EVP_PKEY_ALG_CTRL 0x1000 + +# define EVP_PKEY_FLAG_AUTOARGLEN 2 +/* + * Method handles all operations: don't assume any digest related defaults. + */ +# define EVP_PKEY_FLAG_SIGCTX_CUSTOM 4 + +const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type); +EVP_PKEY_METHOD *EVP_PKEY_meth_new(int id, int flags); +void EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, + const EVP_PKEY_METHOD *meth); +void EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src); +void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth); +int EVP_PKEY_meth_remove(const EVP_PKEY_METHOD *pmeth); +size_t EVP_PKEY_meth_get_count(void); +const EVP_PKEY_METHOD *EVP_PKEY_meth_get0(size_t idx); + +EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_new_id(int id, ENGINE *e); +EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, int p1, void *p2); +int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value); +int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, + int cmd, uint64_t value); + +int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); +int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); + +int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); + +int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); +void EVP_PKEY_CTX_set0_keygen_info(EVP_PKEY_CTX *ctx, int *dat, int datlen); + +EVP_PKEY *EVP_PKEY_new_mac_key(int type, ENGINE *e, + const unsigned char *key, int keylen); +EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *e, + const unsigned char *priv, + size_t len); +EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *e, + const unsigned char *pub, + size_t len); +int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, + size_t *len); +int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, + size_t *len); + +EVP_PKEY *EVP_PKEY_new_CMAC_key(ENGINE *e, const unsigned char *priv, + size_t len, const EVP_CIPHER *cipher); + +void EVP_PKEY_CTX_set_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_data(EVP_PKEY_CTX *ctx); +EVP_PKEY *EVP_PKEY_CTX_get0_pkey(EVP_PKEY_CTX *ctx); + +EVP_PKEY *EVP_PKEY_CTX_get0_peerkey(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_app_data(EVP_PKEY_CTX *ctx, void *data); +void *EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_sign(EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify(EVP_PKEY_CTX *ctx, + const unsigned char *sig, size_t siglen, + const unsigned char *tbs, size_t tbslen); +int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx, + unsigned char *rout, size_t *routlen, + const unsigned char *sig, size_t siglen); +int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); + +int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer); +int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); + +typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx); +int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); +int EVP_PKEY_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_public_check(EVP_PKEY_CTX *ctx); +int EVP_PKEY_param_check(EVP_PKEY_CTX *ctx); + +void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx, EVP_PKEY_gen_cb *cb); +EVP_PKEY_gen_cb *EVP_PKEY_CTX_get_cb(EVP_PKEY_CTX *ctx); + +int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int idx); + +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, + int (*init) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, + int (*copy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, + void (*cleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth, + int (*paramgen_init) (EVP_PKEY_CTX *ctx), + int (*paramgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth, + int (*keygen_init) (EVP_PKEY_CTX *ctx), + int (*keygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth, + int (*sign_init) (EVP_PKEY_CTX *ctx), + int (*sign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth, + int (*verify_init) (EVP_PKEY_CTX *ctx), + int (*verify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth, + int (*verify_recover_init) (EVP_PKEY_CTX + *ctx), + int (*verify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth, + int (*signctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*signctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth, + int (*verifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (*verifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth, + int (*encrypt_init) (EVP_PKEY_CTX *ctx), + int (*encryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth, + int (*decrypt_init) (EVP_PKEY_CTX *ctx), + int (*decrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth, + int (*derive_init) (EVP_PKEY_CTX *ctx), + int (*derive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth, + int (*ctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (*ctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +void EVP_PKEY_meth_set_digestsign(EVP_PKEY_METHOD *pmeth, + int (*digestsign) (EVP_MD_CTX *ctx, + unsigned char *sig, + size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_digestverify(EVP_PKEY_METHOD *pmeth, + int (*digestverify) (EVP_MD_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, + int (*check) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_set_digest_custom(EVP_PKEY_METHOD *pmeth, + int (*digest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_init(const EVP_PKEY_METHOD *pmeth, + int (**pinit) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_copy(const EVP_PKEY_METHOD *pmeth, + int (**pcopy) (EVP_PKEY_CTX *dst, + EVP_PKEY_CTX *src)); + +void EVP_PKEY_meth_get_cleanup(const EVP_PKEY_METHOD *pmeth, + void (**pcleanup) (EVP_PKEY_CTX *ctx)); + +void EVP_PKEY_meth_get_paramgen(const EVP_PKEY_METHOD *pmeth, + int (**pparamgen_init) (EVP_PKEY_CTX *ctx), + int (**pparamgen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_keygen(const EVP_PKEY_METHOD *pmeth, + int (**pkeygen_init) (EVP_PKEY_CTX *ctx), + int (**pkeygen) (EVP_PKEY_CTX *ctx, + EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_sign(const EVP_PKEY_METHOD *pmeth, + int (**psign_init) (EVP_PKEY_CTX *ctx), + int (**psign) (EVP_PKEY_CTX *ctx, + unsigned char *sig, size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify(const EVP_PKEY_METHOD *pmeth, + int (**pverify_init) (EVP_PKEY_CTX *ctx), + int (**pverify) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_verify_recover(const EVP_PKEY_METHOD *pmeth, + int (**pverify_recover_init) (EVP_PKEY_CTX + *ctx), + int (**pverify_recover) (EVP_PKEY_CTX + *ctx, + unsigned char + *sig, + size_t *siglen, + const unsigned + char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_signctx(const EVP_PKEY_METHOD *pmeth, + int (**psignctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**psignctx) (EVP_PKEY_CTX *ctx, + unsigned char *sig, + size_t *siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_verifyctx(const EVP_PKEY_METHOD *pmeth, + int (**pverifyctx_init) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx), + int (**pverifyctx) (EVP_PKEY_CTX *ctx, + const unsigned char *sig, + int siglen, + EVP_MD_CTX *mctx)); + +void EVP_PKEY_meth_get_encrypt(const EVP_PKEY_METHOD *pmeth, + int (**pencrypt_init) (EVP_PKEY_CTX *ctx), + int (**pencryptfn) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_decrypt(const EVP_PKEY_METHOD *pmeth, + int (**pdecrypt_init) (EVP_PKEY_CTX *ctx), + int (**pdecrypt) (EVP_PKEY_CTX *ctx, + unsigned char *out, + size_t *outlen, + const unsigned char *in, + size_t inlen)); + +void EVP_PKEY_meth_get_derive(const EVP_PKEY_METHOD *pmeth, + int (**pderive_init) (EVP_PKEY_CTX *ctx), + int (**pderive) (EVP_PKEY_CTX *ctx, + unsigned char *key, + size_t *keylen)); + +void EVP_PKEY_meth_get_ctrl(const EVP_PKEY_METHOD *pmeth, + int (**pctrl) (EVP_PKEY_CTX *ctx, int type, int p1, + void *p2), + int (**pctrl_str) (EVP_PKEY_CTX *ctx, + const char *type, + const char *value)); + +void EVP_PKEY_meth_get_digestsign(EVP_PKEY_METHOD *pmeth, + int (**digestsign) (EVP_MD_CTX *ctx, + unsigned char *sig, + size_t *siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_digestverify(EVP_PKEY_METHOD *pmeth, + int (**digestverify) (EVP_MD_CTX *ctx, + const unsigned char *sig, + size_t siglen, + const unsigned char *tbs, + size_t tbslen)); + +void EVP_PKEY_meth_get_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_public_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_param_check(const EVP_PKEY_METHOD *pmeth, + int (**pcheck) (EVP_PKEY *pkey)); + +void EVP_PKEY_meth_get_digest_custom(EVP_PKEY_METHOD *pmeth, + int (**pdigest_custom) (EVP_PKEY_CTX *ctx, + EVP_MD_CTX *mctx)); +void EVP_add_alg_module(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/evperr.h b/lib/openssl/include/openssl/evperr.h new file mode 100644 index 0000000..b4ea90a --- /dev/null +++ b/lib/openssl/include/openssl/evperr.h @@ -0,0 +1,204 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_EVPERR_H +# define HEADER_EVPERR_H + +# include + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_EVP_strings(void); + +/* + * EVP function codes. + */ +# define EVP_F_AESNI_INIT_KEY 165 +# define EVP_F_AESNI_XTS_INIT_KEY 207 +# define EVP_F_AES_GCM_CTRL 196 +# define EVP_F_AES_INIT_KEY 133 +# define EVP_F_AES_OCB_CIPHER 169 +# define EVP_F_AES_T4_INIT_KEY 178 +# define EVP_F_AES_T4_XTS_INIT_KEY 208 +# define EVP_F_AES_WRAP_CIPHER 170 +# define EVP_F_AES_XTS_INIT_KEY 209 +# define EVP_F_ALG_MODULE_INIT 177 +# define EVP_F_ARIA_CCM_INIT_KEY 175 +# define EVP_F_ARIA_GCM_CTRL 197 +# define EVP_F_ARIA_GCM_INIT_KEY 176 +# define EVP_F_ARIA_INIT_KEY 185 +# define EVP_F_B64_NEW 198 +# define EVP_F_CAMELLIA_INIT_KEY 159 +# define EVP_F_CHACHA20_POLY1305_CTRL 182 +# define EVP_F_CMLL_T4_INIT_KEY 179 +# define EVP_F_DES_EDE3_WRAP_CIPHER 171 +# define EVP_F_DO_SIGVER_INIT 161 +# define EVP_F_ENC_NEW 199 +# define EVP_F_EVP_CIPHERINIT_EX 123 +# define EVP_F_EVP_CIPHER_ASN1_TO_PARAM 204 +# define EVP_F_EVP_CIPHER_CTX_COPY 163 +# define EVP_F_EVP_CIPHER_CTX_CTRL 124 +# define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122 +# define EVP_F_EVP_CIPHER_PARAM_TO_ASN1 205 +# define EVP_F_EVP_DECRYPTFINAL_EX 101 +# define EVP_F_EVP_DECRYPTUPDATE 166 +# define EVP_F_EVP_DIGESTFINALXOF 174 +# define EVP_F_EVP_DIGESTINIT_EX 128 +# define EVP_F_EVP_ENCRYPTDECRYPTUPDATE 219 +# define EVP_F_EVP_ENCRYPTFINAL_EX 127 +# define EVP_F_EVP_ENCRYPTUPDATE 167 +# define EVP_F_EVP_MD_CTX_COPY_EX 110 +# define EVP_F_EVP_MD_SIZE 162 +# define EVP_F_EVP_OPENINIT 102 +# define EVP_F_EVP_PBE_ALG_ADD 115 +# define EVP_F_EVP_PBE_ALG_ADD_TYPE 160 +# define EVP_F_EVP_PBE_CIPHERINIT 116 +# define EVP_F_EVP_PBE_SCRYPT 181 +# define EVP_F_EVP_PKCS82PKEY 111 +# define EVP_F_EVP_PKEY2PKCS8 113 +# define EVP_F_EVP_PKEY_ASN1_ADD0 188 +# define EVP_F_EVP_PKEY_CHECK 186 +# define EVP_F_EVP_PKEY_COPY_PARAMETERS 103 +# define EVP_F_EVP_PKEY_CTX_CTRL 137 +# define EVP_F_EVP_PKEY_CTX_CTRL_STR 150 +# define EVP_F_EVP_PKEY_CTX_DUP 156 +# define EVP_F_EVP_PKEY_CTX_MD 168 +# define EVP_F_EVP_PKEY_DECRYPT 104 +# define EVP_F_EVP_PKEY_DECRYPT_INIT 138 +# define EVP_F_EVP_PKEY_DECRYPT_OLD 151 +# define EVP_F_EVP_PKEY_DERIVE 153 +# define EVP_F_EVP_PKEY_DERIVE_INIT 154 +# define EVP_F_EVP_PKEY_DERIVE_SET_PEER 155 +# define EVP_F_EVP_PKEY_ENCRYPT 105 +# define EVP_F_EVP_PKEY_ENCRYPT_INIT 139 +# define EVP_F_EVP_PKEY_ENCRYPT_OLD 152 +# define EVP_F_EVP_PKEY_GET0_DH 119 +# define EVP_F_EVP_PKEY_GET0_DSA 120 +# define EVP_F_EVP_PKEY_GET0_EC_KEY 131 +# define EVP_F_EVP_PKEY_GET0_HMAC 183 +# define EVP_F_EVP_PKEY_GET0_POLY1305 184 +# define EVP_F_EVP_PKEY_GET0_RSA 121 +# define EVP_F_EVP_PKEY_GET0_SIPHASH 172 +# define EVP_F_EVP_PKEY_GET_RAW_PRIVATE_KEY 202 +# define EVP_F_EVP_PKEY_GET_RAW_PUBLIC_KEY 203 +# define EVP_F_EVP_PKEY_KEYGEN 146 +# define EVP_F_EVP_PKEY_KEYGEN_INIT 147 +# define EVP_F_EVP_PKEY_METH_ADD0 194 +# define EVP_F_EVP_PKEY_METH_NEW 195 +# define EVP_F_EVP_PKEY_NEW 106 +# define EVP_F_EVP_PKEY_NEW_CMAC_KEY 193 +# define EVP_F_EVP_PKEY_NEW_RAW_PRIVATE_KEY 191 +# define EVP_F_EVP_PKEY_NEW_RAW_PUBLIC_KEY 192 +# define EVP_F_EVP_PKEY_PARAMGEN 148 +# define EVP_F_EVP_PKEY_PARAMGEN_INIT 149 +# define EVP_F_EVP_PKEY_PARAM_CHECK 189 +# define EVP_F_EVP_PKEY_PUBLIC_CHECK 190 +# define EVP_F_EVP_PKEY_SET1_ENGINE 187 +# define EVP_F_EVP_PKEY_SET_ALIAS_TYPE 206 +# define EVP_F_EVP_PKEY_SIGN 140 +# define EVP_F_EVP_PKEY_SIGN_INIT 141 +# define EVP_F_EVP_PKEY_VERIFY 142 +# define EVP_F_EVP_PKEY_VERIFY_INIT 143 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER 144 +# define EVP_F_EVP_PKEY_VERIFY_RECOVER_INIT 145 +# define EVP_F_EVP_SIGNFINAL 107 +# define EVP_F_EVP_VERIFYFINAL 108 +# define EVP_F_INT_CTX_NEW 157 +# define EVP_F_OK_NEW 200 +# define EVP_F_PKCS5_PBE_KEYIVGEN 117 +# define EVP_F_PKCS5_V2_PBE_KEYIVGEN 118 +# define EVP_F_PKCS5_V2_PBKDF2_KEYIVGEN 164 +# define EVP_F_PKCS5_V2_SCRYPT_KEYIVGEN 180 +# define EVP_F_PKEY_SET_TYPE 158 +# define EVP_F_RC2_MAGIC_TO_METH 109 +# define EVP_F_RC5_CTRL 125 +# define EVP_F_R_32_12_16_INIT_KEY 242 +# define EVP_F_S390X_AES_GCM_CTRL 201 +# define EVP_F_UPDATE 173 + +/* + * EVP reason codes. + */ +# define EVP_R_AES_KEY_SETUP_FAILED 143 +# define EVP_R_ARIA_KEY_SETUP_FAILED 176 +# define EVP_R_BAD_DECRYPT 100 +# define EVP_R_BAD_KEY_LENGTH 195 +# define EVP_R_BUFFER_TOO_SMALL 155 +# define EVP_R_CAMELLIA_KEY_SETUP_FAILED 157 +# define EVP_R_CIPHER_PARAMETER_ERROR 122 +# define EVP_R_COMMAND_NOT_SUPPORTED 147 +# define EVP_R_COPY_ERROR 173 +# define EVP_R_CTRL_NOT_IMPLEMENTED 132 +# define EVP_R_CTRL_OPERATION_NOT_IMPLEMENTED 133 +# define EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH 138 +# define EVP_R_DECODE_ERROR 114 +# define EVP_R_DIFFERENT_KEY_TYPES 101 +# define EVP_R_DIFFERENT_PARAMETERS 153 +# define EVP_R_ERROR_LOADING_SECTION 165 +# define EVP_R_ERROR_SETTING_FIPS_MODE 166 +# define EVP_R_EXPECTING_AN_HMAC_KEY 174 +# define EVP_R_EXPECTING_AN_RSA_KEY 127 +# define EVP_R_EXPECTING_A_DH_KEY 128 +# define EVP_R_EXPECTING_A_DSA_KEY 129 +# define EVP_R_EXPECTING_A_EC_KEY 142 +# define EVP_R_EXPECTING_A_POLY1305_KEY 164 +# define EVP_R_EXPECTING_A_SIPHASH_KEY 175 +# define EVP_R_FIPS_MODE_NOT_SUPPORTED 167 +# define EVP_R_GET_RAW_KEY_FAILED 182 +# define EVP_R_ILLEGAL_SCRYPT_PARAMETERS 171 +# define EVP_R_INITIALIZATION_ERROR 134 +# define EVP_R_INPUT_NOT_INITIALIZED 111 +# define EVP_R_INVALID_DIGEST 152 +# define EVP_R_INVALID_FIPS_MODE 168 +# define EVP_R_INVALID_IV_LENGTH 194 +# define EVP_R_INVALID_KEY 163 +# define EVP_R_INVALID_KEY_LENGTH 130 +# define EVP_R_INVALID_OPERATION 148 +# define EVP_R_KEYGEN_FAILURE 120 +# define EVP_R_KEY_SETUP_FAILED 180 +# define EVP_R_MEMORY_LIMIT_EXCEEDED 172 +# define EVP_R_MESSAGE_DIGEST_IS_NULL 159 +# define EVP_R_METHOD_NOT_SUPPORTED 144 +# define EVP_R_MISSING_PARAMETERS 103 +# define EVP_R_NOT_XOF_OR_INVALID_LENGTH 178 +# define EVP_R_NO_CIPHER_SET 131 +# define EVP_R_NO_DEFAULT_DIGEST 158 +# define EVP_R_NO_DIGEST_SET 139 +# define EVP_R_NO_KEY_SET 154 +# define EVP_R_NO_OPERATION_SET 149 +# define EVP_R_ONLY_ONESHOT_SUPPORTED 177 +# define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 +# define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 +# define EVP_R_PARTIALLY_OVERLAPPING 162 +# define EVP_R_PBKDF2_ERROR 181 +# define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 +# define EVP_R_PRIVATE_KEY_DECODE_ERROR 145 +# define EVP_R_PRIVATE_KEY_ENCODE_ERROR 146 +# define EVP_R_PUBLIC_KEY_NOT_RSA 106 +# define EVP_R_UNKNOWN_CIPHER 160 +# define EVP_R_UNKNOWN_DIGEST 161 +# define EVP_R_UNKNOWN_OPTION 169 +# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 +# define EVP_R_UNSUPPORTED_ALGORITHM 156 +# define EVP_R_UNSUPPORTED_CIPHER 107 +# define EVP_R_UNSUPPORTED_KEYLENGTH 123 +# define EVP_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION 124 +# define EVP_R_UNSUPPORTED_KEY_SIZE 108 +# define EVP_R_UNSUPPORTED_NUMBER_OF_ROUNDS 135 +# define EVP_R_UNSUPPORTED_PRF 125 +# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118 +# define EVP_R_UNSUPPORTED_SALT_TYPE 126 +# define EVP_R_WRAP_MODE_NOT_ALLOWED 170 +# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109 +# define EVP_R_XTS_DUPLICATED_KEYS 183 + +#endif diff --git a/lib/openssl/include/openssl/hmac.h b/lib/openssl/include/openssl/hmac.h new file mode 100644 index 0000000..458efc1 --- /dev/null +++ b/lib/openssl/include/openssl/hmac.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_HMAC_H +# define HEADER_HMAC_H + +# include + +# include + +# if OPENSSL_API_COMPAT < 0x10200000L +# define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +size_t HMAC_size(const HMAC_CTX *e); +HMAC_CTX *HMAC_CTX_new(void); +int HMAC_CTX_reset(HMAC_CTX *ctx); +void HMAC_CTX_free(HMAC_CTX *ctx); + +DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md)) + +/*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, + const EVP_MD *md, ENGINE *impl); +/*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, + size_t len); +/*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, + unsigned int *len); +unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, + const unsigned char *d, size_t n, unsigned char *md, + unsigned int *md_len); +__owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); + +void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); +const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/idea.h b/lib/openssl/include/openssl/idea.h new file mode 100644 index 0000000..4334f3e --- /dev/null +++ b/lib/openssl/include/openssl/idea.h @@ -0,0 +1,64 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_IDEA_H +# define HEADER_IDEA_H + +# include + +# ifndef OPENSSL_NO_IDEA +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int IDEA_INT; + +# define IDEA_ENCRYPT 1 +# define IDEA_DECRYPT 0 + +# define IDEA_BLOCK 8 +# define IDEA_KEY_LENGTH 16 + +typedef struct idea_key_st { + IDEA_INT data[9][6]; +} IDEA_KEY_SCHEDULE; + +const char *IDEA_options(void); +void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, + IDEA_KEY_SCHEDULE *ks); +void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); +void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); +void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int enc); +void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num, int enc); +void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, + int *num); +void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define idea_options IDEA_options +# define idea_ecb_encrypt IDEA_ecb_encrypt +# define idea_set_encrypt_key IDEA_set_encrypt_key +# define idea_set_decrypt_key IDEA_set_decrypt_key +# define idea_cbc_encrypt IDEA_cbc_encrypt +# define idea_cfb64_encrypt IDEA_cfb64_encrypt +# define idea_ofb64_encrypt IDEA_ofb64_encrypt +# define idea_encrypt IDEA_encrypt +# endif + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/kdf.h b/lib/openssl/include/openssl/kdf.h new file mode 100644 index 0000000..5abd4c3 --- /dev/null +++ b/lib/openssl/include/openssl/kdf.h @@ -0,0 +1,97 @@ +/* + * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDF_H +# define HEADER_KDF_H + +# include +#ifdef __cplusplus +extern "C" { +#endif + +# define EVP_PKEY_CTRL_TLS_MD (EVP_PKEY_ALG_CTRL) +# define EVP_PKEY_CTRL_TLS_SECRET (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) +# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) +# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) +# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) +# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_SCRYPT_P (EVP_PKEY_ALG_CTRL + 12) +# define EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES (EVP_PKEY_ALG_CTRL + 13) + +# define EVP_PKEY_HKDEF_MODE_EXTRACT_AND_EXPAND 0 +# define EVP_PKEY_HKDEF_MODE_EXTRACT_ONLY 1 +# define EVP_PKEY_HKDEF_MODE_EXPAND_ONLY 2 + +# define EVP_PKEY_CTX_set_tls1_prf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set1_tls1_prf_secret(pctx, sec, seclen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SECRET, seclen, (void *)(sec)) + +# define EVP_PKEY_CTX_add1_tls1_prf_seed(pctx, seed, seedlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_TLS_SEED, seedlen, (void *)(seed)) + +# define EVP_PKEY_CTX_set_hkdf_md(pctx, md) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set1_hkdf_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_SALT, saltlen, (void *)(salt)) + +# define EVP_PKEY_CTX_set1_hkdf_key(pctx, key, keylen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_KEY, keylen, (void *)(key)) + +# define EVP_PKEY_CTX_add1_hkdf_info(pctx, info, infolen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_INFO, infolen, (void *)(info)) + +# define EVP_PKEY_CTX_hkdf_mode(pctx, mode) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_HKDF_MODE, mode, NULL) + +# define EVP_PKEY_CTX_set1_pbe_pass(pctx, pass, passlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_PASS, passlen, (void *)(pass)) + +# define EVP_PKEY_CTX_set1_scrypt_salt(pctx, salt, saltlen) \ + EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_SALT, saltlen, (void *)(salt)) + +# define EVP_PKEY_CTX_set_scrypt_N(pctx, n) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_N, n) + +# define EVP_PKEY_CTX_set_scrypt_r(pctx, r) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_R, r) + +# define EVP_PKEY_CTX_set_scrypt_p(pctx, p) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_P, p) + +# define EVP_PKEY_CTX_set_scrypt_maxmem_bytes(pctx, maxmem_bytes) \ + EVP_PKEY_CTX_ctrl_uint64(pctx, -1, EVP_PKEY_OP_DERIVE, \ + EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES, maxmem_bytes) + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/kdferr.h b/lib/openssl/include/openssl/kdferr.h new file mode 100644 index 0000000..3f51bd0 --- /dev/null +++ b/lib/openssl/include/openssl/kdferr.h @@ -0,0 +1,55 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_KDFERR_H +# define HEADER_KDFERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_KDF_strings(void); + +/* + * KDF function codes. + */ +# define KDF_F_PKEY_HKDF_CTRL_STR 103 +# define KDF_F_PKEY_HKDF_DERIVE 102 +# define KDF_F_PKEY_HKDF_INIT 108 +# define KDF_F_PKEY_SCRYPT_CTRL_STR 104 +# define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 +# define KDF_F_PKEY_SCRYPT_DERIVE 109 +# define KDF_F_PKEY_SCRYPT_INIT 106 +# define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 +# define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 +# define KDF_F_PKEY_TLS1_PRF_DERIVE 101 +# define KDF_F_PKEY_TLS1_PRF_INIT 110 +# define KDF_F_TLS1_PRF_ALG 111 + +/* + * KDF reason codes. + */ +# define KDF_R_INVALID_DIGEST 100 +# define KDF_R_MISSING_ITERATION_COUNT 109 +# define KDF_R_MISSING_KEY 104 +# define KDF_R_MISSING_MESSAGE_DIGEST 105 +# define KDF_R_MISSING_PARAMETER 101 +# define KDF_R_MISSING_PASS 110 +# define KDF_R_MISSING_SALT 111 +# define KDF_R_MISSING_SECRET 107 +# define KDF_R_MISSING_SEED 106 +# define KDF_R_UNKNOWN_PARAMETER_TYPE 103 +# define KDF_R_VALUE_ERROR 108 +# define KDF_R_VALUE_MISSING 102 + +#endif diff --git a/lib/openssl/include/openssl/lhash.h b/lib/openssl/include/openssl/lhash.h new file mode 100644 index 0000000..2e42d72 --- /dev/null +++ b/lib/openssl/include/openssl/lhash.h @@ -0,0 +1,241 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Header for dynamic hash table routines Author - Eric Young + */ + +#ifndef HEADER_LHASH_H +# define HEADER_LHASH_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct lhash_node_st OPENSSL_LH_NODE; +typedef int (*OPENSSL_LH_COMPFUNC) (const void *, const void *); +typedef unsigned long (*OPENSSL_LH_HASHFUNC) (const void *); +typedef void (*OPENSSL_LH_DOALL_FUNC) (void *); +typedef void (*OPENSSL_LH_DOALL_FUNCARG) (void *, void *); +typedef struct lhash_st OPENSSL_LHASH; + +/* + * Macros for declaring and implementing type-safe wrappers for LHASH + * callbacks. This way, callbacks can be provided to LHASH structures without + * function pointer casting and the macro-defined callbacks provide + * per-variable casting before deferring to the underlying type-specific + * callbacks. NB: It is possible to place a "static" in front of both the + * DECLARE and IMPLEMENT macros if the functions are strictly internal. + */ + +/* First: "hash" functions */ +# define DECLARE_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *); +# define IMPLEMENT_LHASH_HASH_FN(name, o_type) \ + unsigned long name##_LHASH_HASH(const void *arg) { \ + const o_type *a = arg; \ + return name##_hash(a); } +# define LHASH_HASH_FN(name) name##_LHASH_HASH + +/* Second: "compare" functions */ +# define DECLARE_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *, const void *); +# define IMPLEMENT_LHASH_COMP_FN(name, o_type) \ + int name##_LHASH_COMP(const void *arg1, const void *arg2) { \ + const o_type *a = arg1; \ + const o_type *b = arg2; \ + return name##_cmp(a,b); } +# define LHASH_COMP_FN(name) name##_LHASH_COMP + +/* Fourth: "doall_arg" functions */ +# define DECLARE_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *, void *); +# define IMPLEMENT_LHASH_DOALL_ARG_FN(name, o_type, a_type) \ + void name##_LHASH_DOALL_ARG(void *arg1, void *arg2) { \ + o_type *a = arg1; \ + a_type *b = arg2; \ + name##_doall_arg(a, b); } +# define LHASH_DOALL_ARG_FN(name) name##_LHASH_DOALL_ARG + + +# define LH_LOAD_MULT 256 + +int OPENSSL_LH_error(OPENSSL_LHASH *lh); +OPENSSL_LHASH *OPENSSL_LH_new(OPENSSL_LH_HASHFUNC h, OPENSSL_LH_COMPFUNC c); +void OPENSSL_LH_free(OPENSSL_LHASH *lh); +void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data); +void *OPENSSL_LH_delete(OPENSSL_LHASH *lh, const void *data); +void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data); +void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func); +void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg); +unsigned long OPENSSL_LH_strhash(const char *c); +unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh); +unsigned long OPENSSL_LH_get_down_load(const OPENSSL_LHASH *lh); +void OPENSSL_LH_set_down_load(OPENSSL_LHASH *lh, unsigned long down_load); + +# ifndef OPENSSL_NO_STDIO +void OPENSSL_LH_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_stats(const OPENSSL_LHASH *lh, FILE *fp); +void OPENSSL_LH_node_usage_stats(const OPENSSL_LHASH *lh, FILE *fp); +# endif +void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_stats_bio(const OPENSSL_LHASH *lh, BIO *out); +void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _LHASH OPENSSL_LHASH +# define LHASH_NODE OPENSSL_LH_NODE +# define lh_error OPENSSL_LH_error +# define lh_new OPENSSL_LH_new +# define lh_free OPENSSL_LH_free +# define lh_insert OPENSSL_LH_insert +# define lh_delete OPENSSL_LH_delete +# define lh_retrieve OPENSSL_LH_retrieve +# define lh_doall OPENSSL_LH_doall +# define lh_doall_arg OPENSSL_LH_doall_arg +# define lh_strhash OPENSSL_LH_strhash +# define lh_num_items OPENSSL_LH_num_items +# ifndef OPENSSL_NO_STDIO +# define lh_stats OPENSSL_LH_stats +# define lh_node_stats OPENSSL_LH_node_stats +# define lh_node_usage_stats OPENSSL_LH_node_usage_stats +# endif +# define lh_stats_bio OPENSSL_LH_stats_bio +# define lh_node_stats_bio OPENSSL_LH_node_stats_bio +# define lh_node_usage_stats_bio OPENSSL_LH_node_usage_stats_bio +# endif + +/* Type checking... */ + +# define LHASH_OF(type) struct lhash_st_##type + +# define DEFINE_LHASH_OF(type) \ + LHASH_OF(type) { union lh_##type##_dummy { void* d1; unsigned long d2; int d3; } dummy; }; \ + static ossl_unused ossl_inline LHASH_OF(type) *lh_##type##_new(unsigned long (*hfn)(const type *), \ + int (*cfn)(const type *, const type *)) \ + { \ + return (LHASH_OF(type) *) \ + OPENSSL_LH_new((OPENSSL_LH_HASHFUNC)hfn, (OPENSSL_LH_COMPFUNC)cfn); \ + } \ + static ossl_unused ossl_inline void lh_##type##_free(LHASH_OF(type) *lh) \ + { \ + OPENSSL_LH_free((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_insert(LHASH_OF(type) *lh, type *d) \ + { \ + return (type *)OPENSSL_LH_insert((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_delete(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_delete((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline type *lh_##type##_retrieve(LHASH_OF(type) *lh, const type *d) \ + { \ + return (type *)OPENSSL_LH_retrieve((OPENSSL_LHASH *)lh, d); \ + } \ + static ossl_unused ossl_inline int lh_##type##_error(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_error((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline unsigned long lh_##type##_num_items(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_num_items((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void lh_##type##_node_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void lh_##type##_node_usage_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_node_usage_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline void lh_##type##_stats_bio(const LHASH_OF(type) *lh, BIO *out) \ + { \ + OPENSSL_LH_stats_bio((const OPENSSL_LHASH *)lh, out); \ + } \ + static ossl_unused ossl_inline unsigned long lh_##type##_get_down_load(LHASH_OF(type) *lh) \ + { \ + return OPENSSL_LH_get_down_load((OPENSSL_LHASH *)lh); \ + } \ + static ossl_unused ossl_inline void lh_##type##_set_down_load(LHASH_OF(type) *lh, unsigned long dl) \ + { \ + OPENSSL_LH_set_down_load((OPENSSL_LHASH *)lh, dl); \ + } \ + static ossl_unused ossl_inline void lh_##type##_doall(LHASH_OF(type) *lh, \ + void (*doall)(type *)) \ + { \ + OPENSSL_LH_doall((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNC)doall); \ + } \ + LHASH_OF(type) + +#define IMPLEMENT_LHASH_DOALL_ARG_CONST(type, argtype) \ + int_implement_lhash_doall(type, argtype, const type) + +#define IMPLEMENT_LHASH_DOALL_ARG(type, argtype) \ + int_implement_lhash_doall(type, argtype, type) + +#define int_implement_lhash_doall(type, argtype, cbargtype) \ + static ossl_unused ossl_inline void \ + lh_##type##_doall_##argtype(LHASH_OF(type) *lh, \ + void (*fn)(cbargtype *, argtype *), \ + argtype *arg) \ + { \ + OPENSSL_LH_doall_arg((OPENSSL_LHASH *)lh, (OPENSSL_LH_DOALL_FUNCARG)fn, (void *)arg); \ + } \ + LHASH_OF(type) + +DEFINE_LHASH_OF(OPENSSL_STRING); +# ifdef _MSC_VER +/* + * push and pop this warning: + * warning C4090: 'function': different 'const' qualifiers + */ +# pragma warning (push) +# pragma warning (disable: 4090) +# endif + +DEFINE_LHASH_OF(OPENSSL_CSTRING); + +# ifdef _MSC_VER +# pragma warning (pop) +# endif + +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_LH_new +# pragma weak OPENSSL_LH_free +# pragma weak OPENSSL_LH_insert +# pragma weak OPENSSL_LH_delete +# pragma weak OPENSSL_LH_retrieve +# pragma weak OPENSSL_LH_error +# pragma weak OPENSSL_LH_num_items +# pragma weak OPENSSL_LH_node_stats_bio +# pragma weak OPENSSL_LH_node_usage_stats_bio +# pragma weak OPENSSL_LH_stats_bio +# pragma weak OPENSSL_LH_get_down_load +# pragma weak OPENSSL_LH_set_down_load +# pragma weak OPENSSL_LH_doall +# pragma weak OPENSSL_LH_doall_arg +# endif /* __SUNPRO_C */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/md2.h b/lib/openssl/include/openssl/md2.h new file mode 100644 index 0000000..7faf8e3 --- /dev/null +++ b/lib/openssl/include/openssl/md2.h @@ -0,0 +1,44 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD2_H +# define HEADER_MD2_H + +# include + +# ifndef OPENSSL_NO_MD2 +# include +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned char MD2_INT; + +# define MD2_DIGEST_LENGTH 16 +# define MD2_BLOCK 16 + +typedef struct MD2state_st { + unsigned int num; + unsigned char data[MD2_BLOCK]; + MD2_INT cksm[MD2_BLOCK]; + MD2_INT state[MD2_BLOCK]; +} MD2_CTX; + +const char *MD2_options(void); +int MD2_Init(MD2_CTX *c); +int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); +int MD2_Final(unsigned char *md, MD2_CTX *c); +unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/md4.h b/lib/openssl/include/openssl/md4.h new file mode 100644 index 0000000..940e29d --- /dev/null +++ b/lib/openssl/include/openssl/md4.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD4_H +# define HEADER_MD4_H + +# include + +# ifndef OPENSSL_NO_MD4 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD4_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD4_LONG unsigned int + +# define MD4_CBLOCK 64 +# define MD4_LBLOCK (MD4_CBLOCK/4) +# define MD4_DIGEST_LENGTH 16 + +typedef struct MD4state_st { + MD4_LONG A, B, C, D; + MD4_LONG Nl, Nh; + MD4_LONG data[MD4_LBLOCK]; + unsigned int num; +} MD4_CTX; + +int MD4_Init(MD4_CTX *c); +int MD4_Update(MD4_CTX *c, const void *data, size_t len); +int MD4_Final(unsigned char *md, MD4_CTX *c); +unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); +void MD4_Transform(MD4_CTX *c, const unsigned char *b); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/md5.h b/lib/openssl/include/openssl/md5.h new file mode 100644 index 0000000..2deb772 --- /dev/null +++ b/lib/openssl/include/openssl/md5.h @@ -0,0 +1,50 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MD5_H +# define HEADER_MD5_H + +# include + +# ifndef OPENSSL_NO_MD5 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! MD5_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define MD5_LONG unsigned int + +# define MD5_CBLOCK 64 +# define MD5_LBLOCK (MD5_CBLOCK/4) +# define MD5_DIGEST_LENGTH 16 + +typedef struct MD5state_st { + MD5_LONG A, B, C, D; + MD5_LONG Nl, Nh; + MD5_LONG data[MD5_LBLOCK]; + unsigned int num; +} MD5_CTX; + +int MD5_Init(MD5_CTX *c); +int MD5_Update(MD5_CTX *c, const void *data, size_t len); +int MD5_Final(unsigned char *md, MD5_CTX *c); +unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); +void MD5_Transform(MD5_CTX *c, const unsigned char *b); +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/mdc2.h b/lib/openssl/include/openssl/mdc2.h new file mode 100644 index 0000000..aabd2bf --- /dev/null +++ b/lib/openssl/include/openssl/mdc2.h @@ -0,0 +1,42 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MDC2_H +# define HEADER_MDC2_H + +# include + +#ifndef OPENSSL_NO_MDC2 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define MDC2_BLOCK 8 +# define MDC2_DIGEST_LENGTH 16 + +typedef struct mdc2_ctx_st { + unsigned int num; + unsigned char data[MDC2_BLOCK]; + DES_cblock h, hh; + int pad_type; /* either 1 or 2, default 1 */ +} MDC2_CTX; + +int MDC2_Init(MDC2_CTX *c); +int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); +int MDC2_Final(unsigned char *md, MDC2_CTX *c); +unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/modes.h b/lib/openssl/include/openssl/modes.h new file mode 100644 index 0000000..d544f98 --- /dev/null +++ b/lib/openssl/include/openssl/modes.h @@ -0,0 +1,208 @@ +/* + * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_MODES_H +# define HEADER_MODES_H + +# include + +# ifdef __cplusplus +extern "C" { +# endif +typedef void (*block128_f) (const unsigned char in[16], + unsigned char out[16], const void *key); + +typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int enc); + +typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16]); + +typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + const unsigned char ivec[16], + unsigned char cmac[16]); + +void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); +void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], block128_f block); + +void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], unsigned int *num, + block128_f block); + +void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], + unsigned char ecount_buf[16], + unsigned int *num, ctr128_f ctr); + +void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + block128_f block); + +void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, + size_t length, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); +void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, + size_t bits, const void *key, + unsigned char ivec[16], int *num, + int enc, block128_f block); + +size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, unsigned char ivec[16], + block128_f block); +size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); +size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, + unsigned char *out, size_t len, + const void *key, + unsigned char ivec[16], + block128_f block); +size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, + size_t len, const void *key, + unsigned char ivec[16], cbc128_f cbc); + +typedef struct gcm128_context GCM128_CONTEXT; + +GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); +void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); +void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, + size_t len); +int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len); +int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, + const unsigned char *in, unsigned char *out, + size_t len, ctr128_f stream); +int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); + +typedef struct ccm128_context CCM128_CONTEXT; + +void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, + unsigned int M, unsigned int L, void *key, + block128_f block); +int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, + size_t nlen, size_t mlen); +void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, + size_t alen); +int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len); +int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, + unsigned char *out, size_t len, + ccm128_f stream); +size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); + +typedef struct xts128_context XTS128_CONTEXT; + +int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, + const unsigned char iv[16], + const unsigned char *inp, unsigned char *out, + size_t len, int enc); + +size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); + +size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, + unsigned char *out, + const unsigned char *in, size_t inlen, + block128_f block); +size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); +size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, + unsigned char *out, const unsigned char *in, + size_t inlen, block128_f block); + +# ifndef OPENSSL_NO_OCB +typedef struct ocb128_context OCB128_CONTEXT; + +typedef void (*ocb128_f) (const unsigned char *in, unsigned char *out, + size_t blocks, const void *key, + size_t start_block_num, + unsigned char offset_i[16], + const unsigned char L_[][16], + unsigned char checksum[16]); + +OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, + block128_f encrypt, block128_f decrypt, + ocb128_f stream); +int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, + void *keyenc, void *keydec); +int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, + size_t len, size_t taglen); +int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, + size_t len); +int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, + unsigned char *out, size_t len); +int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, + size_t len); +int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); +void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); +# endif /* OPENSSL_NO_OCB */ + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/lib/openssl/include/openssl/obj_mac.h b/lib/openssl/include/openssl/obj_mac.h new file mode 100644 index 0000000..53516a0 --- /dev/null +++ b/lib/openssl/include/openssl/obj_mac.h @@ -0,0 +1,5198 @@ +/* + * WARNING: do not edit! + * Generated by crypto/objects/objects.pl + * + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define SN_undef "UNDEF" +#define LN_undef "undefined" +#define NID_undef 0 +#define OBJ_undef 0L + +#define SN_itu_t "ITU-T" +#define LN_itu_t "itu-t" +#define NID_itu_t 645 +#define OBJ_itu_t 0L + +#define NID_ccitt 404 +#define OBJ_ccitt OBJ_itu_t + +#define SN_iso "ISO" +#define LN_iso "iso" +#define NID_iso 181 +#define OBJ_iso 1L + +#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" +#define LN_joint_iso_itu_t "joint-iso-itu-t" +#define NID_joint_iso_itu_t 646 +#define OBJ_joint_iso_itu_t 2L + +#define NID_joint_iso_ccitt 393 +#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t + +#define SN_member_body "member-body" +#define LN_member_body "ISO Member Body" +#define NID_member_body 182 +#define OBJ_member_body OBJ_iso,2L + +#define SN_identified_organization "identified-organization" +#define NID_identified_organization 676 +#define OBJ_identified_organization OBJ_iso,3L + +#define SN_hmac_md5 "HMAC-MD5" +#define LN_hmac_md5 "hmac-md5" +#define NID_hmac_md5 780 +#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L + +#define SN_hmac_sha1 "HMAC-SHA1" +#define LN_hmac_sha1 "hmac-sha1" +#define NID_hmac_sha1 781 +#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L + +#define SN_x509ExtAdmission "x509ExtAdmission" +#define LN_x509ExtAdmission "Professional Information or basis for Admission" +#define NID_x509ExtAdmission 1093 +#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L + +#define SN_certicom_arc "certicom-arc" +#define NID_certicom_arc 677 +#define OBJ_certicom_arc OBJ_identified_organization,132L + +#define SN_ieee "ieee" +#define NID_ieee 1170 +#define OBJ_ieee OBJ_identified_organization,111L + +#define SN_ieee_siswg "ieee-siswg" +#define LN_ieee_siswg "IEEE Security in Storage Working Group" +#define NID_ieee_siswg 1171 +#define OBJ_ieee_siswg OBJ_ieee,2L,1619L + +#define SN_international_organizations "international-organizations" +#define LN_international_organizations "International Organizations" +#define NID_international_organizations 647 +#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L + +#define SN_wap "wap" +#define NID_wap 678 +#define OBJ_wap OBJ_international_organizations,43L + +#define SN_wap_wsg "wap-wsg" +#define NID_wap_wsg 679 +#define OBJ_wap_wsg OBJ_wap,1L + +#define SN_selected_attribute_types "selected-attribute-types" +#define LN_selected_attribute_types "Selected Attribute Types" +#define NID_selected_attribute_types 394 +#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L + +#define SN_clearance "clearance" +#define NID_clearance 395 +#define OBJ_clearance OBJ_selected_attribute_types,55L + +#define SN_ISO_US "ISO-US" +#define LN_ISO_US "ISO US Member Body" +#define NID_ISO_US 183 +#define OBJ_ISO_US OBJ_member_body,840L + +#define SN_X9_57 "X9-57" +#define LN_X9_57 "X9.57" +#define NID_X9_57 184 +#define OBJ_X9_57 OBJ_ISO_US,10040L + +#define SN_X9cm "X9cm" +#define LN_X9cm "X9.57 CM ?" +#define NID_X9cm 185 +#define OBJ_X9cm OBJ_X9_57,4L + +#define SN_ISO_CN "ISO-CN" +#define LN_ISO_CN "ISO CN Member Body" +#define NID_ISO_CN 1140 +#define OBJ_ISO_CN OBJ_member_body,156L + +#define SN_oscca "oscca" +#define NID_oscca 1141 +#define OBJ_oscca OBJ_ISO_CN,10197L + +#define SN_sm_scheme "sm-scheme" +#define NID_sm_scheme 1142 +#define OBJ_sm_scheme OBJ_oscca,1L + +#define SN_dsa "DSA" +#define LN_dsa "dsaEncryption" +#define NID_dsa 116 +#define OBJ_dsa OBJ_X9cm,1L + +#define SN_dsaWithSHA1 "DSA-SHA1" +#define LN_dsaWithSHA1 "dsaWithSHA1" +#define NID_dsaWithSHA1 113 +#define OBJ_dsaWithSHA1 OBJ_X9cm,3L + +#define SN_ansi_X9_62 "ansi-X9-62" +#define LN_ansi_X9_62 "ANSI X9.62" +#define NID_ansi_X9_62 405 +#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L + +#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L + +#define SN_X9_62_prime_field "prime-field" +#define NID_X9_62_prime_field 406 +#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L + +#define SN_X9_62_characteristic_two_field "characteristic-two-field" +#define NID_X9_62_characteristic_two_field 407 +#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L + +#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" +#define NID_X9_62_id_characteristic_two_basis 680 +#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L + +#define SN_X9_62_onBasis "onBasis" +#define NID_X9_62_onBasis 681 +#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L + +#define SN_X9_62_tpBasis "tpBasis" +#define NID_X9_62_tpBasis 682 +#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L + +#define SN_X9_62_ppBasis "ppBasis" +#define NID_X9_62_ppBasis 683 +#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L + +#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L + +#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" +#define NID_X9_62_id_ecPublicKey 408 +#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L + +#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L + +#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L + +#define SN_X9_62_c2pnb163v1 "c2pnb163v1" +#define NID_X9_62_c2pnb163v1 684 +#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L + +#define SN_X9_62_c2pnb163v2 "c2pnb163v2" +#define NID_X9_62_c2pnb163v2 685 +#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L + +#define SN_X9_62_c2pnb163v3 "c2pnb163v3" +#define NID_X9_62_c2pnb163v3 686 +#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L + +#define SN_X9_62_c2pnb176v1 "c2pnb176v1" +#define NID_X9_62_c2pnb176v1 687 +#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L + +#define SN_X9_62_c2tnb191v1 "c2tnb191v1" +#define NID_X9_62_c2tnb191v1 688 +#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L + +#define SN_X9_62_c2tnb191v2 "c2tnb191v2" +#define NID_X9_62_c2tnb191v2 689 +#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L + +#define SN_X9_62_c2tnb191v3 "c2tnb191v3" +#define NID_X9_62_c2tnb191v3 690 +#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L + +#define SN_X9_62_c2onb191v4 "c2onb191v4" +#define NID_X9_62_c2onb191v4 691 +#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L + +#define SN_X9_62_c2onb191v5 "c2onb191v5" +#define NID_X9_62_c2onb191v5 692 +#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L + +#define SN_X9_62_c2pnb208w1 "c2pnb208w1" +#define NID_X9_62_c2pnb208w1 693 +#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L + +#define SN_X9_62_c2tnb239v1 "c2tnb239v1" +#define NID_X9_62_c2tnb239v1 694 +#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L + +#define SN_X9_62_c2tnb239v2 "c2tnb239v2" +#define NID_X9_62_c2tnb239v2 695 +#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L + +#define SN_X9_62_c2tnb239v3 "c2tnb239v3" +#define NID_X9_62_c2tnb239v3 696 +#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L + +#define SN_X9_62_c2onb239v4 "c2onb239v4" +#define NID_X9_62_c2onb239v4 697 +#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L + +#define SN_X9_62_c2onb239v5 "c2onb239v5" +#define NID_X9_62_c2onb239v5 698 +#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L + +#define SN_X9_62_c2pnb272w1 "c2pnb272w1" +#define NID_X9_62_c2pnb272w1 699 +#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L + +#define SN_X9_62_c2pnb304w1 "c2pnb304w1" +#define NID_X9_62_c2pnb304w1 700 +#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L + +#define SN_X9_62_c2tnb359v1 "c2tnb359v1" +#define NID_X9_62_c2tnb359v1 701 +#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L + +#define SN_X9_62_c2pnb368w1 "c2pnb368w1" +#define NID_X9_62_c2pnb368w1 702 +#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L + +#define SN_X9_62_c2tnb431r1 "c2tnb431r1" +#define NID_X9_62_c2tnb431r1 703 +#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L + +#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L + +#define SN_X9_62_prime192v1 "prime192v1" +#define NID_X9_62_prime192v1 409 +#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L + +#define SN_X9_62_prime192v2 "prime192v2" +#define NID_X9_62_prime192v2 410 +#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L + +#define SN_X9_62_prime192v3 "prime192v3" +#define NID_X9_62_prime192v3 411 +#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L + +#define SN_X9_62_prime239v1 "prime239v1" +#define NID_X9_62_prime239v1 412 +#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L + +#define SN_X9_62_prime239v2 "prime239v2" +#define NID_X9_62_prime239v2 413 +#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L + +#define SN_X9_62_prime239v3 "prime239v3" +#define NID_X9_62_prime239v3 414 +#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L + +#define SN_X9_62_prime256v1 "prime256v1" +#define NID_X9_62_prime256v1 415 +#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L + +#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L + +#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" +#define NID_ecdsa_with_SHA1 416 +#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L + +#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" +#define NID_ecdsa_with_Recommended 791 +#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L + +#define SN_ecdsa_with_Specified "ecdsa-with-Specified" +#define NID_ecdsa_with_Specified 792 +#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L + +#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" +#define NID_ecdsa_with_SHA224 793 +#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L + +#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" +#define NID_ecdsa_with_SHA256 794 +#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L + +#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" +#define NID_ecdsa_with_SHA384 795 +#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L + +#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" +#define NID_ecdsa_with_SHA512 796 +#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L + +#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L + +#define SN_secp112r1 "secp112r1" +#define NID_secp112r1 704 +#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L + +#define SN_secp112r2 "secp112r2" +#define NID_secp112r2 705 +#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L + +#define SN_secp128r1 "secp128r1" +#define NID_secp128r1 706 +#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L + +#define SN_secp128r2 "secp128r2" +#define NID_secp128r2 707 +#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L + +#define SN_secp160k1 "secp160k1" +#define NID_secp160k1 708 +#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L + +#define SN_secp160r1 "secp160r1" +#define NID_secp160r1 709 +#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L + +#define SN_secp160r2 "secp160r2" +#define NID_secp160r2 710 +#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L + +#define SN_secp192k1 "secp192k1" +#define NID_secp192k1 711 +#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L + +#define SN_secp224k1 "secp224k1" +#define NID_secp224k1 712 +#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L + +#define SN_secp224r1 "secp224r1" +#define NID_secp224r1 713 +#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L + +#define SN_secp256k1 "secp256k1" +#define NID_secp256k1 714 +#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L + +#define SN_secp384r1 "secp384r1" +#define NID_secp384r1 715 +#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L + +#define SN_secp521r1 "secp521r1" +#define NID_secp521r1 716 +#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L + +#define SN_sect113r1 "sect113r1" +#define NID_sect113r1 717 +#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L + +#define SN_sect113r2 "sect113r2" +#define NID_sect113r2 718 +#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L + +#define SN_sect131r1 "sect131r1" +#define NID_sect131r1 719 +#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L + +#define SN_sect131r2 "sect131r2" +#define NID_sect131r2 720 +#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L + +#define SN_sect163k1 "sect163k1" +#define NID_sect163k1 721 +#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L + +#define SN_sect163r1 "sect163r1" +#define NID_sect163r1 722 +#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L + +#define SN_sect163r2 "sect163r2" +#define NID_sect163r2 723 +#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L + +#define SN_sect193r1 "sect193r1" +#define NID_sect193r1 724 +#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L + +#define SN_sect193r2 "sect193r2" +#define NID_sect193r2 725 +#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L + +#define SN_sect233k1 "sect233k1" +#define NID_sect233k1 726 +#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L + +#define SN_sect233r1 "sect233r1" +#define NID_sect233r1 727 +#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L + +#define SN_sect239k1 "sect239k1" +#define NID_sect239k1 728 +#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L + +#define SN_sect283k1 "sect283k1" +#define NID_sect283k1 729 +#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L + +#define SN_sect283r1 "sect283r1" +#define NID_sect283r1 730 +#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L + +#define SN_sect409k1 "sect409k1" +#define NID_sect409k1 731 +#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L + +#define SN_sect409r1 "sect409r1" +#define NID_sect409r1 732 +#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L + +#define SN_sect571k1 "sect571k1" +#define NID_sect571k1 733 +#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L + +#define SN_sect571r1 "sect571r1" +#define NID_sect571r1 734 +#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L + +#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L + +#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" +#define NID_wap_wsg_idm_ecid_wtls1 735 +#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L + +#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" +#define NID_wap_wsg_idm_ecid_wtls3 736 +#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L + +#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" +#define NID_wap_wsg_idm_ecid_wtls4 737 +#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L + +#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" +#define NID_wap_wsg_idm_ecid_wtls5 738 +#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L + +#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" +#define NID_wap_wsg_idm_ecid_wtls6 739 +#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L + +#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" +#define NID_wap_wsg_idm_ecid_wtls7 740 +#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L + +#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" +#define NID_wap_wsg_idm_ecid_wtls8 741 +#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L + +#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" +#define NID_wap_wsg_idm_ecid_wtls9 742 +#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L + +#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" +#define NID_wap_wsg_idm_ecid_wtls10 743 +#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L + +#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" +#define NID_wap_wsg_idm_ecid_wtls11 744 +#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L + +#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" +#define NID_wap_wsg_idm_ecid_wtls12 745 +#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L + +#define SN_cast5_cbc "CAST5-CBC" +#define LN_cast5_cbc "cast5-cbc" +#define NID_cast5_cbc 108 +#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L + +#define SN_cast5_ecb "CAST5-ECB" +#define LN_cast5_ecb "cast5-ecb" +#define NID_cast5_ecb 109 + +#define SN_cast5_cfb64 "CAST5-CFB" +#define LN_cast5_cfb64 "cast5-cfb" +#define NID_cast5_cfb64 110 + +#define SN_cast5_ofb64 "CAST5-OFB" +#define LN_cast5_ofb64 "cast5-ofb" +#define NID_cast5_ofb64 111 + +#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" +#define NID_pbeWithMD5AndCast5_CBC 112 +#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L + +#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" +#define LN_id_PasswordBasedMAC "password based MAC" +#define NID_id_PasswordBasedMAC 782 +#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L + +#define SN_id_DHBasedMac "id-DHBasedMac" +#define LN_id_DHBasedMac "Diffie-Hellman based MAC" +#define NID_id_DHBasedMac 783 +#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L + +#define SN_rsadsi "rsadsi" +#define LN_rsadsi "RSA Data Security, Inc." +#define NID_rsadsi 1 +#define OBJ_rsadsi OBJ_ISO_US,113549L + +#define SN_pkcs "pkcs" +#define LN_pkcs "RSA Data Security, Inc. PKCS" +#define NID_pkcs 2 +#define OBJ_pkcs OBJ_rsadsi,1L + +#define SN_pkcs1 "pkcs1" +#define NID_pkcs1 186 +#define OBJ_pkcs1 OBJ_pkcs,1L + +#define LN_rsaEncryption "rsaEncryption" +#define NID_rsaEncryption 6 +#define OBJ_rsaEncryption OBJ_pkcs1,1L + +#define SN_md2WithRSAEncryption "RSA-MD2" +#define LN_md2WithRSAEncryption "md2WithRSAEncryption" +#define NID_md2WithRSAEncryption 7 +#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L + +#define SN_md4WithRSAEncryption "RSA-MD4" +#define LN_md4WithRSAEncryption "md4WithRSAEncryption" +#define NID_md4WithRSAEncryption 396 +#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L + +#define SN_md5WithRSAEncryption "RSA-MD5" +#define LN_md5WithRSAEncryption "md5WithRSAEncryption" +#define NID_md5WithRSAEncryption 8 +#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L + +#define SN_sha1WithRSAEncryption "RSA-SHA1" +#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" +#define NID_sha1WithRSAEncryption 65 +#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L + +#define SN_rsaesOaep "RSAES-OAEP" +#define LN_rsaesOaep "rsaesOaep" +#define NID_rsaesOaep 919 +#define OBJ_rsaesOaep OBJ_pkcs1,7L + +#define SN_mgf1 "MGF1" +#define LN_mgf1 "mgf1" +#define NID_mgf1 911 +#define OBJ_mgf1 OBJ_pkcs1,8L + +#define SN_pSpecified "PSPECIFIED" +#define LN_pSpecified "pSpecified" +#define NID_pSpecified 935 +#define OBJ_pSpecified OBJ_pkcs1,9L + +#define SN_rsassaPss "RSASSA-PSS" +#define LN_rsassaPss "rsassaPss" +#define NID_rsassaPss 912 +#define OBJ_rsassaPss OBJ_pkcs1,10L + +#define SN_sha256WithRSAEncryption "RSA-SHA256" +#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" +#define NID_sha256WithRSAEncryption 668 +#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L + +#define SN_sha384WithRSAEncryption "RSA-SHA384" +#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" +#define NID_sha384WithRSAEncryption 669 +#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L + +#define SN_sha512WithRSAEncryption "RSA-SHA512" +#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" +#define NID_sha512WithRSAEncryption 670 +#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L + +#define SN_sha224WithRSAEncryption "RSA-SHA224" +#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" +#define NID_sha224WithRSAEncryption 671 +#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L + +#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" +#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" +#define NID_sha512_224WithRSAEncryption 1145 +#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L + +#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" +#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" +#define NID_sha512_256WithRSAEncryption 1146 +#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L + +#define SN_pkcs3 "pkcs3" +#define NID_pkcs3 27 +#define OBJ_pkcs3 OBJ_pkcs,3L + +#define LN_dhKeyAgreement "dhKeyAgreement" +#define NID_dhKeyAgreement 28 +#define OBJ_dhKeyAgreement OBJ_pkcs3,1L + +#define SN_pkcs5 "pkcs5" +#define NID_pkcs5 187 +#define OBJ_pkcs5 OBJ_pkcs,5L + +#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" +#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" +#define NID_pbeWithMD2AndDES_CBC 9 +#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L + +#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" +#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" +#define NID_pbeWithMD5AndDES_CBC 10 +#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L + +#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" +#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" +#define NID_pbeWithMD2AndRC2_CBC 168 +#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L + +#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" +#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" +#define NID_pbeWithMD5AndRC2_CBC 169 +#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L + +#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" +#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" +#define NID_pbeWithSHA1AndDES_CBC 170 +#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L + +#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" +#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" +#define NID_pbeWithSHA1AndRC2_CBC 68 +#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L + +#define LN_id_pbkdf2 "PBKDF2" +#define NID_id_pbkdf2 69 +#define OBJ_id_pbkdf2 OBJ_pkcs5,12L + +#define LN_pbes2 "PBES2" +#define NID_pbes2 161 +#define OBJ_pbes2 OBJ_pkcs5,13L + +#define LN_pbmac1 "PBMAC1" +#define NID_pbmac1 162 +#define OBJ_pbmac1 OBJ_pkcs5,14L + +#define SN_pkcs7 "pkcs7" +#define NID_pkcs7 20 +#define OBJ_pkcs7 OBJ_pkcs,7L + +#define LN_pkcs7_data "pkcs7-data" +#define NID_pkcs7_data 21 +#define OBJ_pkcs7_data OBJ_pkcs7,1L + +#define LN_pkcs7_signed "pkcs7-signedData" +#define NID_pkcs7_signed 22 +#define OBJ_pkcs7_signed OBJ_pkcs7,2L + +#define LN_pkcs7_enveloped "pkcs7-envelopedData" +#define NID_pkcs7_enveloped 23 +#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L + +#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" +#define NID_pkcs7_signedAndEnveloped 24 +#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L + +#define LN_pkcs7_digest "pkcs7-digestData" +#define NID_pkcs7_digest 25 +#define OBJ_pkcs7_digest OBJ_pkcs7,5L + +#define LN_pkcs7_encrypted "pkcs7-encryptedData" +#define NID_pkcs7_encrypted 26 +#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L + +#define SN_pkcs9 "pkcs9" +#define NID_pkcs9 47 +#define OBJ_pkcs9 OBJ_pkcs,9L + +#define LN_pkcs9_emailAddress "emailAddress" +#define NID_pkcs9_emailAddress 48 +#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L + +#define LN_pkcs9_unstructuredName "unstructuredName" +#define NID_pkcs9_unstructuredName 49 +#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L + +#define LN_pkcs9_contentType "contentType" +#define NID_pkcs9_contentType 50 +#define OBJ_pkcs9_contentType OBJ_pkcs9,3L + +#define LN_pkcs9_messageDigest "messageDigest" +#define NID_pkcs9_messageDigest 51 +#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L + +#define LN_pkcs9_signingTime "signingTime" +#define NID_pkcs9_signingTime 52 +#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L + +#define LN_pkcs9_countersignature "countersignature" +#define NID_pkcs9_countersignature 53 +#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L + +#define LN_pkcs9_challengePassword "challengePassword" +#define NID_pkcs9_challengePassword 54 +#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L + +#define LN_pkcs9_unstructuredAddress "unstructuredAddress" +#define NID_pkcs9_unstructuredAddress 55 +#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L + +#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" +#define NID_pkcs9_extCertAttributes 56 +#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L + +#define SN_ext_req "extReq" +#define LN_ext_req "Extension Request" +#define NID_ext_req 172 +#define OBJ_ext_req OBJ_pkcs9,14L + +#define SN_SMIMECapabilities "SMIME-CAPS" +#define LN_SMIMECapabilities "S/MIME Capabilities" +#define NID_SMIMECapabilities 167 +#define OBJ_SMIMECapabilities OBJ_pkcs9,15L + +#define SN_SMIME "SMIME" +#define LN_SMIME "S/MIME" +#define NID_SMIME 188 +#define OBJ_SMIME OBJ_pkcs9,16L + +#define SN_id_smime_mod "id-smime-mod" +#define NID_id_smime_mod 189 +#define OBJ_id_smime_mod OBJ_SMIME,0L + +#define SN_id_smime_ct "id-smime-ct" +#define NID_id_smime_ct 190 +#define OBJ_id_smime_ct OBJ_SMIME,1L + +#define SN_id_smime_aa "id-smime-aa" +#define NID_id_smime_aa 191 +#define OBJ_id_smime_aa OBJ_SMIME,2L + +#define SN_id_smime_alg "id-smime-alg" +#define NID_id_smime_alg 192 +#define OBJ_id_smime_alg OBJ_SMIME,3L + +#define SN_id_smime_cd "id-smime-cd" +#define NID_id_smime_cd 193 +#define OBJ_id_smime_cd OBJ_SMIME,4L + +#define SN_id_smime_spq "id-smime-spq" +#define NID_id_smime_spq 194 +#define OBJ_id_smime_spq OBJ_SMIME,5L + +#define SN_id_smime_cti "id-smime-cti" +#define NID_id_smime_cti 195 +#define OBJ_id_smime_cti OBJ_SMIME,6L + +#define SN_id_smime_mod_cms "id-smime-mod-cms" +#define NID_id_smime_mod_cms 196 +#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L + +#define SN_id_smime_mod_ess "id-smime-mod-ess" +#define NID_id_smime_mod_ess 197 +#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L + +#define SN_id_smime_mod_oid "id-smime-mod-oid" +#define NID_id_smime_mod_oid 198 +#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L + +#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" +#define NID_id_smime_mod_msg_v3 199 +#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L + +#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" +#define NID_id_smime_mod_ets_eSignature_88 200 +#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L + +#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" +#define NID_id_smime_mod_ets_eSignature_97 201 +#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L + +#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" +#define NID_id_smime_mod_ets_eSigPolicy_88 202 +#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L + +#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" +#define NID_id_smime_mod_ets_eSigPolicy_97 203 +#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L + +#define SN_id_smime_ct_receipt "id-smime-ct-receipt" +#define NID_id_smime_ct_receipt 204 +#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L + +#define SN_id_smime_ct_authData "id-smime-ct-authData" +#define NID_id_smime_ct_authData 205 +#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L + +#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" +#define NID_id_smime_ct_publishCert 206 +#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L + +#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" +#define NID_id_smime_ct_TSTInfo 207 +#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L + +#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" +#define NID_id_smime_ct_TDTInfo 208 +#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L + +#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" +#define NID_id_smime_ct_contentInfo 209 +#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L + +#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" +#define NID_id_smime_ct_DVCSRequestData 210 +#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L + +#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" +#define NID_id_smime_ct_DVCSResponseData 211 +#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L + +#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" +#define NID_id_smime_ct_compressedData 786 +#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L + +#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" +#define NID_id_smime_ct_contentCollection 1058 +#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L + +#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" +#define NID_id_smime_ct_authEnvelopedData 1059 +#define OBJ_id_smime_ct_authEnvelopedData OBJ_id_smime_ct,23L + +#define SN_id_ct_asciiTextWithCRLF "id-ct-asciiTextWithCRLF" +#define NID_id_ct_asciiTextWithCRLF 787 +#define OBJ_id_ct_asciiTextWithCRLF OBJ_id_smime_ct,27L + +#define SN_id_ct_xml "id-ct-xml" +#define NID_id_ct_xml 1060 +#define OBJ_id_ct_xml OBJ_id_smime_ct,28L + +#define SN_id_smime_aa_receiptRequest "id-smime-aa-receiptRequest" +#define NID_id_smime_aa_receiptRequest 212 +#define OBJ_id_smime_aa_receiptRequest OBJ_id_smime_aa,1L + +#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" +#define NID_id_smime_aa_securityLabel 213 +#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L + +#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" +#define NID_id_smime_aa_mlExpandHistory 214 +#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L + +#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" +#define NID_id_smime_aa_contentHint 215 +#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L + +#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" +#define NID_id_smime_aa_msgSigDigest 216 +#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L + +#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" +#define NID_id_smime_aa_encapContentType 217 +#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L + +#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" +#define NID_id_smime_aa_contentIdentifier 218 +#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L + +#define SN_id_smime_aa_macValue "id-smime-aa-macValue" +#define NID_id_smime_aa_macValue 219 +#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L + +#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" +#define NID_id_smime_aa_equivalentLabels 220 +#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L + +#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" +#define NID_id_smime_aa_contentReference 221 +#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L + +#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" +#define NID_id_smime_aa_encrypKeyPref 222 +#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L + +#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" +#define NID_id_smime_aa_signingCertificate 223 +#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L + +#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" +#define NID_id_smime_aa_smimeEncryptCerts 224 +#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L + +#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" +#define NID_id_smime_aa_timeStampToken 225 +#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L + +#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" +#define NID_id_smime_aa_ets_sigPolicyId 226 +#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L + +#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" +#define NID_id_smime_aa_ets_commitmentType 227 +#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L + +#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" +#define NID_id_smime_aa_ets_signerLocation 228 +#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L + +#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" +#define NID_id_smime_aa_ets_signerAttr 229 +#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L + +#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" +#define NID_id_smime_aa_ets_otherSigCert 230 +#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L + +#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" +#define NID_id_smime_aa_ets_contentTimestamp 231 +#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L + +#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" +#define NID_id_smime_aa_ets_CertificateRefs 232 +#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L + +#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" +#define NID_id_smime_aa_ets_RevocationRefs 233 +#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L + +#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" +#define NID_id_smime_aa_ets_certValues 234 +#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L + +#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" +#define NID_id_smime_aa_ets_revocationValues 235 +#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L + +#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" +#define NID_id_smime_aa_ets_escTimeStamp 236 +#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L + +#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" +#define NID_id_smime_aa_ets_certCRLTimestamp 237 +#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L + +#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" +#define NID_id_smime_aa_ets_archiveTimeStamp 238 +#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L + +#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" +#define NID_id_smime_aa_signatureType 239 +#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L + +#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" +#define NID_id_smime_aa_dvcs_dvc 240 +#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L + +#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" +#define NID_id_smime_aa_signingCertificateV2 1086 +#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L + +#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" +#define NID_id_smime_alg_ESDHwith3DES 241 +#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L + +#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" +#define NID_id_smime_alg_ESDHwithRC2 242 +#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L + +#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" +#define NID_id_smime_alg_3DESwrap 243 +#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L + +#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" +#define NID_id_smime_alg_RC2wrap 244 +#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L + +#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" +#define NID_id_smime_alg_ESDH 245 +#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L + +#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" +#define NID_id_smime_alg_CMS3DESwrap 246 +#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L + +#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" +#define NID_id_smime_alg_CMSRC2wrap 247 +#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L + +#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" +#define NID_id_alg_PWRI_KEK 893 +#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L + +#define SN_id_smime_cd_ldap "id-smime-cd-ldap" +#define NID_id_smime_cd_ldap 248 +#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L + +#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" +#define NID_id_smime_spq_ets_sqt_uri 249 +#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L + +#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" +#define NID_id_smime_spq_ets_sqt_unotice 250 +#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L + +#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" +#define NID_id_smime_cti_ets_proofOfOrigin 251 +#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L + +#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" +#define NID_id_smime_cti_ets_proofOfReceipt 252 +#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L + +#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" +#define NID_id_smime_cti_ets_proofOfDelivery 253 +#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L + +#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" +#define NID_id_smime_cti_ets_proofOfSender 254 +#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L + +#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" +#define NID_id_smime_cti_ets_proofOfApproval 255 +#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L + +#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" +#define NID_id_smime_cti_ets_proofOfCreation 256 +#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L + +#define LN_friendlyName "friendlyName" +#define NID_friendlyName 156 +#define OBJ_friendlyName OBJ_pkcs9,20L + +#define LN_localKeyID "localKeyID" +#define NID_localKeyID 157 +#define OBJ_localKeyID OBJ_pkcs9,21L + +#define SN_ms_csp_name "CSPName" +#define LN_ms_csp_name "Microsoft CSP Name" +#define NID_ms_csp_name 417 +#define OBJ_ms_csp_name 1L,3L,6L,1L,4L,1L,311L,17L,1L + +#define SN_LocalKeySet "LocalKeySet" +#define LN_LocalKeySet "Microsoft Local Key set" +#define NID_LocalKeySet 856 +#define OBJ_LocalKeySet 1L,3L,6L,1L,4L,1L,311L,17L,2L + +#define OBJ_certTypes OBJ_pkcs9,22L + +#define LN_x509Certificate "x509Certificate" +#define NID_x509Certificate 158 +#define OBJ_x509Certificate OBJ_certTypes,1L + +#define LN_sdsiCertificate "sdsiCertificate" +#define NID_sdsiCertificate 159 +#define OBJ_sdsiCertificate OBJ_certTypes,2L + +#define OBJ_crlTypes OBJ_pkcs9,23L + +#define LN_x509Crl "x509Crl" +#define NID_x509Crl 160 +#define OBJ_x509Crl OBJ_crlTypes,1L + +#define OBJ_pkcs12 OBJ_pkcs,12L + +#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L + +#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" +#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" +#define NID_pbe_WithSHA1And128BitRC4 144 +#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L + +#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" +#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" +#define NID_pbe_WithSHA1And40BitRC4 145 +#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L + +#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" +#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 +#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L + +#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" +#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" +#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 +#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L + +#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" +#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" +#define NID_pbe_WithSHA1And128BitRC2_CBC 148 +#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L + +#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" +#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" +#define NID_pbe_WithSHA1And40BitRC2_CBC 149 +#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L + +#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L + +#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L + +#define LN_keyBag "keyBag" +#define NID_keyBag 150 +#define OBJ_keyBag OBJ_pkcs12_BagIds,1L + +#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" +#define NID_pkcs8ShroudedKeyBag 151 +#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L + +#define LN_certBag "certBag" +#define NID_certBag 152 +#define OBJ_certBag OBJ_pkcs12_BagIds,3L + +#define LN_crlBag "crlBag" +#define NID_crlBag 153 +#define OBJ_crlBag OBJ_pkcs12_BagIds,4L + +#define LN_secretBag "secretBag" +#define NID_secretBag 154 +#define OBJ_secretBag OBJ_pkcs12_BagIds,5L + +#define LN_safeContentsBag "safeContentsBag" +#define NID_safeContentsBag 155 +#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L + +#define SN_md2 "MD2" +#define LN_md2 "md2" +#define NID_md2 3 +#define OBJ_md2 OBJ_rsadsi,2L,2L + +#define SN_md4 "MD4" +#define LN_md4 "md4" +#define NID_md4 257 +#define OBJ_md4 OBJ_rsadsi,2L,4L + +#define SN_md5 "MD5" +#define LN_md5 "md5" +#define NID_md5 4 +#define OBJ_md5 OBJ_rsadsi,2L,5L + +#define SN_md5_sha1 "MD5-SHA1" +#define LN_md5_sha1 "md5-sha1" +#define NID_md5_sha1 114 + +#define LN_hmacWithMD5 "hmacWithMD5" +#define NID_hmacWithMD5 797 +#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L + +#define LN_hmacWithSHA1 "hmacWithSHA1" +#define NID_hmacWithSHA1 163 +#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L + +#define SN_sm2 "SM2" +#define LN_sm2 "sm2" +#define NID_sm2 1172 +#define OBJ_sm2 OBJ_sm_scheme,301L + +#define SN_sm3 "SM3" +#define LN_sm3 "sm3" +#define NID_sm3 1143 +#define OBJ_sm3 OBJ_sm_scheme,401L + +#define SN_sm3WithRSAEncryption "RSA-SM3" +#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" +#define NID_sm3WithRSAEncryption 1144 +#define OBJ_sm3WithRSAEncryption OBJ_sm_scheme,504L + +#define LN_hmacWithSHA224 "hmacWithSHA224" +#define NID_hmacWithSHA224 798 +#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L + +#define LN_hmacWithSHA256 "hmacWithSHA256" +#define NID_hmacWithSHA256 799 +#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L + +#define LN_hmacWithSHA384 "hmacWithSHA384" +#define NID_hmacWithSHA384 800 +#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L + +#define LN_hmacWithSHA512 "hmacWithSHA512" +#define NID_hmacWithSHA512 801 +#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L + +#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" +#define NID_hmacWithSHA512_224 1193 +#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L + +#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" +#define NID_hmacWithSHA512_256 1194 +#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L + +#define SN_rc2_cbc "RC2-CBC" +#define LN_rc2_cbc "rc2-cbc" +#define NID_rc2_cbc 37 +#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L + +#define SN_rc2_ecb "RC2-ECB" +#define LN_rc2_ecb "rc2-ecb" +#define NID_rc2_ecb 38 + +#define SN_rc2_cfb64 "RC2-CFB" +#define LN_rc2_cfb64 "rc2-cfb" +#define NID_rc2_cfb64 39 + +#define SN_rc2_ofb64 "RC2-OFB" +#define LN_rc2_ofb64 "rc2-ofb" +#define NID_rc2_ofb64 40 + +#define SN_rc2_40_cbc "RC2-40-CBC" +#define LN_rc2_40_cbc "rc2-40-cbc" +#define NID_rc2_40_cbc 98 + +#define SN_rc2_64_cbc "RC2-64-CBC" +#define LN_rc2_64_cbc "rc2-64-cbc" +#define NID_rc2_64_cbc 166 + +#define SN_rc4 "RC4" +#define LN_rc4 "rc4" +#define NID_rc4 5 +#define OBJ_rc4 OBJ_rsadsi,3L,4L + +#define SN_rc4_40 "RC4-40" +#define LN_rc4_40 "rc4-40" +#define NID_rc4_40 97 + +#define SN_des_ede3_cbc "DES-EDE3-CBC" +#define LN_des_ede3_cbc "des-ede3-cbc" +#define NID_des_ede3_cbc 44 +#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L + +#define SN_rc5_cbc "RC5-CBC" +#define LN_rc5_cbc "rc5-cbc" +#define NID_rc5_cbc 120 +#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L + +#define SN_rc5_ecb "RC5-ECB" +#define LN_rc5_ecb "rc5-ecb" +#define NID_rc5_ecb 121 + +#define SN_rc5_cfb64 "RC5-CFB" +#define LN_rc5_cfb64 "rc5-cfb" +#define NID_rc5_cfb64 122 + +#define SN_rc5_ofb64 "RC5-OFB" +#define LN_rc5_ofb64 "rc5-ofb" +#define NID_rc5_ofb64 123 + +#define SN_ms_ext_req "msExtReq" +#define LN_ms_ext_req "Microsoft Extension Request" +#define NID_ms_ext_req 171 +#define OBJ_ms_ext_req 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L + +#define SN_ms_code_ind "msCodeInd" +#define LN_ms_code_ind "Microsoft Individual Code Signing" +#define NID_ms_code_ind 134 +#define OBJ_ms_code_ind 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L + +#define SN_ms_code_com "msCodeCom" +#define LN_ms_code_com "Microsoft Commercial Code Signing" +#define NID_ms_code_com 135 +#define OBJ_ms_code_com 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L + +#define SN_ms_ctl_sign "msCTLSign" +#define LN_ms_ctl_sign "Microsoft Trust List Signing" +#define NID_ms_ctl_sign 136 +#define OBJ_ms_ctl_sign 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L + +#define SN_ms_sgc "msSGC" +#define LN_ms_sgc "Microsoft Server Gated Crypto" +#define NID_ms_sgc 137 +#define OBJ_ms_sgc 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L + +#define SN_ms_efs "msEFS" +#define LN_ms_efs "Microsoft Encrypted File System" +#define NID_ms_efs 138 +#define OBJ_ms_efs 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L + +#define SN_ms_smartcard_login "msSmartcardLogin" +#define LN_ms_smartcard_login "Microsoft Smartcard Login" +#define NID_ms_smartcard_login 648 +#define OBJ_ms_smartcard_login 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L + +#define SN_ms_upn "msUPN" +#define LN_ms_upn "Microsoft User Principal Name" +#define NID_ms_upn 649 +#define OBJ_ms_upn 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L + +#define SN_idea_cbc "IDEA-CBC" +#define LN_idea_cbc "idea-cbc" +#define NID_idea_cbc 34 +#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L + +#define SN_idea_ecb "IDEA-ECB" +#define LN_idea_ecb "idea-ecb" +#define NID_idea_ecb 36 + +#define SN_idea_cfb64 "IDEA-CFB" +#define LN_idea_cfb64 "idea-cfb" +#define NID_idea_cfb64 35 + +#define SN_idea_ofb64 "IDEA-OFB" +#define LN_idea_ofb64 "idea-ofb" +#define NID_idea_ofb64 46 + +#define SN_bf_cbc "BF-CBC" +#define LN_bf_cbc "bf-cbc" +#define NID_bf_cbc 91 +#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L + +#define SN_bf_ecb "BF-ECB" +#define LN_bf_ecb "bf-ecb" +#define NID_bf_ecb 92 + +#define SN_bf_cfb64 "BF-CFB" +#define LN_bf_cfb64 "bf-cfb" +#define NID_bf_cfb64 93 + +#define SN_bf_ofb64 "BF-OFB" +#define LN_bf_ofb64 "bf-ofb" +#define NID_bf_ofb64 94 + +#define SN_id_pkix "PKIX" +#define NID_id_pkix 127 +#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L + +#define SN_id_pkix_mod "id-pkix-mod" +#define NID_id_pkix_mod 258 +#define OBJ_id_pkix_mod OBJ_id_pkix,0L + +#define SN_id_pe "id-pe" +#define NID_id_pe 175 +#define OBJ_id_pe OBJ_id_pkix,1L + +#define SN_id_qt "id-qt" +#define NID_id_qt 259 +#define OBJ_id_qt OBJ_id_pkix,2L + +#define SN_id_kp "id-kp" +#define NID_id_kp 128 +#define OBJ_id_kp OBJ_id_pkix,3L + +#define SN_id_it "id-it" +#define NID_id_it 260 +#define OBJ_id_it OBJ_id_pkix,4L + +#define SN_id_pkip "id-pkip" +#define NID_id_pkip 261 +#define OBJ_id_pkip OBJ_id_pkix,5L + +#define SN_id_alg "id-alg" +#define NID_id_alg 262 +#define OBJ_id_alg OBJ_id_pkix,6L + +#define SN_id_cmc "id-cmc" +#define NID_id_cmc 263 +#define OBJ_id_cmc OBJ_id_pkix,7L + +#define SN_id_on "id-on" +#define NID_id_on 264 +#define OBJ_id_on OBJ_id_pkix,8L + +#define SN_id_pda "id-pda" +#define NID_id_pda 265 +#define OBJ_id_pda OBJ_id_pkix,9L + +#define SN_id_aca "id-aca" +#define NID_id_aca 266 +#define OBJ_id_aca OBJ_id_pkix,10L + +#define SN_id_qcs "id-qcs" +#define NID_id_qcs 267 +#define OBJ_id_qcs OBJ_id_pkix,11L + +#define SN_id_cct "id-cct" +#define NID_id_cct 268 +#define OBJ_id_cct OBJ_id_pkix,12L + +#define SN_id_ppl "id-ppl" +#define NID_id_ppl 662 +#define OBJ_id_ppl OBJ_id_pkix,21L + +#define SN_id_ad "id-ad" +#define NID_id_ad 176 +#define OBJ_id_ad OBJ_id_pkix,48L + +#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" +#define NID_id_pkix1_explicit_88 269 +#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L + +#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" +#define NID_id_pkix1_implicit_88 270 +#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L + +#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" +#define NID_id_pkix1_explicit_93 271 +#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L + +#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" +#define NID_id_pkix1_implicit_93 272 +#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L + +#define SN_id_mod_crmf "id-mod-crmf" +#define NID_id_mod_crmf 273 +#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L + +#define SN_id_mod_cmc "id-mod-cmc" +#define NID_id_mod_cmc 274 +#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L + +#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" +#define NID_id_mod_kea_profile_88 275 +#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L + +#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" +#define NID_id_mod_kea_profile_93 276 +#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L + +#define SN_id_mod_cmp "id-mod-cmp" +#define NID_id_mod_cmp 277 +#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L + +#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" +#define NID_id_mod_qualified_cert_88 278 +#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L + +#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" +#define NID_id_mod_qualified_cert_93 279 +#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L + +#define SN_id_mod_attribute_cert "id-mod-attribute-cert" +#define NID_id_mod_attribute_cert 280 +#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L + +#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" +#define NID_id_mod_timestamp_protocol 281 +#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L + +#define SN_id_mod_ocsp "id-mod-ocsp" +#define NID_id_mod_ocsp 282 +#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L + +#define SN_id_mod_dvcs "id-mod-dvcs" +#define NID_id_mod_dvcs 283 +#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L + +#define SN_id_mod_cmp2000 "id-mod-cmp2000" +#define NID_id_mod_cmp2000 284 +#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L + +#define SN_info_access "authorityInfoAccess" +#define LN_info_access "Authority Information Access" +#define NID_info_access 177 +#define OBJ_info_access OBJ_id_pe,1L + +#define SN_biometricInfo "biometricInfo" +#define LN_biometricInfo "Biometric Info" +#define NID_biometricInfo 285 +#define OBJ_biometricInfo OBJ_id_pe,2L + +#define SN_qcStatements "qcStatements" +#define NID_qcStatements 286 +#define OBJ_qcStatements OBJ_id_pe,3L + +#define SN_ac_auditEntity "ac-auditEntity" +#define NID_ac_auditEntity 287 +#define OBJ_ac_auditEntity OBJ_id_pe,4L + +#define SN_ac_targeting "ac-targeting" +#define NID_ac_targeting 288 +#define OBJ_ac_targeting OBJ_id_pe,5L + +#define SN_aaControls "aaControls" +#define NID_aaControls 289 +#define OBJ_aaControls OBJ_id_pe,6L + +#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" +#define NID_sbgp_ipAddrBlock 290 +#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L + +#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" +#define NID_sbgp_autonomousSysNum 291 +#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L + +#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" +#define NID_sbgp_routerIdentifier 292 +#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L + +#define SN_ac_proxying "ac-proxying" +#define NID_ac_proxying 397 +#define OBJ_ac_proxying OBJ_id_pe,10L + +#define SN_sinfo_access "subjectInfoAccess" +#define LN_sinfo_access "Subject Information Access" +#define NID_sinfo_access 398 +#define OBJ_sinfo_access OBJ_id_pe,11L + +#define SN_proxyCertInfo "proxyCertInfo" +#define LN_proxyCertInfo "Proxy Certificate Information" +#define NID_proxyCertInfo 663 +#define OBJ_proxyCertInfo OBJ_id_pe,14L + +#define SN_tlsfeature "tlsfeature" +#define LN_tlsfeature "TLS Feature" +#define NID_tlsfeature 1020 +#define OBJ_tlsfeature OBJ_id_pe,24L + +#define SN_id_qt_cps "id-qt-cps" +#define LN_id_qt_cps "Policy Qualifier CPS" +#define NID_id_qt_cps 164 +#define OBJ_id_qt_cps OBJ_id_qt,1L + +#define SN_id_qt_unotice "id-qt-unotice" +#define LN_id_qt_unotice "Policy Qualifier User Notice" +#define NID_id_qt_unotice 165 +#define OBJ_id_qt_unotice OBJ_id_qt,2L + +#define SN_textNotice "textNotice" +#define NID_textNotice 293 +#define OBJ_textNotice OBJ_id_qt,3L + +#define SN_server_auth "serverAuth" +#define LN_server_auth "TLS Web Server Authentication" +#define NID_server_auth 129 +#define OBJ_server_auth OBJ_id_kp,1L + +#define SN_client_auth "clientAuth" +#define LN_client_auth "TLS Web Client Authentication" +#define NID_client_auth 130 +#define OBJ_client_auth OBJ_id_kp,2L + +#define SN_code_sign "codeSigning" +#define LN_code_sign "Code Signing" +#define NID_code_sign 131 +#define OBJ_code_sign OBJ_id_kp,3L + +#define SN_email_protect "emailProtection" +#define LN_email_protect "E-mail Protection" +#define NID_email_protect 132 +#define OBJ_email_protect OBJ_id_kp,4L + +#define SN_ipsecEndSystem "ipsecEndSystem" +#define LN_ipsecEndSystem "IPSec End System" +#define NID_ipsecEndSystem 294 +#define OBJ_ipsecEndSystem OBJ_id_kp,5L + +#define SN_ipsecTunnel "ipsecTunnel" +#define LN_ipsecTunnel "IPSec Tunnel" +#define NID_ipsecTunnel 295 +#define OBJ_ipsecTunnel OBJ_id_kp,6L + +#define SN_ipsecUser "ipsecUser" +#define LN_ipsecUser "IPSec User" +#define NID_ipsecUser 296 +#define OBJ_ipsecUser OBJ_id_kp,7L + +#define SN_time_stamp "timeStamping" +#define LN_time_stamp "Time Stamping" +#define NID_time_stamp 133 +#define OBJ_time_stamp OBJ_id_kp,8L + +#define SN_OCSP_sign "OCSPSigning" +#define LN_OCSP_sign "OCSP Signing" +#define NID_OCSP_sign 180 +#define OBJ_OCSP_sign OBJ_id_kp,9L + +#define SN_dvcs "DVCS" +#define LN_dvcs "dvcs" +#define NID_dvcs 297 +#define OBJ_dvcs OBJ_id_kp,10L + +#define SN_ipsec_IKE "ipsecIKE" +#define LN_ipsec_IKE "ipsec Internet Key Exchange" +#define NID_ipsec_IKE 1022 +#define OBJ_ipsec_IKE OBJ_id_kp,17L + +#define SN_capwapAC "capwapAC" +#define LN_capwapAC "Ctrl/provision WAP Access" +#define NID_capwapAC 1023 +#define OBJ_capwapAC OBJ_id_kp,18L + +#define SN_capwapWTP "capwapWTP" +#define LN_capwapWTP "Ctrl/Provision WAP Termination" +#define NID_capwapWTP 1024 +#define OBJ_capwapWTP OBJ_id_kp,19L + +#define SN_sshClient "secureShellClient" +#define LN_sshClient "SSH Client" +#define NID_sshClient 1025 +#define OBJ_sshClient OBJ_id_kp,21L + +#define SN_sshServer "secureShellServer" +#define LN_sshServer "SSH Server" +#define NID_sshServer 1026 +#define OBJ_sshServer OBJ_id_kp,22L + +#define SN_sendRouter "sendRouter" +#define LN_sendRouter "Send Router" +#define NID_sendRouter 1027 +#define OBJ_sendRouter OBJ_id_kp,23L + +#define SN_sendProxiedRouter "sendProxiedRouter" +#define LN_sendProxiedRouter "Send Proxied Router" +#define NID_sendProxiedRouter 1028 +#define OBJ_sendProxiedRouter OBJ_id_kp,24L + +#define SN_sendOwner "sendOwner" +#define LN_sendOwner "Send Owner" +#define NID_sendOwner 1029 +#define OBJ_sendOwner OBJ_id_kp,25L + +#define SN_sendProxiedOwner "sendProxiedOwner" +#define LN_sendProxiedOwner "Send Proxied Owner" +#define NID_sendProxiedOwner 1030 +#define OBJ_sendProxiedOwner OBJ_id_kp,26L + +#define SN_cmcCA "cmcCA" +#define LN_cmcCA "CMC Certificate Authority" +#define NID_cmcCA 1131 +#define OBJ_cmcCA OBJ_id_kp,27L + +#define SN_cmcRA "cmcRA" +#define LN_cmcRA "CMC Registration Authority" +#define NID_cmcRA 1132 +#define OBJ_cmcRA OBJ_id_kp,28L + +#define SN_id_it_caProtEncCert "id-it-caProtEncCert" +#define NID_id_it_caProtEncCert 298 +#define OBJ_id_it_caProtEncCert OBJ_id_it,1L + +#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" +#define NID_id_it_signKeyPairTypes 299 +#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L + +#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" +#define NID_id_it_encKeyPairTypes 300 +#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L + +#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" +#define NID_id_it_preferredSymmAlg 301 +#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L + +#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" +#define NID_id_it_caKeyUpdateInfo 302 +#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L + +#define SN_id_it_currentCRL "id-it-currentCRL" +#define NID_id_it_currentCRL 303 +#define OBJ_id_it_currentCRL OBJ_id_it,6L + +#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" +#define NID_id_it_unsupportedOIDs 304 +#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L + +#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" +#define NID_id_it_subscriptionRequest 305 +#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L + +#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" +#define NID_id_it_subscriptionResponse 306 +#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L + +#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" +#define NID_id_it_keyPairParamReq 307 +#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L + +#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" +#define NID_id_it_keyPairParamRep 308 +#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L + +#define SN_id_it_revPassphrase "id-it-revPassphrase" +#define NID_id_it_revPassphrase 309 +#define OBJ_id_it_revPassphrase OBJ_id_it,12L + +#define SN_id_it_implicitConfirm "id-it-implicitConfirm" +#define NID_id_it_implicitConfirm 310 +#define OBJ_id_it_implicitConfirm OBJ_id_it,13L + +#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" +#define NID_id_it_confirmWaitTime 311 +#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L + +#define SN_id_it_origPKIMessage "id-it-origPKIMessage" +#define NID_id_it_origPKIMessage 312 +#define OBJ_id_it_origPKIMessage OBJ_id_it,15L + +#define SN_id_it_suppLangTags "id-it-suppLangTags" +#define NID_id_it_suppLangTags 784 +#define OBJ_id_it_suppLangTags OBJ_id_it,16L + +#define SN_id_regCtrl "id-regCtrl" +#define NID_id_regCtrl 313 +#define OBJ_id_regCtrl OBJ_id_pkip,1L + +#define SN_id_regInfo "id-regInfo" +#define NID_id_regInfo 314 +#define OBJ_id_regInfo OBJ_id_pkip,2L + +#define SN_id_regCtrl_regToken "id-regCtrl-regToken" +#define NID_id_regCtrl_regToken 315 +#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L + +#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" +#define NID_id_regCtrl_authenticator 316 +#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L + +#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" +#define NID_id_regCtrl_pkiPublicationInfo 317 +#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L + +#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" +#define NID_id_regCtrl_pkiArchiveOptions 318 +#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L + +#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" +#define NID_id_regCtrl_oldCertID 319 +#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L + +#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" +#define NID_id_regCtrl_protocolEncrKey 320 +#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L + +#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" +#define NID_id_regInfo_utf8Pairs 321 +#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L + +#define SN_id_regInfo_certReq "id-regInfo-certReq" +#define NID_id_regInfo_certReq 322 +#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L + +#define SN_id_alg_des40 "id-alg-des40" +#define NID_id_alg_des40 323 +#define OBJ_id_alg_des40 OBJ_id_alg,1L + +#define SN_id_alg_noSignature "id-alg-noSignature" +#define NID_id_alg_noSignature 324 +#define OBJ_id_alg_noSignature OBJ_id_alg,2L + +#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" +#define NID_id_alg_dh_sig_hmac_sha1 325 +#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L + +#define SN_id_alg_dh_pop "id-alg-dh-pop" +#define NID_id_alg_dh_pop 326 +#define OBJ_id_alg_dh_pop OBJ_id_alg,4L + +#define SN_id_cmc_statusInfo "id-cmc-statusInfo" +#define NID_id_cmc_statusInfo 327 +#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L + +#define SN_id_cmc_identification "id-cmc-identification" +#define NID_id_cmc_identification 328 +#define OBJ_id_cmc_identification OBJ_id_cmc,2L + +#define SN_id_cmc_identityProof "id-cmc-identityProof" +#define NID_id_cmc_identityProof 329 +#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L + +#define SN_id_cmc_dataReturn "id-cmc-dataReturn" +#define NID_id_cmc_dataReturn 330 +#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L + +#define SN_id_cmc_transactionId "id-cmc-transactionId" +#define NID_id_cmc_transactionId 331 +#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L + +#define SN_id_cmc_senderNonce "id-cmc-senderNonce" +#define NID_id_cmc_senderNonce 332 +#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L + +#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" +#define NID_id_cmc_recipientNonce 333 +#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L + +#define SN_id_cmc_addExtensions "id-cmc-addExtensions" +#define NID_id_cmc_addExtensions 334 +#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L + +#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" +#define NID_id_cmc_encryptedPOP 335 +#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L + +#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" +#define NID_id_cmc_decryptedPOP 336 +#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L + +#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" +#define NID_id_cmc_lraPOPWitness 337 +#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L + +#define SN_id_cmc_getCert "id-cmc-getCert" +#define NID_id_cmc_getCert 338 +#define OBJ_id_cmc_getCert OBJ_id_cmc,15L + +#define SN_id_cmc_getCRL "id-cmc-getCRL" +#define NID_id_cmc_getCRL 339 +#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L + +#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" +#define NID_id_cmc_revokeRequest 340 +#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L + +#define SN_id_cmc_regInfo "id-cmc-regInfo" +#define NID_id_cmc_regInfo 341 +#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L + +#define SN_id_cmc_responseInfo "id-cmc-responseInfo" +#define NID_id_cmc_responseInfo 342 +#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L + +#define SN_id_cmc_queryPending "id-cmc-queryPending" +#define NID_id_cmc_queryPending 343 +#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L + +#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" +#define NID_id_cmc_popLinkRandom 344 +#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L + +#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" +#define NID_id_cmc_popLinkWitness 345 +#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L + +#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" +#define NID_id_cmc_confirmCertAcceptance 346 +#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L + +#define SN_id_on_personalData "id-on-personalData" +#define NID_id_on_personalData 347 +#define OBJ_id_on_personalData OBJ_id_on,1L + +#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" +#define LN_id_on_permanentIdentifier "Permanent Identifier" +#define NID_id_on_permanentIdentifier 858 +#define OBJ_id_on_permanentIdentifier OBJ_id_on,3L + +#define SN_id_pda_dateOfBirth "id-pda-dateOfBirth" +#define NID_id_pda_dateOfBirth 348 +#define OBJ_id_pda_dateOfBirth OBJ_id_pda,1L + +#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" +#define NID_id_pda_placeOfBirth 349 +#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L + +#define SN_id_pda_gender "id-pda-gender" +#define NID_id_pda_gender 351 +#define OBJ_id_pda_gender OBJ_id_pda,3L + +#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" +#define NID_id_pda_countryOfCitizenship 352 +#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L + +#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" +#define NID_id_pda_countryOfResidence 353 +#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L + +#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" +#define NID_id_aca_authenticationInfo 354 +#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L + +#define SN_id_aca_accessIdentity "id-aca-accessIdentity" +#define NID_id_aca_accessIdentity 355 +#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L + +#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" +#define NID_id_aca_chargingIdentity 356 +#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L + +#define SN_id_aca_group "id-aca-group" +#define NID_id_aca_group 357 +#define OBJ_id_aca_group OBJ_id_aca,4L + +#define SN_id_aca_role "id-aca-role" +#define NID_id_aca_role 358 +#define OBJ_id_aca_role OBJ_id_aca,5L + +#define SN_id_aca_encAttrs "id-aca-encAttrs" +#define NID_id_aca_encAttrs 399 +#define OBJ_id_aca_encAttrs OBJ_id_aca,6L + +#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" +#define NID_id_qcs_pkixQCSyntax_v1 359 +#define OBJ_id_qcs_pkixQCSyntax_v1 OBJ_id_qcs,1L + +#define SN_id_cct_crs "id-cct-crs" +#define NID_id_cct_crs 360 +#define OBJ_id_cct_crs OBJ_id_cct,1L + +#define SN_id_cct_PKIData "id-cct-PKIData" +#define NID_id_cct_PKIData 361 +#define OBJ_id_cct_PKIData OBJ_id_cct,2L + +#define SN_id_cct_PKIResponse "id-cct-PKIResponse" +#define NID_id_cct_PKIResponse 362 +#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L + +#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" +#define LN_id_ppl_anyLanguage "Any language" +#define NID_id_ppl_anyLanguage 664 +#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L + +#define SN_id_ppl_inheritAll "id-ppl-inheritAll" +#define LN_id_ppl_inheritAll "Inherit all" +#define NID_id_ppl_inheritAll 665 +#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L + +#define SN_Independent "id-ppl-independent" +#define LN_Independent "Independent" +#define NID_Independent 667 +#define OBJ_Independent OBJ_id_ppl,2L + +#define SN_ad_OCSP "OCSP" +#define LN_ad_OCSP "OCSP" +#define NID_ad_OCSP 178 +#define OBJ_ad_OCSP OBJ_id_ad,1L + +#define SN_ad_ca_issuers "caIssuers" +#define LN_ad_ca_issuers "CA Issuers" +#define NID_ad_ca_issuers 179 +#define OBJ_ad_ca_issuers OBJ_id_ad,2L + +#define SN_ad_timeStamping "ad_timestamping" +#define LN_ad_timeStamping "AD Time Stamping" +#define NID_ad_timeStamping 363 +#define OBJ_ad_timeStamping OBJ_id_ad,3L + +#define SN_ad_dvcs "AD_DVCS" +#define LN_ad_dvcs "ad dvcs" +#define NID_ad_dvcs 364 +#define OBJ_ad_dvcs OBJ_id_ad,4L + +#define SN_caRepository "caRepository" +#define LN_caRepository "CA Repository" +#define NID_caRepository 785 +#define OBJ_caRepository OBJ_id_ad,5L + +#define OBJ_id_pkix_OCSP OBJ_ad_OCSP + +#define SN_id_pkix_OCSP_basic "basicOCSPResponse" +#define LN_id_pkix_OCSP_basic "Basic OCSP Response" +#define NID_id_pkix_OCSP_basic 365 +#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L + +#define SN_id_pkix_OCSP_Nonce "Nonce" +#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" +#define NID_id_pkix_OCSP_Nonce 366 +#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L + +#define SN_id_pkix_OCSP_CrlID "CrlID" +#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" +#define NID_id_pkix_OCSP_CrlID 367 +#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L + +#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" +#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" +#define NID_id_pkix_OCSP_acceptableResponses 368 +#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L + +#define SN_id_pkix_OCSP_noCheck "noCheck" +#define LN_id_pkix_OCSP_noCheck "OCSP No Check" +#define NID_id_pkix_OCSP_noCheck 369 +#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L + +#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" +#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" +#define NID_id_pkix_OCSP_archiveCutoff 370 +#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L + +#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" +#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" +#define NID_id_pkix_OCSP_serviceLocator 371 +#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L + +#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" +#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" +#define NID_id_pkix_OCSP_extendedStatus 372 +#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L + +#define SN_id_pkix_OCSP_valid "valid" +#define NID_id_pkix_OCSP_valid 373 +#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L + +#define SN_id_pkix_OCSP_path "path" +#define NID_id_pkix_OCSP_path 374 +#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L + +#define SN_id_pkix_OCSP_trustRoot "trustRoot" +#define LN_id_pkix_OCSP_trustRoot "Trust Root" +#define NID_id_pkix_OCSP_trustRoot 375 +#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L + +#define SN_algorithm "algorithm" +#define LN_algorithm "algorithm" +#define NID_algorithm 376 +#define OBJ_algorithm 1L,3L,14L,3L,2L + +#define SN_md5WithRSA "RSA-NP-MD5" +#define LN_md5WithRSA "md5WithRSA" +#define NID_md5WithRSA 104 +#define OBJ_md5WithRSA OBJ_algorithm,3L + +#define SN_des_ecb "DES-ECB" +#define LN_des_ecb "des-ecb" +#define NID_des_ecb 29 +#define OBJ_des_ecb OBJ_algorithm,6L + +#define SN_des_cbc "DES-CBC" +#define LN_des_cbc "des-cbc" +#define NID_des_cbc 31 +#define OBJ_des_cbc OBJ_algorithm,7L + +#define SN_des_ofb64 "DES-OFB" +#define LN_des_ofb64 "des-ofb" +#define NID_des_ofb64 45 +#define OBJ_des_ofb64 OBJ_algorithm,8L + +#define SN_des_cfb64 "DES-CFB" +#define LN_des_cfb64 "des-cfb" +#define NID_des_cfb64 30 +#define OBJ_des_cfb64 OBJ_algorithm,9L + +#define SN_rsaSignature "rsaSignature" +#define NID_rsaSignature 377 +#define OBJ_rsaSignature OBJ_algorithm,11L + +#define SN_dsa_2 "DSA-old" +#define LN_dsa_2 "dsaEncryption-old" +#define NID_dsa_2 67 +#define OBJ_dsa_2 OBJ_algorithm,12L + +#define SN_dsaWithSHA "DSA-SHA" +#define LN_dsaWithSHA "dsaWithSHA" +#define NID_dsaWithSHA 66 +#define OBJ_dsaWithSHA OBJ_algorithm,13L + +#define SN_shaWithRSAEncryption "RSA-SHA" +#define LN_shaWithRSAEncryption "shaWithRSAEncryption" +#define NID_shaWithRSAEncryption 42 +#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L + +#define SN_des_ede_ecb "DES-EDE" +#define LN_des_ede_ecb "des-ede" +#define NID_des_ede_ecb 32 +#define OBJ_des_ede_ecb OBJ_algorithm,17L + +#define SN_des_ede3_ecb "DES-EDE3" +#define LN_des_ede3_ecb "des-ede3" +#define NID_des_ede3_ecb 33 + +#define SN_des_ede_cbc "DES-EDE-CBC" +#define LN_des_ede_cbc "des-ede-cbc" +#define NID_des_ede_cbc 43 + +#define SN_des_ede_cfb64 "DES-EDE-CFB" +#define LN_des_ede_cfb64 "des-ede-cfb" +#define NID_des_ede_cfb64 60 + +#define SN_des_ede3_cfb64 "DES-EDE3-CFB" +#define LN_des_ede3_cfb64 "des-ede3-cfb" +#define NID_des_ede3_cfb64 61 + +#define SN_des_ede_ofb64 "DES-EDE-OFB" +#define LN_des_ede_ofb64 "des-ede-ofb" +#define NID_des_ede_ofb64 62 + +#define SN_des_ede3_ofb64 "DES-EDE3-OFB" +#define LN_des_ede3_ofb64 "des-ede3-ofb" +#define NID_des_ede3_ofb64 63 + +#define SN_desx_cbc "DESX-CBC" +#define LN_desx_cbc "desx-cbc" +#define NID_desx_cbc 80 + +#define SN_sha "SHA" +#define LN_sha "sha" +#define NID_sha 41 +#define OBJ_sha OBJ_algorithm,18L + +#define SN_sha1 "SHA1" +#define LN_sha1 "sha1" +#define NID_sha1 64 +#define OBJ_sha1 OBJ_algorithm,26L + +#define SN_dsaWithSHA1_2 "DSA-SHA1-old" +#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" +#define NID_dsaWithSHA1_2 70 +#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L + +#define SN_sha1WithRSA "RSA-SHA1-2" +#define LN_sha1WithRSA "sha1WithRSA" +#define NID_sha1WithRSA 115 +#define OBJ_sha1WithRSA OBJ_algorithm,29L + +#define SN_ripemd160 "RIPEMD160" +#define LN_ripemd160 "ripemd160" +#define NID_ripemd160 117 +#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L + +#define SN_ripemd160WithRSA "RSA-RIPEMD160" +#define LN_ripemd160WithRSA "ripemd160WithRSA" +#define NID_ripemd160WithRSA 119 +#define OBJ_ripemd160WithRSA 1L,3L,36L,3L,3L,1L,2L + +#define SN_blake2b512 "BLAKE2b512" +#define LN_blake2b512 "blake2b512" +#define NID_blake2b512 1056 +#define OBJ_blake2b512 1L,3L,6L,1L,4L,1L,1722L,12L,2L,1L,16L + +#define SN_blake2s256 "BLAKE2s256" +#define LN_blake2s256 "blake2s256" +#define NID_blake2s256 1057 +#define OBJ_blake2s256 1L,3L,6L,1L,4L,1L,1722L,12L,2L,2L,8L + +#define SN_sxnet "SXNetID" +#define LN_sxnet "Strong Extranet ID" +#define NID_sxnet 143 +#define OBJ_sxnet 1L,3L,101L,1L,4L,1L + +#define SN_X500 "X500" +#define LN_X500 "directory services (X.500)" +#define NID_X500 11 +#define OBJ_X500 2L,5L + +#define SN_X509 "X509" +#define NID_X509 12 +#define OBJ_X509 OBJ_X500,4L + +#define SN_commonName "CN" +#define LN_commonName "commonName" +#define NID_commonName 13 +#define OBJ_commonName OBJ_X509,3L + +#define SN_surname "SN" +#define LN_surname "surname" +#define NID_surname 100 +#define OBJ_surname OBJ_X509,4L + +#define LN_serialNumber "serialNumber" +#define NID_serialNumber 105 +#define OBJ_serialNumber OBJ_X509,5L + +#define SN_countryName "C" +#define LN_countryName "countryName" +#define NID_countryName 14 +#define OBJ_countryName OBJ_X509,6L + +#define SN_localityName "L" +#define LN_localityName "localityName" +#define NID_localityName 15 +#define OBJ_localityName OBJ_X509,7L + +#define SN_stateOrProvinceName "ST" +#define LN_stateOrProvinceName "stateOrProvinceName" +#define NID_stateOrProvinceName 16 +#define OBJ_stateOrProvinceName OBJ_X509,8L + +#define SN_streetAddress "street" +#define LN_streetAddress "streetAddress" +#define NID_streetAddress 660 +#define OBJ_streetAddress OBJ_X509,9L + +#define SN_organizationName "O" +#define LN_organizationName "organizationName" +#define NID_organizationName 17 +#define OBJ_organizationName OBJ_X509,10L + +#define SN_organizationalUnitName "OU" +#define LN_organizationalUnitName "organizationalUnitName" +#define NID_organizationalUnitName 18 +#define OBJ_organizationalUnitName OBJ_X509,11L + +#define SN_title "title" +#define LN_title "title" +#define NID_title 106 +#define OBJ_title OBJ_X509,12L + +#define LN_description "description" +#define NID_description 107 +#define OBJ_description OBJ_X509,13L + +#define LN_searchGuide "searchGuide" +#define NID_searchGuide 859 +#define OBJ_searchGuide OBJ_X509,14L + +#define LN_businessCategory "businessCategory" +#define NID_businessCategory 860 +#define OBJ_businessCategory OBJ_X509,15L + +#define LN_postalAddress "postalAddress" +#define NID_postalAddress 861 +#define OBJ_postalAddress OBJ_X509,16L + +#define LN_postalCode "postalCode" +#define NID_postalCode 661 +#define OBJ_postalCode OBJ_X509,17L + +#define LN_postOfficeBox "postOfficeBox" +#define NID_postOfficeBox 862 +#define OBJ_postOfficeBox OBJ_X509,18L + +#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" +#define NID_physicalDeliveryOfficeName 863 +#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L + +#define LN_telephoneNumber "telephoneNumber" +#define NID_telephoneNumber 864 +#define OBJ_telephoneNumber OBJ_X509,20L + +#define LN_telexNumber "telexNumber" +#define NID_telexNumber 865 +#define OBJ_telexNumber OBJ_X509,21L + +#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" +#define NID_teletexTerminalIdentifier 866 +#define OBJ_teletexTerminalIdentifier OBJ_X509,22L + +#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" +#define NID_facsimileTelephoneNumber 867 +#define OBJ_facsimileTelephoneNumber OBJ_X509,23L + +#define LN_x121Address "x121Address" +#define NID_x121Address 868 +#define OBJ_x121Address OBJ_X509,24L + +#define LN_internationaliSDNNumber "internationaliSDNNumber" +#define NID_internationaliSDNNumber 869 +#define OBJ_internationaliSDNNumber OBJ_X509,25L + +#define LN_registeredAddress "registeredAddress" +#define NID_registeredAddress 870 +#define OBJ_registeredAddress OBJ_X509,26L + +#define LN_destinationIndicator "destinationIndicator" +#define NID_destinationIndicator 871 +#define OBJ_destinationIndicator OBJ_X509,27L + +#define LN_preferredDeliveryMethod "preferredDeliveryMethod" +#define NID_preferredDeliveryMethod 872 +#define OBJ_preferredDeliveryMethod OBJ_X509,28L + +#define LN_presentationAddress "presentationAddress" +#define NID_presentationAddress 873 +#define OBJ_presentationAddress OBJ_X509,29L + +#define LN_supportedApplicationContext "supportedApplicationContext" +#define NID_supportedApplicationContext 874 +#define OBJ_supportedApplicationContext OBJ_X509,30L + +#define SN_member "member" +#define NID_member 875 +#define OBJ_member OBJ_X509,31L + +#define SN_owner "owner" +#define NID_owner 876 +#define OBJ_owner OBJ_X509,32L + +#define LN_roleOccupant "roleOccupant" +#define NID_roleOccupant 877 +#define OBJ_roleOccupant OBJ_X509,33L + +#define SN_seeAlso "seeAlso" +#define NID_seeAlso 878 +#define OBJ_seeAlso OBJ_X509,34L + +#define LN_userPassword "userPassword" +#define NID_userPassword 879 +#define OBJ_userPassword OBJ_X509,35L + +#define LN_userCertificate "userCertificate" +#define NID_userCertificate 880 +#define OBJ_userCertificate OBJ_X509,36L + +#define LN_cACertificate "cACertificate" +#define NID_cACertificate 881 +#define OBJ_cACertificate OBJ_X509,37L + +#define LN_authorityRevocationList "authorityRevocationList" +#define NID_authorityRevocationList 882 +#define OBJ_authorityRevocationList OBJ_X509,38L + +#define LN_certificateRevocationList "certificateRevocationList" +#define NID_certificateRevocationList 883 +#define OBJ_certificateRevocationList OBJ_X509,39L + +#define LN_crossCertificatePair "crossCertificatePair" +#define NID_crossCertificatePair 884 +#define OBJ_crossCertificatePair OBJ_X509,40L + +#define SN_name "name" +#define LN_name "name" +#define NID_name 173 +#define OBJ_name OBJ_X509,41L + +#define SN_givenName "GN" +#define LN_givenName "givenName" +#define NID_givenName 99 +#define OBJ_givenName OBJ_X509,42L + +#define SN_initials "initials" +#define LN_initials "initials" +#define NID_initials 101 +#define OBJ_initials OBJ_X509,43L + +#define LN_generationQualifier "generationQualifier" +#define NID_generationQualifier 509 +#define OBJ_generationQualifier OBJ_X509,44L + +#define LN_x500UniqueIdentifier "x500UniqueIdentifier" +#define NID_x500UniqueIdentifier 503 +#define OBJ_x500UniqueIdentifier OBJ_X509,45L + +#define SN_dnQualifier "dnQualifier" +#define LN_dnQualifier "dnQualifier" +#define NID_dnQualifier 174 +#define OBJ_dnQualifier OBJ_X509,46L + +#define LN_enhancedSearchGuide "enhancedSearchGuide" +#define NID_enhancedSearchGuide 885 +#define OBJ_enhancedSearchGuide OBJ_X509,47L + +#define LN_protocolInformation "protocolInformation" +#define NID_protocolInformation 886 +#define OBJ_protocolInformation OBJ_X509,48L + +#define LN_distinguishedName "distinguishedName" +#define NID_distinguishedName 887 +#define OBJ_distinguishedName OBJ_X509,49L + +#define LN_uniqueMember "uniqueMember" +#define NID_uniqueMember 888 +#define OBJ_uniqueMember OBJ_X509,50L + +#define LN_houseIdentifier "houseIdentifier" +#define NID_houseIdentifier 889 +#define OBJ_houseIdentifier OBJ_X509,51L + +#define LN_supportedAlgorithms "supportedAlgorithms" +#define NID_supportedAlgorithms 890 +#define OBJ_supportedAlgorithms OBJ_X509,52L + +#define LN_deltaRevocationList "deltaRevocationList" +#define NID_deltaRevocationList 891 +#define OBJ_deltaRevocationList OBJ_X509,53L + +#define SN_dmdName "dmdName" +#define NID_dmdName 892 +#define OBJ_dmdName OBJ_X509,54L + +#define LN_pseudonym "pseudonym" +#define NID_pseudonym 510 +#define OBJ_pseudonym OBJ_X509,65L + +#define SN_role "role" +#define LN_role "role" +#define NID_role 400 +#define OBJ_role OBJ_X509,72L + +#define LN_organizationIdentifier "organizationIdentifier" +#define NID_organizationIdentifier 1089 +#define OBJ_organizationIdentifier OBJ_X509,97L + +#define SN_countryCode3c "c3" +#define LN_countryCode3c "countryCode3c" +#define NID_countryCode3c 1090 +#define OBJ_countryCode3c OBJ_X509,98L + +#define SN_countryCode3n "n3" +#define LN_countryCode3n "countryCode3n" +#define NID_countryCode3n 1091 +#define OBJ_countryCode3n OBJ_X509,99L + +#define LN_dnsName "dnsName" +#define NID_dnsName 1092 +#define OBJ_dnsName OBJ_X509,100L + +#define SN_X500algorithms "X500algorithms" +#define LN_X500algorithms "directory services - algorithms" +#define NID_X500algorithms 378 +#define OBJ_X500algorithms OBJ_X500,8L + +#define SN_rsa "RSA" +#define LN_rsa "rsa" +#define NID_rsa 19 +#define OBJ_rsa OBJ_X500algorithms,1L,1L + +#define SN_mdc2WithRSA "RSA-MDC2" +#define LN_mdc2WithRSA "mdc2WithRSA" +#define NID_mdc2WithRSA 96 +#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L + +#define SN_mdc2 "MDC2" +#define LN_mdc2 "mdc2" +#define NID_mdc2 95 +#define OBJ_mdc2 OBJ_X500algorithms,3L,101L + +#define SN_id_ce "id-ce" +#define NID_id_ce 81 +#define OBJ_id_ce OBJ_X500,29L + +#define SN_subject_directory_attributes "subjectDirectoryAttributes" +#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" +#define NID_subject_directory_attributes 769 +#define OBJ_subject_directory_attributes OBJ_id_ce,9L + +#define SN_subject_key_identifier "subjectKeyIdentifier" +#define LN_subject_key_identifier "X509v3 Subject Key Identifier" +#define NID_subject_key_identifier 82 +#define OBJ_subject_key_identifier OBJ_id_ce,14L + +#define SN_key_usage "keyUsage" +#define LN_key_usage "X509v3 Key Usage" +#define NID_key_usage 83 +#define OBJ_key_usage OBJ_id_ce,15L + +#define SN_private_key_usage_period "privateKeyUsagePeriod" +#define LN_private_key_usage_period "X509v3 Private Key Usage Period" +#define NID_private_key_usage_period 84 +#define OBJ_private_key_usage_period OBJ_id_ce,16L + +#define SN_subject_alt_name "subjectAltName" +#define LN_subject_alt_name "X509v3 Subject Alternative Name" +#define NID_subject_alt_name 85 +#define OBJ_subject_alt_name OBJ_id_ce,17L + +#define SN_issuer_alt_name "issuerAltName" +#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" +#define NID_issuer_alt_name 86 +#define OBJ_issuer_alt_name OBJ_id_ce,18L + +#define SN_basic_constraints "basicConstraints" +#define LN_basic_constraints "X509v3 Basic Constraints" +#define NID_basic_constraints 87 +#define OBJ_basic_constraints OBJ_id_ce,19L + +#define SN_crl_number "crlNumber" +#define LN_crl_number "X509v3 CRL Number" +#define NID_crl_number 88 +#define OBJ_crl_number OBJ_id_ce,20L + +#define SN_crl_reason "CRLReason" +#define LN_crl_reason "X509v3 CRL Reason Code" +#define NID_crl_reason 141 +#define OBJ_crl_reason OBJ_id_ce,21L + +#define SN_invalidity_date "invalidityDate" +#define LN_invalidity_date "Invalidity Date" +#define NID_invalidity_date 142 +#define OBJ_invalidity_date OBJ_id_ce,24L + +#define SN_delta_crl "deltaCRL" +#define LN_delta_crl "X509v3 Delta CRL Indicator" +#define NID_delta_crl 140 +#define OBJ_delta_crl OBJ_id_ce,27L + +#define SN_issuing_distribution_point "issuingDistributionPoint" +#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point" +#define NID_issuing_distribution_point 770 +#define OBJ_issuing_distribution_point OBJ_id_ce,28L + +#define SN_certificate_issuer "certificateIssuer" +#define LN_certificate_issuer "X509v3 Certificate Issuer" +#define NID_certificate_issuer 771 +#define OBJ_certificate_issuer OBJ_id_ce,29L + +#define SN_name_constraints "nameConstraints" +#define LN_name_constraints "X509v3 Name Constraints" +#define NID_name_constraints 666 +#define OBJ_name_constraints OBJ_id_ce,30L + +#define SN_crl_distribution_points "crlDistributionPoints" +#define LN_crl_distribution_points "X509v3 CRL Distribution Points" +#define NID_crl_distribution_points 103 +#define OBJ_crl_distribution_points OBJ_id_ce,31L + +#define SN_certificate_policies "certificatePolicies" +#define LN_certificate_policies "X509v3 Certificate Policies" +#define NID_certificate_policies 89 +#define OBJ_certificate_policies OBJ_id_ce,32L + +#define SN_any_policy "anyPolicy" +#define LN_any_policy "X509v3 Any Policy" +#define NID_any_policy 746 +#define OBJ_any_policy OBJ_certificate_policies,0L + +#define SN_policy_mappings "policyMappings" +#define LN_policy_mappings "X509v3 Policy Mappings" +#define NID_policy_mappings 747 +#define OBJ_policy_mappings OBJ_id_ce,33L + +#define SN_authority_key_identifier "authorityKeyIdentifier" +#define LN_authority_key_identifier "X509v3 Authority Key Identifier" +#define NID_authority_key_identifier 90 +#define OBJ_authority_key_identifier OBJ_id_ce,35L + +#define SN_policy_constraints "policyConstraints" +#define LN_policy_constraints "X509v3 Policy Constraints" +#define NID_policy_constraints 401 +#define OBJ_policy_constraints OBJ_id_ce,36L + +#define SN_ext_key_usage "extendedKeyUsage" +#define LN_ext_key_usage "X509v3 Extended Key Usage" +#define NID_ext_key_usage 126 +#define OBJ_ext_key_usage OBJ_id_ce,37L + +#define SN_freshest_crl "freshestCRL" +#define LN_freshest_crl "X509v3 Freshest CRL" +#define NID_freshest_crl 857 +#define OBJ_freshest_crl OBJ_id_ce,46L + +#define SN_inhibit_any_policy "inhibitAnyPolicy" +#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" +#define NID_inhibit_any_policy 748 +#define OBJ_inhibit_any_policy OBJ_id_ce,54L + +#define SN_target_information "targetInformation" +#define LN_target_information "X509v3 AC Targeting" +#define NID_target_information 402 +#define OBJ_target_information OBJ_id_ce,55L + +#define SN_no_rev_avail "noRevAvail" +#define LN_no_rev_avail "X509v3 No Revocation Available" +#define NID_no_rev_avail 403 +#define OBJ_no_rev_avail OBJ_id_ce,56L + +#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" +#define LN_anyExtendedKeyUsage "Any Extended Key Usage" +#define NID_anyExtendedKeyUsage 910 +#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L + +#define SN_netscape "Netscape" +#define LN_netscape "Netscape Communications Corp." +#define NID_netscape 57 +#define OBJ_netscape 2L,16L,840L,1L,113730L + +#define SN_netscape_cert_extension "nsCertExt" +#define LN_netscape_cert_extension "Netscape Certificate Extension" +#define NID_netscape_cert_extension 58 +#define OBJ_netscape_cert_extension OBJ_netscape,1L + +#define SN_netscape_data_type "nsDataType" +#define LN_netscape_data_type "Netscape Data Type" +#define NID_netscape_data_type 59 +#define OBJ_netscape_data_type OBJ_netscape,2L + +#define SN_netscape_cert_type "nsCertType" +#define LN_netscape_cert_type "Netscape Cert Type" +#define NID_netscape_cert_type 71 +#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L + +#define SN_netscape_base_url "nsBaseUrl" +#define LN_netscape_base_url "Netscape Base Url" +#define NID_netscape_base_url 72 +#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L + +#define SN_netscape_revocation_url "nsRevocationUrl" +#define LN_netscape_revocation_url "Netscape Revocation Url" +#define NID_netscape_revocation_url 73 +#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L + +#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" +#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" +#define NID_netscape_ca_revocation_url 74 +#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L + +#define SN_netscape_renewal_url "nsRenewalUrl" +#define LN_netscape_renewal_url "Netscape Renewal Url" +#define NID_netscape_renewal_url 75 +#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L + +#define SN_netscape_ca_policy_url "nsCaPolicyUrl" +#define LN_netscape_ca_policy_url "Netscape CA Policy Url" +#define NID_netscape_ca_policy_url 76 +#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L + +#define SN_netscape_ssl_server_name "nsSslServerName" +#define LN_netscape_ssl_server_name "Netscape SSL Server Name" +#define NID_netscape_ssl_server_name 77 +#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L + +#define SN_netscape_comment "nsComment" +#define LN_netscape_comment "Netscape Comment" +#define NID_netscape_comment 78 +#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L + +#define SN_netscape_cert_sequence "nsCertSequence" +#define LN_netscape_cert_sequence "Netscape Certificate Sequence" +#define NID_netscape_cert_sequence 79 +#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L + +#define SN_ns_sgc "nsSGC" +#define LN_ns_sgc "Netscape Server Gated Crypto" +#define NID_ns_sgc 139 +#define OBJ_ns_sgc OBJ_netscape,4L,1L + +#define SN_org "ORG" +#define LN_org "org" +#define NID_org 379 +#define OBJ_org OBJ_iso,3L + +#define SN_dod "DOD" +#define LN_dod "dod" +#define NID_dod 380 +#define OBJ_dod OBJ_org,6L + +#define SN_iana "IANA" +#define LN_iana "iana" +#define NID_iana 381 +#define OBJ_iana OBJ_dod,1L + +#define OBJ_internet OBJ_iana + +#define SN_Directory "directory" +#define LN_Directory "Directory" +#define NID_Directory 382 +#define OBJ_Directory OBJ_internet,1L + +#define SN_Management "mgmt" +#define LN_Management "Management" +#define NID_Management 383 +#define OBJ_Management OBJ_internet,2L + +#define SN_Experimental "experimental" +#define LN_Experimental "Experimental" +#define NID_Experimental 384 +#define OBJ_Experimental OBJ_internet,3L + +#define SN_Private "private" +#define LN_Private "Private" +#define NID_Private 385 +#define OBJ_Private OBJ_internet,4L + +#define SN_Security "security" +#define LN_Security "Security" +#define NID_Security 386 +#define OBJ_Security OBJ_internet,5L + +#define SN_SNMPv2 "snmpv2" +#define LN_SNMPv2 "SNMPv2" +#define NID_SNMPv2 387 +#define OBJ_SNMPv2 OBJ_internet,6L + +#define LN_Mail "Mail" +#define NID_Mail 388 +#define OBJ_Mail OBJ_internet,7L + +#define SN_Enterprises "enterprises" +#define LN_Enterprises "Enterprises" +#define NID_Enterprises 389 +#define OBJ_Enterprises OBJ_Private,1L + +#define SN_dcObject "dcobject" +#define LN_dcObject "dcObject" +#define NID_dcObject 390 +#define OBJ_dcObject OBJ_Enterprises,1466L,344L + +#define SN_mime_mhs "mime-mhs" +#define LN_mime_mhs "MIME MHS" +#define NID_mime_mhs 504 +#define OBJ_mime_mhs OBJ_Mail,1L + +#define SN_mime_mhs_headings "mime-mhs-headings" +#define LN_mime_mhs_headings "mime-mhs-headings" +#define NID_mime_mhs_headings 505 +#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L + +#define SN_mime_mhs_bodies "mime-mhs-bodies" +#define LN_mime_mhs_bodies "mime-mhs-bodies" +#define NID_mime_mhs_bodies 506 +#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L + +#define SN_id_hex_partial_message "id-hex-partial-message" +#define LN_id_hex_partial_message "id-hex-partial-message" +#define NID_id_hex_partial_message 507 +#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L + +#define SN_id_hex_multipart_message "id-hex-multipart-message" +#define LN_id_hex_multipart_message "id-hex-multipart-message" +#define NID_id_hex_multipart_message 508 +#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L + +#define SN_zlib_compression "ZLIB" +#define LN_zlib_compression "zlib compression" +#define NID_zlib_compression 125 +#define OBJ_zlib_compression OBJ_id_smime_alg,8L + +#define OBJ_csor 2L,16L,840L,1L,101L,3L + +#define OBJ_nistAlgorithms OBJ_csor,4L + +#define OBJ_aes OBJ_nistAlgorithms,1L + +#define SN_aes_128_ecb "AES-128-ECB" +#define LN_aes_128_ecb "aes-128-ecb" +#define NID_aes_128_ecb 418 +#define OBJ_aes_128_ecb OBJ_aes,1L + +#define SN_aes_128_cbc "AES-128-CBC" +#define LN_aes_128_cbc "aes-128-cbc" +#define NID_aes_128_cbc 419 +#define OBJ_aes_128_cbc OBJ_aes,2L + +#define SN_aes_128_ofb128 "AES-128-OFB" +#define LN_aes_128_ofb128 "aes-128-ofb" +#define NID_aes_128_ofb128 420 +#define OBJ_aes_128_ofb128 OBJ_aes,3L + +#define SN_aes_128_cfb128 "AES-128-CFB" +#define LN_aes_128_cfb128 "aes-128-cfb" +#define NID_aes_128_cfb128 421 +#define OBJ_aes_128_cfb128 OBJ_aes,4L + +#define SN_id_aes128_wrap "id-aes128-wrap" +#define NID_id_aes128_wrap 788 +#define OBJ_id_aes128_wrap OBJ_aes,5L + +#define SN_aes_128_gcm "id-aes128-GCM" +#define LN_aes_128_gcm "aes-128-gcm" +#define NID_aes_128_gcm 895 +#define OBJ_aes_128_gcm OBJ_aes,6L + +#define SN_aes_128_ccm "id-aes128-CCM" +#define LN_aes_128_ccm "aes-128-ccm" +#define NID_aes_128_ccm 896 +#define OBJ_aes_128_ccm OBJ_aes,7L + +#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" +#define NID_id_aes128_wrap_pad 897 +#define OBJ_id_aes128_wrap_pad OBJ_aes,8L + +#define SN_aes_192_ecb "AES-192-ECB" +#define LN_aes_192_ecb "aes-192-ecb" +#define NID_aes_192_ecb 422 +#define OBJ_aes_192_ecb OBJ_aes,21L + +#define SN_aes_192_cbc "AES-192-CBC" +#define LN_aes_192_cbc "aes-192-cbc" +#define NID_aes_192_cbc 423 +#define OBJ_aes_192_cbc OBJ_aes,22L + +#define SN_aes_192_ofb128 "AES-192-OFB" +#define LN_aes_192_ofb128 "aes-192-ofb" +#define NID_aes_192_ofb128 424 +#define OBJ_aes_192_ofb128 OBJ_aes,23L + +#define SN_aes_192_cfb128 "AES-192-CFB" +#define LN_aes_192_cfb128 "aes-192-cfb" +#define NID_aes_192_cfb128 425 +#define OBJ_aes_192_cfb128 OBJ_aes,24L + +#define SN_id_aes192_wrap "id-aes192-wrap" +#define NID_id_aes192_wrap 789 +#define OBJ_id_aes192_wrap OBJ_aes,25L + +#define SN_aes_192_gcm "id-aes192-GCM" +#define LN_aes_192_gcm "aes-192-gcm" +#define NID_aes_192_gcm 898 +#define OBJ_aes_192_gcm OBJ_aes,26L + +#define SN_aes_192_ccm "id-aes192-CCM" +#define LN_aes_192_ccm "aes-192-ccm" +#define NID_aes_192_ccm 899 +#define OBJ_aes_192_ccm OBJ_aes,27L + +#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" +#define NID_id_aes192_wrap_pad 900 +#define OBJ_id_aes192_wrap_pad OBJ_aes,28L + +#define SN_aes_256_ecb "AES-256-ECB" +#define LN_aes_256_ecb "aes-256-ecb" +#define NID_aes_256_ecb 426 +#define OBJ_aes_256_ecb OBJ_aes,41L + +#define SN_aes_256_cbc "AES-256-CBC" +#define LN_aes_256_cbc "aes-256-cbc" +#define NID_aes_256_cbc 427 +#define OBJ_aes_256_cbc OBJ_aes,42L + +#define SN_aes_256_ofb128 "AES-256-OFB" +#define LN_aes_256_ofb128 "aes-256-ofb" +#define NID_aes_256_ofb128 428 +#define OBJ_aes_256_ofb128 OBJ_aes,43L + +#define SN_aes_256_cfb128 "AES-256-CFB" +#define LN_aes_256_cfb128 "aes-256-cfb" +#define NID_aes_256_cfb128 429 +#define OBJ_aes_256_cfb128 OBJ_aes,44L + +#define SN_id_aes256_wrap "id-aes256-wrap" +#define NID_id_aes256_wrap 790 +#define OBJ_id_aes256_wrap OBJ_aes,45L + +#define SN_aes_256_gcm "id-aes256-GCM" +#define LN_aes_256_gcm "aes-256-gcm" +#define NID_aes_256_gcm 901 +#define OBJ_aes_256_gcm OBJ_aes,46L + +#define SN_aes_256_ccm "id-aes256-CCM" +#define LN_aes_256_ccm "aes-256-ccm" +#define NID_aes_256_ccm 902 +#define OBJ_aes_256_ccm OBJ_aes,47L + +#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" +#define NID_id_aes256_wrap_pad 903 +#define OBJ_id_aes256_wrap_pad OBJ_aes,48L + +#define SN_aes_128_xts "AES-128-XTS" +#define LN_aes_128_xts "aes-128-xts" +#define NID_aes_128_xts 913 +#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L + +#define SN_aes_256_xts "AES-256-XTS" +#define LN_aes_256_xts "aes-256-xts" +#define NID_aes_256_xts 914 +#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L + +#define SN_aes_128_cfb1 "AES-128-CFB1" +#define LN_aes_128_cfb1 "aes-128-cfb1" +#define NID_aes_128_cfb1 650 + +#define SN_aes_192_cfb1 "AES-192-CFB1" +#define LN_aes_192_cfb1 "aes-192-cfb1" +#define NID_aes_192_cfb1 651 + +#define SN_aes_256_cfb1 "AES-256-CFB1" +#define LN_aes_256_cfb1 "aes-256-cfb1" +#define NID_aes_256_cfb1 652 + +#define SN_aes_128_cfb8 "AES-128-CFB8" +#define LN_aes_128_cfb8 "aes-128-cfb8" +#define NID_aes_128_cfb8 653 + +#define SN_aes_192_cfb8 "AES-192-CFB8" +#define LN_aes_192_cfb8 "aes-192-cfb8" +#define NID_aes_192_cfb8 654 + +#define SN_aes_256_cfb8 "AES-256-CFB8" +#define LN_aes_256_cfb8 "aes-256-cfb8" +#define NID_aes_256_cfb8 655 + +#define SN_aes_128_ctr "AES-128-CTR" +#define LN_aes_128_ctr "aes-128-ctr" +#define NID_aes_128_ctr 904 + +#define SN_aes_192_ctr "AES-192-CTR" +#define LN_aes_192_ctr "aes-192-ctr" +#define NID_aes_192_ctr 905 + +#define SN_aes_256_ctr "AES-256-CTR" +#define LN_aes_256_ctr "aes-256-ctr" +#define NID_aes_256_ctr 906 + +#define SN_aes_128_ocb "AES-128-OCB" +#define LN_aes_128_ocb "aes-128-ocb" +#define NID_aes_128_ocb 958 + +#define SN_aes_192_ocb "AES-192-OCB" +#define LN_aes_192_ocb "aes-192-ocb" +#define NID_aes_192_ocb 959 + +#define SN_aes_256_ocb "AES-256-OCB" +#define LN_aes_256_ocb "aes-256-ocb" +#define NID_aes_256_ocb 960 + +#define SN_des_cfb1 "DES-CFB1" +#define LN_des_cfb1 "des-cfb1" +#define NID_des_cfb1 656 + +#define SN_des_cfb8 "DES-CFB8" +#define LN_des_cfb8 "des-cfb8" +#define NID_des_cfb8 657 + +#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" +#define LN_des_ede3_cfb1 "des-ede3-cfb1" +#define NID_des_ede3_cfb1 658 + +#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" +#define LN_des_ede3_cfb8 "des-ede3-cfb8" +#define NID_des_ede3_cfb8 659 + +#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L + +#define SN_sha256 "SHA256" +#define LN_sha256 "sha256" +#define NID_sha256 672 +#define OBJ_sha256 OBJ_nist_hashalgs,1L + +#define SN_sha384 "SHA384" +#define LN_sha384 "sha384" +#define NID_sha384 673 +#define OBJ_sha384 OBJ_nist_hashalgs,2L + +#define SN_sha512 "SHA512" +#define LN_sha512 "sha512" +#define NID_sha512 674 +#define OBJ_sha512 OBJ_nist_hashalgs,3L + +#define SN_sha224 "SHA224" +#define LN_sha224 "sha224" +#define NID_sha224 675 +#define OBJ_sha224 OBJ_nist_hashalgs,4L + +#define SN_sha512_224 "SHA512-224" +#define LN_sha512_224 "sha512-224" +#define NID_sha512_224 1094 +#define OBJ_sha512_224 OBJ_nist_hashalgs,5L + +#define SN_sha512_256 "SHA512-256" +#define LN_sha512_256 "sha512-256" +#define NID_sha512_256 1095 +#define OBJ_sha512_256 OBJ_nist_hashalgs,6L + +#define SN_sha3_224 "SHA3-224" +#define LN_sha3_224 "sha3-224" +#define NID_sha3_224 1096 +#define OBJ_sha3_224 OBJ_nist_hashalgs,7L + +#define SN_sha3_256 "SHA3-256" +#define LN_sha3_256 "sha3-256" +#define NID_sha3_256 1097 +#define OBJ_sha3_256 OBJ_nist_hashalgs,8L + +#define SN_sha3_384 "SHA3-384" +#define LN_sha3_384 "sha3-384" +#define NID_sha3_384 1098 +#define OBJ_sha3_384 OBJ_nist_hashalgs,9L + +#define SN_sha3_512 "SHA3-512" +#define LN_sha3_512 "sha3-512" +#define NID_sha3_512 1099 +#define OBJ_sha3_512 OBJ_nist_hashalgs,10L + +#define SN_shake128 "SHAKE128" +#define LN_shake128 "shake128" +#define NID_shake128 1100 +#define OBJ_shake128 OBJ_nist_hashalgs,11L + +#define SN_shake256 "SHAKE256" +#define LN_shake256 "shake256" +#define NID_shake256 1101 +#define OBJ_shake256 OBJ_nist_hashalgs,12L + +#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" +#define LN_hmac_sha3_224 "hmac-sha3-224" +#define NID_hmac_sha3_224 1102 +#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L + +#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" +#define LN_hmac_sha3_256 "hmac-sha3-256" +#define NID_hmac_sha3_256 1103 +#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L + +#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" +#define LN_hmac_sha3_384 "hmac-sha3-384" +#define NID_hmac_sha3_384 1104 +#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L + +#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" +#define LN_hmac_sha3_512 "hmac-sha3-512" +#define NID_hmac_sha3_512 1105 +#define OBJ_hmac_sha3_512 OBJ_nist_hashalgs,16L + +#define OBJ_dsa_with_sha2 OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA224 "dsa_with_SHA224" +#define NID_dsa_with_SHA224 802 +#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L + +#define SN_dsa_with_SHA256 "dsa_with_SHA256" +#define NID_dsa_with_SHA256 803 +#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L + +#define OBJ_sigAlgs OBJ_nistAlgorithms,3L + +#define SN_dsa_with_SHA384 "id-dsa-with-sha384" +#define LN_dsa_with_SHA384 "dsa_with_SHA384" +#define NID_dsa_with_SHA384 1106 +#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L + +#define SN_dsa_with_SHA512 "id-dsa-with-sha512" +#define LN_dsa_with_SHA512 "dsa_with_SHA512" +#define NID_dsa_with_SHA512 1107 +#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L + +#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" +#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" +#define NID_dsa_with_SHA3_224 1108 +#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L + +#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" +#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" +#define NID_dsa_with_SHA3_256 1109 +#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L + +#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" +#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" +#define NID_dsa_with_SHA3_384 1110 +#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L + +#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" +#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" +#define NID_dsa_with_SHA3_512 1111 +#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L + +#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" +#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" +#define NID_ecdsa_with_SHA3_224 1112 +#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L + +#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" +#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" +#define NID_ecdsa_with_SHA3_256 1113 +#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L + +#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" +#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" +#define NID_ecdsa_with_SHA3_384 1114 +#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L + +#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" +#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" +#define NID_ecdsa_with_SHA3_512 1115 +#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L + +#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" +#define LN_RSA_SHA3_224 "RSA-SHA3-224" +#define NID_RSA_SHA3_224 1116 +#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L + +#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" +#define LN_RSA_SHA3_256 "RSA-SHA3-256" +#define NID_RSA_SHA3_256 1117 +#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L + +#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" +#define LN_RSA_SHA3_384 "RSA-SHA3-384" +#define NID_RSA_SHA3_384 1118 +#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L + +#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" +#define LN_RSA_SHA3_512 "RSA-SHA3-512" +#define NID_RSA_SHA3_512 1119 +#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L + +#define SN_hold_instruction_code "holdInstructionCode" +#define LN_hold_instruction_code "Hold Instruction Code" +#define NID_hold_instruction_code 430 +#define OBJ_hold_instruction_code OBJ_id_ce,23L + +#define OBJ_holdInstruction OBJ_X9_57,2L + +#define SN_hold_instruction_none "holdInstructionNone" +#define LN_hold_instruction_none "Hold Instruction None" +#define NID_hold_instruction_none 431 +#define OBJ_hold_instruction_none OBJ_holdInstruction,1L + +#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" +#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" +#define NID_hold_instruction_call_issuer 432 +#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L + +#define SN_hold_instruction_reject "holdInstructionReject" +#define LN_hold_instruction_reject "Hold Instruction Reject" +#define NID_hold_instruction_reject 433 +#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L + +#define SN_data "data" +#define NID_data 434 +#define OBJ_data OBJ_itu_t,9L + +#define SN_pss "pss" +#define NID_pss 435 +#define OBJ_pss OBJ_data,2342L + +#define SN_ucl "ucl" +#define NID_ucl 436 +#define OBJ_ucl OBJ_pss,19200300L + +#define SN_pilot "pilot" +#define NID_pilot 437 +#define OBJ_pilot OBJ_ucl,100L + +#define LN_pilotAttributeType "pilotAttributeType" +#define NID_pilotAttributeType 438 +#define OBJ_pilotAttributeType OBJ_pilot,1L + +#define LN_pilotAttributeSyntax "pilotAttributeSyntax" +#define NID_pilotAttributeSyntax 439 +#define OBJ_pilotAttributeSyntax OBJ_pilot,3L + +#define LN_pilotObjectClass "pilotObjectClass" +#define NID_pilotObjectClass 440 +#define OBJ_pilotObjectClass OBJ_pilot,4L + +#define LN_pilotGroups "pilotGroups" +#define NID_pilotGroups 441 +#define OBJ_pilotGroups OBJ_pilot,10L + +#define LN_iA5StringSyntax "iA5StringSyntax" +#define NID_iA5StringSyntax 442 +#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L + +#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" +#define NID_caseIgnoreIA5StringSyntax 443 +#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L + +#define LN_pilotObject "pilotObject" +#define NID_pilotObject 444 +#define OBJ_pilotObject OBJ_pilotObjectClass,3L + +#define LN_pilotPerson "pilotPerson" +#define NID_pilotPerson 445 +#define OBJ_pilotPerson OBJ_pilotObjectClass,4L + +#define SN_account "account" +#define NID_account 446 +#define OBJ_account OBJ_pilotObjectClass,5L + +#define SN_document "document" +#define NID_document 447 +#define OBJ_document OBJ_pilotObjectClass,6L + +#define SN_room "room" +#define NID_room 448 +#define OBJ_room OBJ_pilotObjectClass,7L + +#define LN_documentSeries "documentSeries" +#define NID_documentSeries 449 +#define OBJ_documentSeries OBJ_pilotObjectClass,9L + +#define SN_Domain "domain" +#define LN_Domain "Domain" +#define NID_Domain 392 +#define OBJ_Domain OBJ_pilotObjectClass,13L + +#define LN_rFC822localPart "rFC822localPart" +#define NID_rFC822localPart 450 +#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L + +#define LN_dNSDomain "dNSDomain" +#define NID_dNSDomain 451 +#define OBJ_dNSDomain OBJ_pilotObjectClass,15L + +#define LN_domainRelatedObject "domainRelatedObject" +#define NID_domainRelatedObject 452 +#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L + +#define LN_friendlyCountry "friendlyCountry" +#define NID_friendlyCountry 453 +#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L + +#define LN_simpleSecurityObject "simpleSecurityObject" +#define NID_simpleSecurityObject 454 +#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L + +#define LN_pilotOrganization "pilotOrganization" +#define NID_pilotOrganization 455 +#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L + +#define LN_pilotDSA "pilotDSA" +#define NID_pilotDSA 456 +#define OBJ_pilotDSA OBJ_pilotObjectClass,21L + +#define LN_qualityLabelledData "qualityLabelledData" +#define NID_qualityLabelledData 457 +#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L + +#define SN_userId "UID" +#define LN_userId "userId" +#define NID_userId 458 +#define OBJ_userId OBJ_pilotAttributeType,1L + +#define LN_textEncodedORAddress "textEncodedORAddress" +#define NID_textEncodedORAddress 459 +#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L + +#define SN_rfc822Mailbox "mail" +#define LN_rfc822Mailbox "rfc822Mailbox" +#define NID_rfc822Mailbox 460 +#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L + +#define SN_info "info" +#define NID_info 461 +#define OBJ_info OBJ_pilotAttributeType,4L + +#define LN_favouriteDrink "favouriteDrink" +#define NID_favouriteDrink 462 +#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L + +#define LN_roomNumber "roomNumber" +#define NID_roomNumber 463 +#define OBJ_roomNumber OBJ_pilotAttributeType,6L + +#define SN_photo "photo" +#define NID_photo 464 +#define OBJ_photo OBJ_pilotAttributeType,7L + +#define LN_userClass "userClass" +#define NID_userClass 465 +#define OBJ_userClass OBJ_pilotAttributeType,8L + +#define SN_host "host" +#define NID_host 466 +#define OBJ_host OBJ_pilotAttributeType,9L + +#define SN_manager "manager" +#define NID_manager 467 +#define OBJ_manager OBJ_pilotAttributeType,10L + +#define LN_documentIdentifier "documentIdentifier" +#define NID_documentIdentifier 468 +#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L + +#define LN_documentTitle "documentTitle" +#define NID_documentTitle 469 +#define OBJ_documentTitle OBJ_pilotAttributeType,12L + +#define LN_documentVersion "documentVersion" +#define NID_documentVersion 470 +#define OBJ_documentVersion OBJ_pilotAttributeType,13L + +#define LN_documentAuthor "documentAuthor" +#define NID_documentAuthor 471 +#define OBJ_documentAuthor OBJ_pilotAttributeType,14L + +#define LN_documentLocation "documentLocation" +#define NID_documentLocation 472 +#define OBJ_documentLocation OBJ_pilotAttributeType,15L + +#define LN_homeTelephoneNumber "homeTelephoneNumber" +#define NID_homeTelephoneNumber 473 +#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L + +#define SN_secretary "secretary" +#define NID_secretary 474 +#define OBJ_secretary OBJ_pilotAttributeType,21L + +#define LN_otherMailbox "otherMailbox" +#define NID_otherMailbox 475 +#define OBJ_otherMailbox OBJ_pilotAttributeType,22L + +#define LN_lastModifiedTime "lastModifiedTime" +#define NID_lastModifiedTime 476 +#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L + +#define LN_lastModifiedBy "lastModifiedBy" +#define NID_lastModifiedBy 477 +#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L + +#define SN_domainComponent "DC" +#define LN_domainComponent "domainComponent" +#define NID_domainComponent 391 +#define OBJ_domainComponent OBJ_pilotAttributeType,25L + +#define LN_aRecord "aRecord" +#define NID_aRecord 478 +#define OBJ_aRecord OBJ_pilotAttributeType,26L + +#define LN_pilotAttributeType27 "pilotAttributeType27" +#define NID_pilotAttributeType27 479 +#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L + +#define LN_mXRecord "mXRecord" +#define NID_mXRecord 480 +#define OBJ_mXRecord OBJ_pilotAttributeType,28L + +#define LN_nSRecord "nSRecord" +#define NID_nSRecord 481 +#define OBJ_nSRecord OBJ_pilotAttributeType,29L + +#define LN_sOARecord "sOARecord" +#define NID_sOARecord 482 +#define OBJ_sOARecord OBJ_pilotAttributeType,30L + +#define LN_cNAMERecord "cNAMERecord" +#define NID_cNAMERecord 483 +#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L + +#define LN_associatedDomain "associatedDomain" +#define NID_associatedDomain 484 +#define OBJ_associatedDomain OBJ_pilotAttributeType,37L + +#define LN_associatedName "associatedName" +#define NID_associatedName 485 +#define OBJ_associatedName OBJ_pilotAttributeType,38L + +#define LN_homePostalAddress "homePostalAddress" +#define NID_homePostalAddress 486 +#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L + +#define LN_personalTitle "personalTitle" +#define NID_personalTitle 487 +#define OBJ_personalTitle OBJ_pilotAttributeType,40L + +#define LN_mobileTelephoneNumber "mobileTelephoneNumber" +#define NID_mobileTelephoneNumber 488 +#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L + +#define LN_pagerTelephoneNumber "pagerTelephoneNumber" +#define NID_pagerTelephoneNumber 489 +#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L + +#define LN_friendlyCountryName "friendlyCountryName" +#define NID_friendlyCountryName 490 +#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L + +#define SN_uniqueIdentifier "uid" +#define LN_uniqueIdentifier "uniqueIdentifier" +#define NID_uniqueIdentifier 102 +#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L + +#define LN_organizationalStatus "organizationalStatus" +#define NID_organizationalStatus 491 +#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L + +#define LN_janetMailbox "janetMailbox" +#define NID_janetMailbox 492 +#define OBJ_janetMailbox OBJ_pilotAttributeType,46L + +#define LN_mailPreferenceOption "mailPreferenceOption" +#define NID_mailPreferenceOption 493 +#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L + +#define LN_buildingName "buildingName" +#define NID_buildingName 494 +#define OBJ_buildingName OBJ_pilotAttributeType,48L + +#define LN_dSAQuality "dSAQuality" +#define NID_dSAQuality 495 +#define OBJ_dSAQuality OBJ_pilotAttributeType,49L + +#define LN_singleLevelQuality "singleLevelQuality" +#define NID_singleLevelQuality 496 +#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L + +#define LN_subtreeMinimumQuality "subtreeMinimumQuality" +#define NID_subtreeMinimumQuality 497 +#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L + +#define LN_subtreeMaximumQuality "subtreeMaximumQuality" +#define NID_subtreeMaximumQuality 498 +#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L + +#define LN_personalSignature "personalSignature" +#define NID_personalSignature 499 +#define OBJ_personalSignature OBJ_pilotAttributeType,53L + +#define LN_dITRedirect "dITRedirect" +#define NID_dITRedirect 500 +#define OBJ_dITRedirect OBJ_pilotAttributeType,54L + +#define SN_audio "audio" +#define NID_audio 501 +#define OBJ_audio OBJ_pilotAttributeType,55L + +#define LN_documentPublisher "documentPublisher" +#define NID_documentPublisher 502 +#define OBJ_documentPublisher OBJ_pilotAttributeType,56L + +#define SN_id_set "id-set" +#define LN_id_set "Secure Electronic Transactions" +#define NID_id_set 512 +#define OBJ_id_set OBJ_international_organizations,42L + +#define SN_set_ctype "set-ctype" +#define LN_set_ctype "content types" +#define NID_set_ctype 513 +#define OBJ_set_ctype OBJ_id_set,0L + +#define SN_set_msgExt "set-msgExt" +#define LN_set_msgExt "message extensions" +#define NID_set_msgExt 514 +#define OBJ_set_msgExt OBJ_id_set,1L + +#define SN_set_attr "set-attr" +#define NID_set_attr 515 +#define OBJ_set_attr OBJ_id_set,3L + +#define SN_set_policy "set-policy" +#define NID_set_policy 516 +#define OBJ_set_policy OBJ_id_set,5L + +#define SN_set_certExt "set-certExt" +#define LN_set_certExt "certificate extensions" +#define NID_set_certExt 517 +#define OBJ_set_certExt OBJ_id_set,7L + +#define SN_set_brand "set-brand" +#define NID_set_brand 518 +#define OBJ_set_brand OBJ_id_set,8L + +#define SN_setct_PANData "setct-PANData" +#define NID_setct_PANData 519 +#define OBJ_setct_PANData OBJ_set_ctype,0L + +#define SN_setct_PANToken "setct-PANToken" +#define NID_setct_PANToken 520 +#define OBJ_setct_PANToken OBJ_set_ctype,1L + +#define SN_setct_PANOnly "setct-PANOnly" +#define NID_setct_PANOnly 521 +#define OBJ_setct_PANOnly OBJ_set_ctype,2L + +#define SN_setct_OIData "setct-OIData" +#define NID_setct_OIData 522 +#define OBJ_setct_OIData OBJ_set_ctype,3L + +#define SN_setct_PI "setct-PI" +#define NID_setct_PI 523 +#define OBJ_setct_PI OBJ_set_ctype,4L + +#define SN_setct_PIData "setct-PIData" +#define NID_setct_PIData 524 +#define OBJ_setct_PIData OBJ_set_ctype,5L + +#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" +#define NID_setct_PIDataUnsigned 525 +#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L + +#define SN_setct_HODInput "setct-HODInput" +#define NID_setct_HODInput 526 +#define OBJ_setct_HODInput OBJ_set_ctype,7L + +#define SN_setct_AuthResBaggage "setct-AuthResBaggage" +#define NID_setct_AuthResBaggage 527 +#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L + +#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" +#define NID_setct_AuthRevReqBaggage 528 +#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L + +#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" +#define NID_setct_AuthRevResBaggage 529 +#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L + +#define SN_setct_CapTokenSeq "setct-CapTokenSeq" +#define NID_setct_CapTokenSeq 530 +#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L + +#define SN_setct_PInitResData "setct-PInitResData" +#define NID_setct_PInitResData 531 +#define OBJ_setct_PInitResData OBJ_set_ctype,12L + +#define SN_setct_PI_TBS "setct-PI-TBS" +#define NID_setct_PI_TBS 532 +#define OBJ_setct_PI_TBS OBJ_set_ctype,13L + +#define SN_setct_PResData "setct-PResData" +#define NID_setct_PResData 533 +#define OBJ_setct_PResData OBJ_set_ctype,14L + +#define SN_setct_AuthReqTBS "setct-AuthReqTBS" +#define NID_setct_AuthReqTBS 534 +#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L + +#define SN_setct_AuthResTBS "setct-AuthResTBS" +#define NID_setct_AuthResTBS 535 +#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L + +#define SN_setct_AuthResTBSX "setct-AuthResTBSX" +#define NID_setct_AuthResTBSX 536 +#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L + +#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" +#define NID_setct_AuthTokenTBS 537 +#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L + +#define SN_setct_CapTokenData "setct-CapTokenData" +#define NID_setct_CapTokenData 538 +#define OBJ_setct_CapTokenData OBJ_set_ctype,20L + +#define SN_setct_CapTokenTBS "setct-CapTokenTBS" +#define NID_setct_CapTokenTBS 539 +#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L + +#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" +#define NID_setct_AcqCardCodeMsg 540 +#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L + +#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" +#define NID_setct_AuthRevReqTBS 541 +#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L + +#define SN_setct_AuthRevResData "setct-AuthRevResData" +#define NID_setct_AuthRevResData 542 +#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L + +#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" +#define NID_setct_AuthRevResTBS 543 +#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L + +#define SN_setct_CapReqTBS "setct-CapReqTBS" +#define NID_setct_CapReqTBS 544 +#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L + +#define SN_setct_CapReqTBSX "setct-CapReqTBSX" +#define NID_setct_CapReqTBSX 545 +#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L + +#define SN_setct_CapResData "setct-CapResData" +#define NID_setct_CapResData 546 +#define OBJ_setct_CapResData OBJ_set_ctype,28L + +#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" +#define NID_setct_CapRevReqTBS 547 +#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L + +#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" +#define NID_setct_CapRevReqTBSX 548 +#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L + +#define SN_setct_CapRevResData "setct-CapRevResData" +#define NID_setct_CapRevResData 549 +#define OBJ_setct_CapRevResData OBJ_set_ctype,31L + +#define SN_setct_CredReqTBS "setct-CredReqTBS" +#define NID_setct_CredReqTBS 550 +#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L + +#define SN_setct_CredReqTBSX "setct-CredReqTBSX" +#define NID_setct_CredReqTBSX 551 +#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L + +#define SN_setct_CredResData "setct-CredResData" +#define NID_setct_CredResData 552 +#define OBJ_setct_CredResData OBJ_set_ctype,34L + +#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" +#define NID_setct_CredRevReqTBS 553 +#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L + +#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" +#define NID_setct_CredRevReqTBSX 554 +#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L + +#define SN_setct_CredRevResData "setct-CredRevResData" +#define NID_setct_CredRevResData 555 +#define OBJ_setct_CredRevResData OBJ_set_ctype,37L + +#define SN_setct_PCertReqData "setct-PCertReqData" +#define NID_setct_PCertReqData 556 +#define OBJ_setct_PCertReqData OBJ_set_ctype,38L + +#define SN_setct_PCertResTBS "setct-PCertResTBS" +#define NID_setct_PCertResTBS 557 +#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L + +#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" +#define NID_setct_BatchAdminReqData 558 +#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L + +#define SN_setct_BatchAdminResData "setct-BatchAdminResData" +#define NID_setct_BatchAdminResData 559 +#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L + +#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" +#define NID_setct_CardCInitResTBS 560 +#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L + +#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" +#define NID_setct_MeAqCInitResTBS 561 +#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L + +#define SN_setct_RegFormResTBS "setct-RegFormResTBS" +#define NID_setct_RegFormResTBS 562 +#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L + +#define SN_setct_CertReqData "setct-CertReqData" +#define NID_setct_CertReqData 563 +#define OBJ_setct_CertReqData OBJ_set_ctype,45L + +#define SN_setct_CertReqTBS "setct-CertReqTBS" +#define NID_setct_CertReqTBS 564 +#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L + +#define SN_setct_CertResData "setct-CertResData" +#define NID_setct_CertResData 565 +#define OBJ_setct_CertResData OBJ_set_ctype,47L + +#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" +#define NID_setct_CertInqReqTBS 566 +#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L + +#define SN_setct_ErrorTBS "setct-ErrorTBS" +#define NID_setct_ErrorTBS 567 +#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L + +#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" +#define NID_setct_PIDualSignedTBE 568 +#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L + +#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" +#define NID_setct_PIUnsignedTBE 569 +#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L + +#define SN_setct_AuthReqTBE "setct-AuthReqTBE" +#define NID_setct_AuthReqTBE 570 +#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L + +#define SN_setct_AuthResTBE "setct-AuthResTBE" +#define NID_setct_AuthResTBE 571 +#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L + +#define SN_setct_AuthResTBEX "setct-AuthResTBEX" +#define NID_setct_AuthResTBEX 572 +#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L + +#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" +#define NID_setct_AuthTokenTBE 573 +#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L + +#define SN_setct_CapTokenTBE "setct-CapTokenTBE" +#define NID_setct_CapTokenTBE 574 +#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L + +#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" +#define NID_setct_CapTokenTBEX 575 +#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L + +#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" +#define NID_setct_AcqCardCodeMsgTBE 576 +#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L + +#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" +#define NID_setct_AuthRevReqTBE 577 +#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L + +#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" +#define NID_setct_AuthRevResTBE 578 +#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L + +#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" +#define NID_setct_AuthRevResTBEB 579 +#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L + +#define SN_setct_CapReqTBE "setct-CapReqTBE" +#define NID_setct_CapReqTBE 580 +#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L + +#define SN_setct_CapReqTBEX "setct-CapReqTBEX" +#define NID_setct_CapReqTBEX 581 +#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L + +#define SN_setct_CapResTBE "setct-CapResTBE" +#define NID_setct_CapResTBE 582 +#define OBJ_setct_CapResTBE OBJ_set_ctype,64L + +#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" +#define NID_setct_CapRevReqTBE 583 +#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L + +#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" +#define NID_setct_CapRevReqTBEX 584 +#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L + +#define SN_setct_CapRevResTBE "setct-CapRevResTBE" +#define NID_setct_CapRevResTBE 585 +#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L + +#define SN_setct_CredReqTBE "setct-CredReqTBE" +#define NID_setct_CredReqTBE 586 +#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L + +#define SN_setct_CredReqTBEX "setct-CredReqTBEX" +#define NID_setct_CredReqTBEX 587 +#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L + +#define SN_setct_CredResTBE "setct-CredResTBE" +#define NID_setct_CredResTBE 588 +#define OBJ_setct_CredResTBE OBJ_set_ctype,70L + +#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" +#define NID_setct_CredRevReqTBE 589 +#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L + +#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" +#define NID_setct_CredRevReqTBEX 590 +#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L + +#define SN_setct_CredRevResTBE "setct-CredRevResTBE" +#define NID_setct_CredRevResTBE 591 +#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L + +#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" +#define NID_setct_BatchAdminReqTBE 592 +#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L + +#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" +#define NID_setct_BatchAdminResTBE 593 +#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L + +#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" +#define NID_setct_RegFormReqTBE 594 +#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L + +#define SN_setct_CertReqTBE "setct-CertReqTBE" +#define NID_setct_CertReqTBE 595 +#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L + +#define SN_setct_CertReqTBEX "setct-CertReqTBEX" +#define NID_setct_CertReqTBEX 596 +#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L + +#define SN_setct_CertResTBE "setct-CertResTBE" +#define NID_setct_CertResTBE 597 +#define OBJ_setct_CertResTBE OBJ_set_ctype,79L + +#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" +#define NID_setct_CRLNotificationTBS 598 +#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L + +#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" +#define NID_setct_CRLNotificationResTBS 599 +#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L + +#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" +#define NID_setct_BCIDistributionTBS 600 +#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L + +#define SN_setext_genCrypt "setext-genCrypt" +#define LN_setext_genCrypt "generic cryptogram" +#define NID_setext_genCrypt 601 +#define OBJ_setext_genCrypt OBJ_set_msgExt,1L + +#define SN_setext_miAuth "setext-miAuth" +#define LN_setext_miAuth "merchant initiated auth" +#define NID_setext_miAuth 602 +#define OBJ_setext_miAuth OBJ_set_msgExt,3L + +#define SN_setext_pinSecure "setext-pinSecure" +#define NID_setext_pinSecure 603 +#define OBJ_setext_pinSecure OBJ_set_msgExt,4L + +#define SN_setext_pinAny "setext-pinAny" +#define NID_setext_pinAny 604 +#define OBJ_setext_pinAny OBJ_set_msgExt,5L + +#define SN_setext_track2 "setext-track2" +#define NID_setext_track2 605 +#define OBJ_setext_track2 OBJ_set_msgExt,7L + +#define SN_setext_cv "setext-cv" +#define LN_setext_cv "additional verification" +#define NID_setext_cv 606 +#define OBJ_setext_cv OBJ_set_msgExt,8L + +#define SN_set_policy_root "set-policy-root" +#define NID_set_policy_root 607 +#define OBJ_set_policy_root OBJ_set_policy,0L + +#define SN_setCext_hashedRoot "setCext-hashedRoot" +#define NID_setCext_hashedRoot 608 +#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L + +#define SN_setCext_certType "setCext-certType" +#define NID_setCext_certType 609 +#define OBJ_setCext_certType OBJ_set_certExt,1L + +#define SN_setCext_merchData "setCext-merchData" +#define NID_setCext_merchData 610 +#define OBJ_setCext_merchData OBJ_set_certExt,2L + +#define SN_setCext_cCertRequired "setCext-cCertRequired" +#define NID_setCext_cCertRequired 611 +#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L + +#define SN_setCext_tunneling "setCext-tunneling" +#define NID_setCext_tunneling 612 +#define OBJ_setCext_tunneling OBJ_set_certExt,4L + +#define SN_setCext_setExt "setCext-setExt" +#define NID_setCext_setExt 613 +#define OBJ_setCext_setExt OBJ_set_certExt,5L + +#define SN_setCext_setQualf "setCext-setQualf" +#define NID_setCext_setQualf 614 +#define OBJ_setCext_setQualf OBJ_set_certExt,6L + +#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" +#define NID_setCext_PGWYcapabilities 615 +#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L + +#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" +#define NID_setCext_TokenIdentifier 616 +#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L + +#define SN_setCext_Track2Data "setCext-Track2Data" +#define NID_setCext_Track2Data 617 +#define OBJ_setCext_Track2Data OBJ_set_certExt,9L + +#define SN_setCext_TokenType "setCext-TokenType" +#define NID_setCext_TokenType 618 +#define OBJ_setCext_TokenType OBJ_set_certExt,10L + +#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" +#define NID_setCext_IssuerCapabilities 619 +#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L + +#define SN_setAttr_Cert "setAttr-Cert" +#define NID_setAttr_Cert 620 +#define OBJ_setAttr_Cert OBJ_set_attr,0L + +#define SN_setAttr_PGWYcap "setAttr-PGWYcap" +#define LN_setAttr_PGWYcap "payment gateway capabilities" +#define NID_setAttr_PGWYcap 621 +#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L + +#define SN_setAttr_TokenType "setAttr-TokenType" +#define NID_setAttr_TokenType 622 +#define OBJ_setAttr_TokenType OBJ_set_attr,2L + +#define SN_setAttr_IssCap "setAttr-IssCap" +#define LN_setAttr_IssCap "issuer capabilities" +#define NID_setAttr_IssCap 623 +#define OBJ_setAttr_IssCap OBJ_set_attr,3L + +#define SN_set_rootKeyThumb "set-rootKeyThumb" +#define NID_set_rootKeyThumb 624 +#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L + +#define SN_set_addPolicy "set-addPolicy" +#define NID_set_addPolicy 625 +#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L + +#define SN_setAttr_Token_EMV "setAttr-Token-EMV" +#define NID_setAttr_Token_EMV 626 +#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L + +#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" +#define NID_setAttr_Token_B0Prime 627 +#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L + +#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" +#define NID_setAttr_IssCap_CVM 628 +#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L + +#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" +#define NID_setAttr_IssCap_T2 629 +#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L + +#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" +#define NID_setAttr_IssCap_Sig 630 +#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L + +#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" +#define LN_setAttr_GenCryptgrm "generate cryptogram" +#define NID_setAttr_GenCryptgrm 631 +#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L + +#define SN_setAttr_T2Enc "setAttr-T2Enc" +#define LN_setAttr_T2Enc "encrypted track 2" +#define NID_setAttr_T2Enc 632 +#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L + +#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" +#define LN_setAttr_T2cleartxt "cleartext track 2" +#define NID_setAttr_T2cleartxt 633 +#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L + +#define SN_setAttr_TokICCsig "setAttr-TokICCsig" +#define LN_setAttr_TokICCsig "ICC or token signature" +#define NID_setAttr_TokICCsig 634 +#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L + +#define SN_setAttr_SecDevSig "setAttr-SecDevSig" +#define LN_setAttr_SecDevSig "secure device signature" +#define NID_setAttr_SecDevSig 635 +#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L + +#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" +#define NID_set_brand_IATA_ATA 636 +#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L + +#define SN_set_brand_Diners "set-brand-Diners" +#define NID_set_brand_Diners 637 +#define OBJ_set_brand_Diners OBJ_set_brand,30L + +#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" +#define NID_set_brand_AmericanExpress 638 +#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L + +#define SN_set_brand_JCB "set-brand-JCB" +#define NID_set_brand_JCB 639 +#define OBJ_set_brand_JCB OBJ_set_brand,35L + +#define SN_set_brand_Visa "set-brand-Visa" +#define NID_set_brand_Visa 640 +#define OBJ_set_brand_Visa OBJ_set_brand,4L + +#define SN_set_brand_MasterCard "set-brand-MasterCard" +#define NID_set_brand_MasterCard 641 +#define OBJ_set_brand_MasterCard OBJ_set_brand,5L + +#define SN_set_brand_Novus "set-brand-Novus" +#define NID_set_brand_Novus 642 +#define OBJ_set_brand_Novus OBJ_set_brand,6011L + +#define SN_des_cdmf "DES-CDMF" +#define LN_des_cdmf "des-cdmf" +#define NID_des_cdmf 643 +#define OBJ_des_cdmf OBJ_rsadsi,3L,10L + +#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" +#define NID_rsaOAEPEncryptionSET 644 +#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L + +#define SN_ipsec3 "Oakley-EC2N-3" +#define LN_ipsec3 "ipsec3" +#define NID_ipsec3 749 + +#define SN_ipsec4 "Oakley-EC2N-4" +#define LN_ipsec4 "ipsec4" +#define NID_ipsec4 750 + +#define SN_whirlpool "whirlpool" +#define NID_whirlpool 804 +#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L + +#define SN_cryptopro "cryptopro" +#define NID_cryptopro 805 +#define OBJ_cryptopro OBJ_member_body,643L,2L,2L + +#define SN_cryptocom "cryptocom" +#define NID_cryptocom 806 +#define OBJ_cryptocom OBJ_member_body,643L,2L,9L + +#define SN_id_tc26 "id-tc26" +#define NID_id_tc26 974 +#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L + +#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" +#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" +#define NID_id_GostR3411_94_with_GostR3410_2001 807 +#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L + +#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" +#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" +#define NID_id_GostR3411_94_with_GostR3410_94 808 +#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L + +#define SN_id_GostR3411_94 "md_gost94" +#define LN_id_GostR3411_94 "GOST R 34.11-94" +#define NID_id_GostR3411_94 809 +#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L + +#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" +#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" +#define NID_id_HMACGostR3411_94 810 +#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L + +#define SN_id_GostR3410_2001 "gost2001" +#define LN_id_GostR3410_2001 "GOST R 34.10-2001" +#define NID_id_GostR3410_2001 811 +#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L + +#define SN_id_GostR3410_94 "gost94" +#define LN_id_GostR3410_94 "GOST R 34.10-94" +#define NID_id_GostR3410_94 812 +#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L + +#define SN_id_Gost28147_89 "gost89" +#define LN_id_Gost28147_89 "GOST 28147-89" +#define NID_id_Gost28147_89 813 +#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L + +#define SN_gost89_cnt "gost89-cnt" +#define NID_gost89_cnt 814 + +#define SN_gost89_cnt_12 "gost89-cnt-12" +#define NID_gost89_cnt_12 975 + +#define SN_gost89_cbc "gost89-cbc" +#define NID_gost89_cbc 1009 + +#define SN_gost89_ecb "gost89-ecb" +#define NID_gost89_ecb 1010 + +#define SN_gost89_ctr "gost89-ctr" +#define NID_gost89_ctr 1011 + +#define SN_id_Gost28147_89_MAC "gost-mac" +#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" +#define NID_id_Gost28147_89_MAC 815 +#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L + +#define SN_gost_mac_12 "gost-mac-12" +#define NID_gost_mac_12 976 + +#define SN_id_GostR3411_94_prf "prf-gostr3411-94" +#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" +#define NID_id_GostR3411_94_prf 816 +#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L + +#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" +#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" +#define NID_id_GostR3410_2001DH 817 +#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L + +#define SN_id_GostR3410_94DH "id-GostR3410-94DH" +#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" +#define NID_id_GostR3410_94DH 818 +#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L + +#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" +#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 +#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L + +#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" +#define NID_id_Gost28147_89_None_KeyMeshing 820 +#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L + +#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" +#define NID_id_GostR3411_94_TestParamSet 821 +#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L + +#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" +#define NID_id_GostR3411_94_CryptoProParamSet 822 +#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L + +#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" +#define NID_id_Gost28147_89_TestParamSet 823 +#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L + +#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 +#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L + +#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 +#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L + +#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 +#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L + +#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 +#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L + +#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 +#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L + +#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" +#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 +#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L + +#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" +#define NID_id_GostR3410_94_TestParamSet 831 +#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L + +#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 +#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L + +#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 +#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L + +#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 +#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L + +#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 +#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L + +#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 +#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L + +#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 +#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L + +#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" +#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 +#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L + +#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" +#define NID_id_GostR3410_2001_TestParamSet 839 +#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L + +#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 +#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L + +#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 +#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L + +#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 +#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L + +#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 +#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L + +#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" +#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 +#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L + +#define SN_id_GostR3410_94_a "id-GostR3410-94-a" +#define NID_id_GostR3410_94_a 845 +#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L + +#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" +#define NID_id_GostR3410_94_aBis 846 +#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L + +#define SN_id_GostR3410_94_b "id-GostR3410-94-b" +#define NID_id_GostR3410_94_b 847 +#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L + +#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" +#define NID_id_GostR3410_94_bBis 848 +#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L + +#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" +#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" +#define NID_id_Gost28147_89_cc 849 +#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L + +#define SN_id_GostR3410_94_cc "gost94cc" +#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" +#define NID_id_GostR3410_94_cc 850 +#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L + +#define SN_id_GostR3410_2001_cc "gost2001cc" +#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" +#define NID_id_GostR3410_2001_cc 851 +#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L + +#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" +#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 +#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L + +#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" +#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" +#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 +#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L + +#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" +#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" +#define NID_id_GostR3410_2001_ParamSet_cc 854 +#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L + +#define SN_id_tc26_algorithms "id-tc26-algorithms" +#define NID_id_tc26_algorithms 977 +#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L + +#define SN_id_tc26_sign "id-tc26-sign" +#define NID_id_tc26_sign 978 +#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L + +#define SN_id_GostR3410_2012_256 "gost2012_256" +#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" +#define NID_id_GostR3410_2012_256 979 +#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L + +#define SN_id_GostR3410_2012_512 "gost2012_512" +#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" +#define NID_id_GostR3410_2012_512 980 +#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L + +#define SN_id_tc26_digest "id-tc26-digest" +#define NID_id_tc26_digest 981 +#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L + +#define SN_id_GostR3411_2012_256 "md_gost12_256" +#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" +#define NID_id_GostR3411_2012_256 982 +#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L + +#define SN_id_GostR3411_2012_512 "md_gost12_512" +#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" +#define NID_id_GostR3411_2012_512 983 +#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L + +#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" +#define NID_id_tc26_signwithdigest 984 +#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L + +#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" +#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L + +#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" +#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" +#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 +#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L + +#define SN_id_tc26_mac "id-tc26-mac" +#define NID_id_tc26_mac 987 +#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L + +#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" +#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" +#define NID_id_tc26_hmac_gost_3411_2012_256 988 +#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L + +#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" +#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" +#define NID_id_tc26_hmac_gost_3411_2012_512 989 +#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L + +#define SN_id_tc26_cipher "id-tc26-cipher" +#define NID_id_tc26_cipher 990 +#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L + +#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" +#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm "id-tc26-cipher-gostr3412-2015-magma-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm 1174 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_magma,1L + +#define SN_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-magma-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac 1175 +#define OBJ_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_magma,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik "id-tc26-cipher-gostr3412-2015-kuznyechik" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik 1176 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik OBJ_id_tc26_cipher,2L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm 1177 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,1L + +#define SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac "id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm-omac" +#define NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac 1178 +#define OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac OBJ_id_tc26_cipher_gostr3412_2015_kuznyechik,2L + +#define SN_id_tc26_agreement "id-tc26-agreement" +#define NID_id_tc26_agreement 991 +#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L + +#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" +#define NID_id_tc26_agreement_gost_3410_2012_256 992 +#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L + +#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" +#define NID_id_tc26_agreement_gost_3410_2012_512 993 +#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L + +#define SN_id_tc26_wrap "id-tc26-wrap" +#define NID_id_tc26_wrap 1179 +#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L + +#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" +#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,1L + +#define SN_id_tc26_wrap_gostr3412_2015_magma_kexp15 "id-tc26-wrap-gostr3412-2015-magma-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_magma_kexp15 1181 +#define OBJ_id_tc26_wrap_gostr3412_2015_magma_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_magma,1L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik "id-tc26-wrap-gostr3412-2015-kuznyechik" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik 1182 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik OBJ_id_tc26_wrap,2L + +#define SN_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 "id-tc26-wrap-gostr3412-2015-kuznyechik-kexp15" +#define NID_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 1183 +#define OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik_kexp15 OBJ_id_tc26_wrap_gostr3412_2015_kuznyechik,1L + +#define SN_id_tc26_constants "id-tc26-constants" +#define NID_id_tc26_constants 994 +#define OBJ_id_tc26_constants OBJ_id_tc26,2L + +#define SN_id_tc26_sign_constants "id-tc26-sign-constants" +#define NID_id_tc26_sign_constants 995 +#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" +#define NID_id_tc26_gost_3410_2012_256_constants 1147 +#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" +#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L + +#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" +#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L + +#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" +#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L + +#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" +#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" +#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 +#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L + +#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" +#define NID_id_tc26_gost_3410_2012_512_constants 996 +#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" +#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" +#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L + +#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" +#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" +#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L + +#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" +#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" +#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L + +#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" +#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" +#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 +#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L + +#define SN_id_tc26_digest_constants "id-tc26-digest-constants" +#define NID_id_tc26_digest_constants 1000 +#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L + +#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" +#define NID_id_tc26_cipher_constants 1001 +#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L + +#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" +#define NID_id_tc26_gost_28147_constants 1002 +#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L + +#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" +#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" +#define NID_id_tc26_gost_28147_param_Z 1003 +#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L + +#define SN_INN "INN" +#define LN_INN "INN" +#define NID_INN 1004 +#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L + +#define SN_OGRN "OGRN" +#define LN_OGRN "OGRN" +#define NID_OGRN 1005 +#define OBJ_OGRN OBJ_member_body,643L,100L,1L + +#define SN_SNILS "SNILS" +#define LN_SNILS "SNILS" +#define NID_SNILS 1006 +#define OBJ_SNILS OBJ_member_body,643L,100L,3L + +#define SN_subjectSignTool "subjectSignTool" +#define LN_subjectSignTool "Signing Tool of Subject" +#define NID_subjectSignTool 1007 +#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L + +#define SN_issuerSignTool "issuerSignTool" +#define LN_issuerSignTool "Signing Tool of Issuer" +#define NID_issuerSignTool 1008 +#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L + +#define SN_grasshopper_ecb "grasshopper-ecb" +#define NID_grasshopper_ecb 1012 + +#define SN_grasshopper_ctr "grasshopper-ctr" +#define NID_grasshopper_ctr 1013 + +#define SN_grasshopper_ofb "grasshopper-ofb" +#define NID_grasshopper_ofb 1014 + +#define SN_grasshopper_cbc "grasshopper-cbc" +#define NID_grasshopper_cbc 1015 + +#define SN_grasshopper_cfb "grasshopper-cfb" +#define NID_grasshopper_cfb 1016 + +#define SN_grasshopper_mac "grasshopper-mac" +#define NID_grasshopper_mac 1017 + +#define SN_magma_ecb "magma-ecb" +#define NID_magma_ecb 1187 + +#define SN_magma_ctr "magma-ctr" +#define NID_magma_ctr 1188 + +#define SN_magma_ofb "magma-ofb" +#define NID_magma_ofb 1189 + +#define SN_magma_cbc "magma-cbc" +#define NID_magma_cbc 1190 + +#define SN_magma_cfb "magma-cfb" +#define NID_magma_cfb 1191 + +#define SN_magma_mac "magma-mac" +#define NID_magma_mac 1192 + +#define SN_camellia_128_cbc "CAMELLIA-128-CBC" +#define LN_camellia_128_cbc "camellia-128-cbc" +#define NID_camellia_128_cbc 751 +#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L + +#define SN_camellia_192_cbc "CAMELLIA-192-CBC" +#define LN_camellia_192_cbc "camellia-192-cbc" +#define NID_camellia_192_cbc 752 +#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L + +#define SN_camellia_256_cbc "CAMELLIA-256-CBC" +#define LN_camellia_256_cbc "camellia-256-cbc" +#define NID_camellia_256_cbc 753 +#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L + +#define SN_id_camellia128_wrap "id-camellia128-wrap" +#define NID_id_camellia128_wrap 907 +#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L + +#define SN_id_camellia192_wrap "id-camellia192-wrap" +#define NID_id_camellia192_wrap 908 +#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L + +#define SN_id_camellia256_wrap "id-camellia256-wrap" +#define NID_id_camellia256_wrap 909 +#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L + +#define OBJ_ntt_ds 0L,3L,4401L,5L + +#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L + +#define SN_camellia_128_ecb "CAMELLIA-128-ECB" +#define LN_camellia_128_ecb "camellia-128-ecb" +#define NID_camellia_128_ecb 754 +#define OBJ_camellia_128_ecb OBJ_camellia,1L + +#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" +#define LN_camellia_128_ofb128 "camellia-128-ofb" +#define NID_camellia_128_ofb128 766 +#define OBJ_camellia_128_ofb128 OBJ_camellia,3L + +#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" +#define LN_camellia_128_cfb128 "camellia-128-cfb" +#define NID_camellia_128_cfb128 757 +#define OBJ_camellia_128_cfb128 OBJ_camellia,4L + +#define SN_camellia_128_gcm "CAMELLIA-128-GCM" +#define LN_camellia_128_gcm "camellia-128-gcm" +#define NID_camellia_128_gcm 961 +#define OBJ_camellia_128_gcm OBJ_camellia,6L + +#define SN_camellia_128_ccm "CAMELLIA-128-CCM" +#define LN_camellia_128_ccm "camellia-128-ccm" +#define NID_camellia_128_ccm 962 +#define OBJ_camellia_128_ccm OBJ_camellia,7L + +#define SN_camellia_128_ctr "CAMELLIA-128-CTR" +#define LN_camellia_128_ctr "camellia-128-ctr" +#define NID_camellia_128_ctr 963 +#define OBJ_camellia_128_ctr OBJ_camellia,9L + +#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" +#define LN_camellia_128_cmac "camellia-128-cmac" +#define NID_camellia_128_cmac 964 +#define OBJ_camellia_128_cmac OBJ_camellia,10L + +#define SN_camellia_192_ecb "CAMELLIA-192-ECB" +#define LN_camellia_192_ecb "camellia-192-ecb" +#define NID_camellia_192_ecb 755 +#define OBJ_camellia_192_ecb OBJ_camellia,21L + +#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" +#define LN_camellia_192_ofb128 "camellia-192-ofb" +#define NID_camellia_192_ofb128 767 +#define OBJ_camellia_192_ofb128 OBJ_camellia,23L + +#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" +#define LN_camellia_192_cfb128 "camellia-192-cfb" +#define NID_camellia_192_cfb128 758 +#define OBJ_camellia_192_cfb128 OBJ_camellia,24L + +#define SN_camellia_192_gcm "CAMELLIA-192-GCM" +#define LN_camellia_192_gcm "camellia-192-gcm" +#define NID_camellia_192_gcm 965 +#define OBJ_camellia_192_gcm OBJ_camellia,26L + +#define SN_camellia_192_ccm "CAMELLIA-192-CCM" +#define LN_camellia_192_ccm "camellia-192-ccm" +#define NID_camellia_192_ccm 966 +#define OBJ_camellia_192_ccm OBJ_camellia,27L + +#define SN_camellia_192_ctr "CAMELLIA-192-CTR" +#define LN_camellia_192_ctr "camellia-192-ctr" +#define NID_camellia_192_ctr 967 +#define OBJ_camellia_192_ctr OBJ_camellia,29L + +#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" +#define LN_camellia_192_cmac "camellia-192-cmac" +#define NID_camellia_192_cmac 968 +#define OBJ_camellia_192_cmac OBJ_camellia,30L + +#define SN_camellia_256_ecb "CAMELLIA-256-ECB" +#define LN_camellia_256_ecb "camellia-256-ecb" +#define NID_camellia_256_ecb 756 +#define OBJ_camellia_256_ecb OBJ_camellia,41L + +#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" +#define LN_camellia_256_ofb128 "camellia-256-ofb" +#define NID_camellia_256_ofb128 768 +#define OBJ_camellia_256_ofb128 OBJ_camellia,43L + +#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" +#define LN_camellia_256_cfb128 "camellia-256-cfb" +#define NID_camellia_256_cfb128 759 +#define OBJ_camellia_256_cfb128 OBJ_camellia,44L + +#define SN_camellia_256_gcm "CAMELLIA-256-GCM" +#define LN_camellia_256_gcm "camellia-256-gcm" +#define NID_camellia_256_gcm 969 +#define OBJ_camellia_256_gcm OBJ_camellia,46L + +#define SN_camellia_256_ccm "CAMELLIA-256-CCM" +#define LN_camellia_256_ccm "camellia-256-ccm" +#define NID_camellia_256_ccm 970 +#define OBJ_camellia_256_ccm OBJ_camellia,47L + +#define SN_camellia_256_ctr "CAMELLIA-256-CTR" +#define LN_camellia_256_ctr "camellia-256-ctr" +#define NID_camellia_256_ctr 971 +#define OBJ_camellia_256_ctr OBJ_camellia,49L + +#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" +#define LN_camellia_256_cmac "camellia-256-cmac" +#define NID_camellia_256_cmac 972 +#define OBJ_camellia_256_cmac OBJ_camellia,50L + +#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" +#define LN_camellia_128_cfb1 "camellia-128-cfb1" +#define NID_camellia_128_cfb1 760 + +#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" +#define LN_camellia_192_cfb1 "camellia-192-cfb1" +#define NID_camellia_192_cfb1 761 + +#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" +#define LN_camellia_256_cfb1 "camellia-256-cfb1" +#define NID_camellia_256_cfb1 762 + +#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" +#define LN_camellia_128_cfb8 "camellia-128-cfb8" +#define NID_camellia_128_cfb8 763 + +#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" +#define LN_camellia_192_cfb8 "camellia-192-cfb8" +#define NID_camellia_192_cfb8 764 + +#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" +#define LN_camellia_256_cfb8 "camellia-256-cfb8" +#define NID_camellia_256_cfb8 765 + +#define OBJ_aria 1L,2L,410L,200046L,1L,1L + +#define SN_aria_128_ecb "ARIA-128-ECB" +#define LN_aria_128_ecb "aria-128-ecb" +#define NID_aria_128_ecb 1065 +#define OBJ_aria_128_ecb OBJ_aria,1L + +#define SN_aria_128_cbc "ARIA-128-CBC" +#define LN_aria_128_cbc "aria-128-cbc" +#define NID_aria_128_cbc 1066 +#define OBJ_aria_128_cbc OBJ_aria,2L + +#define SN_aria_128_cfb128 "ARIA-128-CFB" +#define LN_aria_128_cfb128 "aria-128-cfb" +#define NID_aria_128_cfb128 1067 +#define OBJ_aria_128_cfb128 OBJ_aria,3L + +#define SN_aria_128_ofb128 "ARIA-128-OFB" +#define LN_aria_128_ofb128 "aria-128-ofb" +#define NID_aria_128_ofb128 1068 +#define OBJ_aria_128_ofb128 OBJ_aria,4L + +#define SN_aria_128_ctr "ARIA-128-CTR" +#define LN_aria_128_ctr "aria-128-ctr" +#define NID_aria_128_ctr 1069 +#define OBJ_aria_128_ctr OBJ_aria,5L + +#define SN_aria_192_ecb "ARIA-192-ECB" +#define LN_aria_192_ecb "aria-192-ecb" +#define NID_aria_192_ecb 1070 +#define OBJ_aria_192_ecb OBJ_aria,6L + +#define SN_aria_192_cbc "ARIA-192-CBC" +#define LN_aria_192_cbc "aria-192-cbc" +#define NID_aria_192_cbc 1071 +#define OBJ_aria_192_cbc OBJ_aria,7L + +#define SN_aria_192_cfb128 "ARIA-192-CFB" +#define LN_aria_192_cfb128 "aria-192-cfb" +#define NID_aria_192_cfb128 1072 +#define OBJ_aria_192_cfb128 OBJ_aria,8L + +#define SN_aria_192_ofb128 "ARIA-192-OFB" +#define LN_aria_192_ofb128 "aria-192-ofb" +#define NID_aria_192_ofb128 1073 +#define OBJ_aria_192_ofb128 OBJ_aria,9L + +#define SN_aria_192_ctr "ARIA-192-CTR" +#define LN_aria_192_ctr "aria-192-ctr" +#define NID_aria_192_ctr 1074 +#define OBJ_aria_192_ctr OBJ_aria,10L + +#define SN_aria_256_ecb "ARIA-256-ECB" +#define LN_aria_256_ecb "aria-256-ecb" +#define NID_aria_256_ecb 1075 +#define OBJ_aria_256_ecb OBJ_aria,11L + +#define SN_aria_256_cbc "ARIA-256-CBC" +#define LN_aria_256_cbc "aria-256-cbc" +#define NID_aria_256_cbc 1076 +#define OBJ_aria_256_cbc OBJ_aria,12L + +#define SN_aria_256_cfb128 "ARIA-256-CFB" +#define LN_aria_256_cfb128 "aria-256-cfb" +#define NID_aria_256_cfb128 1077 +#define OBJ_aria_256_cfb128 OBJ_aria,13L + +#define SN_aria_256_ofb128 "ARIA-256-OFB" +#define LN_aria_256_ofb128 "aria-256-ofb" +#define NID_aria_256_ofb128 1078 +#define OBJ_aria_256_ofb128 OBJ_aria,14L + +#define SN_aria_256_ctr "ARIA-256-CTR" +#define LN_aria_256_ctr "aria-256-ctr" +#define NID_aria_256_ctr 1079 +#define OBJ_aria_256_ctr OBJ_aria,15L + +#define SN_aria_128_cfb1 "ARIA-128-CFB1" +#define LN_aria_128_cfb1 "aria-128-cfb1" +#define NID_aria_128_cfb1 1080 + +#define SN_aria_192_cfb1 "ARIA-192-CFB1" +#define LN_aria_192_cfb1 "aria-192-cfb1" +#define NID_aria_192_cfb1 1081 + +#define SN_aria_256_cfb1 "ARIA-256-CFB1" +#define LN_aria_256_cfb1 "aria-256-cfb1" +#define NID_aria_256_cfb1 1082 + +#define SN_aria_128_cfb8 "ARIA-128-CFB8" +#define LN_aria_128_cfb8 "aria-128-cfb8" +#define NID_aria_128_cfb8 1083 + +#define SN_aria_192_cfb8 "ARIA-192-CFB8" +#define LN_aria_192_cfb8 "aria-192-cfb8" +#define NID_aria_192_cfb8 1084 + +#define SN_aria_256_cfb8 "ARIA-256-CFB8" +#define LN_aria_256_cfb8 "aria-256-cfb8" +#define NID_aria_256_cfb8 1085 + +#define SN_aria_128_ccm "ARIA-128-CCM" +#define LN_aria_128_ccm "aria-128-ccm" +#define NID_aria_128_ccm 1120 +#define OBJ_aria_128_ccm OBJ_aria,37L + +#define SN_aria_192_ccm "ARIA-192-CCM" +#define LN_aria_192_ccm "aria-192-ccm" +#define NID_aria_192_ccm 1121 +#define OBJ_aria_192_ccm OBJ_aria,38L + +#define SN_aria_256_ccm "ARIA-256-CCM" +#define LN_aria_256_ccm "aria-256-ccm" +#define NID_aria_256_ccm 1122 +#define OBJ_aria_256_ccm OBJ_aria,39L + +#define SN_aria_128_gcm "ARIA-128-GCM" +#define LN_aria_128_gcm "aria-128-gcm" +#define NID_aria_128_gcm 1123 +#define OBJ_aria_128_gcm OBJ_aria,34L + +#define SN_aria_192_gcm "ARIA-192-GCM" +#define LN_aria_192_gcm "aria-192-gcm" +#define NID_aria_192_gcm 1124 +#define OBJ_aria_192_gcm OBJ_aria,35L + +#define SN_aria_256_gcm "ARIA-256-GCM" +#define LN_aria_256_gcm "aria-256-gcm" +#define NID_aria_256_gcm 1125 +#define OBJ_aria_256_gcm OBJ_aria,36L + +#define SN_kisa "KISA" +#define LN_kisa "kisa" +#define NID_kisa 773 +#define OBJ_kisa OBJ_member_body,410L,200004L + +#define SN_seed_ecb "SEED-ECB" +#define LN_seed_ecb "seed-ecb" +#define NID_seed_ecb 776 +#define OBJ_seed_ecb OBJ_kisa,1L,3L + +#define SN_seed_cbc "SEED-CBC" +#define LN_seed_cbc "seed-cbc" +#define NID_seed_cbc 777 +#define OBJ_seed_cbc OBJ_kisa,1L,4L + +#define SN_seed_cfb128 "SEED-CFB" +#define LN_seed_cfb128 "seed-cfb" +#define NID_seed_cfb128 779 +#define OBJ_seed_cfb128 OBJ_kisa,1L,5L + +#define SN_seed_ofb128 "SEED-OFB" +#define LN_seed_ofb128 "seed-ofb" +#define NID_seed_ofb128 778 +#define OBJ_seed_ofb128 OBJ_kisa,1L,6L + +#define SN_sm4_ecb "SM4-ECB" +#define LN_sm4_ecb "sm4-ecb" +#define NID_sm4_ecb 1133 +#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L + +#define SN_sm4_cbc "SM4-CBC" +#define LN_sm4_cbc "sm4-cbc" +#define NID_sm4_cbc 1134 +#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L + +#define SN_sm4_ofb128 "SM4-OFB" +#define LN_sm4_ofb128 "sm4-ofb" +#define NID_sm4_ofb128 1135 +#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L + +#define SN_sm4_cfb128 "SM4-CFB" +#define LN_sm4_cfb128 "sm4-cfb" +#define NID_sm4_cfb128 1137 +#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L + +#define SN_sm4_cfb1 "SM4-CFB1" +#define LN_sm4_cfb1 "sm4-cfb1" +#define NID_sm4_cfb1 1136 +#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L + +#define SN_sm4_cfb8 "SM4-CFB8" +#define LN_sm4_cfb8 "sm4-cfb8" +#define NID_sm4_cfb8 1138 +#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L + +#define SN_sm4_ctr "SM4-CTR" +#define LN_sm4_ctr "sm4-ctr" +#define NID_sm4_ctr 1139 +#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L + +#define SN_hmac "HMAC" +#define LN_hmac "hmac" +#define NID_hmac 855 + +#define SN_cmac "CMAC" +#define LN_cmac "cmac" +#define NID_cmac 894 + +#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" +#define LN_rc4_hmac_md5 "rc4-hmac-md5" +#define NID_rc4_hmac_md5 915 + +#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" +#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" +#define NID_aes_128_cbc_hmac_sha1 916 + +#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" +#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" +#define NID_aes_192_cbc_hmac_sha1 917 + +#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" +#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" +#define NID_aes_256_cbc_hmac_sha1 918 + +#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" +#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" +#define NID_aes_128_cbc_hmac_sha256 948 + +#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" +#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" +#define NID_aes_192_cbc_hmac_sha256 949 + +#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" +#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" +#define NID_aes_256_cbc_hmac_sha256 950 + +#define SN_chacha20_poly1305 "ChaCha20-Poly1305" +#define LN_chacha20_poly1305 "chacha20-poly1305" +#define NID_chacha20_poly1305 1018 + +#define SN_chacha20 "ChaCha20" +#define LN_chacha20 "chacha20" +#define NID_chacha20 1019 + +#define SN_dhpublicnumber "dhpublicnumber" +#define LN_dhpublicnumber "X9.42 DH" +#define NID_dhpublicnumber 920 +#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L + +#define SN_brainpoolP160r1 "brainpoolP160r1" +#define NID_brainpoolP160r1 921 +#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L + +#define SN_brainpoolP160t1 "brainpoolP160t1" +#define NID_brainpoolP160t1 922 +#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L + +#define SN_brainpoolP192r1 "brainpoolP192r1" +#define NID_brainpoolP192r1 923 +#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L + +#define SN_brainpoolP192t1 "brainpoolP192t1" +#define NID_brainpoolP192t1 924 +#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L + +#define SN_brainpoolP224r1 "brainpoolP224r1" +#define NID_brainpoolP224r1 925 +#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L + +#define SN_brainpoolP224t1 "brainpoolP224t1" +#define NID_brainpoolP224t1 926 +#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L + +#define SN_brainpoolP256r1 "brainpoolP256r1" +#define NID_brainpoolP256r1 927 +#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L + +#define SN_brainpoolP256t1 "brainpoolP256t1" +#define NID_brainpoolP256t1 928 +#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L + +#define SN_brainpoolP320r1 "brainpoolP320r1" +#define NID_brainpoolP320r1 929 +#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L + +#define SN_brainpoolP320t1 "brainpoolP320t1" +#define NID_brainpoolP320t1 930 +#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L + +#define SN_brainpoolP384r1 "brainpoolP384r1" +#define NID_brainpoolP384r1 931 +#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L + +#define SN_brainpoolP384t1 "brainpoolP384t1" +#define NID_brainpoolP384t1 932 +#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L + +#define SN_brainpoolP512r1 "brainpoolP512r1" +#define NID_brainpoolP512r1 933 +#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L + +#define SN_brainpoolP512t1 "brainpoolP512t1" +#define NID_brainpoolP512t1 934 +#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L + +#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L + +#define OBJ_secg_scheme OBJ_certicom_arc,1L + +#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" +#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 +#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L + +#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" +#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 +#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L + +#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" +#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 +#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L + +#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" +#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 +#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L + +#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" +#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 +#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L + +#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 +#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L + +#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 +#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L + +#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 +#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L + +#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 +#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L + +#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" +#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 +#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L + +#define SN_dh_std_kdf "dh-std-kdf" +#define NID_dh_std_kdf 946 + +#define SN_dh_cofactor_kdf "dh-cofactor-kdf" +#define NID_dh_cofactor_kdf 947 + +#define SN_ct_precert_scts "ct_precert_scts" +#define LN_ct_precert_scts "CT Precertificate SCTs" +#define NID_ct_precert_scts 951 +#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L + +#define SN_ct_precert_poison "ct_precert_poison" +#define LN_ct_precert_poison "CT Precertificate Poison" +#define NID_ct_precert_poison 952 +#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L + +#define SN_ct_precert_signer "ct_precert_signer" +#define LN_ct_precert_signer "CT Precertificate Signer" +#define NID_ct_precert_signer 953 +#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L + +#define SN_ct_cert_scts "ct_cert_scts" +#define LN_ct_cert_scts "CT Certificate SCTs" +#define NID_ct_cert_scts 954 +#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L + +#define SN_jurisdictionLocalityName "jurisdictionL" +#define LN_jurisdictionLocalityName "jurisdictionLocalityName" +#define NID_jurisdictionLocalityName 955 +#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L + +#define SN_jurisdictionStateOrProvinceName "jurisdictionST" +#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" +#define NID_jurisdictionStateOrProvinceName 956 +#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L + +#define SN_jurisdictionCountryName "jurisdictionC" +#define LN_jurisdictionCountryName "jurisdictionCountryName" +#define NID_jurisdictionCountryName 957 +#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L + +#define SN_id_scrypt "id-scrypt" +#define LN_id_scrypt "scrypt" +#define NID_id_scrypt 973 +#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L + +#define SN_tls1_prf "TLS1-PRF" +#define LN_tls1_prf "tls1-prf" +#define NID_tls1_prf 1021 + +#define SN_hkdf "HKDF" +#define LN_hkdf "hkdf" +#define NID_hkdf 1036 + +#define SN_id_pkinit "id-pkinit" +#define NID_id_pkinit 1031 +#define OBJ_id_pkinit 1L,3L,6L,1L,5L,2L,3L + +#define SN_pkInitClientAuth "pkInitClientAuth" +#define LN_pkInitClientAuth "PKINIT Client Auth" +#define NID_pkInitClientAuth 1032 +#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L + +#define SN_pkInitKDC "pkInitKDC" +#define LN_pkInitKDC "Signing KDC Response" +#define NID_pkInitKDC 1033 +#define OBJ_pkInitKDC OBJ_id_pkinit,5L + +#define SN_X25519 "X25519" +#define NID_X25519 1034 +#define OBJ_X25519 1L,3L,101L,110L + +#define SN_X448 "X448" +#define NID_X448 1035 +#define OBJ_X448 1L,3L,101L,111L + +#define SN_ED25519 "ED25519" +#define NID_ED25519 1087 +#define OBJ_ED25519 1L,3L,101L,112L + +#define SN_ED448 "ED448" +#define NID_ED448 1088 +#define OBJ_ED448 1L,3L,101L,113L + +#define SN_kx_rsa "KxRSA" +#define LN_kx_rsa "kx-rsa" +#define NID_kx_rsa 1037 + +#define SN_kx_ecdhe "KxECDHE" +#define LN_kx_ecdhe "kx-ecdhe" +#define NID_kx_ecdhe 1038 + +#define SN_kx_dhe "KxDHE" +#define LN_kx_dhe "kx-dhe" +#define NID_kx_dhe 1039 + +#define SN_kx_ecdhe_psk "KxECDHE-PSK" +#define LN_kx_ecdhe_psk "kx-ecdhe-psk" +#define NID_kx_ecdhe_psk 1040 + +#define SN_kx_dhe_psk "KxDHE-PSK" +#define LN_kx_dhe_psk "kx-dhe-psk" +#define NID_kx_dhe_psk 1041 + +#define SN_kx_rsa_psk "KxRSA_PSK" +#define LN_kx_rsa_psk "kx-rsa-psk" +#define NID_kx_rsa_psk 1042 + +#define SN_kx_psk "KxPSK" +#define LN_kx_psk "kx-psk" +#define NID_kx_psk 1043 + +#define SN_kx_srp "KxSRP" +#define LN_kx_srp "kx-srp" +#define NID_kx_srp 1044 + +#define SN_kx_gost "KxGOST" +#define LN_kx_gost "kx-gost" +#define NID_kx_gost 1045 + +#define SN_kx_any "KxANY" +#define LN_kx_any "kx-any" +#define NID_kx_any 1063 + +#define SN_auth_rsa "AuthRSA" +#define LN_auth_rsa "auth-rsa" +#define NID_auth_rsa 1046 + +#define SN_auth_ecdsa "AuthECDSA" +#define LN_auth_ecdsa "auth-ecdsa" +#define NID_auth_ecdsa 1047 + +#define SN_auth_psk "AuthPSK" +#define LN_auth_psk "auth-psk" +#define NID_auth_psk 1048 + +#define SN_auth_dss "AuthDSS" +#define LN_auth_dss "auth-dss" +#define NID_auth_dss 1049 + +#define SN_auth_gost01 "AuthGOST01" +#define LN_auth_gost01 "auth-gost01" +#define NID_auth_gost01 1050 + +#define SN_auth_gost12 "AuthGOST12" +#define LN_auth_gost12 "auth-gost12" +#define NID_auth_gost12 1051 + +#define SN_auth_srp "AuthSRP" +#define LN_auth_srp "auth-srp" +#define NID_auth_srp 1052 + +#define SN_auth_null "AuthNULL" +#define LN_auth_null "auth-null" +#define NID_auth_null 1053 + +#define SN_auth_any "AuthANY" +#define LN_auth_any "auth-any" +#define NID_auth_any 1064 + +#define SN_poly1305 "Poly1305" +#define LN_poly1305 "poly1305" +#define NID_poly1305 1061 + +#define SN_siphash "SipHash" +#define LN_siphash "siphash" +#define NID_siphash 1062 + +#define SN_ffdhe2048 "ffdhe2048" +#define NID_ffdhe2048 1126 + +#define SN_ffdhe3072 "ffdhe3072" +#define NID_ffdhe3072 1127 + +#define SN_ffdhe4096 "ffdhe4096" +#define NID_ffdhe4096 1128 + +#define SN_ffdhe6144 "ffdhe6144" +#define NID_ffdhe6144 1129 + +#define SN_ffdhe8192 "ffdhe8192" +#define NID_ffdhe8192 1130 + +#define SN_ISO_UA "ISO-UA" +#define NID_ISO_UA 1150 +#define OBJ_ISO_UA OBJ_member_body,804L + +#define SN_ua_pki "ua-pki" +#define NID_ua_pki 1151 +#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L + +#define SN_dstu28147 "dstu28147" +#define LN_dstu28147 "DSTU Gost 28147-2009" +#define NID_dstu28147 1152 +#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L + +#define SN_dstu28147_ofb "dstu28147-ofb" +#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" +#define NID_dstu28147_ofb 1153 +#define OBJ_dstu28147_ofb OBJ_dstu28147,2L + +#define SN_dstu28147_cfb "dstu28147-cfb" +#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" +#define NID_dstu28147_cfb 1154 +#define OBJ_dstu28147_cfb OBJ_dstu28147,3L + +#define SN_dstu28147_wrap "dstu28147-wrap" +#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" +#define NID_dstu28147_wrap 1155 +#define OBJ_dstu28147_wrap OBJ_dstu28147,5L + +#define SN_hmacWithDstu34311 "hmacWithDstu34311" +#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" +#define NID_hmacWithDstu34311 1156 +#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L + +#define SN_dstu34311 "dstu34311" +#define LN_dstu34311 "DSTU Gost 34311-95" +#define NID_dstu34311 1157 +#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L + +#define SN_dstu4145le "dstu4145le" +#define LN_dstu4145le "DSTU 4145-2002 little endian" +#define NID_dstu4145le 1158 +#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L + +#define SN_dstu4145be "dstu4145be" +#define LN_dstu4145be "DSTU 4145-2002 big endian" +#define NID_dstu4145be 1159 +#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L + +#define SN_uacurve0 "uacurve0" +#define LN_uacurve0 "DSTU curve 0" +#define NID_uacurve0 1160 +#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L + +#define SN_uacurve1 "uacurve1" +#define LN_uacurve1 "DSTU curve 1" +#define NID_uacurve1 1161 +#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L + +#define SN_uacurve2 "uacurve2" +#define LN_uacurve2 "DSTU curve 2" +#define NID_uacurve2 1162 +#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L + +#define SN_uacurve3 "uacurve3" +#define LN_uacurve3 "DSTU curve 3" +#define NID_uacurve3 1163 +#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L + +#define SN_uacurve4 "uacurve4" +#define LN_uacurve4 "DSTU curve 4" +#define NID_uacurve4 1164 +#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L + +#define SN_uacurve5 "uacurve5" +#define LN_uacurve5 "DSTU curve 5" +#define NID_uacurve5 1165 +#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L + +#define SN_uacurve6 "uacurve6" +#define LN_uacurve6 "DSTU curve 6" +#define NID_uacurve6 1166 +#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L + +#define SN_uacurve7 "uacurve7" +#define LN_uacurve7 "DSTU curve 7" +#define NID_uacurve7 1167 +#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L + +#define SN_uacurve8 "uacurve8" +#define LN_uacurve8 "DSTU curve 8" +#define NID_uacurve8 1168 +#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L + +#define SN_uacurve9 "uacurve9" +#define LN_uacurve9 "DSTU curve 9" +#define NID_uacurve9 1169 +#define OBJ_uacurve9 OBJ_dstu4145le,2L,9L diff --git a/lib/openssl/include/openssl/objects.h b/lib/openssl/include/openssl/objects.h new file mode 100644 index 0000000..5e8b576 --- /dev/null +++ b/lib/openssl/include/openssl/objects.h @@ -0,0 +1,175 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OBJECTS_H +# define HEADER_OBJECTS_H + +# include +# include +# include +# include + +# define OBJ_NAME_TYPE_UNDEF 0x00 +# define OBJ_NAME_TYPE_MD_METH 0x01 +# define OBJ_NAME_TYPE_CIPHER_METH 0x02 +# define OBJ_NAME_TYPE_PKEY_METH 0x03 +# define OBJ_NAME_TYPE_COMP_METH 0x04 +# define OBJ_NAME_TYPE_NUM 0x05 + +# define OBJ_NAME_ALIAS 0x8000 + +# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 +# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct obj_name_st { + int type; + int alias; + const char *name; + const char *data; +} OBJ_NAME; + +# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) + +int OBJ_NAME_init(void); +int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), + int (*cmp_func) (const char *, const char *), + void (*free_func) (const char *, int, const char *)); +const char *OBJ_NAME_get(const char *name, int type); +int OBJ_NAME_add(const char *name, int type, const char *data); +int OBJ_NAME_remove(const char *name, int type); +void OBJ_NAME_cleanup(int type); /* -1 for everything */ +void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), + void *arg); +void OBJ_NAME_do_all_sorted(int type, + void (*fn) (const OBJ_NAME *, void *arg), + void *arg); + +ASN1_OBJECT *OBJ_dup(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_nid2obj(int n); +const char *OBJ_nid2ln(int n); +const char *OBJ_nid2sn(int n); +int OBJ_obj2nid(const ASN1_OBJECT *o); +ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); +int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); +int OBJ_txt2nid(const char *s); +int OBJ_ln2nid(const char *s); +int OBJ_sn2nid(const char *s); +int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); +const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, + int (*cmp) (const void *, const void *)); +const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, + int size, + int (*cmp) (const void *, const void *), + int flags); + +# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ + static int nm##_cmp(type1 const *, type2 const *); \ + scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ + _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) +# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) + +/*- + * Unsolved problem: if a type is actually a pointer type, like + * nid_triple is, then its impossible to get a const where you need + * it. Consider: + * + * typedef int nid_triple[3]; + * const void *a_; + * const nid_triple const *a = a_; + * + * The assignment discards a const because what you really want is: + * + * const int const * const *a = a_; + * + * But if you do that, you lose the fact that a is an array of 3 ints, + * which breaks comparison functions. + * + * Thus we end up having to cast, sadly, or unpack the + * declarations. Or, as I finally did in this case, declare nid_triple + * to be a struct, which it should have been in the first place. + * + * Ben, August 2008. + * + * Also, strictly speaking not all types need be const, but handling + * the non-constness means a lot of complication, and in practice + * comparison routines do always not touch their arguments. + */ + +# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ + static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ + { \ + type1 const *a = a_; \ + type2 const *b = b_; \ + return nm##_cmp(a,b); \ + } \ + type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ + { \ + return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ + nm##_cmp_BSEARCH_CMP_FN); \ + } \ + extern void dummy_prototype(void) + +# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ + ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN))) + +# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ + ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ + num,sizeof(type2), \ + ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ + (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ + cmp##_BSEARCH_CMP_FN)),flags) + +int OBJ_new_nid(int num); +int OBJ_add_object(const ASN1_OBJECT *obj); +int OBJ_create(const char *oid, const char *sn, const char *ln); +#if OPENSSL_API_COMPAT < 0x10100000L +# define OBJ_cleanup() while(0) continue +#endif +int OBJ_create_objects(BIO *in); + +size_t OBJ_length(const ASN1_OBJECT *obj); +const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); + +int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); +int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); +int OBJ_add_sigid(int signid, int dig_id, int pkey_id); +void OBJ_sigid_free(void); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/objectserr.h b/lib/openssl/include/openssl/objectserr.h new file mode 100644 index 0000000..02e166f --- /dev/null +++ b/lib/openssl/include/openssl/objectserr.h @@ -0,0 +1,42 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OBJERR_H +# define HEADER_OBJERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OBJ_strings(void); + +/* + * OBJ function codes. + */ +# define OBJ_F_OBJ_ADD_OBJECT 105 +# define OBJ_F_OBJ_ADD_SIGID 107 +# define OBJ_F_OBJ_CREATE 100 +# define OBJ_F_OBJ_DUP 101 +# define OBJ_F_OBJ_NAME_NEW_INDEX 106 +# define OBJ_F_OBJ_NID2LN 102 +# define OBJ_F_OBJ_NID2OBJ 103 +# define OBJ_F_OBJ_NID2SN 104 +# define OBJ_F_OBJ_TXT2OBJ 108 + +/* + * OBJ reason codes. + */ +# define OBJ_R_OID_EXISTS 102 +# define OBJ_R_UNKNOWN_NID 101 + +#endif diff --git a/lib/openssl/include/openssl/ocsp.h b/lib/openssl/include/openssl/ocsp.h new file mode 100644 index 0000000..4d759a4 --- /dev/null +++ b/lib/openssl/include/openssl/ocsp.h @@ -0,0 +1,352 @@ +/* + * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSP_H +# define HEADER_OCSP_H + +#include + +/* + * These definitions are outside the OPENSSL_NO_OCSP guard because although for + * historical reasons they have OCSP_* names, they can actually be used + * independently of OCSP. E.g. see RFC5280 + */ +/*- + * CRLReason ::= ENUMERATED { + * unspecified (0), + * keyCompromise (1), + * cACompromise (2), + * affiliationChanged (3), + * superseded (4), + * cessationOfOperation (5), + * certificateHold (6), + * removeFromCRL (8) } + */ +# define OCSP_REVOKED_STATUS_NOSTATUS -1 +# define OCSP_REVOKED_STATUS_UNSPECIFIED 0 +# define OCSP_REVOKED_STATUS_KEYCOMPROMISE 1 +# define OCSP_REVOKED_STATUS_CACOMPROMISE 2 +# define OCSP_REVOKED_STATUS_AFFILIATIONCHANGED 3 +# define OCSP_REVOKED_STATUS_SUPERSEDED 4 +# define OCSP_REVOKED_STATUS_CESSATIONOFOPERATION 5 +# define OCSP_REVOKED_STATUS_CERTIFICATEHOLD 6 +# define OCSP_REVOKED_STATUS_REMOVEFROMCRL 8 + + +# ifndef OPENSSL_NO_OCSP + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Various flags and values */ + +# define OCSP_DEFAULT_NONCE_LENGTH 16 + +# define OCSP_NOCERTS 0x1 +# define OCSP_NOINTERN 0x2 +# define OCSP_NOSIGS 0x4 +# define OCSP_NOCHAIN 0x8 +# define OCSP_NOVERIFY 0x10 +# define OCSP_NOEXPLICIT 0x20 +# define OCSP_NOCASIGN 0x40 +# define OCSP_NODELEGATED 0x80 +# define OCSP_NOCHECKS 0x100 +# define OCSP_TRUSTOTHER 0x200 +# define OCSP_RESPID_KEY 0x400 +# define OCSP_NOTIME 0x800 + +typedef struct ocsp_cert_id_st OCSP_CERTID; + +DEFINE_STACK_OF(OCSP_CERTID) + +typedef struct ocsp_one_request_st OCSP_ONEREQ; + +DEFINE_STACK_OF(OCSP_ONEREQ) + +typedef struct ocsp_req_info_st OCSP_REQINFO; +typedef struct ocsp_signature_st OCSP_SIGNATURE; +typedef struct ocsp_request_st OCSP_REQUEST; + +# define OCSP_RESPONSE_STATUS_SUCCESSFUL 0 +# define OCSP_RESPONSE_STATUS_MALFORMEDREQUEST 1 +# define OCSP_RESPONSE_STATUS_INTERNALERROR 2 +# define OCSP_RESPONSE_STATUS_TRYLATER 3 +# define OCSP_RESPONSE_STATUS_SIGREQUIRED 5 +# define OCSP_RESPONSE_STATUS_UNAUTHORIZED 6 + +typedef struct ocsp_resp_bytes_st OCSP_RESPBYTES; + +# define V_OCSP_RESPID_NAME 0 +# define V_OCSP_RESPID_KEY 1 + +DEFINE_STACK_OF(OCSP_RESPID) + +typedef struct ocsp_revoked_info_st OCSP_REVOKEDINFO; + +# define V_OCSP_CERTSTATUS_GOOD 0 +# define V_OCSP_CERTSTATUS_REVOKED 1 +# define V_OCSP_CERTSTATUS_UNKNOWN 2 + +typedef struct ocsp_cert_status_st OCSP_CERTSTATUS; +typedef struct ocsp_single_response_st OCSP_SINGLERESP; + +DEFINE_STACK_OF(OCSP_SINGLERESP) + +typedef struct ocsp_response_data_st OCSP_RESPDATA; + +typedef struct ocsp_basic_response_st OCSP_BASICRESP; + +typedef struct ocsp_crl_id_st OCSP_CRLID; +typedef struct ocsp_service_locator_st OCSP_SERVICELOC; + +# define PEM_STRING_OCSP_REQUEST "OCSP REQUEST" +# define PEM_STRING_OCSP_RESPONSE "OCSP RESPONSE" + +# define d2i_OCSP_REQUEST_bio(bp,p) ASN1_d2i_bio_of(OCSP_REQUEST,OCSP_REQUEST_new,d2i_OCSP_REQUEST,bp,p) + +# define d2i_OCSP_RESPONSE_bio(bp,p) ASN1_d2i_bio_of(OCSP_RESPONSE,OCSP_RESPONSE_new,d2i_OCSP_RESPONSE,bp,p) + +# define PEM_read_bio_OCSP_REQUEST(bp,x,cb) (OCSP_REQUEST *)PEM_ASN1_read_bio( \ + (char *(*)())d2i_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST, \ + bp,(char **)(x),cb,NULL) + +# define PEM_read_bio_OCSP_RESPONSE(bp,x,cb) (OCSP_RESPONSE *)PEM_ASN1_read_bio(\ + (char *(*)())d2i_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE, \ + bp,(char **)(x),cb,NULL) + +# define PEM_write_bio_OCSP_REQUEST(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_REQUEST,PEM_STRING_OCSP_REQUEST,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define PEM_write_bio_OCSP_RESPONSE(bp,o) \ + PEM_ASN1_write_bio((int (*)())i2d_OCSP_RESPONSE,PEM_STRING_OCSP_RESPONSE,\ + bp,(char *)(o), NULL,NULL,0,NULL,NULL) + +# define i2d_OCSP_RESPONSE_bio(bp,o) ASN1_i2d_bio_of(OCSP_RESPONSE,i2d_OCSP_RESPONSE,bp,o) + +# define i2d_OCSP_REQUEST_bio(bp,o) ASN1_i2d_bio_of(OCSP_REQUEST,i2d_OCSP_REQUEST,bp,o) + +# define ASN1_BIT_STRING_digest(data,type,md,len) \ + ASN1_item_digest(ASN1_ITEM_rptr(ASN1_BIT_STRING),type,data,md,len) + +# define OCSP_CERTSTATUS_dup(cs)\ + (OCSP_CERTSTATUS*)ASN1_dup((int(*)())i2d_OCSP_CERTSTATUS,\ + (char *(*)())d2i_OCSP_CERTSTATUS,(char *)(cs)) + +OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id); + +OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req); +OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req, + int maxline); +int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx); +int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx); +OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline); +void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx); +void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len); +int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, + ASN1_VALUE *val); +int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval, + const ASN1_ITEM *it); +BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx); +int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path); +int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req); +int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx, + const char *name, const char *value); + +OCSP_CERTID *OCSP_cert_to_id(const EVP_MD *dgst, const X509 *subject, + const X509 *issuer); + +OCSP_CERTID *OCSP_cert_id_new(const EVP_MD *dgst, + const X509_NAME *issuerName, + const ASN1_BIT_STRING *issuerKey, + const ASN1_INTEGER *serialNumber); + +OCSP_ONEREQ *OCSP_request_add0_id(OCSP_REQUEST *req, OCSP_CERTID *cid); + +int OCSP_request_add1_nonce(OCSP_REQUEST *req, unsigned char *val, int len); +int OCSP_basic_add1_nonce(OCSP_BASICRESP *resp, unsigned char *val, int len); +int OCSP_check_nonce(OCSP_REQUEST *req, OCSP_BASICRESP *bs); +int OCSP_copy_nonce(OCSP_BASICRESP *resp, OCSP_REQUEST *req); + +int OCSP_request_set1_name(OCSP_REQUEST *req, X509_NAME *nm); +int OCSP_request_add1_cert(OCSP_REQUEST *req, X509 *cert); + +int OCSP_request_sign(OCSP_REQUEST *req, + X509 *signer, + EVP_PKEY *key, + const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); + +int OCSP_response_status(OCSP_RESPONSE *resp); +OCSP_BASICRESP *OCSP_response_get1_basic(OCSP_RESPONSE *resp); + +const ASN1_OCTET_STRING *OCSP_resp_get0_signature(const OCSP_BASICRESP *bs); +const X509_ALGOR *OCSP_resp_get0_tbs_sigalg(const OCSP_BASICRESP *bs); +const OCSP_RESPDATA *OCSP_resp_get0_respdata(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_signer(OCSP_BASICRESP *bs, X509 **signer, + STACK_OF(X509) *extra_certs); + +int OCSP_resp_count(OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_resp_get0(OCSP_BASICRESP *bs, int idx); +const ASN1_GENERALIZEDTIME *OCSP_resp_get0_produced_at(const OCSP_BASICRESP* bs); +const STACK_OF(X509) *OCSP_resp_get0_certs(const OCSP_BASICRESP *bs); +int OCSP_resp_get0_id(const OCSP_BASICRESP *bs, + const ASN1_OCTET_STRING **pid, + const X509_NAME **pname); +int OCSP_resp_get1_id(const OCSP_BASICRESP *bs, + ASN1_OCTET_STRING **pid, + X509_NAME **pname); + +int OCSP_resp_find(OCSP_BASICRESP *bs, OCSP_CERTID *id, int last); +int OCSP_single_get0_status(OCSP_SINGLERESP *single, int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_resp_find_status(OCSP_BASICRESP *bs, OCSP_CERTID *id, int *status, + int *reason, + ASN1_GENERALIZEDTIME **revtime, + ASN1_GENERALIZEDTIME **thisupd, + ASN1_GENERALIZEDTIME **nextupd); +int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd, + ASN1_GENERALIZEDTIME *nextupd, long sec, long maxsec); + +int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs, + X509_STORE *store, unsigned long flags); + +int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath, + int *pssl); + +int OCSP_id_issuer_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); +int OCSP_id_cmp(const OCSP_CERTID *a, const OCSP_CERTID *b); + +int OCSP_request_onereq_count(OCSP_REQUEST *req); +OCSP_ONEREQ *OCSP_request_onereq_get0(OCSP_REQUEST *req, int i); +OCSP_CERTID *OCSP_onereq_get0_id(OCSP_ONEREQ *one); +int OCSP_id_get0_info(ASN1_OCTET_STRING **piNameHash, ASN1_OBJECT **pmd, + ASN1_OCTET_STRING **pikeyHash, + ASN1_INTEGER **pserial, OCSP_CERTID *cid); +int OCSP_request_is_signed(OCSP_REQUEST *req); +OCSP_RESPONSE *OCSP_response_create(int status, OCSP_BASICRESP *bs); +OCSP_SINGLERESP *OCSP_basic_add1_status(OCSP_BASICRESP *rsp, + OCSP_CERTID *cid, + int status, int reason, + ASN1_TIME *revtime, + ASN1_TIME *thisupd, + ASN1_TIME *nextupd); +int OCSP_basic_add1_cert(OCSP_BASICRESP *resp, X509 *cert); +int OCSP_basic_sign(OCSP_BASICRESP *brsp, + X509 *signer, EVP_PKEY *key, const EVP_MD *dgst, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_basic_sign_ctx(OCSP_BASICRESP *brsp, + X509 *signer, EVP_MD_CTX *ctx, + STACK_OF(X509) *certs, unsigned long flags); +int OCSP_RESPID_set_by_name(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_set_by_key(OCSP_RESPID *respid, X509 *cert); +int OCSP_RESPID_match(OCSP_RESPID *respid, X509 *cert); + +X509_EXTENSION *OCSP_crlID_new(const char *url, long *n, char *tim); + +X509_EXTENSION *OCSP_accept_responses_new(char **oids); + +X509_EXTENSION *OCSP_archive_cutoff_new(char *tim); + +X509_EXTENSION *OCSP_url_svcloc_new(X509_NAME *issuer, const char **urls); + +int OCSP_REQUEST_get_ext_count(OCSP_REQUEST *x); +int OCSP_REQUEST_get_ext_by_NID(OCSP_REQUEST *x, int nid, int lastpos); +int OCSP_REQUEST_get_ext_by_OBJ(OCSP_REQUEST *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_REQUEST_get_ext_by_critical(OCSP_REQUEST *x, int crit, int lastpos); +X509_EXTENSION *OCSP_REQUEST_get_ext(OCSP_REQUEST *x, int loc); +X509_EXTENSION *OCSP_REQUEST_delete_ext(OCSP_REQUEST *x, int loc); +void *OCSP_REQUEST_get1_ext_d2i(OCSP_REQUEST *x, int nid, int *crit, + int *idx); +int OCSP_REQUEST_add1_ext_i2d(OCSP_REQUEST *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_REQUEST_add_ext(OCSP_REQUEST *x, X509_EXTENSION *ex, int loc); + +int OCSP_ONEREQ_get_ext_count(OCSP_ONEREQ *x); +int OCSP_ONEREQ_get_ext_by_NID(OCSP_ONEREQ *x, int nid, int lastpos); +int OCSP_ONEREQ_get_ext_by_OBJ(OCSP_ONEREQ *x, const ASN1_OBJECT *obj, int lastpos); +int OCSP_ONEREQ_get_ext_by_critical(OCSP_ONEREQ *x, int crit, int lastpos); +X509_EXTENSION *OCSP_ONEREQ_get_ext(OCSP_ONEREQ *x, int loc); +X509_EXTENSION *OCSP_ONEREQ_delete_ext(OCSP_ONEREQ *x, int loc); +void *OCSP_ONEREQ_get1_ext_d2i(OCSP_ONEREQ *x, int nid, int *crit, int *idx); +int OCSP_ONEREQ_add1_ext_i2d(OCSP_ONEREQ *x, int nid, void *value, int crit, + unsigned long flags); +int OCSP_ONEREQ_add_ext(OCSP_ONEREQ *x, X509_EXTENSION *ex, int loc); + +int OCSP_BASICRESP_get_ext_count(OCSP_BASICRESP *x); +int OCSP_BASICRESP_get_ext_by_NID(OCSP_BASICRESP *x, int nid, int lastpos); +int OCSP_BASICRESP_get_ext_by_OBJ(OCSP_BASICRESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_BASICRESP_get_ext_by_critical(OCSP_BASICRESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_BASICRESP_get_ext(OCSP_BASICRESP *x, int loc); +X509_EXTENSION *OCSP_BASICRESP_delete_ext(OCSP_BASICRESP *x, int loc); +void *OCSP_BASICRESP_get1_ext_d2i(OCSP_BASICRESP *x, int nid, int *crit, + int *idx); +int OCSP_BASICRESP_add1_ext_i2d(OCSP_BASICRESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_BASICRESP_add_ext(OCSP_BASICRESP *x, X509_EXTENSION *ex, int loc); + +int OCSP_SINGLERESP_get_ext_count(OCSP_SINGLERESP *x); +int OCSP_SINGLERESP_get_ext_by_NID(OCSP_SINGLERESP *x, int nid, int lastpos); +int OCSP_SINGLERESP_get_ext_by_OBJ(OCSP_SINGLERESP *x, const ASN1_OBJECT *obj, + int lastpos); +int OCSP_SINGLERESP_get_ext_by_critical(OCSP_SINGLERESP *x, int crit, + int lastpos); +X509_EXTENSION *OCSP_SINGLERESP_get_ext(OCSP_SINGLERESP *x, int loc); +X509_EXTENSION *OCSP_SINGLERESP_delete_ext(OCSP_SINGLERESP *x, int loc); +void *OCSP_SINGLERESP_get1_ext_d2i(OCSP_SINGLERESP *x, int nid, int *crit, + int *idx); +int OCSP_SINGLERESP_add1_ext_i2d(OCSP_SINGLERESP *x, int nid, void *value, + int crit, unsigned long flags); +int OCSP_SINGLERESP_add_ext(OCSP_SINGLERESP *x, X509_EXTENSION *ex, int loc); +const OCSP_CERTID *OCSP_SINGLERESP_get0_id(const OCSP_SINGLERESP *x); + +DECLARE_ASN1_FUNCTIONS(OCSP_SINGLERESP) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTSTATUS) +DECLARE_ASN1_FUNCTIONS(OCSP_REVOKEDINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_BASICRESP) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPDATA) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPID) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPONSE) +DECLARE_ASN1_FUNCTIONS(OCSP_RESPBYTES) +DECLARE_ASN1_FUNCTIONS(OCSP_ONEREQ) +DECLARE_ASN1_FUNCTIONS(OCSP_CERTID) +DECLARE_ASN1_FUNCTIONS(OCSP_REQUEST) +DECLARE_ASN1_FUNCTIONS(OCSP_SIGNATURE) +DECLARE_ASN1_FUNCTIONS(OCSP_REQINFO) +DECLARE_ASN1_FUNCTIONS(OCSP_CRLID) +DECLARE_ASN1_FUNCTIONS(OCSP_SERVICELOC) + +const char *OCSP_response_status_str(long s); +const char *OCSP_cert_status_str(long s); +const char *OCSP_crl_reason_str(long s); + +int OCSP_REQUEST_print(BIO *bp, OCSP_REQUEST *a, unsigned long flags); +int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags); + +int OCSP_basic_verify(OCSP_BASICRESP *bs, STACK_OF(X509) *certs, + X509_STORE *st, unsigned long flags); + + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/ocsperr.h b/lib/openssl/include/openssl/ocsperr.h new file mode 100644 index 0000000..8dd9e01 --- /dev/null +++ b/lib/openssl/include/openssl/ocsperr.h @@ -0,0 +1,78 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OCSPERR_H +# define HEADER_OCSPERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_OCSP + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OCSP_strings(void); + +/* + * OCSP function codes. + */ +# define OCSP_F_D2I_OCSP_NONCE 102 +# define OCSP_F_OCSP_BASIC_ADD1_STATUS 103 +# define OCSP_F_OCSP_BASIC_SIGN 104 +# define OCSP_F_OCSP_BASIC_SIGN_CTX 119 +# define OCSP_F_OCSP_BASIC_VERIFY 105 +# define OCSP_F_OCSP_CERT_ID_NEW 101 +# define OCSP_F_OCSP_CHECK_DELEGATED 106 +# define OCSP_F_OCSP_CHECK_IDS 107 +# define OCSP_F_OCSP_CHECK_ISSUER 108 +# define OCSP_F_OCSP_CHECK_VALIDITY 115 +# define OCSP_F_OCSP_MATCH_ISSUERID 109 +# define OCSP_F_OCSP_PARSE_URL 114 +# define OCSP_F_OCSP_REQUEST_SIGN 110 +# define OCSP_F_OCSP_REQUEST_VERIFY 116 +# define OCSP_F_OCSP_RESPONSE_GET1_BASIC 111 +# define OCSP_F_PARSE_HTTP_LINE1 118 + +/* + * OCSP reason codes. + */ +# define OCSP_R_CERTIFICATE_VERIFY_ERROR 101 +# define OCSP_R_DIGEST_ERR 102 +# define OCSP_R_ERROR_IN_NEXTUPDATE_FIELD 122 +# define OCSP_R_ERROR_IN_THISUPDATE_FIELD 123 +# define OCSP_R_ERROR_PARSING_URL 121 +# define OCSP_R_MISSING_OCSPSIGNING_USAGE 103 +# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 +# define OCSP_R_NOT_BASIC_RESPONSE 104 +# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 +# define OCSP_R_NO_RESPONSE_DATA 108 +# define OCSP_R_NO_REVOKED_TIME 109 +# define OCSP_R_NO_SIGNER_KEY 130 +# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 +# define OCSP_R_REQUEST_NOT_SIGNED 128 +# define OCSP_R_RESPONSE_CONTAINS_NO_REVOCATION_DATA 111 +# define OCSP_R_ROOT_CA_NOT_TRUSTED 112 +# define OCSP_R_SERVER_RESPONSE_ERROR 114 +# define OCSP_R_SERVER_RESPONSE_PARSE_ERROR 115 +# define OCSP_R_SIGNATURE_FAILURE 117 +# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 +# define OCSP_R_STATUS_EXPIRED 125 +# define OCSP_R_STATUS_NOT_YET_VALID 126 +# define OCSP_R_STATUS_TOO_OLD 127 +# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 +# define OCSP_R_UNKNOWN_NID 120 +# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 + +# endif +#endif diff --git a/lib/openssl/include/openssl/opensslconf.h b/lib/openssl/include/openssl/opensslconf.h new file mode 100644 index 0000000..b358f59 --- /dev/null +++ b/lib/openssl/include/openssl/opensslconf.h @@ -0,0 +1,203 @@ +/* + * WARNING: do not edit! + * Generated by makefile from include\openssl\opensslconf.h.in + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_SYS_WIN64A +# define OPENSSL_SYS_WIN64A 1 +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL_TRACE +# define OPENSSL_NO_SSL_TRACE +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_STATIC_ENGINE +# define OPENSSL_NO_STATIC_ENGINE +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#define OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# undef SIXTY_FOUR_BIT_LONG +# define SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff --git a/lib/openssl/include/openssl/opensslv.h b/lib/openssl/include/openssl/opensslv.h new file mode 100644 index 0000000..7b6c212 --- /dev/null +++ b/lib/openssl/include/openssl/opensslv.h @@ -0,0 +1,101 @@ +/* + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSLV_H +# define HEADER_OPENSSLV_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * Numeric release version identifier: + * MNNFFPPS: major minor fix patch status + * The status nibble has one of the values 0 for development, 1 to e for betas + * 1 to 14, and f for release. The patch level is exactly that. + * For example: + * 0.9.3-dev 0x00903000 + * 0.9.3-beta1 0x00903001 + * 0.9.3-beta2-dev 0x00903002 + * 0.9.3-beta2 0x00903002 (same as ...beta2-dev) + * 0.9.3 0x0090300f + * 0.9.3a 0x0090301f + * 0.9.4 0x0090400f + * 1.2.3z 0x102031af + * + * For continuity reasons (because 0.9.5 is already out, and is coded + * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level + * part is slightly different, by setting the highest bit. This means + * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start + * with 0x0090600S... + * + * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.) + * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for + * major minor fix final patch/beta) + */ +# define OPENSSL_VERSION_NUMBER 0x1010114fL +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1t 7 Feb 2023" + +/*- + * The macros below are to be used for shared library (.so, .dll, ...) + * versioning. That kind of versioning works a bit differently between + * operating systems. The most usual scheme is to set a major and a minor + * number, and have the runtime loader check that the major number is equal + * to what it was at application link time, while the minor number has to + * be greater or equal to what it was at application link time. With this + * scheme, the version number is usually part of the file name, like this: + * + * libcrypto.so.0.9 + * + * Some unixen also make a softlink with the major version number only: + * + * libcrypto.so.0 + * + * On Tru64 and IRIX 6.x it works a little bit differently. There, the + * shared library version is stored in the file, and is actually a series + * of versions, separated by colons. The rightmost version present in the + * library when linking an application is stored in the application to be + * matched at run time. When the application is run, a check is done to + * see if the library version stored in the application matches any of the + * versions in the version string of the library itself. + * This version string can be constructed in any way, depending on what + * kind of matching is desired. However, to implement the same scheme as + * the one used in the other unixen, all compatible versions, from lowest + * to highest, should be part of the string. Consecutive builds would + * give the following versions strings: + * + * 3.0 + * 3.0:3.1 + * 3.0:3.1:3.2 + * 4.0 + * 4.0:4.1 + * + * Notice how version 4 is completely incompatible with version, and + * therefore give the breach you can see. + * + * There may be other schemes as well that I haven't yet discovered. + * + * So, here's the way it works here: first of all, the library version + * number doesn't need at all to match the overall OpenSSL version. + * However, it's nice and more understandable if it actually does. + * The current library version is stored in the macro SHLIB_VERSION_NUMBER, + * which is just a piece of text in the format "M.m.e" (Major, minor, edit). + * For the sake of Tru64, IRIX, and any other OS that behaves in similar ways, + * we need to keep a history of version numbers, which is done in the + * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and + * should only keep the versions that are binary compatible with the current. + */ +# define SHLIB_VERSION_HISTORY "" +# define SHLIB_VERSION_NUMBER "1.1" + + +#ifdef __cplusplus +} +#endif +#endif /* HEADER_OPENSSLV_H */ diff --git a/lib/openssl/include/openssl/ossl_typ.h b/lib/openssl/include/openssl/ossl_typ.h new file mode 100644 index 0000000..e0edfaa --- /dev/null +++ b/lib/openssl/include/openssl/ossl_typ.h @@ -0,0 +1,197 @@ +/* + * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OPENSSL_TYPES_H +# define HEADER_OPENSSL_TYPES_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +# include + +# ifdef NO_ASN1_TYPEDEFS +# define ASN1_INTEGER ASN1_STRING +# define ASN1_ENUMERATED ASN1_STRING +# define ASN1_BIT_STRING ASN1_STRING +# define ASN1_OCTET_STRING ASN1_STRING +# define ASN1_PRINTABLESTRING ASN1_STRING +# define ASN1_T61STRING ASN1_STRING +# define ASN1_IA5STRING ASN1_STRING +# define ASN1_UTCTIME ASN1_STRING +# define ASN1_GENERALIZEDTIME ASN1_STRING +# define ASN1_TIME ASN1_STRING +# define ASN1_GENERALSTRING ASN1_STRING +# define ASN1_UNIVERSALSTRING ASN1_STRING +# define ASN1_BMPSTRING ASN1_STRING +# define ASN1_VISIBLESTRING ASN1_STRING +# define ASN1_UTF8STRING ASN1_STRING +# define ASN1_BOOLEAN int +# define ASN1_NULL int +# else +typedef struct asn1_string_st ASN1_INTEGER; +typedef struct asn1_string_st ASN1_ENUMERATED; +typedef struct asn1_string_st ASN1_BIT_STRING; +typedef struct asn1_string_st ASN1_OCTET_STRING; +typedef struct asn1_string_st ASN1_PRINTABLESTRING; +typedef struct asn1_string_st ASN1_T61STRING; +typedef struct asn1_string_st ASN1_IA5STRING; +typedef struct asn1_string_st ASN1_GENERALSTRING; +typedef struct asn1_string_st ASN1_UNIVERSALSTRING; +typedef struct asn1_string_st ASN1_BMPSTRING; +typedef struct asn1_string_st ASN1_UTCTIME; +typedef struct asn1_string_st ASN1_TIME; +typedef struct asn1_string_st ASN1_GENERALIZEDTIME; +typedef struct asn1_string_st ASN1_VISIBLESTRING; +typedef struct asn1_string_st ASN1_UTF8STRING; +typedef struct asn1_string_st ASN1_STRING; +typedef int ASN1_BOOLEAN; +typedef int ASN1_NULL; +# endif + +typedef struct asn1_object_st ASN1_OBJECT; + +typedef struct ASN1_ITEM_st ASN1_ITEM; +typedef struct asn1_pctx_st ASN1_PCTX; +typedef struct asn1_sctx_st ASN1_SCTX; + +# ifdef _WIN32 +# undef X509_NAME +# undef X509_EXTENSIONS +# undef PKCS7_ISSUER_AND_SERIAL +# undef PKCS7_SIGNER_INFO +# undef OCSP_REQUEST +# undef OCSP_RESPONSE +# endif + +# ifdef BIGNUM +# undef BIGNUM +# endif +struct dane_st; +typedef struct bio_st BIO; +typedef struct bignum_st BIGNUM; +typedef struct bignum_ctx BN_CTX; +typedef struct bn_blinding_st BN_BLINDING; +typedef struct bn_mont_ctx_st BN_MONT_CTX; +typedef struct bn_recp_ctx_st BN_RECP_CTX; +typedef struct bn_gencb_st BN_GENCB; + +typedef struct buf_mem_st BUF_MEM; + +typedef struct evp_cipher_st EVP_CIPHER; +typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; +typedef struct evp_md_st EVP_MD; +typedef struct evp_md_ctx_st EVP_MD_CTX; +typedef struct evp_pkey_st EVP_PKEY; + +typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD; + +typedef struct evp_pkey_method_st EVP_PKEY_METHOD; +typedef struct evp_pkey_ctx_st EVP_PKEY_CTX; + +typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX; + +typedef struct hmac_ctx_st HMAC_CTX; + +typedef struct dh_st DH; +typedef struct dh_method DH_METHOD; + +typedef struct dsa_st DSA; +typedef struct dsa_method DSA_METHOD; + +typedef struct rsa_st RSA; +typedef struct rsa_meth_st RSA_METHOD; +typedef struct rsa_pss_params_st RSA_PSS_PARAMS; + +typedef struct ec_key_st EC_KEY; +typedef struct ec_key_method_st EC_KEY_METHOD; + +typedef struct rand_meth_st RAND_METHOD; +typedef struct rand_drbg_st RAND_DRBG; + +typedef struct ssl_dane_st SSL_DANE; +typedef struct x509_st X509; +typedef struct X509_algor_st X509_ALGOR; +typedef struct X509_crl_st X509_CRL; +typedef struct x509_crl_method_st X509_CRL_METHOD; +typedef struct x509_revoked_st X509_REVOKED; +typedef struct X509_name_st X509_NAME; +typedef struct X509_pubkey_st X509_PUBKEY; +typedef struct x509_store_st X509_STORE; +typedef struct x509_store_ctx_st X509_STORE_CTX; + +typedef struct x509_object_st X509_OBJECT; +typedef struct x509_lookup_st X509_LOOKUP; +typedef struct x509_lookup_method_st X509_LOOKUP_METHOD; +typedef struct X509_VERIFY_PARAM_st X509_VERIFY_PARAM; + +typedef struct x509_sig_info_st X509_SIG_INFO; + +typedef struct pkcs8_priv_key_info_st PKCS8_PRIV_KEY_INFO; + +typedef struct v3_ext_ctx X509V3_CTX; +typedef struct conf_st CONF; +typedef struct ossl_init_settings_st OPENSSL_INIT_SETTINGS; + +typedef struct ui_st UI; +typedef struct ui_method_st UI_METHOD; + +typedef struct engine_st ENGINE; +typedef struct ssl_st SSL; +typedef struct ssl_ctx_st SSL_CTX; + +typedef struct comp_ctx_st COMP_CTX; +typedef struct comp_method_st COMP_METHOD; + +typedef struct X509_POLICY_NODE_st X509_POLICY_NODE; +typedef struct X509_POLICY_LEVEL_st X509_POLICY_LEVEL; +typedef struct X509_POLICY_TREE_st X509_POLICY_TREE; +typedef struct X509_POLICY_CACHE_st X509_POLICY_CACHE; + +typedef struct AUTHORITY_KEYID_st AUTHORITY_KEYID; +typedef struct DIST_POINT_st DIST_POINT; +typedef struct ISSUING_DIST_POINT_st ISSUING_DIST_POINT; +typedef struct NAME_CONSTRAINTS_st NAME_CONSTRAINTS; + +typedef struct crypto_ex_data_st CRYPTO_EX_DATA; + +typedef struct ocsp_req_ctx_st OCSP_REQ_CTX; +typedef struct ocsp_response_st OCSP_RESPONSE; +typedef struct ocsp_responder_id_st OCSP_RESPID; + +typedef struct sct_st SCT; +typedef struct sct_ctx_st SCT_CTX; +typedef struct ctlog_st CTLOG; +typedef struct ctlog_store_st CTLOG_STORE; +typedef struct ct_policy_eval_ctx_st CT_POLICY_EVAL_CTX; + +typedef struct ossl_store_info_st OSSL_STORE_INFO; +typedef struct ossl_store_search_st OSSL_STORE_SEARCH; + +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L && \ + defined(INTMAX_MAX) && defined(UINTMAX_MAX) +typedef intmax_t ossl_intmax_t; +typedef uintmax_t ossl_uintmax_t; +#else +/* + * Not long long, because the C-library can only be expected to provide + * strtoll(), strtoull() at the same time as intmax_t and strtoimax(), + * strtoumax(). Since we use these for parsing arguments, we need the + * conversion functions, not just the sizes. + */ +typedef long ossl_intmax_t; +typedef unsigned long ossl_uintmax_t; +#endif + +#ifdef __cplusplus +} +#endif +#endif /* def HEADER_OPENSSL_TYPES_H */ diff --git a/lib/openssl/include/openssl/pem.h b/lib/openssl/include/openssl/pem.h new file mode 100644 index 0000000..2ef5b5d --- /dev/null +++ b/lib/openssl/include/openssl/pem.h @@ -0,0 +1,378 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM_H +# define HEADER_PEM_H + +# include +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PEM_BUFSIZE 1024 + +# define PEM_STRING_X509_OLD "X509 CERTIFICATE" +# define PEM_STRING_X509 "CERTIFICATE" +# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" +# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" +# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" +# define PEM_STRING_X509_CRL "X509 CRL" +# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" +# define PEM_STRING_PUBLIC "PUBLIC KEY" +# define PEM_STRING_RSA "RSA PRIVATE KEY" +# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" +# define PEM_STRING_DSA "DSA PRIVATE KEY" +# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" +# define PEM_STRING_PKCS7 "PKCS7" +# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" +# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" +# define PEM_STRING_PKCS8INF "PRIVATE KEY" +# define PEM_STRING_DHPARAMS "DH PARAMETERS" +# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" +# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" +# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" +# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" +# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" +# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" +# define PEM_STRING_PARAMETERS "PARAMETERS" +# define PEM_STRING_CMS "CMS" + +# define PEM_TYPE_ENCRYPTED 10 +# define PEM_TYPE_MIC_ONLY 20 +# define PEM_TYPE_MIC_CLEAR 30 +# define PEM_TYPE_CLEAR 40 + +/* + * These macros make the PEM_read/PEM_write functions easier to maintain and + * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or + * IMPLEMENT_PEM_rw_cb(...) + */ + +# ifdef OPENSSL_NO_STDIO + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) /**/ +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) /**/ +# else + +# define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \ +type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, const type *x) \ +{ \ +return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \ +int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, \ + void *u) \ + { \ + return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \ + } + +# endif + +# define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ +type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\ +{ \ +return PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \ +} + +# define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, const type *x) \ +{ \ +return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \ +} + +# define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ +int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \ + { \ + return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \ + } + +# define IMPLEMENT_PEM_write(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_write_cb_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_read_bio(name, type, str, asn1) \ + IMPLEMENT_PEM_read_fp(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_const(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_const(name, type, str, asn1) + +# define IMPLEMENT_PEM_rw_cb(name, type, str, asn1) \ + IMPLEMENT_PEM_read(name, type, str, asn1) \ + IMPLEMENT_PEM_write_cb(name, type, str, asn1) + +/* These are the same except they are for the declarations */ + +# if defined(OPENSSL_NO_STDIO) + +# define DECLARE_PEM_read_fp(name, type) /**/ +# define DECLARE_PEM_write_fp(name, type) /**/ +# define DECLARE_PEM_write_fp_const(name, type) /**/ +# define DECLARE_PEM_write_cb_fp(name, type) /**/ +# else + +# define DECLARE_PEM_read_fp(name, type) \ + type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x); + +# define DECLARE_PEM_write_fp_const(name, type) \ + int PEM_write_##name(FILE *fp, const type *x); + +# define DECLARE_PEM_write_cb_fp(name, type) \ + int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# endif + +# define DECLARE_PEM_read_bio(name, type) \ + type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x); + +# define DECLARE_PEM_write_bio_const(name, type) \ + int PEM_write_bio_##name(BIO *bp, const type *x); + +# define DECLARE_PEM_write_cb_bio(name, type) \ + int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \ + unsigned char *kstr, int klen, pem_password_cb *cb, void *u); + +# define DECLARE_PEM_write(name, type) \ + DECLARE_PEM_write_bio(name, type) \ + DECLARE_PEM_write_fp(name, type) +# define DECLARE_PEM_write_const(name, type) \ + DECLARE_PEM_write_bio_const(name, type) \ + DECLARE_PEM_write_fp_const(name, type) +# define DECLARE_PEM_write_cb(name, type) \ + DECLARE_PEM_write_cb_bio(name, type) \ + DECLARE_PEM_write_cb_fp(name, type) +# define DECLARE_PEM_read(name, type) \ + DECLARE_PEM_read_bio(name, type) \ + DECLARE_PEM_read_fp(name, type) +# define DECLARE_PEM_rw(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write(name, type) +# define DECLARE_PEM_rw_const(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_const(name, type) +# define DECLARE_PEM_rw_cb(name, type) \ + DECLARE_PEM_read(name, type) \ + DECLARE_PEM_write_cb(name, type) +typedef int pem_password_cb (char *buf, int size, int rwflag, void *userdata); + +int PEM_get_EVP_CIPHER_INFO(char *header, EVP_CIPHER_INFO *cipher); +int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len, + pem_password_cb *callback, void *u); + +int PEM_read_bio(BIO *bp, char **name, char **header, + unsigned char **data, long *len); +# define PEM_FLAG_SECURE 0x1 +# define PEM_FLAG_EAY_COMPATIBLE 0x2 +# define PEM_FLAG_ONLY_B64 0x4 +int PEM_read_bio_ex(BIO *bp, char **name, char **header, + unsigned char **data, long *len, unsigned int flags); +int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +int PEM_write_bio(BIO *bp, const char *name, const char *hdr, + const unsigned char *data, long len); +int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, + const char *name, BIO *bp, pem_password_cb *cb, + void *u); +void *PEM_ASN1_read_bio(d2i_of_void *d2i, const char *name, BIO *bp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp, void *x, + const EVP_CIPHER *enc, unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cd, void *u); + +#ifndef OPENSSL_NO_STDIO +int PEM_read(FILE *fp, char **name, char **header, + unsigned char **data, long *len); +int PEM_write(FILE *fp, const char *name, const char *hdr, + const unsigned char *data, long len); +void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x, + pem_password_cb *cb, void *u); +int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp, + void *x, const EVP_CIPHER *enc, unsigned char *kstr, + int klen, pem_password_cb *callback, void *u); +STACK_OF(X509_INFO) *PEM_X509_INFO_read(FILE *fp, STACK_OF(X509_INFO) *sk, + pem_password_cb *cb, void *u); +#endif + +int PEM_SignInit(EVP_MD_CTX *ctx, EVP_MD *type); +int PEM_SignUpdate(EVP_MD_CTX *ctx, unsigned char *d, unsigned int cnt); +int PEM_SignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, EVP_PKEY *pkey); + +/* The default pem_password_cb that's used internally */ +int PEM_def_callback(char *buf, int num, int rwflag, void *userdata); +void PEM_proc_type(char *buf, int type); +void PEM_dek_info(char *buf, const char *type, int len, char *str); + +# include + +DECLARE_PEM_rw(X509, X509) +DECLARE_PEM_rw(X509_AUX, X509) +DECLARE_PEM_rw(X509_REQ, X509_REQ) +DECLARE_PEM_write(X509_REQ_NEW, X509_REQ) +DECLARE_PEM_rw(X509_CRL, X509_CRL) +DECLARE_PEM_rw(PKCS7, PKCS7) +DECLARE_PEM_rw(NETSCAPE_CERT_SEQUENCE, NETSCAPE_CERT_SEQUENCE) +DECLARE_PEM_rw(PKCS8, X509_SIG) +DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO) +# ifndef OPENSSL_NO_RSA +DECLARE_PEM_rw_cb(RSAPrivateKey, RSA) +DECLARE_PEM_rw_const(RSAPublicKey, RSA) +DECLARE_PEM_rw(RSA_PUBKEY, RSA) +# endif +# ifndef OPENSSL_NO_DSA +DECLARE_PEM_rw_cb(DSAPrivateKey, DSA) +DECLARE_PEM_rw(DSA_PUBKEY, DSA) +DECLARE_PEM_rw_const(DSAparams, DSA) +# endif +# ifndef OPENSSL_NO_EC +DECLARE_PEM_rw_const(ECPKParameters, EC_GROUP) +DECLARE_PEM_rw_cb(ECPrivateKey, EC_KEY) +DECLARE_PEM_rw(EC_PUBKEY, EC_KEY) +# endif +# ifndef OPENSSL_NO_DH +DECLARE_PEM_rw_const(DHparams, DH) +DECLARE_PEM_write_const(DHxparams, DH) +# endif +DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY) +DECLARE_PEM_rw(PUBKEY, EVP_PKEY) + +int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x, + const EVP_CIPHER *enc, + unsigned char *kstr, int klen, + pem_password_cb *cb, void *u); + +int PEM_write_bio_PKCS8PrivateKey_nid(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_bio_PKCS8PrivateKey(BIO *, EVP_PKEY *, const EVP_CIPHER *, + char *, int, pem_password_cb *, void *); +int i2d_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_bio(BIO *bp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +EVP_PKEY *d2i_PKCS8PrivateKey_bio(BIO *bp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int i2d_PKCS8PrivateKey_nid_fp(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); +int PEM_write_PKCS8PrivateKey_nid(FILE *fp, EVP_PKEY *x, int nid, + char *kstr, int klen, + pem_password_cb *cb, void *u); + +EVP_PKEY *d2i_PKCS8PrivateKey_fp(FILE *fp, EVP_PKEY **x, pem_password_cb *cb, + void *u); + +int PEM_write_PKCS8PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc, + char *kstr, int klen, pem_password_cb *cd, + void *u); +# endif +EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x); +int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x); + +# ifndef OPENSSL_NO_DSA +EVP_PKEY *b2i_PrivateKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PublicKey(const unsigned char **in, long length); +EVP_PKEY *b2i_PrivateKey_bio(BIO *in); +EVP_PKEY *b2i_PublicKey_bio(BIO *in); +int i2b_PrivateKey_bio(BIO *out, EVP_PKEY *pk); +int i2b_PublicKey_bio(BIO *out, EVP_PKEY *pk); +# ifndef OPENSSL_NO_RC4 +EVP_PKEY *b2i_PVK_bio(BIO *in, pem_password_cb *cb, void *u); +int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel, + pem_password_cb *cb, void *u); +# endif +# endif + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/pem2.h b/lib/openssl/include/openssl/pem2.h new file mode 100644 index 0000000..038fe79 --- /dev/null +++ b/lib/openssl/include/openssl/pem2.h @@ -0,0 +1,13 @@ +/* + * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEM2_H +# define HEADER_PEM2_H +# include +#endif diff --git a/lib/openssl/include/openssl/pemerr.h b/lib/openssl/include/openssl/pemerr.h new file mode 100644 index 0000000..4f7e357 --- /dev/null +++ b/lib/openssl/include/openssl/pemerr.h @@ -0,0 +1,105 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PEMERR_H +# define HEADER_PEMERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PEM_strings(void); + +/* + * PEM function codes. + */ +# define PEM_F_B2I_DSS 127 +# define PEM_F_B2I_PVK_BIO 128 +# define PEM_F_B2I_RSA 129 +# define PEM_F_CHECK_BITLEN_DSA 130 +# define PEM_F_CHECK_BITLEN_RSA 131 +# define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120 +# define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121 +# define PEM_F_DO_B2I 132 +# define PEM_F_DO_B2I_BIO 133 +# define PEM_F_DO_BLOB_HEADER 134 +# define PEM_F_DO_I2B 146 +# define PEM_F_DO_PK8PKEY 126 +# define PEM_F_DO_PK8PKEY_FP 125 +# define PEM_F_DO_PVK_BODY 135 +# define PEM_F_DO_PVK_HEADER 136 +# define PEM_F_GET_HEADER_AND_DATA 143 +# define PEM_F_GET_NAME 144 +# define PEM_F_I2B_PVK 137 +# define PEM_F_I2B_PVK_BIO 138 +# define PEM_F_LOAD_IV 101 +# define PEM_F_PEM_ASN1_READ 102 +# define PEM_F_PEM_ASN1_READ_BIO 103 +# define PEM_F_PEM_ASN1_WRITE 104 +# define PEM_F_PEM_ASN1_WRITE_BIO 105 +# define PEM_F_PEM_DEF_CALLBACK 100 +# define PEM_F_PEM_DO_HEADER 106 +# define PEM_F_PEM_GET_EVP_CIPHER_INFO 107 +# define PEM_F_PEM_READ 108 +# define PEM_F_PEM_READ_BIO 109 +# define PEM_F_PEM_READ_BIO_DHPARAMS 141 +# define PEM_F_PEM_READ_BIO_EX 145 +# define PEM_F_PEM_READ_BIO_PARAMETERS 140 +# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123 +# define PEM_F_PEM_READ_DHPARAMS 142 +# define PEM_F_PEM_READ_PRIVATEKEY 124 +# define PEM_F_PEM_SIGNFINAL 112 +# define PEM_F_PEM_WRITE 113 +# define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 +# define PEM_F_PEM_WRITE_PRIVATEKEY 139 +# define PEM_F_PEM_X509_INFO_READ 115 +# define PEM_F_PEM_X509_INFO_READ_BIO 116 +# define PEM_F_PEM_X509_INFO_WRITE_BIO 117 + +/* + * PEM reason codes. + */ +# define PEM_R_BAD_BASE64_DECODE 100 +# define PEM_R_BAD_DECRYPT 101 +# define PEM_R_BAD_END_LINE 102 +# define PEM_R_BAD_IV_CHARS 103 +# define PEM_R_BAD_MAGIC_NUMBER 116 +# define PEM_R_BAD_PASSWORD_READ 104 +# define PEM_R_BAD_VERSION_NUMBER 117 +# define PEM_R_BIO_WRITE_FAILURE 118 +# define PEM_R_CIPHER_IS_NULL 127 +# define PEM_R_ERROR_CONVERTING_PRIVATE_KEY 115 +# define PEM_R_EXPECTING_PRIVATE_KEY_BLOB 119 +# define PEM_R_EXPECTING_PUBLIC_KEY_BLOB 120 +# define PEM_R_HEADER_TOO_LONG 128 +# define PEM_R_INCONSISTENT_HEADER 121 +# define PEM_R_KEYBLOB_HEADER_PARSE_ERROR 122 +# define PEM_R_KEYBLOB_TOO_SHORT 123 +# define PEM_R_MISSING_DEK_IV 129 +# define PEM_R_NOT_DEK_INFO 105 +# define PEM_R_NOT_ENCRYPTED 106 +# define PEM_R_NOT_PROC_TYPE 107 +# define PEM_R_NO_START_LINE 108 +# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 +# define PEM_R_PVK_DATA_TOO_SHORT 124 +# define PEM_R_PVK_TOO_SHORT 125 +# define PEM_R_READ_KEY 111 +# define PEM_R_SHORT_HEADER 112 +# define PEM_R_UNEXPECTED_DEK_IV 130 +# define PEM_R_UNSUPPORTED_CIPHER 113 +# define PEM_R_UNSUPPORTED_ENCRYPTION 114 +# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 +# define PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE 110 + +#endif diff --git a/lib/openssl/include/openssl/pkcs12.h b/lib/openssl/include/openssl/pkcs12.h new file mode 100644 index 0000000..3f43dad --- /dev/null +++ b/lib/openssl/include/openssl/pkcs12.h @@ -0,0 +1,223 @@ +/* + * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS12_H +# define HEADER_PKCS12_H + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define PKCS12_KEY_ID 1 +# define PKCS12_IV_ID 2 +# define PKCS12_MAC_ID 3 + +/* Default iteration count */ +# ifndef PKCS12_DEFAULT_ITER +# define PKCS12_DEFAULT_ITER PKCS5_DEFAULT_ITER +# endif + +# define PKCS12_MAC_KEY_LENGTH 20 + +# define PKCS12_SALT_LEN 8 + +/* It's not clear if these are actually needed... */ +# define PKCS12_key_gen PKCS12_key_gen_utf8 +# define PKCS12_add_friendlyname PKCS12_add_friendlyname_utf8 + +/* MS key usage constants */ + +# define KEY_EX 0x10 +# define KEY_SIG 0x80 + +typedef struct PKCS12_MAC_DATA_st PKCS12_MAC_DATA; + +typedef struct PKCS12_st PKCS12; + +typedef struct PKCS12_SAFEBAG_st PKCS12_SAFEBAG; + +DEFINE_STACK_OF(PKCS12_SAFEBAG) + +typedef struct pkcs12_bag_st PKCS12_BAGS; + +# define PKCS12_ERROR 0 +# define PKCS12_OK 1 + +/* Compatibility macros */ + +#if OPENSSL_API_COMPAT < 0x10100000L + +# define M_PKCS12_bag_type PKCS12_bag_type +# define M_PKCS12_cert_bag_type PKCS12_cert_bag_type +# define M_PKCS12_crl_bag_type PKCS12_cert_bag_type + +# define PKCS12_certbag2x509 PKCS12_SAFEBAG_get1_cert +# define PKCS12_certbag2scrl PKCS12_SAFEBAG_get1_crl +# define PKCS12_bag_type PKCS12_SAFEBAG_get_nid +# define PKCS12_cert_bag_type PKCS12_SAFEBAG_get_bag_nid +# define PKCS12_x5092certbag PKCS12_SAFEBAG_create_cert +# define PKCS12_x509crl2certbag PKCS12_SAFEBAG_create_crl +# define PKCS12_MAKE_KEYBAG PKCS12_SAFEBAG_create0_p8inf +# define PKCS12_MAKE_SHKEYBAG PKCS12_SAFEBAG_create_pkcs8_encrypt + +#endif + +DEPRECATEDIN_1_1_0(ASN1_TYPE *PKCS12_get_attr(const PKCS12_SAFEBAG *bag, int attr_nid)) + +ASN1_TYPE *PKCS8_get_attr(PKCS8_PRIV_KEY_INFO *p8, int attr_nid); +int PKCS12_mac_present(const PKCS12 *p12); +void PKCS12_get0_mac(const ASN1_OCTET_STRING **pmac, + const X509_ALGOR **pmacalg, + const ASN1_OCTET_STRING **psalt, + const ASN1_INTEGER **piter, + const PKCS12 *p12); + +const ASN1_TYPE *PKCS12_SAFEBAG_get0_attr(const PKCS12_SAFEBAG *bag, + int attr_nid); +const ASN1_OBJECT *PKCS12_SAFEBAG_get0_type(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_nid(const PKCS12_SAFEBAG *bag); +int PKCS12_SAFEBAG_get_bag_nid(const PKCS12_SAFEBAG *bag); + +X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); +X509_CRL *PKCS12_SAFEBAG_get1_crl(const PKCS12_SAFEBAG *bag); +const STACK_OF(PKCS12_SAFEBAG) * +PKCS12_SAFEBAG_get0_safes(const PKCS12_SAFEBAG *bag); +const PKCS8_PRIV_KEY_INFO *PKCS12_SAFEBAG_get0_p8inf(const PKCS12_SAFEBAG *bag); +const X509_SIG *PKCS12_SAFEBAG_get0_pkcs8(const PKCS12_SAFEBAG *bag); + +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_cert(X509 *x509); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_crl(X509_CRL *crl); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_p8inf(PKCS8_PRIV_KEY_INFO *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create0_pkcs8(X509_SIG *p8); +PKCS12_SAFEBAG *PKCS12_SAFEBAG_create_pkcs8_encrypt(int pbe_nid, + const char *pass, + int passlen, + unsigned char *salt, + int saltlen, int iter, + PKCS8_PRIV_KEY_INFO *p8inf); + +PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, + int nid1, int nid2); +PKCS8_PRIV_KEY_INFO *PKCS8_decrypt(const X509_SIG *p8, const char *pass, + int passlen); +PKCS8_PRIV_KEY_INFO *PKCS12_decrypt_skey(const PKCS12_SAFEBAG *bag, + const char *pass, int passlen); +X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher, + const char *pass, int passlen, unsigned char *salt, + int saltlen, int iter, PKCS8_PRIV_KEY_INFO *p8); +X509_SIG *PKCS8_set0_pbe(const char *pass, int passlen, + PKCS8_PRIV_KEY_INFO *p8inf, X509_ALGOR *pbe); +PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7); +PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + STACK_OF(PKCS12_SAFEBAG) *bags); +STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + int passlen); + +int PKCS12_pack_authsafes(PKCS12 *p12, STACK_OF(PKCS7) *safes); +STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12); + +int PKCS12_add_localkeyid(PKCS12_SAFEBAG *bag, unsigned char *name, + int namelen); +int PKCS12_add_friendlyname_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_utf8(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_CSPName_asc(PKCS12_SAFEBAG *bag, const char *name, + int namelen); +int PKCS12_add_friendlyname_uni(PKCS12_SAFEBAG *bag, + const unsigned char *name, int namelen); +int PKCS8_add_keyusage(PKCS8_PRIV_KEY_INFO *p8, int usage); +ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, + int attr_nid); +char *PKCS12_get_friendlyname(PKCS12_SAFEBAG *bag); +const STACK_OF(X509_ATTRIBUTE) * +PKCS12_SAFEBAG_get0_attrs(const PKCS12_SAFEBAG *bag); +unsigned char *PKCS12_pbe_crypt(const X509_ALGOR *algor, + const char *pass, int passlen, + const unsigned char *in, int inlen, + unsigned char **data, int *datalen, + int en_de); +void *PKCS12_item_decrypt_d2i(const X509_ALGOR *algor, const ASN1_ITEM *it, + const char *pass, int passlen, + const ASN1_OCTET_STRING *oct, int zbuf); +ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor, + const ASN1_ITEM *it, + const char *pass, int passlen, + void *obj, int zbuf); +PKCS12 *PKCS12_init(int mode); +int PKCS12_key_gen_asc(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_uni(unsigned char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_key_gen_utf8(const char *pass, int passlen, unsigned char *salt, + int saltlen, int id, int iter, int n, + unsigned char *out, const EVP_MD *md_type); +int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, + ASN1_TYPE *param, const EVP_CIPHER *cipher, + const EVP_MD *md_type, int en_de); +int PKCS12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *mac, unsigned int *maclen); +int PKCS12_verify_mac(PKCS12 *p12, const char *pass, int passlen); +int PKCS12_set_mac(PKCS12 *p12, const char *pass, int passlen, + unsigned char *salt, int saltlen, int iter, + const EVP_MD *md_type); +int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, + int saltlen, const EVP_MD *md_type); +unsigned char *OPENSSL_asc2uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2asc(const unsigned char *uni, int unilen); +unsigned char *OPENSSL_utf82uni(const char *asc, int asclen, + unsigned char **uni, int *unilen); +char *OPENSSL_uni2utf8(const unsigned char *uni, int unilen); + +DECLARE_ASN1_FUNCTIONS(PKCS12) +DECLARE_ASN1_FUNCTIONS(PKCS12_MAC_DATA) +DECLARE_ASN1_FUNCTIONS(PKCS12_SAFEBAG) +DECLARE_ASN1_FUNCTIONS(PKCS12_BAGS) + +DECLARE_ASN1_ITEM(PKCS12_SAFEBAGS) +DECLARE_ASN1_ITEM(PKCS12_AUTHSAFES) + +void PKCS12_PBE_add(void); +int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509 **cert, + STACK_OF(X509) **ca); +PKCS12 *PKCS12_create(const char *pass, const char *name, EVP_PKEY *pkey, + X509 *cert, STACK_OF(X509) *ca, int nid_key, int nid_cert, + int iter, int mac_iter, int keytype); + +PKCS12_SAFEBAG *PKCS12_add_cert(STACK_OF(PKCS12_SAFEBAG) **pbags, X509 *cert); +PKCS12_SAFEBAG *PKCS12_add_key(STACK_OF(PKCS12_SAFEBAG) **pbags, + EVP_PKEY *key, int key_usage, int iter, + int key_nid, const char *pass); +int PKCS12_add_safe(STACK_OF(PKCS7) **psafes, STACK_OF(PKCS12_SAFEBAG) *bags, + int safe_nid, int iter, const char *pass); +PKCS12 *PKCS12_add_safes(STACK_OF(PKCS7) *safes, int p7_nid); + +int i2d_PKCS12_bio(BIO *bp, PKCS12 *p12); +# ifndef OPENSSL_NO_STDIO +int i2d_PKCS12_fp(FILE *fp, PKCS12 *p12); +# endif +PKCS12 *d2i_PKCS12_bio(BIO *bp, PKCS12 **p12); +# ifndef OPENSSL_NO_STDIO +PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12); +# endif +int PKCS12_newpass(PKCS12 *p12, const char *oldpass, const char *newpass); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/pkcs12err.h b/lib/openssl/include/openssl/pkcs12err.h new file mode 100644 index 0000000..eff5eb2 --- /dev/null +++ b/lib/openssl/include/openssl/pkcs12err.h @@ -0,0 +1,81 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS12ERR_H +# define HEADER_PKCS12ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS12_strings(void); + +/* + * PKCS12 function codes. + */ +# define PKCS12_F_OPENSSL_ASC2UNI 121 +# define PKCS12_F_OPENSSL_UNI2ASC 124 +# define PKCS12_F_OPENSSL_UNI2UTF8 127 +# define PKCS12_F_OPENSSL_UTF82UNI 129 +# define PKCS12_F_PKCS12_CREATE 105 +# define PKCS12_F_PKCS12_GEN_MAC 107 +# define PKCS12_F_PKCS12_INIT 109 +# define PKCS12_F_PKCS12_ITEM_DECRYPT_D2I 106 +# define PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT 108 +# define PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG 117 +# define PKCS12_F_PKCS12_KEY_GEN_ASC 110 +# define PKCS12_F_PKCS12_KEY_GEN_UNI 111 +# define PKCS12_F_PKCS12_KEY_GEN_UTF8 116 +# define PKCS12_F_PKCS12_NEWPASS 128 +# define PKCS12_F_PKCS12_PACK_P7DATA 114 +# define PKCS12_F_PKCS12_PACK_P7ENCDATA 115 +# define PKCS12_F_PKCS12_PARSE 118 +# define PKCS12_F_PKCS12_PBE_CRYPT 119 +# define PKCS12_F_PKCS12_PBE_KEYIVGEN 120 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_P8INF 112 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE0_PKCS8 113 +# define PKCS12_F_PKCS12_SAFEBAG_CREATE_PKCS8_ENCRYPT 133 +# define PKCS12_F_PKCS12_SETUP_MAC 122 +# define PKCS12_F_PKCS12_SET_MAC 123 +# define PKCS12_F_PKCS12_UNPACK_AUTHSAFES 130 +# define PKCS12_F_PKCS12_UNPACK_P7DATA 131 +# define PKCS12_F_PKCS12_VERIFY_MAC 126 +# define PKCS12_F_PKCS8_ENCRYPT 125 +# define PKCS12_F_PKCS8_SET0_PBE 132 + +/* + * PKCS12 reason codes. + */ +# define PKCS12_R_CANT_PACK_STRUCTURE 100 +# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 +# define PKCS12_R_DECODE_ERROR 101 +# define PKCS12_R_ENCODE_ERROR 102 +# define PKCS12_R_ENCRYPT_ERROR 103 +# define PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE 120 +# define PKCS12_R_INVALID_NULL_ARGUMENT 104 +# define PKCS12_R_INVALID_NULL_PKCS12_POINTER 105 +# define PKCS12_R_IV_GEN_ERROR 106 +# define PKCS12_R_KEY_GEN_ERROR 107 +# define PKCS12_R_MAC_ABSENT 108 +# define PKCS12_R_MAC_GENERATION_ERROR 109 +# define PKCS12_R_MAC_SETUP_ERROR 110 +# define PKCS12_R_MAC_STRING_SET_ERROR 111 +# define PKCS12_R_MAC_VERIFY_FAILURE 113 +# define PKCS12_R_PARSE_ERROR 114 +# define PKCS12_R_PKCS12_ALGOR_CIPHERINIT_ERROR 115 +# define PKCS12_R_PKCS12_CIPHERFINAL_ERROR 116 +# define PKCS12_R_PKCS12_PBE_CRYPT_ERROR 117 +# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 +# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 + +#endif diff --git a/lib/openssl/include/openssl/pkcs7.h b/lib/openssl/include/openssl/pkcs7.h new file mode 100644 index 0000000..9b66e00 --- /dev/null +++ b/lib/openssl/include/openssl/pkcs7.h @@ -0,0 +1,319 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7_H +# define HEADER_PKCS7_H + +# include +# include +# include + +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +Encryption_ID DES-CBC +Digest_ID MD5 +Digest_Encryption_ID rsaEncryption +Key_Encryption_ID rsaEncryption +*/ + +typedef struct pkcs7_issuer_and_serial_st { + X509_NAME *issuer; + ASN1_INTEGER *serial; +} PKCS7_ISSUER_AND_SERIAL; + +typedef struct pkcs7_signer_info_st { + ASN1_INTEGER *version; /* version 1 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *digest_alg; + STACK_OF(X509_ATTRIBUTE) *auth_attr; /* [ 0 ] */ + X509_ALGOR *digest_enc_alg; + ASN1_OCTET_STRING *enc_digest; + STACK_OF(X509_ATTRIBUTE) *unauth_attr; /* [ 1 ] */ + /* The private key to sign with */ + EVP_PKEY *pkey; +} PKCS7_SIGNER_INFO; + +DEFINE_STACK_OF(PKCS7_SIGNER_INFO) + +typedef struct pkcs7_recip_info_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ISSUER_AND_SERIAL *issuer_and_serial; + X509_ALGOR *key_enc_algor; + ASN1_OCTET_STRING *enc_key; + X509 *cert; /* get the pub-key from this */ +} PKCS7_RECIP_INFO; + +DEFINE_STACK_OF(PKCS7_RECIP_INFO) + +typedef struct pkcs7_signed_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + struct pkcs7_st *contents; +} PKCS7_SIGNED; +/* + * The above structure is very very similar to PKCS7_SIGN_ENVELOPE. How about + * merging the two + */ + +typedef struct pkcs7_enc_content_st { + ASN1_OBJECT *content_type; + X509_ALGOR *algorithm; + ASN1_OCTET_STRING *enc_data; /* [ 0 ] */ + const EVP_CIPHER *cipher; +} PKCS7_ENC_CONTENT; + +typedef struct pkcs7_enveloped_st { + ASN1_INTEGER *version; /* version 0 */ + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENVELOPE; + +typedef struct pkcs7_signedandenveloped_st { + ASN1_INTEGER *version; /* version 1 */ + STACK_OF(X509_ALGOR) *md_algs; /* md used */ + STACK_OF(X509) *cert; /* [ 0 ] */ + STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(PKCS7_SIGNER_INFO) *signer_info; + PKCS7_ENC_CONTENT *enc_data; + STACK_OF(PKCS7_RECIP_INFO) *recipientinfo; +} PKCS7_SIGN_ENVELOPE; + +typedef struct pkcs7_digest_st { + ASN1_INTEGER *version; /* version 0 */ + X509_ALGOR *md; /* md used */ + struct pkcs7_st *contents; + ASN1_OCTET_STRING *digest; +} PKCS7_DIGEST; + +typedef struct pkcs7_encrypted_st { + ASN1_INTEGER *version; /* version 0 */ + PKCS7_ENC_CONTENT *enc_data; +} PKCS7_ENCRYPT; + +typedef struct pkcs7_st { + /* + * The following is non NULL if it contains ASN1 encoding of this + * structure + */ + unsigned char *asn1; + long length; +# define PKCS7_S_HEADER 0 +# define PKCS7_S_BODY 1 +# define PKCS7_S_TAIL 2 + int state; /* used during processing */ + int detached; + ASN1_OBJECT *type; + /* content as defined by the type */ + /* + * all encryption/message digests are applied to the 'contents', leaving + * out the 'type' field. + */ + union { + char *ptr; + /* NID_pkcs7_data */ + ASN1_OCTET_STRING *data; + /* NID_pkcs7_signed */ + PKCS7_SIGNED *sign; + /* NID_pkcs7_enveloped */ + PKCS7_ENVELOPE *enveloped; + /* NID_pkcs7_signedAndEnveloped */ + PKCS7_SIGN_ENVELOPE *signed_and_enveloped; + /* NID_pkcs7_digest */ + PKCS7_DIGEST *digest; + /* NID_pkcs7_encrypted */ + PKCS7_ENCRYPT *encrypted; + /* Anything else */ + ASN1_TYPE *other; + } d; +} PKCS7; + +DEFINE_STACK_OF(PKCS7) + +# define PKCS7_OP_SET_DETACHED_SIGNATURE 1 +# define PKCS7_OP_GET_DETACHED_SIGNATURE 2 + +# define PKCS7_get_signed_attributes(si) ((si)->auth_attr) +# define PKCS7_get_attributes(si) ((si)->unauth_attr) + +# define PKCS7_type_is_signed(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_signed) +# define PKCS7_type_is_encrypted(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_encrypted) +# define PKCS7_type_is_enveloped(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_enveloped) +# define PKCS7_type_is_signedAndEnveloped(a) \ + (OBJ_obj2nid((a)->type) == NID_pkcs7_signedAndEnveloped) +# define PKCS7_type_is_data(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_data) +# define PKCS7_type_is_digest(a) (OBJ_obj2nid((a)->type) == NID_pkcs7_digest) + +# define PKCS7_set_detached(p,v) \ + PKCS7_ctrl(p,PKCS7_OP_SET_DETACHED_SIGNATURE,v,NULL) +# define PKCS7_get_detached(p) \ + PKCS7_ctrl(p,PKCS7_OP_GET_DETACHED_SIGNATURE,0,NULL) + +# define PKCS7_is_detached(p7) (PKCS7_type_is_signed(p7) && PKCS7_get_detached(p7)) + +/* S/MIME related flags */ + +# define PKCS7_TEXT 0x1 +# define PKCS7_NOCERTS 0x2 +# define PKCS7_NOSIGS 0x4 +# define PKCS7_NOCHAIN 0x8 +# define PKCS7_NOINTERN 0x10 +# define PKCS7_NOVERIFY 0x20 +# define PKCS7_DETACHED 0x40 +# define PKCS7_BINARY 0x80 +# define PKCS7_NOATTR 0x100 +# define PKCS7_NOSMIMECAP 0x200 +# define PKCS7_NOOLDMIMETYPE 0x400 +# define PKCS7_CRLFEOL 0x800 +# define PKCS7_STREAM 0x1000 +# define PKCS7_NOCRL 0x2000 +# define PKCS7_PARTIAL 0x4000 +# define PKCS7_REUSE_DIGEST 0x8000 +# define PKCS7_NO_DUAL_CONTENT 0x10000 + +/* Flags: for compatibility with older code */ + +# define SMIME_TEXT PKCS7_TEXT +# define SMIME_NOCERTS PKCS7_NOCERTS +# define SMIME_NOSIGS PKCS7_NOSIGS +# define SMIME_NOCHAIN PKCS7_NOCHAIN +# define SMIME_NOINTERN PKCS7_NOINTERN +# define SMIME_NOVERIFY PKCS7_NOVERIFY +# define SMIME_DETACHED PKCS7_DETACHED +# define SMIME_BINARY PKCS7_BINARY +# define SMIME_NOATTR PKCS7_NOATTR + +/* CRLF ASCII canonicalisation */ +# define SMIME_ASCIICRLF 0x80000 + +DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SERIAL) + +int PKCS7_ISSUER_AND_SERIAL_digest(PKCS7_ISSUER_AND_SERIAL *data, + const EVP_MD *type, unsigned char *md, + unsigned int *len); +# ifndef OPENSSL_NO_STDIO +PKCS7 *d2i_PKCS7_fp(FILE *fp, PKCS7 **p7); +int i2d_PKCS7_fp(FILE *fp, PKCS7 *p7); +# endif +PKCS7 *PKCS7_dup(PKCS7 *p7); +PKCS7 *d2i_PKCS7_bio(BIO *bp, PKCS7 **p7); +int i2d_PKCS7_bio(BIO *bp, PKCS7 *p7); +int i2d_PKCS7_bio_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); +int PEM_write_bio_PKCS7_stream(BIO *out, PKCS7 *p7, BIO *in, int flags); + +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNER_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_RECIP_INFO) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGNED) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENC_CONTENT) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_SIGN_ENVELOPE) +DECLARE_ASN1_FUNCTIONS(PKCS7_DIGEST) +DECLARE_ASN1_FUNCTIONS(PKCS7_ENCRYPT) +DECLARE_ASN1_FUNCTIONS(PKCS7) + +DECLARE_ASN1_ITEM(PKCS7_ATTR_SIGN) +DECLARE_ASN1_ITEM(PKCS7_ATTR_VERIFY) + +DECLARE_ASN1_NDEF_FUNCTION(PKCS7) +DECLARE_ASN1_PRINT_FUNCTION(PKCS7) + +long PKCS7_ctrl(PKCS7 *p7, int cmd, long larg, char *parg); + +int PKCS7_set_type(PKCS7 *p7, int type); +int PKCS7_set0_type_other(PKCS7 *p7, int type, ASN1_TYPE *other); +int PKCS7_set_content(PKCS7 *p7, PKCS7 *p7_data); +int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, + const EVP_MD *dgst); +int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); +int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); +int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); +int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_content_new(PKCS7 *p7, int nid); +int PKCS7_dataVerify(X509_STORE *cert_store, X509_STORE_CTX *ctx, + BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, + X509 *x509); + +BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); +int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); +BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert); + +PKCS7_SIGNER_INFO *PKCS7_add_signature(PKCS7 *p7, X509 *x509, + EVP_PKEY *pkey, const EVP_MD *dgst); +X509 *PKCS7_cert_from_signer_info(PKCS7 *p7, PKCS7_SIGNER_INFO *si); +int PKCS7_set_digest(PKCS7 *p7, const EVP_MD *md); +STACK_OF(PKCS7_SIGNER_INFO) *PKCS7_get_signer_info(PKCS7 *p7); + +PKCS7_RECIP_INFO *PKCS7_add_recipient(PKCS7 *p7, X509 *x509); +void PKCS7_SIGNER_INFO_get0_algs(PKCS7_SIGNER_INFO *si, EVP_PKEY **pk, + X509_ALGOR **pdig, X509_ALGOR **psig); +void PKCS7_RECIP_INFO_get0_alg(PKCS7_RECIP_INFO *ri, X509_ALGOR **penc); +int PKCS7_add_recipient_info(PKCS7 *p7, PKCS7_RECIP_INFO *ri); +int PKCS7_RECIP_INFO_set(PKCS7_RECIP_INFO *p7i, X509 *x509); +int PKCS7_set_cipher(PKCS7 *p7, const EVP_CIPHER *cipher); +int PKCS7_stream(unsigned char ***boundary, PKCS7 *p7); + +PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx); +ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_add_signed_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int type, + void *data); +int PKCS7_add_attribute(PKCS7_SIGNER_INFO *p7si, int nid, int atrtype, + void *value); +ASN1_TYPE *PKCS7_get_attribute(PKCS7_SIGNER_INFO *si, int nid); +ASN1_TYPE *PKCS7_get_signed_attribute(PKCS7_SIGNER_INFO *si, int nid); +int PKCS7_set_signed_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); +int PKCS7_set_attributes(PKCS7_SIGNER_INFO *p7si, + STACK_OF(X509_ATTRIBUTE) *sk); + +PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, + BIO *data, int flags); + +PKCS7_SIGNER_INFO *PKCS7_sign_add_signer(PKCS7 *p7, + X509 *signcert, EVP_PKEY *pkey, + const EVP_MD *md, int flags); + +int PKCS7_final(PKCS7 *p7, BIO *data, int flags); +int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store, + BIO *indata, BIO *out, int flags); +STACK_OF(X509) *PKCS7_get0_signers(PKCS7 *p7, STACK_OF(X509) *certs, + int flags); +PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, + int flags); +int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, + int flags); + +int PKCS7_add_attrib_smimecap(PKCS7_SIGNER_INFO *si, + STACK_OF(X509_ALGOR) *cap); +STACK_OF(X509_ALGOR) *PKCS7_get_smimecap(PKCS7_SIGNER_INFO *si); +int PKCS7_simple_smimecap(STACK_OF(X509_ALGOR) *sk, int nid, int arg); + +int PKCS7_add_attrib_content_type(PKCS7_SIGNER_INFO *si, ASN1_OBJECT *coid); +int PKCS7_add0_attrib_signing_time(PKCS7_SIGNER_INFO *si, ASN1_TIME *t); +int PKCS7_add1_attrib_digest(PKCS7_SIGNER_INFO *si, + const unsigned char *md, int mdlen); + +int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags); +PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont); + +BIO *BIO_new_PKCS7(BIO *out, PKCS7 *p7); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/pkcs7err.h b/lib/openssl/include/openssl/pkcs7err.h new file mode 100644 index 0000000..02e0299 --- /dev/null +++ b/lib/openssl/include/openssl/pkcs7err.h @@ -0,0 +1,103 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_PKCS7ERR_H +# define HEADER_PKCS7ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_PKCS7_strings(void); + +/* + * PKCS7 function codes. + */ +# define PKCS7_F_DO_PKCS7_SIGNED_ATTRIB 136 +# define PKCS7_F_PKCS7_ADD0_ATTRIB_SIGNING_TIME 135 +# define PKCS7_F_PKCS7_ADD_ATTRIB_SMIMECAP 118 +# define PKCS7_F_PKCS7_ADD_CERTIFICATE 100 +# define PKCS7_F_PKCS7_ADD_CRL 101 +# define PKCS7_F_PKCS7_ADD_RECIPIENT_INFO 102 +# define PKCS7_F_PKCS7_ADD_SIGNATURE 131 +# define PKCS7_F_PKCS7_ADD_SIGNER 103 +# define PKCS7_F_PKCS7_BIO_ADD_DIGEST 125 +# define PKCS7_F_PKCS7_COPY_EXISTING_DIGEST 138 +# define PKCS7_F_PKCS7_CTRL 104 +# define PKCS7_F_PKCS7_DATADECODE 112 +# define PKCS7_F_PKCS7_DATAFINAL 128 +# define PKCS7_F_PKCS7_DATAINIT 105 +# define PKCS7_F_PKCS7_DATAVERIFY 107 +# define PKCS7_F_PKCS7_DECRYPT 114 +# define PKCS7_F_PKCS7_DECRYPT_RINFO 133 +# define PKCS7_F_PKCS7_ENCODE_RINFO 132 +# define PKCS7_F_PKCS7_ENCRYPT 115 +# define PKCS7_F_PKCS7_FINAL 134 +# define PKCS7_F_PKCS7_FIND_DIGEST 127 +# define PKCS7_F_PKCS7_GET0_SIGNERS 124 +# define PKCS7_F_PKCS7_RECIP_INFO_SET 130 +# define PKCS7_F_PKCS7_SET_CIPHER 108 +# define PKCS7_F_PKCS7_SET_CONTENT 109 +# define PKCS7_F_PKCS7_SET_DIGEST 126 +# define PKCS7_F_PKCS7_SET_TYPE 110 +# define PKCS7_F_PKCS7_SIGN 116 +# define PKCS7_F_PKCS7_SIGNATUREVERIFY 113 +# define PKCS7_F_PKCS7_SIGNER_INFO_SET 129 +# define PKCS7_F_PKCS7_SIGNER_INFO_SIGN 139 +# define PKCS7_F_PKCS7_SIGN_ADD_SIGNER 137 +# define PKCS7_F_PKCS7_SIMPLE_SMIMECAP 119 +# define PKCS7_F_PKCS7_VERIFY 117 + +/* + * PKCS7 reason codes. + */ +# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 +# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 +# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 +# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 +# define PKCS7_R_CTRL_ERROR 152 +# define PKCS7_R_DECRYPT_ERROR 119 +# define PKCS7_R_DIGEST_FAILURE 101 +# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 +# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 +# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 +# define PKCS7_R_ERROR_SETTING_CIPHER 121 +# define PKCS7_R_INVALID_NULL_POINTER 143 +# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 +# define PKCS7_R_NO_CONTENT 122 +# define PKCS7_R_NO_DEFAULT_DIGEST 151 +# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 +# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 +# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 +# define PKCS7_R_NO_SIGNERS 142 +# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 +# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 +# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 +# define PKCS7_R_PKCS7_DATASIGN 145 +# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 +# define PKCS7_R_SIGNATURE_FAILURE 105 +# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 +# define PKCS7_R_SIGNING_CTRL_FAILURE 147 +# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 +# define PKCS7_R_SMIME_TEXT_ERROR 129 +# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 +# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 +# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 +# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 +# define PKCS7_R_UNKNOWN_OPERATION 110 +# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 +# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 +# define PKCS7_R_WRONG_CONTENT_TYPE 113 +# define PKCS7_R_WRONG_PKCS7_TYPE 114 + +#endif diff --git a/lib/openssl/include/openssl/rand.h b/lib/openssl/include/openssl/rand.h new file mode 100644 index 0000000..38a2a27 --- /dev/null +++ b/lib/openssl/include/openssl/rand.h @@ -0,0 +1,77 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RAND_H +# define HEADER_RAND_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +struct rand_meth_st { + int (*seed) (const void *buf, int num); + int (*bytes) (unsigned char *buf, int num); + void (*cleanup) (void); + int (*add) (const void *buf, int num, double randomness); + int (*pseudorand) (unsigned char *buf, int num); + int (*status) (void); +}; + +int RAND_set_rand_method(const RAND_METHOD *meth); +const RAND_METHOD *RAND_get_rand_method(void); +# ifndef OPENSSL_NO_ENGINE +int RAND_set_rand_engine(ENGINE *engine); +# endif + +RAND_METHOD *RAND_OpenSSL(void); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define RAND_cleanup() while(0) continue +# endif +int RAND_bytes(unsigned char *buf, int num); +int RAND_priv_bytes(unsigned char *buf, int num); +DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) + +void RAND_seed(const void *buf, int num); +void RAND_keep_random_devices_open(int keep); + +# if defined(__ANDROID__) && defined(__NDK_FPABI__) +__NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ +# endif +void RAND_add(const void *buf, int num, double randomness); +int RAND_load_file(const char *file, long max_bytes); +int RAND_write_file(const char *file); +const char *RAND_file_name(char *file, size_t num); +int RAND_status(void); + +# ifndef OPENSSL_NO_EGD +int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); +int RAND_egd(const char *path); +int RAND_egd_bytes(const char *path, int bytes); +# endif + +int RAND_poll(void); + +# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) +/* application has to include in order to use these */ +DEPRECATEDIN_1_1_0(void RAND_screen(void)) +DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) +# endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/rand_drbg.h b/lib/openssl/include/openssl/rand_drbg.h new file mode 100644 index 0000000..45b731b --- /dev/null +++ b/lib/openssl/include/openssl/rand_drbg.h @@ -0,0 +1,130 @@ +/* + * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_DRBG_RAND_H +# define HEADER_DRBG_RAND_H + +# include +# include +# include + +/* + * RAND_DRBG flags + * + * Note: if new flags are added, the constant `rand_drbg_used_flags` + * in drbg_lib.c needs to be updated accordingly. + */ + +/* In CTR mode, disable derivation function ctr_df */ +# define RAND_DRBG_FLAG_CTR_NO_DF 0x1 + + +# if OPENSSL_API_COMPAT < 0x10200000L +/* This #define was replaced by an internal constant and should not be used. */ +# define RAND_DRBG_USED_FLAGS (RAND_DRBG_FLAG_CTR_NO_DF) +# endif + +/* + * Default security strength (in the sense of [NIST SP 800-90Ar1]) + * + * NIST SP 800-90Ar1 supports the strength of the DRBG being smaller than that + * of the cipher by collecting less entropy. The current DRBG implementation + * does not take RAND_DRBG_STRENGTH into account and sets the strength of the + * DRBG to that of the cipher. + * + * RAND_DRBG_STRENGTH is currently only used for the legacy RAND + * implementation. + * + * Currently supported ciphers are: NID_aes_128_ctr, NID_aes_192_ctr and + * NID_aes_256_ctr + */ +# define RAND_DRBG_STRENGTH 256 +/* Default drbg type */ +# define RAND_DRBG_TYPE NID_aes_256_ctr +/* Default drbg flags */ +# define RAND_DRBG_FLAGS 0 + + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * Object lifetime functions. + */ +RAND_DRBG *RAND_DRBG_new(int type, unsigned int flags, RAND_DRBG *parent); +RAND_DRBG *RAND_DRBG_secure_new(int type, unsigned int flags, RAND_DRBG *parent); +int RAND_DRBG_set(RAND_DRBG *drbg, int type, unsigned int flags); +int RAND_DRBG_set_defaults(int type, unsigned int flags); +int RAND_DRBG_instantiate(RAND_DRBG *drbg, + const unsigned char *pers, size_t perslen); +int RAND_DRBG_uninstantiate(RAND_DRBG *drbg); +void RAND_DRBG_free(RAND_DRBG *drbg); + +/* + * Object "use" functions. + */ +int RAND_DRBG_reseed(RAND_DRBG *drbg, + const unsigned char *adin, size_t adinlen, + int prediction_resistance); +int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, + int prediction_resistance, + const unsigned char *adin, size_t adinlen); +int RAND_DRBG_bytes(RAND_DRBG *drbg, unsigned char *out, size_t outlen); + +int RAND_DRBG_set_reseed_interval(RAND_DRBG *drbg, unsigned int interval); +int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval); + +int RAND_DRBG_set_reseed_defaults( + unsigned int master_reseed_interval, + unsigned int slave_reseed_interval, + time_t master_reseed_time_interval, + time_t slave_reseed_time_interval + ); + +RAND_DRBG *RAND_DRBG_get0_master(void); +RAND_DRBG *RAND_DRBG_get0_public(void); +RAND_DRBG *RAND_DRBG_get0_private(void); + +/* + * EXDATA + */ +# define RAND_DRBG_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_DRBG, l, p, newf, dupf, freef) +int RAND_DRBG_set_ex_data(RAND_DRBG *drbg, int idx, void *arg); +void *RAND_DRBG_get_ex_data(const RAND_DRBG *drbg, int idx); + +/* + * Callback function typedefs + */ +typedef size_t (*RAND_DRBG_get_entropy_fn)(RAND_DRBG *drbg, + unsigned char **pout, + int entropy, size_t min_len, + size_t max_len, + int prediction_resistance); +typedef void (*RAND_DRBG_cleanup_entropy_fn)(RAND_DRBG *ctx, + unsigned char *out, size_t outlen); +typedef size_t (*RAND_DRBG_get_nonce_fn)(RAND_DRBG *drbg, unsigned char **pout, + int entropy, size_t min_len, + size_t max_len); +typedef void (*RAND_DRBG_cleanup_nonce_fn)(RAND_DRBG *drbg, + unsigned char *out, size_t outlen); + +int RAND_DRBG_set_callbacks(RAND_DRBG *drbg, + RAND_DRBG_get_entropy_fn get_entropy, + RAND_DRBG_cleanup_entropy_fn cleanup_entropy, + RAND_DRBG_get_nonce_fn get_nonce, + RAND_DRBG_cleanup_nonce_fn cleanup_nonce); + + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/lib/openssl/include/openssl/randerr.h b/lib/openssl/include/openssl/randerr.h new file mode 100644 index 0000000..79d5790 --- /dev/null +++ b/lib/openssl/include/openssl/randerr.h @@ -0,0 +1,94 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RANDERR_H +# define HEADER_RANDERR_H + +# include + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RAND_strings(void); + +/* + * RAND function codes. + */ +# define RAND_F_DATA_COLLECT_METHOD 127 +# define RAND_F_DRBG_BYTES 101 +# define RAND_F_DRBG_GET_ENTROPY 105 +# define RAND_F_DRBG_SETUP 117 +# define RAND_F_GET_ENTROPY 106 +# define RAND_F_RAND_BYTES 100 +# define RAND_F_RAND_DRBG_ENABLE_LOCKING 119 +# define RAND_F_RAND_DRBG_GENERATE 107 +# define RAND_F_RAND_DRBG_GET_ENTROPY 120 +# define RAND_F_RAND_DRBG_GET_NONCE 123 +# define RAND_F_RAND_DRBG_INSTANTIATE 108 +# define RAND_F_RAND_DRBG_NEW 109 +# define RAND_F_RAND_DRBG_RESEED 110 +# define RAND_F_RAND_DRBG_RESTART 102 +# define RAND_F_RAND_DRBG_SET 104 +# define RAND_F_RAND_DRBG_SET_DEFAULTS 121 +# define RAND_F_RAND_DRBG_UNINSTANTIATE 118 +# define RAND_F_RAND_LOAD_FILE 111 +# define RAND_F_RAND_POOL_ACQUIRE_ENTROPY 122 +# define RAND_F_RAND_POOL_ADD 103 +# define RAND_F_RAND_POOL_ADD_BEGIN 113 +# define RAND_F_RAND_POOL_ADD_END 114 +# define RAND_F_RAND_POOL_ATTACH 124 +# define RAND_F_RAND_POOL_BYTES_NEEDED 115 +# define RAND_F_RAND_POOL_GROW 125 +# define RAND_F_RAND_POOL_NEW 116 +# define RAND_F_RAND_PSEUDO_BYTES 126 +# define RAND_F_RAND_WRITE_FILE 112 + +/* + * RAND reason codes. + */ +# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 +# define RAND_R_ALREADY_INSTANTIATED 103 +# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 +# define RAND_R_CANNOT_OPEN_FILE 121 +# define RAND_R_DRBG_ALREADY_INITIALIZED 129 +# define RAND_R_DRBG_NOT_INITIALISED 104 +# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 +# define RAND_R_ENTROPY_OUT_OF_RANGE 124 +# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 +# define RAND_R_ERROR_INITIALISING_DRBG 107 +# define RAND_R_ERROR_INSTANTIATING_DRBG 108 +# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 +# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 +# define RAND_R_ERROR_RETRIEVING_NONCE 111 +# define RAND_R_FAILED_TO_CREATE_LOCK 126 +# define RAND_R_FUNC_NOT_IMPLEMENTED 101 +# define RAND_R_FWRITE_ERROR 123 +# define RAND_R_GENERATE_ERROR 112 +# define RAND_R_INTERNAL_ERROR 113 +# define RAND_R_IN_ERROR_STATE 114 +# define RAND_R_NOT_A_REGULAR_FILE 122 +# define RAND_R_NOT_INSTANTIATED 115 +# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 +# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 +# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 +# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 +# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 +# define RAND_R_PRNG_NOT_SEEDED 100 +# define RAND_R_RANDOM_POOL_OVERFLOW 125 +# define RAND_R_RANDOM_POOL_UNDERFLOW 134 +# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 +# define RAND_R_RESEED_ERROR 118 +# define RAND_R_SELFTEST_FAILURE 119 +# define RAND_R_TOO_LITTLE_NONCE_REQUESTED 135 +# define RAND_R_TOO_MUCH_NONCE_REQUESTED 136 +# define RAND_R_UNSUPPORTED_DRBG_FLAGS 132 +# define RAND_R_UNSUPPORTED_DRBG_TYPE 120 + +#endif diff --git a/lib/openssl/include/openssl/rc2.h b/lib/openssl/include/openssl/rc2.h new file mode 100644 index 0000000..585f9e4 --- /dev/null +++ b/lib/openssl/include/openssl/rc2.h @@ -0,0 +1,51 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC2_H +# define HEADER_RC2_H + +# include + +# ifndef OPENSSL_NO_RC2 +# ifdef __cplusplus +extern "C" { +# endif + +typedef unsigned int RC2_INT; + +# define RC2_ENCRYPT 1 +# define RC2_DECRYPT 0 + +# define RC2_BLOCK 8 +# define RC2_KEY_LENGTH 16 + +typedef struct rc2_key_st { + RC2_INT data[64]; +} RC2_KEY; + +void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); +void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC2_KEY *key, int enc); +void RC2_encrypt(unsigned long *data, RC2_KEY *key); +void RC2_decrypt(unsigned long *data, RC2_KEY *key); +void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + RC2_KEY *ks, unsigned char *iv, int enc); +void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num, int enc); +void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC2_KEY *schedule, unsigned char *ivec, + int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/rc4.h b/lib/openssl/include/openssl/rc4.h new file mode 100644 index 0000000..86803b3 --- /dev/null +++ b/lib/openssl/include/openssl/rc4.h @@ -0,0 +1,36 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC4_H +# define HEADER_RC4_H + +# include + +# ifndef OPENSSL_NO_RC4 +# include +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct rc4_key_st { + RC4_INT x, y; + RC4_INT data[256]; +} RC4_KEY; + +const char *RC4_options(void); +void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); +void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, + unsigned char *outdata); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/rc5.h b/lib/openssl/include/openssl/rc5.h new file mode 100644 index 0000000..793f88e --- /dev/null +++ b/lib/openssl/include/openssl/rc5.h @@ -0,0 +1,63 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RC5_H +# define HEADER_RC5_H + +# include + +# ifndef OPENSSL_NO_RC5 +# ifdef __cplusplus +extern "C" { +# endif + +# define RC5_ENCRYPT 1 +# define RC5_DECRYPT 0 + +# define RC5_32_INT unsigned int + +# define RC5_32_BLOCK 8 +# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ + +/* + * This are the only values supported. Tweak the code if you want more The + * most supported modes will be RC5-32/12/16 RC5-32/16/8 + */ +# define RC5_8_ROUNDS 8 +# define RC5_12_ROUNDS 12 +# define RC5_16_ROUNDS 16 + +typedef struct rc5_key_st { + /* Number of rounds */ + int rounds; + RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; +} RC5_32_KEY; + +void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, + int rounds); +void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, + RC5_32_KEY *key, int enc); +void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); +void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *ks, unsigned char *iv, + int enc); +void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num, int enc); +void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, + long length, RC5_32_KEY *schedule, + unsigned char *ivec, int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/ripemd.h b/lib/openssl/include/openssl/ripemd.h new file mode 100644 index 0000000..c42026a --- /dev/null +++ b/lib/openssl/include/openssl/ripemd.h @@ -0,0 +1,47 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RIPEMD_H +# define HEADER_RIPEMD_H + +# include + +#ifndef OPENSSL_NO_RMD160 +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define RIPEMD160_LONG unsigned int + +# define RIPEMD160_CBLOCK 64 +# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) +# define RIPEMD160_DIGEST_LENGTH 20 + +typedef struct RIPEMD160state_st { + RIPEMD160_LONG A, B, C, D, E; + RIPEMD160_LONG Nl, Nh; + RIPEMD160_LONG data[RIPEMD160_LBLOCK]; + unsigned int num; +} RIPEMD160_CTX; + +int RIPEMD160_Init(RIPEMD160_CTX *c); +int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); +int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); +unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); +void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); + +# ifdef __cplusplus +} +# endif +# endif + + +#endif diff --git a/lib/openssl/include/openssl/rsa.h b/lib/openssl/include/openssl/rsa.h new file mode 100644 index 0000000..5e76365 --- /dev/null +++ b/lib/openssl/include/openssl/rsa.h @@ -0,0 +1,513 @@ +/* + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSA_H +# define HEADER_RSA_H + +# include + +# ifndef OPENSSL_NO_RSA +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# ifdef __cplusplus +extern "C" { +# endif + +/* The types RSA and RSA_METHOD are defined in ossl_typ.h */ + +# ifndef OPENSSL_RSA_MAX_MODULUS_BITS +# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 +# endif + +# define OPENSSL_RSA_FIPS_MIN_MODULUS_BITS 1024 + +# ifndef OPENSSL_RSA_SMALL_MODULUS_BITS +# define OPENSSL_RSA_SMALL_MODULUS_BITS 3072 +# endif +# ifndef OPENSSL_RSA_MAX_PUBEXP_BITS + +/* exponent limit enforced for "large" modulus only */ +# define OPENSSL_RSA_MAX_PUBEXP_BITS 64 +# endif + +# define RSA_3 0x3L +# define RSA_F4 0x10001L + +/* based on RFC 8017 appendix A.1.2 */ +# define RSA_ASN1_VERSION_DEFAULT 0 +# define RSA_ASN1_VERSION_MULTI 1 + +# define RSA_DEFAULT_PRIME_NUM 2 + +# define RSA_METHOD_FLAG_NO_CHECK 0x0001/* don't check pub/private + * match */ + +# define RSA_FLAG_CACHE_PUBLIC 0x0002 +# define RSA_FLAG_CACHE_PRIVATE 0x0004 +# define RSA_FLAG_BLINDING 0x0008 +# define RSA_FLAG_THREAD_SAFE 0x0010 +/* + * This flag means the private key operations will be handled by rsa_mod_exp + * and that they do not depend on the private key components being present: + * for example a key stored in external hardware. Without this flag + * bn_mod_exp gets called when private key components are absent. + */ +# define RSA_FLAG_EXT_PKEY 0x0020 + +/* + * new with 0.9.6j and 0.9.7b; the built-in + * RSA implementation now uses blinding by + * default (ignoring RSA_FLAG_BLINDING), + * but other engines might not need it + */ +# define RSA_FLAG_NO_BLINDING 0x0080 +# if OPENSSL_API_COMPAT < 0x10100000L +/* + * Does nothing. Previously this switched off constant time behaviour. + */ +# define RSA_FLAG_NO_CONSTTIME 0x0000 +# endif +# if OPENSSL_API_COMPAT < 0x00908000L +/* deprecated name for the flag*/ +/* + * new with 0.9.7h; the built-in RSA + * implementation now uses constant time + * modular exponentiation for secret exponents + * by default. This flag causes the + * faster variable sliding window method to + * be used for all exponents. + */ +# define RSA_FLAG_NO_EXP_CONSTTIME RSA_FLAG_NO_CONSTTIME +# endif + +# define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \ + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_RSA_PADDING, pad, NULL) + +# define EVP_PKEY_CTX_get_rsa_padding(ctx, ppad) \ + RSA_pkey_ctx_ctrl(ctx, -1, EVP_PKEY_CTRL_GET_RSA_PADDING, 0, ppad) + +# define EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, len) \ + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) +/* Salt length matches digest */ +# define RSA_PSS_SALTLEN_DIGEST -1 +/* Verify only: auto detect salt length */ +# define RSA_PSS_SALTLEN_AUTO -2 +/* Set salt length to maximum possible */ +# define RSA_PSS_SALTLEN_MAX -3 +/* Old compatible max salt length for sign only */ +# define RSA_PSS_SALTLEN_MAX_SIGN -2 + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_saltlen(ctx, len) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_PSS_SALTLEN, len, NULL) + +# define EVP_PKEY_CTX_get_rsa_pss_saltlen(ctx, plen) \ + RSA_pkey_ctx_ctrl(ctx, (EVP_PKEY_OP_SIGN|EVP_PKEY_OP_VERIFY), \ + EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN, 0, plen) + +# define EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, bits) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_BITS, bits, NULL) + +# define EVP_PKEY_CTX_set_rsa_keygen_pubexp(ctx, pubexp) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp) + +# define EVP_PKEY_CTX_set_rsa_keygen_primes(ctx, primes) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES, primes, NULL) + +# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_mgf1_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, EVP_PKEY_OP_KEYGEN, \ + EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)(md)) + +# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \ + RSA_pkey_ctx_ctrl(ctx, EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)(pmd)) + +# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)(l)) + +# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \ + EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)(l)) + +# define EVP_PKEY_CTX_set_rsa_pss_keygen_md(ctx, md) \ + EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA_PSS, \ + EVP_PKEY_OP_KEYGEN, EVP_PKEY_CTRL_MD, \ + 0, (void *)(md)) + +# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1) +# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) +# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) +# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) + +# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) +# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) +# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) + +# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) +# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) + +# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) +# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) + +# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) + +# define RSA_PKCS1_PADDING 1 +# define RSA_SSLV23_PADDING 2 +# define RSA_NO_PADDING 3 +# define RSA_PKCS1_OAEP_PADDING 4 +# define RSA_X931_PADDING 5 +/* EVP_PKEY_ only */ +# define RSA_PKCS1_PSS_PADDING 6 + +# define RSA_PKCS1_PADDING_SIZE 11 + +# define RSA_set_app_data(s,arg) RSA_set_ex_data(s,0,arg) +# define RSA_get_app_data(s) RSA_get_ex_data(s,0) + +RSA *RSA_new(void); +RSA *RSA_new_method(ENGINE *engine); +int RSA_bits(const RSA *rsa); +int RSA_size(const RSA *rsa); +int RSA_security_bits(const RSA *rsa); + +int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d); +int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q); +int RSA_set0_crt_params(RSA *r,BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp); +int RSA_set0_multi_prime_params(RSA *r, BIGNUM *primes[], BIGNUM *exps[], + BIGNUM *coeffs[], int pnum); +void RSA_get0_key(const RSA *r, + const BIGNUM **n, const BIGNUM **e, const BIGNUM **d); +void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q); +int RSA_get_multi_prime_extra_count(const RSA *r); +int RSA_get0_multi_prime_factors(const RSA *r, const BIGNUM *primes[]); +void RSA_get0_crt_params(const RSA *r, + const BIGNUM **dmp1, const BIGNUM **dmq1, + const BIGNUM **iqmp); +int RSA_get0_multi_prime_crt_params(const RSA *r, const BIGNUM *exps[], + const BIGNUM *coeffs[]); +const BIGNUM *RSA_get0_n(const RSA *d); +const BIGNUM *RSA_get0_e(const RSA *d); +const BIGNUM *RSA_get0_d(const RSA *d); +const BIGNUM *RSA_get0_p(const RSA *d); +const BIGNUM *RSA_get0_q(const RSA *d); +const BIGNUM *RSA_get0_dmp1(const RSA *r); +const BIGNUM *RSA_get0_dmq1(const RSA *r); +const BIGNUM *RSA_get0_iqmp(const RSA *r); +const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *r); +void RSA_clear_flags(RSA *r, int flags); +int RSA_test_flags(const RSA *r, int flags); +void RSA_set_flags(RSA *r, int flags); +int RSA_get_version(RSA *r); +ENGINE *RSA_get0_engine(const RSA *r); + +/* Deprecated version */ +DEPRECATEDIN_0_9_8(RSA *RSA_generate_key(int bits, unsigned long e, void + (*callback) (int, int, void *), + void *cb_arg)) + +/* New version */ +int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +/* Multi-prime version */ +int RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, + BIGNUM *e, BN_GENCB *cb); + +int RSA_X931_derive_ex(RSA *rsa, BIGNUM *p1, BIGNUM *p2, BIGNUM *q1, + BIGNUM *q2, const BIGNUM *Xp1, const BIGNUM *Xp2, + const BIGNUM *Xp, const BIGNUM *Xq1, const BIGNUM *Xq2, + const BIGNUM *Xq, const BIGNUM *e, BN_GENCB *cb); +int RSA_X931_generate_key_ex(RSA *rsa, int bits, const BIGNUM *e, + BN_GENCB *cb); + +int RSA_check_key(const RSA *); +int RSA_check_key_ex(const RSA *, BN_GENCB *cb); + /* next 4 return -1 on error */ +int RSA_public_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_encrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_public_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_private_decrypt(int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +void RSA_free(RSA *r); +/* "up" the RSA object's reference count */ +int RSA_up_ref(RSA *r); + +int RSA_flags(const RSA *r); + +void RSA_set_default_method(const RSA_METHOD *meth); +const RSA_METHOD *RSA_get_default_method(void); +const RSA_METHOD *RSA_null_method(void); +const RSA_METHOD *RSA_get_method(const RSA *rsa); +int RSA_set_method(RSA *rsa, const RSA_METHOD *meth); + +/* these are the actual RSA functions */ +const RSA_METHOD *RSA_PKCS1_OpenSSL(void); + +int RSA_pkey_ctx_ctrl(EVP_PKEY_CTX *ctx, int optype, int cmd, int p1, void *p2); + +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPublicKey) +DECLARE_ASN1_ENCODE_FUNCTIONS_const(RSA, RSAPrivateKey) + +struct rsa_pss_params_st { + X509_ALGOR *hashAlgorithm; + X509_ALGOR *maskGenAlgorithm; + ASN1_INTEGER *saltLength; + ASN1_INTEGER *trailerField; + /* Decoded hash algorithm from maskGenAlgorithm */ + X509_ALGOR *maskHash; +}; + +DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) + +typedef struct rsa_oaep_params_st { + X509_ALGOR *hashFunc; + X509_ALGOR *maskGenFunc; + X509_ALGOR *pSourceFunc; + /* Decoded hash algorithm from maskGenFunc */ + X509_ALGOR *maskHash; +} RSA_OAEP_PARAMS; + +DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) + +# ifndef OPENSSL_NO_STDIO +int RSA_print_fp(FILE *fp, const RSA *r, int offset); +# endif + +int RSA_print(BIO *bp, const RSA *r, int offset); + +/* + * The following 2 functions sign and verify a X509_SIG ASN1 object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign(int type, const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, RSA *rsa); +int RSA_verify(int type, const unsigned char *m, unsigned int m_length, + const unsigned char *sigbuf, unsigned int siglen, RSA *rsa); + +/* + * The following 2 function sign and verify a ASN1_OCTET_STRING object inside + * PKCS#1 padded RSA encryption + */ +int RSA_sign_ASN1_OCTET_STRING(int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + RSA *rsa); +int RSA_verify_ASN1_OCTET_STRING(int type, const unsigned char *m, + unsigned int m_length, unsigned char *sigbuf, + unsigned int siglen, RSA *rsa); + +int RSA_blinding_on(RSA *rsa, BN_CTX *ctx); +void RSA_blinding_off(RSA *rsa); +BN_BLINDING *RSA_setup_blinding(RSA *rsa, BN_CTX *ctx); + +int RSA_padding_add_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_1(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int RSA_padding_add_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_PKCS1_type_2(unsigned char *to, int tlen, + const unsigned char *f, int fl, + int rsa_len); +int PKCS1_MGF1(unsigned char *mask, long len, const unsigned char *seed, + long seedlen, const EVP_MD *dgst); +int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, + const unsigned char *p, int pl); +int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len, + const unsigned char *p, int pl); +int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + const unsigned char *param, int plen, + const EVP_MD *md, const EVP_MD *mgf1md); +int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen, + const unsigned char *from, int flen, + int num, const unsigned char *param, + int plen, const EVP_MD *md, + const EVP_MD *mgf1md); +int RSA_padding_add_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl); +int RSA_padding_check_SSLv23(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_none(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_none(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_padding_add_X931(unsigned char *to, int tlen, const unsigned char *f, + int fl); +int RSA_padding_check_X931(unsigned char *to, int tlen, + const unsigned char *f, int fl, int rsa_len); +int RSA_X931_hash_id(int nid); + +int RSA_verify_PKCS1_PSS(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const unsigned char *EM, + int sLen); +int RSA_padding_add_PKCS1_PSS(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, const EVP_MD *Hash, + int sLen); + +int RSA_verify_PKCS1_PSS_mgf1(RSA *rsa, const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + const unsigned char *EM, int sLen); + +int RSA_padding_add_PKCS1_PSS_mgf1(RSA *rsa, unsigned char *EM, + const unsigned char *mHash, + const EVP_MD *Hash, const EVP_MD *mgf1Hash, + int sLen); + +#define RSA_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) +int RSA_set_ex_data(RSA *r, int idx, void *arg); +void *RSA_get_ex_data(const RSA *r, int idx); + +RSA *RSAPublicKey_dup(RSA *rsa); +RSA *RSAPrivateKey_dup(RSA *rsa); + +/* + * If this flag is set the RSA method is FIPS compliant and can be used in + * FIPS mode. This is set in the validated module method. If an application + * sets this flag in its own methods it is its responsibility to ensure the + * result is compliant. + */ + +# define RSA_FLAG_FIPS_METHOD 0x0400 + +/* + * If this flag is set the operations normally disabled in FIPS mode are + * permitted it is then the applications responsibility to ensure that the + * usage is compliant. + */ + +# define RSA_FLAG_NON_FIPS_ALLOW 0x0400 +/* + * Application has decided PRNG is good enough to generate a key: don't + * check. + */ +# define RSA_FLAG_CHECKED 0x0800 + +RSA_METHOD *RSA_meth_new(const char *name, int flags); +void RSA_meth_free(RSA_METHOD *meth); +RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth); +const char *RSA_meth_get0_name(const RSA_METHOD *meth); +int RSA_meth_set1_name(RSA_METHOD *meth, const char *name); +int RSA_meth_get_flags(const RSA_METHOD *meth); +int RSA_meth_set_flags(RSA_METHOD *meth, int flags); +void *RSA_meth_get0_app_data(const RSA_METHOD *meth); +int RSA_meth_set0_app_data(RSA_METHOD *meth, void *app_data); +int (*RSA_meth_get_pub_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_enc(RSA_METHOD *rsa, + int (*pub_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_pub_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_pub_dec(RSA_METHOD *rsa, + int (*pub_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_enc(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_enc(RSA_METHOD *rsa, + int (*priv_enc) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_priv_dec(const RSA_METHOD *meth)) + (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, int padding); +int RSA_meth_set_priv_dec(RSA_METHOD *rsa, + int (*priv_dec) (int flen, const unsigned char *from, + unsigned char *to, RSA *rsa, + int padding)); +int (*RSA_meth_get_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r0, const BIGNUM *i, RSA *rsa, BN_CTX *ctx); +int RSA_meth_set_mod_exp(RSA_METHOD *rsa, + int (*mod_exp) (BIGNUM *r0, const BIGNUM *i, RSA *rsa, + BN_CTX *ctx)); +int (*RSA_meth_get_bn_mod_exp(const RSA_METHOD *meth)) + (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, + const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); +int RSA_meth_set_bn_mod_exp(RSA_METHOD *rsa, + int (*bn_mod_exp) (BIGNUM *r, + const BIGNUM *a, + const BIGNUM *p, + const BIGNUM *m, + BN_CTX *ctx, + BN_MONT_CTX *m_ctx)); +int (*RSA_meth_get_init(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_init(RSA_METHOD *rsa, int (*init) (RSA *rsa)); +int (*RSA_meth_get_finish(const RSA_METHOD *meth)) (RSA *rsa); +int RSA_meth_set_finish(RSA_METHOD *rsa, int (*finish) (RSA *rsa)); +int (*RSA_meth_get_sign(const RSA_METHOD *meth)) + (int type, + const unsigned char *m, unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa); +int RSA_meth_set_sign(RSA_METHOD *rsa, + int (*sign) (int type, const unsigned char *m, + unsigned int m_length, + unsigned char *sigret, unsigned int *siglen, + const RSA *rsa)); +int (*RSA_meth_get_verify(const RSA_METHOD *meth)) + (int dtype, const unsigned char *m, + unsigned int m_length, const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa); +int RSA_meth_set_verify(RSA_METHOD *rsa, + int (*verify) (int dtype, const unsigned char *m, + unsigned int m_length, + const unsigned char *sigbuf, + unsigned int siglen, const RSA *rsa)); +int (*RSA_meth_get_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_keygen(RSA_METHOD *rsa, + int (*keygen) (RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb)); +int (*RSA_meth_get_multi_prime_keygen(const RSA_METHOD *meth)) + (RSA *rsa, int bits, int primes, BIGNUM *e, BN_GENCB *cb); +int RSA_meth_set_multi_prime_keygen(RSA_METHOD *meth, + int (*keygen) (RSA *rsa, int bits, + int primes, BIGNUM *e, + BN_GENCB *cb)); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/rsaerr.h b/lib/openssl/include/openssl/rsaerr.h new file mode 100644 index 0000000..59b15e1 --- /dev/null +++ b/lib/openssl/include/openssl/rsaerr.h @@ -0,0 +1,167 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_RSAERR_H +# define HEADER_RSAERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_RSA_strings(void); + +/* + * RSA function codes. + */ +# define RSA_F_CHECK_PADDING_MD 140 +# define RSA_F_ENCODE_PKCS1 146 +# define RSA_F_INT_RSA_VERIFY 145 +# define RSA_F_OLD_RSA_PRIV_DECODE 147 +# define RSA_F_PKEY_PSS_INIT 165 +# define RSA_F_PKEY_RSA_CTRL 143 +# define RSA_F_PKEY_RSA_CTRL_STR 144 +# define RSA_F_PKEY_RSA_SIGN 142 +# define RSA_F_PKEY_RSA_VERIFY 149 +# define RSA_F_PKEY_RSA_VERIFYRECOVER 141 +# define RSA_F_RSA_ALGOR_TO_MD 156 +# define RSA_F_RSA_BUILTIN_KEYGEN 129 +# define RSA_F_RSA_CHECK_KEY 123 +# define RSA_F_RSA_CHECK_KEY_EX 160 +# define RSA_F_RSA_CMS_DECRYPT 159 +# define RSA_F_RSA_CMS_VERIFY 158 +# define RSA_F_RSA_ITEM_VERIFY 148 +# define RSA_F_RSA_METH_DUP 161 +# define RSA_F_RSA_METH_NEW 162 +# define RSA_F_RSA_METH_SET1_NAME 163 +# define RSA_F_RSA_MGF1_TO_MD 157 +# define RSA_F_RSA_MULTIP_INFO_NEW 166 +# define RSA_F_RSA_NEW_METHOD 106 +# define RSA_F_RSA_NULL 124 +# define RSA_F_RSA_NULL_PRIVATE_DECRYPT 132 +# define RSA_F_RSA_NULL_PRIVATE_ENCRYPT 133 +# define RSA_F_RSA_NULL_PUBLIC_DECRYPT 134 +# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135 +# define RSA_F_RSA_OSSL_PRIVATE_DECRYPT 101 +# define RSA_F_RSA_OSSL_PRIVATE_ENCRYPT 102 +# define RSA_F_RSA_OSSL_PUBLIC_DECRYPT 103 +# define RSA_F_RSA_OSSL_PUBLIC_ENCRYPT 104 +# define RSA_F_RSA_PADDING_ADD_NONE 107 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121 +# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 154 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125 +# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 152 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108 +# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_2 109 +# define RSA_F_RSA_PADDING_ADD_SSLV23 110 +# define RSA_F_RSA_PADDING_ADD_X931 127 +# define RSA_F_RSA_PADDING_CHECK_NONE 111 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 153 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112 +# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113 +# define RSA_F_RSA_PADDING_CHECK_SSLV23 114 +# define RSA_F_RSA_PADDING_CHECK_X931 128 +# define RSA_F_RSA_PARAM_DECODE 164 +# define RSA_F_RSA_PRINT 115 +# define RSA_F_RSA_PRINT_FP 116 +# define RSA_F_RSA_PRIV_DECODE 150 +# define RSA_F_RSA_PRIV_ENCODE 138 +# define RSA_F_RSA_PSS_GET_PARAM 151 +# define RSA_F_RSA_PSS_TO_CTX 155 +# define RSA_F_RSA_PUB_DECODE 139 +# define RSA_F_RSA_SETUP_BLINDING 136 +# define RSA_F_RSA_SIGN 117 +# define RSA_F_RSA_SIGN_ASN1_OCTET_STRING 118 +# define RSA_F_RSA_VERIFY 119 +# define RSA_F_RSA_VERIFY_ASN1_OCTET_STRING 120 +# define RSA_F_RSA_VERIFY_PKCS1_PSS_MGF1 126 +# define RSA_F_SETUP_TBUF 167 + +/* + * RSA reason codes. + */ +# define RSA_R_ALGORITHM_MISMATCH 100 +# define RSA_R_BAD_E_VALUE 101 +# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 +# define RSA_R_BAD_PAD_BYTE_COUNT 103 +# define RSA_R_BAD_SIGNATURE 104 +# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 +# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 +# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 +# define RSA_R_DATA_TOO_LARGE 109 +# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 +# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 +# define RSA_R_DATA_TOO_SMALL 111 +# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 +# define RSA_R_DIGEST_DOES_NOT_MATCH 158 +# define RSA_R_DIGEST_NOT_ALLOWED 145 +# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 +# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 +# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 +# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 +# define RSA_R_FIRST_OCTET_INVALID 133 +# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 +# define RSA_R_INVALID_DIGEST 157 +# define RSA_R_INVALID_DIGEST_LENGTH 143 +# define RSA_R_INVALID_HEADER 137 +# define RSA_R_INVALID_LABEL 160 +# define RSA_R_INVALID_MESSAGE_LENGTH 131 +# define RSA_R_INVALID_MGF1_MD 156 +# define RSA_R_INVALID_MULTI_PRIME_KEY 167 +# define RSA_R_INVALID_OAEP_PARAMETERS 161 +# define RSA_R_INVALID_PADDING 138 +# define RSA_R_INVALID_PADDING_MODE 141 +# define RSA_R_INVALID_PSS_PARAMETERS 149 +# define RSA_R_INVALID_PSS_SALTLEN 146 +# define RSA_R_INVALID_SALT_LENGTH 150 +# define RSA_R_INVALID_TRAILER 139 +# define RSA_R_INVALID_X931_DIGEST 142 +# define RSA_R_IQMP_NOT_INVERSE_OF_Q 126 +# define RSA_R_KEY_PRIME_NUM_INVALID 165 +# define RSA_R_KEY_SIZE_TOO_SMALL 120 +# define RSA_R_LAST_OCTET_INVALID 134 +# define RSA_R_MISSING_PRIVATE_KEY 179 +# define RSA_R_MGF1_DIGEST_NOT_ALLOWED 152 +# define RSA_R_MODULUS_TOO_LARGE 105 +# define RSA_R_MP_COEFFICIENT_NOT_INVERSE_OF_R 168 +# define RSA_R_MP_EXPONENT_NOT_CONGRUENT_TO_D 169 +# define RSA_R_MP_R_NOT_PRIME 170 +# define RSA_R_NO_PUBLIC_EXPONENT 140 +# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 +# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 +# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 +# define RSA_R_OAEP_DECODING_ERROR 121 +# define RSA_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 148 +# define RSA_R_PADDING_CHECK_FAILED 114 +# define RSA_R_PKCS_DECODING_ERROR 159 +# define RSA_R_PSS_SALTLEN_TOO_SMALL 164 +# define RSA_R_P_NOT_PRIME 128 +# define RSA_R_Q_NOT_PRIME 129 +# define RSA_R_RSA_OPERATIONS_NOT_SUPPORTED 130 +# define RSA_R_SLEN_CHECK_FAILED 136 +# define RSA_R_SLEN_RECOVERY_FAILED 135 +# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 +# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 +# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 +# define RSA_R_UNKNOWN_DIGEST 166 +# define RSA_R_UNKNOWN_MASK_DIGEST 151 +# define RSA_R_UNKNOWN_PADDING_TYPE 118 +# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 +# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 +# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 +# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 +# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 +# define RSA_R_VALUE_MISSING 147 +# define RSA_R_WRONG_SIGNATURE_LENGTH 119 + +#endif diff --git a/lib/openssl/include/openssl/safestack.h b/lib/openssl/include/openssl/safestack.h new file mode 100644 index 0000000..38b5578 --- /dev/null +++ b/lib/openssl/include/openssl/safestack.h @@ -0,0 +1,207 @@ +/* + * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SAFESTACK_H +# define HEADER_SAFESTACK_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define STACK_OF(type) struct stack_st_##type + +# define SKM_DEFINE_STACK_OF(t1, t2, t3) \ + STACK_OF(t1); \ + typedef int (*sk_##t1##_compfunc)(const t3 * const *a, const t3 *const *b); \ + typedef void (*sk_##t1##_freefunc)(t3 *a); \ + typedef t3 * (*sk_##t1##_copyfunc)(const t3 *a); \ + static ossl_unused ossl_inline int sk_##t1##_num(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_num((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_value(const STACK_OF(t1) *sk, int idx) \ + { \ + return (t2 *)OPENSSL_sk_value((const OPENSSL_STACK *)sk, idx); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new(sk_##t1##_compfunc compare) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new((OPENSSL_sk_compfunc)compare); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_null(void) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_null(); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_new_reserve(sk_##t1##_compfunc compare, int n) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_new_reserve((OPENSSL_sk_compfunc)compare, n); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_reserve(STACK_OF(t1) *sk, int n) \ + { \ + return OPENSSL_sk_reserve((OPENSSL_STACK *)sk, n); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_free(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_free((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_zero(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_zero((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete(STACK_OF(t1) *sk, int i) \ + { \ + return (t2 *)OPENSSL_sk_delete((OPENSSL_STACK *)sk, i); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_delete_ptr(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_delete_ptr((OPENSSL_STACK *)sk, \ + (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_push(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_push((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_unshift(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_unshift((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_pop(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_pop((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_shift(STACK_OF(t1) *sk) \ + { \ + return (t2 *)OPENSSL_sk_shift((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_pop_free(STACK_OF(t1) *sk, sk_##t1##_freefunc freefunc) \ + { \ + OPENSSL_sk_pop_free((OPENSSL_STACK *)sk, (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_insert(STACK_OF(t1) *sk, t2 *ptr, int idx) \ + { \ + return OPENSSL_sk_insert((OPENSSL_STACK *)sk, (const void *)ptr, idx); \ + } \ + static ossl_unused ossl_inline t2 *sk_##t1##_set(STACK_OF(t1) *sk, int idx, t2 *ptr) \ + { \ + return (t2 *)OPENSSL_sk_set((OPENSSL_STACK *)sk, idx, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_find_ex(STACK_OF(t1) *sk, t2 *ptr) \ + { \ + return OPENSSL_sk_find_ex((OPENSSL_STACK *)sk, (const void *)ptr); \ + } \ + static ossl_unused ossl_inline void sk_##t1##_sort(STACK_OF(t1) *sk) \ + { \ + OPENSSL_sk_sort((OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline int sk_##t1##_is_sorted(const STACK_OF(t1) *sk) \ + { \ + return OPENSSL_sk_is_sorted((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) * sk_##t1##_dup(const STACK_OF(t1) *sk) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_dup((const OPENSSL_STACK *)sk); \ + } \ + static ossl_unused ossl_inline STACK_OF(t1) *sk_##t1##_deep_copy(const STACK_OF(t1) *sk, \ + sk_##t1##_copyfunc copyfunc, \ + sk_##t1##_freefunc freefunc) \ + { \ + return (STACK_OF(t1) *)OPENSSL_sk_deep_copy((const OPENSSL_STACK *)sk, \ + (OPENSSL_sk_copyfunc)copyfunc, \ + (OPENSSL_sk_freefunc)freefunc); \ + } \ + static ossl_unused ossl_inline sk_##t1##_compfunc sk_##t1##_set_cmp_func(STACK_OF(t1) *sk, sk_##t1##_compfunc compare) \ + { \ + return (sk_##t1##_compfunc)OPENSSL_sk_set_cmp_func((OPENSSL_STACK *)sk, (OPENSSL_sk_compfunc)compare); \ + } + +# define DEFINE_SPECIAL_STACK_OF(t1, t2) SKM_DEFINE_STACK_OF(t1, t2, t2) +# define DEFINE_STACK_OF(t) SKM_DEFINE_STACK_OF(t, t, t) +# define DEFINE_SPECIAL_STACK_OF_CONST(t1, t2) \ + SKM_DEFINE_STACK_OF(t1, const t2, t2) +# define DEFINE_STACK_OF_CONST(t) SKM_DEFINE_STACK_OF(t, const t, t) + +/*- + * Strings are special: normally an lhash entry will point to a single + * (somewhat) mutable object. In the case of strings: + * + * a) Instead of a single char, there is an array of chars, NUL-terminated. + * b) The string may have be immutable. + * + * So, they need their own declarations. Especially important for + * type-checking tools, such as Deputy. + * + * In practice, however, it appears to be hard to have a const + * string. For now, I'm settling for dealing with the fact it is a + * string at all. + */ +typedef char *OPENSSL_STRING; +typedef const char *OPENSSL_CSTRING; + +/*- + * Confusingly, LHASH_OF(STRING) deals with char ** throughout, but + * STACK_OF(STRING) is really more like STACK_OF(char), only, as mentioned + * above, instead of a single char each entry is a NUL-terminated array of + * chars. So, we have to implement STRING specially for STACK_OF. This is + * dealt with in the autogenerated macros below. + */ +DEFINE_SPECIAL_STACK_OF(OPENSSL_STRING, char) +DEFINE_SPECIAL_STACK_OF_CONST(OPENSSL_CSTRING, char) + +/* + * Similarly, we sometimes use a block of characters, NOT nul-terminated. + * These should also be distinguished from "normal" stacks. + */ +typedef void *OPENSSL_BLOCK; +DEFINE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void) + +/* + * If called without higher optimization (min. -xO3) the Oracle Developer + * Studio compiler generates code for the defined (static inline) functions + * above. + * This would later lead to the linker complaining about missing symbols when + * this header file is included but the resulting object is not linked against + * the Crypto library (openssl#6912). + */ +# ifdef __SUNPRO_C +# pragma weak OPENSSL_sk_num +# pragma weak OPENSSL_sk_value +# pragma weak OPENSSL_sk_new +# pragma weak OPENSSL_sk_new_null +# pragma weak OPENSSL_sk_new_reserve +# pragma weak OPENSSL_sk_reserve +# pragma weak OPENSSL_sk_free +# pragma weak OPENSSL_sk_zero +# pragma weak OPENSSL_sk_delete +# pragma weak OPENSSL_sk_delete_ptr +# pragma weak OPENSSL_sk_push +# pragma weak OPENSSL_sk_unshift +# pragma weak OPENSSL_sk_pop +# pragma weak OPENSSL_sk_shift +# pragma weak OPENSSL_sk_pop_free +# pragma weak OPENSSL_sk_insert +# pragma weak OPENSSL_sk_set +# pragma weak OPENSSL_sk_find +# pragma weak OPENSSL_sk_find_ex +# pragma weak OPENSSL_sk_sort +# pragma weak OPENSSL_sk_is_sorted +# pragma weak OPENSSL_sk_dup +# pragma weak OPENSSL_sk_deep_copy +# pragma weak OPENSSL_sk_set_cmp_func +# endif /* __SUNPRO_C */ + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/seed.h b/lib/openssl/include/openssl/seed.h new file mode 100644 index 0000000..de10b08 --- /dev/null +++ b/lib/openssl/include/openssl/seed.h @@ -0,0 +1,96 @@ +/* + * Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Neither the name of author nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef HEADER_SEED_H +# define HEADER_SEED_H + +# include + +# ifndef OPENSSL_NO_SEED +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* look whether we need 'long' to get 32 bits */ +# ifdef AES_LONG +# ifndef SEED_LONG +# define SEED_LONG 1 +# endif +# endif + +# include + +# define SEED_BLOCK_SIZE 16 +# define SEED_KEY_LENGTH 16 + +typedef struct seed_key_st { +# ifdef SEED_LONG + unsigned long data[32]; +# else + unsigned int data[32]; +# endif +} SEED_KEY_SCHEDULE; + +void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH], + SEED_KEY_SCHEDULE *ks); + +void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); +void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE], + unsigned char d[SEED_BLOCK_SIZE], + const SEED_KEY_SCHEDULE *ks); + +void SEED_ecb_encrypt(const unsigned char *in, unsigned char *out, + const SEED_KEY_SCHEDULE *ks, int enc); +void SEED_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, + const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int enc); +void SEED_cfb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num, + int enc); +void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out, + size_t len, const SEED_KEY_SCHEDULE *ks, + unsigned char ivec[SEED_BLOCK_SIZE], int *num); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/sha.h b/lib/openssl/include/openssl/sha.h new file mode 100644 index 0000000..6a1eb0d --- /dev/null +++ b/lib/openssl/include/openssl/sha.h @@ -0,0 +1,119 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SHA_H +# define HEADER_SHA_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + * ! SHA_LONG has to be at least 32 bits wide. ! + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + */ +# define SHA_LONG unsigned int + +# define SHA_LBLOCK 16 +# define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ +# define SHA_LAST_BLOCK (SHA_CBLOCK-8) +# define SHA_DIGEST_LENGTH 20 + +typedef struct SHAstate_st { + SHA_LONG h0, h1, h2, h3, h4; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num; +} SHA_CTX; + +int SHA1_Init(SHA_CTX *c); +int SHA1_Update(SHA_CTX *c, const void *data, size_t len); +int SHA1_Final(unsigned char *md, SHA_CTX *c); +unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md); +void SHA1_Transform(SHA_CTX *c, const unsigned char *data); + +# define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a + * contiguous array of 32 bit wide + * big-endian values. */ + +typedef struct SHA256state_st { + SHA_LONG h[8]; + SHA_LONG Nl, Nh; + SHA_LONG data[SHA_LBLOCK]; + unsigned int num, md_len; +} SHA256_CTX; + +int SHA224_Init(SHA256_CTX *c); +int SHA224_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA224_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md); +int SHA256_Init(SHA256_CTX *c); +int SHA256_Update(SHA256_CTX *c, const void *data, size_t len); +int SHA256_Final(unsigned char *md, SHA256_CTX *c); +unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); +void SHA256_Transform(SHA256_CTX *c, const unsigned char *data); + +# define SHA224_DIGEST_LENGTH 28 +# define SHA256_DIGEST_LENGTH 32 +# define SHA384_DIGEST_LENGTH 48 +# define SHA512_DIGEST_LENGTH 64 + +/* + * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64 + * being exactly 64-bit wide. See Implementation Notes in sha512.c + * for further details. + */ +/* + * SHA-512 treats input data as a + * contiguous array of 64 bit + * wide big-endian values. + */ +# define SHA512_CBLOCK (SHA_LBLOCK*8) +# if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) +# define SHA_LONG64 unsigned __int64 +# define U64(C) C##UI64 +# elif defined(__arch64__) +# define SHA_LONG64 unsigned long +# define U64(C) C##UL +# else +# define SHA_LONG64 unsigned long long +# define U64(C) C##ULL +# endif + +typedef struct SHA512state_st { + SHA_LONG64 h[8]; + SHA_LONG64 Nl, Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num, md_len; +} SHA512_CTX; + +int SHA384_Init(SHA512_CTX *c); +int SHA384_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA384_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md); +int SHA512_Init(SHA512_CTX *c); +int SHA512_Update(SHA512_CTX *c, const void *data, size_t len); +int SHA512_Final(unsigned char *md, SHA512_CTX *c); +unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); +void SHA512_Transform(SHA512_CTX *c, const unsigned char *data); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/srp.h b/lib/openssl/include/openssl/srp.h new file mode 100644 index 0000000..aaf1355 --- /dev/null +++ b/lib/openssl/include/openssl/srp.h @@ -0,0 +1,135 @@ +/* + * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2004, EdelKey Project. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + * + * Originally written by Christophe Renou and Peter Sylvester, + * for the EdelKey project. + */ + +#ifndef HEADER_SRP_H +# define HEADER_SRP_H + +#include + +#ifndef OPENSSL_NO_SRP +# include +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +typedef struct SRP_gN_cache_st { + char *b64_bn; + BIGNUM *bn; +} SRP_gN_cache; + + +DEFINE_STACK_OF(SRP_gN_cache) + +typedef struct SRP_user_pwd_st { + /* Owned by us. */ + char *id; + BIGNUM *s; + BIGNUM *v; + /* Not owned by us. */ + const BIGNUM *g; + const BIGNUM *N; + /* Owned by us. */ + char *info; +} SRP_user_pwd; + +void SRP_user_pwd_free(SRP_user_pwd *user_pwd); + +DEFINE_STACK_OF(SRP_user_pwd) + +typedef struct SRP_VBASE_st { + STACK_OF(SRP_user_pwd) *users_pwd; + STACK_OF(SRP_gN_cache) *gN_cache; +/* to simulate a user */ + char *seed_key; + const BIGNUM *default_g; + const BIGNUM *default_N; +} SRP_VBASE; + +/* + * Internal structure storing N and g pair + */ +typedef struct SRP_gN_st { + char *id; + const BIGNUM *g; + const BIGNUM *N; +} SRP_gN; + +DEFINE_STACK_OF(SRP_gN) + +SRP_VBASE *SRP_VBASE_new(char *seed_key); +void SRP_VBASE_free(SRP_VBASE *vb); +int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); + +/* This method ignores the configured seed and fails for an unknown user. */ +DEPRECATEDIN_1_1_0(SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username)) +/* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ +SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); + +char *SRP_create_verifier(const char *user, const char *pass, char **salt, + char **verifier, const char *N, const char *g); +int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, + BIGNUM **verifier, const BIGNUM *N, + const BIGNUM *g); + +# define SRP_NO_ERROR 0 +# define SRP_ERR_VBASE_INCOMPLETE_FILE 1 +# define SRP_ERR_VBASE_BN_LIB 2 +# define SRP_ERR_OPEN_FILE 3 +# define SRP_ERR_MEMORY 4 + +# define DB_srptype 0 +# define DB_srpverifier 1 +# define DB_srpsalt 2 +# define DB_srpid 3 +# define DB_srpgN 4 +# define DB_srpinfo 5 +# undef DB_NUMBER +# define DB_NUMBER 6 + +# define DB_SRP_INDEX 'I' +# define DB_SRP_VALID 'V' +# define DB_SRP_REVOKED 'R' +# define DB_SRP_MODIF 'v' + +/* see srp.c */ +char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); +SRP_gN *SRP_get_default_gN(const char *id); + +/* server side .... */ +BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, + const BIGNUM *b, const BIGNUM *N); +BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, + const BIGNUM *v); +int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); +BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); + +/* client side .... */ +BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); +BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); +BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, + const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); +int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); + +# define SRP_MINIMAL_N 1024 + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/srtp.h b/lib/openssl/include/openssl/srtp.h new file mode 100644 index 0000000..0b57c23 --- /dev/null +++ b/lib/openssl/include/openssl/srtp.h @@ -0,0 +1,50 @@ +/* + * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +/* + * DTLS code by Eric Rescorla + * + * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. + */ + +#ifndef HEADER_D1_SRTP_H +# define HEADER_D1_SRTP_H + +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define SRTP_AES128_CM_SHA1_80 0x0001 +# define SRTP_AES128_CM_SHA1_32 0x0002 +# define SRTP_AES128_F8_SHA1_80 0x0003 +# define SRTP_AES128_F8_SHA1_32 0x0004 +# define SRTP_NULL_SHA1_80 0x0005 +# define SRTP_NULL_SHA1_32 0x0006 + +/* AEAD SRTP protection profiles from RFC 7714 */ +# define SRTP_AEAD_AES_128_GCM 0x0007 +# define SRTP_AEAD_AES_256_GCM 0x0008 + +# ifndef OPENSSL_NO_SRTP + +__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); +__owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); + +__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); +__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); + +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/ssl.h b/lib/openssl/include/openssl/ssl.h new file mode 100644 index 0000000..9af0c89 --- /dev/null +++ b/lib/openssl/include/openssl/ssl.h @@ -0,0 +1,2448 @@ +/* + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL_H +# define HEADER_SSL_H + +# include +# include +# include +# include +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif +# include +# include +# include +# include + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* OpenSSL version number for ASN.1 encoding of the session information */ +/*- + * Version 0 - initial version + * Version 1 - added the optional peer certificate + */ +# define SSL_SESSION_ASN1_VERSION 0x0001 + +# define SSL_MAX_SSL_SESSION_ID_LENGTH 32 +# define SSL_MAX_SID_CTX_LENGTH 32 + +# define SSL_MIN_RSA_MODULUS_LENGTH_IN_BYTES (512/8) +# define SSL_MAX_KEY_ARG_LENGTH 8 +# define SSL_MAX_MASTER_KEY_LENGTH 48 + +/* The maximum number of encrypt/decrypt pipelines we can support */ +# define SSL_MAX_PIPELINES 32 + +/* text strings for the ciphers */ + +/* These are used to specify which ciphers to use and not to use */ + +# define SSL_TXT_LOW "LOW" +# define SSL_TXT_MEDIUM "MEDIUM" +# define SSL_TXT_HIGH "HIGH" +# define SSL_TXT_FIPS "FIPS" + +# define SSL_TXT_aNULL "aNULL" +# define SSL_TXT_eNULL "eNULL" +# define SSL_TXT_NULL "NULL" + +# define SSL_TXT_kRSA "kRSA" +# define SSL_TXT_kDHr "kDHr"/* this cipher class has been removed */ +# define SSL_TXT_kDHd "kDHd"/* this cipher class has been removed */ +# define SSL_TXT_kDH "kDH"/* this cipher class has been removed */ +# define SSL_TXT_kEDH "kEDH"/* alias for kDHE */ +# define SSL_TXT_kDHE "kDHE" +# define SSL_TXT_kECDHr "kECDHr"/* this cipher class has been removed */ +# define SSL_TXT_kECDHe "kECDHe"/* this cipher class has been removed */ +# define SSL_TXT_kECDH "kECDH"/* this cipher class has been removed */ +# define SSL_TXT_kEECDH "kEECDH"/* alias for kECDHE */ +# define SSL_TXT_kECDHE "kECDHE" +# define SSL_TXT_kPSK "kPSK" +# define SSL_TXT_kRSAPSK "kRSAPSK" +# define SSL_TXT_kECDHEPSK "kECDHEPSK" +# define SSL_TXT_kDHEPSK "kDHEPSK" +# define SSL_TXT_kGOST "kGOST" +# define SSL_TXT_kSRP "kSRP" + +# define SSL_TXT_aRSA "aRSA" +# define SSL_TXT_aDSS "aDSS" +# define SSL_TXT_aDH "aDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDH "aECDH"/* this cipher class has been removed */ +# define SSL_TXT_aECDSA "aECDSA" +# define SSL_TXT_aPSK "aPSK" +# define SSL_TXT_aGOST94 "aGOST94" +# define SSL_TXT_aGOST01 "aGOST01" +# define SSL_TXT_aGOST12 "aGOST12" +# define SSL_TXT_aGOST "aGOST" +# define SSL_TXT_aSRP "aSRP" + +# define SSL_TXT_DSS "DSS" +# define SSL_TXT_DH "DH" +# define SSL_TXT_DHE "DHE"/* same as "kDHE:-ADH" */ +# define SSL_TXT_EDH "EDH"/* alias for DHE */ +# define SSL_TXT_ADH "ADH" +# define SSL_TXT_RSA "RSA" +# define SSL_TXT_ECDH "ECDH" +# define SSL_TXT_EECDH "EECDH"/* alias for ECDHE" */ +# define SSL_TXT_ECDHE "ECDHE"/* same as "kECDHE:-AECDH" */ +# define SSL_TXT_AECDH "AECDH" +# define SSL_TXT_ECDSA "ECDSA" +# define SSL_TXT_PSK "PSK" +# define SSL_TXT_SRP "SRP" + +# define SSL_TXT_DES "DES" +# define SSL_TXT_3DES "3DES" +# define SSL_TXT_RC4 "RC4" +# define SSL_TXT_RC2 "RC2" +# define SSL_TXT_IDEA "IDEA" +# define SSL_TXT_SEED "SEED" +# define SSL_TXT_AES128 "AES128" +# define SSL_TXT_AES256 "AES256" +# define SSL_TXT_AES "AES" +# define SSL_TXT_AES_GCM "AESGCM" +# define SSL_TXT_AES_CCM "AESCCM" +# define SSL_TXT_AES_CCM_8 "AESCCM8" +# define SSL_TXT_CAMELLIA128 "CAMELLIA128" +# define SSL_TXT_CAMELLIA256 "CAMELLIA256" +# define SSL_TXT_CAMELLIA "CAMELLIA" +# define SSL_TXT_CHACHA20 "CHACHA20" +# define SSL_TXT_GOST "GOST89" +# define SSL_TXT_ARIA "ARIA" +# define SSL_TXT_ARIA_GCM "ARIAGCM" +# define SSL_TXT_ARIA128 "ARIA128" +# define SSL_TXT_ARIA256 "ARIA256" + +# define SSL_TXT_MD5 "MD5" +# define SSL_TXT_SHA1 "SHA1" +# define SSL_TXT_SHA "SHA"/* same as "SHA1" */ +# define SSL_TXT_GOST94 "GOST94" +# define SSL_TXT_GOST89MAC "GOST89MAC" +# define SSL_TXT_GOST12 "GOST12" +# define SSL_TXT_GOST89MAC12 "GOST89MAC12" +# define SSL_TXT_SHA256 "SHA256" +# define SSL_TXT_SHA384 "SHA384" + +# define SSL_TXT_SSLV3 "SSLv3" +# define SSL_TXT_TLSV1 "TLSv1" +# define SSL_TXT_TLSV1_1 "TLSv1.1" +# define SSL_TXT_TLSV1_2 "TLSv1.2" + +# define SSL_TXT_ALL "ALL" + +/*- + * COMPLEMENTOF* definitions. These identifiers are used to (de-select) + * ciphers normally not being used. + * Example: "RC4" will activate all ciphers using RC4 including ciphers + * without authentication, which would normally disabled by DEFAULT (due + * the "!ADH" being part of default). Therefore "RC4:!COMPLEMENTOFDEFAULT" + * will make sure that it is also disabled in the specific selection. + * COMPLEMENTOF* identifiers are portable between version, as adjustments + * to the default cipher setup will also be included here. + * + * COMPLEMENTOFDEFAULT does not experience the same special treatment that + * DEFAULT gets, as only selection is being done and no sorting as needed + * for DEFAULT. + */ +# define SSL_TXT_CMPALL "COMPLEMENTOFALL" +# define SSL_TXT_CMPDEF "COMPLEMENTOFDEFAULT" + +/* + * The following cipher list is used by default. It also is substituted when + * an application-defined cipher list string starts with 'DEFAULT'. + * This applies to ciphersuites for TLSv1.2 and below. + */ +# define SSL_DEFAULT_CIPHER_LIST "ALL:!COMPLEMENTOFDEFAULT:!eNULL" +/* This is the default set of TLSv1.3 ciphersuites */ +# if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_CHACHA20_POLY1305_SHA256:" \ + "TLS_AES_128_GCM_SHA256" +# else +# define TLS_DEFAULT_CIPHERSUITES "TLS_AES_256_GCM_SHA384:" \ + "TLS_AES_128_GCM_SHA256" +#endif +/* + * As of OpenSSL 1.0.0, ssl_create_cipher_list() in ssl/ssl_ciph.c always + * starts with a reasonable order, and all we have to do for DEFAULT is + * throwing out anonymous and unencrypted ciphersuites! (The latter are not + * actually enabled by ALL, but "ALL:RSA" would enable some of them.) + */ + +/* Used in SSL_set_shutdown()/SSL_get_shutdown(); */ +# define SSL_SENT_SHUTDOWN 1 +# define SSL_RECEIVED_SHUTDOWN 2 + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL_FILETYPE_ASN1 X509_FILETYPE_ASN1 +# define SSL_FILETYPE_PEM X509_FILETYPE_PEM + +/* + * This is needed to stop compilers complaining about the 'struct ssl_st *' + * function parameters used to prototype callbacks in SSL_CTX. + */ +typedef struct ssl_st *ssl_crock_st; +typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT; +typedef struct ssl_method_st SSL_METHOD; +typedef struct ssl_cipher_st SSL_CIPHER; +typedef struct ssl_session_st SSL_SESSION; +typedef struct tls_sigalgs_st TLS_SIGALGS; +typedef struct ssl_conf_ctx_st SSL_CONF_CTX; +typedef struct ssl_comp_st SSL_COMP; + +STACK_OF(SSL_CIPHER); +STACK_OF(SSL_COMP); + +/* SRTP protection profiles for use with the use_srtp extension (RFC 5764)*/ +typedef struct srtp_protection_profile_st { + const char *name; + unsigned long id; +} SRTP_PROTECTION_PROFILE; + +DEFINE_STACK_OF(SRTP_PROTECTION_PROFILE) + +typedef int (*tls_session_ticket_ext_cb_fn)(SSL *s, const unsigned char *data, + int len, void *arg); +typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, + STACK_OF(SSL_CIPHER) *peer_ciphers, + const SSL_CIPHER **cipher, void *arg); + +/* Extension context codes */ +/* This extension is only allowed in TLS */ +#define SSL_EXT_TLS_ONLY 0x0001 +/* This extension is only allowed in DTLS */ +#define SSL_EXT_DTLS_ONLY 0x0002 +/* Some extensions may be allowed in DTLS but we don't implement them for it */ +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x0004 +/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ +#define SSL_EXT_SSL3_ALLOWED 0x0008 +/* Extension is only defined for TLS1.2 and below */ +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +/* Extension is only defined for TLS1.3 and above */ +#define SSL_EXT_TLS1_3_ONLY 0x0020 +/* Ignore this extension during parsing if we are resuming */ +#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 +#define SSL_EXT_CLIENT_HELLO 0x0080 +/* Really means TLS1.2 or below */ +#define SSL_EXT_TLS1_2_SERVER_HELLO 0x0100 +#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 +#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 +#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 +#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 +#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 +#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 + +/* Typedefs for handling custom extensions */ + +typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type, + const unsigned char **out, size_t *outlen, + int *al, void *add_arg); + +typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type, + const unsigned char *out, void *add_arg); + +typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type, + const unsigned char *in, size_t inlen, + int *al, void *parse_arg); + + +typedef int (*SSL_custom_ext_add_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char **out, + size_t *outlen, X509 *x, + size_t chainidx, + int *al, void *add_arg); + +typedef void (*SSL_custom_ext_free_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *out, + void *add_arg); + +typedef int (*SSL_custom_ext_parse_cb_ex)(SSL *s, unsigned int ext_type, + unsigned int context, + const unsigned char *in, + size_t inlen, X509 *x, + size_t chainidx, + int *al, void *parse_arg); + +/* Typedef for verification callback */ +typedef int (*SSL_verify_cb)(int preverify_ok, X509_STORE_CTX *x509_ctx); + +/* + * Some values are reserved until OpenSSL 1.2.0 because they were previously + * included in SSL_OP_ALL in a 1.1.x release. + * + * Reserved value (until OpenSSL 1.2.0) 0x00000001U + * Reserved value (until OpenSSL 1.2.0) 0x00000002U + */ +/* Allow initial connection to servers that don't support RI */ +# define SSL_OP_LEGACY_SERVER_CONNECT 0x00000004U + +/* Reserved value (until OpenSSL 1.2.0) 0x00000008U */ +# define SSL_OP_TLSEXT_PADDING 0x00000010U +/* Reserved value (until OpenSSL 1.2.0) 0x00000020U */ +# define SSL_OP_SAFARI_ECDHE_ECDSA_BUG 0x00000040U +/* + * Reserved value (until OpenSSL 1.2.0) 0x00000080U + * Reserved value (until OpenSSL 1.2.0) 0x00000100U + * Reserved value (until OpenSSL 1.2.0) 0x00000200U + */ + +/* In TLSv1.3 allow a non-(ec)dhe based kex_mode */ +# define SSL_OP_ALLOW_NO_DHE_KEX 0x00000400U + +/* + * Disable SSL 3.0/TLS 1.0 CBC vulnerability workaround that was added in + * OpenSSL 0.9.6d. Usually (depending on the application protocol) the + * workaround is not needed. Unfortunately some broken SSL/TLS + * implementations cannot handle it at all, which is why we include it in + * SSL_OP_ALL. Added in 0.9.6e + */ +# define SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS 0x00000800U + +/* DTLS options */ +# define SSL_OP_NO_QUERY_MTU 0x00001000U +/* Turn on Cookie Exchange (on relevant for servers) */ +# define SSL_OP_COOKIE_EXCHANGE 0x00002000U +/* Don't use RFC4507 ticket extension */ +# define SSL_OP_NO_TICKET 0x00004000U +# ifndef OPENSSL_NO_DTLS1_METHOD +/* Use Cisco's "speshul" version of DTLS_BAD_VER + * (only with deprecated DTLSv1_client_method()) */ +# define SSL_OP_CISCO_ANYCONNECT 0x00008000U +# endif + +/* As server, disallow session resumption on renegotiation */ +# define SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION 0x00010000U +/* Don't use compression even if supported */ +# define SSL_OP_NO_COMPRESSION 0x00020000U +/* Permit unsafe legacy renegotiation */ +# define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000U +/* Disable encrypt-then-mac */ +# define SSL_OP_NO_ENCRYPT_THEN_MAC 0x00080000U + +/* + * Enable TLSv1.3 Compatibility mode. This is on by default. A future version + * of OpenSSL may have this disabled by default. + */ +# define SSL_OP_ENABLE_MIDDLEBOX_COMPAT 0x00100000U + +/* Prioritize Chacha20Poly1305 when client does. + * Modifies SSL_OP_CIPHER_SERVER_PREFERENCE */ +# define SSL_OP_PRIORITIZE_CHACHA 0x00200000U + +/* + * Set on servers to choose the cipher according to the server's preferences + */ +# define SSL_OP_CIPHER_SERVER_PREFERENCE 0x00400000U +/* + * If set, a server will allow a client to issue a SSLv3.0 version number as + * latest version supported in the premaster secret, even when TLSv1.0 + * (version 3.1) was announced in the client hello. Normally this is + * forbidden to prevent version rollback attacks. + */ +# define SSL_OP_TLS_ROLLBACK_BUG 0x00800000U + +/* + * Switches off automatic TLSv1.3 anti-replay protection for early data. This + * is a server-side option only (no effect on the client). + */ +# define SSL_OP_NO_ANTI_REPLAY 0x01000000U + +# define SSL_OP_NO_SSLv3 0x02000000U +# define SSL_OP_NO_TLSv1 0x04000000U +# define SSL_OP_NO_TLSv1_2 0x08000000U +# define SSL_OP_NO_TLSv1_1 0x10000000U +# define SSL_OP_NO_TLSv1_3 0x20000000U + +# define SSL_OP_NO_DTLSv1 0x04000000U +# define SSL_OP_NO_DTLSv1_2 0x08000000U + +# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv3|\ + SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2|SSL_OP_NO_TLSv1_3) +# define SSL_OP_NO_DTLS_MASK (SSL_OP_NO_DTLSv1|SSL_OP_NO_DTLSv1_2) + +/* Disallow all renegotiation */ +# define SSL_OP_NO_RENEGOTIATION 0x40000000U + +/* + * Make server add server-hello extension from early version of cryptopro + * draft, when GOST ciphersuite is negotiated. Required for interoperability + * with CryptoPro CSP 3.x + */ +# define SSL_OP_CRYPTOPRO_TLSEXT_BUG 0x80000000U + +/* + * SSL_OP_ALL: various bug workarounds that should be rather harmless. + * This used to be 0x000FFFFFL before 0.9.7. + * This used to be 0x80000BFFU before 1.1.1. + */ +# define SSL_OP_ALL (SSL_OP_CRYPTOPRO_TLSEXT_BUG|\ + SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS|\ + SSL_OP_LEGACY_SERVER_CONNECT|\ + SSL_OP_TLSEXT_PADDING|\ + SSL_OP_SAFARI_ECDHE_ECDSA_BUG) + +/* OBSOLETE OPTIONS: retained for compatibility */ + +/* Removed from OpenSSL 1.1.0. Was 0x00000001L */ +/* Related to removed SSLv2. */ +# define SSL_OP_MICROSOFT_SESS_ID_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000002L */ +/* Related to removed SSLv2. */ +# define SSL_OP_NETSCAPE_CHALLENGE_BUG 0x0 +/* Removed from OpenSSL 0.9.8q and 1.0.0c. Was 0x00000008L */ +/* Dead forever, see CVE-2010-4180 */ +# define SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG 0x0 +/* Removed from OpenSSL 1.0.1h and 1.0.2. Was 0x00000010L */ +/* Refers to ancient SSLREF and SSLv2. */ +# define SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000020 */ +# define SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER 0x0 +/* Removed from OpenSSL 0.9.7h and 0.9.8b. Was 0x00000040L */ +# define SSL_OP_MSIE_SSLV2_RSA_PADDING 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000080 */ +/* Ancient SSLeay version. */ +# define SSL_OP_SSLEAY_080_CLIENT_DH_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000100L */ +# define SSL_OP_TLS_D5_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00000200L */ +# define SSL_OP_TLS_BLOCK_PADDING_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00080000L */ +# define SSL_OP_SINGLE_ECDH_USE 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x00100000L */ +# define SSL_OP_SINGLE_DH_USE 0x0 +/* Removed from OpenSSL 1.0.1k and 1.0.2. Was 0x00200000L */ +# define SSL_OP_EPHEMERAL_RSA 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x01000000L */ +# define SSL_OP_NO_SSLv2 0x0 +/* Removed from OpenSSL 1.0.1. Was 0x08000000L */ +# define SSL_OP_PKCS1_CHECK_1 0x0 +/* Removed from OpenSSL 1.0.1. Was 0x10000000L */ +# define SSL_OP_PKCS1_CHECK_2 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x20000000L */ +# define SSL_OP_NETSCAPE_CA_DN_BUG 0x0 +/* Removed from OpenSSL 1.1.0. Was 0x40000000L */ +# define SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG 0x0 + +/* + * Allow SSL_write(..., n) to return r with 0 < r < n (i.e. report success + * when just a single record has been written): + */ +# define SSL_MODE_ENABLE_PARTIAL_WRITE 0x00000001U +/* + * Make it possible to retry SSL_write() with changed buffer location (buffer + * contents must stay the same!); this is not the default to avoid the + * misconception that non-blocking SSL_write() behaves like non-blocking + * write(): + */ +# define SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER 0x00000002U +/* + * Never bother the application with retries if the transport is blocking: + */ +# define SSL_MODE_AUTO_RETRY 0x00000004U +/* Don't attempt to automatically build certificate chain */ +# define SSL_MODE_NO_AUTO_CHAIN 0x00000008U +/* + * Save RAM by releasing read and write buffers when they're empty. (SSL3 and + * TLS only.) Released buffers are freed. + */ +# define SSL_MODE_RELEASE_BUFFERS 0x00000010U +/* + * Send the current time in the Random fields of the ClientHello and + * ServerHello records for compatibility with hypothetical implementations + * that require it. + */ +# define SSL_MODE_SEND_CLIENTHELLO_TIME 0x00000020U +# define SSL_MODE_SEND_SERVERHELLO_TIME 0x00000040U +/* + * Send TLS_FALLBACK_SCSV in the ClientHello. To be set only by applications + * that reconnect with a downgraded protocol version; see + * draft-ietf-tls-downgrade-scsv-00 for details. DO NOT ENABLE THIS if your + * application attempts a normal handshake. Only use this in explicit + * fallback retries, following the guidance in + * draft-ietf-tls-downgrade-scsv-00. + */ +# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080U +/* + * Support Asynchronous operation + */ +# define SSL_MODE_ASYNC 0x00000100U + +/* + * When using DTLS/SCTP, include the terminating zero in the label + * used for computing the endpoint-pair shared secret. Required for + * interoperability with implementations having this bug like these + * older version of OpenSSL: + * - OpenSSL 1.0.0 series + * - OpenSSL 1.0.1 series + * - OpenSSL 1.0.2 series + * - OpenSSL 1.1.0 series + * - OpenSSL 1.1.1 and 1.1.1a + */ +# define SSL_MODE_DTLS_SCTP_LABEL_LENGTH_BUG 0x00000400U + +/* Cert related flags */ +/* + * Many implementations ignore some aspects of the TLS standards such as + * enforcing certificate chain algorithms. When this is set we enforce them. + */ +# define SSL_CERT_FLAG_TLS_STRICT 0x00000001U + +/* Suite B modes, takes same values as certificate verify flags */ +# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000 + +/* Perform all sorts of protocol violations for testing purposes */ +# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000 + +/* Flags for building certificate chains */ +/* Treat any existing certificates as untrusted CAs */ +# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1 +/* Don't include root CA in chain */ +# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2 +/* Just check certificates already there */ +# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4 +/* Ignore verification errors */ +# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8 +/* Clear verification errors from queue */ +# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10 + +/* Flags returned by SSL_check_chain */ +/* Certificate can be used with this session */ +# define CERT_PKEY_VALID 0x1 +/* Certificate can also be used for signing */ +# define CERT_PKEY_SIGN 0x2 +/* EE certificate signing algorithm OK */ +# define CERT_PKEY_EE_SIGNATURE 0x10 +/* CA signature algorithms OK */ +# define CERT_PKEY_CA_SIGNATURE 0x20 +/* EE certificate parameters OK */ +# define CERT_PKEY_EE_PARAM 0x40 +/* CA certificate parameters OK */ +# define CERT_PKEY_CA_PARAM 0x80 +/* Signing explicitly allowed as opposed to SHA1 fallback */ +# define CERT_PKEY_EXPLICIT_SIGN 0x100 +/* Client CA issuer names match (always set for server cert) */ +# define CERT_PKEY_ISSUER_NAME 0x200 +/* Cert type matches client types (always set for server cert) */ +# define CERT_PKEY_CERT_TYPE 0x400 +/* Cert chain suitable to Suite B */ +# define CERT_PKEY_SUITEB 0x800 + +# define SSL_CONF_FLAG_CMDLINE 0x1 +# define SSL_CONF_FLAG_FILE 0x2 +# define SSL_CONF_FLAG_CLIENT 0x4 +# define SSL_CONF_FLAG_SERVER 0x8 +# define SSL_CONF_FLAG_SHOW_ERRORS 0x10 +# define SSL_CONF_FLAG_CERTIFICATE 0x20 +# define SSL_CONF_FLAG_REQUIRE_PRIVATE 0x40 +/* Configuration value types */ +# define SSL_CONF_TYPE_UNKNOWN 0x0 +# define SSL_CONF_TYPE_STRING 0x1 +# define SSL_CONF_TYPE_FILE 0x2 +# define SSL_CONF_TYPE_DIR 0x3 +# define SSL_CONF_TYPE_NONE 0x4 + +/* Maximum length of the application-controlled segment of a a TLSv1.3 cookie */ +# define SSL_COOKIE_LENGTH 4096 + +/* + * Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they + * cannot be used to clear bits. + */ + +unsigned long SSL_CTX_get_options(const SSL_CTX *ctx); +unsigned long SSL_get_options(const SSL *s); +unsigned long SSL_CTX_clear_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_clear_options(SSL *s, unsigned long op); +unsigned long SSL_CTX_set_options(SSL_CTX *ctx, unsigned long op); +unsigned long SSL_set_options(SSL *s, unsigned long op); + +# define SSL_CTX_set_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,(op),NULL) +# define SSL_CTX_clear_mode(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_CTX_get_mode(ctx) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_MODE,0,NULL) +# define SSL_clear_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_MODE,(op),NULL) +# define SSL_set_mode(ssl,op) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,(op),NULL) +# define SSL_get_mode(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_MODE,0,NULL) +# define SSL_set_mtu(ssl, mtu) \ + SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL) +# define DTLS_set_link_mtu(ssl, mtu) \ + SSL_ctrl((ssl),DTLS_CTRL_SET_LINK_MTU,(mtu),NULL) +# define DTLS_get_link_min_mtu(ssl) \ + SSL_ctrl((ssl),DTLS_CTRL_GET_LINK_MIN_MTU,0,NULL) + +# define SSL_get_secure_renegotiation_support(ssl) \ + SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_heartbeat(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT,0,NULL) +# endif + +# define SSL_CTX_set_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_set_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL) +# define SSL_CTX_clear_cert_flags(ctx,op) \ + SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) +# define SSL_clear_cert_flags(s,op) \ + SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL) + +void SSL_CTX_set_msg_callback(SSL_CTX *ctx, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +void SSL_set_msg_callback(SSL *ssl, + void (*cb) (int write_p, int version, + int content_type, const void *buf, + size_t len, SSL *ssl, void *arg)); +# define SSL_CTX_set_msg_callback_arg(ctx, arg) SSL_CTX_ctrl((ctx), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) +# define SSL_set_msg_callback_arg(ssl, arg) SSL_ctrl((ssl), SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, (arg)) + +# define SSL_get_extms_support(s) \ + SSL_ctrl((s),SSL_CTRL_GET_EXTMS_SUPPORT,0,NULL) + +# ifndef OPENSSL_NO_SRP + +/* see tls_srp.c */ +__owur int SSL_SRP_CTX_init(SSL *s); +__owur int SSL_CTX_SRP_CTX_init(SSL_CTX *ctx); +int SSL_SRP_CTX_free(SSL *ctx); +int SSL_CTX_SRP_CTX_free(SSL_CTX *ctx); +__owur int SSL_srp_server_param_with_username(SSL *s, int *ad); +__owur int SRP_Calc_A_param(SSL *s); + +# endif + +/* 100k max cert list */ +# define SSL_MAX_CERT_LIST_DEFAULT 1024*100 + +# define SSL_SESSION_CACHE_MAX_SIZE_DEFAULT (1024*20) + +/* + * This callback type is used inside SSL_CTX, SSL, and in the functions that + * set them. It is used to override the generation of SSL/TLS session IDs in + * a server. Return value should be zero on an error, non-zero to proceed. + * Also, callbacks should themselves check if the id they generate is unique + * otherwise the SSL handshake will fail with an error - callbacks can do + * this using the 'ssl' value they're passed by; + * SSL_has_matching_session_id(ssl, id, *id_len) The length value passed in + * is set at the maximum size the session ID can be. In SSLv3/TLSv1 it is 32 + * bytes. The callback can alter this length to be less if desired. It is + * also an error for the callback to set the size to zero. + */ +typedef int (*GEN_SESSION_CB) (SSL *ssl, unsigned char *id, + unsigned int *id_len); + +# define SSL_SESS_CACHE_OFF 0x0000 +# define SSL_SESS_CACHE_CLIENT 0x0001 +# define SSL_SESS_CACHE_SERVER 0x0002 +# define SSL_SESS_CACHE_BOTH (SSL_SESS_CACHE_CLIENT|SSL_SESS_CACHE_SERVER) +# define SSL_SESS_CACHE_NO_AUTO_CLEAR 0x0080 +/* enough comments already ... see SSL_CTX_set_session_cache_mode(3) */ +# define SSL_SESS_CACHE_NO_INTERNAL_LOOKUP 0x0100 +# define SSL_SESS_CACHE_NO_INTERNAL_STORE 0x0200 +# define SSL_SESS_CACHE_NO_INTERNAL \ + (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP|SSL_SESS_CACHE_NO_INTERNAL_STORE) + +LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx); +# define SSL_CTX_sess_number(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_NUMBER,0,NULL) +# define SSL_CTX_sess_connect(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT,0,NULL) +# define SSL_CTX_sess_connect_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_GOOD,0,NULL) +# define SSL_CTX_sess_connect_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CONNECT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT,0,NULL) +# define SSL_CTX_sess_accept_renegotiate(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_RENEGOTIATE,0,NULL) +# define SSL_CTX_sess_accept_good(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_ACCEPT_GOOD,0,NULL) +# define SSL_CTX_sess_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_HIT,0,NULL) +# define SSL_CTX_sess_cb_hits(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CB_HIT,0,NULL) +# define SSL_CTX_sess_misses(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_MISSES,0,NULL) +# define SSL_CTX_sess_timeouts(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_TIMEOUTS,0,NULL) +# define SSL_CTX_sess_cache_full(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SESS_CACHE_FULL,0,NULL) + +void SSL_CTX_sess_set_new_cb(SSL_CTX *ctx, + int (*new_session_cb) (struct ssl_st *ssl, + SSL_SESSION *sess)); +int (*SSL_CTX_sess_get_new_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + SSL_SESSION *sess); +void SSL_CTX_sess_set_remove_cb(SSL_CTX *ctx, + void (*remove_session_cb) (struct ssl_ctx_st + *ctx, + SSL_SESSION *sess)); +void (*SSL_CTX_sess_get_remove_cb(SSL_CTX *ctx)) (struct ssl_ctx_st *ctx, + SSL_SESSION *sess); +void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx, + SSL_SESSION *(*get_session_cb) (struct ssl_st + *ssl, + const unsigned char + *data, int len, + int *copy)); +SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx)) (struct ssl_st *ssl, + const unsigned char *data, + int len, int *copy); +void SSL_CTX_set_info_callback(SSL_CTX *ctx, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, + int val); +void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, + int (*client_cert_cb) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey)); +int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx)) (SSL *ssl, X509 **x509, + EVP_PKEY **pkey); +# ifndef OPENSSL_NO_ENGINE +__owur int SSL_CTX_set_client_cert_engine(SSL_CTX *ctx, ENGINE *e); +# endif +void SSL_CTX_set_cookie_generate_cb(SSL_CTX *ctx, + int (*app_gen_cookie_cb) (SSL *ssl, + unsigned char + *cookie, + unsigned int + *cookie_len)); +void SSL_CTX_set_cookie_verify_cb(SSL_CTX *ctx, + int (*app_verify_cookie_cb) (SSL *ssl, + const unsigned + char *cookie, + unsigned int + cookie_len)); + +void SSL_CTX_set_stateless_cookie_generate_cb( + SSL_CTX *ctx, + int (*gen_stateless_cookie_cb) (SSL *ssl, + unsigned char *cookie, + size_t *cookie_len)); +void SSL_CTX_set_stateless_cookie_verify_cb( + SSL_CTX *ctx, + int (*verify_stateless_cookie_cb) (SSL *ssl, + const unsigned char *cookie, + size_t cookie_len)); +# ifndef OPENSSL_NO_NEXTPROTONEG + +typedef int (*SSL_CTX_npn_advertised_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned int *outlen, + void *arg); +void SSL_CTX_set_next_protos_advertised_cb(SSL_CTX *s, + SSL_CTX_npn_advertised_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_advertised_cb SSL_CTX_set_next_protos_advertised_cb + +typedef int (*SSL_CTX_npn_select_cb_func)(SSL *s, + unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s, + SSL_CTX_npn_select_cb_func cb, + void *arg); +# define SSL_CTX_set_npn_select_cb SSL_CTX_set_next_proto_select_cb + +void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data, + unsigned *len); +# define SSL_get0_npn_negotiated SSL_get0_next_proto_negotiated +# endif + +__owur int SSL_select_next_proto(unsigned char **out, unsigned char *outlen, + const unsigned char *in, unsigned int inlen, + const unsigned char *client, + unsigned int client_len); + +# define OPENSSL_NPN_UNSUPPORTED 0 +# define OPENSSL_NPN_NEGOTIATED 1 +# define OPENSSL_NPN_NO_OVERLAP 2 + +__owur int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, + unsigned int protos_len); +__owur int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, + unsigned int protos_len); +typedef int (*SSL_CTX_alpn_select_cb_func)(SSL *ssl, + const unsigned char **out, + unsigned char *outlen, + const unsigned char *in, + unsigned int inlen, + void *arg); +void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx, + SSL_CTX_alpn_select_cb_func cb, + void *arg); +void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data, + unsigned int *len); + +# ifndef OPENSSL_NO_PSK +/* + * the maximum length of the buffer given to callbacks containing the + * resulting identity/psk + */ +# define PSK_MAX_IDENTITY_LEN 128 +# define PSK_MAX_PSK_LEN 256 +typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl, + const char *hint, + char *identity, + unsigned int max_identity_len, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb); +void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb); + +typedef unsigned int (*SSL_psk_server_cb_func)(SSL *ssl, + const char *identity, + unsigned char *psk, + unsigned int max_psk_len); +void SSL_CTX_set_psk_server_callback(SSL_CTX *ctx, SSL_psk_server_cb_func cb); +void SSL_set_psk_server_callback(SSL *ssl, SSL_psk_server_cb_func cb); + +__owur int SSL_CTX_use_psk_identity_hint(SSL_CTX *ctx, const char *identity_hint); +__owur int SSL_use_psk_identity_hint(SSL *s, const char *identity_hint); +const char *SSL_get_psk_identity_hint(const SSL *s); +const char *SSL_get_psk_identity(const SSL *s); +# endif + +typedef int (*SSL_psk_find_session_cb_func)(SSL *ssl, + const unsigned char *identity, + size_t identity_len, + SSL_SESSION **sess); +typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md, + const unsigned char **id, + size_t *idlen, + SSL_SESSION **sess); + +void SSL_set_psk_find_session_callback(SSL *s, SSL_psk_find_session_cb_func cb); +void SSL_CTX_set_psk_find_session_callback(SSL_CTX *ctx, + SSL_psk_find_session_cb_func cb); +void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb); +void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx, + SSL_psk_use_session_cb_func cb); + +/* Register callbacks to handle custom TLS Extensions for client or server. */ + +__owur int SSL_CTX_has_client_custom_ext(const SSL_CTX *ctx, + unsigned int ext_type); + +__owur int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, + unsigned int ext_type, + custom_ext_add_cb add_cb, + custom_ext_free_cb free_cb, + void *add_arg, + custom_ext_parse_cb parse_cb, + void *parse_arg); + +__owur int SSL_CTX_add_custom_ext(SSL_CTX *ctx, unsigned int ext_type, + unsigned int context, + SSL_custom_ext_add_cb_ex add_cb, + SSL_custom_ext_free_cb_ex free_cb, + void *add_arg, + SSL_custom_ext_parse_cb_ex parse_cb, + void *parse_arg); + +__owur int SSL_extension_supported(unsigned int ext_type); + +# define SSL_NOTHING 1 +# define SSL_WRITING 2 +# define SSL_READING 3 +# define SSL_X509_LOOKUP 4 +# define SSL_ASYNC_PAUSED 5 +# define SSL_ASYNC_NO_JOBS 6 +# define SSL_CLIENT_HELLO_CB 7 + +/* These will only be used when doing non-blocking IO */ +# define SSL_want_nothing(s) (SSL_want(s) == SSL_NOTHING) +# define SSL_want_read(s) (SSL_want(s) == SSL_READING) +# define SSL_want_write(s) (SSL_want(s) == SSL_WRITING) +# define SSL_want_x509_lookup(s) (SSL_want(s) == SSL_X509_LOOKUP) +# define SSL_want_async(s) (SSL_want(s) == SSL_ASYNC_PAUSED) +# define SSL_want_async_job(s) (SSL_want(s) == SSL_ASYNC_NO_JOBS) +# define SSL_want_client_hello_cb(s) (SSL_want(s) == SSL_CLIENT_HELLO_CB) + +# define SSL_MAC_FLAG_READ_MAC_STREAM 1 +# define SSL_MAC_FLAG_WRITE_MAC_STREAM 2 + +/* + * A callback for logging out TLS key material. This callback should log out + * |line| followed by a newline. + */ +typedef void (*SSL_CTX_keylog_cb_func)(const SSL *ssl, const char *line); + +/* + * SSL_CTX_set_keylog_callback configures a callback to log key material. This + * is intended for debugging use with tools like Wireshark. The cb function + * should log line followed by a newline. + */ +void SSL_CTX_set_keylog_callback(SSL_CTX *ctx, SSL_CTX_keylog_cb_func cb); + +/* + * SSL_CTX_get_keylog_callback returns the callback configured by + * SSL_CTX_set_keylog_callback. + */ +SSL_CTX_keylog_cb_func SSL_CTX_get_keylog_callback(const SSL_CTX *ctx); + +int SSL_CTX_set_max_early_data(SSL_CTX *ctx, uint32_t max_early_data); +uint32_t SSL_CTX_get_max_early_data(const SSL_CTX *ctx); +int SSL_set_max_early_data(SSL *s, uint32_t max_early_data); +uint32_t SSL_get_max_early_data(const SSL *s); +int SSL_CTX_set_recv_max_early_data(SSL_CTX *ctx, uint32_t recv_max_early_data); +uint32_t SSL_CTX_get_recv_max_early_data(const SSL_CTX *ctx); +int SSL_set_recv_max_early_data(SSL *s, uint32_t recv_max_early_data); +uint32_t SSL_get_recv_max_early_data(const SSL *s); + +#ifdef __cplusplus +} +#endif + +# include +# include +# include /* This is mostly sslv3 with a few tweaks */ +# include /* Datagram TLS */ +# include /* Support for the use_srtp extension */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * These need to be after the above set of includes due to a compiler bug + * in VisualStudio 2015 + */ +DEFINE_STACK_OF_CONST(SSL_CIPHER) +DEFINE_STACK_OF(SSL_COMP) + +/* compatibility */ +# define SSL_set_app_data(s,arg) (SSL_set_ex_data(s,0,(char *)(arg))) +# define SSL_get_app_data(s) (SSL_get_ex_data(s,0)) +# define SSL_SESSION_set_app_data(s,a) (SSL_SESSION_set_ex_data(s,0, \ + (char *)(a))) +# define SSL_SESSION_get_app_data(s) (SSL_SESSION_get_ex_data(s,0)) +# define SSL_CTX_get_app_data(ctx) (SSL_CTX_get_ex_data(ctx,0)) +# define SSL_CTX_set_app_data(ctx,arg) (SSL_CTX_set_ex_data(ctx,0, \ + (char *)(arg))) +DEPRECATEDIN_1_1_0(void SSL_set_debug(SSL *s, int debug)) + +/* TLSv1.3 KeyUpdate message types */ +/* -1 used so that this is an invalid value for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NONE -1 +/* Values as defined for the on-the-wire protocol */ +#define SSL_KEY_UPDATE_NOT_REQUESTED 0 +#define SSL_KEY_UPDATE_REQUESTED 1 + +/* + * The valid handshake states (one for each type message sent and one for each + * type of message received). There are also two "special" states: + * TLS = TLS or DTLS state + * DTLS = DTLS specific state + * CR/SR = Client Read/Server Read + * CW/SW = Client Write/Server Write + * + * The "special" states are: + * TLS_ST_BEFORE = No handshake has been initiated yet + * TLS_ST_OK = A handshake has been successfully completed + */ +typedef enum { + TLS_ST_BEFORE, + TLS_ST_OK, + DTLS_ST_CR_HELLO_VERIFY_REQUEST, + TLS_ST_CR_SRVR_HELLO, + TLS_ST_CR_CERT, + TLS_ST_CR_CERT_STATUS, + TLS_ST_CR_KEY_EXCH, + TLS_ST_CR_CERT_REQ, + TLS_ST_CR_SRVR_DONE, + TLS_ST_CR_SESSION_TICKET, + TLS_ST_CR_CHANGE, + TLS_ST_CR_FINISHED, + TLS_ST_CW_CLNT_HELLO, + TLS_ST_CW_CERT, + TLS_ST_CW_KEY_EXCH, + TLS_ST_CW_CERT_VRFY, + TLS_ST_CW_CHANGE, + TLS_ST_CW_NEXT_PROTO, + TLS_ST_CW_FINISHED, + TLS_ST_SW_HELLO_REQ, + TLS_ST_SR_CLNT_HELLO, + DTLS_ST_SW_HELLO_VERIFY_REQUEST, + TLS_ST_SW_SRVR_HELLO, + TLS_ST_SW_CERT, + TLS_ST_SW_KEY_EXCH, + TLS_ST_SW_CERT_REQ, + TLS_ST_SW_SRVR_DONE, + TLS_ST_SR_CERT, + TLS_ST_SR_KEY_EXCH, + TLS_ST_SR_CERT_VRFY, + TLS_ST_SR_NEXT_PROTO, + TLS_ST_SR_CHANGE, + TLS_ST_SR_FINISHED, + TLS_ST_SW_SESSION_TICKET, + TLS_ST_SW_CERT_STATUS, + TLS_ST_SW_CHANGE, + TLS_ST_SW_FINISHED, + TLS_ST_SW_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_ENCRYPTED_EXTENSIONS, + TLS_ST_CR_CERT_VRFY, + TLS_ST_SW_CERT_VRFY, + TLS_ST_CR_HELLO_REQ, + TLS_ST_SW_KEY_UPDATE, + TLS_ST_CW_KEY_UPDATE, + TLS_ST_SR_KEY_UPDATE, + TLS_ST_CR_KEY_UPDATE, + TLS_ST_EARLY_DATA, + TLS_ST_PENDING_EARLY_DATA_END, + TLS_ST_CW_END_OF_EARLY_DATA, + TLS_ST_SR_END_OF_EARLY_DATA +} OSSL_HANDSHAKE_STATE; + +/* + * Most of the following state values are no longer used and are defined to be + * the closest equivalent value in the current state machine code. Not all + * defines have an equivalent and are set to a dummy value (-1). SSL_ST_CONNECT + * and SSL_ST_ACCEPT are still in use in the definition of SSL_CB_ACCEPT_LOOP, + * SSL_CB_ACCEPT_EXIT, SSL_CB_CONNECT_LOOP and SSL_CB_CONNECT_EXIT. + */ + +# define SSL_ST_CONNECT 0x1000 +# define SSL_ST_ACCEPT 0x2000 + +# define SSL_ST_MASK 0x0FFF + +# define SSL_CB_LOOP 0x01 +# define SSL_CB_EXIT 0x02 +# define SSL_CB_READ 0x04 +# define SSL_CB_WRITE 0x08 +# define SSL_CB_ALERT 0x4000/* used in callback */ +# define SSL_CB_READ_ALERT (SSL_CB_ALERT|SSL_CB_READ) +# define SSL_CB_WRITE_ALERT (SSL_CB_ALERT|SSL_CB_WRITE) +# define SSL_CB_ACCEPT_LOOP (SSL_ST_ACCEPT|SSL_CB_LOOP) +# define SSL_CB_ACCEPT_EXIT (SSL_ST_ACCEPT|SSL_CB_EXIT) +# define SSL_CB_CONNECT_LOOP (SSL_ST_CONNECT|SSL_CB_LOOP) +# define SSL_CB_CONNECT_EXIT (SSL_ST_CONNECT|SSL_CB_EXIT) +# define SSL_CB_HANDSHAKE_START 0x10 +# define SSL_CB_HANDSHAKE_DONE 0x20 + +/* Is the SSL_connection established? */ +# define SSL_in_connect_init(a) (SSL_in_init(a) && !SSL_is_server(a)) +# define SSL_in_accept_init(a) (SSL_in_init(a) && SSL_is_server(a)) +int SSL_in_init(const SSL *s); +int SSL_in_before(const SSL *s); +int SSL_is_init_finished(const SSL *s); + +/* + * The following 3 states are kept in ssl->rlayer.rstate when reads fail, you + * should not need these + */ +# define SSL_ST_READ_HEADER 0xF0 +# define SSL_ST_READ_BODY 0xF1 +# define SSL_ST_READ_DONE 0xF2 + +/*- + * Obtain latest Finished message + * -- that we sent (SSL_get_finished) + * -- that we expected from peer (SSL_get_peer_finished). + * Returns length (0 == no Finished so far), copies up to 'count' bytes. + */ +size_t SSL_get_finished(const SSL *s, void *buf, size_t count); +size_t SSL_get_peer_finished(const SSL *s, void *buf, size_t count); + +/* + * use either SSL_VERIFY_NONE or SSL_VERIFY_PEER, the last 3 options are + * 'ored' with SSL_VERIFY_PEER if they are desired + */ +# define SSL_VERIFY_NONE 0x00 +# define SSL_VERIFY_PEER 0x01 +# define SSL_VERIFY_FAIL_IF_NO_PEER_CERT 0x02 +# define SSL_VERIFY_CLIENT_ONCE 0x04 +# define SSL_VERIFY_POST_HANDSHAKE 0x08 + +# if OPENSSL_API_COMPAT < 0x10100000L +# define OpenSSL_add_ssl_algorithms() SSL_library_init() +# define SSLeay_add_ssl_algorithms() SSL_library_init() +# endif + +/* More backward compatibility */ +# define SSL_get_cipher(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_cipher_bits(s,np) \ + SSL_CIPHER_get_bits(SSL_get_current_cipher(s),np) +# define SSL_get_cipher_version(s) \ + SSL_CIPHER_get_version(SSL_get_current_cipher(s)) +# define SSL_get_cipher_name(s) \ + SSL_CIPHER_get_name(SSL_get_current_cipher(s)) +# define SSL_get_time(a) SSL_SESSION_get_time(a) +# define SSL_set_time(a,b) SSL_SESSION_set_time((a),(b)) +# define SSL_get_timeout(a) SSL_SESSION_get_timeout(a) +# define SSL_set_timeout(a,b) SSL_SESSION_set_timeout((a),(b)) + +# define d2i_SSL_SESSION_bio(bp,s_id) ASN1_d2i_bio_of(SSL_SESSION,SSL_SESSION_new,d2i_SSL_SESSION,bp,s_id) +# define i2d_SSL_SESSION_bio(bp,s_id) ASN1_i2d_bio_of(SSL_SESSION,i2d_SSL_SESSION,bp,s_id) + +DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) +# define SSL_AD_REASON_OFFSET 1000/* offset to get SSL_R_... value + * from SSL_AD_... */ +/* These alert types are for SSLv3 and TLSv1 */ +# define SSL_AD_CLOSE_NOTIFY SSL3_AD_CLOSE_NOTIFY +/* fatal */ +# define SSL_AD_UNEXPECTED_MESSAGE SSL3_AD_UNEXPECTED_MESSAGE +/* fatal */ +# define SSL_AD_BAD_RECORD_MAC SSL3_AD_BAD_RECORD_MAC +# define SSL_AD_DECRYPTION_FAILED TLS1_AD_DECRYPTION_FAILED +# define SSL_AD_RECORD_OVERFLOW TLS1_AD_RECORD_OVERFLOW +/* fatal */ +# define SSL_AD_DECOMPRESSION_FAILURE SSL3_AD_DECOMPRESSION_FAILURE +/* fatal */ +# define SSL_AD_HANDSHAKE_FAILURE SSL3_AD_HANDSHAKE_FAILURE +/* Not for TLS */ +# define SSL_AD_NO_CERTIFICATE SSL3_AD_NO_CERTIFICATE +# define SSL_AD_BAD_CERTIFICATE SSL3_AD_BAD_CERTIFICATE +# define SSL_AD_UNSUPPORTED_CERTIFICATE SSL3_AD_UNSUPPORTED_CERTIFICATE +# define SSL_AD_CERTIFICATE_REVOKED SSL3_AD_CERTIFICATE_REVOKED +# define SSL_AD_CERTIFICATE_EXPIRED SSL3_AD_CERTIFICATE_EXPIRED +# define SSL_AD_CERTIFICATE_UNKNOWN SSL3_AD_CERTIFICATE_UNKNOWN +/* fatal */ +# define SSL_AD_ILLEGAL_PARAMETER SSL3_AD_ILLEGAL_PARAMETER +/* fatal */ +# define SSL_AD_UNKNOWN_CA TLS1_AD_UNKNOWN_CA +/* fatal */ +# define SSL_AD_ACCESS_DENIED TLS1_AD_ACCESS_DENIED +/* fatal */ +# define SSL_AD_DECODE_ERROR TLS1_AD_DECODE_ERROR +# define SSL_AD_DECRYPT_ERROR TLS1_AD_DECRYPT_ERROR +/* fatal */ +# define SSL_AD_EXPORT_RESTRICTION TLS1_AD_EXPORT_RESTRICTION +/* fatal */ +# define SSL_AD_PROTOCOL_VERSION TLS1_AD_PROTOCOL_VERSION +/* fatal */ +# define SSL_AD_INSUFFICIENT_SECURITY TLS1_AD_INSUFFICIENT_SECURITY +/* fatal */ +# define SSL_AD_INTERNAL_ERROR TLS1_AD_INTERNAL_ERROR +# define SSL_AD_USER_CANCELLED TLS1_AD_USER_CANCELLED +# define SSL_AD_NO_RENEGOTIATION TLS1_AD_NO_RENEGOTIATION +# define SSL_AD_MISSING_EXTENSION TLS13_AD_MISSING_EXTENSION +# define SSL_AD_CERTIFICATE_REQUIRED TLS13_AD_CERTIFICATE_REQUIRED +# define SSL_AD_UNSUPPORTED_EXTENSION TLS1_AD_UNSUPPORTED_EXTENSION +# define SSL_AD_CERTIFICATE_UNOBTAINABLE TLS1_AD_CERTIFICATE_UNOBTAINABLE +# define SSL_AD_UNRECOGNIZED_NAME TLS1_AD_UNRECOGNIZED_NAME +# define SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE +# define SSL_AD_BAD_CERTIFICATE_HASH_VALUE TLS1_AD_BAD_CERTIFICATE_HASH_VALUE +/* fatal */ +# define SSL_AD_UNKNOWN_PSK_IDENTITY TLS1_AD_UNKNOWN_PSK_IDENTITY +/* fatal */ +# define SSL_AD_INAPPROPRIATE_FALLBACK TLS1_AD_INAPPROPRIATE_FALLBACK +# define SSL_AD_NO_APPLICATION_PROTOCOL TLS1_AD_NO_APPLICATION_PROTOCOL +# define SSL_ERROR_NONE 0 +# define SSL_ERROR_SSL 1 +# define SSL_ERROR_WANT_READ 2 +# define SSL_ERROR_WANT_WRITE 3 +# define SSL_ERROR_WANT_X509_LOOKUP 4 +# define SSL_ERROR_SYSCALL 5/* look at error stack/return + * value/errno */ +# define SSL_ERROR_ZERO_RETURN 6 +# define SSL_ERROR_WANT_CONNECT 7 +# define SSL_ERROR_WANT_ACCEPT 8 +# define SSL_ERROR_WANT_ASYNC 9 +# define SSL_ERROR_WANT_ASYNC_JOB 10 +# define SSL_ERROR_WANT_CLIENT_HELLO_CB 11 +# define SSL_CTRL_SET_TMP_DH 3 +# define SSL_CTRL_SET_TMP_ECDH 4 +# define SSL_CTRL_SET_TMP_DH_CB 6 +# define SSL_CTRL_GET_CLIENT_CERT_REQUEST 9 +# define SSL_CTRL_GET_NUM_RENEGOTIATIONS 10 +# define SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS 11 +# define SSL_CTRL_GET_TOTAL_RENEGOTIATIONS 12 +# define SSL_CTRL_GET_FLAGS 13 +# define SSL_CTRL_EXTRA_CHAIN_CERT 14 +# define SSL_CTRL_SET_MSG_CALLBACK 15 +# define SSL_CTRL_SET_MSG_CALLBACK_ARG 16 +/* only applies to datagram connections */ +# define SSL_CTRL_SET_MTU 17 +/* Stats */ +# define SSL_CTRL_SESS_NUMBER 20 +# define SSL_CTRL_SESS_CONNECT 21 +# define SSL_CTRL_SESS_CONNECT_GOOD 22 +# define SSL_CTRL_SESS_CONNECT_RENEGOTIATE 23 +# define SSL_CTRL_SESS_ACCEPT 24 +# define SSL_CTRL_SESS_ACCEPT_GOOD 25 +# define SSL_CTRL_SESS_ACCEPT_RENEGOTIATE 26 +# define SSL_CTRL_SESS_HIT 27 +# define SSL_CTRL_SESS_CB_HIT 28 +# define SSL_CTRL_SESS_MISSES 29 +# define SSL_CTRL_SESS_TIMEOUTS 30 +# define SSL_CTRL_SESS_CACHE_FULL 31 +# define SSL_CTRL_MODE 33 +# define SSL_CTRL_GET_READ_AHEAD 40 +# define SSL_CTRL_SET_READ_AHEAD 41 +# define SSL_CTRL_SET_SESS_CACHE_SIZE 42 +# define SSL_CTRL_GET_SESS_CACHE_SIZE 43 +# define SSL_CTRL_SET_SESS_CACHE_MODE 44 +# define SSL_CTRL_GET_SESS_CACHE_MODE 45 +# define SSL_CTRL_GET_MAX_CERT_LIST 50 +# define SSL_CTRL_SET_MAX_CERT_LIST 51 +# define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52 +/* see tls1.h for macros based on these */ +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53 +# define SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG 54 +# define SSL_CTRL_SET_TLSEXT_HOSTNAME 55 +# define SSL_CTRL_SET_TLSEXT_DEBUG_CB 56 +# define SSL_CTRL_SET_TLSEXT_DEBUG_ARG 57 +# define SSL_CTRL_GET_TLSEXT_TICKET_KEYS 58 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEYS 59 +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT 60 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB 61 */ +/*# define SSL_CTRL_SET_TLSEXT_OPAQUE_PRF_INPUT_CB_ARG 62 */ +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB 63 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG 64 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE 65 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS 66 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS 67 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS 68 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS 69 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP 70 +# define SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP 71 +# define SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB 72 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME_CB 75 +# define SSL_CTRL_SET_SRP_VERIFY_PARAM_CB 76 +# define SSL_CTRL_SET_SRP_GIVE_CLIENT_PWD_CB 77 +# define SSL_CTRL_SET_SRP_ARG 78 +# define SSL_CTRL_SET_TLS_EXT_SRP_USERNAME 79 +# define SSL_CTRL_SET_TLS_EXT_SRP_STRENGTH 80 +# define SSL_CTRL_SET_TLS_EXT_SRP_PASSWORD 81 +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT 85 +# define SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING 86 +# define SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS 87 +# endif +# define DTLS_CTRL_GET_TIMEOUT 73 +# define DTLS_CTRL_HANDLE_TIMEOUT 74 +# define SSL_CTRL_GET_RI_SUPPORT 76 +# define SSL_CTRL_CLEAR_MODE 78 +# define SSL_CTRL_SET_NOT_RESUMABLE_SESS_CB 79 +# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82 +# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83 +# define SSL_CTRL_CHAIN 88 +# define SSL_CTRL_CHAIN_CERT 89 +# define SSL_CTRL_GET_GROUPS 90 +# define SSL_CTRL_SET_GROUPS 91 +# define SSL_CTRL_SET_GROUPS_LIST 92 +# define SSL_CTRL_GET_SHARED_GROUP 93 +# define SSL_CTRL_SET_SIGALGS 97 +# define SSL_CTRL_SET_SIGALGS_LIST 98 +# define SSL_CTRL_CERT_FLAGS 99 +# define SSL_CTRL_CLEAR_CERT_FLAGS 100 +# define SSL_CTRL_SET_CLIENT_SIGALGS 101 +# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102 +# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103 +# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104 +# define SSL_CTRL_BUILD_CERT_CHAIN 105 +# define SSL_CTRL_SET_VERIFY_CERT_STORE 106 +# define SSL_CTRL_SET_CHAIN_CERT_STORE 107 +# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108 +# define SSL_CTRL_GET_PEER_TMP_KEY 109 +# define SSL_CTRL_GET_RAW_CIPHERLIST 110 +# define SSL_CTRL_GET_EC_POINT_FORMATS 111 +# define SSL_CTRL_GET_CHAIN_CERTS 115 +# define SSL_CTRL_SELECT_CURRENT_CERT 116 +# define SSL_CTRL_SET_CURRENT_CERT 117 +# define SSL_CTRL_SET_DH_AUTO 118 +# define DTLS_CTRL_SET_LINK_MTU 120 +# define DTLS_CTRL_GET_LINK_MIN_MTU 121 +# define SSL_CTRL_GET_EXTMS_SUPPORT 122 +# define SSL_CTRL_SET_MIN_PROTO_VERSION 123 +# define SSL_CTRL_SET_MAX_PROTO_VERSION 124 +# define SSL_CTRL_SET_SPLIT_SEND_FRAGMENT 125 +# define SSL_CTRL_SET_MAX_PIPELINES 126 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE 127 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB 128 +# define SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG 129 +# define SSL_CTRL_GET_MIN_PROTO_VERSION 130 +# define SSL_CTRL_GET_MAX_PROTO_VERSION 131 +# define SSL_CTRL_GET_SIGNATURE_NID 132 +# define SSL_CTRL_GET_TMP_KEY 133 +# define SSL_CTRL_GET_VERIFY_CERT_STORE 137 +# define SSL_CTRL_GET_CHAIN_CERT_STORE 138 +# define SSL_CERT_SET_FIRST 1 +# define SSL_CERT_SET_NEXT 2 +# define SSL_CERT_SET_SERVER 3 +# define DTLSv1_get_timeout(ssl, arg) \ + SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)(arg)) +# define DTLSv1_handle_timeout(ssl) \ + SSL_ctrl(ssl,DTLS_CTRL_HANDLE_TIMEOUT,0, NULL) +# define SSL_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_clear_num_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS,0,NULL) +# define SSL_total_renegotiations(ssl) \ + SSL_ctrl((ssl),SSL_CTRL_GET_TOTAL_RENEGOTIATIONS,0,NULL) +# define SSL_CTX_set_tmp_dh(ctx,dh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# define SSL_CTX_set_tmp_ecdh(ctx,ecdh) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_CTX_set_dh_auto(ctx, onoff) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_dh_auto(s, onoff) \ + SSL_ctrl(s,SSL_CTRL_SET_DH_AUTO,onoff,NULL) +# define SSL_set_tmp_dh(ssl,dh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_DH,0,(char *)(dh)) +# define SSL_set_tmp_ecdh(ssl,ecdh) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TMP_ECDH,0,(char *)(ecdh)) +# define SSL_CTX_add_extra_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_get_extra_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509) +# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509) +# define SSL_CTX_clear_extra_chain_certs(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL) +# define SSL_CTX_set0_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_CTX_set1_chain(ctx,sk) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_CTX_add0_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_CTX_add1_chain_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_CTX_get0_chain_certs(ctx,px509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_CTX_clear_chain_certs(ctx) \ + SSL_CTX_set0_chain(ctx,NULL) +# define SSL_CTX_build_cert_chain(ctx, flags) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_CTX_select_current_cert(ctx,x509) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_CTX_set_current_cert(ctx, op) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_CTX_set0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_verify_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_CTX_set1_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +# define SSL_CTX_get0_chain_cert_store(ctx,st) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,0,(char *)(sk)) +# define SSL_set1_chain(s,sk) \ + SSL_ctrl(s,SSL_CTRL_CHAIN,1,(char *)(sk)) +# define SSL_add0_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,0,(char *)(x509)) +# define SSL_add1_chain_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_CHAIN_CERT,1,(char *)(x509)) +# define SSL_get0_chain_certs(s,px509) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERTS,0,px509) +# define SSL_clear_chain_certs(s) \ + SSL_set0_chain(s,NULL) +# define SSL_build_cert_chain(s, flags) \ + SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL) +# define SSL_select_current_cert(s,x509) \ + SSL_ctrl(s,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)(x509)) +# define SSL_set_current_cert(s,op) \ + SSL_ctrl(s,SSL_CTRL_SET_CURRENT_CERT, op, NULL) +# define SSL_set0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set1_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)(st)) +#define SSL_get0_verify_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_VERIFY_CERT_STORE,0,(char *)(st)) +# define SSL_set0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_set1_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)(st)) +#define SSL_get0_chain_cert_store(s,st) \ + SSL_ctrl(s,SSL_CTRL_GET_CHAIN_CERT_STORE,0,(char *)(st)) +# define SSL_get1_groups(s, glist) \ + SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) +# define SSL_CTX_set1_groups(ctx, glist, glistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) +# define SSL_CTX_set1_groups_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) +# define SSL_set1_groups(s, glist, glistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) +# define SSL_set1_groups_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(str)) +# define SSL_get_shared_group(s, n) \ + SSL_ctrl(s,SSL_CTRL_GET_SHARED_GROUP,n,NULL) +# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)(str)) +# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(s)) +# define SSL_set1_client_sigalgs(s, slist, slistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)(slist)) +# define SSL_set1_client_sigalgs_list(s, str) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)(str)) +# define SSL_get0_certificate_types(s, clist) \ + SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)(clist)) +# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen, \ + (char *)(clist)) +# define SSL_set1_client_certificate_types(s, clist, clistlen) \ + SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)(clist)) +# define SSL_get_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_SIGNATURE_NID,0,pn) +# define SSL_get_peer_signature_nid(s, pn) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn) +# define SSL_get_peer_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_PEER_TMP_KEY,0,pk) +# define SSL_get_tmp_key(s, pk) \ + SSL_ctrl(s,SSL_CTRL_GET_TMP_KEY,0,pk) +# define SSL_get0_raw_cipherlist(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,plst) +# define SSL_get0_ec_point_formats(s, plst) \ + SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,plst) +# define SSL_CTX_set_min_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_CTX_set_max_proto_version(ctx, version) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_CTX_get_min_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_CTX_get_max_proto_version(ctx) \ + SSL_CTX_ctrl(ctx, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +# define SSL_set_min_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MIN_PROTO_VERSION, version, NULL) +# define SSL_set_max_proto_version(s, version) \ + SSL_ctrl(s, SSL_CTRL_SET_MAX_PROTO_VERSION, version, NULL) +# define SSL_get_min_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MIN_PROTO_VERSION, 0, NULL) +# define SSL_get_max_proto_version(s) \ + SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) + +/* Backwards compatibility, original 1.1.0 names */ +# define SSL_CTRL_GET_SERVER_TMP_KEY \ + SSL_CTRL_GET_PEER_TMP_KEY +# define SSL_get_server_tmp_key(s, pk) \ + SSL_get_peer_tmp_key(s, pk) + +/* + * The following symbol names are old and obsolete. They are kept + * for compatibility reasons only and should not be used anymore. + */ +# define SSL_CTRL_GET_CURVES SSL_CTRL_GET_GROUPS +# define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS +# define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST +# define SSL_CTRL_GET_SHARED_CURVE SSL_CTRL_GET_SHARED_GROUP + +# define SSL_get1_curves SSL_get1_groups +# define SSL_CTX_set1_curves SSL_CTX_set1_groups +# define SSL_CTX_set1_curves_list SSL_CTX_set1_groups_list +# define SSL_set1_curves SSL_set1_groups +# define SSL_set1_curves_list SSL_set1_groups_list +# define SSL_get_shared_curve SSL_get_shared_group + + +# if OPENSSL_API_COMPAT < 0x10100000L +/* Provide some compatibility macros for removed functionality. */ +# define SSL_CTX_need_tmp_RSA(ctx) 0 +# define SSL_CTX_set_tmp_rsa(ctx,rsa) 1 +# define SSL_need_tmp_RSA(ssl) 0 +# define SSL_set_tmp_rsa(ssl,rsa) 1 +# define SSL_CTX_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +# define SSL_set_ecdh_auto(dummy, onoff) ((onoff) != 0) +/* + * We "pretend" to call the callback to avoid warnings about unused static + * functions. + */ +# define SSL_CTX_set_tmp_rsa_callback(ctx, cb) while(0) (cb)(NULL, 0, 0) +# define SSL_set_tmp_rsa_callback(ssl, cb) while(0) (cb)(NULL, 0, 0) +# endif +__owur const BIO_METHOD *BIO_f_ssl(void); +__owur BIO *BIO_new_ssl(SSL_CTX *ctx, int client); +__owur BIO *BIO_new_ssl_connect(SSL_CTX *ctx); +__owur BIO *BIO_new_buffer_ssl_connect(SSL_CTX *ctx); +__owur int BIO_ssl_copy_session_id(BIO *to, BIO *from); +void BIO_ssl_shutdown(BIO *ssl_bio); + +__owur int SSL_CTX_set_cipher_list(SSL_CTX *, const char *str); +__owur SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth); +int SSL_CTX_up_ref(SSL_CTX *ctx); +void SSL_CTX_free(SSL_CTX *); +__owur long SSL_CTX_set_timeout(SSL_CTX *ctx, long t); +__owur long SSL_CTX_get_timeout(const SSL_CTX *ctx); +__owur X509_STORE *SSL_CTX_get_cert_store(const SSL_CTX *); +void SSL_CTX_set_cert_store(SSL_CTX *, X509_STORE *); +void SSL_CTX_set1_cert_store(SSL_CTX *, X509_STORE *); +__owur int SSL_want(const SSL *s); +__owur int SSL_clear(SSL *s); + +void SSL_CTX_flush_sessions(SSL_CTX *ctx, long tm); + +__owur const SSL_CIPHER *SSL_get_current_cipher(const SSL *s); +__owur const SSL_CIPHER *SSL_get_pending_cipher(const SSL *s); +__owur int SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits); +__owur const char *SSL_CIPHER_get_version(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_get_name(const SSL_CIPHER *c); +__owur const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c); +__owur const char *OPENSSL_cipher_name(const char *rfc_name); +__owur uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c); +__owur uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c); +__owur int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c); +__owur const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c); +__owur int SSL_CIPHER_is_aead(const SSL_CIPHER *c); + +__owur int SSL_get_fd(const SSL *s); +__owur int SSL_get_rfd(const SSL *s); +__owur int SSL_get_wfd(const SSL *s); +__owur const char *SSL_get_cipher_list(const SSL *s, int n); +__owur char *SSL_get_shared_ciphers(const SSL *s, char *buf, int size); +__owur int SSL_get_read_ahead(const SSL *s); +__owur int SSL_pending(const SSL *s); +__owur int SSL_has_pending(const SSL *s); +# ifndef OPENSSL_NO_SOCK +__owur int SSL_set_fd(SSL *s, int fd); +__owur int SSL_set_rfd(SSL *s, int fd); +__owur int SSL_set_wfd(SSL *s, int fd); +# endif +void SSL_set0_rbio(SSL *s, BIO *rbio); +void SSL_set0_wbio(SSL *s, BIO *wbio); +void SSL_set_bio(SSL *s, BIO *rbio, BIO *wbio); +__owur BIO *SSL_get_rbio(const SSL *s); +__owur BIO *SSL_get_wbio(const SSL *s); +__owur int SSL_set_cipher_list(SSL *s, const char *str); +__owur int SSL_CTX_set_ciphersuites(SSL_CTX *ctx, const char *str); +__owur int SSL_set_ciphersuites(SSL *s, const char *str); +void SSL_set_read_ahead(SSL *s, int yes); +__owur int SSL_get_verify_mode(const SSL *s); +__owur int SSL_get_verify_depth(const SSL *s); +__owur SSL_verify_cb SSL_get_verify_callback(const SSL *s); +void SSL_set_verify(SSL *s, int mode, SSL_verify_cb callback); +void SSL_set_verify_depth(SSL *s, int depth); +void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg); +# ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa); +__owur int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const unsigned char *d, + long len); +# endif +__owur int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey); +__owur int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d, + long len); +__owur int SSL_use_certificate(SSL *ssl, X509 *x); +__owur int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len); +__owur int SSL_use_cert_and_key(SSL *ssl, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + + +/* serverinfo file format versions */ +# define SSL_SERVERINFOV1 1 +# define SSL_SERVERINFOV2 2 + +/* Set serverinfo data for the current active cert. */ +__owur int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_ex(SSL_CTX *ctx, unsigned int version, + const unsigned char *serverinfo, + size_t serverinfo_length); +__owur int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type); +#endif + +__owur int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type); +__owur int SSL_use_certificate_file(SSL *ssl, const char *file, int type); + +#ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +#endif +__owur int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, + int type); +__owur int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, + int type); +/* PEM type */ +__owur int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file); +__owur int SSL_use_certificate_chain_file(SSL *ssl, const char *file); +__owur STACK_OF(X509_NAME) *SSL_load_client_CA_file(const char *file); +__owur int SSL_add_file_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *file); +int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stackCAs, + const char *dir); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_load_error_strings() \ + OPENSSL_init_ssl(OPENSSL_INIT_LOAD_SSL_STRINGS \ + | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL) +# endif + +__owur const char *SSL_state_string(const SSL *s); +__owur const char *SSL_rstate_string(const SSL *s); +__owur const char *SSL_state_string_long(const SSL *s); +__owur const char *SSL_rstate_string_long(const SSL *s); +__owur long SSL_SESSION_get_time(const SSL_SESSION *s); +__owur long SSL_SESSION_set_time(SSL_SESSION *s, long t); +__owur long SSL_SESSION_get_timeout(const SSL_SESSION *s); +__owur long SSL_SESSION_set_timeout(SSL_SESSION *s, long t); +__owur int SSL_SESSION_get_protocol_version(const SSL_SESSION *s); +__owur int SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version); + +__owur const char *SSL_SESSION_get0_hostname(const SSL_SESSION *s); +__owur int SSL_SESSION_set1_hostname(SSL_SESSION *s, const char *hostname); +void SSL_SESSION_get0_alpn_selected(const SSL_SESSION *s, + const unsigned char **alpn, + size_t *len); +__owur int SSL_SESSION_set1_alpn_selected(SSL_SESSION *s, + const unsigned char *alpn, + size_t len); +__owur const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *s); +__owur int SSL_SESSION_set_cipher(SSL_SESSION *s, const SSL_CIPHER *cipher); +__owur int SSL_SESSION_has_ticket(const SSL_SESSION *s); +__owur unsigned long SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s); +void SSL_SESSION_get0_ticket(const SSL_SESSION *s, const unsigned char **tick, + size_t *len); +__owur uint32_t SSL_SESSION_get_max_early_data(const SSL_SESSION *s); +__owur int SSL_SESSION_set_max_early_data(SSL_SESSION *s, + uint32_t max_early_data); +__owur int SSL_copy_session_id(SSL *to, const SSL *from); +__owur X509 *SSL_SESSION_get0_peer(SSL_SESSION *s); +__owur int SSL_SESSION_set1_id_context(SSL_SESSION *s, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); +__owur int SSL_SESSION_set1_id(SSL_SESSION *s, const unsigned char *sid, + unsigned int sid_len); +__owur int SSL_SESSION_is_resumable(const SSL_SESSION *s); + +__owur SSL_SESSION *SSL_SESSION_new(void); +__owur SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *src); +const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *s, + unsigned int *len); +const unsigned char *SSL_SESSION_get0_id_context(const SSL_SESSION *s, + unsigned int *len); +__owur unsigned int SSL_SESSION_get_compress_id(const SSL_SESSION *s); +# ifndef OPENSSL_NO_STDIO +int SSL_SESSION_print_fp(FILE *fp, const SSL_SESSION *ses); +# endif +int SSL_SESSION_print(BIO *fp, const SSL_SESSION *ses); +int SSL_SESSION_print_keylog(BIO *bp, const SSL_SESSION *x); +int SSL_SESSION_up_ref(SSL_SESSION *ses); +void SSL_SESSION_free(SSL_SESSION *ses); +__owur int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp); +__owur int SSL_set_session(SSL *to, SSL_SESSION *session); +int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session); +int SSL_CTX_remove_session(SSL_CTX *ctx, SSL_SESSION *session); +__owur int SSL_CTX_set_generate_session_id(SSL_CTX *ctx, GEN_SESSION_CB cb); +__owur int SSL_set_generate_session_id(SSL *s, GEN_SESSION_CB cb); +__owur int SSL_has_matching_session_id(const SSL *s, + const unsigned char *id, + unsigned int id_len); +SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, + long length); + +# ifdef HEADER_X509_H +__owur X509 *SSL_get_peer_certificate(const SSL *s); +# endif + +__owur STACK_OF(X509) *SSL_get_peer_cert_chain(const SSL *s); + +__owur int SSL_CTX_get_verify_mode(const SSL_CTX *ctx); +__owur int SSL_CTX_get_verify_depth(const SSL_CTX *ctx); +__owur SSL_verify_cb SSL_CTX_get_verify_callback(const SSL_CTX *ctx); +void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, SSL_verify_cb callback); +void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth); +void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx, + int (*cb) (X509_STORE_CTX *, void *), + void *arg); +void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg), + void *arg); +# ifndef OPENSSL_NO_RSA +__owur int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa); +__owur int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const unsigned char *d, + long len); +# endif +__owur int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey); +__owur int SSL_CTX_use_PrivateKey_ASN1(int pk, SSL_CTX *ctx, + const unsigned char *d, long len); +__owur int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x); +__owur int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, + const unsigned char *d); +__owur int SSL_CTX_use_cert_and_key(SSL_CTX *ctx, X509 *x509, EVP_PKEY *privatekey, + STACK_OF(X509) *chain, int override); + +void SSL_CTX_set_default_passwd_cb(SSL_CTX *ctx, pem_password_cb *cb); +void SSL_CTX_set_default_passwd_cb_userdata(SSL_CTX *ctx, void *u); +pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx); +void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx); +void SSL_set_default_passwd_cb(SSL *s, pem_password_cb *cb); +void SSL_set_default_passwd_cb_userdata(SSL *s, void *u); +pem_password_cb *SSL_get_default_passwd_cb(SSL *s); +void *SSL_get_default_passwd_cb_userdata(SSL *s); + +__owur int SSL_CTX_check_private_key(const SSL_CTX *ctx); +__owur int SSL_check_private_key(const SSL *ctx); + +__owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, + const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +SSL *SSL_new(SSL_CTX *ctx); +int SSL_up_ref(SSL *s); +int SSL_is_dtls(const SSL *s); +__owur int SSL_set_session_id_context(SSL *ssl, const unsigned char *sid_ctx, + unsigned int sid_ctx_len); + +__owur int SSL_CTX_set_purpose(SSL_CTX *ctx, int purpose); +__owur int SSL_set_purpose(SSL *ssl, int purpose); +__owur int SSL_CTX_set_trust(SSL_CTX *ctx, int trust); +__owur int SSL_set_trust(SSL *ssl, int trust); + +__owur int SSL_set1_host(SSL *s, const char *hostname); +__owur int SSL_add1_host(SSL *s, const char *hostname); +__owur const char *SSL_get0_peername(SSL *s); +void SSL_set_hostflags(SSL *s, unsigned int flags); + +__owur int SSL_CTX_dane_enable(SSL_CTX *ctx); +__owur int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md, + uint8_t mtype, uint8_t ord); +__owur int SSL_dane_enable(SSL *s, const char *basedomain); +__owur int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector, + uint8_t mtype, unsigned const char *data, size_t dlen); +__owur int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki); +__owur int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector, + uint8_t *mtype, unsigned const char **data, + size_t *dlen); +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +SSL_DANE *SSL_get0_dane(SSL *ssl); +/* + * DANE flags + */ +unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags); +unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags); +unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags); + +__owur int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm); +__owur int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm); + +__owur X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx); +__owur X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl); + +# ifndef OPENSSL_NO_SRP +int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name); +int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password); +int SSL_CTX_set_srp_strength(SSL_CTX *ctx, int strength); +int SSL_CTX_set_srp_client_pwd_callback(SSL_CTX *ctx, + char *(*cb) (SSL *, void *)); +int SSL_CTX_set_srp_verify_param_callback(SSL_CTX *ctx, + int (*cb) (SSL *, void *)); +int SSL_CTX_set_srp_username_callback(SSL_CTX *ctx, + int (*cb) (SSL *, int *, void *)); +int SSL_CTX_set_srp_cb_arg(SSL_CTX *ctx, void *arg); + +int SSL_set_srp_server_param(SSL *s, const BIGNUM *N, const BIGNUM *g, + BIGNUM *sa, BIGNUM *v, char *info); +int SSL_set_srp_server_param_pw(SSL *s, const char *user, const char *pass, + const char *grp); + +__owur BIGNUM *SSL_get_srp_g(SSL *s); +__owur BIGNUM *SSL_get_srp_N(SSL *s); + +__owur char *SSL_get_srp_username(SSL *s); +__owur char *SSL_get_srp_userinfo(SSL *s); +# endif + +/* + * ClientHello callback and helpers. + */ + +# define SSL_CLIENT_HELLO_SUCCESS 1 +# define SSL_CLIENT_HELLO_ERROR 0 +# define SSL_CLIENT_HELLO_RETRY (-1) + +typedef int (*SSL_client_hello_cb_fn) (SSL *s, int *al, void *arg); +void SSL_CTX_set_client_hello_cb(SSL_CTX *c, SSL_client_hello_cb_fn cb, + void *arg); +int SSL_client_hello_isv2(SSL *s); +unsigned int SSL_client_hello_get0_legacy_version(SSL *s); +size_t SSL_client_hello_get0_random(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_session_id(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_ciphers(SSL *s, const unsigned char **out); +size_t SSL_client_hello_get0_compression_methods(SSL *s, + const unsigned char **out); +int SSL_client_hello_get1_extensions_present(SSL *s, int **out, size_t *outlen); +int SSL_client_hello_get0_ext(SSL *s, unsigned int type, + const unsigned char **out, size_t *outlen); + +void SSL_certs_clear(SSL *s); +void SSL_free(SSL *ssl); +# ifdef OSSL_ASYNC_FD +/* + * Windows application developer has to include windows.h to use these. + */ +__owur int SSL_waiting_for_async(SSL *s); +__owur int SSL_get_all_async_fds(SSL *s, OSSL_ASYNC_FD *fds, size_t *numfds); +__owur int SSL_get_changed_async_fds(SSL *s, OSSL_ASYNC_FD *addfd, + size_t *numaddfds, OSSL_ASYNC_FD *delfd, + size_t *numdelfds); +# endif +__owur int SSL_accept(SSL *ssl); +__owur int SSL_stateless(SSL *s); +__owur int SSL_connect(SSL *ssl); +__owur int SSL_read(SSL *ssl, void *buf, int num); +__owur int SSL_read_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); + +# define SSL_READ_EARLY_DATA_ERROR 0 +# define SSL_READ_EARLY_DATA_SUCCESS 1 +# define SSL_READ_EARLY_DATA_FINISH 2 + +__owur int SSL_read_early_data(SSL *s, void *buf, size_t num, + size_t *readbytes); +__owur int SSL_peek(SSL *ssl, void *buf, int num); +__owur int SSL_peek_ex(SSL *ssl, void *buf, size_t num, size_t *readbytes); +__owur int SSL_write(SSL *ssl, const void *buf, int num); +__owur int SSL_write_ex(SSL *s, const void *buf, size_t num, size_t *written); +__owur int SSL_write_early_data(SSL *s, const void *buf, size_t num, + size_t *written); +long SSL_ctrl(SSL *ssl, int cmd, long larg, void *parg); +long SSL_callback_ctrl(SSL *, int, void (*)(void)); +long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); +long SSL_CTX_callback_ctrl(SSL_CTX *, int, void (*)(void)); + +# define SSL_EARLY_DATA_NOT_SENT 0 +# define SSL_EARLY_DATA_REJECTED 1 +# define SSL_EARLY_DATA_ACCEPTED 2 + +__owur int SSL_get_early_data_status(const SSL *s); + +__owur int SSL_get_error(const SSL *s, int ret_code); +__owur const char *SSL_get_version(const SSL *s); + +/* This sets the 'default' SSL version that SSL_new() will create */ +__owur int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth); + +# ifndef OPENSSL_NO_SSL3_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_method(void)) /* SSLv3 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *SSLv3_client_method(void)) +# endif + +#define SSLv23_method TLS_method +#define SSLv23_server_method TLS_server_method +#define SSLv23_client_method TLS_client_method + +/* Negotiate highest available SSL/TLS version */ +__owur const SSL_METHOD *TLS_method(void); +__owur const SSL_METHOD *TLS_server_method(void); +__owur const SSL_METHOD *TLS_client_method(void); + +# ifndef OPENSSL_NO_TLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_method(void)) /* TLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_TLS1_1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_method(void)) /* TLSv1.1 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_TLS1_2_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_method(void)) /* TLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_2_client_method(void)) +# endif + +# ifndef OPENSSL_NO_DTLS1_METHOD +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_method(void)) /* DTLSv1.0 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_client_method(void)) +# endif + +# ifndef OPENSSL_NO_DTLS1_2_METHOD +/* DTLSv1.2 */ +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_server_method(void)) +DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *DTLSv1_2_client_method(void)) +# endif + +__owur const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */ +__owur const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */ + +__owur size_t DTLS_get_data_mtu(const SSL *s); + +__owur STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_CTX_get_ciphers(const SSL_CTX *ctx); +__owur STACK_OF(SSL_CIPHER) *SSL_get_client_ciphers(const SSL *s); +__owur STACK_OF(SSL_CIPHER) *SSL_get1_supported_ciphers(SSL *s); + +__owur int SSL_do_handshake(SSL *s); +int SSL_key_update(SSL *s, int updatetype); +int SSL_get_key_update_type(const SSL *s); +int SSL_renegotiate(SSL *s); +int SSL_renegotiate_abbreviated(SSL *s); +__owur int SSL_renegotiate_pending(const SSL *s); +int SSL_shutdown(SSL *s); +__owur int SSL_verify_client_post_handshake(SSL *s); +void SSL_CTX_set_post_handshake_auth(SSL_CTX *ctx, int val); +void SSL_set_post_handshake_auth(SSL *s, int val); + +__owur const SSL_METHOD *SSL_CTX_get_ssl_method(const SSL_CTX *ctx); +__owur const SSL_METHOD *SSL_get_ssl_method(const SSL *s); +__owur int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method); +__owur const char *SSL_alert_type_string_long(int value); +__owur const char *SSL_alert_type_string(int value); +__owur const char *SSL_alert_desc_string_long(int value); +__owur const char *SSL_alert_desc_string(int value); + +void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set0_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur const STACK_OF(X509_NAME) *SSL_get0_CA_list(const SSL *s); +__owur const STACK_OF(X509_NAME) *SSL_CTX_get0_CA_list(const SSL_CTX *ctx); +__owur int SSL_add1_to_CA_list(SSL *ssl, const X509 *x); +__owur int SSL_CTX_add1_to_CA_list(SSL_CTX *ctx, const X509 *x); +__owur const STACK_OF(X509_NAME) *SSL_get0_peer_CA_list(const SSL *s); + +void SSL_set_client_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list); +void SSL_CTX_set_client_CA_list(SSL_CTX *ctx, STACK_OF(X509_NAME) *name_list); +__owur STACK_OF(X509_NAME) *SSL_get_client_CA_list(const SSL *s); +__owur STACK_OF(X509_NAME) *SSL_CTX_get_client_CA_list(const SSL_CTX *s); +__owur int SSL_add_client_CA(SSL *ssl, X509 *x); +__owur int SSL_CTX_add_client_CA(SSL_CTX *ctx, X509 *x); + +void SSL_set_connect_state(SSL *s); +void SSL_set_accept_state(SSL *s); + +__owur long SSL_get_default_timeout(const SSL *s); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_library_init() OPENSSL_init_ssl(0, NULL) +# endif + +__owur char *SSL_CIPHER_description(const SSL_CIPHER *, char *buf, int size); +__owur STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk); + +__owur SSL *SSL_dup(SSL *ssl); + +__owur X509 *SSL_get_certificate(const SSL *ssl); +/* + * EVP_PKEY + */ +struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl); + +__owur X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx); +__owur EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx); + +void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode); +__owur int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx); +void SSL_set_quiet_shutdown(SSL *ssl, int mode); +__owur int SSL_get_quiet_shutdown(const SSL *ssl); +void SSL_set_shutdown(SSL *ssl, int mode); +__owur int SSL_get_shutdown(const SSL *ssl); +__owur int SSL_version(const SSL *ssl); +__owur int SSL_client_version(const SSL *s); +__owur int SSL_CTX_set_default_verify_paths(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_dir(SSL_CTX *ctx); +__owur int SSL_CTX_set_default_verify_file(SSL_CTX *ctx); +__owur int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, + const char *CApath); +# define SSL_get0_session SSL_get_session/* just peek at pointer */ +__owur SSL_SESSION *SSL_get_session(const SSL *ssl); +__owur SSL_SESSION *SSL_get1_session(SSL *ssl); /* obtain a reference count */ +__owur SSL_CTX *SSL_get_SSL_CTX(const SSL *ssl); +SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx); +void SSL_set_info_callback(SSL *ssl, + void (*cb) (const SSL *ssl, int type, int val)); +void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, + int val); +__owur OSSL_HANDSHAKE_STATE SSL_get_state(const SSL *ssl); + +void SSL_set_verify_result(SSL *ssl, long v); +__owur long SSL_get_verify_result(const SSL *ssl); +__owur STACK_OF(X509) *SSL_get0_verified_chain(const SSL *s); + +__owur size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, + size_t outlen); +__owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *sess, + unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, + const unsigned char *in, size_t len); +uint8_t SSL_SESSION_get_max_fragment_length(const SSL_SESSION *sess); + +#define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) +__owur int SSL_set_ex_data(SSL *ssl, int idx, void *data); +void *SSL_get_ex_data(const SSL *ssl, int idx); +#define SSL_SESSION_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_SESSION, l, p, newf, dupf, freef) +__owur int SSL_SESSION_set_ex_data(SSL_SESSION *ss, int idx, void *data); +void *SSL_SESSION_get_ex_data(const SSL_SESSION *ss, int idx); +#define SSL_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL_CTX, l, p, newf, dupf, freef) +__owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data); +void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx); + +__owur int SSL_get_ex_data_X509_STORE_CTX_idx(void); + +# define SSL_CTX_sess_set_cache_size(ctx,t) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_SIZE,t,NULL) +# define SSL_CTX_sess_get_cache_size(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_SIZE,0,NULL) +# define SSL_CTX_set_session_cache_mode(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SESS_CACHE_MODE,m,NULL) +# define SSL_CTX_get_session_cache_mode(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_SESS_CACHE_MODE,0,NULL) + +# define SSL_CTX_get_default_read_ahead(ctx) SSL_CTX_get_read_ahead(ctx) +# define SSL_CTX_set_default_read_ahead(ctx,m) SSL_CTX_set_read_ahead(ctx,m) +# define SSL_CTX_get_read_ahead(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_READ_AHEAD,0,NULL) +# define SSL_CTX_set_read_ahead(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_READ_AHEAD,m,NULL) +# define SSL_CTX_get_max_cert_list(ctx) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_CTX_set_max_cert_list(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) +# define SSL_get_max_cert_list(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_MAX_CERT_LIST,0,NULL) +# define SSL_set_max_cert_list(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_CERT_LIST,m,NULL) + +# define SSL_CTX_set_max_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_set_max_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_split_send_fragment(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_set_split_send_fragment(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_SPLIT_SEND_FRAGMENT,m,NULL) +# define SSL_CTX_set_max_pipelines(ctx,m) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) +# define SSL_set_max_pipelines(ssl,m) \ + SSL_ctrl(ssl,SSL_CTRL_SET_MAX_PIPELINES,m,NULL) + +void SSL_CTX_set_default_read_buffer_len(SSL_CTX *ctx, size_t len); +void SSL_set_default_read_buffer_len(SSL *s, size_t len); + +# ifndef OPENSSL_NO_DH +/* NB: the |keylength| is only applicable when is_export is true */ +void SSL_CTX_set_tmp_dh_callback(SSL_CTX *ctx, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +void SSL_set_tmp_dh_callback(SSL *ssl, + DH *(*dh) (SSL *ssl, int is_export, + int keylength)); +# endif + +__owur const COMP_METHOD *SSL_get_current_compression(const SSL *s); +__owur const COMP_METHOD *SSL_get_current_expansion(const SSL *s); +__owur const char *SSL_COMP_get_name(const COMP_METHOD *comp); +__owur const char *SSL_COMP_get0_name(const SSL_COMP *comp); +__owur int SSL_COMP_get_id(const SSL_COMP *comp); +STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void); +__owur STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP) + *meths); +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_COMP_free_compression_methods() while(0) continue +# endif +__owur int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm); + +const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr); +int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c); +int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c); +int SSL_bytes_to_cipher_list(SSL *s, const unsigned char *bytes, size_t len, + int isv2format, STACK_OF(SSL_CIPHER) **sk, + STACK_OF(SSL_CIPHER) **scsvs); + +/* TLS extensions functions */ +__owur int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len); + +__owur int SSL_set_session_ticket_ext_cb(SSL *s, + tls_session_ticket_ext_cb_fn cb, + void *arg); + +/* Pre-shared secret session resumption functions */ +__owur int SSL_set_session_secret_cb(SSL *s, + tls_session_secret_cb_fn session_secret_cb, + void *arg); + +void SSL_CTX_set_not_resumable_session_callback(SSL_CTX *ctx, + int (*cb) (SSL *ssl, + int + is_forward_secure)); + +void SSL_set_not_resumable_session_callback(SSL *ssl, + int (*cb) (SSL *ssl, + int is_forward_secure)); + +void SSL_CTX_set_record_padding_callback(SSL_CTX *ctx, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_CTX_set_record_padding_callback_arg(SSL_CTX *ctx, void *arg); +void *SSL_CTX_get_record_padding_callback_arg(const SSL_CTX *ctx); +int SSL_CTX_set_block_padding(SSL_CTX *ctx, size_t block_size); + +void SSL_set_record_padding_callback(SSL *ssl, + size_t (*cb) (SSL *ssl, int type, + size_t len, void *arg)); +void SSL_set_record_padding_callback_arg(SSL *ssl, void *arg); +void *SSL_get_record_padding_callback_arg(const SSL *ssl); +int SSL_set_block_padding(SSL *ssl, size_t block_size); + +int SSL_set_num_tickets(SSL *s, size_t num_tickets); +size_t SSL_get_num_tickets(const SSL *s); +int SSL_CTX_set_num_tickets(SSL_CTX *ctx, size_t num_tickets); +size_t SSL_CTX_get_num_tickets(const SSL_CTX *ctx); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_cache_hit(s) SSL_session_reused(s) +# endif + +__owur int SSL_session_reused(const SSL *s); +__owur int SSL_is_server(const SSL *s); + +__owur __owur SSL_CONF_CTX *SSL_CONF_CTX_new(void); +int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx); +void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx); +unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags); +__owur unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, + unsigned int flags); +__owur int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre); + +void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl); +void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx); + +__owur int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); +__owur int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv); +__owur int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + +void SSL_add_ssl_module(void); +int SSL_config(SSL *s, const char *name); +int SSL_CTX_config(SSL_CTX *ctx, const char *name); + +# ifndef OPENSSL_NO_SSL_TRACE +void SSL_trace(int write_p, int version, int content_type, + const void *buf, size_t len, SSL *ssl, void *arg); +# endif + +# ifndef OPENSSL_NO_SOCK +int DTLSv1_listen(SSL *s, BIO_ADDR *client); +# endif + +# ifndef OPENSSL_NO_CT + +/* + * A callback for verifying that the received SCTs are sufficient. + * Expected to return 1 if they are sufficient, otherwise 0. + * May return a negative integer if an error occurs. + * A connection should be aborted if the SCTs are deemed insufficient. + */ +typedef int (*ssl_ct_validation_cb)(const CT_POLICY_EVAL_CTX *ctx, + const STACK_OF(SCT) *scts, void *arg); + +/* + * Sets a |callback| that is invoked upon receipt of ServerHelloDone to validate + * the received SCTs. + * If the callback returns a non-positive result, the connection is terminated. + * Call this function before beginning a handshake. + * If a NULL |callback| is provided, SCT validation is disabled. + * |arg| is arbitrary userdata that will be passed to the callback whenever it + * is invoked. Ownership of |arg| remains with the caller. + * + * NOTE: A side-effect of setting a CT callback is that an OCSP stapled response + * will be requested. + */ +int SSL_set_ct_validation_callback(SSL *s, ssl_ct_validation_cb callback, + void *arg); +int SSL_CTX_set_ct_validation_callback(SSL_CTX *ctx, + ssl_ct_validation_cb callback, + void *arg); +#define SSL_disable_ct(s) \ + ((void) SSL_set_validation_callback((s), NULL, NULL)) +#define SSL_CTX_disable_ct(ctx) \ + ((void) SSL_CTX_set_validation_callback((ctx), NULL, NULL)) + +/* + * The validation type enumerates the available behaviours of the built-in SSL + * CT validation callback selected via SSL_enable_ct() and SSL_CTX_enable_ct(). + * The underlying callback is a static function in libssl. + */ +enum { + SSL_CT_VALIDATION_PERMISSIVE = 0, + SSL_CT_VALIDATION_STRICT +}; + +/* + * Enable CT by setting up a callback that implements one of the built-in + * validation variants. The SSL_CT_VALIDATION_PERMISSIVE variant always + * continues the handshake, the application can make appropriate decisions at + * handshake completion. The SSL_CT_VALIDATION_STRICT variant requires at + * least one valid SCT, or else handshake termination will be requested. The + * handshake may continue anyway if SSL_VERIFY_NONE is in effect. + */ +int SSL_enable_ct(SSL *s, int validation_mode); +int SSL_CTX_enable_ct(SSL_CTX *ctx, int validation_mode); + +/* + * Report whether a non-NULL callback is enabled. + */ +int SSL_ct_is_enabled(const SSL *s); +int SSL_CTX_ct_is_enabled(const SSL_CTX *ctx); + +/* Gets the SCTs received from a connection */ +const STACK_OF(SCT) *SSL_get0_peer_scts(SSL *s); + +/* + * Loads the CT log list from the default location. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_default_ctlog_list_file(SSL_CTX *ctx); + +/* + * Loads the CT log list from the specified file path. + * If a CTLOG_STORE has previously been set using SSL_CTX_set_ctlog_store, + * the log information loaded from this file will be appended to the + * CTLOG_STORE. + * Returns 1 on success, 0 otherwise. + */ +int SSL_CTX_set_ctlog_list_file(SSL_CTX *ctx, const char *path); + +/* + * Sets the CT log list used by all SSL connections created from this SSL_CTX. + * Ownership of the CTLOG_STORE is transferred to the SSL_CTX. + */ +void SSL_CTX_set0_ctlog_store(SSL_CTX *ctx, CTLOG_STORE *logs); + +/* + * Gets the CT log list used by all SSL connections created from this SSL_CTX. + * This will be NULL unless one of the following functions has been called: + * - SSL_CTX_set_default_ctlog_list_file + * - SSL_CTX_set_ctlog_list_file + * - SSL_CTX_set_ctlog_store + */ +const CTLOG_STORE *SSL_CTX_get0_ctlog_store(const SSL_CTX *ctx); + +# endif /* OPENSSL_NO_CT */ + +/* What the "other" parameter contains in security callback */ +/* Mask for type */ +# define SSL_SECOP_OTHER_TYPE 0xffff0000 +# define SSL_SECOP_OTHER_NONE 0 +# define SSL_SECOP_OTHER_CIPHER (1 << 16) +# define SSL_SECOP_OTHER_CURVE (2 << 16) +# define SSL_SECOP_OTHER_DH (3 << 16) +# define SSL_SECOP_OTHER_PKEY (4 << 16) +# define SSL_SECOP_OTHER_SIGALG (5 << 16) +# define SSL_SECOP_OTHER_CERT (6 << 16) + +/* Indicated operation refers to peer key or certificate */ +# define SSL_SECOP_PEER 0x1000 + +/* Values for "op" parameter in security callback */ + +/* Called to filter ciphers */ +/* Ciphers client supports */ +# define SSL_SECOP_CIPHER_SUPPORTED (1 | SSL_SECOP_OTHER_CIPHER) +/* Cipher shared by client/server */ +# define SSL_SECOP_CIPHER_SHARED (2 | SSL_SECOP_OTHER_CIPHER) +/* Sanity check of cipher server selects */ +# define SSL_SECOP_CIPHER_CHECK (3 | SSL_SECOP_OTHER_CIPHER) +/* Curves supported by client */ +# define SSL_SECOP_CURVE_SUPPORTED (4 | SSL_SECOP_OTHER_CURVE) +/* Curves shared by client/server */ +# define SSL_SECOP_CURVE_SHARED (5 | SSL_SECOP_OTHER_CURVE) +/* Sanity check of curve server selects */ +# define SSL_SECOP_CURVE_CHECK (6 | SSL_SECOP_OTHER_CURVE) +/* Temporary DH key */ +# define SSL_SECOP_TMP_DH (7 | SSL_SECOP_OTHER_PKEY) +/* SSL/TLS version */ +# define SSL_SECOP_VERSION (9 | SSL_SECOP_OTHER_NONE) +/* Session tickets */ +# define SSL_SECOP_TICKET (10 | SSL_SECOP_OTHER_NONE) +/* Supported signature algorithms sent to peer */ +# define SSL_SECOP_SIGALG_SUPPORTED (11 | SSL_SECOP_OTHER_SIGALG) +/* Shared signature algorithm */ +# define SSL_SECOP_SIGALG_SHARED (12 | SSL_SECOP_OTHER_SIGALG) +/* Sanity check signature algorithm allowed */ +# define SSL_SECOP_SIGALG_CHECK (13 | SSL_SECOP_OTHER_SIGALG) +/* Used to get mask of supported public key signature algorithms */ +# define SSL_SECOP_SIGALG_MASK (14 | SSL_SECOP_OTHER_SIGALG) +/* Use to see if compression is allowed */ +# define SSL_SECOP_COMPRESSION (15 | SSL_SECOP_OTHER_NONE) +/* EE key in certificate */ +# define SSL_SECOP_EE_KEY (16 | SSL_SECOP_OTHER_CERT) +/* CA key in certificate */ +# define SSL_SECOP_CA_KEY (17 | SSL_SECOP_OTHER_CERT) +/* CA digest algorithm in certificate */ +# define SSL_SECOP_CA_MD (18 | SSL_SECOP_OTHER_CERT) +/* Peer EE key in certificate */ +# define SSL_SECOP_PEER_EE_KEY (SSL_SECOP_EE_KEY | SSL_SECOP_PEER) +/* Peer CA key in certificate */ +# define SSL_SECOP_PEER_CA_KEY (SSL_SECOP_CA_KEY | SSL_SECOP_PEER) +/* Peer CA digest algorithm in certificate */ +# define SSL_SECOP_PEER_CA_MD (SSL_SECOP_CA_MD | SSL_SECOP_PEER) + +void SSL_set_security_level(SSL *s, int level); +__owur int SSL_get_security_level(const SSL *s); +void SSL_set_security_callback(SSL *s, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_get_security_callback(const SSL *s)) (const SSL *s, + const SSL_CTX *ctx, int op, + int bits, int nid, void *other, + void *ex); +void SSL_set0_security_ex_data(SSL *s, void *ex); +__owur void *SSL_get0_security_ex_data(const SSL *s); + +void SSL_CTX_set_security_level(SSL_CTX *ctx, int level); +__owur int SSL_CTX_get_security_level(const SSL_CTX *ctx); +void SSL_CTX_set_security_callback(SSL_CTX *ctx, + int (*cb) (const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, + void *other, void *ex)); +int (*SSL_CTX_get_security_callback(const SSL_CTX *ctx)) (const SSL *s, + const SSL_CTX *ctx, + int op, int bits, + int nid, + void *other, + void *ex); +void SSL_CTX_set0_security_ex_data(SSL_CTX *ctx, void *ex); +__owur void *SSL_CTX_get0_security_ex_data(const SSL_CTX *ctx); + +/* OPENSSL_INIT flag 0x010000 reserved for internal use */ +# define OPENSSL_INIT_NO_LOAD_SSL_STRINGS 0x00100000L +# define OPENSSL_INIT_LOAD_SSL_STRINGS 0x00200000L + +# define OPENSSL_INIT_SSL_DEFAULT \ + (OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS) + +int OPENSSL_init_ssl(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings); + +# ifndef OPENSSL_NO_UNIT_TEST +__owur const struct openssl_ssl_test_functions *SSL_test_functions(void); +# endif + +__owur int SSL_free_buffers(SSL *ssl); +__owur int SSL_alloc_buffers(SSL *ssl); + +/* Status codes passed to the decrypt session ticket callback. Some of these + * are for internal use only and are never passed to the callback. */ +typedef int SSL_TICKET_STATUS; + +/* Support for ticket appdata */ +/* fatal error, malloc failure */ +# define SSL_TICKET_FATAL_ERR_MALLOC 0 +/* fatal error, either from parsing or decrypting the ticket */ +# define SSL_TICKET_FATAL_ERR_OTHER 1 +/* No ticket present */ +# define SSL_TICKET_NONE 2 +/* Empty ticket present */ +# define SSL_TICKET_EMPTY 3 +/* the ticket couldn't be decrypted */ +# define SSL_TICKET_NO_DECRYPT 4 +/* a ticket was successfully decrypted */ +# define SSL_TICKET_SUCCESS 5 +/* same as above but the ticket needs to be renewed */ +# define SSL_TICKET_SUCCESS_RENEW 6 + +/* Return codes for the decrypt session ticket callback */ +typedef int SSL_TICKET_RETURN; + +/* An error occurred */ +#define SSL_TICKET_RETURN_ABORT 0 +/* Do not use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE 1 +/* Do not use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_IGNORE_RENEW 2 +/* Use the ticket, do not send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE 3 +/* Use the ticket, send a renewed ticket to the client */ +#define SSL_TICKET_RETURN_USE_RENEW 4 + +typedef int (*SSL_CTX_generate_session_ticket_fn)(SSL *s, void *arg); +typedef SSL_TICKET_RETURN (*SSL_CTX_decrypt_session_ticket_fn)(SSL *s, SSL_SESSION *ss, + const unsigned char *keyname, + size_t keyname_length, + SSL_TICKET_STATUS status, + void *arg); +int SSL_CTX_set_session_ticket_cb(SSL_CTX *ctx, + SSL_CTX_generate_session_ticket_fn gen_cb, + SSL_CTX_decrypt_session_ticket_fn dec_cb, + void *arg); +int SSL_SESSION_set1_ticket_appdata(SSL_SESSION *ss, const void *data, size_t len); +int SSL_SESSION_get0_ticket_appdata(SSL_SESSION *ss, void **data, size_t *len); + +extern const char SSL_version_str[]; + +typedef unsigned int (*DTLS_timer_cb)(SSL *s, unsigned int timer_us); + +void DTLS_set_timer_cb(SSL *s, DTLS_timer_cb cb); + + +typedef int (*SSL_allow_early_data_cb_fn)(SSL *s, void *arg); +void SSL_CTX_set_allow_early_data_cb(SSL_CTX *ctx, + SSL_allow_early_data_cb_fn cb, + void *arg); +void SSL_set_allow_early_data_cb(SSL *s, + SSL_allow_early_data_cb_fn cb, + void *arg); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/ssl2.h b/lib/openssl/include/openssl/ssl2.h new file mode 100644 index 0000000..5321bd2 --- /dev/null +++ b/lib/openssl/include/openssl/ssl2.h @@ -0,0 +1,24 @@ +/* + * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL2_H +# define HEADER_SSL2_H + +#ifdef __cplusplus +extern "C" { +#endif + +# define SSL2_VERSION 0x0002 + +# define SSL2_MT_CLIENT_HELLO 1 + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/ssl3.h b/lib/openssl/include/openssl/ssl3.h new file mode 100644 index 0000000..07effba --- /dev/null +++ b/lib/openssl/include/openssl/ssl3.h @@ -0,0 +1,342 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSL3_H +# define HEADER_SSL3_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Signalling cipher suite value from RFC 5746 + * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + */ +# define SSL3_CK_SCSV 0x030000FF + +/* + * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 + * (TLS_FALLBACK_SCSV) + */ +# define SSL3_CK_FALLBACK_SCSV 0x03005600 + +# define SSL3_CK_RSA_NULL_MD5 0x03000001 +# define SSL3_CK_RSA_NULL_SHA 0x03000002 +# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 +# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 +# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 +# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 +# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 +# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 +# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 +# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A + +# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B +# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C +# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D +# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E +# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F +# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 + +# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 +# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 +# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA +# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 +# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA +# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 +# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 +# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA +# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 +# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA + +# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 +# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 +# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 +# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A +# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" +# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" +# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" +# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" +# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" +# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" +# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" + +# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" +# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" +# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" +# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" +# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" +# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" +# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" +# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" + +# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" +# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" +# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" +# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" +# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" +# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" + +/* + * This next block of six "EDH" labels is for backward compatibility with + * older versions of OpenSSL. New code should use the six "DHE" labels above + * instead: + */ +# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" +# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" +# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" +# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" + +# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" +# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" +# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" +# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" + +# define SSL3_SSL_SESSION_ID_LENGTH 32 +# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 + +# define SSL3_MASTER_SECRET_SIZE 48 +# define SSL3_RANDOM_SIZE 32 +# define SSL3_SESSION_ID_SIZE 32 +# define SSL3_RT_HEADER_LENGTH 5 + +# define SSL3_HM_HEADER_LENGTH 4 + +# ifndef SSL3_ALIGN_PAYLOAD + /* + * Some will argue that this increases memory footprint, but it's not + * actually true. Point is that malloc has to return at least 64-bit aligned + * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. + * Suggested pre-gaping simply moves these wasted bytes from the end of + * allocated region to its front, but makes data payload aligned, which + * improves performance:-) + */ +# define SSL3_ALIGN_PAYLOAD 8 +# else +# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 +# error "insane SSL3_ALIGN_PAYLOAD" +# undef SSL3_ALIGN_PAYLOAD +# endif +# endif + +/* + * This is the maximum MAC (digest) size used by the SSL library. Currently + * maximum of 20 is used by SHA1, but we reserve for future extension for + * 512-bit hashes. + */ + +# define SSL3_RT_MAX_MD_SIZE 64 + +/* + * Maximum block size used in all ciphersuites. Currently 16 for AES. + */ + +# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 + +# define SSL3_RT_MAX_EXTRA (16384) + +/* Maximum plaintext length: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_PLAIN_LENGTH 16384 +/* Maximum compression overhead: defined by SSL/TLS standards */ +# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 + +/* + * The standards give a maximum encryption overhead of 1024 bytes. In + * practice the value is lower than this. The overhead is the maximum number + * of padding bytes (256) plus the mac size. + */ +# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 + +/* + * OpenSSL currently only uses a padding length of at most one block so the + * send overhead is smaller. + */ + +# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ + (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) + +/* If compression isn't used don't include the compression overhead */ + +# ifdef OPENSSL_NO_COMP +# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH +# else +# define SSL3_RT_MAX_COMPRESSED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) +# endif +# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) +# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ + (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) +# define SSL3_RT_MAX_PACKET_SIZE \ + (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) + +# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" +# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" + +# define SSL3_VERSION 0x0300 +# define SSL3_VERSION_MAJOR 0x03 +# define SSL3_VERSION_MINOR 0x00 + +# define SSL3_RT_CHANGE_CIPHER_SPEC 20 +# define SSL3_RT_ALERT 21 +# define SSL3_RT_HANDSHAKE 22 +# define SSL3_RT_APPLICATION_DATA 23 +# define DTLS1_RT_HEARTBEAT 24 + +/* Pseudo content types to indicate additional parameters */ +# define TLS1_RT_CRYPTO 0x1000 +# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) +# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) +# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) +# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) + +# define TLS1_RT_CRYPTO_READ 0x0000 +# define TLS1_RT_CRYPTO_WRITE 0x0100 +# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) +# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) +# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) +# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) + +/* Pseudo content types for SSL/TLS header info */ +# define SSL3_RT_HEADER 0x100 +# define SSL3_RT_INNER_CONTENT_TYPE 0x101 + +# define SSL3_AL_WARNING 1 +# define SSL3_AL_FATAL 2 + +# define SSL3_AD_CLOSE_NOTIFY 0 +# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ +# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ +# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ +# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ +# define SSL3_AD_NO_CERTIFICATE 41 +# define SSL3_AD_BAD_CERTIFICATE 42 +# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 +# define SSL3_AD_CERTIFICATE_REVOKED 44 +# define SSL3_AD_CERTIFICATE_EXPIRED 45 +# define SSL3_AD_CERTIFICATE_UNKNOWN 46 +# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ + +# define TLS1_HB_REQUEST 1 +# define TLS1_HB_RESPONSE 2 + + +# define SSL3_CT_RSA_SIGN 1 +# define SSL3_CT_DSS_SIGN 2 +# define SSL3_CT_RSA_FIXED_DH 3 +# define SSL3_CT_DSS_FIXED_DH 4 +# define SSL3_CT_RSA_EPHEMERAL_DH 5 +# define SSL3_CT_DSS_EPHEMERAL_DH 6 +# define SSL3_CT_FORTEZZA_DMS 20 +/* + * SSL3_CT_NUMBER is used to size arrays and it must be large enough to + * contain all of the cert types defined for *either* SSLv3 and TLSv1. + */ +# define SSL3_CT_NUMBER 10 + +# if defined(TLS_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +/* No longer used as of OpenSSL 1.1.1 */ +# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 + +/* Removed from OpenSSL 1.1.0 */ +# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 + +# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 + +/* Set if we encrypt then mac instead of usual mac then encrypt */ +# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ 0x0100 +# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ + +/* Set if extended master secret extension received from peer */ +# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 + +# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 + +# define TLS1_FLAGS_STATELESS 0x0800 + +/* Set if extended master secret extension required on renegotiation */ +# define TLS1_FLAGS_REQUIRED_EXTMS 0x1000 + +# define SSL3_MT_HELLO_REQUEST 0 +# define SSL3_MT_CLIENT_HELLO 1 +# define SSL3_MT_SERVER_HELLO 2 +# define SSL3_MT_NEWSESSION_TICKET 4 +# define SSL3_MT_END_OF_EARLY_DATA 5 +# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 +# define SSL3_MT_CERTIFICATE 11 +# define SSL3_MT_SERVER_KEY_EXCHANGE 12 +# define SSL3_MT_CERTIFICATE_REQUEST 13 +# define SSL3_MT_SERVER_DONE 14 +# define SSL3_MT_CERTIFICATE_VERIFY 15 +# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 +# define SSL3_MT_FINISHED 20 +# define SSL3_MT_CERTIFICATE_URL 21 +# define SSL3_MT_CERTIFICATE_STATUS 22 +# define SSL3_MT_SUPPLEMENTAL_DATA 23 +# define SSL3_MT_KEY_UPDATE 24 +# ifndef OPENSSL_NO_NEXTPROTONEG +# define SSL3_MT_NEXT_PROTO 67 +# endif +# define SSL3_MT_MESSAGE_HASH 254 +# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 + +/* Dummy message type for handling CCS like a normal handshake message */ +# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 + +# define SSL3_MT_CCS 1 + +/* These are used when changing over to a new cipher */ +# define SSL3_CC_READ 0x001 +# define SSL3_CC_WRITE 0x002 +# define SSL3_CC_CLIENT 0x010 +# define SSL3_CC_SERVER 0x020 +# define SSL3_CC_EARLY 0x040 +# define SSL3_CC_HANDSHAKE 0x080 +# define SSL3_CC_APPLICATION 0x100 +# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) +# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) +# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/sslerr.h b/lib/openssl/include/openssl/sslerr.h new file mode 100644 index 0000000..701d61c --- /dev/null +++ b/lib/openssl/include/openssl/sslerr.h @@ -0,0 +1,776 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SSLERR_H +# define HEADER_SSLERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_SSL_strings(void); + +/* + * SSL function codes. + */ +# define SSL_F_ADD_CLIENT_KEY_SHARE_EXT 438 +# define SSL_F_ADD_KEY_SHARE 512 +# define SSL_F_BYTES_TO_CIPHER_LIST 519 +# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331 +# define SSL_F_CIPHERSUITE_CB 622 +# define SSL_F_CONSTRUCT_CA_NAMES 552 +# define SSL_F_CONSTRUCT_KEY_EXCHANGE_TBS 553 +# define SSL_F_CONSTRUCT_STATEFUL_TICKET 636 +# define SSL_F_CONSTRUCT_STATELESS_TICKET 637 +# define SSL_F_CREATE_SYNTHETIC_MESSAGE_HASH 539 +# define SSL_F_CREATE_TICKET_PREQUEL 638 +# define SSL_F_CT_MOVE_SCTS 345 +# define SSL_F_CT_STRICT 349 +# define SSL_F_CUSTOM_EXT_ADD 554 +# define SSL_F_CUSTOM_EXT_PARSE 555 +# define SSL_F_D2I_SSL_SESSION 103 +# define SSL_F_DANE_CTX_ENABLE 347 +# define SSL_F_DANE_MTYPE_SET 393 +# define SSL_F_DANE_TLSA_ADD 394 +# define SSL_F_DERIVE_SECRET_KEY_AND_IV 514 +# define SSL_F_DO_DTLS1_WRITE 245 +# define SSL_F_DO_SSL3_WRITE 104 +# define SSL_F_DTLS1_BUFFER_RECORD 247 +# define SSL_F_DTLS1_CHECK_TIMEOUT_NUM 318 +# define SSL_F_DTLS1_HEARTBEAT 305 +# define SSL_F_DTLS1_HM_FRAGMENT_NEW 623 +# define SSL_F_DTLS1_PREPROCESS_FRAGMENT 288 +# define SSL_F_DTLS1_PROCESS_BUFFERED_RECORDS 424 +# define SSL_F_DTLS1_PROCESS_RECORD 257 +# define SSL_F_DTLS1_READ_BYTES 258 +# define SSL_F_DTLS1_READ_FAILED 339 +# define SSL_F_DTLS1_RETRANSMIT_MESSAGE 390 +# define SSL_F_DTLS1_WRITE_APP_DATA_BYTES 268 +# define SSL_F_DTLS1_WRITE_BYTES 545 +# define SSL_F_DTLSV1_LISTEN 350 +# define SSL_F_DTLS_CONSTRUCT_CHANGE_CIPHER_SPEC 371 +# define SSL_F_DTLS_CONSTRUCT_HELLO_VERIFY_REQUEST 385 +# define SSL_F_DTLS_GET_REASSEMBLED_MESSAGE 370 +# define SSL_F_DTLS_PROCESS_HELLO_VERIFY 386 +# define SSL_F_DTLS_RECORD_LAYER_NEW 635 +# define SSL_F_DTLS_WAIT_FOR_DRY 592 +# define SSL_F_EARLY_DATA_COUNT_OK 532 +# define SSL_F_FINAL_EARLY_DATA 556 +# define SSL_F_FINAL_EC_PT_FORMATS 485 +# define SSL_F_FINAL_EMS 486 +# define SSL_F_FINAL_KEY_SHARE 503 +# define SSL_F_FINAL_MAXFRAGMENTLEN 557 +# define SSL_F_FINAL_PSK 639 +# define SSL_F_FINAL_RENEGOTIATE 483 +# define SSL_F_FINAL_SERVER_NAME 558 +# define SSL_F_FINAL_SIG_ALGS 497 +# define SSL_F_GET_CERT_VERIFY_TBS_DATA 588 +# define SSL_F_NSS_KEYLOG_INT 500 +# define SSL_F_OPENSSL_INIT_SSL 342 +# define SSL_F_OSSL_STATEM_CLIENT13_READ_TRANSITION 436 +# define SSL_F_OSSL_STATEM_CLIENT13_WRITE_TRANSITION 598 +# define SSL_F_OSSL_STATEM_CLIENT_CONSTRUCT_MESSAGE 430 +# define SSL_F_OSSL_STATEM_CLIENT_POST_PROCESS_MESSAGE 593 +# define SSL_F_OSSL_STATEM_CLIENT_PROCESS_MESSAGE 594 +# define SSL_F_OSSL_STATEM_CLIENT_READ_TRANSITION 417 +# define SSL_F_OSSL_STATEM_CLIENT_WRITE_TRANSITION 599 +# define SSL_F_OSSL_STATEM_SERVER13_READ_TRANSITION 437 +# define SSL_F_OSSL_STATEM_SERVER13_WRITE_TRANSITION 600 +# define SSL_F_OSSL_STATEM_SERVER_CONSTRUCT_MESSAGE 431 +# define SSL_F_OSSL_STATEM_SERVER_POST_PROCESS_MESSAGE 601 +# define SSL_F_OSSL_STATEM_SERVER_POST_WORK 602 +# define SSL_F_OSSL_STATEM_SERVER_PRE_WORK 640 +# define SSL_F_OSSL_STATEM_SERVER_PROCESS_MESSAGE 603 +# define SSL_F_OSSL_STATEM_SERVER_READ_TRANSITION 418 +# define SSL_F_OSSL_STATEM_SERVER_WRITE_TRANSITION 604 +# define SSL_F_PARSE_CA_NAMES 541 +# define SSL_F_PITEM_NEW 624 +# define SSL_F_PQUEUE_NEW 625 +# define SSL_F_PROCESS_KEY_SHARE_EXT 439 +# define SSL_F_READ_STATE_MACHINE 352 +# define SSL_F_SET_CLIENT_CIPHERSUITE 540 +# define SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET 595 +# define SSL_F_SRP_GENERATE_SERVER_MASTER_SECRET 589 +# define SSL_F_SRP_VERIFY_SERVER_PARAM 596 +# define SSL_F_SSL3_CHANGE_CIPHER_STATE 129 +# define SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM 130 +# define SSL_F_SSL3_CTRL 213 +# define SSL_F_SSL3_CTX_CTRL 133 +# define SSL_F_SSL3_DIGEST_CACHED_RECORDS 293 +# define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 +# define SSL_F_SSL3_ENC 608 +# define SSL_F_SSL3_FINAL_FINISH_MAC 285 +# define SSL_F_SSL3_FINISH_MAC 587 +# define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 +# define SSL_F_SSL3_GET_RECORD 143 +# define SSL_F_SSL3_INIT_FINISHED_MAC 397 +# define SSL_F_SSL3_OUTPUT_CERT_CHAIN 147 +# define SSL_F_SSL3_READ_BYTES 148 +# define SSL_F_SSL3_READ_N 149 +# define SSL_F_SSL3_SETUP_KEY_BLOCK 157 +# define SSL_F_SSL3_SETUP_READ_BUFFER 156 +# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291 +# define SSL_F_SSL3_WRITE_BYTES 158 +# define SSL_F_SSL3_WRITE_PENDING 159 +# define SSL_F_SSL_ADD_CERT_CHAIN 316 +# define SSL_F_SSL_ADD_CERT_TO_BUF 319 +# define SSL_F_SSL_ADD_CERT_TO_WPACKET 493 +# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298 +# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277 +# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307 +# define SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK 215 +# define SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK 216 +# define SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT 299 +# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278 +# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308 +# define SSL_F_SSL_BAD_METHOD 160 +# define SSL_F_SSL_BUILD_CERT_CHAIN 332 +# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161 +# define SSL_F_SSL_CACHE_CIPHERLIST 520 +# define SSL_F_SSL_CERT_ADD0_CHAIN_CERT 346 +# define SSL_F_SSL_CERT_DUP 221 +# define SSL_F_SSL_CERT_NEW 162 +# define SSL_F_SSL_CERT_SET0_CHAIN 340 +# define SSL_F_SSL_CHECK_PRIVATE_KEY 163 +# define SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT 280 +# define SSL_F_SSL_CHECK_SRP_EXT_CLIENTHELLO 606 +# define SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG 279 +# define SSL_F_SSL_CHOOSE_CLIENT_VERSION 607 +# define SSL_F_SSL_CIPHER_DESCRIPTION 626 +# define SSL_F_SSL_CIPHER_LIST_TO_BYTES 425 +# define SSL_F_SSL_CIPHER_PROCESS_RULESTR 230 +# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231 +# define SSL_F_SSL_CLEAR 164 +# define SSL_F_SSL_CLIENT_HELLO_GET1_EXTENSIONS_PRESENT 627 +# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165 +# define SSL_F_SSL_CONF_CMD 334 +# define SSL_F_SSL_CREATE_CIPHER_LIST 166 +# define SSL_F_SSL_CTRL 232 +# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168 +# define SSL_F_SSL_CTX_ENABLE_CT 398 +# define SSL_F_SSL_CTX_MAKE_PROFILES 309 +# define SSL_F_SSL_CTX_NEW 169 +# define SSL_F_SSL_CTX_SET_ALPN_PROTOS 343 +# define SSL_F_SSL_CTX_SET_CIPHER_LIST 269 +# define SSL_F_SSL_CTX_SET_CLIENT_CERT_ENGINE 290 +# define SSL_F_SSL_CTX_SET_CT_VALIDATION_CALLBACK 396 +# define SSL_F_SSL_CTX_SET_SESSION_ID_CONTEXT 219 +# define SSL_F_SSL_CTX_SET_SSL_VERSION 170 +# define SSL_F_SSL_CTX_SET_TLSEXT_MAX_FRAGMENT_LENGTH 551 +# define SSL_F_SSL_CTX_USE_CERTIFICATE 171 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_ASN1 172 +# define SSL_F_SSL_CTX_USE_CERTIFICATE_FILE 173 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY 174 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_ASN1 175 +# define SSL_F_SSL_CTX_USE_PRIVATEKEY_FILE 176 +# define SSL_F_SSL_CTX_USE_PSK_IDENTITY_HINT 272 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178 +# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179 +# define SSL_F_SSL_CTX_USE_SERVERINFO 336 +# define SSL_F_SSL_CTX_USE_SERVERINFO_EX 543 +# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337 +# define SSL_F_SSL_DANE_DUP 403 +# define SSL_F_SSL_DANE_ENABLE 395 +# define SSL_F_SSL_DERIVE 590 +# define SSL_F_SSL_DO_CONFIG 391 +# define SSL_F_SSL_DO_HANDSHAKE 180 +# define SSL_F_SSL_DUP_CA_LIST 408 +# define SSL_F_SSL_ENABLE_CT 402 +# define SSL_F_SSL_GENERATE_PKEY_GROUP 559 +# define SSL_F_SSL_GENERATE_SESSION_ID 547 +# define SSL_F_SSL_GET_NEW_SESSION 181 +# define SSL_F_SSL_GET_PREV_SESSION 217 +# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322 +# define SSL_F_SSL_GET_SIGN_PKEY 183 +# define SSL_F_SSL_HANDSHAKE_HASH 560 +# define SSL_F_SSL_INIT_WBIO_BUFFER 184 +# define SSL_F_SSL_KEY_UPDATE 515 +# define SSL_F_SSL_LOAD_CLIENT_CA_FILE 185 +# define SSL_F_SSL_LOG_MASTER_SECRET 498 +# define SSL_F_SSL_LOG_RSA_CLIENT_KEY_EXCHANGE 499 +# define SSL_F_SSL_MODULE_INIT 392 +# define SSL_F_SSL_NEW 186 +# define SSL_F_SSL_NEXT_PROTO_VALIDATE 565 +# define SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT 300 +# define SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT 302 +# define SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT 310 +# define SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT 301 +# define SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT 303 +# define SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT 311 +# define SSL_F_SSL_PEEK 270 +# define SSL_F_SSL_PEEK_EX 432 +# define SSL_F_SSL_PEEK_INTERNAL 522 +# define SSL_F_SSL_READ 223 +# define SSL_F_SSL_READ_EARLY_DATA 529 +# define SSL_F_SSL_READ_EX 434 +# define SSL_F_SSL_READ_INTERNAL 523 +# define SSL_F_SSL_RENEGOTIATE 516 +# define SSL_F_SSL_RENEGOTIATE_ABBREVIATED 546 +# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320 +# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321 +# define SSL_F_SSL_SESSION_DUP 348 +# define SSL_F_SSL_SESSION_NEW 189 +# define SSL_F_SSL_SESSION_PRINT_FP 190 +# define SSL_F_SSL_SESSION_SET1_ID 423 +# define SSL_F_SSL_SESSION_SET1_ID_CONTEXT 312 +# define SSL_F_SSL_SET_ALPN_PROTOS 344 +# define SSL_F_SSL_SET_CERT 191 +# define SSL_F_SSL_SET_CERT_AND_KEY 621 +# define SSL_F_SSL_SET_CIPHER_LIST 271 +# define SSL_F_SSL_SET_CT_VALIDATION_CALLBACK 399 +# define SSL_F_SSL_SET_FD 192 +# define SSL_F_SSL_SET_PKEY 193 +# define SSL_F_SSL_SET_RFD 194 +# define SSL_F_SSL_SET_SESSION 195 +# define SSL_F_SSL_SET_SESSION_ID_CONTEXT 218 +# define SSL_F_SSL_SET_SESSION_TICKET_EXT 294 +# define SSL_F_SSL_SET_TLSEXT_MAX_FRAGMENT_LENGTH 550 +# define SSL_F_SSL_SET_WFD 196 +# define SSL_F_SSL_SHUTDOWN 224 +# define SSL_F_SSL_SRP_CTX_INIT 313 +# define SSL_F_SSL_START_ASYNC_JOB 389 +# define SSL_F_SSL_UNDEFINED_FUNCTION 197 +# define SSL_F_SSL_UNDEFINED_VOID_FUNCTION 244 +# define SSL_F_SSL_USE_CERTIFICATE 198 +# define SSL_F_SSL_USE_CERTIFICATE_ASN1 199 +# define SSL_F_SSL_USE_CERTIFICATE_FILE 200 +# define SSL_F_SSL_USE_PRIVATEKEY 201 +# define SSL_F_SSL_USE_PRIVATEKEY_ASN1 202 +# define SSL_F_SSL_USE_PRIVATEKEY_FILE 203 +# define SSL_F_SSL_USE_PSK_IDENTITY_HINT 273 +# define SSL_F_SSL_USE_RSAPRIVATEKEY 204 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_ASN1 205 +# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206 +# define SSL_F_SSL_VALIDATE_CT 400 +# define SSL_F_SSL_VERIFY_CERT_CHAIN 207 +# define SSL_F_SSL_VERIFY_CLIENT_POST_HANDSHAKE 616 +# define SSL_F_SSL_WRITE 208 +# define SSL_F_SSL_WRITE_EARLY_DATA 526 +# define SSL_F_SSL_WRITE_EARLY_FINISH 527 +# define SSL_F_SSL_WRITE_EX 433 +# define SSL_F_SSL_WRITE_INTERNAL 524 +# define SSL_F_STATE_MACHINE 353 +# define SSL_F_TLS12_CHECK_PEER_SIGALG 333 +# define SSL_F_TLS12_COPY_SIGALGS 533 +# define SSL_F_TLS13_CHANGE_CIPHER_STATE 440 +# define SSL_F_TLS13_ENC 609 +# define SSL_F_TLS13_FINAL_FINISH_MAC 605 +# define SSL_F_TLS13_GENERATE_SECRET 591 +# define SSL_F_TLS13_HKDF_EXPAND 561 +# define SSL_F_TLS13_RESTORE_HANDSHAKE_DIGEST_FOR_PHA 617 +# define SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA 618 +# define SSL_F_TLS13_SETUP_KEY_BLOCK 441 +# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209 +# define SSL_F_TLS1_CHECK_DUPLICATE_EXTENSIONS 341 +# define SSL_F_TLS1_ENC 401 +# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314 +# define SSL_F_TLS1_GET_CURVELIST 338 +# define SSL_F_TLS1_PRF 284 +# define SSL_F_TLS1_SAVE_U16 628 +# define SSL_F_TLS1_SETUP_KEY_BLOCK 211 +# define SSL_F_TLS1_SET_GROUPS 629 +# define SSL_F_TLS1_SET_RAW_SIGALGS 630 +# define SSL_F_TLS1_SET_SERVER_SIGALGS 335 +# define SSL_F_TLS1_SET_SHARED_SIGALGS 631 +# define SSL_F_TLS1_SET_SIGALGS 632 +# define SSL_F_TLS_CHOOSE_SIGALG 513 +# define SSL_F_TLS_CLIENT_KEY_EXCHANGE_POST_WORK 354 +# define SSL_F_TLS_COLLECT_EXTENSIONS 435 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_AUTHORITIES 542 +# define SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST 372 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS 429 +# define SSL_F_TLS_CONSTRUCT_CERT_STATUS_BODY 494 +# define SSL_F_TLS_CONSTRUCT_CERT_VERIFY 496 +# define SSL_F_TLS_CONSTRUCT_CHANGE_CIPHER_SPEC 427 +# define SSL_F_TLS_CONSTRUCT_CKE_DHE 404 +# define SSL_F_TLS_CONSTRUCT_CKE_ECDHE 405 +# define SSL_F_TLS_CONSTRUCT_CKE_GOST 406 +# define SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE 407 +# define SSL_F_TLS_CONSTRUCT_CKE_RSA 409 +# define SSL_F_TLS_CONSTRUCT_CKE_SRP 410 +# define SSL_F_TLS_CONSTRUCT_CLIENT_CERTIFICATE 484 +# define SSL_F_TLS_CONSTRUCT_CLIENT_HELLO 487 +# define SSL_F_TLS_CONSTRUCT_CLIENT_KEY_EXCHANGE 488 +# define SSL_F_TLS_CONSTRUCT_CLIENT_VERIFY 489 +# define SSL_F_TLS_CONSTRUCT_CTOS_ALPN 466 +# define SSL_F_TLS_CONSTRUCT_CTOS_CERTIFICATE 355 +# define SSL_F_TLS_CONSTRUCT_CTOS_COOKIE 535 +# define SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA 530 +# define SSL_F_TLS_CONSTRUCT_CTOS_EC_PT_FORMATS 467 +# define SSL_F_TLS_CONSTRUCT_CTOS_EMS 468 +# define SSL_F_TLS_CONSTRUCT_CTOS_ETM 469 +# define SSL_F_TLS_CONSTRUCT_CTOS_HELLO 356 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_EXCHANGE 357 +# define SSL_F_TLS_CONSTRUCT_CTOS_KEY_SHARE 470 +# define SSL_F_TLS_CONSTRUCT_CTOS_MAXFRAGMENTLEN 549 +# define SSL_F_TLS_CONSTRUCT_CTOS_NPN 471 +# define SSL_F_TLS_CONSTRUCT_CTOS_PADDING 472 +# define SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH 619 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK 501 +# define SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES 509 +# define SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE 473 +# define SSL_F_TLS_CONSTRUCT_CTOS_SCT 474 +# define SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME 475 +# define SSL_F_TLS_CONSTRUCT_CTOS_SESSION_TICKET 476 +# define SSL_F_TLS_CONSTRUCT_CTOS_SIG_ALGS 477 +# define SSL_F_TLS_CONSTRUCT_CTOS_SRP 478 +# define SSL_F_TLS_CONSTRUCT_CTOS_STATUS_REQUEST 479 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_GROUPS 480 +# define SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS 481 +# define SSL_F_TLS_CONSTRUCT_CTOS_USE_SRTP 482 +# define SSL_F_TLS_CONSTRUCT_CTOS_VERIFY 358 +# define SSL_F_TLS_CONSTRUCT_ENCRYPTED_EXTENSIONS 443 +# define SSL_F_TLS_CONSTRUCT_END_OF_EARLY_DATA 536 +# define SSL_F_TLS_CONSTRUCT_EXTENSIONS 447 +# define SSL_F_TLS_CONSTRUCT_FINISHED 359 +# define SSL_F_TLS_CONSTRUCT_HELLO_REQUEST 373 +# define SSL_F_TLS_CONSTRUCT_HELLO_RETRY_REQUEST 510 +# define SSL_F_TLS_CONSTRUCT_KEY_UPDATE 517 +# define SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET 428 +# define SSL_F_TLS_CONSTRUCT_NEXT_PROTO 426 +# define SSL_F_TLS_CONSTRUCT_SERVER_CERTIFICATE 490 +# define SSL_F_TLS_CONSTRUCT_SERVER_HELLO 491 +# define SSL_F_TLS_CONSTRUCT_SERVER_KEY_EXCHANGE 492 +# define SSL_F_TLS_CONSTRUCT_STOC_ALPN 451 +# define SSL_F_TLS_CONSTRUCT_STOC_CERTIFICATE 374 +# define SSL_F_TLS_CONSTRUCT_STOC_COOKIE 613 +# define SSL_F_TLS_CONSTRUCT_STOC_CRYPTOPRO_BUG 452 +# define SSL_F_TLS_CONSTRUCT_STOC_DONE 375 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA 531 +# define SSL_F_TLS_CONSTRUCT_STOC_EARLY_DATA_INFO 525 +# define SSL_F_TLS_CONSTRUCT_STOC_EC_PT_FORMATS 453 +# define SSL_F_TLS_CONSTRUCT_STOC_EMS 454 +# define SSL_F_TLS_CONSTRUCT_STOC_ETM 455 +# define SSL_F_TLS_CONSTRUCT_STOC_HELLO 376 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_EXCHANGE 377 +# define SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE 456 +# define SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN 548 +# define SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG 457 +# define SSL_F_TLS_CONSTRUCT_STOC_PSK 504 +# define SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE 458 +# define SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME 459 +# define SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET 460 +# define SSL_F_TLS_CONSTRUCT_STOC_STATUS_REQUEST 461 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_GROUPS 544 +# define SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS 611 +# define SSL_F_TLS_CONSTRUCT_STOC_USE_SRTP 462 +# define SSL_F_TLS_EARLY_POST_PROCESS_CLIENT_HELLO 521 +# define SSL_F_TLS_FINISH_HANDSHAKE 597 +# define SSL_F_TLS_GET_MESSAGE_BODY 351 +# define SSL_F_TLS_GET_MESSAGE_HEADER 387 +# define SSL_F_TLS_HANDLE_ALPN 562 +# define SSL_F_TLS_HANDLE_STATUS_REQUEST 563 +# define SSL_F_TLS_PARSE_CERTIFICATE_AUTHORITIES 566 +# define SSL_F_TLS_PARSE_CLIENTHELLO_TLSEXT 449 +# define SSL_F_TLS_PARSE_CTOS_ALPN 567 +# define SSL_F_TLS_PARSE_CTOS_COOKIE 614 +# define SSL_F_TLS_PARSE_CTOS_EARLY_DATA 568 +# define SSL_F_TLS_PARSE_CTOS_EC_PT_FORMATS 569 +# define SSL_F_TLS_PARSE_CTOS_EMS 570 +# define SSL_F_TLS_PARSE_CTOS_KEY_SHARE 463 +# define SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN 571 +# define SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH 620 +# define SSL_F_TLS_PARSE_CTOS_PSK 505 +# define SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES 572 +# define SSL_F_TLS_PARSE_CTOS_RENEGOTIATE 464 +# define SSL_F_TLS_PARSE_CTOS_SERVER_NAME 573 +# define SSL_F_TLS_PARSE_CTOS_SESSION_TICKET 574 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS 575 +# define SSL_F_TLS_PARSE_CTOS_SIG_ALGS_CERT 615 +# define SSL_F_TLS_PARSE_CTOS_SRP 576 +# define SSL_F_TLS_PARSE_CTOS_STATUS_REQUEST 577 +# define SSL_F_TLS_PARSE_CTOS_SUPPORTED_GROUPS 578 +# define SSL_F_TLS_PARSE_CTOS_USE_SRTP 465 +# define SSL_F_TLS_PARSE_STOC_ALPN 579 +# define SSL_F_TLS_PARSE_STOC_COOKIE 534 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA 538 +# define SSL_F_TLS_PARSE_STOC_EARLY_DATA_INFO 528 +# define SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS 580 +# define SSL_F_TLS_PARSE_STOC_KEY_SHARE 445 +# define SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN 581 +# define SSL_F_TLS_PARSE_STOC_NPN 582 +# define SSL_F_TLS_PARSE_STOC_PSK 502 +# define SSL_F_TLS_PARSE_STOC_RENEGOTIATE 448 +# define SSL_F_TLS_PARSE_STOC_SCT 564 +# define SSL_F_TLS_PARSE_STOC_SERVER_NAME 583 +# define SSL_F_TLS_PARSE_STOC_SESSION_TICKET 584 +# define SSL_F_TLS_PARSE_STOC_STATUS_REQUEST 585 +# define SSL_F_TLS_PARSE_STOC_SUPPORTED_VERSIONS 612 +# define SSL_F_TLS_PARSE_STOC_USE_SRTP 446 +# define SSL_F_TLS_POST_PROCESS_CLIENT_HELLO 378 +# define SSL_F_TLS_POST_PROCESS_CLIENT_KEY_EXCHANGE 384 +# define SSL_F_TLS_PREPARE_CLIENT_CERTIFICATE 360 +# define SSL_F_TLS_PROCESS_AS_HELLO_RETRY_REQUEST 610 +# define SSL_F_TLS_PROCESS_CERTIFICATE_REQUEST 361 +# define SSL_F_TLS_PROCESS_CERT_STATUS 362 +# define SSL_F_TLS_PROCESS_CERT_STATUS_BODY 495 +# define SSL_F_TLS_PROCESS_CERT_VERIFY 379 +# define SSL_F_TLS_PROCESS_CHANGE_CIPHER_SPEC 363 +# define SSL_F_TLS_PROCESS_CKE_DHE 411 +# define SSL_F_TLS_PROCESS_CKE_ECDHE 412 +# define SSL_F_TLS_PROCESS_CKE_GOST 413 +# define SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE 414 +# define SSL_F_TLS_PROCESS_CKE_RSA 415 +# define SSL_F_TLS_PROCESS_CKE_SRP 416 +# define SSL_F_TLS_PROCESS_CLIENT_CERTIFICATE 380 +# define SSL_F_TLS_PROCESS_CLIENT_HELLO 381 +# define SSL_F_TLS_PROCESS_CLIENT_KEY_EXCHANGE 382 +# define SSL_F_TLS_PROCESS_ENCRYPTED_EXTENSIONS 444 +# define SSL_F_TLS_PROCESS_END_OF_EARLY_DATA 537 +# define SSL_F_TLS_PROCESS_FINISHED 364 +# define SSL_F_TLS_PROCESS_HELLO_REQ 507 +# define SSL_F_TLS_PROCESS_HELLO_RETRY_REQUEST 511 +# define SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT 442 +# define SSL_F_TLS_PROCESS_KEY_EXCHANGE 365 +# define SSL_F_TLS_PROCESS_KEY_UPDATE 518 +# define SSL_F_TLS_PROCESS_NEW_SESSION_TICKET 366 +# define SSL_F_TLS_PROCESS_NEXT_PROTO 383 +# define SSL_F_TLS_PROCESS_SERVER_CERTIFICATE 367 +# define SSL_F_TLS_PROCESS_SERVER_DONE 368 +# define SSL_F_TLS_PROCESS_SERVER_HELLO 369 +# define SSL_F_TLS_PROCESS_SKE_DHE 419 +# define SSL_F_TLS_PROCESS_SKE_ECDHE 420 +# define SSL_F_TLS_PROCESS_SKE_PSK_PREAMBLE 421 +# define SSL_F_TLS_PROCESS_SKE_SRP 422 +# define SSL_F_TLS_PSK_DO_BINDER 506 +# define SSL_F_TLS_SCAN_CLIENTHELLO_TLSEXT 450 +# define SSL_F_TLS_SETUP_HANDSHAKE 508 +# define SSL_F_USE_CERTIFICATE_CHAIN_FILE 220 +# define SSL_F_WPACKET_INTERN_INIT_LEN 633 +# define SSL_F_WPACKET_START_SUB_PACKET_LEN__ 634 +# define SSL_F_WRITE_STATE_MACHINE 586 + +/* + * SSL reason codes. + */ +# define SSL_R_APPLICATION_DATA_AFTER_CLOSE_NOTIFY 291 +# define SSL_R_APP_DATA_IN_HANDSHAKE 100 +# define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272 +# define SSL_R_AT_LEAST_TLS_1_0_NEEDED_IN_FIPS_MODE 143 +# define SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE 158 +# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 +# define SSL_R_BAD_CIPHER 186 +# define SSL_R_BAD_DATA 390 +# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 +# define SSL_R_BAD_DECOMPRESSION 107 +# define SSL_R_BAD_DH_VALUE 102 +# define SSL_R_BAD_DIGEST_LENGTH 111 +# define SSL_R_BAD_EARLY_DATA 233 +# define SSL_R_BAD_ECC_CERT 304 +# define SSL_R_BAD_ECPOINT 306 +# define SSL_R_BAD_EXTENSION 110 +# define SSL_R_BAD_HANDSHAKE_LENGTH 332 +# define SSL_R_BAD_HANDSHAKE_STATE 236 +# define SSL_R_BAD_HELLO_REQUEST 105 +# define SSL_R_BAD_HRR_VERSION 263 +# define SSL_R_BAD_KEY_SHARE 108 +# define SSL_R_BAD_KEY_UPDATE 122 +# define SSL_R_BAD_LEGACY_VERSION 292 +# define SSL_R_BAD_LENGTH 271 +# define SSL_R_BAD_PACKET 240 +# define SSL_R_BAD_PACKET_LENGTH 115 +# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 +# define SSL_R_BAD_PSK 219 +# define SSL_R_BAD_PSK_IDENTITY 114 +# define SSL_R_BAD_RECORD_TYPE 443 +# define SSL_R_BAD_RSA_ENCRYPT 119 +# define SSL_R_BAD_SIGNATURE 123 +# define SSL_R_BAD_SRP_A_LENGTH 347 +# define SSL_R_BAD_SRP_PARAMETERS 371 +# define SSL_R_BAD_SRTP_MKI_VALUE 352 +# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 +# define SSL_R_BAD_SSL_FILETYPE 124 +# define SSL_R_BAD_VALUE 384 +# define SSL_R_BAD_WRITE_RETRY 127 +# define SSL_R_BINDER_DOES_NOT_VERIFY 253 +# define SSL_R_BIO_NOT_SET 128 +# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 +# define SSL_R_BN_LIB 130 +# define SSL_R_CALLBACK_FAILED 234 +# define SSL_R_CANNOT_CHANGE_CIPHER 109 +# define SSL_R_CA_DN_LENGTH_MISMATCH 131 +# define SSL_R_CA_KEY_TOO_SMALL 397 +# define SSL_R_CA_MD_TOO_WEAK 398 +# define SSL_R_CCS_RECEIVED_EARLY 133 +# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 +# define SSL_R_CERT_CB_ERROR 377 +# define SSL_R_CERT_LENGTH_MISMATCH 135 +# define SSL_R_CIPHERSUITE_DIGEST_HAS_CHANGED 218 +# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 +# define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 +# define SSL_R_CLIENTHELLO_TLSEXT 226 +# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 +# define SSL_R_COMPRESSION_DISABLED 343 +# define SSL_R_COMPRESSION_FAILURE 141 +# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 +# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 +# define SSL_R_CONNECTION_TYPE_NOT_SET 144 +# define SSL_R_CONTEXT_NOT_DANE_ENABLED 167 +# define SSL_R_COOKIE_GEN_CALLBACK_FAILURE 400 +# define SSL_R_COOKIE_MISMATCH 308 +# define SSL_R_CUSTOM_EXT_HANDLER_ALREADY_INSTALLED 206 +# define SSL_R_DANE_ALREADY_ENABLED 172 +# define SSL_R_DANE_CANNOT_OVERRIDE_MTYPE_FULL 173 +# define SSL_R_DANE_NOT_ENABLED 175 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 +# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 +# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 +# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 +# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 +# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 +# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 +# define SSL_R_DANE_TLSA_NULL_DATA 203 +# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 +# define SSL_R_DATA_LENGTH_TOO_LONG 146 +# define SSL_R_DECRYPTION_FAILED 147 +# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 +# define SSL_R_DH_KEY_TOO_SMALL 394 +# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 +# define SSL_R_DIGEST_CHECK_FAILED 149 +# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 +# define SSL_R_DUPLICATE_COMPRESSION_ID 309 +# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 +# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 +# define SSL_R_EE_KEY_TOO_SMALL 399 +# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 +# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 +# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 +# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 +# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 +# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 +# define SSL_R_EXTENSION_NOT_RECEIVED 279 +# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 +# define SSL_R_EXT_LENGTH_MISMATCH 163 +# define SSL_R_FAILED_TO_INIT_ASYNC 405 +# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 +# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 +# define SSL_R_HTTPS_PROXY_REQUEST 155 +# define SSL_R_HTTP_REQUEST 156 +# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 +# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 +# define SSL_R_INAPPROPRIATE_FALLBACK 373 +# define SSL_R_INCONSISTENT_COMPRESSION 340 +# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 +# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 +# define SSL_R_INCONSISTENT_EXTMS 104 +# define SSL_R_INSUFFICIENT_SECURITY 241 +# define SSL_R_INVALID_ALERT 205 +# define SSL_R_INVALID_CCS_MESSAGE 260 +# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 +# define SSL_R_INVALID_COMMAND 280 +# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 +# define SSL_R_INVALID_CONFIG 283 +# define SSL_R_INVALID_CONFIGURATION_NAME 113 +# define SSL_R_INVALID_CONTEXT 282 +# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 +# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 +# define SSL_R_INVALID_MAX_EARLY_DATA 174 +# define SSL_R_INVALID_NULL_CMD_NAME 385 +# define SSL_R_INVALID_SEQUENCE_NUMBER 402 +# define SSL_R_INVALID_SERVERINFO_DATA 388 +# define SSL_R_INVALID_SESSION_ID 999 +# define SSL_R_INVALID_SRP_USERNAME 357 +# define SSL_R_INVALID_STATUS_RESPONSE 328 +# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325 +# define SSL_R_LENGTH_MISMATCH 159 +# define SSL_R_LENGTH_TOO_LONG 404 +# define SSL_R_LENGTH_TOO_SHORT 160 +# define SSL_R_LIBRARY_BUG 274 +# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 +# define SSL_R_MISSING_DSA_SIGNING_CERT 165 +# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 +# define SSL_R_MISSING_FATAL 256 +# define SSL_R_MISSING_PARAMETERS 290 +# define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 +# define SSL_R_MISSING_RSA_CERTIFICATE 168 +# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 +# define SSL_R_MISSING_RSA_SIGNING_CERT 170 +# define SSL_R_MISSING_SIGALGS_EXTENSION 112 +# define SSL_R_MISSING_SIGNING_CERT 221 +# define SSL_R_MISSING_SRP_PARAM 358 +# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 +# define SSL_R_MISSING_TMP_DH_KEY 171 +# define SSL_R_MISSING_TMP_ECDH_KEY 311 +# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 +# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 +# define SSL_R_NOT_REPLACING_CERTIFICATE 289 +# define SSL_R_NOT_SERVER 284 +# define SSL_R_NO_APPLICATION_PROTOCOL 235 +# define SSL_R_NO_CERTIFICATES_RETURNED 176 +# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 +# define SSL_R_NO_CERTIFICATE_SET 179 +# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 +# define SSL_R_NO_CIPHERS_AVAILABLE 181 +# define SSL_R_NO_CIPHERS_SPECIFIED 183 +# define SSL_R_NO_CIPHER_MATCH 185 +# define SSL_R_NO_CLIENT_CERT_METHOD 331 +# define SSL_R_NO_COMPRESSION_SPECIFIED 187 +# define SSL_R_NO_COOKIE_CALLBACK_SET 287 +# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 +# define SSL_R_NO_METHOD_SPECIFIED 188 +# define SSL_R_NO_PEM_EXTENSIONS 389 +# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 +# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 +# define SSL_R_NO_RENEGOTIATION 339 +# define SSL_R_NO_REQUIRED_DIGEST 324 +# define SSL_R_NO_SHARED_CIPHER 193 +# define SSL_R_NO_SHARED_GROUPS 410 +# define SSL_R_NO_SHARED_SIGNATURE_ALGORITHMS 376 +# define SSL_R_NO_SRTP_PROFILES 359 +# define SSL_R_NO_SUITABLE_KEY_SHARE 101 +# define SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM 118 +# define SSL_R_NO_VALID_SCTS 216 +# define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 +# define SSL_R_NULL_SSL_CTX 195 +# define SSL_R_NULL_SSL_METHOD_PASSED 196 +# define SSL_R_OCSP_CALLBACK_FAILURE 294 +# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 +# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 +# define SSL_R_OVERFLOW_ERROR 237 +# define SSL_R_PACKET_LENGTH_TOO_LONG 198 +# define SSL_R_PARSE_TLSEXT 227 +# define SSL_R_PATH_TOO_LONG 270 +# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 +# define SSL_R_PEM_NAME_BAD_PREFIX 391 +# define SSL_R_PEM_NAME_TOO_SHORT 392 +# define SSL_R_PIPELINE_FAILURE 406 +# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 +# define SSL_R_PRIVATE_KEY_MISMATCH 288 +# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 +# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 +# define SSL_R_PSK_NO_CLIENT_CB 224 +# define SSL_R_PSK_NO_SERVER_CB 225 +# define SSL_R_READ_BIO_NOT_SET 211 +# define SSL_R_READ_TIMEOUT_EXPIRED 312 +# define SSL_R_RECORD_LENGTH_MISMATCH 213 +# define SSL_R_RECORD_TOO_SMALL 298 +# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 +# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 +# define SSL_R_RENEGOTIATION_MISMATCH 337 +# define SSL_R_REQUEST_PENDING 285 +# define SSL_R_REQUEST_SENT 286 +# define SSL_R_REQUIRED_CIPHER_MISSING 215 +# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 +# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 +# define SSL_R_SCT_VERIFICATION_FAILED 208 +# define SSL_R_SERVERHELLO_TLSEXT 275 +# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 +# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 +# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 +# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 +# define SSL_R_SRP_A_CALC 361 +# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 +# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 +# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 +# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 +# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 +# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 +# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 +# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 +# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 +# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 +# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 +# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 +# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 +# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 +# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 +# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 +# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 +# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 +# define SSL_R_SSL_HANDSHAKE_FAILURE 229 +# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 +# define SSL_R_SSL_NEGATIVE_LENGTH 372 +# define SSL_R_SSL_SECTION_EMPTY 126 +# define SSL_R_SSL_SECTION_NOT_FOUND 136 +# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 +# define SSL_R_SSL_SESSION_ID_CONFLICT 302 +# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 +# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 +# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 +# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 +# define SSL_R_STILL_IN_INIT 121 +# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 +# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 +# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 +# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 +# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 +# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 +# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 +# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 +# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 +# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 +# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 +# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 +# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 +# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 +# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 +# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 +# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 +# define SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE 1111 +# define SSL_R_TLSV1_UNRECOGNIZED_NAME 1112 +# define SSL_R_TLSV1_UNSUPPORTED_EXTENSION 1110 +# define SSL_R_TLS_HEARTBEAT_PEER_DOESNT_ACCEPT 365 +# define SSL_R_TLS_HEARTBEAT_PENDING 366 +# define SSL_R_TLS_ILLEGAL_EXPORTER_LABEL 367 +# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 +# define SSL_R_TOO_MANY_KEY_UPDATES 132 +# define SSL_R_TOO_MANY_WARN_ALERTS 409 +# define SSL_R_TOO_MUCH_EARLY_DATA 164 +# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 +# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 +# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 +# define SSL_R_UNABLE_TO_LOAD_SSL3_SHA1_ROUTINES 243 +# define SSL_R_UNEXPECTED_CCS_MESSAGE 262 +# define SSL_R_UNEXPECTED_END_OF_EARLY_DATA 178 +# define SSL_R_UNEXPECTED_MESSAGE 244 +# define SSL_R_UNEXPECTED_RECORD 245 +# define SSL_R_UNINITIALIZED 276 +# define SSL_R_UNKNOWN_ALERT_TYPE 246 +# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 +# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 +# define SSL_R_UNKNOWN_CIPHER_TYPE 249 +# define SSL_R_UNKNOWN_CMD_NAME 386 +# define SSL_R_UNKNOWN_COMMAND 139 +# define SSL_R_UNKNOWN_DIGEST 368 +# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 +# define SSL_R_UNKNOWN_PKEY_TYPE 251 +# define SSL_R_UNKNOWN_PROTOCOL 252 +# define SSL_R_UNKNOWN_SSL_VERSION 254 +# define SSL_R_UNKNOWN_STATE 255 +# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 +# define SSL_R_UNSOLICITED_EXTENSION 217 +# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 +# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 +# define SSL_R_UNSUPPORTED_PROTOCOL 258 +# define SSL_R_UNSUPPORTED_SSL_VERSION 259 +# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 +# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 +# define SSL_R_VERSION_TOO_HIGH 166 +# define SSL_R_VERSION_TOO_LOW 396 +# define SSL_R_WRONG_CERTIFICATE_TYPE 383 +# define SSL_R_WRONG_CIPHER_RETURNED 261 +# define SSL_R_WRONG_CURVE 378 +# define SSL_R_WRONG_SIGNATURE_LENGTH 264 +# define SSL_R_WRONG_SIGNATURE_SIZE 265 +# define SSL_R_WRONG_SIGNATURE_TYPE 370 +# define SSL_R_WRONG_SSL_VERSION 266 +# define SSL_R_WRONG_VERSION_NUMBER 267 +# define SSL_R_X509_LIB 268 +# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 + +#endif diff --git a/lib/openssl/include/openssl/stack.h b/lib/openssl/include/openssl/stack.h new file mode 100644 index 0000000..cfc0750 --- /dev/null +++ b/lib/openssl/include/openssl/stack.h @@ -0,0 +1,83 @@ +/* + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_STACK_H +# define HEADER_STACK_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ + +typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); +typedef void (*OPENSSL_sk_freefunc)(void *); +typedef void *(*OPENSSL_sk_copyfunc)(const void *); + +int OPENSSL_sk_num(const OPENSSL_STACK *); +void *OPENSSL_sk_value(const OPENSSL_STACK *, int); + +void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); + +OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_new_null(void); +OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); +int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); +void OPENSSL_sk_free(OPENSSL_STACK *); +void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); +OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, + OPENSSL_sk_copyfunc c, + OPENSSL_sk_freefunc f); +int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); +void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc); +void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p); +int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data); +int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data); +void *OPENSSL_sk_shift(OPENSSL_STACK *st); +void *OPENSSL_sk_pop(OPENSSL_STACK *st); +void OPENSSL_sk_zero(OPENSSL_STACK *st); +OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, + OPENSSL_sk_compfunc cmp); +OPENSSL_STACK *OPENSSL_sk_dup(const OPENSSL_STACK *st); +void OPENSSL_sk_sort(OPENSSL_STACK *st); +int OPENSSL_sk_is_sorted(const OPENSSL_STACK *st); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define _STACK OPENSSL_STACK +# define sk_num OPENSSL_sk_num +# define sk_value OPENSSL_sk_value +# define sk_set OPENSSL_sk_set +# define sk_new OPENSSL_sk_new +# define sk_new_null OPENSSL_sk_new_null +# define sk_free OPENSSL_sk_free +# define sk_pop_free OPENSSL_sk_pop_free +# define sk_deep_copy OPENSSL_sk_deep_copy +# define sk_insert OPENSSL_sk_insert +# define sk_delete OPENSSL_sk_delete +# define sk_delete_ptr OPENSSL_sk_delete_ptr +# define sk_find OPENSSL_sk_find +# define sk_find_ex OPENSSL_sk_find_ex +# define sk_push OPENSSL_sk_push +# define sk_unshift OPENSSL_sk_unshift +# define sk_shift OPENSSL_sk_shift +# define sk_pop OPENSSL_sk_pop +# define sk_zero OPENSSL_sk_zero +# define sk_set_cmp_func OPENSSL_sk_set_cmp_func +# define sk_dup OPENSSL_sk_dup +# define sk_sort OPENSSL_sk_sort +# define sk_is_sorted OPENSSL_sk_is_sorted +# endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/store.h b/lib/openssl/include/openssl/store.h new file mode 100644 index 0000000..a40a733 --- /dev/null +++ b/lib/openssl/include/openssl/store.h @@ -0,0 +1,266 @@ +/* + * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STORE_H +# define HEADER_OSSL_STORE_H + +# include +# include +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/*- + * The main OSSL_STORE functions. + * ------------------------------ + * + * These allow applications to open a channel to a resource with supported + * data (keys, certs, crls, ...), read the data a piece at a time and decide + * what to do with it, and finally close. + */ + +typedef struct ossl_store_ctx_st OSSL_STORE_CTX; + +/* + * Typedef for the OSSL_STORE_INFO post processing callback. This can be used + * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning + * NULL). + */ +typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, + void *); + +/* + * Open a channel given a URI. The given UI method will be used any time the + * loader needs extra input, for example when a password or pin is needed, and + * will be passed the same user data every time it's needed in this context. + * + * Returns a context reference which represents the channel to communicate + * through. + */ +OSSL_STORE_CTX *OSSL_STORE_open(const char *uri, const UI_METHOD *ui_method, + void *ui_data, + OSSL_STORE_post_process_info_fn post_process, + void *post_process_data); + +/* + * Control / fine tune the OSSL_STORE channel. |cmd| determines what is to be + * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to + * determine which loader is used), except for common commands (see below). + * Each command takes different arguments. + */ +int OSSL_STORE_ctrl(OSSL_STORE_CTX *ctx, int cmd, ... /* args */); +int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, va_list args); + +/* + * Common ctrl commands that different loaders may choose to support. + */ +/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ +# define OSSL_STORE_C_USE_SECMEM 1 +/* Where custom commands start */ +# define OSSL_STORE_C_CUSTOM_START 100 + +/* + * Read one data item (a key, a cert, a CRL) that is supported by the OSSL_STORE + * functionality, given a context. + * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be + * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... + * NULL is returned on error, which may include that the data found at the URI + * can't be figured out for certain or is ambiguous. + */ +OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); + +/* + * Check if end of data (end of file) is reached + * Returns 1 on end, 0 otherwise. + */ +int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); + +/* + * Check if an error occurred + * Returns 1 if it did, 0 otherwise. + */ +int OSSL_STORE_error(OSSL_STORE_CTX *ctx); + +/* + * Close the channel + * Returns 1 on success, 0 on error. + */ +int OSSL_STORE_close(OSSL_STORE_CTX *ctx); + + +/*- + * Extracting OpenSSL types from and creating new OSSL_STORE_INFOs + * --------------------------------------------------------------- + */ + +/* + * Types of data that can be ossl_stored in a OSSL_STORE_INFO. + * OSSL_STORE_INFO_NAME is typically found when getting a listing of + * available "files" / "tokens" / what have you. + */ +# define OSSL_STORE_INFO_NAME 1 /* char * */ +# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_PKEY 3 /* EVP_PKEY * */ +# define OSSL_STORE_INFO_CERT 4 /* X509 * */ +# define OSSL_STORE_INFO_CRL 5 /* X509_CRL * */ + +/* + * Functions to generate OSSL_STORE_INFOs, one function for each type we + * support having in them, as well as a generic constructor. + * + * In all cases, ownership of the object is transferred to the OSSL_STORE_INFO + * and will therefore be freed when the OSSL_STORE_INFO is freed. + */ +OSSL_STORE_INFO *OSSL_STORE_INFO_new_NAME(char *name); +int OSSL_STORE_INFO_set0_NAME_description(OSSL_STORE_INFO *info, char *desc); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PARAMS(EVP_PKEY *params); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_PKEY(EVP_PKEY *pkey); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CERT(X509 *x509); +OSSL_STORE_INFO *OSSL_STORE_INFO_new_CRL(X509_CRL *crl); + +/* + * Functions to try to extract data from a OSSL_STORE_INFO. + */ +int OSSL_STORE_INFO_get_type(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME(const OSSL_STORE_INFO *info); +const char *OSSL_STORE_INFO_get0_NAME_description(const OSSL_STORE_INFO *info); +char *OSSL_STORE_INFO_get1_NAME_description(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PARAMS(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get0_PKEY(const OSSL_STORE_INFO *info); +EVP_PKEY *OSSL_STORE_INFO_get1_PKEY(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get0_CERT(const OSSL_STORE_INFO *info); +X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); +X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); + +const char *OSSL_STORE_INFO_type_string(int type); + +/* + * Free the OSSL_STORE_INFO + */ +void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); + + +/*- + * Functions to construct a search URI from a base URI and search criteria + * ----------------------------------------------------------------------- + */ + +/* OSSL_STORE search types */ +# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ +# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 +# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 +# define OSSL_STORE_SEARCH_BY_ALIAS 4 + +/* To check what search types the scheme handler supports */ +int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); + +/* Search term constructors */ +/* + * The input is considered to be owned by the caller, and must therefore + * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH + */ +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, + const ASN1_INTEGER + *serial); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, + const unsigned char + *bytes, size_t len); +OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); + +/* Search term destructor */ +void OSSL_STORE_SEARCH_free(OSSL_STORE_SEARCH *search); + +/* Search term accessors */ +int OSSL_STORE_SEARCH_get_type(const OSSL_STORE_SEARCH *criterion); +X509_NAME *OSSL_STORE_SEARCH_get0_name(OSSL_STORE_SEARCH *criterion); +const ASN1_INTEGER *OSSL_STORE_SEARCH_get0_serial(const OSSL_STORE_SEARCH + *criterion); +const unsigned char *OSSL_STORE_SEARCH_get0_bytes(const OSSL_STORE_SEARCH + *criterion, size_t *length); +const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); +const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); + +/* + * Add search criterion and expected return type (which can be unspecified) + * to the loading channel. This MUST happen before the first OSSL_STORE_load(). + */ +int OSSL_STORE_expect(OSSL_STORE_CTX *ctx, int expected_type); +int OSSL_STORE_find(OSSL_STORE_CTX *ctx, OSSL_STORE_SEARCH *search); + + +/*- + * Function to register a loader for the given URI scheme. + * ------------------------------------------------------- + * + * The loader receives all the main components of an URI except for the + * scheme. + */ + +typedef struct ossl_store_loader_st OSSL_STORE_LOADER; +OSSL_STORE_LOADER *OSSL_STORE_LOADER_new(ENGINE *e, const char *scheme); +const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); +const char *OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +/* struct ossl_store_loader_ctx_st is defined differently by each loader */ +typedef struct ossl_store_loader_ctx_st OSSL_STORE_LOADER_CTX; +typedef OSSL_STORE_LOADER_CTX *(*OSSL_STORE_open_fn)(const OSSL_STORE_LOADER + *loader, + const char *uri, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_open(OSSL_STORE_LOADER *loader, + OSSL_STORE_open_fn open_function); +typedef int (*OSSL_STORE_ctrl_fn)(OSSL_STORE_LOADER_CTX *ctx, int cmd, + va_list args); +int OSSL_STORE_LOADER_set_ctrl(OSSL_STORE_LOADER *loader, + OSSL_STORE_ctrl_fn ctrl_function); +typedef int (*OSSL_STORE_expect_fn)(OSSL_STORE_LOADER_CTX *ctx, int expected); +int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, + OSSL_STORE_expect_fn expect_function); +typedef int (*OSSL_STORE_find_fn)(OSSL_STORE_LOADER_CTX *ctx, + OSSL_STORE_SEARCH *criteria); +int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, + OSSL_STORE_find_fn find_function); +typedef OSSL_STORE_INFO *(*OSSL_STORE_load_fn)(OSSL_STORE_LOADER_CTX *ctx, + const UI_METHOD *ui_method, + void *ui_data); +int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, + OSSL_STORE_load_fn load_function); +typedef int (*OSSL_STORE_eof_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, + OSSL_STORE_eof_fn eof_function); +typedef int (*OSSL_STORE_error_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, + OSSL_STORE_error_fn error_function); +typedef int (*OSSL_STORE_close_fn)(OSSL_STORE_LOADER_CTX *ctx); +int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, + OSSL_STORE_close_fn close_function); +void OSSL_STORE_LOADER_free(OSSL_STORE_LOADER *loader); + +int OSSL_STORE_register_loader(OSSL_STORE_LOADER *loader); +OSSL_STORE_LOADER *OSSL_STORE_unregister_loader(const char *scheme); + +/*- + * Functions to list STORE loaders + * ------------------------------- + */ +int OSSL_STORE_do_all_loaders(void (*do_function) (const OSSL_STORE_LOADER + *loader, void *do_arg), + void *do_arg); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/storeerr.h b/lib/openssl/include/openssl/storeerr.h new file mode 100644 index 0000000..190eab0 --- /dev/null +++ b/lib/openssl/include/openssl/storeerr.h @@ -0,0 +1,91 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_OSSL_STOREERR_H +# define HEADER_OSSL_STOREERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_OSSL_STORE_strings(void); + +/* + * OSSL_STORE function codes. + */ +# define OSSL_STORE_F_FILE_CTRL 129 +# define OSSL_STORE_F_FILE_FIND 138 +# define OSSL_STORE_F_FILE_GET_PASS 118 +# define OSSL_STORE_F_FILE_LOAD 119 +# define OSSL_STORE_F_FILE_LOAD_TRY_DECODE 124 +# define OSSL_STORE_F_FILE_NAME_TO_URI 126 +# define OSSL_STORE_F_FILE_OPEN 120 +# define OSSL_STORE_F_OSSL_STORE_ATTACH_PEM_BIO 127 +# define OSSL_STORE_F_OSSL_STORE_EXPECT 130 +# define OSSL_STORE_F_OSSL_STORE_FILE_ATTACH_PEM_BIO_INT 128 +# define OSSL_STORE_F_OSSL_STORE_FIND 131 +# define OSSL_STORE_F_OSSL_STORE_GET0_LOADER_INT 100 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CERT 101 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_CRL 102 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME 103 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_NAME_DESCRIPTION 135 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PARAMS 104 +# define OSSL_STORE_F_OSSL_STORE_INFO_GET1_PKEY 105 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CERT 106 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_CRL 107 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_EMBEDDED 123 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_NAME 109 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PARAMS 110 +# define OSSL_STORE_F_OSSL_STORE_INFO_NEW_PKEY 111 +# define OSSL_STORE_F_OSSL_STORE_INFO_SET0_NAME_DESCRIPTION 134 +# define OSSL_STORE_F_OSSL_STORE_INIT_ONCE 112 +# define OSSL_STORE_F_OSSL_STORE_LOADER_NEW 113 +# define OSSL_STORE_F_OSSL_STORE_OPEN 114 +# define OSSL_STORE_F_OSSL_STORE_OPEN_INT 115 +# define OSSL_STORE_F_OSSL_STORE_REGISTER_LOADER_INT 117 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ALIAS 132 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 133 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 136 +# define OSSL_STORE_F_OSSL_STORE_SEARCH_BY_NAME 137 +# define OSSL_STORE_F_OSSL_STORE_UNREGISTER_LOADER_INT 116 +# define OSSL_STORE_F_TRY_DECODE_PARAMS 121 +# define OSSL_STORE_F_TRY_DECODE_PKCS12 122 +# define OSSL_STORE_F_TRY_DECODE_PKCS8ENCRYPTED 125 + +/* + * OSSL_STORE reason codes. + */ +# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 +# define OSSL_STORE_R_BAD_PASSWORD_READ 115 +# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 +# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 +# define OSSL_STORE_R_INVALID_SCHEME 106 +# define OSSL_STORE_R_IS_NOT_A 112 +# define OSSL_STORE_R_LOADER_INCOMPLETE 116 +# define OSSL_STORE_R_LOADING_STARTED 117 +# define OSSL_STORE_R_NOT_A_CERTIFICATE 100 +# define OSSL_STORE_R_NOT_A_CRL 101 +# define OSSL_STORE_R_NOT_A_KEY 102 +# define OSSL_STORE_R_NOT_A_NAME 103 +# define OSSL_STORE_R_NOT_PARAMETERS 104 +# define OSSL_STORE_R_PASSPHRASE_CALLBACK_ERROR 114 +# define OSSL_STORE_R_PATH_MUST_BE_ABSOLUTE 108 +# define OSSL_STORE_R_SEARCH_ONLY_SUPPORTED_FOR_DIRECTORIES 119 +# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 +# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 +# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 +# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 +# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 +# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 + +#endif diff --git a/lib/openssl/include/openssl/symhacks.h b/lib/openssl/include/openssl/symhacks.h new file mode 100644 index 0000000..156ea6e --- /dev/null +++ b/lib/openssl/include/openssl/symhacks.h @@ -0,0 +1,37 @@ +/* + * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_SYMHACKS_H +# define HEADER_SYMHACKS_H + +# include + +/* Case insensitive linking causes problems.... */ +# if defined(OPENSSL_SYS_VMS) +# undef ERR_load_CRYPTO_strings +# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings +# undef OCSP_crlID_new +# define OCSP_crlID_new OCSP_crlID2_new + +# undef d2i_ECPARAMETERS +# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS +# undef i2d_ECPARAMETERS +# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS +# undef d2i_ECPKPARAMETERS +# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS +# undef i2d_ECPKPARAMETERS +# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS + +/* This one clashes with CMS_data_create */ +# undef cms_Data_create +# define cms_Data_create priv_cms_Data_create + +# endif + +#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/lib/openssl/include/openssl/tls1.h b/lib/openssl/include/openssl/tls1.h new file mode 100644 index 0000000..76d9fda --- /dev/null +++ b/lib/openssl/include/openssl/tls1.h @@ -0,0 +1,1237 @@ +/* + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * Copyright 2005 Nokia. All rights reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TLS1_H +# define HEADER_TLS1_H + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Default security level if not overridden at config time */ +# ifndef OPENSSL_TLS_SECURITY_LEVEL +# define OPENSSL_TLS_SECURITY_LEVEL 1 +# endif + +# define TLS1_VERSION 0x0301 +# define TLS1_1_VERSION 0x0302 +# define TLS1_2_VERSION 0x0303 +# define TLS1_3_VERSION 0x0304 +# define TLS_MAX_VERSION TLS1_3_VERSION + +/* Special value for method supporting multiple versions */ +# define TLS_ANY_VERSION 0x10000 + +# define TLS1_VERSION_MAJOR 0x03 +# define TLS1_VERSION_MINOR 0x01 + +# define TLS1_1_VERSION_MAJOR 0x03 +# define TLS1_1_VERSION_MINOR 0x02 + +# define TLS1_2_VERSION_MAJOR 0x03 +# define TLS1_2_VERSION_MINOR 0x03 + +# define TLS1_get_version(s) \ + ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) + +# define TLS1_get_client_version(s) \ + ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) + +# define TLS1_AD_DECRYPTION_FAILED 21 +# define TLS1_AD_RECORD_OVERFLOW 22 +# define TLS1_AD_UNKNOWN_CA 48/* fatal */ +# define TLS1_AD_ACCESS_DENIED 49/* fatal */ +# define TLS1_AD_DECODE_ERROR 50/* fatal */ +# define TLS1_AD_DECRYPT_ERROR 51 +# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ +# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ +# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ +# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ +# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ +# define TLS1_AD_USER_CANCELLED 90 +# define TLS1_AD_NO_RENEGOTIATION 100 +/* TLSv1.3 alerts */ +# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ +# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ +/* codes 110-114 are from RFC3546 */ +# define TLS1_AD_UNSUPPORTED_EXTENSION 110 +# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 +# define TLS1_AD_UNRECOGNIZED_NAME 112 +# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 +# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 +# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ +# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ + +/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ +# define TLSEXT_TYPE_server_name 0 +# define TLSEXT_TYPE_max_fragment_length 1 +# define TLSEXT_TYPE_client_certificate_url 2 +# define TLSEXT_TYPE_trusted_ca_keys 3 +# define TLSEXT_TYPE_truncated_hmac 4 +# define TLSEXT_TYPE_status_request 5 +/* ExtensionType values from RFC4681 */ +# define TLSEXT_TYPE_user_mapping 6 +/* ExtensionType values from RFC5878 */ +# define TLSEXT_TYPE_client_authz 7 +# define TLSEXT_TYPE_server_authz 8 +/* ExtensionType values from RFC6091 */ +# define TLSEXT_TYPE_cert_type 9 + +/* ExtensionType values from RFC4492 */ +/* + * Prior to TLSv1.3 the supported_groups extension was known as + * elliptic_curves + */ +# define TLSEXT_TYPE_supported_groups 10 +# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups +# define TLSEXT_TYPE_ec_point_formats 11 + + +/* ExtensionType value from RFC5054 */ +# define TLSEXT_TYPE_srp 12 + +/* ExtensionType values from RFC5246 */ +# define TLSEXT_TYPE_signature_algorithms 13 + +/* ExtensionType value from RFC5764 */ +# define TLSEXT_TYPE_use_srtp 14 + +/* ExtensionType value from RFC5620 */ +# define TLSEXT_TYPE_heartbeat 15 + +/* ExtensionType value from RFC7301 */ +# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 + +/* + * Extension type for Certificate Transparency + * https://tools.ietf.org/html/rfc6962#section-3.3.1 + */ +# define TLSEXT_TYPE_signed_certificate_timestamp 18 + +/* + * ExtensionType value for TLS padding extension. + * http://tools.ietf.org/html/draft-agl-tls-padding + */ +# define TLSEXT_TYPE_padding 21 + +/* ExtensionType value from RFC7366 */ +# define TLSEXT_TYPE_encrypt_then_mac 22 + +/* ExtensionType value from RFC7627 */ +# define TLSEXT_TYPE_extended_master_secret 23 + +/* ExtensionType value from RFC4507 */ +# define TLSEXT_TYPE_session_ticket 35 + +/* As defined for TLS1.3 */ +# define TLSEXT_TYPE_psk 41 +# define TLSEXT_TYPE_early_data 42 +# define TLSEXT_TYPE_supported_versions 43 +# define TLSEXT_TYPE_cookie 44 +# define TLSEXT_TYPE_psk_kex_modes 45 +# define TLSEXT_TYPE_certificate_authorities 47 +# define TLSEXT_TYPE_post_handshake_auth 49 +# define TLSEXT_TYPE_signature_algorithms_cert 50 +# define TLSEXT_TYPE_key_share 51 + +/* Temporary extension type */ +# define TLSEXT_TYPE_renegotiate 0xff01 + +# ifndef OPENSSL_NO_NEXTPROTONEG +/* This is not an IANA defined extension number */ +# define TLSEXT_TYPE_next_proto_neg 13172 +# endif + +/* NameType value from RFC3546 */ +# define TLSEXT_NAMETYPE_host_name 0 +/* status request value from RFC3546 */ +# define TLSEXT_STATUSTYPE_ocsp 1 + +/* ECPointFormat values from RFC4492 */ +# define TLSEXT_ECPOINTFORMAT_first 0 +# define TLSEXT_ECPOINTFORMAT_uncompressed 0 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 +# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 +# define TLSEXT_ECPOINTFORMAT_last 2 + +/* Signature and hash algorithms from RFC5246 */ +# define TLSEXT_signature_anonymous 0 +# define TLSEXT_signature_rsa 1 +# define TLSEXT_signature_dsa 2 +# define TLSEXT_signature_ecdsa 3 +# define TLSEXT_signature_gostr34102001 237 +# define TLSEXT_signature_gostr34102012_256 238 +# define TLSEXT_signature_gostr34102012_512 239 + +/* Total number of different signature algorithms */ +# define TLSEXT_signature_num 7 + +# define TLSEXT_hash_none 0 +# define TLSEXT_hash_md5 1 +# define TLSEXT_hash_sha1 2 +# define TLSEXT_hash_sha224 3 +# define TLSEXT_hash_sha256 4 +# define TLSEXT_hash_sha384 5 +# define TLSEXT_hash_sha512 6 +# define TLSEXT_hash_gostr3411 237 +# define TLSEXT_hash_gostr34112012_256 238 +# define TLSEXT_hash_gostr34112012_512 239 + +/* Total number of different digest algorithms */ + +# define TLSEXT_hash_num 10 + +/* Flag set for unrecognised algorithms */ +# define TLSEXT_nid_unknown 0x1000000 + +/* ECC curves */ + +# define TLSEXT_curve_P_256 23 +# define TLSEXT_curve_P_384 24 + +/* OpenSSL value to disable maximum fragment length extension */ +# define TLSEXT_max_fragment_length_DISABLED 0 +/* Allowed values for max fragment length extension */ +# define TLSEXT_max_fragment_length_512 1 +# define TLSEXT_max_fragment_length_1024 2 +# define TLSEXT_max_fragment_length_2048 3 +# define TLSEXT_max_fragment_length_4096 4 + +int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); +int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); + +# define TLSEXT_MAXLEN_host_name 255 + +__owur const char *SSL_get_servername(const SSL *s, const int type); +__owur int SSL_get_servername_type(const SSL *s); +/* + * SSL_export_keying_material exports a value derived from the master secret, + * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and + * optional context. (Since a zero length context is allowed, the |use_context| + * flag controls whether a context is included.) It returns 1 on success and + * 0 or -1 otherwise. + */ +__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, + const char *label, size_t llen, + const unsigned char *context, + size_t contextlen, int use_context); + +/* + * SSL_export_keying_material_early exports a value derived from the + * early exporter master secret, as specified in + * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes + * |olen| bytes to |out| given a label and optional context. It + * returns 1 on success and 0 otherwise. + */ +__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, + size_t olen, const char *label, + size_t llen, + const unsigned char *context, + size_t contextlen); + +int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); +int SSL_get_signature_type_nid(const SSL *s, int *pnid); + +int SSL_get_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +int SSL_get_shared_sigalgs(SSL *s, int idx, + int *psign, int *phash, int *psignandhash, + unsigned char *rsig, unsigned char *rhash); + +__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); + +# define SSL_set_tlsext_host_name(s,name) \ + SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ + (void *)name) + +# define SSL_set_tlsext_debug_callback(ssl, cb) \ + SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ + (void (*)(void))cb) + +# define SSL_set_tlsext_debug_arg(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) + +# define SSL_get_tlsext_status_type(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) + +# define SSL_set_tlsext_status_type(ssl, type) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) + +# define SSL_get_tlsext_status_exts(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) + +# define SSL_set_tlsext_status_exts(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) + +# define SSL_get_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_set_tlsext_status_ids(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) + +# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) + +# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ + SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) + +# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ + SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ + (void (*)(void))cb) + +# define SSL_TLSEXT_ERR_OK 0 +# define SSL_TLSEXT_ERR_ALERT_WARNING 1 +# define SSL_TLSEXT_ERR_ALERT_FATAL 2 +# define SSL_TLSEXT_ERR_NOACK 3 + +# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) + +# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) +# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) + +# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) +# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ + (void (*)(void))cb) + +# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) +# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) + +# define SSL_CTX_set_tlsext_status_type(ssl, type) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) + +# define SSL_CTX_get_tlsext_status_type(ssl) \ + SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) + +# define SSL_CTX_set_tlsext_ticket_key_cb(ssl, cb) \ + SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,\ + (void (*)(void))cb) + +# ifndef OPENSSL_NO_HEARTBEATS +# define SSL_DTLSEXT_HB_ENABLED 0x01 +# define SSL_DTLSEXT_HB_DONT_SEND_REQUESTS 0x02 +# define SSL_DTLSEXT_HB_DONT_RECV_REQUESTS 0x04 +# define SSL_get_dtlsext_heartbeat_pending(ssl) \ + SSL_ctrl(ssl,SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING,0,NULL) +# define SSL_set_dtlsext_heartbeat_no_requests(ssl, arg) \ + SSL_ctrl(ssl,SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS,arg,NULL) + +# if OPENSSL_API_COMPAT < 0x10100000L +# define SSL_CTRL_TLS_EXT_SEND_HEARTBEAT \ + SSL_CTRL_DTLS_EXT_SEND_HEARTBEAT +# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING \ + SSL_CTRL_GET_DTLS_EXT_HEARTBEAT_PENDING +# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS \ + SSL_CTRL_SET_DTLS_EXT_HEARTBEAT_NO_REQUESTS +# define SSL_TLSEXT_HB_ENABLED \ + SSL_DTLSEXT_HB_ENABLED +# define SSL_TLSEXT_HB_DONT_SEND_REQUESTS \ + SSL_DTLSEXT_HB_DONT_SEND_REQUESTS +# define SSL_TLSEXT_HB_DONT_RECV_REQUESTS \ + SSL_DTLSEXT_HB_DONT_RECV_REQUESTS +# define SSL_get_tlsext_heartbeat_pending(ssl) \ + SSL_get_dtlsext_heartbeat_pending(ssl) +# define SSL_set_tlsext_heartbeat_no_requests(ssl, arg) \ + SSL_set_dtlsext_heartbeat_no_requests(ssl,arg) +# endif +# endif + +/* PSK ciphersuites from 4279 */ +# define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A +# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D +# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E +# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 +# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 +# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 + +/* PSK ciphersuites from 5487 */ +# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 +# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB +# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC +# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD +# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE +# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF +# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 +# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 +# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 +# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C +# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D +# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E + +/* AES ciphersuites from RFC3268 */ +# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 +# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 +# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 +# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B +# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C +# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D +# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E +# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F +# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 + +/* TLS v1.2 ciphersuites */ +# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 +# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 +# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 +# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A +# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B +# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C +# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 +# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 +# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 +# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 +# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A +# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C +# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D +# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E +# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F +# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 +# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 +# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 +# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 +# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 +# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 +# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 +# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C +# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F +# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 +# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 +# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 +# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 +# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 +# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 +# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 +# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 +# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA +# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE +# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF + +# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 +# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 +# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 +# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 +# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 +# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 +# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 +# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 + +# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 +# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 +# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A + +# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B +# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C +# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D +# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E +# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F + +# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 +# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 +# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 + +# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 +# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 +# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 +# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 +# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 + +/* SRP ciphersuites from RFC 5054 */ +# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A +# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B +# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C +# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F +# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 +# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 +# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 + +/* ECDH HMAC based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B +# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C +# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D +# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E +# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F +# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 +# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 +# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 + +/* ECDHE PSK ciphersuites from RFC5489 */ +# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 +# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 + +# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 +# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 + +/* NULL PSK ciphersuites from RFC4785 */ +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A +# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 +# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 +# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 +# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 +# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 + +# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 +# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 +# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 +# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A +# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 +# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 +# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA +# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB +# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC +# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD +# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE + +/* TLS v1.3 ciphersuites */ +# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 +# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 +# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 +# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 +# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 +# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 +# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 +# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 +# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 +# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 +# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 +# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 +# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 +# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 +# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A +# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C +# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E +# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 +# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 +# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 +# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A +# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B +# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C +# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D +# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E +# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F + +/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ +# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" +# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" +# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" +# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" +# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" +# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" +# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" +# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" +# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" +# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" +# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" +# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" +# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" +# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" +# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" +# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" +# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" +# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" +# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" +# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" +# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" +# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" +# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" + + +/* + * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE + * ciphers names with "EDH" instead of "DHE". Going forward, we should be + * using DHE everywhere, though we may indefinitely maintain aliases for + * users or configurations that used "EDH" + */ +# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" + +# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" + +/* AES ciphersuites from RFC3268 */ +# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" +# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" + +# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" +# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" + +/* ECC ciphersuites from RFC4492 */ +# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" + +# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" + +# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" + +# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" +# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" +# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" +# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" + +/* PSK ciphersuites from RFC 4279 */ +# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" +# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" + +# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" +# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" +# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" + +/* PSK ciphersuites from RFC 5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" + +# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" +# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" +# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" + +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" + +# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" + +/* SRP ciphersuite from RFC 5054 */ +# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" +# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" +# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" + +/* Camellia ciphersuites from RFC4132 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" + +/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ +# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" + +# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" +# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" + +# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" + +/* SEED ciphersuites from RFC4162 */ +# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" +# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" +# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" +# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" +# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" +# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" + +/* TLS v1.2 ciphersuites */ +# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" +# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" +# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" + +/* TLS v1.2 GCM ciphersuites from RFC5288 */ +# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" +# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" +# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" + +/* CCM ciphersuites from RFC6655 */ +# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" +# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" + +# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" +# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" +# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" +# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" + +# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" +# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" +# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" + +/* CCM ciphersuites from RFC7251 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" + +/* ECDH HMAC based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" + +/* ECDH GCM based ciphersuites from RFC5289 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" + +/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ +# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" + +/* ECDHE PSK ciphersuites from RFC 5489 */ +# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" + +# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" + +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" +# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" + +/* Camellia-CBC ciphersuites from RFC6367 */ +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" + +/* draft-ietf-tls-chacha20-poly1305-03 */ +# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" +# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" +# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" +# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" + +/* Aria ciphersuites from RFC6209 */ +# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" +# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" +# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" +# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" +# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" +# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" + +# define TLS_CT_RSA_SIGN 1 +# define TLS_CT_DSS_SIGN 2 +# define TLS_CT_RSA_FIXED_DH 3 +# define TLS_CT_DSS_FIXED_DH 4 +# define TLS_CT_ECDSA_SIGN 64 +# define TLS_CT_RSA_FIXED_ECDH 65 +# define TLS_CT_ECDSA_FIXED_ECDH 66 +# define TLS_CT_GOST01_SIGN 22 +# define TLS_CT_GOST12_SIGN 238 +# define TLS_CT_GOST12_512_SIGN 239 + +/* + * when correcting this number, correct also SSL3_CT_NUMBER in ssl3.h (see + * comment there) + */ +# define TLS_CT_NUMBER 10 + +# if defined(SSL3_CT_NUMBER) +# if TLS_CT_NUMBER != SSL3_CT_NUMBER +# error "SSL/TLS CT_NUMBER values do not match" +# endif +# endif + +# define TLS1_FINISH_MAC_LENGTH 12 + +# define TLS_MD_MAX_CONST_SIZE 22 +# define TLS_MD_CLIENT_FINISH_CONST "client finished" +# define TLS_MD_CLIENT_FINISH_CONST_SIZE 15 +# define TLS_MD_SERVER_FINISH_CONST "server finished" +# define TLS_MD_SERVER_FINISH_CONST_SIZE 15 +# define TLS_MD_KEY_EXPANSION_CONST "key expansion" +# define TLS_MD_KEY_EXPANSION_CONST_SIZE 13 +# define TLS_MD_CLIENT_WRITE_KEY_CONST "client write key" +# define TLS_MD_CLIENT_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_SERVER_WRITE_KEY_CONST "server write key" +# define TLS_MD_SERVER_WRITE_KEY_CONST_SIZE 16 +# define TLS_MD_IV_BLOCK_CONST "IV block" +# define TLS_MD_IV_BLOCK_CONST_SIZE 8 +# define TLS_MD_MASTER_SECRET_CONST "master secret" +# define TLS_MD_MASTER_SECRET_CONST_SIZE 13 +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "extended master secret" +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE 22 + +# ifdef CHARSET_EBCDIC +# undef TLS_MD_CLIENT_FINISH_CONST +/* + * client finished + */ +# define TLS_MD_CLIENT_FINISH_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_FINISH_CONST +/* + * server finished + */ +# define TLS_MD_SERVER_FINISH_CONST "\x73\x65\x72\x76\x65\x72\x20\x66\x69\x6e\x69\x73\x68\x65\x64" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_KEY_EXPANSION_CONST +/* + * key expansion + */ +# define TLS_MD_KEY_EXPANSION_CONST "\x6b\x65\x79\x20\x65\x78\x70\x61\x6e\x73\x69\x6f\x6e" + +# undef TLS_MD_CLIENT_WRITE_KEY_CONST +/* + * client write key + */ +# define TLS_MD_CLIENT_WRITE_KEY_CONST "\x63\x6c\x69\x65\x6e\x74\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_SERVER_WRITE_KEY_CONST +/* + * server write key + */ +# define TLS_MD_SERVER_WRITE_KEY_CONST "\x73\x65\x72\x76\x65\x72\x20\x77\x72\x69\x74\x65\x20\x6b\x65\x79" + +# undef TLS_MD_IV_BLOCK_CONST +/* + * IV block + */ +# define TLS_MD_IV_BLOCK_CONST "\x49\x56\x20\x62\x6c\x6f\x63\x6b" + +# undef TLS_MD_MASTER_SECRET_CONST +/* + * master secret + */ +# define TLS_MD_MASTER_SECRET_CONST "\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# undef TLS_MD_EXTENDED_MASTER_SECRET_CONST +/* + * extended master secret + */ +# define TLS_MD_EXTENDED_MASTER_SECRET_CONST "\x65\x78\x74\x65\x6e\x64\x65\x64\x20\x6d\x61\x73\x74\x65\x72\x20\x73\x65\x63\x72\x65\x74" +# endif + +/* TLS Session Ticket extension struct */ +struct tls_session_ticket_ext_st { + unsigned short length; + void *data; +}; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/ts.h b/lib/openssl/include/openssl/ts.h new file mode 100644 index 0000000..3b58aa5 --- /dev/null +++ b/lib/openssl/include/openssl/ts.h @@ -0,0 +1,559 @@ +/* + * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TS_H +# define HEADER_TS_H + +# include + +# ifndef OPENSSL_NO_TS +# include +# include +# include +# include +# include +# include +# include +# include +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# include +# include + +typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; +typedef struct TS_req_st TS_REQ; +typedef struct TS_accuracy_st TS_ACCURACY; +typedef struct TS_tst_info_st TS_TST_INFO; + +/* Possible values for status. */ +# define TS_STATUS_GRANTED 0 +# define TS_STATUS_GRANTED_WITH_MODS 1 +# define TS_STATUS_REJECTION 2 +# define TS_STATUS_WAITING 3 +# define TS_STATUS_REVOCATION_WARNING 4 +# define TS_STATUS_REVOCATION_NOTIFICATION 5 + +/* Possible values for failure_info. */ +# define TS_INFO_BAD_ALG 0 +# define TS_INFO_BAD_REQUEST 2 +# define TS_INFO_BAD_DATA_FORMAT 5 +# define TS_INFO_TIME_NOT_AVAILABLE 14 +# define TS_INFO_UNACCEPTED_POLICY 15 +# define TS_INFO_UNACCEPTED_EXTENSION 16 +# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 +# define TS_INFO_SYSTEM_FAILURE 25 + + +typedef struct TS_status_info_st TS_STATUS_INFO; +typedef struct ESS_issuer_serial ESS_ISSUER_SERIAL; +typedef struct ESS_cert_id ESS_CERT_ID; +typedef struct ESS_signing_cert ESS_SIGNING_CERT; + +DEFINE_STACK_OF(ESS_CERT_ID) + +typedef struct ESS_cert_id_v2_st ESS_CERT_ID_V2; +typedef struct ESS_signing_cert_v2_st ESS_SIGNING_CERT_V2; + +DEFINE_STACK_OF(ESS_CERT_ID_V2) + +typedef struct TS_resp_st TS_RESP; + +TS_REQ *TS_REQ_new(void); +void TS_REQ_free(TS_REQ *a); +int i2d_TS_REQ(const TS_REQ *a, unsigned char **pp); +TS_REQ *d2i_TS_REQ(TS_REQ **a, const unsigned char **pp, long length); + +TS_REQ *TS_REQ_dup(TS_REQ *a); + +#ifndef OPENSSL_NO_STDIO +TS_REQ *d2i_TS_REQ_fp(FILE *fp, TS_REQ **a); +int i2d_TS_REQ_fp(FILE *fp, TS_REQ *a); +#endif +TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); +int i2d_TS_REQ_bio(BIO *fp, TS_REQ *a); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_new(void); +void TS_MSG_IMPRINT_free(TS_MSG_IMPRINT *a); +int i2d_TS_MSG_IMPRINT(const TS_MSG_IMPRINT *a, unsigned char **pp); +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT(TS_MSG_IMPRINT **a, + const unsigned char **pp, long length); + +TS_MSG_IMPRINT *TS_MSG_IMPRINT_dup(TS_MSG_IMPRINT *a); + +#ifndef OPENSSL_NO_STDIO +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_fp(FILE *fp, TS_MSG_IMPRINT *a); +#endif +TS_MSG_IMPRINT *d2i_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT **a); +int i2d_TS_MSG_IMPRINT_bio(BIO *bio, TS_MSG_IMPRINT *a); + +TS_RESP *TS_RESP_new(void); +void TS_RESP_free(TS_RESP *a); +int i2d_TS_RESP(const TS_RESP *a, unsigned char **pp); +TS_RESP *d2i_TS_RESP(TS_RESP **a, const unsigned char **pp, long length); +TS_TST_INFO *PKCS7_to_TS_TST_INFO(PKCS7 *token); +TS_RESP *TS_RESP_dup(TS_RESP *a); + +#ifndef OPENSSL_NO_STDIO +TS_RESP *d2i_TS_RESP_fp(FILE *fp, TS_RESP **a); +int i2d_TS_RESP_fp(FILE *fp, TS_RESP *a); +#endif +TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); +int i2d_TS_RESP_bio(BIO *bio, TS_RESP *a); + +TS_STATUS_INFO *TS_STATUS_INFO_new(void); +void TS_STATUS_INFO_free(TS_STATUS_INFO *a); +int i2d_TS_STATUS_INFO(const TS_STATUS_INFO *a, unsigned char **pp); +TS_STATUS_INFO *d2i_TS_STATUS_INFO(TS_STATUS_INFO **a, + const unsigned char **pp, long length); +TS_STATUS_INFO *TS_STATUS_INFO_dup(TS_STATUS_INFO *a); + +TS_TST_INFO *TS_TST_INFO_new(void); +void TS_TST_INFO_free(TS_TST_INFO *a); +int i2d_TS_TST_INFO(const TS_TST_INFO *a, unsigned char **pp); +TS_TST_INFO *d2i_TS_TST_INFO(TS_TST_INFO **a, const unsigned char **pp, + long length); +TS_TST_INFO *TS_TST_INFO_dup(TS_TST_INFO *a); + +#ifndef OPENSSL_NO_STDIO +TS_TST_INFO *d2i_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO **a); +int i2d_TS_TST_INFO_fp(FILE *fp, TS_TST_INFO *a); +#endif +TS_TST_INFO *d2i_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO **a); +int i2d_TS_TST_INFO_bio(BIO *bio, TS_TST_INFO *a); + +TS_ACCURACY *TS_ACCURACY_new(void); +void TS_ACCURACY_free(TS_ACCURACY *a); +int i2d_TS_ACCURACY(const TS_ACCURACY *a, unsigned char **pp); +TS_ACCURACY *d2i_TS_ACCURACY(TS_ACCURACY **a, const unsigned char **pp, + long length); +TS_ACCURACY *TS_ACCURACY_dup(TS_ACCURACY *a); + +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_new(void); +void ESS_ISSUER_SERIAL_free(ESS_ISSUER_SERIAL *a); +int i2d_ESS_ISSUER_SERIAL(const ESS_ISSUER_SERIAL *a, unsigned char **pp); +ESS_ISSUER_SERIAL *d2i_ESS_ISSUER_SERIAL(ESS_ISSUER_SERIAL **a, + const unsigned char **pp, + long length); +ESS_ISSUER_SERIAL *ESS_ISSUER_SERIAL_dup(ESS_ISSUER_SERIAL *a); + +ESS_CERT_ID *ESS_CERT_ID_new(void); +void ESS_CERT_ID_free(ESS_CERT_ID *a); +int i2d_ESS_CERT_ID(const ESS_CERT_ID *a, unsigned char **pp); +ESS_CERT_ID *d2i_ESS_CERT_ID(ESS_CERT_ID **a, const unsigned char **pp, + long length); +ESS_CERT_ID *ESS_CERT_ID_dup(ESS_CERT_ID *a); + +ESS_SIGNING_CERT *ESS_SIGNING_CERT_new(void); +void ESS_SIGNING_CERT_free(ESS_SIGNING_CERT *a); +int i2d_ESS_SIGNING_CERT(const ESS_SIGNING_CERT *a, unsigned char **pp); +ESS_SIGNING_CERT *d2i_ESS_SIGNING_CERT(ESS_SIGNING_CERT **a, + const unsigned char **pp, long length); +ESS_SIGNING_CERT *ESS_SIGNING_CERT_dup(ESS_SIGNING_CERT *a); + +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_new(void); +void ESS_CERT_ID_V2_free(ESS_CERT_ID_V2 *a); +int i2d_ESS_CERT_ID_V2(const ESS_CERT_ID_V2 *a, unsigned char **pp); +ESS_CERT_ID_V2 *d2i_ESS_CERT_ID_V2(ESS_CERT_ID_V2 **a, + const unsigned char **pp, long length); +ESS_CERT_ID_V2 *ESS_CERT_ID_V2_dup(ESS_CERT_ID_V2 *a); + +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_new(void); +void ESS_SIGNING_CERT_V2_free(ESS_SIGNING_CERT_V2 *a); +int i2d_ESS_SIGNING_CERT_V2(const ESS_SIGNING_CERT_V2 *a, unsigned char **pp); +ESS_SIGNING_CERT_V2 *d2i_ESS_SIGNING_CERT_V2(ESS_SIGNING_CERT_V2 **a, + const unsigned char **pp, + long length); +ESS_SIGNING_CERT_V2 *ESS_SIGNING_CERT_V2_dup(ESS_SIGNING_CERT_V2 *a); + +int TS_REQ_set_version(TS_REQ *a, long version); +long TS_REQ_get_version(const TS_REQ *a); + +int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); +const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); + +const STACK_OF(ASN1_UTF8STRING) * +TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); + +const ASN1_BIT_STRING * +TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); + +int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); + +int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); +X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); + +int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); +ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); + +int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); +ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); + +int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); + +int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); +int TS_REQ_get_cert_req(const TS_REQ *a); + +STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); +void TS_REQ_ext_free(TS_REQ *a); +int TS_REQ_get_ext_count(TS_REQ *a); +int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); +int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); +int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); +X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); +X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); +int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); +void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); + +/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ + +int TS_REQ_print_bio(BIO *bio, TS_REQ *a); + +/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ + +int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); +TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); + +/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ +void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); +PKCS7 *TS_RESP_get_token(TS_RESP *a); +TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); + +int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); +long TS_TST_INFO_get_version(const TS_TST_INFO *a); + +int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); +ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); + +int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); +TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); + +int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); +const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); + +int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); +const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); + +int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); +TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); + +int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); +const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); + +int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); +const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); + +int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); +const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); + +int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); +int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); + +int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); +const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); + +int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); +GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); + +STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); +void TS_TST_INFO_ext_free(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); +int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); +int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, + int lastpos); +int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); +X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); +X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); +int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); +void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); + +/* + * Declarations related to response generation, defined in ts/ts_resp_sign.c. + */ + +/* Optional flags for response generation. */ + +/* Don't include the TSA name in response. */ +# define TS_TSA_NAME 0x01 + +/* Set ordering to true in response. */ +# define TS_ORDERING 0x02 + +/* + * Include the signer certificate and the other specified certificates in + * the ESS signing certificate attribute beside the PKCS7 signed data. + * Only the signer certificates is included by default. + */ +# define TS_ESS_CERT_ID_CHAIN 0x04 + +/* Forward declaration. */ +struct TS_resp_ctx; + +/* This must return a unique number less than 160 bits long. */ +typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); + +/* + * This must return the seconds and microseconds since Jan 1, 1970 in the sec + * and usec variables allocated by the caller. Return non-zero for success + * and zero for failure. + */ +typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, + long *usec); + +/* + * This must process the given extension. It can modify the TS_TST_INFO + * object of the context. Return values: !0 (processed), 0 (error, it must + * set the status info/failure info of the response). + */ +typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, + void *); + +typedef struct TS_resp_ctx TS_RESP_CTX; + +DEFINE_STACK_OF_CONST(EVP_MD) + +/* Creates a response context that can be used for generating responses. */ +TS_RESP_CTX *TS_RESP_CTX_new(void); +void TS_RESP_CTX_free(TS_RESP_CTX *ctx); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); + +int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, + const EVP_MD *signer_digest); +int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* This parameter must be set. */ +int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); + +/* No additional certs are included in the response by default. */ +int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); + +/* + * Adds a new acceptable policy, only the default policy is accepted by + * default. + */ +int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *policy); + +/* + * Adds a new acceptable message digest. Note that no message digests are + * accepted by default. The md argument is shared with the caller. + */ +int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); + +/* Accuracy is not included by default. */ +int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, + int secs, int millis, int micros); + +/* + * Clock precision digits, i.e. the number of decimal digits: '0' means sec, + * '3' msec, '6' usec, and so on. Default is 0. + */ +int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, + unsigned clock_precision_digits); +/* At most we accept usec precision. */ +# define TS_MAX_CLOCK_PRECISION_DIGITS 6 + +/* Maximum status message length */ +# define TS_MAX_STATUS_LENGTH (1024 * 1024) + +/* No flags are set by default. */ +void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); + +/* Default callback always returns a constant. */ +void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); + +/* Default callback uses the gettimeofday() and gmtime() system calls. */ +void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); + +/* + * Default callback rejects all extensions. The extension callback is called + * when the TS_TST_INFO object is already set up and not signed yet. + */ +/* FIXME: extension handling is not tested yet. */ +void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, + TS_extension_cb cb, void *data); + +/* The following methods can be used in the callbacks. */ +int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, + int status, const char *text); + +/* Sets the status info only if it is still TS_STATUS_GRANTED. */ +int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, + int status, const char *text); + +int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); + +/* The get methods below can be used in the extension callback. */ +TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); + +TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); + +/* + * Creates the signed TS_TST_INFO and puts it in TS_RESP. + * In case of errors it sets the status info properly. + * Returns NULL only in case of memory allocation/fatal error. + */ +TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); + +/* + * Declarations related to response verification, + * they are defined in ts/ts_resp_verify.c. + */ + +int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, + X509_STORE *store, X509 **signer_out); + +/* Context structure for the generic verify method. */ + +/* Verify the signer's certificate and the signature of the response. */ +# define TS_VFY_SIGNATURE (1u << 0) +/* Verify the version number of the response. */ +# define TS_VFY_VERSION (1u << 1) +/* Verify if the policy supplied by the user matches the policy of the TSA. */ +# define TS_VFY_POLICY (1u << 2) +/* + * Verify the message imprint provided by the user. This flag should not be + * specified with TS_VFY_DATA. + */ +# define TS_VFY_IMPRINT (1u << 3) +/* + * Verify the message imprint computed by the verify method from the user + * provided data and the MD algorithm of the response. This flag should not + * be specified with TS_VFY_IMPRINT. + */ +# define TS_VFY_DATA (1u << 4) +/* Verify the nonce value. */ +# define TS_VFY_NONCE (1u << 5) +/* Verify if the TSA name field matches the signer certificate. */ +# define TS_VFY_SIGNER (1u << 6) +/* Verify if the TSA name field equals to the user provided name. */ +# define TS_VFY_TSA_NAME (1u << 7) + +/* You can use the following convenience constants. */ +# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_IMPRINT \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) +# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ + | TS_VFY_VERSION \ + | TS_VFY_POLICY \ + | TS_VFY_DATA \ + | TS_VFY_NONCE \ + | TS_VFY_SIGNER \ + | TS_VFY_TSA_NAME) + +typedef struct TS_verify_ctx TS_VERIFY_CTX; + +int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); +int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); + +/* + * Declarations related to response verification context, + */ +TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); +void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); +void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); +int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); +int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); +BIO *TS_VERIFY_CTX_set_data(TS_VERIFY_CTX *ctx, BIO *b); +unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, + unsigned char *hexstr, long len); +X509_STORE *TS_VERIFY_CTX_set_store(TS_VERIFY_CTX *ctx, X509_STORE *s); +STACK_OF(X509) *TS_VERIFY_CTS_set_certs(TS_VERIFY_CTX *ctx, STACK_OF(X509) *certs); + +/*- + * If ctx is NULL, it allocates and returns a new object, otherwise + * it returns ctx. It initialises all the members as follows: + * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) + * certs = NULL + * store = NULL + * policy = policy from the request or NULL if absent (in this case + * TS_VFY_POLICY is cleared from flags as well) + * md_alg = MD algorithm from request + * imprint, imprint_len = imprint from request + * data = NULL + * nonce, nonce_len = nonce from the request or NULL if absent (in this case + * TS_VFY_NONCE is cleared from flags as well) + * tsa_name = NULL + * Important: after calling this method TS_VFY_SIGNATURE should be added! + */ +TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); + +/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ + +int TS_RESP_print_bio(BIO *bio, TS_RESP *a); +int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); +int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); + +/* Common utility functions defined in ts/ts_lib.c */ + +int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); +int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); +int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); +int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); +int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); + +/* + * Function declarations for handling configuration options, defined in + * ts/ts_conf.c + */ + +X509 *TS_CONF_load_cert(const char *file); +STACK_OF(X509) *TS_CONF_load_certs(const char *file); +EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); +const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); +int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, + TS_RESP_CTX *ctx); +#ifndef OPENSSL_NO_ENGINE +int TS_CONF_set_crypto_device(CONF *conf, const char *section, + const char *device); +int TS_CONF_set_default_engine(const char *name); +#endif +int TS_CONF_set_signer_cert(CONF *conf, const char *section, + const char *cert, TS_RESP_CTX *ctx); +int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_key(CONF *conf, const char *section, + const char *key, const char *pass, + TS_RESP_CTX *ctx); +int TS_CONF_set_signer_digest(CONF *conf, const char *section, + const char *md, TS_RESP_CTX *ctx); +int TS_CONF_set_def_policy(CONF *conf, const char *section, + const char *policy, TS_RESP_CTX *ctx); +int TS_CONF_set_policies(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_digests(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_accuracy(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_clock_precision_digits(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +int TS_CONF_set_ordering(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_tsa_name(CONF *conf, const char *section, TS_RESP_CTX *ctx); +int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, + TS_RESP_CTX *ctx); +int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, + TS_RESP_CTX *ctx); + +# ifdef __cplusplus +} +# endif +# endif +#endif diff --git a/lib/openssl/include/openssl/tserr.h b/lib/openssl/include/openssl/tserr.h new file mode 100644 index 0000000..07f2333 --- /dev/null +++ b/lib/openssl/include/openssl/tserr.h @@ -0,0 +1,132 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TSERR_H +# define HEADER_TSERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# include + +# ifndef OPENSSL_NO_TS + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_TS_strings(void); + +/* + * TS function codes. + */ +# define TS_F_DEF_SERIAL_CB 110 +# define TS_F_DEF_TIME_CB 111 +# define TS_F_ESS_ADD_SIGNING_CERT 112 +# define TS_F_ESS_ADD_SIGNING_CERT_V2 147 +# define TS_F_ESS_CERT_ID_NEW_INIT 113 +# define TS_F_ESS_CERT_ID_V2_NEW_INIT 156 +# define TS_F_ESS_SIGNING_CERT_NEW_INIT 114 +# define TS_F_ESS_SIGNING_CERT_V2_NEW_INIT 157 +# define TS_F_INT_TS_RESP_VERIFY_TOKEN 149 +# define TS_F_PKCS7_TO_TS_TST_INFO 148 +# define TS_F_TS_ACCURACY_SET_MICROS 115 +# define TS_F_TS_ACCURACY_SET_MILLIS 116 +# define TS_F_TS_ACCURACY_SET_SECONDS 117 +# define TS_F_TS_CHECK_IMPRINTS 100 +# define TS_F_TS_CHECK_NONCES 101 +# define TS_F_TS_CHECK_POLICY 102 +# define TS_F_TS_CHECK_SIGNING_CERTS 103 +# define TS_F_TS_CHECK_STATUS_INFO 104 +# define TS_F_TS_COMPUTE_IMPRINT 145 +# define TS_F_TS_CONF_INVALID 151 +# define TS_F_TS_CONF_LOAD_CERT 153 +# define TS_F_TS_CONF_LOAD_CERTS 154 +# define TS_F_TS_CONF_LOAD_KEY 155 +# define TS_F_TS_CONF_LOOKUP_FAIL 152 +# define TS_F_TS_CONF_SET_DEFAULT_ENGINE 146 +# define TS_F_TS_GET_STATUS_TEXT 105 +# define TS_F_TS_MSG_IMPRINT_SET_ALGO 118 +# define TS_F_TS_REQ_SET_MSG_IMPRINT 119 +# define TS_F_TS_REQ_SET_NONCE 120 +# define TS_F_TS_REQ_SET_POLICY_ID 121 +# define TS_F_TS_RESP_CREATE_RESPONSE 122 +# define TS_F_TS_RESP_CREATE_TST_INFO 123 +# define TS_F_TS_RESP_CTX_ADD_FAILURE_INFO 124 +# define TS_F_TS_RESP_CTX_ADD_MD 125 +# define TS_F_TS_RESP_CTX_ADD_POLICY 126 +# define TS_F_TS_RESP_CTX_NEW 127 +# define TS_F_TS_RESP_CTX_SET_ACCURACY 128 +# define TS_F_TS_RESP_CTX_SET_CERTS 129 +# define TS_F_TS_RESP_CTX_SET_DEF_POLICY 130 +# define TS_F_TS_RESP_CTX_SET_SIGNER_CERT 131 +# define TS_F_TS_RESP_CTX_SET_STATUS_INFO 132 +# define TS_F_TS_RESP_GET_POLICY 133 +# define TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION 134 +# define TS_F_TS_RESP_SET_STATUS_INFO 135 +# define TS_F_TS_RESP_SET_TST_INFO 150 +# define TS_F_TS_RESP_SIGN 136 +# define TS_F_TS_RESP_VERIFY_SIGNATURE 106 +# define TS_F_TS_TST_INFO_SET_ACCURACY 137 +# define TS_F_TS_TST_INFO_SET_MSG_IMPRINT 138 +# define TS_F_TS_TST_INFO_SET_NONCE 139 +# define TS_F_TS_TST_INFO_SET_POLICY_ID 140 +# define TS_F_TS_TST_INFO_SET_SERIAL 141 +# define TS_F_TS_TST_INFO_SET_TIME 142 +# define TS_F_TS_TST_INFO_SET_TSA 143 +# define TS_F_TS_VERIFY 108 +# define TS_F_TS_VERIFY_CERT 109 +# define TS_F_TS_VERIFY_CTX_NEW 144 + +/* + * TS reason codes. + */ +# define TS_R_BAD_PKCS7_TYPE 132 +# define TS_R_BAD_TYPE 133 +# define TS_R_CANNOT_LOAD_CERT 137 +# define TS_R_CANNOT_LOAD_KEY 138 +# define TS_R_CERTIFICATE_VERIFY_ERROR 100 +# define TS_R_COULD_NOT_SET_ENGINE 127 +# define TS_R_COULD_NOT_SET_TIME 115 +# define TS_R_DETACHED_CONTENT 134 +# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 +# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 +# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 +# define TS_R_INVALID_NULL_POINTER 102 +# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 +# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 +# define TS_R_NONCE_MISMATCH 104 +# define TS_R_NONCE_NOT_RETURNED 105 +# define TS_R_NO_CONTENT 106 +# define TS_R_NO_TIME_STAMP_TOKEN 107 +# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 +# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 +# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 +# define TS_R_POLICY_MISMATCH 108 +# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 +# define TS_R_RESPONSE_SETUP_ERROR 121 +# define TS_R_SIGNATURE_FAILURE 109 +# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 +# define TS_R_TIME_SYSCALL_ERROR 122 +# define TS_R_TOKEN_NOT_PRESENT 130 +# define TS_R_TOKEN_PRESENT 131 +# define TS_R_TSA_NAME_MISMATCH 111 +# define TS_R_TSA_UNTRUSTED 112 +# define TS_R_TST_INFO_SETUP_ERROR 123 +# define TS_R_TS_DATASIGN 124 +# define TS_R_UNACCEPTABLE_POLICY 125 +# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 +# define TS_R_UNSUPPORTED_VERSION 113 +# define TS_R_VAR_BAD_VALUE 135 +# define TS_R_VAR_LOOKUP_FAILURE 136 +# define TS_R_WRONG_CONTENT_TYPE 114 + +# endif +#endif diff --git a/lib/openssl/include/openssl/txt_db.h b/lib/openssl/include/openssl/txt_db.h new file mode 100644 index 0000000..ec981a4 --- /dev/null +++ b/lib/openssl/include/openssl/txt_db.h @@ -0,0 +1,57 @@ +/* + * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_TXT_DB_H +# define HEADER_TXT_DB_H + +# include +# include +# include +# include + +# define DB_ERROR_OK 0 +# define DB_ERROR_MALLOC 1 +# define DB_ERROR_INDEX_CLASH 2 +# define DB_ERROR_INDEX_OUT_OF_RANGE 3 +# define DB_ERROR_NO_INDEX 4 +# define DB_ERROR_INSERT_INDEX_CLASH 5 +# define DB_ERROR_WRONG_NUM_FIELDS 6 + +#ifdef __cplusplus +extern "C" { +#endif + +typedef OPENSSL_STRING *OPENSSL_PSTRING; +DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) + +typedef struct txt_db_st { + int num_fields; + STACK_OF(OPENSSL_PSTRING) *data; + LHASH_OF(OPENSSL_STRING) **index; + int (**qual) (OPENSSL_STRING *); + long error; + long arg1; + long arg2; + OPENSSL_STRING *arg_row; +} TXT_DB; + +TXT_DB *TXT_DB_read(BIO *in, int num); +long TXT_DB_write(BIO *out, TXT_DB *db); +int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), + OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); +void TXT_DB_free(TXT_DB *db); +OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, + OPENSSL_STRING *value); +int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/openssl/include/openssl/ui.h b/lib/openssl/include/openssl/ui.h new file mode 100644 index 0000000..7c721ec --- /dev/null +++ b/lib/openssl/include/openssl/ui.h @@ -0,0 +1,368 @@ +/* + * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UI_H +# define HEADER_UI_H + +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# endif +# include +# include +# include +# include + +/* For compatibility reasons, the macro OPENSSL_NO_UI is currently retained */ +# if OPENSSL_API_COMPAT < 0x10200000L +# ifdef OPENSSL_NO_UI_CONSOLE +# define OPENSSL_NO_UI +# endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* + * All the following functions return -1 or NULL on error and in some cases + * (UI_process()) -2 if interrupted or in some other way cancelled. When + * everything is fine, they return 0, a positive value or a non-NULL pointer, + * all depending on their purpose. + */ + +/* Creators and destructor. */ +UI *UI_new(void); +UI *UI_new_method(const UI_METHOD *method); +void UI_free(UI *ui); + +/*- + The following functions are used to add strings to be printed and prompt + strings to prompt for data. The names are UI_{add,dup}__string + and UI_{add,dup}_input_boolean. + + UI_{add,dup}__string have the following meanings: + add add a text or prompt string. The pointers given to these + functions are used verbatim, no copying is done. + dup make a copy of the text or prompt string, then add the copy + to the collection of strings in the user interface. + + The function is a name for the functionality that the given + string shall be used for. It can be one of: + input use the string as data prompt. + verify use the string as verification prompt. This + is used to verify a previous input. + info use the string for informational output. + error use the string for error output. + Honestly, there's currently no difference between info and error for the + moment. + + UI_{add,dup}_input_boolean have the same semantics for "add" and "dup", + and are typically used when one wants to prompt for a yes/no response. + + All of the functions in this group take a UI and a prompt string. + The string input and verify addition functions also take a flag argument, + a buffer for the result to end up with, a minimum input size and a maximum + input size (the result buffer MUST be large enough to be able to contain + the maximum number of characters). Additionally, the verify addition + functions takes another buffer to compare the result against. + The boolean input functions take an action description string (which should + be safe to ignore if the expected user action is obvious, for example with + a dialog box with an OK button and a Cancel button), a string of acceptable + characters to mean OK and to mean Cancel. The two last strings are checked + to make sure they don't have common characters. Additionally, the same + flag argument as for the string input is taken, as well as a result buffer. + The result buffer is required to be at least one byte long. Depending on + the answer, the first character from the OK or the Cancel character strings + will be stored in the first byte of the result buffer. No NUL will be + added, so the result is *not* a string. + + On success, the all return an index of the added information. That index + is useful when retrieving results with UI_get0_result(). */ +int UI_add_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_dup_input_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize); +int UI_add_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_dup_verify_string(UI *ui, const char *prompt, int flags, + char *result_buf, int minsize, int maxsize, + const char *test_buf); +int UI_add_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_dup_input_boolean(UI *ui, const char *prompt, const char *action_desc, + const char *ok_chars, const char *cancel_chars, + int flags, char *result_buf); +int UI_add_info_string(UI *ui, const char *text); +int UI_dup_info_string(UI *ui, const char *text); +int UI_add_error_string(UI *ui, const char *text); +int UI_dup_error_string(UI *ui, const char *text); + +/* These are the possible flags. They can be or'ed together. */ +/* Use to have echoing of input */ +# define UI_INPUT_FLAG_ECHO 0x01 +/* + * Use a default password. Where that password is found is completely up to + * the application, it might for example be in the user data set with + * UI_add_user_data(). It is not recommended to have more than one input in + * each UI being marked with this flag, or the application might get + * confused. + */ +# define UI_INPUT_FLAG_DEFAULT_PWD 0x02 + +/*- + * The user of these routines may want to define flags of their own. The core + * UI won't look at those, but will pass them on to the method routines. They + * must use higher bits so they don't get confused with the UI bits above. + * UI_INPUT_FLAG_USER_BASE tells which is the lowest bit to use. A good + * example of use is this: + * + * #define MY_UI_FLAG1 (0x01 << UI_INPUT_FLAG_USER_BASE) + * +*/ +# define UI_INPUT_FLAG_USER_BASE 16 + +/*- + * The following function helps construct a prompt. object_desc is a + * textual short description of the object, for example "pass phrase", + * and object_name is the name of the object (might be a card name or + * a file name. + * The returned string shall always be allocated on the heap with + * OPENSSL_malloc(), and need to be free'd with OPENSSL_free(). + * + * If the ui_method doesn't contain a pointer to a user-defined prompt + * constructor, a default string is built, looking like this: + * + * "Enter {object_desc} for {object_name}:" + * + * So, if object_desc has the value "pass phrase" and object_name has + * the value "foo.key", the resulting string is: + * + * "Enter pass phrase for foo.key:" +*/ +char *UI_construct_prompt(UI *ui_method, + const char *object_desc, const char *object_name); + +/* + * The following function is used to store a pointer to user-specific data. + * Any previous such pointer will be returned and replaced. + * + * For callback purposes, this function makes a lot more sense than using + * ex_data, since the latter requires that different parts of OpenSSL or + * applications share the same ex_data index. + * + * Note that the UI_OpenSSL() method completely ignores the user data. Other + * methods may not, however. + */ +void *UI_add_user_data(UI *ui, void *user_data); +/* + * Alternatively, this function is used to duplicate the user data. + * This uses the duplicator method function. The destroy function will + * be used to free the user data in this case. + */ +int UI_dup_user_data(UI *ui, void *user_data); +/* We need a user data retrieving function as well. */ +void *UI_get0_user_data(UI *ui); + +/* Return the result associated with a prompt given with the index i. */ +const char *UI_get0_result(UI *ui, int i); +int UI_get_result_length(UI *ui, int i); + +/* When all strings have been added, process the whole thing. */ +int UI_process(UI *ui); + +/* + * Give a user interface parameterised control commands. This can be used to + * send down an integer, a data pointer or a function pointer, as well as be + * used to get information from a UI. + */ +int UI_ctrl(UI *ui, int cmd, long i, void *p, void (*f) (void)); + +/* The commands */ +/* + * Use UI_CONTROL_PRINT_ERRORS with the value 1 to have UI_process print the + * OpenSSL error stack before printing any info or added error messages and + * before any prompting. + */ +# define UI_CTRL_PRINT_ERRORS 1 +/* + * Check if a UI_process() is possible to do again with the same instance of + * a user interface. This makes UI_ctrl() return 1 if it is redoable, and 0 + * if not. + */ +# define UI_CTRL_IS_REDOABLE 2 + +/* Some methods may use extra data */ +# define UI_set_app_data(s,arg) UI_set_ex_data(s,0,arg) +# define UI_get_app_data(s) UI_get_ex_data(s,0) + +# define UI_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_UI, l, p, newf, dupf, freef) +int UI_set_ex_data(UI *r, int idx, void *arg); +void *UI_get_ex_data(UI *r, int idx); + +/* Use specific methods instead of the built-in one */ +void UI_set_default_method(const UI_METHOD *meth); +const UI_METHOD *UI_get_default_method(void); +const UI_METHOD *UI_get_method(UI *ui); +const UI_METHOD *UI_set_method(UI *ui, const UI_METHOD *meth); + +# ifndef OPENSSL_NO_UI_CONSOLE + +/* The method with all the built-in thingies */ +UI_METHOD *UI_OpenSSL(void); + +# endif + +/* + * NULL method. Literally does nothing, but may serve as a placeholder + * to avoid internal default. + */ +const UI_METHOD *UI_null(void); + +/* ---------- For method writers ---------- */ +/*- + A method contains a number of functions that implement the low level + of the User Interface. The functions are: + + an opener This function starts a session, maybe by opening + a channel to a tty, or by opening a window. + a writer This function is called to write a given string, + maybe to the tty, maybe as a field label in a + window. + a flusher This function is called to flush everything that + has been output so far. It can be used to actually + display a dialog box after it has been built. + a reader This function is called to read a given prompt, + maybe from the tty, maybe from a field in a + window. Note that it's called with all string + structures, not only the prompt ones, so it must + check such things itself. + a closer This function closes the session, maybe by closing + the channel to the tty, or closing the window. + + All these functions are expected to return: + + 0 on error. + 1 on success. + -1 on out-of-band events, for example if some prompting has + been canceled (by pressing Ctrl-C, for example). This is + only checked when returned by the flusher or the reader. + + The way this is used, the opener is first called, then the writer for all + strings, then the flusher, then the reader for all strings and finally the + closer. Note that if you want to prompt from a terminal or other command + line interface, the best is to have the reader also write the prompts + instead of having the writer do it. If you want to prompt from a dialog + box, the writer can be used to build up the contents of the box, and the + flusher to actually display the box and run the event loop until all data + has been given, after which the reader only grabs the given data and puts + them back into the UI strings. + + All method functions take a UI as argument. Additionally, the writer and + the reader take a UI_STRING. +*/ + +/* + * The UI_STRING type is the data structure that contains all the needed info + * about a string or a prompt, including test data for a verification prompt. + */ +typedef struct ui_string_st UI_STRING; +DEFINE_STACK_OF(UI_STRING) + +/* + * The different types of strings that are currently supported. This is only + * needed by method authors. + */ +enum UI_string_types { + UIT_NONE = 0, + UIT_PROMPT, /* Prompt for a string */ + UIT_VERIFY, /* Prompt for a string and verify */ + UIT_BOOLEAN, /* Prompt for a yes/no response */ + UIT_INFO, /* Send info to the user */ + UIT_ERROR /* Send an error message to the user */ +}; + +/* Create and manipulate methods */ +UI_METHOD *UI_create_method(const char *name); +void UI_destroy_method(UI_METHOD *ui_method); +int UI_method_set_opener(UI_METHOD *method, int (*opener) (UI *ui)); +int UI_method_set_writer(UI_METHOD *method, + int (*writer) (UI *ui, UI_STRING *uis)); +int UI_method_set_flusher(UI_METHOD *method, int (*flusher) (UI *ui)); +int UI_method_set_reader(UI_METHOD *method, + int (*reader) (UI *ui, UI_STRING *uis)); +int UI_method_set_closer(UI_METHOD *method, int (*closer) (UI *ui)); +int UI_method_set_data_duplicator(UI_METHOD *method, + void *(*duplicator) (UI *ui, void *ui_data), + void (*destructor)(UI *ui, void *ui_data)); +int UI_method_set_prompt_constructor(UI_METHOD *method, + char *(*prompt_constructor) (UI *ui, + const char + *object_desc, + const char + *object_name)); +int UI_method_set_ex_data(UI_METHOD *method, int idx, void *data); +int (*UI_method_get_opener(const UI_METHOD *method)) (UI *); +int (*UI_method_get_writer(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_flusher(const UI_METHOD *method)) (UI *); +int (*UI_method_get_reader(const UI_METHOD *method)) (UI *, UI_STRING *); +int (*UI_method_get_closer(const UI_METHOD *method)) (UI *); +char *(*UI_method_get_prompt_constructor(const UI_METHOD *method)) + (UI *, const char *, const char *); +void *(*UI_method_get_data_duplicator(const UI_METHOD *method)) (UI *, void *); +void (*UI_method_get_data_destructor(const UI_METHOD *method)) (UI *, void *); +const void *UI_method_get_ex_data(const UI_METHOD *method, int idx); + +/* + * The following functions are helpers for method writers to access relevant + * data from a UI_STRING. + */ + +/* Return type of the UI_STRING */ +enum UI_string_types UI_get_string_type(UI_STRING *uis); +/* Return input flags of the UI_STRING */ +int UI_get_input_flags(UI_STRING *uis); +/* Return the actual string to output (the prompt, info or error) */ +const char *UI_get0_output_string(UI_STRING *uis); +/* + * Return the optional action string to output (the boolean prompt + * instruction) + */ +const char *UI_get0_action_string(UI_STRING *uis); +/* Return the result of a prompt */ +const char *UI_get0_result_string(UI_STRING *uis); +int UI_get_result_string_length(UI_STRING *uis); +/* + * Return the string to test the result against. Only useful with verifies. + */ +const char *UI_get0_test_string(UI_STRING *uis); +/* Return the required minimum size of the result */ +int UI_get_result_minsize(UI_STRING *uis); +/* Return the required maximum size of the result */ +int UI_get_result_maxsize(UI_STRING *uis); +/* Set the result of a UI_STRING. */ +int UI_set_result(UI *ui, UI_STRING *uis, const char *result); +int UI_set_result_ex(UI *ui, UI_STRING *uis, const char *result, int len); + +/* A couple of popular utility functions */ +int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, + int verify); +int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, + int verify); +UI_METHOD *UI_UTIL_wrap_read_pem_callback(pem_password_cb *cb, int rwflag); + + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/uierr.h b/lib/openssl/include/openssl/uierr.h new file mode 100644 index 0000000..bd68864 --- /dev/null +++ b/lib/openssl/include/openssl/uierr.h @@ -0,0 +1,65 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_UIERR_H +# define HEADER_UIERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_UI_strings(void); + +/* + * UI function codes. + */ +# define UI_F_CLOSE_CONSOLE 115 +# define UI_F_ECHO_CONSOLE 116 +# define UI_F_GENERAL_ALLOCATE_BOOLEAN 108 +# define UI_F_GENERAL_ALLOCATE_PROMPT 109 +# define UI_F_NOECHO_CONSOLE 117 +# define UI_F_OPEN_CONSOLE 114 +# define UI_F_UI_CONSTRUCT_PROMPT 121 +# define UI_F_UI_CREATE_METHOD 112 +# define UI_F_UI_CTRL 111 +# define UI_F_UI_DUP_ERROR_STRING 101 +# define UI_F_UI_DUP_INFO_STRING 102 +# define UI_F_UI_DUP_INPUT_BOOLEAN 110 +# define UI_F_UI_DUP_INPUT_STRING 103 +# define UI_F_UI_DUP_USER_DATA 118 +# define UI_F_UI_DUP_VERIFY_STRING 106 +# define UI_F_UI_GET0_RESULT 107 +# define UI_F_UI_GET_RESULT_LENGTH 119 +# define UI_F_UI_NEW_METHOD 104 +# define UI_F_UI_PROCESS 113 +# define UI_F_UI_SET_RESULT 105 +# define UI_F_UI_SET_RESULT_EX 120 + +/* + * UI reason codes. + */ +# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 +# define UI_R_INDEX_TOO_LARGE 102 +# define UI_R_INDEX_TOO_SMALL 103 +# define UI_R_NO_RESULT_BUFFER 105 +# define UI_R_PROCESSING_ERROR 107 +# define UI_R_RESULT_TOO_LARGE 100 +# define UI_R_RESULT_TOO_SMALL 101 +# define UI_R_SYSASSIGN_ERROR 109 +# define UI_R_SYSDASSGN_ERROR 110 +# define UI_R_SYSQIOW_ERROR 111 +# define UI_R_UNKNOWN_CONTROL_COMMAND 106 +# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 +# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 + +#endif diff --git a/lib/openssl/include/openssl/whrlpool.h b/lib/openssl/include/openssl/whrlpool.h new file mode 100644 index 0000000..20ea350 --- /dev/null +++ b/lib/openssl/include/openssl/whrlpool.h @@ -0,0 +1,48 @@ +/* + * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_WHRLPOOL_H +# define HEADER_WHRLPOOL_H + +#include + +# ifndef OPENSSL_NO_WHIRLPOOL +# include +# include +# ifdef __cplusplus +extern "C" { +# endif + +# define WHIRLPOOL_DIGEST_LENGTH (512/8) +# define WHIRLPOOL_BBLOCK 512 +# define WHIRLPOOL_COUNTER (256/8) + +typedef struct { + union { + unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; + /* double q is here to ensure 64-bit alignment */ + double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; + } H; + unsigned char data[WHIRLPOOL_BBLOCK / 8]; + unsigned int bitoff; + size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; +} WHIRLPOOL_CTX; + +int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); +int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); +void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); +int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); +unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); + +# ifdef __cplusplus +} +# endif +# endif + +#endif diff --git a/lib/openssl/include/openssl/x509.h b/lib/openssl/include/openssl/x509.h new file mode 100644 index 0000000..3ff86ec --- /dev/null +++ b/lib/openssl/include/openssl/x509.h @@ -0,0 +1,1050 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509_H +# define HEADER_X509_H + +# include +# include +# include +# include +# include +# include +# include +# include +# include + +# if OPENSSL_API_COMPAT < 0x10100000L +# include +# include +# include +# endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Flags for X509_get_signature_info() */ +/* Signature info is valid */ +# define X509_SIG_INFO_VALID 0x1 +/* Signature is suitable for TLS use */ +# define X509_SIG_INFO_TLS 0x2 + +# define X509_FILETYPE_PEM 1 +# define X509_FILETYPE_ASN1 2 +# define X509_FILETYPE_DEFAULT 3 + +# define X509v3_KU_DIGITAL_SIGNATURE 0x0080 +# define X509v3_KU_NON_REPUDIATION 0x0040 +# define X509v3_KU_KEY_ENCIPHERMENT 0x0020 +# define X509v3_KU_DATA_ENCIPHERMENT 0x0010 +# define X509v3_KU_KEY_AGREEMENT 0x0008 +# define X509v3_KU_KEY_CERT_SIGN 0x0004 +# define X509v3_KU_CRL_SIGN 0x0002 +# define X509v3_KU_ENCIPHER_ONLY 0x0001 +# define X509v3_KU_DECIPHER_ONLY 0x8000 +# define X509v3_KU_UNDEF 0xffff + +struct X509_algor_st { + ASN1_OBJECT *algorithm; + ASN1_TYPE *parameter; +} /* X509_ALGOR */ ; + +typedef STACK_OF(X509_ALGOR) X509_ALGORS; + +typedef struct X509_val_st { + ASN1_TIME *notBefore; + ASN1_TIME *notAfter; +} X509_VAL; + +typedef struct X509_sig_st X509_SIG; + +typedef struct X509_name_entry_st X509_NAME_ENTRY; + +DEFINE_STACK_OF(X509_NAME_ENTRY) + +DEFINE_STACK_OF(X509_NAME) + +# define X509_EX_V_NETSCAPE_HACK 0x8000 +# define X509_EX_V_INIT 0x0001 +typedef struct X509_extension_st X509_EXTENSION; + +typedef STACK_OF(X509_EXTENSION) X509_EXTENSIONS; + +DEFINE_STACK_OF(X509_EXTENSION) + +typedef struct x509_attributes_st X509_ATTRIBUTE; + +DEFINE_STACK_OF(X509_ATTRIBUTE) + +typedef struct X509_req_info_st X509_REQ_INFO; + +typedef struct X509_req_st X509_REQ; + +typedef struct x509_cert_aux_st X509_CERT_AUX; + +typedef struct x509_cinf_st X509_CINF; + +DEFINE_STACK_OF(X509) + +/* This is used for a table of trust checking functions */ + +typedef struct x509_trust_st { + int trust; + int flags; + int (*check_trust) (struct x509_trust_st *, X509 *, int); + char *name; + int arg1; + void *arg2; +} X509_TRUST; + +DEFINE_STACK_OF(X509_TRUST) + +/* standard trust ids */ + +# define X509_TRUST_DEFAULT 0 /* Only valid in purpose settings */ + +# define X509_TRUST_COMPAT 1 +# define X509_TRUST_SSL_CLIENT 2 +# define X509_TRUST_SSL_SERVER 3 +# define X509_TRUST_EMAIL 4 +# define X509_TRUST_OBJECT_SIGN 5 +# define X509_TRUST_OCSP_SIGN 6 +# define X509_TRUST_OCSP_REQUEST 7 +# define X509_TRUST_TSA 8 + +/* Keep these up to date! */ +# define X509_TRUST_MIN 1 +# define X509_TRUST_MAX 8 + +/* trust_flags values */ +# define X509_TRUST_DYNAMIC (1U << 0) +# define X509_TRUST_DYNAMIC_NAME (1U << 1) +/* No compat trust if self-signed, preempts "DO_SS" */ +# define X509_TRUST_NO_SS_COMPAT (1U << 2) +/* Compat trust if no explicit accepted trust EKUs */ +# define X509_TRUST_DO_SS_COMPAT (1U << 3) +/* Accept "anyEKU" as a wildcard trust OID */ +# define X509_TRUST_OK_ANY_EKU (1U << 4) + +/* check_trust return codes */ + +# define X509_TRUST_TRUSTED 1 +# define X509_TRUST_REJECTED 2 +# define X509_TRUST_UNTRUSTED 3 + +/* Flags for X509_print_ex() */ + +# define X509_FLAG_COMPAT 0 +# define X509_FLAG_NO_HEADER 1L +# define X509_FLAG_NO_VERSION (1L << 1) +# define X509_FLAG_NO_SERIAL (1L << 2) +# define X509_FLAG_NO_SIGNAME (1L << 3) +# define X509_FLAG_NO_ISSUER (1L << 4) +# define X509_FLAG_NO_VALIDITY (1L << 5) +# define X509_FLAG_NO_SUBJECT (1L << 6) +# define X509_FLAG_NO_PUBKEY (1L << 7) +# define X509_FLAG_NO_EXTENSIONS (1L << 8) +# define X509_FLAG_NO_SIGDUMP (1L << 9) +# define X509_FLAG_NO_AUX (1L << 10) +# define X509_FLAG_NO_ATTRIBUTES (1L << 11) +# define X509_FLAG_NO_IDS (1L << 12) + +/* Flags specific to X509_NAME_print_ex() */ + +/* The field separator information */ + +# define XN_FLAG_SEP_MASK (0xf << 16) + +# define XN_FLAG_COMPAT 0/* Traditional; use old X509_NAME_print */ +# define XN_FLAG_SEP_COMMA_PLUS (1 << 16)/* RFC2253 ,+ */ +# define XN_FLAG_SEP_CPLUS_SPC (2 << 16)/* ,+ spaced: more readable */ +# define XN_FLAG_SEP_SPLUS_SPC (3 << 16)/* ;+ spaced */ +# define XN_FLAG_SEP_MULTILINE (4 << 16)/* One line per field */ + +# define XN_FLAG_DN_REV (1 << 20)/* Reverse DN order */ + +/* How the field name is shown */ + +# define XN_FLAG_FN_MASK (0x3 << 21) + +# define XN_FLAG_FN_SN 0/* Object short name */ +# define XN_FLAG_FN_LN (1 << 21)/* Object long name */ +# define XN_FLAG_FN_OID (2 << 21)/* Always use OIDs */ +# define XN_FLAG_FN_NONE (3 << 21)/* No field names */ + +# define XN_FLAG_SPC_EQ (1 << 23)/* Put spaces round '=' */ + +/* + * This determines if we dump fields we don't recognise: RFC2253 requires + * this. + */ + +# define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24) + +# define XN_FLAG_FN_ALIGN (1 << 25)/* Align field names to 20 + * characters */ + +/* Complete set of RFC2253 flags */ + +# define XN_FLAG_RFC2253 (ASN1_STRFLGS_RFC2253 | \ + XN_FLAG_SEP_COMMA_PLUS | \ + XN_FLAG_DN_REV | \ + XN_FLAG_FN_SN | \ + XN_FLAG_DUMP_UNKNOWN_FIELDS) + +/* readable oneline form */ + +# define XN_FLAG_ONELINE (ASN1_STRFLGS_RFC2253 | \ + ASN1_STRFLGS_ESC_QUOTE | \ + XN_FLAG_SEP_CPLUS_SPC | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_SN) + +/* readable multiline form */ + +# define XN_FLAG_MULTILINE (ASN1_STRFLGS_ESC_CTRL | \ + ASN1_STRFLGS_ESC_MSB | \ + XN_FLAG_SEP_MULTILINE | \ + XN_FLAG_SPC_EQ | \ + XN_FLAG_FN_LN | \ + XN_FLAG_FN_ALIGN) + +DEFINE_STACK_OF(X509_REVOKED) + +typedef struct X509_crl_info_st X509_CRL_INFO; + +DEFINE_STACK_OF(X509_CRL) + +typedef struct private_key_st { + int version; + /* The PKCS#8 data types */ + X509_ALGOR *enc_algor; + ASN1_OCTET_STRING *enc_pkey; /* encrypted pub key */ + /* When decrypted, the following will not be NULL */ + EVP_PKEY *dec_pkey; + /* used to encrypt and decrypt */ + int key_length; + char *key_data; + int key_free; /* true if we should auto free key_data */ + /* expanded version of 'enc_algor' */ + EVP_CIPHER_INFO cipher; +} X509_PKEY; + +typedef struct X509_info_st { + X509 *x509; + X509_CRL *crl; + X509_PKEY *x_pkey; + EVP_CIPHER_INFO enc_cipher; + int enc_len; + char *enc_data; +} X509_INFO; + +DEFINE_STACK_OF(X509_INFO) + +/* + * The next 2 structures and their 8 routines are used to manipulate Netscape's + * spki structures - useful if you are writing a CA web page + */ +typedef struct Netscape_spkac_st { + X509_PUBKEY *pubkey; + ASN1_IA5STRING *challenge; /* challenge sent in atlas >= PR2 */ +} NETSCAPE_SPKAC; + +typedef struct Netscape_spki_st { + NETSCAPE_SPKAC *spkac; /* signed public key and challenge */ + X509_ALGOR sig_algor; + ASN1_BIT_STRING *signature; +} NETSCAPE_SPKI; + +/* Netscape certificate sequence structure */ +typedef struct Netscape_certificate_sequence { + ASN1_OBJECT *type; + STACK_OF(X509) *certs; +} NETSCAPE_CERT_SEQUENCE; + +/*- Unused (and iv length is wrong) +typedef struct CBCParameter_st + { + unsigned char iv[8]; + } CBC_PARAM; +*/ + +/* Password based encryption structure */ + +typedef struct PBEPARAM_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *iter; +} PBEPARAM; + +/* Password based encryption V2 structures */ + +typedef struct PBE2PARAM_st { + X509_ALGOR *keyfunc; + X509_ALGOR *encryption; +} PBE2PARAM; + +typedef struct PBKDF2PARAM_st { +/* Usually OCTET STRING but could be anything */ + ASN1_TYPE *salt; + ASN1_INTEGER *iter; + ASN1_INTEGER *keylength; + X509_ALGOR *prf; +} PBKDF2PARAM; + +#ifndef OPENSSL_NO_SCRYPT +typedef struct SCRYPT_PARAMS_st { + ASN1_OCTET_STRING *salt; + ASN1_INTEGER *costParameter; + ASN1_INTEGER *blockSize; + ASN1_INTEGER *parallelizationParameter; + ASN1_INTEGER *keyLength; +} SCRYPT_PARAMS; +#endif + +#ifdef __cplusplus +} +#endif + +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +# define X509_EXT_PACK_UNKNOWN 1 +# define X509_EXT_PACK_STRING 2 + +# define X509_extract_key(x) X509_get_pubkey(x)/*****/ +# define X509_REQ_extract_key(a) X509_REQ_get_pubkey(a) +# define X509_name_cmp(a,b) X509_NAME_cmp((a),(b)) + +void X509_CRL_set_default_method(const X509_CRL_METHOD *meth); +X509_CRL_METHOD *X509_CRL_METHOD_new(int (*crl_init) (X509_CRL *crl), + int (*crl_free) (X509_CRL *crl), + int (*crl_lookup) (X509_CRL *crl, + X509_REVOKED **ret, + ASN1_INTEGER *ser, + X509_NAME *issuer), + int (*crl_verify) (X509_CRL *crl, + EVP_PKEY *pk)); +void X509_CRL_METHOD_free(X509_CRL_METHOD *m); + +void X509_CRL_set_meth_data(X509_CRL *crl, void *dat); +void *X509_CRL_get_meth_data(X509_CRL *crl); + +const char *X509_verify_cert_error_string(long n); + +int X509_verify(X509 *a, EVP_PKEY *r); + +int X509_REQ_verify(X509_REQ *a, EVP_PKEY *r); +int X509_CRL_verify(X509_CRL *a, EVP_PKEY *r); +int NETSCAPE_SPKI_verify(NETSCAPE_SPKI *a, EVP_PKEY *r); + +NETSCAPE_SPKI *NETSCAPE_SPKI_b64_decode(const char *str, int len); +char *NETSCAPE_SPKI_b64_encode(NETSCAPE_SPKI *x); +EVP_PKEY *NETSCAPE_SPKI_get_pubkey(NETSCAPE_SPKI *x); +int NETSCAPE_SPKI_set_pubkey(NETSCAPE_SPKI *x, EVP_PKEY *pkey); + +int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki); + +int X509_signature_dump(BIO *bp, const ASN1_STRING *sig, int indent); +int X509_signature_print(BIO *bp, const X509_ALGOR *alg, + const ASN1_STRING *sig); + +int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_OCSP +int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert); +# endif +int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx); +int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md); +int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx); +# ifndef OPENSSL_NO_OCSP +int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl); +# endif +int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md); + +int X509_pubkey_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_digest(const X509 *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_CRL_digest(const X509_CRL *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_REQ_digest(const X509_REQ *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); +int X509_NAME_digest(const X509_NAME *data, const EVP_MD *type, + unsigned char *md, unsigned int *len); + +# ifndef OPENSSL_NO_STDIO +X509 *d2i_X509_fp(FILE *fp, X509 **x509); +int i2d_X509_fp(FILE *fp, X509 *x509); +X509_CRL *d2i_X509_CRL_fp(FILE *fp, X509_CRL **crl); +int i2d_X509_CRL_fp(FILE *fp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_fp(FILE *fp, X509_REQ **req); +int i2d_X509_REQ_fp(FILE *fp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPrivateKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSAPublicKey_fp(FILE *fp, RSA **rsa); +int i2d_RSAPublicKey_fp(FILE *fp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_fp(FILE *fp, RSA **rsa); +int i2d_RSA_PUBKEY_fp(FILE *fp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_fp(FILE *fp, DSA **dsa); +int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa); +DSA *d2i_DSAPrivateKey_fp(FILE *fp, DSA **dsa); +int i2d_DSAPrivateKey_fp(FILE *fp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_fp(FILE *fp, EC_KEY **eckey); +int i2d_EC_PUBKEY_fp(FILE *fp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_fp(FILE *fp, EC_KEY **eckey); +int i2d_ECPrivateKey_fp(FILE *fp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_fp(FILE *fp, X509_SIG **p8); +int i2d_PKCS8_fp(FILE *fp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_fp(FILE *fp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_fp(FILE *fp, EVP_PKEY *key); +int i2d_PrivateKey_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_fp(FILE *fp, EVP_PKEY **a); +int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a); +# endif + +X509 *d2i_X509_bio(BIO *bp, X509 **x509); +int i2d_X509_bio(BIO *bp, X509 *x509); +X509_CRL *d2i_X509_CRL_bio(BIO *bp, X509_CRL **crl); +int i2d_X509_CRL_bio(BIO *bp, X509_CRL *crl); +X509_REQ *d2i_X509_REQ_bio(BIO *bp, X509_REQ **req); +int i2d_X509_REQ_bio(BIO *bp, X509_REQ *req); +# ifndef OPENSSL_NO_RSA +RSA *d2i_RSAPrivateKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPrivateKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSAPublicKey_bio(BIO *bp, RSA **rsa); +int i2d_RSAPublicKey_bio(BIO *bp, RSA *rsa); +RSA *d2i_RSA_PUBKEY_bio(BIO *bp, RSA **rsa); +int i2d_RSA_PUBKEY_bio(BIO *bp, RSA *rsa); +# endif +# ifndef OPENSSL_NO_DSA +DSA *d2i_DSA_PUBKEY_bio(BIO *bp, DSA **dsa); +int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa); +DSA *d2i_DSAPrivateKey_bio(BIO *bp, DSA **dsa); +int i2d_DSAPrivateKey_bio(BIO *bp, DSA *dsa); +# endif +# ifndef OPENSSL_NO_EC +EC_KEY *d2i_EC_PUBKEY_bio(BIO *bp, EC_KEY **eckey); +int i2d_EC_PUBKEY_bio(BIO *bp, EC_KEY *eckey); +EC_KEY *d2i_ECPrivateKey_bio(BIO *bp, EC_KEY **eckey); +int i2d_ECPrivateKey_bio(BIO *bp, EC_KEY *eckey); +# endif +X509_SIG *d2i_PKCS8_bio(BIO *bp, X509_SIG **p8); +int i2d_PKCS8_bio(BIO *bp, X509_SIG *p8); +PKCS8_PRIV_KEY_INFO *d2i_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, + PKCS8_PRIV_KEY_INFO **p8inf); +int i2d_PKCS8_PRIV_KEY_INFO_bio(BIO *bp, PKCS8_PRIV_KEY_INFO *p8inf); +int i2d_PKCS8PrivateKeyInfo_bio(BIO *bp, EVP_PKEY *key); +int i2d_PrivateKey_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a); +int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey); +EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); + +X509 *X509_dup(X509 *x509); +X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa); +X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex); +X509_CRL *X509_CRL_dup(X509_CRL *crl); +X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev); +X509_REQ *X509_REQ_dup(X509_REQ *req); +X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn); +int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, + void *pval); +void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype, + const void **ppval, const X509_ALGOR *algor); +void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); +int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); + +X509_NAME *X509_NAME_dup(X509_NAME *xn); +X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); + +int X509_cmp_time(const ASN1_TIME *s, time_t *t); +int X509_cmp_current_time(const ASN1_TIME *s); +ASN1_TIME *X509_time_adj(ASN1_TIME *s, long adj, time_t *t); +ASN1_TIME *X509_time_adj_ex(ASN1_TIME *s, + int offset_day, long offset_sec, time_t *t); +ASN1_TIME *X509_gmtime_adj(ASN1_TIME *s, long adj); + +const char *X509_get_default_cert_area(void); +const char *X509_get_default_cert_dir(void); +const char *X509_get_default_cert_file(void); +const char *X509_get_default_cert_dir_env(void); +const char *X509_get_default_cert_file_env(void); +const char *X509_get_default_private_dir(void); + +X509_REQ *X509_to_X509_REQ(X509 *x, EVP_PKEY *pkey, const EVP_MD *md); +X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey); + +DECLARE_ASN1_FUNCTIONS(X509_ALGOR) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_ALGORS, X509_ALGORS, X509_ALGORS) +DECLARE_ASN1_FUNCTIONS(X509_VAL) + +DECLARE_ASN1_FUNCTIONS(X509_PUBKEY) + +int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey); +EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key); +EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key); +int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain); +long X509_get_pathlen(X509 *x); +int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp); +EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length); +# ifndef OPENSSL_NO_RSA +int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp); +RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_DSA +int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp); +DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); +# endif +# ifndef OPENSSL_NO_EC +int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp); +EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length); +# endif + +DECLARE_ASN1_FUNCTIONS(X509_SIG) +void X509_SIG_get0(const X509_SIG *sig, const X509_ALGOR **palg, + const ASN1_OCTET_STRING **pdigest); +void X509_SIG_getm(X509_SIG *sig, X509_ALGOR **palg, + ASN1_OCTET_STRING **pdigest); + +DECLARE_ASN1_FUNCTIONS(X509_REQ_INFO) +DECLARE_ASN1_FUNCTIONS(X509_REQ) + +DECLARE_ASN1_FUNCTIONS(X509_ATTRIBUTE) +X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value); + +DECLARE_ASN1_FUNCTIONS(X509_EXTENSION) +DECLARE_ASN1_ENCODE_FUNCTIONS(X509_EXTENSIONS, X509_EXTENSIONS, X509_EXTENSIONS) + +DECLARE_ASN1_FUNCTIONS(X509_NAME_ENTRY) + +DECLARE_ASN1_FUNCTIONS(X509_NAME) + +int X509_NAME_set(X509_NAME **xn, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(X509_CINF) + +DECLARE_ASN1_FUNCTIONS(X509) +DECLARE_ASN1_FUNCTIONS(X509_CERT_AUX) + +#define X509_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, l, p, newf, dupf, freef) +int X509_set_ex_data(X509 *r, int idx, void *arg); +void *X509_get_ex_data(X509 *r, int idx); +int i2d_X509_AUX(X509 *a, unsigned char **pp); +X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length); + +int i2d_re_X509_tbs(X509 *x, unsigned char **pp); + +int X509_SIG_INFO_get(const X509_SIG_INFO *siginf, int *mdnid, int *pknid, + int *secbits, uint32_t *flags); +void X509_SIG_INFO_set(X509_SIG_INFO *siginf, int mdnid, int pknid, + int secbits, uint32_t flags); + +int X509_get_signature_info(X509 *x, int *mdnid, int *pknid, int *secbits, + uint32_t *flags); + +void X509_get0_signature(const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg, const X509 *x); +int X509_get_signature_nid(const X509 *x); + +int X509_trusted(const X509 *x); +int X509_alias_set1(X509 *x, const unsigned char *name, int len); +int X509_keyid_set1(X509 *x, const unsigned char *id, int len); +unsigned char *X509_alias_get0(X509 *x, int *len); +unsigned char *X509_keyid_get0(X509 *x, int *len); +int (*X509_TRUST_set_default(int (*trust) (int, X509 *, int))) (int, X509 *, + int); +int X509_TRUST_set(int *t, int trust); +int X509_add1_trust_object(X509 *x, const ASN1_OBJECT *obj); +int X509_add1_reject_object(X509 *x, const ASN1_OBJECT *obj); +void X509_trust_clear(X509 *x); +void X509_reject_clear(X509 *x); + +STACK_OF(ASN1_OBJECT) *X509_get0_trust_objects(X509 *x); +STACK_OF(ASN1_OBJECT) *X509_get0_reject_objects(X509 *x); + +DECLARE_ASN1_FUNCTIONS(X509_REVOKED) +DECLARE_ASN1_FUNCTIONS(X509_CRL_INFO) +DECLARE_ASN1_FUNCTIONS(X509_CRL) + +int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev); +int X509_CRL_get0_by_serial(X509_CRL *crl, + X509_REVOKED **ret, ASN1_INTEGER *serial); +int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x); + +X509_PKEY *X509_PKEY_new(void); +void X509_PKEY_free(X509_PKEY *a); + +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKI) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_SPKAC) +DECLARE_ASN1_FUNCTIONS(NETSCAPE_CERT_SEQUENCE) + +X509_INFO *X509_INFO_new(void); +void X509_INFO_free(X509_INFO *a); +char *X509_NAME_oneline(const X509_NAME *a, char *buf, int size); + +int ASN1_verify(i2d_of_void *i2d, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, char *data, EVP_PKEY *pkey); + +int ASN1_digest(i2d_of_void *i2d, const EVP_MD *type, char *data, + unsigned char *md, unsigned int *len); + +int ASN1_sign(i2d_of_void *i2d, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + char *data, EVP_PKEY *pkey, const EVP_MD *type); + +int ASN1_item_digest(const ASN1_ITEM *it, const EVP_MD *type, void *data, + unsigned char *md, unsigned int *len); + +int ASN1_item_verify(const ASN1_ITEM *it, X509_ALGOR *algor1, + ASN1_BIT_STRING *signature, void *data, EVP_PKEY *pkey); + +int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, void *data, + EVP_PKEY *pkey, const EVP_MD *type); +int ASN1_item_sign_ctx(const ASN1_ITEM *it, X509_ALGOR *algor1, + X509_ALGOR *algor2, ASN1_BIT_STRING *signature, + void *asn, EVP_MD_CTX *ctx); + +long X509_get_version(const X509 *x); +int X509_set_version(X509 *x, long version); +int X509_set_serialNumber(X509 *x, ASN1_INTEGER *serial); +ASN1_INTEGER *X509_get_serialNumber(X509 *x); +const ASN1_INTEGER *X509_get0_serialNumber(const X509 *x); +int X509_set_issuer_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_issuer_name(const X509 *a); +int X509_set_subject_name(X509 *x, X509_NAME *name); +X509_NAME *X509_get_subject_name(const X509 *a); +const ASN1_TIME * X509_get0_notBefore(const X509 *x); +ASN1_TIME *X509_getm_notBefore(const X509 *x); +int X509_set1_notBefore(X509 *x, const ASN1_TIME *tm); +const ASN1_TIME *X509_get0_notAfter(const X509 *x); +ASN1_TIME *X509_getm_notAfter(const X509 *x); +int X509_set1_notAfter(X509 *x, const ASN1_TIME *tm); +int X509_set_pubkey(X509 *x, EVP_PKEY *pkey); +int X509_up_ref(X509 *x); +int X509_get_signature_type(const X509 *x); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_get_notBefore X509_getm_notBefore +# define X509_get_notAfter X509_getm_notAfter +# define X509_set_notBefore X509_set1_notBefore +# define X509_set_notAfter X509_set1_notAfter +#endif + + +/* + * This one is only used so that a binary form can output, as in + * i2d_X509_PUBKEY(X509_get_X509_PUBKEY(x), &buf) + */ +X509_PUBKEY *X509_get_X509_PUBKEY(const X509 *x); +const STACK_OF(X509_EXTENSION) *X509_get0_extensions(const X509 *x); +void X509_get0_uids(const X509 *x, const ASN1_BIT_STRING **piuid, + const ASN1_BIT_STRING **psuid); +const X509_ALGOR *X509_get0_tbs_sigalg(const X509 *x); + +EVP_PKEY *X509_get0_pubkey(const X509 *x); +EVP_PKEY *X509_get_pubkey(X509 *x); +ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x); +int X509_certificate_type(const X509 *x, const EVP_PKEY *pubkey); + +long X509_REQ_get_version(const X509_REQ *req); +int X509_REQ_set_version(X509_REQ *x, long version); +X509_NAME *X509_REQ_get_subject_name(const X509_REQ *req); +int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); +void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); +int X509_REQ_get_signature_nid(const X509_REQ *req); +int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); +int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); +EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); +EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +X509_PUBKEY *X509_REQ_get_X509_PUBKEY(X509_REQ *req); +int X509_REQ_extension_nid(int nid); +int *X509_REQ_get_extension_nids(void); +void X509_REQ_set_extension_nids(int *nids); +STACK_OF(X509_EXTENSION) *X509_REQ_get_extensions(X509_REQ *req); +int X509_REQ_add_extensions_nid(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts, + int nid); +int X509_REQ_add_extensions(X509_REQ *req, STACK_OF(X509_EXTENSION) *exts); +int X509_REQ_get_attr_count(const X509_REQ *req); +int X509_REQ_get_attr_by_NID(const X509_REQ *req, int nid, int lastpos); +int X509_REQ_get_attr_by_OBJ(const X509_REQ *req, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *X509_REQ_get_attr(const X509_REQ *req, int loc); +X509_ATTRIBUTE *X509_REQ_delete_attr(X509_REQ *req, int loc); +int X509_REQ_add1_attr(X509_REQ *req, X509_ATTRIBUTE *attr); +int X509_REQ_add1_attr_by_OBJ(X509_REQ *req, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_NID(X509_REQ *req, + int nid, int type, + const unsigned char *bytes, int len); +int X509_REQ_add1_attr_by_txt(X509_REQ *req, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_CRL_set_version(X509_CRL *x, long version); +int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name); +int X509_CRL_set1_lastUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_set1_nextUpdate(X509_CRL *x, const ASN1_TIME *tm); +int X509_CRL_sort(X509_CRL *crl); +int X509_CRL_up_ref(X509_CRL *crl); + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_CRL_set_lastUpdate X509_CRL_set1_lastUpdate +# define X509_CRL_set_nextUpdate X509_CRL_set1_nextUpdate +#endif + +long X509_CRL_get_version(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_lastUpdate(const X509_CRL *crl); +const ASN1_TIME *X509_CRL_get0_nextUpdate(const X509_CRL *crl); +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)) +DEPRECATEDIN_1_1_0(ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)) +X509_NAME *X509_CRL_get_issuer(const X509_CRL *crl); +const STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(const X509_CRL *crl); +STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl); +void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig, + const X509_ALGOR **palg); +int X509_CRL_get_signature_nid(const X509_CRL *crl); +int i2d_re_X509_CRL_tbs(X509_CRL *req, unsigned char **pp); + +const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x); +int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial); +const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x); +int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm); +const STACK_OF(X509_EXTENSION) * +X509_REVOKED_get0_extensions(const X509_REVOKED *r); + +X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, + EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); + +int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); + +int X509_check_private_key(const X509 *x509, const EVP_PKEY *pkey); +int X509_chain_check_suiteb(int *perror_depth, + X509 *x, STACK_OF(X509) *chain, + unsigned long flags); +int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags); +STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain); + +int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_and_serial_hash(X509 *a); + +int X509_issuer_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_issuer_name_hash(X509 *a); + +int X509_subject_name_cmp(const X509 *a, const X509 *b); +unsigned long X509_subject_name_hash(X509 *x); + +# ifndef OPENSSL_NO_MD5 +unsigned long X509_issuer_name_hash_old(X509 *a); +unsigned long X509_subject_name_hash_old(X509 *x); +# endif + +int X509_cmp(const X509 *a, const X509 *b); +int X509_NAME_cmp(const X509_NAME *a, const X509_NAME *b); +unsigned long X509_NAME_hash(X509_NAME *x); +unsigned long X509_NAME_hash_old(X509_NAME *x); + +int X509_CRL_cmp(const X509_CRL *a, const X509_CRL *b); +int X509_CRL_match(const X509_CRL *a, const X509_CRL *b); +int X509_aux_print(BIO *out, X509 *x, int indent); +# ifndef OPENSSL_NO_STDIO +int X509_print_ex_fp(FILE *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print_fp(FILE *bp, X509 *x); +int X509_CRL_print_fp(FILE *bp, X509_CRL *x); +int X509_REQ_print_fp(FILE *bp, X509_REQ *req); +int X509_NAME_print_ex_fp(FILE *fp, const X509_NAME *nm, int indent, + unsigned long flags); +# endif + +int X509_NAME_print(BIO *bp, const X509_NAME *name, int obase); +int X509_NAME_print_ex(BIO *out, const X509_NAME *nm, int indent, + unsigned long flags); +int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflag, + unsigned long cflag); +int X509_print(BIO *bp, X509 *x); +int X509_ocspid_print(BIO *bp, X509 *x); +int X509_CRL_print_ex(BIO *out, X509_CRL *x, unsigned long nmflag); +int X509_CRL_print(BIO *bp, X509_CRL *x); +int X509_REQ_print_ex(BIO *bp, X509_REQ *x, unsigned long nmflag, + unsigned long cflag); +int X509_REQ_print(BIO *bp, X509_REQ *req); + +int X509_NAME_entry_count(const X509_NAME *name); +int X509_NAME_get_text_by_NID(X509_NAME *name, int nid, char *buf, int len); +int X509_NAME_get_text_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, + char *buf, int len); + +/* + * NOTE: you should be passing -1, not 0 as lastpos. The functions that use + * lastpos, search after that position on. + */ +int X509_NAME_get_index_by_NID(X509_NAME *name, int nid, int lastpos); +int X509_NAME_get_index_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, + int lastpos); +X509_NAME_ENTRY *X509_NAME_get_entry(const X509_NAME *name, int loc); +X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc); +int X509_NAME_add_entry(X509_NAME *name, const X509_NAME_ENTRY *ne, + int loc, int set); +int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len, int loc, + int set); +int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, + const char *field, int type, + const unsigned char *bytes, + int len); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, + int type, + const unsigned char *bytes, + int len); +int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, + const unsigned char *bytes, int len, int loc, + int set); +X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, + int len); +int X509_NAME_ENTRY_set_object(X509_NAME_ENTRY *ne, const ASN1_OBJECT *obj); +int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, + const unsigned char *bytes, int len); +ASN1_OBJECT *X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *ne); +ASN1_STRING * X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *ne); +int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne); + +int X509_NAME_get0_der(X509_NAME *nm, const unsigned char **pder, + size_t *pderlen); + +int X509v3_get_ext_count(const STACK_OF(X509_EXTENSION) *x); +int X509v3_get_ext_by_NID(const STACK_OF(X509_EXTENSION) *x, + int nid, int lastpos); +int X509v3_get_ext_by_OBJ(const STACK_OF(X509_EXTENSION) *x, + const ASN1_OBJECT *obj, int lastpos); +int X509v3_get_ext_by_critical(const STACK_OF(X509_EXTENSION) *x, + int crit, int lastpos); +X509_EXTENSION *X509v3_get_ext(const STACK_OF(X509_EXTENSION) *x, int loc); +X509_EXTENSION *X509v3_delete_ext(STACK_OF(X509_EXTENSION) *x, int loc); +STACK_OF(X509_EXTENSION) *X509v3_add_ext(STACK_OF(X509_EXTENSION) **x, + X509_EXTENSION *ex, int loc); + +int X509_get_ext_count(const X509 *x); +int X509_get_ext_by_NID(const X509 *x, int nid, int lastpos); +int X509_get_ext_by_OBJ(const X509 *x, const ASN1_OBJECT *obj, int lastpos); +int X509_get_ext_by_critical(const X509 *x, int crit, int lastpos); +X509_EXTENSION *X509_get_ext(const X509 *x, int loc); +X509_EXTENSION *X509_delete_ext(X509 *x, int loc); +int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc); +void *X509_get_ext_d2i(const X509 *x, int nid, int *crit, int *idx); +int X509_add1_ext_i2d(X509 *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_CRL_get_ext_count(const X509_CRL *x); +int X509_CRL_get_ext_by_NID(const X509_CRL *x, int nid, int lastpos); +int X509_CRL_get_ext_by_OBJ(const X509_CRL *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_CRL_get_ext_by_critical(const X509_CRL *x, int crit, int lastpos); +X509_EXTENSION *X509_CRL_get_ext(const X509_CRL *x, int loc); +X509_EXTENSION *X509_CRL_delete_ext(X509_CRL *x, int loc); +int X509_CRL_add_ext(X509_CRL *x, X509_EXTENSION *ex, int loc); +void *X509_CRL_get_ext_d2i(const X509_CRL *x, int nid, int *crit, int *idx); +int X509_CRL_add1_ext_i2d(X509_CRL *x, int nid, void *value, int crit, + unsigned long flags); + +int X509_REVOKED_get_ext_count(const X509_REVOKED *x); +int X509_REVOKED_get_ext_by_NID(const X509_REVOKED *x, int nid, int lastpos); +int X509_REVOKED_get_ext_by_OBJ(const X509_REVOKED *x, const ASN1_OBJECT *obj, + int lastpos); +int X509_REVOKED_get_ext_by_critical(const X509_REVOKED *x, int crit, + int lastpos); +X509_EXTENSION *X509_REVOKED_get_ext(const X509_REVOKED *x, int loc); +X509_EXTENSION *X509_REVOKED_delete_ext(X509_REVOKED *x, int loc); +int X509_REVOKED_add_ext(X509_REVOKED *x, X509_EXTENSION *ex, int loc); +void *X509_REVOKED_get_ext_d2i(const X509_REVOKED *x, int nid, int *crit, + int *idx); +int X509_REVOKED_add1_ext_i2d(X509_REVOKED *x, int nid, void *value, int crit, + unsigned long flags); + +X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex, + int nid, int crit, + ASN1_OCTET_STRING *data); +X509_EXTENSION *X509_EXTENSION_create_by_OBJ(X509_EXTENSION **ex, + const ASN1_OBJECT *obj, int crit, + ASN1_OCTET_STRING *data); +int X509_EXTENSION_set_object(X509_EXTENSION *ex, const ASN1_OBJECT *obj); +int X509_EXTENSION_set_critical(X509_EXTENSION *ex, int crit); +int X509_EXTENSION_set_data(X509_EXTENSION *ex, ASN1_OCTET_STRING *data); +ASN1_OBJECT *X509_EXTENSION_get_object(X509_EXTENSION *ex); +ASN1_OCTET_STRING *X509_EXTENSION_get_data(X509_EXTENSION *ne); +int X509_EXTENSION_get_critical(const X509_EXTENSION *ex); + +int X509at_get_attr_count(const STACK_OF(X509_ATTRIBUTE) *x); +int X509at_get_attr_by_NID(const STACK_OF(X509_ATTRIBUTE) *x, int nid, + int lastpos); +int X509at_get_attr_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *sk, + const ASN1_OBJECT *obj, int lastpos); +X509_ATTRIBUTE *X509at_get_attr(const STACK_OF(X509_ATTRIBUTE) *x, int loc); +X509_ATTRIBUTE *X509at_delete_attr(STACK_OF(X509_ATTRIBUTE) *x, int loc); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, + X509_ATTRIBUTE *attr); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_OBJ(STACK_OF(X509_ATTRIBUTE) + **x, const ASN1_OBJECT *obj, + int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) + **x, int nid, int type, + const unsigned char *bytes, + int len); +STACK_OF(X509_ATTRIBUTE) *X509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) + **x, const char *attrname, + int type, + const unsigned char *bytes, + int len); +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, + const ASN1_OBJECT *obj, int lastpos, int type); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_OBJ(X509_ATTRIBUTE **attr, + const ASN1_OBJECT *obj, + int atrtype, const void *data, + int len); +X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_txt(X509_ATTRIBUTE **attr, + const char *atrname, int type, + const unsigned char *bytes, + int len); +int X509_ATTRIBUTE_set1_object(X509_ATTRIBUTE *attr, const ASN1_OBJECT *obj); +int X509_ATTRIBUTE_set1_data(X509_ATTRIBUTE *attr, int attrtype, + const void *data, int len); +void *X509_ATTRIBUTE_get0_data(X509_ATTRIBUTE *attr, int idx, int atrtype, + void *data); +int X509_ATTRIBUTE_count(const X509_ATTRIBUTE *attr); +ASN1_OBJECT *X509_ATTRIBUTE_get0_object(X509_ATTRIBUTE *attr); +ASN1_TYPE *X509_ATTRIBUTE_get0_type(X509_ATTRIBUTE *attr, int idx); + +int EVP_PKEY_get_attr_count(const EVP_PKEY *key); +int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos); +int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, const ASN1_OBJECT *obj, + int lastpos); +X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc); +X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc); +int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr); +int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, + const ASN1_OBJECT *obj, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, + int nid, int type, + const unsigned char *bytes, int len); +int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, + const char *attrname, int type, + const unsigned char *bytes, int len); + +int X509_verify_cert(X509_STORE_CTX *ctx); + +/* lookup a cert from a X509 STACK */ +X509 *X509_find_by_issuer_and_serial(STACK_OF(X509) *sk, X509_NAME *name, + ASN1_INTEGER *serial); +X509 *X509_find_by_subject(STACK_OF(X509) *sk, X509_NAME *name); + +DECLARE_ASN1_FUNCTIONS(PBEPARAM) +DECLARE_ASN1_FUNCTIONS(PBE2PARAM) +DECLARE_ASN1_FUNCTIONS(PBKDF2PARAM) +#ifndef OPENSSL_NO_SCRYPT +DECLARE_ASN1_FUNCTIONS(SCRYPT_PARAMS) +#endif + +int PKCS5_pbe_set0_algor(X509_ALGOR *algor, int alg, int iter, + const unsigned char *salt, int saltlen); + +X509_ALGOR *PKCS5_pbe_set(int alg, int iter, + const unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen); +X509_ALGOR *PKCS5_pbe2_set_iv(const EVP_CIPHER *cipher, int iter, + unsigned char *salt, int saltlen, + unsigned char *aiv, int prf_nid); + +#ifndef OPENSSL_NO_SCRYPT +X509_ALGOR *PKCS5_pbe2_set_scrypt(const EVP_CIPHER *cipher, + const unsigned char *salt, int saltlen, + unsigned char *aiv, uint64_t N, uint64_t r, + uint64_t p); +#endif + +X509_ALGOR *PKCS5_pbkdf2_set(int iter, unsigned char *salt, int saltlen, + int prf_nid, int keylen); + +/* PKCS#8 utilities */ + +DECLARE_ASN1_FUNCTIONS(PKCS8_PRIV_KEY_INFO) + +EVP_PKEY *EVP_PKCS82PKEY(const PKCS8_PRIV_KEY_INFO *p8); +PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey); + +int PKCS8_pkey_set0(PKCS8_PRIV_KEY_INFO *priv, ASN1_OBJECT *aobj, + int version, int ptype, void *pval, + unsigned char *penc, int penclen); +int PKCS8_pkey_get0(const ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + const X509_ALGOR **pa, const PKCS8_PRIV_KEY_INFO *p8); + +const STACK_OF(X509_ATTRIBUTE) * +PKCS8_pkey_get0_attrs(const PKCS8_PRIV_KEY_INFO *p8); +int PKCS8_pkey_add1_attr_by_NID(PKCS8_PRIV_KEY_INFO *p8, int nid, int type, + const unsigned char *bytes, int len); + +int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, + int ptype, void *pval, + unsigned char *penc, int penclen); +int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, + const unsigned char **pk, int *ppklen, + X509_ALGOR **pa, X509_PUBKEY *pub); + +int X509_check_trust(X509 *x, int id, int flags); +int X509_TRUST_get_count(void); +X509_TRUST *X509_TRUST_get0(int idx); +int X509_TRUST_get_by_id(int id); +int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), + const char *name, int arg1, void *arg2); +void X509_TRUST_cleanup(void); +int X509_TRUST_get_flags(const X509_TRUST *xp); +char *X509_TRUST_get0_name(const X509_TRUST *xp); +int X509_TRUST_get_trust(const X509_TRUST *xp); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/x509_vfy.h b/lib/openssl/include/openssl/x509_vfy.h new file mode 100644 index 0000000..25c79f1 --- /dev/null +++ b/lib/openssl/include/openssl/x509_vfy.h @@ -0,0 +1,632 @@ +/* + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509_VFY_H +# define HEADER_X509_VFY_H + +/* + * Protect against recursion, x509.h and x509_vfy.h each include the other. + */ +# ifndef HEADER_X509_H +# include +# endif + +# include +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/*- +SSL_CTX -> X509_STORE + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + -> X509_LOOKUP + ->X509_LOOKUP_METHOD + +SSL -> X509_STORE_CTX + ->X509_STORE + +The X509_STORE holds the tables etc for verification stuff. +A X509_STORE_CTX is used while validating a single certificate. +The X509_STORE has X509_LOOKUPs for looking up certs. +The X509_STORE then calls a function to actually verify the +certificate chain. +*/ + +typedef enum { + X509_LU_NONE = 0, + X509_LU_X509, X509_LU_CRL +} X509_LOOKUP_TYPE; + +#if OPENSSL_API_COMPAT < 0x10100000L +#define X509_LU_RETRY -1 +#define X509_LU_FAIL 0 +#endif + +DEFINE_STACK_OF(X509_LOOKUP) +DEFINE_STACK_OF(X509_OBJECT) +DEFINE_STACK_OF(X509_VERIFY_PARAM) + +int X509_STORE_set_depth(X509_STORE *store, int depth); + +typedef int (*X509_STORE_CTX_verify_cb)(int, X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *); +typedef int (*X509_STORE_CTX_get_issuer_fn)(X509 **issuer, + X509_STORE_CTX *ctx, X509 *x); +typedef int (*X509_STORE_CTX_check_issued_fn)(X509_STORE_CTX *ctx, + X509 *x, X509 *issuer); +typedef int (*X509_STORE_CTX_check_revocation_fn)(X509_STORE_CTX *ctx); +typedef int (*X509_STORE_CTX_get_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL **crl, X509 *x); +typedef int (*X509_STORE_CTX_check_crl_fn)(X509_STORE_CTX *ctx, X509_CRL *crl); +typedef int (*X509_STORE_CTX_cert_crl_fn)(X509_STORE_CTX *ctx, + X509_CRL *crl, X509 *x); +typedef int (*X509_STORE_CTX_check_policy_fn)(X509_STORE_CTX *ctx); +typedef STACK_OF(X509) *(*X509_STORE_CTX_lookup_certs_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef STACK_OF(X509_CRL) *(*X509_STORE_CTX_lookup_crls_fn)(X509_STORE_CTX *ctx, + X509_NAME *nm); +typedef int (*X509_STORE_CTX_cleanup_fn)(X509_STORE_CTX *ctx); + + +void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth); + +# define X509_STORE_CTX_set_app_data(ctx,data) \ + X509_STORE_CTX_set_ex_data(ctx,0,data) +# define X509_STORE_CTX_get_app_data(ctx) \ + X509_STORE_CTX_get_ex_data(ctx,0) + +# define X509_L_FILE_LOAD 1 +# define X509_L_ADD_DIR 2 + +# define X509_LOOKUP_load_file(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_FILE_LOAD,(name),(long)(type),NULL) + +# define X509_LOOKUP_add_dir(x,name,type) \ + X509_LOOKUP_ctrl((x),X509_L_ADD_DIR,(name),(long)(type),NULL) + +# define X509_V_OK 0 +# define X509_V_ERR_UNSPECIFIED 1 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT 2 +# define X509_V_ERR_UNABLE_TO_GET_CRL 3 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE 4 +# define X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE 5 +# define X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY 6 +# define X509_V_ERR_CERT_SIGNATURE_FAILURE 7 +# define X509_V_ERR_CRL_SIGNATURE_FAILURE 8 +# define X509_V_ERR_CERT_NOT_YET_VALID 9 +# define X509_V_ERR_CERT_HAS_EXPIRED 10 +# define X509_V_ERR_CRL_NOT_YET_VALID 11 +# define X509_V_ERR_CRL_HAS_EXPIRED 12 +# define X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD 13 +# define X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD 14 +# define X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD 15 +# define X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD 16 +# define X509_V_ERR_OUT_OF_MEM 17 +# define X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT 18 +# define X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN 19 +# define X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY 20 +# define X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE 21 +# define X509_V_ERR_CERT_CHAIN_TOO_LONG 22 +# define X509_V_ERR_CERT_REVOKED 23 +# define X509_V_ERR_INVALID_CA 24 +# define X509_V_ERR_PATH_LENGTH_EXCEEDED 25 +# define X509_V_ERR_INVALID_PURPOSE 26 +# define X509_V_ERR_CERT_UNTRUSTED 27 +# define X509_V_ERR_CERT_REJECTED 28 +/* These are 'informational' when looking for issuer cert */ +# define X509_V_ERR_SUBJECT_ISSUER_MISMATCH 29 +# define X509_V_ERR_AKID_SKID_MISMATCH 30 +# define X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH 31 +# define X509_V_ERR_KEYUSAGE_NO_CERTSIGN 32 +# define X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER 33 +# define X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION 34 +# define X509_V_ERR_KEYUSAGE_NO_CRL_SIGN 35 +# define X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION 36 +# define X509_V_ERR_INVALID_NON_CA 37 +# define X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED 38 +# define X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE 39 +# define X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED 40 +# define X509_V_ERR_INVALID_EXTENSION 41 +# define X509_V_ERR_INVALID_POLICY_EXTENSION 42 +# define X509_V_ERR_NO_EXPLICIT_POLICY 43 +# define X509_V_ERR_DIFFERENT_CRL_SCOPE 44 +# define X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE 45 +# define X509_V_ERR_UNNESTED_RESOURCE 46 +# define X509_V_ERR_PERMITTED_VIOLATION 47 +# define X509_V_ERR_EXCLUDED_VIOLATION 48 +# define X509_V_ERR_SUBTREE_MINMAX 49 +/* The application is not happy */ +# define X509_V_ERR_APPLICATION_VERIFICATION 50 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE 51 +# define X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX 52 +# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53 +# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54 +/* Another issuer check debug option */ +# define X509_V_ERR_PATH_LOOP 55 +/* Suite B mode algorithm violation */ +# define X509_V_ERR_SUITE_B_INVALID_VERSION 56 +# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57 +# define X509_V_ERR_SUITE_B_INVALID_CURVE 58 +# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59 +# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60 +# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61 +/* Host, email and IP check errors */ +# define X509_V_ERR_HOSTNAME_MISMATCH 62 +# define X509_V_ERR_EMAIL_MISMATCH 63 +# define X509_V_ERR_IP_ADDRESS_MISMATCH 64 +/* DANE TLSA errors */ +# define X509_V_ERR_DANE_NO_MATCH 65 +/* security level errors */ +# define X509_V_ERR_EE_KEY_TOO_SMALL 66 +# define X509_V_ERR_CA_KEY_TOO_SMALL 67 +# define X509_V_ERR_CA_MD_TOO_WEAK 68 +/* Caller error */ +# define X509_V_ERR_INVALID_CALL 69 +/* Issuer lookup error */ +# define X509_V_ERR_STORE_LOOKUP 70 +/* Certificate transparency */ +# define X509_V_ERR_NO_VALID_SCTS 71 + +# define X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION 72 +/* OCSP status errors */ +# define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ +# define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ +# define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 + +/* Certificate verify flags */ + +# if OPENSSL_API_COMPAT < 0x10100000L +# define X509_V_FLAG_CB_ISSUER_CHECK 0x0 /* Deprecated */ +# endif +/* Use check time instead of current time */ +# define X509_V_FLAG_USE_CHECK_TIME 0x2 +/* Lookup CRLs */ +# define X509_V_FLAG_CRL_CHECK 0x4 +/* Lookup CRLs for whole chain */ +# define X509_V_FLAG_CRL_CHECK_ALL 0x8 +/* Ignore unhandled critical extensions */ +# define X509_V_FLAG_IGNORE_CRITICAL 0x10 +/* Disable workarounds for broken certificates */ +# define X509_V_FLAG_X509_STRICT 0x20 +/* Enable proxy certificate validation */ +# define X509_V_FLAG_ALLOW_PROXY_CERTS 0x40 +/* Enable policy checking */ +# define X509_V_FLAG_POLICY_CHECK 0x80 +/* Policy variable require-explicit-policy */ +# define X509_V_FLAG_EXPLICIT_POLICY 0x100 +/* Policy variable inhibit-any-policy */ +# define X509_V_FLAG_INHIBIT_ANY 0x200 +/* Policy variable inhibit-policy-mapping */ +# define X509_V_FLAG_INHIBIT_MAP 0x400 +/* Notify callback that policy is OK */ +# define X509_V_FLAG_NOTIFY_POLICY 0x800 +/* Extended CRL features such as indirect CRLs, alternate CRL signing keys */ +# define X509_V_FLAG_EXTENDED_CRL_SUPPORT 0x1000 +/* Delta CRL support */ +# define X509_V_FLAG_USE_DELTAS 0x2000 +/* Check self-signed CA signature */ +# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000 +/* Use trusted store first */ +# define X509_V_FLAG_TRUSTED_FIRST 0x8000 +/* Suite B 128 bit only mode: not normally used */ +# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000 +/* Suite B 192 bit only mode */ +# define X509_V_FLAG_SUITEB_192_LOS 0x20000 +/* Suite B 128 bit mode allowing 192 bit algorithms */ +# define X509_V_FLAG_SUITEB_128_LOS 0x30000 +/* Allow partial chains if at least one certificate is in trusted store */ +# define X509_V_FLAG_PARTIAL_CHAIN 0x80000 +/* + * If the initial chain is not trusted, do not attempt to build an alternative + * chain. Alternate chain checking was introduced in 1.1.0. Setting this flag + * will force the behaviour to match that of previous versions. + */ +# define X509_V_FLAG_NO_ALT_CHAINS 0x100000 +/* Do not check certificate/CRL validity against current time */ +# define X509_V_FLAG_NO_CHECK_TIME 0x200000 + +# define X509_VP_FLAG_DEFAULT 0x1 +# define X509_VP_FLAG_OVERWRITE 0x2 +# define X509_VP_FLAG_RESET_FLAGS 0x4 +# define X509_VP_FLAG_LOCKED 0x8 +# define X509_VP_FLAG_ONCE 0x10 + +/* Internal use: mask of policy related options */ +# define X509_V_FLAG_POLICY_MASK (X509_V_FLAG_POLICY_CHECK \ + | X509_V_FLAG_EXPLICIT_POLICY \ + | X509_V_FLAG_INHIBIT_ANY \ + | X509_V_FLAG_INHIBIT_MAP) + +int X509_OBJECT_idx_by_subject(STACK_OF(X509_OBJECT) *h, X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_by_subject(STACK_OF(X509_OBJECT) *h, + X509_LOOKUP_TYPE type, + X509_NAME *name); +X509_OBJECT *X509_OBJECT_retrieve_match(STACK_OF(X509_OBJECT) *h, + X509_OBJECT *x); +int X509_OBJECT_up_ref_count(X509_OBJECT *a); +X509_OBJECT *X509_OBJECT_new(void); +void X509_OBJECT_free(X509_OBJECT *a); +X509_LOOKUP_TYPE X509_OBJECT_get_type(const X509_OBJECT *a); +X509 *X509_OBJECT_get0_X509(const X509_OBJECT *a); +int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); +X509_CRL *X509_OBJECT_get0_X509_CRL(X509_OBJECT *a); +int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); +X509_STORE *X509_STORE_new(void); +void X509_STORE_free(X509_STORE *v); +int X509_STORE_lock(X509_STORE *ctx); +int X509_STORE_unlock(X509_STORE *ctx); +int X509_STORE_up_ref(X509_STORE *v); +STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *v); + +STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, X509_NAME *nm); +STACK_OF(X509_CRL) *X509_STORE_CTX_get1_crls(X509_STORE_CTX *st, X509_NAME *nm); +int X509_STORE_set_flags(X509_STORE *ctx, unsigned long flags); +int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); +int X509_STORE_set_trust(X509_STORE *ctx, int trust); +int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm); +X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *ctx); + +void X509_STORE_set_verify(X509_STORE *ctx, X509_STORE_CTX_verify_fn verify); +#define X509_STORE_set_verify_func(ctx, func) \ + X509_STORE_set_verify((ctx),(func)) +void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_fn verify); +X509_STORE_CTX_verify_fn X509_STORE_get_verify(X509_STORE *ctx); +void X509_STORE_set_verify_cb(X509_STORE *ctx, + X509_STORE_CTX_verify_cb verify_cb); +# define X509_STORE_set_verify_cb_func(ctx,func) \ + X509_STORE_set_verify_cb((ctx),(func)) +X509_STORE_CTX_verify_cb X509_STORE_get_verify_cb(X509_STORE *ctx); +void X509_STORE_set_get_issuer(X509_STORE *ctx, + X509_STORE_CTX_get_issuer_fn get_issuer); +X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(X509_STORE *ctx); +void X509_STORE_set_check_issued(X509_STORE *ctx, + X509_STORE_CTX_check_issued_fn check_issued); +X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(X509_STORE *ctx); +void X509_STORE_set_check_revocation(X509_STORE *ctx, + X509_STORE_CTX_check_revocation_fn check_revocation); +X509_STORE_CTX_check_revocation_fn X509_STORE_get_check_revocation(X509_STORE *ctx); +void X509_STORE_set_get_crl(X509_STORE *ctx, + X509_STORE_CTX_get_crl_fn get_crl); +X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(X509_STORE *ctx); +void X509_STORE_set_check_crl(X509_STORE *ctx, + X509_STORE_CTX_check_crl_fn check_crl); +X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(X509_STORE *ctx); +void X509_STORE_set_cert_crl(X509_STORE *ctx, + X509_STORE_CTX_cert_crl_fn cert_crl); +X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(X509_STORE *ctx); +void X509_STORE_set_check_policy(X509_STORE *ctx, + X509_STORE_CTX_check_policy_fn check_policy); +X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(X509_STORE *ctx); +void X509_STORE_set_lookup_certs(X509_STORE *ctx, + X509_STORE_CTX_lookup_certs_fn lookup_certs); +X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(X509_STORE *ctx); +void X509_STORE_set_lookup_crls(X509_STORE *ctx, + X509_STORE_CTX_lookup_crls_fn lookup_crls); +#define X509_STORE_set_lookup_crls_cb(ctx, func) \ + X509_STORE_set_lookup_crls((ctx), (func)) +X509_STORE_CTX_lookup_crls_fn X509_STORE_get_lookup_crls(X509_STORE *ctx); +void X509_STORE_set_cleanup(X509_STORE *ctx, + X509_STORE_CTX_cleanup_fn cleanup); +X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(X509_STORE *ctx); + +#define X509_STORE_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE, l, p, newf, dupf, freef) +int X509_STORE_set_ex_data(X509_STORE *ctx, int idx, void *data); +void *X509_STORE_get_ex_data(X509_STORE *ctx, int idx); + +X509_STORE_CTX *X509_STORE_CTX_new(void); + +int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x); + +void X509_STORE_CTX_free(X509_STORE_CTX *ctx); +int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store, + X509 *x509, STACK_OF(X509) *chain); +void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx); + +X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx); +X509 *X509_STORE_CTX_get0_cert(X509_STORE_CTX *ctx); +STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk); +void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx, + X509_STORE_CTX_verify_cb verify); +X509_STORE_CTX_verify_cb X509_STORE_CTX_get_verify_cb(X509_STORE_CTX *ctx); +X509_STORE_CTX_verify_fn X509_STORE_CTX_get_verify(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_issuer_fn X509_STORE_CTX_get_get_issuer(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_issued_fn X509_STORE_CTX_get_check_issued(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_revocation_fn X509_STORE_CTX_get_check_revocation(X509_STORE_CTX *ctx); +X509_STORE_CTX_get_crl_fn X509_STORE_CTX_get_get_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_crl_fn X509_STORE_CTX_get_check_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_cert_crl_fn X509_STORE_CTX_get_cert_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX_check_policy_fn X509_STORE_CTX_get_check_policy(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_certs_fn X509_STORE_CTX_get_lookup_certs(X509_STORE_CTX *ctx); +X509_STORE_CTX_lookup_crls_fn X509_STORE_CTX_get_lookup_crls(X509_STORE_CTX *ctx); +X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(X509_STORE_CTX *ctx); + +#if OPENSSL_API_COMPAT < 0x10100000L +# define X509_STORE_CTX_get_chain X509_STORE_CTX_get0_chain +# define X509_STORE_CTX_set_chain X509_STORE_CTX_set0_untrusted +# define X509_STORE_CTX_trusted_stack X509_STORE_CTX_set0_trusted_stack +# define X509_STORE_get_by_subject X509_STORE_CTX_get_by_subject +# define X509_STORE_get1_certs X509_STORE_CTX_get1_certs +# define X509_STORE_get1_crls X509_STORE_CTX_get1_crls +/* the following macro is misspelled; use X509_STORE_get1_certs instead */ +# define X509_STORE_get1_cert X509_STORE_CTX_get1_certs +/* the following macro is misspelled; use X509_STORE_get1_crls instead */ +# define X509_STORE_get1_crl X509_STORE_CTX_get1_crls +#endif + +X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void); +X509_LOOKUP_METHOD *X509_LOOKUP_file(void); + +typedef int (*X509_LOOKUP_ctrl_fn)(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); +typedef int (*X509_LOOKUP_get_by_subject_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + X509_NAME *name, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_issuer_serial_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + X509_NAME *name, + ASN1_INTEGER *serial, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_fingerprint_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const unsigned char* bytes, + int len, + X509_OBJECT *ret); +typedef int (*X509_LOOKUP_get_by_alias_fn)(X509_LOOKUP *ctx, + X509_LOOKUP_TYPE type, + const char *str, + int len, + X509_OBJECT *ret); + +X509_LOOKUP_METHOD *X509_LOOKUP_meth_new(const char *name); +void X509_LOOKUP_meth_free(X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_new_item(X509_LOOKUP_METHOD *method, + int (*new_item) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_new_item(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_free(X509_LOOKUP_METHOD *method, + void (*free_fn) (X509_LOOKUP *ctx)); +void (*X509_LOOKUP_meth_get_free(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_init(X509_LOOKUP_METHOD *method, + int (*init) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_init(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_shutdown(X509_LOOKUP_METHOD *method, + int (*shutdown) (X509_LOOKUP *ctx)); +int (*X509_LOOKUP_meth_get_shutdown(const X509_LOOKUP_METHOD* method)) + (X509_LOOKUP *ctx); + +int X509_LOOKUP_meth_set_ctrl(X509_LOOKUP_METHOD *method, + X509_LOOKUP_ctrl_fn ctrl_fn); +X509_LOOKUP_ctrl_fn X509_LOOKUP_meth_get_ctrl(const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_subject(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_subject_fn fn); +X509_LOOKUP_get_by_subject_fn X509_LOOKUP_meth_get_get_by_subject( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_issuer_serial(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_issuer_serial_fn fn); +X509_LOOKUP_get_by_issuer_serial_fn X509_LOOKUP_meth_get_get_by_issuer_serial( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_fingerprint(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_fingerprint_fn fn); +X509_LOOKUP_get_by_fingerprint_fn X509_LOOKUP_meth_get_get_by_fingerprint( + const X509_LOOKUP_METHOD *method); + +int X509_LOOKUP_meth_set_get_by_alias(X509_LOOKUP_METHOD *method, + X509_LOOKUP_get_by_alias_fn fn); +X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( + const X509_LOOKUP_METHOD *method); + + +int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); +int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); + +int X509_STORE_CTX_get_by_subject(X509_STORE_CTX *vs, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +X509_OBJECT *X509_STORE_CTX_get_obj_by_subject(X509_STORE_CTX *vs, + X509_LOOKUP_TYPE type, + X509_NAME *name); + +int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, + long argl, char **ret); + +int X509_load_cert_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_crl_file(X509_LOOKUP *ctx, const char *file, int type); +int X509_load_cert_crl_file(X509_LOOKUP *ctx, const char *file, int type); + +X509_LOOKUP *X509_LOOKUP_new(X509_LOOKUP_METHOD *method); +void X509_LOOKUP_free(X509_LOOKUP *ctx); +int X509_LOOKUP_init(X509_LOOKUP *ctx); +int X509_LOOKUP_by_subject(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, X509_OBJECT *ret); +int X509_LOOKUP_by_issuer_serial(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + X509_NAME *name, ASN1_INTEGER *serial, + X509_OBJECT *ret); +int X509_LOOKUP_by_fingerprint(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const unsigned char *bytes, int len, + X509_OBJECT *ret); +int X509_LOOKUP_by_alias(X509_LOOKUP *ctx, X509_LOOKUP_TYPE type, + const char *str, int len, X509_OBJECT *ret); +int X509_LOOKUP_set_method_data(X509_LOOKUP *ctx, void *data); +void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); +X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); +int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); + +int X509_STORE_load_locations(X509_STORE *ctx, + const char *file, const char *dir); +int X509_STORE_set_default_paths(X509_STORE *ctx); + +#define X509_STORE_CTX_get_ex_new_index(l, p, newf, dupf, freef) \ + CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509_STORE_CTX, l, p, newf, dupf, freef) +int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *ctx, int idx, void *data); +void *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *ctx, int idx); +int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s); +int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth); +X509 *X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x); +X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx); +X509_CRL *X509_STORE_CTX_get0_current_crl(X509_STORE_CTX *ctx); +X509_STORE_CTX *X509_STORE_CTX_get0_parent_ctx(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get0_chain(X509_STORE_CTX *ctx); +STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set_cert(X509_STORE_CTX *c, X509 *x); +void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *c, STACK_OF(X509) *sk); +void X509_STORE_CTX_set0_crls(X509_STORE_CTX *c, STACK_OF(X509_CRL) *sk); +int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose); +int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust); +int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, + int purpose, int trust); +void X509_STORE_CTX_set_flags(X509_STORE_CTX *ctx, unsigned long flags); +void X509_STORE_CTX_set_time(X509_STORE_CTX *ctx, unsigned long flags, + time_t t); + +X509_POLICY_TREE *X509_STORE_CTX_get0_policy_tree(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_explicit_policy(X509_STORE_CTX *ctx); +int X509_STORE_CTX_get_num_untrusted(X509_STORE_CTX *ctx); + +X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx); +void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param); +int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name); + +/* + * Bridge opacity barrier between libcrypt and libssl, also needed to support + * offline testing in test/danetest.c + */ +void X509_STORE_CTX_set0_dane(X509_STORE_CTX *ctx, SSL_DANE *dane); +#define DANE_FLAG_NO_DANE_EE_NAMECHECKS (1L << 0) + +/* X509_VERIFY_PARAM functions */ + +X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void); +void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to, + const X509_VERIFY_PARAM *from); +int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name); +int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param, + unsigned long flags); +unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose); +int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust); +void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth); +void X509_VERIFY_PARAM_set_auth_level(X509_VERIFY_PARAM *param, int auth_level); +time_t X509_VERIFY_PARAM_get_time(const X509_VERIFY_PARAM *param); +void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t); +int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param, + ASN1_OBJECT *policy); +int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param, + STACK_OF(ASN1_OBJECT) *policies); + +int X509_VERIFY_PARAM_set_inh_flags(X509_VERIFY_PARAM *param, + uint32_t flags); +uint32_t X509_VERIFY_PARAM_get_inh_flags(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param, + const char *name, size_t namelen); +void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param, + unsigned int flags); +unsigned int X509_VERIFY_PARAM_get_hostflags(const X509_VERIFY_PARAM *param); +char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *); +void X509_VERIFY_PARAM_move_peername(X509_VERIFY_PARAM *, X509_VERIFY_PARAM *); +int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param, + const char *email, size_t emaillen); +int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param, + const unsigned char *ip, size_t iplen); +int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, + const char *ipasc); + +int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_auth_level(const X509_VERIFY_PARAM *param); +const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param); + +int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param); +int X509_VERIFY_PARAM_get_count(void); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id); +const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name); +void X509_VERIFY_PARAM_table_cleanup(void); + +/* Non positive return values are errors */ +#define X509_PCY_TREE_FAILURE -2 /* Failure to satisfy explicit policy */ +#define X509_PCY_TREE_INVALID -1 /* Inconsistent or invalid extensions */ +#define X509_PCY_TREE_INTERNAL 0 /* Internal error, most likely malloc */ + +/* + * Positive return values form a bit mask, all but the first are internal to + * the library and don't appear in results from X509_policy_check(). + */ +#define X509_PCY_TREE_VALID 1 /* The policy tree is valid */ +#define X509_PCY_TREE_EMPTY 2 /* The policy tree is empty */ +#define X509_PCY_TREE_EXPLICIT 4 /* Explicit policy required */ + +int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy, + STACK_OF(X509) *certs, + STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags); + +void X509_policy_tree_free(X509_POLICY_TREE *tree); + +int X509_policy_tree_level_count(const X509_POLICY_TREE *tree); +X509_POLICY_LEVEL *X509_policy_tree_get0_level(const X509_POLICY_TREE *tree, + int i); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_policies(const + X509_POLICY_TREE + *tree); + +STACK_OF(X509_POLICY_NODE) *X509_policy_tree_get0_user_policies(const + X509_POLICY_TREE + *tree); + +int X509_policy_level_node_count(X509_POLICY_LEVEL *level); + +X509_POLICY_NODE *X509_policy_level_get0_node(X509_POLICY_LEVEL *level, + int i); + +const ASN1_OBJECT *X509_policy_node_get0_policy(const X509_POLICY_NODE *node); + +STACK_OF(POLICYQUALINFO) *X509_policy_node_get0_qualifiers(const + X509_POLICY_NODE + *node); +const X509_POLICY_NODE *X509_policy_node_get0_parent(const X509_POLICY_NODE + *node); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/lib/openssl/include/openssl/x509err.h b/lib/openssl/include/openssl/x509err.h new file mode 100644 index 0000000..cd08673 --- /dev/null +++ b/lib/openssl/include/openssl/x509err.h @@ -0,0 +1,129 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509ERR_H +# define HEADER_X509ERR_H + +# include + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509_strings(void); + +/* + * X509 function codes. + */ +# define X509_F_ADD_CERT_DIR 100 +# define X509_F_BUILD_CHAIN 106 +# define X509_F_BY_FILE_CTRL 101 +# define X509_F_CHECK_NAME_CONSTRAINTS 149 +# define X509_F_CHECK_POLICY 145 +# define X509_F_DANE_I2D 107 +# define X509_F_DIR_CTRL 102 +# define X509_F_GET_CERT_BY_SUBJECT 103 +# define X509_F_I2D_X509_AUX 151 +# define X509_F_LOOKUP_CERTS_SK 152 +# define X509_F_NETSCAPE_SPKI_B64_DECODE 129 +# define X509_F_NETSCAPE_SPKI_B64_ENCODE 130 +# define X509_F_NEW_DIR 153 +# define X509_F_X509AT_ADD1_ATTR 135 +# define X509_F_X509V3_ADD_EXT 104 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_NID 136 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_OBJ 137 +# define X509_F_X509_ATTRIBUTE_CREATE_BY_TXT 140 +# define X509_F_X509_ATTRIBUTE_GET0_DATA 139 +# define X509_F_X509_ATTRIBUTE_SET1_DATA 138 +# define X509_F_X509_CHECK_PRIVATE_KEY 128 +# define X509_F_X509_CRL_DIFF 105 +# define X509_F_X509_CRL_METHOD_NEW 154 +# define X509_F_X509_CRL_PRINT_FP 147 +# define X509_F_X509_EXTENSION_CREATE_BY_NID 108 +# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109 +# define X509_F_X509_GET_PUBKEY_PARAMETERS 110 +# define X509_F_X509_LOAD_CERT_CRL_FILE 132 +# define X509_F_X509_LOAD_CERT_FILE 111 +# define X509_F_X509_LOAD_CRL_FILE 112 +# define X509_F_X509_LOOKUP_METH_NEW 160 +# define X509_F_X509_LOOKUP_NEW 155 +# define X509_F_X509_NAME_ADD_ENTRY 113 +# define X509_F_X509_NAME_CANON 156 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_NID 114 +# define X509_F_X509_NAME_ENTRY_CREATE_BY_TXT 131 +# define X509_F_X509_NAME_ENTRY_SET_OBJECT 115 +# define X509_F_X509_NAME_ONELINE 116 +# define X509_F_X509_NAME_PRINT 117 +# define X509_F_X509_OBJECT_NEW 150 +# define X509_F_X509_PRINT_EX_FP 118 +# define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET 161 +# define X509_F_X509_PUBKEY_GET0 119 +# define X509_F_X509_PUBKEY_SET 120 +# define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 +# define X509_F_X509_REQ_PRINT_EX 121 +# define X509_F_X509_REQ_PRINT_FP 122 +# define X509_F_X509_REQ_TO_X509 123 +# define X509_F_X509_STORE_ADD_CERT 124 +# define X509_F_X509_STORE_ADD_CRL 125 +# define X509_F_X509_STORE_ADD_LOOKUP 157 +# define X509_F_X509_STORE_CTX_GET1_ISSUER 146 +# define X509_F_X509_STORE_CTX_INIT 143 +# define X509_F_X509_STORE_CTX_NEW 142 +# define X509_F_X509_STORE_CTX_PURPOSE_INHERIT 134 +# define X509_F_X509_STORE_NEW 158 +# define X509_F_X509_TO_X509_REQ 126 +# define X509_F_X509_TRUST_ADD 133 +# define X509_F_X509_TRUST_SET 141 +# define X509_F_X509_VERIFY_CERT 127 +# define X509_F_X509_VERIFY_PARAM_NEW 159 + +/* + * X509 reason codes. + */ +# define X509_R_AKID_MISMATCH 110 +# define X509_R_BAD_SELECTOR 133 +# define X509_R_BAD_X509_FILETYPE 100 +# define X509_R_BASE64_DECODE_ERROR 118 +# define X509_R_CANT_CHECK_DH_KEY 114 +# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101 +# define X509_R_CRL_ALREADY_DELTA 127 +# define X509_R_CRL_VERIFY_FAILURE 131 +# define X509_R_IDP_MISMATCH 128 +# define X509_R_INVALID_ATTRIBUTES 138 +# define X509_R_INVALID_DIRECTORY 113 +# define X509_R_INVALID_FIELD_NAME 119 +# define X509_R_INVALID_TRUST 123 +# define X509_R_ISSUER_MISMATCH 129 +# define X509_R_KEY_TYPE_MISMATCH 115 +# define X509_R_KEY_VALUES_MISMATCH 116 +# define X509_R_LOADING_CERT_DIR 103 +# define X509_R_LOADING_DEFAULTS 104 +# define X509_R_METHOD_NOT_SUPPORTED 124 +# define X509_R_NAME_TOO_LONG 134 +# define X509_R_NEWER_CRL_NOT_NEWER 132 +# define X509_R_NO_CERTIFICATE_FOUND 135 +# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 +# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 +# define X509_R_NO_CRL_FOUND 137 +# define X509_R_NO_CRL_NUMBER 130 +# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 +# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 +# define X509_R_SHOULD_RETRY 106 +# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 +# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 +# define X509_R_UNKNOWN_KEY_TYPE 117 +# define X509_R_UNKNOWN_NID 109 +# define X509_R_UNKNOWN_PURPOSE_ID 121 +# define X509_R_UNKNOWN_TRUST_ID 120 +# define X509_R_UNSUPPORTED_ALGORITHM 111 +# define X509_R_WRONG_LOOKUP_TYPE 112 +# define X509_R_WRONG_TYPE 122 + +#endif diff --git a/lib/openssl/include/openssl/x509v3.h b/lib/openssl/include/openssl/x509v3.h new file mode 100644 index 0000000..3a4f04c --- /dev/null +++ b/lib/openssl/include/openssl/x509v3.h @@ -0,0 +1,938 @@ +/* + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3_H +# define HEADER_X509V3_H + +# include +# include +# include +# include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward reference */ +struct v3_ext_method; +struct v3_ext_ctx; + +/* Useful typedefs */ + +typedef void *(*X509V3_EXT_NEW)(void); +typedef void (*X509V3_EXT_FREE) (void *); +typedef void *(*X509V3_EXT_D2I)(void *, const unsigned char **, long); +typedef int (*X509V3_EXT_I2D) (void *, unsigned char **); +typedef STACK_OF(CONF_VALUE) * + (*X509V3_EXT_I2V) (const struct v3_ext_method *method, void *ext, + STACK_OF(CONF_VALUE) *extlist); +typedef void *(*X509V3_EXT_V2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, + STACK_OF(CONF_VALUE) *values); +typedef char *(*X509V3_EXT_I2S)(const struct v3_ext_method *method, + void *ext); +typedef void *(*X509V3_EXT_S2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); +typedef int (*X509V3_EXT_I2R) (const struct v3_ext_method *method, void *ext, + BIO *out, int indent); +typedef void *(*X509V3_EXT_R2I)(const struct v3_ext_method *method, + struct v3_ext_ctx *ctx, const char *str); + +/* V3 extension structure */ + +struct v3_ext_method { + int ext_nid; + int ext_flags; +/* If this is set the following four fields are ignored */ + ASN1_ITEM_EXP *it; +/* Old style ASN1 calls */ + X509V3_EXT_NEW ext_new; + X509V3_EXT_FREE ext_free; + X509V3_EXT_D2I d2i; + X509V3_EXT_I2D i2d; +/* The following pair is used for string extensions */ + X509V3_EXT_I2S i2s; + X509V3_EXT_S2I s2i; +/* The following pair is used for multi-valued extensions */ + X509V3_EXT_I2V i2v; + X509V3_EXT_V2I v2i; +/* The following are used for raw extensions */ + X509V3_EXT_I2R i2r; + X509V3_EXT_R2I r2i; + void *usr_data; /* Any extension specific data */ +}; + +typedef struct X509V3_CONF_METHOD_st { + char *(*get_string) (void *db, const char *section, const char *value); + STACK_OF(CONF_VALUE) *(*get_section) (void *db, const char *section); + void (*free_string) (void *db, char *string); + void (*free_section) (void *db, STACK_OF(CONF_VALUE) *section); +} X509V3_CONF_METHOD; + +/* Context specific info */ +struct v3_ext_ctx { +# define CTX_TEST 0x1 +# define X509V3_CTX_REPLACE 0x2 + int flags; + X509 *issuer_cert; + X509 *subject_cert; + X509_REQ *subject_req; + X509_CRL *crl; + X509V3_CONF_METHOD *db_meth; + void *db; +/* Maybe more here */ +}; + +typedef struct v3_ext_method X509V3_EXT_METHOD; + +DEFINE_STACK_OF(X509V3_EXT_METHOD) + +/* ext_flags values */ +# define X509V3_EXT_DYNAMIC 0x1 +# define X509V3_EXT_CTX_DEP 0x2 +# define X509V3_EXT_MULTILINE 0x4 + +typedef BIT_STRING_BITNAME ENUMERATED_NAMES; + +typedef struct BASIC_CONSTRAINTS_st { + int ca; + ASN1_INTEGER *pathlen; +} BASIC_CONSTRAINTS; + +typedef struct PKEY_USAGE_PERIOD_st { + ASN1_GENERALIZEDTIME *notBefore; + ASN1_GENERALIZEDTIME *notAfter; +} PKEY_USAGE_PERIOD; + +typedef struct otherName_st { + ASN1_OBJECT *type_id; + ASN1_TYPE *value; +} OTHERNAME; + +typedef struct EDIPartyName_st { + ASN1_STRING *nameAssigner; + ASN1_STRING *partyName; +} EDIPARTYNAME; + +typedef struct GENERAL_NAME_st { +# define GEN_OTHERNAME 0 +# define GEN_EMAIL 1 +# define GEN_DNS 2 +# define GEN_X400 3 +# define GEN_DIRNAME 4 +# define GEN_EDIPARTY 5 +# define GEN_URI 6 +# define GEN_IPADD 7 +# define GEN_RID 8 + int type; + union { + char *ptr; + OTHERNAME *otherName; /* otherName */ + ASN1_IA5STRING *rfc822Name; + ASN1_IA5STRING *dNSName; + ASN1_STRING *x400Address; + X509_NAME *directoryName; + EDIPARTYNAME *ediPartyName; + ASN1_IA5STRING *uniformResourceIdentifier; + ASN1_OCTET_STRING *iPAddress; + ASN1_OBJECT *registeredID; + /* Old names */ + ASN1_OCTET_STRING *ip; /* iPAddress */ + X509_NAME *dirn; /* dirn */ + ASN1_IA5STRING *ia5; /* rfc822Name, dNSName, + * uniformResourceIdentifier */ + ASN1_OBJECT *rid; /* registeredID */ + ASN1_TYPE *other; /* x400Address */ + } d; +} GENERAL_NAME; + +typedef struct ACCESS_DESCRIPTION_st { + ASN1_OBJECT *method; + GENERAL_NAME *location; +} ACCESS_DESCRIPTION; + +typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS; + +typedef STACK_OF(ASN1_OBJECT) EXTENDED_KEY_USAGE; + +typedef STACK_OF(ASN1_INTEGER) TLS_FEATURE; + +DEFINE_STACK_OF(GENERAL_NAME) +typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; +DEFINE_STACK_OF(GENERAL_NAMES) + +DEFINE_STACK_OF(ACCESS_DESCRIPTION) + +typedef struct DIST_POINT_NAME_st { + int type; + union { + GENERAL_NAMES *fullname; + STACK_OF(X509_NAME_ENTRY) *relativename; + } name; +/* If relativename then this contains the full distribution point name */ + X509_NAME *dpname; +} DIST_POINT_NAME; +/* All existing reasons */ +# define CRLDP_ALL_REASONS 0x807f + +# define CRL_REASON_NONE -1 +# define CRL_REASON_UNSPECIFIED 0 +# define CRL_REASON_KEY_COMPROMISE 1 +# define CRL_REASON_CA_COMPROMISE 2 +# define CRL_REASON_AFFILIATION_CHANGED 3 +# define CRL_REASON_SUPERSEDED 4 +# define CRL_REASON_CESSATION_OF_OPERATION 5 +# define CRL_REASON_CERTIFICATE_HOLD 6 +# define CRL_REASON_REMOVE_FROM_CRL 8 +# define CRL_REASON_PRIVILEGE_WITHDRAWN 9 +# define CRL_REASON_AA_COMPROMISE 10 + +struct DIST_POINT_st { + DIST_POINT_NAME *distpoint; + ASN1_BIT_STRING *reasons; + GENERAL_NAMES *CRLissuer; + int dp_reasons; +}; + +typedef STACK_OF(DIST_POINT) CRL_DIST_POINTS; + +DEFINE_STACK_OF(DIST_POINT) + +struct AUTHORITY_KEYID_st { + ASN1_OCTET_STRING *keyid; + GENERAL_NAMES *issuer; + ASN1_INTEGER *serial; +}; + +/* Strong extranet structures */ + +typedef struct SXNET_ID_st { + ASN1_INTEGER *zone; + ASN1_OCTET_STRING *user; +} SXNETID; + +DEFINE_STACK_OF(SXNETID) + +typedef struct SXNET_st { + ASN1_INTEGER *version; + STACK_OF(SXNETID) *ids; +} SXNET; + +typedef struct NOTICEREF_st { + ASN1_STRING *organization; + STACK_OF(ASN1_INTEGER) *noticenos; +} NOTICEREF; + +typedef struct USERNOTICE_st { + NOTICEREF *noticeref; + ASN1_STRING *exptext; +} USERNOTICE; + +typedef struct POLICYQUALINFO_st { + ASN1_OBJECT *pqualid; + union { + ASN1_IA5STRING *cpsuri; + USERNOTICE *usernotice; + ASN1_TYPE *other; + } d; +} POLICYQUALINFO; + +DEFINE_STACK_OF(POLICYQUALINFO) + +typedef struct POLICYINFO_st { + ASN1_OBJECT *policyid; + STACK_OF(POLICYQUALINFO) *qualifiers; +} POLICYINFO; + +typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; + +DEFINE_STACK_OF(POLICYINFO) + +typedef struct POLICY_MAPPING_st { + ASN1_OBJECT *issuerDomainPolicy; + ASN1_OBJECT *subjectDomainPolicy; +} POLICY_MAPPING; + +DEFINE_STACK_OF(POLICY_MAPPING) + +typedef STACK_OF(POLICY_MAPPING) POLICY_MAPPINGS; + +typedef struct GENERAL_SUBTREE_st { + GENERAL_NAME *base; + ASN1_INTEGER *minimum; + ASN1_INTEGER *maximum; +} GENERAL_SUBTREE; + +DEFINE_STACK_OF(GENERAL_SUBTREE) + +struct NAME_CONSTRAINTS_st { + STACK_OF(GENERAL_SUBTREE) *permittedSubtrees; + STACK_OF(GENERAL_SUBTREE) *excludedSubtrees; +}; + +typedef struct POLICY_CONSTRAINTS_st { + ASN1_INTEGER *requireExplicitPolicy; + ASN1_INTEGER *inhibitPolicyMapping; +} POLICY_CONSTRAINTS; + +/* Proxy certificate structures, see RFC 3820 */ +typedef struct PROXY_POLICY_st { + ASN1_OBJECT *policyLanguage; + ASN1_OCTET_STRING *policy; +} PROXY_POLICY; + +typedef struct PROXY_CERT_INFO_EXTENSION_st { + ASN1_INTEGER *pcPathLengthConstraint; + PROXY_POLICY *proxyPolicy; +} PROXY_CERT_INFO_EXTENSION; + +DECLARE_ASN1_FUNCTIONS(PROXY_POLICY) +DECLARE_ASN1_FUNCTIONS(PROXY_CERT_INFO_EXTENSION) + +struct ISSUING_DIST_POINT_st { + DIST_POINT_NAME *distpoint; + int onlyuser; + int onlyCA; + ASN1_BIT_STRING *onlysomereasons; + int indirectCRL; + int onlyattr; +}; + +/* Values in idp_flags field */ +/* IDP present */ +# define IDP_PRESENT 0x1 +/* IDP values inconsistent */ +# define IDP_INVALID 0x2 +/* onlyuser true */ +# define IDP_ONLYUSER 0x4 +/* onlyCA true */ +# define IDP_ONLYCA 0x8 +/* onlyattr true */ +# define IDP_ONLYATTR 0x10 +/* indirectCRL true */ +# define IDP_INDIRECT 0x20 +/* onlysomereasons present */ +# define IDP_REASONS 0x40 + +# define X509V3_conf_err(val) ERR_add_error_data(6, \ + "section:", (val)->section, \ + ",name:", (val)->name, ",value:", (val)->value) + +# define X509V3_set_ctx_test(ctx) \ + X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST) +# define X509V3_set_ctx_nodb(ctx) (ctx)->db = NULL; + +# define EXT_BITSTRING(nid, table) { nid, 0, ASN1_ITEM_ref(ASN1_BIT_STRING), \ + 0,0,0,0, \ + 0,0, \ + (X509V3_EXT_I2V)i2v_ASN1_BIT_STRING, \ + (X509V3_EXT_V2I)v2i_ASN1_BIT_STRING, \ + NULL, NULL, \ + table} + +# define EXT_IA5STRING(nid) { nid, 0, ASN1_ITEM_ref(ASN1_IA5STRING), \ + 0,0,0,0, \ + (X509V3_EXT_I2S)i2s_ASN1_IA5STRING, \ + (X509V3_EXT_S2I)s2i_ASN1_IA5STRING, \ + 0,0,0,0, \ + NULL} + +# define EXT_END { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/* X509_PURPOSE stuff */ + +# define EXFLAG_BCONS 0x1 +# define EXFLAG_KUSAGE 0x2 +# define EXFLAG_XKUSAGE 0x4 +# define EXFLAG_NSCERT 0x8 + +# define EXFLAG_CA 0x10 +/* Really self issued not necessarily self signed */ +# define EXFLAG_SI 0x20 +# define EXFLAG_V1 0x40 +# define EXFLAG_INVALID 0x80 +/* EXFLAG_SET is set to indicate that some values have been precomputed */ +# define EXFLAG_SET 0x100 +# define EXFLAG_CRITICAL 0x200 +# define EXFLAG_PROXY 0x400 + +# define EXFLAG_INVALID_POLICY 0x800 +# define EXFLAG_FRESHEST 0x1000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_NO_FINGERPRINT 0x100000 + +# define KU_DIGITAL_SIGNATURE 0x0080 +# define KU_NON_REPUDIATION 0x0040 +# define KU_KEY_ENCIPHERMENT 0x0020 +# define KU_DATA_ENCIPHERMENT 0x0010 +# define KU_KEY_AGREEMENT 0x0008 +# define KU_KEY_CERT_SIGN 0x0004 +# define KU_CRL_SIGN 0x0002 +# define KU_ENCIPHER_ONLY 0x0001 +# define KU_DECIPHER_ONLY 0x8000 + +# define NS_SSL_CLIENT 0x80 +# define NS_SSL_SERVER 0x40 +# define NS_SMIME 0x20 +# define NS_OBJSIGN 0x10 +# define NS_SSL_CA 0x04 +# define NS_SMIME_CA 0x02 +# define NS_OBJSIGN_CA 0x01 +# define NS_ANY_CA (NS_SSL_CA|NS_SMIME_CA|NS_OBJSIGN_CA) + +# define XKU_SSL_SERVER 0x1 +# define XKU_SSL_CLIENT 0x2 +# define XKU_SMIME 0x4 +# define XKU_CODE_SIGN 0x8 +# define XKU_SGC 0x10 +# define XKU_OCSP_SIGN 0x20 +# define XKU_TIMESTAMP 0x40 +# define XKU_DVCS 0x80 +# define XKU_ANYEKU 0x100 + +# define X509_PURPOSE_DYNAMIC 0x1 +# define X509_PURPOSE_DYNAMIC_NAME 0x2 + +typedef struct x509_purpose_st { + int purpose; + int trust; /* Default trust ID */ + int flags; + int (*check_purpose) (const struct x509_purpose_st *, const X509 *, int); + char *name; + char *sname; + void *usr_data; +} X509_PURPOSE; + +# define X509_PURPOSE_SSL_CLIENT 1 +# define X509_PURPOSE_SSL_SERVER 2 +# define X509_PURPOSE_NS_SSL_SERVER 3 +# define X509_PURPOSE_SMIME_SIGN 4 +# define X509_PURPOSE_SMIME_ENCRYPT 5 +# define X509_PURPOSE_CRL_SIGN 6 +# define X509_PURPOSE_ANY 7 +# define X509_PURPOSE_OCSP_HELPER 8 +# define X509_PURPOSE_TIMESTAMP_SIGN 9 + +# define X509_PURPOSE_MIN 1 +# define X509_PURPOSE_MAX 9 + +/* Flags for X509V3_EXT_print() */ + +# define X509V3_EXT_UNKNOWN_MASK (0xfL << 16) +/* Return error for unknown extensions */ +# define X509V3_EXT_DEFAULT 0 +/* Print error for unknown extensions */ +# define X509V3_EXT_ERROR_UNKNOWN (1L << 16) +/* ASN1 parse unknown extensions */ +# define X509V3_EXT_PARSE_UNKNOWN (2L << 16) +/* BIO_dump unknown extensions */ +# define X509V3_EXT_DUMP_UNKNOWN (3L << 16) + +/* Flags for X509V3_add1_i2d */ + +# define X509V3_ADD_OP_MASK 0xfL +# define X509V3_ADD_DEFAULT 0L +# define X509V3_ADD_APPEND 1L +# define X509V3_ADD_REPLACE 2L +# define X509V3_ADD_REPLACE_EXISTING 3L +# define X509V3_ADD_KEEP_EXISTING 4L +# define X509V3_ADD_DELETE 5L +# define X509V3_ADD_SILENT 0x10 + +DEFINE_STACK_OF(X509_PURPOSE) + +DECLARE_ASN1_FUNCTIONS(BASIC_CONSTRAINTS) + +DECLARE_ASN1_FUNCTIONS(SXNET) +DECLARE_ASN1_FUNCTIONS(SXNETID) + +int SXNET_add_id_asc(SXNET **psx, const char *zone, const char *user, int userlen); +int SXNET_add_id_ulong(SXNET **psx, unsigned long lzone, const char *user, + int userlen); +int SXNET_add_id_INTEGER(SXNET **psx, ASN1_INTEGER *izone, const char *user, + int userlen); + +ASN1_OCTET_STRING *SXNET_get_id_asc(SXNET *sx, const char *zone); +ASN1_OCTET_STRING *SXNET_get_id_ulong(SXNET *sx, unsigned long lzone); +ASN1_OCTET_STRING *SXNET_get_id_INTEGER(SXNET *sx, ASN1_INTEGER *zone); + +DECLARE_ASN1_FUNCTIONS(AUTHORITY_KEYID) + +DECLARE_ASN1_FUNCTIONS(PKEY_USAGE_PERIOD) + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAME) +GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a); +int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b); + +ASN1_BIT_STRING *v2i_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, + STACK_OF(CONF_VALUE) *nval); +STACK_OF(CONF_VALUE) *i2v_ASN1_BIT_STRING(X509V3_EXT_METHOD *method, + ASN1_BIT_STRING *bits, + STACK_OF(CONF_VALUE) *extlist); +char *i2s_ASN1_IA5STRING(X509V3_EXT_METHOD *method, ASN1_IA5STRING *ia5); +ASN1_IA5STRING *s2i_ASN1_IA5STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, + GENERAL_NAME *gen, + STACK_OF(CONF_VALUE) *ret); +int GENERAL_NAME_print(BIO *out, GENERAL_NAME *gen); + +DECLARE_ASN1_FUNCTIONS(GENERAL_NAMES) + +STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, + GENERAL_NAMES *gen, + STACK_OF(CONF_VALUE) *extlist); +GENERAL_NAMES *v2i_GENERAL_NAMES(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval); + +DECLARE_ASN1_FUNCTIONS(OTHERNAME) +DECLARE_ASN1_FUNCTIONS(EDIPARTYNAME) +int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b); +void GENERAL_NAME_set0_value(GENERAL_NAME *a, int type, void *value); +void *GENERAL_NAME_get0_value(const GENERAL_NAME *a, int *ptype); +int GENERAL_NAME_set0_othername(GENERAL_NAME *gen, + ASN1_OBJECT *oid, ASN1_TYPE *value); +int GENERAL_NAME_get0_otherName(const GENERAL_NAME *gen, + ASN1_OBJECT **poid, ASN1_TYPE **pvalue); + +char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + const ASN1_OCTET_STRING *ia5); +ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, const char *str); + +DECLARE_ASN1_FUNCTIONS(EXTENDED_KEY_USAGE) +int i2a_ACCESS_DESCRIPTION(BIO *bp, const ACCESS_DESCRIPTION *a); + +DECLARE_ASN1_ALLOC_FUNCTIONS(TLS_FEATURE) + +DECLARE_ASN1_FUNCTIONS(CERTIFICATEPOLICIES) +DECLARE_ASN1_FUNCTIONS(POLICYINFO) +DECLARE_ASN1_FUNCTIONS(POLICYQUALINFO) +DECLARE_ASN1_FUNCTIONS(USERNOTICE) +DECLARE_ASN1_FUNCTIONS(NOTICEREF) + +DECLARE_ASN1_FUNCTIONS(CRL_DIST_POINTS) +DECLARE_ASN1_FUNCTIONS(DIST_POINT) +DECLARE_ASN1_FUNCTIONS(DIST_POINT_NAME) +DECLARE_ASN1_FUNCTIONS(ISSUING_DIST_POINT) + +int DIST_POINT_set_dpname(DIST_POINT_NAME *dpn, X509_NAME *iname); + +int NAME_CONSTRAINTS_check(X509 *x, NAME_CONSTRAINTS *nc); +int NAME_CONSTRAINTS_check_CN(X509 *x, NAME_CONSTRAINTS *nc); + +DECLARE_ASN1_FUNCTIONS(ACCESS_DESCRIPTION) +DECLARE_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) + +DECLARE_ASN1_ITEM(POLICY_MAPPING) +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_MAPPING) +DECLARE_ASN1_ITEM(POLICY_MAPPINGS) + +DECLARE_ASN1_ITEM(GENERAL_SUBTREE) +DECLARE_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) + +DECLARE_ASN1_ITEM(NAME_CONSTRAINTS) +DECLARE_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +DECLARE_ASN1_ALLOC_FUNCTIONS(POLICY_CONSTRAINTS) +DECLARE_ASN1_ITEM(POLICY_CONSTRAINTS) + +GENERAL_NAME *a2i_GENERAL_NAME(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, int gen_type, + const char *value, int is_nc); + +# ifdef HEADER_CONF_H +GENERAL_NAME *v2i_GENERAL_NAME(const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf); +GENERAL_NAME *v2i_GENERAL_NAME_ex(GENERAL_NAME *out, + const X509V3_EXT_METHOD *method, + X509V3_CTX *ctx, CONF_VALUE *cnf, + int is_nc); +void X509V3_conf_free(CONF_VALUE *val); + +X509_EXTENSION *X509V3_EXT_nconf_nid(CONF *conf, X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_nconf(CONF *conf, X509V3_CTX *ctx, const char *name, + const char *value); +int X509V3_EXT_add_nconf_sk(CONF *conf, X509V3_CTX *ctx, const char *section, + STACK_OF(X509_EXTENSION) **sk); +int X509V3_EXT_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509 *cert); +int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_REQ *req); +int X509V3_EXT_CRL_add_nconf(CONF *conf, X509V3_CTX *ctx, const char *section, + X509_CRL *crl); + +X509_EXTENSION *X509V3_EXT_conf_nid(LHASH_OF(CONF_VALUE) *conf, + X509V3_CTX *ctx, int ext_nid, + const char *value); +X509_EXTENSION *X509V3_EXT_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *name, const char *value); +int X509V3_EXT_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509 *cert); +int X509V3_EXT_REQ_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_REQ *req); +int X509V3_EXT_CRL_add_conf(LHASH_OF(CONF_VALUE) *conf, X509V3_CTX *ctx, + const char *section, X509_CRL *crl); + +int X509V3_add_value_bool_nf(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_get_value_bool(const CONF_VALUE *value, int *asn1_bool); +int X509V3_get_value_int(const CONF_VALUE *value, ASN1_INTEGER **aint); +void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); +void X509V3_set_conf_lhash(X509V3_CTX *ctx, LHASH_OF(CONF_VALUE) *lhash); +# endif + +char *X509V3_get_string(X509V3_CTX *ctx, const char *name, const char *section); +STACK_OF(CONF_VALUE) *X509V3_get_section(X509V3_CTX *ctx, const char *section); +void X509V3_string_free(X509V3_CTX *ctx, char *str); +void X509V3_section_free(X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *section); +void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, + X509_REQ *req, X509_CRL *crl, int flags); + +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_uchar(const char *name, const unsigned char *value, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_bool(const char *name, int asn1_bool, + STACK_OF(CONF_VALUE) **extlist); +int X509V3_add_value_int(const char *name, const ASN1_INTEGER *aint, + STACK_OF(CONF_VALUE) **extlist); +char *i2s_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const ASN1_INTEGER *aint); +ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *meth, const char *value); +char *i2s_ASN1_ENUMERATED(X509V3_EXT_METHOD *meth, const ASN1_ENUMERATED *aint); +char *i2s_ASN1_ENUMERATED_TABLE(X509V3_EXT_METHOD *meth, + const ASN1_ENUMERATED *aint); +int X509V3_EXT_add(X509V3_EXT_METHOD *ext); +int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist); +int X509V3_EXT_add_alias(int nid_to, int nid_from); +void X509V3_EXT_cleanup(void); + +const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext); +const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid); +int X509V3_add_standard_extensions(void); +STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line); +void *X509V3_EXT_d2i(X509_EXTENSION *ext); +void *X509V3_get_d2i(const STACK_OF(X509_EXTENSION) *x, int nid, int *crit, + int *idx); + +X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc); +int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value, + int crit, unsigned long flags); + +#if OPENSSL_API_COMPAT < 0x10100000L +/* The new declarations are in crypto.h, but the old ones were here. */ +# define hex_to_string OPENSSL_buf2hexstr +# define string_to_hex OPENSSL_hexstr2buf +#endif + +void X509V3_EXT_val_prn(BIO *out, STACK_OF(CONF_VALUE) *val, int indent, + int ml); +int X509V3_EXT_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, + int indent); +#ifndef OPENSSL_NO_STDIO +int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent); +#endif +int X509V3_extensions_print(BIO *out, const char *title, + const STACK_OF(X509_EXTENSION) *exts, + unsigned long flag, int indent); + +int X509_check_ca(X509 *x); +int X509_check_purpose(X509 *x, int id, int ca); +int X509_supported_extension(X509_EXTENSION *ex); +int X509_PURPOSE_set(int *p, int purpose); +int X509_check_issued(X509 *issuer, X509 *subject); +int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid); +void X509_set_proxy_flag(X509 *x); +void X509_set_proxy_pathlen(X509 *x, long l); +long X509_get_proxy_pathlen(X509 *x); + +uint32_t X509_get_extension_flags(X509 *x); +uint32_t X509_get_key_usage(X509 *x); +uint32_t X509_get_extended_key_usage(X509 *x); +const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x); +const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); +const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); +const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); + +int X509_PURPOSE_get_count(void); +X509_PURPOSE *X509_PURPOSE_get0(int idx); +int X509_PURPOSE_get_by_sname(const char *sname); +int X509_PURPOSE_get_by_id(int id); +int X509_PURPOSE_add(int id, int trust, int flags, + int (*ck) (const X509_PURPOSE *, const X509 *, int), + const char *name, const char *sname, void *arg); +char *X509_PURPOSE_get0_name(const X509_PURPOSE *xp); +char *X509_PURPOSE_get0_sname(const X509_PURPOSE *xp); +int X509_PURPOSE_get_trust(const X509_PURPOSE *xp); +void X509_PURPOSE_cleanup(void); +int X509_PURPOSE_get_id(const X509_PURPOSE *); + +STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x); +STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x); +void X509_email_free(STACK_OF(OPENSSL_STRING) *sk); +STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x); +/* Flags for X509_check_* functions */ + +/* + * Always check subject name for host match even if subject alt names present + */ +# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1 +/* Disable wildcard matching for dnsName fields and common name. */ +# define X509_CHECK_FLAG_NO_WILDCARDS 0x2 +/* Wildcards must not match a partial label. */ +# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4 +/* Allow (non-partial) wildcards to match multiple labels. */ +# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8 +/* Constraint verifier subdomain patterns to match a single labels. */ +# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10 +/* Never check the subject CN */ +# define X509_CHECK_FLAG_NEVER_CHECK_SUBJECT 0x20 +/* + * Match reference identifiers starting with "." to any sub-domain. + * This is a non-public flag, turned on implicitly when the subject + * reference identity is a DNS name. + */ +# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000 + +int X509_check_host(X509 *x, const char *chk, size_t chklen, + unsigned int flags, char **peername); +int X509_check_email(X509 *x, const char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen, + unsigned int flags); +int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags); + +ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc); +ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc); +int X509V3_NAME_from_section(X509_NAME *nm, STACK_OF(CONF_VALUE) *dn_sk, + unsigned long chtype); + +void X509_POLICY_NODE_print(BIO *out, X509_POLICY_NODE *node, int indent); +DEFINE_STACK_OF(X509_POLICY_NODE) + +#ifndef OPENSSL_NO_RFC3779 +typedef struct ASRange_st { + ASN1_INTEGER *min, *max; +} ASRange; + +# define ASIdOrRange_id 0 +# define ASIdOrRange_range 1 + +typedef struct ASIdOrRange_st { + int type; + union { + ASN1_INTEGER *id; + ASRange *range; + } u; +} ASIdOrRange; + +typedef STACK_OF(ASIdOrRange) ASIdOrRanges; +DEFINE_STACK_OF(ASIdOrRange) + +# define ASIdentifierChoice_inherit 0 +# define ASIdentifierChoice_asIdsOrRanges 1 + +typedef struct ASIdentifierChoice_st { + int type; + union { + ASN1_NULL *inherit; + ASIdOrRanges *asIdsOrRanges; + } u; +} ASIdentifierChoice; + +typedef struct ASIdentifiers_st { + ASIdentifierChoice *asnum, *rdi; +} ASIdentifiers; + +DECLARE_ASN1_FUNCTIONS(ASRange) +DECLARE_ASN1_FUNCTIONS(ASIdOrRange) +DECLARE_ASN1_FUNCTIONS(ASIdentifierChoice) +DECLARE_ASN1_FUNCTIONS(ASIdentifiers) + +typedef struct IPAddressRange_st { + ASN1_BIT_STRING *min, *max; +} IPAddressRange; + +# define IPAddressOrRange_addressPrefix 0 +# define IPAddressOrRange_addressRange 1 + +typedef struct IPAddressOrRange_st { + int type; + union { + ASN1_BIT_STRING *addressPrefix; + IPAddressRange *addressRange; + } u; +} IPAddressOrRange; + +typedef STACK_OF(IPAddressOrRange) IPAddressOrRanges; +DEFINE_STACK_OF(IPAddressOrRange) + +# define IPAddressChoice_inherit 0 +# define IPAddressChoice_addressesOrRanges 1 + +typedef struct IPAddressChoice_st { + int type; + union { + ASN1_NULL *inherit; + IPAddressOrRanges *addressesOrRanges; + } u; +} IPAddressChoice; + +typedef struct IPAddressFamily_st { + ASN1_OCTET_STRING *addressFamily; + IPAddressChoice *ipAddressChoice; +} IPAddressFamily; + +typedef STACK_OF(IPAddressFamily) IPAddrBlocks; +DEFINE_STACK_OF(IPAddressFamily) + +DECLARE_ASN1_FUNCTIONS(IPAddressRange) +DECLARE_ASN1_FUNCTIONS(IPAddressOrRange) +DECLARE_ASN1_FUNCTIONS(IPAddressChoice) +DECLARE_ASN1_FUNCTIONS(IPAddressFamily) + +/* + * API tag for elements of the ASIdentifer SEQUENCE. + */ +# define V3_ASID_ASNUM 0 +# define V3_ASID_RDI 1 + +/* + * AFI values, assigned by IANA. It'd be nice to make the AFI + * handling code totally generic, but there are too many little things + * that would need to be defined for other address families for it to + * be worth the trouble. + */ +# define IANA_AFI_IPV4 1 +# define IANA_AFI_IPV6 2 + +/* + * Utilities to construct and extract values from RFC3779 extensions, + * since some of the encodings (particularly for IP address prefixes + * and ranges) are a bit tedious to work with directly. + */ +int X509v3_asid_add_inherit(ASIdentifiers *asid, int which); +int X509v3_asid_add_id_or_range(ASIdentifiers *asid, int which, + ASN1_INTEGER *min, ASN1_INTEGER *max); +int X509v3_addr_add_inherit(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi); +int X509v3_addr_add_prefix(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *a, const int prefixlen); +int X509v3_addr_add_range(IPAddrBlocks *addr, + const unsigned afi, const unsigned *safi, + unsigned char *min, unsigned char *max); +unsigned X509v3_addr_get_afi(const IPAddressFamily *f); +int X509v3_addr_get_range(IPAddressOrRange *aor, const unsigned afi, + unsigned char *min, unsigned char *max, + const int length); + +/* + * Canonical forms. + */ +int X509v3_asid_is_canonical(ASIdentifiers *asid); +int X509v3_addr_is_canonical(IPAddrBlocks *addr); +int X509v3_asid_canonize(ASIdentifiers *asid); +int X509v3_addr_canonize(IPAddrBlocks *addr); + +/* + * Tests for inheritance and containment. + */ +int X509v3_asid_inherits(ASIdentifiers *asid); +int X509v3_addr_inherits(IPAddrBlocks *addr); +int X509v3_asid_subset(ASIdentifiers *a, ASIdentifiers *b); +int X509v3_addr_subset(IPAddrBlocks *a, IPAddrBlocks *b); + +/* + * Check whether RFC 3779 extensions nest properly in chains. + */ +int X509v3_asid_validate_path(X509_STORE_CTX *); +int X509v3_addr_validate_path(X509_STORE_CTX *); +int X509v3_asid_validate_resource_set(STACK_OF(X509) *chain, + ASIdentifiers *ext, + int allow_inheritance); +int X509v3_addr_validate_resource_set(STACK_OF(X509) *chain, + IPAddrBlocks *ext, int allow_inheritance); + +#endif /* OPENSSL_NO_RFC3779 */ + +DEFINE_STACK_OF(ASN1_STRING) + +/* + * Admission Syntax + */ +typedef struct NamingAuthority_st NAMING_AUTHORITY; +typedef struct ProfessionInfo_st PROFESSION_INFO; +typedef struct Admissions_st ADMISSIONS; +typedef struct AdmissionSyntax_st ADMISSION_SYNTAX; +DECLARE_ASN1_FUNCTIONS(NAMING_AUTHORITY) +DECLARE_ASN1_FUNCTIONS(PROFESSION_INFO) +DECLARE_ASN1_FUNCTIONS(ADMISSIONS) +DECLARE_ASN1_FUNCTIONS(ADMISSION_SYNTAX) +DEFINE_STACK_OF(ADMISSIONS) +DEFINE_STACK_OF(PROFESSION_INFO) +typedef STACK_OF(PROFESSION_INFO) PROFESSION_INFOS; + +const ASN1_OBJECT *NAMING_AUTHORITY_get0_authorityId( + const NAMING_AUTHORITY *n); +const ASN1_IA5STRING *NAMING_AUTHORITY_get0_authorityURL( + const NAMING_AUTHORITY *n); +const ASN1_STRING *NAMING_AUTHORITY_get0_authorityText( + const NAMING_AUTHORITY *n); +void NAMING_AUTHORITY_set0_authorityId(NAMING_AUTHORITY *n, + ASN1_OBJECT* namingAuthorityId); +void NAMING_AUTHORITY_set0_authorityURL(NAMING_AUTHORITY *n, + ASN1_IA5STRING* namingAuthorityUrl); +void NAMING_AUTHORITY_set0_authorityText(NAMING_AUTHORITY *n, + ASN1_STRING* namingAuthorityText); + +const GENERAL_NAME *ADMISSION_SYNTAX_get0_admissionAuthority( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_admissionAuthority( + ADMISSION_SYNTAX *as, GENERAL_NAME *aa); +const STACK_OF(ADMISSIONS) *ADMISSION_SYNTAX_get0_contentsOfAdmissions( + const ADMISSION_SYNTAX *as); +void ADMISSION_SYNTAX_set0_contentsOfAdmissions( + ADMISSION_SYNTAX *as, STACK_OF(ADMISSIONS) *a); +const GENERAL_NAME *ADMISSIONS_get0_admissionAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_admissionAuthority(ADMISSIONS *a, GENERAL_NAME *aa); +const NAMING_AUTHORITY *ADMISSIONS_get0_namingAuthority(const ADMISSIONS *a); +void ADMISSIONS_set0_namingAuthority(ADMISSIONS *a, NAMING_AUTHORITY *na); +const PROFESSION_INFOS *ADMISSIONS_get0_professionInfos(const ADMISSIONS *a); +void ADMISSIONS_set0_professionInfos(ADMISSIONS *a, PROFESSION_INFOS *pi); +const ASN1_OCTET_STRING *PROFESSION_INFO_get0_addProfessionInfo( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_addProfessionInfo( + PROFESSION_INFO *pi, ASN1_OCTET_STRING *aos); +const NAMING_AUTHORITY *PROFESSION_INFO_get0_namingAuthority( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_namingAuthority( + PROFESSION_INFO *pi, NAMING_AUTHORITY *na); +const STACK_OF(ASN1_STRING) *PROFESSION_INFO_get0_professionItems( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionItems( + PROFESSION_INFO *pi, STACK_OF(ASN1_STRING) *as); +const STACK_OF(ASN1_OBJECT) *PROFESSION_INFO_get0_professionOIDs( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_professionOIDs( + PROFESSION_INFO *pi, STACK_OF(ASN1_OBJECT) *po); +const ASN1_PRINTABLESTRING *PROFESSION_INFO_get0_registrationNumber( + const PROFESSION_INFO *pi); +void PROFESSION_INFO_set0_registrationNumber( + PROFESSION_INFO *pi, ASN1_PRINTABLESTRING *rn); + +# ifdef __cplusplus +} +# endif +#endif diff --git a/lib/openssl/include/openssl/x509v3err.h b/lib/openssl/include/openssl/x509v3err.h new file mode 100644 index 0000000..3b9f713 --- /dev/null +++ b/lib/openssl/include/openssl/x509v3err.h @@ -0,0 +1,164 @@ +/* + * Generated by util/mkerr.pl DO NOT EDIT + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef HEADER_X509V3ERR_H +# define HEADER_X509V3ERR_H + +# ifndef HEADER_SYMHACKS_H +# include +# endif + +# ifdef __cplusplus +extern "C" +# endif +int ERR_load_X509V3_strings(void); + +/* + * X509V3 function codes. + */ +# define X509V3_F_A2I_GENERAL_NAME 164 +# define X509V3_F_ADDR_VALIDATE_PATH_INTERNAL 166 +# define X509V3_F_ASIDENTIFIERCHOICE_CANONIZE 161 +# define X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL 162 +# define X509V3_F_BIGNUM_TO_STRING 167 +# define X509V3_F_COPY_EMAIL 122 +# define X509V3_F_COPY_ISSUER 123 +# define X509V3_F_DO_DIRNAME 144 +# define X509V3_F_DO_EXT_I2D 135 +# define X509V3_F_DO_EXT_NCONF 151 +# define X509V3_F_GNAMES_FROM_SECTNAME 156 +# define X509V3_F_I2S_ASN1_ENUMERATED 121 +# define X509V3_F_I2S_ASN1_IA5STRING 149 +# define X509V3_F_I2S_ASN1_INTEGER 120 +# define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 +# define X509V3_F_I2V_AUTHORITY_KEYID 173 +# define X509V3_F_LEVEL_ADD_NODE 168 +# define X509V3_F_NOTICE_SECTION 132 +# define X509V3_F_NREF_NOS 133 +# define X509V3_F_POLICY_CACHE_CREATE 169 +# define X509V3_F_POLICY_CACHE_NEW 170 +# define X509V3_F_POLICY_DATA_NEW 171 +# define X509V3_F_POLICY_SECTION 131 +# define X509V3_F_PROCESS_PCI_VALUE 150 +# define X509V3_F_R2I_CERTPOL 130 +# define X509V3_F_R2I_PCI 155 +# define X509V3_F_S2I_ASN1_IA5STRING 100 +# define X509V3_F_S2I_ASN1_INTEGER 108 +# define X509V3_F_S2I_ASN1_OCTET_STRING 112 +# define X509V3_F_S2I_SKEY_ID 115 +# define X509V3_F_SET_DIST_POINT_NAME 158 +# define X509V3_F_SXNET_ADD_ID_ASC 125 +# define X509V3_F_SXNET_ADD_ID_INTEGER 126 +# define X509V3_F_SXNET_ADD_ID_ULONG 127 +# define X509V3_F_SXNET_GET_ID_ASC 128 +# define X509V3_F_SXNET_GET_ID_ULONG 129 +# define X509V3_F_TREE_INIT 172 +# define X509V3_F_V2I_ASIDENTIFIERS 163 +# define X509V3_F_V2I_ASN1_BIT_STRING 101 +# define X509V3_F_V2I_AUTHORITY_INFO_ACCESS 139 +# define X509V3_F_V2I_AUTHORITY_KEYID 119 +# define X509V3_F_V2I_BASIC_CONSTRAINTS 102 +# define X509V3_F_V2I_CRLD 134 +# define X509V3_F_V2I_EXTENDED_KEY_USAGE 103 +# define X509V3_F_V2I_GENERAL_NAMES 118 +# define X509V3_F_V2I_GENERAL_NAME_EX 117 +# define X509V3_F_V2I_IDP 157 +# define X509V3_F_V2I_IPADDRBLOCKS 159 +# define X509V3_F_V2I_ISSUER_ALT 153 +# define X509V3_F_V2I_NAME_CONSTRAINTS 147 +# define X509V3_F_V2I_POLICY_CONSTRAINTS 146 +# define X509V3_F_V2I_POLICY_MAPPINGS 145 +# define X509V3_F_V2I_SUBJECT_ALT 154 +# define X509V3_F_V2I_TLS_FEATURE 165 +# define X509V3_F_V3_GENERIC_EXTENSION 116 +# define X509V3_F_X509V3_ADD1_I2D 140 +# define X509V3_F_X509V3_ADD_LEN_VALUE 174 +# define X509V3_F_X509V3_ADD_VALUE 105 +# define X509V3_F_X509V3_EXT_ADD 104 +# define X509V3_F_X509V3_EXT_ADD_ALIAS 106 +# define X509V3_F_X509V3_EXT_I2D 136 +# define X509V3_F_X509V3_EXT_NCONF 152 +# define X509V3_F_X509V3_GET_SECTION 142 +# define X509V3_F_X509V3_GET_STRING 143 +# define X509V3_F_X509V3_GET_VALUE_BOOL 110 +# define X509V3_F_X509V3_PARSE_LIST 109 +# define X509V3_F_X509_PURPOSE_ADD 137 +# define X509V3_F_X509_PURPOSE_SET 141 + +/* + * X509V3 reason codes. + */ +# define X509V3_R_BAD_IP_ADDRESS 118 +# define X509V3_R_BAD_OBJECT 119 +# define X509V3_R_BN_DEC2BN_ERROR 100 +# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 +# define X509V3_R_DIRNAME_ERROR 149 +# define X509V3_R_DISTPOINT_ALREADY_SET 160 +# define X509V3_R_DUPLICATE_ZONE_ID 133 +# define X509V3_R_ERROR_CONVERTING_ZONE 131 +# define X509V3_R_ERROR_CREATING_EXTENSION 144 +# define X509V3_R_ERROR_IN_EXTENSION 128 +# define X509V3_R_EXPECTED_A_SECTION_NAME 137 +# define X509V3_R_EXTENSION_EXISTS 145 +# define X509V3_R_EXTENSION_NAME_ERROR 115 +# define X509V3_R_EXTENSION_NOT_FOUND 102 +# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 +# define X509V3_R_EXTENSION_VALUE_ERROR 116 +# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 +# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 +# define X509V3_R_INVALID_ASNUMBER 162 +# define X509V3_R_INVALID_ASRANGE 163 +# define X509V3_R_INVALID_BOOLEAN_STRING 104 +# define X509V3_R_INVALID_EXTENSION_STRING 105 +# define X509V3_R_INVALID_INHERITANCE 165 +# define X509V3_R_INVALID_IPADDRESS 166 +# define X509V3_R_INVALID_MULTIPLE_RDNS 161 +# define X509V3_R_INVALID_NAME 106 +# define X509V3_R_INVALID_NULL_ARGUMENT 107 +# define X509V3_R_INVALID_NULL_NAME 108 +# define X509V3_R_INVALID_NULL_VALUE 109 +# define X509V3_R_INVALID_NUMBER 140 +# define X509V3_R_INVALID_NUMBERS 141 +# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 +# define X509V3_R_INVALID_OPTION 138 +# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 +# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 +# define X509V3_R_INVALID_PURPOSE 146 +# define X509V3_R_INVALID_SAFI 164 +# define X509V3_R_INVALID_SECTION 135 +# define X509V3_R_INVALID_SYNTAX 143 +# define X509V3_R_ISSUER_DECODE_ERROR 126 +# define X509V3_R_MISSING_VALUE 124 +# define X509V3_R_NEED_ORGANIZATION_AND_NUMBERS 142 +# define X509V3_R_NO_CONFIG_DATABASE 136 +# define X509V3_R_NO_ISSUER_CERTIFICATE 121 +# define X509V3_R_NO_ISSUER_DETAILS 127 +# define X509V3_R_NO_POLICY_IDENTIFIER 139 +# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 +# define X509V3_R_NO_PUBLIC_KEY 114 +# define X509V3_R_NO_SUBJECT_DETAILS 125 +# define X509V3_R_OPERATION_NOT_DEFINED 148 +# define X509V3_R_OTHERNAME_ERROR 147 +# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 +# define X509V3_R_POLICY_PATH_LENGTH 156 +# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 +# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 +# define X509V3_R_SECTION_NOT_FOUND 150 +# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 +# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 +# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 +# define X509V3_R_UNKNOWN_EXTENSION 129 +# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 +# define X509V3_R_UNKNOWN_OPTION 120 +# define X509V3_R_UNSUPPORTED_OPTION 117 +# define X509V3_R_UNSUPPORTED_TYPE 167 +# define X509V3_R_USER_TOO_LONG 132 + +#endif diff --git a/lib/openssl/lib/libcrypto-1_1-x64.lib b/lib/openssl/lib/libcrypto-1_1-x64.lib new file mode 100644 index 0000000..13e3835 Binary files /dev/null and b/lib/openssl/lib/libcrypto-1_1-x64.lib differ diff --git a/lib/openssl/lib/libssl-1_1-x64.lib b/lib/openssl/lib/libssl-1_1-x64.lib new file mode 100644 index 0000000..6623fed Binary files /dev/null and b/lib/openssl/lib/libssl-1_1-x64.lib differ diff --git a/lib/openssl/opensslConfig.cmake b/lib/openssl/opensslConfig.cmake new file mode 100644 index 0000000..89164fe --- /dev/null +++ b/lib/openssl/opensslConfig.cmake @@ -0,0 +1,30 @@ +# 设置库的根目录 +set(OPENSSL_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "openssl 根目录") + +# 设置头文件目录 +set(OPENSSL_INCLUDE_DIRS ${OPENSSL_ROOT_DIR}/include) + +# 创建导入目标 +add_library(openssl::libcrypto SHARED IMPORTED) +set_target_properties(openssl::libcrypto PROPERTIES + IMPORTED_LOCATION ${OPENSSL_ROOT_DIR}/bin/libcrypto-1_1-x64.dll + IMPORTED_LOCATION_DEBUG ${OPENSSL_ROOT_DIR}/bin/libcrypto-1_1-x64.dll + IMPORTED_IMPLIB ${OPENSSL_ROOT_DIR}/lib/libcrypto-1_1-x64.lib + IMPORTED_IMPLIB_DEBUG ${OPENSSL_ROOT_DIR}/lib/libcrypto-1_1-x64.lib + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIRS} +) + +add_library(openssl::libssl SHARED IMPORTED) +set_target_properties(openssl::libssl PROPERTIES + IMPORTED_LOCATION ${OPENSSL_ROOT_DIR}/bin/libssl-1_1-x64.dll + IMPORTED_LOCATION_DEBUG ${OPENSSL_ROOT_DIR}/bin/libssl-1_1-x64.dll + IMPORTED_IMPLIB ${OPENSSL_ROOT_DIR}/lib/libssl-1_1-x64.lib + IMPORTED_IMPLIB_DEBUG ${OPENSSL_ROOT_DIR}/lib/libssl-1_1-x64.lib + INTERFACE_INCLUDE_DIRECTORIES ${OPENSSL_INCLUDE_DIRS} +) + +file(COPY ${OPENSSL_ROOT_DIR}/bin/ DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/) + +# 导出变量 +set(openssl_FOUND TRUE) + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..8de5945 --- /dev/null +++ b/main.cpp @@ -0,0 +1,13 @@ +#include "application.h" +#include + + +int main(int argc, char *argv[]) +{ + if (argc > 1) + { + FreeConsole(); + } + zsy::Application::run(); + return 0; +} diff --git a/src/application.cpp b/src/application.cpp new file mode 100644 index 0000000..0be04d6 --- /dev/null +++ b/src/application.cpp @@ -0,0 +1,125 @@ +#include "application.h" +#include +#include "common/sys_util.h" + +namespace zsy +{ + HANDLE Application::STOP_EVENT = CreateEvent(nullptr, TRUE, FALSE, nullptr); + + std::shared_ptr Application::threadPool = nullptr; + std::shared_ptr Application::eventManager = nullptr; + std::shared_ptr Application::httpSvr = nullptr; + std::shared_ptr Application::mqttCliHolder = nullptr; + std::shared_ptr Application::oss = nullptr; + + std::shared_ptr Application::reportSvr = nullptr; + + std::shared_ptr Application::deviceHolder = nullptr; + + void Application::loadConfig() + { + LOGGER_INFO("正在加载配置文件:{}", configFile); + std::ifstream conf_file(configFile); + if (!conf_file.is_open()) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("配置文件加载失败,错误码:{},错误信息:{}", code, msg); + exit(1); + } + try + { + conf_file >> config; + LOGGER_INFO("配置文件加载完成"); + } catch (const std::exception &e) + { + LOGGER_ERROR("配置文件加载失败,请检查配置文件是否有误,{}", e.what()); + exit(1); + } + catch (...) + { + LOGGER_ERROR("未知异常,配置文件加载失败"); + exit(1); + } + } + + void Application::writePid() + { + try + { + pid = std::to_string(GetCurrentProcessId()); + + auto pidFile = pidFilePath + "\\deviceAccessLayer_" + pid + ".txt"; + std::ofstream outFile(pidFile); + if (!outFile.is_open()) + { + LOGGER_ERROR("无法打开文件:{}", pidFile); + } + + outFile << pid; + outFile.close(); + } catch (const std::exception &e) + { + pid = {}; + LOGGER_ERROR("PID 写入失败:{}", e.what()); + }catch (...) + { + pid = {}; + LOGGER_ERROR("未知异常,PID 写入失败"); + } + } + + Application::Application() + : configFile(SysUtil::WORK_DIR + "\\config\\config.json"), + pidFilePath(SysUtil::WORK_DIR + "\\logs") + { + loadConfig(); + threadPool = std::make_shared(3); + + eventManager = std::make_shared(threadPool); + + httpSvr = std::make_unique(config); + + oss = std::make_shared(config); + + mqttCliHolder = std::make_shared(config, eventManager); + + reportSvr = std::make_shared(config); + + deviceHolder = std::make_shared(config); + } + + void Application::run() + { + SetConsoleOutputCP(CP_UTF8); + LOGGER_INFO("启动中..."); + Application app; + app.writePid(); + LOGGER_INFO("启动完成,PID:{}", app.pid); + + while (WaitForSingleObject(STOP_EVENT, INFINITE) != WAIT_OBJECT_0) + { + } + } + + void Application::stop() + { + LOGGER_INFO("正在停止服务..."); + SetEvent(STOP_EVENT); + } + + Application::~Application() + { + CloseHandle(STOP_EVENT); + if (pid.empty()) return; + auto pidFile = pidFilePath + "\\deviceAccessLayer_" + pid + ".txt"; + auto pathPtr = SysUtil::ch_vlt(pidFile.c_str()); + if (std::remove(pathPtr.get()) != 0) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("PID 文件删除失败:{},错误码:{},错误信息:{}", pidFile, code, msg); + } else + { + LOGGER_ERROR("PID 文件删除成功:{}", pidFile); + } + } +} // zsy diff --git a/src/application.h b/src/application.h new file mode 100644 index 0000000..0d82b79 --- /dev/null +++ b/src/application.h @@ -0,0 +1,50 @@ +#ifndef APPLICATION_H +#define APPLICATION_H +#include "http/http_svr.h" +#include "mqtt/mqtt_cli.h" +#include "report_svr/report_svr.h" +#include "oss/oss.h" +#include "device_holder.h" + +namespace zsy +{ + + class Application + { + const std::string configFile; + std::string pidFilePath; + std::string pid; + static HANDLE STOP_EVENT; + + nlohmann::json config; + + void loadConfig(); + + void writePid(); + + public: + static std::shared_ptr threadPool; + + static std::shared_ptr eventManager; + + static std::shared_ptr httpSvr; + + static std::shared_ptr mqttCliHolder; + + static std::shared_ptr oss; + + static std::shared_ptr reportSvr; + + static std::shared_ptr deviceHolder; + + Application(); + + static void run(); + + static void stop(); + + ~Application(); + }; +} // zsy + +#endif //APPLICATION_H diff --git a/src/barrier/barrier.cpp b/src/barrier/barrier.cpp new file mode 100644 index 0000000..713d7f3 --- /dev/null +++ b/src/barrier/barrier.cpp @@ -0,0 +1,11 @@ +#include "barrier.h" + +#include +#include + +#include "application.h" +#include "common/loging.h" + +namespace zsy { + +} // zsy \ No newline at end of file diff --git a/src/barrier/barrier.h b/src/barrier/barrier.h new file mode 100644 index 0000000..ac04ab6 --- /dev/null +++ b/src/barrier/barrier.h @@ -0,0 +1,22 @@ +#ifndef BARRIER_H +#define BARRIER_H +#include + + +namespace zsy +{ + + class Barrier + { + public: + + virtual ~Barrier() = default; + + virtual void open() = 0; + + virtual void resolveRecognizeResult(const std::string & license,const std::string & imageFile) = 0; + + }; +} // zsy + +#endif //BARRIER_H diff --git a/src/barrier/barrier_properties.h b/src/barrier/barrier_properties.h new file mode 100644 index 0000000..101d20e --- /dev/null +++ b/src/barrier/barrier_properties.h @@ -0,0 +1,29 @@ +#ifndef BARRIER_PROPERTIES_H +#define BARRIER_PROPERTIES_H +#include "common/json_util.h" + +namespace zsy +{ + struct BarrierProperties + { + std::string sn; + std::string name; + uint8_t io{0}; + std::string platformScale; + std::string soundColumn; + std::string vidicon; + }; + + inline void from_json(const nlohmann::json &j, BarrierProperties &o) + { + PARSE_JSON(sn, o.sn); + PARSE_JSON(name, o.name); + PARSE_JSON(io, o.io); + PARSE_JSON(platformScale, o.platformScale); + PARSE_JSON(soundColumn, o.soundColumn); + PARSE_JSON(vidicon, o.vidicon); + } +} + + +#endif //BARRIER_PROPERTIES_H diff --git a/src/barrier/generic_barrier.cpp b/src/barrier/generic_barrier.cpp new file mode 100644 index 0000000..0b2954e --- /dev/null +++ b/src/barrier/generic_barrier.cpp @@ -0,0 +1,220 @@ +#include "generic_barrier.h" + +#include "application.h" +#include "common/loging.h" +#include "common/snowflake.h" +#include "common/sys_util.h" + +namespace zsy +{ + static long long getTime() + { + const auto now = std::chrono::system_clock::now(); + const auto now_ms = std::chrono::time_point_cast(now); + const auto epoch = now_ms.time_since_epoch(); + return std::chrono::duration_cast(epoch).count(); + } + + GenericBarrier::GenericBarrier(const BarrierProperties &config) + : config(config) + { + Application::eventManager->subscribe(config.sn + "/open", [this](const EventManager::Event&) + { + this->open(); + }); + static auto subscribed = [] + { + auto cli = Application::mqttCliHolder->remoteCli(); + if (cli) + { + auto clientId = cli->getClientId(); + Application::eventManager->subscribe(clientId + "/yztq/1/barrier", [](const EventManager::Event &event) + { + if (!event.data.has_value()) + { + LOGGER_ERROR("开门请求参数错误"); + return; + } + auto jsonData = event.data.value(); + + LOGGER_INFO("收到开门请求:{}", jsonData.dump()); + const auto req = jsonData.get(); + Application::eventManager->publish(req.deviceNo + "/open", jsonData.dump()); + }); + } else + { + LOGGER_ERROR("未找到 MQTT 远程客户端"); + } + + Application::httpSvr->postEndpoint("/plateRecognize", [](const httplib::Request &req, httplib::Response &res) + { + try + { + auto body = req.body; + LOGGER_INFO("收到车牌识别结果:{}", body); + + auto [succ,recognizeResult] = GenericBarrier::parseRecognizeResult(body); + if (!succ) + { + LOGGER_ERROR("车牌识别结果解析失败"); + res.set_content(R"({})", "application/json"); + return; + } + auto serialno = recognizeResult.alarmInfoPlate.serialno; + auto imageFile = recognizeResult.alarmInfoPlate.result.plateResult.imageFile; + auto license = recognizeResult.alarmInfoPlate.result.plateResult.license; + if (serialno.empty() || imageFile.empty() || license.empty()) + { + LOGGER_ERROR("车牌识别结果解析失败"); + res.set_content(R"({})", "application/json"); + return; + } + if (license.find("无") != std::string::npos) + { + LOGGER_ERROR("车牌识别失败"); + res.set_content(R"({})", "application/json"); + return; + } + + Application::threadPool->submit([imageFile,license, barrier = Application::deviceHolder->getBarrier(serialno)] + { + if (!barrier) + { + LOGGER_ERROR("未找到对应的道闸"); + return; + } + barrier->resolveRecognizeResult(license, imageFile); + }); + } catch (std::exception &e) + { + LOGGER_ERROR("车牌识别结果处理失败: {}", e.what()); + } + catch (...) + { + LOGGER_ERROR("未知异常,车牌识别结果处理失败"); + } + res.set_content(R"({})", "application/json"); + }); + return true; + }(); + } + + void GenericBarrier::open() + { + LOGGER_INFO("收到开门请求:{} {}", config.name, config.sn); + const long timestamp = static_cast(getTime()); + BarrierBcd barrier; + barrier.id = "open" + std::to_string(timestamp); + barrier.sn = config.sn; + barrier.timestamp = timestamp; + barrier.payload.body.value = 2; + barrier.payload.body.io = config.io; + nlohmann::json j(barrier); + + + auto topic = "device/" + config.sn + "/message/down/gpio_out"; + auto data = j.dump(); + + LOGGER_INFO("打开道闸:{} {}", topic, data); + + try + { + auto cli = Application::mqttCliHolder->localCli(); + if (cli) + { + cli->publish(topic, data, 0); + } else + { + LOGGER_ERROR("未找到 MQTT 本地客户端"); + } + } catch (const std::exception &e) + { + LOGGER_INFO("开门失败:{}", e.what()); + } catch (...) + { + LOGGER_ERROR("未知异常,开门失败"); + } + } + + std::tuple GenericBarrier::parseRecognizeResult(const std::string &jsonStr) + { + try + { + auto json = nlohmann::json::parse(jsonStr); + RecognizeResult result = json.get(); + return std::make_tuple(true, result); + } catch (std::exception &e) + { + LOGGER_ERROR("未找到车牌识别结果:{}", e.what()); + return std::make_tuple(false, RecognizeResult()); + }catch (...) + { + LOGGER_ERROR("未知异常,未找到车牌识别结果"); + return std::make_tuple(false, RecognizeResult()); + } + } + + void GenericBarrier::resolveRecognizeResult(const std::string &license, const std::string &imageFile) + { + try + { + LOGGER_INFO("车牌识别结果处理中,设备名称:{}", config.name); + // 播放语音 1 + Application::threadPool->submit([sn = config.sn] + { + Application::deviceHolder->getSoundColumn(sn)->play("欢迎光临"); + }); + + // 上传车头照 + auto imageFileDecode = SysUtil::base64_decode(imageFile); + const std::shared_ptr imageFileStream = std::make_shared(imageFileDecode, std::ios_base::in | std::ios_base::binary); + auto photoId = Snowflake::genIdStr(); + auto now = std::chrono::system_clock::now(); + std::time_t currentTime = std::chrono::system_clock::to_time_t(now); + + std::tm *localTime = std::localtime(¤tTime); + + std::stringstream ss; + ss << std::put_time(localTime, "%Y%m%d"); + + std::string date = ss.str(); + auto [carFrontUrlSucc,carFrontUrl] = Application::oss->upload(date + "/" + license + "_front_" + photoId + ".jpg", *imageFileStream); + // 上报 1 + auto reportPassResult = Application::reportSvr->reportPass(license, config.sn, carFrontUrl); + if (!(reportPassResult.code == 0 && (reportPassResult.data.type == 1 || reportPassResult.data.type == 2))) + { + return; + } + // 上报结果不为 0,播放语音 2 并读地磅,拍车斗并上传 + Application::threadPool->submit([sn =config.sn] + { + Application::deviceHolder->getSoundColumn(sn)->play("正在称重,请稍后"); + }); + double weight = Application::deviceHolder->getPlatformScale(config.sn)->reading(); + auto photographPath = Application::deviceHolder->getVidicon(config.sn)->photograph(); + auto [carBodyUrlSucc,carBodyUrl] = Application::oss->upload(date + "/" + license + "_body_" + photoId + ".jpg", photographPath); + if (!photographPath.empty()) + { + auto pathPtr = SysUtil::ch_vlt(photographPath.c_str()); + if (std::remove(pathPtr.get()) != 0) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("临时照片删除失败:{},错误码:{},错误信息:{}", photographPath, code, msg); + } else + { + LOGGER_ERROR("临时照片删除成功:{}", photographPath); + } + } + + // 上报 2 + Application::reportSvr->report(license, config.sn, weight, carFrontUrl, carBodyUrl, reportPassResult.data.orderNo); + } catch (std::exception &e) + { + LOGGER_ERROR("车牌识别结果处理失败: {}", e.what()); + } + catch (...) + { + LOGGER_ERROR("未知异常,车牌识别结果处理失败"); + } + } +} // zsy diff --git a/src/barrier/generic_barrier.h b/src/barrier/generic_barrier.h new file mode 100644 index 0000000..c707389 --- /dev/null +++ b/src/barrier/generic_barrier.h @@ -0,0 +1,157 @@ +#ifndef GENERIC_BARRIER_H +#define GENERIC_BARRIER_H +#include "barrier.h" +#include "barrier_properties.h" +#include "nlohmann/json.hpp" +#include + +namespace zsy +{ + struct DoorReq + { + std::string uuid; + std::string deviceNo; //设备编号 + uint64_t id; //自增id + std::string carNo; //车牌号 + }; + + inline void from_json(const nlohmann::json &j, DoorReq &o) + { + PARSE_JSON(uuid, o.uuid); + PARSE_JSON(deviceNo, o.deviceNo); + PARSE_JSON(id, o.id); + PARSE_JSON(carNo, o.carNo); + } + + struct Body + { + int delay = 500; + int value; + int io; + }; + + struct Payload + { + std::string type = "gpio_out"; + Body body; + }; + + struct BarrierBcd + { + std::string id; + std::string sn; + std::string name = "gpio_out"; + std::string version = "1.0"; + long timestamp; + Payload payload; + }; + + inline void to_json(nlohmann::json &j, const Body &b) + { + j = nlohmann::json{{"delay", b.delay}, {"value", b.value}, {"io", b.io}}; + } + + inline void to_json(nlohmann::json &j, const Payload &p) + { + j = nlohmann::json{{"type", p.type}, {"body", p.body}}; + } + + inline void to_json(nlohmann::json &j, const BarrierBcd &bb) + { + j = nlohmann::json{ + {"id", bb.id}, {"sn", bb.sn}, {"name", bb.name}, + {"version", bb.version}, {"timestamp", bb.timestamp}, + {"payload", bb.payload} + }; + } + + struct PlateResult + { + std::string imageFile; + std::string license; + std::string telephone; + }; + + struct Result + { + PlateResult plateResult; + }; + + struct AlarmInfoPlate + { + int channel; + std::string deviceName; + std::string ipaddr; + Result result; + std::string serialno; + }; + + struct RecognizeResult + { + AlarmInfoPlate alarmInfoPlate; + }; + + inline void from_json(const nlohmann::json &j, PlateResult &data) + { + if (j.contains("imageFile")) j.at("imageFile").get_to(data.imageFile); + else + { + LOGGER_ERROR("imageFile 不存在"); + } + if (j.contains("license")) j.at("license").get_to(data.license); + else + { + LOGGER_ERROR("license 不存在"); + } + } + + inline void from_json(const nlohmann::json &j, Result &data) + { + if (j.contains("plateResult")) j.at("plateResult").get_to(data.plateResult); + else if (j.contains("PlateResult")) j.at("PlateResult").get_to(data.plateResult); + else + { + LOGGER_ERROR("plateResult 不存在"); + } + } + + inline void from_json(const nlohmann::json &j, AlarmInfoPlate &data) + { + if (j.contains("result")) j.at("result").get_to(data.result); + else + { + LOGGER_ERROR("result 不存在"); + } + if (j.contains("serialno")) j.at("serialno").get_to(data.serialno); + else + { + LOGGER_ERROR("serialno 不存在"); + } + } + + inline void from_json(const nlohmann::json &j, RecognizeResult &data) + { + if (j.contains("alarmInfoPlate")) j.at("alarmInfoPlate").get_to(data.alarmInfoPlate); + else if (j.contains("AlarmInfoPlate")) j.at("AlarmInfoPlate").get_to(data.alarmInfoPlate); + else + { + LOGGER_ERROR("alarmInfoPlate 不存在"); + } + } + + class GenericBarrier : public Barrier + { + BarrierProperties config; + + public: + explicit GenericBarrier(const BarrierProperties &config); + + void open() override; + + void resolveRecognizeResult(const std::string &license, const std::string &imageFile) override; + + static std::tuple parseRecognizeResult(const std::string &jsonStr); + }; +} // zsy + +#endif //GENERIC_BARRIER_H diff --git a/src/common/event_manager.cpp b/src/common/event_manager.cpp new file mode 100644 index 0000000..8b0235a --- /dev/null +++ b/src/common/event_manager.cpp @@ -0,0 +1,56 @@ +#include "event_manager.h" + +namespace zsy +{ + EventManager::Event::Event(std::string name, const std::string &data) + : name(std::move(name)) + { + if (data.empty()) { + this->data = std::nullopt; + } else { + this->data = nlohmann::json::parse(data); + } + } + + EventManager::EventManager(std::shared_ptr threadPool) + : threadPool(threadPool) + { + } + + void EventManager::publish(const std::string &name, std::string data) noexcept + { + LOGGER_INFO("发布事件:{} {}", name, data); + + HandlerList *list = nullptr; + + { + std::lock_guard lock(handlersMutex); + auto it = handlers.find(name); + if (it != handlers.end()) + { + list = &it->second; + } else + { + LOGGER_WARN("无处理器,事件:{}", name); + return; + } + } + + for (auto fn_ptr: *list) + { + threadPool->submit([fn = fn_ptr.get(),name,data] + { + try + { + (*fn)(Event(name, data)); + } catch (const std::exception &e) + { + LOGGER_ERROR("事件处理异常:{} {}", name, e.what()); + }catch (...) + { + LOGGER_ERROR("事件处理异常:{}", name); + } + }); + } + } +} // zsy diff --git a/src/common/event_manager.h b/src/common/event_manager.h new file mode 100644 index 0000000..25e9531 --- /dev/null +++ b/src/common/event_manager.h @@ -0,0 +1,45 @@ +#ifndef EVENT_MANAGER_H +#define EVENT_MANAGER_H +#include +#include +#include + +#include "thread_pool.h" + +namespace zsy +{ + class EventManager + { + public: + class Event + { + public: + const std::string name; + std::optional data; + + explicit Event(std::string name, const std::string &data); + }; + + using EventHandler = std::function; + using HandlerList = std::vector >; + + EventManager(std::shared_ptr threadPool); + + template + void subscribe(const std::string &name, Fn &&handler) + { + std::lock_guard lock(handlersMutex); + auto handlerPtr = std::make_shared(std::forward(handler)); + handlers[name].push_back(handlerPtr); + } + + void publish(const std::string &name, std::string data = {}) noexcept; + + private: + std::unordered_map handlers; + std::mutex handlersMutex; + std::shared_ptr threadPool; + }; +} // zsy + +#endif //EVENT_MANAGER_H diff --git a/src/common/json_util.h b/src/common/json_util.h new file mode 100644 index 0000000..bb7d5fd --- /dev/null +++ b/src/common/json_util.h @@ -0,0 +1,22 @@ +#ifndef JSON_UTIL_H +#define JSON_UTIL_H +#include "common/loging.h" +#include + +#define PARSE_JSON(field, to) try \ +{ \ + if (j.contains(#field)) \ + { \ + j.at(#field).get_to(to); \ + } \ +} catch (const std::exception &e) \ +{ \ + LOGGER_ERROR("JSON 解析失败,字段:【{}】【{}】,错误:{}", #field, #to, e.what()); \ +} \ +catch (...) \ +{ \ + LOGGER_ERROR("未知异常,JSON 解析失败,字段:【{}】【{}】", #field, #to); \ +} + + +#endif //JSON_UTIL_H diff --git a/src/common/loging.cpp b/src/common/loging.cpp new file mode 100644 index 0000000..87252fc --- /dev/null +++ b/src/common/loging.cpp @@ -0,0 +1,28 @@ +#include +#include +#include +#include "sys_util.h" + +namespace zsy +{ + std::shared_ptr getLogger() + { + static std::shared_ptr logger = [] + { + const auto file_sink = std::make_shared(SysUtil::WORK_DIR + "\\logs\\deviceAccessLayer.log", 0, 0); + file_sink->set_level(spdlog::level::info); + file_sink->set_pattern("%Y-%m-%d %H:%M:%S.%e %=7l %=10t %-40s [%-64! %10#]: %v"); + + const auto console_sink = std::make_shared(); + console_sink->set_level(spdlog::level::info); + console_sink->set_pattern("%Y-%m-%d %H:%M:%S.%e %=7l %=10t %-40s [%-64! %10#]: %v"); + + spdlog::sinks_init_list sinks = {console_sink, file_sink}; + auto logger = std::make_shared("zsy", sinks); + logger->flush_on(spdlog::level::info); + spdlog::set_default_logger(logger); + return logger; + }(); + return logger; + } +} diff --git a/src/common/loging.h b/src/common/loging.h new file mode 100644 index 0000000..7473f0f --- /dev/null +++ b/src/common/loging.h @@ -0,0 +1,22 @@ +#ifndef LOGING_H +#define LOGING_H +#include + + +namespace zsy +{ + extern std::shared_ptr getLogger(); +} + +#define LOGGER_DEBUG(...) \ +SPDLOG_LOGGER_DEBUG(zsy::getLogger(), __VA_ARGS__) + +#define LOGGER_INFO(...) \ +SPDLOG_LOGGER_INFO(zsy::getLogger(), __VA_ARGS__) + +#define LOGGER_WARN(...) \ +SPDLOG_LOGGER_WARN(zsy::getLogger(), __VA_ARGS__) + +#define LOGGER_ERROR(...) \ +SPDLOG_LOGGER_ERROR(zsy::getLogger(), __VA_ARGS__) +#endif //LOGING_H diff --git a/src/common/snowflake.cpp b/src/common/snowflake.cpp new file mode 100644 index 0000000..db35f09 --- /dev/null +++ b/src/common/snowflake.cpp @@ -0,0 +1,128 @@ +#include "snowflake.h" +#include + +namespace zsy +{ + /** + * @brief 构造函数,初始化 Snowflake 实例。 + * + * @param workerId 工作机器 ID,取值范围为 0 到 kMaxWorkerId。 + * @param datacenterId 数据中心 ID,取值范围为 0 到 kMaxDatacenterId。 + * @param epoch 时间戳的起始点,用于计算相对时间戳。 + * + * @throws std::invalid_argument 当 workerId 或 datacenterId 超出允许范围时抛出。 + */ + Snowflake::Snowflake(uint64_t workerId, uint64_t datacenterId, TimePoint epoch) + : workerId(workerId), datacenterId(datacenterId), epoch(epoch) + { + // 检查 workerId 是否超出最大允许值 + if (workerId > MaxWorkerId) + { + // 若超出范围,抛出异常提示 workerId 必须在 0 到 kMaxWorkerId 之间 + throw std::invalid_argument("机器 Id 必须为 0 ~ " + std::to_string(MaxWorkerId)); + } + // 检查 datacenterId 是否超出最大允许值 + if (datacenterId > MaxDatacenterId) + { + // 若超出范围,抛出异常提示 datacenterId 必须在 0 到 kMaxDatacenterId 之间 + throw std::invalid_argument("数据中心 Id 必须为 0 ~ " + std::to_string(MaxDatacenterId)); + } + } + + /** + * @brief 生成下一个唯一 ID。 + * + * 该方法使用雪花算法生成一个 64 位的唯一 ID,包含时间戳、数据中心 ID、工作机器 ID 和序列号。 + * 使用互斥锁保证线程安全,处理时钟回拨问题。 + * + * @return uint64_t 生成的唯一 ID。 + * @throws std::runtime_error 当发生时钟回拨时抛出。 + */ + uint64_t Snowflake::nextId() + { + // 使用互斥锁保证线程安全,确保同一时间只有一个线程能生成 ID + std::lock_guard lock(idMutex); + + // 获取当前时间戳(相对于 epoch 的毫秒数) + uint64_t currentTime = currentTimestamp(); + + // 处理时钟回拨问题 + if (currentTime < lastTimestamp) + { + // 若当前时间戳小于上一次生成 ID 的时间戳,说明发生了时钟回拨 + // 抛出异常并提示时钟回拨的毫秒数 + // 计算时间差(毫秒) + uint64_t diff = lastTimestamp - currentTime; + // 转换为更友好的时间格式 + uint64_t days = diff / (1000 * 60 * 60 * 24); + uint64_t hours = (diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); + uint64_t minutes = (diff % (1000 * 60 * 60)) / (1000 * 60); + uint64_t seconds = (diff % (1000 * 60)) / 1000; + uint64_t milliseconds = diff % 1000; + + throw std::runtime_error( + "检测到时钟回拨!拒绝生成ID。回拨时间: " + + std::to_string(days) + "天" + + std::to_string(hours) + "小时" + + std::to_string(minutes) + "分钟" + + std::to_string(seconds) + "秒" + + std::to_string(milliseconds) + "毫秒" + ); + } + + // 若当前时间戳与上一次生成 ID 的时间戳相同 + if (currentTime == lastTimestamp) + { + // 序列号加 1 并通过按位与操作确保序列号在允许范围内 + sequence = ++sequence & MaxSequence; + if (sequence == 0) + { + currentTime = waitNextMillis(lastTimestamp); + } + } else + { + sequence = 0; + } + + lastTimestamp = currentTime; + + return (currentTime << TimestampShift) | + (datacenterId << DatacenterIdShift) | + (workerId << WorkerIdShift) | + sequence; + } + + std::string Snowflake::nextIdStr() + { + return std::to_string(nextId()); + } + + uint64_t Snowflake::getTimestamp() const + { + return currentTimestamp(); + } + + Snowflake::TimePoint Snowflake::extractTimePoint(uint64_t id, TimePoint epoch) + { + uint64_t timestamp = (id >> TimestampShift); + return epoch + std::chrono::milliseconds{timestamp}; + } + + uint64_t Snowflake::currentTimestamp() const + { + auto now = std::chrono::system_clock::now(); + auto ms = std::chrono::time_point_cast(now); + return std::chrono::duration_cast(ms - epoch).count(); + } + + uint64_t Snowflake::waitNextMillis(uint64_t lastTimestamp) const + { + uint64_t timestamp; + do + { + timestamp = currentTimestamp(); + } while (timestamp <= lastTimestamp); + + return timestamp; + } +} // namespace utils diff --git a/src/common/snowflake.h b/src/common/snowflake.h new file mode 100644 index 0000000..c4972f3 --- /dev/null +++ b/src/common/snowflake.h @@ -0,0 +1,119 @@ +#ifndef SNOWFLAKE_H +#define SNOWFLAKE_H + +#include +#include +#include + +namespace zsy +{ + /** + * 雪花算法 ID 生成器 + * 生成64位唯一ID,结构为: + * - 1位符号位 (始终为0) + * - 41位时间戳 (毫秒级) + * - 5位数据中心ID + * - 5位工作机器ID + * - 12位序列号 + */ + class Snowflake + { + public: + // 类型别名 + using TimePoint = std::chrono::time_point; + + /** + * 构造函数 + * @param workerId 工作机器ID (0-31) + * @param datacenterId 数据中心ID (0-31) + * @param epoch 自定义纪元时间点,默认为2025-01-01 00:00:00 + */ + explicit Snowflake( + uint64_t workerId, + uint64_t datacenterId, + TimePoint epoch = TimePoint{std::chrono::milliseconds{1735660800000}} + ); + + // 禁用拷贝构造和赋值 + Snowflake(const Snowflake &) = delete; + + Snowflake &operator=(const Snowflake &) = delete; + + /** + * 生成下一个唯一ID + * @return 生成的64位唯一ID + * @throws std::runtime_error 如果时钟回拨超过容忍范围 + */ + uint64_t nextId(); + + /** + * @brief 生成下一个字符串类型的唯一ID + * @return 生成的字符串形式的唯一ID + * @throws std::runtime_error 如果时钟回拨超过容忍范围 + */ + std::string nextIdStr(); + + /** + * 获取当前时间戳(相对于纪元) + * @return 当前时间戳(毫秒) + */ + uint64_t getTimestamp() const; + + /** + * 从ID解析时间戳 + * @param id 雪花算法生成的ID + * @param epoch 生成ID时使用的纪元时间 + * @return 对应的时间点 + */ + static TimePoint extractTimePoint(uint64_t id, TimePoint epoch); + + static Snowflake &getInstance() + { + static Snowflake snowflake(1, 1); + return snowflake; + } + + static std::string genIdStr() + { + return getInstance().nextIdStr(); + } + + static uint64_t genId() + { + return getInstance().nextId(); + } + + private: + // 常量定义 + static constexpr uint64_t WorkerIdBits = 5; // 工作机器ID位数 + static constexpr uint64_t DatacenterIdBits = 5; // 数据中心ID位数 + static constexpr uint64_t SequenceBits = 12; // 序列号位数 + + static constexpr uint64_t MaxWorkerId = (1ULL << WorkerIdBits) - 1; // 最大工作机器ID + static constexpr uint64_t MaxDatacenterId = (1ULL << DatacenterIdBits) - 1; // 最大数据中心ID + static constexpr uint64_t MaxSequence = (1ULL << SequenceBits) - 1; // 序列号掩码 + + static constexpr uint64_t WorkerIdShift = SequenceBits; // 工作机器ID左移位数 + static constexpr uint64_t DatacenterIdShift = SequenceBits + WorkerIdBits; // 数据中心ID左移位数 + static constexpr uint64_t TimestampShift = SequenceBits + WorkerIdBits + DatacenterIdBits; // 时间戳左移位数 + + + // 成员变量 + const uint64_t workerId; // 工作机器ID + const uint64_t datacenterId; // 数据中心ID + const TimePoint epoch; // 纪元时间点 + + uint64_t sequence = 0; // 当前序列号 + uint64_t lastTimestamp = 0; // 上次生成ID的时间戳 + + mutable std::mutex idMutex; // 互斥锁,保证线程安全 + + // 获取当前时间戳(毫秒,相对于纪元) + uint64_t currentTimestamp() const; + + // 等待下一毫秒 + uint64_t waitNextMillis(uint64_t lastTimestamp) const; + }; +} // namespace utils + +#endif // SNOWFLAKE_H diff --git a/src/common/sys_properties.h b/src/common/sys_properties.h new file mode 100644 index 0000000..0734eb9 --- /dev/null +++ b/src/common/sys_properties.h @@ -0,0 +1,24 @@ +#ifndef SYS_PROPERTIES_H +#define SYS_PROPERTIES_H +#include "http/httpsvr_properties.h" +#include "mqtt/mqtt_properties.h" +#include "oss/oss_properties.h" + +namespace zsy +{ + struct SysProperties + { + HttpsvrProperties httpsvr; + OssProperties oss; + std::vector mqtts; + }; + + inline void from_json(const nlohmann::json &j, SysProperties &o) + { + PARSE_JSON(httpsvr, o.httpsvr); + PARSE_JSON(mqtts, o.mqtts); + PARSE_JSON(oss, o.oss); + } +} + +#endif //SYS_PROPERTIES_H diff --git a/src/common/sys_util.cpp b/src/common/sys_util.cpp new file mode 100644 index 0000000..3e92237 --- /dev/null +++ b/src/common/sys_util.cpp @@ -0,0 +1,424 @@ +#include "sys_util.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace zsy +{ + std::string SysUtil::WORK_DIR = []() -> std::string + { + WCHAR wstr[MAX_PATH]{}; + if (!GetModuleFileName(nullptr, wstr, MAX_PATH)) + { + throw std::runtime_error("运行目录获取失败"); + } + + auto str = str_w_a(wstr); + size_t lastSlash = str.find_last_of("\\/"); + return lastSlash == std::string::npos ? str : str.substr(0, lastSlash); + }(); + + std::string SysUtil::HOME_DIR = []() -> std::string + { + if (WORK_DIR.ends_with("bin")) + { + size_t lastSlash = WORK_DIR.find_last_of("\\/"); + return lastSlash == std::string::npos ? WORK_DIR : WORK_DIR.substr(0, lastSlash); + } + return WORK_DIR; + }(); + + // UTF-8字符串转宽字符串 + std::wstring SysUtil::str_a_w(const std::string &astr, const char *encode) + { + UErrorCode status = U_ZERO_ERROR; + + // 使用unique_ptr管理转换器资源,确保异常安全 + std::unique_ptr converter( + ucnv_open(encode, &status), + &ucnv_close + ); + + if (U_FAILURE(status)) + { + throw std::runtime_error("Failed to open converter: " + std::to_string(status)); + } + + // 第一阶段:获取所需缓冲区大小 + status = U_ZERO_ERROR; + int32_t targetCapacity = ucnv_toUChars( + converter.get(), nullptr, 0, astr.c_str(), + static_cast(astr.length()), &status + ); + + if (status != U_BUFFER_OVERFLOW_ERROR && U_FAILURE(status)) + { + throw std::runtime_error("Failed to calculate target length: " + std::to_string(status)); + } + + // 分配足够空间 + std::vector buffer; + try + { + buffer.resize(targetCapacity); + } catch (const std::bad_alloc &) + { + throw std::runtime_error("Memory allocation failed"); + } + + // 第二阶段:实际转换 + status = U_ZERO_ERROR; + int32_t actualLength = ucnv_toUChars( + converter.get(), + buffer.data(), + targetCapacity, + astr.c_str(), + static_cast(astr.length()), + &status + ); + + if (U_FAILURE(status)) + { + throw std::runtime_error("Conversion failed: " + std::to_string(status)); + } + + // 转换为wstring,考虑平台差异 + std::wstring result; + + static_assert(sizeof(wchar_t) == sizeof(UChar), "wchar_t size mismatch on Windows"); + result.assign(reinterpret_cast(buffer.data()), actualLength); + + return result; + } + + // 宽字符串转UTF-8字符串 + std::string SysUtil::str_w_a(const std::wstring &wstr, const char *encode) + { + UErrorCode status = U_ZERO_ERROR; + + // 使用unique_ptr管理转换器资源,确保异常安全 + const std::unique_ptr converter( + ucnv_open(encode, &status), + &ucnv_close + ); + + if (U_FAILURE(status)) + { + throw std::runtime_error("Failed to open converter"); + } + + // 安全的类型转换 - 假设wchar_t在Windows上是UTF-16,在其他平台可能需要不同处理 + static_assert(sizeof(wchar_t) == sizeof(UChar) || sizeof(wchar_t) == sizeof(UChar32), + "wchar_t size not compatible with ICU UChar types"); + + const auto *ustr = reinterpret_cast(wstr.c_str()); + const auto srcLength = static_cast(wstr.length()); + + // 第一阶段:获取所需缓冲区大小 + status = U_ZERO_ERROR; + int32_t targetCapacity = ucnv_fromUChars( + converter.get(), nullptr, 0, ustr, srcLength, &status + ); + + if (status != U_BUFFER_OVERFLOW_ERROR && U_FAILURE(status)) + { + throw std::runtime_error("Failed to calculate target length: " + std::to_string(status)); + } + + // 分配足够空间 (+1不是必须的,因为ucnv_fromUChars不包含null终止符) + std::string result; + try + { + result.resize(targetCapacity); + } catch (const std::bad_alloc &) + { + throw std::runtime_error("Memory allocation failed"); + } + + // 第二阶段:实际转换 + status = U_ZERO_ERROR; + int32_t actualLength = ucnv_fromUChars( + converter.get(), + &result[0], + targetCapacity, + ustr, + srcLength, + &status + ); + + if (U_FAILURE(status)) + { + throw std::runtime_error("Conversion failed: " + std::to_string(status)); + } + + // 调整大小为实际转换后的长度 + result.resize(actualLength); + + return result; + } + + // UTF-8字符串转宽字符串 + std::shared_ptr SysUtil::ch_a_w(const char *ach) + { + if (ach == nullptr) return nullptr; + + std::string astr(ach); + std::wstring wstr = str_a_w(astr); + + size_t size = wstr.size() + 1; + auto result = std::make_shared(size); + wcscpy_s(result.get(), size, wstr.c_str()); + return result; + } + + // 宽字符串转UTF-8字符串 + std::shared_ptr SysUtil::ch_w_a(const wchar_t *wch) + { + if (wch == nullptr) return nullptr; + + std::wstring wstr(wch); + std::string utf8 = str_w_a(wstr); + + size_t size = utf8.size() + 1; + auto result = std::make_shared(size); + strcpy_s(result.get(), size, utf8.c_str()); + return result; + } + + + /*std::wstring SysUtil::str_a_w(const std::string &astr) + { + if (astr.empty()) return {}; + std::wstring_convert > converter; + return converter.from_bytes(astr); + } + std::string SysUtil::str_w_a(const std::wstring &wstr) +{ + if (wstr.empty()) return {}; + std::wstring_convert > converter; + return converter.to_bytes(wstr); +}*/ + + std::shared_ptr SysUtil::ch_vlt(const char *ach) + { + if (ach == nullptr) return nullptr; + size_t size = strlen(ach) + 1; + auto result = std::make_shared(size); + strcpy_s(result.get(), size, ach); + return result; + } + + std::shared_ptr SysUtil::ch_vlt(const wchar_t *wch) + { + if (wch == nullptr) return nullptr; + size_t size = wcslen(wch) + 1; + auto result = std::make_shared(size); + wcscpy_s(result.get(), size, wch); + return result; + } + + std::tuple SysUtil::getError() + { + DWORD errorCode = GetLastError(); + if (errorCode == 0) return std::make_tuple(false, 0, ""); + + LPVOID lpMsgBuf; + DWORD bufLen = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + nullptr, + errorCode, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + reinterpret_cast(&lpMsgBuf), + 0, nullptr + ); + + if (bufLen == 0) return std::make_tuple(true, errorCode, ""); + auto msg = str_w_a(static_cast(lpMsgBuf)); + LocalFree(lpMsgBuf); + return std::make_tuple(true, errorCode, std::regex_replace(msg, std::regex("\\s"), "")); + } + + std::string SysUtil::toHex(uint64_t value, int width, bool uppercase) + { + std::stringstream ss; + + ss << std::hex; + if (uppercase) ss << std::uppercase; + if (width > 0) ss << std::setw(width) << std::setfill('0'); + + ss << value; + return ss.str(); + } + + std::string SysUtil::sha1(const std::string &data) + { + unsigned char digest[SHA_DIGEST_LENGTH]; + SHA1(reinterpret_cast(data.c_str()), data.size(), digest); + + std::ostringstream out; + out << std::hex << std::setfill('0'); + for (unsigned char c: digest) + { + out << std::setw(2) << static_cast(c); + } + return out.str(); + } + + std::string SysUtil::hmac_sha1(const std::string &key, const std::string &data) + { + unsigned char digest[EVP_MAX_MD_SIZE]; + + unsigned int digest_len = 0; + + // 计算HMAC-SHA1 + const unsigned char *digest_ptr = HMAC( + EVP_sha1(), + key.c_str(), + static_cast(key.length()), + reinterpret_cast(data.c_str()), + data.length(), + digest, + &digest_len + ); + + if (!digest_ptr) + { + throw std::runtime_error("HMAC-SHA1 计算失败"); + } + + return base64_encode(digest, digest_len); + } + + std::string SysUtil::base64_encode(const unsigned char *data, const size_t length) + { + if (data == nullptr || length == 0) return {}; + + // 创建Base64编码的BIO链 + BIO *bio, *b64; + BUF_MEM *bufferPtr; + + b64 = BIO_new(BIO_f_base64()); + if (!b64) + { + throw std::runtime_error("base64 编码失败,无法分配内存"); + } + + bio = BIO_new(BIO_s_mem()); + if (!bio) + { + BIO_free(b64); + throw std::runtime_error("base64 编码失败,无法分配内存"); + } + + bio = BIO_push(b64, bio); + BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL); + + // 写入数据并编码 + const int write_result = BIO_write(bio, data, static_cast(length)); + if (write_result <= 0) + { + BIO_free_all(bio); + throw std::runtime_error("base64 编码失败,写入数据失败"); + } + + if (BIO_flush(bio) != 1) + { + BIO_free_all(bio); + throw std::runtime_error("base64 编码失败,刷新缓冲区失败"); + } + + // 获取编码结果 + BIO_get_mem_ptr(bio, &bufferPtr); + std::string result(bufferPtr->data, bufferPtr->length); + + // 释放资源 + BIO_free_all(bio); + return result; + } + + std::string SysUtil::base64_decode(const unsigned char *data, size_t length) + { + if (data == nullptr || length == 0) return {}; + // 创建Base64解码的BIO链 + BIO *bio, *b64; + BUF_MEM *bufferPtr; + + b64 = BIO_new(BIO_f_base64()); + if (!b64) + { + throw std::runtime_error("base64 解码失败,无法创建分配内存"); + } + + // 不忽略行末符号 + BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); + + bio = BIO_new_mem_buf(data, length); + if (!bio) + { + BIO_free(b64); + throw std::runtime_error("base64 解码失败,无法分配内存"); + } + + bio = BIO_push(b64, bio); + + // 计算解码后的估计长度 + const size_t estimated_length = length * 3 / 4 + 1; + std::vector buffer(estimated_length); + + // 执行解码 + const int decoded_length = BIO_read(bio, buffer.data(), estimated_length - 1); + if (decoded_length <= 0) + { + BIO_free_all(bio); + throw std::runtime_error("base64 解码失败,读取数据失败"); + } + + // 释放资源 + BIO_free_all(bio); + + // 返回解码后的字符串 + return std::string(buffer.data(), decoded_length); + } + + void SysUtil::createDirs(const std::filesystem::path &path) + { + try + { + if (!std::filesystem::exists(path)) + { + bool created = std::filesystem::create_directories(path); + + if (!created) + { + throw std::runtime_error("创建文件夹失败"); + } + } + } catch (const std::filesystem::filesystem_error &e) + { + throw std::runtime_error("文件系统错误: " + std::string(e.what())); + } catch (const std::exception &e) + { + throw std::runtime_error("创建文件夹时发生错误: " + std::string(e.what())); + } catch (...) + { + throw std::runtime_error("创建文件夹时发生未知错误"); + } + } + +} diff --git a/src/common/sys_util.h b/src/common/sys_util.h new file mode 100644 index 0000000..f6dc5a5 --- /dev/null +++ b/src/common/sys_util.h @@ -0,0 +1,61 @@ +#ifndef SYS_UTIL_H +#define SYS_UTIL_H +#include +#include +#include + + +namespace zsy +{ + class SysUtil + { + public: + static std::string WORK_DIR; + static std::string HOME_DIR; + + static std::wstring str_a_w(const std::string &astr, const char *encode = "UTF-8"); + + static std::string str_w_a(const std::wstring &wstr, const char *encode = "UTF-8"); + + static std::shared_ptr ch_a_w(const char *ach); + + static std::shared_ptr ch_w_a(const wchar_t *wch); + + static std::shared_ptr ch_vlt(const wchar_t *wch); + + static std::shared_ptr ch_vlt(const char *ach); + + static std::tuple getError(); + + static std::string toHex(uint64_t value, int width = 2, bool uppercase = true); + + static std::string sha1(const std::string &data); + + static std::string hmac_sha1(const std::string &key, const std::string &data); + + static std::string base64_encode(const unsigned char *data, size_t length); + + static std::string base64_encode(const std::string &data) + { + return base64_encode( + reinterpret_cast(data.data()), + data.length() + ); + } + + static std::string base64_decode(const unsigned char *data, size_t length); + + static std::string base64_decode(const std::string &data) + { + return base64_decode( + reinterpret_cast(data.data()), + data.length() + ); + } + + static void createDirs(const std::filesystem::path &path); + }; +} + + +#endif //SYS_UTIL_H diff --git a/src/common/thread_pool.cpp b/src/common/thread_pool.cpp new file mode 100644 index 0000000..8e79830 --- /dev/null +++ b/src/common/thread_pool.cpp @@ -0,0 +1,61 @@ +#include "thread_pool.h" + +#include "loging.h" + +namespace zsy +{ + ThreadPool::ThreadPool(size_t threadCount):status(0) + { + if (threadCount < 1) threadCount = 1; + workers.reserve(threadCount); + + for (size_t i = 0; i < threadCount; ++i) + { + workers.emplace_back([this](const std::stop_token &st) + + { + while (!st.stop_requested()) + { + { + std::unique_lock lock(queueMutex); + taskCondition.wait(lock, st, [this] + { + return !tasks.empty(); + }); + + if (st.stop_requested() && tasks.empty()) + { + LOGGER_INFO("已停止线程"); + return; + } + std::function &task = tasks.front(); + + try + { + if (task) task(); + } catch (const std::exception &e) + { + LOGGER_ERROR("任务执行失败: {}", e.what()); + } + catch (...) + { + LOGGER_ERROR("未知异常,任务执行失败"); + } + + tasks.pop(); + } + } + }); + } + status = 1; + } + + ThreadPool::~ThreadPool() + { + std::unique_lock lock(status_mtx); + status = 2; + LOGGER_INFO("正在销毁线程池..."); + workers.clear(); + LOGGER_INFO("线程池已销毁"); + } +} // zsy diff --git a/src/common/thread_pool.h b/src/common/thread_pool.h new file mode 100644 index 0000000..40f0fb4 --- /dev/null +++ b/src/common/thread_pool.h @@ -0,0 +1,54 @@ +#ifndef THREAD_POOL_H +#define THREAD_POOL_H +#include +#include +#include +#include +#include +#include +#include + +#include "loging.h" + +namespace zsy +{ + class ThreadPool + { + std::vector workers; // 工作线程 + std::queue > tasks; // 任务队列 + mutable std::recursive_mutex queueMutex; // 保护任务队列的互斥锁 + std::condition_variable_any taskCondition; // 任务通知条件变量 + // 0-->不可用,1-->已启动,2-->已关闭 + uint8_t status; // 线程池停止标志 + std::shared_mutex status_mtx; + + public: + explicit ThreadPool(size_t threadCount = std::thread::hardware_concurrency()); + + template + void submit(Fn &&task) noexcept + { + std::shared_lock status_lock(status_mtx); + if (status != 1) + { + LOGGER_ERROR("线程池未启动"); + return; + } + std::unique_lock lock(queueMutex); + tasks.emplace(std::forward(task)); + taskCondition.notify_one(); + } + + ~ThreadPool(); + + ThreadPool(const ThreadPool &) = delete; + + ThreadPool &operator=(const ThreadPool &) = delete; + + ThreadPool(ThreadPool &&) = delete; + + ThreadPool &operator=(ThreadPool &&) = delete; + }; +} // zsy + +#endif //THREAD_POOL_H diff --git a/src/device_holder.cpp b/src/device_holder.cpp new file mode 100644 index 0000000..a4eb83c --- /dev/null +++ b/src/device_holder.cpp @@ -0,0 +1,88 @@ +#include "device_holder.h" + +#include "barrier/generic_barrier.h" +#include "platform_scale/generic_platform_scale.h" +#include "sound_column/generic_sound_column.h" +#include "vidicon/generic_vidicon.h" + +namespace zsy { + void DeviceHolder::initBarriers(std::vector &configs) + { + for (auto &config: configs) + { + barriers.emplace(config.sn, std::make_shared(config)); + auto &map = relation[config.sn]; + map.emplace("platformScale", config.platformScale); + map.emplace("soundColumn", config.soundColumn); + map.emplace("vidicon", config.vidicon); + } + } + + void DeviceHolder::initPlatformScales(std::vector &configs) + { + for (auto &config: configs) + { + platformScales.emplace(config.sn, std::make_shared(config)); + } + } + + void DeviceHolder::initSoundColumns(std::vector &configs) + { + for (auto &config: configs) + { + soundColumns.emplace(config.sn, std::make_shared(config)); + } + } + + void DeviceHolder::initVidicons(std::vector &configs) + { + for (auto &config: configs) + { + vidicons.emplace(config.sn, std::make_shared(config)); + } + } + + DeviceHolder::DeviceHolder(const nlohmann::json &config) + { + LOGGER_INFO("正在初始化设备..."); + auto deviceConfig = config.get(); + initBarriers(deviceConfig.barriers); + initPlatformScales(deviceConfig.platformScales); + initSoundColumns(deviceConfig.soundColumns); + initVidicons(deviceConfig.vidicons); + LOGGER_INFO("设备初始化完成"); + } + + std::shared_ptr DeviceHolder::getBarrier(const std::string &barrier_sn) + { + return barriers.contains(barrier_sn) ? barriers.at(barrier_sn) : nullptr; + } + + std::shared_ptr DeviceHolder::getPlatformScale(const std::string &barrier_sn) + { + if (!relation.contains(barrier_sn)) return nullptr; + auto map = relation.at(barrier_sn); + if (!map.contains("platformScale")) return nullptr; + auto sn = map.at("platformScale"); + return platformScales.contains(sn) ? platformScales.at(sn) : nullptr; + } + + std::shared_ptr DeviceHolder::getSoundColumn(const std::string &barrier_sn) + { + if (!relation.contains(barrier_sn)) return nullptr; + auto map = relation.at(barrier_sn); + if (!map.contains("soundColumn")) return nullptr; + auto sn = map.at("soundColumn"); + return soundColumns.contains(sn) ? soundColumns.at(sn) : nullptr; + } + + std::shared_ptr DeviceHolder::getVidicon(const std::string &barrier_sn) + { + if (!relation.contains(barrier_sn)) return nullptr; + auto map = relation.at(barrier_sn); + if (!map.contains("vidicon")) return nullptr; + auto sn = map.at("vidicon"); + return vidicons.contains(sn) ? vidicons.at(sn) : nullptr; + } + +} // zsy \ No newline at end of file diff --git a/src/device_holder.h b/src/device_holder.h new file mode 100644 index 0000000..f5ca9aa --- /dev/null +++ b/src/device_holder.h @@ -0,0 +1,62 @@ +#ifndef DEVICE_HOLDER_H +#define DEVICE_HOLDER_H +#include "barrier/barrier_properties.h" +#include "barrier/barrier.h" +#include "platform_scale/platform_scale.h" +#include "platform_scale/platform_scale_properties.h" +#include "sound_column/sound_column.h" +#include "sound_column/sound_column_properties.h" +#include "vidicon/vidicon.h" +#include "vidicon/vidicon_properties.h" + +namespace zsy { + + struct DeviceConfig + { + std::vector barriers; + std::vector platformScales; + std::vector soundColumns; + std::vector vidicons; + }; + + inline void from_json(const nlohmann::json &j, DeviceConfig &o) + { + PARSE_JSON(barriers, o.barriers); + PARSE_JSON(platformScales, o.platformScales); + PARSE_JSON(soundColumns, o.soundColumns); + PARSE_JSON(vidicons, o.vidicons); + } + + + class DeviceHolder + { + std::unordered_map > barriers; + std::unordered_map > platformScales; + std::unordered_map > soundColumns; + std::unordered_map > vidicons; + + std::unordered_map > relation; + + void initBarriers(std::vector &configs); + + void initPlatformScales(std::vector &configs); + + void initSoundColumns(std::vector &configs); + + void initVidicons(std::vector &configs); + + public: + DeviceHolder(const nlohmann::json &config); + + std::shared_ptr getBarrier(const std::string &barrier_sn); + + std::shared_ptr getPlatformScale(const std::string &barrier_sn); + + std::shared_ptr getSoundColumn(const std::string &barrier_sn); + + std::shared_ptr getVidicon(const std::string &barrier_sn); + }; + +} // zsy + +#endif //DEVICE_HOLDER_H diff --git a/src/http/http_svr.cpp b/src/http/http_svr.cpp new file mode 100644 index 0000000..94f8770 --- /dev/null +++ b/src/http/http_svr.cpp @@ -0,0 +1,66 @@ +#include "http_svr.h" + +#include + +namespace zsy +{ + HttpSvr::HttpSvr(const nlohmann::json &config) + : status(0), + config(config.get().httpSvr), + svr(std::make_unique()), + svrThread(nullptr) + { + try + { + { + std::unique_lock lock(status_mtx); + status = 1; + } + uint16_t port = this->config.port; + LOGGER_INFO("启动 HTTP 服务器,端口:{}", port); + svrThread = std::make_unique([svr = svr.get(), port,this]() mutable + { + if (!svr->listen("0.0.0.0", port)) + { + { + std::unique_lock lock(status_mtx); + status = 0; + } + LOGGER_ERROR("服务器启动失败,端口:{}", port); + return; + } + { + std::unique_lock lock(status_mtx); + status = 0; + } + LOGGER_INFO("HTTP 服务器已停止"); + }); + } catch (const std::exception &e) + { + LOGGER_ERROR("HTTP 服务器启动失败:", e.what()); + svrThread.reset(); + std::unique_lock lock(status_mtx); + status = 0; + }catch (...) + { + LOGGER_ERROR("未知异常 HTTP 服务器启动失败"); + svrThread.reset(); + std::unique_lock lock(status_mtx); + status = 0; + } + } + + HttpSvr::~HttpSvr() + { + std::unique_lock lock(status_mtx); + status = 1; + if (svr) + { + svr->stop(); + } + if (svrThread && svrThread->joinable()) + { + svrThread->join(); + } + } +} // zsy diff --git a/src/http/http_svr.h b/src/http/http_svr.h new file mode 100644 index 0000000..0e6152c --- /dev/null +++ b/src/http/http_svr.h @@ -0,0 +1,48 @@ +#ifndef HTTP_SVR_H +#define HTTP_SVR_H +#include +#include + +#include "httpsvr_properties.h" + +namespace zsy +{ + struct HttpSvrConfig + { + HttpSvrProperties httpSvr; + }; + + inline void from_json(const nlohmann::json &j, HttpSvrConfig &o) + { + PARSE_JSON(httpSvr, o.httpSvr); + } + + class HttpSvr + { + HttpSvrProperties config; + // 0-->不可用、1-->可用 + uint8_t status; + std::shared_mutex status_mtx; + std::unique_ptr svr; + std::unique_ptr svrThread; + + public: + explicit HttpSvr(const nlohmann::json &config); + + template + void postEndpoint(std::string path, Func &&handler) + { + std::shared_lock lock(status_mtx); + if (status == 0) + { + LOGGER_ERROR("HTTP 服务不可用"); + return; + } + svr->Post(std::move(path), std::forward(handler)); + } + + ~HttpSvr(); + }; +} // zsy + +#endif //HTTP_SVR_H diff --git a/src/http/httpsvr_properties.h b/src/http/httpsvr_properties.h new file mode 100644 index 0000000..5cf3f1f --- /dev/null +++ b/src/http/httpsvr_properties.h @@ -0,0 +1,19 @@ +#ifndef HTTPSVR_PROPERTIES_H +#define HTTPSVR_PROPERTIES_H +#include +#include "common/json_util.h" + +namespace zsy +{ + struct HttpSvrProperties + { + uint16_t port{80}; + }; + + inline void from_json(const nlohmann::json &j, HttpSvrProperties &o) + { + PARSE_JSON(port, o.port); + } +} + +#endif //HTTPSVR_PROPERTIES_H diff --git a/src/mqtt/mqtt_cli.cpp b/src/mqtt/mqtt_cli.cpp new file mode 100644 index 0000000..9037d2f --- /dev/null +++ b/src/mqtt/mqtt_cli.cpp @@ -0,0 +1,174 @@ +#include "mqtt_cli.h" +#include + +#include "application.h" +#include "common/sys_util.h" + +namespace zsy +{ + const std::string MqttCli::TYPE_REMOTE = "remote"; + const std::string MqttCli::TYPE_LOCAL = "local"; + + MqttCli::MqttCli(MqttProperties &config, std::shared_ptr eventManager) + : status(0), + config(config), + eventManager(eventManager) + { + try + { + ioc = std::make_shared(); + cli = MQTT_NS::make_sync_client(*ioc, config.server, config.port); + cli->set_client_id(config.clientId); + cli->set_user_name(config.username); + cli->set_password(config.password); + cli->set_clean_session(true); + cli->set_connack_handler([this](bool sp, MQTT_NS::connect_return_code connack_return_code) + { + return onConnAck(sp, connack_return_code); + }); + cli->set_close_handler([this] + { + onClose(); + }); + cli->set_error_handler([this](MQTT_NS::error_code ec) + { + onError(ec); + }); + cli->set_publish_handler([this](MQTT_NS::optional packet_id, MQTT_NS::publish_options pubopts, MQTT_NS::buffer topic_,MQTT_NS::buffer payload_) + { + return onMessage(packet_id, pubopts, topic_, payload_); + }); + eventLoop = std::make_unique([this] { this->run(); }); + } catch (const std::exception &e) + { + LOGGER_ERROR("MQTT:{} 连接失败:{}", config.clientId, e.what()); + } + catch (...) + { + LOGGER_ERROR("MQTT:{} 连接失败", config.clientId); + } + } + + void MqttCli::run() + { + try + { + cli->connect(); + ioc->run(); + } catch (std::exception &e) + { + std::unique_lock lock(status_mtx); + status = 0; + LOGGER_ERROR("MQTT 连接失败:{}", SysUtil::str_w_a(SysUtil::str_a_w(std::string(e.what()),"GBK" ))); + } + catch (...) + { + std::unique_lock lock(status_mtx); + status = 0; + LOGGER_ERROR("未知异常,MQTT 连接失败"); + } + } + + bool MqttCli::onConnAck(bool sp, mqtt::connect_return_code connack_return_code) + { + std::unique_lock lock(status_mtx); + + try + { + if (connack_return_code == MQTT_NS::connect_return_code::accepted) + { + status = 1; + LOGGER_INFO("MQTT 连接成功:{}", config.clientId); + for (const auto &[topic, qos]: config.subscribes) + { + cli->subscribe(topic, static_cast(qos)); + LOGGER_INFO("MQTT:{} 已订阅:【{} {}】", config.clientId, topic, qos); + } + } else + { + status = 0; + LOGGER_INFO("MQTT 连接失败:{}", config.clientId); + } + } catch (...) + { + status = 0; + LOGGER_ERROR("MQTT 连接失败:{}", config.clientId); + } + return true; + } + + void MqttCli::onClose() + { + std::unique_lock lock(status_mtx); + status = 0; + LOGGER_INFO("MQTT 连接已关闭:{}", config.clientId); + } + + void MqttCli::onError(mqtt::error_code ec) + { + std::unique_lock lock(status_mtx); + status = 0; + LOGGER_INFO("MQTT 错误:{} {}", config.clientId, ec.message()); + } + + bool MqttCli::onMessage(mqtt::optional packet_id, mqtt::publish_options pubopts, mqtt::buffer topic_, mqtt::buffer payload_) + { + auto topic = topic_.to_string(); + auto payload = payload_.to_string(); + LOGGER_INFO("MQTT 收到消息,设备名称:{},ID:{},主题:{},消息内容:{}", config.name, config.clientId, topic, payload); + eventManager->publish(config.clientId + "/" + topic, payload); + return true; + } + + std::string MqttCli::getClientId() const + { + return config.clientId; + } + + void MqttCli::publish(std::string topic, std::string payload, uint8_t qos) + { + std::shared_lock lock(status_mtx); + if (status == 0) + { + LOGGER_ERROR("MQTT 未连接,无法发布消息:{}", config.clientId); + return; + } + cli->publish(topic, payload, static_cast(qos)); + } + + MqttCli::~MqttCli() + { + cli->disconnect(); + ioc->stop(); + } + + MqttCliHolder::MqttCliHolder(const nlohmann::json &config, std::shared_ptr eventManager) + : configs(config.get().mqtts) + { + for (auto mqtt: configs) + { + auto cli = std::make_shared(mqtt, eventManager); + if (mqtt.sn == MqttCli::TYPE_LOCAL) + { + eventManager->subscribe(mqtt.clientId + "/stop", [](const EventManager::Event &) + { + Application::stop(); + }); + } + + mqttClis.emplace(mqtt.sn, cli); + } + } + + std::shared_ptr MqttCliHolder::localCli() + { + if (!mqttClis.contains(MqttCli::TYPE_LOCAL))return nullptr; + return mqttClis.at(MqttCli::TYPE_LOCAL); + } + + std::shared_ptr MqttCliHolder::remoteCli() + { + if (!mqttClis.contains(MqttCli::TYPE_REMOTE))return nullptr; + return mqttClis.at(MqttCli::TYPE_REMOTE); + } +} // zsy diff --git a/src/mqtt/mqtt_cli.h b/src/mqtt/mqtt_cli.h new file mode 100644 index 0000000..b6eef9a --- /dev/null +++ b/src/mqtt/mqtt_cli.h @@ -0,0 +1,84 @@ +#ifndef MQTT_CLI_H +#define MQTT_CLI_H +#include "mqtt_properties.h" +#include "mqtt_client_cpp.hpp" +#include "common/event_manager.h" + +namespace zsy +{ + struct MqttCliConfig + { + std::vector mqtts; + }; + + inline void from_json(const nlohmann::json &j, MqttCliConfig &o) + { + PARSE_JSON(mqtts, o.mqtts); + } + + class MqttCli + { + using CLI = MQTT_NS::callable_overlay, boost::asio::strand, 0> > > > >; + using CLI_PTR = std::shared_ptr; + using packet_id_t = CLI::packet_id_t; + MqttProperties config; + // 0-->不可用、1-->可用 + uint8_t status; + std::shared_mutex status_mtx; + std::shared_ptr eventManager; + std::unique_ptr eventLoop; + CLI_PTR cli; + std::shared_ptr ioc; + + void run(); + + bool onConnAck(bool sp, MQTT_NS::connect_return_code connack_return_code); + + void onClose(); + + void onError(MQTT_NS::error_code ec); + + bool onMessage(MQTT_NS::optional packet_id, MQTT_NS::publish_options pubopts, MQTT_NS::buffer topic_,MQTT_NS::buffer payload_); + + public: + static const std::string TYPE_REMOTE; + static const std::string TYPE_LOCAL; + + MqttCli(MqttProperties &config, std::shared_ptr eventManager); + + std::string getClientId() const; + + template + void subscribe(std::string topic, uint8_t qos, Fn &&handler) + { + std::shared_lock lock(status_mtx); + if (status == 0) + { + LOGGER_ERROR("MQTT 未连接,无法订阅:{}", config.clientId); + return; + } + cli->subscribe(topic, static_cast(qos)); + eventManager->subscribe(config.clientId + "/" + topic, std::forward(handler)); + LOGGER_INFO("MQTT:{} 已订阅:【{} {}】", config.clientId, topic, qos); + } + + void publish(std::string topic, std::string payload, uint8_t qos); + + ~MqttCli(); + }; + + class MqttCliHolder + { + std::vector configs; + std::unordered_map > mqttClis; + + public: + MqttCliHolder(const nlohmann::json &config, std::shared_ptr eventManager); + + std::shared_ptr localCli(); + + std::shared_ptr remoteCli(); + }; +} // zsy + +#endif //MQTT_CLI_H diff --git a/src/mqtt/mqtt_properties.cpp b/src/mqtt/mqtt_properties.cpp new file mode 100644 index 0000000..2cbb21a --- /dev/null +++ b/src/mqtt/mqtt_properties.cpp @@ -0,0 +1,4 @@ +#include "mqtt_properties.h" +namespace zsy +{ +} diff --git a/src/mqtt/mqtt_properties.h b/src/mqtt/mqtt_properties.h new file mode 100644 index 0000000..7949e8c --- /dev/null +++ b/src/mqtt/mqtt_properties.h @@ -0,0 +1,47 @@ +#ifndef MQTT_PROPERTIES_H +#define MQTT_PROPERTIES_H +#include +#include +#include "common/json_util.h" + +namespace zsy +{ + struct MqttProperties + { + struct Subscribe + { + std::string topic; + uint8_t qos{0}; + }; + + std::string sn; + std::string name; + std::string server; + uint16_t port{1883}; + std::string clientId; + std::string username; + std::string password; + std::vector subscribes; + }; + + inline void from_json(const nlohmann::json &j, MqttProperties::Subscribe &o) + { + PARSE_JSON(topic, o.topic); + PARSE_JSON(qos, o.qos); + } + + inline void from_json(const nlohmann::json &j, MqttProperties &o) + { + PARSE_JSON(sn, o.sn); + PARSE_JSON(name, o.name); + PARSE_JSON(server, o.server); + PARSE_JSON(port, o.port); + PARSE_JSON(clientId, o.clientId); + PARSE_JSON(username, o.username); + PARSE_JSON(password, o.password); + PARSE_JSON(subscribes, o.subscribes); + } +} + + +#endif //MQTT_PROPERTIES_H diff --git a/src/oss/oss.cpp b/src/oss/oss.cpp new file mode 100644 index 0000000..5ba27a0 --- /dev/null +++ b/src/oss/oss.cpp @@ -0,0 +1,91 @@ +#include "oss.h" +#include +#include +#include "common/loging.h" +#include "common/sys_util.h" + +namespace zsy +{ + OSS::OSS(const nlohmann::json &config) + : config(config.get().oss) + { + } + + std::tuple OSS::upload(const std::string &objectName, std::istream &file) + { + LOGGER_INFO("正在上传文件:{}", objectName); + try + { + auto now = std::chrono::system_clock::now(); + auto now_c = std::chrono::system_clock::to_time_t(now); + tm tm_gmt; + gmtime_s(&tm_gmt, &now_c); + std::ostringstream temp; + temp << std::put_time(&tm_gmt, "%a, %d %b %Y %H:%M:%S GMT"); + std::string date = temp.str(); + + std::string str = + "PUT\n\napplication/octet-stream\n" + + date + "\n" + + "/" + config.bucketName + "/" + objectName; + + // 计算签名 + std::string signature = SysUtil::hmac_sha1(config.sk, str); + + // 构建请求 + httplib::Client cli(config.bucketName + "." + config.endpoint); + + // 设置请求头 + httplib::Headers headers = { + {"Date", date}, + {"Content-Type", "application/octet-stream"}, + {"Authorization", "OSS " + config.ak + ":" + signature} + }; + + std::stringstream buffer; + buffer << file.rdbuf(); + const std::string &content = buffer.str(); + + // 发送请求 + auto res = cli.Put(("/" + objectName).c_str(), headers, content, "application/octet-stream"); + + if (res && res->status == 200) + { + std::string body = res && !res->body.empty() ? res->body : ""; + auto url = "https://" + config.bucketName + "." + config.endpoint + "/" + objectName; + LOGGER_INFO("文件上传成功:{} {} {}", objectName, body, url); + return std::make_tuple(true, url); + } else + { + std::string body = res && !res->body.empty() ? res->body : ""; + LOGGER_INFO("文件上传失败:{} {}", objectName, body); + return std::make_tuple(false, ""); + } + } catch (const std::exception &e) + { + LOGGER_INFO("文件上传失败:{} {}", objectName, e.what()); + return std::make_tuple(false, ""); + }catch (...) + { + LOGGER_INFO("未知异常,文件上传失败:{}", objectName); + return std::make_tuple(false, ""); + } + } + + std::tuple OSS::upload(const std::string &objectName, const std::string &filePath) + { + if (filePath.empty()) + { + LOGGER_INFO("文件上传失败,文件路径为空"); + return std::make_tuple(false, ""); + } + std::ifstream file(filePath, std::ios::binary); + if (!file.is_open()) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_INFO("文件上传失败,无法打开文件:{},错误码:{},错误信息:{}", filePath, code, msg); + return std::make_tuple(false, ""); + } + return upload(objectName, file); + } +} // zsy diff --git a/src/oss/oss.h b/src/oss/oss.h new file mode 100644 index 0000000..6f4bfc5 --- /dev/null +++ b/src/oss/oss.h @@ -0,0 +1,39 @@ +#ifndef OSS_H +#define OSS_H +#include +#include +#include +#include +#include +#include + +#include "oss_properties.h" +#include "common/loging.h" + + +namespace zsy +{ + struct OSSConfig + { + OssProperties oss; + }; + + inline void from_json(const nlohmann::json &j, OSSConfig &o) + { + PARSE_JSON(oss, o.oss); + } + + class OSS + { + OssProperties config; + + public: + OSS(const nlohmann::json &config); + + std::tuple upload(const std::string &objectName, std::istream &file); + + std::tuple upload(const std::string &objectName, const std::string &filePath); + }; +} // zsy + +#endif //OSS_H diff --git a/src/oss/oss_properties.h b/src/oss/oss_properties.h new file mode 100644 index 0000000..769542b --- /dev/null +++ b/src/oss/oss_properties.h @@ -0,0 +1,26 @@ +#ifndef OSS_PROPERTIES_H +#define OSS_PROPERTIES_H +#include +#include "common/json_util.h" + +namespace zsy +{ + struct OssProperties + { + std::string endpoint; + std::string bucketName; + std::string ak; + std::string sk; + }; + + inline void from_json(const nlohmann::json &j, OssProperties &o) + { + PARSE_JSON(endpoint, o.endpoint); + PARSE_JSON(bucketName, o.bucketName); + PARSE_JSON(sk, o.sk); + PARSE_JSON(ak, o.ak); + + } +} // zsy + +#endif //OSS_PROPERTIES_H diff --git a/src/platform_scale/generic_platform_scale.cpp b/src/platform_scale/generic_platform_scale.cpp new file mode 100644 index 0000000..55d976b --- /dev/null +++ b/src/platform_scale/generic_platform_scale.cpp @@ -0,0 +1,144 @@ +#include "generic_platform_scale.h" + +#include "common/sys_util.h" + +namespace zsy +{ + GenericPlatformScaleProcessor::GenericPlatformScaleProcessor() + : steady(0), + weight(0.0) + { + } + + uint32_t GenericPlatformScaleProcessor::process(const std::vector &buffer) + { + size_t bufferSize = buffer.size(); + if (bufferSize < 12) + { + return 0; + } + + // LOGGER_INFO("处理数据:{}", data(buffer)); + + if (buffer[0] != 0x02 || buffer[11] != 0x03) + { + LOGGER_INFO("地磅数据格式错误:{}", data(buffer)); + + for (uint32_t i = 0; i < bufferSize; i++) + { + if (buffer[i] == 0x02 && i + 11 < bufferSize && buffer[i + 11] == 0x03) + { + LOGGER_WARN("地磅数据格式错误,已丢弃:{}", data(buffer,i + 1)); + return i; + } + } + return 0; + } + + uint8_t checkCode = buffer[1]; + for (uint8_t i = 2; i < 9; i++) + { + checkCode ^= buffer[i]; + } + if (std::string{static_cast(buffer[9]), static_cast(buffer[10])} != SysUtil::toHex(checkCode)) + { + LOGGER_WARN("地磅数据校验失败,已丢弃:{}", data(buffer)); + return 12; + } + double tempWeight = 0.0; + double tempData = 0; + for (uint8_t i = 2; i < 8; i++) + { + tempData += (buffer[i] - 0x30) * std::pow(10, 7 - i); + } + tempWeight = tempData / std::pow(10, buffer[8] - 0x30); + if (buffer[1] == 0x2D) + { + tempWeight = -tempWeight; + } + + if (tempWeight == weight.load()) + { + ++steady; + } else + { + weight.store(tempWeight); + steady.store(0); + } + return 12; + } + + std::string GenericPlatformScaleProcessor::data(const std::vector &buffer, uint8_t count) + { + std::string dataStr; + for (uint32_t j = 0; j < count; j++) + { + dataStr += " " + SysUtil::toHex(buffer[j]); + } + return dataStr; + } + + GenericPlatformScale::GenericPlatformScale(const PlatformScaleProperties &config) + : status(0), + config(config), + serialPort(new SerialPort(config.port, config.baudRate, config.byteSize, config.parity, config.stopBits, new GenericPlatformScaleProcessor())) + { + std::unique_lock lock(status_mtx); + status = 1; + } + + double GenericPlatformScale::reading() + { + std::shared_lock lock(status_mtx); + try + { + LOGGER_INFO("正在读取地磅数据,设备名称:{}", config.name); + if (status != 1) + { + LOGGER_INFO("无法称重,地磅状态:{}", status); + return 0.0; + } + status = 2; + LOGGER_INFO("正在称重..."); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + auto processor = static_cast(serialPort->processor); + int count = 0; + while (processor->steady.load() < 20) + { + count++; + if (count >= 10) + { + LOGGER_ERROR("称重失败,连续 {} 次未稳定", count); + status = 1; + return 0.0; + } + std::this_thread::sleep_for(std::chrono::milliseconds(3000)); + } + auto res = processor->weight.load(); + LOGGER_INFO("称重完成:{} KG", res); + status = 1; + return res; + } catch (std::exception &e) + { + LOGGER_ERROR("称重失败:{}", e.what()); + status = 4; + return 0.0; + } + catch (...) + { + LOGGER_ERROR("未知异常,称重失败"); + status = 4; + return 0.0; + } + } + + GenericPlatformScale::~GenericPlatformScale() + { + LOGGER_INFO("正在停止地磅..."); + std::unique_lock lock(status_mtx); + status = 3; + delete serialPort; + serialPort = nullptr; + LOGGER_INFO("地磅已停止"); + } +} // zsy diff --git a/src/platform_scale/generic_platform_scale.h b/src/platform_scale/generic_platform_scale.h new file mode 100644 index 0000000..e372955 --- /dev/null +++ b/src/platform_scale/generic_platform_scale.h @@ -0,0 +1,43 @@ +#ifndef GENERIC_PLATFORM_SCALE_H +#define GENERIC_PLATFORM_SCALE_H +#include + +#include "platform_scale.h" +#include "platform_scale_properties.h" +#include "serial_port/serial_port.h" + +namespace zsy +{ + class GenericPlatformScaleProcessor : public SerialPort::Processor + { + public: + std::atomic steady; + std::atomic weight; + + GenericPlatformScaleProcessor(); + + uint32_t process(const std::vector &buffer) override; + + static std::string data(const std::vector &buffer, uint8_t count = 12); + + ~GenericPlatformScaleProcessor() override = default; + }; + + class GenericPlatformScale : public PlatformScale + { + // 0-->不可用,1-->已启动,2-->正在读取,3-->已关闭,4-->错误 + uint8_t status; + std::shared_mutex status_mtx; + PlatformScaleProperties config; + SerialPort *serialPort; + + public: + explicit GenericPlatformScale(const PlatformScaleProperties &config); + + [[nodiscard]] double reading() override; + + ~GenericPlatformScale() override; + }; +} // zsy + +#endif //GENERIC_PLATFORM_SCALE_H diff --git a/src/platform_scale/platform_scale.cpp b/src/platform_scale/platform_scale.cpp new file mode 100644 index 0000000..36e4d29 --- /dev/null +++ b/src/platform_scale/platform_scale.cpp @@ -0,0 +1,4 @@ +#include "platform_scale.h" + +namespace zsy { +} // zsy \ No newline at end of file diff --git a/src/platform_scale/platform_scale.h b/src/platform_scale/platform_scale.h new file mode 100644 index 0000000..ed9f99f --- /dev/null +++ b/src/platform_scale/platform_scale.h @@ -0,0 +1,15 @@ +#ifndef PLATFORM_SCALE_H +#define PLATFORM_SCALE_H + +namespace zsy { + +class PlatformScale { +public: + virtual ~PlatformScale() = default; + + [[nodiscard]] virtual double reading() = 0; +}; + +} // zsy + +#endif //PLATFORM_SCALE_H diff --git a/src/platform_scale/platform_scale_properties.h b/src/platform_scale/platform_scale_properties.h new file mode 100644 index 0000000..19fc727 --- /dev/null +++ b/src/platform_scale/platform_scale_properties.h @@ -0,0 +1,31 @@ +#ifndef PLATFORM_SCALE_PROPERTIES_H +#define PLATFORM_SCALE_PROPERTIES_H +#include "common/json_util.h" + +namespace zsy +{ + struct PlatformScaleProperties + { + std::string sn; + std::string name; + std::string port; + uint32_t baudRate{9600}; + uint8_t byteSize{8}; + uint8_t parity{0}; + uint8_t stopBits{0}; + }; + + inline void from_json(const nlohmann::json &j, PlatformScaleProperties &o) + { + PARSE_JSON(sn, o.sn); + PARSE_JSON(name, o.name); + PARSE_JSON(port, o.port); + PARSE_JSON(baudRate, o.baudRate); + PARSE_JSON(byteSize, o.byteSize); + PARSE_JSON(parity, o.parity); + PARSE_JSON(stopBits, o.stopBits); + } +} + + +#endif //PLATFORM_SCALE_PROPERTIES_H diff --git a/src/report_svr/report_svr.cpp b/src/report_svr/report_svr.cpp new file mode 100644 index 0000000..795a253 --- /dev/null +++ b/src/report_svr/report_svr.cpp @@ -0,0 +1,123 @@ +#include "report_svr.h" + +#include +#include + +#include "common/loging.h" + +namespace zsy +{ + ReportSvr::ReportSvr(const nlohmann::json &config) + : config(config.get().reportSvr) + { + } + + ReportPassResult ReportSvr::reportPass(const std::string &license, const std::string &sn, const std::string &carFrontUrl) + { + try + { + const httplib::Headers headers = { + {"Content-Type", "application/json"} + }; + ReportData reportData; + reportData.carNumber = license; + reportData.carDiscernCode = sn; + reportData.photoFront = carFrontUrl; + + nlohmann::json data = reportData; + + auto body = data.dump(); + + LOGGER_INFO("上报数据:{}{} {}", config.server, config.passUrl, body); + + httplib::Client cli(config.server); + auto response = cli.Post(config.passUrl.c_str(), headers, body, "application/json"); + if (response) + { + LOGGER_INFO("上报结果:{}", response->body); + const int status = response->status; + if (status >= 300 || status < 200) + { + LOGGER_ERROR("上报失败,错误码:{}", status); + return {.code = 1, .msg = "上报失败", .data = {.type = 0, .errMsg = "上报失败"}}; + } else + { + auto json = nlohmann::json::parse(response->body); + return json.get(); + } + } else + { + LOGGER_ERROR("上报失败,错误码:{}", httplib::to_string(response.error())); + return {.code = 1, .msg = "上报失败", .data = {.type = 0, .errMsg = "上报失败"}}; + } + } catch (std::exception &e) + { + LOGGER_ERROR("上报失败:{}", e.what()); + return {.code = 1, .msg = "上报失败", .data = {.type = 0, .errMsg = "上报失败"}}; + } + catch (...) + { + LOGGER_ERROR("未知异常,上报失败"); + return {.code = 1, .msg = "上报失败", .data = {.type = 0, .errMsg = "上报失败"}}; + } + } + + ReportResult ReportSvr::report(const std::string &license, + const std::string &sn, + const double weight, + const std::string &carFrontUrl, + const std::string &carBodyPhotoUrl, + const std::string &orderNo) + { + try + { + const httplib::Headers headers = { + {"Content-Type", "application/json"} + }; + ReportData reportData; + reportData.carNumber = license; + reportData.carDiscernCode = sn; + reportData.weight = weight; + reportData.photoFront = carFrontUrl; + reportData.photoBody = carBodyPhotoUrl; + reportData.orderNo = orderNo; + reportData.onlyCar = 0; + + nlohmann::json data = reportData; + + auto body = data.dump(); + + LOGGER_INFO("上报数据:{}{} {}", config.server, config.passUrl, body); + + httplib::Client cli(config.server); + auto response = cli.Post(config.passUrl.c_str(), headers, body, "application/json"); + if (response) + { + LOGGER_INFO("上报结果:{}", response->body); + const int status = response->status; + if (status >= 300 || status < 200) + { + LOGGER_ERROR("上报失败,错误码:{}", status); + return {.code = 1, .msg = "上报失败"}; + } else + { + auto json = nlohmann::json::parse(response->body); + return json.get(); + } + } else + { + LOGGER_ERROR("上报失败,错误码:{}", httplib::to_string(response.error())); + return {.code = 1, .msg = "上报失败"}; + } + } catch (std::exception &e) + { + LOGGER_ERROR("上报失败:{}", e.what()); + return {.code = 1, .msg = "上报失败"}; + } + catch (...) + { + LOGGER_ERROR("未知异常,上报失败"); + return {.code = 1, .msg = "上报失败"}; + } + } +} // zsy diff --git a/src/report_svr/report_svr.h b/src/report_svr/report_svr.h new file mode 100644 index 0000000..f54784e --- /dev/null +++ b/src/report_svr/report_svr.h @@ -0,0 +1,126 @@ +#ifndef REPORT_SVR_H +#define REPORT_SVR_H +#include + +#include "report_svr/report_svr_properties.h" + +namespace zsy +{ + struct ReportServerConfig + { + ReportServerProperties reportSvr; + }; + + inline void from_json(const nlohmann::json &j, ReportServerConfig &o) + { + PARSE_JSON(reportSvr, o.reportSvr); + } + + struct ReportPassResult + { + struct Data + { + std::string carNumber; + int type; + std::string orderNo; + std::string errMsg; + std::string scene; + }; + + int code{1}; + std::string msg; + Data data; + }; + + inline void from_json(const nlohmann::json &j, ReportPassResult::Data &o) + { + PARSE_JSON(carNumber, o.carNumber); + PARSE_JSON(type, o.type); + PARSE_JSON(orderNo, o.orderNo); + PARSE_JSON(errMsg, o.errMsg); + PARSE_JSON(scene, o.scene); + } + + inline void from_json(const nlohmann::json &j, ReportPassResult &o) + { + PARSE_JSON(code, o.code); + PARSE_JSON(msg, o.msg); + PARSE_JSON(data, o.data); + } + + struct ReportResult + { + struct Data + { + std::string carNumber; + std::string orderNo; + std::string laneCode; + }; + + int code{1}; + std::string msg; + Data data; + }; + + inline void from_json(const nlohmann::json &j, ReportResult::Data &o) + { + PARSE_JSON(carNumber, o.carNumber); + PARSE_JSON(orderNo, o.orderNo); + PARSE_JSON(laneCode, o.laneCode); + } + + inline void from_json(const nlohmann::json &j, ReportResult &o) + { + PARSE_JSON(code, o.code); + PARSE_JSON(msg, o.msg); + PARSE_JSON(data, o.data); + } + + struct ReportData + { + std::optional carNumber; // 车牌号 + std::optional carDiscernCode; // 设备编号 + std::optional weight; // 重量(kg) + std::optional photoFront; // 车辆正面照片URL + std::optional photoBody; // 车辆车身照片URL + std::optional weighBridgeCode; + std::optional telephone; + std::optional onlyCar; + std::optional orderNo; // 订单号 + }; + + inline void to_json(nlohmann::json &j, const ReportData &o) + { + j = nlohmann::json{ + {"carNumber", o.carNumber}, + {"carDiscernCode", o.carDiscernCode}, + {"weight", o.weight}, + {"photoFront", o.photoFront}, + {"photoBody", o.photoBody}, + {"weighBridgeCode", o.weighBridgeCode}, + {"telephone", o.telephone}, + {"onlyCar", o.onlyCar}, + {"orderNo", o.orderNo} + }; + } + + class ReportSvr + { + ReportServerProperties config; + + public: + ReportSvr(const nlohmann::json &config); + + ReportPassResult reportPass(const std::string &license, const std::string &sn, const std::string &carFrontUrl); + + + ReportResult report(const std::string &license, + const std::string &sn, + const double weight, + const std::string &carFrontUrl, + const std::string &carBodyPhotoUrl, + const std::string &orderNo); + }; +} // zsy + +#endif //REPORT_SVR_H diff --git a/src/report_svr/report_svr_properties.h b/src/report_svr/report_svr_properties.h new file mode 100644 index 0000000..d5172e2 --- /dev/null +++ b/src/report_svr/report_svr_properties.h @@ -0,0 +1,23 @@ +#ifndef REPORT_SERVER_PROPERTIES_H +#define REPORT_SERVER_PROPERTIES_H +#include + +#include "common/json_util.h" + +namespace zsy +{ + struct ReportServerProperties + { + std::string server; + std::string passUrl; + std::string reportUrl; + }; + + inline void from_json(const nlohmann::json &j, ReportServerProperties &o) + { + PARSE_JSON(server, o.server); + PARSE_JSON(passUrl, o.passUrl); + PARSE_JSON(reportUrl, o.reportUrl); + } +} +#endif //REPORT_SERVER_PROPERTIES_H diff --git a/src/serial_port/serial_port.cpp b/src/serial_port/serial_port.cpp new file mode 100644 index 0000000..d3ff15a --- /dev/null +++ b/src/serial_port/serial_port.cpp @@ -0,0 +1,211 @@ +#include "serial_port.h" + +#include "common/loging.h" +#include "common/sys_util.h" + +namespace zsy +{ + SerialPort::SerialPort(const std::string &port, uint32_t baudRate, uint8_t byteSize, uint8_t parity, uint8_t stopBits, Processor *processor) + : buffer(new std::vector()), + status(0), + readStatus(0), + port(port), + baudRate(baudRate), + byteSize(byteSize), + parity(parity), + stopBits(stopBits), + readThread(nullptr), + processor(processor), + com(INVALID_HANDLE_VALUE), + waitOverlapped({.hEvent = CreateEvent(nullptr, false, false, nullptr)}), + readOverlapped({.hEvent = CreateEvent(nullptr, false, false, nullptr)}) + { + auto process_error = [this] + { + status.store(3); + if (com != nullptr && com != INVALID_HANDLE_VALUE) CloseHandle(com); + com = INVALID_HANDLE_VALUE; + if (waitOverlapped.hEvent != nullptr && waitOverlapped.hEvent != INVALID_HANDLE_VALUE) CloseHandle(waitOverlapped.hEvent); + waitOverlapped.hEvent = INVALID_HANDLE_VALUE; + if (readOverlapped.hEvent != nullptr && readOverlapped.hEvent != INVALID_HANDLE_VALUE) CloseHandle(readOverlapped.hEvent); + readOverlapped.hEvent = INVALID_HANDLE_VALUE; + }; + this->com = CreateFile(SysUtil::str_a_w(port).c_str(), + GENERIC_READ, + 0, + nullptr, + OPEN_EXISTING, + FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, + nullptr); + if (com == INVALID_HANDLE_VALUE) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口打开失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + status.store(3); + process_error(); + return; + } + + SetupComm(com, 1024, 1024); + + DCB dcb{}; + if (!GetCommState(com, &dcb)) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口状态获取失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + process_error(); + return; + } + dcb.BaudRate = baudRate; + dcb.ByteSize = byteSize; + // 0-4=None,Odd,Even,Mark,Space + dcb.Parity = parity; + // 0,1,2 = 1, 1.5, 2 + dcb.StopBits = stopBits; + if (!SetCommState(com, &dcb)) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口状态设置失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + process_error(); + return; + } + + COMMTIMEOUTS comTimeOut; + comTimeOut.ReadIntervalTimeout = MAXDWORD; + comTimeOut.ReadTotalTimeoutMultiplier = 0; + comTimeOut.ReadTotalTimeoutConstant = 0; + comTimeOut.WriteTotalTimeoutMultiplier = 0; + comTimeOut.WriteTotalTimeoutConstant = 0; + if (!SetCommTimeouts(com, &comTimeOut)) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口参数设置失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + process_error(); + return; + } + + if (!PurgeComm(com, PURGE_RXCLEAR | PURGE_TXCLEAR)) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口缓冲区清理失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + process_error(); + return; + } + + if (!SetCommMask(com, EV_RXCHAR)) + { + auto [_,code,msg] = SysUtil::getError(); + LOGGER_ERROR("串口读时间设置失败,串口号:{},错误码:{},错误信息:{}", port, code, msg); + process_error(); + return; + } + status.store(1); + readThread = new std::thread([this] { read(); }); + } + + void SerialPort::read() + { + try + { + LOGGER_INFO("开始读取串口数据,串口号:{}", port); + readStatus.store(1); + while (true) + { + if (status.load() != 1) + { + LOGGER_ERROR("无法读取数据,串口不可用,串口号:{}", port); + readStatus.store(3); + return; + } + DWORD eventMask = 0; + waitOverlapped.Offset = 0; + const DWORD waitResult = WaitCommEvent(com, &eventMask, &waitOverlapped); + if (waitResult == FALSE) + { + auto error = SysUtil::getError(); + if (std::get<1>(error) != ERROR_IO_PENDING) + { + LOGGER_INFO("串口已断开,停止读取数据,串口号:{},错误码:{},错误信息:{}", port, std::get<1>(error), std::get<2>(error)); + break; + } + // LOGGER_INFO("等待数据,串口号:{}", port); + DWORD bytes = 0; + if (GetOverlappedResult(com, &waitOverlapped, &bytes, TRUE) == FALSE) + { + error = SysUtil::getError(); + auto ss = std::get<2>(error); + + LOGGER_ERROR("串口已断开,停止读取数据,串口号:{},错误码:{},错误信息:{}", port, std::get<1>(error), std::get<2>(error)); + break; + } + } + + if (eventMask & EV_RXCHAR != EV_RXCHAR) continue; + + COMSTAT comStat; + DWORD errors; + ClearCommError(com, &errors, &comStat); + + if (comStat.cbInQue > 0) + { + // LOGGER_INFO("收到数据,串口号:{},字节数:{}", port, comStat.cbInQue); + DWORD bytesRead = 0; + auto data = std::make_unique(comStat.cbInQue); + auto dataPtr = data.get(); + readOverlapped.Offset = 0; + if (ReadFile(com, dataPtr, comStat.cbInQue, &bytesRead, &readOverlapped)) + { + this->buffer->insert(this->buffer->end(), dataPtr, dataPtr + bytesRead); + const auto processedBytes = processor->process(*this->buffer); + if (processedBytes > 0)this->buffer->erase(this->buffer->begin(), this->buffer->begin() + processedBytes); + } else + { + readStatus.store(3); + LOGGER_ERROR("读取数据失败,串口号:{},错误码:{}", port, GetLastError()); + break; + } + } else + { + // LOGGER_INFO("未读取到数据,串口号:{}", port); + } + } + readStatus.store(2); + LOGGER_INFO("停止读取串口数据,串口号:{}", port); + } catch (const std::exception &e) + { + readStatus.store(3); + LOGGER_ERROR("串口读取任务异常退出,串口号:{},错误信息:{}", port, e.what()); + } + catch (...) + { + readStatus.store(3); + LOGGER_ERROR("未知异常,串口读取任务异常退出,串口号:{}", port); + } + } + + SerialPort::~SerialPort() + { + status.store(2); + if (readThread != nullptr) + { + if (com != nullptr && com != INVALID_HANDLE_VALUE) CancelIoEx(com, nullptr); + readThread->join(); + delete readThread; + readThread = nullptr; + } + if (processor != nullptr) + { + delete processor; + processor = nullptr; + } + buffer->clear(); + delete buffer; + buffer = nullptr; + if (com != nullptr && com != INVALID_HANDLE_VALUE) CloseHandle(com); + com = INVALID_HANDLE_VALUE; + if (waitOverlapped.hEvent != nullptr && waitOverlapped.hEvent != INVALID_HANDLE_VALUE) CloseHandle(waitOverlapped.hEvent); + waitOverlapped.hEvent = INVALID_HANDLE_VALUE; + if (readOverlapped.hEvent != nullptr && readOverlapped.hEvent != INVALID_HANDLE_VALUE) CloseHandle(readOverlapped.hEvent); + readOverlapped.hEvent = INVALID_HANDLE_VALUE; + } +} // zsy diff --git a/src/serial_port/serial_port.h b/src/serial_port/serial_port.h new file mode 100644 index 0000000..8fc49e0 --- /dev/null +++ b/src/serial_port/serial_port.h @@ -0,0 +1,52 @@ +#ifndef SERIAL_PORT_H +#define SERIAL_PORT_H +#include +#include +#include +#include +#include + +namespace zsy +{ + class SerialPort + { + public: + class Processor + { + public: + virtual uint32_t process(const std::vector &buffer) = 0; + + virtual ~Processor() = default; + }; + + Processor *processor; + + SerialPort( + const std::string &port, + uint32_t baudRate, + uint8_t byteSize, + uint8_t parity, + uint8_t stopBits, + Processor *processor); + ~SerialPort(); + + private: + std::vector *buffer; + // 0-->不可用,1-->已打开,2-->已关闭,3-->错误 + std::atomic status; + // 0-->不可用,1-->正在读取,2-->已停止,3-->错误 + std::atomic readStatus; + std::string port; + uint32_t baudRate; + uint8_t byteSize; + uint8_t parity; + uint8_t stopBits; + std::thread *readThread; + HANDLE com; + OVERLAPPED waitOverlapped; //用于等待数据 + OVERLAPPED readOverlapped; //用于读取数据 + void read(); + }; +} // zsy + +#endif //SERIAL_PORT_H diff --git a/src/sound_column/generic_sound_column.cpp b/src/sound_column/generic_sound_column.cpp new file mode 100644 index 0000000..4993be7 --- /dev/null +++ b/src/sound_column/generic_sound_column.cpp @@ -0,0 +1,113 @@ +#include "generic_sound_column.h" + +#include "application.h" +#include "httplib.h" + +namespace zsy +{ + GenericSoundColumn::GenericSoundColumn(const SoundColumnProperties &config): config(config) + { + Application::eventManager->subscribe(config.sn + "/play", [this](const EventManager::Event & event) + { + if (!event.data.has_value()) return; + auto jsonData = event.data.value(); + + LOGGER_INFO("播放语音:{}", jsonData.dump()); + const auto req = jsonData.get(); + this->play(req.text); + }); + static auto subscribed = [] + { + auto cli = Application::mqttCliHolder->remoteCli(); + auto clientId = cli->getClientId(); + if (cli) + { + Application::eventManager->subscribe(clientId + "/yztq/1/voice", [](const EventManager::Event & event) + { + if (!event.data.has_value()) + { + LOGGER_ERROR("语音播放请求参数错误"); + return; + } + auto jsonData = event.data.value(); + + LOGGER_INFO("收到语音播放请求:{}", jsonData.dump()); + const auto req = jsonData.get(); + auto soundColumn = Application::deviceHolder->getSoundColumn(req.deviceNo); + if (!soundColumn) + { + LOGGER_ERROR("未找到对应的音柱"); + return; + } + auto sn = soundColumn->getSn(); + + Application::eventManager->publish(sn + "/play", jsonData.dump()); + }); + } else + { + LOGGER_ERROR("未找到 MQTT 远程客户端"); + } + return true; + }(); + } + + void GenericSoundColumn::play(const std::string &content) + { + try + { + LOGGER_INFO("正在播放语音,设备名称:{}", config.name); + + LOGGER_INFO("播放内容:{}", content); + httplib::Headers headers = { + {"Content-Type", "application/json"} + }; + + nlohmann::json data{ + {"loop", {{"times", 1}}}, + {"prompt", true}, + {"queue", false}, + {"rcn", "0"}, + {"rdn", "0"}, + {"reg", 0}, + {"speed", 50}, + {"sync", true}, + {"text", convert(content)}, + {"vcn", "xiaoyan"}, + {"volume", 100} + }; + auto body = data.dump(); + LOGGER_INFO("播放语音:{}{} {}", config.server, config.path, body); + + httplib::Client cli(config.server); + auto response = cli.Post(config.path.c_str(), headers, body, "application/json"); + + if (response) + { + LOGGER_INFO("语音播放结果:{}", response->body); + const int status = response->status; + if (status >= 300 || status < 200) + { + LOGGER_ERROR("语音播放失败,HTTP状态码:{}", status); + } else + { + LOGGER_INFO("语音播放成功"); + } + } else + { + LOGGER_ERROR("语音播放失败,错误:{}", httplib::to_string(response.error())); + } + } catch (const std::exception &e) + { + LOGGER_ERROR("语音播放失败,错误:{}", e.what()); + } + catch (...) + { + LOGGER_ERROR("未知异常,语音播放失败"); + } + } + + std::string GenericSoundColumn::getSn() + { + return config.sn; + } +} // zsy diff --git a/src/sound_column/generic_sound_column.h b/src/sound_column/generic_sound_column.h new file mode 100644 index 0000000..3514671 --- /dev/null +++ b/src/sound_column/generic_sound_column.h @@ -0,0 +1,21 @@ +#ifndef GENERIC_SOUND_COLUMN_H +#define GENERIC_SOUND_COLUMN_H +#include "sound_column.h" +#include "sound_column_properties.h" + +namespace zsy +{ + class GenericSoundColumn final : public SoundColumn + { + SoundColumnProperties config; + + public: + explicit GenericSoundColumn(const SoundColumnProperties &config); + + void play(const std::string &content) override; + + std::string getSn() override; + }; +} // zsy + +#endif //GENERIC_SOUND_COLUMN_H diff --git a/src/sound_column/sound_column.cpp b/src/sound_column/sound_column.cpp new file mode 100644 index 0000000..bf93e75 --- /dev/null +++ b/src/sound_column/sound_column.cpp @@ -0,0 +1,4 @@ +#include "sound_column.h" + +namespace zsy { +} // zsy \ No newline at end of file diff --git a/src/sound_column/sound_column.h b/src/sound_column/sound_column.h new file mode 100644 index 0000000..624e8f4 --- /dev/null +++ b/src/sound_column/sound_column.h @@ -0,0 +1,57 @@ +#ifndef SOUND_COLUMN_H +#define SOUND_COLUMN_H +#include + +#include "common/json_util.h" +#include "nlohmann/json.hpp" + +namespace zsy +{ + struct PlayVoiceReq + { + std::string uuid; + std::string text; //播放的文本内容 + std::string deviceNo; //设备编号 + std::string carNo; + }; + + inline void from_json(const nlohmann::json &j, PlayVoiceReq &o) + { + PARSE_JSON(uuid, o.uuid); + PARSE_JSON(text, o.text); + PARSE_JSON(deviceNo, o.deviceNo); + PARSE_JSON(carNo, o.carNo); + } + + class SoundColumn + { + public: + virtual ~SoundColumn() = default; + + virtual void play(const std::string &content) = 0; + + virtual std::string getSn() = 0; + + static std::string convert(const std::string &numberStr) + { + static const std::vector digits = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; + std::string chineseStr; + for (char c: numberStr) + { + if ('0' <= c && c <= '9') + { + chineseStr += digits[c - '0']; + } else if (c == '.') + { + chineseStr += '点'; + } else + { + chineseStr += c; + } + } + return chineseStr; + } + }; +} // zsy + +#endif //SOUND_COLUMN_H diff --git a/src/sound_column/sound_column_properties.h b/src/sound_column/sound_column_properties.h new file mode 100644 index 0000000..2417727 --- /dev/null +++ b/src/sound_column/sound_column_properties.h @@ -0,0 +1,25 @@ +#ifndef SUDO_COLUMN_PROPERTIES_H +#define SUDO_COLUMN_PROPERTIES_H +#include "common/json_util.h" + +namespace zsy +{ + struct SoundColumnProperties + { + std::string sn; + std::string name; + std::string server; + std::string path; + }; + + inline void from_json(const nlohmann::json &j, SoundColumnProperties &o) + { + PARSE_JSON(sn, o.sn); + PARSE_JSON(name, o.name); + PARSE_JSON(server, o.server); + PARSE_JSON(path, o.path); + } +} + + +#endif //SUDO_COLUMN_PROPERTIES_H diff --git a/src/vidicon/generic_vidicon.cpp b/src/vidicon/generic_vidicon.cpp new file mode 100644 index 0000000..aacae39 --- /dev/null +++ b/src/vidicon/generic_vidicon.cpp @@ -0,0 +1,88 @@ +#include "generic_vidicon.h" +#include "HCNetSDK.h" +#include "common/snowflake.h" +#include "common/sys_util.h" + +namespace zsy +{ + GenericVidicon::~GenericVidicon() + { + } + + GenericVidicon::GenericVidicon(const VidiconProperties &config) + : config(config) + { + SysUtil::createDirs(SysUtil::HOME_DIR + "\\temp"); + } + + std::string GenericVidicon::photograph() + { + try + { + LOGGER_INFO("摄像机正在拍照,设备名称:{}", config.name); + + BOOL succ = NET_DVR_Init(); + if (!succ) + { + LOGGER_ERROR("摄像机初始化失败:{} {}", NET_DVR_GetLastError(), NET_DVR_GetErrorMsg()); + NET_DVR_Cleanup(); + return {}; + } + auto logPath = SysUtil::ch_vlt((SysUtil::HOME_DIR + "\\logs").c_str()); + succ = NET_DVR_SetLogToFile(3, logPath.get(), true); + if (!succ) + { + LOGGER_ERROR("摄像机日志设置失败:{} {}", NET_DVR_GetLastError(), NET_DVR_GetErrorMsg()); + NET_DVR_Cleanup(); + return {}; + } + NET_DVR_DEVICEINFO_V30 DeviceInfoTmp{}; + + auto ip = SysUtil::ch_vlt(config.ip.c_str()); + auto username = SysUtil::ch_vlt(config.username.c_str()); + auto passwd = SysUtil::ch_vlt(config.passwd.c_str()); + LONG lLoginID = NET_DVR_Login_V30(ip.get(), + config.port, + username.get(), + passwd.get(), &DeviceInfoTmp); + + if (lLoginID == -1) + { + DWORD e = NET_DVR_GetLastError(); + auto m = NET_DVR_GetErrorMsg(); + LOGGER_ERROR("摄像机登录失败:{} {}", e, m); + NET_DVR_Cleanup(); + return {}; + } + + NET_DVR_JPEGPARA JpgPara{}; + JpgPara.wPicSize = 0xff; + JpgPara.wPicQuality = 0; + const auto filename = "car_body_" + Snowflake::genIdStr() + ".jpg"; + std::string path = SysUtil::HOME_DIR + "\\temp\\" + filename; + const auto path_ = SysUtil::ch_vlt(path.c_str()); + auto filePath = path_.get(); + if (!NET_DVR_CaptureJPEGPicture(lLoginID, 1, &JpgPara, filePath)) + { + LOGGER_ERROR("摄像机拍照失败:{} {}", NET_DVR_GetLastError(), NET_DVR_GetErrorMsg()); + NET_DVR_Cleanup(); + return {}; + } + LOGGER_INFO("摄像机拍照完成:{}", path); + + NET_DVR_Logout_V30(lLoginID); + NET_DVR_Cleanup(); + + return path; + } catch (std::exception &e) + { + LOGGER_ERROR("摄像机拍照失败:{}", e.what()); + return {}; + } + catch (...) + { + LOGGER_ERROR("未知异常,摄像机拍照失败"); + return {}; + } + } +} // zsy diff --git a/src/vidicon/generic_vidicon.h b/src/vidicon/generic_vidicon.h new file mode 100644 index 0000000..4de8107 --- /dev/null +++ b/src/vidicon/generic_vidicon.h @@ -0,0 +1,20 @@ +#ifndef GENERIC_VIDICON_H +#define GENERIC_VIDICON_H +#include "vidicon.h" +#include "vidicon_properties.h" + +namespace zsy +{ + class GenericVidicon : public Vidicon + { + VidiconProperties config; + public: + ~GenericVidicon() override; + + GenericVidicon(const VidiconProperties &config); + + std::string photograph() override; + }; +} // zsy + +#endif //GENERIC_VIDICON_H diff --git a/src/vidicon/vidicon.h b/src/vidicon/vidicon.h new file mode 100644 index 0000000..788463e --- /dev/null +++ b/src/vidicon/vidicon.h @@ -0,0 +1,18 @@ +#ifndef VIDICON_H +#define VIDICON_H +#include + + +namespace zsy +{ + class Vidicon + { + public: + virtual ~Vidicon() = default; + + virtual std::string photograph() = 0; + }; +} + + +#endif //VIDICON_H diff --git a/src/vidicon/vidicon_properties.h b/src/vidicon/vidicon_properties.h new file mode 100644 index 0000000..0671687 --- /dev/null +++ b/src/vidicon/vidicon_properties.h @@ -0,0 +1,29 @@ +#ifndef VIDICON_PROPERTIES_H +#define VIDICON_PROPERTIES_H +#include "common/json_util.h" + +namespace zsy +{ + struct VidiconProperties + { + std::string sn; + std::string name; + std::string ip; + uint16_t port{8000}; + std::string username; + std::string passwd; + }; + + inline void from_json(const nlohmann::json &j, VidiconProperties &o) + { + PARSE_JSON(sn, o.sn); + PARSE_JSON(name, o.name); + PARSE_JSON(ip, o.ip); + PARSE_JSON(port, o.port); + PARSE_JSON(username, o.username); + PARSE_JSON(passwd, o.passwd); + } +} + + +#endif //VIDICON_PROPERTIES_H diff --git a/vcpkg.json b/vcpkg.json new file mode 100644 index 0000000..03a1ca5 --- /dev/null +++ b/vcpkg.json @@ -0,0 +1,220 @@ +{ + "name" : "dal", + "version-string" : "1.0.0", + "builtin-baseline" : "3421943bfdef53a1d16404e98b5b487112c59df2", + "dependencies" : [ { + "name" : "boost-algorithm", + "version>=" : "1.88.0" + }, { + "name" : "boost-align", + "version>=" : "1.88.0" + }, { + "name" : "boost-any", + "version>=" : "1.88.0" + }, { + "name" : "boost-array", + "version>=" : "1.88.0" + }, { + "name" : "boost-asio", + "version>=" : "1.88.0" + }, { + "name" : "boost-assert", + "version>=" : "1.88.0" + }, { + "name" : "boost-atomic", + "version>=" : "1.88.0" + }, { + "name" : "boost-bind", + "version>=" : "1.88.0" + }, { + "name" : "boost-chrono", + "version>=" : "1.88.0" + }, { + "name" : "boost-cmake", + "version>=" : "1.88.0" + }, { + "name" : "boost-concept-check", + "version>=" : "1.88.0" + }, { + "name" : "boost-config", + "version>=" : "1.88.0" + }, { + "name" : "boost-container-hash", + "version>=" : "1.88.0" + }, { + "name" : "boost-container", + "version>=" : "1.88.0" + }, { + "name" : "boost-context", + "version>=" : "1.88.0" + }, { + "name" : "boost-conversion", + "version>=" : "1.88.0" + }, { + "name" : "boost-core", + "version>=" : "1.88.0" + }, { + "name" : "boost-date-time", + "version>=" : "1.88.0" + }, { + "name" : "boost-describe", + "version>=" : "1.88.0" + }, { + "name" : "boost-detail", + "version>=" : "1.88.0" + }, { + "name" : "boost-exception", + "version>=" : "1.88.0" + }, { + "name" : "boost-function-types", + "version>=" : "1.88.0" + }, { + "name" : "boost-function", + "version>=" : "1.88.0" + }, { + "name" : "boost-functional", + "version>=" : "1.88.0" + }, { + "name" : "boost-fusion", + "version>=" : "1.88.0" + }, { + "name" : "boost-headers", + "version>=" : "1.88.0" + }, { + "name" : "boost-integer", + "version>=" : "1.88.0" + }, { + "name" : "boost-intrusive", + "version>=" : "1.88.0" + }, { + "name" : "boost-io", + "version>=" : "1.88.0" + }, { + "name" : "boost-iterator", + "version>=" : "1.88.0" + }, { + "name" : "boost-lexical-cast", + "version>=" : "1.88.0" + }, { + "name" : "boost-move", + "version>=" : "1.88.0" + }, { + "name" : "boost-mp11", + "version>=" : "1.88.0" + }, { + "name" : "boost-mpl", + "version>=" : "1.88.0" + }, { + "name" : "boost-multi-index", + "version>=" : "1.88.0" + }, { + "name" : "boost-numeric-conversion", + "version>=" : "1.88.0" + }, { + "name" : "boost-optional", + "version>=" : "1.88.0" + }, { + "name" : "boost-pool", + "version>=" : "1.88.0" + }, { + "name" : "boost-predef", + "version>=" : "1.88.0" + }, { + "name" : "boost-preprocessor", + "version>=" : "1.88.0" + }, { + "name" : "boost-program-options", + "version>=" : "1.88.0" + }, { + "name" : "boost-range", + "version>=" : "1.88.0" + }, { + "name" : "boost-ratio", + "version>=" : "1.88.0" + }, { + "name" : "boost-regex", + "version>=" : "1.88.0" + }, { + "name" : "boost-smart-ptr", + "version>=" : "1.88.0" + }, { + "name" : "boost-static-assert", + "version>=" : "1.88.0" + }, { + "name" : "boost-system", + "version>=" : "1.88.0" + }, { + "name" : "boost-thread", + "version>=" : "1.88.0" + }, { + "name" : "boost-throw-exception", + "version>=" : "1.88.0" + }, { + "name" : "boost-tokenizer", + "version>=" : "1.88.0" + }, { + "name" : "boost-tuple", + "version>=" : "1.88.0" + }, { + "name" : "boost-type-erasure", + "version>=" : "1.88.0" + }, { + "name" : "boost-type-index", + "version>=" : "1.88.0" + }, { + "name" : "boost-type-traits", + "version>=" : "1.88.0" + }, { + "name" : "boost-typeof", + "version>=" : "1.88.0" + }, { + "name" : "boost-uninstall", + "version>=" : "1.88.0" + }, { + "name" : "boost-unordered", + "version>=" : "1.88.0" + }, { + "name" : "boost-utility", + "version>=" : "1.88.0" + }, { + "name" : "boost-variant2", + "version>=" : "1.88.0" + }, { + "name" : "boost-vmd", + "version>=" : "1.88.0" + }, { + "name" : "boost-winapi", + "version>=" : "1.88.0" + }, { + "name" : "mqtt-cpp", + "version>=" : "13.2.1" + }, { + "name" : "vcpkg-boost", + "version>=" : "2025-03-29" + }, { + "name" : "vcpkg-cmake-config", + "version>=" : "2024-05-23" + }, { + "name" : "vcpkg-cmake", + "version>=" : "2024-04-23" + }, { + "name" : "nlohmann-json", + "version>=" : "3.12.0" + }, { + "name" : "spdlog", + "version>=" : "1.15.3" + }, { + "name" : "cpp-httplib", + "version>=" : "0.20.1" + }, { + "name" : "cppcodec", + "version>=" : "0.2#4" + }, { + "name" : "icu", + "version>=" : "74.2#5" + } ], + "overrides" : [ { + "name" : "cpp-httplib", + "version" : "0.10.3" + } ] +} \ No newline at end of file