--- gvpe/src/vpn_dns.C 2005/03/13 12:33:34 1.28 +++ gvpe/src/vpn_dns.C 2005/03/14 17:40:01 1.30 @@ -46,18 +46,17 @@ #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 100 // 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 @@ -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; } @@ -1242,22 +1243,22 @@ if (!send) { - if (last_sent + send_interval <= NOW) - { - // 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,12 +1273,12 @@ sndseq = (sndseq + 1) & SEQNO_MASK; } - - if (send) - vpn->dns_sndpq.push_back (send); + else + NEXT (last_sent + send_interval); } - else - NEXT (last_sent + send_interval); + + if (send) + vpn->dns_sndpq.push_back (send); } if (send) @@ -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);