public HttpBodyReceiveFilter(HttpHeaderInfo httpHeader, int size, int headerSize)
     : base(size)
 {
     m_HttpHeader = httpHeader;
     m_Size       = size;
     m_HeaderSize = headerSize;
 }
Exemple #2
0
        private bool IsMatch(IDictionary <string, string> headers, HttpHeaderInfo header)
        {
            string value;

            if (headers.TryGetValue(header.Name, out value))
            {
                switch (header.Match)
                {
                case HeaderMatchType.Equals:
                    return(string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase));

                case HeaderMatchType.Substring:
                    return(value.IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1);

                case HeaderMatchType.Regex:
                    // Reports of IgnoreCase not working on linux so try it a couple different ways.
                    return(Regex.IsMatch(value, header.Value, RegexOptions.IgnoreCase) || Regex.IsMatch(value.ToUpper(), header.Value.ToUpper(), RegexOptions.IgnoreCase));

                default:
                    throw new ArgumentException("Unrecognized HeaderMatchType");
                }
            }

            return(false);
        }
Exemple #3
0
        private bool IsMatch(IDictionary <string, string> headers, HttpHeaderInfo header)
        {
            string value;

            if (headers.TryGetValue(header.Name, out value))
            {
                switch (header.Match)
                {
                case HeaderMatchType.Equals:
                    return(string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase));

                case HeaderMatchType.Substring:
                    var isMatch = value.IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
                    //_logger.Debug("IsMatch-Substring value: {0} testValue: {1} isMatch: {2}", value, header.Value, isMatch);
                    return(isMatch);

                case HeaderMatchType.Regex:
                    return(Regex.IsMatch(value, header.Value, RegexOptions.IgnoreCase));

                default:
                    throw new ArgumentException("Unrecognized HeaderMatchType");
                }
            }

            return(false);
        }
        protected override IReceiveFilter <StringPackageInfo> GetBodyReceiveFilter(HttpHeaderInfo header, int headerSize)
        {
            var session          = AppContext.CurrentSession;
            var websocketContext = new WebSocketContext(session, header);

            var secWebSocketVersion = header.Get(WebSocketConstant.SecWebSocketVersion);

            IReceiveFilter <StringPackageInfo> handshakeReceiveFilter = null;

            if (secWebSocketVersion == RFC6455_VERSION)
            {
                handshakeReceiveFilter = new Rfc6455ReceiveFilter();
            }
            else if (secWebSocketVersion == HYBI10_VERSION)
            {
                handshakeReceiveFilter = new DraftHybi10ReceiveFilter();
            }
            else
            {
                handshakeReceiveFilter = new DraftHybi00ReceiveFilter();
            }

            var handshakeHandler = handshakeReceiveFilter as IHandshakeHandler;

            if (handshakeHandler != null)
            {
                handshakeHandler.Handshake(session, header);
            }

            return(handshakeReceiveFilter);
        }
Exemple #5
0
        private bool IsMatch(IHeaderDictionary headers, HttpHeaderInfo header)
        {
            // Handle invalid user setup
            if (string.IsNullOrEmpty(header.Name))
            {
                return(false);
            }

            if (headers.TryGetValue(header.Name, out StringValues value))
            {
                switch (header.Match)
                {
                case HeaderMatchType.Equals:
                    return(string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase));

                case HeaderMatchType.Substring:
                    var isMatch = value.ToString().IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
                    // _logger.LogDebug("IsMatch-Substring value: {0} testValue: {1} isMatch: {2}", value, header.Value, isMatch);
                    return(isMatch);

                case HeaderMatchType.Regex:
                    return(Regex.IsMatch(value, header.Value, RegexOptions.IgnoreCase));

                default:
                    throw new ArgumentException("Unrecognized HeaderMatchType");
                }
            }

            return(false);
        }
 public HttpChunkReceiveFilter(HttpHeaderInfo header, int headerSize, StringBuilder bodyBuilder)
     : base(new byte[] { 0x0d, 0x0a })
 {
     m_HttpHeader  = header;
     m_HeaderSize  = headerSize;
     m_BodyBuilder = bodyBuilder;
 }
