From 475e544bbeffc70a9796766b6e28a6a4b531a510 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 28 Jul 2016 00:40:01 +0200 Subject: DecodeHandshake --- peer/messages.go | 16 ++++++++++++++++ peer/messages_test.go | 6 ++++++ 2 files changed, 22 insertions(+) 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 +} diff --git a/peer/messages_test.go b/peer/messages_test.go index 113c090..a21e4e0 100644 --- a/peer/messages_test.go +++ b/peer/messages_test.go @@ -16,4 +16,10 @@ func TestHandshake(t *testing.T) { if len(b.Bytes()) != len(Proto)+49 { t.Error("expexted X+49 len") } + r := bytes.NewReader(b.Bytes()) + hh, ok := DecodeHandshake(r) + if !ok { + t.Error("not ok") + } + t.Log(hh) } -- cgit v1.2.3