github.com/alejandroesc/spdy@v0.0.0-20200317064415-01a02f0eb389/spdy2/frames/window_update.go (about) 1 // Copyright 2014 Jamie Hall. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package frames 6 7 import ( 8 "bytes" 9 "errors" 10 "fmt" 11 "io" 12 13 "github.com/SlyMarbo/spdy/common" 14 ) 15 16 type WINDOW_UPDATE struct { 17 StreamID common.StreamID 18 DeltaWindowSize uint32 19 } 20 21 func (frame *WINDOW_UPDATE) Compress(comp common.Compressor) error { 22 return nil 23 } 24 25 func (frame *WINDOW_UPDATE) Decompress(decomp common.Decompressor) error { 26 return nil 27 } 28 29 func (frame *WINDOW_UPDATE) Name() string { 30 return "WINDOW_UPDATE" 31 } 32 33 func (frame *WINDOW_UPDATE) ReadFrom(reader io.Reader) (int64, error) { 34 c := common.ReadCounter{R: reader} 35 data, err := common.ReadExactly(&c, 16) 36 if err != nil { 37 return c.N, err 38 } 39 40 err = controlFrameCommonProcessing(data[:5], _WINDOW_UPDATE, 0) 41 if err != nil { 42 return c.N, err 43 } 44 45 // Get and check length. 46 length := int(common.BytesToUint24(data[5:8])) 47 if length != 8 { 48 return c.N, common.IncorrectDataLength(length, 8) 49 } 50 51 frame.StreamID = common.StreamID(common.BytesToUint32(data[8:12])) 52 frame.DeltaWindowSize = common.BytesToUint32(data[12:16]) 53 54 if !frame.StreamID.Valid() { 55 return c.N, common.StreamIdTooLarge 56 } 57 if frame.StreamID.Zero() { 58 return c.N, common.StreamIdIsZero 59 } 60 if frame.DeltaWindowSize > common.MAX_DELTA_WINDOW_SIZE { 61 return c.N, errors.New("Error: Delta Window Size too large.") 62 } 63 64 return c.N, nil 65 } 66 67 func (frame *WINDOW_UPDATE) String() string { 68 buf := new(bytes.Buffer) 69 70 buf.WriteString("WINDOW_UPDATE {\n\t") 71 buf.WriteString(fmt.Sprintf("Version: 2\n\t")) 72 buf.WriteString(fmt.Sprintf("Stream ID: %d\n\t", frame.StreamID)) 73 buf.WriteString(fmt.Sprintf("Delta window size: %d\n}\n", frame.DeltaWindowSize)) 74 75 return buf.String() 76 } 77 78 func (frame *WINDOW_UPDATE) WriteTo(writer io.Writer) (int64, error) { 79 return 0, nil 80 }