]> git.rkrishnan.org Git - functorrent.git/commitdiff
Main: generate random peerid
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 13 Sep 2015 14:48:07 +0000 (20:18 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sun, 13 Sep 2015 14:48:07 +0000 (20:18 +0530)
functorrent.cabal
src/main/Main.hs

index f69e7d30c060387c24b73e8373ec4094f00c437a..dd0a306a047607d5cb40260263bfa29f01292cf9 100644 (file)
@@ -64,8 +64,8 @@ executable functorrent
                        mtl,
                        network,
                        network-uri,
                        mtl,
                        network,
                        network-uri,
-                       parsec,
                        QuickCheck,
                        QuickCheck,
+                       random,
                        safe
 
 test-suite functorrent-test
                        safe
 
 test-suite functorrent-test
index b82d27a5f859acbc60c5fdb75d703cda80ab068a..dff915f4225eb6d9b61ce8a5a8f0fe3dd88d8747 100644 (file)
@@ -3,11 +3,11 @@ module Main where
 
 import Prelude hiding (log, length, readFile, getContents)
 
 
 import Prelude hiding (log, length, readFile, getContents)
 
-import Control.Monad.Reader(runReaderT)
 import Data.ByteString.Char8 (ByteString, getContents, readFile, unpack)
 import System.Environment (getArgs)
 import System.Exit (exitSuccess)
 import System.Directory (doesFileExist)
 import Data.ByteString.Char8 (ByteString, getContents, readFile, unpack)
 import System.Environment (getArgs)
 import System.Exit (exitSuccess)
 import System.Directory (doesFileExist)
+import System.Random (getStdGen, randomRs)
 
 import FuncTorrent.Logger (initLogger, logMessage, logStop)
 import FuncTorrent.Metainfo (Info(..), Metainfo(..), torrentToMetainfo)
 
 import FuncTorrent.Logger (initLogger, logMessage, logStop)
 import FuncTorrent.Metainfo (Info(..), Metainfo(..), torrentToMetainfo)
@@ -17,9 +17,6 @@ import FuncTorrent.Tracker (peers, getTrackerResponse)
 logError :: String -> (String -> IO ()) -> IO ()
 logError e logMsg = logMsg $ "parse error: \n" ++ e
 
 logError :: String -> (String -> IO ()) -> IO ()
 logError e logMsg = logMsg $ "parse error: \n" ++ e
 
-peerId :: String
-peerId = "-HS0001-*-*-20150215"
-
 exit :: IO ByteString
 exit = exitSuccess
 
 exit :: IO ByteString
 exit = exitSuccess
 
@@ -35,10 +32,21 @@ parse [a] = do
     else error "file does not exist"
 parse _ = exit
 
     else error "file does not exist"
 parse _ = exit
 
+-- peer id is exactly 20 bytes long.
+-- peer id starts with '-', followed by 2 char client id'
+-- followed by 4 ascii digits for version number, followed by
+-- a '-'. Rest are random digits to fill the 20 bytes.
+mkPeerID :: IO String
+mkPeerID = do
+  stdgen <- getStdGen
+  let digits = randomRs (0, 9) stdgen :: [Integer]
+  return $ "-HS9001-" ++ (concatMap show $ take (20 - 8) digits)
+
 main :: IO ()
 main = do
     args <- getArgs
     logR <- initLogger
 main :: IO ()
 main = do
     args <- getArgs
     logR <- initLogger
+    peerId <- mkPeerID    
     let log = logMessage logR
     log "Starting up functorrent"
     log $ "Parsing arguments " ++ concat args
     let log = logMessage logR
     log "Starting up functorrent"
     log $ "Parsing arguments " ++ concat args
@@ -51,7 +59,7 @@ main = do
        log "Trying to fetch peers"
 
        log $ "Trackers: " ++ head (announceList m)
        log "Trying to fetch peers"
 
        log $ "Trackers: " ++ head (announceList m)
-       trackerResp <- runReaderT (getTrackerResponse peerId) m
+       trackerResp <- getTrackerResponse peerId m
        case  trackerResp of
         Left e -> log $ "Error" ++ unpack e
         Right peerList -> do
        case  trackerResp of
         Left e -> log $ "Error" ++ unpack e
         Right peerList -> do