]> git.sesse.net Git - greproxy/blobdiff - greproxy.cpp
Merge branch 'master' of /srv/git.sesse.net/www/greproxy
[greproxy] / greproxy.cpp
index 127e0a6c72f51f717cc02cc3eb84a84877877f27..79db570b60c8a733e9e3cf36b4825ababa4465ba 100644 (file)
@@ -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();
        }
 }