torrent

package
v4.2.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2026 License: AGPL-3.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
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

func BencodeDecode(data []byte) (interface{}, error)

BencodeDecode 从字节数组解码 bencode 数据

func BencodeEncode

func BencodeEncode(v interface{}) ([]byte, error)

BencodeEncode 将值编码为 bencode 格式

func CopyAndHash

func CopyAndHash(dst io.Writer, src io.Reader, hw *HashWriter) (int64, error)

CopyAndHash 从 reader 读取数据,同时写入 writer 和 HashWriter

func GenerateFromFile

func GenerateFromFile(filePath string) ([]byte, error)

GenerateFromFile 从文件路径生成通用的 torrent 文件(不含 CAS 扩展) 这是一个通用函数,适用于所有驱动

func GenerateFromFileWithCAS

func GenerateFromFileWithCAS(filePath string) ([]byte, error)

GenerateFromFileWithCAS 从文件路径生成包含 CAS 扩展的 torrent 文件

func GenerateFromReader

func GenerateFromReader(reader io.Reader, fileName string, fileSize int64, pieceSize int64) ([]byte, error)

GenerateFromReader 从 io.Reader 生成通用的 torrent 文件(不含 CAS 扩展) 返回 torrent 字节数据

func GenerateFromReaderWithCAS

func GenerateFromReaderWithCAS(reader io.Reader, fileName string, fileSize int64, pieceSize int64) ([]byte, error)

GenerateFromReaderWithCAS 从 io.Reader 生成包含 CAS 扩展的 torrent 文件 适用于天翼云等支持秒传的网盘

func GetMD5Str

func GetMD5Str(data string) string

GetMD5Str 计算字符串的 MD5(大写十六进制)

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 秒传所需信息

func BuildCASInfoFromMD5s

func BuildCASInfoFromMD5s(fileMD5 string, sliceMD5s []string, sliceSize int64) *CASInfo

BuildCASInfoFromMD5s 从分片 MD5 列表构建 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) Finish

func (hw *HashWriter) Finish()

Finish 完成所有哈希计算(处理最后不完整的分片/piece)

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 获取总写入字节数

func (*HashWriter) Write

func (hw *HashWriter) Write(p []byte) (n int, err error)

Write 实现 io.Writer 接口

type OrderedDict

type OrderedDict struct {
	Keys   []string
	Values map[string]interface{}
}

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 Decode

func Decode(data []byte) (*Torrent, error)

Decode 从 bencode 字节数组解析 torrent

func NewTorrent

func NewTorrent(name string, fileSize int64, fileMD5 string) *Torrent

NewTorrent 创建一个新的 torrent 结构

func (*Torrent) Encode

func (t *Torrent) Encode() ([]byte, error)

Encode 将 torrent 编码为 bencode 格式的字节数组

func (*Torrent) GetInfoHashHex

func (t *Torrent) GetInfoHashHex() string

GetInfoHashHex 获取 info_hash 的十六进制字符串

func (*Torrent) GetPieceHashes

func (t *Torrent) GetPieceHashes() [][]byte

GetPieceHashes 获取所有分片的 SHA-1 哈希(每个 20 字节)

func (*Torrent) GetTotalSize

func (t *Torrent) GetTotalSize() int64

GetTotalSize 获取 torrent 中所有文件的总大小

func (*Torrent) HasCASInfo

func (t *Torrent) HasCASInfo() bool

HasCASInfo 检查 torrent 是否包含 CAS 扩展信息

func (*Torrent) SetCASInfo

func (t *Torrent) SetCASInfo(cas *CASInfo)

SetCASInfo 设置 CAS 扩展信息

func (*Torrent) SetPieces

func (t *Torrent) SetPieces(pieces []byte)

SetPieces 设置 SHA-1 分片哈希

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 字典

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL