From 285c34696f85b8d2840b9399c9ba7801e248a490 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 16 Jun 2008 16:28:49 -0500 Subject: [PATCH 1/4] dns: minor addition --- extra/dns/dns.factor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/extra/dns/dns.factor b/extra/dns/dns.factor index 48380a0d57..214b45ce0c 100644 --- a/extra/dns/dns.factor +++ b/extra/dns/dns.factor @@ -424,6 +424,10 @@ SYMBOLS: NO-ERROR FORMAT-ERROR SERVER-FAILURE NAME-ERROR NOT-IMPLEMENTED } 2cleave message boa ; +: ba->message ( ba -- message ) parse-message ; + +: with-message-bytes ( ba quot -- ) >r ba->message r> call message->ba ; inline + ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! : send-receive-udp ( ba server -- ba ) From e60f25fe2b01ed56e42a1ae40bcb479cd6423084 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 16 Jun 2008 16:29:11 -0500 Subject: [PATCH 2/4] dns.util: packet abstraction --- extra/dns/util/util.factor | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extra/dns/util/util.factor b/extra/dns/util/util.factor index 5933216a3c..35af74b92a 100644 --- a/extra/dns/util/util.factor +++ b/extra/dns/util/util.factor @@ -16,4 +16,15 @@ MACRO: 1if ( test then else -- ) '[ dup @ , , if ] ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: longer? ( seq seq -- ? ) [ length ] bi@ > ; \ No newline at end of file +: longer? ( seq seq -- ? ) [ length ] bi@ > ; + +! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +USING: io.sockets accessors ; + +TUPLE: packet data addr socket ; + +: receive-packet ( socket -- packet ) [ receive ] keep packet boa ; + +: respond ( packet -- ) [ data>> ] [ addr>> ] [ socket>> ] tri send ; + From aa1708d0b586d29b1500a2ea24f0770b91993119 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 16 Jun 2008 16:29:49 -0500 Subject: [PATCH 3/4] dns.server: new networking code --- extra/dns/server/server.factor | 38 ++++++++-------------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/extra/dns/server/server.factor b/extra/dns/server/server.factor index b556780805..3d59f0c3a6 100644 --- a/extra/dns/server/server.factor +++ b/extra/dns/server/server.factor @@ -1,6 +1,6 @@ -USING: kernel combinators sequences sets math threads - io.sockets unicode.case accessors +USING: kernel combinators sequences sets math threads namespaces continuations + debugger io io.sockets unicode.case accessors destructors combinators.cleave combinators.lib newfx fry dns dns.util dns.misc ; @@ -193,34 +193,14 @@ DEFER: query->rrs ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: (socket) ( -- vec ) V{ f } ; +: (handle-request) ( packet -- ) + [ [ find-answer ] with-message-bytes ] change-data respond ; -: socket ( -- socket ) (socket) 1st ; +: handle-request ( packet -- ) [ (handle-request) ] curry in-thread ; -: init-socket-on-port ( port -- ) - f swap 0 (socket) as-mutate ; +: receive-loop ( socket -- ) + [ receive-packet handle-request ] [ receive-loop ] bi ; -: init-socket ( -- ) 53 init-socket-on-port ; +: loop ( addr-spec -- ) + [ '[ , [ receive-loop ] with-disposal ] try ] [ loop ] bi ; -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: (handle-request) ( byte-array addr-spec -- ) - >r - parse-message - find-answer - message->ba - r> - socket send ; - -: handle-request ( byte-array addr-spec -- ) - '[ , , (handle-request) ] in-thread ; - -: loop ( -- ) socket receive handle-request loop ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -: start ( -- ) init-socket loop ; - -! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -MAIN: start From 61fb8a538eb515d12c1b03b8af2a6c5b17fe43e8 Mon Sep 17 00:00:00 2001 From: Eduardo Cavazos Date: Mon, 16 Jun 2008 16:37:52 -0500 Subject: [PATCH 4/4] dns.server: Use a variable for records --- extra/dns/server/server.factor | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extra/dns/server/server.factor b/extra/dns/server/server.factor index 3d59f0c3a6..04b3ecfbee 100644 --- a/extra/dns/server/server.factor +++ b/extra/dns/server/server.factor @@ -9,7 +9,9 @@ IN: dns.server ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -: records ( -- vector ) V{ } ; +SYMBOL: records-var + +: records ( -- records ) records-var get ; ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!