]> Sergey Matveev's repositories - btrtrc.git/blob - peer_protocol/protocol.go
go1.19 compat
[btrtrc.git] / peer_protocol / protocol.go
1 package peer_protocol
2
3 const (
4         Protocol = "\x13BitTorrent protocol"
5 )
6
7 type MessageType byte
8
9 //go:generate stringer -type=MessageType
10
11 func (mt MessageType) FastExtension() bool {
12         return mt >= Suggest && mt <= AllowedFast
13 }
14
15 func (mt *MessageType) UnmarshalBinary(b []byte) error {
16         *mt = MessageType(b[0])
17         return nil
18 }
19
20 const (
21         // BEP 3
22         Choke         MessageType = 0
23         Unchoke       MessageType = 1
24         Interested    MessageType = 2
25         NotInterested MessageType = 3
26         Have          MessageType = 4
27         Bitfield      MessageType = 5
28         Request       MessageType = 6
29         Piece         MessageType = 7
30         Cancel        MessageType = 8
31
32         // BEP 5
33         Port MessageType = 9
34
35         // BEP 6 - Fast extension
36         Suggest     MessageType = 0x0d // 13
37         HaveAll     MessageType = 0x0e // 14
38         HaveNone    MessageType = 0x0f // 15
39         Reject      MessageType = 0x10 // 16
40         AllowedFast MessageType = 0x11 // 17
41
42         // BEP 10
43         Extended MessageType = 20
44 )
45
46 const (
47         HandshakeExtendedID = 0
48
49         RequestMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 0
50         DataMetadataExtensionMsgType    ExtendedMetadataRequestMsgType = 1
51         RejectMetadataExtensionMsgType  ExtendedMetadataRequestMsgType = 2
52 )