diff options
-rw-r--r-- | src/Erebos/Discovery.hs | 3 | ||||
-rw-r--r-- | src/Erebos/Network.hs | 6 | ||||
-rw-r--r-- | test/discovery.test | 16 |
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 |