internal OwinHttpListenerContext(HttpListenerContext httpListenerContext, string basePath, string path, string query, DisconnectHandler disconnectHandler) { _httpListenerContext = httpListenerContext; _environment = new CallEnvironment(this); _owinRequest = new OwinHttpListenerRequest(_httpListenerContext.Request, basePath, path, query, _environment); _owinResponse = new OwinHttpListenerResponse(_httpListenerContext, _environment); _disconnectHandler = disconnectHandler; _environment.OwinVersion = Constants.OwinVersion; _environment.ServerUser = _httpListenerContext.User; _environment.RequestContext = _httpListenerContext; }
/// <summary> /// Initializes a new instance of the <see cref="OwinHttpListenerResponse"/> class. /// Sets up the Environment with the necessary request state items. /// </summary> internal OwinHttpListenerResponse(HttpListenerContext context, CallEnvironment environment) { Contract.Requires(context != null); Contract.Requires(environment != null); _context = context; _response = _context.Response; _environment = environment; _requestState = RequestInProgress; var outputStream = new HttpListenerStreamWrapper(_response.OutputStream); outputStream.OnFirstWrite = ResponseBodyStarted; _environment.ResponseBody = outputStream; _environment.ResponseHeaders = new ResponseHeadersDictionary(_response); _onSendingHeadersActions = new List<Tuple<Action<object>, object>>(); _environment.OnSendingHeaders = RegisterForOnSendingHeaders; }
/// <summary> /// Initializes a new instance of the <see cref="OwinHttpListenerRequest"/> class. /// Uses the given request object to populate the OWIN standard keys in the environment IDictionary. /// Most values are copied so that they can be mutable, but the headers collection is only wrapped. /// </summary> internal OwinHttpListenerRequest(HttpListenerRequest request, string basePath, string path, string query, CallEnvironment environment) { Contract.Requires(request != null); _request = request; _environment = environment; _environment.RequestProtocol = GetProtocol(request.ProtocolVersion); _environment.RequestScheme = request.Url.Scheme; _environment.RequestMethod = request.HttpMethod; _environment.RequestPathBase = basePath; _environment.RequestPath = path; _environment.RequestQueryString = query; _environment.RequestHeaders = new RequestHeadersDictionary(request); if (_request.IsSecureConnection) { // TODO: Add delay sync load for folks that directly access the client cert key _environment.LoadClientCert = (Func<Task>)LoadClientCertAsync; } }
private void PopulateServerKeys(CallEnvironment env) { env.ServerCapabilities = _capabilities; env.Listener = _listener; env.OwinHttpListener = this; }