X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol_misc.c;h=6e24274205bd10990bc49c4a1e49d1af4ac0b68d;hb=23fda4db6d1bb400a97f6d2a07d9b700f9546129;hp=6fedc0823b86785224b64a845484ff5c5b4f2ee5;hpb=f500a3d4e6e51ea1d88235e89e494ecb8f71ba5b;p=tinc diff --git a/src/protocol_misc.c b/src/protocol_misc.c index 6fedc082..6e242742 100644 --- a/src/protocol_misc.c +++ b/src/protocol_misc.c @@ -153,6 +153,36 @@ bool tcppacket_h(connection_t *c, const char *request) { return true; } +bool send_sptps_tcppacket(connection_t *c, const char* packet, int len) { + /* If there already is a lot of data in the outbuf buffer, discard this packet. + We use a very simple Random Early Drop algorithm. */ + + if(2.0 * c->outbuf.len / (float)maxoutbufsize - 1 > (float)rand()/(float)RAND_MAX) + return true; + + if(!send_request(c, "%d %hd", SPTPS_PACKET, len)) + return false; + + send_meta_raw(c, packet, len); + return true; +} + +bool sptps_tcppacket_h(connection_t *c, const char* request) { + short int len; + + if(sscanf(request, "%*d %hd", &len) != 1) { + logger(DEBUG_ALWAYS, LOG_ERR, "Got bad %s from %s (%s)", "SPTPS_PACKET", c->name, + c->hostname); + return false; + } + + /* Set sptpslen to len, this will tell receive_meta() that a SPTPS packet is coming. */ + + c->sptpslen = len; + + return true; +} + /* Transmitting UDP information */ bool send_udp_info(node_t *from, node_t *to) {