Browse Source

extract host interface

pull/131/head
Jeromy 8 years ago
parent
commit
1a53ad77b9
  1. 2
      examples/hosts/main.go
  2. 2
      p2p/discovery/mdns.go
  3. 2
      p2p/discovery/mdns_test.go
  4. 2
      p2p/host/basic/basic_host_test.go
  5. 70
      p2p/host/host.go
  6. 36
      p2p/host/match.go
  7. 33
      p2p/host/match_test.go
  8. 2
      p2p/host/routed/routed.go
  9. 2
      p2p/net/mock/interface.go
  10. 2
      p2p/net/mock/mock_net.go
  11. 2
      p2p/protocol/identify/id.go
  12. 4
      p2p/protocol/identify/id_test.go
  13. 2
      p2p/protocol/ping/ping.go
  14. 2
      p2p/protocol/relay/relay.go
  15. 2
      p2p/test/backpressure/backpressure_test.go
  16. 2
      p2p/test/reconnects/reconnect_test.go
  17. 6
      package.json

2
examples/hosts/main.go

@ -8,9 +8,9 @@ import (
"log"
"strings"
host "github.com/libp2p/go-libp2p-host"
inet "github.com/libp2p/go-libp2p-net"
net "github.com/libp2p/go-libp2p-net"
host "github.com/libp2p/go-libp2p/p2p/host"
bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
swarm "github.com/libp2p/go-libp2p/p2p/net/swarm"

2
p2p/discovery/mdns.go

@ -15,7 +15,7 @@ import (
logging "github.com/ipfs/go-log"
ma "github.com/jbenet/go-multiaddr"
manet "github.com/jbenet/go-multiaddr-net"
"github.com/libp2p/go-libp2p/p2p/host"
"github.com/libp2p/go-libp2p-host"
"github.com/whyrusleeping/mdns"
)

2
p2p/discovery/mdns_test.go

@ -5,7 +5,7 @@ import (
"testing"
"time"
host "github.com/libp2p/go-libp2p/p2p/host"
host "github.com/libp2p/go-libp2p-host"
netutil "github.com/libp2p/go-libp2p/p2p/test/util"
pstore "github.com/ipfs/go-libp2p-peerstore"

2
p2p/host/basic/basic_host_test.go

@ -7,9 +7,9 @@ import (
"testing"
"time"
host "github.com/libp2p/go-libp2p-host"
inet "github.com/libp2p/go-libp2p-net"
protocol "github.com/libp2p/go-libp2p-protocol"
host "github.com/libp2p/go-libp2p/p2p/host"
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
)

70
p2p/host/host.go

@ -1,70 +0,0 @@
package host
import (
"context"
peer "github.com/ipfs/go-libp2p-peer"
pstore "github.com/ipfs/go-libp2p-peerstore"
logging "github.com/ipfs/go-log"
ma "github.com/jbenet/go-multiaddr"
metrics "github.com/libp2p/go-libp2p-metrics"
inet "github.com/libp2p/go-libp2p-net"
protocol "github.com/libp2p/go-libp2p-protocol"
msmux "github.com/whyrusleeping/go-multistream"
)
var log = logging.Logger("github.com/libp2p/go-libp2p/p2p/host")
// Host is an object participating in a p2p network, which
// implements protocols or provides services. It handles
// requests like a Server, and issues requests like a Client.
// It is called Host because it is both Server and Client (and Peer
// may be confusing).
type Host interface {
// ID returns the (local) peer.ID associated with this Host
ID() peer.ID
// Peerstore returns the Host's repository of Peer Addresses and Keys.
Peerstore() pstore.Peerstore
// Returns the listen addresses of the Host
Addrs() []ma.Multiaddr
// Networks returns the Network interface of the Host
Network() inet.Network
// Mux returns the Mux multiplexing incoming streams to protocol handlers
Mux() *msmux.MultistreamMuxer
// Connect ensures there is a connection between this host and the peer with
// given peer.ID. Connect will absorb the addresses in pi into its internal
// peerstore. If there is not an active connection, Connect will issue a
// h.Network.Dial, and block until a connection is open, or an error is
// returned. // TODO: Relay + NAT.
Connect(ctx context.Context, pi pstore.PeerInfo) error
// SetStreamHandler sets the protocol handler on the Host's Mux.
// This is equivalent to:
// host.Mux().SetHandler(proto, handler)
// (Threadsafe)
SetStreamHandler(pid protocol.ID, handler inet.StreamHandler)
// SetStreamHandlerMatch sets the protocol handler on the Host's Mux
// using a matching function for protocol selection.
SetStreamHandlerMatch(protocol.ID, func(string) bool, inet.StreamHandler)
// RemoveStreamHandler removes a handler on the mux that was set by
// SetStreamHandler
RemoveStreamHandler(pid protocol.ID)
// NewStream opens a new stream to given peer p, and writes a p2p/protocol
// header with given protocol.ID. If there is no connection to p, attempts
// to create one. If ProtocolID is "", writes no header.
// (Threadsafe)
NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (inet.Stream, error)
// Close shuts down the host, its Network, and services.
Close() error
GetBandwidthReporter() metrics.Reporter
}

36
p2p/host/match.go

@ -1,36 +0,0 @@
package host
import (
"github.com/libp2p/go-libp2p-protocol"
"strings"
semver "github.com/coreos/go-semver/semver"
)
func MultistreamSemverMatcher(base protocol.ID) (func(string) bool, error) {
parts := strings.Split(string(base), "/")
vers, err := semver.NewVersion(parts[len(parts)-1])
if err != nil {
return nil, err
}
return func(check string) bool {
chparts := strings.Split(check, "/")
if len(chparts) != len(parts) {
return false
}
for i, v := range chparts[:len(chparts)-1] {
if parts[i] != v {
return false
}
}
chvers, err := semver.NewVersion(chparts[len(chparts)-1])
if err != nil {
return false
}
return vers.Major == chvers.Major && vers.Minor >= chvers.Minor
}, nil
}

33
p2p/host/match_test.go

@ -1,33 +0,0 @@
package host
import (
"testing"
)
func TestSemverMatching(t *testing.T) {
m, err := MultistreamSemverMatcher("/testing/4.3.5")
if err != nil {
t.Fatal(err)
}
cases := map[string]bool{
"/testing/4.3.0": true,
"/testing/4.3.7": true,
"/testing/4.3.5": true,
"/testing/4.2.7": true,
"/testing/4.0.0": true,
"/testing/5.0.0": false,
"/cars/dogs/4.3.5": false,
"/foo/1.0.0": false,
"": false,
"dogs": false,
"/foo": false,
"/foo/1.1.1.1": false,
}
for p, ok := range cases {
if m(p) != ok {
t.Fatalf("expected %s to be %t", p, ok)
}
}
}

2
p2p/host/routed/routed.go

@ -5,7 +5,7 @@ import (
"fmt"
"time"
host "github.com/libp2p/go-libp2p/p2p/host"
host "github.com/libp2p/go-libp2p-host"
lgbl "github.com/ipfs/go-libp2p-loggables"
peer "github.com/ipfs/go-libp2p-peer"

2
p2p/net/mock/interface.go

@ -10,7 +10,7 @@ import (
"io"
"time"
host "github.com/libp2p/go-libp2p/p2p/host"
host "github.com/libp2p/go-libp2p-host"
ic "github.com/ipfs/go-libp2p-crypto"
peer "github.com/ipfs/go-libp2p-peer"

2
p2p/net/mock/mock_net.go

@ -6,7 +6,7 @@ import (
"sort"
"sync"
host "github.com/libp2p/go-libp2p/p2p/host"
host "github.com/libp2p/go-libp2p-host"
bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
p2putil "github.com/libp2p/go-libp2p/p2p/test/util"

2
p2p/protocol/identify/id.go

@ -5,7 +5,6 @@ import (
"strings"
"sync"
host "github.com/libp2p/go-libp2p/p2p/host"
pb "github.com/libp2p/go-libp2p/p2p/protocol/identify/pb"
semver "github.com/coreos/go-semver/semver"
@ -16,6 +15,7 @@ import (
pstore "github.com/ipfs/go-libp2p-peerstore"
logging "github.com/ipfs/go-log"
ma "github.com/jbenet/go-multiaddr"
host "github.com/libp2p/go-libp2p-host"
mstream "github.com/libp2p/go-libp2p-metrics/stream"
inet "github.com/libp2p/go-libp2p-net"
msmux "github.com/whyrusleeping/go-multistream"

4
p2p/protocol/identify/id_test.go

@ -1,17 +1,17 @@
package identify_test
import (
"context"
"testing"
"time"
ic "github.com/ipfs/go-libp2p-crypto"
peer "github.com/ipfs/go-libp2p-peer"
host "github.com/libp2p/go-libp2p/p2p/host"
identify "github.com/libp2p/go-libp2p/p2p/protocol/identify"
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
"context"
ma "github.com/jbenet/go-multiaddr"
host "github.com/libp2p/go-libp2p-host"
)
func subtestIDService(t *testing.T, postDialWait time.Duration) {

2
p2p/protocol/ping/ping.go

@ -10,8 +10,8 @@ import (
u "github.com/ipfs/go-ipfs-util"
peer "github.com/ipfs/go-libp2p-peer"
logging "github.com/ipfs/go-log"
host "github.com/libp2p/go-libp2p-host"
inet "github.com/libp2p/go-libp2p-net"
host "github.com/libp2p/go-libp2p/p2p/host"
)
var log = logging.Logger("ping")

2
p2p/protocol/relay/relay.go

@ -6,7 +6,7 @@ import (
"io"
"time"
host "github.com/libp2p/go-libp2p/p2p/host"
host "github.com/libp2p/go-libp2p-host"
peer "github.com/ipfs/go-libp2p-peer"
logging "github.com/ipfs/go-log"

2
p2p/test/backpressure/backpressure_test.go

@ -10,9 +10,9 @@ import (
u "github.com/ipfs/go-ipfs-util"
peer "github.com/ipfs/go-libp2p-peer"
logging "github.com/ipfs/go-log"
host "github.com/libp2p/go-libp2p-host"
inet "github.com/libp2p/go-libp2p-net"
protocol "github.com/libp2p/go-libp2p-protocol"
host "github.com/libp2p/go-libp2p/p2p/host"
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
)

2
p2p/test/reconnects/reconnect_test.go

@ -11,9 +11,9 @@ import (
u "github.com/ipfs/go-ipfs-util"
logging "github.com/ipfs/go-log"
ps "github.com/jbenet/go-peerstream"
host "github.com/libp2p/go-libp2p-host"
inet "github.com/libp2p/go-libp2p-net"
protocol "github.com/libp2p/go-libp2p-protocol"
host "github.com/libp2p/go-libp2p/p2p/host"
swarm "github.com/libp2p/go-libp2p/p2p/net/swarm"
testutil "github.com/libp2p/go-libp2p/p2p/test/util"
)

6
package.json

@ -236,6 +236,12 @@
"hash": "QmRxzoGdQaN6HYyqWnT82NnLLHBAZbTUvxPEfTBTjU7KCn",
"name": "go-libp2p-interface-conn",
"version": "0.1.0"
},
{
"author": "whyrusleeping",
"hash": "QmaAyA9QMVdzCYHv7QJnKu4Dzk4zfnFrHw9itzP9kEUKYW",
"name": "go-libp2p-host",
"version": "1.0.0"
}
],
"gxVersion": "0.4.0",

Loading…
Cancel
Save