-
Notifications
You must be signed in to change notification settings - Fork 19
/
packet_ack.go
78 lines (70 loc) · 1.76 KB
/
packet_ack.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
package udt
// Structure of packets and functions for writing/reading them
import (
"io"
)
type ackPacket struct {
h header
ackSeqNo uint32 // ACK sequence number
pktSeqHi uint32 // The packet sequence number to which all the previous packets have been received (excluding)
// The below are optional
rtt uint32 // RTT (in microseconds)
rttVar uint32 // RTT variance
buffAvail uint32 // Available buffer size (in bytes)
pktRecvRate uint32 // Packets receiving rate (in number of packets per second)
estLinkCap uint32 // Estimated link capacity (in number of packets per second)
}
func (p *ackPacket) socketId() (sockId uint32) {
return p.h.dstSockId
}
func (p *ackPacket) sendTime() (ts uint32) {
return p.h.ts
}
func (p *ackPacket) writeTo(w io.Writer) (err error) {
if err := p.h.writeTo(w, ack, p.ackSeqNo); err != nil {
return err
}
if err := writeBinary(w, p.pktSeqHi); err != nil {
return err
}
if err := writeBinary(w, p.rtt); err != nil {
return err
}
if err := writeBinary(w, p.rttVar); err != nil {
return err
}
if err := writeBinary(w, p.buffAvail); err != nil {
return err
}
if err := writeBinary(w, p.pktRecvRate); err != nil {
return err
}
if err := writeBinary(w, p.estLinkCap); err != nil {
return err
}
return
}
func (p *ackPacket) readFrom(r io.Reader) (err error) {
if p.ackSeqNo, err = p.h.readFrom(r); err != nil {
return
}
if err = readBinary(r, &p.pktSeqHi); err != nil {
return
}
if err = readBinary(r, &p.rtt); err != nil {
return
}
if err = readBinary(r, &p.rttVar); err != nil {
return
}
if err = readBinary(r, &p.buffAvail); err != nil {
return
}
if err = readBinary(r, &p.pktRecvRate); err != nil {
return
}
if err = readBinary(r, &p.estLinkCap); err != nil {
return
}
return
}