X-Git-Url: https://git.sesse.net/?p=greproxy;a=blobdiff_plain;f=greprotocol.cpp;h=6f3513039ed67e00706bd2458cab0970c0cb3764;hp=5fd4e4b8262a69be62098fb41524a2b228b7602f;hb=HEAD;hpb=02120e9414a6e613b17d6284891593271659b5d9 diff --git a/greprotocol.cpp b/greprotocol.cpp index 5fd4e4b..6f35130 100644 --- a/greprotocol.cpp +++ b/greprotocol.cpp @@ -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); }