From 9b7fb704eff7bfbbe8fdd047090dd43b8396d5b7 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sun, 14 Dec 2014 10:59:52 -0800 Subject: [PATCH] make net/conn.Conn conform to net.Conn --- net/conn/conn.go | 20 +++++++++++++++ net/conn/interface.go | 10 ++++++++ net/conn/multiconn.go | 54 +++++++++++++++++++++++++++++++++++++++-- net/conn/secure_conn.go | 23 ++++++++++++++++++ 4 files changed, 105 insertions(+), 2 deletions(-) diff --git a/net/conn/conn.go b/net/conn/conn.go index 14ad912f5..0b8c86a19 100644 --- a/net/conn/conn.go +++ b/net/conn/conn.go @@ -2,6 +2,7 @@ package conn import ( "fmt" + "net" "time" context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" @@ -85,6 +86,25 @@ func (c *singleConn) String() string { return String(c, "singleConn") } +func (c *singleConn) LocalAddr() net.Addr { + return c.maconn.LocalAddr() +} + +func (c *singleConn) RemoteAddr() net.Addr { + return c.maconn.RemoteAddr() +} + +func (c *singleConn) SetDeadline(t time.Time) error { + return c.maconn.SetDeadline(t) +} +func (c *singleConn) SetReadDeadline(t time.Time) error { + return c.maconn.SetReadDeadline(t) +} + +func (c *singleConn) SetWriteDeadline(t time.Time) error { + return c.maconn.SetWriteDeadline(t) +} + // LocalMultiaddr is the Multiaddr on this side func (c *singleConn) LocalMultiaddr() ma.Multiaddr { return c.maconn.LocalMultiaddr() diff --git a/net/conn/interface.go b/net/conn/interface.go index bccf607b9..ed6631f71 100644 --- a/net/conn/interface.go +++ b/net/conn/interface.go @@ -2,6 +2,8 @@ package conn import ( "errors" + "net" + "time" peer "github.com/jbenet/go-ipfs/peer" u "github.com/jbenet/go-ipfs/util" @@ -17,6 +19,7 @@ type Map map[u.Key]Conn // Conn is a generic message-based Peer-to-Peer connection. type Conn interface { + // implement ContextCloser too! ctxc.ContextCloser @@ -35,6 +38,13 @@ type Conn interface { // RemotePeer is the Peer on the remote side RemotePeer() peer.Peer + // net.Conn, cause duplicates. + LocalAddr() net.Addr + RemoteAddr() net.Addr + SetDeadline(t time.Time) error + SetReadDeadline(t time.Time) error + SetWriteDeadline(t time.Time) error + msgio.Reader msgio.Writer } diff --git a/net/conn/multiconn.go b/net/conn/multiconn.go index d2effabe7..e085e8e2c 100644 --- a/net/conn/multiconn.go +++ b/net/conn/multiconn.go @@ -3,7 +3,9 @@ package conn import ( "errors" "fmt" + "net" "sync" + "time" context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" @@ -232,14 +234,62 @@ func (c *MultiConn) String() string { return String(c, "MultiConn") } +func (c *MultiConn) LocalAddr() net.Addr { + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.LocalAddr() +} + +func (c *MultiConn) RemoteAddr() net.Addr { + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.RemoteAddr() +} + +func (c *MultiConn) SetDeadline(t time.Time) error { + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.SetDeadline(t) +} + +func (c *MultiConn) SetReadDeadline(t time.Time) error { + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.SetReadDeadline(t) +} + +func (c *MultiConn) SetWriteDeadline(t time.Time) error { + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.SetWriteDeadline(t) +} + // LocalMultiaddr is the Multiaddr on this side func (c *MultiConn) LocalMultiaddr() ma.Multiaddr { - return c.BestConn().LocalMultiaddr() + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.LocalMultiaddr() } // RemoteMultiaddr is the Multiaddr on the remote side func (c *MultiConn) RemoteMultiaddr() ma.Multiaddr { - return c.BestConn().RemoteMultiaddr() + bc := c.BestConn() + if bc == nil { + return nil + } + return bc.RemoteMultiaddr() } // LocalPeer is the Peer on this side diff --git a/net/conn/secure_conn.go b/net/conn/secure_conn.go index 277af17f6..2e6d194e5 100644 --- a/net/conn/secure_conn.go +++ b/net/conn/secure_conn.go @@ -1,6 +1,9 @@ package conn import ( + "net" + "time" + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" msgio "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-msgio" ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr" @@ -63,6 +66,26 @@ func (c *secureConn) String() string { return String(c, "secureConn") } +func (c *secureConn) LocalAddr() net.Addr { + return c.insecure.LocalAddr() +} + +func (c *secureConn) RemoteAddr() net.Addr { + return c.insecure.RemoteAddr() +} + +func (c *secureConn) SetDeadline(t time.Time) error { + return c.insecure.SetDeadline(t) +} + +func (c *secureConn) SetReadDeadline(t time.Time) error { + return c.insecure.SetReadDeadline(t) +} + +func (c *secureConn) SetWriteDeadline(t time.Time) error { + return c.insecure.SetWriteDeadline(t) +} + // LocalMultiaddr is the Multiaddr on this side func (c *secureConn) LocalMultiaddr() ma.Multiaddr { return c.insecure.LocalMultiaddr()