| 427 | } |
| 428 | |
| 429 | func newFramer(conn io.ReadWriter, writeBufferSize, readBufferSize int, sharedWriteBuffer bool, maxHeaderListSize uint32, memPool mem.BufferPool) *framer { |
| 430 | if writeBufferSize < 0 { |
| 431 | writeBufferSize = 0 |
| 432 | } |
| 433 | r := bufferedReader(conn, readBufferSize) |
| 434 | var writePool *imem.SimpleBufferPool |
| 435 | if sharedWriteBuffer { |
| 436 | writePool = ioBufferPool(writeBufferSize) |
| 437 | } |
| 438 | w := newBufWriter(conn, writeBufferSize, writePool) |
| 439 | f := &framer{ |
| 440 | writer: w, |
| 441 | fr: http2.NewFramer(w, r), |
| 442 | reader: r, |
| 443 | pool: memPool, |
| 444 | } |
| 445 | f.fr.SetMaxReadFrameSize(http2MaxFrameLen) |
| 446 | // Opt-in to Frame reuse API on framer to reduce garbage. |
| 447 | // Frames aren't safe to read from after a subsequent call to ReadFrame. |
| 448 | f.fr.SetReuseFrames() |
| 449 | f.fr.MaxHeaderListSize = maxHeaderListSize |
| 450 | f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil) |
| 451 | return f |
| 452 | } |
| 453 | |
| 454 | // writeData writes a DATA frame. |
| 455 | // |