public void WriteResponseHeaders(int statusCode, string? reasonPhrase, HttpResponseHeaders responseHeaders, bool autoChunk, bool appCompleted) { lock (_dataWriterLock) { // The HPACK header compressor is stateful, if we compress headers for an aborted stream we must send them. // Optimize for not compressing or sending them. if (_streamCompleted) { return; } // If the responseHeaders will be written as the final HEADERS frame then // set END_STREAM on the HEADERS frame. This avoids the need to write an // empty DATA frame with END_STREAM. // // The headers will be the final frame if: // 1. There is no content // 2. There is no trailing HEADERS frame. Http2HeadersFrameFlags http2HeadersFrame; if (appCompleted && !_startedWritingDataFrames && (_stream.ResponseTrailers == null || _stream.ResponseTrailers.Count == 0)) { _streamEnded = true; _stream.DecrementActiveClientStreamCount(); http2HeadersFrame = Http2HeadersFrameFlags.END_STREAM; } else { http2HeadersFrame = Http2HeadersFrameFlags.NONE; } _frameWriter.WriteResponseHeaders(StreamId, statusCode, http2HeadersFrame, responseHeaders); } }
public void WriteResponseHeaders() { _frameWriter.WriteResponseHeaders(0, 200, Http2HeadersFrameFlags.END_HEADERS, _responseHeaders); }
public void WriteResponseHeaders() { _frameWriter.WriteResponseHeaders(streamId: 0, 200, Http2HeadersFrameFlags.END_STREAM, _responseHeaders); }