Пример #1
0
        public HttpResponseMessage Get()
        {
            IOwinContext owinContext = Request.GetOwinContext();

            WebSocketAccept acceptToken = owinContext.Get <WebSocketAccept>("websocket.Accept");

            if (acceptToken != null)
            {
                var requestHeaders = GetValue <IDictionary <string, string[]> >(owinContext.Environment, "owin.RequestHeaders");

                Dictionary <string, object> acceptOptions = null;
                string[] subProtocols;
                if (requestHeaders.TryGetValue("Sec-WebSocket-Protocol", out subProtocols) && subProtocols.Length > 0)
                {
                    acceptOptions = new Dictionary <string, object>();
                    // Select the first one from the client
                    acceptOptions.Add("websocket.SubProtocol", subProtocols[0].Split(',').First().Trim());
                }
                acceptToken(acceptOptions, ProcessSocketConnection);
            }
            else
            {
                return(new HttpResponseMessage(HttpStatusCode.BadRequest));
            }
            return(new HttpResponseMessage(HttpStatusCode.SwitchingProtocols));
        }
Пример #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="owinEnv">Owin字典</param>
        public WebSocket(IDictionary <string, object> owinEnv)
        {
            // 检查是否是websocket请求
            if (!owinEnv.IsWebSocket())
            {
                throw new Exception("Not Is WebSocket Request.");
            }

            // 获取Accept方法
            _accept = owinEnv.Get <WebSocketAccept>("websocket.Accept");
            if (_accept == null)
            {
                throw new Exception("Not Is Websocket Request");
            }

            // SERVER
            RemoteIpAddress = owinEnv.Get <string>("server.RemoteIpAddress");
            RemotePort      = int.Parse(owinEnv.Get <string>("server.RemotePort"));
            LocalIpAddress  = owinEnv.Get <string>("server.LocalIpAddress");
            LocalPort       = int.Parse(owinEnv.Get <string>("server.LocalPort"));
            //var islocal = owinEnv.Get<bool>("server.IsLocal");

            // OWIN
            RequestPath = owinEnv.Get <string>("owin.RequestPath");
            Query       = owinEnv.Get <string>("owin.RequestQueryString");

            _webSocketCompSource = new TaskCompletionSource <int>();
            // owinEnv.Get<string>("owin.RequestMethod");  GET/POST/....
        }
 bool AspNetDictionary.IPropertySource.TryGetWebSocketAccept(ref WebSocketAccept value)
 {
     if (_appContext.WebSocketSupport && _httpContext.IsWebSocketRequest)
     {
         value = new WebSocketAccept(DoWebSocketUpgrade);
         return true;
     }
     return false;
 }
Пример #4
0
 bool AspNetDictionary.IPropertySource.TryGetWebSocketAccept(ref WebSocketAccept value)
 {
     if (_appContext.WebSocketSupport && _httpContext.IsWebSocketRequest)
     {
         value = new WebSocketAccept(DoWebSocketUpgrade);
         return(true);
     }
     return(false);
 }
Пример #5
0
        public static AppFunc Middleware(AppFunc app)
        {
            return(env =>
            {
                var request = new Request(env);
                string opaqueSupport = request.Get <string>("opaque.Support");
                OpaqueUpgrade opaqueUpgrade = request.Get <OpaqueUpgrade>("opaque.Upgrade");
                string websocketSupport = request.Get <string>("websocket.Support");
                WebSocketAccept webSocketAccept = request.Get <WebSocketAccept>("websocket.Accept");

                if (opaqueSupport == "opaque.Upgrade" && // If we have opaque support
                    opaqueUpgrade != null &&
                    websocketSupport != "websocket.Accept" && // and no current websocket support
                    webSocketAccept == null)    // and this request is a websocket request...
                {
                    // This middleware is adding support for websockets.
                    env["websocket.Support"] = "websocket.Accept";

                    if (IsWebSocketRequest(env))
                    {
                        IDictionary <string, object> acceptOptions = null;
                        WebSocketFunc webSocketFunc = null;

                        // Announce websocket support
                        env["websocket.Accept"] = new WebSocketAccept(
                            (options, callback) =>
                        {
                            acceptOptions = options;
                            webSocketFunc = callback;
                            env[OwinConstants.ResponseStatusCode] = 101;
                        });


                        return app(env).Then(() =>
                        {
                            Response response = new Response(env);
                            if (response.StatusCode == 101 &&
                                webSocketFunc != null)
                            {
                                SetWebSocketResponseHeaders(env, acceptOptions);

                                opaqueUpgrade(acceptOptions, opaqueEnv =>
                                {
                                    WebSocketLayer webSocket = new WebSocketLayer(opaqueEnv);
                                    return webSocketFunc(webSocket.Environment)
                                    .Then(() => webSocket.CleanupAsync());
                                });
                            }
                        });
                    }
                }

                // else
                return app(env);
            });
        }
