Skip to content

Commit bf95749

Browse files
committed
add comments
1 parent c4a7f7b commit bf95749

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

sess.go

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type (
5858

5959
// forward error correction
6060
fec *FEC
61-
fecGroup [][]byte
61+
fecDataShards [][]byte
6262
fecHeaderOffset int
6363
fecPayloadOffset int
6464

@@ -119,10 +119,10 @@ func newUDPSession(conv uint32, dataShards, parityShards int, l *Listener, conn
119119
}
120120
sess.fecPayloadOffset = sess.fecHeaderOffset + fecHeaderSize
121121

122-
// fec data group
123-
sess.fecGroup = make([][]byte, sess.fec.shardSize)
124-
for k := range sess.fecGroup {
125-
sess.fecGroup[k] = make([]byte, mtuLimit)
122+
// fec data shards
123+
sess.fecDataShards = make([][]byte, sess.fec.shardSize)
124+
for k := range sess.fecDataShards {
125+
sess.fecDataShards[k] = make([]byte, mtuLimit)
126126
}
127127
}
128128

@@ -136,9 +136,7 @@ func newUDPSession(conv uint32, dataShards, parityShards int, l *Listener, conn
136136

137137
sess.kcp = NewKCP(conv, func(buf []byte, size int) {
138138
if size >= IKCP_OVERHEAD {
139-
ext := xmitBuf.Get().([]byte)[:sess.headerSize+size]
140-
copy(ext[sess.headerSize:], buf)
141-
sess.output(ext)
139+
sess.output(buf[:size])
142140
}
143141
})
144142
sess.kcp.WndSize(defaultWndSize, defaultWndSize)
@@ -416,38 +414,52 @@ func (s *UDPSession) SetKeepAlive(interval int) {
416414
// 3. Encryption
417415
// 4. emit to emitTask
418416
// 5. emitTask WriteTo kernel
419-
func (s *UDPSession) output(ext []byte) {
417+
func (s *UDPSession) output(buf []byte) {
420418
var ecc [][]byte
419+
420+
// extend buf's header space
421+
ext := xmitBuf.Get().([]byte)[:s.headerSize+len(buf)]
422+
copy(ext[s.headerSize:], buf)
423+
424+
// FEC stage
421425
if s.fec != nil {
422426
s.fec.markData(ext[s.fecHeaderOffset:])
423427
binary.LittleEndian.PutUint16(ext[s.fecPayloadOffset:], uint16(len(ext[s.fecPayloadOffset:])))
424428

425-
// copy data to fec group
429+
// copy data to fec datashards
426430
sz := len(ext)
427-
s.fecGroup[s.fecCnt] = s.fecGroup[s.fecCnt][:sz]
428-
copy(s.fecGroup[s.fecCnt], ext)
431+
s.fecDataShards[s.fecCnt] = s.fecDataShards[s.fecCnt][:sz]
432+
copy(s.fecDataShards[s.fecCnt], ext)
429433
s.fecCnt++
434+
435+
// record max datashard length
430436
if sz > s.fecMaxSize {
431437
s.fecMaxSize = sz
432438
}
433439

434440
// calculate Reed-Solomon Erasure Code
435441
if s.fecCnt == s.fec.dataShards {
442+
// bzero each datashard's tail
436443
for i := 0; i < s.fec.dataShards; i++ {
437-
shard := s.fecGroup[i]
444+
shard := s.fecDataShards[i]
438445
slen := len(shard)
439446
xorBytes(shard[slen:s.fecMaxSize], shard[slen:s.fecMaxSize], shard[slen:s.fecMaxSize])
440447
}
441-
ecc = s.fec.calcECC(s.fecGroup, s.fecPayloadOffset, s.fecMaxSize)
448+
449+
// calculation of RS
450+
ecc = s.fec.calcECC(s.fecDataShards, s.fecPayloadOffset, s.fecMaxSize)
442451
for k := range ecc {
443452
s.fec.markFEC(ecc[k][s.fecHeaderOffset:])
444453
ecc[k] = ecc[k][:s.fecMaxSize]
445454
}
455+
456+
// reset counters to zero
446457
s.fecCnt = 0
447458
s.fecMaxSize = 0
448459
}
449460
}
450461

462+
// encryption stage
451463
if s.block != nil {
452464
io.ReadFull(rand.Reader, ext[:nonceSize])
453465
checksum := crc32.ChecksumIEEE(ext[cryptHeaderSize:])
@@ -464,6 +476,7 @@ func (s *UDPSession) output(ext []byte) {
464476
}
465477
}
466478

479+
// emit stage
467480
defaultEmitter.emit(emitPacket{s.conn, s.remote, ext, true})
468481
if ecc != nil {
469482
for k := range ecc {

0 commit comments

Comments
 (0)