func (frame *RST_STREAM) ReadFrom(reader io.Reader) (int64, error) { c := common.ReadCounter{R: reader} data, err := common.ReadExactly(&c, 16) if err != nil { return c.N, err } err = controlFrameCommonProcessing(data[:5], _RST_STREAM, 0) if err != nil { return c.N, err } // Get and check length. length := int(common.BytesToUint24(data[5:8])) if length != 8 { return c.N, common.IncorrectDataLength(length, 8) } else if length > common.MAX_FRAME_SIZE-8 { return c.N, common.FrameTooLarge } frame.StreamID = common.StreamID(common.BytesToUint32(data[8:12])) frame.Status = common.StatusCode(common.BytesToUint32(data[12:16])) if !frame.StreamID.Valid() { return c.N, common.StreamIdTooLarge } return c.N, nil }
func (frame *GOAWAY) ReadFrom(reader io.Reader) (int64, error) { data, err := common.ReadExactly(reader, 16) if err != nil { return 0, err } err = controlFrameCommonProcessing(data[:5], _GOAWAY, 0) if err != nil { return 16, err } // Get and check length. length := int(common.BytesToUint24(data[5:8])) if length != 8 { return 16, common.IncorrectDataLength(length, 8) } frame.LastGoodStreamID = common.StreamID(common.BytesToUint32(data[8:12])) frame.Status = common.StatusCode(common.BytesToUint32(data[12:16])) if !frame.LastGoodStreamID.Valid() { return 16, common.StreamIdTooLarge } return 16, nil }