@@ -14,38 +14,39 @@ type frame interface{}
14
14
15
15
func parseNextFrame (r io.Reader ) (frame , error ) {
16
16
qr := quicvarint .NewReader (r )
17
- t , err := quicvarint .Read (qr )
18
- if err != nil {
19
- return nil , err
20
- }
21
- l , err := quicvarint .Read (qr )
22
- if err != nil {
23
- return nil , err
24
- }
25
-
26
- switch t {
27
- case 0x0 :
28
- return & dataFrame {Length : l }, nil
29
- case 0x1 :
30
- return & headersFrame {Length : l }, nil
31
- case 0x4 :
32
- return parseSettingsFrame (r , l )
33
- case 0x3 : // CANCEL_PUSH
34
- fallthrough
35
- case 0x5 : // PUSH_PROMISE
36
- fallthrough
37
- case 0x7 : // GOAWAY
38
- fallthrough
39
- case 0xd : // MAX_PUSH_ID
40
- fallthrough
41
- case 0xe : // DUPLICATE_PUSH
42
- fallthrough
43
- default :
44
- // skip over unknown frames
45
- if _ , err := io .CopyN (ioutil .Discard , qr , int64 (l )); err != nil {
17
+ for {
18
+ t , err := quicvarint .Read (qr )
19
+ if err != nil {
46
20
return nil , err
47
21
}
48
- return parseNextFrame (qr )
22
+ l , err := quicvarint .Read (qr )
23
+ if err != nil {
24
+ return nil , err
25
+ }
26
+
27
+ switch t {
28
+ case 0x0 :
29
+ return & dataFrame {Length : l }, nil
30
+ case 0x1 :
31
+ return & headersFrame {Length : l }, nil
32
+ case 0x4 :
33
+ return parseSettingsFrame (r , l )
34
+ case 0x3 : // CANCEL_PUSH
35
+ fallthrough
36
+ case 0x5 : // PUSH_PROMISE
37
+ fallthrough
38
+ case 0x7 : // GOAWAY
39
+ fallthrough
40
+ case 0xd : // MAX_PUSH_ID
41
+ fallthrough
42
+ case 0xe : // DUPLICATE_PUSH
43
+ fallthrough
44
+ default :
45
+ // skip over unknown frames
46
+ if _ , err := io .CopyN (ioutil .Discard , qr , int64 (l )); err != nil {
47
+ return nil , err
48
+ }
49
+ }
49
50
}
50
51
}
51
52
0 commit comments