mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 14:16:21 +00:00
eeca435064
Update vendor Integrate rendezvous into status node Add a test with failover using rendezvous Use multiple servers in client Use discovery V5 by default and test that node can be started with rendezvous discovet Fix linter Update rendezvous client to one with instrumented stream Address feedback Fix test with updated topic limits Apply several suggestions Change log to debug for request errors because we continue execution Remove web3js after rebase Update rendezvous package
74 lines
1.3 KiB
Go
74 lines
1.3 KiB
Go
package websocket
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/url"
|
|
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
manet "github.com/multiformats/go-multiaddr-net"
|
|
)
|
|
|
|
// Addr is an implementation of net.Addr for WebSocket.
|
|
type Addr struct {
|
|
*url.URL
|
|
}
|
|
|
|
var _ net.Addr = (*Addr)(nil)
|
|
|
|
// Network returns the network type for a WebSocket, "websocket".
|
|
func (addr *Addr) Network() string {
|
|
return "websocket"
|
|
}
|
|
|
|
// NewAddr creates a new Addr using the given host string
|
|
func NewAddr(host string) *Addr {
|
|
return &Addr{
|
|
URL: &url.URL{
|
|
Host: host,
|
|
},
|
|
}
|
|
}
|
|
|
|
func ConvertWebsocketMultiaddrToNetAddr(maddr ma.Multiaddr) (net.Addr, error) {
|
|
_, host, err := manet.DialArgs(maddr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewAddr(host), nil
|
|
}
|
|
|
|
func ParseWebsocketNetAddr(a net.Addr) (ma.Multiaddr, error) {
|
|
wsa, ok := a.(*Addr)
|
|
if !ok {
|
|
return nil, fmt.Errorf("not a websocket address")
|
|
}
|
|
|
|
tcpaddr, err := net.ResolveTCPAddr("tcp", wsa.Host)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tcpma, err := manet.FromNetAddr(tcpaddr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
wsma, err := ma.NewMultiaddr("/ws")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return tcpma.Encapsulate(wsma), nil
|
|
}
|
|
|
|
func parseMultiaddr(a ma.Multiaddr) (string, error) {
|
|
_, host, err := manet.DialArgs(a)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return "ws://" + host, nil
|
|
}
|