File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -98,6 +98,29 @@ func CalculateFrontHeadroom(writer any) int {
9898 return headroom
9999}
100100
101+ func calculateReaderFrontHeadroom (reader any ) int {
102+ var headroom int
103+ for {
104+ if reader == nil {
105+ break
106+ }
107+ if lazyRoom , isLazy := reader .(LazyHeadroom ); isLazy && lazyRoom .LazyHeadroom () {
108+ return DefaultHeadroom
109+ }
110+ if headroomWriter , needHeadroom := reader .(FrontHeadroom ); needHeadroom {
111+ headroom += headroomWriter .FrontHeadroom ()
112+ }
113+ if upstreamWriter , hasUpstreamWriter := reader .(WithUpstreamReader ); hasUpstreamWriter {
114+ reader = upstreamWriter .UpstreamReader ()
115+ } else if upstream , hasUpstream := reader .(common.WithUpstream ); hasUpstream {
116+ reader = upstream .Upstream ()
117+ } else {
118+ break
119+ }
120+ }
121+ return headroom
122+ }
123+
101124func CalculateRearHeadroom (writer any ) int {
102125 var headroom int
103126 for {
@@ -131,14 +154,15 @@ type WriterWithMTU interface {
131154
132155func CalculateMTU (reader any , writer any ) int {
133156 readerMTU := calculateReaderMTU (reader )
157+ readerHeadroom := calculateReaderFrontHeadroom (reader )
134158 writerMTU := calculateWriterMTU (writer )
135159 if readerMTU > writerMTU {
136- return readerMTU
160+ return readerMTU + readerHeadroom
137161 }
138162 if writerMTU > buf .BufferSize {
139163 return 0
140164 }
141- return writerMTU
165+ return writerMTU + readerHeadroom
142166}
143167
144168func calculateReaderMTU (reader any ) int {
You can’t perform that action at this time.
0 commit comments