--- gvpe/src/vpn_dns.C 2005/03/12 18:10:40 1.27 +++ gvpe/src/vpn_dns.C 2005/03/14 17:40:01 1.30 @@ -46,22 +46,21 @@ #include "vpn.h" -#define MIN_POLL_INTERVAL .02 // how often to poll minimally when the server has data -#define MAX_POLL_INTERVAL 6. // how often to poll minimally when the server has no data +#define MAX_POLL_INTERVAL 5. // how often to poll minimally when the server has no data #define ACTIVITY_INTERVAL 5. #define INITIAL_TIMEOUT 0.1 // retry timeouts #define INITIAL_SYN_TIMEOUT 10. // retry timeout for initial syn -#define MIN_SEND_INTERVAL 0.01 // wait at least this time between sending requests +#define MIN_SEND_INTERVAL 0.001 // wait at least this time between sending requests #define MAX_SEND_INTERVAL 2. // optimistic? #define LATENCY_FACTOR 0.5 // RTT * LATENCY_FACTOR == sending rate -#define MAX_OUTSTANDING 40 // max. outstanding requests +#define MAX_OUTSTANDING 2 // max. outstanding requests #define MAX_WINDOW 1000 // max. for MAX_OUTSTANDING, and backlog #define MAX_BACKLOG (100*1024) // size of gvpe protocol backlog (bytes), must be > MAXSIZE -#define MAX_DOMAIN_SIZE 200 // 255 is legal limit, but bind doesn't compress well +#define MAX_DOMAIN_SIZE 240 // 255 is legal limit, but bind doesn't compress well // 240 leaves about 4 bytes of server reply data // every two request bytes less give room for one reply byte @@ -426,7 +425,8 @@ u8 req_cdc; u8 rep_cdc; - u8 r2, r3, r4; + u8 delay; // time in 0.01s units that the server may delay replying packets + u8 r3, r4; u8 r5, r6, r7, r8; @@ -454,8 +454,9 @@ max_size = htons (MAX_PKT_SIZE); client = htons (clientid); uid = next_uid++; + delay = 0; - r2 = r3 = r4 = 0; + r3 = r4 = 0; r4 = r5 = r6 = r7 = 0; } @@ -731,7 +732,7 @@ rcvseq = sndseq = 0; last_sent = last_received = 0; - poll_interval = MIN_POLL_INTERVAL; + poll_interval = 0.5; // starting here send_interval = 0.5; // starting rate min_latency = INITIAL_TIMEOUT; } @@ -1240,24 +1241,24 @@ NEXT (r->timeout); } - if (send || (last_sent + send_interval <= NOW)) + if (!send) { - if (!send) - { - // generate a new packet, if wise + // generate a new packet, if wise - if (!established) + if (!established) + { + if (vpn->dns_sndpq.empty ()) { - if (vpn->dns_sndpq.empty ()) - { - send = new dns_snd (this); + send = new dns_snd (this); - cfg.reset (THISNODE->id); - send->gen_syn_req (); - } + cfg.reset (THISNODE->id); + send->gen_syn_req (); } - else if (vpn->dns_sndpq.size () < MAX_OUTSTANDING - && !SEQNO_EQ (rcvseq, sndseq - (MAX_WINDOW - 1))) + } + else if (vpn->dns_sndpq.size () < MAX_OUTSTANDING + && !SEQNO_EQ (rcvseq, sndseq - (MAX_WINDOW - 1))) + { + if (last_sent + send_interval <= NOW) { //printf ("sending data request etc.\n"); //D if (!snddq.empty () || last_received + 1. > NOW) @@ -1272,21 +1273,21 @@ sndseq = (sndseq + 1) & SEQNO_MASK; } - - if (send && !send->retry) - vpn->dns_sndpq.push_back (send); + else + NEXT (last_sent + send_interval); } if (send) - { - last_sent = NOW; - sendto (vpn->dnsv4_fd, - send->pkt->at (0), send->pkt->len, 0, - vpn->dns_forwarder.sav4 (), vpn->dns_forwarder.salenv4 ()); - } + vpn->dns_sndpq.push_back (send); + } + + if (send) + { + last_sent = NOW; + sendto (vpn->dnsv4_fd, + send->pkt->at (0), send->pkt->len, 0, + vpn->dns_forwarder.sav4 (), vpn->dns_forwarder.salenv4 ()); } - else - NEXT (last_sent + send_interval); slog (L_NOISE, "DNS: pi %f si %f N %f (%d:%d %d)", poll_interval, send_interval, next - NOW, @@ -1294,7 +1295,7 @@ rcvpq.size ()); // TODO: no idea when this happens, but when next < NOW, we have a problem - if (next < NOW + 0.0001) + if (next < NOW + 0.001) next = NOW + 0.1; w.start (next);