diff options
Diffstat (limited to 'src/Network/BitTorrent')
-rw-r--r-- | src/Network/BitTorrent/Address.hs | 166 | ||||
-rw-r--r-- | src/Network/BitTorrent/DHT/ContactInfo.hs | 182 |
2 files changed, 173 insertions, 175 deletions
diff --git a/src/Network/BitTorrent/Address.hs b/src/Network/BitTorrent/Address.hs index f8f29be5..a72a8a07 100644 --- a/src/Network/BitTorrent/Address.hs +++ b/src/Network/BitTorrent/Address.hs | |||
@@ -1063,93 +1063,91 @@ libUserAgent = render (pPrint IlibHSbittorrent <> "/" <> pPrint version) | |||
1063 | -- For torrent file | 1063 | -- For torrent file |
1064 | -----------------------------------------------------------------------} | 1064 | -----------------------------------------------------------------------} |
1065 | -- TODO collect information about createdBy torrent field | 1065 | -- TODO collect information about createdBy torrent field |
1066 | {- | 1066 | -- renderImpl :: ClientImpl -> Text |
1067 | renderImpl :: ClientImpl -> Text | 1067 | -- renderImpl = T.pack . L.tail . show |
1068 | renderImpl = T.pack . L.tail . show | 1068 | -- |
1069 | 1069 | -- renderVersion :: Version -> Text | |
1070 | renderVersion :: Version -> Text | 1070 | -- renderVersion = undefined |
1071 | renderVersion = undefined | 1071 | -- |
1072 | -- renderClientInfo :: ClientInfo -> Text | ||
1073 | -- renderClientInfo ClientInfo {..} = renderImpl ciImpl <> "/" <> renderVersion ciVersion | ||
1074 | -- | ||
1075 | -- parseClientInfo :: Text -> ClientImpl | ||
1076 | -- parseClientInfo t = undefined | ||
1072 | 1077 | ||
1073 | renderClientInfo :: ClientInfo -> Text | ||
1074 | renderClientInfo ClientInfo {..} = renderImpl ciImpl <> "/" <> renderVersion ciVersion | ||
1075 | 1078 | ||
1076 | parseClientInfo :: Text -> ClientImpl | ||
1077 | parseClientInfo t = undefined | ||
1078 | -} | ||
1079 | {- | ||
1080 | -- code used for generation; remove it later on | 1079 | -- code used for generation; remove it later on |
1081 | 1080 | -- | |
1082 | mkEnumTyDef :: NM -> String | 1081 | -- mkEnumTyDef :: NM -> String |
1083 | mkEnumTyDef = unlines . map (" | I" ++) . nub . map snd | 1082 | -- mkEnumTyDef = unlines . map (" | I" ++) . nub . map snd |
1084 | 1083 | -- | |
1085 | mkPars :: NM -> String | 1084 | -- mkPars :: NM -> String |
1086 | mkPars = unlines . map (\(code, impl) -> " f \"" ++ code ++ "\" = " ++ "I" ++ impl) | 1085 | -- mkPars = unlines . map (\(code, impl) -> " f \"" ++ code ++ "\" = " ++ "I" ++ impl) |
1087 | 1086 | -- | |
1088 | type NM = [(String, String)] | 1087 | -- type NM = [(String, String)] |
1089 | nameMap :: NM | 1088 | -- nameMap :: NM |
1090 | nameMap = | 1089 | -- nameMap = |
1091 | [ ("AG", "Ares") | 1090 | -- [ ("AG", "Ares") |
1092 | , ("A~", "Ares") | 1091 | -- , ("A~", "Ares") |
1093 | , ("AR", "Arctic") | 1092 | -- , ("AR", "Arctic") |
1094 | , ("AV", "Avicora") | 1093 | -- , ("AV", "Avicora") |
1095 | , ("AX", "BitPump") | 1094 | -- , ("AX", "BitPump") |
1096 | , ("AZ", "Azureus") | 1095 | -- , ("AZ", "Azureus") |
1097 | , ("BB", "BitBuddy") | 1096 | -- , ("BB", "BitBuddy") |
1098 | , ("BC", "BitComet") | 1097 | -- , ("BC", "BitComet") |
1099 | , ("BF", "Bitflu") | 1098 | -- , ("BF", "Bitflu") |
1100 | , ("BG", "BTG") | 1099 | -- , ("BG", "BTG") |
1101 | , ("BR", "BitRocket") | 1100 | -- , ("BR", "BitRocket") |
1102 | , ("BS", "BTSlave") | 1101 | -- , ("BS", "BTSlave") |
1103 | , ("BX", "BittorrentX") | 1102 | -- , ("BX", "BittorrentX") |
1104 | , ("CD", "EnhancedCTorrent") | 1103 | -- , ("CD", "EnhancedCTorrent") |
1105 | , ("CT", "CTorrent") | 1104 | -- , ("CT", "CTorrent") |
1106 | , ("DE", "DelugeTorrent") | 1105 | -- , ("DE", "DelugeTorrent") |
1107 | , ("DP", "PropagateDataClient") | 1106 | -- , ("DP", "PropagateDataClient") |
1108 | , ("EB", "EBit") | 1107 | -- , ("EB", "EBit") |
1109 | , ("ES", "ElectricSheep") | 1108 | -- , ("ES", "ElectricSheep") |
1110 | , ("FT", "FoxTorrent") | 1109 | -- , ("FT", "FoxTorrent") |
1111 | , ("GS", "GSTorrent") | 1110 | -- , ("GS", "GSTorrent") |
1112 | , ("HL", "Halite") | 1111 | -- , ("HL", "Halite") |
1113 | , ("HS", "libHSnetwork_bittorrent") | 1112 | -- , ("HS", "libHSnetwork_bittorrent") |
1114 | , ("HN", "Hydranode") | 1113 | -- , ("HN", "Hydranode") |
1115 | , ("KG", "KGet") | 1114 | -- , ("KG", "KGet") |
1116 | , ("KT", "KTorrent") | 1115 | -- , ("KT", "KTorrent") |
1117 | , ("LH", "LH_ABC") | 1116 | -- , ("LH", "LH_ABC") |
1118 | , ("LP", "Lphant") | 1117 | -- , ("LP", "Lphant") |
1119 | , ("LT", "Libtorrent") | 1118 | -- , ("LT", "Libtorrent") |
1120 | , ("lt", "LibTorrent") | 1119 | -- , ("lt", "LibTorrent") |
1121 | , ("LW", "LimeWire") | 1120 | -- , ("LW", "LimeWire") |
1122 | , ("MO", "MonoTorrent") | 1121 | -- , ("MO", "MonoTorrent") |
1123 | , ("MP", "MooPolice") | 1122 | -- , ("MP", "MooPolice") |
1124 | , ("MR", "Miro") | 1123 | -- , ("MR", "Miro") |
1125 | , ("MT", "MoonlightTorrent") | 1124 | -- , ("MT", "MoonlightTorrent") |
1126 | , ("NX", "NetTransport") | 1125 | -- , ("NX", "NetTransport") |
1127 | , ("PD", "Pando") | 1126 | -- , ("PD", "Pando") |
1128 | , ("qB", "qBittorrent") | 1127 | -- , ("qB", "qBittorrent") |
1129 | , ("QD", "QQDownload") | 1128 | -- , ("QD", "QQDownload") |
1130 | , ("QT", "Qt4TorrentExample") | 1129 | -- , ("QT", "Qt4TorrentExample") |
1131 | , ("RT", "Retriever") | 1130 | -- , ("RT", "Retriever") |
1132 | , ("S~", "Shareaza") | 1131 | -- , ("S~", "Shareaza") |
1133 | , ("SB", "Swiftbit") | 1132 | -- , ("SB", "Swiftbit") |
1134 | , ("SS", "SwarmScope") | 1133 | -- , ("SS", "SwarmScope") |
1135 | , ("ST", "SymTorrent") | 1134 | -- , ("ST", "SymTorrent") |
1136 | , ("st", "sharktorrent") | 1135 | -- , ("st", "sharktorrent") |
1137 | , ("SZ", "Shareaza") | 1136 | -- , ("SZ", "Shareaza") |
1138 | , ("TN", "TorrentDotNET") | 1137 | -- , ("TN", "TorrentDotNET") |
1139 | , ("TR", "Transmission") | 1138 | -- , ("TR", "Transmission") |
1140 | , ("TS", "Torrentstorm") | 1139 | -- , ("TS", "Torrentstorm") |
1141 | , ("TT", "TuoTu") | 1140 | -- , ("TT", "TuoTu") |
1142 | , ("UL", "uLeecher") | 1141 | -- , ("UL", "uLeecher") |
1143 | , ("UT", "uTorrent") | 1142 | -- , ("UT", "uTorrent") |
1144 | , ("VG", "Vagaa") | 1143 | -- , ("VG", "Vagaa") |
1145 | , ("WT", "BitLet") | 1144 | -- , ("WT", "BitLet") |
1146 | , ("WY", "FireTorrent") | 1145 | -- , ("WY", "FireTorrent") |
1147 | , ("XL", "Xunlei") | 1146 | -- , ("XL", "Xunlei") |
1148 | , ("XT", "XanTorrent") | 1147 | -- , ("XT", "XanTorrent") |
1149 | , ("XX", "Xtorrent") | 1148 | -- , ("XX", "Xtorrent") |
1150 | , ("ZT", "ZipTorrent") | 1149 | -- , ("ZT", "ZipTorrent") |
1151 | ] | 1150 | -- ] |
1152 | -} | ||
1153 | 1151 | ||
1154 | -- TODO use regexps | 1152 | -- TODO use regexps |
1155 | 1153 | ||
diff --git a/src/Network/BitTorrent/DHT/ContactInfo.hs b/src/Network/BitTorrent/DHT/ContactInfo.hs index 4293506d..d7c92e35 100644 --- a/src/Network/BitTorrent/DHT/ContactInfo.hs +++ b/src/Network/BitTorrent/DHT/ContactInfo.hs | |||
@@ -13,97 +13,97 @@ import Data.Serialize | |||
13 | import Data.Torrent | 13 | import Data.Torrent |
14 | import Network.BitTorrent.Address | 14 | import Network.BitTorrent.Address |
15 | 15 | ||
16 | {- | 16 | -- {- |
17 | import Data.HashMap.Strict as HM | 17 | -- import Data.HashMap.Strict as HM |
18 | 18 | -- | |
19 | import Data.Torrent.InfoHash | 19 | -- import Data.Torrent.InfoHash |
20 | import Network.BitTorrent.Address | 20 | -- import Network.BitTorrent.Address |
21 | 21 | -- | |
22 | -- increase prefix when table is too large | 22 | -- -- increase prefix when table is too large |
23 | -- decrease prefix when table is too small | 23 | -- -- decrease prefix when table is too small |
24 | -- filter outdated peers | 24 | -- -- filter outdated peers |
25 | 25 | -- | |
26 | {----------------------------------------------------------------------- | 26 | -- {----------------------------------------------------------------------- |
27 | -- PeerSet | 27 | -- -- PeerSet |
28 | -----------------------------------------------------------------------} | 28 | -- -----------------------------------------------------------------------} |
29 | 29 | -- | |
30 | type PeerSet a = [(PeerAddr a, NodeInfo a, Timestamp)] | 30 | -- type PeerSet a = [(PeerAddr a, NodeInfo a, Timestamp)] |
31 | 31 | -- | |
32 | -- compare PSQueue vs Ordered list | 32 | -- -- compare PSQueue vs Ordered list |
33 | 33 | -- | |
34 | takeNewest :: PeerSet a -> [PeerAddr a] | 34 | -- takeNewest :: PeerSet a -> [PeerAddr a] |
35 | takeNewest = undefined | 35 | -- takeNewest = undefined |
36 | 36 | -- | |
37 | dropOld :: Timestamp -> PeerSet a -> PeerSet a | 37 | -- dropOld :: Timestamp -> PeerSet a -> PeerSet a |
38 | dropOld = undefined | 38 | -- dropOld = undefined |
39 | 39 | -- | |
40 | insert :: PeerAddr a -> Timestamp -> PeerSet a -> PeerSet a | 40 | -- insert :: PeerAddr a -> Timestamp -> PeerSet a -> PeerSet a |
41 | insert = undefined | 41 | -- insert = undefined |
42 | 42 | -- | |
43 | type Mask = Int | 43 | -- type Mask = Int |
44 | type Size = Int | 44 | -- type Size = Int |
45 | type Timestamp = Int | 45 | -- type Timestamp = Int |
46 | 46 | -- | |
47 | {----------------------------------------------------------------------- | 47 | -- {----------------------------------------------------------------------- |
48 | -- InfoHashMap | 48 | -- -- InfoHashMap |
49 | -----------------------------------------------------------------------} | 49 | -- -----------------------------------------------------------------------} |
50 | 50 | -- | |
51 | -- compare handwritten prefix tree versus IntMap | 51 | -- -- compare handwritten prefix tree versus IntMap |
52 | 52 | -- | |
53 | data Tree a | 53 | -- data Tree a |
54 | = Nil | 54 | -- = Nil |
55 | | Tip !InfoHash !(PeerSet a) | 55 | -- | Tip !InfoHash !(PeerSet a) |
56 | | Bin !InfoHash !Mask !Size !Timestamp (Tree a) (Tree a) | 56 | -- | Bin !InfoHash !Mask !Size !Timestamp (Tree a) (Tree a) |
57 | 57 | -- | |
58 | insertTree :: InfoHash -> a -> Tree a -> Tree a | 58 | -- insertTree :: InfoHash -> a -> Tree a -> Tree a |
59 | insertTree = undefined | 59 | -- insertTree = undefined |
60 | 60 | -- | |
61 | type Prio = Int | 61 | -- type Prio = Int |
62 | 62 | -- | |
63 | --shrink :: ContactInfo ip -> Int | 63 | -- --shrink :: ContactInfo ip -> Int |
64 | shrink Nil = Nil | 64 | -- shrink Nil = Nil |
65 | shrink (Tip _ _) = undefined | 65 | -- shrink (Tip _ _) = undefined |
66 | shrink (Bin _ _) = undefined | 66 | -- shrink (Bin _ _) = undefined |
67 | 67 | -- | |
68 | {----------------------------------------------------------------------- | 68 | -- {----------------------------------------------------------------------- |
69 | -- InfoHashMap | 69 | -- -- InfoHashMap |
70 | -----------------------------------------------------------------------} | 70 | -- -----------------------------------------------------------------------} |
71 | 71 | -- | |
72 | -- compare new design versus HashMap | 72 | -- -- compare new design versus HashMap |
73 | 73 | -- | |
74 | data IntMap k p a | 74 | -- data IntMap k p a |
75 | type ContactInfo = Map InfoHash Timestamp (Set (PeerAddr IP) Timestamp) | 75 | -- type ContactInfo = Map InfoHash Timestamp (Set (PeerAddr IP) Timestamp) |
76 | 76 | -- | |
77 | data ContactInfo ip = PeerStore | 77 | -- data ContactInfo ip = PeerStore |
78 | { maxSize :: Int | 78 | -- { maxSize :: Int |
79 | , prefixSize :: Int | 79 | -- , prefixSize :: Int |
80 | , thisNodeId :: NodeId | 80 | -- , thisNodeId :: NodeId |
81 | 81 | -- | |
82 | , count :: Int -- ^ Cached size of the 'peerSet' | 82 | -- , count :: Int -- ^ Cached size of the 'peerSet' |
83 | , peerSet :: HashMap InfoHash [PeerAddr ip] | 83 | -- , peerSet :: HashMap InfoHash [PeerAddr ip] |
84 | } | 84 | -- } |
85 | 85 | -- | |
86 | size :: ContactInfo ip -> Int | 86 | -- size :: ContactInfo ip -> Int |
87 | size = undefined | 87 | -- size = undefined |
88 | 88 | -- | |
89 | prefixSize :: ContactInfo ip -> Int | 89 | -- prefixSize :: ContactInfo ip -> Int |
90 | prefixSize = undefined | 90 | -- prefixSize = undefined |
91 | 91 | -- | |
92 | lookup :: InfoHash -> ContactInfo ip -> [PeerAddr ip] | 92 | -- lookup :: InfoHash -> ContactInfo ip -> [PeerAddr ip] |
93 | lookup = undefined | 93 | -- lookup = undefined |
94 | 94 | -- | |
95 | insert :: InfoHash -> PeerAddr ip -> ContactInfo ip -> ContactInfo ip | 95 | -- insert :: InfoHash -> PeerAddr ip -> ContactInfo ip -> ContactInfo ip |
96 | insert = undefined | 96 | -- insert = undefined |
97 | 97 | -- | |
98 | -- | Limit in size. | 98 | -- -- | Limit in size. |
99 | prune :: NodeId -> Int -> ContactInfo ip -> ContactInfo ip | 99 | -- prune :: NodeId -> Int -> ContactInfo ip -> ContactInfo ip |
100 | prune pref targetSize Nil = Nil | 100 | -- prune pref targetSize Nil = Nil |
101 | prune pref targetSize (Tip _ _) = undefined | 101 | -- prune pref targetSize (Tip _ _) = undefined |
102 | 102 | -- | |
103 | -- | Remove expired entries. | 103 | -- -- | Remove expired entries. |
104 | splitGT :: Timestamp -> ContactInfo ip -> ContactInfo ip | 104 | -- splitGT :: Timestamp -> ContactInfo ip -> ContactInfo ip |
105 | splitGT = undefined | 105 | -- splitGT = undefined |
106 | -} | 106 | -- -} |
107 | 107 | ||
108 | -- | Storage used to keep track a set of known peers in client, | 108 | -- | Storage used to keep track a set of known peers in client, |
109 | -- tracker or DHT sessions. | 109 | -- tracker or DHT sessions. |