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  )