Exemple #7
0
        protected override IReceiveFilter <HttpPackageInfo> GetBodyReceiveFilter(HttpHeaderInfo header, int headerSize)
        {
            var contentLength = 0;

            if (int.TryParse(header.Get(HttpHeaderKey.ContentLength), out contentLength) && contentLength > 0)
            {
                return(new HttpBodyReceiveFilter(header, headerSize, contentLength));
            }

            if (contentLength > 0)
            {
                return(new HttpBodyReceiveFilter(header, headerSize, contentLength));
            }

            return(null);
        }
Exemple #8
0
        private bool IsMatch(IDictionary<string, string> headers, HttpHeaderInfo header)
        {
            string value;

            if (headers.TryGetValue(header.Name, out value))
            {
                switch (header.Match)
                {
                    case HeaderMatchType.Equals:
                        return string.Equals(value, header.Value, StringComparison.OrdinalIgnoreCase);
                    case HeaderMatchType.Substring:
                        return value.IndexOf(header.Value, StringComparison.OrdinalIgnoreCase) != -1;
                    case HeaderMatchType.Regex:
                        return Regex.IsMatch(value, header.Value, RegexOptions.IgnoreCase);
                    default:
                        throw new ArgumentException("Unrecognized HeaderMatchType");
                }
            }

            return false;
        }
Exemple #9
0
        protected override IReceiveFilter <HttpPackageInfo> GetBodyReceiveFilter(HttpHeaderInfo header, int headerSize)
        {
            var contentLength    = 0;
            var strContentLength = header.Get("Content-Length");

            if (string.IsNullOrEmpty(strContentLength))
            {
                contentLength = -1;
            }
            else
            {
                contentLength = int.Parse(strContentLength);
            }

            if (contentLength > 0)
            {
                var totalLength = headerSize + contentLength;
                return(new HttpBodyReceiveFilter(header, totalLength, headerSize));
            }

            return(new HttpChunkReceiveFilter(header, new StringBuilder()));
        }
Exemple #10
0
 protected HttpPackageInfoBase(string key, HttpHeaderInfo header)
 {
     Key    = key;
     Header = header;
 }
 public HttpPackageInfo(string key, HttpHeaderInfo header, string body)
     : base(key, header, body)
 {
 }
 public WebSocketContext(IAppSession session, HttpHeaderInfo request)
 {
     Session          = session;
     HandshakeRequest = request;
 }
Exemple #13
0
 protected override HttpPackageInfo ResolveHttpPackageWithoutBody(HttpHeaderInfo header)
 {
     return(new HttpPackageInfo("Test", header, string.Empty));
 }
 protected override StringPackageInfo ResolveHttpPackageWithoutBody(HttpHeaderInfo header)
 {
     throw new NotSupportedException();
 }
Exemple #15
0
 public void Handshake(IAppSession session, HttpHeaderInfo head)
 {
     throw new NotImplementedException();
 }
Exemple #16
0
        protected override IReceiveFilter <WebSocketPackageInfo> GetBodyReceiveFilter(HttpHeaderInfo header, int headerSize)
        {
            var websocketContext = m_Context;

            websocketContext.HandshakeRequest = header;

            var handshakeReceiveFilter = WebSocketReceiveFilterFactoryManager.Handshake(websocketContext);

            return(handshakeReceiveFilter);
        }
Exemple #17
0
 public HttpBodyReceiveFilter(HttpHeaderInfo header, int headerSize, int bodyLength)
     : base(bodyLength)
 {
     m_Header     = header;
     m_HeaderSize = headerSize;
 }
Exemple #18
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpPackageInfo" /> class.
 /// </summary>
 /// <param name="key">The key.</param>
 /// <param name="header">The header.</param>
 /// <param name="body">The body.</param>
 public HttpPackageInfo(string key, HttpHeaderInfo header, string body)
     : base(key, header)
 {
     Body   = body;
     Method = header.Method;
 }