From 450a90ebeafd70e44d858a5b428e7d4a526e1b87 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Thu, 16 Jun 2016 02:41:50 +0200 Subject: Generate Client ID --- peer/messages.go | 20 +++++++++++++++++++- peer/messages_test.go | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 peer/messages_test.go diff --git a/peer/messages.go b/peer/messages.go index a14de46..4760bb5 100644 --- a/peer/messages.go +++ b/peer/messages.go @@ -1,5 +1,11 @@ package peer +import ( + "crypto/rand" + "fmt" + "math/big" +) + type Message int const ( @@ -16,4 +22,16 @@ const ( _ // keep-alive: ) -const Proto = `BitTorrent protocol` +const ( + Proto = `BitTorrent protocol` + ClientID = `+++ATH0-xxxxxxxxxxxx` // or may be `D13--xxxxxxxxxxxxxxx` +) + +func NewID() (string, error) { + limit := new(big.Int).Lsh(big.NewInt(1), 48) + id, err := rand.Int(rand.Reader, limit) + if err != nil { + return "", err + } + return fmt.Sprintf("+++ATH0-%0.12x", id), nil +} diff --git a/peer/messages_test.go b/peer/messages_test.go new file mode 100644 index 0000000..da80656 --- /dev/null +++ b/peer/messages_test.go @@ -0,0 +1,14 @@ +package peer + +import "testing" + +func TestID(t *testing.T) { + id, err := NewID() + if err != nil { + t.Error(err) + } + if len(id) != 20 { + t.Error("wrong length") + } + t.Log(id) +} -- cgit v1.2.3