* Remove duplicate `SetProtocol` call
* Don't log if transport ErrListenerClosed
* Close the conn scope in webtransport dial
* Mock resource scope span
* Add transport rcmgr integration test
* PR nits
* Fix flakiness
* Threadsafe way of waiting for all streams
* Expand comment
* Add helpers to transform webtransport multiaddrs in AddrsFactory
* Remove unused line
* PR nits
* Add wrapper around AddrsFactory to fill in missing certhash
* PR nits
* Handle WebTransport multiaddrs in observed addr manager
* Remove unneccessary change
* Remove unused func
* Use SplitLast
* Add comment
* Clone multiaddr before splitting last
* Revert "Clone multiaddr before splitting last"
This reverts commit f168a8e8b6.
* Wait for certmanager to be instantiated
* Copy addrs slice before modifying
* Fix stalled test
* pass an event bus to the swarm constructor
* make the eventbus parameter a required swarm constructor parameter
* emit Connectedness notifications from the swarm
* remove peer connectedness watchers from hosts
* swarm: emit connectedness events when holding the mutex
* identify: cache the snapshot
* identify: refactor sending of Identify pushes
* identify: fix concurrency when sending pushes
* identify: fix timestamp handling
* identify: remove unneeded pushSemaphore
* identify: improve logging
* identify: use a sequence number instead of a timestamp
* identify: start with an empty snapshot
* identify: wait until we've actually finished setting up
* Change PeerStore interface to use protocol.ID
This reduces the string to protocol.ID translations happening
at various places in the code
* Fix misc cases of protocol.ID conversion
* Merge multistream changes
* Use protocol.ID in network.ConnectionState
* don't update examples
* fix error message tests
* merge new go-multistream changes
* update test-plans go mod
* change transport back to string
* Add Resolver interface to transport
* Move resolve test to swarm_dial_test
* Use proper peer id in test
* Only import go-multiaddr once
* Cleanup
* Use SNI in websocket
* Update go-multiaddr
* Update p2p/net/swarm/swarm.go
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
* PR comments on websocket.go
* Use unresolved/resolved map
* Set sni
* Refactor websocket multiaddr parsing code, add server test
* Delete superflous helpers
* Update callsites
* Fix typo in p2p/transport/websocket/websocket.go
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
* bump go.mod to Go 1.18 and run go fix
* bump go.mod to Go 1.18 and run go fix
* bump go.mod to Go 1.18 and run go fix
* bump go.mod to Go 1.18 and run go fix
* run gofmt -s
* update .github/workflows/go-test.yml
* update .github/workflows/go-check.yml
* stop using the deprecated io/ioutil package
Co-authored-by: web3-bot <web3-bot@users.noreply.github.com>
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
When a host is closed, it should close its resource manager. Otherwise, goroutines are leaked.
Generally this is not a problem when a host exists for the life of a program, but can be a problem if hosts are created and closed.
* Resolve addresses when creating a new stream
BasicHost.NewStream will try to establish a connection if one doesn't already exist. This will fail if the hosts addresses have not yet been resolved. This PR resolves the hosts addresses before creating the stream and possible new connection.
Fixes#1302
* Changes from review comments
* hole punching protocol
* implement the new retry logic (opening a new stream per hole punch)
* rename the holepunch.HolePunchService to holepunch.Service
* remove stream handler when closing
* remove misleading comment from protobuf, add link to spec
* remove unnecessary netNotifiee.HolePunchService
* simplify receiving from the timer channel
* don't defer the closing of the hole punching stream
* only accept hole punch streams from relayed peers
* refactor error logging
* fix incorrect counting of incoming hole punch attempts
* rename HolePunch to DirectConnect
* fix usage of the wait group to close the hole punch service
* use a gc to the garbage collect the holepunch tracer
* check directionality of connection when accepting the hole punch stream
* add comment why we only call Connect once
* move deduplication logic to the holepunch service
Co-authored-by: aarshkshah1992 <aarshkshah1992@gmail.com>
Unfortunately, lotus relies on this and we don't have a good alternative
at the moment.
1. The "correct" way to get the status is to subscribe to the
"discoverability" events and read the first event (you're guaranteed to
see a "current status" event). However, this is a bit annoying.
2. Ideally, you'd call host.Addrs() to get the list of "good" addresses.
Unfortunately, we don't feed enough information back into the Host from
AutoNAT for this to be truly useful (yet).