Exemple #1
0
        // As server
        private void processSecWebSocketExtensionsHeader(string value)
        {
            var buff = new StringBuilder(32);

            var compress = false;

            foreach (var extension in value.SplitHeaderValue(','))
            {
                var trimed     = extension.Trim();
                var unprefixed = trimed.RemovePrefix("x-webkit-");


                if (!compress && unprefixed.IsCompressionExtension(CompressionMethod.Deflate))
                {
                    _compression = CompressionMethod.Deflate;
                    var str = _compression.ToExtensionString(
                        "client_no_context_takeover", "server_no_context_takeover");

                    buff.AppendFormat("{0}, ", str);
                    compress = true;
                }
            }

            var len = buff.Length;

            if (len > 0)
            {
                buff.Length = len - 2;
                _extensions = buff.ToString();
            }
        }
Exemple #2
0
        internal static CompressionMethod ToCompressionMethod(this string value)
        {
            IEnumerator enumerator = Enum.GetValues(typeof(CompressionMethod)).GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    object            obj = enumerator.Current;
                    CompressionMethod compressionMethod = (CompressionMethod)obj;
                    if (compressionMethod.ToExtensionString() == value)
                    {
                        return(compressionMethod);
                    }
                }
            }
            finally
            {
                IDisposable disposable;
                if ((disposable = (enumerator as IDisposable)) != null)
                {
                    disposable.Dispose();
                }
            }
            return(CompressionMethod.None);
        }
Exemple #3
0
        // As client
        private bool validateSecWebSocketExtensionsHeader(string value)
        {
            var compress = _compression != CompressionMethod.None;

            if (value == null || value.Length == 0)
            {
                if (compress)
                {
                    _compression = CompressionMethod.None;
                }

                return(true);
            }

            if (!compress)
            {
                return(false);
            }

            foreach (var e in value.SplitHeaderValue(','))
            {
                var ext = e.Trim();
                if (ext.IsCompressionExtension(_compression))
                {
                    if (!ext.Contains("server_no_context_takeover"))
                    {
                        error("The server hasn't sent back 'server_no_context_takeover'.");
                        return(false);
                    }

                    ////if (!ext.Contains("client_no_context_takeover"))
                    ////    _logger.Warn("The server hasn't sent back 'client_no_context_takeover'.");

                    var method  = _compression.ToExtensionString();
                    var invalid = ext.SplitHeaderValue(';').Contains(
                        t =>
                    {
                        t = t.Trim();
                        return(t != method &&
                               t != "server_no_context_takeover" &&
                               t != "client_no_context_takeover");
                    });

                    if (invalid)
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }

            _extensions = value;
            return(true);
        }
Exemple #4
0
        // As client
        private static string CreateExtensions(CompressionMethod compression)
        {
            var buff = new StringBuilder(80);

            if (compression != CompressionMethod.None)
            {
                var str = compression.ToExtensionString(
                    "server_no_context_takeover", "client_no_context_takeover");

                buff.AppendFormat("{0}, ", str);
            }

            var len = buff.Length;

            if (len <= 2)
            {
                return(null);
            }

            buff.Length = len - 2;
            return(buff.ToString());
        }
Exemple #5
0
 internal static bool IsCompressionExtension(this string value, CompressionMethod method)
 {
     return(value.StartsWith(method.ToExtensionString()));
 }
    // As server
    private void processSecWebSocketExtensionsHeader (string value)
    {
      var buff = new StringBuilder (80);

      var comp = false;
      foreach (var e in value.SplitHeaderValue (',')) {
        var ext = e.Trim ();
        if (!comp && ext.IsCompressionExtension (CompressionMethod.Deflate)) {
          _compression = CompressionMethod.Deflate;
          var str = _compression.ToExtensionString (
            "client_no_context_takeover", "server_no_context_takeover");

          buff.AppendFormat ("{0}, ", str);
          comp = true;
        }
      }

      var len = buff.Length;
      if (len > 2) {
        buff.Length = len - 2;
        _extensions = buff.ToString ();
      }
    }
        // As server
        private void processSecWebSocketExtensionsHeader(string value)
        {
            var buff = new StringBuilder(32);

            var compress = false;
            foreach (var extension in value.SplitHeaderValue(','))
            {
                var trimed = extension.Trim();
                var unprefixed = trimed.RemovePrefix("x-webkit-");

                if (!compress && unprefixed.IsCompressionExtension(CompressionMethod.Deflate))
                {
                    _compression = CompressionMethod.Deflate;
                    var str = _compression.ToExtensionString(
                      "client_no_context_takeover", "server_no_context_takeover");

                    buff.AppendFormat("{0}, ", str);
                    compress = true;
                }
            }

            var len = buff.Length;
            if (len > 0)
            {
                buff.Length = len - 2;
                _extensions = buff.ToString();
            }
        }