summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortv <tv@also>2010-07-14 14:04:47 +0200
committertv <tv@also>2010-07-14 14:04:47 +0200
commit70cc941643ccd3824091443df008bfda7765a2f9 (patch)
treebe336dbdeda49fb067876ea2fba63f838324dfaa
htgen-plain: initial commit
-rwxr-xr-xhtgen-plain94
1 files changed, 94 insertions, 0 deletions
diff --git a/htgen-plain b/htgen-plain
new file mode 100755
index 0000000..659576f
--- /dev/null
+++ b/htgen-plain
@@ -0,0 +1,94 @@
+#! /bin/sh
+# vim:set fdm=marker:
+set -euf
+
+Server='htgen-plain/1.0'
+
+## htgen --serve {{{
+case $# in
+ (1)
+ case "$1" in
+ (--serve)
+ HTGEN_HOST="${HTGEN_HOST-0.0.0.0}"
+ HTGEN_PORT="${HTGEN_PORT-42380}"
+ TCPSERVER_OPTS='-c 423 -t 2 -D'
+ echo "#### $Server $HTGEN_HOST:$HTGEN_PORT" >&2
+ exec tcpserver $TCPSERVER_OPTS "$HTGEN_HOST" "$HTGEN_PORT" "$0"
+ ## this should not happen...
+ exit 23
+ esac
+esac
+## }}}
+
+## reply_404 {{{
+reply_404() {
+ cat<<EOF
+HTTP/1.0 404 Not Found
+Content-Type: text/plain; charset=UTF-8
+Server: $Server
+Connection: close
+Content-Length: 0
+
+EOF
+}
+## }}}
+
+## date. {{{
+#date=`date --rfc-3339=ns`
+date="`date '+%Y-%m-%d %H:%M:%S'`"
+cat>&2<<EOF
+
+# ${TCPREMOTEHOST-}[$TCPREMOTEIP]:$TCPREMOTEPORT connected at $date over $PROTO
+EOF
+## }}}
+## Parse Request-Line. {{{
+read Request_Line
+eval "$(echo "$Request_Line" | sed -rn '
+ s^([a-zA-Z]+) ([a-zA-Z0-9?&+*/.-]+) HTTP/([0-9]+\.[0-9]+)\r$\
+ Request_Line="&"\
+ Method="\1"\
+ Request_URI="\2"\
+ HTTP_Version="\3"\
+ p;t;i\
+ Request_Line= # invalid request
+')"
+#echo "Request-Line: $Request_Line" >&2
+# cat>&2<<EOF
+# Request_Line='$Request_Line'
+# Method='$Method'
+# Request_URI='$Request_URI'
+# HTTP_Version='$HTTP_Version'
+# EOF
+
+## debug
+cat>&2<<EOF
+$Method $Request_URI HTTP/$HTTP_Version
+EOF
+## }}}
+## Parse HTTP-Headers. {{{
+HTTP_Headers="`sed -rn 's/ $//;/^$/q;p'`"
+
+## debug
+echo "$HTTP_Headers" | sed -r 's/.*/^&$/' >&2
+
+## Parse HTTP_Headers into Variables.
+eval "$(
+echo "$HTTP_Headers" | sed -r '
+ ## TODO concatenate lines
+ /^[^:]+-[^:]+:/s/^([a-zA-Z-]+):[[:space:]]*([^'\'']*)*$/\
+ x=`echo \1 | tr - _`; \
+ echo $x=\\'\'''\''\2'\''\\'\''\\;;\
+ echo HTTP_Header_Variables=\\\${HTTP_Header_Variables+\\\$HTTP_Header_Variables:}$x\\;;\
+ /;t
+ s/^([a-zA-Z]+):[[:space:]]*([^'\'']*)*$/\
+ echo \1=\\'\'''\''\2'\''\\'\''\\;;\
+ echo HTTP_Header_Variables=\\\${HTTP_Header_Variables+\\\$HTTP_Header_Variables:}\1\\;;\
+ /;t
+ s/^.*/# &/
+ '| sh)" >&2
+
+echo >&2
+## }}}
+
+reply_404
+exit