Better code

This commit is contained in:
Quentin 2019-06-04 16:46:10 +02:00
parent 4643aa7a42
commit 5bfc545f23

View file

@ -25,6 +25,7 @@ struct pkt_reconstruct {
enum pkt_reconstruct_res r; enum pkt_reconstruct_res r;
int diff_0; int diff_0;
int diff_1; int diff_1;
struct buffer_packet single[2][MAX_PKTS_TO_CHECK_FOR_DROP];
}; };
struct pkt_stats { struct pkt_stats {
@ -60,6 +61,12 @@ void update_stats(struct buffer_packet *bp, GHashTable* stat_elem) {
ps->cumulated_size += bp->ip.ap.fmt.headers.size; ps->cumulated_size += bp->ip.ap.fmt.headers.size;
} }
void unroll_packets(struct cap_file cf[], struct buffer_packet bpread[], GHashTable* stats[], struct pkt_reconstruct *pr, int m, int i) {
cap_next_bp (&cf[i], &bpread[i]);
update_stats(&bpread[i], stats[i]);
memcpy(&pr->single[i][m], &bpread[i], sizeof(struct buffer_packet));
}
void reconstruct_action(struct cap_file cf[], struct pkt_reconstruct* pr, GHashTable *stats[]) { void reconstruct_action(struct cap_file cf[], struct pkt_reconstruct* pr, GHashTable *stats[]) {
struct buffer_packet bpread[2]; struct buffer_packet bpread[2];
pr->r = PREC_FAIL; pr->r = PREC_FAIL;
@ -71,8 +78,8 @@ void reconstruct_action(struct cap_file cf[], struct pkt_reconstruct* pr, GHashT
pr->r = m1 == 0 && m2 == 0 ? PREC_SAME : PREC_DROP; pr->r = m1 == 0 && m2 == 0 ? PREC_SAME : PREC_DROP;
pr->diff_0 = m1; pr->diff_0 = m1;
pr->diff_1 = m2; pr->diff_1 = m2;
while (m1-- >= 0) { cap_next_bp (&cf[0], &bpread[0]); update_stats(&bpread[0], stats[0]); } for (int m = m1; m >= 0; m--) unroll_packets (cf, bpread, stats, pr, m, 0);
while (m2-- >= 0) { cap_next_bp (&cf[1], &bpread[1]); update_stats(&bpread[1], stats[1]); } for (int m = m2; m >= 0; m--) unroll_packets (cf, bpread, stats, pr, m, 1);
return; return;
} }
@ -82,8 +89,8 @@ void reconstruct_action(struct cap_file cf[], struct pkt_reconstruct* pr, GHashT
pr->r = PREC_DROP; pr->r = PREC_DROP;
pr->diff_0 = m2; pr->diff_0 = m2;
pr->diff_1 = m1; pr->diff_1 = m1;
while (m2-- >= 0) { cap_next_bp (&cf[0], &bpread[0]); update_stats(&bpread[0], stats[0]); } for (int m = m2; m >= 0; m--) unroll_packets (cf, bpread, stats, pr, m, 0);
while (m1-- >= 0) { cap_next_bp (&cf[1], &bpread[1]); update_stats(&bpread[1], stats[1]); } for (int m = m1; m >= 0; m--) unroll_packets (cf, bpread, stats, pr, m, 1);
return; return;
} }
} }