Files
core/udt/packet/packet_nak.go
Kleissner 9ddca35277 Transfer: Set max packet size.
udt: Improve error messages. Fix bug in udtSocketSend.processDataMsg, the header was not considered in the max size.
webapi: New /file/view API which is useful for immediate testing of file transfer.
2021-10-28 04:06:10 +02:00

54 lines
1.2 KiB
Go

package packet
// Structure of packets and functions for writing/reading them
import (
"errors"
)
// NakPacket is a UDT packet notifying the peer of lost packets
type NakPacket struct {
ctrlHeader
CmpLossInfo []uint32 // integer array of compressed loss information
}
// WriteTo writes this packet to the provided buffer, returning the length of the packet
func (p *NakPacket) WriteTo(buf []byte) (uint, error) {
off, err := p.writeHdrTo(buf, ptNak, 0)
if err != nil {
return 0, err
}
l := uint(len(buf))
if l < off+uint(4*len(p.CmpLossInfo)) {
return 0, errors.New("nak packet too small")
}
for _, elm := range p.CmpLossInfo {
endianness.PutUint32(buf[off:off+4], elm)
off = off + 4
}
return off, nil
}
func (p *NakPacket) readFrom(data []byte) error {
if _, err := p.readHdrFrom(data); err != nil {
return err
}
l := len(data)
numEntry := (l - 16) / 4
p.CmpLossInfo = make([]uint32, numEntry)
for idx := range p.CmpLossInfo {
st := 16 + 4*idx
p.CmpLossInfo[idx] = endianness.Uint32(data[st : st+4])
}
return nil
}
// PacketType returns the packetType associated with this packet
func (p *NakPacket) PacketType() PacketType {
return ptNak
}