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 }