estimator_common.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "../estimator/estimator_common.h"
  2. void feedback_msg_encode(bin_stream_t* strm, feedback_msg_t* msg)
  3. {
  4. int i;
  5. mach_uint8_write(strm, msg->flag);
  6. if ((msg->flag & remb_msg) == remb_msg)
  7. mach_uint32_write(strm, msg->remb);
  8. if ((msg->flag & loss_info_msg) == loss_info_msg){
  9. mach_uint8_write(strm, msg->fraction_loss);
  10. mach_int32_write(strm, msg->packet_num);
  11. }
  12. if ((msg->flag & proxy_ts_msg) == proxy_ts_msg){
  13. mach_int64_write(strm, msg->base_seq);
  14. mach_int64_write(strm, msg->min_ts);
  15. mach_uint8_write(strm, msg->samples_num);
  16. for (i = 0; i < msg->samples_num; ++i){
  17. mach_uint16_write(strm, msg->samples[i].seq);
  18. mach_uint16_write(strm, (uint16_t)(msg->samples[i].ts - msg->min_ts)); /*此处timestamp之差不可能大于65535,因为在proxy里面只保留500毫秒的报文记录*/
  19. }
  20. }
  21. }
  22. void feedback_msg_decode(bin_stream_t* strm, feedback_msg_t* msg)
  23. {
  24. int i;
  25. uint16_t delta_ts;
  26. mach_uint8_read(strm, &msg->flag);
  27. if ((msg->flag & remb_msg) == remb_msg)
  28. mach_uint32_read(strm, &msg->remb);
  29. if ((msg->flag & loss_info_msg) == loss_info_msg){
  30. mach_uint8_read(strm, &msg->fraction_loss);
  31. mach_int32_read(strm, &msg->packet_num);
  32. }
  33. if ((msg->flag & proxy_ts_msg) == proxy_ts_msg){
  34. mach_int64_read(strm, &msg->base_seq);
  35. mach_int64_read(strm, &msg->min_ts);
  36. mach_uint8_read(strm, &msg->samples_num);
  37. if (msg->samples_num > MAX_FEELBACK_COUNT)
  38. msg->samples_num = 0;
  39. for (i = 0; i < msg->samples_num; ++i){
  40. mach_uint16_read(strm, &msg->samples[i].seq);
  41. mach_uint16_read(strm, &delta_ts);
  42. msg->samples[i].ts = msg->min_ts + delta_ts;
  43. }
  44. }
  45. }