private void WriteCurrentFrameHeader(ref HeaderEncodingState state, int frameLength, bool isLastFrame) { Debug.Assert(frameLength > 0); FrameHeader frameHeader = new FrameHeader(); frameHeader.Length = frameLength; frameHeader.StreamId = _streamId; if (state.IsFirstFrame) { frameHeader.Type = FrameType.Headers; frameHeader.Flags = (state.IsEmptyResponse ? FrameFlags.EndStream : FrameFlags.None); } else { frameHeader.Type = FrameType.Continuation; frameHeader.Flags = FrameFlags.None; } if (isLastFrame) { frameHeader.Flags |= FrameFlags.EndHeaders; } // Update the curent HEADERS or CONTINUATION frame with length, and write it to the buffer. frameHeader.WriteTo(_requestBuffer.ActiveSpan.Slice(state.CurrentFrameOffset)); }
private void WriteFrameHeader(FrameHeader frameHeader) { _outgoingBuffer.EnsureAvailableSpace(FrameHeader.Size); frameHeader.WriteTo(_outgoingBuffer.AvailableSpan); _outgoingBuffer.Commit(FrameHeader.Size); }