]> gitweb.factorcode.org Git - factor.git/blob - library/httpd/http-common.factor
CHAR: notation for literal chars, native parser work
[factor.git] / library / httpd / http-common.factor
1 ! :folding=indent:collapseFolds=1:
2
3 ! $Id$
4 !
5 ! Copyright (C) 2003, 2004 Slava Pestov.
6
7 ! Redistribution and use in source and binary forms, with or without
8 ! modification, are permitted provided that the following conditions are met:
9
10 ! 1. Redistributions of source code must retain the above copyright notice,
11 !    this list of conditions and the following disclaimer.
12
13 ! 2. Redistributions in binary form must reproduce the above copyright notice,
14 !    this list of conditions and the following disclaimer in the documentation
15 !    and/or other materials provided with the distribution.
16
17 ! THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 ! INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 ! FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 ! DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 ! PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 ! OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 ! WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 ! OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 IN: httpd
29 USE: combinators
30 USE: format
31 USE: kernel
32 USE: lists
33 USE: logging
34 USE: namespaces
35 USE: parser
36 USE: regexp
37 USE: stack
38 USE: stdio
39 USE: streams
40 USE: strings
41 USE: unparser
42
43 USE: url-encoding
44
45 : response ( msg content-type -- response )
46     swap <% "HTTP/1.0 " % % "\nContent-Type: " % % "\n" % %> ;
47
48 : response-write ( msg content-type -- )
49     response print ;
50
51 : error-body ( error -- body )
52     "\n<html><body><h1>" swap "</h1></body></html>" cat3 ;
53
54 : httpd-error ( error -- )
55     dup log-error
56     [ "text/html" response ] [ error-body ] cleave
57     cat2
58     print ;
59
60 : read-header-iter ( alist -- alist )
61     read dup "" = [
62         drop
63     ] [
64         "(.+?): (.+)" groups [ uncons car cons swons ]  when*
65         read-header-iter
66     ] ifte ;
67
68 : read-header ( -- alist )
69     [ ] read-header-iter ;
70
71 : content-length ( alist -- length )
72     "Content-Length" swap assoc parse-number ;
73
74 : read-post-request ( -- string )
75     read-header content-length dup [ read# url-decode ] when ;