-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.go
102 lines (95 loc) · 1.68 KB
/
util.go
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package go_engine_io_parser
import (
"bytes"
)
func writeBinaryLen(l int64, w *bytes.Buffer) error {
if l <= 0 {
if err := w.WriteByte(StartByte); err != nil {
return err
}
if err := w.WriteByte(TerminateByte); err != nil {
return err
}
return nil
}
max := int64(1)
for n := l / 10; n > 0; n /= 10 {
max *= 10
}
for max > 0 {
n := l / max
if err := w.WriteByte(byte(n)); err != nil {
return err
}
l -= n * max
max /= 10
}
return w.WriteByte(0xff)
}
func writeTextLen(l int64, w *bytes.Buffer) error {
if l <= 0 {
if err := w.WriteByte(TerminateSymbol); err != nil {
return err
}
if err := w.WriteByte(SeparateSymbol); err != nil {
return err
}
return nil
}
max := int64(1)
for n := l / 10; n > 0; n /= 10 {
max *= 10
}
for max > 0 {
n := l / max
if err := w.WriteByte(byte(n) + TerminateSymbol); err != nil {
return err
}
l -= n * max
max /= 10
}
return w.WriteByte(SeparateSymbol)
}
func readBinaryLen(r byteReader) (int64, error) {
ret := int64(0)
for {
b, err := r.ReadByte()
if err != nil {
return 0, err
}
if b == 0xff {
break
}
if b > 9 {
return 0, errInvalidPayload
}
ret = ret*10 + int64(b)
}
return ret, nil
}
func readTextLen(r byteReader) (int64, error) {
ret := int64(0)
for {
b, err := r.ReadByte()
if err != nil {
return 0, err
}
if b == SeparateSymbol {
break
}
if b < '0' || b > '9' {
return 0, errInvalidPayload
}
ret = ret*10 + int64(b-TerminateSymbol)
}
return ret, nil
}
func byteToPacketType(b byte, typ FrameType) Type {
if typ == FrameString {
b -= TerminateSymbol
}
return Type(b)
}
func byteToFrameType(b byte) FrameType {
return FrameType(b)
}