| 162 | } |
| 163 | |
| 164 | func (d *wsDecompressor) decompress() ([]byte, error) { |
| 165 | d.off = 0 |
| 166 | // As per https://tools.ietf.org/html/rfc7692#section-7.2.2 |
| 167 | // add 0x00, 0x00, 0xff, 0xff and then a final block so that flate reader |
| 168 | // does not report unexpected EOF. |
| 169 | d.bufs = append(d.bufs, compressFinalBlock) |
| 170 | // Create or reset the decompressor with his object (wsDecompressor) |
| 171 | // that provides Read() and ReadByte() APIs that will consume from |
| 172 | // the compressed buffers (d.bufs). |
| 173 | if d.flate == nil { |
| 174 | d.flate = flate.NewReader(d) |
| 175 | } else { |
| 176 | d.flate.(flate.Resetter).Reset(d, nil) |
| 177 | } |
| 178 | b, err := io.ReadAll(d.flate) |
| 179 | // Now reset the compressed buffers list |
| 180 | d.bufs = nil |
| 181 | return b, err |
| 182 | } |
| 183 | |
| 184 | func wsNewReader(r io.Reader) *websocketReader { |
| 185 | return &websocketReader{r: r, ff: true} |