void stfu_n_report(stfu_instance_t *i, stfu_report_t *r) { stfu_assert(i); r->qlen = i->qlen; r->packet_in_count = i->period_packet_in_count; r->clean_count = i->period_clean_count; r->consecutive_good_count = i->consecutive_good_count; r->consecutive_bad_count = i->consecutive_bad_count; }
static int stfu_n_find_any_frame(stfu_instance_t *in, stfu_queue_t *queue, stfu_frame_t **r_frame, int force) { uint32_t i = 0, best_index = 0; int best_diff = 1000000, cur_diff = 0; stfu_frame_t *frame = NULL, *best_frame = NULL; int newer = 0; stfu_assert(r_frame); *r_frame = NULL; top: if (force) { in->cur_ts = 0; } for(i = 0; i < queue->real_array_size; i++) { frame = &queue->array[i]; if (!frame->was_read && in->cur_ts && frame->ts > in->cur_ts) { newer++; } cur_diff = abs((int)(frame->ts - in->cur_ts)); if (!frame->was_read && cur_diff < best_diff) { best_diff = cur_diff; best_frame = frame; best_index = i; } } if (!force && !best_frame && newer) { force = 1; goto top; } if (best_frame) { *r_frame = best_frame; queue->last_index = best_index; best_frame->was_read = 1; in->period_packet_out_count++; in->session_packet_out_count++; return 1; } return 0; }
static int stfu_n_find_any_frame(stfu_instance_t *in, stfu_queue_t *queue, stfu_frame_t **r_frame) { uint32_t i = 0; stfu_frame_t *frame = NULL; stfu_assert(r_frame); *r_frame = NULL; for(i = 0; i < queue->real_array_size; i++) { frame = &queue->array[i]; if (!frame->was_read) { *r_frame = frame; queue->last_index = i; frame->was_read = 1; in->period_packet_out_count++; in->session_packet_out_count++; return 1; } } return 0; }