(streamID uint32, endStream bool, hf []hpack.HeaderField, onWrite func())
| 734 | } |
| 735 | |
| 736 | func (l *loopyWriter) writeHeader(streamID uint32, endStream bool, hf []hpack.HeaderField, onWrite func()) error { |
| 737 | if onWrite != nil { |
| 738 | onWrite() |
| 739 | } |
| 740 | l.hBuf.Reset() |
| 741 | for _, f := range hf { |
| 742 | if err := l.hEnc.WriteField(f); err != nil { |
| 743 | if l.logger.V(logLevel) { |
| 744 | l.logger.Warningf("Encountered error while encoding headers: %v", err) |
| 745 | } |
| 746 | } |
| 747 | } |
| 748 | var ( |
| 749 | err error |
| 750 | endHeaders, first bool |
| 751 | ) |
| 752 | first = true |
| 753 | for !endHeaders { |
| 754 | size := l.hBuf.Len() |
| 755 | if size > http2MaxFrameLen { |
| 756 | size = http2MaxFrameLen |
| 757 | } else { |
| 758 | endHeaders = true |
| 759 | } |
| 760 | if first { |
| 761 | first = false |
| 762 | err = l.framer.fr.WriteHeaders(http2.HeadersFrameParam{ |
| 763 | StreamID: streamID, |
| 764 | BlockFragment: l.hBuf.Next(size), |
| 765 | EndStream: endStream, |
| 766 | EndHeaders: endHeaders, |
| 767 | }) |
| 768 | } else { |
| 769 | err = l.framer.fr.WriteContinuation( |
| 770 | streamID, |
| 771 | endHeaders, |
| 772 | l.hBuf.Next(size), |
| 773 | ) |
| 774 | } |
| 775 | if err != nil { |
| 776 | return err |
| 777 | } |
| 778 | } |
| 779 | return nil |
| 780 | } |
| 781 | |
| 782 | func (l *loopyWriter) preprocessData(df *dataFrame) { |
| 783 | str, ok := l.estdStreams[df.streamID] |
no test coverage detected