Пример #6
0
 internal bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     if (_context.Request.IsWebSocketRequest)
     {
         websocketAccept = new WebSocketAccept(DoWebSocketUpgrade);
         return(true);
     }
     websocketAccept = null;
     return(false);
 }
Пример #7
0
        public async sealed override Task Invoke(IOwinContext context)
        {
            WebSocketAccept accept = context.Get <WebSocketAccept>("websocket.Accept");

            if (accept == null)
            {
                await Next.Invoke(context).ConfigureAwait(false);
            }
            else
            {
                accept(null, WebSocketBody);
            }
        }
        private Task UpgradeToWebSockets(IOwinContext context)
        {
            WebSocketAccept accept = context.Get <WebSocketAccept>("websocket.Accept");

            if (accept == null)
            {
                return(null);
            }

            // WebSocket request?
            accept(null, ProcessWisejWebSocketRequest);
            return(Task.FromResult <object>(null));
        }
Пример #9
0
            // Run once per request
            private Task UpgradeToWebSockets(IOwinContext context, Func <Task> next)
            {
                WebSocketAccept accept = null; //context.Get<WebSocketAccept>("websocket.Accept");

                if (accept == null)
                {
                    // Not a websocket request
                    return(next());
                }

                accept(null, WebSocketEcho);

                return(Task.FromResult <object>(null));
            }
Пример #10
0
		public static AppFunc Middleware(AppFunc app)
		{
			return env =>
			{
				var request = new OwinRequest(env);
				var websocketVersion = request.Get<string>(OwinConstants.WebSocket.Version);
				WebSocketAccept webSocketAccept = request.Get<WebSocketAccept>(OwinConstants.WebSocket.Accept);

				if (request.CanUpgrade && websocketVersion == null) // If we have opaque support and no WebSocket support yet
				{
					if (IsWebSocketRequest(env))
					{
						// TODO: check for correct requested version of WebSocket protocol
						IDictionary<string, object> acceptOptions = null;
						WebSocketFunc webSocketFunc = null;

						// Announce websocket support
						env[OwinConstants.WebSocket.Accept] = new WebSocketAccept(
							(options, callback) =>
							{
								acceptOptions = options;
								webSocketFunc = callback;
								env[OwinConstants.ResponseStatusCode] = 101;
							});


						return app(env).ContinueWith(t =>
						{
							OwinResponse response = new OwinResponse(env);
							if (response.StatusCode == 101
								&& webSocketFunc != null)
							{
								SetWebSocketResponseHeaders(env, acceptOptions);

								request.UpgradeDelegate(acceptOptions, opaqueEnv =>
								{
									WebSocketLayer webSocket = new WebSocketLayer(opaqueEnv);
									return webSocketFunc(webSocket.Environment)
										.ContinueWith(tt => webSocket.CleanupAsync());
								});
							}
						});
					}
				}

				// else
				return app(env);
			};
		}
Пример #11
0
 internal bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     if (_context.Request.IsWebSocketRequest)
     {
         string versionString = _context.Request.Headers[Constants.SecWebSocketVersion];
         int    version;
         if (!string.IsNullOrWhiteSpace(versionString) &&
             int.TryParse(versionString, NumberStyles.Integer, CultureInfo.InvariantCulture, out version) &&
             version >= 13)
         {
             websocketAccept = new WebSocketAccept(DoWebSocketUpgrade);
             return(true);
         }
     }
     websocketAccept = null;
     return(false);
 }
