]> Sergey Matveev's repositories - btrtrc.git/blobdiff - peer_protocol/protocol.go
Drop support for go 1.20
[btrtrc.git] / peer_protocol / protocol.go
index 121da9fd093b8338a89be71c68f264270ff79071..bfeb6a0448873da8b3fdc96dd133520da0c8d360 100644 (file)
@@ -1,29 +1,52 @@
 package peer_protocol
 
-type (
-       MessageType byte
-       Integer     uint32
-)
-
 const (
-       Choke MessageType = iota
-       Unchoke
-       Interested
-       NotInterested
-       Have
-       Bitfield
-       RequestType
-       Piece
-       Cancel
+       Protocol = "\x13BitTorrent protocol"
 )
 
-type Request struct {
-       Index, Begin, Length Integer
+type MessageType byte
+
+//go:generate stringer -type=MessageType
+
+func (mt MessageType) FastExtension() bool {
+       return mt >= Suggest && mt <= AllowedFast
 }
 
-type Message struct {
-       KeepAlive bool
-       Type      MessageType
-       Bitfield  []bool
-       Piece     []byte
+func (mt *MessageType) UnmarshalBinary(b []byte) error {
+       *mt = MessageType(b[0])
+       return nil
 }
+
+const (
+       // BEP 3
+       Choke         MessageType = 0
+       Unchoke       MessageType = 1
+       Interested    MessageType = 2
+       NotInterested MessageType = 3
+       Have          MessageType = 4
+       Bitfield      MessageType = 5
+       Request       MessageType = 6
+       Piece         MessageType = 7
+       Cancel        MessageType = 8
+
+       // BEP 5
+       Port MessageType = 9
+
+       // BEP 6 - Fast extension
+       Suggest     MessageType = 0x0d // 13
+       HaveAll     MessageType = 0x0e // 14
+       HaveNone    MessageType = 0x0f // 15
+       Reject      MessageType = 0x10 // 16
+       AllowedFast MessageType = 0x11 // 17
+
+       // BEP 10
+       Extended MessageType = 20
+)
+
+const (
+       HandshakeExtendedID = 0
+
+       RequestMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 0
+       DataMetadataExtensionMsgType    ExtendedMetadataRequestMsgType = 1
+       RejectMetadataExtensionMsgType  ExtendedMetadataRequestMsgType = 2
+)