Documentation ¶
Index ¶
- Constants
- type CompactIp
- type Decoder
- type EncryptionHandshake
- type ExtendedHandshakeMessage
- type ExtensionBits
- type ExtensionName
- type ExtensionNumber
- type Handshake
- type HandshakeInfoMessage
- type HandshakeMessage
- type Integer
- type Message
- type MessageType
- type PexMsg
- type PexPeerFlags
- type RequestSpec
Constants ¶
const ( ExtensionBitDHT uint = 0 // http://www.bittorrent.org/beps/bep_0005.html ExtensionBitExtended = 20 // http://www.bittorrent.org/beps/bep_0010.html ExtensionBitFast = 2 // http://www.bittorrent.org/beps/bep_0006.html )
Extension bits for bittorrent protocol
const ( PexPrefersEncryption = 0x01 PexSeedUploadOnly = 0x02 PexSupportsUtp = 0x04 PexHolepunchSupport = 0x08 PexOutgoingConn = 0x10 )
Constants for PEX messages.
const ( HandshakeExtendedID = 0 RequestMetadataExtensionMsgType = 0 DataMetadataExtensionMsgType = 1 RejectMetadataExtensionMsgType = 2 )
const (
Protocol = "\x13BitTorrent protocol"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CompactIp ¶
Marshals to the smallest compact byte representation.
func (CompactIp) MarshalBencode ¶
type Decoder ¶
type EncryptionHandshake ¶
type EncryptionHandshake struct { Keys mse.SecretKeyIter mse.CryptoSelector // available crypto algorithms }
EncryptionHandshake encrypt a net.Conn
func (EncryptionHandshake) Incoming ¶
func (t EncryptionHandshake) Incoming(rw io.ReadWriter) (updated io.ReadWriter, buffed io.ReadWriter, err error)
Incoming establishes an encrypted connection. if it is unable to establish an encrypted connection. it returns a buffed read/writer that contains the previously read data from the input. when the encryption handshake is successful, buffed === updated.
func (EncryptionHandshake) Outgoing ¶
func (t EncryptionHandshake) Outgoing(rw io.ReadWriter, secret []byte, algo mse.CryptoMethod) (io.ReadWriter, mse.CryptoMethod, error)
Outgoing initiates an outgoing encrypted connection.
type ExtendedHandshakeMessage ¶
type ExtendedHandshakeMessage struct { M map[ExtensionName]ExtensionNumber `bencode:"m"` V string `bencode:"v,omitempty"` Reqq int `bencode:"reqq,omitempty"` Encryption bool `bencode:"e,omitempty"` // BEP 9 MetadataSize int `bencode:"metadata_size,omitempty"` // The local client port. It would be redundant for the receiving side of // a connection to send this. Port int `bencode:"p,omitempty"` YourIp CompactIp `bencode:"yourip,omitempty"` Ipv4 CompactIp `bencode:"ipv4,omitempty"` Ipv6 net.IP `bencode:"ipv6,omitempty"` }
type ExtensionBits ¶
type ExtensionBits [8]byte
ExtensionBits used by the Handshake to determine capabilities of a peer.
func NewExtensionBits ¶
func NewExtensionBits(bits ...uint) (ret ExtensionBits)
NewExtensionBits initiatize extension bits
func (ExtensionBits) String ¶
func (pex ExtensionBits) String() string
func (ExtensionBits) SupportsExtended ¶
func (pex ExtensionBits) SupportsExtended() bool
SupportsExtended ...
type ExtensionName ¶
type ExtensionName string
http://www.bittorrent.org/beps/bep_0010.html
const ( // http://www.bittorrent.org/beps/bep_0011.html ExtensionNamePex ExtensionName = "ut_pex" // http://bittorrent.org/beps/bep_0009.html. Note that there's an // LT_metadata, but I've never implemented it. ExtensionNameMetadata = "ut_metadata" )
type Handshake ¶
type Handshake struct { Bits ExtensionBits PeerID [20]byte }
Handshake ...
func (Handshake) Incoming ¶
func (t Handshake) Incoming(sock io.ReadWriter) (pbits ExtensionBits, pinfo HandshakeInfoMessage, err error)
Incoming handshake, used to accept a connection from a peer.
func (Handshake) Outgoing ¶
func (t Handshake) Outgoing(sock io.ReadWriter, hash [20]byte) (resbits ExtensionBits, res HandshakeInfoMessage, err error)
Outgoing handshake, used to establish a connection to a peer.
type HandshakeInfoMessage ¶
HandshakeInfoMessage sent after the HandshakeMessage containing the peers ID and the info hash.
type HandshakeMessage ¶
type HandshakeMessage struct {
Extensions [8]byte
}
HandshakeMessage writes the handshake into a destination.
type Integer ¶
type Integer uint32
type Message ¶
type Message struct { Keepalive bool Type MessageType Index, Begin, Length Integer Piece []byte Bitfield []bool ExtendedID ExtensionNumber ExtendedPayload []byte Port uint16 }
This is a lazy union representing all the possible fields for messages. Go doesn't have ADTs, and I didn't choose to use type-assertions.
func MakeCancelMessage ¶
func (Message) MarshalBinary ¶
func (Message) MustMarshalBinary ¶
func (Message) RequestSpec ¶
func (msg Message) RequestSpec() (ret RequestSpec)
type MessageType ¶
type MessageType 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 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 )
func (MessageType) FastExtension ¶
func (mt MessageType) FastExtension() bool
func (MessageType) String ¶
func (i MessageType) String() string
type PexMsg ¶
type PexMsg struct { Added krpc.CompactIPv4NodeAddrs `bencode:"added"` AddedFlags []PexPeerFlags `bencode:"added.f"` Added6 krpc.CompactIPv6NodeAddrs `bencode:"added6"` Added6Flags []PexPeerFlags `bencode:"added6.f"` Dropped krpc.CompactIPv4NodeAddrs `bencode:"dropped"` Dropped6 krpc.CompactIPv6NodeAddrs `bencode:"dropped6"` }
PexMsg http://bittorrent.org/beps/bep_0011.html
func (*PexMsg) Message ¶
func (t *PexMsg) Message(eid ExtensionNumber) Message
Message describing the peer exchange.
type PexPeerFlags ¶
type PexPeerFlags byte
PexPeerFlags flags describing peers supported functionality.
func (PexPeerFlags) Get ¶
func (t PexPeerFlags) Get(f PexPeerFlags) bool
Get checks if the provided flags are set.
type RequestSpec ¶
type RequestSpec struct {
Index, Begin, Length Integer
}
func (RequestSpec) String ¶
func (me RequestSpec) String() string