# provide a http server { < net .alg .bufferedEpollServer "^" via < { "request unconfigured (of rawHttpServer)" die } /request deffst { = }' /set deffst { scope keys }' /setters deffst { _ ^settings .installSetters =*install setters { _ { set }_ -01 install }" each } /installSetters deffst > _ ==settings "::" via { -10 deffst }' ::installSetters { ":" via "" ==url "" ==method < { defvst }' /put deffst > ==headers < { :close } _ =*err =*end { ==inBuffer { inBuffer "\n" regex } { [ { inBuffer len 2048 gt } { "" =inBuffer :close } { inBuffer "^(GET|POST) ([^\r\n]*) HTTP/\\d\\.\\d\r?\n(.*)" regex } { =method =url =inBuffer } { inBuffer "^([^:\r\n]+): ([^\r\n]*)\r?\n(.*)" regex } { headers .put =inBuffer } { inBuffer "^\r?\n(.*)" regex } { =inBuffer method url headers < ==headers ==url ==method { :close } =*close { :write } =*write { :finish } =*finish { ==contentType "HTTP/1.0 200 Ok\r\nContent-Type: " contentType cat "\r\n\r\n" cat -01 cat :write :finish } =*ok { ==contentType "HTTP/1.0 500 Error\r\nContent-Type: " contentType cat "\r\n\r\n" cat -01 cat :write :finish } =*fail > ::request } { 1 } { "HTTP/1.0 400 Error\r\nContent-Type: text/html\r\n\r\nCould not parse request\r\n" :write :finish } ] conds } loop inBuffer } =*in > } ^accept { { ^run } { _ .?close { .close } { ??!' } ? * } ?!io.net } /run deffst > } /rawHttpServer net .alg .deff { < net .alg .rawHttpServer "^" via ^settings "::" via < { "request unconfigured (of httpServer)" die } /request deffst { = }' /set deffst { scope keys }' /setters deffst { _ ^settings .installSetters =*install setters { _ { set }_ -01 install }" each } /installSetters deffst > _ ==settings "::" via { -10 deffst }' ::installSetters { _ ==req ":" via < { defvst }' > ==args { net .alg .uri .percentEncoding .|consume -30*20*1* }_ =*setArg :url _ ==url "^([^?]*)\\?(.*)$" regex { =url "&" str .split { _ ==arg "^([^=]*)=(.*)$" regex not { "" arg } rep setArg } each } rep url args < ==args ==url req >' ::request } ^request { ^run } /run deffst > } /httpServer net .alg .deff # vim: syn=elymas