]> git.sesse.net Git - greproxy/blobdiff - greproxy.cpp
Merge branch 'master' of /srv/git.sesse.net/www/greproxy
[greproxy] / greproxy.cpp
index fa116b63da7e7175774b584a9751e5c130f3e463..79db570b60c8a733e9e3cf36b4825ababa4465ba 100644 (file)
@@ -1,18 +1,14 @@
+#include <arpa/inet.h>
+#include <netinet/in.h>
 #include <stdio.h>
-#include <string.h>
 #include <stdlib.h>
+#include <sys/select.h>
 #include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-
-#include <map>
-#include <string>
-#include <queue>
 
 #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();
        }
 }