Documentation
¶
Index ¶
- Constants
- func BencodeDecode(data []byte) (interface{}, error)
- func BencodeEncode(v interface{}) ([]byte, error)
- func CopyAndHash(dst io.Writer, src io.Reader, hw *HashWriter) (int64, error)
- func GenerateFromFile(filePath string) ([]byte, error)
- func GenerateFromFileWithCAS(filePath string) ([]byte, error)
- func GenerateFromReader(reader io.Reader, fileName string, fileSize int64, pieceSize int64) ([]byte, error)
- func GenerateFromReaderWithCAS(reader io.Reader, fileName string, fileSize int64, pieceSize int64) ([]byte, error)
- func GetMD5Str(data string) string
- type CASInfo
- type HashWriter
- func (hw *HashWriter) BuildTorrent(fileName string, fileSize int64) *Torrent
- func (hw *HashWriter) BuildTorrentBytes(fileName string, fileSize int64) ([]byte, error)
- func (hw *HashWriter) Finish()
- func (hw *HashWriter) GetFileMD5() string
- func (hw *HashWriter) GetPieceHashes() []byte
- func (hw *HashWriter) GetSliceMD5(fileMD5 string) string
- func (hw *HashWriter) GetSliceMD5s() []string
- func (hw *HashWriter) GetTotalWritten() int64
- func (hw *HashWriter) Write(p []byte) (n int, err error)
- type OrderedDict
- type Torrent
- type TorrentFile
- type TorrentInfo
Constants ¶
const ( // DefaultPieceSize 默认分片大小 10MB,与天翼云 CAS 分片大小一致 DefaultPieceSize int64 = 10 * 1024 * 1024 // CASExtensionKey torrent 根字典中的 CAS 扩展 key CASExtensionKey = "x-cas" // CASSliceSizeKey CAS 分片大小 key CASSliceSizeKey = "slice_size" // CASSliceMD5sKey 每片 MD5 列表 key CASSliceMD5sKey = "slice_md5s" // CASSliceMD5Key 最终 sliceMd5 key CASSliceMD5Key = "slice_md5" // CASFileMD5Key 整文件 MD5 key CASFileMD5Key = "file_md5" // CASCloudKey 云盘类型 key CASCloudKey = "cloud" )
Variables ¶
This section is empty.
Functions ¶
func BencodeDecode ¶
BencodeDecode 从字节数组解码 bencode 数据
func BencodeEncode ¶
BencodeEncode 将值编码为 bencode 格式
func CopyAndHash ¶
CopyAndHash 从 reader 读取数据,同时写入 writer 和 HashWriter
func GenerateFromFile ¶
GenerateFromFile 从文件路径生成通用的 torrent 文件(不含 CAS 扩展) 这是一个通用函数,适用于所有驱动
func GenerateFromFileWithCAS ¶
GenerateFromFileWithCAS 从文件路径生成包含 CAS 扩展的 torrent 文件
func GenerateFromReader ¶
func GenerateFromReader(reader io.Reader, fileName string, fileSize int64, pieceSize int64) ([]byte, error)
GenerateFromReader 从 io.Reader 生成通用的 torrent 文件(不含 CAS 扩展) 返回 torrent 字节数据
Types ¶
type CASInfo ¶
type CASInfo struct {
// FileMD5 整文件 MD5(大写十六进制)
FileMD5 string
// SliceMD5 分片 MD5 的摘要(大写十六进制)
SliceMD5 string
// SliceMD5s 每个 10MB 分片的 MD5(大写十六进制)
SliceMD5s []string
// SliceSize 分片大小(字节)
SliceSize int64
// Cloud 云盘类型标识
Cloud string
}
CASInfo 天翼云 CAS 秒传所需信息
type HashWriter ¶
type HashWriter struct {
// contains filtered or unexported fields
}
HashWriter 同时计算文件的 MD5、分片 MD5 和 SHA-1 piece hash 用于在上传过程中一次性计算所有需要的哈希值
func NewDefaultHashWriter ¶
func NewDefaultHashWriter() *HashWriter
NewDefaultHashWriter 创建默认的 HashWriter(10MB 分片)
func NewHashWriter ¶
func NewHashWriter(sliceSize, pieceSize int64) *HashWriter
NewHashWriter 创建一个新的 HashWriter sliceSize: CAS 分片大小(通常 10MB) pieceSize: BT piece 大小(设为与 sliceSize 相同以保持对齐)
func (*HashWriter) BuildTorrent ¶
func (hw *HashWriter) BuildTorrent(fileName string, fileSize int64) *Torrent
BuildTorrent 根据计算结果构建 Torrent 结构
func (*HashWriter) BuildTorrentBytes ¶
func (hw *HashWriter) BuildTorrentBytes(fileName string, fileSize int64) ([]byte, error)
BuildTorrentBytes 构建并编码 torrent 文件
func (*HashWriter) GetFileMD5 ¶
func (hw *HashWriter) GetFileMD5() string
GetFileMD5 获取整文件 MD5(大写十六进制)
func (*HashWriter) GetPieceHashes ¶
func (hw *HashWriter) GetPieceHashes() []byte
GetPieceHashes 获取所有 piece 的 SHA-1 哈希拼接
func (*HashWriter) GetSliceMD5 ¶
func (hw *HashWriter) GetSliceMD5(fileMD5 string) string
GetSliceMD5 获取最终的 sliceMD5(用于秒传)
func (*HashWriter) GetSliceMD5s ¶
func (hw *HashWriter) GetSliceMD5s() []string
GetSliceMD5s 获取所有分片的 MD5 列表
func (*HashWriter) GetTotalWritten ¶
func (hw *HashWriter) GetTotalWritten() int64
GetTotalWritten 获取总写入字节数
type OrderedDict ¶
OrderedDict 有序字典,保持插入顺序
func NewOrderedDict ¶
func NewOrderedDict() OrderedDict
func (*OrderedDict) Get ¶
func (d *OrderedDict) Get(key string) (interface{}, bool)
func (*OrderedDict) Set ¶
func (d *OrderedDict) Set(key string, value interface{})
type Torrent ¶
type Torrent struct {
// Info info 字典
Info TorrentInfo
// InfoHash info 字典的 SHA-1 哈希(20 字节)
InfoHash []byte
// Announce tracker URL
Announce string
// AnnounceList tracker 列表
AnnounceList [][]string
// CreationDate 创建时间
CreationDate int64
// Comment 注释
Comment string
// CreatedBy 创建者
CreatedBy string
// CAS 天翼云 CAS 扩展信息(存储在 info 字典外部,不影响 info_hash)
CAS *CASInfo
}
Torrent 完整的 torrent 文件结构
func NewTorrent ¶
NewTorrent 创建一个新的 torrent 结构
func (*Torrent) GetInfoHashHex ¶
GetInfoHashHex 获取 info_hash 的十六进制字符串
func (*Torrent) GetPieceHashes ¶
GetPieceHashes 获取所有分片的 SHA-1 哈希(每个 20 字节)
func (*Torrent) GetTotalSize ¶
GetTotalSize 获取 torrent 中所有文件的总大小
func (*Torrent) HasCASInfo ¶
HasCASInfo 检查 torrent 是否包含 CAS 扩展信息
type TorrentFile ¶
type TorrentFile struct {
// Length 文件大小(字节)
Length int64
// Path 文件路径(多文件模式下的相对路径各段)
Path []string
// MD5Sum 文件的 MD5(可选,BT 标准字段)
MD5Sum string
}
TorrentFile 表示 torrent 中的单个文件
type TorrentInfo ¶
type TorrentInfo struct {
// PieceLength 分片大小
PieceLength int64
// Pieces 所有分片的 SHA-1 哈希拼接(每 20 字节一个)
Pieces []byte
// Name 种子名称(单文件模式为文件名,多文件模式为目录名)
Name string
// Length 单文件模式下的文件大小
Length int64
// Files 多文件模式下的文件列表
Files []TorrentFile
// MD5Sum 单文件模式下的文件 MD5(可选)
MD5Sum string
}
TorrentInfo torrent 的 info 字典