internal void Process(HTTP2FrameHeaderAndPayload frame, List <HTTP2FrameHeaderAndPayload> outgoingFrames) { if (frame.Type != HTTP2FrameTypes.SETTINGS) { return; } HTTP2SettingsFrame settingsFrame = HTTP2FrameHelper.ReadSettings(frame); if (HTTPManager.Logger.Level <= Logger.Loglevels.Information) { HTTPManager.Logger.Information("HTTP2SettingsManager", "Processing Settings frame: " + settingsFrame.ToString(), this.Parent.Context); } if ((settingsFrame.Flags & HTTP2SettingsFlags.ACK) == HTTP2SettingsFlags.ACK) { this.MySettings.Merge(this.InitiatedMySettings); this.SettingsChangesSentAt = DateTime.MinValue; } else { this.RemoteSettings.Merge(settingsFrame.Settings); outgoingFrames.Add(HTTP2FrameHelper.CreateACKSettingsFrame()); } }
public static HTTP2SettingsFrame ReadSettings(HTTP2FrameHeaderAndPayload header) { HTTP2SettingsFrame frame = new HTTP2SettingsFrame(header); if (header.PayloadLength > 0) { int kvpCount = (int)(header.PayloadLength / 6); frame.Settings = new List <KeyValuePair <HTTP2Settings, uint> >(kvpCount); for (int i = 0; i < kvpCount; ++i) { HTTP2Settings key = (HTTP2Settings)BufferHelper.ReadUInt16(header.Payload, i * 6); UInt32 value = BufferHelper.ReadUInt32(header.Payload, (i * 6) + 2); frame.Settings.Add(new KeyValuePair <HTTP2Settings, uint>(key, value)); } } return(frame); }