]> git.sesse.net Git - greproxy/blobdiff - tungre.cpp
Unbreak pacing in tungre.
[greproxy] / tungre.cpp
index 6b4ffb876c4b455314721edee14c10869c22057f..55bd973602b888bbf57e5e5c63ce8c399667c422 100644 (file)
@@ -1,19 +1,15 @@
+#include <arpa/inet.h>
+#include <netinet/in.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <map>
-#include <string>
-#include <queue>
+#include <sys/select.h>
+#include <sys/socket.h>
 
 #include "greprotocol.h"
-#include "protocol.h"
 #include "reorderer.h"
 #include "tunprotocol.h"
+#include "rsdecoder.h"
+#include "pacer.h"
 
 using namespace std;
 
@@ -31,26 +27,32 @@ int main(int argc, char **argv)
        in6_addr myaddr = get_addr(argv[1]);
        in6_addr remoteaddr = get_addr(argv[2]);
        GREProtocol gre(myaddr, remoteaddr);
+       Pacer gre_pacer(&gre, 40000, 6);
        TUNProtocol tun("tungre");
 
-       Reorderer tun_reorderer(&tun);
+       Pacer tun_pacer(&tun, 40000, 6);
+       Reorderer tun_reorderer(&tun_pacer);
+       RSDecoder tun_decoder(&tun_reorderer);
 
        fd_set fds;
        FD_ZERO(&fds);
        for ( ;; ) {
+               timeval tv = { 1, 0 };
                FD_SET(gre.fd(), &fds);
                FD_SET(tun.fd(), &fds);
-               int ret = select(1024, &fds, NULL, NULL, NULL);
+               tun_pacer.possibly_adjust_tv(&tv);
+               int ret = select(1024, &fds, NULL, NULL, &tv);
                if (ret == -1) {
                        perror("select");
                        continue;
                }
 
                if (FD_ISSET(gre.fd(), &fds)) {
-                       gre.read_packet(&tun_reorderer);
+                       gre.read_packet(&tun_decoder);
                }
                if (FD_ISSET(tun.fd(), &fds)) {
-                       tun.read_packet(&gre);
+                       tun.read_packet(&gre_pacer);
                }
+               tun_pacer.possibly_flush_packets();
        }
 }