Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
go-libp2p-quic-transport
Commits
5ba748bd
Unverified
Commit
5ba748bd
authored
Jun 16, 2017
by
Marten Seemann
Browse files
implement IsClosed() for the connection
parent
7d27130e
Changes
2
Hide whitespace changes
Inline
Side-by-side
conn.go
View file @
5ba748bd
...
...
@@ -3,6 +3,7 @@ package libp2pquic
import
(
"fmt"
"net"
"sync"
smux
"github.com/jbenet/go-stream-muxer"
tpt
"github.com/libp2p/go-libp2p-transport"
...
...
@@ -12,11 +13,15 @@ import (
)
type
quicConn
struct
{
mutex
sync
.
RWMutex
sess
quic
.
Session
transport
tpt
.
Transport
laddr
ma
.
Multiaddr
raddr
ma
.
Multiaddr
closed
bool
}
var
_
tpt
.
Conn
=
&
quicConn
{}
...
...
@@ -24,7 +29,6 @@ var _ tpt.MultiStreamConn = &quicConn{}
func
newQuicConn
(
sess
quic
.
Session
,
t
tpt
.
Transport
)
(
*
quicConn
,
error
)
{
// analogues to manet.WrapNetConn
laddr
,
err
:=
quicMultiAddress
(
sess
.
LocalAddr
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to convert nconn.LocalAddr: %s"
,
err
)
...
...
@@ -36,12 +40,16 @@ func newQuicConn(sess quic.Session, t tpt.Transport) (*quicConn, error) {
return
nil
,
fmt
.
Errorf
(
"failed to convert nconn.RemoteAddr: %s"
,
err
)
}
return
&
quicConn
{
c
:=
&
quicConn
{
sess
:
sess
,
laddr
:
laddr
,
raddr
:
raddr
,
transport
:
t
,
},
nil
}
go
c
.
watchClosed
()
return
c
,
nil
}
func
(
c
*
quicConn
)
AcceptStream
()
(
smux
.
Stream
,
error
)
{
...
...
@@ -76,9 +84,17 @@ func (c *quicConn) Close() error {
return
c
.
sess
.
Close
(
nil
)
}
// TODO: implement this
func
(
c
*
quicConn
)
watchClosed
()
{
c
.
sess
.
WaitUntilClosed
()
c
.
mutex
.
Lock
()
c
.
closed
=
true
c
.
mutex
.
Unlock
()
}
func
(
c
*
quicConn
)
IsClosed
()
bool
{
return
false
c
.
mutex
.
Lock
()
defer
c
.
mutex
.
Unlock
()
return
c
.
closed
}
func
(
c
*
quicConn
)
LocalAddr
()
net
.
Addr
{
...
...
conn_test.go
View file @
5ba748bd
...
...
@@ -25,7 +25,8 @@ func (s *mockStream) StreamID() protocol.StreamID { return s.id }
var
_
quic
.
Stream
=
&
mockStream
{}
type
mockQuicSession
struct
{
closed
bool
closed
bool
waitUntilClosedChan
chan
struct
{}
// close this chan to make WaitUntilClosed return
localAddr
net
.
Addr
remoteAddr
net
.
Addr
...
...
@@ -49,6 +50,7 @@ func (s *mockQuicSession) OpenStreamSync() (quic.Stream, error) {
func
(
s
*
mockQuicSession
)
Close
(
error
)
error
{
s
.
closed
=
true
;
return
nil
}
func
(
s
*
mockQuicSession
)
LocalAddr
()
net
.
Addr
{
return
s
.
localAddr
}
func
(
s
*
mockQuicSession
)
RemoteAddr
()
net
.
Addr
{
return
s
.
remoteAddr
}
func
(
s
*
mockQuicSession
)
WaitUntilClosed
()
{
<-
s
.
waitUntilClosedChan
}
var
_
=
Describe
(
"Conn"
,
func
()
{
var
(
...
...
@@ -58,8 +60,9 @@ var _ = Describe("Conn", func() {
BeforeEach
(
func
()
{
sess
=
&
mockQuicSession
{
localAddr
:
&
net
.
UDPAddr
{
IP
:
net
.
IPv4
(
127
,
0
,
0
,
1
),
Port
:
1337
},
remoteAddr
:
&
net
.
UDPAddr
{
IP
:
net
.
IPv4
(
192
,
168
,
13
,
37
),
Port
:
1234
},
localAddr
:
&
net
.
UDPAddr
{
IP
:
net
.
IPv4
(
127
,
0
,
0
,
1
),
Port
:
1337
},
remoteAddr
:
&
net
.
UDPAddr
{
IP
:
net
.
IPv4
(
192
,
168
,
13
,
37
),
Port
:
1234
},
waitUntilClosedChan
:
make
(
chan
struct
{}),
}
var
err
error
conn
,
err
=
newQuicConn
(
sess
,
nil
)
...
...
@@ -82,6 +85,12 @@ var _ = Describe("Conn", func() {
Expect
(
sess
.
closed
)
.
To
(
BeTrue
())
})
It
(
"says if it is closed"
,
func
()
{
Consistently
(
func
()
bool
{
return
conn
.
IsClosed
()
})
.
Should
(
BeFalse
())
close
(
sess
.
waitUntilClosedChan
)
Eventually
(
func
()
bool
{
return
conn
.
IsClosed
()
})
.
Should
(
BeTrue
())
})
Context
(
"opening streams"
,
func
()
{
It
(
"opens streams"
,
func
()
{
s
:=
&
mockStream
{
id
:
1337
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment