dns.forwarding: Refactor a bit. Add a main.

db4
Eduardo Cavazos 2008-06-01 10:47:23 -05:00
parent 34ba89025b
commit 904f91298e
1 changed files with 41 additions and 23 deletions

View File

@ -2,10 +2,12 @@
USING: kernel USING: kernel
combinators combinators
vectors vectors
sequences
io.sockets io.sockets
accessors accessors
combinators.lib
newfx newfx
dns dns.cache ; dns dns.cache dns.misc ;
IN: dns.forwarding IN: dns.forwarding
@ -17,7 +19,10 @@ IN: dns.forwarding
: socket ( -- socket ) (socket) 1st ; : socket ( -- socket ) (socket) 1st ;
: init-socket ( -- ) f 5353 <inet4> <datagram> 0 (socket) as-mutate ; : init-socket-on-port ( port -- )
f swap <inet4> <datagram> 0 (socket) as-mutate ;
: init-socket ( -- ) 53 init-socket-on-port ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -27,30 +32,37 @@ IN: dns.forwarding
: set-upstream-server ( ip -- ) 0 (upstream-server) as-mutate ; : set-upstream-server ( ip -- ) 0 (upstream-server) as-mutate ;
: init-upstream-server ( -- )
upstream-server not
[ resolv-conf-server set-upstream-server ]
when ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: 1&& <-&& ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: rrs? ( obj -- ? ) { [ NX = not ] [ f = not ] } 1&& ;
: query->answer/cache ( query -- rrs/NX/f ) : query->answer/cache ( query -- rrs/NX/f )
{ dup cache-get* dup { [ rrs? ] [ NX = ] } 1||
{ [ dup type>> CNAME = ] [ cache-get* ] } [ nip ]
{ [
[ dup clone CNAME >>type cache-get* vector? ] drop
[ dup clone CNAME >>type cache-get* dup { [ NX = ] [ f = ] } 1||
dup clone CNAME >>type cache-get* 1st ! query rr/cname [ nip ]
dup rdata>> ! query rr/cname cname [ ! query rrs
>r swap clone r> ! rr/cname query cname tuck ! rrs query rrs
>>name ! rr/cname query 1st ! rrs query rr/cname
query->answer/cache ! rr/cname rrs/NX/f rdata>> ! rrs query name
{ >r clone r> >>name ! rrs query
{ [ dup vector? ] [ clone push-on ] } query->answer/cache ! rrs rrs/NX/f
{ [ dup NX = ] [ nip ] } dup rrs? [ append ] [ nip ] if
{ [ dup f = ] [ nip ] }
}
cond
] ]
} if
{ [ t ] [ cache-get* ] } ]
} if ;
cond ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -89,3 +101,9 @@ IN: dns.forwarding
swap ! byte-array addr-spec swap ! byte-array addr-spec
socket send socket send
loop ; loop ;
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
: start ( -- ) init-socket init-upstream-server loop ;
MAIN: start