private static IEnumerable <Packet> ParsePackets(TransmissionStream stream) { while (!stream.IsComplete) { yield return(ParsePacket(stream)); } }
private static Packet ParsePacket(TransmissionStream stream) { uint version = stream.ReadNumber(3); uint type = stream.ReadNumber(3); if (type == 4) { string v = String.Join("", ParseLiteral(stream)); ulong literal = Helpers.ParseBinaryLong(v); return(new LiteralPacket(version, type, literal)); } else { char lengthType = stream.Read(1).Single(); if (lengthType == '0') { return(new OperatorPacket(version, type, ParsePackets(stream.SubStream((int)stream.ReadNumber(15))).ToArray())); } else { return(new OperatorPacket(version, type, ((int)stream.ReadNumber(11)).Times(() => ParsePacket(stream)).ToArray())); } } }
public void ConstructorTakesTransmissionAndStream() { var transmission = new Transmission(TransmissionType.DOWNLOAD_MODIFIED_FILE, "path"); using (var stream = new MemoryStream()) using (var underTest = new TransmissionStream(stream, transmission)) { } }
private static IEnumerable <string> ParseLiteral(TransmissionStream stream) { var group = stream.ReadString(5); yield return(group.Substring(1, 4)); if (group[0] == '1') { group = stream.ReadString(5); yield return(group.Substring(1, 4)); } }
public void AbortWriteIfAbortIsCalled() { var transmission = new Transmission(TransmissionType.DOWNLOAD_MODIFIED_FILE, "path"); using (var inputStream = new MemoryStream(new byte[1024 * 1024 * 10])) using (var stream = new Mock <MemoryStream>() { CallBase = true }.Object) using (var underTest = new TransmissionStream(stream, transmission)) { transmission.Abort(); Assert.Throws <AbortException>(() => inputStream.CopyTo(underTest)); Mock.Get(stream).Verify(s => s.WriteByte(It.IsAny <byte>()), Times.Never()); Mock.Get(stream).Verify(s => s.Write(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>()), Times.Never()); } }
public void AbortReadIfAbortIsCalled() { var transmission = new Transmission(TransmissionType.DOWNLOAD_MODIFIED_FILE, "path"); byte[] content = new byte[1024]; using (var outputStream = new MemoryStream()) using (var stream = new Mock <MemoryStream>() { CallBase = true }.Object) using (var underTest = new TransmissionStream(stream, transmission)) { transmission.Abort(); Assert.Throws <AbortException>(() => underTest.CopyTo(outputStream)); Mock.Get(stream).Verify(s => s.ReadByte(), Times.Never()); Mock.Get(stream).Verify(s => s.Read(It.IsAny <byte[]>(), It.IsAny <int>(), It.IsAny <int>()), Times.Never()); } }