Exemplo n.º 1
0
 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();
 }
Exemplo n.º 2
0
 public EngineTestRig(string savePath, PieceWriter writer)
     : this(savePath, 256 * 1024, writer)
 {
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
 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));
 }