Commit f9cd03e6 authored by Jeromy's avatar Jeromy
Browse files

allow hosts example to use secio

parent cab16ee4
...@@ -6,12 +6,11 @@ import ( ...@@ -6,12 +6,11 @@ import (
"io/ioutil" "io/ioutil"
"log" "log"
peer "github.com/ipfs/go-libp2p-peer"
pstore "github.com/ipfs/go-libp2p-peerstore" pstore "github.com/ipfs/go-libp2p-peerstore"
host "github.com/libp2p/go-libp2p/p2p/host" host "github.com/libp2p/go-libp2p/p2p/host"
bhost "github.com/libp2p/go-libp2p/p2p/host/basic" bhost "github.com/libp2p/go-libp2p/p2p/host/basic"
metrics "github.com/libp2p/go-libp2p/p2p/metrics"
net "github.com/libp2p/go-libp2p/p2p/net" net "github.com/libp2p/go-libp2p/p2p/net"
conn "github.com/libp2p/go-libp2p/p2p/net/conn"
swarm "github.com/libp2p/go-libp2p/p2p/net/swarm" swarm "github.com/libp2p/go-libp2p/p2p/net/swarm"
testutil "github.com/libp2p/go-libp2p/testutil" testutil "github.com/libp2p/go-libp2p/testutil"
...@@ -20,29 +19,38 @@ import ( ...@@ -20,29 +19,38 @@ import (
context "golang.org/x/net/context" context "golang.org/x/net/context"
) )
func init() {
// Disable secio for this demo
// This makes testing with javascript easier
conn.EncryptConnections = false
}
// create a 'Host' with a random peer to listen on the given address // create a 'Host' with a random peer to listen on the given address
func makeDummyHost(listen string) (host.Host, error) { func makeDummyHost(listen string, secio bool) (host.Host, error) {
addr, err := ma.NewMultiaddr(listen) addr, err := ma.NewMultiaddr(listen)
if err != nil { if err != nil {
return nil, err return nil, err
} }
pid, err := testutil.RandPeerID() ps := pstore.NewPeerstore()
if err != nil { var pid peer.ID
return nil, err
if secio {
ident, err := testutil.RandIdentity()
if err != nil {
return nil, err
}
ident.PrivateKey()
ps.AddPrivKey(ident.ID(), ident.PrivateKey())
ps.AddPubKey(ident.ID(), ident.PublicKey())
pid = ident.ID()
} else {
fakepid, err := testutil.RandPeerID()
if err != nil {
return nil, err
}
pid = fakepid
} }
// bandwidth counter, should be optional in the future ctx := context.Background()
bwc := metrics.NewBandwidthCounter()
// create a new swarm to be used by the service host // create a new swarm to be used by the service host
netw, err := swarm.NewNetwork(context.Background(), []ma.Multiaddr{addr}, pid, pstore.NewPeerstore(), bwc) netw, err := swarm.NewNetwork(ctx, []ma.Multiaddr{addr}, pid, ps, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -52,25 +60,23 @@ func makeDummyHost(listen string) (host.Host, error) { ...@@ -52,25 +60,23 @@ func makeDummyHost(listen string) (host.Host, error) {
} }
func main() { func main() {
listenF := flag.Int("l", 0, "wait for incoming connections") listenF := flag.Int("l", 0, "wait for incoming connections")
target := flag.String("d", "", "target peer to dial") target := flag.String("d", "", "target peer to dial")
secio := flag.Bool("secio", false, "enable secio")
flag.Parse() flag.Parse()
listenaddr := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", *listenF) listenaddr := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", *listenF)
ha, err := makeDummyHost(listenaddr) ha, err := makeDummyHost(listenaddr, *secio)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
message := []byte("hello libp2p!")
// Set a stream handler on host A // Set a stream handler on host A
ha.SetStreamHandler("/hello/1.0.0", func(s net.Stream) { ha.SetStreamHandler("/echo/1.0.0", func(s net.Stream) {
log.Println("Got a new stream!")
defer s.Close() defer s.Close()
log.Println("writing message")
s.Write(message)
}) })
if *target == "" { if *target == "" {
...@@ -102,7 +108,11 @@ func main() { ...@@ -102,7 +108,11 @@ func main() {
log.Fatalln(err) log.Fatalln(err)
} }
log.Println("reading message") _, err = s.Write([]byte("Hello world of peer two peer"))
if err != nil {
log.Fatalln(err)
}
out, err := ioutil.ReadAll(s) out, err := ioutil.ReadAll(s)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
...@@ -110,3 +120,21 @@ func main() { ...@@ -110,3 +120,21 @@ func main() {
log.Println("GOT: ", string(out)) log.Println("GOT: ", string(out))
} }
func doEcho(s inet.Stream) {
buf := make([]byte, 1024)
for {
n, err := s.Read(buf)
if err != nil {
log.Println(err)
return
}
log.Printf("read data: %q\n", buf[:n])
_, err = s.Write(buf[:n])
if err != nil {
log.Println(err)
return
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment