diff --git a/extra/dns/forwarding/forwarding.factor b/extra/dns/forwarding/forwarding.factor index 5da04e25b6..1c60532bbc 100644 --- a/extra/dns/forwarding/forwarding.factor +++ b/extra/dns/forwarding/forwarding.factor @@ -2,10 +2,12 @@ USING: kernel combinators vectors + sequences io.sockets accessors + combinators.lib newfx - dns dns.cache ; + dns dns.cache dns.misc ; IN: dns.forwarding @@ -17,7 +19,10 @@ IN: dns.forwarding : socket ( -- socket ) (socket) 1st ; -: init-socket ( -- ) f 5353 0 (socket) as-mutate ; +: init-socket-on-port ( port -- ) + f swap 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 ; +: 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 ) - { - { [ dup type>> CNAME = ] [ cache-get* ] } - { - [ dup clone CNAME >>type cache-get* vector? ] - [ - dup clone CNAME >>type cache-get* 1st ! query rr/cname - dup rdata>> ! query rr/cname cname - >r swap clone r> ! rr/cname query cname - >>name ! rr/cname query - query->answer/cache ! rr/cname rrs/NX/f - { - { [ dup vector? ] [ clone push-on ] } - { [ dup NX = ] [ nip ] } - { [ dup f = ] [ nip ] } - } - cond + dup cache-get* dup { [ rrs? ] [ NX = ] } 1|| + [ nip ] + [ + drop + dup clone CNAME >>type cache-get* dup { [ NX = ] [ f = ] } 1|| + [ nip ] + [ ! query rrs + tuck ! rrs query rrs + 1st ! rrs query rr/cname + rdata>> ! rrs query name + >r clone r> >>name ! rrs query + query->answer/cache ! rrs rrs/NX/f + dup rrs? [ append ] [ nip ] if ] - } - { [ t ] [ cache-get* ] } - } - cond ; + if + ] + if ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -88,4 +100,10 @@ IN: dns.forwarding message->ba ! addr-spec byte-array swap ! byte-array addr-spec socket send - loop ; \ No newline at end of file + loop ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +: start ( -- ) init-socket init-upstream-server loop ; + +MAIN: start \ No newline at end of file