mirror of https://github.com/status-im/consul.git
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package frame
|
|
|
|
import "io"
|
|
|
|
const (
|
|
wndIncBodySize = 4
|
|
wndIncFrameSize = headerSize + wndIncBodySize
|
|
)
|
|
|
|
// Increase a stream's flow control window size
|
|
type RStreamWndInc struct {
|
|
Header
|
|
body [wndIncBodySize]byte
|
|
}
|
|
|
|
func (f *RStreamWndInc) WindowIncrement() (inc uint32) {
|
|
return order.Uint32(f.body[:]) & wndIncMask
|
|
}
|
|
|
|
func (f *RStreamWndInc) readFrom(d deserializer) (err error) {
|
|
if f.Length() != wndIncBodySize {
|
|
return protoError("WND_INC length must be %d, got %d", wndIncBodySize, f.Length())
|
|
}
|
|
|
|
_, err = io.ReadFull(d, f.body[:])
|
|
return
|
|
}
|
|
|
|
type WStreamWndInc struct {
|
|
Header
|
|
data [wndIncFrameSize]byte
|
|
}
|
|
|
|
func (f *WStreamWndInc) writeTo(s serializer) (err error) {
|
|
_, err = s.Write(f.data[:])
|
|
return
|
|
}
|
|
|
|
func (f *WStreamWndInc) Set(streamId StreamId, inc uint32) (err error) {
|
|
if inc > wndIncMask {
|
|
return protoError("Window increment %d out of range", inc)
|
|
}
|
|
|
|
order.PutUint32(f.data[headerSize:], inc)
|
|
|
|
if err = f.Header.SetAll(TypeStreamWndInc, wndIncBodySize, streamId, 0); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func NewWStreamWndInc() (f *WStreamWndInc) {
|
|
f = new(WStreamWndInc)
|
|
f.Header = Header(f.data[:headerSize])
|
|
return
|
|
}
|