Пример #12
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="owinEnv"></param>
        public WebSocket(IDictionary <string, object> owinEnv)
        {
            // 获取Accept方法
            _accept = owinEnv.Get <WebSocketAccept>("websocket.Accept");
            if (_accept == null)
            {
                return;
            }

            IsWebSocket = true;

            // SERVER
            RemoteIpAddress = owinEnv.Get <string>("server.RemoteIpAddress");
            RemotePort      = int.Parse(owinEnv.Get <string>("server.RemotePort"));
            LocalIpAddress  = owinEnv.Get <string>("server.LocalIpAddress");
            LocalPort       = int.Parse(owinEnv.Get <string>("server.LocalPort"));
            //var islocal = owinEnv.Get<bool>("server.IsLocal");

            // OWIN
            RequestPath = owinEnv.Get <string>("owin.RequestPath");
            Query       = owinEnv.Get <string>("owin.RequestQueryString");
            // owinEnv.Get<string>("owin.RequestMethod");  GET/POST/....
        }
Пример #13
0
 bool AspNetDictionary.IPropertySource.TryGetWebSocketAccept(ref WebSocketAccept value)
 {
     return(false);
 }
 private bool PropertiesTryRemove(string key)
 {
     switch (key.Length)
     {
         case 12:
             if (((_flag0 & 0x1u) != 0) && string.Equals(key, "owin.Version", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x1u;
                 _OwinVersion = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x8000u) != 0) && string.Equals(key, "host.AppName", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x8000u;
                 _HostAppName = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x10000u) != 0) && string.Equals(key, "host.AppMode", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x10000u;
                 _HostAppMode = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 18:
             if (((_flag0 & 0x2u) != 0) && string.Equals(key, "owin.CallCancelled", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x2u;
                 _flag0 &= ~0x2u;
                 _CallCancelled = default(CancellationToken);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x8u) != 0) && string.Equals(key, "owin.RequestMethod", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x8u;
                 _RequestMethod = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x10u) != 0) && string.Equals(key, "owin.RequestScheme", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x10u;
                 _RequestScheme = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 20:
             if (((_flag0 & 0x4u) != 0) && string.Equals(key, "owin.RequestProtocol", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x4u;
                 _RequestProtocol = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20u) != 0) && string.Equals(key, "owin.RequestPathBase", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x20u;
                 _RequestPathBase = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x1000u) != 0) && string.Equals(key, "owin.ResponseHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x1000u;
                 _ResponseHeaders = default(IDictionary<string, string[]>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 16:
             if (((_flag0 & 0x40u) != 0) && string.Equals(key, "owin.RequestPath", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x40u;
                 _RequestPath = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x200u) != 0) && string.Equals(key, "owin.RequestBody", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x200u;
                 _flag0 &= ~0x200u;
                 _RequestBody = default(Stream);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x4000u) != 0) && string.Equals(key, "host.TraceOutput", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x4000u;
                 _HostTraceOutput = default(TextWriter);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x1000000u) != 0) && string.Equals(key, "server.LocalPort", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x1000000u;
                 _flag0 &= ~0x1000000u;
                 _ServerLocalPort = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20000000u) != 0) && string.Equals(key, "websocket.Accept", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x20000000u;
                 _flag0 &= ~0x20000000u;
                 _WebSocketAccept = default(WebSocketAccept);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 23:
             if (((_flag0 & 0x80u) != 0) && string.Equals(key, "owin.RequestQueryString", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x80u;
                 _RequestQueryString = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x400u) != 0) && string.Equals(key, "owin.ResponseStatusCode", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x400u;
                 _ResponseStatusCode = default(int);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x80000u) != 0) && string.Equals(key, "server.OnSendingHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x80000u;
                 _OnSendingHeaders = default(Action<Action<object>, object>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x10000000u) != 0) && string.Equals(key, "ssl.LoadClientCertAsync", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x10000000u;
                 _LoadClientCert = default(Func<Task>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 19:
             if (((_flag0 & 0x100u) != 0) && string.Equals(key, "owin.RequestHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x100u;
                 _RequestHeaders = default(IDictionary<string, string[]>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20000u) != 0) && string.Equals(key, "host.OnAppDisposing", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x20000u;
                 _OnAppDisposing = default(CancellationToken);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x100000u) != 0) && string.Equals(key, "server.Capabilities", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x100000u;
                 _ServerCapabilities = default(IDictionary<string, object>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 25:
             if (((_flag0 & 0x800u) != 0) && string.Equals(key, "owin.ResponseReasonPhrase", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x800u;
                 _ResponseReasonPhrase = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 17:
             if (((_flag0 & 0x2000u) != 0) && string.Equals(key, "owin.ResponseBody", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x2000u;
                 _ResponseBody = default(Stream);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x400000u) != 0) && string.Equals(key, "server.RemotePort", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x400000u;
                 _flag0 &= ~0x400000u;
                 _ServerRemotePort = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 11:
             if (((_flag0 & 0x40000u) != 0) && string.Equals(key, "server.User", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x40000u;
                 _ServerUser = default(IPrincipal);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 22:
             if (((_flag0 & 0x200000u) != 0) && string.Equals(key, "server.RemoteIpAddress", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x200000u;
                 _flag0 &= ~0x200000u;
                 _ServerRemoteIpAddress = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 21:
             if (((_flag0 & 0x800000u) != 0) && string.Equals(key, "server.LocalIpAddress", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x800000u;
                 _flag0 &= ~0x800000u;
                 _ServerLocalIpAddress = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x4000000u) != 0) && string.Equals(key, "ssl.ClientCertificate", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x4000000u;
                 _flag0 &= ~0x4000000u;
                 _ClientCert = default(X509Certificate);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x80000000u) != 0) && string.Equals(key, "Mono.Net.HttpListener", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x80000000u;
                 _Listener = default(Mono.Net.HttpListener);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 14:
             if (((_flag0 & 0x2000000u) != 0) && string.Equals(key, "server.IsLocal", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x2000000u;
                 _flag0 &= ~0x2000000u;
                 _ServerIsLocal = default(bool);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 27:
             if (((_flag0 & 0x8000000u) != 0) && string.Equals(key, "ssl.ClientCertificateErrors", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x8000000u;
                 _flag0 &= ~0x8000000u;
                 _ClientCertErrors = default(Exception);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 28:
             if (((_flag0 & 0x40000000u) != 0) && string.Equals(key, "Mono.Net.HttpListenerContext", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x40000000u;
                 _RequestContext = default(HttpListenerContext);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 49:
             if (((_flag1 & 0x1u) != 0) && string.Equals(key, "Microsoft.Owin.Host.HttpListener.OwinHttpListener", StringComparison.Ordinal))
             {
                 _flag1 &= ~0x1u;
                 _OwinHttpListener = default(OwinHttpListener);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
     }
     return false;
 }
Пример #15
0
 private OwinWebSocketAcceptAdapter(WebSocketAccept owinWebSocketAccept)
 {
     _owinWebSocketAccept = owinWebSocketAccept;
 }
Пример #16
0
        public async Task ProcessOwinWebSocketSession(WebSocketAccept accept)
        {
            accept(null, (webSocketContext =>
            {
                if (webSocketContext == null)
                    throw new ApplicationException("Could not get WebSocket context");

                var context = (WebSocketContext)webSocketContext[typeof(WebSocketContext).FullName];
                var closeAsync = (WebSocketCloseAsync)webSocketContext["websocket.CloseAsync"];

                HandleWebSocket(context, false).Wait();

                closeAsync((int)WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);

                return Task.FromResult<object>(null);
            }));

        }
 private OwinWebSocketAcceptAdapter(WebSocketAccept owinWebSocketAccept)
 {
     _owinWebSocketAccept = owinWebSocketAccept;
 }
        internal bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
        {
#if !NET40 && !MONOHTTPLISTENER
            if (_context.Request.IsWebSocketRequest)
            {
                websocketAccept = new WebSocketAccept(DoWebSocketUpgrade);
                return true;
            }
#endif
            websocketAccept = null;
            return false;
        }
Пример #19
0
 bool AspNetDictionary.IPropertySource.TryGetWebSocketAccept(ref WebSocketAccept value)
 {
     return false;
 }
 internal bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     if (_context.Request.IsWebSocketRequest)
     {
         websocketAccept = new WebSocketAccept(DoWebSocketUpgrade);
         return true;
     }
     websocketAccept = null;
     return false;
 }
 private bool PropertiesTryRemove(string key)
 {
     switch (key.Length)
     {
         case 12:
             if (((_flag0 & 0x1u) != 0) && string.Equals(key, "owin.Version", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x1u;
                 _OwinVersion = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x40000u) != 0) && string.Equals(key, "host.AppName", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x40000u;
                 _HostAppName = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x80000u) != 0) && string.Equals(key, "host.AppMode", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x80000u;
                 _flag0 &= ~0x80000u;
                 _HostAppMode = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 18:
             if (((_flag0 & 0x2u) != 0) && string.Equals(key, "owin.CallCancelled", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x2u;
                 _flag0 &= ~0x2u;
                 _CallCancelled = default(CancellationToken);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x8u) != 0) && string.Equals(key, "owin.RequestMethod", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x8u;
                 _RequestMethod = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x10u) != 0) && string.Equals(key, "owin.RequestScheme", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x10u;
                 _flag0 &= ~0x10u;
                 _RequestScheme = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag1 & 0x1u) != 0) && string.Equals(key, "sendfile.SendAsync", StringComparison.Ordinal))
             {
                 _initFlag1 &= ~0x1u;
                 _flag1 &= ~0x1u;
                 _SendFileAsync = default(Func<string, long, long?, CancellationToken, Task>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 20:
             if (((_flag0 & 0x4u) != 0) && string.Equals(key, "owin.RequestProtocol", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x4u;
                 _flag0 &= ~0x4u;
                 _RequestProtocol = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20u) != 0) && string.Equals(key, "owin.RequestPathBase", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x20u;
                 _RequestPathBase = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x4000u) != 0) && string.Equals(key, "owin.ResponseHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x4000u;
                 _ResponseHeaders = default(IDictionary<string, string[]>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 16:
             if (((_flag0 & 0x40u) != 0) && string.Equals(key, "owin.RequestPath", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x40u;
                 _RequestPath = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x200u) != 0) && string.Equals(key, "owin.RequestBody", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x200u;
                 _flag0 &= ~0x200u;
                 _RequestBody = default(Stream);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20000u) != 0) && string.Equals(key, "host.TraceOutput", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x20000u;
                 _HostTraceOutput = default(TextWriter);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x10000000u) != 0) && string.Equals(key, "server.LocalPort", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x10000000u;
                 _flag0 &= ~0x10000000u;
                 _ServerLocalPort = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag1 & 0x2u) != 0) && string.Equals(key, "websocket.Accept", StringComparison.Ordinal))
             {
                 _initFlag1 &= ~0x2u;
                 _flag1 &= ~0x2u;
                 _WebSocketAccept = default(WebSocketAccept);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 23:
             if (((_flag0 & 0x80u) != 0) && string.Equals(key, "owin.RequestQueryString", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x80u;
                 _flag0 &= ~0x80u;
                 _RequestQueryString = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x1000u) != 0) && string.Equals(key, "owin.ResponseStatusCode", StringComparison.Ordinal))
             {
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x800000u) != 0) && string.Equals(key, "server.OnSendingHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x800000u;
                 _OnSendingHeaders = default(Action<Action<object>, object>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x80000000u) != 0) && string.Equals(key, "ssl.LoadClientCertAsync", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x80000000u;
                 _flag0 &= ~0x80000000u;
                 _LoadClientCert = default(Func<Task>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 19:
             if (((_flag0 & 0x100u) != 0) && string.Equals(key, "owin.RequestHeaders", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x100u;
                 _RequestHeaders = default(IDictionary<string, string[]>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x100000u) != 0) && string.Equals(key, "host.OnAppDisposing", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x100000u;
                 _flag0 &= ~0x100000u;
                 _OnAppDisposing = default(CancellationToken);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x1000000u) != 0) && string.Equals(key, "server.Capabilities", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x1000000u;
                 _ServerCapabilities = default(IDictionary<string, object>);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 14:
             if (((_flag0 & 0x400u) != 0) && string.Equals(key, "owin.RequestId", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x400u;
                 _flag0 &= ~0x400u;
                 _RequestId = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x20000000u) != 0) && string.Equals(key, "server.IsLocal", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x20000000u;
                 _flag0 &= ~0x20000000u;
                 _ServerIsLocal = default(bool);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 30:
             if (((_flag0 & 0x800u) != 0) && string.Equals(key, "server.DisableRequestBuffering", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x800u;
                 _flag0 &= ~0x800u;
                 _DisableRequestBuffering = default(Action);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 25:
             if (((_flag0 & 0x2000u) != 0) && string.Equals(key, "owin.ResponseReasonPhrase", StringComparison.Ordinal))
             {
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 17:
             if (((_flag0 & 0x8000u) != 0) && string.Equals(key, "owin.ResponseBody", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x8000u;
                 _flag0 &= ~0x8000u;
                 _ResponseBody = default(Stream);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x4000000u) != 0) && string.Equals(key, "server.RemotePort", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x4000000u;
                 _flag0 &= ~0x4000000u;
                 _ServerRemotePort = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 31:
             if (((_flag0 & 0x10000u) != 0) && string.Equals(key, "server.DisableResponseBuffering", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x10000u;
                 _flag0 &= ~0x10000u;
                 _DisableResponseBuffering = default(Action);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag1 & 0x8u) != 0) && string.Equals(key, "integratedpipeline.CurrentStage", StringComparison.Ordinal))
             {
                 _flag1 &= ~0x8u;
                 _IntegratedPipelineStage = default(String);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 36:
             if (((_flag0 & 0x200000u) != 0) && string.Equals(key, "systemweb.DisableResponseCompression", StringComparison.Ordinal))
             {
                 _flag0 &= ~0x200000u;
                 _DisableResponseCompression = default(Action);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 11:
             if (((_flag0 & 0x400000u) != 0) && string.Equals(key, "server.User", StringComparison.Ordinal))
             {
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 22:
             if (((_flag0 & 0x2000000u) != 0) && string.Equals(key, "server.RemoteIpAddress", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x2000000u;
                 _flag0 &= ~0x2000000u;
                 _ServerRemoteIpAddress = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 21:
             if (((_flag0 & 0x8000000u) != 0) && string.Equals(key, "server.LocalIpAddress", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x8000000u;
                 _flag0 &= ~0x8000000u;
                 _ServerLocalIpAddress = default(string);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag0 & 0x40000000u) != 0) && string.Equals(key, "ssl.ClientCertificate", StringComparison.Ordinal))
             {
                 _initFlag0 &= ~0x40000000u;
                 _flag0 &= ~0x40000000u;
                 _ClientCert = default(X509Certificate);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 26:
             if (((_flag1 & 0x4u) != 0) && string.Equals(key, "integratedpipeline.Context", StringComparison.Ordinal))
             {
                 _flag1 &= ~0x4u;
                 _IntegratedPipelineContext = default(IntegratedPipelineContext);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
             if (((_flag1 & 0x20u) != 0) && string.Equals(key, "System.Web.HttpContextBase", StringComparison.Ordinal))
             {
                 _flag1 &= ~0x20u;
                 _HttpContextBase = default(HttpContextBase);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
         case 33:
             if (((_flag1 & 0x10u) != 0) && string.Equals(key, "System.Web.Routing.RequestContext", StringComparison.Ordinal))
             {
                 _flag1 &= ~0x10u;
                 _RequestContext = default(RequestContext);
                 // This can return true incorrectly for values that delayed initialization may determine are not actually present.
                 return true;
             }
            break;
     }
     return false;
 }
 public bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     return _owinResponse.TryGetWebSocketAccept(ref websocketAccept);
 }
 public bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     return(_owinResponse.TryGetWebSocketAccept(ref websocketAccept));
 }
 internal bool TryGetWebSocketAccept(ref WebSocketAccept websocketAccept)
 {
     if (_context.Request.IsWebSocketRequest)
     {
         string versionString = _context.Request.Headers[Constants.SecWebSocketVersion];
         int version;
         if (!string.IsNullOrWhiteSpace(versionString)
             && int.TryParse(versionString, NumberStyles.Integer, CultureInfo.InvariantCulture, out version)
             && version >= 13)
         {
             websocketAccept = new WebSocketAccept(DoWebSocketUpgrade);
             return true;
         }
     }
     websocketAccept = null;
     return false;
 }