mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-18 19:17:51 +01:00
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.
54 lines
1.2 KiB
Go
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
|
|
}
|