# Functions
CreateDownloadFileRecord 创建下载文件记录并保存到数据库 参数: - db: 数据库存储接口 - taskID: 下载任务的唯一标识 - fileID: 文件的唯一标识 - pubkeyHash: 所有者的公钥哈希 - firstKeyShare: 恢复密钥的第一个分片 - tempStorage: 临时存储路径 - fileMeta: 文件的元数据信息 - sliceTable: 分片哈希表 - status: 下载任务的初始状态
返回值: - *pb.DownloadFileRecord: 创建的下载文件记录对象 - error: 如果创建或存储过程中发生错误则返回相应错误
功能: - 创建新的下载文件记录 - 初始化文件和分片记录 - 分批处理并保存分片记录 - 使用事务确保数据一致性.
DecompressAndDecryptSegmentContent 解压并解密片段内容 参数: - shareOne: 第一个密钥分片 - shareTwo: 第二个密钥分片 - compressedData: 压缩并加密的数据内容
返回值: - []byte: 解压并解密后的原始数据 - error: 解压或解密失败时返回错误信息
功能: - 对压缩的加密数据进行解压缩 - 使用密钥分片恢复解密密钥 - 使用AES-GCM模式解密数据 - 返回解密后的原始数据.
GetDownloadProgressAndPending 获取下载任务的进度和待下载片段信息 功能: 根据任务ID获取下载进度位图和待下载片段集合,用于跟踪下载状态
参数: - db: 数据库存储实例 - taskID: 下载任务ID
返回值: - *bitset.BitSet: 下载进度位图,每个位表示一个数据片段的下载状态(1表示已完成,0表示未完成) - map[int64]struct{}: 待下载片段的索引集合,key为片段索引 - error: 错误信息.
GetFileInfoResponse 根据文件ID获取文件信息响应 参数: - db: 数据库存储接口 - taskID: 任务的唯一标识符 - fileID: 文件的唯一标识符 - pubkeyHash: 公钥哈希
返回值: - *pb.FileInfoResponse: 文件信息响应 - error: 操作过程中可能发生的错误
功能: - 获取文件片段存储记录 - 构建文件元数据 - 生成文件信息响应.
GetInitialDownloadResponse 根据文件ID获取首次下载响应 参数: - db: 数据库存储接口 - taskID: 任务的唯一标识符 - fileID: 文件的唯一标识符 - pubkeyHash: 公钥哈希
返回值: - *pb.DownloadPubSubFileInfoResponse: 文件摘要响应 - *pb.DownloadPubSubManifestResponse: 索引清单响应 - error: 操作过程中可能发生的错误
功能: - 获取文件片段存储记录 - 构建文件元数据 - 生成文件信息响应 - 生成索引清单响应.
GetListDownloadSegments 获取下载任务的所有片段记录 功能: 根据任务ID获取所有下载片段的详细信息
参数: - db: 数据库存储实例 - taskID: 下载任务ID
返回值: - []*pb.DownloadSegmentRecord: 下载片段记录列表,包含每个片段的详细信息 - error: 错误信息.
GetManifestResponse 根据文件ID获取索引清单响应 参数: - db: 数据库存储接口 - taskID: 任务的唯一标识符 - fileID: 文件的唯一标识符 - pubkeyHash: 公钥哈希 - requestedSegmentIds: 请求下载的片段ID列表
返回值: - *pb.DownloadManifestResponse: 索引清单响应 - error: 如果获取过程中发生错误则返回相应错误
功能: - 获取文件片段存储记录 - 过滤请求的片段 - 构建可用片段映射 - 生成索引清单响应.
GetPendingSegments 获取未完成的下载片段ID列表 功能: 获取指定任务中所有未完成下载的非校验片段ID
参数: - db: 数据库存储实例 - taskID: 下载任务ID
返回值: - []string: 未完成片段的ID列表 - error: 错误信息.
GetSegmentContent 根据文件ID、片段ID和片段索引获取单个文件片段的内容 参数: - db: 数据库存储接口 - taskID: 任务的唯一标识符 - fileID: 文件的唯一标识符 - segmentId: 请求下载的片段ID - segmentIndex: 请求下载的片段索引 - pubkeyHash: 公钥哈希 - requestedSegmentIds: 请求下载的片段ID列表
返回值: - *pb.SegmentContentResponse: 包含请求片段内容的响应对象 - error: 如果获取过程中发生错误则返回相应错误
功能: - 获取指定片段的存储记录 - 构建可用片段映射 - 生成片段内容响应.
GetSegmentsForRecovery 获取用于数据恢复的片段信息 功能: 根据下载失败的数据片段数量,选择合适的校验片段用于数据恢复
参数: - db: 数据库存储实例 - taskID: 下载任务ID
返回值: - map[int64]string: 需要下载的片段映射,key为片段索引,value为片段ID - error: 错误信息.
GetSegmentStats 获取下载任务的片段统计信息 功能: 统计下载任务中数据片段和校验片段的完成情况
参数: - db: 数据库存储实例 - taskID: 下载任务ID
返回值: - *struct{}: 包含数据片段和校验片段统计信息的结构体,包括总数、完成数、失败数等 - error: 错误信息.
GetSegmentStorageData 获取文件片段的存储数据 功能: 根据给定的标识信息获取文件片段的完整内容和元数据
参数: - db: 数据库实例 - hostID: 主机ID - taskID: 任务ID - fileID: 文件ID - segmentID: 片段ID
返回值: - *pb.SegmentContentResponse: 包含片段内容和元数据的完整响应对象 - error: 错误信息.
HandleDownloadContentRequestPubSub 处理片段内容请求 参数: - ctx: 上下文对象 - opt: 配置选项 - db: 数据库实例 - fs: 文件系统实例 - nps: 发布订阅系统 - download: 下载管理器 - res: 接收到的消息
返回值: void
功能: - 解析片段内容请求数据 - 获取请求的片段内容 - 发送片段内容响应给请求节点.
HandleDownloadManifestRequestPubSub 处理索引清单请求 参数: - ctx: 上下文对象 - opt: 配置选项 - db: 数据库实例 - fs: 文件系统实例 - nps: 发布订阅系统 - download: 下载管理器 - res: 接收到的消息
返回值: void
功能: - 解析索引清单请求数据 - 获取请求的文件片段清单 - 发送清单响应给请求节点.
HandleDownloadManifestResponsePubSub 处理索引清单响应 参数: - ctx: 上下文,用于控制处理过程的生命周期 - opt: 文件存储选项配置 - nps: 发布订阅系统 - db: 数据库存储实例 - fs: 文件系统接口 - download: 下载管理器实例 - res: 接收到的流请求消息
功能: - 解析索引清单响应数据 - 更新下载任务的节点和可用片段信息 - 记录任务更新日志 - 验证响应数据的有效性.
HandleFileInfoRequestPubSub 处理文件信息请求 参数: - ctx: 上下文对象 - opt: 配置选项 - db: 数据库实例 - fs: 文件系统实例 - host: libp2p网络主机 - nps: 发布订阅系统 - download: 下载管理器 - res: 接收到的消息
返回值: void
功能: - 解析并验证文件信息请求 - 建立与请求节点的连接 - 获取文件元数据和分片信息 - 发送响应消息给请求节点.
InitializeDownloadManager 初始化 DownloadManager 并设置相关的生命周期钩子 功能: 初始化下载管理器并设置其生命周期钩子函数 参数: - lc: 生命周期管理器 - input: 初始化下载管理器所需的输入参数
返回值: - error: 初始化过程中的错误信息,如果成功则为nil.
NewDownloadFile 创建并初始化一个新的下载文件实例 参数: - ctx: 上下文对象,用于控制请求的生命周期 - db: 数据库实例,用于存储下载记录 - h: libp2p主机实例,用于网络通信 - nps: 发布订阅系统实例,用于网络寻址 - fileID: 要下载的文件ID - ownerPriv: 文件所有者的私钥,用于身份验证和加密
返回值: - *pb.DownloadOperationInfo: 下载操作信息,包含任务ID、文件路径等 - error: 错误信息
功能: - 生成下载任务ID和密钥分片 - 通过P2P网络获取文件信息 - 创建下载记录并保存到数据库.
NewDownloadManager 创建并初始化一个新的 DownloadManager 实例 功能: 根据提供的参数创建并初始化一个新的下载管理器实例 参数: - lc: 生命周期管理器 - input: 创建下载管理器所需的输入参数
返回值: - NewDownloadManagerOutput: 包含创建的下载管理器实例的输出结构 - error: 创建过程中的错误信息,如果成功则为nil.
NewDownloadTask 创建并初始化一个新的文件下载任务实例 参数: - ctx: context.Context 用于管理任务生命周期的上下文 - opt: *fscfg.Options 文件存储配置选项 - db: *database.DB 数据库实例 - host: host.Host libp2p网络主机实例 - routingTable: *kbucket.RoutingTable 路由表 - nps: *pubsub.NodePubSub 发布订阅系统 - statusChan: chan *pb.DownloadChan 状态更新通道 - errChan: chan error 错误通知通道 - taskID: string 任务唯一标识符
返回值: - *DownloadTask: 创建的下载任务实例 - error: 如果创建过程中发生错误,返回相应的错误信息.
QueryDownloadTask 执行下载任务的基础查询 参数: - db: *badgerhold.Store 数据库存储实例 - start: int 查询的起始位置 - pageSize: int 每页显示的记录数 - options: ...database.QueryOption 可选的查询条件
返回值: - []*pb.DownloadFileRecord: 下载任务记录列表 - uint64: 符合查询条件的总记录数 - error: 如果查询过程中发生错误,返回相应错误.
RegisterDownloadPubsubProtocol 注册所有下载相关的PubSub协议处理器 参数: - lc: 应用生命周期管理器 - input: 注册所需的输入参数
返回值: - error: 注册失败返回错误,成功返回nil
功能: - 订阅文件信息请求主题 - 订阅索引清单请求主题 - 订阅片段内容请求主题 - 订阅索引清单响应主题 - 为每个主题注册对应的处理函数.
RegisterDownloadStreamProtocol 注册下载流协议 参数: - lc: 生命周期管理器 - input: 注册所需的依赖项
返回值: error - 注册过程中的错误信息
功能: - 创建流协议实例 - 注册请求和发送数据片段的处理器 - 管理协议的生命周期.
ReplyToMessage 用于回复收到的消息 参数: - ctx: 上下文 - topic: 主题实例 - messageID: 原始消息ID - replyData: 回复的数据内容
返回值: - error: 回复失败返回错误,成功返回nil
功能: - 构造回复消息 - 发布回复消息到指定主题 - 记录错误日志.
RequestContentPubSub 发送文件片段内容请求并等待响应 参数: - ctx: 上下文,用于控制请求的生命周期 - h: libp2p网络主机实例 - nps: 发布订阅系统 - taskID: 任务唯一标识 - fileID: 文件唯一标识 - pubkeyHash: 所有者的公钥哈希 - segmentId: 请求的片段ID - segmentIndex: 片段索引 - requestedSegmentIds: 请求下载的片段ID列表
返回值: - *pb.SegmentContentResponse: 片段内容响应对象,包含片段数据和元信息 - error: 错误信息,如果请求失败则返回错误原因
功能: - 构造并发送片段内容请求 - 等待并解析响应数据 - 返回片段内容响应对象 - 记录请求和响应日志.
RequestFileInfoPubSub 发送文件信息请求并等待响应 参数: - ctx: 上下文,用于控制请求的生命周期 - host: libp2p网络主机实例 - nps: 发布订阅系统 - taskID: 任务唯一标识 - fileID: 文件唯一标识 - pubkeyHash: 所有者的公钥哈希
返回值: - *pb.DownloadPubSubFileInfoResponse: 文件信息响应对象,包含文件元数据 - error: 错误信息,如果请求失败则返回错误原因
功能: - 构造并发送文件信息请求 - 等待并解析响应数据 - 返回文件信息响应对象.
RequestManifestPubSub 发送索引清单请求 参数: - ctx: 上下文,用于控制请求的生命周期 - host: libp2p网络主机实例 - nps: 发布订阅系统 - taskID: 任务唯一标识 - fileID: 文件唯一标识 - pubkeyHash: 所有者的公钥哈希 - requestedSegmentIds: 请求下载的片段ID列表
返回值: - error: 错误信息,如果请求失败则返回错误原因
功能: - 构造并发送索引清单请求 - 不等待响应直接返回 - 记录请求日志信息.
UpdateDownloadFileStatus 更新下载文件的状态 参数: - db: 数据库存储接口 - taskID: 下载任务的唯一标识 - status: 新的文件状态
返回值: - error: 如果更新过程中发生错误则返回相应错误,否则返回 nil
功能: - 获取当前文件记录 - 更新文件状态 - 保存更新后的记录.
UpdateSegmentNodes 更新片段的节点信息并返回未完成的片段索引 参数: - db: 数据库存储实例 - taskID: 任务ID - peerID: 节点ID - availableSlices: 节点可用的片段映射,key为片段索引,value为片段ID
返回值: - map[int64]string: 未完成片段的映射,key为片段索引,value为片段ID - error: 错误信息.
ValidateAndStoreSegment 验证并存储下载的文件片段 功能: 对下载的文件片段进行完整性验证,包括签名验证、解密、校验和验证,并将验证通过的片段存储到数据库
参数: - db: 数据库存储实例 - shareOne: 第一个密钥分片 - response: 下载响应数据
返回值: - error: 错误信息.
VerifySegmentChecksum 验证片段校验和 参数: - content: 需要验证的内容数据 - expectedChecksum: 期望的校验和值
返回值: - error: 校验和不匹配返回错误,匹配返回nil
功能: - 计算内容的CRC32校验和 - 验证计算的校验和与期望值是否匹配 - 确保数据完整性.
VerifySegmentSignature 验证片段签名 参数: - p: 片段内容响应对象,包含需要验证的数据和签名
返回值: - error: 验证失败返回错误,验证成功返回nil
功能: - 验证片段内容的签名是否有效 - 使用ECDSA算法进行签名验证 - 验证签名数据的完整性和真实性.
# Constants
允许的最大并发会话数.
下载内容请求主题.
下载清单请求主题.
下载清单响应主题.
文件信息请求主题.
# Variables
AllowedTopics 定义了系统支持的所有主题列表.
StreamRequestSegmentProtocol 定义了请求数据片段的协议标识符.
# Structs
DownloadManager 管理所有下载任务,提供文件下载的统一入口和管理功能.
DownloadTask 描述一个文件下载任务.
InitializeDownloadManagerInput 定义了初始化 DownloadManager 所需的输入参数.
NewDownloadManagerInput 定义了创建 DownloadManager 所需的输入参数.
NewDownloadManagerOutput 定义了 NewDownloadManager 函数的输出.
RegisterPubsubProtocolInput 定义了注册PubsubProtocol所需的输入参数.
RegisterStreamProtocolInput 定义了注册流协议所需的输入参数.
StreamProtocol 定义了流协议的结构体.
# Type aliases
Topic 定义了允许的主题类型.