X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=greproxy.cpp;h=79db570b60c8a733e9e3cf36b4825ababa4465ba;hb=HEAD;hp=030ea1f335da90ea4a9b3704db8d9cd8e7e151f5;hpb=47f75fc7569e504a94a601cb3a81793400b134ac;p=greproxy diff --git a/greproxy.cpp b/greproxy.cpp index 030ea1f..79db570 100644 --- a/greproxy.cpp +++ b/greproxy.cpp @@ -7,6 +7,8 @@ #include "greprotocol.h" #include "reorderer.h" +#include "rsencoder.h" +#include "pacer.h" using namespace std; @@ -26,25 +28,36 @@ int main(int argc, char **argv) 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(); } }