2019-09-02 21:40:52 +00:00
|
|
|
|
#ifndef RECORD_FORMAT_H
|
|
|
|
|
#define RECORD_FORMAT_H
|
|
|
|
|
|
|
|
|
|
#include <Qt>
|
|
|
|
|
|
2019-11-03 19:34:11 +00:00
|
|
|
|
#define TS_TPPR_TYPE_UNKNOWN 0x0000
|
|
|
|
|
#define TS_TPPR_TYPE_SSH 0x0001
|
|
|
|
|
#define TS_TPPR_TYPE_RDP 0x0101
|
|
|
|
|
|
|
|
|
|
|
2019-09-02 21:40:52 +00:00
|
|
|
|
#define TS_RECORD_TYPE_RDP_POINTER 0x12 // 鼠标坐标位置改变,用于绘制虚拟鼠标
|
|
|
|
|
#define TS_RECORD_TYPE_RDP_IMAGE 0x13 // 服务端返回的图像,用于展示
|
2019-10-13 19:41:35 +00:00
|
|
|
|
#define TS_RECORD_TYPE_RDP_KEYFRAME 0x14 //
|
2019-09-02 21:40:52 +00:00
|
|
|
|
|
|
|
|
|
#define TS_RDP_BTN_FREE 0
|
|
|
|
|
#define TS_RDP_BTN_PRESSED 1
|
|
|
|
|
#define TS_RDP_IMG_RAW 0 // 未压缩,原始数据(根据bitsPerPixel,多个字节对应一个点的颜色)
|
|
|
|
|
#define TS_RDP_IMG_BMP 1 // 压缩的BMP数据
|
2019-11-13 13:34:30 +00:00
|
|
|
|
#define TS_RDP_IMG_ALT 2
|
2019-09-02 21:40:52 +00:00
|
|
|
|
|
|
|
|
|
#pragma pack(push,1)
|
|
|
|
|
|
|
|
|
|
// 录像文件头(随着录像数据写入,会改变的部分)
|
|
|
|
|
typedef struct TS_RECORD_HEADER_INFO {
|
2019-09-16 05:53:27 +00:00
|
|
|
|
uint32_t magic; // "TPPR" 标志 TelePort Protocol Record
|
|
|
|
|
uint16_t ver; // 录像文件版本,从3.5.0开始,为4
|
2019-10-13 19:41:35 +00:00
|
|
|
|
uint16_t type; //
|
2019-11-10 12:37:09 +00:00
|
|
|
|
// uint32_t packages; // 总包数
|
2019-09-16 05:53:27 +00:00
|
|
|
|
uint32_t time_ms; // 总耗时(毫秒)
|
|
|
|
|
uint32_t dat_file_count; // 数据文件数量
|
2019-11-10 12:37:09 +00:00
|
|
|
|
uint8_t _reserve[64-4-2-2-4-4];
|
2019-09-02 21:40:52 +00:00
|
|
|
|
}TS_RECORD_HEADER_INFO;
|
|
|
|
|
#define ts_record_header_info_size sizeof(TS_RECORD_HEADER_INFO)
|
|
|
|
|
|
|
|
|
|
// 录像文件头(固定不变部分)
|
|
|
|
|
typedef struct TS_RECORD_HEADER_BASIC {
|
|
|
|
|
uint16_t protocol_type; // 协议:1=RDP, 2=SSH, 3=Telnet
|
|
|
|
|
uint16_t protocol_sub_type; // 子协议:100=RDP-DESKTOP, 200=SSH-SHELL, 201=SSH-SFTP, 300=Telnet
|
|
|
|
|
uint64_t timestamp; // 本次录像的起始时间(UTC时间戳)
|
|
|
|
|
uint16_t width; // 初始屏幕尺寸:宽
|
|
|
|
|
uint16_t height; // 初始屏幕尺寸:高
|
|
|
|
|
char user_username[64]; // teleport账号
|
|
|
|
|
char acc_username[64]; // 远程主机用户名
|
|
|
|
|
|
|
|
|
|
char host_ip[40]; // 远程主机IP
|
|
|
|
|
char conn_ip[40]; // 远程主机IP
|
|
|
|
|
uint16_t conn_port; // 远程主机端口
|
|
|
|
|
|
|
|
|
|
char client_ip[40]; // 客户端IP
|
|
|
|
|
|
|
|
|
|
// // RDP专有
|
|
|
|
|
// uint8_t rdp_security; // 0 = RDP, 1 = TLS
|
|
|
|
|
|
|
|
|
|
// uint8_t _reserve[512 - 2 - 2 - 8 - 2 - 2 - 64 - 64 - 40 - 40 - 2 - 40 - 1 - ts_record_header_info_size];
|
|
|
|
|
uint8_t _reserve[512 - 2 - 2 - 8 - 2 - 2 - 64 - 64 - 40 - 40 - 2 - 40 - ts_record_header_info_size];
|
|
|
|
|
}TS_RECORD_HEADER_BASIC;
|
|
|
|
|
#define ts_record_header_basic_size sizeof(TS_RECORD_HEADER_BASIC)
|
|
|
|
|
|
|
|
|
|
typedef struct TS_RECORD_HEADER {
|
|
|
|
|
TS_RECORD_HEADER_INFO info;
|
|
|
|
|
TS_RECORD_HEADER_BASIC basic;
|
|
|
|
|
}TS_RECORD_HEADER;
|
|
|
|
|
|
|
|
|
|
// header部分(header-info + header-basic) = 512B
|
|
|
|
|
#define ts_record_header_size sizeof(TS_RECORD_HEADER)
|
|
|
|
|
|
|
|
|
|
// 一个数据包的头
|
|
|
|
|
typedef struct TS_RECORD_PKG {
|
2019-10-31 17:45:17 +00:00
|
|
|
|
uint8_t type; // 包的数据类型
|
|
|
|
|
uint8_t _reserve[3]; // 保留
|
|
|
|
|
uint32_t size; // 这个包的总大小(不含包头)
|
|
|
|
|
uint32_t time_ms; // 这个包距起始时间的时间差(毫秒,意味着一个连接不能持续超过49天)
|
2019-11-10 12:37:09 +00:00
|
|
|
|
// uint32_t index; // 这个包的序号(最后一个包的序号与TS_RECORD_HEADER_INFO::packages数量匹配)
|
2019-09-02 21:40:52 +00:00
|
|
|
|
}TS_RECORD_PKG;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct TS_RECORD_RDP_POINTER {
|
|
|
|
|
uint16_t x;
|
|
|
|
|
uint16_t y;
|
|
|
|
|
uint8_t button;
|
|
|
|
|
uint8_t pressed;
|
|
|
|
|
}TS_RECORD_RDP_POINTER;
|
|
|
|
|
|
|
|
|
|
// RDP图像更新
|
|
|
|
|
typedef struct TS_RECORD_RDP_IMAGE_INFO {
|
|
|
|
|
uint16_t destLeft;
|
|
|
|
|
uint16_t destTop;
|
|
|
|
|
uint16_t destRight;
|
|
|
|
|
uint16_t destBottom;
|
|
|
|
|
uint16_t width;
|
|
|
|
|
uint16_t height;
|
|
|
|
|
uint16_t bitsPerPixel;
|
|
|
|
|
uint8_t format;
|
|
|
|
|
uint8_t _reserved;
|
2019-11-10 12:37:09 +00:00
|
|
|
|
uint32_t dat_len;
|
2019-11-13 13:34:30 +00:00
|
|
|
|
uint32_t zip_len;
|
2019-09-02 21:40:52 +00:00
|
|
|
|
}TS_RECORD_RDP_IMAGE_INFO;
|
|
|
|
|
|
2019-11-09 21:25:54 +00:00
|
|
|
|
// 关键帧索引
|
|
|
|
|
typedef struct TS_RECORD_RDP_KEYFRAME_INFO {
|
|
|
|
|
uint32_t time_ms; // 此关键帧的时间点
|
|
|
|
|
uint32_t file_index; // 此关键帧图像数据位于哪一个数据文件中
|
|
|
|
|
uint32_t offset; // 此关键帧图像数据在数据文件中的偏移
|
|
|
|
|
}TS_RECORD_RDP_KEYFRAME_INFO;
|
2019-09-02 21:40:52 +00:00
|
|
|
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // RECORD_FORMAT_H
|