Пример #1
0
        public ClaimsSetMetadata(byte[] data)
        {
            var pacStream = new NdrBinaryReader(data);

            Header = new RpcHeader(pacStream);

            ClaimSetSize = pacStream.ReadInt();

            pacStream.Seek(4);

            CompressionFormat        = (CompressionFormat)pacStream.ReadInt();
            UncompressedClaimSetSize = pacStream.ReadInt();
            ReservedType             = pacStream.ReadShort();
            ReservedFieldSize        = pacStream.ReadInt();

            pacStream.Align(8);
            var size = pacStream.ReadInt();

            if (size != ClaimSetSize)
            {
                throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}");
            }

            var claimSet = pacStream.Read(ClaimSetSize);

            if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat);
            }

            ClaimsSet = new ClaimsSet(claimSet);

            ReservedField = pacStream.Read(ReservedFieldSize);
        }
Пример #2
0
        public override void ReadBody(NdrBinaryStream Stream)
        {
            ClaimSetSize = Stream.ReadInt();

            Stream.Seek(4);

            CompressionFormat        = (CompressionFormat)Stream.ReadInt();
            UncompressedClaimSetSize = Stream.ReadInt();
            ReservedType             = Stream.ReadShort();
            ReservedFieldSize        = Stream.ReadInt();

            Stream.Align(8);

            var size = Stream.ReadInt();

            if (size != ClaimSetSize)
            {
                throw new InvalidDataException($"Data length {size} doesn't match expected ClaimSetSize {ClaimSetSize}");
            }

            var claimSet = Stream.ReadSpan(ClaimSetSize);

            if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet, UncompressedClaimSetSize, CompressionFormat);
            }

            ClaimsSet = new ClaimsSet();
            ClaimsSet.Decode(claimSet.AsMemory());

            ReservedField = Stream.Read(ReservedFieldSize);
        }
Пример #3
0
        private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet)
        {
            if (CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet.Span, UncompressedClaimSetSize, CompressionFormat);
            }

            var claimsSet = new ClaimsSet();

            new NdrBuffer(claimSet).UnmarshalObject(claimsSet);

            return(claimsSet);
        }
Пример #4
0
        private ClaimsSet UnmarshalClaimsSet(ReadOnlyMemory <byte> claimSet)
        {
            if (this.CompressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                claimSet = Compressions.Decompress(claimSet.Span, this.UncompressedClaimSetSize, this.CompressionFormat);
            }

            var claimsSet = new ClaimsSet();

            using (var buffer = new NdrBuffer(claimSet))
            {
                buffer.UnmarshalObject(claimsSet);
            }

            return(claimsSet);
        }
Пример #5
0
        private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize)
        {
            var buffer = new NdrBuffer();

            buffer.MarshalObject(claimsSet);

            ReadOnlySpan <byte> encoded = buffer.ToSpan(alignment: 8);

            originalSize = encoded.Length;

            if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                encoded = Compressions.Compress(encoded, compressionFormat);
            }

            return(encoded);
        }
Пример #6
0
        private static ReadOnlySpan <byte> Compress(ClaimsSet claimsSet, CompressionFormat compressionFormat, out int originalSize)
        {
            var stream = new NdrBinaryStream();

            claimsSet.Encode(stream);

            var encoded = stream.ToSpan();

            originalSize = encoded.Length;

            if (compressionFormat != CompressionFormat.COMPRESSION_FORMAT_NONE)
            {
                encoded = Compressions.Compress(encoded, compressionFormat);
            }

            return(encoded);
        }
