mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2026-09-22 11:21:22 +03:00
112 lines
2.4 KiB
C#
112 lines
2.4 KiB
C#
// CoreUtil
|
|
|
|
|
|
using System;
|
|
using System.Threading;
|
|
using System.Data;
|
|
using System.Data.Sql;
|
|
using System.Data.SqlClient;
|
|
using System.Data.SqlTypes;
|
|
using System.Text;
|
|
using System.Configuration;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Security.Cryptography;
|
|
using System.Web;
|
|
using System.Web.Security;
|
|
using System.Web.UI;
|
|
using System.Web.UI.WebControls;
|
|
using System.Web.UI.WebControls.WebParts;
|
|
using System.Web.UI.HtmlControls;
|
|
using System.IO;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Web.Mail;
|
|
using CoreUtil.Internal;
|
|
|
|
namespace CoreUtil
|
|
{
|
|
public static class ZLib
|
|
{
|
|
public static byte[] Compress(byte[] src)
|
|
{
|
|
return Compress(src, zlibConst.Z_DEFAULT_COMPRESSION);
|
|
}
|
|
public static byte[] Compress(byte[] src, int level)
|
|
{
|
|
return Compress(src, level, false);
|
|
}
|
|
public static byte[] Compress(byte[] src, int level, bool noHeader)
|
|
{
|
|
int dstSize = src.Length * 2 + 100;
|
|
byte[] dst = new byte[dstSize];
|
|
|
|
compress2(ref dst, src, level, noHeader);
|
|
|
|
return dst;
|
|
}
|
|
|
|
public static byte[] Uncompress(byte[] src, int originalSize)
|
|
{
|
|
byte[] dst = new byte[originalSize];
|
|
|
|
uncompress(ref dst, src);
|
|
|
|
return dst;
|
|
}
|
|
|
|
static void compress2(ref byte[] dest, byte[] src, int level, bool noHeader)
|
|
{
|
|
ZStream stream = new ZStream();
|
|
|
|
stream.next_in = src;
|
|
stream.avail_in = src.Length;
|
|
|
|
stream.next_out = dest;
|
|
stream.avail_out = dest.Length;
|
|
|
|
if (noHeader == false)
|
|
{
|
|
stream.deflateInit(level);
|
|
}
|
|
else
|
|
{
|
|
stream.deflateInit(level, -15);
|
|
}
|
|
|
|
stream.deflate(zlibConst.Z_FINISH);
|
|
|
|
Array.Resize<byte>(ref dest, (int)stream.total_out);
|
|
}
|
|
|
|
static void uncompress(ref byte[] dest, byte[] src)
|
|
{
|
|
ZStream stream = new ZStream();
|
|
|
|
stream.next_in = src;
|
|
stream.avail_in = src.Length;
|
|
|
|
stream.next_out = dest;
|
|
stream.avail_out = dest.Length;
|
|
|
|
stream.inflateInit();
|
|
|
|
int err = stream.inflate(zlibConst.Z_FINISH);
|
|
if (err != zlibConst.Z_STREAM_END)
|
|
{
|
|
stream.inflateEnd();
|
|
throw new ApplicationException();
|
|
}
|
|
|
|
Array.Resize<byte>(ref dest, (int)stream.total_out);
|
|
|
|
err = stream.inflateEnd();
|
|
if (err != zlibConst.Z_OK)
|
|
{
|
|
throw new ApplicationException();
|
|
}
|
|
}
|
|
}
|
|
}
|