/// <summary> /// Merge two instances of ProtocolHeaders /// </summary> /// <param name="headers">Protocoleaders object</param> public void Merge(ProtocolHeaders headers) { foreach (var smheader in headers) { this[smheader.Key] = smheader.Value; } }
public void SendSynReply(Http2Stream stream) { var headers = new ProtocolHeaders(); headers[ProtocolHeaders.ContentType] = "text/plain"; headers[ProtocolHeaders.Status] = "200"; headers[ProtocolHeaders.Version] = "spdy/3"; this.SendFrame(this.builder.BuildSynReplyFrame(stream, headers)); }
/// <summary> /// Opens the stream in current session. /// </summary> /// <param name="headers">The S+M headers.</param> /// <param name="isFinal">the final flag.</param> /// <returns>The Stream.</returns> public Http2Stream OpenStream(ProtocolHeaders headers, bool isFinal) { int newId = this.GenerateNewStreamId(); if (this.State == ProtocolSessionState.Opened) { return(this.OpenStream(newId, headers, isFinal)); } throw new InvalidOperationException("Session is not opened."); }
private byte[] SerializeControlFrameHeaders(ProtocolHeaders frameHeaders) { var headers = new List <byte>(256); headers.AddRange(BinaryHelper.Int32ToBytes(frameHeaders.Count)); foreach (KeyValuePair <string, string> pair in frameHeaders) { byte[] nameBin = Encoding.UTF8.GetBytes(pair.Key); headers.AddRange(BinaryHelper.Int32ToBytes(nameBin.Length)); headers.AddRange(nameBin); byte[] valBin = Encoding.UTF8.GetBytes(pair.Value); headers.AddRange(BinaryHelper.Int32ToBytes(valBin.Length)); headers.AddRange(valBin); } return(headers.ToArray()); }
/// <summary> /// Opens the stream in current session. /// </summary> /// <param name="id">the stream id.</param> /// <param name="headers">The S+M headers.</param> /// <param name="isFinal">the final flag.</param> /// <returns>The Stream.</returns> private Http2Stream OpenStream(int id, ProtocolHeaders headers, bool isFinal) { if (id <= this.lastSeenStreamId) { this.End(StatusCode.ProtocolError); return(null); } this.lastSeenStreamId = id; // don't have to wait for stream opening Http2Stream stream = new Http2Stream(id, this); this.streams.Add(stream); stream.OnClose += this.OnCloseStream; if (IsServer) { stream.OpenServer(headers, isFinal); // Settings must be sent for session once for session if (stream.StreamId <= 2) { this.protocol.SendSettings(stream); } this.protocol.SendSynReply(stream); } else { stream.OpenClient(headers, isFinal); } if (this.OnStreamOpened != null) { this.OnStreamOpened(this, new StreamEventArgs(stream)); } return(stream); }
/// <summary> /// Sends the headers. /// </summary> /// <param name="stream">The stream.</param> /// <param name="headers">The headers.</param> /// <param name="isFin">FIN flag.</param> public void SendHeaders(Http2Stream stream, ProtocolHeaders headers, bool isFin) { this.SendFrame(stream, this.builder.BuildHeadersFrame(stream, headers, isFin)); }