#include "utils.h"
#include "xalloc.h"
+#ifndef MIN
+#define MIN(x, y) (((x)<(y))?(x):(y))
+#endif
+
int maxoutbufsize = 0;
int mtu_info_interval = 5;
int udp_info_interval = 5;
if(2.0 * c->outbuf.len / (float)maxoutbufsize - 1 > (float)rand()/(float)RAND_MAX)
return true;
- if(!send_request(c, "%d %hd", PACKET, packet->len))
+ if(!send_request(c, "%d %d", PACKET, packet->len))
return false;
return send_meta(c, (char *)DATA(packet), packet->len);
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 %d", 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) {
farther than the static relay. */
to = (to->via == myself) ? to->nexthop : to->via;
+ if (to == NULL) {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Something went wrong when selecting relay - possible fake UDP_INFO");
+ return false;
+ }
+
/* Skip cases where sending UDP info messages doesn't make sense.
This is done here in order to avoid repeating the same logic in multiple callsites. */