private void OnProtocolData(object sender, StreamEventArgs e)
{
if (e.Stream == this)
{
if (Http2StreamState.Closed == e.Stream.State)
{
this.Close(StatusCode.ProtocolError);
return;
}
if (e is HeadersEventArgs)
{
var args = (HeadersEventArgs)e;
this.Headers.Merge(args.Headers);
if (this.OnHeadersReceived != null)
{
this.OnHeadersReceived(this, args);
}
}
else if (e is StreamDataEventArgs)
{
StreamDataEventArgs arg = e as StreamDataEventArgs;
if (arg.IsFin && this.State == Http2StreamState.HalfClosed)
{
this.Close();
}
if (this.OnDataReceived != null)
{
StreamDataEventArgs args = (StreamDataEventArgs)e;
this.OnDataReceived(this, e as StreamDataEventArgs);
//TODO incomment when server will be able to handle windowUpdate
/*if (Session.IsFlowControlEnabled)
{
CurrentWindowBalanceFromServer -= args.Data.Data.Length;
if (CurrentWindowBalanceFromServer <= 0)
this.protocol.SendWindowUpdate(this, Session.CurrentWindowBalanceToServer);
}*/
}
}
else if (e is RSTEventArgs)
{
if (this.OnRSTReceived != null)
{
this.OnRSTReceived(this, e as RSTEventArgs);
}
}
}
}