TODO: Delete rb?
(br *bufio.Reader)
| 178 | |
| 179 | // TODO: Delete rb? |
| 180 | func (f *FrameHeader) readFrom(br *bufio.Reader) (int64, error) { |
| 181 | header, err := br.Peek(DefaultFrameSize) |
| 182 | if err != nil { |
| 183 | return -1, err |
| 184 | } |
| 185 | |
| 186 | _, _ = br.Discard(DefaultFrameSize) |
| 187 | |
| 188 | rn := int64(DefaultFrameSize) |
| 189 | |
| 190 | // Parsing FrameHeader's Header field. |
| 191 | f.parseValues(header) |
| 192 | if err = f.checkLen(); err != nil { |
| 193 | return 0, err |
| 194 | } |
| 195 | |
| 196 | if f.kind > FrameContinuation { |
| 197 | _, _ = br.Discard(f.length) |
| 198 | return 0, ErrUnknownFrameType |
| 199 | } |
| 200 | f.fr = AcquireFrame(f.kind) |
| 201 | |
| 202 | // if max > 0 && frh.length > max { |
| 203 | // TODO: Discard bytes and return an error |
| 204 | if f.length > 0 { |
| 205 | n := f.length |
| 206 | if n < 0 { |
| 207 | panic(fmt.Sprintf("length is less than 0 (%d). Overflow? (%d)", n, f.length)) |
| 208 | } |
| 209 | |
| 210 | f.payload = http2utils.Resize(f.payload, n) |
| 211 | |
| 212 | n, err = io.ReadFull(br, f.payload[:n]) |
| 213 | if err != nil { |
| 214 | ReleaseFrame(f.fr) |
| 215 | return 0, err |
| 216 | } |
| 217 | |
| 218 | rn += int64(n) |
| 219 | } |
| 220 | |
| 221 | return rn, f.fr.Deserialize(f) |
| 222 | } |
| 223 | |
| 224 | // WriteTo writes frame to the Writer. |
| 225 | // |
no test coverage detected