-
Notifications
You must be signed in to change notification settings - Fork 2
/
protocol
71 lines (49 loc) · 1.71 KB
/
protocol
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
ping
01 <msg>
ping reply
41 <msg>
set ack window
0a <vlu ackWindow>
flow open
10 <vlu flowID> <bytes metadata>
30 <vlu flowID> <vlu returnAssoc> <bytes metadata>
user data
1d <vlu flowID> <msg> // last frag
3d <vlu flowID> <msg> // more frags coming
abandon message
1a <vlu flowID> [<vlu abandonCountMinusOne>]
flow close
1c <vlu flowID>
receive data ack
5a <vlu flowID> <vlu deltaByteCount> <vlu bufferAdvertisement>
receive flow close ack
5c <vlu flowID>
receive flow exception
5e <vlu flowID> [<vlu reasonCode> [<UTF8 description>]]
----
vlu: see https://tools.ietf.org/html/rfc7016#section-2.1.2
on ping:
send ping reply immediately.
on flow open:
reject if flow ID already in use.
on flow open with return association:
reject if return assoc is not open.
flow data messages:
each message is zero or more 3d "more frags coming" fragments and one 1d "last frag" fragment.
sending data acks:
not more than 250ms after receiving any user data.
immediately after receiving at least N*ack-window bytes since last set ack window.
(initial ack-window is 2800 bytes)
immediately after receiving at least (last advertised buffer)/2 bytes on this flow.
immediately on flow open.
send all pending acks at once.
deltaByteCount is count of bytes in user data messages including headers since last ack.
on flow close:
send ack, then flow close ack, recv flowID immediately no longer valid/in use.
on flow close ack:
send flowID no longer valid/in use.
on abandon message:
incomplete received message is abandoned & removed, countMinusOne
includes this message.
if no incomplete & unabandoned message being assembled, countMinusOne + 1 is
count of never sent messages.