haskoin-node 0.9.1 → 0.9.2
raw patch · 3 files changed
+11/−9 lines, 3 files
Files
- CHANGELOG.md +4/−0
- haskoin-node.cabal +2/−2
- src/Network/Haskoin/Node/Peer.hs +5/−7
CHANGELOG.md view
@@ -4,6 +4,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 0.9.2+### Change+- Peer dies immediately when receiving a bad message.+ ## 0.9.1 ### Changed - Keep track of last synced header from a peer to avoid endless loops on large reorgs.
haskoin-node.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: e0be9f76327041faf731ead5e41e6c3982f3d0b325a0b1b8d19ac514c78dc00e+-- hash: 3b8d3fcf4859baa5368744ff4c28930ed05d2a9865d2bd9d890b666fbceb84db name: haskoin-node-version: 0.9.1+version: 0.9.2 synopsis: Haskoin Node P2P library for Bitcoin and Bitcoin Cash description: Bitcoin and Bitcoin Cash peer-to-peer protocol library featuring headers-first synchronisation. category: Bitcoin, Finance, Network
src/Network/Haskoin/Node/Peer.hs view
@@ -47,11 +47,10 @@ a = peerConfAddress pc go = forever $ receive inbox >>= dispatchMessage pc net = peerConfNetwork pc- p = inboxToMailbox inbox peer_session ad = let ins = appSource ad ons = appSink ad- src = runConduit $ ins .| inPeerConduit net a p .| mapM_C send_msg+ src = runConduit $ ins .| inPeerConduit net a .| mapM_C send_msg snk = outPeerConduit net .| ons in withAsync src $ \as -> do link as@@ -75,26 +74,25 @@ MonadLoggerIO m => Network -> SockAddr- -> Peer -> ConduitT ByteString Message m ()-inPeerConduit net a p = forever $ do+inPeerConduit net a = forever $ do x <- takeCE 24 .| foldC case decode x of Left _ -> do $(logErrorS) (peerString a) "Could not decode incoming message header"- DecodeHeaderError `killPeer` p+ throwIO DecodeHeaderError Right (MessageHeader _ _ len _) -> do when (len > 32 * 2 ^ (20 :: Int)) $ do $(logErrorS) (peerString a) "Payload too large"- PayloadTooLarge len `killPeer` p+ throwIO $ PayloadTooLarge len y <- takeCE (fromIntegral len) .| foldC case runGet (getMessage net) $ x `B.append` y of Left e -> do $(logErrorS) (peerString a) $ "Cannot decode payload: " <> cs (show e)- CannotDecodePayload `killPeer` p+ throwIO CannotDecodePayload Right msg -> do $(logDebugS) (peerString a) $ "Incoming: " <> cs (commandToString (msgType msg))