File: header.go

package info (click to toggle)
golang-github-inconshreveable-muxado 0.0~git20140312.0.f693c7e-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 256 kB
  • ctags: 374
  • sloc: makefile: 2
file content (85 lines) | stat: -rw-r--r-- 1,590 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package frame

import "io"

const (
	headerSize = 8
)

type Header []byte

func newHeader() Header {
	return Header(make([]byte, headerSize))
}

func (b Header) readFrom(d deserializer) (err error) {
	// read the header
	if _, err = io.ReadFull(d, []byte(b)); err != nil {
		return err
	}
	return
}

func (b Header) Length() uint16 {
	return order.Uint16(b[:2]) & lengthMask
}

func (b Header) SetLength(length int) (err error) {
	if length > lengthMask || length < 0 {
		return protoError("Frame length %d out of range", length)
	}

	order.PutUint16(b[:2], uint16(length))
	return
}

func (b Header) Type() FrameType {
	return FrameType((b[3]) & typeMask)
}

func (b Header) SetType(t FrameType) (err error) {
	b[3] = byte(t & typeMask)
	return
}

func (b Header) StreamId() StreamId {
	return StreamId(order.Uint32(b[4:]) & streamMask)
}

func (b Header) SetStreamId(streamId StreamId) (err error) {
	if streamId > streamMask {
		return protoError("Stream id %d out of range", streamId)
	}

	order.PutUint32(b[4:], uint32(streamId))
	return
}

func (b Header) Flags() flagsType {
	return flagsType(b[2])
}

func (b Header) SetFlags(fl flagsType) (err error) {
	b[2] = byte(fl)
	return
}

func (b Header) Fin() bool {
	return b.Flags().IsSet(flagFin)
}

func (b Header) SetAll(ftype FrameType, length int, streamId StreamId, flags flagsType) (err error) {
	if err = b.SetType(ftype); err != nil {
		return
	}
	if err = b.SetLength(length); err != nil {
		return
	}
	if err = b.SetStreamId(streamId); err != nil {
		return
	}
	if err = b.SetFlags(flags); err != nil {
		return
	}
	return
}