Пример #7
0
        void CargarHistorial()
        {
            string       Historial        = Path.GetFullPath("Datos LZW\\" + "Historial.txt");
            FileStream   ArchivoHistotial = new FileStream(Historial, FileMode.OpenOrCreate);
            StreamReader reader           = new StreamReader(ArchivoHistotial);
            string       Texto            = reader.ReadToEnd();

            string[] Archivos = Texto.Split('~');
            int      Posicion = 0;

            if (Archivos.Length > 1)
            {
                while (Archivos.Length > Posicion + 1)
                {
                    Compressions NuevoArchivo = new Compressions();
                    // 0-> Nombre Original
                    if (Archivos[Posicion].Contains("\r\n"))
                    {
                        NuevoArchivo.NombreOriginal = Archivos[Posicion++].Substring(2);
                    }
                    else
                    {
                        NuevoArchivo.NombreOriginal = Archivos[Posicion++];
                    }
                    // 1 -> Peso de Original
                    int SizeOriginal = Convert.ToInt32(Archivos[Posicion++]);
                    // 2 -> Nombre Comprimido
                    NuevoArchivo.NombreComprimido = Archivos[Posicion++];
                    // 3 -> Peso Comprimido
                    int SizeComprimido = Convert.ToInt32(Archivos[Posicion++]);
                    DicCompress.Add(NuevoArchivo.NombreOriginal, NuevoArchivo.NombreComprimido);
                    DicDecompress.Add(NuevoArchivo.NombreComprimido, NuevoArchivo.NombreOriginal);
                    NuevoArchivo.RazonCompresion     = (double)SizeComprimido / SizeOriginal;
                    NuevoArchivo.FactorCompresion    = (double)SizeOriginal / SizeComprimido;
                    NuevoArchivo.PorcentajeReduccion = (double)NuevoArchivo.FactorCompresion * 100;
                    NuevoArchivo.RutaComprimido      = Path.GetFullPath("Archivos Compress\\" + NuevoArchivo.NombreComprimido);

                    ListArchivos.Add(NuevoArchivo);
                }
            }
            reader.Close();
            ArchivoHistotial.Close();
        }
Пример #8
0
 public IActionResult Compress([FromForm] IFormFile file, [FromRoute] string name)
 {
     try
     {
         Compressions NuevoArchivo    = new Compressions();
         string       RutaOriginal    = Path.GetFullPath("Archivos Originales\\" + file.FileName);
         string       RutaCompresion  = Path.GetFullPath("Archivos Compress\\" + name + ".lzw");
         FileStream   ArchivoOriginal = new FileStream(RutaOriginal, FileMode.OpenOrCreate);
         file.CopyTo(ArchivoOriginal);
         ArchivoOriginal.Close();
         Compresor.Comprimir(RutaOriginal, RutaCompresion);
         FileInfo Original   = new FileInfo(RutaOriginal);
         FileInfo Comprimido = new FileInfo(RutaCompresion);
         NuevoArchivo.NombreOriginal   = file.FileName;
         NuevoArchivo.NombreComprimido = name + ".lzw";
         if (!DicCompress.ContainsKey(NuevoArchivo.NombreOriginal))
         {
             DicCompress.Add(NuevoArchivo.NombreOriginal, NuevoArchivo.NombreComprimido);
             DicDecompress.Add(NuevoArchivo.NombreComprimido, NuevoArchivo.NombreOriginal);
             NuevoArchivo.RazonCompresion     = (double)Comprimido.Length / Original.Length;
             NuevoArchivo.FactorCompresion    = (double)Original.Length / Comprimido.Length;
             NuevoArchivo.PorcentajeReduccion = (double)NuevoArchivo.FactorCompresion * 100;
             NuevoArchivo.RutaComprimido      = Path.GetFullPath("Archivos Compress\\" + NuevoArchivo.NombreComprimido);
             ListArchivos.Add(NuevoArchivo);
             string       Historial = Path.GetFullPath("Datos LZW\\" + "Historial.txt");
             StreamWriter writer    = new StreamWriter(Historial, true);
             string       Texto     = NuevoArchivo.NombreOriginal + "~" + Original.Length + "~" + NuevoArchivo.NombreComprimido + "~" + Comprimido.Length + "~";
             writer.WriteLine(Texto);
             writer.Close();
         }
         FileStream       ArchivoFinal = new FileStream(RutaCompresion, FileMode.Open);
         FileStreamResult FileFinal    = new FileStreamResult(ArchivoFinal, "text/lzw");
         return(FileFinal);
     }
     catch (Exception ex)
     {
         return(BadRequest(ex.Message));
     }
 }
        public List <Compressions> Get()
        {
            Compressions ResultCompress = new Compressions();

            return(ResultCompress.DataCompressions());
        }