aboutsummaryrefslogtreecommitdiff
path: root/peer/messages.go
diff options
context:
space:
mode:
Diffstat (limited to 'peer/messages.go')
-rw-r--r--peer/messages.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/peer/messages.go b/peer/messages.go
index 6cedecc..5958380 100644
--- a/peer/messages.go
+++ b/peer/messages.go
@@ -48,3 +48,19 @@ func (h Handshake) Encode(w io.Writer) {
w.Write(h.InfoHash[:])
w.Write(h.PeerID[:])
}
+
+func DecodeHandshake(r io.Reader) (Handshake, bool) {
+ var h Handshake
+ var l int8
+ binary.Read(r, binary.BigEndian, &l)
+ proto := make([]byte, int(l))
+ r.Read(proto)
+ h.Proto = string(proto)
+ if h.Proto != Proto {
+ return h, false
+ }
+ r.Read(h.Flags[:])
+ r.Read(h.InfoHash[:])
+ r.Read(h.PeerID[:])
+ return h, true
+}