--- gvpe/src/vpn_dns.C 2005/03/17 22:24:31 1.36 +++ gvpe/src/vpn_dns.C 2005/04/26 00:55:56 1.39 @@ -16,9 +16,13 @@ You should have received a copy of the GNU General Public License along with gvpe; if not, write to the Free Software - Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +// TODO: EDNS0 option to increase dns mtu? +// TODO: re-write dns packet parsing/creation using a safe mem-buffer +// to ensure no buffer overflows or similar problems. + #include "config.h" #if ENABLE_DNS @@ -49,16 +53,11 @@ #define MAX_POLL_INTERVAL 5. // how often to poll minimally when the server has no data #define ACTIVITY_INTERVAL 5. -#define TIMEOUT_FACTOR 8. - #define INITIAL_TIMEOUT 0.1 // retry timeouts #define INITIAL_SYN_TIMEOUT 2. // retry timeout for initial syn -#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_WINDOW 1000 // max. for MAX_OUTSTANDING, and backlog #define MAX_BACKLOG (64*1024) // size of gvpe protocol backlog (bytes), must be > MAXSIZE @@ -1035,11 +1034,11 @@ if (latency < dns->min_latency) dns->min_latency = latency; - if (dns->send_interval > dns->min_latency * LATENCY_FACTOR) - dns->send_interval = dns->min_latency * LATENCY_FACTOR; + if (dns->send_interval > dns->min_latency * conf.dns_overlap_factor) + dns->send_interval = dns->min_latency * conf.dns_overlap_factor; - if (dns->send_interval < MIN_SEND_INTERVAL) - dns->send_interval = MIN_SEND_INTERVAL; + if (dns->send_interval < conf.dns_send_interval) + dns->send_interval = conf.dns_send_interval; } delete *i; @@ -1230,7 +1229,7 @@ send = r; r->retry++; - r->timeout = NOW + (r->retry * min_latency * TIMEOUT_FACTOR); + r->timeout = NOW + (r->retry * min_latency * conf.dns_timeout_factor); // the following code changes the query section a bit, forcing // the forwarder to generate a new request @@ -1259,7 +1258,7 @@ send->gen_syn_req (); } } - else if (vpn->dns_sndpq.size () < MAX_OUTSTANDING + else if (vpn->dns_sndpq.size () < conf.dns_max_outstanding && !SEQNO_EQ (rcvseq, sndseq - (MAX_WINDOW - 1))) { if (last_sent + send_interval <= NOW) @@ -1273,7 +1272,7 @@ send = new dns_snd (this); send->gen_stream_req (sndseq, snddq); - send->timeout = NOW + min_latency * TIMEOUT_FACTOR; + send->timeout = NOW + min_latency * conf.dns_timeout_factor; sndseq = (sndseq + 1) & SEQNO_MASK; } @@ -1299,6 +1298,7 @@ rcvpq.size ()); // TODO: no idea when this happens, but when next < NOW, we have a problem + // doesn't seem to happen anymore if (next < NOW + 0.001) next = NOW + 0.1;