public void Setup() { int pieceCount = 40; int pieceLength = 256 * 1024; var torrentData = new TestTorrentData { Files = TorrentFileInfo.Create(pieceLength, ("File", pieceLength * pieceCount, "full/path/File")), PieceLength = pieceLength, Size = pieceLength * pieceCount }; peers = new List <PeerId> (); torrentManager = TestRig.CreateSingleFileManager(torrentData.Size, torrentData.PieceLength); torrentManager.LoadFastResume(new FastResume(torrentManager.InfoHash, new BitField(pieceCount).SetAll(true), new BitField(pieceCount).SetAll(false))); manager = new PieceManager(torrentManager); manager.Initialise(); peer = PeerId.CreateNull(pieceCount); for (int i = 0; i < 20; i++) { PeerId p = PeerId.CreateNull(pieceCount); p.SupportsFastPeer = true; peers.Add(p); } }
public void Setup() { int pieceLength = 16 * Constants.BlockSize; int pieces = 40; int size = pieces * pieceLength; bitfield = new MutableBitField(pieces); torrentData = new TestTorrentData { Files = TorrentFileInfo.Create(pieceLength, ("Test", size, "Full/Path/Test")), PieceLength = pieceLength, Size = size }; checker = new PiecePickerFilterChecker(); picker = new RarestFirstPicker(checker); picker.Initialise(torrentData); peer = PeerId.CreateNull(pieces); peer.BitField.SetAll(true); peers = new List <PeerId> (); for (int i = 0; i < 5; i++) { peers.Add(PeerId.CreateNull(pieces)); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var files = new List <TorrentFileInfo>(); var fileInfo = JObject.Load(reader); var fileNamesArray = fileInfo.SelectToken("file_names") as JArray; var fileLengthsArray = fileInfo.SelectToken("file_lengths") as JArray; if (fileNamesArray != null && fileLengthsArray != null) { var fileNames = new List <string>(fileNamesArray.Values <string>()); var fileLengths = new List <long>(fileLengthsArray.Values <long>()); //increment using lengths since 'file_names' //includes directories as well var total = fileLengths.Count; for (var i = 0; i < total; i++) { var fi = new TorrentFileInfo(fileNames[i].Trim(), fileLengths[i]); files.Add(fi); } } return(files); }
public async Task Setup() { int pieceCount = 40; int pieceLength = 256 * 1024; var torrentData = TestTorrentManagerInfo.Create( files: TorrentFileInfo.Create(pieceLength, ("File", pieceLength * pieceCount, "full/path/File")), pieceLength: pieceLength, size: pieceLength * pieceCount ); peers = new List <PeerId> (); torrentManager = TestRig.CreateSingleFileManager(torrentData.TorrentInfo.Size, torrentData.TorrentInfo.PieceLength); await torrentManager.LoadFastResumeAsync(new FastResume (torrentManager.InfoHashes, new BitField(pieceCount).SetAll(true), new BitField(pieceCount).SetAll(false))); manager = new PieceManager(torrentManager); manager.Initialise(); peer = PeerId.CreateNull(pieceCount); for (int i = 0; i < 20; i++) { PeerId p = PeerId.CreateNull(pieceCount); p.SupportsFastPeer = true; peers.Add(p); } }
private void Page_Loaded(object sender, RoutedEventArgs e) { if (Application.Current.Properties["tfinfo"] != null) { tfinfo = Application.Current.Properties["tfinfo"] as TorrentFileInfo; try { Player.LoadMedia(tfinfo.FilePath); } catch { string message = string.Format("Couldn't open file {0}", tfinfo.FilePath); MessageBox.Show(message, "WebTorrentX", MessageBoxButton.OK); GoBack(); } Thread t = new Thread(() => { while (Player.VlcMediaPlayer.State != Meta.Vlc.Interop.Media.MediaState.Stopped) { ThreadTask(); Thread.Sleep(500); } }); t.Start(); } }
TestTorrentManagerInfo CreateTestTorrentData() { return(TestTorrentManagerInfo.Create( size: 64 * 1024 * 40, pieceLength: 64 * 1024, files: TorrentFileInfo.Create(64 * 1024, 64 * 1024 * 40) )); }
ITorrentManagerInfo CreateTorrentInfo() { var files = TorrentFileInfo.Create(Constants.BlockSize * 8, 1024 * 1024 * 8); return(TestTorrentManagerInfo.Create( size: files.Single().Length, pieceLength: Constants.BlockSize * 8, files: files )); }
public void Setup() { var pieceLength = Constants.BlockSize * 8; var files = TorrentFileInfo.Create(pieceLength, ("Relative/Path.txt", Constants.BlockSize * 5, "Full/Path/Relative/Path.txt")); torrent = TestTorrentManagerInfo.Create(pieceLength: pieceLength, size: files.Single().Length, files: files); writer = new MemoryWriter(); cache = new MemoryCache(new MemoryPool(), Constants.BlockSize * 4, writer); }
static TestTorrentData CreateSingleFile() { int pieceLength = Piece.BlockSize * 16; var file = new TorrentFileInfo(new TorrentFile("Single", pieceLength * 32 + 123, 0, 33)); return(new TestTorrentData { Files = new[] { file }, PieceLength = pieceLength, Size = file.Length }); }
static ITorrentManagerInfo CreateSingleFile() { int pieceLength = 1024 * 16 * 16; var size = pieceLength * 32 + 123; return(TestTorrentManagerInfo.Create( pieceLength: pieceLength, size: size, files: TorrentFileInfo.Create(pieceLength, ("Single", size, "full/path/Single")) )); }
static TestTorrentData CreateSingleFile() { int pieceLength = 1024 * 16 * 16; var size = pieceLength * 32 + 123; var files = TorrentFileInfo.Create(pieceLength, ("Single", size, "full/path/Single")); return(new TestTorrentData { Files = files, PieceLength = pieceLength, Size = files.Single().Length }); }
public void Setup() { var pieceLength = Constants.BlockSize * 8; var files = TorrentFileInfo.Create(pieceLength, ("Relative/Path.txt", Constants.BlockSize * 5, "Full/Path/Relative/Path.txt")); torrent = new TorrentData { Files = files, PieceLength = pieceLength, Size = files.Single().Length, }; writer = new MemoryWriter(); cache = new MemoryCache(new MemoryPool(), Constants.BlockSize * 4, writer); }
public void Setup() { var pieceLength = Constants.BlockSize * 2; Temp = Path.GetTempPath() + "monotorrent_tests"; var files = TorrentFileInfo.Create(pieceLength, ("test1.file", 12345, Path.Combine(Temp, "test1.file")), ("test2.file", 12345, Path.Combine(Temp, "test2.file")), ("test3.file", 12345, Path.Combine(Temp, "test3.file")), ("test4.file", 12345, Path.Combine(Temp, "test4.file")) ); TorrentFile = files.First(); Others = files.Skip(1).ToArray(); }
private void Button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.InitialDirectory = "C:\\"; openFileDialog1.Filter = "torrent文件|*.torrent"; openFileDialog1.FilterIndex = 1; openFileDialog1.RestoreDirectory = true; string filepath = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { filepath = openFileDialog1.FileName; } StreamReader sr = new StreamReader(filepath); string s = sr.ReadToEnd(); FileStream file = File.OpenRead(filepath); BinaryReader binaryReader = new BinaryReader(file); TorrentFileInfo torrentFileInfo = BencodeUtil.GetTorrentFileInfo(binaryReader); SHA1 hash = new SHA1CryptoServiceProvider(); }
public void Setup() { int pieceCount = 40; int pieceLength = 256 * 1024; bitfield = new BitField(pieceCount); torrentData = new TestTorrentData { Files = TorrentFileInfo.Create(pieceLength, ("File", pieceLength * pieceCount, "Full/Path/File")), PieceLength = pieceLength, Size = pieceLength * pieceCount }; peers = new List <PeerId> (); picker = new StandardPicker(); picker.Initialise(torrentData); peer = PeerId.CreateNull(pieceCount); for (int i = 0; i < 20; i++) { PeerId p = PeerId.CreateNull(pieceCount); p.SupportsFastPeer = true; peers.Add(p); } }
static TestTorrentData CreateMultiFile() { int pieceLength = 1024 * 16 * 16; long[] sizes = { pieceLength * 10, pieceLength * 7 + 123, pieceLength * 32 + 123, pieceLength * 16 + 543, pieceLength * 19 + 591, pieceLength * 22 + 591, pieceLength * 0 + 12, // 12 byte file! pieceLength * 7, }; var files = TorrentFileInfo.Create(pieceLength, sizes); return(new TestTorrentData { Files = files, PieceLength = pieceLength, Size = files.Sum(t => t.Length) }); }
static ITorrentManagerInfo CreateMultiFile() { int pieceLength = 1024 * 16 * 16; long[] sizes = { pieceLength * 10, pieceLength * 7 + 123, pieceLength * 32 + 123, pieceLength * 16 + 543, pieceLength * 19 + 591, pieceLength * 22 + 591, pieceLength * 0 + 12, // 12 byte file! pieceLength * 7, }; var files = TorrentFileInfo.Create(pieceLength, sizes); return(TestTorrentManagerInfo.Create( files: files, pieceLength: pieceLength, size: files.Sum(t => t.Length) )); }
private static void ParseInfo(TorrentInfo torrent, TorrentFileInfo singleFile, ref bool isSingleFile, BDictionary dictionary) { Contract.Requires(torrent != null); Contract.Requires(singleFile != null); Contract.Requires(dictionary != null); foreach (var info in dictionary) { if (info.Key == null) continue; if (info.Key.Value == "name") { if (info.Value != null) { torrent.Name = info.Value.ToString(); } } else if (info.Key.Value == "piece length") { BInteger integer = info.Value as BInteger; if (integer != null) { torrent.PieceLength = integer.Value; } } else if (info.Key.Value == "pieces") { if (info.Value != null) { torrent.Pieces = info.Value.ToString(); } } else if (info.Key.Value == "private") { BInteger integer = info.Value as BInteger; if (integer != null) { torrent.Private = integer.Value != 0; } } else if (info.Key.Value == "files") { BList files = info.Value as BList; if (files != null) { foreach (var file in files) { BDictionary dict = file as BDictionary; if (dict != null) { torrent.Files.Add(TorrentFileInfo.Parse(dict)); } } } } else if (info.Key.Value == "file-duration") { isSingleFile = true; BList items = info.Value as BList; if (items != null) { foreach (var item in items) { BInteger integer = item as BInteger; if (integer != null) { singleFile.Duration.Add(integer.Value); } } } } else if (info.Key.Value == "file-media") { isSingleFile = true; BList items = info.Value as BList; if (items != null) { foreach (var item in items) { BInteger integer = item as BInteger; if (integer != null) { singleFile.Media.Add(integer.Value); } } } } else if (info.Key.Value == "profiles") { isSingleFile = true; BList items = info.Value as BList; if (items != null) { foreach (var item in items) { BDictionary dictItems = item as BDictionary; if (dictItems != null) { TorrentFileProfileCollection profiles = new TorrentFileProfileCollection(); profiles.AddRange(dictItems.Select(dictItem => new TorrentFileProfile { Name = dictItem.Key.ToString(), Value = dictItem.Value.ToString() })); singleFile.Profiles.Add(profiles); } } } } } }
public void PiecesRootNotNull() { TorrentFileInfo wrapper = new TorrentFileInfo(V2OnlyTorrent.Files[0], @"c:\test.a"); Assert.AreEqual(V2OnlyTorrent.Files[0].PiecesRoot, wrapper.PiecesRoot); }
/// <summary> /// 对付INFO的结构 /// </summary> /// <param name="TorrentBytes"></param> /// <param name="StarIndex"></param> /// <param name="ListCount"></param> private void GetFileInfo(byte[] TorrentBytes, ref int StarIndex, ref int ListCount) { if ((char)TorrentBytes[StarIndex] != 'd') { return; } StarIndex++; String getkey = GetKeyText(TorrentBytes, ref StarIndex).ToString().ToUpper(); while (getkey != "FILES" && getkey != "LENGTH") { object PieceLengthNumb = GetKeyNumb(TorrentBytes, ref StarIndex); char temp1 = (char)TorrentBytes[StarIndex]; while (temp1 == 'i') { object temp2 = GetKeyNumb(TorrentBytes, ref StarIndex); temp1 = (char)TorrentBytes[StarIndex]; } getkey = GetKeyText(TorrentBytes, ref StarIndex).ToString().ToUpper(); } if (getkey == "FILES") { TorrentFileInfoClass Info = new TorrentFileInfoClass(); while (true) { string TextStar = Encoding.UTF8.GetString(TorrentBytes, StarIndex, 1); switch (TextStar) { case "l": StarIndex++; ListCount++; break; case "e": ListCount--; StarIndex++; if (ListCount == 1) { TorrentFileInfo.Add(Info); } if (ListCount == 0) { return; } break; case "d": Info = new TorrentFileInfoClass(); ListCount++; StarIndex++; break; default: object ListText = GetKeyText(TorrentBytes, ref StarIndex); if (ListText == null) { return; } switch (ListText.ToString().ToUpper()) //转换为大写 { case "ED2K": Info.De2K = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case "FILEHASH": Info.FileHash = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case "LENGTH": Info.Length = Convert.ToInt64(GetKeyNumb(TorrentBytes, ref StarIndex)); break; case "PATH": int PathCount = 0; ArrayList PathList = GetKeyData(TorrentBytes, ref StarIndex, ref PathCount); string Temp = ""; for (int i = 0; i != PathList.Count; i++) { Temp += PathList[i].ToString(); } Info.Path = Temp; break; case "PATH.UTF-8": int PathUtf8Count = 0; ArrayList Pathutf8List = GetKeyData(TorrentBytes, ref StarIndex, ref PathUtf8Count); string UtfTemp = ""; for (int i = 0; i != Pathutf8List.Count; i++) { UtfTemp += Pathutf8List[i].ToString(); } Info.PathUTF8 = UtfTemp; break; } break; } } } else if (getkey == "LENGTH") { //单一文件结构时 TorrentFileInfoClass Info = new TorrentFileInfoClass(); Info.Length = Convert.ToInt64(GetKeyNumb(TorrentBytes, ref StarIndex)); string test = Encoding.UTF8.GetString(TorrentBytes, StarIndex, TorrentBytes.Length - StarIndex > 500 ? 500 : TorrentBytes.Length - StarIndex); string TextStar = Encoding.UTF8.GetString(TorrentBytes, StarIndex, 1); object ListText = GetKeyText(TorrentBytes, ref StarIndex); if (ListText.ToString().ToUpper() == "NAME") { Info.Path = GetKeyText(TorrentBytes, ref StarIndex).ToString(); TorrentFileInfo.Add(Info); TorrentName = Info.Path; } } }
///<summary> ///To deal with the structure of the INFO ///</ Summary> ///<param Name="TorrentBytes"> </ param> ///<param Name="StarIndex"> </ param> ///<param Name="ListCount"> </ param> private void GetFileInfo(byte[] TorrentBytes, ref int StarIndex, ref int ListCount) { if ((char)TorrentBytes[StarIndex] != 'd') { return; } StarIndex++; if (GetKeyText(TorrentBytes, ref StarIndex).ToString().ToUpper() == "FILES") { TorrentFileInfoClass Info = new TorrentFileInfoClass(); while (true) { string TextStar = Encoding.UTF8.GetString(TorrentBytes, StarIndex, 1); switch (TextStar) { case "l": StarIndex++; ListCount++; break; case "e": ListCount--; StarIndex++; if (ListCount == 1) { TorrentFileInfo.Add(Info); } if (ListCount == 0) { return; } break; case "d": Info = new TorrentFileInfoClass(); ListCount++; StarIndex++; break; default: object ListText = GetKeyText(TorrentBytes, ref StarIndex); if (ListText == null) { return; } switch (ListText.ToString().ToUpper()) // convert to uppercase { case "ED2K": Info.De2K = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case "THE FILEHASH": Info.FileHash = GetKeyText(TorrentBytes, ref StarIndex).ToString(); break; case "LENGTH": Info.Length = Convert.ToInt64(GetKeyNumb(TorrentBytes, ref StarIndex)); break; case "PATH": int pathcount = 0; ArrayList PathList = GetKeyData(TorrentBytes, ref StarIndex, ref pathcount); string Temp = ""; for (int i = 0; i != PathList.Count; i++) { Temp += PathList[i].ToString(); } Info.Path = Temp; break; case "PATH.UTF-8": int PathUtf8Count = 0; ArrayList Pathutf8List = GetKeyData(TorrentBytes, ref StarIndex, ref PathUtf8Count); string UtfTemp = ""; for (int i = 0; i != Pathutf8List.Count; i++) { UtfTemp += Pathutf8List[i].ToString(); } Info.PathUTF8 = UtfTemp; break; } break; } } } }
public static TorrentInfo Parse(BDictionary dictionary) { Contract.Requires(dictionary != null); if (dictionary == null) throw new ArgumentNullException("dictionary"); var torrent = new TorrentInfo(); TorrentFileInfo singleFile = new TorrentFileInfo(); bool isSingleFile = false; foreach (var item in dictionary) { if (item.Key == null) continue; if (item.Key.Value == "announce") { if (item.Value != null) { torrent.Announce = item.Value.ToString(); } } else if (item.Key.Value == "created by") { if (item.Value != null) { torrent.CreatedBy = item.Value.ToString(); } } else if (item.Key.Value == "creation date") { BInteger integer = item.Value as BInteger; if (integer != null) { torrent.CreationDate = new DateTime(1970, 1, 1).AddSeconds(integer.Value); } } else if (item.Key.Value == "encoding") { if (item.Value != null) { torrent.Encoding = item.Value.ToString(); } } else if (item.Key.Value == "info") { BDictionary dict = item.Value as BDictionary; if (dict != null) { ParseInfo(torrent, singleFile, ref isSingleFile, item.Value as BDictionary); } } } if (isSingleFile) { if (singleFile.Path != null) { singleFile.Path.Add(torrent.Name); } torrent.Files.Add(singleFile); } return torrent; }