summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Erebos/Discovery.hs3
-rw-r--r--src/Erebos/Network.hs6
-rw-r--r--test/discovery.test16
3 files changed, 21 insertions, 4 deletions
diff --git a/src/Erebos/Discovery.hs b/src/Erebos/Discovery.hs
index b27c617..5788ab8 100644
--- a/src/Erebos/Discovery.hs
+++ b/src/Erebos/Discovery.hs
@@ -569,6 +569,9 @@ instance PeerAddressType TunnelAddress where
sendBytesToAddress TunnelAddress {..} bytes = do
writeStream tunnelWriter bytes
+ connectionToAddressClosed TunnelAddress {..} = do
+ closeStream tunnelWriter
+
relayStream :: StreamReader -> StreamWriter -> IO ()
relayStream r w = do
p <- readStreamPacket r
diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs
index a90f5d8..6126e60 100644
--- a/src/Erebos/Network.hs
+++ b/src/Erebos/Network.hs
@@ -163,6 +163,8 @@ instance Eq Peer where
class (Eq addr, Ord addr, Show addr, Typeable addr) => PeerAddressType addr where
sendBytesToAddress :: addr -> ByteString -> IO ()
+ connectionToAddressClosed :: addr -> IO ()
+ connectionToAddressClosed _ = return ()
data PeerAddress
= forall addr. PeerAddressType addr => CustomPeerAddress addr
@@ -384,6 +386,10 @@ startServer serverOptions serverOrigHead logd' serverServices = do
handlePacket identity secure peer chanSvc svcs header prefs
peerLoop
Nothing -> do
+ case paddr of
+ DatagramAddress _ -> return ()
+ CustomPeerAddress caddr -> connectionToAddressClosed caddr
+
dropPeer peer
atomically $ writeTChan serverChanPeer peer
peerLoop
diff --git a/test/discovery.test b/test/discovery.test
index a297f54..d73e292 100644
--- a/test/discovery.test
+++ b/test/discovery.test
@@ -144,11 +144,19 @@ test DiscoveryTunnel:
expect /net-ostream-open ${p2.node.ip} 29665 1 1/ from pd
expect from p1:
- /peer [0-9]+ addr tunnel@.*/
- /peer [0-9]+ id Device2 Owner2/
+ /peer 2 addr tunnel@.*/
+ /peer 2 id Device2 Owner2/
expect from p2:
- /peer [0-9]+ addr tunnel@.*/
- /peer [0-9]+ id Device1 Owner1/
+ /peer 2 addr tunnel@.*/
+ /peer 2 id Device1 Owner1/
+
+ send "peer-drop 2" to p1
+ send "peer-drop 2" to p2
+
+ expect /net-ostream-close-ack ${pd.node.ip} 29665 1 0/ from p2
+ expect /net-ostream-close-ack ${p1.node.ip} 29665 1 0/ from pd
+ expect /net-ostream-close-ack ${pd.node.ip} 29665 1 0/ from p1
+ expect /net-ostream-close-ack ${p2.node.ip} 29665 1 0/ from pd
for p in [ pd, p1, p2 ]:
send "stop-server" to p