make net/conn.Conn conform to net.Conn

This commit is contained in:
Juan Batiz-Benet 2014-12-14 10:59:52 -08:00
parent 3b29653022
commit 9b7fb704ef
4 changed files with 105 additions and 2 deletions

View File

@ -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()

View File

@ -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
}

View File

@ -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

View File

@ -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()