Commit c0e2b930 authored by Jeromy's avatar Jeromy
Browse files

update multistream deps and fix code to work with new changes

parent 5b9cd671
......@@ -5,7 +5,6 @@ import (
"fmt"
"io/ioutil"
"log"
"time"
pstore "github.com/ipfs/go-libp2p-peerstore"
host "github.com/ipfs/go-libp2p/p2p/host"
......
......@@ -114,7 +114,8 @@ func (h *BasicHost) newStreamHandler(s inet.Stream) {
logStream := mstream.WrapStream(s, protocol.ID(protoID), h.bwc)
go handle(logStream)
s.SetProtocol(protoID)
go handle(protoID, logStream)
}
// ID returns the (local) peer.ID associated with this Host
......@@ -147,8 +148,10 @@ func (h *BasicHost) IDService() *identify.IDService {
// host.Mux().SetHandler(proto, handler)
// (Threadsafe)
func (h *BasicHost) SetStreamHandler(pid protocol.ID, handler inet.StreamHandler) {
h.Mux().AddHandler(string(pid), func(rwc io.ReadWriteCloser) error {
handler(rwc.(inet.Stream))
h.Mux().AddHandler(string(pid), func(p string, rwc io.ReadWriteCloser) error {
is := rwc.(inet.Stream)
is.SetProtocol(p)
handler(is)
return nil
})
}
......
......@@ -23,7 +23,7 @@ import (
)
func goroFilter(r *grc.Goroutine) bool {
return strings.Contains(r.Function, "go-log.")
return strings.Contains(r.Function, "go-log.") || strings.Contains(r.Stack[0], "testing.(*T).Run")
}
func echoListen(ctx context.Context, listener Listener) {
......
......@@ -26,6 +26,9 @@ type Stream interface {
io.Writer
io.Closer
Protocol() string
SetProtocol(string)
// Conn returns the connection this stream is part of.
Conn() Conn
}
......
......@@ -16,6 +16,8 @@ type stream struct {
conn *conn
toDeliver chan *transportObject
proc process.Process
protocol string
}
type transportObject struct {
......@@ -48,6 +50,14 @@ func (s *stream) Write(p []byte) (n int, err error) {
return len(p), nil
}
func (s *stream) Protocol() string {
return s.protocol
}
func (s *stream) SetProtocol(proto string) {
s.protocol = proto
}
func (s *stream) Close() error {
return s.proc.Close()
}
......
......@@ -340,9 +340,9 @@ func (n *ps2netNotifee) Disconnected(c *ps.Conn) {
}
func (n *ps2netNotifee) OpenedStream(s *ps.Stream) {
n.not.OpenedStream(n.net, inet.Stream((*Stream)(s)))
n.not.OpenedStream(n.net, &Stream{stream: s})
}
func (n *ps2netNotifee) ClosedStream(s *ps.Stream) {
n.not.ClosedStream(n.net, inet.Stream((*Stream)(s)))
n.not.ClosedStream(n.net, &Stream{stream: s})
}
......@@ -10,6 +10,12 @@ import (
context "golang.org/x/net/context"
)
func streamsSame(a, b inet.Stream) bool {
sa := a.(*Stream)
sb := b.(*Stream)
return sa.Stream() == sb.Stream()
}
func TestNotifications(t *testing.T) {
ctx := context.Background()
swarms := makeSwarms(ctx, t, 5)
......@@ -98,7 +104,7 @@ func TestNotifications(t *testing.T) {
case <-time.After(timeout):
t.Fatal("timeout")
}
if s != s2 {
if !streamsSame(s, s2) {
t.Fatal("got incorrect stream", s.Conn(), s2.Conn())
}
......@@ -108,7 +114,7 @@ func TestNotifications(t *testing.T) {
case <-time.After(timeout):
t.Fatal("timeout")
}
if s != s2 {
if !streamsSame(s, s2) {
t.Fatal("got incorrect stream", s.Conn(), s2.Conn())
}
}
......
......@@ -8,11 +8,14 @@ import (
// a Stream is a wrapper around a ps.Stream that exposes a way to get
// our Conn and Swarm (instead of just the ps.Conn and ps.Swarm)
type Stream ps.Stream
type Stream struct {
stream *ps.Stream
protocol string
}
// Stream returns the underlying peerstream.Stream
func (s *Stream) Stream() *ps.Stream {
return (*ps.Stream)(s)
return s.stream
}
// Conn returns the Conn associated with this Stream, as an inet.Conn
......@@ -22,27 +25,37 @@ func (s *Stream) Conn() inet.Conn {
// SwarmConn returns the Conn associated with this Stream, as a *Conn
func (s *Stream) SwarmConn() *Conn {
return (*Conn)(s.Stream().Conn())
return (*Conn)(s.stream.Conn())
}
// Read reads bytes from a stream.
func (s *Stream) Read(p []byte) (n int, err error) {
return s.Stream().Read(p)
return s.stream.Read(p)
}
// Write writes bytes to a stream, flushing for each call.
func (s *Stream) Write(p []byte) (n int, err error) {
return s.Stream().Write(p)
return s.stream.Write(p)
}
// Close closes the stream, indicating this side is finished
// with the stream.
func (s *Stream) Close() error {
return s.Stream().Close()
return s.stream.Close()
}
func (s *Stream) Protocol() string {
return s.protocol
}
func (s *Stream) SetProtocol(p string) {
s.protocol = p
}
func wrapStream(pss *ps.Stream) *Stream {
return (*Stream)(pss)
return &Stream{
stream: pss,
}
}
func wrapStreams(st []*ps.Stream) []*Stream {
......
......@@ -34,9 +34,9 @@
"version": "1.0.0"
},
{
"hash": "Qmf91yhgRLo2dhhbc5zZ7TxjMaR1oxaWaoc9zRZdi1kU4a",
"hash": "Qmc8WfU6Ci9e1qvTNYE3EUwrHEXfpxY7dNrWtVtjpYcp2P",
"name": "go-multistream",
"version": "0.0.0"
"version": "0.1.0"
},
{
"hash": "QmNLvkCDV6ZjUJsEwGNporYBuZdhWT6q7TBVYQwwRv12HT",
......@@ -171,9 +171,9 @@
},
{
"author": "whyrusleeping",
"hash": "QmVcmcQE9eX4HQ8QwhVXpoHt3ennG7d299NDYFq9D1Uqa1",
"hash": "QmRbnoT3xJXpi37Vc11e6VYV4RXKWUMsZtfbBQkR43377P",
"name": "go-smux-multistream",
"version": "1.0.0"
"version": "1.1.0"
},
{
"author": "whyrusleeping",
......
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