]> Sergey Matveev's repositories - btrtrc.git/blobdiff - peer_protocol/protocol.go
Drop support for go 1.20
[btrtrc.git] / peer_protocol / protocol.go
index bc34d47b2872f8f175691681f1c6dea12e604a0c..bfeb6a0448873da8b3fdc96dd133520da0c8d360 100644 (file)
@@ -1,36 +1,52 @@
 package peer_protocol
 
-type (
-       MessageType byte
-       Integer     uint32
-)
-
 const (
        Protocol = "\x13BitTorrent protocol"
 )
 
-const (
-       Choke MessageType = iota
-       Unchoke
-       Interested
-       NotInterested
-       Have
-       Bitfield
-       RequestType
-       Piece
-       Cancel
-)
+type MessageType byte
 
-type Request struct {
-       Index, Begin, Length Integer
+//go:generate stringer -type=MessageType
+
+func (mt MessageType) FastExtension() bool {
+       return mt >= Suggest && mt <= AllowedFast
 }
 
-type Message interface {
-       Encode() []byte
+func (mt *MessageType) UnmarshalBinary(b []byte) error {
+       *mt = MessageType(b[0])
+       return nil
 }
 
-type Bytes []byte
+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
 
-func (b Bytes) Encode() []byte {
-       return b
-}
+       // 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
+)