]> Sergey Matveev's repositories - btrtrc.git/blobdiff - peer_protocol/protocol.go
Ignore dial rate limits for holepunch connects
[btrtrc.git] / peer_protocol / protocol.go
index 8f914591111d4afdfdb1b0fe12a19a933c69f18c..bfeb6a0448873da8b3fdc96dd133520da0c8d360 100644 (file)
@@ -4,34 +4,49 @@ const (
        Protocol = "\x13BitTorrent protocol"
 )
 
-type (
-       MessageType byte
-)
+type MessageType byte
+
+//go:generate stringer -type=MessageType
+
+func (mt MessageType) FastExtension() bool {
+       return mt >= Suggest && mt <= AllowedFast
+}
+
+func (mt *MessageType) UnmarshalBinary(b []byte) error {
+       *mt = MessageType(b[0])
+       return nil
+}
 
 const (
-       Choke         MessageType = iota
-       Unchoke                   // 1
-       Interested                // 2
-       NotInterested             // 3
-       Have                      // 4
-       Bitfield                  // 5
-       Request                   // 6
-       Piece                     // 7
-       Cancel                    // 8
-       Port                      // 9
-
-       // BEP 6
-       Suggest     = 0xd  // 13
-       HaveAll     = 0xe  // 14
-       HaveNone    = 0xf  // 15
-       Reject      = 0x10 // 16
-       AllowedFast = 0x11 // 17
-
-       Extended = 20
+       // 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 = 0
-       DataMetadataExtensionMsgType    = 1
-       RejectMetadataExtensionMsgType  = 2
+       RequestMetadataExtensionMsgType ExtendedMetadataRequestMsgType = 0
+       DataMetadataExtensionMsgType    ExtendedMetadataRequestMsgType = 1
+       RejectMetadataExtensionMsgType  ExtendedMetadataRequestMsgType = 2
 )