#include "greprotocol.h"
#include "reorderer.h"
+#include "rsencoder.h"
+#include "pacer.h"
using namespace std;
in6_addr myaddr = get_addr(argv[3]);
GREProtocol gre_a(myaddr, addr_a);
GREProtocol gre_b(myaddr, addr_b);
- Reorderer dst_a(&gre_a);
- Reorderer dst_b(&gre_b);
+ Pacer pacer_a(&gre_a, 40000, 6);
+ Pacer pacer_b(&gre_b, 40000, 6);
+ RSEncoder rs_a(&pacer_a);
+ RSEncoder rs_b(&pacer_b);
+ Reorderer reorder_a(&rs_a);
+ Reorderer reorder_b(&rs_b);
fd_set fds;
FD_ZERO(&fds);
for ( ;; ) {
+ timeval tv = { 1, 0 };
FD_SET(gre_a.fd(), &fds);
FD_SET(gre_b.fd(), &fds);
- int ret = select(1024, &fds, NULL, NULL, NULL);
+ pacer_a.possibly_adjust_tv(&tv);
+ pacer_b.possibly_adjust_tv(&tv);
+ reorder_a.possibly_adjust_tv(&tv);
+ reorder_b.possibly_adjust_tv(&tv);
+ int ret = select(1024, &fds, NULL, NULL, &tv);
if (ret == -1) {
perror("select");
continue;
}
if (FD_ISSET(gre_a.fd(), &fds)) {
- gre_a.read_packet(&dst_b);
+ gre_a.read_packet(&reorder_b);
}
if (FD_ISSET(gre_b.fd(), &fds)) {
- gre_b.read_packet(&dst_a);
+ gre_b.read_packet(&reorder_a);
}
+ pacer_a.possibly_flush_packets();
+ pacer_b.possibly_flush_packets();
}
}