func copyFramesUntilSettingsAck()

in mux.go [150:171]


func copyFramesUntilSettingsAck(w io.Writer, r io.Reader) error {
	var frameBuf bytes.Buffer
	framer := http2.NewFramer(w, io.TeeReader(r, &frameBuf))
	framer.SetReuseFrames()
	var haveFirstSettingsACK bool
	for !haveFirstSettingsACK {
		f, err := framer.ReadFrame()
		if err != nil {
			return err
		}
		switch f := f.(type) {
		case *http2.SettingsFrame:
			if !haveFirstSettingsACK && f.IsAck() {
				haveFirstSettingsACK = true
				frameBuf.Truncate(frameBuf.Len() - int(f.Length) - http2FrameHeaderLength)
				break
			}
		}
	}
	_, err := io.Copy(w, &frameBuf)
	return err
}