示例#1
0
        public override PhpStream Open(ref string path, string mode, StreamOpenOptions options, StreamContext context)
        {
            int level = -1;
            DeflateFilterMode deflateMode = DeflateFilterMode.Normal;

            #region Parse mode options
            // PHP just looks whether there are mode flags in the mode string (skip the first character)
            // last flag is the valid one

            for (int i = 1; i < mode.Length; i++)
            {
                if (Char.IsDigit(mode[i]))
                {
                    level = mode[i] - '0';
                }
                else if (mode[i] == 'f')
                {
                    deflateMode = DeflateFilterMode.Filter;
                }
                else if (mode[i] == 'h')
                {
                    deflateMode = DeflateFilterMode.Huffman;
                }
            }

            #endregion

            #region Path correction

            if (path.StartsWith("compress.zlib://"))
            {
                path = path.Substring(16);
            }
            else if (path.StartsWith("zlib:"))
            {
                path = path.Substring(5);
            }

            #endregion

            PhpStream stream = PhpStream.Open(path, mode, options);

            if (stream != null && stream.CanRead)
            {
                stream.AddFilter(new GzipUncompressionFilter(), FilterChainOptions.Read);
            }

            if (stream != null && stream.CanWrite)
            {
                stream.AddFilter(new GzipCompresionFilter(level, deflateMode), FilterChainOptions.Write);
            }

            return(stream);
        }
示例#2
0
 public GzipCompresionFilter(int level, DeflateFilterMode mode)
     : base(level, mode)
 {
     _crc = new PhpHash.HashPhpResource.CRC32B();
     _state = CompressionState.Header;
 }
示例#3
0
 public DeflateFilter(int level, DeflateFilterMode mode)
     : base()
 {
     _level = level;
     _mode = mode;
 }
示例#4
0
 public GzipCompresionFilter(int level, DeflateFilterMode mode)
     : base(level, mode)
 {
     _crc   = new PhpHash.HashPhpResource.CRC32B();
     _state = CompressionState.Header;
 }
示例#5
0
 public DeflateFilter(int level, DeflateFilterMode mode)
     : base()
 {
     _level = level;
     _mode  = mode;
 }