]> git.rkrishnan.org Git - functorrent.git/commitdiff
refactor handshake msg
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 27 Jul 2015 13:27:44 +0000 (18:57 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 27 Jul 2015 13:27:44 +0000 (18:57 +0530)
src/FuncTorrent/Peer.hs

index f7ccfcfcee4889bb36c674eff015b9cbc664dd9a..22dc48f485ef6fd51be47a6aabb185510ab0b0f2 100644 (file)
@@ -90,16 +90,20 @@ genHandShakeMsg infoHash peer_id = concat [pstrlen, pstr, reserved, infoHash, pe
         reserved = BC.replicate 8 '\0'
         peerID = BC.pack peer_id
 
-handShake :: Peer -> ByteString -> String -> IO Handle
-handShake peer@(Peer _ ip port) infoHash peerid = do
-  let hs = genHandShakeMsg infoHash peerid
+connectToPeer :: Peer -> IO Handle
+connectToPeer peer@(Peer _ ip port) = do
   h <- connectTo ip (PortNumber (fromIntegral port))
   hSetBuffering h LineBuffering
+  return h
+
+doHandShake :: Handle -> Peer -> ByteString -> String -> IO ()
+doHandShake h peer@(Peer _ ip port) infoHash peerid = do
+  let hs = genHandShakeMsg infoHash peerid
   hPut h hs
   putStrLn $ "--> handhake to peer: " ++ show peer
   _ <- hGet h (length (unpack hs))
   putStrLn $ "<-- handshake from peer: " ++ show peer
-  return h
+  return ()
 
 instance Binary PeerMsg where
   put msg = case msg of
@@ -170,10 +174,8 @@ getMsg h = do
     return $ decode $ fromStrict $ concat [lBS, msg]
 
 sendMsg :: Handle -> PeerMsg -> IO ()
-sendMsg h msg =
-  let bsMsg = toStrict $ encode msg
-  in
-   hPut h bsMsg
+sendMsg h msg = hPut h bsMsg
+  where bsMsg = toStrict $ encode msg
 
 bsToInt :: ByteString -> Int
 bsToInt x = fromIntegral (runGet getWord32be (fromChunks (return x)))
@@ -252,7 +254,8 @@ updatePieceAvailability pieceStatus p pieceList =
 
 handlePeerMsgs :: Peer -> Metainfo -> String -> IO ()
 handlePeerMsgs p m peerId = do
-  h <- handShake p (infoHash m) peerId
+  h <- connectToPeer p
+  doHandShake h p (infoHash m) peerId
   let state = PeerState { handle = h
                         , peer = p
                         , heInterested = False