Пример #1
0
        /// <summary>
        /// 拷贝流
        /// </summary>
        /// <param name="input"></param>
        /// <param name="output"></param>
        private static void CopyStream(MemoryStream input, ZOutputStream output)
        {
            byte[] buffer = new byte[2000];
            int    len;

            while ((len = input.Read(buffer, 0, 2000)) > 0)
            {
                output.Write(buffer, 0, len);
            }
            output.Flush();
        }
Пример #2
0
        /// <summary>
        /// Compresses the given <paramref name="input" />
        /// </summary>
        /// <param name="input">The data to compress</param>
        /// <returns></returns>
        public static byte[] Compress(byte[] input)
        {
            var sourceStream = new MemoryStream();
            var stream       = new ZOutputStream(sourceStream, -1);

            // write zlib header
            stream.Write(input);
            stream.Finish();

            return(sourceStream.GetBuffer());
        }
Пример #3
0
 public static void DecompressData(byte[] inData, out byte[] outData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
             using (Stream inMemoryStream = new MemoryStream(inData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 outData = outMemoryStream.ToArray();
             }
 }
 internal CmsCompressedOutputStream(
     ZOutputStream outStream,
     BerSequenceGenerator sGen,
     BerSequenceGenerator cGen,
     BerSequenceGenerator eiGen)
 {
     _out   = outStream;
     _sGen  = sGen;
     _cGen  = cGen;
     _eiGen = eiGen;
 }
Пример #5
0
 public byte[] DecompressData(byte[] inData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
     {
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
         {
             outZStream.Write(inData, 0, inData.Length);
             return(outMemoryStream.ToArray());
         }
     }
 }
Пример #6
0
 public static byte[] Decompress(byte[] zippedData)
 {
     using (var outMemoryStream = new MemoryStream())
         using (var outZStream = new ZOutputStream(outMemoryStream))
             using (var inMemoryStream = new MemoryStream(zippedData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
Пример #7
0
 public static byte[] Compress(byte[] rawData)
 {
     using (var outMemoryStream = new MemoryStream())
         using (var outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
             using (var inMemoryStream = new MemoryStream(rawData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
Пример #8
0
 public byte[] Compress(byte[] datas)
 {
     using (var outMemoryStream = new MemoryStream())
         using (var outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
             using (Stream inMemoryStream = new MemoryStream(datas))
             {
                 CopyTo(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
Пример #9
0
 public byte[] Decompress(byte[] datas)
 {
     using (var outMemoryStream = new MemoryStream())
         using (var outZStream = new ZOutputStream(outMemoryStream))
             using (Stream inMemoryStream = new MemoryStream(datas))
             {
                 CopyTo(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
Пример #10
0
 public static void CompressData(byte[] inData, out byte[] outData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
             using (Stream inMemoryStream = new MemoryStream(inData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 outData = outMemoryStream.ToArray();
             }
 }
Пример #11
0
 private static byte[] Decompress(byte[] inData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
             using (Stream inMemoryStream = new MemoryStream(inData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
Пример #12
0
 /// <summary>
 /// Deflate a string using zlib.net library since IronRuby's Deflate module is buggy, f**k
 /// </summary>
 /// <param name="data">The string to compress</param>
 /// <returns>The decompressed string as a Ruby string</returns>
 public static MutableString ZlibDeflate(string data)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_BEST_COMPRESSION))
         {
             byte[] bytes = Encoding.UTF8.GetBytes(data);
             outZStream.Write(bytes, 0, bytes.Length);
             outZStream.finish();
             return(MutableString.CreateBinary(outMemoryStream.ToArray()));
         }
 }
Пример #13
0
 private static byte[] Compress(byte[] inData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
             using (Stream inMemoryStream = new MemoryStream(inData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
        private void StoreLayerDataBase64(List <int> tileIndices, XmlWriter xmlWriter, string dataCompression)
        {
            byte[] tileBytes = ConvertTileIndicesToBytes(tileIndices);

            if (dataCompression == "none")
            {
                string base64Data = Convert.ToBase64String(tileBytes);
                xmlWriter.WriteString(base64Data);
            }
            else if (dataCompression == "gzip")
            {
                MemoryStream inMemoryStream  = new MemoryStream(tileBytes);
                MemoryStream outMemoryStream = new MemoryStream();
                GZipStream   outGZipStream   = new GZipStream(outMemoryStream, CompressionMode.Compress);

                byte[] buffer = new byte[1024];
                while (true)
                {
                    int bytesRead = inMemoryStream.Read(buffer, 0, buffer.Length);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    outGZipStream.Write(buffer, 0, bytesRead);
                }
                outGZipStream.Close();

                byte[] compressedBytes = outMemoryStream.ToArray();
                string base64Data      = Convert.ToBase64String(compressedBytes);
                xmlWriter.WriteString(base64Data);
            }
            else if (dataCompression == "zlib")
            {
                MemoryStream  inMemoryStream  = new MemoryStream(tileBytes);
                MemoryStream  outMemoryStream = new MemoryStream();
                ZOutputStream zOutputStream   = new ZOutputStream(outMemoryStream, 9);

                byte[] buffer = new byte[1024];
                while (true)
                {
                    int bytesRead = inMemoryStream.Read(buffer, 0, buffer.Length);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    zOutputStream.Write(buffer, 0, bytesRead);
                }
                zOutputStream.Close();

                byte[] compressedBytes = outMemoryStream.ToArray();
                string base64Data      = Convert.ToBase64String(compressedBytes);
                xmlWriter.WriteString(base64Data);
            }
        }
 public static byte[] Uncompress(byte[] datas)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
             using (Stream inMemoryStream = new MemoryStream(datas))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 return(outMemoryStream.ToArray());
             }
 }
        public void CopyStream(Stream input, ZOutputStream output)
        {
            // Read compressed data and send it to the decompressor
            var buffer = new byte[2000];
            int len;

            while ((len = input.Read(buffer, 0, 2000)) > 0)
            {
                output.Write(buffer, 0, len);
            }
            output.Flush();
        }
Пример #17
0
        public Stream Decompress(Stream sourceStream)
        {
            outputStream.SetLength(0);
            //解压
            ZOutputStream zStream = new ZOutputStream(outputStream);

            CopyStream(sourceStream, zStream);
            sourceStream.SetLength(0);
            outputStream.Position = 0;
            CopyStream(outputStream, sourceStream);
            return(sourceStream);
        }
        /// <summary>
        /// Compresses the data array.
        /// </summary>
        /// <param name="data">The data to compress.</param>
        /// <returns>The compressed data.</returns>
        private static byte[] CompressData(byte[] data)
        {
            using (var compressedStream = new MemoryStream())
            {
                using (var outputStream = new ZOutputStream(compressedStream, zlibConst.Z_DEFAULT_COMPRESSION))
                {
                    outputStream.Write(data, 0, data.Length);
                }

                return(compressedStream.ToArray());
            }
        }
Пример #19
0
        public static byte[] Decompress(byte[] data, int size)
        {
            byte[]        output = new byte[size];
            ZOutputStream zos    = new ZOutputStream(new MemoryStream(output));

            try
            {
                CopyStream(new MemoryStream(data), zos, size);
            }
            catch { throw new Exception("Invalid zlib data"); }
            return(output);
        }
Пример #20
0
        internal static void CompressData(Stream inData, Stream outData, int CompressLevel = 9)
        {
            MemoryStream  tmp        = new MemoryStream();
            ZOutputStream outZStream = new ZOutputStream(tmp, CompressLevel);

            CopyStream(inData, outZStream);
            outZStream.Finish();
            tmp.Position = 0;
            CopyStream(tmp, outData);
            outZStream.Close();
            tmp.Close();
        }
 public static byte[] DecompressBytes(byte[] inData)
 {
     using (MemoryStream outMemoryStream = new MemoryStream())
         using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream))
             using (Stream inMemoryStream = new MemoryStream(inData))
             {
                 CopyStream(inMemoryStream, outZStream);
                 outZStream.finish();
                 outMemoryStream.Seek(0, SeekOrigin.Begin);
                 return(outMemoryStream.ToArray());
             }
 }
Пример #22
0
        public void writeCompressedRaw(byte[] bytes)
        {
            using (MemoryStream outMemoryStream = new MemoryStream())
                using (ZOutputStream compress = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION))
                {
                    compress.Write(bytes, 0, bytes.Length);
                    compress.finish();

                    byte[] data = outMemoryStream.ToArray();
                    Write(data);
                }
        }
Пример #23
0
        public static int StartGame()
        {
            // detect if executable is found
            if (!System.IO.File.Exists(Globals.ClientExecutable))
            {
                return(-1);
            }

            // generate token
            string token = GenerateToken(Globals.LauncherConfig.Email, Globals.LauncherConfig.Password);

            // get profile ID
            string accountId = "0";

            try
            {
                new HttpUtils.Create(null, Globals.LauncherConfig.BackendUrl).Post("/launcher/profile/login", token, true, (data) => {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (ZOutputStream zip = new ZOutputStream(ms))
                        {
                            zip.CopyTo(ms);
                            accountId = System.Text.Encoding.UTF8.GetString(ms.ToArray());
                        }
                    }
                });
            }
            catch
            {
                return(-2);
            }

            // account is not found
            if (accountId == "0")
            {
                return(-3);
            }

            // set backend url
            Globals.ClientConfig.BackendUrl = Globals.LauncherConfig.BackendUrl;
            Json.Save <ClientConfig>(Globals.ClientConfigFile, Globals.ClientConfig);

            // start game
            ProcessStartInfo clientProcess = new ProcessStartInfo(Globals.ClientExecutable);

            clientProcess.Arguments        = "-bC5vLmcuaS5u=" + token + " -token=" + accountId + " -screenmode=fullscreen";
            clientProcess.UseShellExecute  = false;
            clientProcess.WorkingDirectory = Environment.CurrentDirectory;

            Process.Start(clientProcess);
            return(1);
        }
Пример #24
0
 private void deflateEntries(out Dictionary <Entry, byte[]> entryDeflatedData, out List <uint> zLengths, uint blockSize)
 {
     entryDeflatedData = new Dictionary <Entry, byte[]>();
     zLengths          = new List <uint>();
     foreach (Entry current in this.Entries)
     {
         current.zIndex = (uint)zLengths.Count;
         current.Data.Seek(0, SeekOrigin.Begin);
         Stream data = current.Data;
         List <Tuple <byte[], int> > list = new List <Tuple <byte[], int> >();
         while (data.Position < data.Length)
         {
             byte[]        array         = new byte[2 * blockSize];
             MemoryStream  memoryStream  = new MemoryStream(array);
             byte[]        array2        = new byte[blockSize];
             int           num           = data.Read(array2, 0, array2.Length);
             ZOutputStream zOutputStream = new ZOutputStream(memoryStream, 9);
             zOutputStream.Write(array2, 0, num);
             zOutputStream.Flush();
             zOutputStream.finish();
             int num2 = (int)zOutputStream.TotalOut;
             if (num2 > num)
             {
                 list.Add(new Tuple <byte[], int>(array2, num));
             }
             else
             {
                 if (num2 < (blockSize - 1))
                 {
                     list.Add(new Tuple <byte[], int>(array, num2));
                 }
                 else
                 {
                     list.Add(new Tuple <byte[], int>(array2, num));
                 }
             }
         }
         int num3 = 0;
         foreach (Tuple <byte[], int> current2 in list)
         {
             num3 += current2.Item2;
             zLengths.Add((uint)current2.Item2);
         }
         byte[]       array3        = new byte[num3];
         MemoryStream memoryStream2 = new MemoryStream(array3);
         foreach (Tuple <byte[], int> current2 in list)
         {
             memoryStream2.Write(current2.Item1, 0, current2.Item2);
         }
         entryDeflatedData.Add(current, array3);
     }
 }
Пример #25
0
        public static byte[] Uncompress(byte[] compressed, int sizeUncompressed)
        {
            var uncompressed = new byte[sizeUncompressed];
            var zstream      = new ZOutputStream(new MemoryStream(uncompressed));

            zstream.Write(compressed, 0, compressed.Length);
            zstream.finish();
            if (zstream.TotalOut != sizeUncompressed)
            {
                throw new IOException("Failure uncompressing data.");
            }
            return(uncompressed);
        }
Пример #26
0
        public long ZlibManagedDeflate()
        {
            using (var output = new MemoryStream())
            {
                using (var deflate = new ZOutputStream(output, (ZlibCompression)this.Compression))
                {
                    var buffer = data;
                    deflate.Write(buffer, 0, buffer.Length);
                }

                return(output.Length);
            }
        }
Пример #27
0
        public byte[] ReadCompressed()
        {
            uint compresed_size    = this.ReadUInt32();
            uint uncompressed_size = this.ReadUInt32BE();

            using (MemoryStream outMemoryStream = new MemoryStream())
                using (ZOutputStream decompress = new ZOutputStream(outMemoryStream))
                {
                    decompress.Write(this.ReadBytes(compresed_size - 4), 0, (int)compresed_size - 4);
                    decompress.finish();
                    return(outMemoryStream.ToArray());
                }
        }
Пример #28
0
        public void writeCompressed(byte[] bytes)
        {
            using (MemoryStream outMemoryStream = new MemoryStream())
                using (ZOutputStream compress = new ZOutputStream(outMemoryStream, zlibConst.Z_DEFAULT_COMPRESSION)) {
                    compress.Write(bytes, 0, bytes.Length);
                    compress.finish();

                    byte[] data = outMemoryStream.ToArray();
                    this.Write((uint)data.Length + sizeof(uint));
                    this.writeUInt32BE((uint)bytes.Length);
                    this.Write(data);
                }
        }
Пример #29
0
        /// <summary>
        /// zlib 压缩算法
        /// </summary>
        /// <param name="bytes"></param>
        /// <returns></returns>
        public static byte[] Compress(byte[] bytes)
        {
            using (var ms = new MemoryStream())
            {
                using (ZOutputStream outZStream = new ZOutputStream(ms, zlibConst.Z_BEST_SPEED))
                {
                    outZStream.Write(bytes, 0, bytes.Length);
                    outZStream.Flush();
                }

                return(ms.ToArray());
            }
        }
Пример #30
0
        public static byte[] decompress(byte[] data, UInt32 realsize)
        {
            MemoryStream  o = new MemoryStream();
            ZOutputStream z = new ZOutputStream(o);
            MemoryStream  i = new MemoryStream(data);

            CopyStream(i, z);
            byte[] res = o.ToArray();
            i.Close();
            z.Close();
            o.Close();
            return(res);
        }
Пример #31
0
        public static OSD ZDecompressOSD(byte[] data)
        {
            OSD ret;

            using (MemoryStream input = new MemoryStream(data))
            using (MemoryStream output = new MemoryStream())
            using (ZOutputStream zout = new ZOutputStream(output))
            {
                CopyStream(input, zout);
                zout.finish();
                output.Seek(0, SeekOrigin.Begin);
                ret = OSDParser.DeserializeLLSDBinary(output);
            }

            return ret;
        }
Пример #32
0
        public static byte[] ZCompressOSD(OSD data)
        {
            byte[] ret = null;

            using (MemoryStream outMemoryStream = new MemoryStream())
            using (ZOutputStream outZStream = new ZOutputStream(outMemoryStream, zlibConst.Z_BEST_COMPRESSION))
            using (Stream inMemoryStream = new MemoryStream(OSDParser.SerializeLLSDBinary(data, false)))
            {
                CopyStream(inMemoryStream, outZStream);
                outZStream.finish();
                ret = outMemoryStream.ToArray();
            }

            return ret;
        }
Пример #33
0
        /// <summary>
        /// Decodes mesh asset. See <see cref="OpenMetaverse.Rendering.FacetedMesh.TryDecodeFromAsset"/>
        /// to furter decode it for rendering</summary>
        /// <returns>true</returns>
        public override bool Decode()
        {
            try
            {
                MeshData = new OSDMap();

                using (MemoryStream data = new MemoryStream(AssetData))
                {
                    OSDMap header = (OSDMap)OSDParser.DeserializeLLSDBinary(data);
                    long start = data.Position;

                    foreach(string partName in header.Keys)
                    {
                        if (header[partName].Type != OSDType.Map)
                        {
                            MeshData[partName] = header[partName];
                            continue;
                        }

                        OSDMap partInfo = (OSDMap)header[partName];
                        if (partInfo["offset"] < 0 || partInfo["size"] == 0)
                        {
                            MeshData[partName] = partInfo;
                            continue;
                        }

                        byte[] part = new byte[partInfo["size"]];
                        Buffer.BlockCopy(AssetData, partInfo["offset"] + (int)start, part, 0, part.Length);

                        using (MemoryStream input = new MemoryStream(part))
                        {
                            using (MemoryStream output = new MemoryStream())
                            {
                                using (ZOutputStream zout = new ZOutputStream(output))
                                {
                                    byte[] buffer = new byte[2048];
                                    int len;
                                    while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
                                    {
                                        zout.Write(buffer, 0, len);
                                    }
                                    zout.Flush();
                                    output.Seek(0, SeekOrigin.Begin);
                                    MeshData[partName] = OSDParser.DeserializeLLSDBinary(output);
                                }
                            }
                        }
                    }
                }
                return true;
            }
            catch (Exception ex)
            {
                Logger.Log("Failed to decode mesh asset", Helpers.LogLevel.Error, ex);
                return false;
            }
        }
Пример #34
0
 public void Deserialize(OSDMap map)
 {
     try
     {
         using (MemoryStream input = new MemoryStream(map["Zipped"].AsBinary()))
         {
             using (MemoryStream output = new MemoryStream())
             {
                 using (ZOutputStream zout = new ZOutputStream(output))
                 {
                     byte[] buffer = new byte[2048];
                     int len;
                     while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
                     {
                         zout.Write(buffer, 0, len);
                     }
                     zout.Flush();
                     output.Seek(0, SeekOrigin.Begin);
                     MaterialData = OSDParser.DeserializeLLSDBinary(output);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Log("Failed to decode RenderMaterials message:", Helpers.LogLevel.Warning, ex);
         MaterialData = new OSDMap();
     }
 }
Пример #35
0
        /// <summary>
        /// decompresses a gzipped OSD object
        /// </summary>
        /// <param name="meshBytes"></param>
        /// <returns></returns>
        static OSD DecompressOsd (byte [] meshBytes)
        {
            OSD decodedOsd = null;

            using (MemoryStream outMs = new MemoryStream ()) {
                using (ZOutputStream zOut = new ZOutputStream (outMs)) {
                    using (Stream inMs = new MemoryStream (meshBytes)) {
                        byte [] readBuffer = new byte [meshBytes.Length];
                        int readLen;

                        while ((readLen = inMs.Read (readBuffer, 0, readBuffer.Length)) > 0) {
                            zOut.Write (readBuffer, 0, readLen);
                        }
                        zOut.Flush ();
                        zOut.finish ();

                        byte [] decompressedBuf = outMs.GetBuffer (); //  ToArray();

                        decodedOsd = OSDParser.DeserializeLLSDBinary (decompressedBuf);
                    }
                }
            }

            return decodedOsd;
        }
        /// <summary>
        /// Decompress bytes to osd.
        /// </summary>
        /// <returns>The decompressed osd.</returns>
        /// <param name="input">Input.</param>
        public static OSD ZDecompressBytesToOsd(byte[] input)
        {
            OSD osd;

            using (MemoryStream msSinkUnCompressed = new MemoryStream())
            {
                using (ZOutputStream zOut = new ZOutputStream(msSinkUnCompressed))
                {
                    using (Stream inMs = new MemoryStream(input))
                    {
                        CopyStream(inMs, zOut);
                        zOut.finish();

                        osd = OSDParser.DeserializeLLSDBinary(msSinkUnCompressed.ToArray());
                    }
                }
            }

            return osd;
        }
        /// <summary>
        /// Compress an OSD.
        /// </summary>
        /// <returns>The compressed OSD</returns>
        /// <param name="inOsd">In osd.</param>
        /// <param name="useHeader">If set to <c>true</c> use header.</param>
        public static OSD ZCompressOSD(OSD inOsd, bool useHeader)
        {
            OSD osd;

            using (MemoryStream msSinkCompressed = new MemoryStream())
            {
                using (ZOutputStream zOut = new ZOutputStream(msSinkCompressed, zlibConst.Z_DEFAULT_COMPRESSION))
                {
                    CopyStream(new MemoryStream(OSDParser.SerializeLLSDBinary(inOsd, useHeader)), zOut);
                    zOut.finish();

                    osd = OSD.FromBinary(msSinkCompressed.ToArray());
                }
            }

            return osd;
        }