X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=greproxy.cpp;h=79db570b60c8a733e9e3cf36b4825ababa4465ba;hb=HEAD;hp=127e0a6c72f51f717cc02cc3eb84a84877877f27;hpb=02120e9414a6e613b17d6284891593271659b5d9;p=greproxy diff --git a/greproxy.cpp b/greproxy.cpp index 127e0a6..79db570 100644 --- a/greproxy.cpp +++ b/greproxy.cpp @@ -8,6 +8,7 @@ #include "greprotocol.h" #include "reorderer.h" #include "rsencoder.h" +#include "pacer.h" using namespace std; @@ -27,17 +28,24 @@ 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); - RSEncoder rs_a(&gre_a); - RSEncoder rs_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; @@ -49,5 +57,7 @@ int main(int argc, char **argv) if (FD_ISSET(gre_b.fd(), &fds)) { gre_b.read_packet(&reorder_a); } + pacer_a.possibly_flush_packets(); + pacer_b.possibly_flush_packets(); } }