X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=greproxy.cpp;h=79db570b60c8a733e9e3cf36b4825ababa4465ba;hb=0d7a8406547587b7b1adad9374b4f4985f49dd84;hp=fa116b63da7e7175774b584a9751e5c130f3e463;hpb=41f85eb875bcdadec4d6766ae93022ca233eaccf;p=greproxy diff --git a/greproxy.cpp b/greproxy.cpp index fa116b6..79db570 100644 --- a/greproxy.cpp +++ b/greproxy.cpp @@ -1,18 +1,14 @@ +#include +#include #include -#include #include +#include #include -#include -#include - -#include -#include -#include #include "greprotocol.h" -#include "protocol.h" #include "reorderer.h" -#include "tunprotocol.h" +#include "rsencoder.h" +#include "pacer.h" using namespace std; @@ -32,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(); } }