]> git.sesse.net Git - greproxy/blobdiff - greprotocol.cpp
Merge branch 'master' of /srv/git.sesse.net/www/greproxy
[greproxy] / greprotocol.cpp
index 5fd4e4b8262a69be62098fb41524a2b228b7602f..6f3513039ed67e00706bd2458cab0970c0cb3764 100644 (file)
@@ -43,9 +43,15 @@ GREProtocol::GREProtocol(const in6_addr &src, const in6_addr &dst)
                perror("bind");
                exit(1);
        }
+
+       int buf = 10 << 20;  // 20 MB.
+       if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &buf, sizeof(buf)) == -1) {
+               perror("setsockopt(SO_RCVBUF)");
+               exit(1);
+       }
 }
 
-void GREProtocol::send_packet(uint16_t proto, const string &data, int incoming_seq)
+void GREProtocol::send_packet(uint16_t proto, const string &data, uint32_t incoming_seq)
 {
        char buf[4096];
        gre_header *gre = (gre_header *)buf;
@@ -56,7 +62,7 @@ void GREProtocol::send_packet(uint16_t proto, const string &data, int incoming_s
        gre->protocol_type = htons(proto);
 
        char *ptr = buf + sizeof(*gre);
-       int seq_be = htonl(incoming_seq);
+       uint32_t seq_be = htonl(incoming_seq);
        memcpy(ptr, &seq_be, sizeof(seq_be));
        ptr += sizeof(seq_be);
 
@@ -66,6 +72,8 @@ void GREProtocol::send_packet(uint16_t proto, const string &data, int incoming_s
                perror("sendto");
                return;
        }
+
+       ++sent_packets;
 }
 
 int GREProtocol::fd() const
@@ -108,6 +116,7 @@ void GREProtocol::read_packet(Sender *sender)
 
        //printf("gre packet: proto=%x\n", ntohs(gre->protocol_type));
 
+       ++received_packets;
        sender->send_packet(ntohs(gre->protocol_type), string(ptr, buf + ret), seq);
 }