| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- package peer_protocol
- import (
- "github.com/anacrolix/torrent/bencode"
- )
- const (
- // http://bittorrent.org/beps/bep_0009.html. Note that there's an
- // LT_metadata, but I've never implemented it.
- ExtensionNameMetadata = "ut_metadata"
- )
- type (
- ExtendedMetadataRequestMsg struct {
- Piece int `bencode:"piece"`
- TotalSize int `bencode:"total_size"`
- Type ExtendedMetadataRequestMsgType `bencode:"msg_type"`
- }
- ExtendedMetadataRequestMsgType int
- )
- func MetadataExtensionRequestMsg(peerMetadataExtensionId ExtensionNumber, piece int) Message {
- return Message{
- Type: Extended,
- ExtendedID: peerMetadataExtensionId,
- ExtendedPayload: bencode.MustMarshal(ExtendedMetadataRequestMsg{
- Piece: piece,
- Type: RequestMetadataExtensionMsgType,
- }),
- }
- }
- // Returns the expected piece size for this request message. This is needed to determine the offset
- // into an extension message payload that the request metadata piece data starts.
- func (me ExtendedMetadataRequestMsg) PieceSize() int {
- ret := me.TotalSize - me.Piece*(1<<14)
- if ret > 1<<14 {
- ret = 1 << 14
- }
- return ret
- }
|