github.com/anacrolix/torrent@v1.61.0/peer_protocol/protocol.go (about) 1 package peer_protocol 2 3 import ( 4 "unsafe" 5 ) 6 7 const ( 8 Protocol = "\x13BitTorrent protocol" 9 ) 10 11 func protocolBytes() []byte { 12 return unsafe.Slice(unsafe.StringData(Protocol), len(Protocol)) 13 } 14 15 type MessageType byte 16 17 // golang.org/x/tools/cmd/stringer 18 //go:generate stringer -type=MessageType 19 20 func (mt MessageType) FastExtension() bool { 21 return mt >= Suggest && mt <= AllowedFast 22 } 23 24 func (mt *MessageType) UnmarshalBinary(b []byte) error { 25 *mt = MessageType(b[0]) 26 return nil 27 } 28 29 const ( 30 // BEP 3 31 Choke MessageType = 0 32 Unchoke MessageType = 1 33 Interested MessageType = 2 34 NotInterested MessageType = 3 35 Have MessageType = 4 36 Bitfield MessageType = 5 37 Request MessageType = 6 38 Piece MessageType = 7 39 Cancel MessageType = 8 40 41 // BEP 5 42 Port MessageType = 9 43 44 // BEP 6 - Fast extension 45 Suggest MessageType = 0x0d // 13 46 HaveAll MessageType = 0x0e // 14 47 HaveNone MessageType = 0x0f // 15 48 Reject MessageType = 0x10 // 16 49 AllowedFast MessageType = 0x11 // 17 50 51 // BEP 10 52 Extended MessageType = 20 53 54 // BEP 52 55 HashRequest MessageType = 21 56 Hashes MessageType = 22 57 HashReject MessageType = 23 58 ) 59 60 const ( 61 HandshakeExtendedID = 0 62 63 RequestMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 0 64 DataMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 1 65 RejectMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 2 66 )