X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=tungre.cpp;h=fb39982e9f8c216016b9ca2e4784718812497167;hb=8382a720affa71d054eba6761473e7b9fcfb725a;hp=6b4ffb876c4b455314721edee14c10869c22057f;hpb=53c480e8b42d1257f99acf0d9a8d47f4aae8690d;p=greproxy diff --git a/tungre.cpp b/tungre.cpp index 6b4ffb8..fb39982 100644 --- a/tungre.cpp +++ b/tungre.cpp @@ -1,19 +1,15 @@ +#include +#include #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 "rsdecoder.h" +#include "pacer.h" using namespace std; @@ -31,26 +27,33 @@ 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_reorderer.possibly_adjust_tv(&tv); + 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(); } }