X-Git-Url: https://git.rkrishnan.org/?a=blobdiff_plain;f=src%2FFuncTorrent%2FPeerMsgs.hs;h=ff3b43579906c6951378258fbfc0b8bea456e80a;hb=9beb0fb9814b33725f6adfa5adabb3225a54277b;hp=89744d4c83392a546e84d8c7ad01de5804cdd236;hpb=53d6f1e577880946a0f17d192b4c19691e486c50;p=functorrent.git diff --git a/src/FuncTorrent/PeerMsgs.hs b/src/FuncTorrent/PeerMsgs.hs index 89744d4..ff3b435 100644 --- a/src/FuncTorrent/PeerMsgs.hs +++ b/src/FuncTorrent/PeerMsgs.hs @@ -1,28 +1,30 @@ -{-# LANGUAGE OverloadedStrings #-} {- -Copyright (C) 2015-2016 Ramakrishnan Muthukrishnan - -This file is part of FuncTorrent. - -FuncTorrent is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3 of the License, or -(at your option) any later version. - -FuncTorrent is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + - Copyright (C) 2015-2016 Ramakrishnan Muthukrishnan + - + - This file is part of FuncTorrent. + - + - FuncTorrent is free software; you can redistribute it and/or modify + - it under the terms of the GNU General Public License as published by + - the Free Software Foundation; either version 3 of the License, or + - (at your option) any later version. + - + - FuncTorrent is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU General Public License for more details. + - + - You should have received a copy of the GNU General Public License + - along with FuncTorrent; if not, see + -} -You should have received a copy of the GNU General Public License -along with FuncTorrent; if not, see --} +{-# LANGUAGE OverloadedStrings #-} module FuncTorrent.PeerMsgs (genHandshakeMsg, sendMsg, getMsg, Peer(..), + makePeer, PeerMsg(..) ) where @@ -31,6 +33,7 @@ import Prelude hiding (lookup, concat, replicate, splitAt, take) import System.IO (Handle) import Data.ByteString (ByteString, pack, unpack, concat, hGet, hPut, singleton) import Data.ByteString.Lazy (fromStrict, fromChunks, toStrict) +import Data.ByteString.Char8 as BC (splitAt) import qualified Data.ByteString.Char8 as BC (replicate, pack) import Control.Monad (replicateM, liftM) import Control.Applicative (liftA3) @@ -39,8 +42,10 @@ import Data.Binary (Binary(..), decode, encode) import Data.Binary.Put (putWord32be, putWord16be, putWord8) import Data.Binary.Get (getWord32be, getWord16be, getWord8, runGet) --- | Peer is a PeerID, IP address, port tuple -data Peer = Peer ID IP Port +import FuncTorrent.Utils (toIP, toPort) + +-- | Peer is a IP address, port tuple +data Peer = Peer IP Port deriving (Show, Eq) type ID = String @@ -141,3 +146,7 @@ genHandshakeMsg infoHash peer_id = concat [pstrlen, pstr, reserved, infoHash, pe bsToInt :: ByteString -> Int bsToInt x = fromIntegral (runGet getWord32be (fromChunks (return x))) + +makePeer :: ByteString -> Peer +makePeer peer = Peer (toIP ip') (toPort port') + where (ip', port') = splitAt 4 peer