public EngineTestRig(string savePath, int piecelength, PieceWriter writer) { if(writer == null) writer = new MemoryWriter(new NullWriter()); listener = new CustomListener(); engine = new ClientEngine(new EngineSettings(), listener, writer); torrentDict = CreateTorrent(piecelength); torrent = Torrent.Load(torrentDict); manager = new TorrentManager(torrent, savePath, new TorrentSettings()); engine.Register(manager); //manager.Start(); }
public EngineTestRig(string savePath, PieceWriter writer) : this(savePath, 256 * 1024, writer) { }
private static void CreateSingleFileTorrent(BEncodedDictionary dictionary, List<TorrentFile> mappings, PieceWriter writer, string name) { var infoDict = (BEncodedDictionary) dictionary["info"]; infoDict.Add("length", new BEncodedNumber(mappings[0].Length)); if (mappings[0].MD5 != null) infoDict["md5sum"] = (BEncodedString) mappings[0].MD5; }
private byte[] CalcPiecesHash(List<TorrentFile> files, PieceWriter writer) { var bufferRead = 0; long overallRead = 0; MD5 md5Hasher = null; var shaHasher = HashAlgoFactory.Create<SHA1>(); var torrentHashes = new List<byte>(); var overallTotal = files.Sum(x => x.Length); var pieceLength = PieceLength; var buffer = new byte[pieceLength]; if (StoreMD5) md5Hasher = HashAlgoFactory.Create<MD5>(); try { foreach (var file in files) { long fileRead = 0; if (md5Hasher != null) md5Hasher.Initialize(); while (fileRead < file.Length) { var toRead = (int) Math.Min(buffer.Length - bufferRead, file.Length - fileRead); var read = writer.Read(file, fileRead, buffer, bufferRead, toRead); if (md5Hasher != null) md5Hasher.TransformBlock(buffer, bufferRead, read, buffer, bufferRead); shaHasher.TransformBlock(buffer, bufferRead, read, buffer, bufferRead); bufferRead += read; fileRead += read; overallRead += read; if (bufferRead == buffer.Length) { bufferRead = 0; shaHasher.TransformFinalBlock(buffer, 0, 0); torrentHashes.AddRange(shaHasher.Hash); shaHasher.Initialize(); } RaiseHashed(new TorrentCreatorEventArgs(file.Path, fileRead, file.Length, overallRead, overallTotal)); } if (md5Hasher == null) continue; md5Hasher.TransformFinalBlock(buffer, 0, 0); md5Hasher.Initialize(); file.MD5 = md5Hasher.Hash; } if (bufferRead > 0) { shaHasher.TransformFinalBlock(buffer, 0, 0); torrentHashes.AddRange(shaHasher.Hash); } } finally { if (shaHasher != null) shaHasher.Clear(); if (md5Hasher != null) md5Hasher.Clear(); } return torrentHashes.ToArray(); }
private static void CreateMultiFileTorrent(BEncodedDictionary dictionary, List<TorrentFile> mappings, PieceWriter writer, string name) { var info = (BEncodedDictionary) dictionary["info"]; var files = mappings.ConvertAll(ToFileInfoDict); info.Add("files", new BEncodedList(files)); }