From d227fbccda4fb46adb89df469591bd5b38a116e6 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Wed, 29 Sep 2021 14:33:27 -0400 Subject: [PATCH] refactor: leveldb, cleanup and service control - Use leveldb instead of sqlite - Cleanup older records - Add start/stop functions to service --- README.md | 2 +- cleaner.go | 104 +++++ client.go | 44 +- client_test.go | 2 + db/dbi.go | 21 - db/sqlite/db.go | 474 ------------------- db/sqlite/db_test.go | 512 -------------------- discovery.go | 6 +- discovery_test.go | 2 + go.mod | 11 +- go.sum | 237 +--------- pb/rendezvous.pb.go | 1059 ++++++++++++++++++++---------------------- pb/rendezvous.proto | 3 - proto.go | 43 +- storage.go | 150 ++++++ svc.go | 133 ++++-- svc_test.go | 2 + 17 files changed, 925 insertions(+), 1880 deletions(-) create mode 100644 cleaner.go delete mode 100644 db/dbi.go delete mode 100644 db/sqlite/db.go delete mode 100644 db/sqlite/db_test.go create mode 100644 storage.go diff --git a/README.md b/README.md index 0754161..1b2dda4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Rendezvous ================= -# What is this? +#### What is this? Similar to status-im/rendezvous in using a smaller liveness TTL for records (20s), and not using UNREGISTER REQUEST, due to assuming that the TTL is very low (making it incompatible with libp2p original rendezvous spec). This module diff --git a/cleaner.go b/cleaner.go new file mode 100644 index 0000000..9ef0440 --- /dev/null +++ b/cleaner.go @@ -0,0 +1,104 @@ +package rendezvous + +import ( + "container/heap" + "sync" + "time" +) + +type deadline struct { + time time.Time +} + +// definitely rename +// Rewrite cleaner to operate on a leveldb directly +// if it is impossible to query on topic+timestamp(big endian) for purging +// store an additional key +func NewCleaner() *Cleaner { + return &Cleaner{ + heap: []string{}, + deadlines: map[string]deadline{}, + } +} + +type Cleaner struct { + mu sync.RWMutex + heap []string + deadlines map[string]deadline +} + +func (c *Cleaner) Id(index int) string { + return c.heap[index] +} + +func (c *Cleaner) Len() int { + return len(c.heap) +} + +func (c *Cleaner) Less(i, j int) bool { + return c.deadlines[c.Id(i)].time.Before(c.deadlines[c.Id(j)].time) +} + +func (c *Cleaner) Swap(i, j int) { + c.heap[i], c.heap[j] = c.heap[j], c.heap[i] +} + +func (c *Cleaner) Push(record interface{}) { + c.heap = append(c.heap, record.(string)) +} + +func (c *Cleaner) Pop() interface{} { + old := c.heap + n := len(old) + x := old[n-1] + c.heap = append([]string{}, old[0:n-1]...) + _, exist := c.deadlines[x] + if !exist { + return x + } + delete(c.deadlines, x) + return x +} + +func (c *Cleaner) Add(deadlineTime time.Time, key string) { + c.mu.Lock() + defer c.mu.Unlock() + dl, exist := c.deadlines[key] + if !exist { + dl = deadline{time: deadlineTime} + } else { + dl.time = deadlineTime + for i, n := range c.heap { + if n == key { + heap.Remove(c, i) + break + } + } + } + c.deadlines[key] = dl + heap.Push(c, key) +} + +func (c *Cleaner) Exist(key string) bool { + c.mu.RLock() + defer c.mu.RUnlock() + _, exist := c.deadlines[key] + return exist +} + +func (c *Cleaner) PopSince(now time.Time) (rst []string) { + c.mu.Lock() + defer c.mu.Unlock() + for len(c.heap) != 0 { + dl, exist := c.deadlines[c.heap[0]] + if !exist { + continue + } + if now.After(dl.time) { + rst = append(rst, heap.Pop(c).(string)) + } else { + return rst + } + } + return rst +} diff --git a/client.go b/client.go index b5d76ae..576e697 100644 --- a/client.go +++ b/client.go @@ -21,7 +21,7 @@ var ( type RendezvousPoint interface { Register(ctx context.Context, ns string, ttl int) (time.Duration, error) - Discover(ctx context.Context, ns string, limit int, cookie []byte) ([]Registration, []byte, error) + Discover(ctx context.Context, ns string, limit int) ([]Registration, error) DiscoverAsync(ctx context.Context, ns string) (<-chan Registration, error) } @@ -33,7 +33,7 @@ type Registration struct { type RendezvousClient interface { Register(ctx context.Context, ns string, ttl int) (time.Duration, error) - Discover(ctx context.Context, ns string, limit int, cookie []byte) ([]peer.AddrInfo, []byte, error) + Discover(ctx context.Context, ns string, limit int) ([]peer.AddrInfo, error) DiscoverAsync(ctx context.Context, ns string) (<-chan peer.AddrInfo, error) } @@ -97,7 +97,7 @@ func (rp *rendezvousPoint) Register(ctx context.Context, ns string, ttl int) (ti return 0, RendezvousError{Status: status, Text: res.GetRegisterResponse().GetStatusText()} } - return time.Duration(*response.Ttl) * time.Second, nil + return time.Duration(response.Ttl) * time.Second, nil } func (rc *rendezvousClient) Register(ctx context.Context, ns string, ttl int) (time.Duration, error) { @@ -146,39 +146,39 @@ func registerRefresh(ctx context.Context, rz RendezvousPoint, ns string, ttl int } } -func (rp *rendezvousPoint) Discover(ctx context.Context, ns string, limit int, cookie []byte) ([]Registration, []byte, error) { +func (rp *rendezvousPoint) Discover(ctx context.Context, ns string, limit int) ([]Registration, error) { s, err := rp.host.NewStream(ctx, rp.getRandomPeer(), RendezvousProto) if err != nil { - return nil, nil, err + return nil, err } defer s.Reset() r := ggio.NewDelimitedReader(s, inet.MessageSizeMax) w := ggio.NewDelimitedWriter(s) - return discoverQuery(ns, limit, cookie, r, w) + return discoverQuery(ns, limit, r, w) } -func discoverQuery(ns string, limit int, cookie []byte, r ggio.Reader, w ggio.Writer) ([]Registration, []byte, error) { - req := newDiscoverMessage(ns, limit, cookie) +func discoverQuery(ns string, limit int, r ggio.Reader, w ggio.Writer) ([]Registration, error) { + req := newDiscoverMessage(ns, limit) err := w.WriteMsg(req) if err != nil { - return nil, nil, err + return nil, err } var res pb.Message err = r.ReadMsg(&res) if err != nil { - return nil, nil, err + return nil, err } if res.GetType() != pb.Message_DISCOVER_RESPONSE { - return nil, nil, fmt.Errorf("Unexpected response: %s", res.GetType().String()) + return nil, fmt.Errorf("Unexpected response: %s", res.GetType().String()) } status := res.GetDiscoverResponse().GetStatus() if status != pb.Message_OK { - return nil, nil, RendezvousError{Status: status, Text: res.GetDiscoverResponse().GetStatusText()} + return nil, RendezvousError{Status: status, Text: res.GetDiscoverResponse().GetStatusText()} } regs := res.GetDiscoverResponse().GetRegistrations() @@ -192,7 +192,7 @@ func discoverQuery(ns string, limit int, cookie []byte, r ggio.Reader, w ggio.Wr result = append(result, Registration{Peer: pi, Ns: reg.GetNs(), Ttl: int(reg.GetTtl())}) } - return result, res.GetDiscoverResponse().GetCookie(), nil + return result, nil } func (rp *rendezvousPoint) DiscoverAsync(ctx context.Context, ns string) (<-chan Registration, error) { @@ -216,17 +216,15 @@ func discoverAsync(ctx context.Context, ns string, s inet.Stream, ch chan Regist const batch = 200 var ( - cookie []byte - regs []Registration - err error + regs []Registration + err error ) for { - regs, cookie, err = discoverQuery(ns, batch, cookie, r, w) + regs, err = discoverQuery(ns, batch, r, w) if err != nil { // TODO robust error recovery - // - handle closed streams with backoff + new stream, preserving the cookie - // - handle E_INVALID_COOKIE errors in that case to restart the discovery + // - handle closed streams with backoff + new stream log.Errorf("Error in discovery [%s]: %s", ns, err.Error()) return } @@ -250,10 +248,10 @@ func discoverAsync(ctx context.Context, ns string, s inet.Stream, ch chan Regist } } -func (rc *rendezvousClient) Discover(ctx context.Context, ns string, limit int, cookie []byte) ([]peer.AddrInfo, []byte, error) { - regs, cookie, err := rc.rp.Discover(ctx, ns, limit, cookie) +func (rc *rendezvousClient) Discover(ctx context.Context, ns string, limit int) ([]peer.AddrInfo, error) { + regs, err := rc.rp.Discover(ctx, ns, limit) if err != nil { - return nil, nil, err + return nil, err } pinfos := make([]peer.AddrInfo, len(regs)) @@ -261,7 +259,7 @@ func (rc *rendezvousClient) Discover(ctx context.Context, ns string, limit int, pinfos[i] = reg.Peer } - return pinfos, cookie, nil + return pinfos, nil } func (rc *rendezvousClient) DiscoverAsync(ctx context.Context, ns string) (<-chan peer.AddrInfo, error) { diff --git a/client_test.go b/client_test.go index db974b7..f727b16 100644 --- a/client_test.go +++ b/client_test.go @@ -1,5 +1,6 @@ package rendezvous +/* import ( "context" "testing" @@ -135,3 +136,4 @@ func checkPeerInfo(t *testing.T, pi peer.AddrInfo, host host.Host) { } } } +*/ diff --git a/db/dbi.go b/db/dbi.go deleted file mode 100644 index 4da1810..0000000 --- a/db/dbi.go +++ /dev/null @@ -1,21 +0,0 @@ -package dbi - -import ( - "github.com/libp2p/go-libp2p-core/peer" -) - -type RegistrationRecord struct { - Id peer.ID - Addrs [][]byte - Ns string - Ttl int -} - -type DB interface { - Close() error - Register(p peer.ID, ns string, addrs [][]byte, ttl int) (uint64, error) - Unregister(p peer.ID, ns string) error - CountRegistrations(p peer.ID) (int, error) - Discover(ns string, cookie []byte, limit int) ([]RegistrationRecord, []byte, error) - ValidCookie(ns string, cookie []byte) bool -} diff --git a/db/sqlite/db.go b/db/sqlite/db.go deleted file mode 100644 index 765f950..0000000 --- a/db/sqlite/db.go +++ /dev/null @@ -1,474 +0,0 @@ -package db - -import ( - "bytes" - "context" - "crypto/rand" - "crypto/sha256" - "database/sql" - "encoding/binary" - "fmt" - "os" - "time" - - dbi "github.com/status-im/go-libp2p-rendezvous/db" - - _ "github.com/mattn/go-sqlite3" - - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-libp2p-core/peer" -) - -var log = logging.Logger("rendezvous/db") - -type DB struct { - db *sql.DB - - insertPeerRegistration *sql.Stmt - deletePeerRegistrations *sql.Stmt - deletePeerRegistrationsNs *sql.Stmt - countPeerRegistrations *sql.Stmt - selectPeerRegistrations *sql.Stmt - selectPeerRegistrationsNS *sql.Stmt - selectPeerRegistrationsC *sql.Stmt - selectPeerRegistrationsNSC *sql.Stmt - deleteExpiredRegistrations *sql.Stmt - getCounter *sql.Stmt - - nonce []byte - - cancel func() -} - -func OpenDB(ctx context.Context, path string) (*DB, error) { - var create bool - if path == ":memory:" { - create = true - } else { - _, err := os.Stat(path) - switch { - case os.IsNotExist(err): - create = true - case err != nil: - return nil, err - } - } - - db, err := sql.Open("sqlite3", path) - if err != nil { - return nil, err - } - - if path == ":memory:" { - // this is necessary to avoid creating a new database on each connection - db.SetMaxOpenConns(1) - } - - rdb := &DB{db: db} - if create { - err = rdb.prepareDB() - if err != nil { - db.Close() - return nil, err - } - } else { - err = rdb.loadNonce() - if err != nil { - db.Close() - return nil, err - } - } - - err = rdb.prepareStmts() - if err != nil { - db.Close() - return nil, err - } - - bgctx, cancel := context.WithCancel(ctx) - rdb.cancel = cancel - go rdb.background(bgctx) - - return rdb, nil -} - -func (db *DB) Close() error { - db.cancel() - return db.db.Close() -} - -func (db *DB) prepareDB() error { - _, err := db.db.Exec("CREATE TABLE Registrations (counter INTEGER PRIMARY KEY AUTOINCREMENT, peer VARCHAR(64), ns VARCHAR, expire INTEGER, addrs VARBINARY)") - if err != nil { - return err - } - - _, err = db.db.Exec("CREATE TABLE Nonce (nonce VARBINARY)") - if err != nil { - return err - } - - nonce := make([]byte, 32) - _, err = rand.Read(nonce) - if err != nil { - return err - } - - _, err = db.db.Exec("INSERT INTO Nonce VALUES (?)", nonce) - if err != nil { - return err - } - - db.nonce = nonce - return nil -} - -func (db *DB) loadNonce() error { - var nonce []byte - row := db.db.QueryRow("SELECT nonce FROM Nonce") - err := row.Scan(&nonce) - if err != nil { - return err - } - - db.nonce = nonce - return nil -} - -func (db *DB) prepareStmts() error { - stmt, err := db.db.Prepare("INSERT INTO Registrations VALUES (NULL, ?, ?, ?, ?)") - if err != nil { - return err - } - db.insertPeerRegistration = stmt - - stmt, err = db.db.Prepare("DELETE FROM Registrations WHERE peer = ?") - if err != nil { - return err - } - db.deletePeerRegistrations = stmt - - stmt, err = db.db.Prepare("DELETE FROM Registrations WHERE peer = ? AND ns = ?") - if err != nil { - return err - } - db.deletePeerRegistrationsNs = stmt - - stmt, err = db.db.Prepare("SELECT COUNT(*) FROM Registrations WHERE peer = ?") - if err != nil { - return err - } - db.countPeerRegistrations = stmt - - stmt, err = db.db.Prepare("SELECT * FROM Registrations WHERE expire > ? LIMIT ?") - if err != nil { - return err - } - db.selectPeerRegistrations = stmt - - stmt, err = db.db.Prepare("SELECT * FROM Registrations WHERE ns = ? AND expire > ? LIMIT ?") - if err != nil { - return err - } - db.selectPeerRegistrationsNS = stmt - - stmt, err = db.db.Prepare("SELECT * FROM Registrations WHERE counter > ? AND expire > ? LIMIT ?") - if err != nil { - return err - } - db.selectPeerRegistrationsC = stmt - - stmt, err = db.db.Prepare("SELECT * FROM Registrations WHERE counter > ? AND ns = ? AND expire > ? LIMIT ?") - if err != nil { - return err - } - db.selectPeerRegistrationsNSC = stmt - - stmt, err = db.db.Prepare("DELETE FROM Registrations WHERE expire < ?") - if err != nil { - return err - } - db.deleteExpiredRegistrations = stmt - - stmt, err = db.db.Prepare("SELECT MAX(counter) FROM Registrations") - if err != nil { - return err - } - db.getCounter = stmt - - return nil -} - -func (db *DB) Register(p peer.ID, ns string, addrs [][]byte, ttl int) (uint64, error) { - pid := p.Pretty() - maddrs := packAddrs(addrs) - expire := time.Now().Unix() + int64(ttl) - - tx, err := db.db.Begin() - if err != nil { - return 0, err - } - - delOld := tx.Stmt(db.deletePeerRegistrationsNs) - insertNew := tx.Stmt(db.insertPeerRegistration) - getCounter := tx.Stmt(db.getCounter) - - _, err = delOld.Exec(pid, ns) - if err != nil { - tx.Rollback() - return 0, err - } - - _, err = insertNew.Exec(pid, ns, expire, maddrs) - if err != nil { - tx.Rollback() - return 0, err - } - - var counter uint64 - row := getCounter.QueryRow() - err = row.Scan(&counter) - if err != nil { - tx.Rollback() - return 0, err - } - - err = tx.Commit() - return counter, err -} - -func (db *DB) CountRegistrations(p peer.ID) (int, error) { - pid := p.Pretty() - - row := db.countPeerRegistrations.QueryRow(pid) - - var count int - err := row.Scan(&count) - - return count, err -} - -func (db *DB) Unregister(p peer.ID, ns string) error { - pid := p.Pretty() - - var err error - - if ns == "" { - _, err = db.deletePeerRegistrations.Exec(pid) - } else { - _, err = db.deletePeerRegistrationsNs.Exec(pid, ns) - } - - return err -} - -func (db *DB) Discover(ns string, cookie []byte, limit int) ([]dbi.RegistrationRecord, []byte, error) { - now := time.Now().Unix() - - var ( - counter int64 - rows *sql.Rows - err error - ) - - if cookie != nil { - counter, err = unpackCookie(cookie) - if err != nil { - log.Errorf("error unpacking cookie: %s", err.Error()) - return nil, nil, err - } - } - - if counter > 0 { - if ns == "" { - rows, err = db.selectPeerRegistrationsC.Query(counter, now, limit) - } else { - rows, err = db.selectPeerRegistrationsNSC.Query(counter, ns, now, limit) - } - } else { - if ns == "" { - rows, err = db.selectPeerRegistrations.Query(now, limit) - } else { - rows, err = db.selectPeerRegistrationsNS.Query(ns, now, limit) - } - } - - if err != nil { - log.Errorf("query error: %s", err.Error()) - return nil, nil, err - } - - defer rows.Close() - - regs := make([]dbi.RegistrationRecord, 0, limit) - for rows.Next() { - var ( - reg dbi.RegistrationRecord - rid string - rns string - expire int64 - raddrs []byte - addrs [][]byte - p peer.ID - ) - - err = rows.Scan(&counter, &rid, &rns, &expire, &raddrs) - if err != nil { - log.Errorf("row scan error: %s", err.Error()) - return nil, nil, err - } - - p, err = peer.Decode(rid) - if err != nil { - log.Errorf("error decoding peer id: %s", err.Error()) - continue - } - - addrs, err := unpackAddrs(raddrs) - if err != nil { - log.Errorf("error unpacking address: %s", err.Error()) - continue - } - - reg.Id = p - reg.Addrs = addrs - reg.Ttl = int(expire - now) - - if ns == "" { - reg.Ns = rns - } - - regs = append(regs, reg) - } - - err = rows.Err() - if err != nil { - return nil, nil, err - } - - if counter > 0 { - cookie = packCookie(counter, ns, db.nonce) - } - - return regs, cookie, nil -} - -func (db *DB) ValidCookie(ns string, cookie []byte) bool { - return validCookie(cookie, ns, db.nonce) -} - -func (db *DB) background(ctx context.Context) { - for { - db.cleanupExpired() - - select { - case <-time.After(15 * time.Minute): - case <-ctx.Done(): - return - } - } -} - -func (db *DB) cleanupExpired() { - now := time.Now().Unix() - _, err := db.deleteExpiredRegistrations.Exec(now) - if err != nil { - log.Errorf("error deleting expired registrations: %s", err.Error()) - } -} - -func packAddrs(addrs [][]byte) []byte { - packlen := 0 - for _, addr := range addrs { - packlen = packlen + 2 + len(addr) - } - - packed := make([]byte, packlen) - buf := packed - for _, addr := range addrs { - binary.BigEndian.PutUint16(buf, uint16(len(addr))) - buf = buf[2:] - copy(buf, addr) - buf = buf[len(addr):] - } - - return packed -} - -func unpackAddrs(packed []byte) ([][]byte, error) { - var addrs [][]byte - - buf := packed - for len(buf) > 1 { - l := binary.BigEndian.Uint16(buf) - buf = buf[2:] - if len(buf) < int(l) { - return nil, fmt.Errorf("bad packed address: not enough bytes %v %v", packed, buf) - } - addr := make([]byte, l) - copy(addr, buf[:l]) - buf = buf[l:] - addrs = append(addrs, addr) - } - - if len(buf) > 0 { - return nil, fmt.Errorf("bad packed address: unprocessed bytes: %v %v", packed, buf) - } - - return addrs, nil -} - -// cookie: counter:SHA256(nonce + ns + counter) -func packCookie(counter int64, ns string, nonce []byte) []byte { - cbits := make([]byte, 8) - binary.BigEndian.PutUint64(cbits, uint64(counter)) - - hash := sha256.New() - _, err := hash.Write(nonce) - if err != nil { - panic(err) - } - _, err = hash.Write([]byte(ns)) - if err != nil { - panic(err) - } - _, err = hash.Write(cbits) - if err != nil { - panic(err) - } - - return hash.Sum(cbits) -} - -func unpackCookie(cookie []byte) (int64, error) { - if len(cookie) < 8 { - return 0, fmt.Errorf("bad packed cookie: not enough bytes: %v", cookie) - } - - counter := binary.BigEndian.Uint64(cookie[:8]) - return int64(counter), nil -} - -func validCookie(cookie []byte, ns string, nonce []byte) bool { - if len(cookie) != 40 { - return false - } - - cbits := cookie[:8] - hash := sha256.New() - _, err := hash.Write(nonce) - if err != nil { - panic(err) - } - _, err = hash.Write([]byte(ns)) - if err != nil { - panic(err) - } - _, err = hash.Write(cbits) - if err != nil { - panic(err) - } - hbits := hash.Sum(nil) - - return bytes.Equal(cookie[8:], hbits) -} diff --git a/db/sqlite/db_test.go b/db/sqlite/db_test.go deleted file mode 100644 index ac065db..0000000 --- a/db/sqlite/db_test.go +++ /dev/null @@ -1,512 +0,0 @@ -package db - -import ( - "bytes" - "context" - "math/rand" - "testing" - "time" - - "github.com/libp2p/go-libp2p-core/peer" - ma "github.com/multiformats/go-multiaddr" -) - -func TestPackAddrs(t *testing.T) { - addrs := make([][]byte, 5) - for i := 0; i < 5; i++ { - addrs[i] = make([]byte, rand.Intn(256)) - } - - packed := packAddrs(addrs) - unpacked, err := unpackAddrs(packed) - if err != nil { - t.Fatal(err) - } - - if !equalAddrs(addrs, unpacked) { - t.Fatal("unpacked addr not equal to original") - } -} - -func equalAddrs(addrs1, addrs2 [][]byte) bool { - if len(addrs1) != len(addrs2) { - return false - } - - for i, addr1 := range addrs1 { - addr2 := addrs2[i] - if !bytes.Equal(addr1, addr2) { - return false - } - } - - return true -} - -func TestPackCookie(t *testing.T) { - nonce := make([]byte, 16) - _, err := rand.Read(nonce) - if err != nil { - t.Fatal(err) - } - - counter := rand.Int63() - ns := "blah" - - cookie := packCookie(counter, ns, nonce) - - if !validCookie(cookie, ns, nonce) { - t.Fatal("packed an invalid cookie") - } - - xcounter, err := unpackCookie(cookie) - if err != nil { - t.Fatal(err) - } - - if counter != xcounter { - t.Fatal("unpacked cookie counter not equal to original") - } -} - -func TestOpenCloseMemDB(t *testing.T) { - db, err := OpenDB(context.Background(), ":memory:") - if err != nil { - t.Fatal(err) - } - - // let the flush goroutine run its cleanup act - time.Sleep(1 * time.Second) - - err = db.Close() - if err != nil { - t.Fatal(err) - } -} - -func TestOpenCloseFSDB(t *testing.T) { - db, err := OpenDB(context.Background(), "/tmp/rendezvous-test.db") - if err != nil { - t.Fatal(err) - } - - nonce1 := db.nonce - - // let the flush goroutine run its cleanup act - time.Sleep(1 * time.Second) - - err = db.Close() - if err != nil { - t.Fatal(err) - } - - db, err = OpenDB(context.Background(), "/tmp/rendezvous-test.db") - if err != nil { - t.Fatal(err) - } - - nonce2 := db.nonce - - // let the flush goroutine run its cleanup act - time.Sleep(1 * time.Second) - - err = db.Close() - if err != nil { - t.Fatal(err) - } - - if !bytes.Equal(nonce1, nonce2) { - t.Fatal("persistent db nonces are not equal") - } -} - -func TestDBRegistrationAndDiscovery(t *testing.T) { - db, err := OpenDB(context.Background(), ":memory:") - if err != nil { - t.Fatal(err) - } - - p1, err := peer.Decode("QmVr26fY1tKyspEJBniVhqxQeEjhF78XerGiqWAwraVLQH") - if err != nil { - t.Fatal(err) - } - - p2, err := peer.Decode("QmUkUQgxXeggyaD5Ckv8ZqfW8wHBX6cYyeiyqvVZYzq5Bi") - if err != nil { - t.Fatal(err) - } - - addr1, err := ma.NewMultiaddr("/ip4/1.1.1.1/tcp/9999") - if err != nil { - t.Fatal(err) - } - addrs1 := [][]byte{addr1.Bytes()} - - addr2, err := ma.NewMultiaddr("/ip4/2.2.2.2/tcp/9999") - if err != nil { - t.Fatal(err) - } - addrs2 := [][]byte{addr2.Bytes()} - - // register p1 and do discovery - _, err = db.Register(p1, "foo1", addrs1, 60) - if err != nil { - t.Fatal(err) - } - - count, err := db.CountRegistrations(p1) - if err != nil { - t.Fatal(err) - } - if count != 1 { - t.Fatal("registrations for p1 should be 1") - } - - rrs, cookie, err := db.Discover("foo1", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 1 { - t.Fatal("should have got 1 registration") - } - rr := rrs[0] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - // register p2 and do progressive discovery - _, err = db.Register(p2, "foo1", addrs2, 60) - if err != nil { - t.Fatal(err) - } - - count, err = db.CountRegistrations(p2) - if err != nil { - t.Fatal(err) - } - if count != 1 { - t.Fatal("registrations for p2 should be 1") - } - - rrs, cookie, err = db.Discover("foo1", cookie, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 1 { - t.Fatal("should have got 1 registration") - } - rr = rrs[0] - if rr.Id != p2 { - t.Fatal("expected p2 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs2) { - t.Fatal("expected p2's addrs in registration") - } - - // reregister p1 and do progressive discovery - _, err = db.Register(p1, "foo1", addrs1, 60) - if err != nil { - t.Fatal(err) - } - - count, err = db.CountRegistrations(p1) - if err != nil { - t.Fatal(err) - } - if count != 1 { - t.Fatal("registrations for p1 should be 1") - } - - rrs, cookie, err = db.Discover("foo1", cookie, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 1 { - t.Fatal("should have got 1 registration") - } - rr = rrs[0] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - // do a full discovery - rrs, _, err = db.Discover("foo1", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 2 { - t.Fatal("should have got 2 registration") - } - rr = rrs[0] - if rr.Id != p2 { - t.Fatal("expected p2 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs2) { - t.Fatal("expected p2's addrs in registration") - } - - rr = rrs[1] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - // unregister p2 and redo discovery - err = db.Unregister(p2, "foo1") - if err != nil { - t.Fatal(err) - } - - count, err = db.CountRegistrations(p2) - if err != nil { - t.Fatal(err) - } - if count != 0 { - t.Fatal("registrations for p2 should be 0") - } - - rrs, _, err = db.Discover("foo1", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 1 { - t.Fatal("should have got 1 registration") - } - rr = rrs[0] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - db.Close() -} - -func TestDBRegistrationAndDiscoveryMultipleNS(t *testing.T) { - db, err := OpenDB(context.Background(), ":memory:") - if err != nil { - t.Fatal(err) - } - - p1, err := peer.Decode("QmVr26fY1tKyspEJBniVhqxQeEjhF78XerGiqWAwraVLQH") - if err != nil { - t.Fatal(err) - } - - p2, err := peer.Decode("QmUkUQgxXeggyaD5Ckv8ZqfW8wHBX6cYyeiyqvVZYzq5Bi") - if err != nil { - t.Fatal(err) - } - - addr1, err := ma.NewMultiaddr("/ip4/1.1.1.1/tcp/9999") - if err != nil { - t.Fatal(err) - } - addrs1 := [][]byte{addr1.Bytes()} - - addr2, err := ma.NewMultiaddr("/ip4/2.2.2.2/tcp/9999") - if err != nil { - t.Fatal(err) - } - addrs2 := [][]byte{addr2.Bytes()} - - _, err = db.Register(p1, "foo1", addrs1, 60) - if err != nil { - t.Fatal(err) - } - - _, err = db.Register(p1, "foo2", addrs1, 60) - if err != nil { - t.Fatal(err) - } - - count, err := db.CountRegistrations(p1) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Fatal("registrations for p1 should be 2") - } - - rrs, cookie, err := db.Discover("", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 2 { - t.Fatal("should have got 2 registrations") - } - rr := rrs[0] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if rr.Ns != "foo1" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - rr = rrs[1] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if rr.Ns != "foo2" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - _, err = db.Register(p2, "foo1", addrs2, 60) - if err != nil { - t.Fatal(err) - } - - _, err = db.Register(p2, "foo2", addrs2, 60) - if err != nil { - t.Fatal(err) - } - - count, err = db.CountRegistrations(p2) - if err != nil { - t.Fatal(err) - } - if count != 2 { - t.Fatal("registrations for p2 should be 2") - } - - rrs, cookie, err = db.Discover("", cookie, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 2 { - t.Fatal("should have got 2 registrations") - } - rr = rrs[0] - if rr.Id != p2 { - t.Fatal("expected p2 ID in registration") - } - if rr.Ns != "foo1" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs2) { - t.Fatal("expected p2's addrs in registration") - } - - rr = rrs[1] - if rr.Id != p2 { - t.Fatal("expected p2 ID in registration") - } - if rr.Ns != "foo2" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs2) { - t.Fatal("expected p2's addrs in registration") - } - - err = db.Unregister(p2, "") - if err != nil { - t.Fatal(err) - } - - count, err = db.CountRegistrations(p2) - if err != nil { - t.Fatal(err) - } - if count != 0 { - t.Fatal("registrations for p2 should be 0") - } - - rrs, _, err = db.Discover("", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 2 { - t.Fatal("should have got 2 registrations") - } - rr = rrs[0] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if rr.Ns != "foo1" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - rr = rrs[1] - if rr.Id != p1 { - t.Fatal("expected p1 ID in registration") - } - if rr.Ns != "foo2" { - t.Fatal("expected namespace foo1 in registration") - } - if !equalAddrs(rr.Addrs, addrs1) { - t.Fatal("expected p1's addrs in registration") - } - - db.Close() -} - -func TestDBCleanup(t *testing.T) { - db, err := OpenDB(context.Background(), ":memory:") - if err != nil { - t.Fatal(err) - } - - p1, err := peer.Decode("QmVr26fY1tKyspEJBniVhqxQeEjhF78XerGiqWAwraVLQH") - if err != nil { - t.Fatal(err) - } - - addr1, err := ma.NewMultiaddr("/ip4/1.1.1.1/tcp/9999") - if err != nil { - t.Fatal(err) - } - addrs1 := [][]byte{addr1.Bytes()} - - _, err = db.Register(p1, "foo1", addrs1, 1) - if err != nil { - t.Fatal(err) - } - - count, err := db.CountRegistrations(p1) - if err != nil { - t.Fatal(err) - } - if count != 1 { - t.Fatal("registrations for p1 should be 1") - } - - time.Sleep(2 * time.Second) - - db.cleanupExpired() - - count, err = db.CountRegistrations(p1) - if err != nil { - t.Fatal(err) - } - if count != 0 { - t.Fatal("registrations for p1 should be 0") - } - - rrs, _, err := db.Discover("foo1", nil, 100) - if err != nil { - t.Fatal(err) - } - if len(rrs) != 0 { - t.Fatal("should have got 0 registrations") - } - - db.Close() -} diff --git a/discovery.go b/discovery.go index 5f92e67..7d2f73b 100644 --- a/discovery.go +++ b/discovery.go @@ -105,19 +105,15 @@ func (c *rendezvousDiscovery) FindPeers(ctx context.Context, ns string, opts ... } } - cookie := cache.cookie - // Discover new records if we don't have enough if newCacheSize < limit { // TODO: Should we return error even if we have valid cached results? var regs []Registration - var newCookie []byte - if regs, newCookie, err = c.rp.Discover(ctx, ns, limit, cookie); err == nil { + if regs, err = c.rp.Discover(ctx, ns, limit); err == nil { for _, reg := range regs { rec := &record{peer: reg.Peer, expire: int64(reg.Ttl) + currentTime} cache.recs[rec.peer.ID] = rec } - cache.cookie = newCookie } } diff --git a/discovery_test.go b/discovery_test.go index 72161ce..9ccd89e 100644 --- a/discovery_test.go +++ b/discovery_test.go @@ -1,5 +1,6 @@ package rendezvous +/* import ( "context" "github.com/libp2p/go-libp2p-core/discovery" @@ -160,3 +161,4 @@ func BaseDiscoveryClientCacheExpirationTest(t *testing.T, onlyRequestFromCache b t.Fatalf("received an incorrect number of records: %d", len(pi)) } } +*/ diff --git a/go.mod b/go.mod index e1b932e..86897a1 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,15 @@ go 1.15 require ( github.com/gogo/protobuf v1.3.2 + github.com/golang/protobuf v1.3.3 github.com/ipfs/go-log/v2 v2.0.5 - github.com/libp2p/go-libp2p-blankhost v0.2.0 + github.com/kr/pretty v0.2.0 // indirect github.com/libp2p/go-libp2p-core v0.8.5 - github.com/libp2p/go-libp2p-swarm v0.3.1 - github.com/mattn/go-sqlite3 v1.14.6 github.com/multiformats/go-multiaddr v0.3.1 + github.com/onsi/ginkgo v1.12.0 // indirect + github.com/onsi/gomega v1.9.0 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/stretchr/testify v1.6.1 // indirect + github.com/syndtr/goleveldb v1.0.0 + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/go.sum b/go.sum index 4ffbfd6..4aeb19b 100644 --- a/go.sum +++ b/go.sum @@ -1,212 +1,74 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= -github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= -github.com/ipfs/go-log v1.0.4 h1:6nLQdX4W8P9yZZFH7mO+X/PzjN8Laozm/lMJ6esdgzY= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= github.com/ipfs/go-log/v2 v2.0.5 h1:fL4YI+1g5V/b1Yxr1qAiXTMg1H8z9vx/VmJxBuQMHvU= github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.0.2 h1:7cWK5cdA5x72jX0g8iLrQWm5TRJZ6CzGdPEhWj7plWU= -github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.2.0 h1:uNiDjS58vrvJTg9jO6bySd1rMKejieG7v45ekqHbZ1M= -github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= github.com/libp2p/go-libp2p-core v0.8.5 h1:aEgbIcPGsKy6zYcC+5AJivYFedhYa4sW7mIpWpUaLKw= github.com/libp2p/go-libp2p-core v0.8.5/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= -github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= -github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-mplex v0.2.3 h1:2zijwaJvpdesST2MXpI5w9wWFRgYtMcpRX7rrw0jmOo= -github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= -github.com/libp2p/go-libp2p-peerstore v0.2.6 h1:2ACefBX23iMdJU9Ke+dcXt3w86MIryes9v7In4+Qq3U= -github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-swarm v0.3.1 h1:UTobu+oQHGdXTOGpZ4RefuVqYoJXcT0EBtSR74m2LkI= -github.com/libp2p/go-libp2p-swarm v0.3.1/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= -github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.3.0 h1:ZiBYstPamsi7y6NJZebRudUzsYmVkt998hltyLqf8+g= -github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= -github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= -github.com/libp2p/go-libp2p-transport-upgrader v0.3.0 h1:q3ULhsknEQ34eVDhv4YwKS8iet69ffs9+Fir6a7weN4= -github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= -github.com/libp2p/go-libp2p-yamux v0.4.0 h1:qunEZzWwwmfSBYTtSyd81PlD1TjB5uuWcGYHWVXLbUg= -github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30= -github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-mplex v0.1.2 h1:qOg1s+WdGLlpkrczDqmhYzyk3vCfsQ8+RxRTQjOZWwI= -github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.2 h1:UHhB35chwgvcRI392znJA3RCBtZ3MpE3ahNCN5MR4Xg= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1 h1:7PhkfH73VXfPJYKQ6JwS5I/eVcoyYi9IMNGc6FWpFLw= -github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport-transport v0.0.3 h1:zzOeXnTooCkRvoH+bSXEfXhn76+LAiwoneM0gnXjF2M= -github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.2.0 h1:YoThc549fzmNJIh7XjHVtMIFaEDRtIrtWciG5LyYAPo= -github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= -github.com/libp2p/go-yamux v1.4.0 h1:7nqe0T95T2CWh40IdJ/tp8RMor4ubc9/wYZpB2a/Hx0= -github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -214,119 +76,59 @@ github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= github.com/multiformats/go-multiaddr v0.3.1 h1:1bxa+W7j9wZKTZREySx1vPMs2TqrYWjVZ7zE6/XLG1I= github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= -github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.2.0 h1:MSXRGN0mFymt6B1yo/6BPnIRpLPEnKgQNvVfCX5VDJk= github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.1.1 h1:JlAdpIFhBhGRLxe9W6Om0w++Gd6KMWoFPZL/dEnm9nI= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.0.0 h1:qsup4IcBdlmsnGfqyLl4Ntn3C2XCCuKAE7DwHpScyUo= -go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -344,7 +146,6 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -359,36 +160,26 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= @@ -401,30 +192,24 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/pb/rendezvous.pb.go b/pb/rendezvous.pb.go index 50c535a..0eb9417 100644 --- a/pb/rendezvous.pb.go +++ b/pb/rendezvous.pb.go @@ -3,11 +3,13 @@ package rendezvous_pb -import proto "github.com/gogo/protobuf/proto" -import fmt "fmt" -import math "math" - -import io "io" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -18,7 +20,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type Message_MessageType int32 @@ -37,6 +39,7 @@ var Message_MessageType_name = map[int32]string{ 3: "DISCOVER", 4: "DISCOVER_RESPONSE", } + var Message_MessageType_value = map[string]int32{ "REGISTER": 0, "REGISTER_RESPONSE": 1, @@ -45,24 +48,12 @@ var Message_MessageType_value = map[string]int32{ "DISCOVER_RESPONSE": 4, } -func (x Message_MessageType) Enum() *Message_MessageType { - p := new(Message_MessageType) - *p = x - return p -} func (x Message_MessageType) String() string { return proto.EnumName(Message_MessageType_name, int32(x)) } -func (x *Message_MessageType) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Message_MessageType_value, data, "Message_MessageType") - if err != nil { - return err - } - *x = Message_MessageType(value) - return nil -} + func (Message_MessageType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 0} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 0} } type Message_ResponseStatus int32 @@ -72,7 +63,6 @@ const ( Message_E_INVALID_NAMESPACE Message_ResponseStatus = 100 Message_E_INVALID_PEER_INFO Message_ResponseStatus = 101 Message_E_INVALID_TTL Message_ResponseStatus = 102 - Message_E_INVALID_COOKIE Message_ResponseStatus = 103 Message_E_NOT_AUTHORIZED Message_ResponseStatus = 200 Message_E_INTERNAL_ERROR Message_ResponseStatus = 300 Message_E_UNAVAILABLE Message_ResponseStatus = 400 @@ -83,49 +73,36 @@ var Message_ResponseStatus_name = map[int32]string{ 100: "E_INVALID_NAMESPACE", 101: "E_INVALID_PEER_INFO", 102: "E_INVALID_TTL", - 103: "E_INVALID_COOKIE", 200: "E_NOT_AUTHORIZED", 300: "E_INTERNAL_ERROR", 400: "E_UNAVAILABLE", } + var Message_ResponseStatus_value = map[string]int32{ "OK": 0, "E_INVALID_NAMESPACE": 100, "E_INVALID_PEER_INFO": 101, "E_INVALID_TTL": 102, - "E_INVALID_COOKIE": 103, "E_NOT_AUTHORIZED": 200, "E_INTERNAL_ERROR": 300, "E_UNAVAILABLE": 400, } -func (x Message_ResponseStatus) Enum() *Message_ResponseStatus { - p := new(Message_ResponseStatus) - *p = x - return p -} func (x Message_ResponseStatus) String() string { return proto.EnumName(Message_ResponseStatus_name, int32(x)) } -func (x *Message_ResponseStatus) UnmarshalJSON(data []byte) error { - value, err := proto.UnmarshalJSONEnum(Message_ResponseStatus_value, data, "Message_ResponseStatus") - if err != nil { - return err - } - *x = Message_ResponseStatus(value) - return nil -} + func (Message_ResponseStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 1} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 1} } type Message struct { - Type *Message_MessageType `protobuf:"varint,1,opt,name=type,enum=rendezvous.pb.Message_MessageType" json:"type,omitempty"` - Register *Message_Register `protobuf:"bytes,2,opt,name=register" json:"register,omitempty"` - RegisterResponse *Message_RegisterResponse `protobuf:"bytes,3,opt,name=registerResponse" json:"registerResponse,omitempty"` - Unregister *Message_Unregister `protobuf:"bytes,4,opt,name=unregister" json:"unregister,omitempty"` - Discover *Message_Discover `protobuf:"bytes,5,opt,name=discover" json:"discover,omitempty"` - DiscoverResponse *Message_DiscoverResponse `protobuf:"bytes,6,opt,name=discoverResponse" json:"discoverResponse,omitempty"` + Type Message_MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=rendezvous.pb.Message_MessageType" json:"type,omitempty"` + Register *Message_Register `protobuf:"bytes,2,opt,name=register,proto3" json:"register,omitempty"` + RegisterResponse *Message_RegisterResponse `protobuf:"bytes,3,opt,name=registerResponse,proto3" json:"registerResponse,omitempty"` + Unregister *Message_Unregister `protobuf:"bytes,4,opt,name=unregister,proto3" json:"unregister,omitempty"` + Discover *Message_Discover `protobuf:"bytes,5,opt,name=discover,proto3" json:"discover,omitempty"` + DiscoverResponse *Message_DiscoverResponse `protobuf:"bytes,6,opt,name=discoverResponse,proto3" json:"discoverResponse,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -135,7 +112,7 @@ func (m *Message) Reset() { *m = Message{} } func (m *Message) String() string { return proto.CompactTextString(m) } func (*Message) ProtoMessage() {} func (*Message) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0} + return fileDescriptor_ef0a1d5737df1c36, []int{0} } func (m *Message) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -145,15 +122,15 @@ func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Message.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message.Merge(dst, src) +func (m *Message) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message.Merge(m, src) } func (m *Message) XXX_Size() int { return m.Size() @@ -165,8 +142,8 @@ func (m *Message) XXX_DiscardUnknown() { var xxx_messageInfo_Message proto.InternalMessageInfo func (m *Message) GetType() Message_MessageType { - if m != nil && m.Type != nil { - return *m.Type + if m != nil { + return m.Type } return Message_REGISTER } @@ -207,8 +184,8 @@ func (m *Message) GetDiscoverResponse() *Message_DiscoverResponse { } type Message_PeerInfo struct { - Id []byte `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` - Addrs [][]byte `protobuf:"bytes,2,rep,name=addrs" json:"addrs,omitempty"` + Id []byte `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Addrs [][]byte `protobuf:"bytes,2,rep,name=addrs,proto3" json:"addrs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -218,7 +195,7 @@ func (m *Message_PeerInfo) Reset() { *m = Message_PeerInfo{} } func (m *Message_PeerInfo) String() string { return proto.CompactTextString(m) } func (*Message_PeerInfo) ProtoMessage() {} func (*Message_PeerInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 0} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 0} } func (m *Message_PeerInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -228,15 +205,15 @@ func (m *Message_PeerInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return xxx_messageInfo_Message_PeerInfo.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_PeerInfo) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_PeerInfo.Merge(dst, src) +func (m *Message_PeerInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_PeerInfo.Merge(m, src) } func (m *Message_PeerInfo) XXX_Size() int { return m.Size() @@ -262,9 +239,9 @@ func (m *Message_PeerInfo) GetAddrs() [][]byte { } type Message_Register struct { - Ns *string `protobuf:"bytes,1,opt,name=ns" json:"ns,omitempty"` - Peer *Message_PeerInfo `protobuf:"bytes,2,opt,name=peer" json:"peer,omitempty"` - Ttl *int64 `protobuf:"varint,3,opt,name=ttl" json:"ttl,omitempty"` + Ns string `protobuf:"bytes,1,opt,name=ns,proto3" json:"ns,omitempty"` + Peer *Message_PeerInfo `protobuf:"bytes,2,opt,name=peer,proto3" json:"peer,omitempty"` + Ttl int64 `protobuf:"varint,3,opt,name=ttl,proto3" json:"ttl,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -274,7 +251,7 @@ func (m *Message_Register) Reset() { *m = Message_Register{} } func (m *Message_Register) String() string { return proto.CompactTextString(m) } func (*Message_Register) ProtoMessage() {} func (*Message_Register) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 1} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 1} } func (m *Message_Register) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -284,15 +261,15 @@ func (m *Message_Register) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return xxx_messageInfo_Message_Register.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_Register) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_Register.Merge(dst, src) +func (m *Message_Register) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_Register.Merge(m, src) } func (m *Message_Register) XXX_Size() int { return m.Size() @@ -304,8 +281,8 @@ func (m *Message_Register) XXX_DiscardUnknown() { var xxx_messageInfo_Message_Register proto.InternalMessageInfo func (m *Message_Register) GetNs() string { - if m != nil && m.Ns != nil { - return *m.Ns + if m != nil { + return m.Ns } return "" } @@ -318,26 +295,26 @@ func (m *Message_Register) GetPeer() *Message_PeerInfo { } func (m *Message_Register) GetTtl() int64 { - if m != nil && m.Ttl != nil { - return *m.Ttl + if m != nil { + return m.Ttl } return 0 } type Message_RegisterResponse struct { - Status *Message_ResponseStatus `protobuf:"varint,1,opt,name=status,enum=rendezvous.pb.Message_ResponseStatus" json:"status,omitempty"` - StatusText *string `protobuf:"bytes,2,opt,name=statusText" json:"statusText,omitempty"` - Ttl *int64 `protobuf:"varint,3,opt,name=ttl" json:"ttl,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Status Message_ResponseStatus `protobuf:"varint,1,opt,name=status,proto3,enum=rendezvous.pb.Message_ResponseStatus" json:"status,omitempty"` + StatusText string `protobuf:"bytes,2,opt,name=statusText,proto3" json:"statusText,omitempty"` + Ttl int64 `protobuf:"varint,3,opt,name=ttl,proto3" json:"ttl,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Message_RegisterResponse) Reset() { *m = Message_RegisterResponse{} } func (m *Message_RegisterResponse) String() string { return proto.CompactTextString(m) } func (*Message_RegisterResponse) ProtoMessage() {} func (*Message_RegisterResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 2} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 2} } func (m *Message_RegisterResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -347,15 +324,15 @@ func (m *Message_RegisterResponse) XXX_Marshal(b []byte, deterministic bool) ([] return xxx_messageInfo_Message_RegisterResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_RegisterResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_RegisterResponse.Merge(dst, src) +func (m *Message_RegisterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_RegisterResponse.Merge(m, src) } func (m *Message_RegisterResponse) XXX_Size() int { return m.Size() @@ -367,29 +344,29 @@ func (m *Message_RegisterResponse) XXX_DiscardUnknown() { var xxx_messageInfo_Message_RegisterResponse proto.InternalMessageInfo func (m *Message_RegisterResponse) GetStatus() Message_ResponseStatus { - if m != nil && m.Status != nil { - return *m.Status + if m != nil { + return m.Status } return Message_OK } func (m *Message_RegisterResponse) GetStatusText() string { - if m != nil && m.StatusText != nil { - return *m.StatusText + if m != nil { + return m.StatusText } return "" } func (m *Message_RegisterResponse) GetTtl() int64 { - if m != nil && m.Ttl != nil { - return *m.Ttl + if m != nil { + return m.Ttl } return 0 } type Message_Unregister struct { - Ns *string `protobuf:"bytes,1,opt,name=ns" json:"ns,omitempty"` - Id []byte `protobuf:"bytes,2,opt,name=id" json:"id,omitempty"` + Ns string `protobuf:"bytes,1,opt,name=ns,proto3" json:"ns,omitempty"` + Id []byte `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -399,7 +376,7 @@ func (m *Message_Unregister) Reset() { *m = Message_Unregister{} } func (m *Message_Unregister) String() string { return proto.CompactTextString(m) } func (*Message_Unregister) ProtoMessage() {} func (*Message_Unregister) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 3} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 3} } func (m *Message_Unregister) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -409,15 +386,15 @@ func (m *Message_Unregister) XXX_Marshal(b []byte, deterministic bool) ([]byte, return xxx_messageInfo_Message_Unregister.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_Unregister) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_Unregister.Merge(dst, src) +func (m *Message_Unregister) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_Unregister.Merge(m, src) } func (m *Message_Unregister) XXX_Size() int { return m.Size() @@ -429,8 +406,8 @@ func (m *Message_Unregister) XXX_DiscardUnknown() { var xxx_messageInfo_Message_Unregister proto.InternalMessageInfo func (m *Message_Unregister) GetNs() string { - if m != nil && m.Ns != nil { - return *m.Ns + if m != nil { + return m.Ns } return "" } @@ -443,9 +420,8 @@ func (m *Message_Unregister) GetId() []byte { } type Message_Discover struct { - Ns *string `protobuf:"bytes,1,opt,name=ns" json:"ns,omitempty"` - Limit *int64 `protobuf:"varint,2,opt,name=limit" json:"limit,omitempty"` - Cookie []byte `protobuf:"bytes,3,opt,name=cookie" json:"cookie,omitempty"` + Ns string `protobuf:"bytes,1,opt,name=ns,proto3" json:"ns,omitempty"` + Limit int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -455,7 +431,7 @@ func (m *Message_Discover) Reset() { *m = Message_Discover{} } func (m *Message_Discover) String() string { return proto.CompactTextString(m) } func (*Message_Discover) ProtoMessage() {} func (*Message_Discover) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 4} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 4} } func (m *Message_Discover) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -465,15 +441,15 @@ func (m *Message_Discover) XXX_Marshal(b []byte, deterministic bool) ([]byte, er return xxx_messageInfo_Message_Discover.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_Discover) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_Discover.Merge(dst, src) +func (m *Message_Discover) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_Discover.Merge(m, src) } func (m *Message_Discover) XXX_Size() int { return m.Size() @@ -485,41 +461,33 @@ func (m *Message_Discover) XXX_DiscardUnknown() { var xxx_messageInfo_Message_Discover proto.InternalMessageInfo func (m *Message_Discover) GetNs() string { - if m != nil && m.Ns != nil { - return *m.Ns + if m != nil { + return m.Ns } return "" } func (m *Message_Discover) GetLimit() int64 { - if m != nil && m.Limit != nil { - return *m.Limit + if m != nil { + return m.Limit } return 0 } -func (m *Message_Discover) GetCookie() []byte { - if m != nil { - return m.Cookie - } - return nil -} - type Message_DiscoverResponse struct { - Registrations []*Message_Register `protobuf:"bytes,1,rep,name=registrations" json:"registrations,omitempty"` - Cookie []byte `protobuf:"bytes,2,opt,name=cookie" json:"cookie,omitempty"` - Status *Message_ResponseStatus `protobuf:"varint,3,opt,name=status,enum=rendezvous.pb.Message_ResponseStatus" json:"status,omitempty"` - StatusText *string `protobuf:"bytes,4,opt,name=statusText" json:"statusText,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Registrations []*Message_Register `protobuf:"bytes,1,rep,name=registrations,proto3" json:"registrations,omitempty"` + Status Message_ResponseStatus `protobuf:"varint,3,opt,name=status,proto3,enum=rendezvous.pb.Message_ResponseStatus" json:"status,omitempty"` + StatusText string `protobuf:"bytes,4,opt,name=statusText,proto3" json:"statusText,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Message_DiscoverResponse) Reset() { *m = Message_DiscoverResponse{} } func (m *Message_DiscoverResponse) String() string { return proto.CompactTextString(m) } func (*Message_DiscoverResponse) ProtoMessage() {} func (*Message_DiscoverResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_rendezvous_af6820b250ca4668, []int{0, 5} + return fileDescriptor_ef0a1d5737df1c36, []int{0, 5} } func (m *Message_DiscoverResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -529,15 +497,15 @@ func (m *Message_DiscoverResponse) XXX_Marshal(b []byte, deterministic bool) ([] return xxx_messageInfo_Message_DiscoverResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] - n, err := m.MarshalTo(b) + n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } -func (dst *Message_DiscoverResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_Message_DiscoverResponse.Merge(dst, src) +func (m *Message_DiscoverResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_Message_DiscoverResponse.Merge(m, src) } func (m *Message_DiscoverResponse) XXX_Size() int { return m.Size() @@ -555,28 +523,23 @@ func (m *Message_DiscoverResponse) GetRegistrations() []*Message_Register { return nil } -func (m *Message_DiscoverResponse) GetCookie() []byte { - if m != nil { - return m.Cookie - } - return nil -} - func (m *Message_DiscoverResponse) GetStatus() Message_ResponseStatus { - if m != nil && m.Status != nil { - return *m.Status + if m != nil { + return m.Status } return Message_OK } func (m *Message_DiscoverResponse) GetStatusText() string { - if m != nil && m.StatusText != nil { - return *m.StatusText + if m != nil { + return m.StatusText } return "" } func init() { + proto.RegisterEnum("rendezvous.pb.Message_MessageType", Message_MessageType_name, Message_MessageType_value) + proto.RegisterEnum("rendezvous.pb.Message_ResponseStatus", Message_ResponseStatus_name, Message_ResponseStatus_value) proto.RegisterType((*Message)(nil), "rendezvous.pb.Message") proto.RegisterType((*Message_PeerInfo)(nil), "rendezvous.pb.Message.PeerInfo") proto.RegisterType((*Message_Register)(nil), "rendezvous.pb.Message.Register") @@ -584,13 +547,55 @@ func init() { proto.RegisterType((*Message_Unregister)(nil), "rendezvous.pb.Message.Unregister") proto.RegisterType((*Message_Discover)(nil), "rendezvous.pb.Message.Discover") proto.RegisterType((*Message_DiscoverResponse)(nil), "rendezvous.pb.Message.DiscoverResponse") - proto.RegisterEnum("rendezvous.pb.Message_MessageType", Message_MessageType_name, Message_MessageType_value) - proto.RegisterEnum("rendezvous.pb.Message_ResponseStatus", Message_ResponseStatus_name, Message_ResponseStatus_value) } + +func init() { proto.RegisterFile("rendezvous.proto", fileDescriptor_ef0a1d5737df1c36) } + +var fileDescriptor_ef0a1d5737df1c36 = []byte{ + // 589 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xad, 0xed, 0x34, 0x5f, 0x72, 0x9b, 0x44, 0xd3, 0xf9, 0x5a, 0x11, 0x65, 0x11, 0x42, 0x24, + 0x44, 0x16, 0x28, 0x42, 0xad, 0xc4, 0x06, 0xb1, 0x70, 0x9b, 0x01, 0x2c, 0x52, 0x3b, 0xba, 0x76, + 0xb2, 0x60, 0x63, 0xa5, 0x78, 0x1a, 0x59, 0x2a, 0x76, 0xe4, 0x71, 0x2a, 0xca, 0x96, 0x17, 0x60, + 0xc9, 0x8e, 0x17, 0xe0, 0x01, 0x78, 0x84, 0x2e, 0x79, 0x04, 0x14, 0x56, 0xbc, 0x05, 0xf2, 0x6f, + 0xfe, 0x48, 0x8b, 0xc4, 0x2a, 0x73, 0xaf, 0xcf, 0x39, 0x73, 0xef, 0x39, 0x8e, 0x81, 0x04, 0xdc, + 0x73, 0xf8, 0x87, 0x2b, 0x7f, 0x26, 0xba, 0xd3, 0xc0, 0x0f, 0x7d, 0x5a, 0x5d, 0xee, 0x9c, 0xb7, + 0x7f, 0x95, 0xe1, 0xbf, 0x33, 0x2e, 0xc4, 0x78, 0xc2, 0xe9, 0x53, 0x28, 0x84, 0xd7, 0x53, 0x5e, + 0x97, 0x5a, 0x52, 0xa7, 0x76, 0xd4, 0xee, 0xae, 0x20, 0xbb, 0x29, 0x2a, 0xfb, 0xb5, 0xae, 0xa7, + 0x1c, 0x63, 0x3c, 0x7d, 0x06, 0xa5, 0x80, 0x4f, 0x5c, 0x11, 0xf2, 0xa0, 0x2e, 0xb7, 0xa4, 0xce, + 0xde, 0xd1, 0xfd, 0x2d, 0x5c, 0x4c, 0x61, 0x98, 0x13, 0xa8, 0x19, 0xcd, 0x98, 0x76, 0xb9, 0x98, + 0xfa, 0x9e, 0xe0, 0x75, 0x25, 0x16, 0x79, 0x74, 0x97, 0x48, 0x0a, 0xc7, 0x0d, 0x01, 0xaa, 0x02, + 0xcc, 0xbc, 0x7c, 0xa6, 0x42, 0x2c, 0xf7, 0x60, 0x8b, 0xdc, 0x30, 0x07, 0xe2, 0x12, 0x29, 0x5a, + 0xca, 0x71, 0xc5, 0x5b, 0xff, 0x8a, 0x07, 0xf5, 0xdd, 0x5b, 0x97, 0xea, 0xa5, 0x30, 0xcc, 0x09, + 0xd1, 0x52, 0xd9, 0x39, 0x5f, 0xaa, 0x78, 0xeb, 0x52, 0xbd, 0x35, 0x38, 0x6e, 0x08, 0x34, 0x9e, + 0x40, 0x69, 0xc0, 0x79, 0xa0, 0x79, 0x17, 0x3e, 0xad, 0x81, 0xec, 0x3a, 0x71, 0x50, 0x15, 0x94, + 0x5d, 0x87, 0x1e, 0xc0, 0xee, 0xd8, 0x71, 0x02, 0x51, 0x97, 0x5b, 0x4a, 0xa7, 0x82, 0x49, 0xd1, + 0x18, 0x43, 0x29, 0x33, 0x2b, 0x62, 0x78, 0x22, 0x66, 0x94, 0x51, 0xf6, 0x04, 0x3d, 0x86, 0xc2, + 0x94, 0xdf, 0x19, 0x58, 0x76, 0x21, 0xc6, 0x60, 0x4a, 0x40, 0x09, 0xc3, 0xcb, 0x38, 0x1f, 0x05, + 0xa3, 0x63, 0xe3, 0xa3, 0x04, 0x64, 0x3d, 0x10, 0xfa, 0x1c, 0x8a, 0x22, 0x1c, 0x87, 0x33, 0x91, + 0xbe, 0x4a, 0x0f, 0xb7, 0x26, 0x99, 0x10, 0xcc, 0x18, 0x8c, 0x29, 0x89, 0x36, 0x01, 0x92, 0x93, + 0xc5, 0xdf, 0x87, 0xf1, 0x80, 0x65, 0x5c, 0xea, 0xfc, 0x61, 0x8a, 0xc7, 0x00, 0x8b, 0x18, 0x37, + 0x56, 0x4d, 0xcc, 0x92, 0x33, 0xb3, 0x22, 0x23, 0x33, 0xbb, 0x37, 0xb0, 0x07, 0xb0, 0x7b, 0xe9, + 0xbe, 0x73, 0x93, 0x6b, 0x15, 0x4c, 0x8a, 0xc6, 0x37, 0x09, 0xc8, 0x7a, 0x42, 0x94, 0x41, 0x35, + 0xb9, 0x32, 0x18, 0x87, 0xae, 0x1f, 0xab, 0x28, 0x7f, 0xf3, 0xee, 0xaf, 0xb2, 0x96, 0xcc, 0x52, + 0xfe, 0xdd, 0xac, 0xc2, 0xba, 0x59, 0xed, 0x09, 0xec, 0x2d, 0xfd, 0x63, 0x69, 0x05, 0x4a, 0xc8, + 0x5e, 0x6a, 0xa6, 0xc5, 0x90, 0xec, 0xd0, 0x43, 0xd8, 0xcf, 0x2a, 0x1b, 0x99, 0x39, 0x30, 0x74, + 0x93, 0x11, 0x89, 0xd6, 0x00, 0x86, 0x7a, 0x0e, 0x93, 0x23, 0x52, 0x4f, 0x33, 0x4f, 0x8d, 0x11, + 0x43, 0xa2, 0x44, 0xa4, 0xac, 0x5a, 0x90, 0x0a, 0xed, 0x2f, 0x12, 0xd4, 0x56, 0x67, 0xa4, 0x45, + 0x90, 0x8d, 0xd7, 0x64, 0x87, 0xde, 0x83, 0xff, 0x99, 0xad, 0xe9, 0x23, 0xb5, 0xaf, 0xf5, 0x6c, + 0x5d, 0x3d, 0x63, 0xe6, 0x40, 0x3d, 0x65, 0xc4, 0x59, 0x7d, 0x30, 0x60, 0x0c, 0x6d, 0x4d, 0x7f, + 0x61, 0x10, 0x4e, 0xf7, 0xa1, 0xba, 0x78, 0x60, 0x59, 0x7d, 0x72, 0x41, 0x0f, 0x81, 0x30, 0x5b, + 0x37, 0x2c, 0x5b, 0x1d, 0x5a, 0xaf, 0x0c, 0xd4, 0xde, 0xb0, 0x1e, 0xb9, 0x91, 0x92, 0xb6, 0xa6, + 0x5b, 0x0c, 0x75, 0xb5, 0x6f, 0x33, 0x44, 0x03, 0xc9, 0x57, 0x99, 0xd2, 0x48, 0x60, 0xa8, 0xab, + 0x23, 0x55, 0xeb, 0xab, 0x27, 0x7d, 0x46, 0x3e, 0x29, 0x27, 0xe4, 0x66, 0xde, 0x94, 0xbe, 0xcf, + 0x9b, 0xd2, 0x8f, 0x79, 0x53, 0xfa, 0xfc, 0xb3, 0xb9, 0x73, 0x5e, 0x8c, 0xbf, 0x89, 0xc7, 0xbf, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x67, 0xb6, 0x12, 0x94, 0x27, 0x05, 0x00, 0x00, +} + func (m *Message) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -598,75 +603,91 @@ func (m *Message) Marshal() (dAtA []byte, err error) { } func (m *Message) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Type != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Type)) - } - if m.Register != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.Register.Size())) - n1, err := m.Register.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - if m.RegisterResponse != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.RegisterResponse.Size())) - n2, err := m.RegisterResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n2 - } - if m.Unregister != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.Unregister.Size())) - n3, err := m.Unregister.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } - if m.Discover != nil { - dAtA[i] = 0x2a - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.Discover.Size())) - n4, err := m.Discover.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n4 + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) } if m.DiscoverResponse != nil { - dAtA[i] = 0x32 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.DiscoverResponse.Size())) - n5, err := m.DiscoverResponse.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.DiscoverResponse.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) } - i += n5 + i-- + dAtA[i] = 0x32 } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if m.Discover != nil { + { + size, err := m.Discover.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a } - return i, nil + if m.Unregister != nil { + { + size, err := m.Unregister.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.RegisterResponse != nil { + { + size, err := m.RegisterResponse.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Register != nil { + { + size, err := m.Register.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Type != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *Message_PeerInfo) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -674,34 +695,42 @@ func (m *Message_PeerInfo) Marshal() (dAtA []byte, err error) { } func (m *Message_PeerInfo) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_PeerInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Id != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Id))) - i += copy(dAtA[i:], m.Id) + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Addrs) > 0 { - for _, b := range m.Addrs { + for iNdEx := len(m.Addrs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Addrs[iNdEx]) + copy(dAtA[i:], m.Addrs[iNdEx]) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Addrs[iNdEx]))) + i-- dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(b))) - i += copy(dAtA[i:], b) } } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa } - return i, nil + return len(dAtA) - i, nil } func (m *Message_Register) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -709,41 +738,50 @@ func (m *Message_Register) Marshal() (dAtA []byte, err error) { } func (m *Message_Register) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_Register) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Ns != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(*m.Ns))) - i += copy(dAtA[i:], *m.Ns) + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Ttl != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Ttl)) + i-- + dAtA[i] = 0x18 } if m.Peer != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(m.Peer.Size())) - n6, err := m.Peer.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + { + size, err := m.Peer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) } - i += n6 + i-- + dAtA[i] = 0x12 } - if m.Ttl != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Ttl)) + if len(m.Ns) > 0 { + i -= len(m.Ns) + copy(dAtA[i:], m.Ns) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Ns))) + i-- + dAtA[i] = 0xa } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil + return len(dAtA) - i, nil } func (m *Message_RegisterResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -751,36 +789,43 @@ func (m *Message_RegisterResponse) Marshal() (dAtA []byte, err error) { } func (m *Message_RegisterResponse) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_RegisterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Status != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Status)) - } - if m.StatusText != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(*m.StatusText))) - i += copy(dAtA[i:], *m.StatusText) - } - if m.Ttl != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Ttl)) - } if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) } - return i, nil + if m.Ttl != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Ttl)) + i-- + dAtA[i] = 0x18 + } + if len(m.StatusText) > 0 { + i -= len(m.StatusText) + copy(dAtA[i:], m.StatusText) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.StatusText))) + i-- + dAtA[i] = 0x12 + } + if m.Status != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil } func (m *Message_Unregister) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -788,32 +833,40 @@ func (m *Message_Unregister) Marshal() (dAtA []byte, err error) { } func (m *Message_Unregister) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_Unregister) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Ns != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(*m.Ns))) - i += copy(dAtA[i:], *m.Ns) - } - if m.Id != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Id))) - i += copy(dAtA[i:], m.Id) - } if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) } - return i, nil + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0x12 + } + if len(m.Ns) > 0 { + i -= len(m.Ns) + copy(dAtA[i:], m.Ns) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Ns))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *Message_Discover) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -821,37 +874,38 @@ func (m *Message_Discover) Marshal() (dAtA []byte, err error) { } func (m *Message_Discover) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_Discover) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l - if m.Ns != nil { - dAtA[i] = 0xa - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(*m.Ns))) - i += copy(dAtA[i:], *m.Ns) - } - if m.Limit != nil { - dAtA[i] = 0x10 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Limit)) - } - if m.Cookie != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Cookie))) - i += copy(dAtA[i:], m.Cookie) - } if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) } - return i, nil + if m.Limit != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Limit)) + i-- + dAtA[i] = 0x10 + } + if len(m.Ns) > 0 { + i -= len(m.Ns) + copy(dAtA[i:], m.Ns) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Ns))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil } func (m *Message_DiscoverResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } @@ -859,53 +913,58 @@ func (m *Message_DiscoverResponse) Marshal() (dAtA []byte, err error) { } func (m *Message_DiscoverResponse) MarshalTo(dAtA []byte) (int, error) { - var i int + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Message_DiscoverResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) _ = i var l int _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.StatusText) > 0 { + i -= len(m.StatusText) + copy(dAtA[i:], m.StatusText) + i = encodeVarintRendezvous(dAtA, i, uint64(len(m.StatusText))) + i-- + dAtA[i] = 0x22 + } + if m.Status != 0 { + i = encodeVarintRendezvous(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x18 + } if len(m.Registrations) > 0 { - for _, msg := range m.Registrations { - dAtA[i] = 0xa - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + for iNdEx := len(m.Registrations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Registrations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRendezvous(dAtA, i, uint64(size)) } - i += n + i-- + dAtA[i] = 0xa } } - if m.Cookie != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(m.Cookie))) - i += copy(dAtA[i:], m.Cookie) - } - if m.Status != nil { - dAtA[i] = 0x18 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(*m.Status)) - } - if m.StatusText != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintRendezvous(dAtA, i, uint64(len(*m.StatusText))) - i += copy(dAtA[i:], *m.StatusText) - } - if m.XXX_unrecognized != nil { - i += copy(dAtA[i:], m.XXX_unrecognized) - } - return i, nil + return len(dAtA) - i, nil } func encodeVarintRendezvous(dAtA []byte, offset int, v uint64) int { + offset -= sovRendezvous(v) + base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) - return offset + 1 + return base } func (m *Message) Size() (n int) { if m == nil { @@ -913,8 +972,8 @@ func (m *Message) Size() (n int) { } var l int _ = l - if m.Type != nil { - n += 1 + sovRendezvous(uint64(*m.Type)) + if m.Type != 0 { + n += 1 + sovRendezvous(uint64(m.Type)) } if m.Register != nil { l = m.Register.Size() @@ -948,8 +1007,8 @@ func (m *Message_PeerInfo) Size() (n int) { } var l int _ = l - if m.Id != nil { - l = len(m.Id) + l = len(m.Id) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } if len(m.Addrs) > 0 { @@ -970,16 +1029,16 @@ func (m *Message_Register) Size() (n int) { } var l int _ = l - if m.Ns != nil { - l = len(*m.Ns) + l = len(m.Ns) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } if m.Peer != nil { l = m.Peer.Size() n += 1 + l + sovRendezvous(uint64(l)) } - if m.Ttl != nil { - n += 1 + sovRendezvous(uint64(*m.Ttl)) + if m.Ttl != 0 { + n += 1 + sovRendezvous(uint64(m.Ttl)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -993,15 +1052,15 @@ func (m *Message_RegisterResponse) Size() (n int) { } var l int _ = l - if m.Status != nil { - n += 1 + sovRendezvous(uint64(*m.Status)) + if m.Status != 0 { + n += 1 + sovRendezvous(uint64(m.Status)) } - if m.StatusText != nil { - l = len(*m.StatusText) + l = len(m.StatusText) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } - if m.Ttl != nil { - n += 1 + sovRendezvous(uint64(*m.Ttl)) + if m.Ttl != 0 { + n += 1 + sovRendezvous(uint64(m.Ttl)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -1015,12 +1074,12 @@ func (m *Message_Unregister) Size() (n int) { } var l int _ = l - if m.Ns != nil { - l = len(*m.Ns) + l = len(m.Ns) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } - if m.Id != nil { - l = len(m.Id) + l = len(m.Id) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } if m.XXX_unrecognized != nil { @@ -1035,16 +1094,12 @@ func (m *Message_Discover) Size() (n int) { } var l int _ = l - if m.Ns != nil { - l = len(*m.Ns) + l = len(m.Ns) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } - if m.Limit != nil { - n += 1 + sovRendezvous(uint64(*m.Limit)) - } - if m.Cookie != nil { - l = len(m.Cookie) - n += 1 + l + sovRendezvous(uint64(l)) + if m.Limit != 0 { + n += 1 + sovRendezvous(uint64(m.Limit)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -1064,15 +1119,11 @@ func (m *Message_DiscoverResponse) Size() (n int) { n += 1 + l + sovRendezvous(uint64(l)) } } - if m.Cookie != nil { - l = len(m.Cookie) - n += 1 + l + sovRendezvous(uint64(l)) + if m.Status != 0 { + n += 1 + sovRendezvous(uint64(m.Status)) } - if m.Status != nil { - n += 1 + sovRendezvous(uint64(*m.Status)) - } - if m.StatusText != nil { - l = len(*m.StatusText) + l = len(m.StatusText) + if l > 0 { n += 1 + l + sovRendezvous(uint64(l)) } if m.XXX_unrecognized != nil { @@ -1082,14 +1133,7 @@ func (m *Message_DiscoverResponse) Size() (n int) { } func sovRendezvous(x uint64) (n int) { - for { - n++ - x >>= 7 - if x == 0 { - break - } - } - return n + return (math_bits.Len64(x|1) + 6) / 7 } func sozRendezvous(x uint64) (n int) { return sovRendezvous(uint64((x << 1) ^ uint64((int64(x) >> 63)))) @@ -1109,7 +1153,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1127,7 +1171,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } - var v Message_MessageType + m.Type = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -1137,12 +1181,11 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (Message_MessageType(b) & 0x7F) << shift + m.Type |= Message_MessageType(b&0x7F) << shift if b < 0x80 { break } } - m.Type = &v case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Register", wireType) @@ -1157,7 +1200,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1166,6 +1209,9 @@ func (m *Message) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1190,7 +1236,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1199,6 +1245,9 @@ func (m *Message) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1223,7 +1272,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1232,6 +1281,9 @@ func (m *Message) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1256,7 +1308,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1265,6 +1317,9 @@ func (m *Message) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1289,7 +1344,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1298,6 +1353,9 @@ func (m *Message) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1314,7 +1372,7 @@ func (m *Message) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1345,7 +1403,7 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1373,7 +1431,7 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1382,6 +1440,9 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1404,7 +1465,7 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1413,6 +1474,9 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1425,7 +1489,7 @@ func (m *Message_PeerInfo) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1456,7 +1520,7 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1484,7 +1548,7 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1494,11 +1558,13 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Ns = &s + m.Ns = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -1514,7 +1580,7 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1523,6 +1589,9 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1537,7 +1606,7 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Ttl", wireType) } - var v int64 + m.Ttl = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -1547,19 +1616,18 @@ func (m *Message_Register) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + m.Ttl |= int64(b&0x7F) << shift if b < 0x80 { break } } - m.Ttl = &v default: iNdEx = preIndex skippy, err := skipRendezvous(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1590,7 +1658,7 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1608,7 +1676,7 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var v Message_ResponseStatus + m.Status = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -1618,12 +1686,11 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (Message_ResponseStatus(b) & 0x7F) << shift + m.Status |= Message_ResponseStatus(b&0x7F) << shift if b < 0x80 { break } } - m.Status = &v case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field StatusText", wireType) @@ -1638,7 +1705,7 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1648,17 +1715,19 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.StatusText = &s + m.StatusText = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Ttl", wireType) } - var v int64 + m.Ttl = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -1668,19 +1737,18 @@ func (m *Message_RegisterResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + m.Ttl |= int64(b&0x7F) << shift if b < 0x80 { break } } - m.Ttl = &v default: iNdEx = preIndex skippy, err := skipRendezvous(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1711,7 +1779,7 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1739,7 +1807,7 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1749,11 +1817,13 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Ns = &s + m.Ns = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -1769,7 +1839,7 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= (int(b) & 0x7F) << shift + byteLen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1778,6 +1848,9 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -1792,7 +1865,7 @@ func (m *Message_Unregister) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1823,7 +1896,7 @@ func (m *Message_Discover) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1851,7 +1924,7 @@ func (m *Message_Discover) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1861,17 +1934,19 @@ func (m *Message_Discover) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Ns = &s + m.Ns = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) } - var v int64 + m.Limit = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -1881,50 +1956,18 @@ func (m *Message_Discover) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + m.Limit |= int64(b&0x7F) << shift if b < 0x80 { break } } - m.Limit = &v - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cookie", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRendezvous - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRendezvous - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cookie = append(m.Cookie[:0], dAtA[iNdEx:postIndex]...) - if m.Cookie == nil { - m.Cookie = []byte{} - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRendezvous(dAtA[iNdEx:]) if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -1955,7 +1998,7 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - wire |= (uint64(b) & 0x7F) << shift + wire |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -1983,7 +2026,7 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= (int(b) & 0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } @@ -1992,6 +2035,9 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } @@ -2000,42 +2046,11 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Cookie", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRendezvous - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthRendezvous - } - postIndex := iNdEx + byteLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Cookie = append(m.Cookie[:0], dAtA[iNdEx:postIndex]...) - if m.Cookie == nil { - m.Cookie = []byte{} - } - iNdEx = postIndex case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } - var v Message_ResponseStatus + m.Status = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowRendezvous @@ -2045,12 +2060,11 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (Message_ResponseStatus(b) & 0x7F) << shift + m.Status |= Message_ResponseStatus(b&0x7F) << shift if b < 0x80 { break } } - m.Status = &v case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field StatusText", wireType) @@ -2065,7 +2079,7 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } @@ -2075,11 +2089,13 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { return ErrInvalidLengthRendezvous } postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRendezvous + } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.StatusText = &s + m.StatusText = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -2087,7 +2103,7 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { if err != nil { return err } - if skippy < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthRendezvous } if (iNdEx + skippy) > l { @@ -2106,6 +2122,7 @@ func (m *Message_DiscoverResponse) Unmarshal(dAtA []byte) error { func skipRendezvous(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 + depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { @@ -2137,10 +2154,8 @@ func skipRendezvous(dAtA []byte) (n int, err error) { break } } - return iNdEx, nil case 1: iNdEx += 8 - return iNdEx, nil case 2: var length int for shift := uint(0); ; shift += 7 { @@ -2157,94 +2172,34 @@ func skipRendezvous(dAtA []byte) (n int, err error) { break } } - iNdEx += length if length < 0 { return 0, ErrInvalidLengthRendezvous } - return iNdEx, nil + iNdEx += length case 3: - for { - var innerWire uint64 - var start int = iNdEx - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return 0, ErrIntOverflowRendezvous - } - if iNdEx >= l { - return 0, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - innerWire |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - innerWireType := int(innerWire & 0x7) - if innerWireType == 4 { - break - } - next, err := skipRendezvous(dAtA[start:]) - if err != nil { - return 0, err - } - iNdEx = start + next - } - return iNdEx, nil + depth++ case 4: - return iNdEx, nil + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupRendezvous + } + depth-- case 5: iNdEx += 4 - return iNdEx, nil default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } + if iNdEx < 0 { + return 0, ErrInvalidLengthRendezvous + } + if depth == 0 { + return iNdEx, nil + } } - panic("unreachable") + return 0, io.ErrUnexpectedEOF } var ( - ErrInvalidLengthRendezvous = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowRendezvous = fmt.Errorf("proto: integer overflow") + ErrInvalidLengthRendezvous = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowRendezvous = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupRendezvous = fmt.Errorf("proto: unexpected end of group") ) - -func init() { proto.RegisterFile("rendezvous.proto", fileDescriptor_rendezvous_af6820b250ca4668) } - -var fileDescriptor_rendezvous_af6820b250ca4668 = []byte{ - // 556 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xc1, 0x72, 0xd2, 0x40, - 0x18, 0xc7, 0x9b, 0x04, 0x30, 0x7c, 0x04, 0x66, 0xbb, 0xda, 0x91, 0xe1, 0x80, 0xc8, 0xd8, 0x91, - 0x8b, 0x8c, 0x76, 0xa6, 0xde, 0x53, 0x58, 0x75, 0xa7, 0x34, 0x61, 0x36, 0x81, 0x83, 0x97, 0x0c, - 0x36, 0x5b, 0x26, 0x5a, 0x09, 0x93, 0x0d, 0x1d, 0xeb, 0x53, 0xf8, 0x12, 0xde, 0xbc, 0xfa, 0x0e, - 0x3d, 0xfa, 0x08, 0x0e, 0x57, 0x5f, 0xc2, 0x49, 0x42, 0x42, 0x60, 0xa4, 0x75, 0x7a, 0x4a, 0xf6, - 0xdb, 0xff, 0xef, 0xfb, 0xfe, 0xfb, 0xcf, 0x06, 0x50, 0xc0, 0x67, 0x2e, 0xff, 0x7a, 0xe5, 0x2f, - 0x44, 0x77, 0x1e, 0xf8, 0xa1, 0x8f, 0xab, 0xf9, 0xca, 0x87, 0xf6, 0x1f, 0x15, 0x1e, 0x9c, 0x71, - 0x21, 0x26, 0x53, 0x8e, 0x5f, 0x42, 0x21, 0xbc, 0x9e, 0xf3, 0xba, 0xd4, 0x92, 0x3a, 0xb5, 0xa3, - 0x76, 0x77, 0x43, 0xd9, 0x5d, 0xa9, 0xd2, 0xa7, 0x7d, 0x3d, 0xe7, 0xf8, 0x15, 0xa8, 0x01, 0x9f, - 0x7a, 0x22, 0xe4, 0x41, 0x5d, 0x6e, 0x49, 0x9d, 0xca, 0xd1, 0x93, 0x1d, 0x14, 0x5b, 0xc9, 0xb0, - 0x1e, 0x79, 0x4a, 0xde, 0x19, 0x17, 0x73, 0x7f, 0x26, 0x78, 0x5d, 0x89, 0xd1, 0xe7, 0x77, 0xa0, - 0xa9, 0x1c, 0x1f, 0x03, 0x2c, 0x66, 0xd9, 0xdc, 0x42, 0x0c, 0x3f, 0xdd, 0x01, 0x8f, 0x32, 0x61, - 0x64, 0xd6, 0xf5, 0xc4, 0xb9, 0x7f, 0xc5, 0x83, 0x7a, 0xf1, 0x56, 0xb3, 0xfd, 0x95, 0x2c, 0x32, - 0x9b, 0x22, 0x99, 0xd9, 0xd2, 0xad, 0x66, 0xfb, 0x5b, 0xf2, 0xc6, 0x21, 0xa8, 0x43, 0xce, 0x03, - 0x3a, 0xbb, 0xf0, 0x31, 0x80, 0xec, 0xb9, 0x71, 0xbc, 0x1a, 0xae, 0x42, 0x71, 0xe2, 0xba, 0x81, - 0xa8, 0xcb, 0x2d, 0xa5, 0xa3, 0x35, 0x18, 0xa8, 0x59, 0x44, 0x00, 0xf2, 0x4c, 0xc4, 0xb2, 0x32, - 0x7e, 0x01, 0x85, 0x39, 0xbf, 0x33, 0xdd, 0x6c, 0x42, 0x05, 0x94, 0x30, 0xbc, 0x8c, 0x03, 0x55, - 0x1a, 0x1f, 0x01, 0xfd, 0x23, 0xbb, 0x92, 0x08, 0x27, 0xe1, 0x42, 0xac, 0xbe, 0xf2, 0xe1, 0xce, - 0xd0, 0x13, 0xc0, 0x8a, 0xc5, 0x18, 0x03, 0x24, 0x98, 0xcd, 0xbf, 0x84, 0xb1, 0x99, 0xf2, 0xe6, - 0xac, 0x67, 0x00, 0xb9, 0xa8, 0xf3, 0x27, 0x48, 0x0e, 0x1d, 0x21, 0x5a, 0xe3, 0x18, 0xd4, 0x2c, - 0xdb, 0xbc, 0xa6, 0x0a, 0xc5, 0x4b, 0xef, 0xb3, 0x97, 0x74, 0x56, 0x70, 0x0d, 0x4a, 0xe7, 0xbe, - 0xff, 0xc9, 0x4b, 0x6e, 0x86, 0xd6, 0xf8, 0x2e, 0x01, 0xda, 0x0e, 0x16, 0xbf, 0x86, 0x6a, 0x32, - 0x2f, 0x98, 0x84, 0x9e, 0x1f, 0xb7, 0x52, 0xfe, 0xe7, 0x02, 0xae, 0x9b, 0xc7, 0x9e, 0x72, 0x89, - 0x28, 0xf7, 0x4f, 0x24, 0xba, 0x84, 0xe5, 0xf6, 0x14, 0x2a, 0xf9, 0xbf, 0x43, 0x03, 0x95, 0x91, - 0xb7, 0xd4, 0xb2, 0x09, 0x43, 0x7b, 0xf8, 0x00, 0xf6, 0xd3, 0x95, 0xc3, 0x88, 0x35, 0x34, 0x0d, - 0x8b, 0x20, 0x09, 0xd7, 0x00, 0x46, 0x46, 0x26, 0x93, 0x23, 0xa8, 0x4f, 0xad, 0x9e, 0x39, 0x26, - 0x0c, 0x29, 0x11, 0x94, 0xae, 0xd6, 0x50, 0xa1, 0xfd, 0x53, 0x82, 0xda, 0x96, 0x9f, 0x12, 0xc8, - 0xe6, 0x29, 0xda, 0xc3, 0x8f, 0xe1, 0x21, 0x71, 0xa8, 0x31, 0xd6, 0x07, 0xb4, 0xef, 0x18, 0xfa, - 0x19, 0xb1, 0x86, 0x7a, 0x8f, 0x20, 0x77, 0x73, 0x63, 0x48, 0x08, 0x73, 0xa8, 0xf1, 0xc6, 0x44, - 0x1c, 0xef, 0x43, 0x75, 0xbd, 0x61, 0xdb, 0x03, 0x74, 0x81, 0x1f, 0x01, 0x5a, 0x97, 0x7a, 0xa6, - 0x79, 0x4a, 0x09, 0x9a, 0xe2, 0x83, 0xa8, 0x6a, 0x98, 0xb6, 0xa3, 0x8f, 0xec, 0x77, 0x26, 0xa3, - 0xef, 0x49, 0x1f, 0xdd, 0x48, 0x49, 0x99, 0x1a, 0x36, 0x61, 0x86, 0x3e, 0x70, 0x08, 0x63, 0x26, - 0x43, 0x3f, 0x64, 0x8c, 0xa3, 0xb6, 0x23, 0x43, 0x1f, 0xeb, 0x74, 0xa0, 0x9f, 0x0c, 0x08, 0xfa, - 0xa6, 0x9c, 0x68, 0x37, 0xcb, 0xa6, 0xf4, 0x6b, 0xd9, 0x94, 0x7e, 0x2f, 0x9b, 0xd2, 0xdf, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x26, 0x60, 0x8f, 0xe5, 0x9d, 0x04, 0x00, 0x00, -} diff --git a/pb/rendezvous.proto b/pb/rendezvous.proto index b4dfc41..d7341e9 100644 --- a/pb/rendezvous.proto +++ b/pb/rendezvous.proto @@ -16,7 +16,6 @@ message Message { E_INVALID_NAMESPACE = 100; E_INVALID_PEER_INFO = 101; E_INVALID_TTL = 102; - E_INVALID_COOKIE = 103; E_NOT_AUTHORIZED = 200; E_INTERNAL_ERROR = 300; E_UNAVAILABLE = 400; @@ -47,12 +46,10 @@ message Message { message Discover { string ns = 1; int64 limit = 2; - bytes cookie = 3; } message DiscoverResponse { repeated Register registrations = 1; - bytes cookie = 2; ResponseStatus status = 3; string statusText = 4; } diff --git a/proto.go b/proto.go index 514f703..20f99db 100644 --- a/proto.go +++ b/proto.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" - db "github.com/status-im/go-libp2p-rendezvous/db" pb "github.com/status-im/go-libp2p-rendezvous/pb" logging "github.com/ipfs/go-log/v2" @@ -32,14 +31,14 @@ func (e RendezvousError) Error() string { func newRegisterMessage(ns string, pi peer.AddrInfo, ttl int) *pb.Message { msg := new(pb.Message) - msg.Type = pb.Message_REGISTER.Enum() + msg.Type = pb.Message_REGISTER msg.Register = new(pb.Message_Register) if ns != "" { - msg.Register.Ns = &ns + msg.Register.Ns = ns } if ttl > 0 { ttl64 := int64(ttl) - msg.Register.Ttl = &ttl64 + msg.Register.Ttl = ttl64 } msg.Register.Peer = new(pb.Message_PeerInfo) msg.Register.Peer.Id = []byte(pi.ID) @@ -52,28 +51,25 @@ func newRegisterMessage(ns string, pi peer.AddrInfo, ttl int) *pb.Message { func newUnregisterMessage(ns string, pid peer.ID) *pb.Message { msg := new(pb.Message) - msg.Type = pb.Message_UNREGISTER.Enum() + msg.Type = pb.Message_UNREGISTER msg.Unregister = new(pb.Message_Unregister) if ns != "" { - msg.Unregister.Ns = &ns + msg.Unregister.Ns = ns } msg.Unregister.Id = []byte(pid) return msg } -func newDiscoverMessage(ns string, limit int, cookie []byte) *pb.Message { +func newDiscoverMessage(ns string, limit int) *pb.Message { msg := new(pb.Message) - msg.Type = pb.Message_DISCOVER.Enum() + msg.Type = pb.Message_DISCOVER msg.Discover = new(pb.Message_Discover) if ns != "" { - msg.Discover.Ns = &ns + msg.Discover.Ns = ns } if limit > 0 { limit64 := int64(limit) - msg.Discover.Limit = &limit64 - } - if cookie != nil { - msg.Discover.Cookie = cookie + msg.Discover.Limit = limit64 } return msg } @@ -103,44 +99,43 @@ func pbToPeerInfo(p *pb.Message_PeerInfo) (peer.AddrInfo, error) { func newRegisterResponse(ttl int) *pb.Message_RegisterResponse { ttl64 := int64(ttl) r := new(pb.Message_RegisterResponse) - r.Status = pb.Message_OK.Enum() - r.Ttl = &ttl64 + r.Status = pb.Message_OK + r.Ttl = ttl64 return r } func newRegisterResponseError(status pb.Message_ResponseStatus, text string) *pb.Message_RegisterResponse { r := new(pb.Message_RegisterResponse) - r.Status = status.Enum() - r.StatusText = &text + r.Status = status + r.StatusText = text return r } -func newDiscoverResponse(regs []db.RegistrationRecord, cookie []byte) *pb.Message_DiscoverResponse { +func newDiscoverResponse(regs []RegistrationRecord) *pb.Message_DiscoverResponse { r := new(pb.Message_DiscoverResponse) - r.Status = pb.Message_OK.Enum() + r.Status = pb.Message_OK rregs := make([]*pb.Message_Register, len(regs)) for i, reg := range regs { rreg := new(pb.Message_Register) rns := reg.Ns - rreg.Ns = &rns + rreg.Ns = rns rreg.Peer = new(pb.Message_PeerInfo) rreg.Peer.Id = []byte(reg.Id) rreg.Peer.Addrs = reg.Addrs rttl := int64(reg.Ttl) - rreg.Ttl = &rttl + rreg.Ttl = rttl rregs[i] = rreg } r.Registrations = rregs - r.Cookie = cookie return r } func newDiscoverResponseError(status pb.Message_ResponseStatus, text string) *pb.Message_DiscoverResponse { r := new(pb.Message_DiscoverResponse) - r.Status = status.Enum() - r.StatusText = &text + r.Status = status + r.StatusText = text return r } diff --git a/storage.go b/storage.go new file mode 100644 index 0000000..641907d --- /dev/null +++ b/storage.go @@ -0,0 +1,150 @@ +package rendezvous + +import ( + "bytes" + "crypto/rand" + "encoding/gob" + "time" + + "github.com/libp2p/go-libp2p-core/peer" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/util" +) + +const ( + RecordsPrefix byte = 1 + iota + + TopicBodyDelimiter = 0xff +) + +type RegistrationRecord struct { + Id peer.ID + Addrs [][]byte + Ns string + Ttl int + Deadline time.Time +} + +// TopicPart looks for TopicBodyDelimiter and returns topic prefix from the same key. +// It doesn't allocate memory for topic prefix. +func TopicPart(key []byte) []byte { + idx := bytes.IndexByte(key, TopicBodyDelimiter) + if idx == -1 { + return nil + } + return key[1:idx] // first byte is RecordsPrefix +} + +type RecordsKey []byte + +func NewRecordsKey(ns string, id peer.ID) RecordsKey { + key := make(RecordsKey, 2+len([]byte(ns))+len(id)) + key[0] = RecordsPrefix + copy(key[1:], []byte(ns)) + key[1+len([]byte(ns))] = TopicBodyDelimiter + copy(key[2+len([]byte(ns)):], id) + return key +} + +func (k RecordsKey) SamePrefix(prefix []byte) bool { + return bytes.Equal(k[:len(prefix)], prefix) +} + +func (k RecordsKey) String() string { + return string(k) +} + +// NewStorage creates instance of the storage. +func NewStorage(db *leveldb.DB) Storage { + return Storage{ + db: db, + } +} + +// Storage manages records. +type Storage struct { + db *leveldb.DB +} + +// Add stores record using specified topic. +func (s Storage) Add(ns string, id peer.ID, addrs [][]byte, ttl int, deadline time.Time) (string, error) { + key := NewRecordsKey(ns, id) + stored := RegistrationRecord{ + Id: id, + Addrs: addrs, + Ttl: ttl, + Ns: ns, + Deadline: deadline, + } + + var data bytes.Buffer + encoder := gob.NewEncoder(&data) + + err := encoder.Encode(stored) + if err != nil { + return "", err + } + return key.String(), s.db.Put(key, data.Bytes(), nil) +} + +// RemoveBykey removes record from storage. +func (s *Storage) RemoveByKey(key string) error { + return s.db.Delete([]byte(key), nil) +} + +func (s *Storage) IterateAllKeys(iterator func(key RecordsKey, Deadline time.Time) error) error { + iter := s.db.NewIterator(util.BytesPrefix([]byte{RecordsPrefix}), nil) + defer iter.Release() + + for iter.Next() { + var stored RegistrationRecord + data := bytes.NewBuffer(iter.Value()) + decoder := gob.NewDecoder(data) + if err := decoder.Decode(&stored); err != nil { + return err + } + if err := iterator(RecordsKey(iter.Key()), stored.Deadline); err != nil { + return err + } + } + return nil +} + +// GetRandom reads random records for specified topic up to specified limit. +func (s *Storage) GetRandom(ns string, limit int64) (rst []RegistrationRecord, err error) { + prefixlen := 1 + len([]byte(ns)) + key := make(RecordsKey, prefixlen+32) + key[0] = RecordsPrefix + copy(key[1:], []byte(ns)) + key[prefixlen] = TopicBodyDelimiter + prefixlen++ + + iter := s.db.NewIterator(util.BytesPrefix(key[:prefixlen]), nil) + defer iter.Release() + uids := map[string]struct{}{} + // it might be too much cause we do crypto/rand.Read. requires profiling + for i := int64(0); i < limit*limit && len(rst) < int(limit); i++ { + if _, err := rand.Read(key[prefixlen:]); err != nil { + return nil, err + } + iter.Seek(key) + for _, f := range []func() bool{iter.Prev, iter.Next} { + if f() && key.SamePrefix(iter.Key()[:prefixlen]) { + var stored RegistrationRecord + data := bytes.NewBuffer(iter.Value()) + decoder := gob.NewDecoder(data) + if err = decoder.Decode(&stored); err != nil { + return nil, err + } + k := iter.Key() + if _, exist := uids[string(k)]; exist { + continue + } + uids[string(k)] = struct{}{} + rst = append(rst, stored) + break + } + } + } + return rst, nil +} diff --git a/svc.go b/svc.go index ab1bbe3..66fb2f1 100644 --- a/svc.go +++ b/svc.go @@ -1,7 +1,9 @@ package rendezvous import ( - db "github.com/status-im/go-libp2p-rendezvous/db" + "sync" + "time" + pb "github.com/status-im/go-libp2p-rendezvous/pb" ggio "github.com/gogo/protobuf/io" @@ -13,28 +15,98 @@ import ( const ( MaxTTL = 20 // 20sec + networkDelay = 500 * time.Millisecond + cleanerPeriod = 2 * time.Second MaxNamespaceLength = 256 MaxPeerAddressLength = 2048 - MaxRegistrations = 1000 - MaxDiscoverLimit = 1000 + MaxDiscoverLimit = int64(1000) ) type RendezvousService struct { - DB db.DB - rzs []RendezvousSync + h host.Host + storage Storage + cleaner *Cleaner + rzs []RendezvousSync + wg sync.WaitGroup + quit chan struct{} } type RendezvousSync interface { - Register(p peer.ID, ns string, addrs [][]byte, ttl int, counter uint64) + Register(p peer.ID, ns string, addrs [][]byte, ttl int) Unregister(p peer.ID, ns string) } -func NewRendezvousService(host host.Host, db db.DB, rzs ...RendezvousSync) *RendezvousService { - rz := &RendezvousService{DB: db, rzs: rzs} - host.SetStreamHandler(RendezvousProto, rz.handleStream) +func NewRendezvousService(host host.Host, storage Storage, rzs ...RendezvousSync) *RendezvousService { + rz := &RendezvousService{ + storage: storage, + h: host, + cleaner: NewCleaner(), + rzs: rzs, + } + return rz } +func (rz *RendezvousService) Start() error { + rz.h.SetStreamHandler(RendezvousProto, rz.handleStream) + + if err := rz.startCleaner(); err != nil { + return err + } + // once server is restarted all cleaner info is lost. so we need to rebuild it + return rz.storage.IterateAllKeys(func(key RecordsKey, deadline time.Time) error { + if !rz.cleaner.Exist(key.String()) { + ns := TopicPart(key) + log.Debugf("active registration with", "ns", string(ns)) + } + rz.cleaner.Add(deadline, key.String()) + return nil + }) +} + +func (rz *RendezvousService) startCleaner() error { + rz.quit = make(chan struct{}) + rz.wg.Add(1) + go func() { + for { + select { + case <-time.After(cleanerPeriod): + rz.purgeOutdated() + case <-rz.quit: + rz.wg.Done() + return + } + } + }() + return nil +} + +// Stop closes listener and waits till all helper goroutines are stopped. +func (rz *RendezvousService) Stop() { + if rz.quit == nil { + return + } + select { + case <-rz.quit: + return + default: + } + close(rz.quit) + rz.wg.Wait() +} + +func (rz *RendezvousService) purgeOutdated() { + keys := rz.cleaner.PopSince(time.Now()) + log.Info("removed records from cleaner", "deadlines", len(rz.cleaner.deadlines), "heap", len(rz.cleaner.heap), "lth", len(keys)) + for _, key := range keys { + topic := TopicPart([]byte(key)) + log.Debug("Removing record with", "topic", string(topic)) + if err := rz.storage.RemoveByKey(key); err != nil { + log.Error("error removing key from storage", "key", key, "error", err) + } + } +} + func (rz *RendezvousService) handleStream(s inet.Stream) { defer s.Reset() @@ -57,7 +129,7 @@ func (rz *RendezvousService) handleStream(s inet.Stream) { switch t { case pb.Message_REGISTER: r := rz.handleRegister(pid, req.GetRegister()) - res.Type = pb.Message_REGISTER_RESPONSE.Enum() + res.Type = pb.Message_REGISTER_RESPONSE res.RegisterResponse = r err = w.WriteMsg(&res) if err != nil { @@ -67,7 +139,7 @@ func (rz *RendezvousService) handleStream(s inet.Stream) { case pb.Message_DISCOVER: r := rz.handleDiscover(pid, req.GetDiscover()) - res.Type = pb.Message_DISCOVER_RESPONSE.Enum() + res.Type = pb.Message_DISCOVER_RESPONSE res.DiscoverResponse = r err = w.WriteMsg(&res) if err != nil { @@ -98,6 +170,7 @@ func (rz *RendezvousService) handleRegister(p peer.ID, m *pb.Message_Register) * } mpid := mpi.GetId() + var mp peer.ID if mpid != nil { mp, err := peer.IDFromBytes(mpid) if err != nil { @@ -136,31 +209,24 @@ func (rz *RendezvousService) handleRegister(p peer.ID, m *pb.Message_Register) * ttl = int(mttl) } - // now check how many registrations we have for this peer -- simple limit to defend - // against trivial DoS attacks (eg a peer connects and keeps registering until it - // fills our db) - rcount, err := rz.DB.CountRegistrations(p) + deadline := time.Now().Add(time.Duration(ttl)).Add(networkDelay) + + key, err := rz.storage.Add(ns, mp, maddrs, ttl, deadline) if err != nil { - log.Errorf("Error counting registrations: %s", err.Error()) - return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, "database error") + return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, err.Error()) } - if rcount > MaxRegistrations { - log.Warningf("Too many registrations for %s", p) - return newRegisterResponseError(pb.Message_E_NOT_AUTHORIZED, "too many registrations") + if !rz.cleaner.Exist(key) { + log.Debugf("active registration with", "ns", ns) } - // ok, seems like we can register - counter, err := rz.DB.Register(p, ns, maddrs, ttl) - if err != nil { - log.Errorf("Error registering: %s", err.Error()) - return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, "database error") - } + log.Debugf("updating record in the cleaner", "deadline", deadline, "ns", ns) + rz.cleaner.Add(deadline, key) log.Infof("registered peer %s %s (%d)", p, ns, ttl) for _, rzs := range rz.rzs { - rzs.Register(p, ns, maddrs, ttl, counter) + rzs.Register(p, ns, maddrs, ttl) } return newRegisterResponse(ttl) @@ -176,21 +242,16 @@ func (rz *RendezvousService) handleDiscover(p peer.ID, m *pb.Message_Discover) * limit := MaxDiscoverLimit mlimit := m.GetLimit() if mlimit > 0 && mlimit < int64(limit) { - limit = int(mlimit) + limit = mlimit } - cookie := m.GetCookie() - if cookie != nil && !rz.DB.ValidCookie(ns, cookie) { - return newDiscoverResponseError(pb.Message_E_INVALID_COOKIE, "bad cookie") - } - - regs, cookie, err := rz.DB.Discover(ns, cookie, limit) + records, err := rz.storage.GetRandom(ns, limit) if err != nil { log.Errorf("Error in query: %s", err.Error()) return newDiscoverResponseError(pb.Message_E_INTERNAL_ERROR, "database error") } - log.Infof("discover query: %s %s -> %d", p, ns, len(regs)) + log.Infof("discover query: %s %s -> %d", p, ns, len(records)) - return newDiscoverResponse(regs, cookie) + return newDiscoverResponse(records) } diff --git a/svc_test.go b/svc_test.go index 4623253..a35ca6b 100644 --- a/svc_test.go +++ b/svc_test.go @@ -1,5 +1,6 @@ package rendezvous +/* import ( "context" "fmt" @@ -343,3 +344,4 @@ func doTestRequest(ctx context.Context, host host.Host, rp peer.ID, m *pb.Messag return res, nil } +*/