aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-07-28 00:40:01 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-07-28 00:40:01 +0200
commit475e544bbeffc70a9796766b6e28a6a4b531a510 (patch)
tree7625880307d07236836f571861180d5b5308257e
parent73efd0495a823ab7b9a6b6a0a269d3516c52686f (diff)
DecodeHandshake
-rw-r--r--peer/messages.go16
-rw-r--r--peer/messages_test.go6
2 files changed, 22 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
+}
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)
}