From 05c3c82e3c0bce204686a30c8c68a0e6dafe5f65 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 29 May 2008 05:17:13 -0500 Subject: [PATCH 1/5] newfx: index --- extra/newfx/newfx.factor | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/extra/newfx/newfx.factor b/extra/newfx/newfx.factor index abe0449d06..e017dc4b2b 100644 --- a/extra/newfx/newfx.factor +++ b/extra/newfx/newfx.factor @@ -170,6 +170,11 @@ METHOD: as-mutate { object object assoc } set-at ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +: index ( seq obj -- i ) swap sequences:index ; +: index-of ( obj seq -- i ) sequences:index ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : 1st 0 at ; : 2nd 1 at ; : 3rd 2 at ; From 188fab8f003cac11a5d0df17469e688ba2907552 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 29 May 2008 05:17:30 -0500 Subject: [PATCH 2/5] dns: move some words to dns --- extra/dns/cache/cache.factor | 28 ++++++++++++++++++++++++++++ extra/dns/dns.factor | 7 ++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/extra/dns/cache/cache.factor b/extra/dns/cache/cache.factor index aeba35f29d..4167c7b16e 100644 --- a/extra/dns/cache/cache.factor +++ b/extra/dns/cache/cache.factor @@ -119,3 +119,31 @@ ERROR: name-error name ; : cache-add-rr ( rr -- ) [ rr->query ] [ ] bi cache-add ; : cache-add-rrs ( rrs -- ) [ cache-add-rr ] each ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! cache-name-error +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: message-soa ( message -- rr/soa ) + authority-section>> [ type>> SOA = ] filter 1st ; + +: cache-name-error ( message -- message ) + dup + [ message-query ] [ message-soa ttl>> ] bi + cache-nx ; + +: cache-message-records ( message -- message ) + dup + { + [ answer-section>> cache-add-rrs ] + [ authority-section>> cache-add-rrs ] + [ additional-section>> cache-add-rrs ] + } + cleave ; + +: cache-message ( message -- message ) + dup rcode>> NAME-ERROR = [ cache-name-error ] when + cache-message-records ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + diff --git a/extra/dns/dns.factor b/extra/dns/dns.factor index f10bdea0bf..9404ccdad1 100644 --- a/extra/dns/dns.factor +++ b/extra/dns/dns.factor @@ -470,4 +470,9 @@ SYMBOLS: NO-ERROR FORMAT-ERROR SERVER-FAILURE NAME-ERROR NOT-IMPLEMENTED : ask ( message -- message ) dns-server ask-server ; -: ( query -- message ) swap {1} >>question-section ; \ No newline at end of file +: query->message ( query -- message ) swap {1} >>question-section ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: message-query ( message -- query ) question-section>> 1st ; + From a109d10b3df78961f596f9f1c68b199ffda473e0 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 29 May 2008 05:17:55 -0500 Subject: [PATCH 3/5] dns.recursive: Try out an optimized name->ip/server --- extra/dns/recursive/recursive.factor | 67 +++++++++++++++------------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/extra/dns/recursive/recursive.factor b/extra/dns/recursive/recursive.factor index 6fe8ec96da..3a74667845 100644 --- a/extra/dns/recursive/recursive.factor +++ b/extra/dns/recursive/recursive.factor @@ -2,6 +2,7 @@ USING: kernel continuations combinators sequences + math random unicode.case accessors symbols @@ -28,30 +29,6 @@ IN: dns.recursive ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: cache-message ( message -- message ) - dup dup rcode>> NAME-ERROR = - [ - [ question-section>> 1st ] - [ authority-section>> [ type>> SOA = ] filter random ttl>> ] - bi - cache-nx - ] - [ - { - [ answer-section>> cache-add-rrs ] - [ authority-section>> cache-add-rrs ] - [ additional-section>> cache-add-rrs ] - } - cleave - ] - if ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: query->message ( query -- message ) ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - : {name-type-class} ( obj -- seq ) [ name>> >lower ] [ type>> ] [ class>> ] tri {3} ; @@ -61,10 +38,6 @@ IN: dns.recursive ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: message-query ( message -- query ) question-section>> 1st ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - : answer-hits ( message -- rrs ) [ answer-section>> ] [ message-query ] bi rr-filter ; @@ -110,7 +83,7 @@ DEFER: name->ip ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: recursive-query ( query servers -- message ) +: (recursive-query) ( query servers -- message ) dup random ! query servers server pick query->message 0 >>rd ! query servers server message over ask-server ! query servers server message @@ -128,20 +101,39 @@ DEFER: name->ip remove ! message query servers dup empty? [ 2drop ] - [ rot drop recursive-query ] + [ rot drop (recursive-query) ] if ] } [ ! query servers server message sym drop nip nip ! query message extract-ns-ips ! query ips - recursive-query + (recursive-query) ] } case ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +: cdr-name ( name -- name ) dup CHAR: . index 1+ tail ; + +: cache-get-ns ( name -- seq/f ) NS IN query boa cache-get ; + +: name->servers ( name -- servers ) + { + { [ dup "" = ] [ drop root-dns-servers ] } + { [ dup cache-get-ns ] [ cache-get-ns [ rdata>> name->ip ] map ] } + { [ t ] [ cdr-name name->servers ] } + } + cond ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: recursive-query ( query -- message ) + dup name>> name->servers (recursive-query) ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : canonical/cache ( name -- name ) dup CNAME IN query boa cache-get dup [ nip 1st rdata>> ] [ drop ] if ; @@ -154,8 +146,19 @@ DEFER: name->ip : name-hits? ( message -- message ? ) dup name-hits empty? not ; : cname-hits? ( message -- message ? ) dup cname-hits empty? not ; +! : name->ip/server ( name -- ip-or-f ) +! A IN query boa root-dns-servers recursive-query ! message +! { +! { [ name-hits? ] [ name-hits random rdata>> ] } +! { [ cname-hits? ] [ cname-hits random rdata>> name->ip ] } +! { [ t ] [ drop f ] } +! } +! cond ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + : name->ip/server ( name -- ip-or-f ) - A IN query boa root-dns-servers recursive-query ! message + A IN query boa recursive-query ! message { { [ name-hits? ] [ name-hits random rdata>> ] } { [ cname-hits? ] [ cname-hits random rdata>> name->ip ] } From 3bd5144f2030284c9e38e7f373880d765519d2f8 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 29 May 2008 10:11:12 -0500 Subject: [PATCH 4/5] dns.resolver: minor fix --- extra/dns/resolver/resolver.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/dns/resolver/resolver.factor b/extra/dns/resolver/resolver.factor index c8a9f22d08..7e0f6b4190 100644 --- a/extra/dns/resolver/resolver.factor +++ b/extra/dns/resolver/resolver.factor @@ -62,7 +62,7 @@ IN: dns.resolver ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : canonical/server ( name -- name ) - dup CNAME IN query boa ask* answer-section>> + dup CNAME IN query boa query->message ask* answer-section>> [ type>> CNAME = ] filter dup empty? not [ nip 1st rdata>> ] [ drop ] From a8cdb2226d7b78e12e02336f619fcef2f26440b3 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Thu, 29 May 2008 10:11:54 -0500 Subject: [PATCH 5/5] dns.resolver: another fix --- extra/dns/resolver/resolver.factor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/dns/resolver/resolver.factor b/extra/dns/resolver/resolver.factor index 7e0f6b4190..38fe59dc41 100644 --- a/extra/dns/resolver/resolver.factor +++ b/extra/dns/resolver/resolver.factor @@ -70,7 +70,7 @@ IN: dns.resolver : name->ip/server ( name -- ip ) canonical/server - dup A IN query boa ask* answer-section>> + dup A IN query boa query->message ask* answer-section>> [ type>> A = ] filter dup empty? not [ nip random rdata>> ] [ 2drop f ]