private Task ProcessRequestAsync(HttpListenerContext context) { try { Debug.WriteLine("Server: Incoming request to {0}.", context.Request.Url); PersistentConnection connection; string path = ResolvePath(context.Request.Url); if (TryGetConnection(path, out connection)) { // https://developer.mozilla.org/En/HTTP_Access_Control string origin = context.Request.Headers["Origin"]; if (!String.IsNullOrEmpty(origin)) { context.Response.AddHeader("Access-Control-Allow-Origin", origin); context.Response.AddHeader("Access-Control-Allow-Credentials", "true"); } var request = new HttpListenerRequestWrapper(context); var response = new HttpListenerResponseWrapper(context.Response, _disconnectHandler.GetDisconnectToken(context)); var hostContext = new HostContext(request, response); #if NET45 hostContext.Items[HostConstants.SupportsWebSockets] = Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 2; #endif if (OnProcessRequest != null) { OnProcessRequest(hostContext); } #if DEBUG hostContext.Items[HostConstants.DebugMode] = true; #endif hostContext.Items["System.Net.HttpListenerContext"] = context; hostContext.Items[HostConstants.ShutdownToken] = _shutdownToken.Token; // Initialize the connection connection.Initialize(DependencyResolver, hostContext); return(connection.ProcessRequestAsync(hostContext)); } if (path.Equals("/clientaccesspolicy.xml", StringComparison.InvariantCultureIgnoreCase)) { return(context.Response.WriteAsync(Resources.ClientAccessPolicyXml)); } return(context.Response.NotFound()); } catch (Exception ex) { return(TaskAsyncHelper.FromError(ex)); } }
private Task ProcessRequestAsync(HttpListenerContext context) { try { Debug.WriteLine("Server: Incoming request to {0}.", context.Request.Url); PersistentConnection connection; string path = ResolvePath(context.Request.Url); if (TryGetConnection(path, out connection)) { // https://developer.mozilla.org/En/HTTP_Access_Control string origin = context.Request.Headers["Origin"]; if (!String.IsNullOrEmpty(origin)) { context.Response.AddHeader("Access-Control-Allow-Origin", origin); context.Response.AddHeader("Access-Control-Allow-Credentials", "true"); } var request = new HttpListenerRequestWrapper(context); var response = new HttpListenerResponseWrapper(context.Response, _disconnectHandler.GetDisconnectToken(context)); var hostContext = new HostContext(request, response); #if NET45 hostContext.Items[HostConstants.SupportsWebSockets] = Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 2; #endif if (OnProcessRequest != null) { OnProcessRequest(hostContext); } #if DEBUG hostContext.Items[HostConstants.DebugMode] = true; #endif hostContext.Items["System.Net.HttpListenerContext"] = context; hostContext.Items[HostConstants.ShutdownToken] = _shutdownToken.Token; // Initialize the connection connection.Initialize(DependencyResolver, hostContext); return connection.ProcessRequestAsync(hostContext); } if (path.Equals("/clientaccesspolicy.xml", StringComparison.InvariantCultureIgnoreCase)) { return context.Response.WriteAsync(Resources.ClientAccessPolicyXml); } return context.Response.NotFound(); } catch (Exception ex) { return TaskAsyncHelper.FromError(ex); } }