From: Ramakrishnan Muthukrishnan Date: Sat, 21 Feb 2015 03:43:45 +0000 (+0530) Subject: more refactoring around infohash X-Git-Url: https://git.rkrishnan.org/pf/content/en/service/frontends/about.html?a=commitdiff_plain;h=71929afc02146a7fdba5475f1e3a09b2dcdfe7a3;p=functorrent.git more refactoring around infohash --- diff --git a/src/Main.hs b/src/Main.hs index bb50a8b..32dc41a 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -37,7 +37,9 @@ main = do Nothing -> putStrLn "parse error" Just m -> do let len = MInfo.lengthInBytes (MInfo.info m) - body <- BC.pack <$> T.connect (MInfo.announce m) (T.prepareRequest d peerId len) + (Benc.Bdict d') = d + body <- BC.pack <$> T.connect (MInfo.announce m) (T.prepareRequest d' peerId len) print (P.getPeers (P.getPeerResponse body)) + print (BC.length (P.handShakeMsg d' peerId)) Left e -> printError e putStrLn "done" diff --git a/src/Peer.hs b/src/Peer.hs index 52cc03f..0f33961 100644 --- a/src/Peer.hs +++ b/src/Peer.hs @@ -59,5 +59,4 @@ handShakeMsg m peer_id = let pstrlen = BC.concat $ BL.toChunks $ Bin.encode (19 reserved = BC.replicate 8 '\0' infoH = T.infoHash m peerID = BC.pack peer_id - in - BC.concat [pstrlen, pstr, reserved, infoH, peerID] + in BC.concat [pstrlen, pstr, reserved, infoH, peerID] diff --git a/src/Tracker.hs b/src/Tracker.hs index 599c293..5afc26f 100644 --- a/src/Tracker.hs +++ b/src/Tracker.hs @@ -11,14 +11,13 @@ import qualified Data.ByteString.Base16 as B16 import qualified Utils as U import Data.Char - type Url = String - +type InfoDict = M.Map Benc.BVal Benc.BVal -- | urlEncodeHash -- -- >>> urlEncodeHash $ BC.pack "123456789abcdef123456789abcdef123456789a" --- "%124Vx%9a%bc%de%f1%23Eg%89%ab%cd%ef%124Vx%9a" +-- "%124vx%9a%bc%de%f1%23Eg%89%ab%cd%ef%124Vx%9a" urlEncodeHash :: BC.ByteString -> String urlEncodeHash bs = concatMap (encode . BC.unpack) (U.splitN 2 bs) where encode b@[c1, c2] = let c = chr (read ("0x" ++ b)) @@ -34,11 +33,11 @@ urlEncodeHash bs = concatMap (encode . BC.unpack) (U.splitN 2 bs) infoHash :: M.Map Benc.BVal Benc.BVal -> BC.ByteString infoHash m = let info = m M.! Benc.Bstr (BC.pack "info") - in (B16.encode . SHA1.hash . BC.pack . Benc.encode) info + in (SHA1.hash . BC.pack . Benc.encode) info -prepareRequest :: Benc.BVal -> String -> Integer -> String -prepareRequest (Benc.Bdict d) peer_id len = - let p = [("info_hash", urlEncodeHash (infoHash d)), +prepareRequest :: InfoDict -> String -> Integer -> String +prepareRequest d peer_id len = + let p = [("info_hash", urlEncodeHash ((B16.encode . infoHash) d)), ("peer_id", HB.urlEncode peer_id), ("port", "6881"), ("uploaded", "0"),