aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-06-16 02:41:50 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-06-16 02:41:50 +0200
commit450a90ebeafd70e44d858a5b428e7d4a526e1b87 (patch)
tree08a279571c4ee4a87be1e0d5ccb11fa5d5792eb7
parente8f53bbdbb0638d1ef5e4ffc7da6ecb6b5fcc044 (diff)
Generate Client ID
-rw-r--r--peer/messages.go20
-rw-r--r--peer/messages_test.go14
2 files changed, 33 insertions, 1 deletions
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: <len=0000>
)
-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)
+}