|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #include "Ack.hpp"
- #include "Common.hpp"
-
- namespace SRT {
-
- bool ACKPacket::loadFromData(uint8_t *buf, size_t len) {
- if (len < ACK_CIF_SIZE + ControlPacket::HEADER_SIZE) {
- return false;
- }
-
- _data = BufferRaw::create();
- _data->assign((char *)(buf), len);
- ControlPacket::loadHeader();
- ack_number = loadUint32(type_specific_info);
- uint8_t *ptr = (uint8_t *)_data->data() + ControlPacket::HEADER_SIZE;
-
- last_ack_pkt_seq_number = loadUint32(ptr);
- ptr += 4;
-
- rtt = loadUint32(ptr);
- ptr += 4;
-
- rtt_variance = loadUint32(ptr);
- ptr += 4;
-
- available_buf_size = loadUint32(ptr);
- ptr += 4;
-
- pkt_recv_rate = loadUint32(ptr);
- ptr += 4;
-
- estimated_link_capacity = loadUint32(ptr);
- ptr += 4;
-
- recv_rate = loadUint32(ptr);
- ptr += 4;
-
- return true;
- }
-
- bool ACKPacket::storeToData() {
- _data = BufferRaw::create();
- _data->setCapacity(HEADER_SIZE + ACK_CIF_SIZE);
- _data->setSize(HEADER_SIZE + ACK_CIF_SIZE);
- control_type = ControlPacket::ACK;
- sub_type = 0;
-
- storeUint32(type_specific_info, ack_number);
- storeToHeader();
-
- uint8_t *ptr = (uint8_t *)_data->data() + ControlPacket::HEADER_SIZE;
-
- storeUint32(ptr, last_ack_pkt_seq_number);
- ptr += 4;
-
- storeUint32(ptr, rtt);
- ptr += 4;
-
- storeUint32(ptr, rtt_variance);
- ptr += 4;
-
- storeUint32(ptr, available_buf_size);
- ptr += 4;
-
- storeUint32(ptr, pkt_recv_rate);
- ptr += 4;
-
- storeUint32(ptr, estimated_link_capacity);
- ptr += 4;
-
- storeUint32(ptr, recv_rate);
- ptr += 4;
-
- return true;
- }
-
- std::string ACKPacket::dump() {
- _StrPrinter printer;
- printer << "last_ack_pkt_seq_number=" << last_ack_pkt_seq_number << " rtt=" << rtt
- << " rtt_variance=" << rtt_variance << " pkt_recv_rate=" << pkt_recv_rate
- << " available_buf_size=" << available_buf_size << " estimated_link_capacity=" << estimated_link_capacity
- << " recv_rate=" << recv_rate;
- return std::move(printer);
- }
- } // namespace SRT
|