No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

hace 5 meses
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include "Ack.hpp"
  2. #include "Common.hpp"
  3. namespace SRT {
  4. bool ACKPacket::loadFromData(uint8_t *buf, size_t len) {
  5. if (len < ACK_CIF_SIZE + ControlPacket::HEADER_SIZE) {
  6. return false;
  7. }
  8. _data = BufferRaw::create();
  9. _data->assign((char *)(buf), len);
  10. ControlPacket::loadHeader();
  11. ack_number = loadUint32(type_specific_info);
  12. uint8_t *ptr = (uint8_t *)_data->data() + ControlPacket::HEADER_SIZE;
  13. last_ack_pkt_seq_number = loadUint32(ptr);
  14. ptr += 4;
  15. rtt = loadUint32(ptr);
  16. ptr += 4;
  17. rtt_variance = loadUint32(ptr);
  18. ptr += 4;
  19. available_buf_size = loadUint32(ptr);
  20. ptr += 4;
  21. pkt_recv_rate = loadUint32(ptr);
  22. ptr += 4;
  23. estimated_link_capacity = loadUint32(ptr);
  24. ptr += 4;
  25. recv_rate = loadUint32(ptr);
  26. ptr += 4;
  27. return true;
  28. }
  29. bool ACKPacket::storeToData() {
  30. _data = BufferRaw::create();
  31. _data->setCapacity(HEADER_SIZE + ACK_CIF_SIZE);
  32. _data->setSize(HEADER_SIZE + ACK_CIF_SIZE);
  33. control_type = ControlPacket::ACK;
  34. sub_type = 0;
  35. storeUint32(type_specific_info, ack_number);
  36. storeToHeader();
  37. uint8_t *ptr = (uint8_t *)_data->data() + ControlPacket::HEADER_SIZE;
  38. storeUint32(ptr, last_ack_pkt_seq_number);
  39. ptr += 4;
  40. storeUint32(ptr, rtt);
  41. ptr += 4;
  42. storeUint32(ptr, rtt_variance);
  43. ptr += 4;
  44. storeUint32(ptr, available_buf_size);
  45. ptr += 4;
  46. storeUint32(ptr, pkt_recv_rate);
  47. ptr += 4;
  48. storeUint32(ptr, estimated_link_capacity);
  49. ptr += 4;
  50. storeUint32(ptr, recv_rate);
  51. ptr += 4;
  52. return true;
  53. }
  54. std::string ACKPacket::dump() {
  55. _StrPrinter printer;
  56. printer << "last_ack_pkt_seq_number=" << last_ack_pkt_seq_number << " rtt=" << rtt
  57. << " rtt_variance=" << rtt_variance << " pkt_recv_rate=" << pkt_recv_rate
  58. << " available_buf_size=" << available_buf_size << " estimated_link_capacity=" << estimated_link_capacity
  59. << " recv_rate=" << recv_rate;
  60. return std::move(printer);
  61. }
  62. } // namespace SRT