make net/conn.Conn conform to net.Conn
Juan Batiz-Benet committed
Dec 14, 2014 at 10:59 UTC
9b7fb704eff7bfbbe8fdd047090dd43b8396d5b7
4 files changed
+105
-2
net/conn/conn.go
+20
@@ -2,6 +2,7 @@ package conn
2
3
import (
4
"fmt"
5
+ "net"
6
"time"
7
8
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 {
86
return String(c, "singleConn")
87
}
88
89
+func (c *singleConn) LocalAddr() net.Addr {
90
+ return c.maconn.LocalAddr()
91
+}
92
+
93
+func (c *singleConn) RemoteAddr() net.Addr {
94
+ return c.maconn.RemoteAddr()
95
+}
96
+
97
+func (c *singleConn) SetDeadline(t time.Time) error {
98
+ return c.maconn.SetDeadline(t)
99
+}
100
+func (c *singleConn) SetReadDeadline(t time.Time) error {
101
+ return c.maconn.SetReadDeadline(t)
102
+}
103
+
104
+func (c *singleConn) SetWriteDeadline(t time.Time) error {
105
+ return c.maconn.SetWriteDeadline(t)
106
+}
107
+
108
// LocalMultiaddr is the Multiaddr on this side
109
func (c *singleConn) LocalMultiaddr() ma.Multiaddr {
110
return c.maconn.LocalMultiaddr()
net/conn/interface.go
+10
@@ -2,6 +2,8 @@ package conn
2
3
import (
4
"errors"
5
+ "net"
6
+ "time"
7
8
peer "github.com/jbenet/go-ipfs/peer"
9
u "github.com/jbenet/go-ipfs/util"
@@ -17,6 +19,7 @@ type Map map[u.Key]Conn
19
20
// Conn is a generic message-based Peer-to-Peer connection.
21
type Conn interface {
22
+
23
// implement ContextCloser too!
24
ctxc.ContextCloser
25
@@ -35,6 +38,13 @@ type Conn interface {
38
// RemotePeer is the Peer on the remote side
39
RemotePeer() peer.Peer
40
41
+ // net.Conn, cause duplicates.
42
+ LocalAddr() net.Addr
43
+ RemoteAddr() net.Addr
44
+ SetDeadline(t time.Time) error
45
+ SetReadDeadline(t time.Time) error
46
+ SetWriteDeadline(t time.Time) error
47
+
48
msgio.Reader
49
msgio.Writer
50
}
net/conn/multiconn.go
+52
-2
@@ -3,7 +3,9 @@ package conn
3
import (
4
"errors"
5
"fmt"
6
+ "net"
7
"sync"
8
+ "time"
9
10
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
11
ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
@@ -232,14 +234,62 @@ func (c *MultiConn) String() string {
234
return String(c, "MultiConn")
235
}
236
237
+func (c *MultiConn) LocalAddr() net.Addr {
238
+ bc := c.BestConn()
239
+ if bc == nil {
240
+ return nil
241
+ }
242
+ return bc.LocalAddr()
243
+}
244
+
245
+func (c *MultiConn) RemoteAddr() net.Addr {
246
+ bc := c.BestConn()
247
+ if bc == nil {
248
+ return nil
249
+ }
250
+ return bc.RemoteAddr()
251
+}
252
+
253
+func (c *MultiConn) SetDeadline(t time.Time) error {
254
+ bc := c.BestConn()
255
+ if bc == nil {
256
+ return nil
257
+ }
258
+ return bc.SetDeadline(t)
259
+}
260
+
261
+func (c *MultiConn) SetReadDeadline(t time.Time) error {
262
+ bc := c.BestConn()
263
+ if bc == nil {
264
+ return nil
265
+ }
266
+ return bc.SetReadDeadline(t)
267
+}
268
+
269
+func (c *MultiConn) SetWriteDeadline(t time.Time) error {
270
+ bc := c.BestConn()
271
+ if bc == nil {
272
+ return nil
273
+ }
274
+ return bc.SetWriteDeadline(t)
275
+}
276
+
277
// LocalMultiaddr is the Multiaddr on this side
278
func (c *MultiConn) LocalMultiaddr() ma.Multiaddr {
237
- return c.BestConn().LocalMultiaddr()
279
+ bc := c.BestConn()
280
+ if bc == nil {
281
+ return nil
282
+ }
283
+ return bc.LocalMultiaddr()
284
}
285
286
// RemoteMultiaddr is the Multiaddr on the remote side
287
func (c *MultiConn) RemoteMultiaddr() ma.Multiaddr {
242
- return c.BestConn().RemoteMultiaddr()
288
+ bc := c.BestConn()
289
+ if bc == nil {
290
+ return nil
291
+ }
292
+ return bc.RemoteMultiaddr()
293
}
294
295
// LocalPeer is the Peer on this side
net/conn/secure_conn.go
+23
@@ -1,6 +1,9 @@
1
package conn
2
3
import (
4
+ "net"
5
+ "time"
6
+
7
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
8
msgio "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-msgio"
9
ma "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
@@ -63,6 +66,26 @@ func (c *secureConn) String() string {
66
return String(c, "secureConn")
67
}
68
69
+func (c *secureConn) LocalAddr() net.Addr {
70
+ return c.insecure.LocalAddr()
71
+}
72
+
73
+func (c *secureConn) RemoteAddr() net.Addr {
74
+ return c.insecure.RemoteAddr()
75
+}
76
+
77
+func (c *secureConn) SetDeadline(t time.Time) error {
78
+ return c.insecure.SetDeadline(t)
79
+}
80
+
81
+func (c *secureConn) SetReadDeadline(t time.Time) error {
82
+ return c.insecure.SetReadDeadline(t)
83
+}
84
+
85
+func (c *secureConn) SetWriteDeadline(t time.Time) error {
86
+ return c.insecure.SetWriteDeadline(t)
87
+}
88
+
89
// LocalMultiaddr is the Multiaddr on this side
90
func (c *secureConn) LocalMultiaddr() ma.Multiaddr {
91
return c.insecure.LocalMultiaddr()