/// <summary> /// Merge two instances of SMHeaders /// </summary> /// <param name="headers">SMHeaders object</param> public void Merge(SMHeaders headers) { foreach (var smheader in headers) { this[smheader.Key] = smheader.Value; } }
/// <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 SMStream OpenStream(int id, SMHeaders headers, bool isFinal) { if (id <= this.lastSeenStreamId) { this.End(StatusCode.ProtocolError); return(null); } this.lastSeenStreamId = id; // don't have to wait for stream opening SMStream stream = new SMStream(id, this); stream.OnClose += this.OnCloseStream; stream.Open(headers, isFinal); this.streams.Add(stream); if (this.OnStreamOpened != null) { this.OnStreamOpened(this, new StreamEventArgs(stream)); } return(stream); }
private byte[] SerializeControlFrameHeaders(SMHeaders frameHeaders) { var headers = new List <byte>(); 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> /// 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(SMStream stream, SMHeaders headers, bool isFin) { this.SendFrame(stream, this.builder.BuildHeadersFrame(stream, headers, isFin)); }
/// <summary> /// Sends the syn stream request. /// </summary> /// <param name="stream">The stream.</param> /// <param name="headers">The headers.</param> /// <param name="isFin">FIN flag.</param> public void SendSynStream(SMStream stream, SMHeaders headers, bool isFin) { this.SendFrame(this.builder.BuildSynStreamFrame(stream, headers, isFin)); }
/// <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 SMStream OpenStream(SMHeaders headers, bool isFinal) { return(this.OpenStream(this.GenerateNewStreamId(), headers, isFinal)); }