* move host/relay to host/autorelay
* move autorelay wrapper host to package
* support v2 relays in autorelay
* test autorelay with both v1 and v2 relays
* fix test race
* go mod tidy examples/pubsub/chat
static checker complains; sigh.
* refactor reservation refresh loop
* merge background and refresh goroutines
* handle pushes synchronously from reservation refresh failures
* make connmanager tag a package level constant
* dont sleep to wait for identify, use IdentifyWait
* make relay protocol ids package-level constants
* add comment about v1 relays not having reservations
* use errgrp instead of WaitGroup with atomic int
* fix variable capture bug
* go get x/sync
* move the current mdns discovery implementation to discovery_legacy
* use libp2p/zeroconf for mDNS discovery
* rename the discovery package to mdns
* don't store the context
* use a wait group for clean shutdown of the mdns resolver
* add comment about port numbers
* move the mdns packages p2p/discovery
* v2 client scaffolding
* gomod: go-libp2p-core and go-libp2p-transport-upgrader feature dependencies
* Conn implements network.ConnStat
* add reservation stub
* utilities
* dial scaffolding and v1 compat dialing
* stream handling scaffolding and v1 incoming connection handling
* implement hop tagging
* export timeout variables
* v2 protobuf
* v2 client protocol implementation
* implement Reserve
* go get go-libp2p-swarm@feat/transient-conns
* implement client.New
* rework pb status codes
* client responds with UNEXPECTED_MESSAGE when it's actually an unexpected message
* relay scaffolding, reservation implementation
* implement relaying
* implement missing details
* add options for resources/limit
* gc idle conn counts
* fix clown shoes in cancellation check
* end to end relay test
* untag peers with expired reservations
* add time limit test
* better debug log for accepted conns
* add data limit test
* add v2-v1 compatibility tests
* godocs
* add WithACL relay option
* only return public relay addrs in reservation record
* remove the refresh restriction madness
* set default limit Data to 128K
* fix typo in AllowReserve godoc
* fix some small issues
- remove context from constructor
- remove stream handler when closing the host
- remove the awkward cancellation check from handleStream
* fix tests
* address review comments
- Add deadline for Reserve calls
- Add deadline for dials
- Add some comments for things that confuse aarsh.
* humor aarsh and add initializers for slices
* comment nitpicks
* fix bug in slice pre-allocations
* add deadline to connectV1
* make Relay.Close thread-safe
* untag peers with reservations when closing the relay
* gomod: get go-libp2p-asn-util
* add IP/ASN reservation constraints
* gomod: update deps
* fix e2e test
* increase default limit duration to 2min
* update protocol for vouched relay addrs; provide absolute expiration time instead of TTL
* update for reservation changes
* add voucher to the reservation pb
* TODO about reservation vouchers
* deduplicate protocol ID definitions between relay and client
* add reservation vouchers
* emit and consume reservation vouchers
* improve limit data test
* deduplicate concurrent relay dials to the samke peer
* improve dialer deduplication
* add a short timeout to dialing the relay in order to aid deduplication
* gomod: fix go1.16 madness
* spec compliance: don't include p2p-circuit in reservation addrs
* spec compliance: refuse reservation and connection attempts over relayed connections
* test shim: add empty file in test directory
* spec compliance: update protobuf
* spec compliance: use libp2p envelopes for reservation vouchers
* fix staticcheck
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
Fixes an issue where, when using peerstore.UpdateAddrs to set the "TTL"
to 0, the specified addresses might subsequently be returned from
peerstore.Addrs.
This patch updates go-libp2p for the stream interface changes in go-libp2p-core
0.7.0. This is a _significant_ breaking change to streams and all users should
read https://github.com/libp2p/go-libp2p-core/releases/tag/v0.7.0. In practice,
this change should remove a significant footgun.
TL;DR:
* `Stream.Close` now behaves like `net.TCPConn.Close`.
* There is a new `Stream.CloseWrite` (send an EOF) and `Stream.CloseRead` (close
for reading), behaving like their counterparts in `net.TCPConn`.
This is a backwards incompatible change and will require a major version bump
plus an announcement. Users can choose to re-enable SECIO by passing
`libp2p.Security(secio.ID, secio.New)` to the constructor.
* Updates yamux to reduce lock contention.
* Updates the peerstore to remove an issue where we'd forget our peer's addresses instead of extending the TTL.
0. NEVER call `peerstore.SetProtocols(p)` (clear the protocol set). Given the
new identify events, if someone looked in the peerstore at the wrong time, they
could decide that the peer no longer speaks some protocol.
1. Reliably wait for identify before trying to open a stream. The old logic was
_really_ racy.
2. Avoids potentially calling identify on the same connection multiple times.
3. Calls identify as early as possible. Previously, we'd invoke identify on
inbound connections using an event that was only invoked _after_ all `Connected`
event handlers completed. Now we invoke identify from a `Connected` handler.