@@ -12,7 +12,6 @@ import (
12
12
"time"
13
13
14
14
"github.com/klauspost/compress/flate"
15
- kflate "github.com/klauspost/compress/flate"
16
15
"golang.org/x/xerrors"
17
16
18
17
"nhooyr.io/websocket/internal/errd"
@@ -77,9 +76,8 @@ type msgWriterState struct {
77
76
opcode opcode
78
77
flate bool
79
78
80
- trimWriter * trimLastFourBytesWriter
81
- flateWriter * flate.Writer
82
- dict slidingWindow
79
+ trimWriter * trimLastFourBytesWriter
80
+ dict slidingWindow
83
81
}
84
82
85
83
func newMsgWriterState (c * Conn ) * msgWriterState {
@@ -90,23 +88,14 @@ func newMsgWriterState(c *Conn) *msgWriterState {
90
88
return mw
91
89
}
92
90
93
- const stateless = true
94
-
95
91
func (mw * msgWriterState ) ensureFlate () {
96
92
if mw .trimWriter == nil {
97
93
mw .trimWriter = & trimLastFourBytesWriter {
98
94
w : writerFunc (mw .write ),
99
95
}
100
96
}
101
97
102
- if stateless {
103
- mw .dict .init (8192 )
104
- } else {
105
- if mw .flateWriter == nil {
106
- mw .flateWriter = getFlateWriter (mw .trimWriter )
107
- }
108
- }
109
-
98
+ mw .dict .init (8192 )
110
99
mw .flate = true
111
100
}
112
101
@@ -163,13 +152,6 @@ func (mw *msgWriterState) reset(ctx context.Context, typ MessageType) error {
163
152
return nil
164
153
}
165
154
166
- func (mw * msgWriterState ) putFlateWriter () {
167
- if mw .flateWriter != nil {
168
- putFlateWriter (mw .flateWriter )
169
- mw .flateWriter = nil
170
- }
171
- }
172
-
173
155
// Write writes the given bytes to the WebSocket connection.
174
156
func (mw * msgWriterState ) Write (p []byte ) (_ int , err error ) {
175
157
defer errd .Wrap (& err , "failed to write" )
@@ -186,15 +168,12 @@ func (mw *msgWriterState) Write(p []byte) (_ int, err error) {
186
168
}
187
169
188
170
if mw .flate {
189
- if stateless {
190
- err = kflate .StatelessDeflate (mw .trimWriter , p , false , mw .dict .buf )
191
- if err != nil {
192
- return 0 , err
193
- }
194
- mw .dict .write (p )
195
- return len (p ), nil
171
+ err = flate .StatelessDeflate (mw .trimWriter , p , false , mw .dict .buf )
172
+ if err != nil {
173
+ return 0 , err
196
174
}
197
- return mw .flateWriter .Write (p )
175
+ mw .dict .write (p )
176
+ return len (p ), nil
198
177
}
199
178
200
179
return mw .write (p )
@@ -216,29 +195,20 @@ func (mw *msgWriterState) Close() (err error) {
216
195
mw .writeMu .Lock ()
217
196
defer mw .writeMu .Unlock ()
218
197
219
- if mw .flate && ! stateless {
220
- err = mw .flateWriter .Flush ()
221
- if err != nil {
222
- return xerrors .Errorf ("failed to flush flate: %w" , err )
223
- }
224
- }
225
-
226
198
_ , err = mw .c .writeFrame (mw .ctx , true , mw .flate , mw .opcode , nil )
227
199
if err != nil {
228
200
return xerrors .Errorf ("failed to write fin frame: %w" , err )
229
201
}
230
202
231
203
if mw .flate && ! mw .flateContextTakeover () {
232
204
mw .dict .close ()
233
- mw .putFlateWriter ()
234
205
}
235
206
mw .mu .Unlock ()
236
207
return nil
237
208
}
238
209
239
210
func (mw * msgWriterState ) close () {
240
211
mw .writeMu .Lock ()
241
- mw .putFlateWriter ()
242
212
mw .dict .close ()
243
213
}
244
214
@@ -311,14 +281,13 @@ func (c *Conn) writeFrame(ctx context.Context, fin bool, flate bool, opcode opco
311
281
return n , nil
312
282
}
313
283
314
- func (c * Conn ) writeFramePayload (p []byte ) (_ int , err error ) {
284
+ func (c * Conn ) writeFramePayload (p []byte ) (n int , err error ) {
315
285
defer errd .Wrap (& err , "failed to write frame payload" )
316
286
317
287
if ! c .writeHeader .masked {
318
288
return c .bw .Write (p )
319
289
}
320
290
321
- var n int
322
291
maskKey := c .writeHeader .maskKey
323
292
for len (p ) > 0 {
324
293
// If the buffer is full, we need to flush.
0 commit comments